From 3a088c8b28d6a4e22b7e82c2a19d46aa31853da1 Mon Sep 17 00:00:00 2001 From: Dinh-Van Colomban Date: Wed, 20 Nov 2024 23:08:14 +0100 Subject: [PATCH] feat(input): switch to translate instead of absolute --- demo/components/DemoInputs.svelte | 14 ++-- src/lib/input/NeoInput.svelte | 124 +++++++++++++++++------------- src/lib/styles/common/colors.scss | 4 +- 3 files changed, 81 insertions(+), 61 deletions(-) diff --git a/demo/components/DemoInputs.svelte b/demo/components/DemoInputs.svelte index 4d09015..34b5655 100644 --- a/demo/components/DemoInputs.svelte +++ b/demo/components/DemoInputs.svelte @@ -80,19 +80,20 @@ }, { - label: 'Label', + label: 'Floating', props: { - label, + label: 'Floating', placeholder: 'Placeholder', + floating: true, prefix, suffix, suffixProps: { onclick }, }, }, { - label: 'Floating', + label: 'Label', props: { - label: 'Floating', + label, placeholder: 'Placeholder', floating: true, prefix, @@ -171,7 +172,10 @@ {#snippet label()} - Custom label Snippet +
+
Custom snippet label
+
With multiple lines
+
{/snippet} {#snippet text()} diff --git a/src/lib/input/NeoInput.svelte b/src/lib/input/NeoInput.svelte index 411c41c..8633893 100644 --- a/src/lib/input/NeoInput.svelte +++ b/src/lib/input/NeoInput.svelte @@ -137,6 +137,15 @@ const affix = $derived(clearable || loading !== undefined); const close = $derived(clearable && (focused || hovered) && value?.length && !rest?.disabled && !rest?.readonly); + const isFloating = $derived(floating && !focused && !value?.length); + + let labelRef = $state(); + let labelHeight = $state(); + + $effect(() => { + if (!labelRef || !floating) return; + labelHeight = `${labelRef?.clientHeight ?? 0}px`; + }); const context: NeoInputContext = $derived({ // Ref @@ -249,8 +258,8 @@ > {@render before()} {#if label} -
-