@devslab/dds-solid 0.24.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.
@@ -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, ssrStyleProperty } from "solid-js/web";
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\" style=\"",
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(), ssrStyleProperty("position:", "absolute") + ssrStyleProperty(";width:", "1px") + ssrStyleProperty(";height:", "1px") + ssrStyleProperty(";padding:", "0") + ssrStyleProperty(";border:", "0") + ssrStyleProperty(";clip-path:", "inset(50%)") + ssrStyleProperty(";overflow:", "hidden") + ssrStyleProperty(";white-space:", "nowrap"), 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)),
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-DPmk9AHn.js.map
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 style=position:absolute;width:1px;height:1px;padding:0;border:0;clip-path:inset(50%);overflow:hidden;white-space:nowrap>"), 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>");
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-CTNeFOVo.js.map
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":"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"}
package/dist/combobox.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as e } from "./choice-CTNeFOVo.js";
1
+ import { t as e } from "./choice-DwhbztEw.js";
2
2
  import { createComponent as t, mergeProps as n } from "solid-js/web";
3
3
  //#region src/combobox.tsx
4
4
  function r(r) {
@@ -1,4 +1,4 @@
1
- import { t as Choice } from "./assets/choice-DPmk9AHn.js";
1
+ import { t as Choice } from "./assets/choice-UkVI5yuv.js";
2
2
  import { createComponent, mergeProps } from "solid-js/web";
3
3
  //#region src/combobox.tsx
4
4
  function Combobox(props) {
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-BlMWCQwk.js";
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":"input.d.ts","sourceRoot":"","sources":["../src/input.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,GAAG,EACT,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC7D,MAAM,WAAW,UACf,SAAQ,IAAI,CACV,GAAG,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACzC,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CACzD;IACD,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAWD,yEAAyE;AACzE,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,eA4GtC;AACD,MAAM,WAAW,eAAgB,SAAQ,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;IACzE,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AACD,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,eAkBhD"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,GAAG,EACT,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC7D,MAAM,WAAW,UACf,SAAQ,IAAI,CACV,GAAG,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACzC,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CACzD;IACD,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAWD,yEAAyE;AACzE,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,eA8GtC;AACD,MAAM,WAAW,eAAgB,SAAQ,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;IACzE,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AACD,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,eAkBhD"}
package/dist/input.js CHANGED
@@ -30,7 +30,7 @@ function D(c) {
30
30
  M.defaultValue = D;
31
31
  }), t(() => {
32
32
  C.form;
33
- let e = M.form, t = (e) => queueMicrotask(() => {
33
+ let e = M.form, t = (e) => setTimeout(() => {
34
34
  e.defaultPrevented || (v.value === void 0 && k(D), M.value = A());
35
35
  });
36
36
  e?.addEventListener("reset", t), i(() => e?.removeEventListener("reset", t));
package/dist/input.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","names":["createEffect","createSignal","createUniqueId","onCleanup","onMount","splitProps","JSX","classes","LabelPlacement","InputProps","Omit","InputHTMLAttributes","HTMLInputElement","type","value","defaultValue","onValueChange","next","label","Element","labelPlacement","clearable","clearLabel","class","wrapperClass","readOnly","callHandler","handler","event","E","data","Input","props","local","rest","generated","id","initial","internal","setInternal","current","readonly","input","form","reset","Event","queueMicrotask","defaultPrevented","undefined","addEventListener","removeEventListener","update","disabled","_el$","_$getNextElement","_tmpl$","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$2","_el$5","_el$6","_co$2","_$insert","_c$","_$memo","_el$7","_tmpl$2","_$effect","_$setAttribute","_$use","node","ref","_$spread","_$mergeProps","onInput","currentTarget","onKeyDown","key","isComposing","keyCode","preventDefault","_c$2","length","_el$8","_tmpl$3","$$click","focus","$$mousedown","$$pointerdown","_$runHydrationEvents","_p$","_v$","_v$2","_v$3","_v$4","_v$5","e","_$className","t","a","o","i","InputGroupProps","HTMLAttributes","HTMLDivElement","start","end","children","InputGroup","_el$9","_tmpl$4","_el$0","_el$1","_co$3","_el$10","_el$11","_co$4","_el$12","_el$13","_co$5","_c$3","_el$14","_tmpl$5","_c$4","_el$15","_tmpl$6","_$delegateEvents"],"sources":["../src/input.tsx"],"sourcesContent":["import {\n createEffect,\n createSignal,\n createUniqueId,\n onCleanup,\n onMount,\n splitProps,\n type JSX,\n} from \"solid-js\";\nimport { classes } from \"./utils\";\n\nexport type LabelPlacement = \"outside\" | \"inside\" | \"hidden\";\nexport interface InputProps\n extends Omit<\n JSX.InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"value\" | \"defaultValue\" | \"children\" | \"class\"\n > {\n type?: \"text\" | \"search\" | \"email\" | \"tel\" | \"url\" | \"password\" | \"number\";\n value?: string;\n defaultValue?: string;\n onValueChange?: (next: string) => void;\n label?: JSX.Element;\n labelPlacement?: LabelPlacement;\n clearable?: boolean;\n clearLabel?: string;\n class?: string;\n wrapperClass?: string;\n /** Alias for the native Solid readonly property. */\n readOnly?: boolean;\n}\nfunction callHandler<E>(\n handler:\n | ((event: E) => void)\n | { 0: (data: any, event: E) => void; 1: any }\n | undefined,\n event: E,\n) {\n if (typeof handler === \"function\") handler(event);\n else if (handler) handler[0](handler[1], event);\n}\n/** A native text input. Supply label, aria-label, or aria-labelledby. */\nexport function Input(props: InputProps) {\n const [local, rest] = splitProps(props, [\n \"value\",\n \"defaultValue\",\n \"onValueChange\",\n \"label\",\n \"labelPlacement\",\n \"clearable\",\n \"clearLabel\",\n \"class\",\n \"wrapperClass\",\n \"id\",\n \"type\",\n \"ref\",\n \"onInput\",\n \"onKeyDown\",\n \"disabled\",\n \"readonly\",\n \"readOnly\",\n ]);\n const generated = createUniqueId();\n const id = () => local.id ?? `dds-input-${generated}`;\n const initial = local.defaultValue ?? \"\";\n const [internal, setInternal] = createSignal(initial);\n const current = () => local.value ?? internal();\n const readOnly = () => local.readonly || local.readOnly;\n let input!: HTMLInputElement;\n onMount(() => {\n input.defaultValue = initial;\n });\n createEffect(() => {\n // Native form ownership can change after mount, including external forms.\n void rest.form;\n const form = input.form;\n const reset = (event: Event) =>\n queueMicrotask(() => {\n if (event.defaultPrevented) return;\n if (local.value === undefined) setInternal(initial);\n input.value = current();\n });\n form?.addEventListener(\"reset\", reset);\n onCleanup(() => form?.removeEventListener(\"reset\", reset));\n });\n const update = (next: string) => {\n if (local.disabled || readOnly()) return;\n if (local.value === undefined) setInternal(next);\n local.onValueChange?.(next);\n // A declined controlled edit must not leave the DOM holding a draft.\n input.value = current();\n };\n return (\n <span\n class={classes(\"dds-input\", local.wrapperClass)}\n data-label-placement={local.labelPlacement ?? \"outside\"}\n data-filled={current().length > 0 ? \"\" : undefined}\n data-disabled={local.disabled ? \"\" : undefined}\n data-readonly={readOnly() ? \"\" : undefined}\n >\n {local.label != null && (\n <label for={id()} class=\"dds-input__label\">\n {local.label}\n </label>\n )}\n <input\n {...rest}\n ref={(node) => {\n input = node;\n if (typeof local.ref === \"function\") local.ref(node);\n }}\n id={id()}\n type={local.type ?? \"text\"}\n disabled={local.disabled}\n readonly={readOnly()}\n class={classes(\"dds-input__control\", local.class)}\n value={current()}\n onInput={(event) => {\n callHandler(local.onInput, event);\n update(event.currentTarget.value);\n }}\n onKeyDown={(event) => {\n callHandler(local.onKeyDown, event);\n if (\n event.key === \"Enter\" &&\n (event.isComposing || event.keyCode === 229)\n )\n event.preventDefault();\n }}\n />\n {local.clearable &&\n current().length > 0 &&\n !local.disabled &&\n !readOnly() && (\n <button\n type=\"button\"\n class=\"dds-input__clear\"\n aria-label={local.clearLabel ?? \"내용 지우기\"}\n onPointerDown={(event) => event.preventDefault()}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n update(\"\");\n input.focus();\n }}\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n )}\n </span>\n );\n}\nexport interface InputGroupProps extends JSX.HTMLAttributes<HTMLDivElement> {\n start?: JSX.Element;\n end?: JSX.Element;\n children?: JSX.Element;\n}\n/** Layout only: the child Input owns its value and accessible name. */\nexport function InputGroup(props: InputGroupProps) {\n const [local, rest] = splitProps(props, [\n \"start\",\n \"end\",\n \"class\",\n \"children\",\n ]);\n return (\n <div {...rest} class={classes(\"dds-input-group\", local.class)}>\n {local.start != null && (\n <span class=\"dds-input-group__start\">{local.start}</span>\n )}\n {local.children}\n {local.end != null && (\n <span class=\"dds-input-group__end\">{local.end}</span>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"input.js","names":["createEffect","createSignal","createUniqueId","onCleanup","onMount","splitProps","JSX","classes","LabelPlacement","InputProps","Omit","InputHTMLAttributes","HTMLInputElement","type","value","defaultValue","onValueChange","next","label","Element","labelPlacement","clearable","clearLabel","class","wrapperClass","readOnly","callHandler","handler","event","E","data","Input","props","local","rest","generated","id","initial","internal","setInternal","current","readonly","input","form","reset","Event","setTimeout","defaultPrevented","undefined","addEventListener","removeEventListener","update","disabled","_el$","_$getNextElement","_tmpl$","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$2","_el$5","_el$6","_co$2","_$insert","_c$","_$memo","_el$7","_tmpl$2","_$effect","_$setAttribute","_$use","node","ref","_$spread","_$mergeProps","onInput","currentTarget","onKeyDown","key","isComposing","keyCode","preventDefault","_c$2","length","_el$8","_tmpl$3","$$click","focus","$$mousedown","$$pointerdown","_$runHydrationEvents","_p$","_v$","_v$2","_v$3","_v$4","_v$5","e","_$className","t","a","o","i","InputGroupProps","HTMLAttributes","HTMLDivElement","start","end","children","InputGroup","_el$9","_tmpl$4","_el$0","_el$1","_co$3","_el$10","_el$11","_co$4","_el$12","_el$13","_co$5","_c$3","_el$14","_tmpl$5","_c$4","_el$15","_tmpl$6","_$delegateEvents"],"sources":["../src/input.tsx"],"sourcesContent":["import {\n createEffect,\n createSignal,\n createUniqueId,\n onCleanup,\n onMount,\n splitProps,\n type JSX,\n} from \"solid-js\";\nimport { classes } from \"./utils\";\n\nexport type LabelPlacement = \"outside\" | \"inside\" | \"hidden\";\nexport interface InputProps\n extends Omit<\n JSX.InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"value\" | \"defaultValue\" | \"children\" | \"class\"\n > {\n type?: \"text\" | \"search\" | \"email\" | \"tel\" | \"url\" | \"password\" | \"number\";\n value?: string;\n defaultValue?: string;\n onValueChange?: (next: string) => void;\n label?: JSX.Element;\n labelPlacement?: LabelPlacement;\n clearable?: boolean;\n clearLabel?: string;\n class?: string;\n wrapperClass?: string;\n /** Alias for the native Solid readonly property. */\n readOnly?: boolean;\n}\nfunction callHandler<E>(\n handler:\n | ((event: E) => void)\n | { 0: (data: any, event: E) => void; 1: any }\n | undefined,\n event: E,\n) {\n if (typeof handler === \"function\") handler(event);\n else if (handler) handler[0](handler[1], event);\n}\n/** A native text input. Supply label, aria-label, or aria-labelledby. */\nexport function Input(props: InputProps) {\n const [local, rest] = splitProps(props, [\n \"value\",\n \"defaultValue\",\n \"onValueChange\",\n \"label\",\n \"labelPlacement\",\n \"clearable\",\n \"clearLabel\",\n \"class\",\n \"wrapperClass\",\n \"id\",\n \"type\",\n \"ref\",\n \"onInput\",\n \"onKeyDown\",\n \"disabled\",\n \"readonly\",\n \"readOnly\",\n ]);\n const generated = createUniqueId();\n const id = () => local.id ?? `dds-input-${generated}`;\n const initial = local.defaultValue ?? \"\";\n const [internal, setInternal] = createSignal(initial);\n const current = () => local.value ?? internal();\n const readOnly = () => local.readonly || local.readOnly;\n let input!: HTMLInputElement;\n onMount(() => {\n input.defaultValue = initial;\n });\n createEffect(() => {\n // Native form ownership can change after mount, including external forms.\n void rest.form;\n const form = input.form;\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 if (local.value === undefined) setInternal(initial);\n input.value = current();\n });\n form?.addEventListener(\"reset\", reset);\n onCleanup(() => form?.removeEventListener(\"reset\", reset));\n });\n const update = (next: string) => {\n if (local.disabled || readOnly()) return;\n if (local.value === undefined) setInternal(next);\n local.onValueChange?.(next);\n // A declined controlled edit must not leave the DOM holding a draft.\n input.value = current();\n };\n return (\n <span\n class={classes(\"dds-input\", local.wrapperClass)}\n data-label-placement={local.labelPlacement ?? \"outside\"}\n data-filled={current().length > 0 ? \"\" : undefined}\n data-disabled={local.disabled ? \"\" : undefined}\n data-readonly={readOnly() ? \"\" : undefined}\n >\n {local.label != null && (\n <label for={id()} class=\"dds-input__label\">\n {local.label}\n </label>\n )}\n <input\n {...rest}\n ref={(node) => {\n input = node;\n if (typeof local.ref === \"function\") local.ref(node);\n }}\n id={id()}\n type={local.type ?? \"text\"}\n disabled={local.disabled}\n readonly={readOnly()}\n class={classes(\"dds-input__control\", local.class)}\n value={current()}\n onInput={(event) => {\n callHandler(local.onInput, event);\n update(event.currentTarget.value);\n }}\n onKeyDown={(event) => {\n callHandler(local.onKeyDown, event);\n if (\n event.key === \"Enter\" &&\n (event.isComposing || event.keyCode === 229)\n )\n event.preventDefault();\n }}\n />\n {local.clearable &&\n current().length > 0 &&\n !local.disabled &&\n !readOnly() && (\n <button\n type=\"button\"\n class=\"dds-input__clear\"\n aria-label={local.clearLabel ?? \"내용 지우기\"}\n onPointerDown={(event) => event.preventDefault()}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n update(\"\");\n input.focus();\n }}\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n )}\n </span>\n );\n}\nexport interface InputGroupProps extends JSX.HTMLAttributes<HTMLDivElement> {\n start?: JSX.Element;\n end?: JSX.Element;\n children?: JSX.Element;\n}\n/** Layout only: the child Input owns its value and accessible name. */\nexport function InputGroup(props: InputGroupProps) {\n const [local, rest] = splitProps(props, [\n \"start\",\n \"end\",\n \"class\",\n \"children\",\n ]);\n return (\n <div {...rest} class={classes(\"dds-input-group\", local.class)}>\n {local.start != null && (\n <span class=\"dds-input-group__start\">{local.start}</span>\n )}\n {local.children}\n {local.end != null && (\n <span class=\"dds-input-group__end\">{local.end}</span>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -63,7 +63,7 @@ function Input(props) {
63
63
  createEffect(() => {
64
64
  rest.form;
65
65
  const form = input.form;
66
- const reset = (event) => queueMicrotask(() => {
66
+ const reset = (event) => setTimeout(() => {
67
67
  if (event.defaultPrevented) return;
68
68
  if (local.value === void 0) setInternal(initial);
69
69
  input.value = current();
@@ -1 +1 @@
1
- {"version":3,"file":"input.server.js","names":["createEffect","createSignal","createUniqueId","onCleanup","onMount","splitProps","JSX","classes","LabelPlacement","InputProps","Omit","InputHTMLAttributes","HTMLInputElement","type","value","defaultValue","onValueChange","next","label","Element","labelPlacement","clearable","clearLabel","class","wrapperClass","readOnly","callHandler","handler","event","E","data","Input","props","local","rest","generated","id","initial","internal","setInternal","current","readonly","input","form","reset","Event","queueMicrotask","defaultPrevented","undefined","addEventListener","removeEventListener","update","disabled","_$ssr","_tmpl$","_$ssrHydrationKey","_$ssrAttribute","_$escape","length","_tmpl$2","_$ssrElement","_$mergeProps","_tmpl$3","InputGroupProps","HTMLAttributes","HTMLDivElement","start","end","children","InputGroup","_tmpl$4","_tmpl$5"],"sources":["../src/input.tsx"],"sourcesContent":["import {\n createEffect,\n createSignal,\n createUniqueId,\n onCleanup,\n onMount,\n splitProps,\n type JSX,\n} from \"solid-js\";\nimport { classes } from \"./utils\";\n\nexport type LabelPlacement = \"outside\" | \"inside\" | \"hidden\";\nexport interface InputProps\n extends Omit<\n JSX.InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"value\" | \"defaultValue\" | \"children\" | \"class\"\n > {\n type?: \"text\" | \"search\" | \"email\" | \"tel\" | \"url\" | \"password\" | \"number\";\n value?: string;\n defaultValue?: string;\n onValueChange?: (next: string) => void;\n label?: JSX.Element;\n labelPlacement?: LabelPlacement;\n clearable?: boolean;\n clearLabel?: string;\n class?: string;\n wrapperClass?: string;\n /** Alias for the native Solid readonly property. */\n readOnly?: boolean;\n}\nfunction callHandler<E>(\n handler:\n | ((event: E) => void)\n | { 0: (data: any, event: E) => void; 1: any }\n | undefined,\n event: E,\n) {\n if (typeof handler === \"function\") handler(event);\n else if (handler) handler[0](handler[1], event);\n}\n/** A native text input. Supply label, aria-label, or aria-labelledby. */\nexport function Input(props: InputProps) {\n const [local, rest] = splitProps(props, [\n \"value\",\n \"defaultValue\",\n \"onValueChange\",\n \"label\",\n \"labelPlacement\",\n \"clearable\",\n \"clearLabel\",\n \"class\",\n \"wrapperClass\",\n \"id\",\n \"type\",\n \"ref\",\n \"onInput\",\n \"onKeyDown\",\n \"disabled\",\n \"readonly\",\n \"readOnly\",\n ]);\n const generated = createUniqueId();\n const id = () => local.id ?? `dds-input-${generated}`;\n const initial = local.defaultValue ?? \"\";\n const [internal, setInternal] = createSignal(initial);\n const current = () => local.value ?? internal();\n const readOnly = () => local.readonly || local.readOnly;\n let input!: HTMLInputElement;\n onMount(() => {\n input.defaultValue = initial;\n });\n createEffect(() => {\n // Native form ownership can change after mount, including external forms.\n void rest.form;\n const form = input.form;\n const reset = (event: Event) =>\n queueMicrotask(() => {\n if (event.defaultPrevented) return;\n if (local.value === undefined) setInternal(initial);\n input.value = current();\n });\n form?.addEventListener(\"reset\", reset);\n onCleanup(() => form?.removeEventListener(\"reset\", reset));\n });\n const update = (next: string) => {\n if (local.disabled || readOnly()) return;\n if (local.value === undefined) setInternal(next);\n local.onValueChange?.(next);\n // A declined controlled edit must not leave the DOM holding a draft.\n input.value = current();\n };\n return (\n <span\n class={classes(\"dds-input\", local.wrapperClass)}\n data-label-placement={local.labelPlacement ?? \"outside\"}\n data-filled={current().length > 0 ? \"\" : undefined}\n data-disabled={local.disabled ? \"\" : undefined}\n data-readonly={readOnly() ? \"\" : undefined}\n >\n {local.label != null && (\n <label for={id()} class=\"dds-input__label\">\n {local.label}\n </label>\n )}\n <input\n {...rest}\n ref={(node) => {\n input = node;\n if (typeof local.ref === \"function\") local.ref(node);\n }}\n id={id()}\n type={local.type ?? \"text\"}\n disabled={local.disabled}\n readonly={readOnly()}\n class={classes(\"dds-input__control\", local.class)}\n value={current()}\n onInput={(event) => {\n callHandler(local.onInput, event);\n update(event.currentTarget.value);\n }}\n onKeyDown={(event) => {\n callHandler(local.onKeyDown, event);\n if (\n event.key === \"Enter\" &&\n (event.isComposing || event.keyCode === 229)\n )\n event.preventDefault();\n }}\n />\n {local.clearable &&\n current().length > 0 &&\n !local.disabled &&\n !readOnly() && (\n <button\n type=\"button\"\n class=\"dds-input__clear\"\n aria-label={local.clearLabel ?? \"내용 지우기\"}\n onPointerDown={(event) => event.preventDefault()}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n update(\"\");\n input.focus();\n }}\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n )}\n </span>\n );\n}\nexport interface InputGroupProps extends JSX.HTMLAttributes<HTMLDivElement> {\n start?: JSX.Element;\n end?: JSX.Element;\n children?: JSX.Element;\n}\n/** Layout only: the child Input owns its value and accessible name. */\nexport function InputGroup(props: InputGroupProps) {\n const [local, rest] = splitProps(props, [\n \"start\",\n \"end\",\n \"class\",\n \"children\",\n ]);\n return (\n <div {...rest} class={classes(\"dds-input-group\", local.class)}>\n {local.start != null && (\n <span class=\"dds-input-group__start\">{local.start}</span>\n )}\n {local.children}\n {local.end != null && (\n <span class=\"dds-input-group__end\">{local.end}</span>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"input.server.js","names":["createEffect","createSignal","createUniqueId","onCleanup","onMount","splitProps","JSX","classes","LabelPlacement","InputProps","Omit","InputHTMLAttributes","HTMLInputElement","type","value","defaultValue","onValueChange","next","label","Element","labelPlacement","clearable","clearLabel","class","wrapperClass","readOnly","callHandler","handler","event","E","data","Input","props","local","rest","generated","id","initial","internal","setInternal","current","readonly","input","form","reset","Event","setTimeout","defaultPrevented","undefined","addEventListener","removeEventListener","update","disabled","_$ssr","_tmpl$","_$ssrHydrationKey","_$ssrAttribute","_$escape","length","_tmpl$2","_$ssrElement","_$mergeProps","_tmpl$3","InputGroupProps","HTMLAttributes","HTMLDivElement","start","end","children","InputGroup","_tmpl$4","_tmpl$5"],"sources":["../src/input.tsx"],"sourcesContent":["import {\n createEffect,\n createSignal,\n createUniqueId,\n onCleanup,\n onMount,\n splitProps,\n type JSX,\n} from \"solid-js\";\nimport { classes } from \"./utils\";\n\nexport type LabelPlacement = \"outside\" | \"inside\" | \"hidden\";\nexport interface InputProps\n extends Omit<\n JSX.InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"value\" | \"defaultValue\" | \"children\" | \"class\"\n > {\n type?: \"text\" | \"search\" | \"email\" | \"tel\" | \"url\" | \"password\" | \"number\";\n value?: string;\n defaultValue?: string;\n onValueChange?: (next: string) => void;\n label?: JSX.Element;\n labelPlacement?: LabelPlacement;\n clearable?: boolean;\n clearLabel?: string;\n class?: string;\n wrapperClass?: string;\n /** Alias for the native Solid readonly property. */\n readOnly?: boolean;\n}\nfunction callHandler<E>(\n handler:\n | ((event: E) => void)\n | { 0: (data: any, event: E) => void; 1: any }\n | undefined,\n event: E,\n) {\n if (typeof handler === \"function\") handler(event);\n else if (handler) handler[0](handler[1], event);\n}\n/** A native text input. Supply label, aria-label, or aria-labelledby. */\nexport function Input(props: InputProps) {\n const [local, rest] = splitProps(props, [\n \"value\",\n \"defaultValue\",\n \"onValueChange\",\n \"label\",\n \"labelPlacement\",\n \"clearable\",\n \"clearLabel\",\n \"class\",\n \"wrapperClass\",\n \"id\",\n \"type\",\n \"ref\",\n \"onInput\",\n \"onKeyDown\",\n \"disabled\",\n \"readonly\",\n \"readOnly\",\n ]);\n const generated = createUniqueId();\n const id = () => local.id ?? `dds-input-${generated}`;\n const initial = local.defaultValue ?? \"\";\n const [internal, setInternal] = createSignal(initial);\n const current = () => local.value ?? internal();\n const readOnly = () => local.readonly || local.readOnly;\n let input!: HTMLInputElement;\n onMount(() => {\n input.defaultValue = initial;\n });\n createEffect(() => {\n // Native form ownership can change after mount, including external forms.\n void rest.form;\n const form = input.form;\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 if (local.value === undefined) setInternal(initial);\n input.value = current();\n });\n form?.addEventListener(\"reset\", reset);\n onCleanup(() => form?.removeEventListener(\"reset\", reset));\n });\n const update = (next: string) => {\n if (local.disabled || readOnly()) return;\n if (local.value === undefined) setInternal(next);\n local.onValueChange?.(next);\n // A declined controlled edit must not leave the DOM holding a draft.\n input.value = current();\n };\n return (\n <span\n class={classes(\"dds-input\", local.wrapperClass)}\n data-label-placement={local.labelPlacement ?? \"outside\"}\n data-filled={current().length > 0 ? \"\" : undefined}\n data-disabled={local.disabled ? \"\" : undefined}\n data-readonly={readOnly() ? \"\" : undefined}\n >\n {local.label != null && (\n <label for={id()} class=\"dds-input__label\">\n {local.label}\n </label>\n )}\n <input\n {...rest}\n ref={(node) => {\n input = node;\n if (typeof local.ref === \"function\") local.ref(node);\n }}\n id={id()}\n type={local.type ?? \"text\"}\n disabled={local.disabled}\n readonly={readOnly()}\n class={classes(\"dds-input__control\", local.class)}\n value={current()}\n onInput={(event) => {\n callHandler(local.onInput, event);\n update(event.currentTarget.value);\n }}\n onKeyDown={(event) => {\n callHandler(local.onKeyDown, event);\n if (\n event.key === \"Enter\" &&\n (event.isComposing || event.keyCode === 229)\n )\n event.preventDefault();\n }}\n />\n {local.clearable &&\n current().length > 0 &&\n !local.disabled &&\n !readOnly() && (\n <button\n type=\"button\"\n class=\"dds-input__clear\"\n aria-label={local.clearLabel ?? \"내용 지우기\"}\n onPointerDown={(event) => event.preventDefault()}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n update(\"\");\n input.focus();\n }}\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n )}\n </span>\n );\n}\nexport interface InputGroupProps extends JSX.HTMLAttributes<HTMLDivElement> {\n start?: JSX.Element;\n end?: JSX.Element;\n children?: JSX.Element;\n}\n/** Layout only: the child Input owns its value and accessible name. */\nexport function InputGroup(props: InputGroupProps) {\n const [local, rest] = splitProps(props, [\n \"start\",\n \"end\",\n \"class\",\n \"children\",\n ]);\n return (\n <div {...rest} class={classes(\"dds-input-group\", local.class)}>\n {local.start != null && (\n <span class=\"dds-input-group__start\">{local.start}</span>\n )}\n {local.children}\n {local.end != null && (\n <span class=\"dds-input-group__end\">{local.end}</span>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -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,eA+d5D"}
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"}
@@ -1,4 +1,4 @@
1
- import { t as e } from "./choice-CTNeFOVo.js";
1
+ import { t as e } from "./choice-DwhbztEw.js";
2
2
  import { createComponent as t, mergeProps as n } from "solid-js/web";
3
3
  //#region src/select-picker.tsx
4
4
  function r(r) {
@@ -1,4 +1,4 @@
1
- import { t as Choice } from "./assets/choice-DPmk9AHn.js";
1
+ import { t as Choice } from "./assets/choice-UkVI5yuv.js";
2
2
  import { createComponent, mergeProps } from "solid-js/web";
3
3
  //#region src/select-picker.tsx
4
4
  function SelectPicker(props) {
@@ -1,4 +1,4 @@
1
- import { t as e } from "./choice-CTNeFOVo.js";
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-BlMWCQwk.js.map
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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"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "./time-picker-BlMWCQwk.js";
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-DPmk9AHn.js";
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.24.0",
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.24.0",
138
- "@devslab/dds-icons": "0.24.0",
139
- "@devslab/dds-tokens": "0.24.0",
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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"}