@k2b/ui 0.19.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/actions/Button.js +20 -31
- package/dist/browser/actions/Button.js.map +1 -1
- package/dist/browser/actions/ContextMenu.js +7 -3
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/CopyButton.js +10 -8
- package/dist/browser/actions/CopyButton.js.map +1 -1
- package/dist/browser/actions/GestureMenu.js +471 -0
- package/dist/browser/actions/GestureMenu.js.map +1 -0
- package/dist/browser/actions/index.js +1 -0
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +3 -41
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js +9 -3
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/ChatTimeline.js +19 -1
- package/dist/browser/chat/ChatTimeline.js.map +1 -1
- package/dist/browser/content/Calendar.js +1951 -565
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/MessageRow.js +2 -2
- package/dist/browser/content/MessageRow.js.map +1 -1
- package/dist/browser/content/calendar-messages.js +83 -0
- package/dist/browser/content/calendar-messages.js.map +1 -0
- package/dist/browser/content/calendar-month-layout.js +108 -0
- package/dist/browser/content/calendar-month-layout.js.map +1 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js +46 -10
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/TextInput.js +13 -1
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/date-picker.js +24 -0
- package/dist/browser/inputs/date-picker.js.map +1 -1
- package/dist/browser/inputs/markdown/actions.js +0 -42
- package/dist/browser/inputs/markdown/actions.js.map +1 -1
- package/dist/browser/intl/messages.js +6 -6
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/ssr/actions/Button.js +21 -32
- package/dist/ssr/actions/Button.js.map +1 -1
- package/dist/ssr/actions/ContextMenu.js +7 -3
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/CopyButton.js +9 -7
- package/dist/ssr/actions/CopyButton.js.map +1 -1
- package/dist/ssr/actions/GestureMenu.js +415 -0
- package/dist/ssr/actions/GestureMenu.js.map +1 -0
- package/dist/ssr/actions/index.js +1 -0
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +3 -41
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +9 -3
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/ChatTimeline.js +19 -1
- package/dist/ssr/chat/ChatTimeline.js.map +1 -1
- package/dist/ssr/content/Calendar.js +1223 -105
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/MessageRow.js +2 -2
- package/dist/ssr/content/MessageRow.js.map +1 -1
- package/dist/ssr/content/calendar-messages.js +83 -0
- package/dist/ssr/content/calendar-messages.js.map +1 -0
- package/dist/ssr/content/calendar-month-layout.js +108 -0
- package/dist/ssr/content/calendar-month-layout.js.map +1 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +34 -4
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/TextInput.js +13 -1
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/date-picker.js +24 -0
- package/dist/ssr/inputs/date-picker.js.map +1 -1
- package/dist/ssr/inputs/markdown/actions.js +0 -42
- package/dist/ssr/inputs/markdown/actions.js.map +1 -1
- package/dist/ssr/intl/messages.js +6 -6
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/GestureMenu.d.ts +37 -0
- package/dist/types/actions/index.d.ts +2 -0
- package/dist/types/chat/ChatComposer.d.ts +4 -1
- package/dist/types/content/Calendar.d.ts +32 -0
- package/dist/types/content/calendar-messages.d.ts +41 -0
- package/dist/types/content/calendar-month-layout.d.ts +52 -0
- package/dist/types/content/index.d.ts +1 -1
- package/dist/types/inputs/date-picker.d.ts +7 -0
- package/dist/types/inputs/markdown/actions.d.ts +0 -2
- package/dist/types/intl/messages.d.ts +3 -3
- package/package.json +2 -2
|
@@ -39,8 +39,8 @@ import { createEffect, createMemo, createSignal, For, onCleanup, onMount, Show }
|
|
|
39
39
|
import { createFieldMeta, Field, fieldControlAria, fieldDescribedBy } from "../internal/field";
|
|
40
40
|
import { returnFocus, ringOnReturn } from "../internal/focus-return";
|
|
41
41
|
import { useDateConfigLocale } from "../intl/locale";
|
|
42
|
-
import { useUiMessages } from "../intl/messages";
|
|
43
|
-
import { dateKey, displayDate, filterTimeInput, formatDateOnlyRangeDuration, formatDateTimeValue, inRange, isCompleteTime, isRangeEdge, monthDate, monthNames, normalizeTimeInput, orderedRange, parseDateValue, pickerContext, previewRange, resolveFocusDay, splitDateTime, toDateTimeValue, yearMonth } from "./date-picker";
|
|
42
|
+
import { resolveUiMessages, useUiMessages } from "../intl/messages";
|
|
43
|
+
import { dateKey, displayDate, filterTimeInput, formatDateOnlyRangeDuration, formatDateTimeValue, inRange, isCompleteTime, isRangeEdge, monthDate, monthNames, msUntilNextDay, normalizeTimeInput, orderedRange, parseDateValue, pickerContext, previewRange, resolveFocusDay, splitDateTime, toDateTimeValue, yearMonth } from "./date-picker";
|
|
44
44
|
import { commitFieldValue, resolveMaybeAccessor } from "./field-contract";
|
|
45
45
|
const popoverIsOpen = popover => {
|
|
46
46
|
if (!popover) return false;
|
|
@@ -346,13 +346,42 @@ function DatePickerPanel(props) {
|
|
|
346
346
|
number: dates.formatDayNumber(day, dateContext)
|
|
347
347
|
})));
|
|
348
348
|
});
|
|
349
|
+
// Today in the picker's time zone, the zone its values use. The browser reads
|
|
350
|
+
// the clock again at the next midnight there, when a hidden tab becomes visible
|
|
351
|
+
// again (timers may not fire on time while the device sleeps), and when the
|
|
352
|
+
// date config changes. The mark and its timer share each reading, so neither
|
|
353
|
+
// starts from an old one.
|
|
354
|
+
const [clockCheck, checkClock] = createSignal(undefined, {
|
|
355
|
+
equals: false
|
|
356
|
+
});
|
|
357
|
+
const now = createMemo(() => {
|
|
358
|
+
clockCheck();
|
|
359
|
+
context();
|
|
360
|
+
return new Date();
|
|
361
|
+
});
|
|
362
|
+
const todayKey = createMemo(() => dateKey(now(), context()));
|
|
363
|
+
// The day's name is formatted in the date locale, so "today" joins it in the same language.
|
|
364
|
+
const todayLabel = date => resolveUiMessages(context().locale).todayDate({
|
|
365
|
+
date
|
|
366
|
+
});
|
|
367
|
+
createEffect(() => {
|
|
368
|
+
const timer = window.setTimeout(() => checkClock(), msUntilNextDay(now(), context()));
|
|
369
|
+
onCleanup(() => window.clearTimeout(timer));
|
|
370
|
+
});
|
|
371
|
+
onMount(() => {
|
|
372
|
+
const refresh = () => {
|
|
373
|
+
if (document.visibilityState === "visible") checkClock();
|
|
374
|
+
};
|
|
375
|
+
document.addEventListener("visibilitychange", refresh);
|
|
376
|
+
onCleanup(() => document.removeEventListener("visibilitychange", refresh));
|
|
377
|
+
});
|
|
349
378
|
let calendar;
|
|
350
379
|
// Days that belong to the visible month; the roving tabindex must land on one
|
|
351
380
|
// of them or the grid becomes unreachable by keyboard after month navigation.
|
|
352
381
|
const monthDayKeys = createMemo(() => dayRows().flat().filter(day => !day.outside).map(day => day.key));
|
|
353
382
|
// Remembers where arrow-key navigation left off so Tab returns to that day.
|
|
354
383
|
const [focusedKey, setFocusedKey] = createSignal();
|
|
355
|
-
const defaultFocus = createMemo(() => resolveFocusDay(monthDayKeys(), focusedKey() || props.focusDate?.() || props.selected?.() ||
|
|
384
|
+
const defaultFocus = createMemo(() => resolveFocusDay(monthDayKeys(), focusedKey() || props.focusDate?.() || props.selected?.() || todayKey()));
|
|
356
385
|
const moveMonth = delta => props.setVisibleMonth(dates.addMonths(props.visibleMonth(), delta, context()));
|
|
357
386
|
const moveYear = delta => props.setVisibleMonth(monthDate(month().year + delta, month().month, context()));
|
|
358
387
|
const previousLabel = () => view() === "days" ? messages().previousMonth : messages().previousYear;
|
|
@@ -480,6 +509,7 @@ function DatePickerPanel(props) {
|
|
|
480
509
|
};
|
|
481
510
|
const active = () => selected() || isRangeEdge(cell.key, range());
|
|
482
511
|
const focusable = () => cell.key === defaultFocus();
|
|
512
|
+
const today = () => cell.key === todayKey();
|
|
483
513
|
return (() => {
|
|
484
514
|
var _el$40 = _$getNextElement(_tmpl$12);
|
|
485
515
|
_el$40.addEventListener("pointerleave", () => props.onDayPreview?.(null));
|
|
@@ -497,16 +527,20 @@ function DatePickerPanel(props) {
|
|
|
497
527
|
_v$11 = focusable() ? "true" : undefined,
|
|
498
528
|
_v$12 = cell.outside ? "true" : undefined,
|
|
499
529
|
_v$13 = inRange(cell.key, range()) && !active() ? "true" : undefined,
|
|
500
|
-
_v$14 =
|
|
501
|
-
_v$15 =
|
|
502
|
-
_v$16 =
|
|
530
|
+
_v$14 = today() ? "true" : undefined,
|
|
531
|
+
_v$15 = today() ? "date" : undefined,
|
|
532
|
+
_v$16 = today() ? todayLabel(cell.label) : cell.label,
|
|
533
|
+
_v$17 = active(),
|
|
534
|
+
_v$18 = focusable() ? 0 : -1;
|
|
503
535
|
_v$10 !== _p$.e && _$setAttribute(_el$40, "data-date-day", _p$.e = _v$10);
|
|
504
536
|
_v$11 !== _p$.t && _$setAttribute(_el$40, "data-date-focus", _p$.t = _v$11);
|
|
505
537
|
_v$12 !== _p$.a && _$setAttribute(_el$40, "data-outside", _p$.a = _v$12);
|
|
506
538
|
_v$13 !== _p$.o && _$setAttribute(_el$40, "data-in-range", _p$.o = _v$13);
|
|
507
|
-
_v$14 !== _p$.i && _$setAttribute(_el$40, "
|
|
508
|
-
_v$15 !== _p$.n && _$setAttribute(_el$40, "aria-
|
|
509
|
-
_v$16 !== _p$.s && _$setAttribute(_el$40, "
|
|
539
|
+
_v$14 !== _p$.i && _$setAttribute(_el$40, "data-today", _p$.i = _v$14);
|
|
540
|
+
_v$15 !== _p$.n && _$setAttribute(_el$40, "aria-current", _p$.n = _v$15);
|
|
541
|
+
_v$16 !== _p$.s && _$setAttribute(_el$40, "aria-label", _p$.s = _v$16);
|
|
542
|
+
_v$17 !== _p$.h && _$setAttribute(_el$40, "aria-selected", _p$.h = _v$17);
|
|
543
|
+
_v$18 !== _p$.r && _$setAttribute(_el$40, "tabindex", _p$.r = _v$18);
|
|
510
544
|
return _p$;
|
|
511
545
|
}, {
|
|
512
546
|
e: undefined,
|
|
@@ -515,7 +549,9 @@ function DatePickerPanel(props) {
|
|
|
515
549
|
o: undefined,
|
|
516
550
|
i: undefined,
|
|
517
551
|
n: undefined,
|
|
518
|
-
s: undefined
|
|
552
|
+
s: undefined,
|
|
553
|
+
h: undefined,
|
|
554
|
+
r: undefined
|
|
519
555
|
});
|
|
520
556
|
_$runHydrationEvents();
|
|
521
557
|
return _el$40;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/DatePicker.tsx"],"sourcesContent":["import { type DateContext, dates } from \"@k2b/stdlib\";\nimport { createEffect, createMemo, createSignal, For, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria, fieldDescribedBy } from \"../internal/field\";\nimport { returnFocus, ringOnReturn } from \"../internal/focus-return\";\nimport { useDateConfigLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport {\n type DateRangeValue,\n dateKey,\n displayDate,\n filterTimeInput,\n formatDateOnlyRangeDuration,\n formatDateTimeValue,\n inRange,\n isCompleteTime,\n isRangeEdge,\n monthDate,\n monthNames,\n normalizeTimeInput,\n orderedRange,\n parseDateValue,\n pickerContext,\n previewRange,\n resolveFocusDay,\n splitDateTime,\n toDateTimeValue,\n yearMonth,\n} from \"./date-picker\";\nimport type { MaybeAccessor, ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport type { ChoiceAppearance } from \"./Select\";\n\nexport type { DateRangeValue } from \"./date-picker\";\n\nexport type DatePreset<T> = {\n label: string;\n value: T;\n};\n\nexport type DurationPreset = {\n label: string;\n minutes: number;\n};\n\nexport type DatePickerBaseProps<T> = Omit<ValueFieldProps<T>, \"value\"> & {\n placeholder?: string;\n value: MaybeAccessor<T>;\n presets?: readonly DatePreset<T>[];\n dateConfig?: DateContext;\n clearable?: boolean;\n /** `plain` shows the value as text for property rows; a clearable picker offers clearing in its panel. */\n appearance?: ChoiceAppearance;\n};\n\nexport type DatePickerProps = DatePickerBaseProps<string | null> & {\n /** Trigger content for a set value, for example the date with a relative hint. */\n renderValue?: (value: string) => JSX.Element;\n};\nexport type DateTimePickerProps = DatePickerBaseProps<string | null> & {\n /** Trigger content for a set value, for example the date and time with a relative hint. */\n renderValue?: (value: string) => JSX.Element;\n};\nexport type DateRangePickerProps = DatePickerBaseProps<DateRangeValue> & {\n withTime?: boolean;\n datePresets?: readonly DatePreset<string | null>[];\n durationPresets?: readonly DurationPreset[];\n};\n\ntype PanelView = \"days\" | \"months\";\n\nconst popoverIsOpen = (popover: HTMLElement | undefined): boolean => {\n if (!popover) return false;\n try {\n return popover.matches(\":popover-open\");\n } catch {\n return false;\n }\n};\n\nexport const placeDatePopover = (trigger: HTMLElement, popover: HTMLElement, wide: boolean): void => {\n const margin = 8;\n const gap = 4;\n const rect = trigger.getBoundingClientRect();\n // Keep the panel at its designed width instead of stretching to a full-width\n // trigger; it only ever shrinks to fit a narrow viewport.\n const preferredWidth = wide ? 440 : 336;\n const width = Math.min(preferredWidth, window.innerWidth - margin * 2);\n popover.style.width = `${width}px`;\n\n const popoverRect = popover.getBoundingClientRect();\n const left = Math.max(margin, Math.min(rect.left, window.innerWidth - width - margin));\n const roomBelow = window.innerHeight - rect.bottom - gap - margin;\n const roomAbove = rect.top - gap - margin;\n const opensAbove = popoverRect.height > roomBelow && roomAbove > roomBelow;\n const top = opensAbove\n ? Math.max(margin, rect.top - popoverRect.height - gap)\n : Math.min(rect.bottom + gap, window.innerHeight - popoverRect.height - margin);\n\n popover.style.left = `${left}px`;\n popover.style.top = `${Math.max(margin, top)}px`;\n};\n\nfunction PickerShell<T>(props: {\n owner: DatePickerBaseProps<T>;\n icon: string;\n valueLabel: () => string;\n valueContent?: () => JSX.Element;\n children: (close: () => void) => JSX.Element;\n clearValue: T;\n onOpen?: () => void;\n footerMeta?: () => JSX.Element;\n wide?: boolean;\n timezone?: string;\n}): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.owner.id);\n const [open, setOpen] = createSignal(false);\n const error = () => resolveMaybeAccessor(props.owner.error);\n let trigger: HTMLButtonElement | undefined;\n let popover: HTMLDivElement | undefined;\n let triggerRing = true;\n\n const place = () => {\n if (trigger && popover && open()) placeDatePopover(trigger, popover, props.wide ?? false);\n };\n\n const close = () => {\n // Before hiding, so the popover does not return focus on its own.\n if (popover?.contains(document.activeElement)) returnFocus(trigger, triggerRing);\n if (popoverIsOpen(popover)) popover?.hidePopover();\n setOpen(false);\n };\n\n const show = () => {\n if (props.owner.disabled || !popover || popoverIsOpen(popover)) return;\n props.onOpen?.();\n triggerRing = ringOnReturn(trigger);\n popover.showPopover();\n setOpen(true);\n queueMicrotask(() => {\n place();\n const initial =\n popover?.querySelector<HTMLElement>('[data-date-focus=\"true\"]') ??\n popover?.querySelector<HTMLElement>('[data-date-day]:not([data-outside=\"true\"])');\n initial?.focus();\n });\n };\n\n const toggle = () => (open() ? close() : show());\n const plain = () => props.owner.appearance === \"plain\";\n const canClear = () => Boolean(props.owner.clearable && props.valueLabel() && !props.owner.disabled);\n const clear = () => {\n close();\n commitFieldValue(props.owner, props.clearValue);\n trigger?.focus();\n };\n\n onMount(() => {\n const syncOpenState = () => setOpen(popoverIsOpen(popover));\n popover?.addEventListener(\"toggle\", syncOpenState);\n onCleanup(() => popover?.removeEventListener(\"toggle\", syncOpenState));\n });\n\n createEffect(() => {\n if (!open()) return;\n window.addEventListener(\"resize\", place);\n window.addEventListener(\"scroll\", place, true);\n onCleanup(() => {\n window.removeEventListener(\"resize\", place);\n window.removeEventListener(\"scroll\", place, true);\n });\n });\n onCleanup(close);\n\n return (\n <Field\n class={props.owner.class}\n label={props.owner.label}\n description={props.owner.description}\n error={error()}\n required={props.owner.required}\n disabled={props.owner.disabled}\n meta={meta}\n >\n <div class=\"k2b-date-picker\" data-appearance={props.owner.appearance ?? \"field\"} data-invalid={error() ? \"true\" : undefined}>\n <button\n ref={trigger}\n id={meta.controlId}\n type=\"button\"\n class=\"k2b-date-trigger\"\n data-placeholder={props.valueLabel() ? undefined : \"true\"}\n data-open={open() ? \"true\" : undefined}\n disabled={props.owner.disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open()}\n aria-controls={`${meta.controlId}-popover`}\n {...fieldControlAria(meta, props.owner)}\n // A button's name replaces its content, so the shown date reaches assistive technology as the description.\n aria-describedby={[fieldDescribedBy(meta, props.owner), `${meta.controlId}-value`].filter(Boolean).join(\" \")}\n onClick={toggle}\n onKeyDown={(event) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n show();\n }\n }}\n >\n <i class={`${props.icon} k2b-date-trigger__icon`} aria-hidden=\"true\" />\n <span id={`${meta.controlId}-value`} class=\"k2b-date-trigger__value\">\n <Show when={props.valueLabel()} fallback={props.owner.placeholder ?? messages().pickDate}>\n {props.valueContent?.() ?? props.valueLabel()}\n </Show>\n </span>\n <i class=\"ti ti-chevron-down k2b-date-trigger__chevron\" aria-hidden=\"true\" />\n </button>\n\n <Show when={canClear() && !plain()}>\n <button\n type=\"button\"\n class=\"k2b-date-trigger__clear k2b-input-clear-action\"\n aria-label={messages().clearDate}\n onClick={(event) => {\n event.stopPropagation();\n clear();\n }}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n\n <div\n ref={popover}\n id={`${meta.controlId}-popover`}\n class=\"k2b-date-popover\"\n popover=\"auto\"\n role=\"dialog\"\n aria-label={typeof props.owner.label === \"string\" ? props.owner.label : messages().datePicker}\n onKeyDown={(event) => {\n if (event.key !== \"Escape\" || event.defaultPrevented) return;\n event.preventDefault();\n close();\n }}\n onToggle={(event) => {\n const nextOpen = event.newState === \"open\";\n setOpen(nextOpen);\n if (nextOpen) queueMicrotask(place);\n }}\n >\n {props.children(close)}\n <Show when={props.footerMeta || props.timezone || (plain() && canClear())}>\n <footer class=\"k2b-date-popover__footer\">\n <span>{props.footerMeta?.()}</span>\n {/* A plain trigger has no room for a clear button beside its value. */}\n <Show when={plain() && canClear()}>\n <button type=\"button\" class=\"k2b-date-popover__clear\" onClick={clear}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n {messages().clearDate}\n </button>\n </Show>\n <Show when={props.timezone}>\n <span class=\"k2b-date-popover__timezone\">\n <i class=\"ti ti-world\" aria-hidden=\"true\" />\n {props.timezone}\n </span>\n </Show>\n </footer>\n </Show>\n </div>\n </div>\n </Field>\n );\n}\n\nfunction PresetRail<T>(props: { presets?: readonly DatePreset<T>[]; onSelect: (value: T) => void }): JSX.Element {\n const messages = useUiMessages();\n return (\n <Show when={props.presets?.length}>\n <aside class=\"k2b-date-presets\" aria-label={messages().datePresets}>\n <For each={props.presets}>\n {(preset) => (\n <button type=\"button\" onClick={() => props.onSelect(preset.value)}>\n {preset.label}\n </button>\n )}\n </For>\n </aside>\n </Show>\n );\n}\n\nfunction DatePickerPanel(props: {\n visibleMonth: () => Date;\n setVisibleMonth: (date: Date) => void;\n selected?: () => string | null | undefined;\n range?: () => DateRangeValue;\n focusDate?: () => string | null | undefined;\n onSelect: (date: string) => void;\n onDayPreview?: (date: string | null) => void;\n dateConfig?: DateContext;\n}): JSX.Element {\n const messages = useUiMessages();\n const [view, setView] = createSignal<PanelView>(\"days\");\n const context = createMemo(() => pickerContext(props.dateConfig));\n const month = createMemo(() => yearMonth(props.visibleMonth(), context()));\n const weeks = createMemo(() => dates.getMonthGrid(month().year, month().month, context()));\n const weekdays = createMemo(() => dates.weekdays(context()));\n const months = createMemo(() => monthNames(context()));\n const dayNameFormatter = createMemo(\n () =>\n new Intl.DateTimeFormat(context().locale, {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n timeZone: context().timeZone,\n }),\n );\n const dayRows = createMemo(() => {\n const visibleMonth = props.visibleMonth();\n const dateContext = context();\n const formatter = dayNameFormatter();\n return weeks().map((week) =>\n week.map((day) => ({\n day,\n key: dates.formatDateKey(day, dateContext),\n outside: !dates.isSameMonth(day, visibleMonth, dateContext),\n label: formatter.format(day),\n number: dates.formatDayNumber(day, dateContext),\n })),\n );\n });\n let calendar: HTMLElement | undefined;\n // Days that belong to the visible month; the roving tabindex must land on one\n // of them or the grid becomes unreachable by keyboard after month navigation.\n const monthDayKeys = createMemo(() =>\n dayRows()\n .flat()\n .filter((day) => !day.outside)\n .map((day) => day.key),\n );\n // Remembers where arrow-key navigation left off so Tab returns to that day.\n const [focusedKey, setFocusedKey] = createSignal<string>();\n const defaultFocus = createMemo(() =>\n resolveFocusDay(\n monthDayKeys(),\n focusedKey() || props.focusDate?.() || props.selected?.() || dateKey(dates.today(context()), context()),\n ),\n );\n\n const moveMonth = (delta: number) => props.setVisibleMonth(dates.addMonths(props.visibleMonth(), delta, context()));\n const moveYear = (delta: number) => props.setVisibleMonth(monthDate(month().year + delta, month().month, context()));\n const previousLabel = () => (view() === \"days\" ? messages().previousMonth : messages().previousYear);\n const nextLabel = () => (view() === \"days\" ? messages().nextMonth : messages().nextYear);\n\n const focusDate = (date: Date) => {\n const targetKey = dateKey(date, context());\n if (!dates.isSameMonth(date, props.visibleMonth(), context())) props.setVisibleMonth(date);\n queueMicrotask(() => calendar?.querySelector<HTMLElement>(`[data-date-day=\"${targetKey}\"]`)?.focus());\n };\n\n const handleDayKeyDown = (event: KeyboardEvent, day: Date) => {\n const deltas: Partial<Record<string, number>> = { ArrowLeft: -1, ArrowRight: 1, ArrowUp: -7, ArrowDown: 7 };\n const delta = deltas[event.key];\n if (delta !== undefined) {\n event.preventDefault();\n focusDate(dates.addDays(day, delta, context()));\n return;\n }\n if (event.key === \"PageUp\" || event.key === \"PageDown\") {\n event.preventDefault();\n focusDate(dates.addMonths(day, event.key === \"PageUp\" ? -1 : 1, context()));\n return;\n }\n if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n const buttons = Array.from(\n (event.currentTarget as HTMLButtonElement).closest(\".k2b-date-grid\")!.querySelectorAll<HTMLButtonElement>(\"[data-date-day]\"),\n );\n const index = buttons.indexOf(event.currentTarget as HTMLButtonElement);\n const offset = event.key === \"Home\" ? -(index % 7) : 6 - (index % 7);\n focusDate(dates.addDays(day, offset, context()));\n }\n };\n\n return (\n <section ref={calendar} class=\"k2b-date-calendar\" aria-label={messages().calendar}>\n <header class=\"k2b-date-calendar__header\">\n <button\n type=\"button\"\n class=\"k2b-date-calendar__nav\"\n onClick={() => (view() === \"days\" ? moveMonth(-1) : moveYear(-1))}\n aria-label={previousLabel()}\n >\n <i class=\"ti ti-chevron-left\" aria-hidden=\"true\" />\n </button>\n <button type=\"button\" class=\"k2b-date-calendar__title\" onClick={() => setView(view() === \"days\" ? \"months\" : \"days\")}>\n <Show when={view() === \"days\"} fallback={month().year}>\n {dates.formatMonthYear(props.visibleMonth(), context())}\n </Show>\n </button>\n <button\n type=\"button\"\n class=\"k2b-date-calendar__nav\"\n onClick={() => (view() === \"days\" ? moveMonth(1) : moveYear(1))}\n aria-label={nextLabel()}\n >\n <i class=\"ti ti-chevron-right\" aria-hidden=\"true\" />\n </button>\n </header>\n\n <Show\n when={view() === \"days\"}\n fallback={\n <div class=\"k2b-date-months\" role=\"group\" aria-label={`Months in ${month().year}`}>\n <For each={months()}>\n {(name, index) => (\n <button\n type=\"button\"\n aria-pressed={index() === month().month}\n data-selected={index() === month().month ? \"true\" : undefined}\n onClick={() => {\n props.setVisibleMonth(monthDate(month().year, index(), context()));\n setView(\"days\");\n }}\n >\n {name}\n </button>\n )}\n </For>\n </div>\n }\n >\n <div class=\"k2b-date-weekdays\" aria-hidden=\"true\">\n <For each={weekdays()}>{(day) => <span>{day}</span>}</For>\n </div>\n <div class=\"k2b-date-grid\" role=\"grid\">\n <For each={dayRows()}>\n {(week) => (\n <div class=\"k2b-date-week\" role=\"row\">\n <For each={week}>\n {(cell) => {\n const selected = () => props.selected?.() === cell.key;\n const range = () => props.range?.() ?? { start: null, end: null };\n const active = () => selected() || isRangeEdge(cell.key, range());\n const focusable = () => cell.key === defaultFocus();\n return (\n <button\n type=\"button\"\n role=\"gridcell\"\n data-date-day={cell.key}\n data-date-focus={focusable() ? \"true\" : undefined}\n data-outside={cell.outside ? \"true\" : undefined}\n data-in-range={inRange(cell.key, range()) && !active() ? \"true\" : undefined}\n aria-label={cell.label}\n aria-selected={active()}\n tabIndex={focusable() ? 0 : -1}\n onClick={() => props.onSelect(cell.key)}\n onKeyDown={(event) => handleDayKeyDown(event, cell.day)}\n onBlur={() => props.onDayPreview?.(null)}\n onFocus={() => {\n setFocusedKey(cell.key);\n props.onDayPreview?.(cell.key);\n }}\n onPointerEnter={() => props.onDayPreview?.(cell.key)}\n onPointerLeave={() => props.onDayPreview?.(null)}\n >\n {cell.number}\n </button>\n );\n }}\n </For>\n </div>\n )}\n </For>\n </div>\n </Show>\n </section>\n );\n}\n\nfunction TimeInput(props: { time: string; onChange: (time: string) => void; label?: string }): JSX.Element {\n const messages = useUiMessages();\n return (\n <label class=\"k2b-date-time\">\n <Show when={props.label}>\n <span>{props.label}</span>\n </Show>\n <span class=\"k2b-date-time__control\">\n <input\n type=\"text\"\n inputMode=\"numeric\"\n value={props.time}\n placeholder=\"09:00\"\n onInput={(event) => props.onChange(filterTimeInput(event.currentTarget.value))}\n onBlur={() => props.onChange(normalizeTimeInput(props.time))}\n aria-label={props.label ? messages().timeLabel({ label: props.label }) : messages().time}\n />\n <i class=\"ti ti-clock\" aria-hidden=\"true\" />\n </span>\n </label>\n );\n}\n\nexport function DatePicker(props: DatePickerProps): JSX.Element {\n const value = () => resolveMaybeAccessor(props.value);\n const dateConfig = useDateConfigLocale(() => props.dateConfig);\n const [visibleMonth, setVisibleMonth] = createSignal(parseDateValue(value(), dateConfig()));\n const valueLabel = () => displayDate(value(), dateConfig());\n\n return (\n <PickerShell\n owner={props}\n icon=\"ti ti-calendar\"\n valueLabel={valueLabel}\n valueContent={props.renderValue ? () => props.renderValue!(value()!) : undefined}\n clearValue={null}\n onOpen={() => setVisibleMonth(parseDateValue(value(), dateConfig()))}\n wide={Boolean(props.presets?.length)}\n >\n {(close) => (\n <div class=\"k2b-date-popover__body\">\n <PresetRail\n presets={props.presets}\n onSelect={(value) => {\n close();\n commitFieldValue(props, value);\n }}\n />\n <DatePickerPanel\n visibleMonth={visibleMonth}\n setVisibleMonth={setVisibleMonth}\n selected={value}\n focusDate={value}\n onSelect={(value) => {\n close();\n commitFieldValue(props, value);\n }}\n dateConfig={dateConfig()}\n />\n </div>\n )}\n </PickerShell>\n );\n}\n\nexport function DateTimePicker(props: DateTimePickerProps): JSX.Element {\n const messages = useUiMessages();\n const value = () => resolveMaybeAccessor(props.value);\n const dateConfig = useDateConfigLocale(() => props.dateConfig);\n const parts = () => splitDateTime(value(), dateConfig());\n const [visibleMonth, setVisibleMonth] = createSignal(parseDateValue(parts().date, dateConfig()));\n const [draftDate, setDraftDate] = createSignal(parts().date);\n const [draftTime, setDraftTime] = createSignal(parts().time || \"09:00\");\n const valueLabel = () => formatDateTimeValue(value(), dateConfig());\n\n const syncDraft = () => {\n const next = parts();\n setDraftDate(next.date);\n setDraftTime(next.time || \"09:00\");\n setVisibleMonth(parseDateValue(next.date, dateConfig()));\n };\n\n return (\n <PickerShell\n owner={props}\n icon=\"ti ti-calendar-time\"\n valueLabel={valueLabel}\n valueContent={props.renderValue ? () => props.renderValue!(value()!) : undefined}\n clearValue={null}\n timezone={dateConfig().timeZone}\n onOpen={syncDraft}\n wide={Boolean(props.presets?.length)}\n >\n {(close) => (\n <>\n <div class=\"k2b-date-popover__body\">\n <PresetRail\n presets={props.presets}\n onSelect={(value) => {\n close();\n commitFieldValue(props, value);\n }}\n />\n <DatePickerPanel\n visibleMonth={visibleMonth}\n setVisibleMonth={setVisibleMonth}\n selected={draftDate}\n focusDate={draftDate}\n onSelect={(value) => {\n setDraftDate(value);\n setVisibleMonth(parseDateValue(value, dateConfig()));\n }}\n dateConfig={dateConfig()}\n />\n </div>\n <div class=\"k2b-date-actions\">\n <TimeInput time={draftTime()} onChange={setDraftTime} />\n <button\n type=\"button\"\n class=\"k2b-date-apply\"\n disabled={!draftDate() || !isCompleteTime(draftTime())}\n onClick={() => {\n if (!draftDate() || !isCompleteTime(draftTime())) return;\n const value = toDateTimeValue(draftDate(), draftTime(), dateConfig());\n close();\n commitFieldValue(props, value);\n }}\n >\n {messages().apply}\n </button>\n </div>\n </>\n )}\n </PickerShell>\n );\n}\n\nexport function DateRangePicker(props: DateRangePickerProps): JSX.Element {\n const messages = useUiMessages();\n const withTime = () => props.withTime ?? false;\n const value = () => resolveMaybeAccessor(props.value);\n const dateConfig = useDateConfigLocale(() => props.dateConfig);\n const parts = () => ({\n start: withTime() ? splitDateTime(value().start, dateConfig()) : { date: value().start ?? \"\", time: \"09:00\" },\n end: withTime() ? splitDateTime(value().end, dateConfig()) : { date: value().end ?? \"\", time: \"10:00\" },\n });\n const [visibleMonth, setVisibleMonth] = createSignal(parseDateValue(parts().start.date || parts().end.date, dateConfig()));\n const [draftRange, setDraftRange] = createSignal<DateRangeValue>({\n start: parts().start.date || null,\n end: parts().end.date || null,\n });\n const [previewDate, setPreviewDate] = createSignal<string | null>(null);\n const [startTime, setStartTime] = createSignal(parts().start.time || \"09:00\");\n const [endTime, setEndTime] = createSignal(parts().end.time || \"10:00\");\n const displayRange = createMemo(() => previewRange(draftRange(), previewDate()));\n\n const syncDraft = () => {\n const next = parts();\n setDraftRange({ start: next.start.date || null, end: next.end.date || null });\n setPreviewDate(null);\n setStartTime(next.start.time || \"09:00\");\n setEndTime(next.end.time || \"10:00\");\n setVisibleMonth(parseDateValue(next.start.date || next.end.date, dateConfig()));\n };\n\n const valueLabel = () => {\n if (!value().start && !value().end) return \"\";\n const format = withTime() ? formatDateTimeValue : displayDate;\n return `${value().start ? format(value().start, dateConfig()) : \"Start\"} to ${value().end ? format(value().end, dateConfig()) : \"End\"}`;\n };\n\n const valueContent = () => {\n const format = withTime() ? formatDateTimeValue : displayDate;\n return (\n <span class=\"k2b-date-range-value\">\n <span>{value().start ? format(value().start, dateConfig()) : messages().start}</span>\n <i class=\"ti ti-arrow-narrow-right\" aria-hidden=\"true\" />\n <span>{value().end ? format(value().end, dateConfig()) : \"End\"}</span>\n </span>\n );\n };\n\n const selectDate = (value: string) => {\n const current = draftRange();\n if (!current.start || current.end) {\n setDraftRange({ start: value, end: null });\n } else {\n setDraftRange(orderedRange(current.start, value));\n }\n setPreviewDate(null);\n };\n\n const applyDuration = (minutes: number) => {\n const current = draftRange();\n if (!current.start || !isCompleteTime(startTime())) return;\n const start = toDateTimeValue(current.start, startTime(), dateConfig());\n if (!start) return;\n const end = new Date(new Date(start).getTime() + minutes * 60_000).toISOString();\n const next = splitDateTime(end, dateConfig());\n setDraftRange({ start: current.start, end: next.date || current.end || current.start });\n setEndTime(next.time || endTime());\n };\n\n const durationMinutes = createMemo(() => {\n const current = displayRange();\n if (!current.start || !current.end || !isCompleteTime(startTime()) || !isCompleteTime(endTime())) return null;\n const start = toDateTimeValue(current.start, startTime(), dateConfig());\n const end = toDateTimeValue(current.end, endTime(), dateConfig());\n if (!start || !end) return null;\n return Math.round((new Date(end).getTime() - new Date(start).getTime()) / 60_000);\n });\n\n const durationLabel = () => {\n const current = displayRange();\n if (!current.start || !current.end) return \"\";\n if (!withTime()) return formatDateOnlyRangeDuration(current, dateConfig());\n if (!isCompleteTime(startTime()) || !isCompleteTime(endTime())) return \"\";\n const start = toDateTimeValue(current.start, startTime(), dateConfig());\n const end = toDateTimeValue(current.end, endTime(), dateConfig());\n return start && end ? dates.formatDuration(start, end, dateConfig()) : \"\";\n };\n\n const commit = (close: () => void) => {\n const current = draftRange();\n if (!withTime()) {\n close();\n commitFieldValue(props, current);\n return;\n }\n if ((current.start || current.end) && (!isCompleteTime(startTime()) || !isCompleteTime(endTime()))) return;\n const value = {\n start: current.start ? toDateTimeValue(current.start, startTime(), dateConfig()) : null,\n end: current.end ? toDateTimeValue(current.end, endTime(), dateConfig()) : null,\n };\n close();\n commitFieldValue(props, value);\n };\n\n return (\n <PickerShell\n owner={props}\n icon=\"ti ti-calendar-stats\"\n valueLabel={valueLabel}\n valueContent={valueContent}\n clearValue={{ start: null, end: null }}\n timezone={withTime() ? dateConfig().timeZone : undefined}\n footerMeta={() => (\n <Show when={durationLabel()}>\n <span class=\"k2b-date-duration\">\n <i class=\"ti ti-hourglass-low\" aria-hidden=\"true\" />\n {durationLabel()}\n </span>\n </Show>\n )}\n onOpen={syncDraft}\n wide={Boolean(props.datePresets?.length || props.presets?.length)}\n >\n {(close) => (\n <>\n <div class=\"k2b-date-popover__body\">\n <Show\n when={props.datePresets?.length}\n fallback={\n <PresetRail\n presets={props.presets}\n onSelect={(value) => {\n close();\n commitFieldValue(props, value);\n }}\n />\n }\n >\n <PresetRail\n presets={props.datePresets}\n onSelect={(value) => {\n setDraftRange(value ? { start: value, end: value } : { start: null, end: null });\n if (value) setVisibleMonth(parseDateValue(value, dateConfig()));\n }}\n />\n </Show>\n <DatePickerPanel\n visibleMonth={visibleMonth}\n setVisibleMonth={setVisibleMonth}\n range={displayRange}\n focusDate={() => draftRange().start}\n onSelect={selectDate}\n onDayPreview={(value) => {\n const current = draftRange();\n setPreviewDate(current.start && !current.end ? value : null);\n }}\n dateConfig={dateConfig()}\n />\n </div>\n\n <Show when={withTime()}>\n <div class=\"k2b-date-range-times\">\n <TimeInput label={messages().start} time={startTime()} onChange={setStartTime} />\n <TimeInput label={messages().end} time={endTime()} onChange={setEndTime} />\n </div>\n </Show>\n\n <div class=\"k2b-date-actions\">\n <Show when={withTime() && props.durationPresets?.length}>\n <div class=\"k2b-date-durations\" role=\"group\" aria-label={messages().durationPresets}>\n <For each={props.durationPresets}>\n {(preset) => (\n <button type=\"button\" aria-pressed={durationMinutes() === preset.minutes} onClick={() => applyDuration(preset.minutes)}>\n {preset.label}\n </button>\n )}\n </For>\n </div>\n </Show>\n {/* Only a half-picked range is uncommittable; an empty draft must stay\n applicable so a \"clear\" date preset can be committed. */}\n <button\n type=\"button\"\n class=\"k2b-date-apply\"\n disabled={\n Boolean(draftRange().start) !== Boolean(draftRange().end) ||\n Boolean(\n withTime() && draftRange().start && draftRange().end && (!isCompleteTime(startTime()) || !isCompleteTime(endTime())),\n )\n }\n onClick={() => commit(close)}\n >\n {messages().apply}\n </button>\n </div>\n </>\n )}\n </PickerShell>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/DatePicker.tsx"],"sourcesContent":["import { type DateContext, dates } from \"@k2b/stdlib\";\nimport { createEffect, createMemo, createSignal, For, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria, fieldDescribedBy } from \"../internal/field\";\nimport { returnFocus, ringOnReturn } from \"../internal/focus-return\";\nimport { useDateConfigLocale } from \"../intl/locale\";\nimport { resolveUiMessages, useUiMessages } from \"../intl/messages\";\nimport {\n type DateRangeValue,\n dateKey,\n displayDate,\n filterTimeInput,\n formatDateOnlyRangeDuration,\n formatDateTimeValue,\n inRange,\n isCompleteTime,\n isRangeEdge,\n monthDate,\n monthNames,\n msUntilNextDay,\n normalizeTimeInput,\n orderedRange,\n parseDateValue,\n pickerContext,\n previewRange,\n resolveFocusDay,\n splitDateTime,\n toDateTimeValue,\n yearMonth,\n} from \"./date-picker\";\nimport type { MaybeAccessor, ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport type { ChoiceAppearance } from \"./Select\";\n\nexport type { DateRangeValue } from \"./date-picker\";\n\nexport type DatePreset<T> = {\n label: string;\n value: T;\n};\n\nexport type DurationPreset = {\n label: string;\n minutes: number;\n};\n\nexport type DatePickerBaseProps<T> = Omit<ValueFieldProps<T>, \"value\"> & {\n placeholder?: string;\n value: MaybeAccessor<T>;\n presets?: readonly DatePreset<T>[];\n dateConfig?: DateContext;\n clearable?: boolean;\n /** `plain` shows the value as text for property rows; a clearable picker offers clearing in its panel. */\n appearance?: ChoiceAppearance;\n};\n\nexport type DatePickerProps = DatePickerBaseProps<string | null> & {\n /** Trigger content for a set value, for example the date with a relative hint. */\n renderValue?: (value: string) => JSX.Element;\n};\nexport type DateTimePickerProps = DatePickerBaseProps<string | null> & {\n /** Trigger content for a set value, for example the date and time with a relative hint. */\n renderValue?: (value: string) => JSX.Element;\n};\nexport type DateRangePickerProps = DatePickerBaseProps<DateRangeValue> & {\n withTime?: boolean;\n datePresets?: readonly DatePreset<string | null>[];\n durationPresets?: readonly DurationPreset[];\n};\n\ntype PanelView = \"days\" | \"months\";\n\nconst popoverIsOpen = (popover: HTMLElement | undefined): boolean => {\n if (!popover) return false;\n try {\n return popover.matches(\":popover-open\");\n } catch {\n return false;\n }\n};\n\nexport const placeDatePopover = (trigger: HTMLElement, popover: HTMLElement, wide: boolean): void => {\n const margin = 8;\n const gap = 4;\n const rect = trigger.getBoundingClientRect();\n // Keep the panel at its designed width instead of stretching to a full-width\n // trigger; it only ever shrinks to fit a narrow viewport.\n const preferredWidth = wide ? 440 : 336;\n const width = Math.min(preferredWidth, window.innerWidth - margin * 2);\n popover.style.width = `${width}px`;\n\n const popoverRect = popover.getBoundingClientRect();\n const left = Math.max(margin, Math.min(rect.left, window.innerWidth - width - margin));\n const roomBelow = window.innerHeight - rect.bottom - gap - margin;\n const roomAbove = rect.top - gap - margin;\n const opensAbove = popoverRect.height > roomBelow && roomAbove > roomBelow;\n const top = opensAbove\n ? Math.max(margin, rect.top - popoverRect.height - gap)\n : Math.min(rect.bottom + gap, window.innerHeight - popoverRect.height - margin);\n\n popover.style.left = `${left}px`;\n popover.style.top = `${Math.max(margin, top)}px`;\n};\n\nfunction PickerShell<T>(props: {\n owner: DatePickerBaseProps<T>;\n icon: string;\n valueLabel: () => string;\n valueContent?: () => JSX.Element;\n children: (close: () => void) => JSX.Element;\n clearValue: T;\n onOpen?: () => void;\n footerMeta?: () => JSX.Element;\n wide?: boolean;\n timezone?: string;\n}): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.owner.id);\n const [open, setOpen] = createSignal(false);\n const error = () => resolveMaybeAccessor(props.owner.error);\n let trigger: HTMLButtonElement | undefined;\n let popover: HTMLDivElement | undefined;\n let triggerRing = true;\n\n const place = () => {\n if (trigger && popover && open()) placeDatePopover(trigger, popover, props.wide ?? false);\n };\n\n const close = () => {\n // Before hiding, so the popover does not return focus on its own.\n if (popover?.contains(document.activeElement)) returnFocus(trigger, triggerRing);\n if (popoverIsOpen(popover)) popover?.hidePopover();\n setOpen(false);\n };\n\n const show = () => {\n if (props.owner.disabled || !popover || popoverIsOpen(popover)) return;\n props.onOpen?.();\n triggerRing = ringOnReturn(trigger);\n popover.showPopover();\n setOpen(true);\n queueMicrotask(() => {\n place();\n const initial =\n popover?.querySelector<HTMLElement>('[data-date-focus=\"true\"]') ??\n popover?.querySelector<HTMLElement>('[data-date-day]:not([data-outside=\"true\"])');\n initial?.focus();\n });\n };\n\n const toggle = () => (open() ? close() : show());\n const plain = () => props.owner.appearance === \"plain\";\n const canClear = () => Boolean(props.owner.clearable && props.valueLabel() && !props.owner.disabled);\n const clear = () => {\n close();\n commitFieldValue(props.owner, props.clearValue);\n trigger?.focus();\n };\n\n onMount(() => {\n const syncOpenState = () => setOpen(popoverIsOpen(popover));\n popover?.addEventListener(\"toggle\", syncOpenState);\n onCleanup(() => popover?.removeEventListener(\"toggle\", syncOpenState));\n });\n\n createEffect(() => {\n if (!open()) return;\n window.addEventListener(\"resize\", place);\n window.addEventListener(\"scroll\", place, true);\n onCleanup(() => {\n window.removeEventListener(\"resize\", place);\n window.removeEventListener(\"scroll\", place, true);\n });\n });\n onCleanup(close);\n\n return (\n <Field\n class={props.owner.class}\n label={props.owner.label}\n description={props.owner.description}\n error={error()}\n required={props.owner.required}\n disabled={props.owner.disabled}\n meta={meta}\n >\n <div class=\"k2b-date-picker\" data-appearance={props.owner.appearance ?? \"field\"} data-invalid={error() ? \"true\" : undefined}>\n <button\n ref={trigger}\n id={meta.controlId}\n type=\"button\"\n class=\"k2b-date-trigger\"\n data-placeholder={props.valueLabel() ? undefined : \"true\"}\n data-open={open() ? \"true\" : undefined}\n disabled={props.owner.disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open()}\n aria-controls={`${meta.controlId}-popover`}\n {...fieldControlAria(meta, props.owner)}\n // A button's name replaces its content, so the shown date reaches assistive technology as the description.\n aria-describedby={[fieldDescribedBy(meta, props.owner), `${meta.controlId}-value`].filter(Boolean).join(\" \")}\n onClick={toggle}\n onKeyDown={(event) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n show();\n }\n }}\n >\n <i class={`${props.icon} k2b-date-trigger__icon`} aria-hidden=\"true\" />\n <span id={`${meta.controlId}-value`} class=\"k2b-date-trigger__value\">\n <Show when={props.valueLabel()} fallback={props.owner.placeholder ?? messages().pickDate}>\n {props.valueContent?.() ?? props.valueLabel()}\n </Show>\n </span>\n <i class=\"ti ti-chevron-down k2b-date-trigger__chevron\" aria-hidden=\"true\" />\n </button>\n\n <Show when={canClear() && !plain()}>\n <button\n type=\"button\"\n class=\"k2b-date-trigger__clear k2b-input-clear-action\"\n aria-label={messages().clearDate}\n onClick={(event) => {\n event.stopPropagation();\n clear();\n }}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n\n <div\n ref={popover}\n id={`${meta.controlId}-popover`}\n class=\"k2b-date-popover\"\n popover=\"auto\"\n role=\"dialog\"\n aria-label={typeof props.owner.label === \"string\" ? props.owner.label : messages().datePicker}\n onKeyDown={(event) => {\n if (event.key !== \"Escape\" || event.defaultPrevented) return;\n event.preventDefault();\n close();\n }}\n onToggle={(event) => {\n const nextOpen = event.newState === \"open\";\n setOpen(nextOpen);\n if (nextOpen) queueMicrotask(place);\n }}\n >\n {props.children(close)}\n <Show when={props.footerMeta || props.timezone || (plain() && canClear())}>\n <footer class=\"k2b-date-popover__footer\">\n <span>{props.footerMeta?.()}</span>\n {/* A plain trigger has no room for a clear button beside its value. */}\n <Show when={plain() && canClear()}>\n <button type=\"button\" class=\"k2b-date-popover__clear\" onClick={clear}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n {messages().clearDate}\n </button>\n </Show>\n <Show when={props.timezone}>\n <span class=\"k2b-date-popover__timezone\">\n <i class=\"ti ti-world\" aria-hidden=\"true\" />\n {props.timezone}\n </span>\n </Show>\n </footer>\n </Show>\n </div>\n </div>\n </Field>\n );\n}\n\nfunction PresetRail<T>(props: { presets?: readonly DatePreset<T>[]; onSelect: (value: T) => void }): JSX.Element {\n const messages = useUiMessages();\n return (\n <Show when={props.presets?.length}>\n <aside class=\"k2b-date-presets\" aria-label={messages().datePresets}>\n <For each={props.presets}>\n {(preset) => (\n <button type=\"button\" onClick={() => props.onSelect(preset.value)}>\n {preset.label}\n </button>\n )}\n </For>\n </aside>\n </Show>\n );\n}\n\nfunction DatePickerPanel(props: {\n visibleMonth: () => Date;\n setVisibleMonth: (date: Date) => void;\n selected?: () => string | null | undefined;\n range?: () => DateRangeValue;\n focusDate?: () => string | null | undefined;\n onSelect: (date: string) => void;\n onDayPreview?: (date: string | null) => void;\n dateConfig?: DateContext;\n}): JSX.Element {\n const messages = useUiMessages();\n const [view, setView] = createSignal<PanelView>(\"days\");\n const context = createMemo(() => pickerContext(props.dateConfig));\n const month = createMemo(() => yearMonth(props.visibleMonth(), context()));\n const weeks = createMemo(() => dates.getMonthGrid(month().year, month().month, context()));\n const weekdays = createMemo(() => dates.weekdays(context()));\n const months = createMemo(() => monthNames(context()));\n const dayNameFormatter = createMemo(\n () =>\n new Intl.DateTimeFormat(context().locale, {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n timeZone: context().timeZone,\n }),\n );\n const dayRows = createMemo(() => {\n const visibleMonth = props.visibleMonth();\n const dateContext = context();\n const formatter = dayNameFormatter();\n return weeks().map((week) =>\n week.map((day) => ({\n day,\n key: dates.formatDateKey(day, dateContext),\n outside: !dates.isSameMonth(day, visibleMonth, dateContext),\n label: formatter.format(day),\n number: dates.formatDayNumber(day, dateContext),\n })),\n );\n });\n // Today in the picker's time zone, the zone its values use. The browser reads\n // the clock again at the next midnight there, when a hidden tab becomes visible\n // again (timers may not fire on time while the device sleeps), and when the\n // date config changes. The mark and its timer share each reading, so neither\n // starts from an old one.\n const [clockCheck, checkClock] = createSignal<void>(undefined, { equals: false });\n const now = createMemo(() => {\n clockCheck();\n context();\n return new Date();\n });\n const todayKey = createMemo(() => dateKey(now(), context()));\n // The day's name is formatted in the date locale, so \"today\" joins it in the same language.\n const todayLabel = (date: string) => resolveUiMessages(context().locale).todayDate({ date });\n createEffect(() => {\n const timer = window.setTimeout(() => checkClock(), msUntilNextDay(now(), context()));\n onCleanup(() => window.clearTimeout(timer));\n });\n onMount(() => {\n const refresh = () => {\n if (document.visibilityState === \"visible\") checkClock();\n };\n document.addEventListener(\"visibilitychange\", refresh);\n onCleanup(() => document.removeEventListener(\"visibilitychange\", refresh));\n });\n let calendar: HTMLElement | undefined;\n // Days that belong to the visible month; the roving tabindex must land on one\n // of them or the grid becomes unreachable by keyboard after month navigation.\n const monthDayKeys = createMemo(() =>\n dayRows()\n .flat()\n .filter((day) => !day.outside)\n .map((day) => day.key),\n );\n // Remembers where arrow-key navigation left off so Tab returns to that day.\n const [focusedKey, setFocusedKey] = createSignal<string>();\n const defaultFocus = createMemo(() =>\n resolveFocusDay(monthDayKeys(), focusedKey() || props.focusDate?.() || props.selected?.() || todayKey()),\n );\n\n const moveMonth = (delta: number) => props.setVisibleMonth(dates.addMonths(props.visibleMonth(), delta, context()));\n const moveYear = (delta: number) => props.setVisibleMonth(monthDate(month().year + delta, month().month, context()));\n const previousLabel = () => (view() === \"days\" ? messages().previousMonth : messages().previousYear);\n const nextLabel = () => (view() === \"days\" ? messages().nextMonth : messages().nextYear);\n\n const focusDate = (date: Date) => {\n const targetKey = dateKey(date, context());\n if (!dates.isSameMonth(date, props.visibleMonth(), context())) props.setVisibleMonth(date);\n queueMicrotask(() => calendar?.querySelector<HTMLElement>(`[data-date-day=\"${targetKey}\"]`)?.focus());\n };\n\n const handleDayKeyDown = (event: KeyboardEvent, day: Date) => {\n const deltas: Partial<Record<string, number>> = { ArrowLeft: -1, ArrowRight: 1, ArrowUp: -7, ArrowDown: 7 };\n const delta = deltas[event.key];\n if (delta !== undefined) {\n event.preventDefault();\n focusDate(dates.addDays(day, delta, context()));\n return;\n }\n if (event.key === \"PageUp\" || event.key === \"PageDown\") {\n event.preventDefault();\n focusDate(dates.addMonths(day, event.key === \"PageUp\" ? -1 : 1, context()));\n return;\n }\n if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n const buttons = Array.from(\n (event.currentTarget as HTMLButtonElement).closest(\".k2b-date-grid\")!.querySelectorAll<HTMLButtonElement>(\"[data-date-day]\"),\n );\n const index = buttons.indexOf(event.currentTarget as HTMLButtonElement);\n const offset = event.key === \"Home\" ? -(index % 7) : 6 - (index % 7);\n focusDate(dates.addDays(day, offset, context()));\n }\n };\n\n return (\n <section ref={calendar} class=\"k2b-date-calendar\" aria-label={messages().calendar}>\n <header class=\"k2b-date-calendar__header\">\n <button\n type=\"button\"\n class=\"k2b-date-calendar__nav\"\n onClick={() => (view() === \"days\" ? moveMonth(-1) : moveYear(-1))}\n aria-label={previousLabel()}\n >\n <i class=\"ti ti-chevron-left\" aria-hidden=\"true\" />\n </button>\n <button type=\"button\" class=\"k2b-date-calendar__title\" onClick={() => setView(view() === \"days\" ? \"months\" : \"days\")}>\n <Show when={view() === \"days\"} fallback={month().year}>\n {dates.formatMonthYear(props.visibleMonth(), context())}\n </Show>\n </button>\n <button\n type=\"button\"\n class=\"k2b-date-calendar__nav\"\n onClick={() => (view() === \"days\" ? moveMonth(1) : moveYear(1))}\n aria-label={nextLabel()}\n >\n <i class=\"ti ti-chevron-right\" aria-hidden=\"true\" />\n </button>\n </header>\n\n <Show\n when={view() === \"days\"}\n fallback={\n <div class=\"k2b-date-months\" role=\"group\" aria-label={`Months in ${month().year}`}>\n <For each={months()}>\n {(name, index) => (\n <button\n type=\"button\"\n aria-pressed={index() === month().month}\n data-selected={index() === month().month ? \"true\" : undefined}\n onClick={() => {\n props.setVisibleMonth(monthDate(month().year, index(), context()));\n setView(\"days\");\n }}\n >\n {name}\n </button>\n )}\n </For>\n </div>\n }\n >\n <div class=\"k2b-date-weekdays\" aria-hidden=\"true\">\n <For each={weekdays()}>{(day) => <span>{day}</span>}</For>\n </div>\n <div class=\"k2b-date-grid\" role=\"grid\">\n <For each={dayRows()}>\n {(week) => (\n <div class=\"k2b-date-week\" role=\"row\">\n <For each={week}>\n {(cell) => {\n const selected = () => props.selected?.() === cell.key;\n const range = () => props.range?.() ?? { start: null, end: null };\n const active = () => selected() || isRangeEdge(cell.key, range());\n const focusable = () => cell.key === defaultFocus();\n const today = () => cell.key === todayKey();\n return (\n <button\n type=\"button\"\n role=\"gridcell\"\n data-date-day={cell.key}\n data-date-focus={focusable() ? \"true\" : undefined}\n data-outside={cell.outside ? \"true\" : undefined}\n data-in-range={inRange(cell.key, range()) && !active() ? \"true\" : undefined}\n data-today={today() ? \"true\" : undefined}\n aria-current={today() ? \"date\" : undefined}\n aria-label={today() ? todayLabel(cell.label) : cell.label}\n aria-selected={active()}\n tabIndex={focusable() ? 0 : -1}\n onClick={() => props.onSelect(cell.key)}\n onKeyDown={(event) => handleDayKeyDown(event, cell.day)}\n onBlur={() => props.onDayPreview?.(null)}\n onFocus={() => {\n setFocusedKey(cell.key);\n props.onDayPreview?.(cell.key);\n }}\n onPointerEnter={() => props.onDayPreview?.(cell.key)}\n onPointerLeave={() => props.onDayPreview?.(null)}\n >\n {cell.number}\n </button>\n );\n }}\n </For>\n </div>\n )}\n </For>\n </div>\n </Show>\n </section>\n );\n}\n\nfunction TimeInput(props: { time: string; onChange: (time: string) => void; label?: string }): JSX.Element {\n const messages = useUiMessages();\n return (\n <label class=\"k2b-date-time\">\n <Show when={props.label}>\n <span>{props.label}</span>\n </Show>\n <span class=\"k2b-date-time__control\">\n <input\n type=\"text\"\n inputMode=\"numeric\"\n value={props.time}\n placeholder=\"09:00\"\n onInput={(event) => props.onChange(filterTimeInput(event.currentTarget.value))}\n onBlur={() => props.onChange(normalizeTimeInput(props.time))}\n aria-label={props.label ? messages().timeLabel({ label: props.label }) : messages().time}\n />\n <i class=\"ti ti-clock\" aria-hidden=\"true\" />\n </span>\n </label>\n );\n}\n\nexport function DatePicker(props: DatePickerProps): JSX.Element {\n const value = () => resolveMaybeAccessor(props.value);\n const dateConfig = useDateConfigLocale(() => props.dateConfig);\n const [visibleMonth, setVisibleMonth] = createSignal(parseDateValue(value(), dateConfig()));\n const valueLabel = () => displayDate(value(), dateConfig());\n\n return (\n <PickerShell\n owner={props}\n icon=\"ti ti-calendar\"\n valueLabel={valueLabel}\n valueContent={props.renderValue ? () => props.renderValue!(value()!) : undefined}\n clearValue={null}\n onOpen={() => setVisibleMonth(parseDateValue(value(), dateConfig()))}\n wide={Boolean(props.presets?.length)}\n >\n {(close) => (\n <div class=\"k2b-date-popover__body\">\n <PresetRail\n presets={props.presets}\n onSelect={(value) => {\n close();\n commitFieldValue(props, value);\n }}\n />\n <DatePickerPanel\n visibleMonth={visibleMonth}\n setVisibleMonth={setVisibleMonth}\n selected={value}\n focusDate={value}\n onSelect={(value) => {\n close();\n commitFieldValue(props, value);\n }}\n dateConfig={dateConfig()}\n />\n </div>\n )}\n </PickerShell>\n );\n}\n\nexport function DateTimePicker(props: DateTimePickerProps): JSX.Element {\n const messages = useUiMessages();\n const value = () => resolveMaybeAccessor(props.value);\n const dateConfig = useDateConfigLocale(() => props.dateConfig);\n const parts = () => splitDateTime(value(), dateConfig());\n const [visibleMonth, setVisibleMonth] = createSignal(parseDateValue(parts().date, dateConfig()));\n const [draftDate, setDraftDate] = createSignal(parts().date);\n const [draftTime, setDraftTime] = createSignal(parts().time || \"09:00\");\n const valueLabel = () => formatDateTimeValue(value(), dateConfig());\n\n const syncDraft = () => {\n const next = parts();\n setDraftDate(next.date);\n setDraftTime(next.time || \"09:00\");\n setVisibleMonth(parseDateValue(next.date, dateConfig()));\n };\n\n return (\n <PickerShell\n owner={props}\n icon=\"ti ti-calendar-time\"\n valueLabel={valueLabel}\n valueContent={props.renderValue ? () => props.renderValue!(value()!) : undefined}\n clearValue={null}\n timezone={dateConfig().timeZone}\n onOpen={syncDraft}\n wide={Boolean(props.presets?.length)}\n >\n {(close) => (\n <>\n <div class=\"k2b-date-popover__body\">\n <PresetRail\n presets={props.presets}\n onSelect={(value) => {\n close();\n commitFieldValue(props, value);\n }}\n />\n <DatePickerPanel\n visibleMonth={visibleMonth}\n setVisibleMonth={setVisibleMonth}\n selected={draftDate}\n focusDate={draftDate}\n onSelect={(value) => {\n setDraftDate(value);\n setVisibleMonth(parseDateValue(value, dateConfig()));\n }}\n dateConfig={dateConfig()}\n />\n </div>\n <div class=\"k2b-date-actions\">\n <TimeInput time={draftTime()} onChange={setDraftTime} />\n <button\n type=\"button\"\n class=\"k2b-date-apply\"\n disabled={!draftDate() || !isCompleteTime(draftTime())}\n onClick={() => {\n if (!draftDate() || !isCompleteTime(draftTime())) return;\n const value = toDateTimeValue(draftDate(), draftTime(), dateConfig());\n close();\n commitFieldValue(props, value);\n }}\n >\n {messages().apply}\n </button>\n </div>\n </>\n )}\n </PickerShell>\n );\n}\n\nexport function DateRangePicker(props: DateRangePickerProps): JSX.Element {\n const messages = useUiMessages();\n const withTime = () => props.withTime ?? false;\n const value = () => resolveMaybeAccessor(props.value);\n const dateConfig = useDateConfigLocale(() => props.dateConfig);\n const parts = () => ({\n start: withTime() ? splitDateTime(value().start, dateConfig()) : { date: value().start ?? \"\", time: \"09:00\" },\n end: withTime() ? splitDateTime(value().end, dateConfig()) : { date: value().end ?? \"\", time: \"10:00\" },\n });\n const [visibleMonth, setVisibleMonth] = createSignal(parseDateValue(parts().start.date || parts().end.date, dateConfig()));\n const [draftRange, setDraftRange] = createSignal<DateRangeValue>({\n start: parts().start.date || null,\n end: parts().end.date || null,\n });\n const [previewDate, setPreviewDate] = createSignal<string | null>(null);\n const [startTime, setStartTime] = createSignal(parts().start.time || \"09:00\");\n const [endTime, setEndTime] = createSignal(parts().end.time || \"10:00\");\n const displayRange = createMemo(() => previewRange(draftRange(), previewDate()));\n\n const syncDraft = () => {\n const next = parts();\n setDraftRange({ start: next.start.date || null, end: next.end.date || null });\n setPreviewDate(null);\n setStartTime(next.start.time || \"09:00\");\n setEndTime(next.end.time || \"10:00\");\n setVisibleMonth(parseDateValue(next.start.date || next.end.date, dateConfig()));\n };\n\n const valueLabel = () => {\n if (!value().start && !value().end) return \"\";\n const format = withTime() ? formatDateTimeValue : displayDate;\n return `${value().start ? format(value().start, dateConfig()) : \"Start\"} to ${value().end ? format(value().end, dateConfig()) : \"End\"}`;\n };\n\n const valueContent = () => {\n const format = withTime() ? formatDateTimeValue : displayDate;\n return (\n <span class=\"k2b-date-range-value\">\n <span>{value().start ? format(value().start, dateConfig()) : messages().start}</span>\n <i class=\"ti ti-arrow-narrow-right\" aria-hidden=\"true\" />\n <span>{value().end ? format(value().end, dateConfig()) : \"End\"}</span>\n </span>\n );\n };\n\n const selectDate = (value: string) => {\n const current = draftRange();\n if (!current.start || current.end) {\n setDraftRange({ start: value, end: null });\n } else {\n setDraftRange(orderedRange(current.start, value));\n }\n setPreviewDate(null);\n };\n\n const applyDuration = (minutes: number) => {\n const current = draftRange();\n if (!current.start || !isCompleteTime(startTime())) return;\n const start = toDateTimeValue(current.start, startTime(), dateConfig());\n if (!start) return;\n const end = new Date(new Date(start).getTime() + minutes * 60_000).toISOString();\n const next = splitDateTime(end, dateConfig());\n setDraftRange({ start: current.start, end: next.date || current.end || current.start });\n setEndTime(next.time || endTime());\n };\n\n const durationMinutes = createMemo(() => {\n const current = displayRange();\n if (!current.start || !current.end || !isCompleteTime(startTime()) || !isCompleteTime(endTime())) return null;\n const start = toDateTimeValue(current.start, startTime(), dateConfig());\n const end = toDateTimeValue(current.end, endTime(), dateConfig());\n if (!start || !end) return null;\n return Math.round((new Date(end).getTime() - new Date(start).getTime()) / 60_000);\n });\n\n const durationLabel = () => {\n const current = displayRange();\n if (!current.start || !current.end) return \"\";\n if (!withTime()) return formatDateOnlyRangeDuration(current, dateConfig());\n if (!isCompleteTime(startTime()) || !isCompleteTime(endTime())) return \"\";\n const start = toDateTimeValue(current.start, startTime(), dateConfig());\n const end = toDateTimeValue(current.end, endTime(), dateConfig());\n return start && end ? dates.formatDuration(start, end, dateConfig()) : \"\";\n };\n\n const commit = (close: () => void) => {\n const current = draftRange();\n if (!withTime()) {\n close();\n commitFieldValue(props, current);\n return;\n }\n if ((current.start || current.end) && (!isCompleteTime(startTime()) || !isCompleteTime(endTime()))) return;\n const value = {\n start: current.start ? toDateTimeValue(current.start, startTime(), dateConfig()) : null,\n end: current.end ? toDateTimeValue(current.end, endTime(), dateConfig()) : null,\n };\n close();\n commitFieldValue(props, value);\n };\n\n return (\n <PickerShell\n owner={props}\n icon=\"ti ti-calendar-stats\"\n valueLabel={valueLabel}\n valueContent={valueContent}\n clearValue={{ start: null, end: null }}\n timezone={withTime() ? dateConfig().timeZone : undefined}\n footerMeta={() => (\n <Show when={durationLabel()}>\n <span class=\"k2b-date-duration\">\n <i class=\"ti ti-hourglass-low\" aria-hidden=\"true\" />\n {durationLabel()}\n </span>\n </Show>\n )}\n onOpen={syncDraft}\n wide={Boolean(props.datePresets?.length || props.presets?.length)}\n >\n {(close) => (\n <>\n <div class=\"k2b-date-popover__body\">\n <Show\n when={props.datePresets?.length}\n fallback={\n <PresetRail\n presets={props.presets}\n onSelect={(value) => {\n close();\n commitFieldValue(props, value);\n }}\n />\n }\n >\n <PresetRail\n presets={props.datePresets}\n onSelect={(value) => {\n setDraftRange(value ? { start: value, end: value } : { start: null, end: null });\n if (value) setVisibleMonth(parseDateValue(value, dateConfig()));\n }}\n />\n </Show>\n <DatePickerPanel\n visibleMonth={visibleMonth}\n setVisibleMonth={setVisibleMonth}\n range={displayRange}\n focusDate={() => draftRange().start}\n onSelect={selectDate}\n onDayPreview={(value) => {\n const current = draftRange();\n setPreviewDate(current.start && !current.end ? value : null);\n }}\n dateConfig={dateConfig()}\n />\n </div>\n\n <Show when={withTime()}>\n <div class=\"k2b-date-range-times\">\n <TimeInput label={messages().start} time={startTime()} onChange={setStartTime} />\n <TimeInput label={messages().end} time={endTime()} onChange={setEndTime} />\n </div>\n </Show>\n\n <div class=\"k2b-date-actions\">\n <Show when={withTime() && props.durationPresets?.length}>\n <div class=\"k2b-date-durations\" role=\"group\" aria-label={messages().durationPresets}>\n <For each={props.durationPresets}>\n {(preset) => (\n <button type=\"button\" aria-pressed={durationMinutes() === preset.minutes} onClick={() => applyDuration(preset.minutes)}>\n {preset.label}\n </button>\n )}\n </For>\n </div>\n </Show>\n {/* Only a half-picked range is uncommittable; an empty draft must stay\n applicable so a \"clear\" date preset can be committed. */}\n <button\n type=\"button\"\n class=\"k2b-date-apply\"\n disabled={\n Boolean(draftRange().start) !== Boolean(draftRange().end) ||\n Boolean(\n withTime() && draftRange().start && draftRange().end && (!isCompleteTime(startTime()) || !isCompleteTime(endTime())),\n )\n }\n onClick={() => commit(close)}\n >\n {messages().apply}\n </button>\n </div>\n </>\n )}\n </PickerShell>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -35,6 +35,8 @@ export function TextInput(props) {
|
|
|
35
35
|
const icon = () => local.icon ?? (local.variant === "ai" ? "ti ti-sparkles" : local.markdown ? "ti ti-markdown" : "ti ti-cursor-text");
|
|
36
36
|
// A custom icon stays while typing (a search field keeps its magnifier); only the default icon switches to the pencil.
|
|
37
37
|
const activeIcon = () => local.activeIcon ?? local.icon ?? (local.variant === "ai" ? "ti ti-sparkles" : "ti ti-pencil");
|
|
38
|
+
// Names, addresses and passwords are typed exactly: phone keyboards must not capitalize or "correct" them.
|
|
39
|
+
const verbatim = () => local.password || local.type === "email" || local.type === "url" || /\b(username|email|url)\b/.test(String(rest.autocomplete ?? ""));
|
|
38
40
|
const input = next => local.onValueChange?.(next);
|
|
39
41
|
const commit = next => local.onValueCommit?.(next);
|
|
40
42
|
const clear = () => {
|
|
@@ -101,7 +103,17 @@ export function TextInput(props) {
|
|
|
101
103
|
get fallback() {
|
|
102
104
|
return (() => {
|
|
103
105
|
var _el$19 = _$getNextElement(_tmpl$6);
|
|
104
|
-
_$spread(_el$19, _$mergeProps(
|
|
106
|
+
_$spread(_el$19, _$mergeProps({
|
|
107
|
+
get autocapitalize() {
|
|
108
|
+
return verbatim() ? "none" : undefined;
|
|
109
|
+
},
|
|
110
|
+
get autocorrect() {
|
|
111
|
+
return verbatim() ? "off" : undefined;
|
|
112
|
+
},
|
|
113
|
+
get spellcheck() {
|
|
114
|
+
return verbatim() ? false : undefined;
|
|
115
|
+
}
|
|
116
|
+
}, rest, {
|
|
105
117
|
get id() {
|
|
106
118
|
return meta.controlId;
|
|
107
119
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/TextInput.tsx"],"sourcesContent":["import { createSignal, type JSX, Show, splitProps } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { Completion } from \"./completion\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport { MarkdownEditor } from \"./markdown/MarkdownEditor\";\n\nexport type TextInputProps = Omit<\n JSX.InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"onInput\" | \"prefix\" | \"suffix\" | \"type\" | \"value\" | keyof ValueFieldProps<string>\n> &\n ValueFieldProps<string> & {\n minLength?: number;\n maxLength?: number;\n type?: \"text\" | \"search\" | \"email\" | \"url\" | \"tel\";\n variant?: \"default\" | \"ai\";\n icon?: string;\n activeIcon?: string;\n prefix?: JSX.Element;\n suffix?: JSX.Element;\n clearable?: boolean;\n onClear?: () => void;\n clearLabel?: string;\n multiline?: boolean;\n monospace?: boolean;\n password?: boolean;\n markdown?: boolean;\n onSubmit?: () => void;\n lines?: number;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n };\n\nexport function TextInput(props: TextInputProps): JSX.Element {\n const messages = useUiMessages();\n const [local, rest] = splitProps(props, [\n \"activeIcon\",\n \"aria-describedby\",\n \"aria-label\",\n \"class\",\n \"clearLabel\",\n \"clearable\",\n \"completions\",\n \"description\",\n \"error\",\n \"icon\",\n \"id\",\n \"label\",\n \"lines\",\n \"markdown\",\n \"minLength\",\n \"maxLength\",\n \"monospace\",\n \"multiline\",\n \"onClear\",\n \"onValueCommit\",\n \"onSubmit\",\n \"onValueChange\",\n \"password\",\n \"prefix\",\n \"required\",\n \"suffix\",\n \"type\",\n \"value\",\n \"variant\",\n \"abbreviations\",\n ]);\n const meta = createFieldMeta(local.id);\n const value = () => resolveMaybeAccessor(local.value) ?? \"\";\n const error = () => resolveMaybeAccessor(local.error);\n const [passwordVisible, setPasswordVisible] = createSignal(false);\n const multiline = () => Boolean(local.multiline || local.markdown);\n const icon = () => local.icon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : local.markdown ? \"ti ti-markdown\" : \"ti ti-cursor-text\");\n // A custom icon stays while typing (a search field keeps its magnifier); only the default icon switches to the pencil.\n const activeIcon = () => local.activeIcon ?? local.icon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : \"ti ti-pencil\");\n const input = (next: string) => local.onValueChange?.(next);\n const commit = (next: string) => local.onValueCommit?.(next);\n const clear = () => {\n if (local.onClear) {\n local.onClear();\n return;\n }\n commitFieldValue(local, \"\");\n };\n\n return (\n <Show\n when={local.markdown}\n fallback={\n <Field\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n meta={meta}\n required={local.required}\n disabled={rest.disabled}\n >\n <div\n class=\"k2b-input-shell k2b-text-input\"\n data-invalid={error() ? \"true\" : undefined}\n data-ai={local.variant === \"ai\" ? \"true\" : undefined}\n data-multiline={multiline() ? \"true\" : undefined}\n data-monospace={local.monospace ? \"true\" : undefined}\n style={multiline() ? { \"--k2b-editor-lines\": String(local.lines ?? 3) } : undefined}\n >\n <span class=\"k2b-input-shell__icon k2b-text-input__icon\" aria-hidden=\"true\">\n <i class={icon()} />\n <i class={activeIcon()} />\n </span>\n <Show when={local.prefix}>\n <span class=\"k2b-input-shell__affix\">{local.prefix}</span>\n </Show>\n <Show\n when={multiline()}\n fallback={\n <input\n {...rest}\n id={meta.controlId}\n class=\"k2b-input\"\n type={local.password && !passwordVisible() ? \"password\" : (local.type ?? \"text\")}\n value={value()}\n minlength={local.minLength}\n maxlength={local.maxLength}\n required={local.required}\n {...fieldControlAria(meta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (local.onSubmit && event.key === \"Enter\" && !event.shiftKey && !event.metaKey) {\n event.preventDefault();\n local.onSubmit();\n }\n }}\n />\n }\n >\n <textarea\n {...(rest as unknown as JSX.TextareaHTMLAttributes<HTMLTextAreaElement>)}\n id={meta.controlId}\n class=\"k2b-input k2b-text-input__textarea\"\n value={value()}\n rows={local.lines ?? 3}\n required={local.required}\n minlength={local.minLength}\n maxlength={local.maxLength}\n {...fieldControlAria(meta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (local.onSubmit && event.key === \"Enter\" && !event.shiftKey && !event.metaKey) {\n event.preventDefault();\n local.onSubmit();\n }\n }}\n />\n </Show>\n <Show when={local.suffix}>\n <span class=\"k2b-input-shell__affix\">{local.suffix}</span>\n </Show>\n <Show when={local.clearable && value() && !multiline() && !local.password && !rest.disabled && !rest.readOnly}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear k2b-input-clear-action\"\n aria-label={local.clearLabel ?? messages().clear}\n onClick={clear}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <Show when={local.password && !multiline()}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear\"\n aria-label={passwordVisible() ? messages().hidePassword : messages().showPassword}\n aria-pressed={passwordVisible()}\n disabled={rest.disabled}\n onClick={() => setPasswordVisible((visible) => !visible)}\n >\n <i class={passwordVisible() ? \"ti ti-eye-off\" : \"ti ti-eye\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </Field>\n }\n >\n <MarkdownEditor\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n id={meta.controlId}\n name={rest.name}\n value={value()}\n onValueChange={input}\n onValueCommit={local.onValueCommit}\n onSubmit={local.onSubmit}\n placeholder={rest.placeholder}\n disabled={rest.disabled}\n required={local.required}\n lines={local.lines}\n maxLength={local.maxLength}\n spellcheck={rest.spellcheck === undefined ? undefined : rest.spellcheck === true || rest.spellcheck === \"true\"}\n abbreviations={local.abbreviations}\n completions={local.completions}\n aria-label={local[\"aria-label\"]}\n aria-describedby={local[\"aria-describedby\"]}\n />\n </Show>\n );\n}\n\nexport default TextInput;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/TextInput.tsx"],"sourcesContent":["import { createSignal, type JSX, Show, splitProps } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { Completion } from \"./completion\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport { MarkdownEditor } from \"./markdown/MarkdownEditor\";\n\nexport type TextInputProps = Omit<\n JSX.InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"onInput\" | \"prefix\" | \"suffix\" | \"type\" | \"value\" | keyof ValueFieldProps<string>\n> &\n ValueFieldProps<string> & {\n minLength?: number;\n maxLength?: number;\n type?: \"text\" | \"search\" | \"email\" | \"url\" | \"tel\";\n variant?: \"default\" | \"ai\";\n icon?: string;\n activeIcon?: string;\n prefix?: JSX.Element;\n suffix?: JSX.Element;\n clearable?: boolean;\n onClear?: () => void;\n clearLabel?: string;\n multiline?: boolean;\n monospace?: boolean;\n password?: boolean;\n markdown?: boolean;\n onSubmit?: () => void;\n lines?: number;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n };\n\nexport function TextInput(props: TextInputProps): JSX.Element {\n const messages = useUiMessages();\n const [local, rest] = splitProps(props, [\n \"activeIcon\",\n \"aria-describedby\",\n \"aria-label\",\n \"class\",\n \"clearLabel\",\n \"clearable\",\n \"completions\",\n \"description\",\n \"error\",\n \"icon\",\n \"id\",\n \"label\",\n \"lines\",\n \"markdown\",\n \"minLength\",\n \"maxLength\",\n \"monospace\",\n \"multiline\",\n \"onClear\",\n \"onValueCommit\",\n \"onSubmit\",\n \"onValueChange\",\n \"password\",\n \"prefix\",\n \"required\",\n \"suffix\",\n \"type\",\n \"value\",\n \"variant\",\n \"abbreviations\",\n ]);\n const meta = createFieldMeta(local.id);\n const value = () => resolveMaybeAccessor(local.value) ?? \"\";\n const error = () => resolveMaybeAccessor(local.error);\n const [passwordVisible, setPasswordVisible] = createSignal(false);\n const multiline = () => Boolean(local.multiline || local.markdown);\n const icon = () => local.icon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : local.markdown ? \"ti ti-markdown\" : \"ti ti-cursor-text\");\n // A custom icon stays while typing (a search field keeps its magnifier); only the default icon switches to the pencil.\n const activeIcon = () => local.activeIcon ?? local.icon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : \"ti ti-pencil\");\n // Names, addresses and passwords are typed exactly: phone keyboards must not capitalize or \"correct\" them.\n const verbatim = () =>\n local.password || local.type === \"email\" || local.type === \"url\" || /\\b(username|email|url)\\b/.test(String(rest.autocomplete ?? \"\"));\n const input = (next: string) => local.onValueChange?.(next);\n const commit = (next: string) => local.onValueCommit?.(next);\n const clear = () => {\n if (local.onClear) {\n local.onClear();\n return;\n }\n commitFieldValue(local, \"\");\n };\n\n return (\n <Show\n when={local.markdown}\n fallback={\n <Field\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n meta={meta}\n required={local.required}\n disabled={rest.disabled}\n >\n <div\n class=\"k2b-input-shell k2b-text-input\"\n data-invalid={error() ? \"true\" : undefined}\n data-ai={local.variant === \"ai\" ? \"true\" : undefined}\n data-multiline={multiline() ? \"true\" : undefined}\n data-monospace={local.monospace ? \"true\" : undefined}\n style={multiline() ? { \"--k2b-editor-lines\": String(local.lines ?? 3) } : undefined}\n >\n <span class=\"k2b-input-shell__icon k2b-text-input__icon\" aria-hidden=\"true\">\n <i class={icon()} />\n <i class={activeIcon()} />\n </span>\n <Show when={local.prefix}>\n <span class=\"k2b-input-shell__affix\">{local.prefix}</span>\n </Show>\n <Show\n when={multiline()}\n fallback={\n <input\n autocapitalize={verbatim() ? \"none\" : undefined}\n autocorrect={verbatim() ? \"off\" : undefined}\n spellcheck={verbatim() ? false : undefined}\n {...rest}\n id={meta.controlId}\n class=\"k2b-input\"\n type={local.password && !passwordVisible() ? \"password\" : (local.type ?? \"text\")}\n value={value()}\n minlength={local.minLength}\n maxlength={local.maxLength}\n required={local.required}\n {...fieldControlAria(meta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (local.onSubmit && event.key === \"Enter\" && !event.shiftKey && !event.metaKey) {\n event.preventDefault();\n local.onSubmit();\n }\n }}\n />\n }\n >\n <textarea\n {...(rest as unknown as JSX.TextareaHTMLAttributes<HTMLTextAreaElement>)}\n id={meta.controlId}\n class=\"k2b-input k2b-text-input__textarea\"\n value={value()}\n rows={local.lines ?? 3}\n required={local.required}\n minlength={local.minLength}\n maxlength={local.maxLength}\n {...fieldControlAria(meta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (local.onSubmit && event.key === \"Enter\" && !event.shiftKey && !event.metaKey) {\n event.preventDefault();\n local.onSubmit();\n }\n }}\n />\n </Show>\n <Show when={local.suffix}>\n <span class=\"k2b-input-shell__affix\">{local.suffix}</span>\n </Show>\n <Show when={local.clearable && value() && !multiline() && !local.password && !rest.disabled && !rest.readOnly}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear k2b-input-clear-action\"\n aria-label={local.clearLabel ?? messages().clear}\n onClick={clear}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <Show when={local.password && !multiline()}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear\"\n aria-label={passwordVisible() ? messages().hidePassword : messages().showPassword}\n aria-pressed={passwordVisible()}\n disabled={rest.disabled}\n onClick={() => setPasswordVisible((visible) => !visible)}\n >\n <i class={passwordVisible() ? \"ti ti-eye-off\" : \"ti ti-eye\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </Field>\n }\n >\n <MarkdownEditor\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n id={meta.controlId}\n name={rest.name}\n value={value()}\n onValueChange={input}\n onValueCommit={local.onValueCommit}\n onSubmit={local.onSubmit}\n placeholder={rest.placeholder}\n disabled={rest.disabled}\n required={local.required}\n lines={local.lines}\n maxLength={local.maxLength}\n spellcheck={rest.spellcheck === undefined ? undefined : rest.spellcheck === true || rest.spellcheck === \"true\"}\n abbreviations={local.abbreviations}\n completions={local.completions}\n aria-label={local[\"aria-label\"]}\n aria-describedby={local[\"aria-describedby\"]}\n />\n </Show>\n );\n}\n\nexport default TextInput;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -44,6 +44,30 @@ export const monthDate = (year, month, context) => {
|
|
|
44
44
|
}
|
|
45
45
|
return new Date(year, month, 1, 12);
|
|
46
46
|
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Milliseconds from `now` until the next calendar day starts in the picker's
|
|
50
|
+
* time zone, so a panel left open past midnight moves its today mark on time.
|
|
51
|
+
* The next day's start is resolved from its date key: where a DST change skips
|
|
52
|
+
* or repeats midnight, the day starts at its first existing instant.
|
|
53
|
+
*/
|
|
54
|
+
export const msUntilNextDay = (now, context) => {
|
|
55
|
+
const merged = pickerContext(context);
|
|
56
|
+
const {
|
|
57
|
+
timeZone
|
|
58
|
+
} = merged;
|
|
59
|
+
const next = timeZone ? Date.parse(dates.zonedDateTimeToInstant(dates.addZoned(`${dateKey(now, merged)}T00:00`, {
|
|
60
|
+
timeZone,
|
|
61
|
+
days: 1
|
|
62
|
+
}), timeZone, {
|
|
63
|
+
disambiguation: "compatible"
|
|
64
|
+
})) : dates.addDays(now, 1, merged).getTime();
|
|
65
|
+
const delay = next - now.getTime();
|
|
66
|
+
// The timer re-arms after every tick, so it must never fire at once. Should a
|
|
67
|
+
// zone's rules still put the next day behind `now`, look again in a minute,
|
|
68
|
+
// the finest unit the pickers show.
|
|
69
|
+
return delay > 0 ? delay : 60_000;
|
|
70
|
+
};
|
|
47
71
|
export const parseDateValue = (value, context) => {
|
|
48
72
|
if (!value) return dates.today(pickerContext(context));
|
|
49
73
|
return dates.parseCalendarDate(value.slice(0, 10), pickerContext(context));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/date-picker.ts"],"sourcesContent":["import { type DateContext, dates } from \"@k2b/stdlib\";\n\nexport type DateRangeValue = {\n start: string | null;\n end: string | null;\n};\n\nexport const pickerContext = (context?: DateContext): DateContext => ({\n weekStartsOn: 1,\n ...context,\n});\n\nexport const hasInstantOffset = (value: string): boolean => /[T\\s].*([zZ]|[+-]\\d{2}:?\\d{2})$/.test(value);\n\nexport const dateKey = (date: Date | string, context?: DateContext): string => dates.formatDateKey(date, pickerContext(context));\n\n/**\n * Short month names for the month panel. `dates.months()` only returns the long\n * form (\"September\"), which overflows the three-column month grid, so the short\n * form is derived here while staying locale aware.\n */\nexport const monthNames = (context?: DateContext): string[] => {\n const merged = pickerContext(context);\n const formatter = new Intl.DateTimeFormat(merged.locale, { month: \"short\", timeZone: \"UTC\" });\n return Array.from({ length: 12 }, (_, index) => formatter.format(Date.UTC(2024, index, 15)));\n};\n\n/**\n * Picks the roving-tabindex day for a rendered month grid. The preferred day is\n * used when the grid actually contains it, otherwise the first day of the\n * visible month keeps exactly one cell reachable by Tab.\n */\nexport const resolveFocusDay = (monthDayKeys: readonly string[], preferred: string | null | undefined): string | undefined =>\n preferred && monthDayKeys.includes(preferred) ? preferred : monthDayKeys[0];\n\nexport const yearMonth = (date: Date, context?: DateContext): { year: number; month: number } => {\n const [year = \"1970\", month = \"1\"] = dateKey(date, context).split(\"-\");\n return { year: Number(year), month: Number(month) - 1 };\n};\n\nexport const monthDate = (year: number, month: number, context?: DateContext): Date => {\n const value = `${year}-${String(month + 1).padStart(2, \"0\")}-01T12:00`;\n if (context?.timeZone) {\n return new Date(dates.zonedDateTimeToInstant(value, context.timeZone, { disambiguation: \"compatible\" }));\n }\n return new Date(year, month, 1, 12);\n};\n\nexport const parseDateValue = (value: string | null | undefined, context?: DateContext): Date => {\n if (!value) return dates.today(pickerContext(context));\n return dates.parseCalendarDate(value.slice(0, 10), pickerContext(context));\n};\n\nexport const displayDate = (value: string | null | undefined, context?: DateContext): string =>\n value ? dates.formatDate(`${value.slice(0, 10)}T12:00`, pickerContext(context)) : \"\";\n\nconst localDateTimeInput = (value: string): string => {\n if (!hasInstantOffset(value)) return value.slice(0, 16);\n const date = new Date(value);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n};\n\nexport const dateTimeInput = (value: string | null | undefined, context?: DateContext): string => {\n if (!value) return \"\";\n if (context?.timeZone && hasInstantOffset(value)) return dates.instantToZonedInput(value, context.timeZone);\n return localDateTimeInput(value);\n};\n\nexport const splitDateTime = (value: string | null | undefined, context?: DateContext): { date: string; time: string } => {\n const input = dateTimeInput(value, context);\n const [date = \"\", time = \"\"] = input.split(\"T\");\n return { date, time: time.slice(0, 5) };\n};\n\nexport const isCompleteTime = (value: string): boolean => {\n if (!/^\\d{2}:\\d{2}$/.test(value)) return false;\n const [hours, minutes] = value.split(\":\").map(Number);\n return hours! >= 0 && hours! <= 23 && minutes! >= 0 && minutes! <= 59;\n};\n\nexport const toDateTimeValue = (date: string, time: string, context?: DateContext): string | null => {\n if (!date) return null;\n const resolvedTime = time || \"00:00\";\n if (!isCompleteTime(resolvedTime)) return null;\n const local = `${date}T${resolvedTime}`;\n if (context?.timeZone) {\n return dates.zonedDateTimeToInstant(local, context.timeZone, { disambiguation: \"compatible\" });\n }\n return local;\n};\n\nexport const formatDateTimeValue = (value: string | null | undefined, context?: DateContext): string =>\n value ? dates.formatDateTime(value, pickerContext(context)) : \"\";\n\nexport const normalizeTimeInput = (value: string): string => {\n const [hours = \"\", minutes = \"\"] = value.split(\":\");\n const hour = Math.max(0, Math.min(23, Number(hours || 0)));\n const minute = Math.max(0, Math.min(59, Number(minutes || 0)));\n return `${String(hour).padStart(2, \"0\")}:${String(minute).padStart(2, \"0\")}`;\n};\n\nexport const filterTimeInput = (value: string): string => {\n const digits = value.replace(/\\D/g, \"\").slice(0, 4);\n return digits.length <= 2 ? digits : `${digits.slice(0, 2)}:${digits.slice(2)}`;\n};\n\nexport const orderedRange = (start: string, end: string): DateRangeValue =>\n end.localeCompare(start) < 0 ? { start: end, end: start } : { start, end };\n\nexport const previewRange = (range: DateRangeValue, preview: string | null): DateRangeValue => {\n if (!range.start || range.end || !preview) return range;\n return orderedRange(range.start, preview);\n};\n\nexport const inRange = (day: string, range: DateRangeValue): boolean =>\n Boolean(range.start && range.end && day >= range.start && day <= range.end);\n\nexport const isRangeEdge = (day: string, range: DateRangeValue): boolean => day === range.start || day === range.end;\n\nexport const formatDateOnlyRangeDuration = (range: DateRangeValue, context?: DateContext): string => {\n if (!range.start || !range.end) return \"\";\n const start = Date.parse(`${dateKey(range.start, context)}T00:00:00.000Z`);\n const end = Date.parse(`${dateKey(range.end, context)}T00:00:00.000Z`);\n const days = Math.floor(Math.abs(end - start) / 86_400_000) + 1;\n return `${days} ${days === 1 ? \"day\" : \"days\"}`;\n};\n"],"mappings":"AAAA,SAA2B,KAAK,QAAQ,aAAa;AAOrD,OAAO,MAAM,aAAa,GAAI,OAAqB,KAAmB;EACpE,YAAY,EAAE,CAAC;EACf,GAAG;AACL,CAAC,CAAC;AAEF,OAAO,MAAM,gBAAgB,GAAI,KAAa,IAAc,iCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC;AAEzG,OAAO,MAAM,OAAO,GAAG,CAAC,IAAmB,EAAE,OAAqB,KAAa,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;;AAEhI;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,UAAU,GAAI,OAAqB,IAAe;EAC7D,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;EACrC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,OAAO;IAAE,QAAQ,EAAE;EAAM,CAAC,CAAC;EAC7F,OAAO,KAAK,CAAC,IAAI,CAAC;IAAE,MAAM,EAAE;EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9F,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,eAAe,GAAG,CAAC,YAA+B,EAAE,SAAoC,KACnG,SAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC;AAE7E,OAAO,MAAM,SAAS,GAAG,CAAC,IAAU,EAAE,OAAqB,KAAsC;EAC/F,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;EACtE,OAAO;IAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG;EAAE,CAAC;AACzD,CAAC;AAED,OAAO,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,OAAqB,KAAW;EACrF,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW;EACtE,IAAI,OAAO,EAAE,QAAQ,EAAE;IACrB,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;MAAE,cAAc,EAAE;IAAa,CAAC,CAAC,CAAC;EAC1G;EACA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;AACrC,CAAC;AAED,OAAO,MAAM,cAAc,GAAG,CAAC,KAAgC,EAAE,OAAqB,KAAW;EAC/F,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;EACtD,OAAO,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED,OAAO,MAAM,WAAW,GAAG,CAAC,KAAgC,EAAE,OAAqB,KACjF,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;AAEtF,MAAM,kBAAkB,GAAI,KAAa,IAAa;EACpD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;EACvD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;EAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;EAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EACtD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAC1D,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,EAAE;AACtD,CAAC;AAED,OAAO,MAAM,aAAa,GAAG,CAAC,KAAgC,EAAE,OAAqB,KAAa;EAChG,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;EACrB,IAAI,OAAO,EAAE,QAAQ,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;EAC3G,OAAO,kBAAkB,CAAC,KAAK,CAAC;AAClC,CAAC;AAED,OAAO,MAAM,aAAa,GAAG,CAAC,KAAgC,EAAE,OAAqB,KAAqC;EACxH,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC;EAC3C,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;EAC/C,OAAO;IAAE,IAAI;IAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;EAAE,CAAC;AACzC,CAAC;AAED,OAAO,MAAM,cAAc,GAAI,KAAa,IAAc;EACxD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK;EAC9C,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;EACrD,OAAO,KAAK,IAAK,CAAC,IAAI,KAAK,IAAK,EAAE,IAAI,OAAO,IAAK,CAAC,IAAI,OAAO,IAAK,EAAE;AACvE,CAAC;AAED,OAAO,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,OAAqB,KAAoB;EACnG,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI;EACtB,MAAM,YAAY,GAAG,IAAI,IAAI,OAAO;EACpC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,OAAO,IAAI;EAC9C,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,YAAY,EAAE;EACvC,IAAI,OAAO,EAAE,QAAQ,EAAE;IACrB,OAAO,KAAK,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;MAAE,cAAc,EAAE;IAAa,CAAC,CAAC;EAChG;EACA,OAAO,KAAK;AACd,CAAC;AAED,OAAO,MAAM,mBAAmB,GAAG,CAAC,KAAgC,EAAE,OAAqB,KACzF,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;AAElE,OAAO,MAAM,kBAAkB,GAAI,KAAa,IAAa;EAC3D,MAAM,CAAC,KAAK,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;EACnD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;EAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;EAC9D,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AAC9E,CAAC;AAED,OAAO,MAAM,eAAe,GAAI,KAAa,IAAa;EACxD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;EACnD,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACjF,CAAC;AAED,OAAO,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,GAAW,KACrD,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;EAAE,KAAK,EAAE,GAAG;EAAE,GAAG,EAAE;AAAM,CAAC,GAAG;EAAE,KAAK;EAAE;AAAI,CAAC;AAE5E,OAAO,MAAM,YAAY,GAAG,CAAC,KAAqB,EAAE,OAAsB,KAAqB;EAC7F,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK;EACvD,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;AAC3C,CAAC;AAED,OAAO,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,KAAqB,KACxD,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;AAE7E,OAAO,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,KAAqB,KAAc,GAAG,KAAK,KAAK,CAAC,KAAK,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG;AAEpH,OAAO,MAAM,2BAA2B,GAAG,CAAC,KAAqB,EAAE,OAAqB,KAAa;EACnG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE;EACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;EAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC;EACtE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;EAC/D,OAAO,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,EAAE;AACjD,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/date-picker.ts"],"sourcesContent":["import { type DateContext, dates } from \"@k2b/stdlib\";\n\nexport type DateRangeValue = {\n start: string | null;\n end: string | null;\n};\n\nexport const pickerContext = (context?: DateContext): DateContext => ({\n weekStartsOn: 1,\n ...context,\n});\n\nexport const hasInstantOffset = (value: string): boolean => /[T\\s].*([zZ]|[+-]\\d{2}:?\\d{2})$/.test(value);\n\nexport const dateKey = (date: Date | string, context?: DateContext): string => dates.formatDateKey(date, pickerContext(context));\n\n/**\n * Short month names for the month panel. `dates.months()` only returns the long\n * form (\"September\"), which overflows the three-column month grid, so the short\n * form is derived here while staying locale aware.\n */\nexport const monthNames = (context?: DateContext): string[] => {\n const merged = pickerContext(context);\n const formatter = new Intl.DateTimeFormat(merged.locale, { month: \"short\", timeZone: \"UTC\" });\n return Array.from({ length: 12 }, (_, index) => formatter.format(Date.UTC(2024, index, 15)));\n};\n\n/**\n * Picks the roving-tabindex day for a rendered month grid. The preferred day is\n * used when the grid actually contains it, otherwise the first day of the\n * visible month keeps exactly one cell reachable by Tab.\n */\nexport const resolveFocusDay = (monthDayKeys: readonly string[], preferred: string | null | undefined): string | undefined =>\n preferred && monthDayKeys.includes(preferred) ? preferred : monthDayKeys[0];\n\nexport const yearMonth = (date: Date, context?: DateContext): { year: number; month: number } => {\n const [year = \"1970\", month = \"1\"] = dateKey(date, context).split(\"-\");\n return { year: Number(year), month: Number(month) - 1 };\n};\n\nexport const monthDate = (year: number, month: number, context?: DateContext): Date => {\n const value = `${year}-${String(month + 1).padStart(2, \"0\")}-01T12:00`;\n if (context?.timeZone) {\n return new Date(dates.zonedDateTimeToInstant(value, context.timeZone, { disambiguation: \"compatible\" }));\n }\n return new Date(year, month, 1, 12);\n};\n\n/**\n * Milliseconds from `now` until the next calendar day starts in the picker's\n * time zone, so a panel left open past midnight moves its today mark on time.\n * The next day's start is resolved from its date key: where a DST change skips\n * or repeats midnight, the day starts at its first existing instant.\n */\nexport const msUntilNextDay = (now: Date, context?: DateContext): number => {\n const merged = pickerContext(context);\n const { timeZone } = merged;\n const next = timeZone\n ? Date.parse(\n dates.zonedDateTimeToInstant(dates.addZoned(`${dateKey(now, merged)}T00:00`, { timeZone, days: 1 }), timeZone, {\n disambiguation: \"compatible\",\n }),\n )\n : dates.addDays(now, 1, merged).getTime();\n const delay = next - now.getTime();\n // The timer re-arms after every tick, so it must never fire at once. Should a\n // zone's rules still put the next day behind `now`, look again in a minute,\n // the finest unit the pickers show.\n return delay > 0 ? delay : 60_000;\n};\n\nexport const parseDateValue = (value: string | null | undefined, context?: DateContext): Date => {\n if (!value) return dates.today(pickerContext(context));\n return dates.parseCalendarDate(value.slice(0, 10), pickerContext(context));\n};\n\nexport const displayDate = (value: string | null | undefined, context?: DateContext): string =>\n value ? dates.formatDate(`${value.slice(0, 10)}T12:00`, pickerContext(context)) : \"\";\n\nconst localDateTimeInput = (value: string): string => {\n if (!hasInstantOffset(value)) return value.slice(0, 16);\n const date = new Date(value);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n};\n\nexport const dateTimeInput = (value: string | null | undefined, context?: DateContext): string => {\n if (!value) return \"\";\n if (context?.timeZone && hasInstantOffset(value)) return dates.instantToZonedInput(value, context.timeZone);\n return localDateTimeInput(value);\n};\n\nexport const splitDateTime = (value: string | null | undefined, context?: DateContext): { date: string; time: string } => {\n const input = dateTimeInput(value, context);\n const [date = \"\", time = \"\"] = input.split(\"T\");\n return { date, time: time.slice(0, 5) };\n};\n\nexport const isCompleteTime = (value: string): boolean => {\n if (!/^\\d{2}:\\d{2}$/.test(value)) return false;\n const [hours, minutes] = value.split(\":\").map(Number);\n return hours! >= 0 && hours! <= 23 && minutes! >= 0 && minutes! <= 59;\n};\n\nexport const toDateTimeValue = (date: string, time: string, context?: DateContext): string | null => {\n if (!date) return null;\n const resolvedTime = time || \"00:00\";\n if (!isCompleteTime(resolvedTime)) return null;\n const local = `${date}T${resolvedTime}`;\n if (context?.timeZone) {\n return dates.zonedDateTimeToInstant(local, context.timeZone, { disambiguation: \"compatible\" });\n }\n return local;\n};\n\nexport const formatDateTimeValue = (value: string | null | undefined, context?: DateContext): string =>\n value ? dates.formatDateTime(value, pickerContext(context)) : \"\";\n\nexport const normalizeTimeInput = (value: string): string => {\n const [hours = \"\", minutes = \"\"] = value.split(\":\");\n const hour = Math.max(0, Math.min(23, Number(hours || 0)));\n const minute = Math.max(0, Math.min(59, Number(minutes || 0)));\n return `${String(hour).padStart(2, \"0\")}:${String(minute).padStart(2, \"0\")}`;\n};\n\nexport const filterTimeInput = (value: string): string => {\n const digits = value.replace(/\\D/g, \"\").slice(0, 4);\n return digits.length <= 2 ? digits : `${digits.slice(0, 2)}:${digits.slice(2)}`;\n};\n\nexport const orderedRange = (start: string, end: string): DateRangeValue =>\n end.localeCompare(start) < 0 ? { start: end, end: start } : { start, end };\n\nexport const previewRange = (range: DateRangeValue, preview: string | null): DateRangeValue => {\n if (!range.start || range.end || !preview) return range;\n return orderedRange(range.start, preview);\n};\n\nexport const inRange = (day: string, range: DateRangeValue): boolean =>\n Boolean(range.start && range.end && day >= range.start && day <= range.end);\n\nexport const isRangeEdge = (day: string, range: DateRangeValue): boolean => day === range.start || day === range.end;\n\nexport const formatDateOnlyRangeDuration = (range: DateRangeValue, context?: DateContext): string => {\n if (!range.start || !range.end) return \"\";\n const start = Date.parse(`${dateKey(range.start, context)}T00:00:00.000Z`);\n const end = Date.parse(`${dateKey(range.end, context)}T00:00:00.000Z`);\n const days = Math.floor(Math.abs(end - start) / 86_400_000) + 1;\n return `${days} ${days === 1 ? \"day\" : \"days\"}`;\n};\n"],"mappings":"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","ignoreList":[]}
|