From 4adedd96eef28cabbcfd64dc0adff87a309b963a Mon Sep 17 00:00:00 2001 From: trev Date: Sun, 16 Mar 2025 10:32:18 -0400 Subject: [PATCH] feat: date picker --- client/src/lib/ui/DateRangePicker.svelte | 141 +++++++++++++++++++++ client/src/routes/(app)/items/+page.svelte | 15 ++- 2 files changed, 154 insertions(+), 2 deletions(-) create mode 100644 client/src/lib/ui/DateRangePicker.svelte diff --git a/client/src/lib/ui/DateRangePicker.svelte b/client/src/lib/ui/DateRangePicker.svelte new file mode 100644 index 0000000..6b69fc6 --- /dev/null +++ b/client/src/lib/ui/DateRangePicker.svelte @@ -0,0 +1,141 @@ + + + { + if (v.start && v.end) { + start = v.start.toDate(getLocalTimeZone()); + end = v.end.toDate(getLocalTimeZone()); + if (onchange) { + onchange(start, end); + } + } + }} +> +
+ + {#each ['start', 'end'] as const as type} + + {#snippet children({ segments })} + {#each segments as { part, value }} +
+ {#if part === 'literal'} + + {value} + + {:else} + + {value} + + {/if} +
+ {/each} + {/snippet} +
+ {#if type === 'start'} + + {/if} + {/each} + + + +
+ + {#snippet child({ props, open })} + {#if open} +
+ + {#snippet children({ months, weekdays })} + + + + + + + + + +
+ {#each months as month} + + + + {#each weekdays as day} + + {day.slice(0, 2)} + + {/each} + + + + {#each month.weeks as weekDates} + + {#each weekDates as date} + + + + {date.day} + + + {/each} + + {/each} + + + {/each} +
+ {/snippet} +
+
+ {/if} + {/snippet} +
+
diff --git a/client/src/routes/(app)/items/+page.svelte b/client/src/routes/(app)/items/+page.svelte index 2ef2739..6e8923f 100644 --- a/client/src/routes/(app)/items/+page.svelte +++ b/client/src/routes/(app)/items/+page.svelte @@ -1,11 +1,12 @@ +
+ + +
+