@llui/components 0.4.10 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/dist/components/accordion.d.ts +13 -13
  2. package/dist/components/accordion.d.ts.map +1 -1
  3. package/dist/components/accordion.js +9 -9
  4. package/dist/components/accordion.js.map +1 -1
  5. package/dist/components/alert-dialog.d.ts +8 -8
  6. package/dist/components/alert-dialog.d.ts.map +1 -1
  7. package/dist/components/alert-dialog.js +2 -2
  8. package/dist/components/alert-dialog.js.map +1 -1
  9. package/dist/components/angle-slider.d.ts +13 -13
  10. package/dist/components/angle-slider.d.ts.map +1 -1
  11. package/dist/components/angle-slider.js +11 -11
  12. package/dist/components/angle-slider.js.map +1 -1
  13. package/dist/components/async-list.d.ts +7 -7
  14. package/dist/components/async-list.d.ts.map +1 -1
  15. package/dist/components/async-list.js +5 -8
  16. package/dist/components/async-list.js.map +1 -1
  17. package/dist/components/avatar.d.ts +9 -9
  18. package/dist/components/avatar.d.ts.map +1 -1
  19. package/dist/components/avatar.js +7 -7
  20. package/dist/components/avatar.js.map +1 -1
  21. package/dist/components/carousel.d.ts +18 -18
  22. package/dist/components/carousel.d.ts.map +1 -1
  23. package/dist/components/carousel.js +12 -12
  24. package/dist/components/carousel.js.map +1 -1
  25. package/dist/components/cascade-select.d.ts +12 -12
  26. package/dist/components/cascade-select.d.ts.map +1 -1
  27. package/dist/components/cascade-select.js +8 -8
  28. package/dist/components/cascade-select.js.map +1 -1
  29. package/dist/components/checkbox.d.ts +14 -14
  30. package/dist/components/checkbox.d.ts.map +1 -1
  31. package/dist/components/checkbox.js +12 -12
  32. package/dist/components/checkbox.js.map +1 -1
  33. package/dist/components/clipboard.d.ts +8 -8
  34. package/dist/components/clipboard.d.ts.map +1 -1
  35. package/dist/components/clipboard.js +6 -6
  36. package/dist/components/clipboard.js.map +1 -1
  37. package/dist/components/collapsible.d.ts +11 -11
  38. package/dist/components/collapsible.d.ts.map +1 -1
  39. package/dist/components/collapsible.js +9 -9
  40. package/dist/components/collapsible.js.map +1 -1
  41. package/dist/components/color-picker.d.ts +19 -19
  42. package/dist/components/color-picker.d.ts.map +1 -1
  43. package/dist/components/color-picker.js +21 -21
  44. package/dist/components/color-picker.js.map +1 -1
  45. package/dist/components/combobox.d.ts +25 -25
  46. package/dist/components/combobox.d.ts.map +1 -1
  47. package/dist/components/combobox.js +54 -59
  48. package/dist/components/combobox.js.map +1 -1
  49. package/dist/components/context-menu.d.ts +14 -14
  50. package/dist/components/context-menu.d.ts.map +1 -1
  51. package/dist/components/context-menu.js +15 -19
  52. package/dist/components/context-menu.js.map +1 -1
  53. package/dist/components/date-input.d.ts +13 -13
  54. package/dist/components/date-input.d.ts.map +1 -1
  55. package/dist/components/date-input.js +11 -11
  56. package/dist/components/date-input.js.map +1 -1
  57. package/dist/components/date-picker.d.ts +11 -11
  58. package/dist/components/date-picker.d.ts.map +1 -1
  59. package/dist/components/date-picker.js +7 -7
  60. package/dist/components/date-picker.js.map +1 -1
  61. package/dist/components/dialog.d.ts +15 -15
  62. package/dist/components/dialog.d.ts.map +1 -1
  63. package/dist/components/dialog.js +45 -50
  64. package/dist/components/dialog.js.map +1 -1
  65. package/dist/components/drawer.d.ts +13 -13
  66. package/dist/components/drawer.d.ts.map +1 -1
  67. package/dist/components/drawer.js +44 -49
  68. package/dist/components/drawer.js.map +1 -1
  69. package/dist/components/editable.d.ts +11 -11
  70. package/dist/components/editable.d.ts.map +1 -1
  71. package/dist/components/editable.js +9 -9
  72. package/dist/components/editable.js.map +1 -1
  73. package/dist/components/file-upload.d.ts +19 -19
  74. package/dist/components/file-upload.d.ts.map +1 -1
  75. package/dist/components/file-upload.js +14 -14
  76. package/dist/components/file-upload.js.map +1 -1
  77. package/dist/components/floating-panel.d.ts +14 -14
  78. package/dist/components/floating-panel.d.ts.map +1 -1
  79. package/dist/components/floating-panel.js +13 -14
  80. package/dist/components/floating-panel.js.map +1 -1
  81. package/dist/components/form.d.ts +9 -9
  82. package/dist/components/form.d.ts.map +1 -1
  83. package/dist/components/form.js +7 -7
  84. package/dist/components/form.js.map +1 -1
  85. package/dist/components/hover-card.d.ts +9 -9
  86. package/dist/components/hover-card.d.ts.map +1 -1
  87. package/dist/components/hover-card.js +12 -13
  88. package/dist/components/hover-card.js.map +1 -1
  89. package/dist/components/image-cropper.d.ts +8 -8
  90. package/dist/components/image-cropper.d.ts.map +1 -1
  91. package/dist/components/image-cropper.js +7 -8
  92. package/dist/components/image-cropper.js.map +1 -1
  93. package/dist/components/in-view.d.ts +6 -6
  94. package/dist/components/in-view.d.ts.map +1 -1
  95. package/dist/components/in-view.js +2 -2
  96. package/dist/components/in-view.js.map +1 -1
  97. package/dist/components/listbox.d.ts +16 -16
  98. package/dist/components/listbox.d.ts.map +1 -1
  99. package/dist/components/listbox.js +16 -16
  100. package/dist/components/listbox.js.map +1 -1
  101. package/dist/components/marquee.d.ts +8 -8
  102. package/dist/components/marquee.d.ts.map +1 -1
  103. package/dist/components/marquee.js +8 -11
  104. package/dist/components/marquee.js.map +1 -1
  105. package/dist/components/menu.d.ts +15 -15
  106. package/dist/components/menu.d.ts.map +1 -1
  107. package/dist/components/menu.js +16 -17
  108. package/dist/components/menu.js.map +1 -1
  109. package/dist/components/navigation-menu.d.ts +12 -12
  110. package/dist/components/navigation-menu.d.ts.map +1 -1
  111. package/dist/components/navigation-menu.js +8 -8
  112. package/dist/components/navigation-menu.js.map +1 -1
  113. package/dist/components/number-input.d.ts +18 -18
  114. package/dist/components/number-input.d.ts.map +1 -1
  115. package/dist/components/number-input.js +16 -20
  116. package/dist/components/number-input.js.map +1 -1
  117. package/dist/components/pagination.d.ts +13 -13
  118. package/dist/components/pagination.d.ts.map +1 -1
  119. package/dist/components/pagination.js +11 -17
  120. package/dist/components/pagination.js.map +1 -1
  121. package/dist/components/password-input.d.ts +11 -11
  122. package/dist/components/password-input.d.ts.map +1 -1
  123. package/dist/components/password-input.js +11 -11
  124. package/dist/components/password-input.js.map +1 -1
  125. package/dist/components/pin-input.d.ts +9 -9
  126. package/dist/components/pin-input.d.ts.map +1 -1
  127. package/dist/components/pin-input.js +9 -9
  128. package/dist/components/pin-input.js.map +1 -1
  129. package/dist/components/popover.d.ts +11 -11
  130. package/dist/components/popover.d.ts.map +1 -1
  131. package/dist/components/popover.js +61 -60
  132. package/dist/components/popover.js.map +1 -1
  133. package/dist/components/presence.d.ts +7 -5
  134. package/dist/components/presence.d.ts.map +1 -1
  135. package/dist/components/presence.js +5 -3
  136. package/dist/components/presence.js.map +1 -1
  137. package/dist/components/progress.d.ts +14 -14
  138. package/dist/components/progress.d.ts.map +1 -1
  139. package/dist/components/progress.js +12 -12
  140. package/dist/components/progress.js.map +1 -1
  141. package/dist/components/qr-code.d.ts +7 -7
  142. package/dist/components/qr-code.d.ts.map +1 -1
  143. package/dist/components/qr-code.js +7 -7
  144. package/dist/components/qr-code.js.map +1 -1
  145. package/dist/components/radio-group.d.ts +15 -15
  146. package/dist/components/radio-group.d.ts.map +1 -1
  147. package/dist/components/radio-group.js +12 -13
  148. package/dist/components/radio-group.js.map +1 -1
  149. package/dist/components/rating-group.d.ts +13 -13
  150. package/dist/components/rating-group.d.ts.map +1 -1
  151. package/dist/components/rating-group.js +10 -11
  152. package/dist/components/rating-group.js.map +1 -1
  153. package/dist/components/scroll-area.d.ts +10 -10
  154. package/dist/components/scroll-area.d.ts.map +1 -1
  155. package/dist/components/scroll-area.js +10 -15
  156. package/dist/components/scroll-area.js.map +1 -1
  157. package/dist/components/select.d.ts +26 -26
  158. package/dist/components/select.d.ts.map +1 -1
  159. package/dist/components/select.js +29 -33
  160. package/dist/components/select.js.map +1 -1
  161. package/dist/components/signature-pad.d.ts +12 -12
  162. package/dist/components/signature-pad.d.ts.map +1 -1
  163. package/dist/components/signature-pad.js +10 -10
  164. package/dist/components/signature-pad.js.map +1 -1
  165. package/dist/components/slider.d.ts +22 -22
  166. package/dist/components/slider.d.ts.map +1 -1
  167. package/dist/components/slider.js +17 -17
  168. package/dist/components/slider.js.map +1 -1
  169. package/dist/components/sortable.d.ts +11 -11
  170. package/dist/components/sortable.d.ts.map +1 -1
  171. package/dist/components/sortable.js +20 -20
  172. package/dist/components/sortable.js.map +1 -1
  173. package/dist/components/splitter.d.ts +15 -15
  174. package/dist/components/splitter.d.ts.map +1 -1
  175. package/dist/components/splitter.js +15 -15
  176. package/dist/components/splitter.js.map +1 -1
  177. package/dist/components/steps.d.ts +14 -14
  178. package/dist/components/steps.d.ts.map +1 -1
  179. package/dist/components/steps.js +10 -16
  180. package/dist/components/steps.js.map +1 -1
  181. package/dist/components/switch.d.ts +12 -12
  182. package/dist/components/switch.d.ts.map +1 -1
  183. package/dist/components/switch.js +10 -10
  184. package/dist/components/switch.js.map +1 -1
  185. package/dist/components/tabs.d.ts +15 -15
  186. package/dist/components/tabs.d.ts.map +1 -1
  187. package/dist/components/tabs.js +11 -11
  188. package/dist/components/tabs.js.map +1 -1
  189. package/dist/components/tags-input.d.ts +14 -14
  190. package/dist/components/tags-input.d.ts.map +1 -1
  191. package/dist/components/tags-input.js +10 -10
  192. package/dist/components/tags-input.js.map +1 -1
  193. package/dist/components/theme-switch.d.ts +5 -5
  194. package/dist/components/theme-switch.d.ts.map +1 -1
  195. package/dist/components/theme-switch.js +3 -3
  196. package/dist/components/theme-switch.js.map +1 -1
  197. package/dist/components/time-picker.d.ts +19 -19
  198. package/dist/components/time-picker.d.ts.map +1 -1
  199. package/dist/components/time-picker.js +17 -17
  200. package/dist/components/time-picker.js.map +1 -1
  201. package/dist/components/timer.d.ts +10 -10
  202. package/dist/components/timer.d.ts.map +1 -1
  203. package/dist/components/timer.js +8 -8
  204. package/dist/components/timer.js.map +1 -1
  205. package/dist/components/toast.d.ts +8 -8
  206. package/dist/components/toast.d.ts.map +1 -1
  207. package/dist/components/toast.js +4 -4
  208. package/dist/components/toast.js.map +1 -1
  209. package/dist/components/toc.d.ts +12 -12
  210. package/dist/components/toc.d.ts.map +1 -1
  211. package/dist/components/toc.js +8 -8
  212. package/dist/components/toc.js.map +1 -1
  213. package/dist/components/toggle-group.d.ts +13 -13
  214. package/dist/components/toggle-group.d.ts.map +1 -1
  215. package/dist/components/toggle-group.js +9 -9
  216. package/dist/components/toggle-group.js.map +1 -1
  217. package/dist/components/toggle.d.ts +8 -8
  218. package/dist/components/toggle.d.ts.map +1 -1
  219. package/dist/components/toggle.js +6 -6
  220. package/dist/components/toggle.js.map +1 -1
  221. package/dist/components/tooltip.d.ts +10 -10
  222. package/dist/components/tooltip.d.ts.map +1 -1
  223. package/dist/components/tooltip.js +13 -14
  224. package/dist/components/tooltip.js.map +1 -1
  225. package/dist/components/tour.d.ts +7 -7
  226. package/dist/components/tour.d.ts.map +1 -1
  227. package/dist/components/tour.js +5 -5
  228. package/dist/components/tour.js.map +1 -1
  229. package/dist/components/tree-view.d.ts +19 -19
  230. package/dist/components/tree-view.d.ts.map +1 -1
  231. package/dist/components/tree-view.js +23 -23
  232. package/dist/components/tree-view.js.map +1 -1
  233. package/dist/patterns/confirm-dialog.d.ts +4 -4
  234. package/dist/patterns/confirm-dialog.d.ts.map +1 -1
  235. package/dist/patterns/confirm-dialog.js +7 -9
  236. package/dist/patterns/confirm-dialog.js.map +1 -1
  237. package/package.json +3 -3
  238. package/dist/components/enter-view.d.ts +0 -73
  239. package/dist/components/enter-view.d.ts.map +0 -1
  240. package/dist/components/enter-view.js +0 -51
  241. package/dist/utils/validators.d.ts +0 -34
  242. package/dist/utils/validators.d.ts.map +0 -1
  243. package/dist/utils/validators.js +0 -83
@@ -1 +1 @@
1
- {"version":3,"file":"date-input.js","sourceRoot":"","sources":["../../src/components/date-input.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Send } from '@llui/dom'\nimport { useContext, tagSend } from '@llui/dom'\nimport { LocaleContext } from '../locale.js'\nimport type { Locale } from '../locale.js'\n\n/**\n * Date input — keyboard-only date field with masked parsing. Unlike\n * date-picker, this is a plain <input> that parses ISO-ish date strings\n * as the user types. Separate from date-picker to keep each focused.\n *\n * The machine holds the raw input string + the parsed Date (null until\n * a complete/valid value is entered). Min/max bounds are validated on\n * every change, populating `error` when out of range.\n */\n\nexport type DateError = 'invalid' | 'before-min' | 'after-max' | null\n\nexport interface DateInputState {\n /** Raw string as typed by the user. */\n input: string\n /** Parsed date, or null if the input is empty/invalid/out-of-range. */\n value: Date | null\n /** Optional lower bound (inclusive). */\n min: Date | null\n /** Optional upper bound (inclusive). */\n max: Date | null\n error: DateError\n disabled: boolean\n readOnly: boolean\n required: boolean\n}\n\nexport type DateInputMsg =\n /** @intent(\"Update the raw text the user has typed (re-parses to a Date)\") */\n | { type: 'setInput'; value: string }\n /**\n * @intent(\"Set the parsed date directly (also updates the displayed text)\")\n * @codec(\"iso-date\")\n */\n | { type: 'setValue'; value: Date | null }\n /** @intent(\"Clear the input and the parsed date\") */\n | { type: 'clear' }\n /** @humanOnly */\n | { type: 'setMin'; min: Date | null }\n /** @humanOnly */\n | { type: 'setMax'; max: Date | null }\n /** @humanOnly */\n | { type: 'setDisabled'; disabled: boolean }\n\nexport interface DateInputInit {\n input?: string\n value?: Date | null\n min?: Date | null\n max?: Date | null\n disabled?: boolean\n readOnly?: boolean\n required?: boolean\n}\n\n/**\n * Parse an ISO-ish date string. Accepts:\n * - YYYY-MM-DD\n * - YYYY/MM/DD\n * - MM/DD/YYYY (US)\n * - DD/MM/YYYY (EU)\n * Returns null for anything else.\n */\nexport function parseDate(input: string, format: 'iso' | 'us' | 'eu' = 'iso'): Date | null {\n const trimmed = input.trim()\n if (!trimmed) return null\n const parts = trimmed.split(/[-/]/).map((p) => p.trim())\n if (parts.length !== 3) return null\n const nums = parts.map((p) => parseInt(p, 10))\n if (nums.some((n) => isNaN(n))) return null\n let year: number, month: number, day: number\n if (format === 'iso' || parts[0]!.length === 4) {\n ;[year, month, day] = nums as [number, number, number]\n } else if (format === 'us') {\n ;[month, day, year] = nums as [number, number, number]\n } else {\n ;[day, month, year] = nums as [number, number, number]\n }\n if (month < 1 || month > 12 || day < 1 || day > 31 || year < 1) return null\n const d = new Date(year, month - 1, day)\n // JS Date normalizes: new Date(2024, 1, 30) → March 1. Reject that.\n if (d.getFullYear() !== year || d.getMonth() !== month - 1 || d.getDate() !== day) {\n return null\n }\n return d\n}\n\n/** Format a Date as 'YYYY-MM-DD'. */\nexport function formatDate(d: Date): string {\n const y = d.getFullYear().toString().padStart(4, '0')\n const m = (d.getMonth() + 1).toString().padStart(2, '0')\n const day = d.getDate().toString().padStart(2, '0')\n return `${y}-${m}-${day}`\n}\n\nfunction validate(value: Date | null, min: Date | null, max: Date | null): DateError {\n if (value === null) return null\n if (min !== null && value < min) return 'before-min'\n if (max !== null && value > max) return 'after-max'\n return null\n}\n\nexport function init(opts: DateInputInit = {}): DateInputState {\n const value = opts.value ?? null\n const input = opts.input ?? (value ? formatDate(value) : '')\n const min = opts.min ?? null\n const max = opts.max ?? null\n return {\n input,\n value,\n min,\n max,\n error: validate(value, min, max),\n disabled: opts.disabled ?? false,\n readOnly: opts.readOnly ?? false,\n required: opts.required ?? false,\n }\n}\n\nexport function update(\n state: DateInputState,\n msg: DateInputMsg,\n format: 'iso' | 'us' | 'eu' = 'iso',\n): [DateInputState, never[]] {\n if ((state.disabled || state.readOnly) && msg.type === 'setInput') return [state, []]\n switch (msg.type) {\n case 'setInput': {\n const parsed = parseDate(msg.value, format)\n const error: DateError = msg.value.trim()\n ? parsed === null\n ? 'invalid'\n : validate(parsed, state.min, state.max)\n : null\n return [{ ...state, input: msg.value, value: parsed, error }, []]\n }\n case 'setValue': {\n const input = msg.value ? formatDate(msg.value) : ''\n return [\n { ...state, input, value: msg.value, error: validate(msg.value, state.min, state.max) },\n [],\n ]\n }\n case 'clear':\n return [{ ...state, input: '', value: null, error: null }, []]\n case 'setMin':\n return [{ ...state, min: msg.min, error: validate(state.value, msg.min, state.max) }, []]\n case 'setMax':\n return [{ ...state, max: msg.max, error: validate(state.value, state.min, msg.max) }, []]\n case 'setDisabled':\n return [{ ...state, disabled: msg.disabled }, []]\n }\n}\n\nexport interface DateInputParts<S> {\n root: {\n 'data-scope': 'date-input'\n 'data-part': 'root'\n 'data-disabled': (s: S) => '' | undefined\n 'data-invalid': (s: S) => '' | undefined\n }\n input: {\n type: 'text'\n inputMode: 'numeric'\n autoComplete: 'off'\n spellCheck: false\n value: (s: S) => string\n disabled: (s: S) => boolean\n readOnly: (s: S) => boolean\n required: (s: S) => boolean\n 'aria-invalid': (s: S) => 'true' | undefined\n placeholder?: string\n 'data-scope': 'date-input'\n 'data-part': 'input'\n onInput: (e: Event) => void\n onBlur: (e: FocusEvent) => void\n }\n clearTrigger: {\n type: 'button'\n 'aria-label': string | ((s: S) => string)\n disabled: (s: S) => boolean\n 'data-scope': 'date-input'\n 'data-part': 'clear-trigger'\n onClick: (e: MouseEvent) => void\n }\n errorText: {\n role: 'alert'\n 'aria-live': 'polite'\n 'data-scope': 'date-input'\n 'data-part': 'error-text'\n hidden: (s: S) => boolean\n }\n}\n\nexport interface ConnectOptions {\n placeholder?: string\n clearLabel?: string\n}\n\nexport function connect<S>(\n get: (s: S) => DateInputState,\n send: Send<DateInputMsg>,\n opts: ConnectOptions = {},\n): DateInputParts<S> {\n const locale = useContext<S, Locale>(LocaleContext)\n return {\n root: {\n 'data-scope': 'date-input',\n 'data-part': 'root',\n 'data-disabled': (s) => (get(s).disabled ? '' : undefined),\n 'data-invalid': (s) => (get(s).error ? '' : undefined),\n },\n input: {\n type: 'text',\n inputMode: 'numeric',\n autoComplete: 'off',\n spellCheck: false,\n value: (s) => get(s).input,\n disabled: (s) => get(s).disabled,\n readOnly: (s) => get(s).readOnly,\n required: (s) => get(s).required,\n 'aria-invalid': (s) => (get(s).error ? 'true' : undefined),\n ...(opts.placeholder !== undefined ? { placeholder: opts.placeholder } : {}),\n 'data-scope': 'date-input',\n 'data-part': 'input',\n onInput: tagSend(send, ['setInput'], (e) => {\n const el = e.target as HTMLInputElement\n send({ type: 'setInput', value: el.value })\n }),\n onBlur: () => {\n /* consumers can add their own blur handling */\n },\n },\n clearTrigger: {\n type: 'button',\n 'aria-label': opts.clearLabel ?? ((s: S) => locale(s).dateInput.clear),\n disabled: (s) => get(s).input === '',\n 'data-scope': 'date-input',\n 'data-part': 'clear-trigger',\n onClick: tagSend(send, ['clear'], () => send({ type: 'clear' })),\n },\n errorText: {\n role: 'alert',\n 'aria-live': 'polite',\n 'data-scope': 'date-input',\n 'data-part': 'error-text',\n hidden: (s) => get(s).error === null,\n },\n }\n}\n\nexport const dateInput = { init, update, connect, parseDate, formatDate }\n"]}
1
+ {"version":3,"file":"date-input.js","sourceRoot":"","sources":["../../src/components/date-input.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Send, Signal } from '@llui/dom'\nimport { useContext, tagSend } from '@llui/dom'\nimport { LocaleContext } from '../locale.js'\n\n/**\n * Date input — keyboard-only date field with masked parsing. Unlike\n * date-picker, this is a plain <input> that parses ISO-ish date strings\n * as the user types. Separate from date-picker to keep each focused.\n *\n * The machine holds the raw input string + the parsed Date (null until\n * a complete/valid value is entered). Min/max bounds are validated on\n * every change, populating `error` when out of range.\n */\n\nexport type DateError = 'invalid' | 'before-min' | 'after-max' | null\n\nexport interface DateInputState {\n /** Raw string as typed by the user. */\n input: string\n /** Parsed date, or null if the input is empty/invalid/out-of-range. */\n value: Date | null\n /** Optional lower bound (inclusive). */\n min: Date | null\n /** Optional upper bound (inclusive). */\n max: Date | null\n error: DateError\n disabled: boolean\n readOnly: boolean\n required: boolean\n}\n\nexport type DateInputMsg =\n /** @intent(\"Update the raw text the user has typed (re-parses to a Date)\") */\n | { type: 'setInput'; value: string }\n /**\n * @intent(\"Set the parsed date directly (also updates the displayed text)\")\n * @codec(\"iso-date\")\n */\n | { type: 'setValue'; value: Date | null }\n /** @intent(\"Clear the input and the parsed date\") */\n | { type: 'clear' }\n /** @humanOnly */\n | { type: 'setMin'; min: Date | null }\n /** @humanOnly */\n | { type: 'setMax'; max: Date | null }\n /** @humanOnly */\n | { type: 'setDisabled'; disabled: boolean }\n\nexport interface DateInputInit {\n input?: string\n value?: Date | null\n min?: Date | null\n max?: Date | null\n disabled?: boolean\n readOnly?: boolean\n required?: boolean\n}\n\n/**\n * Parse an ISO-ish date string. Accepts:\n * - YYYY-MM-DD\n * - YYYY/MM/DD\n * - MM/DD/YYYY (US)\n * - DD/MM/YYYY (EU)\n * Returns null for anything else.\n */\nexport function parseDate(input: string, format: 'iso' | 'us' | 'eu' = 'iso'): Date | null {\n const trimmed = input.trim()\n if (!trimmed) return null\n const parts = trimmed.split(/[-/]/).map((p) => p.trim())\n if (parts.length !== 3) return null\n const nums = parts.map((p) => parseInt(p, 10))\n if (nums.some((n) => isNaN(n))) return null\n let year: number, month: number, day: number\n if (format === 'iso' || parts[0]!.length === 4) {\n ;[year, month, day] = nums as [number, number, number]\n } else if (format === 'us') {\n ;[month, day, year] = nums as [number, number, number]\n } else {\n ;[day, month, year] = nums as [number, number, number]\n }\n if (month < 1 || month > 12 || day < 1 || day > 31 || year < 1) return null\n const d = new Date(year, month - 1, day)\n // JS Date normalizes: new Date(2024, 1, 30) → March 1. Reject that.\n if (d.getFullYear() !== year || d.getMonth() !== month - 1 || d.getDate() !== day) {\n return null\n }\n return d\n}\n\n/** Format a Date as 'YYYY-MM-DD'. */\nexport function formatDate(d: Date): string {\n const y = d.getFullYear().toString().padStart(4, '0')\n const m = (d.getMonth() + 1).toString().padStart(2, '0')\n const day = d.getDate().toString().padStart(2, '0')\n return `${y}-${m}-${day}`\n}\n\nfunction validate(value: Date | null, min: Date | null, max: Date | null): DateError {\n if (value === null) return null\n if (min !== null && value < min) return 'before-min'\n if (max !== null && value > max) return 'after-max'\n return null\n}\n\nexport function init(opts: DateInputInit = {}): DateInputState {\n const value = opts.value ?? null\n const input = opts.input ?? (value ? formatDate(value) : '')\n const min = opts.min ?? null\n const max = opts.max ?? null\n return {\n input,\n value,\n min,\n max,\n error: validate(value, min, max),\n disabled: opts.disabled ?? false,\n readOnly: opts.readOnly ?? false,\n required: opts.required ?? false,\n }\n}\n\nexport function update(\n state: DateInputState,\n msg: DateInputMsg,\n format: 'iso' | 'us' | 'eu' = 'iso',\n): [DateInputState, never[]] {\n if ((state.disabled || state.readOnly) && msg.type === 'setInput') return [state, []]\n switch (msg.type) {\n case 'setInput': {\n const parsed = parseDate(msg.value, format)\n const error: DateError = msg.value.trim()\n ? parsed === null\n ? 'invalid'\n : validate(parsed, state.min, state.max)\n : null\n return [{ ...state, input: msg.value, value: parsed, error }, []]\n }\n case 'setValue': {\n const input = msg.value ? formatDate(msg.value) : ''\n return [\n { ...state, input, value: msg.value, error: validate(msg.value, state.min, state.max) },\n [],\n ]\n }\n case 'clear':\n return [{ ...state, input: '', value: null, error: null }, []]\n case 'setMin':\n return [{ ...state, min: msg.min, error: validate(state.value, msg.min, state.max) }, []]\n case 'setMax':\n return [{ ...state, max: msg.max, error: validate(state.value, state.min, msg.max) }, []]\n case 'setDisabled':\n return [{ ...state, disabled: msg.disabled }, []]\n }\n}\n\nexport interface DateInputParts {\n root: {\n 'data-scope': 'date-input'\n 'data-part': 'root'\n 'data-disabled': Signal<'' | undefined>\n 'data-invalid': Signal<'' | undefined>\n }\n input: {\n type: 'text'\n inputMode: 'numeric'\n autoComplete: 'off'\n spellCheck: false\n value: Signal<string>\n disabled: Signal<boolean>\n readOnly: Signal<boolean>\n required: Signal<boolean>\n 'aria-invalid': Signal<'true' | undefined>\n placeholder?: string\n 'data-scope': 'date-input'\n 'data-part': 'input'\n onInput: (e: Event) => void\n onBlur: (e: FocusEvent) => void\n }\n clearTrigger: {\n type: 'button'\n 'aria-label': string\n disabled: Signal<boolean>\n 'data-scope': 'date-input'\n 'data-part': 'clear-trigger'\n onClick: (e: MouseEvent) => void\n }\n errorText: {\n role: 'alert'\n 'aria-live': 'polite'\n 'data-scope': 'date-input'\n 'data-part': 'error-text'\n hidden: Signal<boolean>\n }\n}\n\nexport interface ConnectOptions {\n placeholder?: string\n clearLabel?: string\n}\n\nexport function connect(\n state: Signal<DateInputState>,\n send: Send<DateInputMsg>,\n opts: ConnectOptions = {},\n): DateInputParts {\n const locale = useContext(LocaleContext)\n return {\n root: {\n 'data-scope': 'date-input',\n 'data-part': 'root',\n 'data-disabled': state.map((s) => (s.disabled ? '' : undefined)),\n 'data-invalid': state.map((s) => (s.error ? '' : undefined)),\n },\n input: {\n type: 'text',\n inputMode: 'numeric',\n autoComplete: 'off',\n spellCheck: false,\n value: state.map((s) => s.input),\n disabled: state.map((s) => s.disabled),\n readOnly: state.map((s) => s.readOnly),\n required: state.map((s) => s.required),\n 'aria-invalid': state.map((s) => (s.error ? 'true' : undefined)),\n ...(opts.placeholder !== undefined ? { placeholder: opts.placeholder } : {}),\n 'data-scope': 'date-input',\n 'data-part': 'input',\n onInput: tagSend(send, ['setInput'], (e) => {\n const el = e.target as HTMLInputElement\n send({ type: 'setInput', value: el.value })\n }),\n onBlur: () => {\n /* consumers can add their own blur handling */\n },\n },\n clearTrigger: {\n type: 'button',\n 'aria-label': opts.clearLabel ?? locale.dateInput.clear,\n disabled: state.map((s) => s.input === ''),\n 'data-scope': 'date-input',\n 'data-part': 'clear-trigger',\n onClick: tagSend(send, ['clear'], () => send({ type: 'clear' })),\n },\n errorText: {\n role: 'alert',\n 'aria-live': 'polite',\n 'data-scope': 'date-input',\n 'data-part': 'error-text',\n hidden: state.map((s) => s.error === null),\n },\n }\n}\n\nexport const dateInput = { init, update, connect, parseDate, formatDate }\n"]}
@@ -1,4 +1,4 @@
1
- import type { Send } from '@llui/dom';
1
+ import type { Send, Signal } from '@llui/dom';
2
2
  /**
3
3
  * Date picker — calendar with month navigation and date selection. Works
4
4
  * with plain Date objects internally but exposes ISO strings (YYYY-MM-DD)
@@ -108,7 +108,7 @@ export declare function monthGrid(state: DatePickerState): DayCell[];
108
108
  * required by the WAI-ARIA grid pattern.
109
109
  */
110
110
  export declare function weekRows(cells: DayCell[]): DayCell[][];
111
- export interface DayCellParts<_S> {
111
+ export interface DayCellParts {
112
112
  cell: {
113
113
  role: 'gridcell';
114
114
  'aria-selected': boolean;
@@ -127,15 +127,15 @@ export interface DayCellParts<_S> {
127
127
  onFocus: (e: FocusEvent) => void;
128
128
  };
129
129
  }
130
- export interface DatePickerParts<S> {
130
+ export interface DatePickerParts {
131
131
  root: {
132
132
  'data-scope': 'date-picker';
133
133
  'data-part': 'root';
134
- 'data-disabled': (s: S) => '' | undefined;
134
+ 'data-disabled': Signal<'' | undefined>;
135
135
  };
136
136
  grid: {
137
137
  role: 'grid';
138
- 'aria-label': (s: S) => string;
138
+ 'aria-label': Signal<string>;
139
139
  'data-scope': 'date-picker';
140
140
  'data-part': 'grid';
141
141
  };
@@ -146,28 +146,28 @@ export interface DatePickerParts<S> {
146
146
  };
147
147
  prevMonthTrigger: {
148
148
  type: 'button';
149
- 'aria-label': string | ((s: S) => string);
150
- disabled: (s: S) => boolean;
149
+ 'aria-label': string;
150
+ disabled: Signal<boolean>;
151
151
  'data-scope': 'date-picker';
152
152
  'data-part': 'prev-month-trigger';
153
153
  onClick: (e: MouseEvent) => void;
154
154
  };
155
155
  nextMonthTrigger: {
156
156
  type: 'button';
157
- 'aria-label': string | ((s: S) => string);
158
- disabled: (s: S) => boolean;
157
+ 'aria-label': string;
158
+ disabled: Signal<boolean>;
159
159
  'data-scope': 'date-picker';
160
160
  'data-part': 'next-month-trigger';
161
161
  onClick: (e: MouseEvent) => void;
162
162
  };
163
- dayCell: (cell: DayCell) => DayCellParts<S>;
163
+ dayCell: (cell: DayCell) => DayCellParts;
164
164
  }
165
165
  export interface ConnectOptions {
166
166
  prevLabel?: string;
167
167
  nextLabel?: string;
168
168
  gridLabel?: (year: number, month: number) => string;
169
169
  }
170
- export declare function connect<S>(get: (s: S) => DatePickerState, send: Send<DatePickerMsg>, opts?: ConnectOptions): DatePickerParts<S>;
170
+ export declare function connect(state: Signal<DatePickerState>, send: Send<DatePickerMsg>, opts?: ConnectOptions): DatePickerParts;
171
171
  export declare const datePicker: {
172
172
  init: typeof init;
173
173
  update: typeof update;
@@ -1 +1 @@
1
- {"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../src/components/date-picker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../src/components/date-picker.ts"],"names":[],"mappings":"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"}
@@ -194,20 +194,20 @@ export function weekRows(cells) {
194
194
  }
195
195
  return rows;
196
196
  }
197
- export function connect(get, send, opts = {}) {
197
+ export function connect(state, send, opts = {}) {
198
198
  const locale = useContext(LocaleContext);
199
- const prevLabel = opts.prevLabel ?? ((s) => locale(s).datePicker.prev);
200
- const nextLabel = opts.nextLabel ?? ((s) => locale(s).datePicker.next);
199
+ const prevLabel = opts.prevLabel ?? locale.datePicker.prev;
200
+ const nextLabel = opts.nextLabel ?? locale.datePicker.next;
201
201
  const gridLabel = opts.gridLabel ?? en.datePicker.grid;
202
202
  return {
203
203
  root: {
204
204
  'data-scope': 'date-picker',
205
205
  'data-part': 'root',
206
- 'data-disabled': (s) => (get(s).disabled ? '' : undefined),
206
+ 'data-disabled': state.map((s) => (s.disabled ? '' : undefined)),
207
207
  },
208
208
  grid: {
209
209
  role: 'grid',
210
- 'aria-label': (s) => gridLabel(get(s).visibleYear, get(s).visibleMonth),
210
+ 'aria-label': state.map((s) => gridLabel(s.visibleYear, s.visibleMonth)),
211
211
  'data-scope': 'date-picker',
212
212
  'data-part': 'grid',
213
213
  },
@@ -219,7 +219,7 @@ export function connect(get, send, opts = {}) {
219
219
  prevMonthTrigger: {
220
220
  type: 'button',
221
221
  'aria-label': prevLabel,
222
- disabled: (s) => get(s).disabled,
222
+ disabled: state.map((s) => s.disabled),
223
223
  'data-scope': 'date-picker',
224
224
  'data-part': 'prev-month-trigger',
225
225
  onClick: tagSend(send, ['prevMonth'], () => send({ type: 'prevMonth' })),
@@ -227,7 +227,7 @@ export function connect(get, send, opts = {}) {
227
227
  nextMonthTrigger: {
228
228
  type: 'button',
229
229
  'aria-label': nextLabel,
230
- disabled: (s) => get(s).disabled,
230
+ disabled: state.map((s) => s.disabled),
231
231
  'data-scope': 'date-picker',
232
232
  'data-part': 'next-month-trigger',
233
233
  onClick: tagSend(send, ['nextMonth'], () => send({ type: 'nextMonth' })),
@@ -1 +1 @@
1
- {"version":3,"file":"date-picker.js","sourceRoot":"","sources":["../../src/components/date-picker.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Send } from '@llui/dom'\nimport { useContext, tagSend } from '@llui/dom'\nimport { flipArrow } from '../utils/direction.js'\nimport { LocaleContext, en } from '../locale.js'\nimport type { Locale } from '../locale.js'\n\n/**\n * Date picker — calendar with month navigation and date selection. Works\n * with plain Date objects internally but exposes ISO strings (YYYY-MM-DD)\n * for serialization-friendly state.\n *\n * Keyboard navigation: arrow keys move by day, PageUp/Down by month,\n * Home/End to start/end of week, Enter to select.\n */\n\nexport interface DatePickerState {\n /** Selected date as YYYY-MM-DD, or null. */\n value: string | null\n /** The month currently visible (1-indexed, 1-12). */\n visibleMonth: number\n /** The year currently visible. */\n visibleYear: number\n /** The date currently focused by the keyboard (YYYY-MM-DD). */\n focused: string\n /** Minimum selectable date, inclusive. */\n min: string | null\n /** Maximum selectable date, inclusive. */\n max: string | null\n /** 0=Sunday, 1=Monday. */\n weekStartsOn: 0 | 1\n disabled: boolean\n}\n\nexport type DatePickerMsg =\n /** @intent(\"Set the selected date (YYYY-MM-DD), or null to clear\") */\n | { type: 'setValue'; value: string | null }\n /** @humanOnly */\n | { type: 'setFocused'; date: string }\n /** @intent(\"Show the previous month in the calendar\") */\n | { type: 'prevMonth' }\n /** @intent(\"Show the next month in the calendar\") */\n | { type: 'nextMonth' }\n /** @intent(\"Show the previous year (same month)\") */\n | { type: 'prevYear' }\n /** @intent(\"Show the next year (same month)\") */\n | { type: 'nextYear' }\n /** @intent(\"Select the currently-focused date\") */\n | { type: 'selectFocused' }\n /** @humanOnly */\n | { type: 'moveFocus'; days: number }\n /** @humanOnly */\n | { type: 'focusStartOfWeek' }\n /** @humanOnly */\n | { type: 'focusEndOfWeek' }\n /** @humanOnly */\n | { type: 'focusToday' }\n /** @intent(\"Clear the selected date\") */\n | { type: 'clear' }\n\nexport interface DatePickerInit {\n value?: string | null\n visibleMonth?: number\n visibleYear?: number\n min?: string | null\n max?: string | null\n weekStartsOn?: 0 | 1\n disabled?: boolean\n}\n\nfunction pad(n: number): string {\n return n.toString().padStart(2, '0')\n}\n\nfunction parseIso(iso: string): { y: number; m: number; d: number } | null {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(iso)\n if (!match) return null\n return { y: Number(match[1]), m: Number(match[2]), d: Number(match[3]) }\n}\n\nfunction toIso(y: number, m: number, d: number): string {\n return `${y}-${pad(m)}-${pad(d)}`\n}\n\nfunction daysInMonth(year: number, month: number): number {\n return new Date(year, month, 0).getDate()\n}\n\nfunction todayIso(): string {\n const now = new Date()\n return toIso(now.getFullYear(), now.getMonth() + 1, now.getDate())\n}\n\nfunction addDays(iso: string, days: number): string {\n const p = parseIso(iso)\n if (!p) return iso\n const d = new Date(p.y, p.m - 1, p.d)\n d.setDate(d.getDate() + days)\n return toIso(d.getFullYear(), d.getMonth() + 1, d.getDate())\n}\n\nfunction isInRange(iso: string, min: string | null, max: string | null): boolean {\n if (min && iso < min) return false\n if (max && iso > max) return false\n return true\n}\n\nexport function init(opts: DatePickerInit = {}): DatePickerState {\n const today = todayIso()\n const parsed = opts.value ? parseIso(opts.value) : null\n const visibleMonth = opts.visibleMonth ?? parsed?.m ?? new Date().getMonth() + 1\n const visibleYear = opts.visibleYear ?? parsed?.y ?? new Date().getFullYear()\n return {\n value: opts.value ?? null,\n visibleMonth,\n visibleYear,\n focused: opts.value ?? today,\n min: opts.min ?? null,\n max: opts.max ?? null,\n weekStartsOn: opts.weekStartsOn ?? 0,\n disabled: opts.disabled ?? false,\n }\n}\n\nfunction normalizeMonth(year: number, month: number): { year: number; month: number } {\n let y = year\n let m = month\n while (m > 12) {\n m -= 12\n y += 1\n }\n while (m < 1) {\n m += 12\n y -= 1\n }\n return { year: y, month: m }\n}\n\nfunction syncVisibleMonth(state: DatePickerState, date: string): DatePickerState {\n const p = parseIso(date)\n if (!p) return state\n if (p.y === state.visibleYear && p.m === state.visibleMonth) return state\n return { ...state, visibleYear: p.y, visibleMonth: p.m }\n}\n\nexport function update(state: DatePickerState, msg: DatePickerMsg): [DatePickerState, never[]] {\n if (state.disabled) return [state, []]\n switch (msg.type) {\n case 'setValue':\n return [{ ...state, value: msg.value, focused: msg.value ?? state.focused }, []]\n case 'setFocused':\n return [syncVisibleMonth({ ...state, focused: msg.date }, msg.date), []]\n case 'prevMonth': {\n const n = normalizeMonth(state.visibleYear, state.visibleMonth - 1)\n return [{ ...state, visibleYear: n.year, visibleMonth: n.month }, []]\n }\n case 'nextMonth': {\n const n = normalizeMonth(state.visibleYear, state.visibleMonth + 1)\n return [{ ...state, visibleYear: n.year, visibleMonth: n.month }, []]\n }\n case 'prevYear':\n return [{ ...state, visibleYear: state.visibleYear - 1 }, []]\n case 'nextYear':\n return [{ ...state, visibleYear: state.visibleYear + 1 }, []]\n case 'selectFocused':\n if (!isInRange(state.focused, state.min, state.max)) return [state, []]\n return [{ ...state, value: state.focused }, []]\n case 'moveFocus': {\n const next = addDays(state.focused, msg.days)\n return [syncVisibleMonth({ ...state, focused: next }, next), []]\n }\n case 'focusStartOfWeek': {\n const p = parseIso(state.focused)\n if (!p) return [state, []]\n const d = new Date(p.y, p.m - 1, p.d)\n const delta = (d.getDay() - state.weekStartsOn + 7) % 7\n return [update(state, { type: 'moveFocus', days: -delta })[0], []]\n }\n case 'focusEndOfWeek': {\n const p = parseIso(state.focused)\n if (!p) return [state, []]\n const d = new Date(p.y, p.m - 1, p.d)\n const delta = 6 - ((d.getDay() - state.weekStartsOn + 7) % 7)\n return [update(state, { type: 'moveFocus', days: delta })[0], []]\n }\n case 'focusToday': {\n const today = todayIso()\n return [syncVisibleMonth({ ...state, focused: today }, today), []]\n }\n case 'clear':\n return [{ ...state, value: null }, []]\n }\n}\n\nexport interface DayCell {\n iso: string\n day: number\n inMonth: boolean\n isToday: boolean\n isSelected: boolean\n isFocused: boolean\n isDisabled: boolean\n}\n\n/**\n * Compute the grid of days visible in the current month view. Always returns\n * full weeks: leading days from previous month and trailing from next month\n * to fill the grid.\n */\nexport function monthGrid(state: DatePickerState): DayCell[] {\n const y = state.visibleYear\n const m = state.visibleMonth\n const first = new Date(y, m - 1, 1)\n const firstDay = first.getDay()\n const leadDays = (firstDay - state.weekStartsOn + 7) % 7\n const totalDays = daysInMonth(y, m)\n const today = todayIso()\n\n const cells: DayCell[] = []\n // Leading: previous month's trailing days\n for (let i = leadDays; i > 0; i--) {\n const d = new Date(y, m - 1, 1 - i)\n const iso = toIso(d.getFullYear(), d.getMonth() + 1, d.getDate())\n cells.push({\n iso,\n day: d.getDate(),\n inMonth: false,\n isToday: iso === today,\n isSelected: iso === state.value,\n isFocused: iso === state.focused,\n isDisabled: !isInRange(iso, state.min, state.max),\n })\n }\n // Current month\n for (let d = 1; d <= totalDays; d++) {\n const iso = toIso(y, m, d)\n cells.push({\n iso,\n day: d,\n inMonth: true,\n isToday: iso === today,\n isSelected: iso === state.value,\n isFocused: iso === state.focused,\n isDisabled: !isInRange(iso, state.min, state.max),\n })\n }\n // Trailing: next month's leading days to fill to multiple of 7\n const remaining = (7 - (cells.length % 7)) % 7\n for (let d = 1; d <= remaining; d++) {\n const next = new Date(y, m, d)\n const iso = toIso(next.getFullYear(), next.getMonth() + 1, next.getDate())\n cells.push({\n iso,\n day: d,\n inMonth: false,\n isToday: iso === today,\n isSelected: iso === state.value,\n isFocused: iso === state.focused,\n isDisabled: !isInRange(iso, state.min, state.max),\n })\n }\n return cells\n}\n\n/**\n * Group a flat `DayCell[]` (from `monthGrid`) into rows of 7 — one row\n * per week — so the view can wrap each in a `role=\"row\"` element as\n * required by the WAI-ARIA grid pattern.\n */\nexport function weekRows(cells: DayCell[]): DayCell[][] {\n const rows: DayCell[][] = []\n for (let i = 0; i < cells.length; i += 7) {\n rows.push(cells.slice(i, i + 7))\n }\n return rows\n}\n\nexport interface DayCellParts<_S> {\n cell: {\n role: 'gridcell'\n 'aria-selected': boolean\n 'aria-disabled': 'true' | undefined\n tabIndex: number\n 'data-scope': 'date-picker'\n 'data-part': 'day-cell'\n 'data-date': string\n 'data-in-month': '' | undefined\n 'data-today': '' | undefined\n 'data-selected': '' | undefined\n 'data-focused': '' | undefined\n 'data-disabled': '' | undefined\n onClick: (e: MouseEvent) => void\n onKeyDown: (e: KeyboardEvent) => void\n onFocus: (e: FocusEvent) => void\n }\n}\n\nexport interface DatePickerParts<S> {\n root: {\n 'data-scope': 'date-picker'\n 'data-part': 'root'\n 'data-disabled': (s: S) => '' | undefined\n }\n grid: {\n role: 'grid'\n 'aria-label': (s: S) => string\n 'data-scope': 'date-picker'\n 'data-part': 'grid'\n }\n row: {\n role: 'row'\n 'data-scope': 'date-picker'\n 'data-part': 'row'\n }\n prevMonthTrigger: {\n type: 'button'\n 'aria-label': string | ((s: S) => string)\n disabled: (s: S) => boolean\n 'data-scope': 'date-picker'\n 'data-part': 'prev-month-trigger'\n onClick: (e: MouseEvent) => void\n }\n nextMonthTrigger: {\n type: 'button'\n 'aria-label': string | ((s: S) => string)\n disabled: (s: S) => boolean\n 'data-scope': 'date-picker'\n 'data-part': 'next-month-trigger'\n onClick: (e: MouseEvent) => void\n }\n dayCell: (cell: DayCell) => DayCellParts<S>\n}\n\nexport interface ConnectOptions {\n prevLabel?: string\n nextLabel?: string\n gridLabel?: (year: number, month: number) => string\n}\n\nexport function connect<S>(\n get: (s: S) => DatePickerState,\n send: Send<DatePickerMsg>,\n opts: ConnectOptions = {},\n): DatePickerParts<S> {\n const locale = useContext<S, Locale>(LocaleContext)\n const prevLabel: string | ((s: S) => string) =\n opts.prevLabel ?? ((s: S) => locale(s).datePicker.prev)\n const nextLabel: string | ((s: S) => string) =\n opts.nextLabel ?? ((s: S) => locale(s).datePicker.next)\n const gridLabel = opts.gridLabel ?? en.datePicker.grid\n\n return {\n root: {\n 'data-scope': 'date-picker',\n 'data-part': 'root',\n 'data-disabled': (s) => (get(s).disabled ? '' : undefined),\n },\n grid: {\n role: 'grid',\n 'aria-label': (s) => gridLabel(get(s).visibleYear, get(s).visibleMonth),\n 'data-scope': 'date-picker',\n 'data-part': 'grid',\n },\n row: {\n role: 'row',\n 'data-scope': 'date-picker',\n 'data-part': 'row',\n },\n prevMonthTrigger: {\n type: 'button',\n 'aria-label': prevLabel,\n disabled: (s) => get(s).disabled,\n 'data-scope': 'date-picker',\n 'data-part': 'prev-month-trigger',\n onClick: tagSend(send, ['prevMonth'], () => send({ type: 'prevMonth' })),\n },\n nextMonthTrigger: {\n type: 'button',\n 'aria-label': nextLabel,\n disabled: (s) => get(s).disabled,\n 'data-scope': 'date-picker',\n 'data-part': 'next-month-trigger',\n onClick: tagSend(send, ['nextMonth'], () => send({ type: 'nextMonth' })),\n },\n dayCell: (cell: DayCell): DayCellParts<S> => ({\n cell: {\n role: 'gridcell',\n 'aria-selected': cell.isSelected,\n 'aria-disabled': cell.isDisabled ? 'true' : undefined,\n tabIndex: cell.isFocused ? 0 : -1,\n 'data-scope': 'date-picker',\n 'data-part': 'day-cell',\n 'data-date': cell.iso,\n 'data-in-month': cell.inMonth ? '' : undefined,\n 'data-today': cell.isToday ? '' : undefined,\n 'data-selected': cell.isSelected ? '' : undefined,\n 'data-focused': cell.isFocused ? '' : undefined,\n 'data-disabled': cell.isDisabled ? '' : undefined,\n onClick: tagSend(send, ['setFocused', 'selectFocused'], () => {\n if (cell.isDisabled) return\n send({ type: 'setFocused', date: cell.iso })\n send({ type: 'selectFocused' })\n }),\n onFocus: tagSend(send, ['setFocused'], () => send({ type: 'setFocused', date: cell.iso })),\n onKeyDown: tagSend(\n send,\n [\n 'moveFocus',\n 'prevMonth',\n 'nextMonth',\n 'focusStartOfWeek',\n 'focusEndOfWeek',\n 'selectFocused',\n ],\n (e) => {\n const key = flipArrow(e.key, e.currentTarget as Element)\n switch (key) {\n case 'ArrowLeft':\n e.preventDefault()\n send({ type: 'moveFocus', days: -1 })\n return\n case 'ArrowRight':\n e.preventDefault()\n send({ type: 'moveFocus', days: 1 })\n return\n case 'ArrowUp':\n e.preventDefault()\n send({ type: 'moveFocus', days: -7 })\n return\n case 'ArrowDown':\n e.preventDefault()\n send({ type: 'moveFocus', days: 7 })\n return\n case 'PageUp':\n e.preventDefault()\n send({ type: 'prevMonth' })\n return\n case 'PageDown':\n e.preventDefault()\n send({ type: 'nextMonth' })\n return\n case 'Home':\n e.preventDefault()\n send({ type: 'focusStartOfWeek' })\n return\n case 'End':\n e.preventDefault()\n send({ type: 'focusEndOfWeek' })\n return\n case 'Enter':\n case ' ':\n e.preventDefault()\n send({ type: 'selectFocused' })\n return\n }\n },\n ),\n },\n }),\n }\n}\n\nexport const datePicker = { init, update, connect, monthGrid, weekRows }\n"]}
1
+ {"version":3,"file":"date-picker.js","sourceRoot":"","sources":["../../src/components/date-picker.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Send, Signal } from '@llui/dom'\nimport { useContext, tagSend } from '@llui/dom'\nimport { flipArrow } from '../utils/direction.js'\nimport { LocaleContext, en } from '../locale.js'\n\n/**\n * Date picker — calendar with month navigation and date selection. Works\n * with plain Date objects internally but exposes ISO strings (YYYY-MM-DD)\n * for serialization-friendly state.\n *\n * Keyboard navigation: arrow keys move by day, PageUp/Down by month,\n * Home/End to start/end of week, Enter to select.\n */\n\nexport interface DatePickerState {\n /** Selected date as YYYY-MM-DD, or null. */\n value: string | null\n /** The month currently visible (1-indexed, 1-12). */\n visibleMonth: number\n /** The year currently visible. */\n visibleYear: number\n /** The date currently focused by the keyboard (YYYY-MM-DD). */\n focused: string\n /** Minimum selectable date, inclusive. */\n min: string | null\n /** Maximum selectable date, inclusive. */\n max: string | null\n /** 0=Sunday, 1=Monday. */\n weekStartsOn: 0 | 1\n disabled: boolean\n}\n\nexport type DatePickerMsg =\n /** @intent(\"Set the selected date (YYYY-MM-DD), or null to clear\") */\n | { type: 'setValue'; value: string | null }\n /** @humanOnly */\n | { type: 'setFocused'; date: string }\n /** @intent(\"Show the previous month in the calendar\") */\n | { type: 'prevMonth' }\n /** @intent(\"Show the next month in the calendar\") */\n | { type: 'nextMonth' }\n /** @intent(\"Show the previous year (same month)\") */\n | { type: 'prevYear' }\n /** @intent(\"Show the next year (same month)\") */\n | { type: 'nextYear' }\n /** @intent(\"Select the currently-focused date\") */\n | { type: 'selectFocused' }\n /** @humanOnly */\n | { type: 'moveFocus'; days: number }\n /** @humanOnly */\n | { type: 'focusStartOfWeek' }\n /** @humanOnly */\n | { type: 'focusEndOfWeek' }\n /** @humanOnly */\n | { type: 'focusToday' }\n /** @intent(\"Clear the selected date\") */\n | { type: 'clear' }\n\nexport interface DatePickerInit {\n value?: string | null\n visibleMonth?: number\n visibleYear?: number\n min?: string | null\n max?: string | null\n weekStartsOn?: 0 | 1\n disabled?: boolean\n}\n\nfunction pad(n: number): string {\n return n.toString().padStart(2, '0')\n}\n\nfunction parseIso(iso: string): { y: number; m: number; d: number } | null {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(iso)\n if (!match) return null\n return { y: Number(match[1]), m: Number(match[2]), d: Number(match[3]) }\n}\n\nfunction toIso(y: number, m: number, d: number): string {\n return `${y}-${pad(m)}-${pad(d)}`\n}\n\nfunction daysInMonth(year: number, month: number): number {\n return new Date(year, month, 0).getDate()\n}\n\nfunction todayIso(): string {\n const now = new Date()\n return toIso(now.getFullYear(), now.getMonth() + 1, now.getDate())\n}\n\nfunction addDays(iso: string, days: number): string {\n const p = parseIso(iso)\n if (!p) return iso\n const d = new Date(p.y, p.m - 1, p.d)\n d.setDate(d.getDate() + days)\n return toIso(d.getFullYear(), d.getMonth() + 1, d.getDate())\n}\n\nfunction isInRange(iso: string, min: string | null, max: string | null): boolean {\n if (min && iso < min) return false\n if (max && iso > max) return false\n return true\n}\n\nexport function init(opts: DatePickerInit = {}): DatePickerState {\n const today = todayIso()\n const parsed = opts.value ? parseIso(opts.value) : null\n const visibleMonth = opts.visibleMonth ?? parsed?.m ?? new Date().getMonth() + 1\n const visibleYear = opts.visibleYear ?? parsed?.y ?? new Date().getFullYear()\n return {\n value: opts.value ?? null,\n visibleMonth,\n visibleYear,\n focused: opts.value ?? today,\n min: opts.min ?? null,\n max: opts.max ?? null,\n weekStartsOn: opts.weekStartsOn ?? 0,\n disabled: opts.disabled ?? false,\n }\n}\n\nfunction normalizeMonth(year: number, month: number): { year: number; month: number } {\n let y = year\n let m = month\n while (m > 12) {\n m -= 12\n y += 1\n }\n while (m < 1) {\n m += 12\n y -= 1\n }\n return { year: y, month: m }\n}\n\nfunction syncVisibleMonth(state: DatePickerState, date: string): DatePickerState {\n const p = parseIso(date)\n if (!p) return state\n if (p.y === state.visibleYear && p.m === state.visibleMonth) return state\n return { ...state, visibleYear: p.y, visibleMonth: p.m }\n}\n\nexport function update(state: DatePickerState, msg: DatePickerMsg): [DatePickerState, never[]] {\n if (state.disabled) return [state, []]\n switch (msg.type) {\n case 'setValue':\n return [{ ...state, value: msg.value, focused: msg.value ?? state.focused }, []]\n case 'setFocused':\n return [syncVisibleMonth({ ...state, focused: msg.date }, msg.date), []]\n case 'prevMonth': {\n const n = normalizeMonth(state.visibleYear, state.visibleMonth - 1)\n return [{ ...state, visibleYear: n.year, visibleMonth: n.month }, []]\n }\n case 'nextMonth': {\n const n = normalizeMonth(state.visibleYear, state.visibleMonth + 1)\n return [{ ...state, visibleYear: n.year, visibleMonth: n.month }, []]\n }\n case 'prevYear':\n return [{ ...state, visibleYear: state.visibleYear - 1 }, []]\n case 'nextYear':\n return [{ ...state, visibleYear: state.visibleYear + 1 }, []]\n case 'selectFocused':\n if (!isInRange(state.focused, state.min, state.max)) return [state, []]\n return [{ ...state, value: state.focused }, []]\n case 'moveFocus': {\n const next = addDays(state.focused, msg.days)\n return [syncVisibleMonth({ ...state, focused: next }, next), []]\n }\n case 'focusStartOfWeek': {\n const p = parseIso(state.focused)\n if (!p) return [state, []]\n const d = new Date(p.y, p.m - 1, p.d)\n const delta = (d.getDay() - state.weekStartsOn + 7) % 7\n return [update(state, { type: 'moveFocus', days: -delta })[0], []]\n }\n case 'focusEndOfWeek': {\n const p = parseIso(state.focused)\n if (!p) return [state, []]\n const d = new Date(p.y, p.m - 1, p.d)\n const delta = 6 - ((d.getDay() - state.weekStartsOn + 7) % 7)\n return [update(state, { type: 'moveFocus', days: delta })[0], []]\n }\n case 'focusToday': {\n const today = todayIso()\n return [syncVisibleMonth({ ...state, focused: today }, today), []]\n }\n case 'clear':\n return [{ ...state, value: null }, []]\n }\n}\n\nexport interface DayCell {\n iso: string\n day: number\n inMonth: boolean\n isToday: boolean\n isSelected: boolean\n isFocused: boolean\n isDisabled: boolean\n}\n\n/**\n * Compute the grid of days visible in the current month view. Always returns\n * full weeks: leading days from previous month and trailing from next month\n * to fill the grid.\n */\nexport function monthGrid(state: DatePickerState): DayCell[] {\n const y = state.visibleYear\n const m = state.visibleMonth\n const first = new Date(y, m - 1, 1)\n const firstDay = first.getDay()\n const leadDays = (firstDay - state.weekStartsOn + 7) % 7\n const totalDays = daysInMonth(y, m)\n const today = todayIso()\n\n const cells: DayCell[] = []\n // Leading: previous month's trailing days\n for (let i = leadDays; i > 0; i--) {\n const d = new Date(y, m - 1, 1 - i)\n const iso = toIso(d.getFullYear(), d.getMonth() + 1, d.getDate())\n cells.push({\n iso,\n day: d.getDate(),\n inMonth: false,\n isToday: iso === today,\n isSelected: iso === state.value,\n isFocused: iso === state.focused,\n isDisabled: !isInRange(iso, state.min, state.max),\n })\n }\n // Current month\n for (let d = 1; d <= totalDays; d++) {\n const iso = toIso(y, m, d)\n cells.push({\n iso,\n day: d,\n inMonth: true,\n isToday: iso === today,\n isSelected: iso === state.value,\n isFocused: iso === state.focused,\n isDisabled: !isInRange(iso, state.min, state.max),\n })\n }\n // Trailing: next month's leading days to fill to multiple of 7\n const remaining = (7 - (cells.length % 7)) % 7\n for (let d = 1; d <= remaining; d++) {\n const next = new Date(y, m, d)\n const iso = toIso(next.getFullYear(), next.getMonth() + 1, next.getDate())\n cells.push({\n iso,\n day: d,\n inMonth: false,\n isToday: iso === today,\n isSelected: iso === state.value,\n isFocused: iso === state.focused,\n isDisabled: !isInRange(iso, state.min, state.max),\n })\n }\n return cells\n}\n\n/**\n * Group a flat `DayCell[]` (from `monthGrid`) into rows of 7 — one row\n * per week — so the view can wrap each in a `role=\"row\"` element as\n * required by the WAI-ARIA grid pattern.\n */\nexport function weekRows(cells: DayCell[]): DayCell[][] {\n const rows: DayCell[][] = []\n for (let i = 0; i < cells.length; i += 7) {\n rows.push(cells.slice(i, i + 7))\n }\n return rows\n}\n\nexport interface DayCellParts {\n cell: {\n role: 'gridcell'\n 'aria-selected': boolean\n 'aria-disabled': 'true' | undefined\n tabIndex: number\n 'data-scope': 'date-picker'\n 'data-part': 'day-cell'\n 'data-date': string\n 'data-in-month': '' | undefined\n 'data-today': '' | undefined\n 'data-selected': '' | undefined\n 'data-focused': '' | undefined\n 'data-disabled': '' | undefined\n onClick: (e: MouseEvent) => void\n onKeyDown: (e: KeyboardEvent) => void\n onFocus: (e: FocusEvent) => void\n }\n}\n\nexport interface DatePickerParts {\n root: {\n 'data-scope': 'date-picker'\n 'data-part': 'root'\n 'data-disabled': Signal<'' | undefined>\n }\n grid: {\n role: 'grid'\n 'aria-label': Signal<string>\n 'data-scope': 'date-picker'\n 'data-part': 'grid'\n }\n row: {\n role: 'row'\n 'data-scope': 'date-picker'\n 'data-part': 'row'\n }\n prevMonthTrigger: {\n type: 'button'\n 'aria-label': string\n disabled: Signal<boolean>\n 'data-scope': 'date-picker'\n 'data-part': 'prev-month-trigger'\n onClick: (e: MouseEvent) => void\n }\n nextMonthTrigger: {\n type: 'button'\n 'aria-label': string\n disabled: Signal<boolean>\n 'data-scope': 'date-picker'\n 'data-part': 'next-month-trigger'\n onClick: (e: MouseEvent) => void\n }\n dayCell: (cell: DayCell) => DayCellParts\n}\n\nexport interface ConnectOptions {\n prevLabel?: string\n nextLabel?: string\n gridLabel?: (year: number, month: number) => string\n}\n\nexport function connect(\n state: Signal<DatePickerState>,\n send: Send<DatePickerMsg>,\n opts: ConnectOptions = {},\n): DatePickerParts {\n const locale = useContext(LocaleContext)\n const prevLabel = opts.prevLabel ?? locale.datePicker.prev\n const nextLabel = opts.nextLabel ?? locale.datePicker.next\n const gridLabel = opts.gridLabel ?? en.datePicker.grid\n\n return {\n root: {\n 'data-scope': 'date-picker',\n 'data-part': 'root',\n 'data-disabled': state.map((s) => (s.disabled ? '' : undefined)),\n },\n grid: {\n role: 'grid',\n 'aria-label': state.map((s) => gridLabel(s.visibleYear, s.visibleMonth)),\n 'data-scope': 'date-picker',\n 'data-part': 'grid',\n },\n row: {\n role: 'row',\n 'data-scope': 'date-picker',\n 'data-part': 'row',\n },\n prevMonthTrigger: {\n type: 'button',\n 'aria-label': prevLabel,\n disabled: state.map((s) => s.disabled),\n 'data-scope': 'date-picker',\n 'data-part': 'prev-month-trigger',\n onClick: tagSend(send, ['prevMonth'], () => send({ type: 'prevMonth' })),\n },\n nextMonthTrigger: {\n type: 'button',\n 'aria-label': nextLabel,\n disabled: state.map((s) => s.disabled),\n 'data-scope': 'date-picker',\n 'data-part': 'next-month-trigger',\n onClick: tagSend(send, ['nextMonth'], () => send({ type: 'nextMonth' })),\n },\n dayCell: (cell: DayCell): DayCellParts => ({\n cell: {\n role: 'gridcell',\n 'aria-selected': cell.isSelected,\n 'aria-disabled': cell.isDisabled ? 'true' : undefined,\n tabIndex: cell.isFocused ? 0 : -1,\n 'data-scope': 'date-picker',\n 'data-part': 'day-cell',\n 'data-date': cell.iso,\n 'data-in-month': cell.inMonth ? '' : undefined,\n 'data-today': cell.isToday ? '' : undefined,\n 'data-selected': cell.isSelected ? '' : undefined,\n 'data-focused': cell.isFocused ? '' : undefined,\n 'data-disabled': cell.isDisabled ? '' : undefined,\n onClick: tagSend(send, ['setFocused', 'selectFocused'], () => {\n if (cell.isDisabled) return\n send({ type: 'setFocused', date: cell.iso })\n send({ type: 'selectFocused' })\n }),\n onFocus: tagSend(send, ['setFocused'], () => send({ type: 'setFocused', date: cell.iso })),\n onKeyDown: tagSend(\n send,\n [\n 'moveFocus',\n 'prevMonth',\n 'nextMonth',\n 'focusStartOfWeek',\n 'focusEndOfWeek',\n 'selectFocused',\n ],\n (e) => {\n const key = flipArrow(e.key, e.currentTarget as Element)\n switch (key) {\n case 'ArrowLeft':\n e.preventDefault()\n send({ type: 'moveFocus', days: -1 })\n return\n case 'ArrowRight':\n e.preventDefault()\n send({ type: 'moveFocus', days: 1 })\n return\n case 'ArrowUp':\n e.preventDefault()\n send({ type: 'moveFocus', days: -7 })\n return\n case 'ArrowDown':\n e.preventDefault()\n send({ type: 'moveFocus', days: 7 })\n return\n case 'PageUp':\n e.preventDefault()\n send({ type: 'prevMonth' })\n return\n case 'PageDown':\n e.preventDefault()\n send({ type: 'nextMonth' })\n return\n case 'Home':\n e.preventDefault()\n send({ type: 'focusStartOfWeek' })\n return\n case 'End':\n e.preventDefault()\n send({ type: 'focusEndOfWeek' })\n return\n case 'Enter':\n case ' ':\n e.preventDefault()\n send({ type: 'selectFocused' })\n return\n }\n },\n ),\n },\n }),\n }\n}\n\nexport const datePicker = { init, update, connect, monthGrid, weekRows }\n"]}
@@ -1,4 +1,4 @@
1
- import type { Send, TransitionOptions } from '@llui/dom';
1
+ import type { Send, Signal, TransitionOptions } from '@llui/dom';
2
2
  /**
3
3
  * Dialog — modal / non-modal overlay. Ties together focus-trap, dismissable,
4
4
  * body scroll lock, sibling aria-hidden, and portal-to-body rendering into
@@ -56,20 +56,20 @@ export interface DialogInit {
56
56
  }
57
57
  export declare function init(opts?: DialogInit): DialogState;
58
58
  export declare function update(state: DialogState, msg: DialogMsg): [DialogState, never[]];
59
- export interface DialogParts<S> {
59
+ export interface DialogParts {
60
60
  trigger: {
61
61
  type: 'button';
62
62
  'aria-haspopup': 'dialog';
63
- 'aria-expanded': (s: S) => boolean;
63
+ 'aria-expanded': Signal<boolean>;
64
64
  'aria-controls': string;
65
65
  id: string;
66
- 'data-state': (s: S) => 'open' | 'closed';
66
+ 'data-state': Signal<'open' | 'closed'>;
67
67
  'data-scope': 'dialog';
68
68
  'data-part': 'trigger';
69
69
  onClick: (e: MouseEvent) => void;
70
70
  };
71
71
  backdrop: {
72
- 'data-state': (s: S) => 'open' | 'closed';
72
+ 'data-state': Signal<'open' | 'closed'>;
73
73
  'data-scope': 'dialog';
74
74
  'data-part': 'backdrop';
75
75
  'aria-hidden': 'true';
@@ -85,7 +85,7 @@ export interface DialogParts<S> {
85
85
  'aria-labelledby': string;
86
86
  'aria-describedby': string;
87
87
  tabIndex: -1;
88
- 'data-state': (s: S) => 'open' | 'closed';
88
+ 'data-state': Signal<'open' | 'closed'>;
89
89
  'data-scope': 'dialog';
90
90
  'data-part': 'content';
91
91
  };
@@ -101,7 +101,7 @@ export interface DialogParts<S> {
101
101
  };
102
102
  closeTrigger: {
103
103
  type: 'button';
104
- 'aria-label': string | ((s: S) => string);
104
+ 'aria-label': string;
105
105
  'data-scope': 'dialog';
106
106
  'data-part': 'close-trigger';
107
107
  onClick: (e: MouseEvent) => void;
@@ -117,16 +117,16 @@ export interface ConnectOptions {
117
117
  /** Accessible label for the close button (default: 'Close'). */
118
118
  closeLabel?: string;
119
119
  }
120
- export declare function connect<S>(get: (s: S) => DialogState, send: Send<DialogMsg>, opts: ConnectOptions): DialogParts<S>;
121
- export interface OverlayOptions<S> {
122
- /** State accessor. */
123
- get: (s: S) => DialogState;
120
+ export declare function connect(state: Signal<DialogState>, send: Send<DialogMsg>, opts: ConnectOptions): DialogParts;
121
+ export interface OverlayOptions {
122
+ /** Dialog state slice as a Signal. */
123
+ state: Signal<DialogState>;
124
124
  /** Send dispatcher for dialog messages. */
125
125
  send: Send<DialogMsg>;
126
126
  /** Parts from `connect()` — used to locate the content element by id. */
127
- parts: DialogParts<S>;
127
+ parts: DialogParts;
128
128
  /** Content rendering. */
129
- content: () => Node[];
129
+ content: () => readonly Node[];
130
130
  /** Optional transition to apply on open/close (from `@llui/transitions`). */
131
131
  transition?: TransitionOptions;
132
132
  /** Close on Escape key (default: true). */
@@ -148,9 +148,9 @@ export interface OverlayOptions<S> {
148
148
  }
149
149
  /**
150
150
  * Build the dialog's DOM tree and wire up all accessibility utilities.
151
- * Returns a `show()` structural block that tracks `get(state).open`.
151
+ * Returns a `show()` structural block that tracks `state.open`.
152
152
  */
153
- export declare function overlay<S>(opts: OverlayOptions<S>): Node[];
153
+ export declare function overlay(opts: OverlayOptions): Node;
154
154
  export declare const dialog: {
155
155
  init: typeof init;
156
156
  update: typeof update;
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/components/dialog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/components/dialog.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@ export function update(state, msg) {
19
19
  return [{ ...state, open: msg.open }, []];
20
20
  }
21
21
  }
22
- export function connect(get, send, opts) {
22
+ export function connect(state, send, opts) {
23
23
  const base = opts.id;
24
24
  const contentId = `${base}:content`;
25
25
  const titleId = `${base}:title`;
@@ -28,21 +28,21 @@ export function connect(get, send, opts) {
28
28
  const role = opts.role ?? 'dialog';
29
29
  const modal = opts.modal !== false;
30
30
  const locale = useContext(LocaleContext);
31
- const closeLabel = opts.closeLabel ?? ((s) => locale(s).dialog.close);
31
+ const closeLabel = opts.closeLabel ?? locale.dialog.close;
32
32
  return {
33
33
  trigger: {
34
34
  type: 'button',
35
35
  'aria-haspopup': 'dialog',
36
- 'aria-expanded': (s) => get(s).open,
36
+ 'aria-expanded': state.map((s) => s.open),
37
37
  'aria-controls': contentId,
38
38
  id: triggerId,
39
- 'data-state': (s) => (get(s).open ? 'open' : 'closed'),
39
+ 'data-state': state.map((s) => (s.open ? 'open' : 'closed')),
40
40
  'data-scope': 'dialog',
41
41
  'data-part': 'trigger',
42
42
  onClick: tagSend(send, ['open'], () => send({ type: 'open' })),
43
43
  },
44
44
  backdrop: {
45
- 'data-state': (s) => (get(s).open ? 'open' : 'closed'),
45
+ 'data-state': state.map((s) => (s.open ? 'open' : 'closed')),
46
46
  'data-scope': 'dialog',
47
47
  'data-part': 'backdrop',
48
48
  'aria-hidden': 'true',
@@ -58,7 +58,7 @@ export function connect(get, send, opts) {
58
58
  'aria-labelledby': titleId,
59
59
  'aria-describedby': descId,
60
60
  tabIndex: -1,
61
- 'data-state': (s) => (get(s).open ? 'open' : 'closed'),
61
+ 'data-state': state.map((s) => (s.open ? 'open' : 'closed')),
62
62
  'data-scope': 'dialog',
63
63
  'data-part': 'content',
64
64
  },
@@ -83,10 +83,10 @@ export function connect(get, send, opts) {
83
83
  }
84
84
  /**
85
85
  * Build the dialog's DOM tree and wire up all accessibility utilities.
86
- * Returns a `show()` structural block that tracks `get(state).open`.
86
+ * Returns a `show()` structural block that tracks `state.open`.
87
87
  */
88
88
  export function overlay(opts) {
89
- const target = opts.target ?? 'body';
89
+ const targetOpt = opts.target ?? 'body';
90
90
  const closeOnEscape = opts.closeOnEscape !== false;
91
91
  const closeOnOutsideClick = opts.closeOnOutsideClick !== false;
92
92
  const trapFocus = opts.trapFocus !== false;
@@ -96,48 +96,43 @@ export function overlay(opts) {
96
96
  const parts = opts.parts;
97
97
  const contentId = parts.content.id;
98
98
  const triggerId = parts.trigger.id;
99
- return show({
100
- when: (s) => opts.get(s).open,
101
- render: () => portal({
102
- target,
103
- render: () => {
104
- onMount(() => {
105
- const contentEl = document.getElementById(contentId);
106
- if (!contentEl)
107
- return;
108
- const triggerEl = document.getElementById(triggerId);
109
- const cleanups = [];
110
- if (lockScroll)
111
- cleanups.push(lockBodyScroll());
112
- if (hideSiblings)
113
- cleanups.push(setAriaHiddenOutside(contentEl));
114
- if (trapFocus) {
115
- cleanups.push(pushFocusTrap({
116
- container: contentEl,
117
- initialFocus: opts.initialFocus,
118
- restoreFocus,
119
- }));
120
- }
121
- if (closeOnEscape || closeOnOutsideClick) {
122
- cleanups.push(pushDismissable({
123
- element: contentEl,
124
- ignore: () => (triggerEl ? [triggerEl] : []),
125
- disableEscape: !closeOnEscape,
126
- disableOutside: !closeOnOutsideClick,
127
- onDismiss: () => opts.send({ type: 'close' }),
128
- }));
129
- }
130
- return () => {
131
- for (let i = cleanups.length - 1; i >= 0; i--)
132
- cleanups[i]();
133
- };
134
- });
135
- return [div(parts.positioner, opts.content())];
136
- },
137
- }),
138
- enter: opts.transition?.enter,
139
- leave: opts.transition?.leave,
140
- });
99
+ const host = typeof targetOpt === 'string' ? (document.querySelector(targetOpt) ?? document.body) : targetOpt;
100
+ return show(opts.state.map((s) => s.open), () => [
101
+ portal(() => {
102
+ onMount(() => {
103
+ const contentEl = document.getElementById(contentId);
104
+ if (!contentEl)
105
+ return;
106
+ const triggerEl = document.getElementById(triggerId);
107
+ const cleanups = [];
108
+ if (lockScroll)
109
+ cleanups.push(lockBodyScroll());
110
+ if (hideSiblings)
111
+ cleanups.push(setAriaHiddenOutside(contentEl));
112
+ if (trapFocus) {
113
+ cleanups.push(pushFocusTrap({
114
+ container: contentEl,
115
+ initialFocus: opts.initialFocus,
116
+ restoreFocus,
117
+ }));
118
+ }
119
+ if (closeOnEscape || closeOnOutsideClick) {
120
+ cleanups.push(pushDismissable({
121
+ element: contentEl,
122
+ ignore: () => (triggerEl ? [triggerEl] : []),
123
+ disableEscape: !closeOnEscape,
124
+ disableOutside: !closeOnOutsideClick,
125
+ onDismiss: () => opts.send({ type: 'close' }),
126
+ }));
127
+ }
128
+ return () => {
129
+ for (let i = cleanups.length - 1; i >= 0; i--)
130
+ cleanups[i]();
131
+ };
132
+ });
133
+ return [div(parts.positioner, opts.content())];
134
+ }, host),
135
+ ]);
141
136
  }
142
137
  export const dialog = { init, update, connect, overlay };
143
138
  //# sourceMappingURL=dialog.js.map