@k2b/ui 0.9.1 → 0.11.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 +15 -7
- package/dist/browser/actions/Button.js.map +1 -1
- package/dist/browser/actions/ContextMenu.js +55 -15
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/Dropdown.js +39 -15
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +1 -7
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/SplitButton.js +0 -3
- package/dist/browser/actions/SplitButton.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +78 -91
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatContextPopup.js +47 -21
- package/dist/browser/chat/ChatContextPopup.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js +221 -232
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/index.js +3 -2
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/content/Chart.js +99 -106
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js +3 -6
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/FileBrowser.js +1 -1
- package/dist/browser/content/FileBrowser.js.map +1 -1
- package/dist/browser/content/FileTree.js +1 -1
- package/dist/browser/content/FileTree.js.map +1 -1
- package/dist/browser/content/FileView.js +304 -287
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/Lightbox.js +18 -0
- package/dist/browser/content/Lightbox.js.map +1 -1
- package/dist/browser/content/PdfPreview.js +68 -43
- package/dist/browser/content/PdfPreview.js.map +1 -1
- package/dist/browser/content/ZoomPanViewport.js +51 -52
- package/dist/browser/content/ZoomPanViewport.js.map +1 -1
- package/dist/browser/feedback/HoverPreview.js +391 -0
- package/dist/browser/feedback/HoverPreview.js.map +1 -0
- package/dist/browser/feedback/Tooltip.js +50 -8
- package/dist/browser/feedback/Tooltip.js.map +1 -1
- package/dist/browser/feedback/dialog-core.js +21 -3
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/feedback/index.js +1 -0
- package/dist/browser/feedback/index.js.map +1 -1
- package/dist/browser/inputs/AutocompleteEditor.js +5 -4
- package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js +10 -0
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/FileInputs.js +46 -36
- package/dist/browser/inputs/FileInputs.js.map +1 -1
- package/dist/browser/inputs/SelectChip.js +2 -1
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/inputs/choice.js +5 -1
- package/dist/browser/inputs/choice.js.map +1 -1
- package/dist/browser/inputs/markdown/MarkdownEditor.js +173 -173
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/inputs/markdown/Toolbar.js +31 -34
- package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
- package/dist/browser/internal/focus-return.js +61 -0
- package/dist/browser/internal/focus-return.js.map +1 -0
- package/dist/browser/layout/AppOverview.js +1 -1
- package/dist/browser/layout/AppOverview.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +105 -77
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js +16 -15
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/FloatingWindow.js +3 -1
- package/dist/browser/layout/FloatingWindow.js.map +1 -1
- package/dist/browser/layout/PanelDialog.js +10 -9
- package/dist/browser/layout/PanelDialog.js.map +1 -1
- package/dist/browser/layout/Panes.js +82 -81
- package/dist/browser/layout/Panes.js.map +1 -1
- package/dist/browser/layout/SidebarItemPreview.js +48 -136
- package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js +35 -4
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/surfaces/ProgressBar.js.map +1 -1
- package/dist/browser/surfaces/ProgressRing.js +72 -0
- package/dist/browser/surfaces/ProgressRing.js.map +1 -0
- package/dist/browser/surfaces/index.js +1 -0
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/ssr/actions/Button.js +15 -7
- package/dist/ssr/actions/Button.js.map +1 -1
- package/dist/ssr/actions/ContextMenu.js +55 -15
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +31 -12
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +1 -7
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/SplitButton.js +0 -3
- package/dist/ssr/actions/SplitButton.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +61 -10
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatContextPopup.js +19 -5
- package/dist/ssr/chat/ChatContextPopup.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +104 -74
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/index.js +3 -2
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/content/Chart.js +22 -11
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js +3 -6
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/FileBrowser.js +1 -1
- package/dist/ssr/content/FileBrowser.js.map +1 -1
- package/dist/ssr/content/FileTree.js +1 -1
- package/dist/ssr/content/FileTree.js.map +1 -1
- package/dist/ssr/content/FileView.js +105 -33
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/Lightbox.js +17 -0
- package/dist/ssr/content/Lightbox.js.map +1 -1
- package/dist/ssr/content/PdfPreview.js +44 -14
- package/dist/ssr/content/PdfPreview.js.map +1 -1
- package/dist/ssr/content/ZoomPanViewport.js +11 -3
- package/dist/ssr/content/ZoomPanViewport.js.map +1 -1
- package/dist/ssr/feedback/HoverPreview.js +360 -0
- package/dist/ssr/feedback/HoverPreview.js.map +1 -0
- package/dist/ssr/feedback/Tooltip.js +50 -8
- package/dist/ssr/feedback/Tooltip.js.map +1 -1
- package/dist/ssr/feedback/dialog-core.js +21 -3
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/feedback/index.js +1 -0
- package/dist/ssr/feedback/index.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteEditor.js +5 -4
- package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +5 -0
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/FileInputs.js +29 -11
- package/dist/ssr/inputs/FileInputs.js.map +1 -1
- package/dist/ssr/inputs/SelectChip.js +2 -1
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/inputs/choice.js +5 -1
- package/dist/ssr/inputs/choice.js.map +1 -1
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +46 -10
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/inputs/markdown/Toolbar.js +30 -2
- package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
- package/dist/ssr/internal/focus-return.js +61 -0
- package/dist/ssr/internal/focus-return.js.map +1 -0
- package/dist/ssr/layout/AppOverview.js +1 -1
- package/dist/ssr/layout/AppOverview.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +84 -66
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +16 -15
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/FloatingWindow.js +3 -1
- package/dist/ssr/layout/FloatingWindow.js.map +1 -1
- package/dist/ssr/layout/PanelDialog.js +10 -9
- package/dist/ssr/layout/PanelDialog.js.map +1 -1
- package/dist/ssr/layout/Panes.js +39 -8
- package/dist/ssr/layout/Panes.js.map +1 -1
- package/dist/ssr/layout/SidebarItemPreview.js +36 -108
- package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js +35 -4
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
- package/dist/ssr/surfaces/ProgressRing.js +31 -0
- package/dist/ssr/surfaces/ProgressRing.js.map +1 -0
- package/dist/ssr/surfaces/index.js +1 -0
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Button.d.ts +5 -0
- package/dist/types/actions/Dropdown.d.ts +5 -1
- package/dist/types/actions/SplitButton.d.ts +1 -0
- package/dist/types/chat/ChatContextPopup.d.ts +8 -0
- package/dist/types/chat/index.d.ts +3 -2
- package/dist/types/feedback/HoverPreview.d.ts +83 -0
- package/dist/types/feedback/Tooltip.d.ts +6 -0
- package/dist/types/feedback/index.d.ts +2 -0
- package/dist/types/feedback/prompts.d.ts +9 -6
- package/dist/types/inputs/SelectChip.d.ts +1 -0
- package/dist/types/inputs/completion/overlay.d.ts +3 -1
- package/dist/types/internal/focus-return.d.ts +20 -0
- package/dist/types/intl/Format.d.ts +16 -8
- package/dist/types/layout/AppWorkspace.d.ts +14 -0
- package/dist/types/layout/BottomSheet.d.ts +6 -1
- package/dist/types/layout/SidebarItemPreview.d.ts +1 -1
- package/dist/types/layout/app-workspace-controller.d.ts +5 -0
- package/dist/types/surfaces/ProgressBar.d.ts +1 -1
- package/dist/types/surfaces/ProgressRing.d.ts +13 -0
- package/dist/types/surfaces/index.d.ts +2 -0
- package/package.json +3 -2
|
@@ -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 } from \"../internal/field\";\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\";\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};\n\nexport type DatePickerProps = DatePickerBaseProps<string | null>;\nexport type DateTimePickerProps = DatePickerBaseProps<string | null>;\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\n const place = () => {\n if (trigger && popover && open()) placeDatePopover(trigger, popover, props.wide ?? false);\n };\n\n const close = () => {\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 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\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-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 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 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={props.owner.clearable && props.valueLabel() && !props.owner.disabled}>\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 close();\n commitFieldValue(props.owner, props.clearValue);\n trigger?.focus();\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 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}>\n <footer class=\"k2b-date-popover__footer\">\n <span>{props.footerMeta?.()}</span>\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 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 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 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 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 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 } 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\";\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};\n\nexport type DatePickerProps = DatePickerBaseProps<string | null>;\nexport type DateTimePickerProps = DatePickerBaseProps<string | null>;\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\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-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 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 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={props.owner.clearable && props.valueLabel() && !props.owner.disabled}>\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 close();\n commitFieldValue(props.owner, props.clearValue);\n trigger?.focus();\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}>\n <footer class=\"k2b-date-popover__footer\">\n <span>{props.footerMeta?.()}</span>\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 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 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 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 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 Apply\n </button>\n </div>\n </>\n )}\n </PickerShell>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -16,14 +16,16 @@ var _tmpl$ = ["<span class=\"k2b-dropzone__icon\" aria-hidden=\"true\"><i", "></
|
|
|
16
16
|
_tmpl$8 = ["<div class=\"k2b-image-input\"", " role=\"group\"", "><div class=\"k2b-image-input__preview\">", "</div><div class=\"k2b-image-input__actions\">", "", "</div>", "</div>"],
|
|
17
17
|
_tmpl$9 = "<i class=\"ti ti-photo-off\" aria-hidden=\"true\"></i>",
|
|
18
18
|
_tmpl$0 = ["<img", ">"],
|
|
19
|
-
_tmpl$1 =
|
|
20
|
-
_tmpl$10 = ["<div class=\"", "\"><div class=\"k2b-image-
|
|
21
|
-
_tmpl$11 = ["<
|
|
22
|
-
_tmpl$12 = ["<small
|
|
23
|
-
_tmpl$13 = ["<
|
|
19
|
+
_tmpl$1 = "<i class=\"ti ti-rotate-clockwise\" aria-hidden=\"true\"></i>",
|
|
20
|
+
_tmpl$10 = ["<div class=\"k2b-image-cropper__frame\" style=\"", "\"><img", " draggable=\"false\" style=\"", "\"><div class=\"k2b-image-cropper__selection\"", " style=\"", "\" role=\"group\"", ">", "</div>", "</div>"],
|
|
21
|
+
_tmpl$11 = ["<div class=\"", "\"><div class=\"k2b-image-cropper__stage\">", "</div></div>"],
|
|
22
|
+
_tmpl$12 = ["<small>", "</small>"],
|
|
23
|
+
_tmpl$13 = ["<small class=\"k2b-image-cropper__error\">", "</small>"],
|
|
24
|
+
_tmpl$14 = ["<button type=\"button\" class=\"k2b-image-cropper__handle\"", "", "></button>"];
|
|
24
25
|
import { dropzone } from "@k2b/stdlib/solid";
|
|
25
26
|
import { createEffect, createSignal, For, onCleanup, Show } from "solid-js";
|
|
26
27
|
import { Button, IconButton } from "../actions/Button";
|
|
28
|
+
import { Tooltip } from "../feedback/Tooltip";
|
|
27
29
|
import { createFieldMeta, Field, fieldControlAria } from "../internal/field";
|
|
28
30
|
import { useUiMessages } from "../intl/messages";
|
|
29
31
|
import { commitFieldValue, resolveMaybeAccessor } from "./field-contract";
|
|
@@ -500,12 +502,12 @@ export function ImageCropper(props) {
|
|
|
500
502
|
};
|
|
501
503
|
};
|
|
502
504
|
const showResizeHandles = () => previewShape() !== "circle";
|
|
503
|
-
return _$ssr(_tmpl$
|
|
505
|
+
return _$ssr(_tmpl$11, `k2b-image-cropper ${_$escape(props.class ?? "", true)}`, _$escape(_$createComponent(Show, {
|
|
504
506
|
get when() {
|
|
505
507
|
return !loading();
|
|
506
508
|
},
|
|
507
509
|
get fallback() {
|
|
508
|
-
return _$ssr(_tmpl$
|
|
510
|
+
return _$ssr(_tmpl$12, _$escape(messages().preparingImage));
|
|
509
511
|
},
|
|
510
512
|
get children() {
|
|
511
513
|
return _$createComponent(Show, {
|
|
@@ -513,7 +515,7 @@ export function ImageCropper(props) {
|
|
|
513
515
|
return !error();
|
|
514
516
|
},
|
|
515
517
|
get fallback() {
|
|
516
|
-
return _$ssr(_tmpl$
|
|
518
|
+
return _$ssr(_tmpl$13, _$escape(error()));
|
|
517
519
|
},
|
|
518
520
|
get children() {
|
|
519
521
|
return _$createComponent(Show, {
|
|
@@ -521,19 +523,35 @@ export function ImageCropper(props) {
|
|
|
521
523
|
return _$memo(() => !!preview())() && crop();
|
|
522
524
|
},
|
|
523
525
|
get children() {
|
|
524
|
-
return _$ssr(_tmpl$
|
|
526
|
+
return _$ssr(_tmpl$10, _$ssrStyle(previewFrameStyle()), _$ssrAttribute("src", _$escape(preview().url, true), false) + _$ssrAttribute("alt", _$escape(messages().cropPreview, true), false), _$ssrStyle(previewImageStyle()), _$ssrAttribute("data-shape", _$escape(previewShape(), true), false), _$ssrStyle(cropStyle()), _$ssrAttribute("tabindex", disabled() ? _$escape(undefined, true) : 0, false) + _$ssrAttribute("aria-label", _$escape(messages().cropArea, true), false), _$escape(_$createComponent(Show, {
|
|
525
527
|
get when() {
|
|
526
528
|
return showResizeHandles();
|
|
527
529
|
},
|
|
528
530
|
get children() {
|
|
529
531
|
return _$createComponent(For, {
|
|
530
532
|
each: ["nw", "ne", "sw", "se"],
|
|
531
|
-
children: handle => _$ssr(_tmpl$
|
|
533
|
+
children: handle => _$ssr(_tmpl$14, _$ssrAttribute("data-handle", _$escape(handle, true), false) + _$ssrAttribute("aria-label", _$escape(messages().resizeCrop({
|
|
532
534
|
handle
|
|
533
535
|
}), true), false), _$ssrAttribute("disabled", disabled(), true))
|
|
534
536
|
});
|
|
535
537
|
}
|
|
536
|
-
})), _$
|
|
538
|
+
})), _$escape(_$createComponent(Tooltip.Trigger, {
|
|
539
|
+
type: "button",
|
|
540
|
+
"class": "k2b-image-cropper__rotate",
|
|
541
|
+
get content() {
|
|
542
|
+
return messages().rotateRight;
|
|
543
|
+
},
|
|
544
|
+
get ["aria-label"]() {
|
|
545
|
+
return messages().rotateRight;
|
|
546
|
+
},
|
|
547
|
+
get disabled() {
|
|
548
|
+
return disabled() || !crop() || Boolean(error());
|
|
549
|
+
},
|
|
550
|
+
onClick: rotateRight,
|
|
551
|
+
get children() {
|
|
552
|
+
return _$ssr(_tmpl$1);
|
|
553
|
+
}
|
|
554
|
+
})));
|
|
537
555
|
}
|
|
538
556
|
});
|
|
539
557
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/FileInputs.tsx"],"sourcesContent":["import { dropzone } from \"@k2b/stdlib/solid\";\nimport { createEffect, createSignal, For, type JSX, onCleanup, Show } from \"solid-js\";\nimport { Button, IconButton } from \"../actions/Button\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { FieldProps, ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport {\n clampImageCropRect,\n getInitialImageCropRect,\n type ImageCropAspect,\n type ImageCropRect,\n type ImageCropResizeHandle,\n type ImageCropRotation,\n type ImageCropSource,\n type ImageCropState,\n resizeImageCropFromCorner,\n rotateImageCropRight,\n} from \"./image-crop\";\n\nexport type FileDropzoneProps = FieldProps & {\n accept?: string;\n multiple?: boolean;\n busy?: boolean;\n /** Full icon class list, for example `\"ti ti-photo-plus\"`. Defaults to `\"ti ti-cloud-upload\"`. */\n icon?: string;\n title?: JSX.Element;\n subtitle?: JSX.Element;\n hint?: JSX.Element;\n onDrop: (files: File[]) => void | Promise<void>;\n};\n\nexport function FileDropzone(props: FileDropzoneProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const disabled = () => Boolean(props.disabled || props.busy);\n const error = () => resolveMaybeAccessor(props.error);\n let input: HTMLInputElement | undefined;\n const emit = (files: File[]) => {\n if (disabled() || files.length === 0) return;\n void props.onDrop(props.multiple === false ? files.slice(0, 1) : files);\n };\n const zone = dropzone.create({\n get accept() {\n return props.accept;\n },\n onDrop: emit,\n });\n const title = () =>\n props.busy\n ? messages().uploading\n : zone.invalidDrag()\n ? messages().fileTypeNotAccepted\n : zone.isDragging()\n ? messages().dropToUpload\n : (props.title ?? messages().dropFiles);\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n required={props.required}\n disabled={disabled()}\n >\n <button\n id={meta.controlId}\n type=\"button\"\n class=\"k2b-dropzone\"\n data-dragging={zone.isDragging() ? \"true\" : undefined}\n data-invalid={zone.invalidDrag() || error() ? \"true\" : undefined}\n disabled={disabled()}\n {...fieldControlAria(meta, props)}\n onClick={() => input?.click()}\n {...zone.handlers}\n >\n <span class=\"k2b-dropzone__icon\" aria-hidden=\"true\">\n <i class={props.busy ? \"ti ti-loader-2 k2b-spin\" : (props.icon ?? \"ti ti-cloud-upload\")} />\n </span>\n <span class=\"k2b-dropzone__copy\">\n <strong>{title()}</strong>\n <Show\n when={zone.invalidDrag()}\n fallback={\n <Show when={props.subtitle}>\n <span class=\"k2b-dropzone__subtitle\">{props.subtitle}</span>\n </Show>\n }\n >\n <span class=\"k2b-dropzone__subtitle\">{messages().chooseMatchingFile}</span>\n </Show>\n <Show when={props.hint}>\n <span class=\"k2b-dropzone__hint\">{props.hint}</span>\n </Show>\n </span>\n </button>\n <input\n ref={input}\n class=\"k2b-sr-only\"\n type=\"file\"\n aria-label={\n props[\"aria-label\"] ??\n (typeof props.label === \"string\" ? props.label : props.multiple === false ? messages().chooseFile : messages().chooseFiles)\n }\n accept={props.accept}\n multiple={props.multiple ?? true}\n disabled={disabled()}\n tabIndex={-1}\n onChange={(event) => {\n const files = Array.from(event.currentTarget.files ?? []);\n // Reset before emitting so re-picking the same file still fires change,\n // even when onDrop throws.\n event.currentTarget.value = \"\";\n emit(files);\n }}\n />\n </Field>\n );\n}\n\nexport type ImageInputProps = ValueFieldProps<string | null> & {\n round?: boolean;\n variant?: \"default\" | \"small\";\n transform?: (file: File) => Promise<string>;\n accept?: string;\n fallbackMarker?: string;\n};\n\nconst DEFAULT_IMAGE_ACCEPT = \"image/jpeg,image/png,image/gif,image/webp,image/svg+xml,.jpg,.jpeg,.png,.gif,.webp,.svg\";\n\nconst defaultImageTransform = async (file: File): Promise<string> => {\n const { img } = await import(\"@k2b/stdlib/browser\");\n return img.presets.avatar(file);\n};\n\nexport function ImageInput(props: ImageInputProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const [busy, setBusy] = createSignal(false);\n const [localError, setLocalError] = createSignal<string>();\n let input: HTMLInputElement | undefined;\n const disabled = () => Boolean(props.disabled || busy() || !props.onValueChange);\n const error = () => resolveMaybeAccessor(props.error) ?? localError();\n const value = () => {\n const current = resolveMaybeAccessor(props.value);\n return current && !current.includes(props.fallbackMarker ?? \"?fallback\") ? current : null;\n };\n const compact = () => props.variant === \"small\";\n const changeLabel = () => (value() ? messages().changeImage : messages().addImage);\n const changeIcon = () => (value() ? \"ti ti-pencil\" : \"ti ti-photo-plus\");\n const select = async (file: File | undefined) => {\n if (!file || disabled()) return;\n setBusy(true);\n setLocalError();\n try {\n const transformed = await (props.transform ?? defaultImageTransform)(file);\n commitFieldValue(props, transformed);\n } catch (error) {\n setLocalError(error instanceof Error ? error.message : messages().imageProcessingFailed);\n } finally {\n setBusy(false);\n if (input) input.value = \"\";\n }\n };\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n required={props.required}\n disabled={disabled()}\n >\n <div\n class=\"k2b-image-input\"\n data-round={props.round ? \"true\" : undefined}\n data-variant={props.variant ?? \"default\"}\n role=\"group\"\n aria-labelledby={props.label ? meta.labelId : undefined}\n aria-label={!props.label ? props[\"aria-label\"] : undefined}\n aria-describedby={fieldControlAria(meta, { ...props, error })[\"aria-describedby\"]}\n >\n <div class=\"k2b-image-input__preview\">\n <Show when={value()} fallback={<i class=\"ti ti-photo-off\" aria-hidden=\"true\" />}>\n {(source) => <img src={source()} alt={typeof props.label === \"string\" ? props.label : messages().selectedImage} />}\n </Show>\n </div>\n <div class=\"k2b-image-input__actions\">\n <Show\n when={compact()}\n fallback={\n <Button\n variant=\"secondary\"\n loading={busy()}\n loadingLabel={messages().processingImage}\n disabled={disabled()}\n onClick={() => input?.click()}\n >\n <i class={changeIcon()} aria-hidden=\"true\" />\n {value() ? messages().change : messages().add}\n </Button>\n }\n >\n <IconButton\n label={changeLabel()}\n loading={busy()}\n loadingLabel={messages().processingImage}\n disabled={disabled()}\n onClick={() => input?.click()}\n >\n <i class={changeIcon()} aria-hidden=\"true\" />\n </IconButton>\n </Show>\n <Show when={value()}>\n <Show\n when={compact()}\n fallback={\n <Button variant=\"ghost\" disabled={disabled()} onClick={() => commitFieldValue(props, null)}>\n <i class=\"ti ti-trash\" aria-hidden=\"true\" /> Remove\n </Button>\n }\n >\n <IconButton label={messages().removeImage} disabled={disabled()} onClick={() => commitFieldValue(props, null)}>\n <i class=\"ti ti-trash\" aria-hidden=\"true\" />\n </IconButton>\n </Show>\n </Show>\n </div>\n <input\n ref={input}\n id={meta.controlId}\n class=\"k2b-sr-only\"\n type=\"file\"\n accept={props.accept ?? DEFAULT_IMAGE_ACCEPT}\n disabled={disabled()}\n required={props.required && !value()}\n {...fieldControlAria(meta, { ...props, error })}\n onChange={(event) => void select(event.currentTarget.files?.[0])}\n />\n </div>\n </Field>\n );\n}\n\ntype PreviewState = {\n url: string;\n objectUrl: boolean;\n sourceWidth: number;\n sourceHeight: number;\n};\n\ntype DragHandle = \"move\" | ImageCropResizeHandle;\ntype DragState = {\n handle: DragHandle;\n pointerId: number;\n startX: number;\n startY: number;\n startCrop: ImageCropRect;\n};\n\nexport type ImageCropperProps = {\n source: ImageCropSource;\n aspect?: ImageCropAspect;\n previewShape?: \"rect\" | \"circle\";\n disabled?: boolean;\n onValueChange?: (state: ImageCropState | null) => void;\n class?: string;\n};\n\nconst clamp = (value: number, min: number, max: number) => Math.max(min, Math.min(max, value));\n\nconst imageElementReady = async (image: HTMLImageElement): Promise<void> => {\n if (image.complete && image.naturalWidth > 0) return;\n await new Promise<void>((resolve, reject) => {\n image.addEventListener(\"load\", () => resolve(), { once: true });\n image.addEventListener(\"error\", () => reject(new Error(\"Failed to load image.\")), { once: true });\n });\n};\n\nconst loadPreviewState = async (source: ImageCropSource): Promise<PreviewState> => {\n const sourceImage =\n source instanceof HTMLImageElement\n ? source\n : Object.assign(new Image(), {\n crossOrigin: source instanceof Blob ? undefined : \"anonymous\",\n src:\n source instanceof HTMLCanvasElement\n ? source.toDataURL(\"image/png\")\n : source instanceof Blob\n ? URL.createObjectURL(source)\n : source,\n });\n\n try {\n await imageElementReady(sourceImage);\n return {\n url: source instanceof HTMLImageElement ? source.currentSrc || source.src : sourceImage.src,\n objectUrl: source instanceof Blob,\n sourceWidth: sourceImage.naturalWidth || sourceImage.width,\n sourceHeight: sourceImage.naturalHeight || sourceImage.height,\n };\n } catch (error) {\n if (source instanceof Blob) URL.revokeObjectURL(sourceImage.src);\n throw error;\n }\n};\n\nexport function ImageCropper(props: ImageCropperProps): JSX.Element {\n const messages = useUiMessages();\n let frame: HTMLDivElement | undefined;\n let activePreview: PreviewState | null = null;\n const aspect = () => props.aspect ?? \"free\";\n const previewShape = () => props.previewShape ?? \"rect\";\n const disabled = () => props.disabled ?? false;\n const [preview, setPreview] = createSignal<PreviewState | null>(null);\n const [crop, setCrop] = createSignal<ImageCropRect | null>(null);\n const [rotation, setRotation] = createSignal<ImageCropRotation>(0);\n const [loading, setLoading] = createSignal(true);\n const [error, setError] = createSignal<string | null>(null);\n const [drag, setDrag] = createSignal<DragState | null>(null);\n\n const previewSize = (): { width: number; height: number } | null => {\n const currentPreview = preview();\n if (!currentPreview) return null;\n const swapsDimensions = rotation() === 90 || rotation() === 270;\n return {\n width: swapsDimensions ? currentPreview.sourceHeight : currentPreview.sourceWidth,\n height: swapsDimensions ? currentPreview.sourceWidth : currentPreview.sourceHeight,\n };\n };\n\n const replacePreview = (next: PreviewState | null) => {\n if (activePreview?.objectUrl) URL.revokeObjectURL(activePreview.url);\n activePreview = next;\n setPreview(next);\n };\n\n onCleanup(() => {\n if (activePreview?.objectUrl) URL.revokeObjectURL(activePreview.url);\n });\n\n createEffect(() => {\n props.source;\n setRotation(0);\n setCrop(null);\n });\n\n createEffect(() => {\n const source = props.source;\n let disposed = false;\n replacePreview(null);\n setLoading(true);\n setError(null);\n\n void (async () => {\n try {\n const nextPreview = await loadPreviewState(source);\n if (disposed) {\n if (nextPreview.objectUrl) URL.revokeObjectURL(nextPreview.url);\n return;\n }\n replacePreview(nextPreview);\n } catch {\n if (disposed) return;\n replacePreview(null);\n setCrop(null);\n setError(messages().failedLoadImage);\n } finally {\n if (!disposed) setLoading(false);\n }\n })();\n\n onCleanup(() => {\n disposed = true;\n });\n });\n\n createEffect(() => {\n const currentSize = previewSize();\n const currentAspect = aspect();\n if (!currentSize) return;\n setCrop((current) => clampImageCropRect(current ?? getInitialImageCropRect(currentSize, currentAspect), currentSize, currentAspect));\n });\n\n createEffect(() => {\n const currentCrop = crop();\n const currentPreview = preview();\n props.onValueChange?.(currentCrop && currentPreview ? { crop: currentCrop, rotation: rotation() } : null);\n });\n\n const readPointerPosition = (event: PointerEvent) => {\n if (!frame) return { x: 0, y: 0 };\n const rect = frame.getBoundingClientRect();\n return {\n x: (event.clientX - rect.left) / Math.max(1, rect.width),\n y: (event.clientY - rect.top) / Math.max(1, rect.height),\n };\n };\n\n const moveCrop = (event: PointerEvent) => {\n const state = drag();\n const currentSize = previewSize();\n if (!state || !currentSize || state.pointerId !== event.pointerId) return;\n event.preventDefault();\n const point = readPointerPosition(event);\n const dx = point.x - state.startX;\n const dy = point.y - state.startY;\n const start = state.startCrop;\n\n if (state.handle === \"move\") {\n setCrop(\n clampImageCropRect(\n {\n ...start,\n x: start.x + dx,\n y: start.y + dy,\n },\n currentSize,\n aspect(),\n ),\n );\n return;\n }\n\n setCrop(resizeImageCropFromCorner(start, currentSize, aspect(), state.handle, dx, dy));\n };\n\n const endDrag = (event: PointerEvent) => {\n const state = drag();\n if (!state || state.pointerId !== event.pointerId) return;\n window.removeEventListener(\"pointermove\", moveCrop);\n window.removeEventListener(\"pointerup\", endDrag);\n window.removeEventListener(\"pointercancel\", endDrag);\n setDrag(null);\n };\n\n const startDrag = (handle: DragHandle, event: PointerEvent) => {\n const currentCrop = crop();\n if (!currentCrop || disabled()) return;\n event.preventDefault();\n event.stopPropagation();\n (event.currentTarget as Element).setPointerCapture?.(event.pointerId);\n const point = readPointerPosition(event);\n setDrag({\n handle,\n pointerId: event.pointerId,\n startX: point.x,\n startY: point.y,\n startCrop: currentCrop,\n });\n window.addEventListener(\"pointermove\", moveCrop);\n window.addEventListener(\"pointerup\", endDrag);\n window.addEventListener(\"pointercancel\", endDrag);\n };\n\n onCleanup(() => {\n if (typeof window === \"undefined\") return;\n window.removeEventListener(\"pointermove\", moveCrop);\n window.removeEventListener(\"pointerup\", endDrag);\n window.removeEventListener(\"pointercancel\", endDrag);\n });\n\n const rotateRight = () => {\n if (disabled()) return;\n setRotation((current) => rotateImageCropRight(current));\n };\n\n const nudgeCrop = (handle: DragHandle, event: KeyboardEvent) => {\n if (disabled() || ![\"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)) return;\n const current = crop();\n const currentSize = previewSize();\n if (!current || !currentSize) return;\n event.preventDefault();\n const step = event.shiftKey ? 0.05 : 0.01;\n const dx = event.key === \"ArrowLeft\" ? -step : event.key === \"ArrowRight\" ? step : 0;\n const dy = event.key === \"ArrowUp\" ? -step : event.key === \"ArrowDown\" ? step : 0;\n setCrop(\n handle === \"move\"\n ? clampImageCropRect({ ...current, x: current.x + dx, y: current.y + dy }, currentSize, aspect())\n : resizeImageCropFromCorner(current, currentSize, aspect(), handle, dx, dy),\n );\n };\n\n const previewFrameStyle = (): JSX.CSSProperties => {\n const currentSize = previewSize();\n if (!currentSize) return {};\n return {\n \"aspect-ratio\": `${currentSize.width} / ${currentSize.height}`,\n \"max-width\": `min(100%, calc(min(58vh, 24rem) * ${currentSize.width} / ${currentSize.height}))`,\n };\n };\n\n const previewImageStyle = (): JSX.CSSProperties => {\n const currentPreview = preview();\n const currentSize = previewSize();\n if (!currentPreview || !currentSize) return {};\n const swapsDimensions = rotation() === 90 || rotation() === 270;\n return {\n left: \"50%\",\n top: \"50%\",\n width: swapsDimensions ? `${(currentPreview.sourceWidth / currentSize.width) * 100}%` : \"100%\",\n height: swapsDimensions ? `${(currentPreview.sourceHeight / currentSize.height) * 100}%` : \"100%\",\n \"max-width\": \"none\",\n \"object-fit\": \"fill\",\n transform: `translate(-50%, -50%) rotate(${rotation()}deg)`,\n };\n };\n\n const cropStyle = (): JSX.CSSProperties => {\n const currentCrop = crop();\n if (!currentCrop) return {};\n return {\n left: `${currentCrop.x * 100}%`,\n top: `${currentCrop.y * 100}%`,\n width: `${currentCrop.width * 100}%`,\n height: `${currentCrop.height * 100}%`,\n \"box-shadow\": \"0 0 0 9999px rgba(0,0,0,.42)\",\n };\n };\n\n const showResizeHandles = () => previewShape() !== \"circle\";\n\n return (\n <div class={`k2b-image-cropper ${props.class ?? \"\"}`}>\n <div class=\"k2b-image-cropper__stage\">\n <Show when={!loading()} fallback={<small>{messages().preparingImage}</small>}>\n <Show when={!error()} fallback={<small class=\"k2b-image-cropper__error\">{error()}</small>}>\n <Show when={preview() && crop()}>\n <div ref={frame} class=\"k2b-image-cropper__frame\" style={previewFrameStyle()}>\n <img src={preview()!.url} alt={messages().cropPreview} draggable={false} style={previewImageStyle()} />\n <div\n class=\"k2b-image-cropper__selection\"\n data-shape={previewShape()}\n style={cropStyle()}\n role=\"group\"\n tabIndex={disabled() ? undefined : 0}\n aria-label={messages().cropArea}\n onPointerDown={(event) => startDrag(\"move\", event)}\n onKeyDown={(event) => nudgeCrop(\"move\", event)}\n >\n <Show when={showResizeHandles()}>\n <For each={[\"nw\", \"ne\", \"sw\", \"se\"] as const}>\n {(handle) => (\n <button\n type=\"button\"\n class=\"k2b-image-cropper__handle\"\n data-handle={handle}\n aria-label={messages().resizeCrop({ handle })}\n disabled={disabled()}\n onPointerDown={(event) => startDrag(handle, event)}\n onKeyDown={(event) => nudgeCrop(handle, event)}\n />\n )}\n </For>\n </Show>\n </div>\n <button\n type=\"button\"\n class=\"k2b-image-cropper__rotate\"\n title={messages().rotateRight}\n aria-label={messages().rotateRight}\n disabled={disabled() || !crop() || Boolean(error())}\n onClick={rotateRight}\n >\n <i class=\"ti ti-rotate-clockwise\" aria-hidden=\"true\" />\n </button>\n </div>\n </Show>\n </Show>\n </Show>\n </div>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/FileInputs.tsx"],"sourcesContent":["import { dropzone } from \"@k2b/stdlib/solid\";\nimport { createEffect, createSignal, For, type JSX, onCleanup, Show } from \"solid-js\";\nimport { Button, IconButton } from \"../actions/Button\";\nimport { Tooltip } from \"../feedback/Tooltip\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { FieldProps, ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport {\n clampImageCropRect,\n getInitialImageCropRect,\n type ImageCropAspect,\n type ImageCropRect,\n type ImageCropResizeHandle,\n type ImageCropRotation,\n type ImageCropSource,\n type ImageCropState,\n resizeImageCropFromCorner,\n rotateImageCropRight,\n} from \"./image-crop\";\n\nexport type FileDropzoneProps = FieldProps & {\n accept?: string;\n multiple?: boolean;\n busy?: boolean;\n /** Full icon class list, for example `\"ti ti-photo-plus\"`. Defaults to `\"ti ti-cloud-upload\"`. */\n icon?: string;\n title?: JSX.Element;\n subtitle?: JSX.Element;\n hint?: JSX.Element;\n onDrop: (files: File[]) => void | Promise<void>;\n};\n\nexport function FileDropzone(props: FileDropzoneProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const disabled = () => Boolean(props.disabled || props.busy);\n const error = () => resolveMaybeAccessor(props.error);\n let input: HTMLInputElement | undefined;\n const emit = (files: File[]) => {\n if (disabled() || files.length === 0) return;\n void props.onDrop(props.multiple === false ? files.slice(0, 1) : files);\n };\n const zone = dropzone.create({\n get accept() {\n return props.accept;\n },\n onDrop: emit,\n });\n const title = () =>\n props.busy\n ? messages().uploading\n : zone.invalidDrag()\n ? messages().fileTypeNotAccepted\n : zone.isDragging()\n ? messages().dropToUpload\n : (props.title ?? messages().dropFiles);\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n required={props.required}\n disabled={disabled()}\n >\n <button\n id={meta.controlId}\n type=\"button\"\n class=\"k2b-dropzone\"\n data-dragging={zone.isDragging() ? \"true\" : undefined}\n data-invalid={zone.invalidDrag() || error() ? \"true\" : undefined}\n disabled={disabled()}\n {...fieldControlAria(meta, props)}\n onClick={() => input?.click()}\n {...zone.handlers}\n >\n <span class=\"k2b-dropzone__icon\" aria-hidden=\"true\">\n <i class={props.busy ? \"ti ti-loader-2 k2b-spin\" : (props.icon ?? \"ti ti-cloud-upload\")} />\n </span>\n <span class=\"k2b-dropzone__copy\">\n <strong>{title()}</strong>\n <Show\n when={zone.invalidDrag()}\n fallback={\n <Show when={props.subtitle}>\n <span class=\"k2b-dropzone__subtitle\">{props.subtitle}</span>\n </Show>\n }\n >\n <span class=\"k2b-dropzone__subtitle\">{messages().chooseMatchingFile}</span>\n </Show>\n <Show when={props.hint}>\n <span class=\"k2b-dropzone__hint\">{props.hint}</span>\n </Show>\n </span>\n </button>\n <input\n ref={input}\n class=\"k2b-sr-only\"\n type=\"file\"\n aria-label={\n props[\"aria-label\"] ??\n (typeof props.label === \"string\" ? props.label : props.multiple === false ? messages().chooseFile : messages().chooseFiles)\n }\n accept={props.accept}\n multiple={props.multiple ?? true}\n disabled={disabled()}\n tabIndex={-1}\n onChange={(event) => {\n const files = Array.from(event.currentTarget.files ?? []);\n // Reset before emitting so re-picking the same file still fires change,\n // even when onDrop throws.\n event.currentTarget.value = \"\";\n emit(files);\n }}\n />\n </Field>\n );\n}\n\nexport type ImageInputProps = ValueFieldProps<string | null> & {\n round?: boolean;\n variant?: \"default\" | \"small\";\n transform?: (file: File) => Promise<string>;\n accept?: string;\n fallbackMarker?: string;\n};\n\nconst DEFAULT_IMAGE_ACCEPT = \"image/jpeg,image/png,image/gif,image/webp,image/svg+xml,.jpg,.jpeg,.png,.gif,.webp,.svg\";\n\nconst defaultImageTransform = async (file: File): Promise<string> => {\n const { img } = await import(\"@k2b/stdlib/browser\");\n return img.presets.avatar(file);\n};\n\nexport function ImageInput(props: ImageInputProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const [busy, setBusy] = createSignal(false);\n const [localError, setLocalError] = createSignal<string>();\n let input: HTMLInputElement | undefined;\n const disabled = () => Boolean(props.disabled || busy() || !props.onValueChange);\n const error = () => resolveMaybeAccessor(props.error) ?? localError();\n const value = () => {\n const current = resolveMaybeAccessor(props.value);\n return current && !current.includes(props.fallbackMarker ?? \"?fallback\") ? current : null;\n };\n const compact = () => props.variant === \"small\";\n const changeLabel = () => (value() ? messages().changeImage : messages().addImage);\n const changeIcon = () => (value() ? \"ti ti-pencil\" : \"ti ti-photo-plus\");\n const select = async (file: File | undefined) => {\n if (!file || disabled()) return;\n setBusy(true);\n setLocalError();\n try {\n const transformed = await (props.transform ?? defaultImageTransform)(file);\n commitFieldValue(props, transformed);\n } catch (error) {\n setLocalError(error instanceof Error ? error.message : messages().imageProcessingFailed);\n } finally {\n setBusy(false);\n if (input) input.value = \"\";\n }\n };\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n required={props.required}\n disabled={disabled()}\n >\n <div\n class=\"k2b-image-input\"\n data-round={props.round ? \"true\" : undefined}\n data-variant={props.variant ?? \"default\"}\n role=\"group\"\n aria-labelledby={props.label ? meta.labelId : undefined}\n aria-label={!props.label ? props[\"aria-label\"] : undefined}\n aria-describedby={fieldControlAria(meta, { ...props, error })[\"aria-describedby\"]}\n >\n <div class=\"k2b-image-input__preview\">\n <Show when={value()} fallback={<i class=\"ti ti-photo-off\" aria-hidden=\"true\" />}>\n {(source) => <img src={source()} alt={typeof props.label === \"string\" ? props.label : messages().selectedImage} />}\n </Show>\n </div>\n <div class=\"k2b-image-input__actions\">\n <Show\n when={compact()}\n fallback={\n <Button\n variant=\"secondary\"\n loading={busy()}\n loadingLabel={messages().processingImage}\n disabled={disabled()}\n onClick={() => input?.click()}\n >\n <i class={changeIcon()} aria-hidden=\"true\" />\n {value() ? messages().change : messages().add}\n </Button>\n }\n >\n <IconButton\n label={changeLabel()}\n loading={busy()}\n loadingLabel={messages().processingImage}\n disabled={disabled()}\n onClick={() => input?.click()}\n >\n <i class={changeIcon()} aria-hidden=\"true\" />\n </IconButton>\n </Show>\n <Show when={value()}>\n <Show\n when={compact()}\n fallback={\n <Button variant=\"ghost\" disabled={disabled()} onClick={() => commitFieldValue(props, null)}>\n <i class=\"ti ti-trash\" aria-hidden=\"true\" /> Remove\n </Button>\n }\n >\n <IconButton label={messages().removeImage} disabled={disabled()} onClick={() => commitFieldValue(props, null)}>\n <i class=\"ti ti-trash\" aria-hidden=\"true\" />\n </IconButton>\n </Show>\n </Show>\n </div>\n <input\n ref={input}\n id={meta.controlId}\n class=\"k2b-sr-only\"\n type=\"file\"\n accept={props.accept ?? DEFAULT_IMAGE_ACCEPT}\n disabled={disabled()}\n required={props.required && !value()}\n {...fieldControlAria(meta, { ...props, error })}\n onChange={(event) => void select(event.currentTarget.files?.[0])}\n />\n </div>\n </Field>\n );\n}\n\ntype PreviewState = {\n url: string;\n objectUrl: boolean;\n sourceWidth: number;\n sourceHeight: number;\n};\n\ntype DragHandle = \"move\" | ImageCropResizeHandle;\ntype DragState = {\n handle: DragHandle;\n pointerId: number;\n startX: number;\n startY: number;\n startCrop: ImageCropRect;\n};\n\nexport type ImageCropperProps = {\n source: ImageCropSource;\n aspect?: ImageCropAspect;\n previewShape?: \"rect\" | \"circle\";\n disabled?: boolean;\n onValueChange?: (state: ImageCropState | null) => void;\n class?: string;\n};\n\nconst clamp = (value: number, min: number, max: number) => Math.max(min, Math.min(max, value));\n\nconst imageElementReady = async (image: HTMLImageElement): Promise<void> => {\n if (image.complete && image.naturalWidth > 0) return;\n await new Promise<void>((resolve, reject) => {\n image.addEventListener(\"load\", () => resolve(), { once: true });\n image.addEventListener(\"error\", () => reject(new Error(\"Failed to load image.\")), { once: true });\n });\n};\n\nconst loadPreviewState = async (source: ImageCropSource): Promise<PreviewState> => {\n const sourceImage =\n source instanceof HTMLImageElement\n ? source\n : Object.assign(new Image(), {\n crossOrigin: source instanceof Blob ? undefined : \"anonymous\",\n src:\n source instanceof HTMLCanvasElement\n ? source.toDataURL(\"image/png\")\n : source instanceof Blob\n ? URL.createObjectURL(source)\n : source,\n });\n\n try {\n await imageElementReady(sourceImage);\n return {\n url: source instanceof HTMLImageElement ? source.currentSrc || source.src : sourceImage.src,\n objectUrl: source instanceof Blob,\n sourceWidth: sourceImage.naturalWidth || sourceImage.width,\n sourceHeight: sourceImage.naturalHeight || sourceImage.height,\n };\n } catch (error) {\n if (source instanceof Blob) URL.revokeObjectURL(sourceImage.src);\n throw error;\n }\n};\n\nexport function ImageCropper(props: ImageCropperProps): JSX.Element {\n const messages = useUiMessages();\n let frame: HTMLDivElement | undefined;\n let activePreview: PreviewState | null = null;\n const aspect = () => props.aspect ?? \"free\";\n const previewShape = () => props.previewShape ?? \"rect\";\n const disabled = () => props.disabled ?? false;\n const [preview, setPreview] = createSignal<PreviewState | null>(null);\n const [crop, setCrop] = createSignal<ImageCropRect | null>(null);\n const [rotation, setRotation] = createSignal<ImageCropRotation>(0);\n const [loading, setLoading] = createSignal(true);\n const [error, setError] = createSignal<string | null>(null);\n const [drag, setDrag] = createSignal<DragState | null>(null);\n\n const previewSize = (): { width: number; height: number } | null => {\n const currentPreview = preview();\n if (!currentPreview) return null;\n const swapsDimensions = rotation() === 90 || rotation() === 270;\n return {\n width: swapsDimensions ? currentPreview.sourceHeight : currentPreview.sourceWidth,\n height: swapsDimensions ? currentPreview.sourceWidth : currentPreview.sourceHeight,\n };\n };\n\n const replacePreview = (next: PreviewState | null) => {\n if (activePreview?.objectUrl) URL.revokeObjectURL(activePreview.url);\n activePreview = next;\n setPreview(next);\n };\n\n onCleanup(() => {\n if (activePreview?.objectUrl) URL.revokeObjectURL(activePreview.url);\n });\n\n createEffect(() => {\n props.source;\n setRotation(0);\n setCrop(null);\n });\n\n createEffect(() => {\n const source = props.source;\n let disposed = false;\n replacePreview(null);\n setLoading(true);\n setError(null);\n\n void (async () => {\n try {\n const nextPreview = await loadPreviewState(source);\n if (disposed) {\n if (nextPreview.objectUrl) URL.revokeObjectURL(nextPreview.url);\n return;\n }\n replacePreview(nextPreview);\n } catch {\n if (disposed) return;\n replacePreview(null);\n setCrop(null);\n setError(messages().failedLoadImage);\n } finally {\n if (!disposed) setLoading(false);\n }\n })();\n\n onCleanup(() => {\n disposed = true;\n });\n });\n\n createEffect(() => {\n const currentSize = previewSize();\n const currentAspect = aspect();\n if (!currentSize) return;\n setCrop((current) => clampImageCropRect(current ?? getInitialImageCropRect(currentSize, currentAspect), currentSize, currentAspect));\n });\n\n createEffect(() => {\n const currentCrop = crop();\n const currentPreview = preview();\n props.onValueChange?.(currentCrop && currentPreview ? { crop: currentCrop, rotation: rotation() } : null);\n });\n\n const readPointerPosition = (event: PointerEvent) => {\n if (!frame) return { x: 0, y: 0 };\n const rect = frame.getBoundingClientRect();\n return {\n x: (event.clientX - rect.left) / Math.max(1, rect.width),\n y: (event.clientY - rect.top) / Math.max(1, rect.height),\n };\n };\n\n const moveCrop = (event: PointerEvent) => {\n const state = drag();\n const currentSize = previewSize();\n if (!state || !currentSize || state.pointerId !== event.pointerId) return;\n event.preventDefault();\n const point = readPointerPosition(event);\n const dx = point.x - state.startX;\n const dy = point.y - state.startY;\n const start = state.startCrop;\n\n if (state.handle === \"move\") {\n setCrop(\n clampImageCropRect(\n {\n ...start,\n x: start.x + dx,\n y: start.y + dy,\n },\n currentSize,\n aspect(),\n ),\n );\n return;\n }\n\n setCrop(resizeImageCropFromCorner(start, currentSize, aspect(), state.handle, dx, dy));\n };\n\n const endDrag = (event: PointerEvent) => {\n const state = drag();\n if (!state || state.pointerId !== event.pointerId) return;\n window.removeEventListener(\"pointermove\", moveCrop);\n window.removeEventListener(\"pointerup\", endDrag);\n window.removeEventListener(\"pointercancel\", endDrag);\n setDrag(null);\n };\n\n const startDrag = (handle: DragHandle, event: PointerEvent) => {\n const currentCrop = crop();\n if (!currentCrop || disabled()) return;\n event.preventDefault();\n event.stopPropagation();\n (event.currentTarget as Element).setPointerCapture?.(event.pointerId);\n const point = readPointerPosition(event);\n setDrag({\n handle,\n pointerId: event.pointerId,\n startX: point.x,\n startY: point.y,\n startCrop: currentCrop,\n });\n window.addEventListener(\"pointermove\", moveCrop);\n window.addEventListener(\"pointerup\", endDrag);\n window.addEventListener(\"pointercancel\", endDrag);\n };\n\n onCleanup(() => {\n if (typeof window === \"undefined\") return;\n window.removeEventListener(\"pointermove\", moveCrop);\n window.removeEventListener(\"pointerup\", endDrag);\n window.removeEventListener(\"pointercancel\", endDrag);\n });\n\n const rotateRight = () => {\n if (disabled()) return;\n setRotation((current) => rotateImageCropRight(current));\n };\n\n const nudgeCrop = (handle: DragHandle, event: KeyboardEvent) => {\n if (disabled() || ![\"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)) return;\n const current = crop();\n const currentSize = previewSize();\n if (!current || !currentSize) return;\n event.preventDefault();\n const step = event.shiftKey ? 0.05 : 0.01;\n const dx = event.key === \"ArrowLeft\" ? -step : event.key === \"ArrowRight\" ? step : 0;\n const dy = event.key === \"ArrowUp\" ? -step : event.key === \"ArrowDown\" ? step : 0;\n setCrop(\n handle === \"move\"\n ? clampImageCropRect({ ...current, x: current.x + dx, y: current.y + dy }, currentSize, aspect())\n : resizeImageCropFromCorner(current, currentSize, aspect(), handle, dx, dy),\n );\n };\n\n const previewFrameStyle = (): JSX.CSSProperties => {\n const currentSize = previewSize();\n if (!currentSize) return {};\n return {\n \"aspect-ratio\": `${currentSize.width} / ${currentSize.height}`,\n \"max-width\": `min(100%, calc(min(58vh, 24rem) * ${currentSize.width} / ${currentSize.height}))`,\n };\n };\n\n const previewImageStyle = (): JSX.CSSProperties => {\n const currentPreview = preview();\n const currentSize = previewSize();\n if (!currentPreview || !currentSize) return {};\n const swapsDimensions = rotation() === 90 || rotation() === 270;\n return {\n left: \"50%\",\n top: \"50%\",\n width: swapsDimensions ? `${(currentPreview.sourceWidth / currentSize.width) * 100}%` : \"100%\",\n height: swapsDimensions ? `${(currentPreview.sourceHeight / currentSize.height) * 100}%` : \"100%\",\n \"max-width\": \"none\",\n \"object-fit\": \"fill\",\n transform: `translate(-50%, -50%) rotate(${rotation()}deg)`,\n };\n };\n\n const cropStyle = (): JSX.CSSProperties => {\n const currentCrop = crop();\n if (!currentCrop) return {};\n return {\n left: `${currentCrop.x * 100}%`,\n top: `${currentCrop.y * 100}%`,\n width: `${currentCrop.width * 100}%`,\n height: `${currentCrop.height * 100}%`,\n \"box-shadow\": \"0 0 0 9999px rgba(0,0,0,.42)\",\n };\n };\n\n const showResizeHandles = () => previewShape() !== \"circle\";\n\n return (\n <div class={`k2b-image-cropper ${props.class ?? \"\"}`}>\n <div class=\"k2b-image-cropper__stage\">\n <Show when={!loading()} fallback={<small>{messages().preparingImage}</small>}>\n <Show when={!error()} fallback={<small class=\"k2b-image-cropper__error\">{error()}</small>}>\n <Show when={preview() && crop()}>\n <div ref={frame} class=\"k2b-image-cropper__frame\" style={previewFrameStyle()}>\n <img src={preview()!.url} alt={messages().cropPreview} draggable={false} style={previewImageStyle()} />\n <div\n class=\"k2b-image-cropper__selection\"\n data-shape={previewShape()}\n style={cropStyle()}\n role=\"group\"\n tabIndex={disabled() ? undefined : 0}\n aria-label={messages().cropArea}\n onPointerDown={(event) => startDrag(\"move\", event)}\n onKeyDown={(event) => nudgeCrop(\"move\", event)}\n >\n <Show when={showResizeHandles()}>\n <For each={[\"nw\", \"ne\", \"sw\", \"se\"] as const}>\n {(handle) => (\n <button\n type=\"button\"\n class=\"k2b-image-cropper__handle\"\n data-handle={handle}\n aria-label={messages().resizeCrop({ handle })}\n disabled={disabled()}\n onPointerDown={(event) => startDrag(handle, event)}\n onKeyDown={(event) => nudgeCrop(handle, event)}\n />\n )}\n </For>\n </Show>\n </div>\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-image-cropper__rotate\"\n content={messages().rotateRight}\n aria-label={messages().rotateRight}\n disabled={disabled() || !crop() || Boolean(error())}\n onClick={rotateRight}\n >\n <i class=\"ti ti-rotate-clockwise\" aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </div>\n </Show>\n </Show>\n </Show>\n </div>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -57,8 +57,9 @@ export function SelectChip(props) {
|
|
|
57
57
|
return props.position ?? "bottom-right";
|
|
58
58
|
},
|
|
59
59
|
get width() {
|
|
60
|
-
return props.menuWidth
|
|
60
|
+
return props.menuWidth;
|
|
61
61
|
},
|
|
62
|
+
menuClass: "k2b-select-chip__menu",
|
|
62
63
|
get label() {
|
|
63
64
|
return triggerLabel();
|
|
64
65
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/SelectChip.tsx"],"sourcesContent":["import { createMemo, type JSX, Show } from \"solid-js\";\nimport type { ButtonSize } from \"../actions/Button\";\nimport { Dropdown, type DropdownItem, type DropdownPosition } from \"../actions/Dropdown\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { MaybeAccessor, ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\n\nexport type SelectChipOption<T extends string | number = string> = {\n value: T;\n label: string;\n description?: string;\n icon?: string;\n image?: string;\n disabled?: boolean;\n};\n\nexport type SelectChipProps<T extends string | number = string> = ValueFieldProps<T> & {\n value: MaybeAccessor<T>;\n options: SelectChipOption<T>[];\n icon?: string;\n iconOnly?: boolean;\n size?: ButtonSize;\n placeholder?: string;\n position?: DropdownPosition;\n menuWidth?: string;\n name?: string;\n};\n\nexport function SelectChip<T extends string | number = string>(props: SelectChipProps<T>): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const value = () => resolveMaybeAccessor(props.value)!;\n const selected = () => props.options.find((option) => option.value === value());\n const triggerLabel = () => props[\"aria-label\"] ?? (typeof props.label === \"string\" ? props.label : messages().chooseOption);\n const items = createMemo<DropdownItem[]>(() =>\n props.options.map((option) => ({\n action: () => commitFieldValue(props, option.value),\n checked: () => option.value === value(),\n choice: \"radio\" as const,\n class: \"k2b-select-chip__option\",\n description: option.description,\n disabled: option.disabled,\n icon: option.icon,\n image: option.image,\n label: option.label,\n })),\n );\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <Dropdown.Root\n position={props.position ?? \"bottom-right\"}\n /* Cloud opens this menu at `w-40
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/SelectChip.tsx"],"sourcesContent":["import { createMemo, type JSX, Show } from \"solid-js\";\nimport type { ButtonSize } from \"../actions/Button\";\nimport { Dropdown, type DropdownItem, type DropdownPosition } from \"../actions/Dropdown\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { MaybeAccessor, ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\n\nexport type SelectChipOption<T extends string | number = string> = {\n value: T;\n label: string;\n description?: string;\n icon?: string;\n image?: string;\n disabled?: boolean;\n};\n\nexport type SelectChipProps<T extends string | number = string> = ValueFieldProps<T> & {\n value: MaybeAccessor<T>;\n options: SelectChipOption<T>[];\n icon?: string;\n iconOnly?: boolean;\n size?: ButtonSize;\n placeholder?: string;\n position?: DropdownPosition;\n /** Exact menu width as a CSS length. Without it the menu sizes to its options, at least `10rem`. */\n menuWidth?: string;\n name?: string;\n};\n\nexport function SelectChip<T extends string | number = string>(props: SelectChipProps<T>): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const value = () => resolveMaybeAccessor(props.value)!;\n const selected = () => props.options.find((option) => option.value === value());\n const triggerLabel = () => props[\"aria-label\"] ?? (typeof props.label === \"string\" ? props.label : messages().chooseOption);\n const items = createMemo<DropdownItem[]>(() =>\n props.options.map((option) => ({\n action: () => commitFieldValue(props, option.value),\n checked: () => option.value === value(),\n choice: \"radio\" as const,\n class: \"k2b-select-chip__option\",\n description: option.description,\n disabled: option.disabled,\n icon: option.icon,\n image: option.image,\n label: option.label,\n })),\n );\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <Dropdown.Root\n position={props.position ?? \"bottom-right\"}\n /* Cloud opens this menu at `w-40`; the stylesheet keeps that as its floor. */\n width={props.menuWidth}\n menuClass=\"k2b-select-chip__menu\"\n label={triggerLabel()}\n items={items()}\n >\n <Dropdown.Trigger\n appearance={props.iconOnly ? \"button\" : \"plain\"}\n id={meta.controlId}\n class={props.iconOnly ? undefined : \"k2b-select-chip\"}\n disabled={props.disabled}\n iconOnly={props.iconOnly}\n label={triggerLabel()}\n size={props.iconOnly ? props.size : undefined}\n title={props.iconOnly ? triggerLabel() : undefined}\n {...fieldControlAria(meta, props)}\n >\n <Show\n when={selected()?.image}\n fallback={<Show when={selected()?.icon ?? props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}\n >\n {(image) => <img src={image()} alt=\"\" />}\n </Show>\n <Show when={!props.iconOnly}>\n <span data-placeholder={selected() ? undefined : \"true\"}>{selected()?.label ?? props.placeholder ?? \"\"}</span>\n <i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />\n </Show>\n </Dropdown.Trigger>\n </Dropdown.Root>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value()} />}</Show>\n </Field>\n );\n}\n\nexport default SelectChip;\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,UAAU,EAAY,IAAI,QAAQ,UAAU;AAErD,SAAS,QAAQ,QAAkD,qBAAqB;AACxF,SAAS,eAAe,EAAE,KAAK,EAAE,gBAAgB,QAAQ,mBAAmB;AAC5E,SAAS,aAAa,QAAQ,kBAAkB;AAEhD,SAAS,gBAAgB,EAAE,oBAAoB,QAAQ,kBAAkB;AAwBzE,OAAO,SAAS,UAAU,CAAqC,KAAyB,EAAe;EACrG,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;EACtC,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAE;EACtD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAE,MAAM,IAAK,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC;EAC/E,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;EAC3H,MAAM,KAAK,GAAG,UAAU,CAAiB,MACvC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAE,MAAM,KAAM;IAC7B,MAAM,EAAE,MAAM,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;IACnD,OAAO,EAAE,MAAM,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IACvC,MAAM,EAAE,OAAgB;IACxB,KAAK,EAAE,yBAAyB;IAChC,WAAW,EAAE,MAAM,CAAC,WAAW;IAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;IACzB,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,KAAK,EAAE,MAAM,CAAC,KAAK;IACnB,KAAK,EAAE,MAAM,CAAC;EAChB,CAAC,CAAC,CACJ,CAAC;EAED,yBACG,KAAK;IAAA;MAAA,OACG,KAAK,CAAC,KAAK;IAAA;IAAA,IAClB,KAAK;MAAA,OAAE,KAAK,CAAC,KAAK;IAAA;IAAA,IAClB,WAAW;MAAA,OAAE,KAAK,CAAC,WAAW;IAAA;IAAA,IAC9B,KAAK;MAAA,OAAE,KAAK,CAAC,KAAK;IAAA;IAClB,IAAI,EAAE,IAAI;IAAA,IACV,QAAQ;MAAA,OAAE,KAAK,CAAC,QAAQ;IAAA;IAAA,IACxB,QAAQ;MAAA,OAAE,KAAK,CAAC,QAAQ;IAAA;IAAA;MAAA,0BAEvB,QAAQ,CAAC,IAAI;QAAA,IACZ,QAAQ;UAAA,OAAE,KAAK,CAAC,QAAQ,IAAI,cAAc;QAAA;QAAA,IAE1C,KAAK;UAAA,OAAE,KAAK,CAAC,SAAS;QAAA;QACtB,SAAS;QAAA,IACT,KAAK;UAAA,OAAE,YAAY,CAAC,CAAC;QAAA;QAAA,IACrB,KAAK;UAAA,OAAE,KAAK,CAAC,CAAC;QAAA;QAAA;UAAA,yBAEb,QAAQ,CAAC,OAAO;YAAA,IACf,UAAU;cAAA,OAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,GAAG,OAAO;YAAA;YAAA,IAC/C,EAAE;cAAA,OAAE,IAAI,CAAC,SAAS;YAAA;YAAA;cAAA,OACX,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,iBAAiB;YAAA;YAAA,IACrD,QAAQ;cAAA,OAAE,KAAK,CAAC,QAAQ;YAAA;YAAA,IACxB,QAAQ;cAAA,OAAE,KAAK,CAAC,QAAQ;YAAA;YAAA,IACxB,KAAK;cAAA,OAAE,YAAY,CAAC,CAAC;YAAA;YAAA,IACrB,IAAI;cAAA,OAAE,oBAAK,CAAC,QAAQ,MAAG,KAAK,CAAC,IAAI,GAAG,SAAS;YAAA;YAAA,IAC7C,KAAK;cAAA,OAAE,oBAAK,CAAC,QAAQ,MAAG,YAAY,CAAC,CAAC,GAAG,SAAS;YAAA;UAAA,SAC9C,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;YAAA;cAAA,0BAEhC,IAAI;gBAAA,IACH,IAAI;kBAAA,OAAE,QAAQ,CAAC,CAAC,EAAE,KAAK;gBAAA;gBAAA,IACvB,QAAQ;kBAAA,yBAAG,IAAI;oBAAA,IAAC,IAAI;sBAAA,OAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI;oBAAA;oBAAA,UAAI,IAAI,oDAAe,IAAI,CAAC,CAAC;kBAAuB;gBAAA;gBAAA,UAEtG,KAAK,kDAAe,KAAK,CAAC,CAAC;cAAW,sBAEzC,IAAI;gBAAA,IAAC,IAAI;kBAAA,OAAE,CAAC,KAAK,CAAC,QAAQ;gBAAA;gBAAA;kBAAA,yDACD,QAAQ,CAAC,CAAC,YAAG,SAAS,UAAG,MAAM,mBAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE;gBAAA;cAAA;YAAA;UAAA;QAAA;MAAA,sBAK3G,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,IAAI;QAAA;QAAA,UAAI,IAAI,mDAAgC,IAAI,CAAC,CAAC,mDAAS,KAAK,CAAC,CAAC;MAAI;IAAA;EAAA;AAG9F;AAEA,eAAe,UAAU","ignoreList":[]}
|