enzostvs's picture
enzostvs HF staff
migration in svelte
de2d4cd
raw
history blame
2.17 kB
<script lang="ts">
import Icon from '@iconify/svelte';
export let tooltip: string | undefined = undefined;
export let label: string;
export let subLabel: string | undefined = undefined;
export let type: "text" | "number" = "text"
export let value: string | number;
export let min: number | undefined = undefined;
export let max: number | undefined = undefined;
let clazz: string | undefined = undefined;
export { clazz as class };
export let placeholder: string | undefined = undefined;
export let sanitize: undefined | ((value: string | number) => string | number) = undefined;
export let onChange: (value: string | number) => void;
const handleInputChange = (event: any) => {
const newValue = event.target.value;
if (type === "number" && /^[0-9]*$/.test(newValue)) {
return onChange(newValue)
}
return onChange(newValue)
};
const handleBlur = (event: any) => {
const newValue = event.target.value;
if (sanitize) return onChange(sanitize(newValue))
}
</script>
<div class={`w-full relative ${clazz}`}>
<div class="flex items-center justify-start gap-2 relative mb-2.5">
{#if tooltip}
<div class="group cursor-pointer">
<Icon icon="lucide:info" class="text-slate-500 group-hover:text-slate-300 text-xl" />
<div class="bg-slate-950/90 z-10 rounded-xl p-3 text-white absolute text-xs left-0 bottom-0 translate-y-[calc(100%+8px)] opacity-0 transition-all duration-200 group-hover:opacity-100 pointer-events-none group-hover:pointer-events-auto">
{tooltip}
</div>
</div>
{/if}
<p class="font-sans text-slate-400 font-regular text-sm">
{label}:
</p>
</div>
{#if subLabel} <p class="text-slate-500 text-xs mb-2.5">{subLabel}</p>{/if}
<input
type={type}
value={value}
min={min}
max={max}
placeholder={placeholder}
class="shadow-inner font-code border border-slate-800 bg-slate-900/60 focus:bg-slate-900/90 focus:border-slate-700/80 text-white rounded-lg text-sm px-4 py-3.5 w-full transition-all duration-200 leading-relaxed outline-none"
on:input={handleInputChange}
on:blur={handleBlur}
/>
</div>