feat(FontSearch): add IconButton instead of regular Button and delete unused code
This commit is contained in:
@@ -1,22 +1,21 @@
|
|||||||
<!--
|
<!--
|
||||||
Component: FontSearch
|
Component: FontSearch
|
||||||
|
Provides a search input and filtration for fonts
|
||||||
Combines search input with font list display
|
|
||||||
-->
|
-->
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { unifiedFontStore } from '$entities/Font';
|
import { unifiedFontStore } from '$entities/Font';
|
||||||
import {
|
import {
|
||||||
FilterControls,
|
FilterControls,
|
||||||
Filters,
|
Filters,
|
||||||
SuggestedFonts,
|
|
||||||
filterManager,
|
filterManager,
|
||||||
mapManagerToParams,
|
mapManagerToParams,
|
||||||
} from '$features/GetFonts';
|
} from '$features/GetFonts';
|
||||||
import { springySlideFade } from '$shared/lib';
|
import { springySlideFade } from '$shared/lib';
|
||||||
import { Button } from '$shared/shadcn/ui/button';
|
|
||||||
import { cn } from '$shared/shadcn/utils/shadcn-utils';
|
import { cn } from '$shared/shadcn/utils/shadcn-utils';
|
||||||
import { SearchBar } from '$shared/ui';
|
import {
|
||||||
|
IconButton,
|
||||||
|
SearchBar,
|
||||||
|
} from '$shared/ui';
|
||||||
import SlidersHorizontalIcon from '@lucide/svelte/icons/sliders-horizontal';
|
import SlidersHorizontalIcon from '@lucide/svelte/icons/sliders-horizontal';
|
||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { cubicOut } from 'svelte/easing';
|
import { cubicOut } from 'svelte/easing';
|
||||||
@@ -27,11 +26,13 @@ import {
|
|||||||
import { type SlideParams } from 'svelte/transition';
|
import { type SlideParams } from 'svelte/transition';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
/**
|
||||||
|
* Controllable flag to show/hide filters (bindable)
|
||||||
|
*/
|
||||||
showFilters?: boolean;
|
showFilters?: boolean;
|
||||||
isOpen?: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let { showFilters = $bindable(false), isOpen = $bindable(false) }: Props = $props();
|
let { showFilters = $bindable(false) }: Props = $props();
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
/**
|
/**
|
||||||
@@ -72,33 +73,22 @@ function toggleFilters() {
|
|||||||
placeholder="search_typefaces..."
|
placeholder="search_typefaces..."
|
||||||
label="query_input"
|
label="query_input"
|
||||||
bind:value={filterManager.queryValue}
|
bind:value={filterManager.queryValue}
|
||||||
bind:isOpen
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="absolute right-4 top-1/2 translate-y-[-50%] z-10">
|
<div class="absolute right-4 top-1/2 translate-y-[-50%] z-10">
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<div class="w-px h-5 bg-gray-300/60"></div>
|
<div class="w-px h-5 bg-gray-300/60"></div>
|
||||||
<div style:transform="scale({transform.current.scale})">
|
<div style:transform="scale({transform.current.scale})">
|
||||||
<Button
|
<IconButton onclick={toggleFilters}>
|
||||||
class={cn(
|
{#snippet icon({ className })}
|
||||||
'w-9 h-9 rounded-lg flex items-center justify-center',
|
|
||||||
'transition-all duration-200',
|
|
||||||
'hover:bg-gray-100',
|
|
||||||
showFilters
|
|
||||||
? 'bg-gray-100 ring-1 ring-gray-300/50'
|
|
||||||
: 'bg-transparent',
|
|
||||||
)}
|
|
||||||
variant="ghost"
|
|
||||||
size="icon"
|
|
||||||
onclick={toggleFilters}
|
|
||||||
>
|
|
||||||
<SlidersHorizontalIcon
|
<SlidersHorizontalIcon
|
||||||
class={cn(
|
class={cn(
|
||||||
'size-4 transition-colors duration-200',
|
className,
|
||||||
showFilters ? 'stroke-gray-900' : 'stroke-gray-500',
|
showFilters ? 'stroke-gray-900 stroke-3' : 'stroke-gray-500',
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
</Button>
|
{/snippet}
|
||||||
|
</IconButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user