{#each line.text.split('') as char, charIndex}
{@const { proximity, isPast } = charComparison.getCharState(charIndex, sliderPos, lineElements[index], container)}
@@ -158,8 +167,8 @@ $effect(() => {
{char}
{proximity}
{isPast}
- weight={weightControl.value}
- size={sizeControl.value}
+ weight={typography.weight}
+ size={typography.renderedSize}
fontAName={fontA.name}
fontBName={fontB.name}
/>
@@ -180,14 +189,14 @@ $effect(() => {
aria-label="Font comparison slider"
onpointerdown={startDragging}
class="
- group relative w-full py-16 px-24 sm:py-24 sm:px-24 overflow-hidden
- rounded-[2.5rem]
- select-none touch-none cursor-ew-resize min-h-100 flex flex-col justify-center
- backdrop-blur-lg bg-gradient-to-br from-gray-100/70 via-white/50 to-gray-100/60
+ group relative w-full py-8 px-4 sm:py-12 sm:px-8 md:py-16 md:px-12 lg:py-20 lg:px-24 overflow-hidden
+ rounded-xl sm:rounded-2xl md:rounded-[2.5rem]
+ select-none touch-none cursor-ew-resize min-h-72 sm:min-h-96 flex flex-col justify-center
+ backdrop-blur-lg bg-linear-to-br from-gray-100/70 via-white/50 to-gray-100/60
border border-gray-300/40
shadow-[inset_0_4px_12px_0_rgba(0,0,0,0.12),inset_0_2px_4px_0_rgba(0,0,0,0.08),0_1px_2px_0_rgba(255,255,255,0.8)]
- before:absolute before:inset-0 before:rounded-[2.5rem] before:p-[1px]
- before:bg-gradient-to-br before:from-black/5 before:via-black/2 before:to-transparent
+ before:absolute before:inset-0 before:rounded-xl sm:before:rounded-2xl md:before:rounded-[2.5rem] before:p-px
+ before:bg-linear-to-br before:from-black/5 before:via-black/2 before:to-transparent
before:-z-10 before:blur-sm
"
>
@@ -197,8 +206,8 @@ $effect(() => {
{:else}
{
{#each charComparison.lines as line, lineIndex}
{
{/if}
-
- {#if fontA && fontB && !isLoading}
-
-
-
- {/if}
+
+
diff --git a/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/Controls.svelte b/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/Controls.svelte
new file mode 100644
index 0000000..61051b2
--- /dev/null
+++ b/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/Controls.svelte
@@ -0,0 +1,71 @@
+
+
+{#if responsive.isMobile}
+
+ {#snippet trigger({ isOpen, onClick })}
+
+ {#snippet icon({ className })}
+
+ {/snippet}
+
+ {/snippet}
+
+ {#snippet content({ isOpen, className })}
+
+
+
+
+ {/snippet}
+
+{:else}
+ {#if !isLoading}
+
+
+
+ {/if}
+
+ {#if !isLoading}
+
+
+
+ {/if}
+{/if}
diff --git a/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/ControlsWrapper.svelte b/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/ControlsWrapper.svelte
deleted file mode 100644
index 7dd0fe7..0000000
--- a/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/ControlsWrapper.svelte
+++ /dev/null
@@ -1,177 +0,0 @@
-
-
-
-
diff --git a/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/Labels.svelte b/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/Labels.svelte
deleted file mode 100644
index 71f0f53..0000000
--- a/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/Labels.svelte
+++ /dev/null
@@ -1,157 +0,0 @@
-
-
-
-{#snippet fontSelector(
- name: string,
- id: string,
- url: string,
- fonts: UnifiedFont[],
- selectFont: (font: UnifiedFont) => void,
- align: 'start' | 'end',
-)}
-
e.stopPropagation())}
- in:fade={{ duration: 300, delay: 300 }}
- out:fade={{ duration: 300, delay: 300 }}
- >
-
-
-
-
- {name}
-
-
-
-
-
-
- {#snippet children({ item: font })}
- {@const handleClick = () => selectFont(font)}
-
-
- {font.name}
-
-
- {/snippet}
-
-
-
-
-
-{/snippet}
-
-
-
-
- {@render fontSelector(
- fontB.name,
- fontB.id,
- fontB.styles.regular!,
- fontList,
- selectFontB,
- 'start',
-)}
-
-
-
80 ? 0 : 1}
- style:transform="translateY({sliderPos > 80 ? '8px' : '0px'})"
- >
-
- {@render fontSelector(
- fontA.name,
- fontA.id,
- fontA.styles.regular!,
- fontList,
- selectFontA,
- 'end',
-)}
-
-
diff --git a/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/SelectComparedFonts.svelte b/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/SelectComparedFonts.svelte
new file mode 100644
index 0000000..15ea996
--- /dev/null
+++ b/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/SelectComparedFonts.svelte
@@ -0,0 +1,147 @@
+
+
+
+{#snippet fontSelector(
+ font: UnifiedFont,
+ fonts: UnifiedFont[],
+ url: string,
+ onSelect: (f: UnifiedFont) => void,
+ align: 'start' | 'end',
+)}
+
e.stopPropagation())}
+ in:fade={{ duration: 300, delay: 300 }}
+ out:fade={{ duration: 300, delay: 300 }}
+ >
+
+
+
+
+ {font.name}
+
+
+
+
+
+
+ {#snippet children({ item: fontListItem })}
+ {@const handleClick = () => onSelect(fontListItem)}
+
+
+ {fontListItem.name}
+
+
+ {/snippet}
+
+
+
+
+
+{/snippet}
+
+
+
+
+ {#if fontB && fontBUrl}
+ {@render fontSelector(fontB, fontList, fontBUrl, selectFontB, 'start')}
+ {/if}
+
+
+
80 ? 0 : 1}
+ style:transform="translateY({sliderPos > 80 ? '8px' : '0px'})"
+ >
+
+ {#if fontA && fontAUrl}
+ {@render fontSelector(fontA, fontList, fontAUrl, selectFontA, 'end')}
+ {/if}
+
+
diff --git a/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/SliderLine.svelte b/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/SliderLine.svelte
index fbb2e52..99c79e0 100644
--- a/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/SliderLine.svelte
+++ b/src/widgets/ComparisonSlider/ui/ComparisonSlider/components/SliderLine.svelte
@@ -18,14 +18,14 @@ interface Props {
let { sliderPos, isDragging }: Props = $props();
@@ -55,7 +55,7 @@ let { sliderPos, isDragging }: Props = $props();