2024-02-27 04:07:49 +01:00
|
|
|
<script lang="ts">
|
2024-11-14 08:43:25 -06:00
|
|
|
interface Props {
|
2024-02-27 04:07:49 +01:00
|
|
|
type: 'date' | 'datetime-local';
|
2024-11-14 08:43:25 -06:00
|
|
|
value?: string;
|
|
|
|
|
min?: string;
|
|
|
|
|
max?: string;
|
|
|
|
|
class?: string;
|
|
|
|
|
id?: string;
|
|
|
|
|
name?: string;
|
|
|
|
|
placeholder?: string;
|
2024-02-27 04:07:49 +01:00
|
|
|
}
|
|
|
|
|
|
2024-11-14 08:43:25 -06:00
|
|
|
let { type, value = $bindable(), max = undefined, ...rest }: Props = $props();
|
2024-06-21 22:05:17 +02:00
|
|
|
|
2024-11-14 08:43:25 -06:00
|
|
|
let fallbackMax = $derived(type === 'date' ? '9999-12-31' : '9999-12-31T23:59');
|
2024-03-06 12:47:15 +01:00
|
|
|
|
|
|
|
|
// Updating `value` directly causes the date input to reset itself or
|
|
|
|
|
// interfere with user changes.
|
2024-11-14 08:43:25 -06:00
|
|
|
let updatedValue = $state<string>();
|
|
|
|
|
$effect(() => {
|
|
|
|
|
updatedValue = value;
|
|
|
|
|
});
|
2024-02-27 04:07:49 +01:00
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<input
|
2024-11-14 08:43:25 -06:00
|
|
|
{...rest}
|
2024-06-21 22:05:17 +02:00
|
|
|
{type}
|
2024-02-27 04:07:49 +01:00
|
|
|
{value}
|
2024-06-21 22:05:17 +02:00
|
|
|
max={max || fallbackMax}
|
2024-11-14 08:43:25 -06:00
|
|
|
oninput={(e) => (updatedValue = e.currentTarget.value)}
|
|
|
|
|
onblur={() => (value = updatedValue)}
|
|
|
|
|
onkeydown={(e) => {
|
2024-05-21 18:58:57 +02:00
|
|
|
if (e.key === 'Enter') {
|
|
|
|
|
value = updatedValue;
|
|
|
|
|
}
|
|
|
|
|
}}
|
2024-02-27 04:07:49 +01:00
|
|
|
/>
|