immich/web/src/lib/components/shared-components/number-range-input.svelte
Snowknight26 225af973c1
fix(web): Prevent changing asset location triggering keyboard shortcuts (#21451)
fix(web): Prevent changing asset location triggering asset keyboard shortcuts
2025-08-30 13:39:25 -05:00

55 lines
1.0 KiB
Svelte

<script lang="ts">
import { clamp } from 'lodash-es';
import type { ClipboardEventHandler, KeyboardEventHandler } from 'svelte/elements';
interface Props {
id: string;
min: number;
max: number;
step?: number | string;
required?: boolean;
value?: number;
onInput: (value: number | null) => void;
onPaste?: ClipboardEventHandler<HTMLInputElement>;
onKeyDown?: KeyboardEventHandler<HTMLInputElement>;
}
let {
id,
min,
max,
step = 'any',
required = true,
value = $bindable(),
onInput,
onPaste = undefined,
onKeyDown = undefined,
}: Props = $props();
const oninput = () => {
// value can be 0
if (value === undefined) {
return;
}
if (value !== null && (value < min || value > max)) {
value = clamp(value, min, max);
}
onInput(value);
};
</script>
<input
type="number"
class="immich-form-input w-full"
{id}
{min}
{max}
{step}
{required}
bind:value
{oninput}
onpaste={onPaste}
onkeydown={onKeyDown}
/>