+ {#key isEmptyScreen}
+
+ {/key}
+
+
+
-
-
-
diff --git a/src/shared/ui/SearchBar/SearchBar.svelte b/src/shared/ui/SearchBar/SearchBar.svelte
index 9edfc86..09abb16 100644
--- a/src/shared/ui/SearchBar/SearchBar.svelte
+++ b/src/shared/ui/SearchBar/SearchBar.svelte
@@ -17,30 +17,46 @@ import { useId } from 'bits-ui';
import type { Snippet } from 'svelte';
interface Props {
- /** Unique identifier for the input element */
+ /**
+ * Unique identifier for the input element
+ */
id?: string;
- /** Current search value (bindable) */
+ /**
+ * Current search value (bindable)
+ */
value: string;
- /** Additional CSS classes for the container */
+ /**
+ * Whether popover is open (bindable)
+ */
+ isOpen?: boolean;
+ /**
+ * Additional CSS classes for the container
+ */
class?: string;
- /** Placeholder text for the input */
+ /**
+ * Placeholder text for the input
+ */
placeholder?: string;
- /** Optional label displayed above the input */
+ /**
+ * Optional label displayed above the input
+ */
label?: string;
- /** Content to render inside the popover (receives unique content ID) */
+ /**
+ * Content to render inside the popover (receives unique content ID)
+ */
children: Snippet<[{ id: string }]> | undefined;
}
let {
id = 'search-bar',
- value = $bindable(),
+ value = $bindable(''),
+ isOpen = $bindable(false),
class: className,
placeholder,
label,
children,
}: Props = $props();
-let open = $state(false);
let triggerRef = $state
(null!);
// svelte-ignore state_referenced_locally
const contentId = useId(id);
@@ -52,11 +68,11 @@ function handleKeyDown(event: KeyboardEvent) {
}
function handleInputClick() {
- open = true;
+ isOpen = true;
}
-
+
{#snippet child({ props })}
{@const { onclick, ...rest } = props}
diff --git a/src/widgets/ComparisonSlider/ui/ComparisonSlider/FontShifter.svelte b/src/widgets/ComparisonSlider/ui/ComparisonSlider/FontShifter.svelte
new file mode 100644
index 0000000..03135fd
--- /dev/null
+++ b/src/widgets/ComparisonSlider/ui/ComparisonSlider/FontShifter.svelte
@@ -0,0 +1,52 @@
+
+
+
+ {#each chars as char, i}
+
+ {char}
+
+ {/each}
+
+
+
diff --git a/src/widgets/FontSearch/ui/FontSearch/FontSearch.svelte b/src/widgets/FontSearch/ui/FontSearch/FontSearch.svelte
index 3a53119..10a0ae5 100644
--- a/src/widgets/FontSearch/ui/FontSearch/FontSearch.svelte
+++ b/src/widgets/FontSearch/ui/FontSearch/FontSearch.svelte
@@ -27,9 +27,10 @@ import { type SlideParams } from 'svelte/transition';
interface Props {
showFilters?: boolean;
+ isOpen?: boolean;
}
-let { showFilters = $bindable(false) }: Props = $props();
+let { showFilters = $bindable(false), isOpen = $bindable(false) }: Props = $props();
onMount(() => {
/**
@@ -68,6 +69,7 @@ function toggleFilters() {
class="w-full"
placeholder="Search fonts by name..."
bind:value={filterManager.queryValue}
+ bind:isOpen
>
diff --git a/src/widgets/TypographySettings/ui/TypographyMenu.svelte b/src/widgets/TypographySettings/ui/TypographyMenu.svelte
index 8437736..f384493 100644
--- a/src/widgets/TypographySettings/ui/TypographyMenu.svelte
+++ b/src/widgets/TypographySettings/ui/TypographyMenu.svelte
@@ -24,7 +24,7 @@ const [send, receive] = crossfade({
{#if displayedFontsStore.hasAnyFonts}