From 6ba37c9e4a2af275bf31e6cc9ced530849296169 Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Sun, 15 Feb 2026 23:15:50 +0300 Subject: [PATCH] feat(ComparisonSlider): add perspective manager and tweak styles --- .../ComparisonSlider/ComparisonSlider.svelte | 192 +++++++++++------- 1 file changed, 118 insertions(+), 74 deletions(-) diff --git a/src/widgets/ComparisonSlider/ui/ComparisonSlider/ComparisonSlider.svelte b/src/widgets/ComparisonSlider/ui/ComparisonSlider/ComparisonSlider.svelte index 642c58d..ada646f 100644 --- a/src/widgets/ComparisonSlider/ui/ComparisonSlider/ComparisonSlider.svelte +++ b/src/widgets/ComparisonSlider/ui/ComparisonSlider/ComparisonSlider.svelte @@ -8,17 +8,23 @@ - Character-level morphing: Font changes exactly when the slider passes the character's global position. - Responsive layout with Tailwind breakpoints for font sizing. - Performance optimized using offscreen canvas for measurements and transform-based animations. + + Modes: + - Slider mode: Text centered in 1st plan, controls hidden + - Settings mode: Text moves to left (2nd plan), controls appear on right (1st plan) --> {#snippet renderLine(line: LineData, index: number)} + {@const pos = sliderPos} + {@const element = lineElements[index]}
- {#each line.text.split('') as char, charIndex} - {@const { proximity, isPast } = charComparison.getCharState(charIndex, sliderPos, lineElements[index], container)} + {#each line.text.split('') as char, index} + {@const { proximity, isPast } = charComparison.getCharState(index, pos, element, container)} {#if fontA && fontB} - + {/if} {/each}
@@ -176,59 +199,80 @@ $effect(() => { -
-
- - {#if isLoading} -
- -
- {:else} + +
+ {#if isLoading} +
+ +
+ {:else} + +
- {#each charComparison.lines as line, lineIndex} -
- {@render renderLine(line, lineIndex)} -
- {/each} -
+
+ {#each charComparison.lines as line, lineIndex} +
+ {@render renderLine(line, lineIndex)} +
+ {/each} +
- - {/if} -
- - + + {#if !isInSettingsMode} + + {/if} +
+ + + + {/if}