@devslab/dds-solid 0.25.0 → 0.25.1
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/assets/{choice-DPmk9AHn.js → choice-UkVI5yuv.js} +7 -9
- package/dist/assets/choice-UkVI5yuv.js.map +1 -0
- package/dist/{choice-CTNeFOVo.js → choice-DwhbztEw.js} +5 -6
- package/dist/choice-DwhbztEw.js.map +1 -0
- package/dist/combobox.js +1 -1
- package/dist/combobox.server.js +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/choice.d.ts.map +1 -1
- package/dist/select-picker.js +1 -1
- package/dist/select-picker.server.js +1 -1
- package/dist/{time-picker-BlMWCQwk.js → time-picker-BWz2wQUk.js} +2 -2
- package/dist/{time-picker-BlMWCQwk.js.map → time-picker-BWz2wQUk.js.map} +1 -1
- package/dist/time-picker.js +1 -1
- package/dist/time-picker.server.js +1 -1
- package/package.json +4 -4
- package/dist/assets/choice-DPmk9AHn.js.map +0 -1
- package/dist/choice-CTNeFOVo.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as choiceWarningsEnabled, r as validateOptions, t as choiceMessages } from "./choice-types-h4YVL8xH.js";
|
|
2
2
|
import { For, Show, createEffect, createMemo, createSignal, createUniqueId, onCleanup, onMount, untrack } from "solid-js";
|
|
3
|
-
import { Portal, createComponent, escape, memo, mergeProps as mergeProps$1, ssr, ssrAttribute, ssrHydrationKey, ssrStyle
|
|
3
|
+
import { Portal, createComponent, escape, memo, mergeProps as mergeProps$1, ssr, ssrAttribute, ssrHydrationKey, ssrStyle } from "solid-js/web";
|
|
4
4
|
import { Combobox, createListCollection } from "@ark-ui/solid/combobox";
|
|
5
5
|
import { Select } from "@ark-ui/solid/select";
|
|
6
6
|
import { createVirtualizer, defaultRangeExtractor } from "@tanstack/solid-virtual";
|
|
@@ -12,8 +12,7 @@ var _tmpl$ = [
|
|
|
12
12
|
];
|
|
13
13
|
var _tmpl$2 = [
|
|
14
14
|
"<input",
|
|
15
|
-
" class=\"dds-choice-validation\"
|
|
16
|
-
"\" tabindex=\"-1\" aria-hidden=\"true\"",
|
|
15
|
+
" class=\"dds-choice-validation\" tabindex=\"-1\" aria-hidden=\"true\"",
|
|
17
16
|
"",
|
|
18
17
|
"",
|
|
19
18
|
">"
|
|
@@ -257,6 +256,9 @@ function Choice(props) {
|
|
|
257
256
|
get id() {
|
|
258
257
|
return props.id ?? id;
|
|
259
258
|
},
|
|
259
|
+
get ids() {
|
|
260
|
+
return memo(() => !!props.id)() ? memo(() => !!props.searchable)() ? { input: props.id } : { trigger: props.id } : void 0;
|
|
261
|
+
},
|
|
260
262
|
get ["class"]() {
|
|
261
263
|
return memo(() => !!props.rootClass)() ? `dds-choice ${props.rootClass}` : "dds-choice";
|
|
262
264
|
},
|
|
@@ -365,7 +367,7 @@ function Choice(props) {
|
|
|
365
367
|
];
|
|
366
368
|
}
|
|
367
369
|
}),
|
|
368
|
-
ssr(_tmpl$2, ssrHydrationKey(),
|
|
370
|
+
ssr(_tmpl$2, ssrHydrationKey(), ssrAttribute("name", escape(props.name, true), false) + ssrAttribute("form", escape(props.form, true), false) + ssrAttribute("value", escape(value(), true), false), ssrAttribute("required", props.required, true), ssrAttribute("disabled", props.disabled, true)),
|
|
369
371
|
ssr(_tmpl$4, ssrHydrationKey(), escape(status()), escape(createComponent(Show, {
|
|
370
372
|
get when() {
|
|
371
373
|
return memo(() => !!props.error)() && props.onRetry;
|
|
@@ -388,10 +390,6 @@ function Choice(props) {
|
|
|
388
390
|
get children() {
|
|
389
391
|
return createComponent(Parts.Content, {
|
|
390
392
|
"class": "dds-choice-content",
|
|
391
|
-
style: {
|
|
392
|
-
"max-height": "min(320px, var(--available-height, 320px))",
|
|
393
|
-
overflow: "auto"
|
|
394
|
-
},
|
|
395
393
|
get children() {
|
|
396
394
|
return ssr(_tmpl$6, ssrHydrationKey(), ssrStyle(virtual() ? {
|
|
397
395
|
height: `${virtualizer.getTotalSize()}px`,
|
|
@@ -452,4 +450,4 @@ function Choice(props) {
|
|
|
452
450
|
//#endregion
|
|
453
451
|
export { Choice as t };
|
|
454
452
|
|
|
455
|
-
//# sourceMappingURL=choice-
|
|
453
|
+
//# sourceMappingURL=choice-UkVI5yuv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"choice-UkVI5yuv.js","names":["Combobox","C","createListCollection","Select","S","Portal","createEffect","createMemo","createSignal","createUniqueId","For","onCleanup","onMount","Show","untrack","JSX","createVirtualizer","defaultRangeExtractor","Range","choiceMessages","choiceWarningsEnabled","validateOptions","ChoiceOption","ComboboxProps","ChoiceInternals","searchable","matchItem","item","query","commitDraft","text","triggerContent","Element","rootClass","invalid","autoHighlight","centerSelected","inputMode","HTMLAttributes","HTMLInputElement","onFormReset","Choice","props","id","internal","setInternal","defaultValue","value","label","items","find","selectedOption","draft","setDraft","defaultInputValue","inputValue","open","setOpen","highlight","setHighlight","visible","HTMLButtonElement","validation","scroll","setScroll","HTMLDivElement","portalMount","setPortalMount","HTMLElement","closest","ownerDocument","body","composing","consumedOnBlur","pendingRestore","from","to","resolveLabel","blocked","disabled","readOnly","messages","setInput","next","undefined","onInputValueChange","restoreInput","current","setValue","onValueChange","some","console","warn","JSON","stringify","previousSelection","associatedForm","form","getElementById","HTMLFormElement","reset","event","Event","setTimeout","defaultPrevented","resetValue","resetLabel","addEventListener","removeEventListener","filterMode","filter","toLocaleLowerCase","includes","collection","itemToString","itemToValue","isItemDisabled","virtual","virtualization","height","configured","itemHeight","Number","isFinite","Math","max","activeIndex","findIndex","virtualizer","count","length","getScrollElement","estimateSize","overscan","enabled","initialRect","width","rangeExtractor","active","range","indexes","push","sort","a","b","opened","scrollToIndex","align","content","frame","requestAnimationFrame","selected","querySelector","list","getBoundingClientRect","row","scrollTop","top","clientHeight","cancelAnimationFrame","Parts","rows","result","getVirtualItems","map","index","start","_","status","loading","error","empty","rootProps","onOpenChange","details","onHighlightChange","highlightedValue","scrollToIndexFn","positioning","placement","const","sameWidth","gutter","strategy","matches","hideWhenDetached","inputProps","reason","stale","activeElement","selectionBehavior","inputBehavior","_$createComponent","Root","_$mergeProps","ids","_$memo","input","trigger","class","data-label-placement","labelPlacement","data-has-value","children","when","Label","onClick","focus","Control","Input","aria-label","aria-labelledby","aria-describedby","aria-required","required","placeholder","onCompositionStart","onCompositionEnd","onKeyDown","key","preventDefault","stopPropagation","onBlur","currentTarget","Trigger","_$ssr","_tmpl$5","_$ssrHydrationKey","_$escape","clearable","_tmpl$","_$ssrAttribute","clear","_tmpl$2","name","_tmpl$4","onRetry","_tmpl$3","retry","mount","Positioner","Content","_tmpl$6","_$ssrStyle","getTotalSize","position","each","Item","aria-posinset","aria-setsize","style","left","transform","ItemText","description","_tmpl$7"],"sources":["../../src/internal/choice.tsx"],"sourcesContent":["import { Combobox as C, createListCollection } from \"@ark-ui/solid/combobox\";\nimport { Select as S } from \"@ark-ui/solid/select\";\nimport { Portal } from \"solid-js/web\";\nimport {\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n onCleanup,\n onMount,\n Show,\n untrack,\n type JSX,\n} from \"solid-js\";\nimport {\n createVirtualizer,\n defaultRangeExtractor,\n type Range,\n} from \"@tanstack/solid-virtual\";\nimport {\n choiceMessages,\n choiceWarningsEnabled,\n validateOptions,\n type ChoiceOption,\n type ComboboxProps,\n} from \"../choice-types\";\n\n/**\n * Options for DDS components built on Choice (TimePicker). They are not part\n * of the public Combobox/SelectPicker props; every default keeps the existing\n * Combobox and SelectPicker behavior.\n */\nexport interface ChoiceInternals {\n searchable: boolean;\n /** Replaces the default case-insensitive label substring filter. */\n matchItem?: (item: ChoiceOption, query: string) => boolean;\n /** On blur, the value the typed text stands for, \"\" to clear, or null to restore the label. */\n commitDraft?: (text: string) => string | null;\n /** Content of the searchable trigger button (default \"⌄\"). */\n triggerContent?: () => JSX.Element;\n rootClass?: string;\n invalid?: boolean;\n /** Highlight the first match while typing so Enter picks it. */\n autoHighlight?: boolean;\n /** Scroll the selected option to the middle of the list when it opens. */\n centerSelected?: boolean;\n inputMode?: JSX.HTMLAttributes<HTMLInputElement>[\"inputMode\"];\n /** Called before a native form reset restores the value. */\n onFormReset?: () => void;\n}\n\nexport function Choice(props: ComboboxProps & ChoiceInternals) {\n const id = createUniqueId();\n const [internal, setInternal] = createSignal(props.defaultValue ?? \"\");\n const value = () => props.value ?? internal();\n const label = createMemo(\n () =>\n props.items.find((item) => item.value === value())?.label ??\n (props.selectedOption?.value === value()\n ? props.selectedOption.label\n : value()),\n );\n const [draft, setDraft] = createSignal(props.defaultInputValue ?? label());\n const inputValue = () => props.inputValue ?? draft();\n const [open, setOpen] = createSignal(false),\n [highlight, setHighlight] = createSignal<string | null>(null);\n let visible: HTMLInputElement | HTMLButtonElement | undefined,\n validation: HTMLInputElement | undefined;\n const [scroll, setScroll] = createSignal<HTMLDivElement | null>(null);\n const [portalMount, setPortalMount] = createSignal<HTMLElement>();\n onMount(() => {\n // Preserve the enclosing modal's isolation boundary for nested options.\n if (visible)\n setPortalMount(\n visible.closest<HTMLElement>('[role=\"dialog\"], [role=\"alertdialog\"]') ??\n visible.ownerDocument.body,\n );\n });\n let composing = false;\n let consumedOnBlur: string | null = null;\n let pendingRestore: { from: string; to: string } | null = null;\n const resolveLabel = (id: string) =>\n props.items.find((item) => item.value === id)?.label ??\n (props.selectedOption?.value === id ? props.selectedOption.label : id);\n const blocked = () => props.disabled || props.readOnly;\n const messages = () => ({ ...choiceMessages, ...props.messages });\n const setInput = (next: string) => {\n if (pendingRestore?.from === inputValue() && pendingRestore.to === next)\n return;\n pendingRestore = null;\n if (props.inputValue === undefined) setDraft(next);\n props.onInputValueChange?.(next);\n };\n const restoreInput = (next: string) => {\n const current = inputValue();\n if (next === current) return;\n if (pendingRestore?.from === current && pendingRestore.to === next) return;\n pendingRestore = { from: current, to: next };\n if (props.inputValue === undefined) setDraft(next);\n else props.onInputValueChange?.(next);\n };\n const setValue = (next: string) => {\n if (props.value === undefined) setInternal(next);\n props.onValueChange?.(next);\n };\n createEffect(() => {\n validateOptions(props.items);\n });\n createEffect(() => {\n if (\n choiceWarningsEnabled() &&\n value() &&\n !props.items.some((item) => item.value === value()) &&\n props.selectedOption?.value !== value()\n )\n console.warn(\n `DDS choice: no label supplied for selected ID ${JSON.stringify(value())}; pass selectedOption when the selection is outside items.`,\n );\n });\n let previousSelection = { value: value(), label: label() };\n createEffect(() => {\n const current = { value: value(), label: label() };\n if (\n previousSelection.value !== current.value ||\n previousSelection.label !== current.label\n ) {\n previousSelection = current;\n untrack(() => restoreInput(current.label));\n }\n });\n createEffect(() => {\n const associatedForm = props.form;\n const form = associatedForm\n ? (validation?.ownerDocument.getElementById(\n associatedForm,\n ) as HTMLFormElement | null)\n : validation?.form;\n if (!form) return;\n // A task, not a microtask: after a reset-button click, microtasks run\n // before the browser resets the controls and would be overwritten.\n const reset = (event: Event) =>\n setTimeout(() => {\n if (event.defaultPrevented) return;\n props.onFormReset?.();\n const resetValue = props.value ?? props.defaultValue ?? \"\";\n const resetLabel = resolveLabel(resetValue);\n previousSelection = { value: resetValue, label: resetLabel };\n if (props.value === undefined) setInternal(resetValue);\n restoreInput(props.defaultInputValue ?? resetLabel);\n setOpen(false);\n if (visible instanceof HTMLInputElement) visible.value = inputValue();\n if (validation) validation.value = value();\n });\n form.addEventListener(\"reset\", reset);\n onCleanup(() => form.removeEventListener(\"reset\", reset));\n });\n const items = createMemo(() =>\n props.searchable &&\n props.filterMode !== \"external\" &&\n inputValue() !== label()\n ? props.items.filter((item) =>\n props.matchItem\n ? props.matchItem(item, inputValue())\n : item.label\n .toLocaleLowerCase()\n .includes(inputValue().toLocaleLowerCase()),\n )\n : props.items,\n );\n const collection = createMemo(() =>\n createListCollection({\n items: items(),\n itemToString: (item) => item.label,\n itemToValue: (item) => item.value,\n isItemDisabled: (item) => !!item.disabled,\n }),\n );\n const virtual = () => !!props.virtualization;\n const height = () => {\n const configured = props.virtualization\n ? props.virtualization.itemHeight\n : undefined;\n return Number.isFinite(configured) ? Math.max(40, configured!) : 40;\n };\n const activeIndex = () =>\n items().findIndex((item) => item.value === highlight());\n const virtualizer = createVirtualizer<HTMLDivElement, HTMLDivElement>({\n get count() {\n return items().length;\n },\n getScrollElement: scroll,\n estimateSize: height,\n get overscan() {\n return props.virtualization ? (props.virtualization.overscan ?? 5) : 5;\n },\n get enabled() {\n return virtual() && open();\n },\n initialRect: { width: 0, height: 320 },\n get rangeExtractor() {\n const active = activeIndex();\n return (range: Range) => {\n const indexes = defaultRangeExtractor(range);\n if (active >= 0 && !indexes.includes(active)) indexes.push(active);\n return indexes.sort((a, b) => a - b);\n };\n },\n });\n createEffect(() => {\n items();\n const opened = open();\n setHighlight(null);\n if (virtual() && opened)\n virtualizer.scrollToIndex(\n Math.max(\n 0,\n items().findIndex((item) => item.value === value()),\n ),\n { align: props.centerSelected ? \"center\" : \"auto\" },\n );\n });\n createEffect(() => {\n const content = scroll();\n if (!props.centerSelected || !open() || virtual() || !content) return;\n // Ark only scrolls the highlighted option to the nearest edge.\n const frame = requestAnimationFrame(() => {\n const selected = content.querySelector<HTMLElement>(\n '[data-part=\"item\"][data-state=\"checked\"]',\n );\n if (!selected) return;\n const list = content.getBoundingClientRect(),\n row = selected.getBoundingClientRect();\n content.scrollTop +=\n row.top - list.top - (content.clientHeight - row.height) / 2;\n });\n onCleanup(() => cancelAnimationFrame(frame));\n });\n const Parts = props.searchable ? C : S;\n const rows = createMemo(() => {\n const result = virtual()\n ? virtualizer\n .getVirtualItems()\n .map((row) => ({ index: row.index, start: row.start }))\n : items().map((_, index) => ({ index, start: 0 }));\n const active = activeIndex();\n if (virtual() && active >= 0 && !result.some((row) => row.index === active))\n result.push({ index: active, start: active * height() });\n return result;\n });\n const status = () =>\n props.loading\n ? messages().loading\n : props.error\n ? typeof props.error === \"string\"\n ? props.error\n : messages().error\n : items().length === 0\n ? messages().empty\n : \"\";\n const rootProps = {\n get collection() {\n return collection();\n },\n get value() {\n return value() ? [value()] : [];\n },\n get open() {\n return open() && !blocked();\n },\n get disabled() {\n return props.disabled;\n },\n get readOnly() {\n return props.readOnly;\n },\n get invalid() {\n return props.invalid;\n },\n onOpenChange: (details: { open: boolean }) => {\n if (!blocked()) setOpen(details.open);\n },\n onValueChange: (details: { value: string[] }) => {\n if (blocked() || composing) return;\n const next = details.value[0] ?? \"\";\n if (next !== value()) setValue(next);\n },\n onHighlightChange: (details: { highlightedValue: string | null }) =>\n setHighlight(details.highlightedValue),\n get scrollToIndexFn() {\n return virtual()\n ? ({ index }: { index: number }) =>\n virtualizer.scrollToIndex(index, { align: \"auto\" })\n : undefined;\n },\n get positioning() {\n return {\n placement: \"bottom-start\" as const,\n sameWidth: true,\n gutter: 4,\n strategy: portalMount()?.matches(\n '[role=\"dialog\"], [role=\"alertdialog\"]',\n )\n ? (\"fixed\" as const)\n : (\"absolute\" as const),\n hideWhenDetached: !!portalMount()?.matches(\n '[role=\"dialog\"], [role=\"alertdialog\"]',\n ),\n };\n },\n };\n const inputProps = props.searchable\n ? {\n get inputValue() {\n return inputValue();\n },\n onInputValueChange: (details: {\n inputValue: string;\n reason?: string | undefined;\n }) => {\n // Ark reports a keystroke after the blur that already committed it.\n const stale =\n consumedOnBlur === details.inputValue &&\n details.reason === \"input-change\" &&\n visible?.ownerDocument.activeElement !== visible;\n consumedOnBlur = null;\n if (stale) return;\n if (!blocked() && details.inputValue !== inputValue())\n setInput(details.inputValue);\n },\n selectionBehavior: \"preserve\" as const,\n ...(props.autoHighlight\n ? { inputBehavior: \"autohighlight\" as const }\n : {}),\n }\n : {};\n return (\n <Parts.Root\n {...rootProps}\n {...inputProps}\n id={props.id ?? id}\n // A consumer id lands on the control a <label for> targets (text box, or\n // SelectPicker's button), not on Zag's prefixed part IDs.\n ids={\n props.id\n ? props.searchable\n ? { input: props.id }\n : { trigger: props.id }\n : undefined\n }\n class={props.rootClass ? `dds-choice ${props.rootClass}` : \"dds-choice\"}\n data-label-placement={props.labelPlacement ?? \"outside\"}\n data-has-value={value() || inputValue() ? \"\" : undefined}\n >\n <Show when={props.label}>\n <Parts.Label class=\"dds-choice-label\" onClick={() => visible?.focus()}>\n {props.label}\n </Parts.Label>\n </Show>\n <Parts.Control class=\"dds-choice-control\">\n <Show when={props.searchable}>\n <C.Input\n ref={(node) => {\n visible = node;\n }}\n class=\"dds-choice-input\"\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={props.required}\n placeholder={props.placeholder}\n inputMode={props.inputMode}\n onCompositionStart={() => {\n composing = true;\n }}\n onCompositionEnd={() => {\n composing = false;\n }}\n onKeyDown={(event) => {\n if (composing && event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n onBlur={(event) => {\n if (props.commitDraft) {\n // The DOM holds the latest keystroke; Ark's input state may still be queued.\n consumedOnBlur = event.currentTarget.value;\n const next = blocked()\n ? null\n : props.commitDraft(consumedOnBlur);\n if (next !== null && next !== value()) setValue(next);\n restoreInput(label());\n return;\n }\n if (value()) restoreInput(label());\n }}\n />\n </Show>\n <Parts.Trigger\n ref={(node) => {\n if (!props.searchable) visible = node;\n }}\n class=\"dds-choice-trigger\"\n aria-label={props.searchable ? messages().open : props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={props.required}\n >\n {props.searchable ? (\n props.triggerContent ? (\n props.triggerContent()\n ) : (\n \"⌄\"\n )\n ) : (\n <span class=\"dds-choice-value\">\n {label() || props.placeholder || messages().open}\n </span>\n )}\n </Parts.Trigger>\n <Show when={props.clearable && !blocked() && (value() || inputValue())}>\n <button\n class=\"dds-choice-clear\"\n type=\"button\"\n aria-label={messages().clear}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => {\n setValue(\"\");\n setInput(\"\");\n setOpen(false);\n visible?.focus();\n }}\n >\n ×\n </button>\n </Show>\n </Parts.Control>\n {/* Hidden by choice.css. No style attribute: a style-src-attr CSP blocks it. */}\n <input\n ref={validation}\n class=\"dds-choice-validation\"\n tabIndex={-1}\n aria-hidden=\"true\"\n name={props.name}\n form={props.form}\n value={value()}\n required={props.required}\n disabled={props.disabled}\n onInput={(event) => {\n event.currentTarget.value = value();\n }}\n onInvalid={(event) => {\n event.preventDefault();\n visible?.focus();\n }}\n />\n <div class=\"dds-choice-status\" role=\"status\" aria-live=\"polite\">\n {status()}\n <Show when={props.error && props.onRetry}>\n <button\n class=\"dds-choice-retry\"\n type=\"button\"\n onClick={() => props.onRetry?.()}\n >\n {messages().retry}\n </button>\n </Show>\n </div>\n <Show when={portalMount()}>\n {(mount) => (\n <Portal mount={mount()}>\n <Parts.Positioner class=\"dds-choice-positioner\">\n {/* choice.css gives the list its 320px cap and scrolling. */}\n <Parts.Content\n ref={setScroll}\n class=\"dds-choice-content\"\n >\n <div\n style={\n virtual()\n ? {\n height: `${virtualizer.getTotalSize()}px`,\n position: \"relative\",\n }\n : undefined\n }\n >\n <For each={rows()}>\n {(row) => {\n const item = () => items()[row.index]!;\n return (\n <Parts.Item\n item={item()}\n class=\"dds-choice-item\"\n aria-posinset={row.index + 1}\n aria-setsize={items().length}\n style={\n virtual()\n ? {\n position: \"absolute\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: `${height()}px`,\n transform: `translateY(${row.start}px)`,\n }\n : undefined\n }\n >\n <Parts.ItemText>{item().label}</Parts.ItemText>\n <Show when={item().description}>\n <span class=\"dds-choice-description\">\n {item().description}\n </span>\n </Show>\n </Parts.Item>\n );\n }}\n </For>\n </div>\n </Parts.Content>\n </Parts.Positioner>\n </Portal>\n )}\n </Show>\n </Parts.Root>\n );\n}\n"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { Combobox as C, createListCollection as ie } from "@ark-ui/solid/combobo
|
|
|
5
5
|
import { Select as ae } from "@ark-ui/solid/select";
|
|
6
6
|
import { createVirtualizer as oe, defaultRangeExtractor as se } from "@tanstack/solid-virtual";
|
|
7
7
|
//#region src/internal/choice.tsx
|
|
8
|
-
var ce = /*#__PURE__*/ S("<button class=dds-choice-clear type=button>×"), le = /*#__PURE__*/ S("<input class=dds-choice-validation tabindex=-1 aria-hidden=true
|
|
8
|
+
var ce = /*#__PURE__*/ S("<button class=dds-choice-clear type=button>×"), le = /*#__PURE__*/ S("<input class=dds-choice-validation tabindex=-1 aria-hidden=true>"), ue = /*#__PURE__*/ S("<button class=dds-choice-retry type=button>"), w = /*#__PURE__*/ S("<div class=dds-choice-status role=status aria-live=polite><!$><!/><!$><!/>"), de = /*#__PURE__*/ S("<span class=dds-choice-value>"), fe = /*#__PURE__*/ S("<div>"), pe = /*#__PURE__*/ S("<span class=dds-choice-description>");
|
|
9
9
|
function T(d) {
|
|
10
10
|
let S = ee(), [T, E] = s(d.defaultValue ?? ""), D = () => d.value ?? T(), O = o(() => d.items.find((e) => e.value === D())?.label ?? (d.selectedOption?.value === D() ? d.selectedOption.label : D())), [me, k] = s(d.defaultInputValue ?? O()), A = () => d.inputValue ?? me(), [j, M] = s(!1), [he, N] = s(null), P, F, [I, L] = s(null), [R, ge] = s();
|
|
11
11
|
te(() => {
|
|
@@ -168,6 +168,9 @@ function T(d) {
|
|
|
168
168
|
get id() {
|
|
169
169
|
return d.id ?? S;
|
|
170
170
|
},
|
|
171
|
+
get ids() {
|
|
172
|
+
return g(() => !!d.id)() ? g(() => !!d.searchable)() ? { input: d.id } : { trigger: d.id } : void 0;
|
|
173
|
+
},
|
|
171
174
|
get class() {
|
|
172
175
|
return g(() => !!d.rootClass)() ? `dds-choice ${d.rootClass}` : "dds-choice";
|
|
173
176
|
},
|
|
@@ -329,10 +332,6 @@ function T(d) {
|
|
|
329
332
|
return u($.Content, {
|
|
330
333
|
ref: L,
|
|
331
334
|
class: "dds-choice-content",
|
|
332
|
-
style: {
|
|
333
|
-
"max-height": "min(320px, var(--available-height, 320px))",
|
|
334
|
-
overflow: "auto"
|
|
335
|
-
},
|
|
336
335
|
get children() {
|
|
337
336
|
var e = p(fe);
|
|
338
337
|
return h(e, u(r, {
|
|
@@ -400,4 +399,4 @@ d([
|
|
|
400
399
|
//#endregion
|
|
401
400
|
export { T as t };
|
|
402
401
|
|
|
403
|
-
//# sourceMappingURL=choice-
|
|
402
|
+
//# sourceMappingURL=choice-DwhbztEw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"choice-DwhbztEw.js","names":["Combobox","C","createListCollection","Select","S","Portal","createEffect","createMemo","createSignal","createUniqueId","For","onCleanup","onMount","Show","untrack","JSX","createVirtualizer","defaultRangeExtractor","Range","choiceMessages","choiceWarningsEnabled","validateOptions","ChoiceOption","ComboboxProps","ChoiceInternals","searchable","matchItem","item","query","commitDraft","text","triggerContent","Element","rootClass","invalid","autoHighlight","centerSelected","inputMode","HTMLAttributes","HTMLInputElement","onFormReset","Choice","props","id","internal","setInternal","defaultValue","value","label","items","find","selectedOption","draft","setDraft","defaultInputValue","inputValue","open","setOpen","highlight","setHighlight","visible","HTMLButtonElement","validation","scroll","setScroll","HTMLDivElement","portalMount","setPortalMount","HTMLElement","closest","ownerDocument","body","composing","consumedOnBlur","pendingRestore","from","to","resolveLabel","blocked","disabled","readOnly","messages","setInput","next","undefined","onInputValueChange","restoreInput","current","setValue","onValueChange","some","console","warn","JSON","stringify","previousSelection","associatedForm","form","getElementById","HTMLFormElement","reset","event","Event","setTimeout","defaultPrevented","resetValue","resetLabel","addEventListener","removeEventListener","filterMode","filter","toLocaleLowerCase","includes","collection","itemToString","itemToValue","isItemDisabled","virtual","virtualization","height","configured","itemHeight","Number","isFinite","Math","max","activeIndex","findIndex","virtualizer","count","length","getScrollElement","estimateSize","overscan","enabled","initialRect","width","rangeExtractor","active","range","indexes","push","sort","a","b","opened","scrollToIndex","align","content","frame","requestAnimationFrame","selected","querySelector","list","getBoundingClientRect","row","scrollTop","top","clientHeight","cancelAnimationFrame","Parts","rows","result","getVirtualItems","map","index","start","_","status","loading","error","empty","rootProps","onOpenChange","details","onHighlightChange","highlightedValue","scrollToIndexFn","positioning","placement","const","sameWidth","gutter","strategy","matches","hideWhenDetached","inputProps","reason","stale","activeElement","selectionBehavior","inputBehavior","_$createComponent","Root","_$mergeProps","ids","_$memo","input","trigger","class","data-label-placement","labelPlacement","data-has-value","children","when","Label","onClick","focus","Control","Input","ref","node","aria-label","aria-labelledby","aria-describedby","aria-required","required","placeholder","onCompositionStart","onCompositionEnd","onKeyDown","key","preventDefault","stopPropagation","onBlur","currentTarget","Trigger","_el$9","_$getNextElement","_tmpl$5","_$insert","clearable","_el$","_tmpl$","$$click","$$pointerdown","_$effect","_$setAttribute","clear","_$runHydrationEvents","_el$2","_tmpl$2","$$input","_ref$","_$use","_p$","_v$","name","_v$2","_v$3","_v$4","e","t","_$setProperty","o","_el$3","_tmpl$4","_el$5","firstChild","_el$6","_co$","_$getNextMarker","nextSibling","_el$7","_el$8","_co$2","onRetry","_el$4","_tmpl$3","retry","mount","Positioner","Content","_el$0","_tmpl$6","each","Item","aria-posinset","aria-setsize","style","position","left","transform","ItemText","description","_el$1","_tmpl$7","_$p","_$style","getTotalSize","_$delegateEvents"],"sources":["../src/internal/choice.tsx"],"sourcesContent":["import { Combobox as C, createListCollection } from \"@ark-ui/solid/combobox\";\nimport { Select as S } from \"@ark-ui/solid/select\";\nimport { Portal } from \"solid-js/web\";\nimport {\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n onCleanup,\n onMount,\n Show,\n untrack,\n type JSX,\n} from \"solid-js\";\nimport {\n createVirtualizer,\n defaultRangeExtractor,\n type Range,\n} from \"@tanstack/solid-virtual\";\nimport {\n choiceMessages,\n choiceWarningsEnabled,\n validateOptions,\n type ChoiceOption,\n type ComboboxProps,\n} from \"../choice-types\";\n\n/**\n * Options for DDS components built on Choice (TimePicker). They are not part\n * of the public Combobox/SelectPicker props; every default keeps the existing\n * Combobox and SelectPicker behavior.\n */\nexport interface ChoiceInternals {\n searchable: boolean;\n /** Replaces the default case-insensitive label substring filter. */\n matchItem?: (item: ChoiceOption, query: string) => boolean;\n /** On blur, the value the typed text stands for, \"\" to clear, or null to restore the label. */\n commitDraft?: (text: string) => string | null;\n /** Content of the searchable trigger button (default \"⌄\"). */\n triggerContent?: () => JSX.Element;\n rootClass?: string;\n invalid?: boolean;\n /** Highlight the first match while typing so Enter picks it. */\n autoHighlight?: boolean;\n /** Scroll the selected option to the middle of the list when it opens. */\n centerSelected?: boolean;\n inputMode?: JSX.HTMLAttributes<HTMLInputElement>[\"inputMode\"];\n /** Called before a native form reset restores the value. */\n onFormReset?: () => void;\n}\n\nexport function Choice(props: ComboboxProps & ChoiceInternals) {\n const id = createUniqueId();\n const [internal, setInternal] = createSignal(props.defaultValue ?? \"\");\n const value = () => props.value ?? internal();\n const label = createMemo(\n () =>\n props.items.find((item) => item.value === value())?.label ??\n (props.selectedOption?.value === value()\n ? props.selectedOption.label\n : value()),\n );\n const [draft, setDraft] = createSignal(props.defaultInputValue ?? label());\n const inputValue = () => props.inputValue ?? draft();\n const [open, setOpen] = createSignal(false),\n [highlight, setHighlight] = createSignal<string | null>(null);\n let visible: HTMLInputElement | HTMLButtonElement | undefined,\n validation: HTMLInputElement | undefined;\n const [scroll, setScroll] = createSignal<HTMLDivElement | null>(null);\n const [portalMount, setPortalMount] = createSignal<HTMLElement>();\n onMount(() => {\n // Preserve the enclosing modal's isolation boundary for nested options.\n if (visible)\n setPortalMount(\n visible.closest<HTMLElement>('[role=\"dialog\"], [role=\"alertdialog\"]') ??\n visible.ownerDocument.body,\n );\n });\n let composing = false;\n let consumedOnBlur: string | null = null;\n let pendingRestore: { from: string; to: string } | null = null;\n const resolveLabel = (id: string) =>\n props.items.find((item) => item.value === id)?.label ??\n (props.selectedOption?.value === id ? props.selectedOption.label : id);\n const blocked = () => props.disabled || props.readOnly;\n const messages = () => ({ ...choiceMessages, ...props.messages });\n const setInput = (next: string) => {\n if (pendingRestore?.from === inputValue() && pendingRestore.to === next)\n return;\n pendingRestore = null;\n if (props.inputValue === undefined) setDraft(next);\n props.onInputValueChange?.(next);\n };\n const restoreInput = (next: string) => {\n const current = inputValue();\n if (next === current) return;\n if (pendingRestore?.from === current && pendingRestore.to === next) return;\n pendingRestore = { from: current, to: next };\n if (props.inputValue === undefined) setDraft(next);\n else props.onInputValueChange?.(next);\n };\n const setValue = (next: string) => {\n if (props.value === undefined) setInternal(next);\n props.onValueChange?.(next);\n };\n createEffect(() => {\n validateOptions(props.items);\n });\n createEffect(() => {\n if (\n choiceWarningsEnabled() &&\n value() &&\n !props.items.some((item) => item.value === value()) &&\n props.selectedOption?.value !== value()\n )\n console.warn(\n `DDS choice: no label supplied for selected ID ${JSON.stringify(value())}; pass selectedOption when the selection is outside items.`,\n );\n });\n let previousSelection = { value: value(), label: label() };\n createEffect(() => {\n const current = { value: value(), label: label() };\n if (\n previousSelection.value !== current.value ||\n previousSelection.label !== current.label\n ) {\n previousSelection = current;\n untrack(() => restoreInput(current.label));\n }\n });\n createEffect(() => {\n const associatedForm = props.form;\n const form = associatedForm\n ? (validation?.ownerDocument.getElementById(\n associatedForm,\n ) as HTMLFormElement | null)\n : validation?.form;\n if (!form) return;\n // A task, not a microtask: after a reset-button click, microtasks run\n // before the browser resets the controls and would be overwritten.\n const reset = (event: Event) =>\n setTimeout(() => {\n if (event.defaultPrevented) return;\n props.onFormReset?.();\n const resetValue = props.value ?? props.defaultValue ?? \"\";\n const resetLabel = resolveLabel(resetValue);\n previousSelection = { value: resetValue, label: resetLabel };\n if (props.value === undefined) setInternal(resetValue);\n restoreInput(props.defaultInputValue ?? resetLabel);\n setOpen(false);\n if (visible instanceof HTMLInputElement) visible.value = inputValue();\n if (validation) validation.value = value();\n });\n form.addEventListener(\"reset\", reset);\n onCleanup(() => form.removeEventListener(\"reset\", reset));\n });\n const items = createMemo(() =>\n props.searchable &&\n props.filterMode !== \"external\" &&\n inputValue() !== label()\n ? props.items.filter((item) =>\n props.matchItem\n ? props.matchItem(item, inputValue())\n : item.label\n .toLocaleLowerCase()\n .includes(inputValue().toLocaleLowerCase()),\n )\n : props.items,\n );\n const collection = createMemo(() =>\n createListCollection({\n items: items(),\n itemToString: (item) => item.label,\n itemToValue: (item) => item.value,\n isItemDisabled: (item) => !!item.disabled,\n }),\n );\n const virtual = () => !!props.virtualization;\n const height = () => {\n const configured = props.virtualization\n ? props.virtualization.itemHeight\n : undefined;\n return Number.isFinite(configured) ? Math.max(40, configured!) : 40;\n };\n const activeIndex = () =>\n items().findIndex((item) => item.value === highlight());\n const virtualizer = createVirtualizer<HTMLDivElement, HTMLDivElement>({\n get count() {\n return items().length;\n },\n getScrollElement: scroll,\n estimateSize: height,\n get overscan() {\n return props.virtualization ? (props.virtualization.overscan ?? 5) : 5;\n },\n get enabled() {\n return virtual() && open();\n },\n initialRect: { width: 0, height: 320 },\n get rangeExtractor() {\n const active = activeIndex();\n return (range: Range) => {\n const indexes = defaultRangeExtractor(range);\n if (active >= 0 && !indexes.includes(active)) indexes.push(active);\n return indexes.sort((a, b) => a - b);\n };\n },\n });\n createEffect(() => {\n items();\n const opened = open();\n setHighlight(null);\n if (virtual() && opened)\n virtualizer.scrollToIndex(\n Math.max(\n 0,\n items().findIndex((item) => item.value === value()),\n ),\n { align: props.centerSelected ? \"center\" : \"auto\" },\n );\n });\n createEffect(() => {\n const content = scroll();\n if (!props.centerSelected || !open() || virtual() || !content) return;\n // Ark only scrolls the highlighted option to the nearest edge.\n const frame = requestAnimationFrame(() => {\n const selected = content.querySelector<HTMLElement>(\n '[data-part=\"item\"][data-state=\"checked\"]',\n );\n if (!selected) return;\n const list = content.getBoundingClientRect(),\n row = selected.getBoundingClientRect();\n content.scrollTop +=\n row.top - list.top - (content.clientHeight - row.height) / 2;\n });\n onCleanup(() => cancelAnimationFrame(frame));\n });\n const Parts = props.searchable ? C : S;\n const rows = createMemo(() => {\n const result = virtual()\n ? virtualizer\n .getVirtualItems()\n .map((row) => ({ index: row.index, start: row.start }))\n : items().map((_, index) => ({ index, start: 0 }));\n const active = activeIndex();\n if (virtual() && active >= 0 && !result.some((row) => row.index === active))\n result.push({ index: active, start: active * height() });\n return result;\n });\n const status = () =>\n props.loading\n ? messages().loading\n : props.error\n ? typeof props.error === \"string\"\n ? props.error\n : messages().error\n : items().length === 0\n ? messages().empty\n : \"\";\n const rootProps = {\n get collection() {\n return collection();\n },\n get value() {\n return value() ? [value()] : [];\n },\n get open() {\n return open() && !blocked();\n },\n get disabled() {\n return props.disabled;\n },\n get readOnly() {\n return props.readOnly;\n },\n get invalid() {\n return props.invalid;\n },\n onOpenChange: (details: { open: boolean }) => {\n if (!blocked()) setOpen(details.open);\n },\n onValueChange: (details: { value: string[] }) => {\n if (blocked() || composing) return;\n const next = details.value[0] ?? \"\";\n if (next !== value()) setValue(next);\n },\n onHighlightChange: (details: { highlightedValue: string | null }) =>\n setHighlight(details.highlightedValue),\n get scrollToIndexFn() {\n return virtual()\n ? ({ index }: { index: number }) =>\n virtualizer.scrollToIndex(index, { align: \"auto\" })\n : undefined;\n },\n get positioning() {\n return {\n placement: \"bottom-start\" as const,\n sameWidth: true,\n gutter: 4,\n strategy: portalMount()?.matches(\n '[role=\"dialog\"], [role=\"alertdialog\"]',\n )\n ? (\"fixed\" as const)\n : (\"absolute\" as const),\n hideWhenDetached: !!portalMount()?.matches(\n '[role=\"dialog\"], [role=\"alertdialog\"]',\n ),\n };\n },\n };\n const inputProps = props.searchable\n ? {\n get inputValue() {\n return inputValue();\n },\n onInputValueChange: (details: {\n inputValue: string;\n reason?: string | undefined;\n }) => {\n // Ark reports a keystroke after the blur that already committed it.\n const stale =\n consumedOnBlur === details.inputValue &&\n details.reason === \"input-change\" &&\n visible?.ownerDocument.activeElement !== visible;\n consumedOnBlur = null;\n if (stale) return;\n if (!blocked() && details.inputValue !== inputValue())\n setInput(details.inputValue);\n },\n selectionBehavior: \"preserve\" as const,\n ...(props.autoHighlight\n ? { inputBehavior: \"autohighlight\" as const }\n : {}),\n }\n : {};\n return (\n <Parts.Root\n {...rootProps}\n {...inputProps}\n id={props.id ?? id}\n // A consumer id lands on the control a <label for> targets (text box, or\n // SelectPicker's button), not on Zag's prefixed part IDs.\n ids={\n props.id\n ? props.searchable\n ? { input: props.id }\n : { trigger: props.id }\n : undefined\n }\n class={props.rootClass ? `dds-choice ${props.rootClass}` : \"dds-choice\"}\n data-label-placement={props.labelPlacement ?? \"outside\"}\n data-has-value={value() || inputValue() ? \"\" : undefined}\n >\n <Show when={props.label}>\n <Parts.Label class=\"dds-choice-label\" onClick={() => visible?.focus()}>\n {props.label}\n </Parts.Label>\n </Show>\n <Parts.Control class=\"dds-choice-control\">\n <Show when={props.searchable}>\n <C.Input\n ref={(node) => {\n visible = node;\n }}\n class=\"dds-choice-input\"\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={props.required}\n placeholder={props.placeholder}\n inputMode={props.inputMode}\n onCompositionStart={() => {\n composing = true;\n }}\n onCompositionEnd={() => {\n composing = false;\n }}\n onKeyDown={(event) => {\n if (composing && event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n onBlur={(event) => {\n if (props.commitDraft) {\n // The DOM holds the latest keystroke; Ark's input state may still be queued.\n consumedOnBlur = event.currentTarget.value;\n const next = blocked()\n ? null\n : props.commitDraft(consumedOnBlur);\n if (next !== null && next !== value()) setValue(next);\n restoreInput(label());\n return;\n }\n if (value()) restoreInput(label());\n }}\n />\n </Show>\n <Parts.Trigger\n ref={(node) => {\n if (!props.searchable) visible = node;\n }}\n class=\"dds-choice-trigger\"\n aria-label={props.searchable ? messages().open : props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={props.required}\n >\n {props.searchable ? (\n props.triggerContent ? (\n props.triggerContent()\n ) : (\n \"⌄\"\n )\n ) : (\n <span class=\"dds-choice-value\">\n {label() || props.placeholder || messages().open}\n </span>\n )}\n </Parts.Trigger>\n <Show when={props.clearable && !blocked() && (value() || inputValue())}>\n <button\n class=\"dds-choice-clear\"\n type=\"button\"\n aria-label={messages().clear}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => {\n setValue(\"\");\n setInput(\"\");\n setOpen(false);\n visible?.focus();\n }}\n >\n ×\n </button>\n </Show>\n </Parts.Control>\n {/* Hidden by choice.css. No style attribute: a style-src-attr CSP blocks it. */}\n <input\n ref={validation}\n class=\"dds-choice-validation\"\n tabIndex={-1}\n aria-hidden=\"true\"\n name={props.name}\n form={props.form}\n value={value()}\n required={props.required}\n disabled={props.disabled}\n onInput={(event) => {\n event.currentTarget.value = value();\n }}\n onInvalid={(event) => {\n event.preventDefault();\n visible?.focus();\n }}\n />\n <div class=\"dds-choice-status\" role=\"status\" aria-live=\"polite\">\n {status()}\n <Show when={props.error && props.onRetry}>\n <button\n class=\"dds-choice-retry\"\n type=\"button\"\n onClick={() => props.onRetry?.()}\n >\n {messages().retry}\n </button>\n </Show>\n </div>\n <Show when={portalMount()}>\n {(mount) => (\n <Portal mount={mount()}>\n <Parts.Positioner class=\"dds-choice-positioner\">\n {/* choice.css gives the list its 320px cap and scrolling. */}\n <Parts.Content\n ref={setScroll}\n class=\"dds-choice-content\"\n >\n <div\n style={\n virtual()\n ? {\n height: `${virtualizer.getTotalSize()}px`,\n position: \"relative\",\n }\n : undefined\n }\n >\n <For each={rows()}>\n {(row) => {\n const item = () => items()[row.index]!;\n return (\n <Parts.Item\n item={item()}\n class=\"dds-choice-item\"\n aria-posinset={row.index + 1}\n aria-setsize={items().length}\n style={\n virtual()\n ? {\n position: \"absolute\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: `${height()}px`,\n transform: `translateY(${row.start}px)`,\n }\n : undefined\n }\n >\n <Parts.ItemText>{item().label}</Parts.ItemText>\n <Show when={item().description}>\n <span class=\"dds-choice-description\">\n {item().description}\n </span>\n </Show>\n </Parts.Item>\n );\n }}\n </For>\n </div>\n </Parts.Content>\n </Parts.Positioner>\n </Portal>\n )}\n </Show>\n </Parts.Root>\n );\n}\n"],"mappings":";;;;;;;;AAoDA,SAAgByC,EAAOC,GAAwC;CAC7D,IAAMC,IAAKlC,GAAe,GACpB,CAACmC,GAAUC,KAAerC,EAAakC,EAAMI,gBAAgB,EAAE,GAC/DC,UAAcL,EAAMK,SAASH,EAAS,GACtCI,IAAQzC,QAEVmC,EAAMO,MAAMC,MAAMvB,MAASA,EAAKoB,UAAUA,EAAM,CAAC,CAAC,EAAEC,UACnDN,EAAMS,gBAAgBJ,UAAUA,EAAM,IACnCL,EAAMS,eAAeH,QACrBD,EAAM,EACd,GACM,CAACK,IAAOC,KAAY7C,EAAakC,EAAMY,qBAAqBN,EAAM,CAAC,GACnEO,UAAmBb,EAAMa,cAAcH,GAAM,GAC7C,CAACI,GAAMC,KAAWjD,EAAa,EAAK,GACxC,CAACkD,IAAWC,KAAgBnD,EAA4B,IAAI,GAC1DoD,GACFE,GACI,CAACC,GAAQC,KAAaxD,EAAoC,IAAI,GAC9D,CAAC0D,GAAaC,MAAkB3D,EAA0B;CAChEI,SAAc;EAEZ,AAAIgD,KACFO,GACEP,EAAQS,QAAqB,2CAAuC,KAClET,EAAQU,cAAcC,IAC1B;CACJ,CAAC;CACD,IAAIC,IAAY,IACZC,IAAgC,MAChCC,IAAsD,MACpDG,MAAgBlC,MACpBD,EAAMO,MAAMC,MAAMvB,MAASA,EAAKoB,UAAUJ,CAAE,CAAC,EAAEK,UAC9CN,EAAMS,gBAAgBJ,UAAUJ,IAAKD,EAAMS,eAAeH,QAAQL,IAC/DmC,UAAgBpC,EAAMqC,YAAYrC,EAAMsC,UACxCC,WAAkB;EAAE,GAAG9D;EAAgB,GAAGuB,EAAMuC;CAAS,IACzDC,KAAYC,MAAiB;EAC7BT,IAAgBC,SAASpB,EAAW,KAAKmB,EAAeE,OAAOO,OAEnET,IAAiB,MACbhC,EAAMa,eAAe6B,KAAAA,KAAW/B,EAAS8B,CAAI,GACjDzC,EAAM2C,qBAAqBF,CAAI;CACjC,GACMG,KAAgBH,MAAiB;EACrC,IAAMI,IAAUhC,EAAW;EACvB4B,MAASI,MACTb,GAAgBC,SAASY,KAAWb,EAAeE,OAAOO,OAC9DT,IAAiB;GAAEC,MAAMY;GAASX,IAAIO;EAAK,GACvCzC,EAAMa,eAAe6B,KAAAA,IAAW/B,EAAS8B,CAAI,IAC5CzC,EAAM2C,qBAAqBF,CAAI;CACtC,GACMK,KAAYL,MAAiB;EAEjCzC,AADIA,EAAMK,UAAUqC,KAAAA,KAAWvC,EAAYsC,CAAI,GAC/CzC,EAAM+C,gBAAgBN,CAAI;CAC5B;CAIA7E,AAHAA,QAAmB;EACjBe,EAAgBqB,EAAMO,KAAK;CAC7B,CAAC,GACD3C,QAAmB;EACjB,AACEc,EAAsB,KACtB2B,EAAM,KACN,CAACL,EAAMO,MAAMyC,MAAM/D,MAASA,EAAKoB,UAAUA,EAAM,CAAC,KAClDL,EAAMS,gBAAgBJ,UAAUA,EAAM,KAEtC4C,QAAQC,KACN,iDAAiDC,KAAKC,UAAU/C,EAAM,CAAC,EAAC,2DAC1E;CACJ,CAAC;CACD,IAAIgD,IAAoB;EAAEhD,OAAOA,EAAM;EAAGC,OAAOA,EAAM;CAAE;CAWzD1C,AAVAA,QAAmB;EACjB,IAAMiF,IAAU;GAAExC,OAAOA,EAAM;GAAGC,OAAOA,EAAM;EAAE;EACjD,CACE+C,EAAkBhD,UAAUwC,EAAQxC,SACpCgD,EAAkB/C,UAAUuC,EAAQvC,WAEpC+C,IAAoBR,GACpBzE,SAAcwE,EAAaC,EAAQvC,KAAK,CAAC;CAE7C,CAAC,GACD1C,QAAmB;EACjB,IAAM0F,IAAiBtD,EAAMuD,MACvBA,IAAOD,IACRlC,GAAYQ,cAAc4B,eACzBF,CACF,IACAlC,GAAYmC;EAChB,IAAI,CAACA,GAAM;EAGX,IAAMG,KAASC,MACbE,iBAAiB;GACf,IAAIF,EAAMG,kBAAkB;GAC5B9D,EAAMF,cAAc;GACpB,IAAMiE,IAAa/D,EAAMK,SAASL,EAAMI,gBAAgB,IAClD4D,IAAa7B,GAAa4B,CAAU;GAM1C,AALAV,IAAoB;IAAEhD,OAAO0D;IAAYzD,OAAO0D;GAAW,GACvDhE,EAAMK,UAAUqC,KAAAA,KAAWvC,EAAY4D,CAAU,GACrDnB,EAAa5C,EAAMY,qBAAqBoD,CAAU,GAClDjD,EAAQ,EAAK,GACTG,aAAmBrB,qBAAkBqB,EAAQb,QAAQQ,EAAW,IAChEO,MAAYA,EAAWf,QAAQA,EAAM;EAC3C,CAAC;EAEHpC,AADAsF,EAAKU,iBAAiB,SAASP,CAAK,GACpCzF,QAAgBsF,EAAKW,oBAAoB,SAASR,CAAK,CAAC;CAC1D,CAAC;CACD,IAAMnD,IAAQ1C,QACZmC,EAAMjB,cACNiB,EAAMmE,eAAe,cACrBtD,EAAW,MAAMP,EAAM,IACnBN,EAAMO,MAAM6D,QAAQnF,MAClBe,EAAMhB,YACFgB,EAAMhB,UAAUC,GAAM4B,EAAW,CAAC,IAClC5B,EAAKqB,MACF+D,kBAAkB,CAAC,CACnBC,SAASzD,EAAW,CAAC,CAACwD,kBAAkB,CAAC,CAClD,IACArE,EAAMO,KACZ,GACMgE,KAAa1G,QACjBL,GAAqB;EACnB+C,OAAOA,EAAM;EACbiE,eAAevF,MAASA,EAAKqB;EAC7BmE,cAAcxF,MAASA,EAAKoB;EAC5BqE,iBAAiBzF,MAAS,CAAC,CAACA,EAAKoD;CACnC,CAAC,CACH,GACMsC,UAAgB,CAAC,CAAC3E,EAAM4E,gBACxBC,UAAe;EACnB,IAAMC,IAAa9E,EAAM4E,iBACrB5E,EAAM4E,eAAeG,aACrBrC,KAAAA;EACJ,OAAOsC,OAAOC,SAASH,CAAU,IAAII,KAAKC,IAAI,IAAIL,CAAW,IAAI;CACnE,GACMM,UACJ7E,EAAM,CAAC,CAAC8E,WAAWpG,MAASA,EAAKoB,UAAUW,GAAU,CAAC,GAClDsE,IAAchH,GAAkD;EACpE,IAAIiH,QAAQ;GACV,OAAOhF,EAAM,CAAC,CAACiF;EACjB;EACAC,kBAAkBpE;EAClBqE,cAAcb;EACd,IAAIc,WAAW;GACb,OAAO3F,EAAM4E,iBAAkB5E,EAAM4E,eAAee,YAAY,IAAK;EACvE;EACA,IAAIC,UAAU;GACZ,OAAOjB,EAAQ,KAAK7D,EAAK;EAC3B;EACA+E,aAAa;GAAEC,OAAO;GAAGjB,QAAQ;EAAI;EACrC,IAAIkB,iBAAiB;GACnB,IAAMC,IAASZ,EAAY;GAC3B,QAAQa,MAAiB;IACvB,IAAMC,IAAU3H,GAAsB0H,CAAK;IAE3C,OADID,KAAU,KAAK,CAACE,EAAQ5B,SAAS0B,CAAM,KAAGE,EAAQC,KAAKH,CAAM,GAC1DE,EAAQE,MAAMC,GAAGC,MAAMD,IAAIC,CAAC;GACrC;EACF;CACF,CAAC;CAcD1I,AAbAA,QAAmB;EACjB2C,EAAM;EACN,IAAMgG,IAASzF,EAAK;EAEpB,AADAG,EAAa,IAAI,GACb0D,EAAQ,KAAK4B,KACfjB,EAAYkB,cACVtB,KAAKC,IACH,GACA5E,EAAM,CAAC,CAAC8E,WAAWpG,MAASA,EAAKoB,UAAUA,EAAM,CAAC,CACpD,GACA,EAAEoG,OAAOzG,EAAMN,iBAAiB,WAAW,OAAO,CACpD;CACJ,CAAC,GACD9B,QAAmB;EACjB,IAAM8I,IAAUrF,EAAO;EACvB,IAAI,CAACrB,EAAMN,kBAAkB,CAACoB,EAAK,KAAK6D,EAAQ,KAAK,CAAC+B,GAAS;EAE/D,IAAMC,IAAQC,4BAA4B;GACxC,IAAMC,IAAWH,EAAQI,cACvB,8CACF;GACA,IAAI,CAACD,GAAU;GACf,IAAME,IAAOL,EAAQM,sBAAsB,GACzCC,IAAMJ,EAASG,sBAAsB;GACvCN,EAAQQ,aACND,EAAIE,MAAMJ,EAAKI,OAAOT,EAAQU,eAAeH,EAAIpC,UAAU;EAC/D,CAAC;EACD5G,QAAgBoJ,qBAAqBV,CAAK,CAAC;CAC7C,CAAC;CACD,IAAMW,IAAQtH,EAAMjB,aAAaxB,IAAIG,IAC/B6J,KAAO1J,QAAiB;EAC5B,IAAM2J,IAAS7C,EAAQ,IACnBW,EACGmC,gBAAgB,CAAC,CACjBC,KAAKT,OAAS;GAAEU,OAAOV,EAAIU;GAAOC,OAAOX,EAAIW;EAAM,EAAE,IACxDrH,EAAM,CAAC,CAACmH,KAAKG,GAAGF,OAAW;GAAEA;GAAOC,OAAO;EAAE,EAAE,GAC7C5B,IAASZ,EAAY;EAG3B,OAFIT,EAAQ,KAAKqB,KAAU,KAAK,CAACwB,EAAOxE,MAAMiE,MAAQA,EAAIU,UAAU3B,CAAM,KACxEwB,EAAOrB,KAAK;GAAEwB,OAAO3B;GAAQ4B,OAAO5B,IAASnB,EAAO;EAAE,CAAC,GAClD2C;CACT,CAAC,GACKM,WACJ9H,EAAM+H,UACFxF,EAAS,CAAC,CAACwF,UACX/H,EAAMgI,QACJ,OAAOhI,EAAMgI,SAAU,WACrBhI,EAAMgI,QACNzF,EAAS,CAAC,CAACyF,QACbzH,EAAM,CAAC,CAACiF,WAAW,IACjBjD,EAAS,CAAC,CAAC0F,QACX,IACJC,KAAY;EAChB,IAAI3D,aAAa;GACf,OAAOA,GAAW;EACpB;EACA,IAAIlE,QAAQ;GACV,OAAOA,EAAM,IAAI,CAACA,EAAM,CAAC,IAAI,CAAA;EAC/B;EACA,IAAIS,OAAO;GACT,OAAOA,EAAK,KAAK,CAACsB,EAAQ;EAC5B;EACA,IAAIC,WAAW;GACb,OAAOrC,EAAMqC;EACf;EACA,IAAIC,WAAW;GACb,OAAOtC,EAAMsC;EACf;EACA,IAAI9C,UAAU;GACZ,OAAOQ,EAAMR;EACf;EACA2I,eAAeC,MAA+B;GAC5C,AAAKhG,EAAQ,KAAGrB,EAAQqH,EAAQtH,IAAI;EACtC;EACAiC,gBAAgBqF,MAAiC;GAC/C,IAAIhG,EAAQ,KAAKN,GAAW;GAC5B,IAAMW,IAAO2F,EAAQ/H,MAAM,MAAM;GACjC,AAAIoC,MAASpC,EAAM,KAAGyC,EAASL,CAAI;EACrC;EACA4F,oBAAoBD,MAClBnH,EAAamH,EAAQE,gBAAgB;EACvC,IAAIC,kBAAkB;GACpB,OAAO5D,EAAQ,KACV,EAAEgD,eACDrC,EAAYkB,cAAcmB,GAAO,EAAElB,OAAO,OAAO,CAAC,IACpD/D,KAAAA;EACN;EACA,IAAI8F,cAAc;GAChB,OAAO;IACLC,WAAW;IACXE,WAAW;IACXC,QAAQ;IACRC,UAAUrH,EAAY,CAAC,EAAEsH,QACvB,2CACF,IACK,UACA;IACLC,kBAAkB,CAAC,CAACvH,EAAY,CAAC,EAAEsH,QACjC,2CACF;GACF;EACF;CACF,GACME,KAAahJ,EAAMjB,aACrB;EACE,IAAI8B,aAAa;GACf,OAAOA,EAAW;EACpB;EACA8B,qBAAqByF,MAGf;GAEJ,IAAMc,IACJnH,MAAmBqG,EAAQvH,cAC3BuH,EAAQa,WAAW,kBACnB/H,GAASU,cAAcuH,kBAAkBjI;GAC3Ca,IAAiB,MACbmH,MACA,CAAC9G,EAAQ,KAAKgG,EAAQvH,eAAeA,EAAW,KAClD2B,EAAS4F,EAAQvH,UAAU;EAC/B;EACAuI,mBAAmB;EACnB,GAAIpJ,EAAMP,gBACN,EAAE4J,eAAe,gBAAyB,IAC1C,CAAC;CACP,IACA,CAAC;CACL,OAAAC,EACGhC,EAAMiC,MAAIC,EACLtB,IACAc,IAAU;EAAA,IACd/I,KAAE;GAAA,OAAED,EAAMC,MAAMA;EAAE;EAAA,IAGlBwJ,MAAG;GAAA,OACDC,QAAA,CAAA,CAAA1J,EAAMC,EAAE,CAAA,CAAA,IACJyJ,QAAA,CAAA,CAAA1J,EAAMjB,UAAU,CAAA,CAAA,IACd,EAAE4K,OAAO3J,EAAMC,GAAG,IAClB,EAAE2J,SAAS5J,EAAMC,GAAG,IACtByC,KAAAA;EAAS;EAAA,IAAA,QAAA;GAAA,OAERgH,QAAA,CAAA,CAAA1J,EAAMT,SAAS,CAAA,CAAA,IAAG,cAAcS,EAAMT,cAAc;EAAY;EAAA,IAAA,yBAAA;GAAA,OACjDS,EAAM+J,kBAAkB;EAAS;EAAA,IAAA,mBAAA;GAAA,OACvC1J,EAAM,KAAKQ,EAAW,IAAI,KAAK6B,KAAAA;EAAS;EAAA,IAAAuH,WAAA;GAAA,OAAA;IAAAX,EAEvDnL,GAAI;KAAA,IAAC+L,OAAI;MAAA,OAAElK,EAAMM;KAAK;KAAA,IAAA2J,WAAA;MAAA,OAAAX,EACpBhC,EAAM6C,OAAK;OAAA,OAAA;OAA0BC,eAAelJ,GAASmJ,MAAM;OAAC,IAAAJ,WAAA;QAAA,OAClEjK,EAAMM;OAAK;MAAA,CAAA;KAAA;IAAA,CAAA;IAAAgJ,EAGfhC,EAAMgD,SAAO;KAAA,OAAA;KAAA,IAAAL,WAAA;MAAA,OAAA;OAAAX,EACXnL,GAAI;QAAA,IAAC+L,OAAI;SAAA,OAAElK,EAAMjB;QAAU;QAAA,IAAAkL,WAAA;SAAA,OAAAX,EACzB/L,EAAEgN,OAAK;UAAAC,MACAC,MAAS;WACbvJ,IAAUuJ;UACZ;UAAC,OAAA;UAAA,IAAA,eAAA;WAAA,OAEWzK,EAAM;UAAa;UAAA,IAAA,oBAAA;WAAA,OACdA,EAAM;UAAkB;UAAA,IAAA,qBAAA;WAAA,OACvBA,EAAM;UAAmB;UAAA,IAAA,kBAAA;WAAA,OAC5BA,EAAM8K;UAAQ;UAAA,IAC7BC,cAAW;WAAA,OAAE/K,EAAM+K;UAAW;UAAA,IAC9BpL,YAAS;WAAA,OAAEK,EAAML;UAAS;UAC1BqL,0BAA0B;WACxBlJ,IAAY;UACd;UACAmJ,wBAAwB;WACtBnJ,IAAY;UACd;UACAoJ,YAAYvH,MAAU;WACpB,AAAI7B,KAAa6B,EAAMwH,QAAQ,YAC7BxH,EAAMyH,eAAe,GACrBzH,EAAM0H,gBAAgB;UAE1B;UACAC,SAAS3H,MAAU;WACjB,IAAI3D,EAAMb,aAAa;YAErB4C,IAAiB4B,EAAM4H,cAAclL;YACrC,IAAMoC,IAAOL,EAAQ,IACjB,OACApC,EAAMb,YAAY4C,CAAc;YAEpCa,AADIH,MAAS,QAAQA,MAASpC,EAAM,KAAGyC,EAASL,CAAI,GACpDG,EAAatC,EAAM,CAAC;YACpB;WACF;WACA,AAAID,EAAM,KAAGuC,EAAatC,EAAM,CAAC;UACnC;SAAC,CAAA;QAAA;OAAA,CAAA;OAAAgJ,EAGJhC,EAAMkE,SAAO;QAAAhB,MACNC,MAAS;SACb,AAAKzK,EAAMjB,eAAYmC,IAAUuJ;QACnC;QAAC,OAAA;QAAA,IAAA,eAAA;SAAA,OAEWf,QAAA,CAAA,CAAA1J,EAAMjB,UAAU,CAAA,CAAA,IAAGwD,EAAS,CAAC,CAACzB,OAAOd,EAAM;QAAa;QAAA,IAAA,oBAAA;SAAA,OACnDA,EAAM;QAAkB;QAAA,IAAA,qBAAA;SAAA,OACvBA,EAAM;QAAmB;QAAA,IAAA,kBAAA;SAAA,OAC5BA,EAAM8K;QAAQ;QAAA,IAAAb,WAAA;SAAA,OAE5BP,QAAA,CAAA,CAAA1J,EAAMjB,UAAU,CAAA,CAAA,IACf2K,QAAA,CAAA,CAAA1J,EAAMX,cAAc,CAAA,CAAA,IAClBW,EAAMX,eAAe,IAErB,aACD;UAAA,IAAAoM,IAAAC,EAAAC,EAAA;UAGiD,OAHjDC,EAAAH,SAGEnL,EAAM,KAAKN,EAAM+K,eAAexI,EAAS,CAAC,CAACzB,IAAI,GAAA2K;SAAA,EAAA,CAAA;QAEnD;OAAA,CAAA;OAAAnC,EAEFnL,GAAI;QAAA,IAAC+L,OAAI;SAAA,OAAER,QAAA,CAAA,EAAA1J,EAAM6L,aAAa,CAACzJ,EAAQ,EAAC,CAAA,CAAA,MAAK/B,EAAM,KAAKQ,EAAW;QAAE;QAAA,IAAAoJ,WAAA;SAAA,IAAA6B,IAAAJ,EAAAK,EAAA;SAItC,OAJsCD,EAAAE,gBAMnD;UAIb9K,AAHA4B,EAAS,EAAE,GACXN,EAAS,EAAE,GACXzB,EAAQ,EAAK,GACbG,GAASmJ,MAAM;SACjB,GAACyB,EAAAG,iBANetI,MAAUA,EAAMyH,eAAe,GAACc,QAAAC,EAAAL,GAAA,cADpCvJ,EAAS,CAAC,CAAC6J,KAAK,CAAA,GAAAC,EAAA,GAAAP;QAAA;OAAA,CAAA;MAAA;KAAA;IAAA,CAAA;WAAA;KAAA,IAAAQ,IAAAZ,EAAAa,EAAA;KA8B/BD,AA9B+BA,EAAArI,iBAAA,YA2BpBN,MAAU;MAEpBzC,AADAyC,EAAMyH,eAAe,GACrBlK,GAASmJ,MAAM;KACjB,CAAC,GAAAiC,EAAAE,WANS7I,MAAU;MAClBA,EAAM4H,cAAclL,QAAQA,EAAM;KACpC;KAAC,IAAAoM,IAXIrL;KAMS,OANC,OAAAqL,KAAA,aAAAC,GAAAD,GAAAH,CAAA,IAAVlL,IAAUkL,GAAAJ,GAAAS,MAAA;MAAA,IAAAC,IAIT5M,EAAM6M,MAAIC,IACV9M,EAAMuD,MAAIwJ,IAEN/M,EAAM8K,UAAQkC,IACdhN,EAAMqC;MAAQ,OAAAuK,MAAAD,EAAAM,KAAAd,EAAAG,GAAA,QAAAK,EAAAM,IAAAL,CAAA,GAAAE,MAAAH,EAAAO,KAAAf,EAAAG,GAAA,QAAAK,EAAAO,IAAAJ,CAAA,GAAAC,MAAAJ,EAAAtG,KAAA8G,EAAAb,GAAA,YAAAK,EAAAtG,IAAA0G,CAAA,GAAAC,MAAAL,EAAAS,KAAAD,EAAAb,GAAA,YAAAK,EAAAS,IAAAJ,CAAA,GAAAL;KAAA,GAAA;MAAAM,GAAAvK,KAAAA;MAAAwK,GAAAxK,KAAAA;MAAA2D,GAAA3D,KAAAA;MAAA0K,GAAA1K,KAAAA;KAAA,CAAA,GAAAwJ,QAAAiB,EAAAb,GAAA,SAFjBjM,EAAM,CAAC,CAAA,GAAAgM,EAAA,GAAAC;IAAA,EAAA,CAAA;WAAA;KAAA,IAAAe,IAAA3B,EAAA4B,CAAA,GAAAC,IAAAF,EAAAG,YAAA,CAAAC,GAAAC,KAAAC,EAAAJ,EAAAK,WAAA,GAAAC,IAAAJ,EAAAG,aAAA,CAAAE,GAAAC,KAAAJ,EAAAE,EAAAD,WAAA;KAmBO,OAnBPhC,EAAAyB,GAYbvF,IAAM2F,GAAAC,CAAA,GAAA9B,EAAAyB,GAAA/D,EACNnL,GAAI;MAAA,IAAC+L,OAAI;OAAA,OAAER,QAAA,CAAA,CAAA1J,EAAMgI,KAAK,CAAA,CAAA,KAAIhI,EAAMgO;MAAO;MAAA,IAAA/D,WAAA;OAAA,IAAAgE,IAAAvC,EAAAwC,EAAA;OAMnB,OANmBD,EAAAjC,gBAIrBhM,EAAMgO,UAAU,GAACpC,EAAAqC,SAE/B1L,EAAS,CAAC,CAAC4L,KAAK,GAAA9B,EAAA,GAAA4B;MAAA;KAAA,CAAA,GAAAH,GAAAC,CAAA,GAAAV;IAAA,EAAA,CAAA;IAAA/D,EAItBnL,GAAI;KAAA,IAAC+L,OAAI;MAAA,OAAE1I,EAAY;KAAC;KAAAyI,WACrBmE,MAAK9E,EACJ3L,GAAM;MAAA,IAACyQ,QAAK;OAAA,OAAEA,EAAM;MAAC;MAAA,IAAAnE,WAAA;OAAA,OAAAX,EACnBhC,EAAM+G,YAAU;QAAA,OAAA;QAAA,IAAApE,WAAA;SAAA,OAAAX,EAEdhC,EAAMgH,SAAO;UAAA9D,KACPlJ;UAAS,OAAA;UAAA,IAAA2I,WAAA;WAAA,IAAAsE,IAAA7C,EAAA8C,EAAA;WAUG,OAVH5C,EAAA2C,GAAAjF,EAaXtL,GAAG;YAAA,IAACyQ,OAAI;aAAA,OAAElH,GAAK;YAAC;YAAA0C,WACbhD,MAAQ;aACR,IAAMhI,UAAasB,EAAM,CAAC,CAAC0G,EAAIU;aAC/B,OAAA2B,EACGhC,EAAMoH,MAAI;cAAA,IACTzP,OAAI;eAAA,OAAEA,EAAK;cAAC;cAAA,OAAA;cAAA,IAAA,kBAAA;eAAA,OAEGgI,EAAIU,QAAQ;cAAC;cAAA,IAAA,iBAAA;eAAA,OACdpH,EAAM,CAAC,CAACiF;cAAM;cAAA,IAC5BqJ,QAAK;eAAA,OACHnF,QAAA,CAAA,CAAA/E,EAAQ,CAAC,CAAA,CAAA,IACL;gBACEmK,UAAU;gBACV3H,KAAK;gBACL4H,MAAM;gBACNjJ,OAAO;gBACPjB,QAAQ,GAAGA,EAAO,EAAC;gBACnBmK,WAAW,cAAc/H,EAAIW,MAAK;eACpC,IACAlF,KAAAA;cAAS;cAAA,IAAAuH,WAAA;eAAA,OAAA,CAAAX,EAGdhC,EAAM2H,UAAQ,EAAA,IAAAhF,WAAA;gBAAA,OAAEhL,EAAK,CAAC,CAACqB;eAAK,EAAA,CAAA,GAAAgJ,EAC5BnL,GAAI;gBAAA,IAAC+L,OAAI;iBAAA,OAAEjL,EAAK,CAAC,CAACiQ;gBAAW;gBAAA,IAAAjF,WAAA;iBAAA,IAAAkF,IAAAzD,EAAA0D,EAAA;iBAEP,OAFOxD,EAAAuD,SAEzBlQ,EAAK,CAAC,CAACiQ,WAAW,GAAAC;gBAAA;eAAA,CAAA,CAAA;cAAA;aAAA,CAAA;YAK7B;WAAC,CAAA,CAAA,GAAAjD,GAAAmD,MAAAC,EAAAf,GAtCD5J,EAAQ,IACJ;YACEE,QAAQ,GAAGS,EAAYiK,aAAa,EAAC;YACrCT,UAAU;WACZ,IACApM,KAAAA,GAAS2M,CAAA,CAAA,GAAAd;UAAA;SAAA,CAAA;QAAA;OAAA,CAAA;MAAA;KAAA,CAAA;IAuCxB,CAAA;GAAA;EAAA;CAAA,CAAA,CAAA;AAIT;AAACiB,EAAA;CAAA;CAAA;CAAA;AAAA,CAAA"}
|
package/dist/combobox.js
CHANGED
package/dist/combobox.server.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s } from "./cal
|
|
|
2
2
|
import { t as c } from "./utils-oKxhg9RG.js";
|
|
3
3
|
import { t as l } from "./direction-CS85IDNU.js";
|
|
4
4
|
import { DatePicker as u } from "./date-picker.js";
|
|
5
|
-
import { t as d } from "./time-picker-
|
|
5
|
+
import { t as d } from "./time-picker-BWz2wQUk.js";
|
|
6
6
|
import { DateRangePicker as f } from "./date-range-picker.js";
|
|
7
7
|
import { MonthPicker as p } from "./month-picker.js";
|
|
8
8
|
import { Input as m, InputGroup as h } from "./input.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"choice.d.ts","sourceRoot":"","sources":["../../src/internal/choice.tsx"],"names":[],"mappings":"AAGA,OAAO,EAUL,KAAK,GAAG,EACT,MAAM,UAAU,CAAC;AAMlB,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3D,+FAA+F;IAC/F,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gEAAgE;IAChE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC;IAC9D,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"choice.d.ts","sourceRoot":"","sources":["../../src/internal/choice.tsx"],"names":[],"mappings":"AAGA,OAAO,EAUL,KAAK,GAAG,EACT,MAAM,UAAU,CAAC;AAMlB,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3D,+FAA+F;IAC/F,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gEAAgE;IAChE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC;IAC9D,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,eA4d5D"}
|
package/dist/select-picker.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as e } from "./choice-
|
|
1
|
+
import { t as e } from "./choice-DwhbztEw.js";
|
|
2
2
|
import { createMemo as t, createSignal as n, splitProps as r } from "solid-js";
|
|
3
3
|
import { createComponent as i, getNextElement as a, mergeProps as o, template as s } from "solid-js/web";
|
|
4
4
|
//#region src/time-only.ts
|
|
@@ -110,4 +110,4 @@ function y(a) {
|
|
|
110
110
|
//#endregion
|
|
111
111
|
export { y as t };
|
|
112
112
|
|
|
113
|
-
//# sourceMappingURL=time-picker-
|
|
113
|
+
//# sourceMappingURL=time-picker-BWz2wQUk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-picker-BlMWCQwk.js","names":["createMemo","createSignal","splitProps","ChoiceOption","Choice","matchesTimeQuery","normalizeTime","parseTypedTime","timeMessages","timeOptions","TimeMessages","TimePickerProps","value","defaultValue","onValueChange","step","label","labelPlacement","id","name","form","placeholder","clearable","disabled","readOnly","required","invalid","locale","messages","VIRTUALIZE_AFTER","ClockIcon","_$getNextElement","_tmpl$","TimePicker","props","local","shared","initial","internal","setInternal","raw","canonical","current","draft","setDraft","items","values","Set","selected","typed","add","sort","map","_$createComponent","_$mergeProps","searchable","rootClass","selectedOption","next","undefined","onFormReset","inputValue","onInputValueChange","matchItem","item","query","commitDraft","text","trim","triggerContent","autoHighlight","centerSelected","inputMode","virtualization","length"],"sources":["../src/time-only.ts","../src/time-picker.tsx"],"sourcesContent":["// Time-of-day values are 24-hour \"HH:MM\" strings; \"\" is empty. Servers may send\n// \"HH:MM:SS\" — it is accepted and shown as HH:MM, but never rewritten until the\n// user picks a time.\nconst API_TIME = /^([01]\\d|2[0-3]):([0-5]\\d)(?::[0-5]\\d(?:\\.\\d+)?)?$/;\n\n/** Canonical \"HH:MM\" for an API value, or null when it is not a time. */\nexport function normalizeTime(value: string): string | null {\n const match = API_TIME.exec(value);\n return match ? `${match[1]}:${match[2]}` : null;\n}\n\nconst pad = (value: number) => String(value).padStart(2, \"0\");\nconst fromParts = (hour: number, minute: number) =>\n hour <= 23 && minute <= 59 ? `${pad(hour)}:${pad(minute)}` : null;\n\n/**\n * What a person typed, read as a complete time: \"9:05\", \"09:05\", \"09:05:00\",\n * \"0905\", or \"905\" when the first two digits cannot be an hour. Full-width\n * colons and dots count as colons. Partial text (\"10\", \"10:4\", and \"103\",\n * which is still on its way to 10:30) is not a time.\n */\nexport function parseTypedTime(text: string): string | null {\n const value = text.trim().replace(/[:.]/g, \":\");\n const separated = /^(\\d{1,2}):(\\d{2})(?::\\d{2})?$/.exec(value);\n if (separated) return fromParts(Number(separated[1]), Number(separated[2]));\n if (/^\\d{4}$/.test(value))\n return fromParts(Number(value.slice(0, 2)), Number(value.slice(2)));\n if (/^\\d{3}$/.test(value) && Number(value.slice(0, 2)) > 23)\n return fromParts(Number(value[0]), Number(value.slice(1)));\n return null;\n}\n\n/** 00:00 up to the last step before 24:00. Steps below one minute become one; a non-number becomes 10. */\nexport function timeOptions(step: number) {\n const minutes = Number.isFinite(step) ? Math.max(1, Math.floor(step)) : 10;\n const values: string[] = [];\n for (let at = 0; at < 24 * 60; at += minutes)\n values.push(`${pad(Math.floor(at / 60))}:${pad(at % 60)}`);\n return values;\n}\n\n/**\n * Whether a \"HH:MM\" option matches partial typing. Digits read as the start of\n * the time (\"10\" → 10:00–10:59, \"1030\" → 10:30); an odd digit count or an\n * impossible hour also tries a leading zero (\"9\" → 09:xx, \"930\" → 09:30).\n * With a colon the hour may be one digit (\"9:3\" → 09:30–09:39).\n */\nexport function matchesTimeQuery(option: string, query: string) {\n const text = query.trim().replace(/[:.]/g, \":\");\n if (text === \"\") return true;\n const typed = parseTypedTime(text);\n if (typed) return option === typed;\n if (text.includes(\":\")) {\n const [hour = \"\", minute = \"\", ...rest] = text.split(\":\");\n if (rest.length || !/^\\d{1,2}$/.test(hour) || !/^\\d{0,2}$/.test(minute))\n return false;\n return option.startsWith(`${hour.padStart(2, \"0\")}:${minute}`);\n }\n if (!/^\\d{1,4}$/.test(text)) return false;\n const digits = option.replace(\":\", \"\");\n if (digits.startsWith(text)) return true;\n return (\n (text.length % 2 === 1 || Number(text.slice(0, 2)) > 23) &&\n digits.startsWith(`0${text}`)\n );\n}\n\nexport interface TimeMessages {\n /** Accessible name of the clock button that opens the list. */\n open?: string;\n /** Accessible name of the clear button. */\n clear?: string;\n /** Status when nothing in the list matches the typed text. */\n empty?: string;\n}\nexport function timeMessages(locale: string, messages: TimeMessages = {}) {\n const ko = /^ko(?:-|$)/i.test(locale);\n return {\n open: ko ? \"시간 목록 열기\" : \"Open time list\",\n clear: ko ? \"시간 지우기\" : \"Clear time\",\n empty: ko ? \"맞는 시간이 없습니다\" : \"No matching time\",\n ...messages,\n };\n}\n","import { createMemo, createSignal, splitProps } from \"solid-js\";\nimport type { ChoiceOption } from \"./choice-types\";\nimport { Choice } from \"./internal/choice\";\nimport {\n matchesTimeQuery,\n normalizeTime,\n parseTypedTime,\n timeMessages,\n timeOptions,\n type TimeMessages,\n} from \"./time-only\";\nexport type { TimeMessages } from \"./time-only\";\n\nexport interface TimePickerProps {\n /** 24-hour \"HH:MM\" (\"\" is empty). \"HH:MM:SS\" is accepted and shown as HH:MM. */\n value?: string;\n defaultValue?: string;\n /** Receives \"HH:MM\" or \"\" — only when the person picks, types or clears a time. */\n onValueChange?: (value: string) => void;\n /** Minutes between listed times, from 00:00 (default 10). Typed times off the step are still accepted. */\n step?: number;\n label?: string;\n labelPlacement?: \"outside\" | \"inside\" | \"hidden\";\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n id?: string;\n name?: string;\n form?: string;\n placeholder?: string;\n clearable?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n invalid?: boolean;\n /** Chooses the built-in Korean or English text (default \"ko-KR\"). */\n locale?: string;\n messages?: TimeMessages;\n}\n\n/** Above this many rows the list is virtualized (1-minute steps list 1,440 times). */\nconst VIRTUALIZE_AFTER = 300;\n\n// The dds-icons \"clock\" glyph, inlined like DatePicker's calendar so this\n// subpath does not pull in the whole icon set.\nfunction ClockIcon() {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18z\" />\n <path d=\"M12 7v5l3 2\" />\n </svg>\n );\n}\n\n/**\n * A time-of-day field: type a time or pick one from the list. Built on the\n * same Ark combobox as Combobox, so list, keyboard and form behavior match.\n */\nexport function TimePicker(props: TimePickerProps) {\n const [local, shared] = splitProps(props, [\n \"value\",\n \"defaultValue\",\n \"onValueChange\",\n \"step\",\n \"placeholder\",\n \"invalid\",\n \"locale\",\n \"messages\",\n ]);\n const initial = () => normalizeTime(local.defaultValue ?? \"\") ?? \"\";\n const [internal, setInternal] = createSignal(initial());\n const raw = () => local.value ?? internal();\n const canonical = () => (raw() === \"\" ? \"\" : normalizeTime(raw()));\n // A value that is not a time is shown as it came, marked invalid, and never rewritten.\n const current = () => canonical() ?? raw();\n const [draft, setDraft] = createSignal(current());\n const items = createMemo<ChoiceOption[]>(() => {\n const values = new Set(timeOptions(local.step ?? 10));\n const selected = canonical(),\n typed = parseTypedTime(draft());\n if (selected) values.add(selected);\n if (typed) values.add(typed);\n return [...values].sort().map((value) => ({ value, label: value }));\n });\n return (\n <Choice\n {...shared}\n searchable\n rootClass=\"dds-time-picker\"\n items={items()}\n value={current()}\n // Only read when the value is not a listed time (an invalid server value).\n selectedOption={{ value: current(), label: current() }}\n onValueChange={(next) => {\n if (local.value === undefined) setInternal(next);\n local.onValueChange?.(next);\n }}\n onFormReset={() => {\n if (local.value === undefined) setInternal(initial());\n }}\n inputValue={draft()}\n onInputValueChange={setDraft}\n matchItem={(item, query) => matchesTimeQuery(item.value, query)}\n commitDraft={(text) => (text.trim() === \"\" ? \"\" : parseTypedTime(text))}\n triggerContent={() => <ClockIcon />}\n autoHighlight\n centerSelected\n inputMode=\"numeric\"\n virtualization={items().length > VIRTUALIZE_AFTER ? {} : false}\n messages={timeMessages(local.locale ?? \"ko-KR\", local.messages)}\n placeholder={local.placeholder ?? \"HH:MM\"}\n invalid={local.invalid === true || canonical() === null}\n />\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"time-picker-BWz2wQUk.js","names":["createMemo","createSignal","splitProps","ChoiceOption","Choice","matchesTimeQuery","normalizeTime","parseTypedTime","timeMessages","timeOptions","TimeMessages","TimePickerProps","value","defaultValue","onValueChange","step","label","labelPlacement","id","name","form","placeholder","clearable","disabled","readOnly","required","invalid","locale","messages","VIRTUALIZE_AFTER","ClockIcon","_$getNextElement","_tmpl$","TimePicker","props","local","shared","initial","internal","setInternal","raw","canonical","current","draft","setDraft","items","values","Set","selected","typed","add","sort","map","_$createComponent","_$mergeProps","searchable","rootClass","selectedOption","next","undefined","onFormReset","inputValue","onInputValueChange","matchItem","item","query","commitDraft","text","trim","triggerContent","autoHighlight","centerSelected","inputMode","virtualization","length"],"sources":["../src/time-only.ts","../src/time-picker.tsx"],"sourcesContent":["// Time-of-day values are 24-hour \"HH:MM\" strings; \"\" is empty. Servers may send\n// \"HH:MM:SS\" — it is accepted and shown as HH:MM, but never rewritten until the\n// user picks a time.\nconst API_TIME = /^([01]\\d|2[0-3]):([0-5]\\d)(?::[0-5]\\d(?:\\.\\d+)?)?$/;\n\n/** Canonical \"HH:MM\" for an API value, or null when it is not a time. */\nexport function normalizeTime(value: string): string | null {\n const match = API_TIME.exec(value);\n return match ? `${match[1]}:${match[2]}` : null;\n}\n\nconst pad = (value: number) => String(value).padStart(2, \"0\");\nconst fromParts = (hour: number, minute: number) =>\n hour <= 23 && minute <= 59 ? `${pad(hour)}:${pad(minute)}` : null;\n\n/**\n * What a person typed, read as a complete time: \"9:05\", \"09:05\", \"09:05:00\",\n * \"0905\", or \"905\" when the first two digits cannot be an hour. Full-width\n * colons and dots count as colons. Partial text (\"10\", \"10:4\", and \"103\",\n * which is still on its way to 10:30) is not a time.\n */\nexport function parseTypedTime(text: string): string | null {\n const value = text.trim().replace(/[:.]/g, \":\");\n const separated = /^(\\d{1,2}):(\\d{2})(?::\\d{2})?$/.exec(value);\n if (separated) return fromParts(Number(separated[1]), Number(separated[2]));\n if (/^\\d{4}$/.test(value))\n return fromParts(Number(value.slice(0, 2)), Number(value.slice(2)));\n if (/^\\d{3}$/.test(value) && Number(value.slice(0, 2)) > 23)\n return fromParts(Number(value[0]), Number(value.slice(1)));\n return null;\n}\n\n/** 00:00 up to the last step before 24:00. Steps below one minute become one; a non-number becomes 10. */\nexport function timeOptions(step: number) {\n const minutes = Number.isFinite(step) ? Math.max(1, Math.floor(step)) : 10;\n const values: string[] = [];\n for (let at = 0; at < 24 * 60; at += minutes)\n values.push(`${pad(Math.floor(at / 60))}:${pad(at % 60)}`);\n return values;\n}\n\n/**\n * Whether a \"HH:MM\" option matches partial typing. Digits read as the start of\n * the time (\"10\" → 10:00–10:59, \"1030\" → 10:30); an odd digit count or an\n * impossible hour also tries a leading zero (\"9\" → 09:xx, \"930\" → 09:30).\n * With a colon the hour may be one digit (\"9:3\" → 09:30–09:39).\n */\nexport function matchesTimeQuery(option: string, query: string) {\n const text = query.trim().replace(/[:.]/g, \":\");\n if (text === \"\") return true;\n const typed = parseTypedTime(text);\n if (typed) return option === typed;\n if (text.includes(\":\")) {\n const [hour = \"\", minute = \"\", ...rest] = text.split(\":\");\n if (rest.length || !/^\\d{1,2}$/.test(hour) || !/^\\d{0,2}$/.test(minute))\n return false;\n return option.startsWith(`${hour.padStart(2, \"0\")}:${minute}`);\n }\n if (!/^\\d{1,4}$/.test(text)) return false;\n const digits = option.replace(\":\", \"\");\n if (digits.startsWith(text)) return true;\n return (\n (text.length % 2 === 1 || Number(text.slice(0, 2)) > 23) &&\n digits.startsWith(`0${text}`)\n );\n}\n\nexport interface TimeMessages {\n /** Accessible name of the clock button that opens the list. */\n open?: string;\n /** Accessible name of the clear button. */\n clear?: string;\n /** Status when nothing in the list matches the typed text. */\n empty?: string;\n}\nexport function timeMessages(locale: string, messages: TimeMessages = {}) {\n const ko = /^ko(?:-|$)/i.test(locale);\n return {\n open: ko ? \"시간 목록 열기\" : \"Open time list\",\n clear: ko ? \"시간 지우기\" : \"Clear time\",\n empty: ko ? \"맞는 시간이 없습니다\" : \"No matching time\",\n ...messages,\n };\n}\n","import { createMemo, createSignal, splitProps } from \"solid-js\";\nimport type { ChoiceOption } from \"./choice-types\";\nimport { Choice } from \"./internal/choice\";\nimport {\n matchesTimeQuery,\n normalizeTime,\n parseTypedTime,\n timeMessages,\n timeOptions,\n type TimeMessages,\n} from \"./time-only\";\nexport type { TimeMessages } from \"./time-only\";\n\nexport interface TimePickerProps {\n /** 24-hour \"HH:MM\" (\"\" is empty). \"HH:MM:SS\" is accepted and shown as HH:MM. */\n value?: string;\n defaultValue?: string;\n /** Receives \"HH:MM\" or \"\" — only when the person picks, types or clears a time. */\n onValueChange?: (value: string) => void;\n /** Minutes between listed times, from 00:00 (default 10). Typed times off the step are still accepted. */\n step?: number;\n label?: string;\n labelPlacement?: \"outside\" | \"inside\" | \"hidden\";\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n id?: string;\n name?: string;\n form?: string;\n placeholder?: string;\n clearable?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n invalid?: boolean;\n /** Chooses the built-in Korean or English text (default \"ko-KR\"). */\n locale?: string;\n messages?: TimeMessages;\n}\n\n/** Above this many rows the list is virtualized (1-minute steps list 1,440 times). */\nconst VIRTUALIZE_AFTER = 300;\n\n// The dds-icons \"clock\" glyph, inlined like DatePicker's calendar so this\n// subpath does not pull in the whole icon set.\nfunction ClockIcon() {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18z\" />\n <path d=\"M12 7v5l3 2\" />\n </svg>\n );\n}\n\n/**\n * A time-of-day field: type a time or pick one from the list. Built on the\n * same Ark combobox as Combobox, so list, keyboard and form behavior match.\n */\nexport function TimePicker(props: TimePickerProps) {\n const [local, shared] = splitProps(props, [\n \"value\",\n \"defaultValue\",\n \"onValueChange\",\n \"step\",\n \"placeholder\",\n \"invalid\",\n \"locale\",\n \"messages\",\n ]);\n const initial = () => normalizeTime(local.defaultValue ?? \"\") ?? \"\";\n const [internal, setInternal] = createSignal(initial());\n const raw = () => local.value ?? internal();\n const canonical = () => (raw() === \"\" ? \"\" : normalizeTime(raw()));\n // A value that is not a time is shown as it came, marked invalid, and never rewritten.\n const current = () => canonical() ?? raw();\n const [draft, setDraft] = createSignal(current());\n const items = createMemo<ChoiceOption[]>(() => {\n const values = new Set(timeOptions(local.step ?? 10));\n const selected = canonical(),\n typed = parseTypedTime(draft());\n if (selected) values.add(selected);\n if (typed) values.add(typed);\n return [...values].sort().map((value) => ({ value, label: value }));\n });\n return (\n <Choice\n {...shared}\n searchable\n rootClass=\"dds-time-picker\"\n items={items()}\n value={current()}\n // Only read when the value is not a listed time (an invalid server value).\n selectedOption={{ value: current(), label: current() }}\n onValueChange={(next) => {\n if (local.value === undefined) setInternal(next);\n local.onValueChange?.(next);\n }}\n onFormReset={() => {\n if (local.value === undefined) setInternal(initial());\n }}\n inputValue={draft()}\n onInputValueChange={setDraft}\n matchItem={(item, query) => matchesTimeQuery(item.value, query)}\n commitDraft={(text) => (text.trim() === \"\" ? \"\" : parseTypedTime(text))}\n triggerContent={() => <ClockIcon />}\n autoHighlight\n centerSelected\n inputMode=\"numeric\"\n virtualization={items().length > VIRTUALIZE_AFTER ? {} : false}\n messages={timeMessages(local.locale ?? \"ko-KR\", local.messages)}\n placeholder={local.placeholder ?? \"HH:MM\"}\n invalid={local.invalid === true || canonical() === null}\n />\n );\n}\n"],"mappings":"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"}
|
package/dist/time-picker.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "./time-picker-
|
|
1
|
+
import { t as e } from "./time-picker-BWz2wQUk.js";
|
|
2
2
|
export { e as TimePicker };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as Choice } from "./assets/choice-
|
|
1
|
+
import { t as Choice } from "./assets/choice-UkVI5yuv.js";
|
|
2
2
|
import { createMemo, createSignal, splitProps } from "solid-js";
|
|
3
3
|
import { createComponent, mergeProps as mergeProps$1, ssr, ssrHydrationKey } from "solid-js/web";
|
|
4
4
|
//#region src/time-only.ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devslab/dds-solid",
|
|
3
|
-
"version": "0.25.
|
|
3
|
+
"version": "0.25.1",
|
|
4
4
|
"description": "Accessible SolidJS primitives for the DevsLab Design System",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -134,9 +134,9 @@
|
|
|
134
134
|
},
|
|
135
135
|
"dependencies": {
|
|
136
136
|
"@ark-ui/solid": "5.39.3",
|
|
137
|
-
"@devslab/dds-css": "0.25.
|
|
138
|
-
"@devslab/dds-icons": "0.25.
|
|
139
|
-
"@devslab/dds-tokens": "0.25.
|
|
137
|
+
"@devslab/dds-css": "0.25.1",
|
|
138
|
+
"@devslab/dds-icons": "0.25.1",
|
|
139
|
+
"@devslab/dds-tokens": "0.25.1",
|
|
140
140
|
"@tanstack/solid-virtual": "3.13.48",
|
|
141
141
|
"@zag-js/aria-hidden": "1.45.0",
|
|
142
142
|
"@zag-js/focus-trap": "1.45.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"choice-DPmk9AHn.js","names":["Combobox","C","createListCollection","Select","S","Portal","createEffect","createMemo","createSignal","createUniqueId","For","onCleanup","onMount","Show","untrack","JSX","createVirtualizer","defaultRangeExtractor","Range","choiceMessages","choiceWarningsEnabled","validateOptions","ChoiceOption","ComboboxProps","ChoiceInternals","searchable","matchItem","item","query","commitDraft","text","triggerContent","Element","rootClass","invalid","autoHighlight","centerSelected","inputMode","HTMLAttributes","HTMLInputElement","onFormReset","Choice","props","id","internal","setInternal","defaultValue","value","label","items","find","selectedOption","draft","setDraft","defaultInputValue","inputValue","open","setOpen","highlight","setHighlight","visible","HTMLButtonElement","validation","scroll","setScroll","HTMLDivElement","portalMount","setPortalMount","HTMLElement","closest","ownerDocument","body","composing","consumedOnBlur","pendingRestore","from","to","resolveLabel","blocked","disabled","readOnly","messages","setInput","next","undefined","onInputValueChange","restoreInput","current","setValue","onValueChange","some","console","warn","JSON","stringify","previousSelection","associatedForm","form","getElementById","HTMLFormElement","reset","event","Event","setTimeout","defaultPrevented","resetValue","resetLabel","addEventListener","removeEventListener","filterMode","filter","toLocaleLowerCase","includes","collection","itemToString","itemToValue","isItemDisabled","virtual","virtualization","height","configured","itemHeight","Number","isFinite","Math","max","activeIndex","findIndex","virtualizer","count","length","getScrollElement","estimateSize","overscan","enabled","initialRect","width","rangeExtractor","active","range","indexes","push","sort","a","b","opened","scrollToIndex","align","content","frame","requestAnimationFrame","selected","querySelector","list","getBoundingClientRect","row","scrollTop","top","clientHeight","cancelAnimationFrame","Parts","rows","result","getVirtualItems","map","index","start","_","status","loading","error","empty","rootProps","onOpenChange","details","onHighlightChange","highlightedValue","scrollToIndexFn","positioning","placement","const","sameWidth","gutter","strategy","matches","hideWhenDetached","inputProps","reason","stale","activeElement","selectionBehavior","inputBehavior","_$createComponent","Root","_$mergeProps","class","_$memo","data-label-placement","labelPlacement","data-has-value","children","when","Label","onClick","focus","Control","Input","aria-label","aria-labelledby","aria-describedby","aria-required","required","placeholder","onCompositionStart","onCompositionEnd","onKeyDown","key","preventDefault","stopPropagation","onBlur","currentTarget","Trigger","_$ssr","_tmpl$5","_$ssrHydrationKey","_$escape","clearable","_tmpl$","_$ssrAttribute","clear","_tmpl$2","_$ssrStyleProperty","name","_tmpl$4","onRetry","_tmpl$3","retry","mount","Positioner","Content","style","overflow","_tmpl$6","_$ssrStyle","getTotalSize","position","each","Item","aria-posinset","aria-setsize","left","transform","ItemText","description","_tmpl$7"],"sources":["../../src/internal/choice.tsx"],"sourcesContent":["import { Combobox as C, createListCollection } from \"@ark-ui/solid/combobox\";\nimport { Select as S } from \"@ark-ui/solid/select\";\nimport { Portal } from \"solid-js/web\";\nimport {\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n onCleanup,\n onMount,\n Show,\n untrack,\n type JSX,\n} from \"solid-js\";\nimport {\n createVirtualizer,\n defaultRangeExtractor,\n type Range,\n} from \"@tanstack/solid-virtual\";\nimport {\n choiceMessages,\n choiceWarningsEnabled,\n validateOptions,\n type ChoiceOption,\n type ComboboxProps,\n} from \"../choice-types\";\n\n/**\n * Options for DDS components built on Choice (TimePicker). They are not part\n * of the public Combobox/SelectPicker props; every default keeps the existing\n * Combobox and SelectPicker behavior.\n */\nexport interface ChoiceInternals {\n searchable: boolean;\n /** Replaces the default case-insensitive label substring filter. */\n matchItem?: (item: ChoiceOption, query: string) => boolean;\n /** On blur, the value the typed text stands for, \"\" to clear, or null to restore the label. */\n commitDraft?: (text: string) => string | null;\n /** Content of the searchable trigger button (default \"⌄\"). */\n triggerContent?: () => JSX.Element;\n rootClass?: string;\n invalid?: boolean;\n /** Highlight the first match while typing so Enter picks it. */\n autoHighlight?: boolean;\n /** Scroll the selected option to the middle of the list when it opens. */\n centerSelected?: boolean;\n inputMode?: JSX.HTMLAttributes<HTMLInputElement>[\"inputMode\"];\n /** Called before a native form reset restores the value. */\n onFormReset?: () => void;\n}\n\nexport function Choice(props: ComboboxProps & ChoiceInternals) {\n const id = createUniqueId();\n const [internal, setInternal] = createSignal(props.defaultValue ?? \"\");\n const value = () => props.value ?? internal();\n const label = createMemo(\n () =>\n props.items.find((item) => item.value === value())?.label ??\n (props.selectedOption?.value === value()\n ? props.selectedOption.label\n : value()),\n );\n const [draft, setDraft] = createSignal(props.defaultInputValue ?? label());\n const inputValue = () => props.inputValue ?? draft();\n const [open, setOpen] = createSignal(false),\n [highlight, setHighlight] = createSignal<string | null>(null);\n let visible: HTMLInputElement | HTMLButtonElement | undefined,\n validation: HTMLInputElement | undefined;\n const [scroll, setScroll] = createSignal<HTMLDivElement | null>(null);\n const [portalMount, setPortalMount] = createSignal<HTMLElement>();\n onMount(() => {\n // Preserve the enclosing modal's isolation boundary for nested options.\n if (visible)\n setPortalMount(\n visible.closest<HTMLElement>('[role=\"dialog\"], [role=\"alertdialog\"]') ??\n visible.ownerDocument.body,\n );\n });\n let composing = false;\n let consumedOnBlur: string | null = null;\n let pendingRestore: { from: string; to: string } | null = null;\n const resolveLabel = (id: string) =>\n props.items.find((item) => item.value === id)?.label ??\n (props.selectedOption?.value === id ? props.selectedOption.label : id);\n const blocked = () => props.disabled || props.readOnly;\n const messages = () => ({ ...choiceMessages, ...props.messages });\n const setInput = (next: string) => {\n if (pendingRestore?.from === inputValue() && pendingRestore.to === next)\n return;\n pendingRestore = null;\n if (props.inputValue === undefined) setDraft(next);\n props.onInputValueChange?.(next);\n };\n const restoreInput = (next: string) => {\n const current = inputValue();\n if (next === current) return;\n if (pendingRestore?.from === current && pendingRestore.to === next) return;\n pendingRestore = { from: current, to: next };\n if (props.inputValue === undefined) setDraft(next);\n else props.onInputValueChange?.(next);\n };\n const setValue = (next: string) => {\n if (props.value === undefined) setInternal(next);\n props.onValueChange?.(next);\n };\n createEffect(() => {\n validateOptions(props.items);\n });\n createEffect(() => {\n if (\n choiceWarningsEnabled() &&\n value() &&\n !props.items.some((item) => item.value === value()) &&\n props.selectedOption?.value !== value()\n )\n console.warn(\n `DDS choice: no label supplied for selected ID ${JSON.stringify(value())}; pass selectedOption when the selection is outside items.`,\n );\n });\n let previousSelection = { value: value(), label: label() };\n createEffect(() => {\n const current = { value: value(), label: label() };\n if (\n previousSelection.value !== current.value ||\n previousSelection.label !== current.label\n ) {\n previousSelection = current;\n untrack(() => restoreInput(current.label));\n }\n });\n createEffect(() => {\n const associatedForm = props.form;\n const form = associatedForm\n ? (validation?.ownerDocument.getElementById(\n associatedForm,\n ) as HTMLFormElement | null)\n : validation?.form;\n if (!form) return;\n // A task, not a microtask: after a reset-button click, microtasks run\n // before the browser resets the controls and would be overwritten.\n const reset = (event: Event) =>\n setTimeout(() => {\n if (event.defaultPrevented) return;\n props.onFormReset?.();\n const resetValue = props.value ?? props.defaultValue ?? \"\";\n const resetLabel = resolveLabel(resetValue);\n previousSelection = { value: resetValue, label: resetLabel };\n if (props.value === undefined) setInternal(resetValue);\n restoreInput(props.defaultInputValue ?? resetLabel);\n setOpen(false);\n if (visible instanceof HTMLInputElement) visible.value = inputValue();\n if (validation) validation.value = value();\n });\n form.addEventListener(\"reset\", reset);\n onCleanup(() => form.removeEventListener(\"reset\", reset));\n });\n const items = createMemo(() =>\n props.searchable &&\n props.filterMode !== \"external\" &&\n inputValue() !== label()\n ? props.items.filter((item) =>\n props.matchItem\n ? props.matchItem(item, inputValue())\n : item.label\n .toLocaleLowerCase()\n .includes(inputValue().toLocaleLowerCase()),\n )\n : props.items,\n );\n const collection = createMemo(() =>\n createListCollection({\n items: items(),\n itemToString: (item) => item.label,\n itemToValue: (item) => item.value,\n isItemDisabled: (item) => !!item.disabled,\n }),\n );\n const virtual = () => !!props.virtualization;\n const height = () => {\n const configured = props.virtualization\n ? props.virtualization.itemHeight\n : undefined;\n return Number.isFinite(configured) ? Math.max(40, configured!) : 40;\n };\n const activeIndex = () =>\n items().findIndex((item) => item.value === highlight());\n const virtualizer = createVirtualizer<HTMLDivElement, HTMLDivElement>({\n get count() {\n return items().length;\n },\n getScrollElement: scroll,\n estimateSize: height,\n get overscan() {\n return props.virtualization ? (props.virtualization.overscan ?? 5) : 5;\n },\n get enabled() {\n return virtual() && open();\n },\n initialRect: { width: 0, height: 320 },\n get rangeExtractor() {\n const active = activeIndex();\n return (range: Range) => {\n const indexes = defaultRangeExtractor(range);\n if (active >= 0 && !indexes.includes(active)) indexes.push(active);\n return indexes.sort((a, b) => a - b);\n };\n },\n });\n createEffect(() => {\n items();\n const opened = open();\n setHighlight(null);\n if (virtual() && opened)\n virtualizer.scrollToIndex(\n Math.max(\n 0,\n items().findIndex((item) => item.value === value()),\n ),\n { align: props.centerSelected ? \"center\" : \"auto\" },\n );\n });\n createEffect(() => {\n const content = scroll();\n if (!props.centerSelected || !open() || virtual() || !content) return;\n // Ark only scrolls the highlighted option to the nearest edge.\n const frame = requestAnimationFrame(() => {\n const selected = content.querySelector<HTMLElement>(\n '[data-part=\"item\"][data-state=\"checked\"]',\n );\n if (!selected) return;\n const list = content.getBoundingClientRect(),\n row = selected.getBoundingClientRect();\n content.scrollTop +=\n row.top - list.top - (content.clientHeight - row.height) / 2;\n });\n onCleanup(() => cancelAnimationFrame(frame));\n });\n const Parts = props.searchable ? C : S;\n const rows = createMemo(() => {\n const result = virtual()\n ? virtualizer\n .getVirtualItems()\n .map((row) => ({ index: row.index, start: row.start }))\n : items().map((_, index) => ({ index, start: 0 }));\n const active = activeIndex();\n if (virtual() && active >= 0 && !result.some((row) => row.index === active))\n result.push({ index: active, start: active * height() });\n return result;\n });\n const status = () =>\n props.loading\n ? messages().loading\n : props.error\n ? typeof props.error === \"string\"\n ? props.error\n : messages().error\n : items().length === 0\n ? messages().empty\n : \"\";\n const rootProps = {\n get collection() {\n return collection();\n },\n get value() {\n return value() ? [value()] : [];\n },\n get open() {\n return open() && !blocked();\n },\n get disabled() {\n return props.disabled;\n },\n get readOnly() {\n return props.readOnly;\n },\n get invalid() {\n return props.invalid;\n },\n onOpenChange: (details: { open: boolean }) => {\n if (!blocked()) setOpen(details.open);\n },\n onValueChange: (details: { value: string[] }) => {\n if (blocked() || composing) return;\n const next = details.value[0] ?? \"\";\n if (next !== value()) setValue(next);\n },\n onHighlightChange: (details: { highlightedValue: string | null }) =>\n setHighlight(details.highlightedValue),\n get scrollToIndexFn() {\n return virtual()\n ? ({ index }: { index: number }) =>\n virtualizer.scrollToIndex(index, { align: \"auto\" })\n : undefined;\n },\n get positioning() {\n return {\n placement: \"bottom-start\" as const,\n sameWidth: true,\n gutter: 4,\n strategy: portalMount()?.matches(\n '[role=\"dialog\"], [role=\"alertdialog\"]',\n )\n ? (\"fixed\" as const)\n : (\"absolute\" as const),\n hideWhenDetached: !!portalMount()?.matches(\n '[role=\"dialog\"], [role=\"alertdialog\"]',\n ),\n };\n },\n };\n const inputProps = props.searchable\n ? {\n get inputValue() {\n return inputValue();\n },\n onInputValueChange: (details: {\n inputValue: string;\n reason?: string | undefined;\n }) => {\n // Ark reports a keystroke after the blur that already committed it.\n const stale =\n consumedOnBlur === details.inputValue &&\n details.reason === \"input-change\" &&\n visible?.ownerDocument.activeElement !== visible;\n consumedOnBlur = null;\n if (stale) return;\n if (!blocked() && details.inputValue !== inputValue())\n setInput(details.inputValue);\n },\n selectionBehavior: \"preserve\" as const,\n ...(props.autoHighlight\n ? { inputBehavior: \"autohighlight\" as const }\n : {}),\n }\n : {};\n return (\n <Parts.Root\n {...rootProps}\n {...inputProps}\n id={props.id ?? id}\n class={props.rootClass ? `dds-choice ${props.rootClass}` : \"dds-choice\"}\n data-label-placement={props.labelPlacement ?? \"outside\"}\n data-has-value={value() || inputValue() ? \"\" : undefined}\n >\n <Show when={props.label}>\n <Parts.Label class=\"dds-choice-label\" onClick={() => visible?.focus()}>\n {props.label}\n </Parts.Label>\n </Show>\n <Parts.Control class=\"dds-choice-control\">\n <Show when={props.searchable}>\n <C.Input\n ref={(node) => {\n visible = node;\n }}\n class=\"dds-choice-input\"\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={props.required}\n placeholder={props.placeholder}\n inputMode={props.inputMode}\n onCompositionStart={() => {\n composing = true;\n }}\n onCompositionEnd={() => {\n composing = false;\n }}\n onKeyDown={(event) => {\n if (composing && event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n onBlur={(event) => {\n if (props.commitDraft) {\n // The DOM holds the latest keystroke; Ark's input state may still be queued.\n consumedOnBlur = event.currentTarget.value;\n const next = blocked()\n ? null\n : props.commitDraft(consumedOnBlur);\n if (next !== null && next !== value()) setValue(next);\n restoreInput(label());\n return;\n }\n if (value()) restoreInput(label());\n }}\n />\n </Show>\n <Parts.Trigger\n ref={(node) => {\n if (!props.searchable) visible = node;\n }}\n class=\"dds-choice-trigger\"\n aria-label={props.searchable ? messages().open : props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={props.required}\n >\n {props.searchable ? (\n props.triggerContent ? (\n props.triggerContent()\n ) : (\n \"⌄\"\n )\n ) : (\n <span class=\"dds-choice-value\">\n {label() || props.placeholder || messages().open}\n </span>\n )}\n </Parts.Trigger>\n <Show when={props.clearable && !blocked() && (value() || inputValue())}>\n <button\n class=\"dds-choice-clear\"\n type=\"button\"\n aria-label={messages().clear}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => {\n setValue(\"\");\n setInput(\"\");\n setOpen(false);\n visible?.focus();\n }}\n >\n ×\n </button>\n </Show>\n </Parts.Control>\n <input\n ref={validation}\n class=\"dds-choice-validation\"\n style={{\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: \"0\",\n border: \"0\",\n \"clip-path\": \"inset(50%)\",\n overflow: \"hidden\",\n \"white-space\": \"nowrap\",\n }}\n tabIndex={-1}\n aria-hidden=\"true\"\n name={props.name}\n form={props.form}\n value={value()}\n required={props.required}\n disabled={props.disabled}\n onInput={(event) => {\n event.currentTarget.value = value();\n }}\n onInvalid={(event) => {\n event.preventDefault();\n visible?.focus();\n }}\n />\n <div class=\"dds-choice-status\" role=\"status\" aria-live=\"polite\">\n {status()}\n <Show when={props.error && props.onRetry}>\n <button\n class=\"dds-choice-retry\"\n type=\"button\"\n onClick={() => props.onRetry?.()}\n >\n {messages().retry}\n </button>\n </Show>\n </div>\n <Show when={portalMount()}>\n {(mount) => (\n <Portal mount={mount()}>\n <Parts.Positioner class=\"dds-choice-positioner\">\n <Parts.Content\n ref={setScroll}\n class=\"dds-choice-content\"\n style={{\n \"max-height\": \"min(320px, var(--available-height, 320px))\",\n overflow: \"auto\",\n }}\n >\n <div\n style={\n virtual()\n ? {\n height: `${virtualizer.getTotalSize()}px`,\n position: \"relative\",\n }\n : undefined\n }\n >\n <For each={rows()}>\n {(row) => {\n const item = () => items()[row.index]!;\n return (\n <Parts.Item\n item={item()}\n class=\"dds-choice-item\"\n aria-posinset={row.index + 1}\n aria-setsize={items().length}\n style={\n virtual()\n ? {\n position: \"absolute\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: `${height()}px`,\n transform: `translateY(${row.start}px)`,\n }\n : undefined\n }\n >\n <Parts.ItemText>{item().label}</Parts.ItemText>\n <Show when={item().description}>\n <span class=\"dds-choice-description\">\n {item().description}\n </span>\n </Show>\n </Parts.Item>\n );\n }}\n </For>\n </div>\n </Parts.Content>\n </Parts.Positioner>\n </Portal>\n )}\n </Show>\n </Parts.Root>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"choice-CTNeFOVo.js","names":["Combobox","C","createListCollection","Select","S","Portal","createEffect","createMemo","createSignal","createUniqueId","For","onCleanup","onMount","Show","untrack","JSX","createVirtualizer","defaultRangeExtractor","Range","choiceMessages","choiceWarningsEnabled","validateOptions","ChoiceOption","ComboboxProps","ChoiceInternals","searchable","matchItem","item","query","commitDraft","text","triggerContent","Element","rootClass","invalid","autoHighlight","centerSelected","inputMode","HTMLAttributes","HTMLInputElement","onFormReset","Choice","props","id","internal","setInternal","defaultValue","value","label","items","find","selectedOption","draft","setDraft","defaultInputValue","inputValue","open","setOpen","highlight","setHighlight","visible","HTMLButtonElement","validation","scroll","setScroll","HTMLDivElement","portalMount","setPortalMount","HTMLElement","closest","ownerDocument","body","composing","consumedOnBlur","pendingRestore","from","to","resolveLabel","blocked","disabled","readOnly","messages","setInput","next","undefined","onInputValueChange","restoreInput","current","setValue","onValueChange","some","console","warn","JSON","stringify","previousSelection","associatedForm","form","getElementById","HTMLFormElement","reset","event","Event","setTimeout","defaultPrevented","resetValue","resetLabel","addEventListener","removeEventListener","filterMode","filter","toLocaleLowerCase","includes","collection","itemToString","itemToValue","isItemDisabled","virtual","virtualization","height","configured","itemHeight","Number","isFinite","Math","max","activeIndex","findIndex","virtualizer","count","length","getScrollElement","estimateSize","overscan","enabled","initialRect","width","rangeExtractor","active","range","indexes","push","sort","a","b","opened","scrollToIndex","align","content","frame","requestAnimationFrame","selected","querySelector","list","getBoundingClientRect","row","scrollTop","top","clientHeight","cancelAnimationFrame","Parts","rows","result","getVirtualItems","map","index","start","_","status","loading","error","empty","rootProps","onOpenChange","details","onHighlightChange","highlightedValue","scrollToIndexFn","positioning","placement","const","sameWidth","gutter","strategy","matches","hideWhenDetached","inputProps","reason","stale","activeElement","selectionBehavior","inputBehavior","_$createComponent","Root","_$mergeProps","class","_$memo","data-label-placement","labelPlacement","data-has-value","children","when","Label","onClick","focus","Control","Input","ref","node","aria-label","aria-labelledby","aria-describedby","aria-required","required","placeholder","onCompositionStart","onCompositionEnd","onKeyDown","key","preventDefault","stopPropagation","onBlur","currentTarget","Trigger","_el$9","_$getNextElement","_tmpl$5","_$insert","clearable","_el$","_tmpl$","$$click","$$pointerdown","_$effect","_$setAttribute","clear","_$runHydrationEvents","_el$2","_tmpl$2","$$input","_ref$","_$use","_p$","_v$","name","_v$2","_v$3","_v$4","e","t","_$setProperty","o","_el$3","_tmpl$4","_el$5","firstChild","_el$6","_co$","_$getNextMarker","nextSibling","_el$7","_el$8","_co$2","onRetry","_el$4","_tmpl$3","retry","mount","Positioner","Content","style","overflow","_el$0","_tmpl$6","each","Item","aria-posinset","aria-setsize","position","left","transform","ItemText","description","_el$1","_tmpl$7","_$p","_$style","getTotalSize","_$delegateEvents"],"sources":["../src/internal/choice.tsx"],"sourcesContent":["import { Combobox as C, createListCollection } from \"@ark-ui/solid/combobox\";\nimport { Select as S } from \"@ark-ui/solid/select\";\nimport { Portal } from \"solid-js/web\";\nimport {\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n onCleanup,\n onMount,\n Show,\n untrack,\n type JSX,\n} from \"solid-js\";\nimport {\n createVirtualizer,\n defaultRangeExtractor,\n type Range,\n} from \"@tanstack/solid-virtual\";\nimport {\n choiceMessages,\n choiceWarningsEnabled,\n validateOptions,\n type ChoiceOption,\n type ComboboxProps,\n} from \"../choice-types\";\n\n/**\n * Options for DDS components built on Choice (TimePicker). They are not part\n * of the public Combobox/SelectPicker props; every default keeps the existing\n * Combobox and SelectPicker behavior.\n */\nexport interface ChoiceInternals {\n searchable: boolean;\n /** Replaces the default case-insensitive label substring filter. */\n matchItem?: (item: ChoiceOption, query: string) => boolean;\n /** On blur, the value the typed text stands for, \"\" to clear, or null to restore the label. */\n commitDraft?: (text: string) => string | null;\n /** Content of the searchable trigger button (default \"⌄\"). */\n triggerContent?: () => JSX.Element;\n rootClass?: string;\n invalid?: boolean;\n /** Highlight the first match while typing so Enter picks it. */\n autoHighlight?: boolean;\n /** Scroll the selected option to the middle of the list when it opens. */\n centerSelected?: boolean;\n inputMode?: JSX.HTMLAttributes<HTMLInputElement>[\"inputMode\"];\n /** Called before a native form reset restores the value. */\n onFormReset?: () => void;\n}\n\nexport function Choice(props: ComboboxProps & ChoiceInternals) {\n const id = createUniqueId();\n const [internal, setInternal] = createSignal(props.defaultValue ?? \"\");\n const value = () => props.value ?? internal();\n const label = createMemo(\n () =>\n props.items.find((item) => item.value === value())?.label ??\n (props.selectedOption?.value === value()\n ? props.selectedOption.label\n : value()),\n );\n const [draft, setDraft] = createSignal(props.defaultInputValue ?? label());\n const inputValue = () => props.inputValue ?? draft();\n const [open, setOpen] = createSignal(false),\n [highlight, setHighlight] = createSignal<string | null>(null);\n let visible: HTMLInputElement | HTMLButtonElement | undefined,\n validation: HTMLInputElement | undefined;\n const [scroll, setScroll] = createSignal<HTMLDivElement | null>(null);\n const [portalMount, setPortalMount] = createSignal<HTMLElement>();\n onMount(() => {\n // Preserve the enclosing modal's isolation boundary for nested options.\n if (visible)\n setPortalMount(\n visible.closest<HTMLElement>('[role=\"dialog\"], [role=\"alertdialog\"]') ??\n visible.ownerDocument.body,\n );\n });\n let composing = false;\n let consumedOnBlur: string | null = null;\n let pendingRestore: { from: string; to: string } | null = null;\n const resolveLabel = (id: string) =>\n props.items.find((item) => item.value === id)?.label ??\n (props.selectedOption?.value === id ? props.selectedOption.label : id);\n const blocked = () => props.disabled || props.readOnly;\n const messages = () => ({ ...choiceMessages, ...props.messages });\n const setInput = (next: string) => {\n if (pendingRestore?.from === inputValue() && pendingRestore.to === next)\n return;\n pendingRestore = null;\n if (props.inputValue === undefined) setDraft(next);\n props.onInputValueChange?.(next);\n };\n const restoreInput = (next: string) => {\n const current = inputValue();\n if (next === current) return;\n if (pendingRestore?.from === current && pendingRestore.to === next) return;\n pendingRestore = { from: current, to: next };\n if (props.inputValue === undefined) setDraft(next);\n else props.onInputValueChange?.(next);\n };\n const setValue = (next: string) => {\n if (props.value === undefined) setInternal(next);\n props.onValueChange?.(next);\n };\n createEffect(() => {\n validateOptions(props.items);\n });\n createEffect(() => {\n if (\n choiceWarningsEnabled() &&\n value() &&\n !props.items.some((item) => item.value === value()) &&\n props.selectedOption?.value !== value()\n )\n console.warn(\n `DDS choice: no label supplied for selected ID ${JSON.stringify(value())}; pass selectedOption when the selection is outside items.`,\n );\n });\n let previousSelection = { value: value(), label: label() };\n createEffect(() => {\n const current = { value: value(), label: label() };\n if (\n previousSelection.value !== current.value ||\n previousSelection.label !== current.label\n ) {\n previousSelection = current;\n untrack(() => restoreInput(current.label));\n }\n });\n createEffect(() => {\n const associatedForm = props.form;\n const form = associatedForm\n ? (validation?.ownerDocument.getElementById(\n associatedForm,\n ) as HTMLFormElement | null)\n : validation?.form;\n if (!form) return;\n // A task, not a microtask: after a reset-button click, microtasks run\n // before the browser resets the controls and would be overwritten.\n const reset = (event: Event) =>\n setTimeout(() => {\n if (event.defaultPrevented) return;\n props.onFormReset?.();\n const resetValue = props.value ?? props.defaultValue ?? \"\";\n const resetLabel = resolveLabel(resetValue);\n previousSelection = { value: resetValue, label: resetLabel };\n if (props.value === undefined) setInternal(resetValue);\n restoreInput(props.defaultInputValue ?? resetLabel);\n setOpen(false);\n if (visible instanceof HTMLInputElement) visible.value = inputValue();\n if (validation) validation.value = value();\n });\n form.addEventListener(\"reset\", reset);\n onCleanup(() => form.removeEventListener(\"reset\", reset));\n });\n const items = createMemo(() =>\n props.searchable &&\n props.filterMode !== \"external\" &&\n inputValue() !== label()\n ? props.items.filter((item) =>\n props.matchItem\n ? props.matchItem(item, inputValue())\n : item.label\n .toLocaleLowerCase()\n .includes(inputValue().toLocaleLowerCase()),\n )\n : props.items,\n );\n const collection = createMemo(() =>\n createListCollection({\n items: items(),\n itemToString: (item) => item.label,\n itemToValue: (item) => item.value,\n isItemDisabled: (item) => !!item.disabled,\n }),\n );\n const virtual = () => !!props.virtualization;\n const height = () => {\n const configured = props.virtualization\n ? props.virtualization.itemHeight\n : undefined;\n return Number.isFinite(configured) ? Math.max(40, configured!) : 40;\n };\n const activeIndex = () =>\n items().findIndex((item) => item.value === highlight());\n const virtualizer = createVirtualizer<HTMLDivElement, HTMLDivElement>({\n get count() {\n return items().length;\n },\n getScrollElement: scroll,\n estimateSize: height,\n get overscan() {\n return props.virtualization ? (props.virtualization.overscan ?? 5) : 5;\n },\n get enabled() {\n return virtual() && open();\n },\n initialRect: { width: 0, height: 320 },\n get rangeExtractor() {\n const active = activeIndex();\n return (range: Range) => {\n const indexes = defaultRangeExtractor(range);\n if (active >= 0 && !indexes.includes(active)) indexes.push(active);\n return indexes.sort((a, b) => a - b);\n };\n },\n });\n createEffect(() => {\n items();\n const opened = open();\n setHighlight(null);\n if (virtual() && opened)\n virtualizer.scrollToIndex(\n Math.max(\n 0,\n items().findIndex((item) => item.value === value()),\n ),\n { align: props.centerSelected ? \"center\" : \"auto\" },\n );\n });\n createEffect(() => {\n const content = scroll();\n if (!props.centerSelected || !open() || virtual() || !content) return;\n // Ark only scrolls the highlighted option to the nearest edge.\n const frame = requestAnimationFrame(() => {\n const selected = content.querySelector<HTMLElement>(\n '[data-part=\"item\"][data-state=\"checked\"]',\n );\n if (!selected) return;\n const list = content.getBoundingClientRect(),\n row = selected.getBoundingClientRect();\n content.scrollTop +=\n row.top - list.top - (content.clientHeight - row.height) / 2;\n });\n onCleanup(() => cancelAnimationFrame(frame));\n });\n const Parts = props.searchable ? C : S;\n const rows = createMemo(() => {\n const result = virtual()\n ? virtualizer\n .getVirtualItems()\n .map((row) => ({ index: row.index, start: row.start }))\n : items().map((_, index) => ({ index, start: 0 }));\n const active = activeIndex();\n if (virtual() && active >= 0 && !result.some((row) => row.index === active))\n result.push({ index: active, start: active * height() });\n return result;\n });\n const status = () =>\n props.loading\n ? messages().loading\n : props.error\n ? typeof props.error === \"string\"\n ? props.error\n : messages().error\n : items().length === 0\n ? messages().empty\n : \"\";\n const rootProps = {\n get collection() {\n return collection();\n },\n get value() {\n return value() ? [value()] : [];\n },\n get open() {\n return open() && !blocked();\n },\n get disabled() {\n return props.disabled;\n },\n get readOnly() {\n return props.readOnly;\n },\n get invalid() {\n return props.invalid;\n },\n onOpenChange: (details: { open: boolean }) => {\n if (!blocked()) setOpen(details.open);\n },\n onValueChange: (details: { value: string[] }) => {\n if (blocked() || composing) return;\n const next = details.value[0] ?? \"\";\n if (next !== value()) setValue(next);\n },\n onHighlightChange: (details: { highlightedValue: string | null }) =>\n setHighlight(details.highlightedValue),\n get scrollToIndexFn() {\n return virtual()\n ? ({ index }: { index: number }) =>\n virtualizer.scrollToIndex(index, { align: \"auto\" })\n : undefined;\n },\n get positioning() {\n return {\n placement: \"bottom-start\" as const,\n sameWidth: true,\n gutter: 4,\n strategy: portalMount()?.matches(\n '[role=\"dialog\"], [role=\"alertdialog\"]',\n )\n ? (\"fixed\" as const)\n : (\"absolute\" as const),\n hideWhenDetached: !!portalMount()?.matches(\n '[role=\"dialog\"], [role=\"alertdialog\"]',\n ),\n };\n },\n };\n const inputProps = props.searchable\n ? {\n get inputValue() {\n return inputValue();\n },\n onInputValueChange: (details: {\n inputValue: string;\n reason?: string | undefined;\n }) => {\n // Ark reports a keystroke after the blur that already committed it.\n const stale =\n consumedOnBlur === details.inputValue &&\n details.reason === \"input-change\" &&\n visible?.ownerDocument.activeElement !== visible;\n consumedOnBlur = null;\n if (stale) return;\n if (!blocked() && details.inputValue !== inputValue())\n setInput(details.inputValue);\n },\n selectionBehavior: \"preserve\" as const,\n ...(props.autoHighlight\n ? { inputBehavior: \"autohighlight\" as const }\n : {}),\n }\n : {};\n return (\n <Parts.Root\n {...rootProps}\n {...inputProps}\n id={props.id ?? id}\n class={props.rootClass ? `dds-choice ${props.rootClass}` : \"dds-choice\"}\n data-label-placement={props.labelPlacement ?? \"outside\"}\n data-has-value={value() || inputValue() ? \"\" : undefined}\n >\n <Show when={props.label}>\n <Parts.Label class=\"dds-choice-label\" onClick={() => visible?.focus()}>\n {props.label}\n </Parts.Label>\n </Show>\n <Parts.Control class=\"dds-choice-control\">\n <Show when={props.searchable}>\n <C.Input\n ref={(node) => {\n visible = node;\n }}\n class=\"dds-choice-input\"\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={props.required}\n placeholder={props.placeholder}\n inputMode={props.inputMode}\n onCompositionStart={() => {\n composing = true;\n }}\n onCompositionEnd={() => {\n composing = false;\n }}\n onKeyDown={(event) => {\n if (composing && event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n onBlur={(event) => {\n if (props.commitDraft) {\n // The DOM holds the latest keystroke; Ark's input state may still be queued.\n consumedOnBlur = event.currentTarget.value;\n const next = blocked()\n ? null\n : props.commitDraft(consumedOnBlur);\n if (next !== null && next !== value()) setValue(next);\n restoreInput(label());\n return;\n }\n if (value()) restoreInput(label());\n }}\n />\n </Show>\n <Parts.Trigger\n ref={(node) => {\n if (!props.searchable) visible = node;\n }}\n class=\"dds-choice-trigger\"\n aria-label={props.searchable ? messages().open : props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={props.required}\n >\n {props.searchable ? (\n props.triggerContent ? (\n props.triggerContent()\n ) : (\n \"⌄\"\n )\n ) : (\n <span class=\"dds-choice-value\">\n {label() || props.placeholder || messages().open}\n </span>\n )}\n </Parts.Trigger>\n <Show when={props.clearable && !blocked() && (value() || inputValue())}>\n <button\n class=\"dds-choice-clear\"\n type=\"button\"\n aria-label={messages().clear}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => {\n setValue(\"\");\n setInput(\"\");\n setOpen(false);\n visible?.focus();\n }}\n >\n ×\n </button>\n </Show>\n </Parts.Control>\n <input\n ref={validation}\n class=\"dds-choice-validation\"\n style={{\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: \"0\",\n border: \"0\",\n \"clip-path\": \"inset(50%)\",\n overflow: \"hidden\",\n \"white-space\": \"nowrap\",\n }}\n tabIndex={-1}\n aria-hidden=\"true\"\n name={props.name}\n form={props.form}\n value={value()}\n required={props.required}\n disabled={props.disabled}\n onInput={(event) => {\n event.currentTarget.value = value();\n }}\n onInvalid={(event) => {\n event.preventDefault();\n visible?.focus();\n }}\n />\n <div class=\"dds-choice-status\" role=\"status\" aria-live=\"polite\">\n {status()}\n <Show when={props.error && props.onRetry}>\n <button\n class=\"dds-choice-retry\"\n type=\"button\"\n onClick={() => props.onRetry?.()}\n >\n {messages().retry}\n </button>\n </Show>\n </div>\n <Show when={portalMount()}>\n {(mount) => (\n <Portal mount={mount()}>\n <Parts.Positioner class=\"dds-choice-positioner\">\n <Parts.Content\n ref={setScroll}\n class=\"dds-choice-content\"\n style={{\n \"max-height\": \"min(320px, var(--available-height, 320px))\",\n overflow: \"auto\",\n }}\n >\n <div\n style={\n virtual()\n ? {\n height: `${virtualizer.getTotalSize()}px`,\n position: \"relative\",\n }\n : undefined\n }\n >\n <For each={rows()}>\n {(row) => {\n const item = () => items()[row.index]!;\n return (\n <Parts.Item\n item={item()}\n class=\"dds-choice-item\"\n aria-posinset={row.index + 1}\n aria-setsize={items().length}\n style={\n virtual()\n ? {\n position: \"absolute\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: `${height()}px`,\n transform: `translateY(${row.start}px)`,\n }\n : undefined\n }\n >\n <Parts.ItemText>{item().label}</Parts.ItemText>\n <Show when={item().description}>\n <span class=\"dds-choice-description\">\n {item().description}\n </span>\n </Show>\n </Parts.Item>\n );\n }}\n </For>\n </div>\n </Parts.Content>\n </Parts.Positioner>\n </Portal>\n )}\n </Show>\n </Parts.Root>\n );\n}\n"],"mappings":"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"}
|