@human-kit/svelte-components 1.0.0-alpha.1 → 1.0.0-alpha.11

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 (427) hide show
  1. package/dist/FOCUS_STATE_CONTRACT.md +63 -0
  2. package/dist/FOCUS_STATE_REVIEW_TEMPLATE.md +70 -0
  3. package/dist/button/README.md +48 -0
  4. package/dist/button/TODO.md +13 -0
  5. package/dist/button/index.d.ts +5 -0
  6. package/dist/button/index.js +4 -0
  7. package/dist/button/index.parts.d.ts +1 -0
  8. package/dist/button/index.parts.js +1 -0
  9. package/dist/button/root/README.md +43 -0
  10. package/dist/button/root/button-root.svelte +362 -0
  11. package/dist/button/root/button-root.svelte.d.ts +21 -0
  12. package/dist/button/root/button-test.svelte +76 -0
  13. package/dist/button/root/button-test.svelte.d.ts +11 -0
  14. package/dist/calendar/README.md +66 -0
  15. package/dist/calendar/TODO.md +23 -0
  16. package/dist/calendar/body-cell/README.md +15 -0
  17. package/dist/calendar/body-cell/calendar-body-cell.svelte +230 -0
  18. package/dist/calendar/body-cell/calendar-body-cell.svelte.d.ts +9 -0
  19. package/dist/calendar/grid/README.md +13 -0
  20. package/dist/calendar/grid/calendar-grid-month-scope.svelte +16 -0
  21. package/dist/calendar/grid/calendar-grid-month-scope.svelte.d.ts +8 -0
  22. package/dist/calendar/grid/calendar-grid.svelte +45 -0
  23. package/dist/calendar/grid/calendar-grid.svelte.d.ts +8 -0
  24. package/dist/calendar/grid/month-scope.d.ts +2 -0
  25. package/dist/calendar/grid/month-scope.js +8 -0
  26. package/dist/calendar/grid-body/README.md +13 -0
  27. package/dist/calendar/grid-body/calendar-grid-body-custom-test.svelte +13 -0
  28. package/dist/calendar/grid-body/calendar-grid-body-custom-test.svelte.d.ts +18 -0
  29. package/dist/calendar/grid-body/calendar-grid-body.svelte +36 -0
  30. package/dist/calendar/grid-body/calendar-grid-body.svelte.d.ts +8 -0
  31. package/dist/calendar/grid-header/README.md +13 -0
  32. package/dist/calendar/grid-header/calendar-grid-header-custom-test.svelte +13 -0
  33. package/dist/calendar/grid-header/calendar-grid-header-custom-test.svelte.d.ts +18 -0
  34. package/dist/calendar/grid-header/calendar-grid-header.svelte +31 -0
  35. package/dist/calendar/grid-header/calendar-grid-header.svelte.d.ts +8 -0
  36. package/dist/calendar/header-cell/README.md +14 -0
  37. package/dist/calendar/header-cell/calendar-header-cell-test.svelte +11 -0
  38. package/dist/calendar/header-cell/calendar-header-cell-test.svelte.d.ts +18 -0
  39. package/dist/calendar/header-cell/calendar-header-cell.svelte +16 -0
  40. package/dist/calendar/header-cell/calendar-header-cell.svelte.d.ts +8 -0
  41. package/dist/calendar/heading/README.md +13 -0
  42. package/dist/calendar/heading/calendar-heading.svelte +17 -0
  43. package/dist/calendar/heading/calendar-heading.svelte.d.ts +5 -0
  44. package/dist/calendar/index.d.ts +13 -0
  45. package/dist/calendar/index.js +13 -0
  46. package/dist/calendar/index.parts.d.ts +9 -0
  47. package/dist/calendar/index.parts.js +9 -0
  48. package/dist/calendar/root/README.md +24 -0
  49. package/dist/calendar/root/calendar-root-bind-value-test.svelte +14 -0
  50. package/dist/calendar/root/calendar-root-bind-value-test.svelte.d.ts +3 -0
  51. package/dist/calendar/root/calendar-root-controlled-clear-test.svelte +20 -0
  52. package/dist/calendar/root/calendar-root-controlled-clear-test.svelte.d.ts +3 -0
  53. package/dist/calendar/root/calendar-root-test.svelte +71 -0
  54. package/dist/calendar/root/calendar-root-test.svelte.d.ts +13 -0
  55. package/dist/calendar/root/calendar-root.svelte +143 -0
  56. package/dist/calendar/root/calendar-root.svelte.d.ts +31 -0
  57. package/dist/calendar/root/context.d.ts +66 -0
  58. package/dist/calendar/root/context.js +727 -0
  59. package/dist/calendar/root/date-utils.d.ts +17 -0
  60. package/dist/calendar/root/date-utils.js +94 -0
  61. package/dist/calendar/trigger-next/README.md +14 -0
  62. package/dist/calendar/trigger-next/calendar-trigger-next.svelte +43 -0
  63. package/dist/calendar/trigger-next/calendar-trigger-next.svelte.d.ts +9 -0
  64. package/dist/calendar/trigger-previous/README.md +14 -0
  65. package/dist/calendar/trigger-previous/calendar-trigger-previous.svelte +43 -0
  66. package/dist/calendar/trigger-previous/calendar-trigger-previous.svelte.d.ts +9 -0
  67. package/dist/checkbox/README.md +53 -0
  68. package/dist/checkbox/TODO.md +16 -0
  69. package/dist/checkbox/index.d.ts +6 -0
  70. package/dist/checkbox/index.js +6 -0
  71. package/dist/checkbox/index.parts.d.ts +2 -0
  72. package/dist/checkbox/index.parts.js +2 -0
  73. package/dist/checkbox/indicator/README.md +23 -0
  74. package/dist/checkbox/indicator/checkbox-indicator.svelte +43 -0
  75. package/dist/checkbox/indicator/checkbox-indicator.svelte.d.ts +10 -0
  76. package/dist/checkbox/root/README.md +47 -0
  77. package/dist/checkbox/root/checkbox-label-test.svelte +10 -0
  78. package/dist/checkbox/root/checkbox-label-test.svelte.d.ts +18 -0
  79. package/dist/checkbox/root/checkbox-root.svelte +361 -0
  80. package/dist/checkbox/root/checkbox-root.svelte.d.ts +23 -0
  81. package/dist/checkbox/root/checkbox-test.svelte +59 -0
  82. package/dist/checkbox/root/checkbox-test.svelte.d.ts +18 -0
  83. package/dist/checkbox/root/context.d.ts +21 -0
  84. package/dist/checkbox/root/context.js +15 -0
  85. package/dist/clock/README.md +75 -0
  86. package/dist/clock/axis/README.md +24 -0
  87. package/dist/clock/axis/clock-axis.svelte +37 -0
  88. package/dist/clock/axis/clock-axis.svelte.d.ts +8 -0
  89. package/dist/clock/hooks/use-wheel-scroll.svelte.d.ts +16 -0
  90. package/dist/clock/hooks/use-wheel-scroll.svelte.js +336 -0
  91. package/dist/clock/index.d.ts +10 -0
  92. package/dist/clock/index.js +10 -0
  93. package/dist/clock/index.parts.d.ts +4 -0
  94. package/dist/clock/index.parts.js +4 -0
  95. package/dist/clock/root/README.md +38 -0
  96. package/dist/clock/root/clock-root-test.svelte +62 -0
  97. package/dist/clock/root/clock-root-test.svelte.d.ts +14 -0
  98. package/dist/clock/root/clock-root.svelte +329 -0
  99. package/dist/clock/root/clock-root.svelte.d.ts +25 -0
  100. package/dist/clock/root/context.d.ts +22 -0
  101. package/dist/clock/root/context.js +15 -0
  102. package/dist/clock/root/resolve-visible-columns.d.ts +7 -0
  103. package/dist/clock/root/resolve-visible-columns.js +16 -0
  104. package/dist/clock/root/time-utils.d.ts +48 -0
  105. package/dist/clock/root/time-utils.js +314 -0
  106. package/dist/clock/root/wheel-options.d.ts +17 -0
  107. package/dist/clock/root/wheel-options.js +63 -0
  108. package/dist/clock/wheel-column/README.md +25 -0
  109. package/dist/clock/wheel-column/clock-wheel-column-bindable-test.svelte +16 -0
  110. package/dist/clock/wheel-column/clock-wheel-column-bindable-test.svelte.d.ts +3 -0
  111. package/dist/clock/wheel-column/clock-wheel-column-custom-snippet-test.svelte +29 -0
  112. package/dist/clock/wheel-column/clock-wheel-column-custom-snippet-test.svelte.d.ts +6 -0
  113. package/dist/clock/wheel-column/clock-wheel-column-default-height-test.svelte +11 -0
  114. package/dist/clock/wheel-column/clock-wheel-column-default-height-test.svelte.d.ts +3 -0
  115. package/dist/clock/wheel-column/clock-wheel-column-test.svelte +38 -0
  116. package/dist/clock/wheel-column/clock-wheel-column-test.svelte.d.ts +12 -0
  117. package/dist/clock/wheel-column/clock-wheel-column-tp-test.svelte +38 -0
  118. package/dist/clock/wheel-column/clock-wheel-column-tp-test.svelte.d.ts +12 -0
  119. package/dist/clock/wheel-column/clock-wheel-column-untagged-snippet-test.svelte +29 -0
  120. package/dist/clock/wheel-column/clock-wheel-column-untagged-snippet-test.svelte.d.ts +6 -0
  121. package/dist/clock/wheel-column/clock-wheel-column.svelte +499 -0
  122. package/dist/clock/wheel-column/clock-wheel-column.svelte.d.ts +17 -0
  123. package/dist/clock/wheel-item/README.md +17 -0
  124. package/dist/clock/wheel-item/clock-wheel-item.svelte +49 -0
  125. package/dist/clock/wheel-item/clock-wheel-item.svelte.d.ts +17 -0
  126. package/dist/combobox/README.md +46 -0
  127. package/dist/combobox/TODO.md +28 -175
  128. package/dist/combobox/button/README.md +20 -0
  129. package/dist/combobox/button/combobox-button-test.svelte +27 -0
  130. package/dist/combobox/button/combobox-button-test.svelte.d.ts +6 -0
  131. package/dist/combobox/button/combobox-button.svelte +10 -11
  132. package/dist/combobox/clear/README.md +21 -0
  133. package/dist/combobox/clear/combobox-clear-test.svelte +34 -0
  134. package/dist/combobox/clear/combobox-clear-test.svelte.d.ts +3 -0
  135. package/dist/combobox/clear/combobox-clear.svelte +61 -0
  136. package/dist/combobox/clear/combobox-clear.svelte.d.ts +9 -0
  137. package/dist/combobox/index.d.ts +5 -3
  138. package/dist/combobox/index.js +5 -3
  139. package/dist/combobox/index.parts.d.ts +2 -0
  140. package/dist/combobox/index.parts.js +2 -0
  141. package/dist/combobox/input/README.md +16 -0
  142. package/dist/combobox/input/combobox-input.svelte +43 -12
  143. package/dist/combobox/item/README.md +27 -0
  144. package/dist/combobox/item/combobox-item-implicit-text-test.svelte +1 -1
  145. package/dist/combobox/item/combobox-listboxitem.svelte +3 -9
  146. package/dist/combobox/item-indicator/README.md +15 -0
  147. package/dist/combobox/item-indicator/combobox-item-indicator.svelte +4 -15
  148. package/dist/combobox/list/README.md +27 -0
  149. package/dist/combobox/list/combobox-listbox.svelte.d.ts +1 -1
  150. package/dist/combobox/popover/README.md +27 -0
  151. package/dist/combobox/popover/combobox-popover-props-test.svelte +38 -0
  152. package/dist/combobox/popover/combobox-popover-props-test.svelte.d.ts +11 -0
  153. package/dist/combobox/popover/combobox-popover.svelte +166 -23
  154. package/dist/combobox/popover/combobox-popover.svelte.d.ts +3 -3
  155. package/dist/combobox/popover/combobox-scrollable-list-test.svelte +23 -0
  156. package/dist/combobox/popover/combobox-scrollable-list-test.svelte.d.ts +18 -0
  157. package/dist/combobox/root/README.md +45 -0
  158. package/dist/combobox/root/combobox-multiselect-test.svelte +1 -1
  159. package/dist/combobox/root/combobox-numeric-string-id-test.svelte +1 -1
  160. package/dist/combobox/root/combobox-test.svelte +16 -3
  161. package/dist/combobox/root/combobox-test.svelte.d.ts +1 -0
  162. package/dist/combobox/root/combobox.svelte +100 -4
  163. package/dist/combobox/root/combobox.svelte.d.ts +1 -0
  164. package/dist/combobox/root/context.d.ts +19 -1
  165. package/dist/combobox/tag/README.md +37 -0
  166. package/dist/combobox/tag-remove/README.md +14 -0
  167. package/dist/combobox/tag-remove/combobox-tag-remove.svelte +3 -2
  168. package/dist/combobox/tags/README.md +23 -0
  169. package/dist/combobox/trigger/README.md +21 -0
  170. package/dist/combobox/trigger/combobox-trigger.svelte +56 -0
  171. package/dist/combobox/trigger/combobox-trigger.svelte.d.ts +9 -0
  172. package/dist/datepicker/README.md +100 -0
  173. package/dist/datepicker/TODO.md +28 -0
  174. package/dist/datepicker/calendar/README.md +19 -0
  175. package/dist/datepicker/calendar/date-picker-calendar-unsafe-props-test.svelte +60 -0
  176. package/dist/datepicker/calendar/date-picker-calendar-unsafe-props-test.svelte.d.ts +3 -0
  177. package/dist/datepicker/calendar/date-picker-calendar.svelte +65 -0
  178. package/dist/datepicker/calendar/date-picker-calendar.svelte.d.ts +10 -0
  179. package/dist/datepicker/index.d.ts +18 -0
  180. package/dist/datepicker/index.js +18 -0
  181. package/dist/datepicker/index.parts.d.ts +14 -0
  182. package/dist/datepicker/index.parts.js +14 -0
  183. package/dist/datepicker/input/README.md +15 -0
  184. package/dist/datepicker/input/date-picker-input.svelte +108 -0
  185. package/dist/datepicker/input/date-picker-input.svelte.d.ts +11 -0
  186. package/dist/datepicker/internal/strict-props.d.ts +2 -0
  187. package/dist/datepicker/internal/strict-props.js +28 -0
  188. package/dist/datepicker/popover/README.md +20 -0
  189. package/dist/datepicker/popover/date-picker-popover-handler-test.svelte +57 -0
  190. package/dist/datepicker/popover/date-picker-popover-handler-test.svelte.d.ts +3 -0
  191. package/dist/datepicker/popover/date-picker-popover-unsafe-props-test.svelte +45 -0
  192. package/dist/datepicker/popover/date-picker-popover-unsafe-props-test.svelte.d.ts +18 -0
  193. package/dist/datepicker/popover/date-picker-popover.svelte +87 -0
  194. package/dist/datepicker/popover/date-picker-popover.svelte.d.ts +7 -0
  195. package/dist/datepicker/root/README.md +38 -0
  196. package/dist/datepicker/root/context.d.ts +43 -0
  197. package/dist/datepicker/root/context.js +15 -0
  198. package/dist/datepicker/root/date-picker-bindable-empty-test.svelte +24 -0
  199. package/dist/datepicker/root/date-picker-bindable-empty-test.svelte.d.ts +3 -0
  200. package/dist/datepicker/root/date-picker-bindable-test.svelte +41 -0
  201. package/dist/datepicker/root/date-picker-bindable-test.svelte.d.ts +3 -0
  202. package/dist/datepicker/root/date-picker-empty-test.svelte +47 -0
  203. package/dist/datepicker/root/date-picker-empty-test.svelte.d.ts +3 -0
  204. package/dist/datepicker/root/date-picker-locale-typing-test.svelte +47 -0
  205. package/dist/datepicker/root/date-picker-locale-typing-test.svelte.d.ts +3 -0
  206. package/dist/datepicker/root/date-picker-open-cancel-test.svelte +54 -0
  207. package/dist/datepicker/root/date-picker-open-cancel-test.svelte.d.ts +8 -0
  208. package/dist/datepicker/root/date-picker-root.svelte +495 -0
  209. package/dist/datepicker/root/date-picker-root.svelte.d.ts +24 -0
  210. package/dist/datepicker/root/date-picker-test.svelte +86 -0
  211. package/dist/datepicker/root/date-picker-test.svelte.d.ts +13 -0
  212. package/dist/datepicker/root/date-utils.d.ts +17 -0
  213. package/dist/datepicker/root/date-utils.js +138 -0
  214. package/dist/datepicker/root/draft-evaluation.d.ts +13 -0
  215. package/dist/datepicker/root/draft-evaluation.js +56 -0
  216. package/dist/datepicker/root/focus-controller.d.ts +3 -0
  217. package/dist/datepicker/root/focus-controller.js +15 -0
  218. package/dist/datepicker/root/open-change.d.ts +5 -0
  219. package/dist/datepicker/root/open-change.js +13 -0
  220. package/dist/datepicker/root/open-controller.d.ts +7 -0
  221. package/dist/datepicker/root/open-controller.js +15 -0
  222. package/dist/datepicker/root/segment-controller.d.ts +8 -0
  223. package/dist/datepicker/root/segment-controller.js +53 -0
  224. package/dist/datepicker/root/segment-state.d.ts +18 -0
  225. package/dist/datepicker/root/segment-state.js +134 -0
  226. package/dist/datepicker/root/value-commit.d.ts +4 -0
  227. package/dist/datepicker/root/value-commit.js +8 -0
  228. package/dist/datepicker/segment/README.md +14 -0
  229. package/dist/datepicker/segment/date-picker-segment.svelte +319 -0
  230. package/dist/datepicker/segment/date-picker-segment.svelte.d.ts +9 -0
  231. package/dist/datepicker/trigger/README.md +14 -0
  232. package/dist/datepicker/trigger/date-picker-trigger.svelte +110 -0
  233. package/dist/datepicker/trigger/date-picker-trigger.svelte.d.ts +9 -0
  234. package/dist/dialog/README.md +35 -0
  235. package/dist/dialog/content/README.md +16 -0
  236. package/dist/dialog/content/dialog-content.svelte +6 -6
  237. package/dist/dialog/index.d.ts +3 -3
  238. package/dist/dialog/index.js +2 -2
  239. package/dist/dialog/overlay/README.md +13 -0
  240. package/dist/dialog/portal/README.md +12 -0
  241. package/dist/dialog/root/README.md +53 -0
  242. package/dist/dialog/root/context.d.ts +2 -1
  243. package/dist/dialog/root/dialog-root.svelte +9 -2
  244. package/dist/dialog/trigger/README.md +12 -0
  245. package/dist/dialog/trigger/dialog-trigger-multi-button-test.svelte +19 -0
  246. package/dist/dialog/trigger/dialog-trigger-multi-button-test.svelte.d.ts +18 -0
  247. package/dist/dialog/trigger/dialog-trigger.svelte +18 -6
  248. package/dist/index.d.ts +31 -13
  249. package/dist/index.js +31 -13
  250. package/dist/input/README.md +38 -0
  251. package/dist/input/TODO.md +12 -0
  252. package/dist/input/input-test.svelte +43 -0
  253. package/dist/input/input-test.svelte.d.ts +12 -0
  254. package/dist/input/input.svelte +151 -7
  255. package/dist/input/input.svelte.d.ts +8 -2
  256. package/dist/listbox/README.md +26 -0
  257. package/dist/listbox/index.d.ts +3 -3
  258. package/dist/listbox/index.js +3 -3
  259. package/dist/listbox/item/README.md +25 -0
  260. package/dist/listbox/item/listbox-item.svelte +158 -2
  261. package/dist/listbox/item/listbox-item.svelte.d.ts +4 -0
  262. package/dist/listbox/root/README.md +40 -0
  263. package/dist/listbox/root/listbox-test.svelte +14 -2
  264. package/dist/listbox/root/listbox-test.svelte.d.ts +1 -0
  265. package/dist/listbox/root/listbox.svelte +44 -0
  266. package/dist/listbox/root/listbox.svelte.d.ts +2 -2
  267. package/dist/locale-provider/context.d.ts +8 -0
  268. package/dist/locale-provider/context.js +18 -0
  269. package/dist/locale-provider/index.d.ts +4 -0
  270. package/dist/locale-provider/index.js +4 -0
  271. package/dist/locale-provider/locale-provider-initial-value-test.svelte +15 -0
  272. package/dist/locale-provider/locale-provider-initial-value-test.svelte.d.ts +7 -0
  273. package/dist/locale-provider/locale-provider-test.svelte +20 -0
  274. package/dist/locale-provider/locale-provider-test.svelte.d.ts +6 -0
  275. package/dist/locale-provider/locale-provider-value-probe.svelte +22 -0
  276. package/dist/locale-provider/locale-provider-value-probe.svelte.d.ts +6 -0
  277. package/dist/locale-provider/locale-provider.svelte +23 -0
  278. package/dist/locale-provider/locale-provider.svelte.d.ts +8 -0
  279. package/dist/popover/README.md +42 -0
  280. package/dist/popover/content/README.md +36 -0
  281. package/dist/popover/content/popover-content-standalone-test.svelte +28 -0
  282. package/dist/popover/content/popover-content-standalone-test.svelte.d.ts +6 -0
  283. package/dist/popover/content/popover-content-test.svelte +32 -2
  284. package/dist/popover/content/popover-content-test.svelte.d.ts +3 -1
  285. package/dist/popover/content/popover-content.svelte +277 -24
  286. package/dist/popover/content/popover-content.svelte.d.ts +5 -1
  287. package/dist/popover/index.d.ts +3 -3
  288. package/dist/popover/index.js +3 -5
  289. package/dist/popover/root/README.md +25 -0
  290. package/dist/popover/root/context.d.ts +16 -7
  291. package/dist/popover/root/context.js +0 -2
  292. package/dist/popover/root/focus-state.d.ts +4 -0
  293. package/dist/popover/root/focus-state.js +33 -0
  294. package/dist/popover/root/popover-root.svelte +90 -17
  295. package/dist/popover/root/popover-root.svelte.d.ts +2 -1
  296. package/dist/popover/root/popover-test.svelte +2 -1
  297. package/dist/popover/root/popover-test.svelte.d.ts +2 -1
  298. package/dist/popover/trigger/README.md +23 -0
  299. package/dist/popover/trigger/popover-trigger-button.svelte +14 -10
  300. package/dist/popover/trigger/popover-trigger-button.svelte.d.ts +2 -3
  301. package/dist/popover/trigger/popover-trigger-multi-button-test.svelte +16 -0
  302. package/dist/popover/trigger/popover-trigger-multi-button-test.svelte.d.ts +18 -0
  303. package/dist/popover/trigger/popover-trigger.svelte +19 -7
  304. package/dist/portal/portal.svelte +3 -1
  305. package/dist/primitives/click-outside.d.ts +1 -1
  306. package/dist/primitives/click-outside.js +1 -1
  307. package/dist/primitives/floating.js +12 -4
  308. package/dist/primitives/focus-trap.d.ts +7 -2
  309. package/dist/primitives/focus-trap.js +50 -17
  310. package/dist/primitives/index.d.ts +1 -0
  311. package/dist/primitives/index.js +1 -0
  312. package/dist/primitives/input-modality.d.ts +7 -0
  313. package/dist/primitives/input-modality.js +125 -0
  314. package/dist/table/IMPLEMENTATION_NOTES.md +8 -0
  315. package/dist/table/PLAN-HIDDEN-COLUMNS.md +152 -0
  316. package/dist/table/PLAN.md +924 -0
  317. package/dist/table/README.md +116 -0
  318. package/dist/table/SELECTION_CHECKBOX_PLAN.md +234 -0
  319. package/dist/table/TODO.md +100 -0
  320. package/dist/table/body/README.md +24 -0
  321. package/dist/table/body/table-body.svelte +25 -0
  322. package/dist/table/body/table-body.svelte.d.ts +9 -0
  323. package/dist/table/cell/README.md +25 -0
  324. package/dist/table/cell/table-cell.svelte +247 -0
  325. package/dist/table/cell/table-cell.svelte.d.ts +9 -0
  326. package/dist/table/checkbox/README.md +38 -0
  327. package/dist/table/checkbox/table-checkbox-test.svelte +121 -0
  328. package/dist/table/checkbox/table-checkbox-test.svelte.d.ts +16 -0
  329. package/dist/table/checkbox/table-checkbox.svelte +274 -0
  330. package/dist/table/checkbox/table-checkbox.svelte.d.ts +13 -0
  331. package/dist/table/checkbox-indicator/README.md +29 -0
  332. package/dist/table/checkbox-indicator/table-checkbox-indicator.svelte +22 -0
  333. package/dist/table/checkbox-indicator/table-checkbox-indicator.svelte.d.ts +10 -0
  334. package/dist/table/column/README.md +32 -0
  335. package/dist/table/column/table-column.svelte +108 -0
  336. package/dist/table/column/table-column.svelte.d.ts +18 -0
  337. package/dist/table/column-header-cell/README.md +28 -0
  338. package/dist/table/column-header-cell/table-column-header-cell.svelte +281 -0
  339. package/dist/table/column-header-cell/table-column-header-cell.svelte.d.ts +9 -0
  340. package/dist/table/column-resizer/README.md +32 -0
  341. package/dist/table/column-resizer/table-column-resizer-freeze-layout-test.svelte +51 -0
  342. package/dist/table/column-resizer/table-column-resizer-freeze-layout-test.svelte.d.ts +3 -0
  343. package/dist/table/column-resizer/table-column-resizer-selection-column-test.svelte +83 -0
  344. package/dist/table/column-resizer/table-column-resizer-selection-column-test.svelte.d.ts +3 -0
  345. package/dist/table/column-resizer/table-column-resizer-test.svelte +75 -0
  346. package/dist/table/column-resizer/table-column-resizer-test.svelte.d.ts +3 -0
  347. package/dist/table/column-resizer/table-column-resizer.svelte +616 -0
  348. package/dist/table/column-resizer/table-column-resizer.svelte.d.ts +11 -0
  349. package/dist/table/empty-state/README.md +25 -0
  350. package/dist/table/empty-state/table-empty-state.svelte +38 -0
  351. package/dist/table/empty-state/table-empty-state.svelte.d.ts +8 -0
  352. package/dist/table/footer/README.md +24 -0
  353. package/dist/table/footer/table-footer.svelte +19 -0
  354. package/dist/table/footer/table-footer.svelte.d.ts +9 -0
  355. package/dist/table/header/README.md +24 -0
  356. package/dist/table/header/table-header.svelte +19 -0
  357. package/dist/table/header/table-header.svelte.d.ts +9 -0
  358. package/dist/table/index.d.ts +16 -0
  359. package/dist/table/index.js +16 -0
  360. package/dist/table/index.parts.d.ts +12 -0
  361. package/dist/table/index.parts.js +12 -0
  362. package/dist/table/root/README.md +56 -0
  363. package/dist/table/root/context.d.ts +198 -0
  364. package/dist/table/root/context.js +1426 -0
  365. package/dist/table/root/table-reorder-test.svelte +64 -0
  366. package/dist/table/root/table-reorder-test.svelte.d.ts +3 -0
  367. package/dist/table/root/table-root.svelte +410 -0
  368. package/dist/table/root/table-root.svelte.d.ts +29 -0
  369. package/dist/table/root/table-test.svelte +165 -0
  370. package/dist/table/root/table-test.svelte.d.ts +25 -0
  371. package/dist/table/row/README.md +27 -0
  372. package/dist/table/row/table-row.svelte +321 -0
  373. package/dist/table/row/table-row.svelte.d.ts +13 -0
  374. package/dist/test-utils/focus-contract.d.ts +3 -0
  375. package/dist/test-utils/focus-contract.js +26 -0
  376. package/dist/timepicker/IMPLEMENTATION_PLAN.md +254 -0
  377. package/dist/timepicker/README.md +97 -0
  378. package/dist/timepicker/TODO.md +86 -0
  379. package/dist/timepicker/clock/README.md +14 -0
  380. package/dist/timepicker/clock/time-picker-clock-test.svelte +45 -0
  381. package/dist/timepicker/clock/time-picker-clock-test.svelte.d.ts +11 -0
  382. package/dist/timepicker/clock/time-picker-clock.svelte +65 -0
  383. package/dist/timepicker/clock/time-picker-clock.svelte.d.ts +10 -0
  384. package/dist/timepicker/index.d.ts +14 -0
  385. package/dist/timepicker/index.js +14 -0
  386. package/dist/timepicker/index.parts.d.ts +8 -0
  387. package/dist/timepicker/index.parts.js +8 -0
  388. package/dist/timepicker/input/README.md +15 -0
  389. package/dist/timepicker/input/time-picker-input-forwarding-test.svelte +40 -0
  390. package/dist/timepicker/input/time-picker-input-forwarding-test.svelte.d.ts +3 -0
  391. package/dist/timepicker/input/time-picker-input.svelte +109 -0
  392. package/dist/timepicker/input/time-picker-input.svelte.d.ts +11 -0
  393. package/dist/timepicker/internal/strict-props.d.ts +4 -0
  394. package/dist/timepicker/internal/strict-props.js +51 -0
  395. package/dist/timepicker/popover/README.md +20 -0
  396. package/dist/timepicker/popover/time-picker-popover-unsafe-props-test.svelte +22 -0
  397. package/dist/timepicker/popover/time-picker-popover-unsafe-props-test.svelte.d.ts +3 -0
  398. package/dist/timepicker/popover/time-picker-popover.svelte +89 -0
  399. package/dist/timepicker/popover/time-picker-popover.svelte.d.ts +7 -0
  400. package/dist/timepicker/root/README.md +42 -0
  401. package/dist/timepicker/root/context.d.ts +51 -0
  402. package/dist/timepicker/root/context.js +15 -0
  403. package/dist/timepicker/root/time-picker-12h-test.svelte +22 -0
  404. package/dist/timepicker/root/time-picker-12h-test.svelte.d.ts +3 -0
  405. package/dist/timepicker/root/time-picker-bindable-test.svelte +25 -0
  406. package/dist/timepicker/root/time-picker-bindable-test.svelte.d.ts +3 -0
  407. package/dist/timepicker/root/time-picker-empty-test.svelte +20 -0
  408. package/dist/timepicker/root/time-picker-empty-test.svelte.d.ts +3 -0
  409. package/dist/timepicker/root/time-picker-root.svelte +625 -0
  410. package/dist/timepicker/root/time-picker-root.svelte.d.ts +28 -0
  411. package/dist/timepicker/root/time-picker-test.svelte +72 -0
  412. package/dist/timepicker/root/time-picker-test.svelte.d.ts +15 -0
  413. package/dist/timepicker/root/time-utils.d.ts +1 -0
  414. package/dist/timepicker/root/time-utils.js +3 -0
  415. package/dist/timepicker/segment/README.md +14 -0
  416. package/dist/timepicker/segment/time-picker-segment.svelte +365 -0
  417. package/dist/timepicker/segment/time-picker-segment.svelte.d.ts +9 -0
  418. package/dist/timepicker/trigger/README.md +14 -0
  419. package/dist/timepicker/trigger/time-picker-trigger-forwarding-test.svelte +35 -0
  420. package/dist/timepicker/trigger/time-picker-trigger-forwarding-test.svelte.d.ts +3 -0
  421. package/dist/timepicker/trigger/time-picker-trigger.svelte +122 -0
  422. package/dist/timepicker/trigger/time-picker-trigger.svelte.d.ts +9 -0
  423. package/dist/utils/date-only.d.ts +11 -0
  424. package/dist/utils/date-only.js +53 -0
  425. package/dist/utils/index.d.ts +1 -0
  426. package/dist/utils/index.js +1 -0
  427. package/package.json +41 -1
@@ -0,0 +1,319 @@
1
+ <script module lang="ts">
2
+ const monthFormatterCache: Record<string, Intl.DateTimeFormat> = Object.create(null);
3
+
4
+ function getMonthFormatter(locale: string): Intl.DateTimeFormat {
5
+ let formatter = monthFormatterCache[locale];
6
+ if (!formatter) {
7
+ formatter = new Intl.DateTimeFormat(locale, {
8
+ month: 'long',
9
+ timeZone: 'UTC'
10
+ });
11
+ monthFormatterCache[locale] = formatter;
12
+ }
13
+ return formatter;
14
+ }
15
+ </script>
16
+
17
+ <script lang="ts">
18
+ import type { HTMLAttributes } from 'svelte/elements';
19
+ import type { DatePickerSegmentPart } from '../root/context';
20
+ import { useDatePickerContext } from '../root/context';
21
+ import {
22
+ shouldShowFocusVisible,
23
+ trackInteractionModality
24
+ } from '../../primitives/input-modality';
25
+
26
+ type DatePickerSegmentProps = Omit<
27
+ HTMLAttributes<HTMLSpanElement>,
28
+ | 'children'
29
+ | 'class'
30
+ | 'id'
31
+ | 'role'
32
+ | 'contenteditable'
33
+ | 'tabindex'
34
+ | 'aria-label'
35
+ | 'aria-labelledby'
36
+ | 'aria-valuemin'
37
+ | 'aria-valuemax'
38
+ | 'aria-valuenow'
39
+ | 'aria-valuetext'
40
+ | 'aria-readonly'
41
+ | 'aria-disabled'
42
+ | 'onfocus'
43
+ | 'onblur'
44
+ | 'onmousedown'
45
+ | 'onclick'
46
+ | 'onselectstart'
47
+ | 'onkeydown'
48
+ > & {
49
+ segment: DatePickerSegmentPart;
50
+ class?: string;
51
+ };
52
+
53
+ let { segment, class: className = '', ...restProps }: DatePickerSegmentProps = $props();
54
+ let isFocused = $state(false);
55
+ let segmentRef: HTMLSpanElement | null = $state(null);
56
+
57
+ const datePicker = useDatePickerContext();
58
+
59
+ const isEditableSegment = $derived(segment.type !== 'literal');
60
+ const isActive = $derived(
61
+ isEditableSegment && (datePicker.activeSegment === segment.type || isFocused)
62
+ );
63
+ const isFocusVisible = $derived(isFocused && datePicker.focusVisible);
64
+ const segmentId = $props.id();
65
+
66
+ const currentNumericValue = $derived.by(() => {
67
+ if (segment.type === 'literal') return undefined;
68
+ const segmentValue = datePicker.getSegmentValue(segment.type);
69
+ if (segmentValue.length === 0) return undefined;
70
+ const value = Number(segmentValue);
71
+ return Number.isFinite(value) ? value : undefined;
72
+ });
73
+
74
+ const valueMin = $derived.by(() => {
75
+ if (segment.type === 'literal') return undefined;
76
+ if (segment.type === 'month') return 1;
77
+ if (segment.type === 'day') return 1;
78
+ return 1;
79
+ });
80
+
81
+ const valueMax = $derived.by(() => {
82
+ if (segment.type === 'literal') return undefined;
83
+ if (segment.type === 'month') return 12;
84
+ if (segment.type === 'day') return 31;
85
+ return 9999;
86
+ });
87
+
88
+ const valueText = $derived.by(() => {
89
+ if (segment.type === 'literal') return segment.text;
90
+ if (segment.type === 'month' && currentNumericValue) {
91
+ const monthLabel = getMonthFormatter(datePicker.locale).format(
92
+ new Date(Date.UTC(2030, currentNumericValue - 1, 1))
93
+ );
94
+ return `${currentNumericValue} - ${monthLabel}`;
95
+ }
96
+ return segment.text;
97
+ });
98
+
99
+ const segmentLabel = $derived.by(() => {
100
+ if (segment.type === 'literal') return undefined;
101
+ return datePicker.getSegmentLabel(segment.type);
102
+ });
103
+
104
+ $effect(() => {
105
+ if (segment.type === 'literal') return;
106
+ const segmentType = segment.type;
107
+ datePicker.registerSegmentRef(segmentType, segmentRef);
108
+ return () => {
109
+ datePicker.registerSegmentRef(segmentType, null);
110
+ };
111
+ });
112
+
113
+ function handleFocus(event: FocusEvent) {
114
+ if (segment.type === 'literal') return;
115
+ if (datePicker.isDisabled) {
116
+ isFocused = false;
117
+ return;
118
+ }
119
+ isFocused = true;
120
+ datePicker.syncFocusWithin();
121
+ datePicker.setFocusVisible(shouldShowFocusVisible(event.currentTarget as HTMLElement));
122
+ datePicker.setActiveSegment(segment.type);
123
+ }
124
+
125
+ function handleBlur() {
126
+ if (segment.type === 'literal') return;
127
+ isFocused = false;
128
+ queueMicrotask(() => {
129
+ datePicker.syncFocusWithin();
130
+ });
131
+ }
132
+
133
+ function handleMouseDown(event: MouseEvent) {
134
+ if (segment.type === 'literal') return;
135
+ if (datePicker.isDisabled) {
136
+ event.preventDefault();
137
+ return;
138
+ }
139
+ trackInteractionModality(event, event.currentTarget as HTMLElement);
140
+ datePicker.setFocusVisible(false);
141
+ event.preventDefault();
142
+ const target = event.currentTarget as HTMLElement;
143
+ target.focus();
144
+ datePicker.setActiveSegment(segment.type);
145
+ }
146
+
147
+ function handleClick(event: MouseEvent) {
148
+ if (segment.type === 'literal') return;
149
+ if (datePicker.isDisabled) {
150
+ event.preventDefault();
151
+ return;
152
+ }
153
+ const target = event.currentTarget as HTMLElement;
154
+ target.focus();
155
+ datePicker.setActiveSegment(segment.type);
156
+ }
157
+
158
+ function handleSelectStart(event: Event) {
159
+ if (!segment.isPlaceholder) return;
160
+ event.preventDefault();
161
+ }
162
+
163
+ function handleKeydown(event: KeyboardEvent) {
164
+ if (segment.type === 'literal') return;
165
+ if (datePicker.isDisabled) return;
166
+ trackInteractionModality(event, event.currentTarget as HTMLElement);
167
+ datePicker.setFocusVisible(true);
168
+
169
+ if (event.key === 'ArrowRight') {
170
+ event.preventDefault();
171
+ if (!datePicker.focusNextSegment(segment.type)) {
172
+ datePicker.triggerRef?.focus();
173
+ }
174
+ return;
175
+ }
176
+
177
+ if (event.key === 'ArrowLeft') {
178
+ event.preventDefault();
179
+ datePicker.focusPreviousSegment(segment.type);
180
+ return;
181
+ }
182
+
183
+ if (event.key === 'ArrowUp') {
184
+ event.preventDefault();
185
+ datePicker.adjustSegmentValue(segment.type, 1);
186
+ return;
187
+ }
188
+
189
+ if (event.key === 'ArrowDown') {
190
+ event.preventDefault();
191
+ datePicker.adjustSegmentValue(segment.type, -1);
192
+ return;
193
+ }
194
+
195
+ if (event.key === 'PageUp') {
196
+ event.preventDefault();
197
+ const step = segment.type === 'year' ? 10 : 5;
198
+ datePicker.adjustSegmentValue(segment.type, step);
199
+ return;
200
+ }
201
+
202
+ if (event.key === 'PageDown') {
203
+ event.preventDefault();
204
+ const step = segment.type === 'year' ? 10 : 5;
205
+ datePicker.adjustSegmentValue(segment.type, -step);
206
+ return;
207
+ }
208
+
209
+ if (event.key === 'Home') {
210
+ event.preventDefault();
211
+ if (segment.type === 'month') {
212
+ datePicker.setSegmentValue('month', '1');
213
+ } else if (segment.type === 'day') {
214
+ datePicker.setSegmentValue('day', '1');
215
+ } else {
216
+ datePicker.setSegmentValue('year', '1');
217
+ }
218
+ return;
219
+ }
220
+
221
+ if (event.key === 'End') {
222
+ event.preventDefault();
223
+ if (segment.type === 'month') {
224
+ datePicker.setSegmentValue('month', '12');
225
+ } else if (segment.type === 'day') {
226
+ datePicker.setSegmentValue('day', '31');
227
+ } else {
228
+ datePicker.setSegmentValue('year', '9999');
229
+ }
230
+ return;
231
+ }
232
+
233
+ if (event.key === 'Delete' || event.key === 'Backspace') {
234
+ event.preventDefault();
235
+ const currentValue = datePicker.getSegmentValue(segment.type);
236
+ if (currentValue.length === 0) {
237
+ if (event.key === 'Backspace') {
238
+ datePicker.focusPreviousSegment(segment.type);
239
+ }
240
+ return;
241
+ }
242
+ datePicker.setSegmentValue(segment.type, currentValue.slice(0, -1));
243
+ return;
244
+ }
245
+
246
+ if (event.key.length === 1 && /\d/.test(event.key)) {
247
+ event.preventDefault();
248
+ const didComplete = datePicker.typeSegmentDigit(segment.type, event.key);
249
+ if (didComplete) {
250
+ datePicker.focusNextSegment(segment.type);
251
+ }
252
+ return;
253
+ }
254
+
255
+ if (event.key === '/' || event.key === '-' || event.key === '.') {
256
+ event.preventDefault();
257
+ const currentValue = datePicker.getSegmentValue(segment.type);
258
+ if (currentValue.length === 0) {
259
+ return;
260
+ }
261
+ datePicker.focusNextSegment(segment.type);
262
+ return;
263
+ }
264
+
265
+ if (event.key === 'Tab') {
266
+ return;
267
+ }
268
+
269
+ event.preventDefault();
270
+ }
271
+ </script>
272
+
273
+ {#if segment.type === 'literal'}
274
+ <span
275
+ class={className}
276
+ {...restProps}
277
+ data-placeholder={segment.isPlaceholder || undefined}
278
+ data-type={segment.type}
279
+ aria-hidden="true"
280
+ >
281
+ {segment.text}
282
+ </span>
283
+ {:else}
284
+ <span
285
+ bind:this={segmentRef}
286
+ id={segmentId}
287
+ class={className}
288
+ {...restProps}
289
+ data-date-picker-segment="true"
290
+ data-placeholder={segment.isPlaceholder || undefined}
291
+ data-type={segment.type}
292
+ data-focused={isActive ? 'true' : undefined}
293
+ data-focus-visible={isFocusVisible ? 'true' : undefined}
294
+ role="spinbutton"
295
+ aria-valuetext={valueText}
296
+ aria-valuemin={valueMin}
297
+ aria-valuemax={valueMax}
298
+ aria-valuenow={currentNumericValue}
299
+ aria-label={segmentLabel}
300
+ aria-readonly={datePicker.isReadOnly || undefined}
301
+ aria-disabled={datePicker.isDisabled || undefined}
302
+ contenteditable={!datePicker.isDisabled && !datePicker.isReadOnly}
303
+ spellcheck="false"
304
+ enterkeyhint="next"
305
+ inputmode="numeric"
306
+ tabindex={datePicker.isDisabled ? -1 : 0}
307
+ style={segment.isPlaceholder
308
+ ? 'caret-color: transparent; user-select: none;'
309
+ : 'caret-color: transparent;'}
310
+ onfocus={handleFocus}
311
+ onblur={handleBlur}
312
+ onmousedown={handleMouseDown}
313
+ onclick={handleClick}
314
+ onselectstart={handleSelectStart}
315
+ onkeydown={handleKeydown}
316
+ >
317
+ {segment.text}
318
+ </span>
319
+ {/if}
@@ -0,0 +1,9 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+ import type { DatePickerSegmentPart } from '../root/context';
3
+ type DatePickerSegmentProps = Omit<HTMLAttributes<HTMLSpanElement>, 'children' | 'class' | 'id' | 'role' | 'contenteditable' | 'tabindex' | 'aria-label' | 'aria-labelledby' | 'aria-valuemin' | 'aria-valuemax' | 'aria-valuenow' | 'aria-valuetext' | 'aria-readonly' | 'aria-disabled' | 'onfocus' | 'onblur' | 'onmousedown' | 'onclick' | 'onselectstart' | 'onkeydown'> & {
4
+ segment: DatePickerSegmentPart;
5
+ class?: string;
6
+ };
7
+ declare const DatePickerSegment: import("svelte").Component<DatePickerSegmentProps, {}, "">;
8
+ type DatePickerSegment = ReturnType<typeof DatePickerSegment>;
9
+ export default DatePickerSegment;
@@ -0,0 +1,14 @@
1
+ # DatePicker Trigger
2
+
3
+ ## API reference
4
+
5
+ ### DatePicker.Trigger
6
+
7
+ Name: `DatePicker.Trigger`
8
+ Description: Button part that toggles `DatePicker.Popover` and anchors positioning/focus behavior.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | -------------- | ---------------------- | ----------- | ------------------------------------------------------ |
12
+ | `children` | `Snippet` | `undefined` | Optional trigger content. |
13
+ | `class` | `string` | `''` | CSS class names for the trigger button. |
14
+ | `...restProps` | `HTMLButtonAttributes` | `-` | Additional button attributes forwarded to the trigger. |
@@ -0,0 +1,110 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLButtonAttributes } from 'svelte/elements';
4
+ import { ButtonRoot } from '../../button/index.js';
5
+ import { useDatePickerContext } from '../root/context';
6
+ import {
7
+ shouldShowFocusVisible,
8
+ trackInteractionModality
9
+ } from '../../primitives/input-modality';
10
+
11
+ type DatePickerTriggerProps = Omit<
12
+ HTMLButtonAttributes,
13
+ 'type' | 'children' | 'class' | 'onclick' | 'aria-haspopup' | 'aria-expanded'
14
+ > & {
15
+ children?: Snippet;
16
+ class?: string;
17
+ };
18
+
19
+ let { children, class: className = '', ...restProps }: DatePickerTriggerProps = $props();
20
+
21
+ let buttonRef: HTMLButtonElement | null = $state(null);
22
+ let isFocused = $state(false);
23
+ const datePicker = useDatePickerContext();
24
+
25
+ $effect(() => {
26
+ if (datePicker.isReadOnly) {
27
+ datePicker.setTriggerRef(null);
28
+ return;
29
+ }
30
+ if (buttonRef) {
31
+ datePicker.setTriggerRef(buttonRef);
32
+ }
33
+ });
34
+
35
+ function handleFocus() {
36
+ if (datePicker.isDisabled) {
37
+ isFocused = false;
38
+ return;
39
+ }
40
+ if (buttonRef) {
41
+ datePicker.setTriggerRef(buttonRef);
42
+ datePicker.setActiveSegment(null);
43
+ isFocused = true;
44
+ datePicker.syncFocusWithin();
45
+ datePicker.setFocusVisible(shouldShowFocusVisible(buttonRef));
46
+ }
47
+ }
48
+
49
+ function handleBlur() {
50
+ isFocused = false;
51
+ queueMicrotask(() => {
52
+ datePicker.syncFocusWithin();
53
+ });
54
+ }
55
+
56
+ function handleMouseDown(event: MouseEvent) {
57
+ if (datePicker.isDisabled || datePicker.isReadOnly) return;
58
+ trackInteractionModality(event, buttonRef);
59
+ datePicker.setFocusVisible(false);
60
+ event.preventDefault();
61
+ }
62
+
63
+ function handleClick(event: MouseEvent) {
64
+ if (datePicker.isDisabled || datePicker.isReadOnly) return;
65
+ if (event.detail > 0) {
66
+ trackInteractionModality(event, buttonRef);
67
+ }
68
+ if (buttonRef) {
69
+ datePicker.setTriggerRef(buttonRef);
70
+ }
71
+ datePicker.togglePopover('trigger-press', event);
72
+ }
73
+
74
+ function handleKeydown(event: KeyboardEvent) {
75
+ if (datePicker.isDisabled) return;
76
+ trackInteractionModality(event, buttonRef);
77
+ if (event.key === 'Enter' || event.key === ' ') {
78
+ datePicker.setFocusVisible(true);
79
+ return;
80
+ }
81
+ if (event.key !== 'ArrowLeft') return;
82
+ datePicker.setFocusVisible(true);
83
+
84
+ event.preventDefault();
85
+ datePicker.focusLastSegment();
86
+ }
87
+ </script>
88
+
89
+ {#if !datePicker.isReadOnly}
90
+ <ButtonRoot
91
+ bind:element={buttonRef}
92
+ type="button"
93
+ isDisabled={datePicker.isDisabled}
94
+ class={className}
95
+ aria-haspopup="dialog"
96
+ aria-expanded={datePicker.open}
97
+ data-focused={isFocused || undefined}
98
+ data-focus-visible={isFocused && datePicker.focusVisible ? 'true' : undefined}
99
+ onmousedown={handleMouseDown}
100
+ onfocus={handleFocus}
101
+ onblur={handleBlur}
102
+ onkeydown={handleKeydown}
103
+ onclick={handleClick}
104
+ {...restProps}
105
+ >
106
+ {#if children}
107
+ {@render children()}
108
+ {/if}
109
+ </ButtonRoot>
110
+ {/if}
@@ -0,0 +1,9 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLButtonAttributes } from 'svelte/elements';
3
+ type DatePickerTriggerProps = Omit<HTMLButtonAttributes, 'type' | 'children' | 'class' | 'onclick' | 'aria-haspopup' | 'aria-expanded'> & {
4
+ children?: Snippet;
5
+ class?: string;
6
+ };
7
+ declare const DatePickerTrigger: import("svelte").Component<DatePickerTriggerProps, {}, "">;
8
+ type DatePickerTrigger = ReturnType<typeof DatePickerTrigger>;
9
+ export default DatePickerTrigger;
@@ -0,0 +1,35 @@
1
+ # Dialog
2
+
3
+ ## Description
4
+
5
+ `Dialog` provides an accessible modal pattern with trigger, portal, overlay, and content parts. It includes nested dialog stacking so only the topmost dialog handles global close interactions.
6
+
7
+ ## Usage guidelines
8
+
9
+ - Place all dialog parts inside `Dialog.Root`.
10
+ - Use `Dialog.Trigger` to wire the opener button.
11
+ - Render modal layers inside `Dialog.Portal`.
12
+ - Use `Dialog.Overlay` and `Dialog.Content` together for standard modal behavior.
13
+ - Use nested `Dialog.Root` instances when you need modal stacks; topmost behavior is handled internally.
14
+
15
+ ## Anatomy
16
+
17
+ Import the component and compose its parts:
18
+
19
+ ```svelte
20
+ <Dialog.Root>
21
+ <Dialog.Trigger>
22
+ <button>Open</button>
23
+ </Dialog.Trigger>
24
+ <Dialog.Portal>
25
+ <Dialog.Overlay />
26
+ <Dialog.Content>...</Dialog.Content>
27
+ </Dialog.Portal>
28
+ </Dialog.Root>
29
+ ```
30
+
31
+ - `Dialog.Root`
32
+ - `Dialog.Trigger`
33
+ - `Dialog.Portal`
34
+ - `Dialog.Overlay`
35
+ - `Dialog.Content`
@@ -0,0 +1,16 @@
1
+ # Dialog Content
2
+
3
+ ## API reference
4
+
5
+ ### Dialog.Content
6
+
7
+ Name: `Dialog.Content`
8
+ Description: Modal panel part that applies focus trapping, outside-click handling, scroll lock, aria outside hiding, and topmost stack guards.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | ------------------------------ | -------------------------------- | ----------- | ------------------------------------------------------------ |
12
+ | `children` | `Snippet` | `undefined` | Dialog body content. |
13
+ | `class` | `string` | `''` | CSS class names for the dialog panel. |
14
+ | `shouldCloseOnInteractOutside` | `boolean` | `true` | Enables closing when clicking outside (topmost dialog only). |
15
+ | `shouldCloseOnEscape` | `boolean` | `true` | Enables closing on Escape key (topmost dialog only). |
16
+ | `...restProps` | `HTMLAttributes<HTMLDivElement>` | `-` | Additional dialog panel attributes. |
@@ -45,16 +45,16 @@
45
45
  let dialogId: symbol | null = null;
46
46
  let dialogLevel = $state(0);
47
47
 
48
- function close() {
49
- dialogCtx.close();
48
+ function close(reason: 'escape-key' | 'outside-press' | 'imperative-action', event?: Event) {
49
+ dialogCtx.close(reason, event);
50
50
  }
51
51
 
52
52
  /**
53
53
  * Wrapper for close that only executes if this is the topmost dialog.
54
54
  */
55
- function closeIfTopmost() {
55
+ function closeIfTopmost(event: MouseEvent) {
56
56
  if (dialogId && isTopmostDialog(dialogId)) {
57
- close();
57
+ close('outside-press', event);
58
58
  }
59
59
  }
60
60
 
@@ -63,7 +63,7 @@
63
63
  // Only handle if this is the topmost dialog
64
64
  if (dialogId && isTopmostDialog(dialogId)) {
65
65
  event.preventDefault();
66
- close();
66
+ close('escape-key', event);
67
67
  }
68
68
  }
69
69
  }
@@ -71,7 +71,7 @@
71
71
  onMount(() => {
72
72
  if (!browser) return;
73
73
  // Register this dialog in the stack
74
- const { id, level } = pushDialog(close);
74
+ const { id, level } = pushDialog(() => close('imperative-action'));
75
75
  dialogId = id;
76
76
  dialogLevel = level;
77
77
  // Share level with overlay via context
@@ -1,4 +1,4 @@
1
- import * as DialogParts from './index.parts.ts';
1
+ import * as DialogParts from './index.parts.js';
2
2
  export declare const Dialog: typeof DialogParts;
3
3
  export default DialogParts;
4
4
  export { default as DialogRoot } from './root/dialog-root.svelte';
@@ -6,5 +6,5 @@ export { default as DialogTrigger } from './trigger/dialog-trigger.svelte';
6
6
  export { default as DialogPortal } from './portal/dialog-portal.svelte';
7
7
  export { default as DialogOverlay } from './overlay/dialog-overlay.svelte';
8
8
  export { default as DialogContent } from './content/dialog-content.svelte';
9
- export { getDialogContext, setDialogContext, type DialogContext } from './root/context';
10
- export type { DialogStateHelpers } from './root/types';
9
+ export { getDialogContext, setDialogContext, type DialogContext } from './root/context.js';
10
+ export type { DialogStateHelpers } from './root/types.js';
@@ -1,6 +1,6 @@
1
1
  // Dialog component with namespace pattern
2
2
  // Usage: <Dialog.Root>, <Dialog.Trigger>, <Dialog.Portal>, <Dialog.Overlay>, <Dialog.Content>
3
- import * as DialogParts from './index.parts.ts';
3
+ import * as DialogParts from './index.parts.js';
4
4
  // Named export for namespace usage: import { Dialog } from '...'
5
5
  export const Dialog = DialogParts;
6
6
  // Default export for backwards compatibility
@@ -12,4 +12,4 @@ export { default as DialogPortal } from './portal/dialog-portal.svelte';
12
12
  export { default as DialogOverlay } from './overlay/dialog-overlay.svelte';
13
13
  export { default as DialogContent } from './content/dialog-content.svelte';
14
14
  // Re-export context utilities
15
- export { getDialogContext, setDialogContext } from './root/context';
15
+ export { getDialogContext, setDialogContext } from './root/context.js';
@@ -0,0 +1,13 @@
1
+ # Dialog Overlay
2
+
3
+ ## API reference
4
+
5
+ ### Dialog.Overlay
6
+
7
+ Name: `Dialog.Overlay`
8
+ Description: Backdrop layer behind dialog content. Z-index is derived from dialog stack level.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | -------------- | -------------------------------- | ------- | -------------------------------- |
12
+ | `class` | `string` | `''` | CSS class names for the overlay. |
13
+ | `...restProps` | `HTMLAttributes<HTMLDivElement>` | `-` | Additional overlay attributes. |
@@ -0,0 +1,12 @@
1
+ # Dialog Portal
2
+
3
+ ## API reference
4
+
5
+ ### Dialog.Portal
6
+
7
+ Name: `Dialog.Portal`
8
+ Description: Portal wrapper that renders dialog layers only while `Dialog.Root` is open.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | ---------- | --------- | ----------- | ---------------------------------------------------------------- |
12
+ | `children` | `Snippet` | `undefined` | Portaled content, usually `Dialog.Overlay` and `Dialog.Content`. |
@@ -0,0 +1,53 @@
1
+ # Dialog Root
2
+
3
+ ## API reference
4
+
5
+ ### Dialog.Root
6
+
7
+ Name: `Dialog.Root`
8
+ Description: Dialog state container for open state, trigger ref, and root-level open/close/toggle actions.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | -------------- | ------------------------------- | ----------- | ------------------------------------------------------- |
12
+ | `open` | `boolean` | `undefined` | Controlled open state. Supports `bind:open`. |
13
+ | `defaultOpen` | `boolean` | `false` | Initial open state in uncontrolled mode. |
14
+ | `onOpenChange` | `(open: boolean) => void` | `undefined` | Called whenever open state changes. |
15
+ | `triggerRef` | `HTMLElement \| null` | `null` | Trigger reference. Supports `bind:triggerRef`. |
16
+ | `children` | `Snippet<[DialogStateHelpers]>` | `undefined` | Root render snippet that receives dialog state helpers. |
17
+
18
+ ### Context utilities
19
+
20
+ Name: `context.ts` helpers
21
+ Description: Context APIs shared by trigger, portal, overlay, and content parts.
22
+
23
+ | Prop | Type | Default | Description |
24
+ | ------------------ | ---------------------------------- | ------- | ----------------------------------------------- |
25
+ | `setDialogContext` | `(ctx: DialogContext) => void` | `-` | Registers dialog context. |
26
+ | `getDialogContext` | `() => DialogContext \| undefined` | `-` | Returns dialog context when available. |
27
+ | `DialogContext` | `type` | `-` | Context contract with dialog state and actions. |
28
+
29
+ ### DialogStateHelpers type
30
+
31
+ Name: `DialogStateHelpers`
32
+ Description: Helper object passed to the `children` snippet in `Dialog.Root`.
33
+
34
+ | Prop | Type | Default | Description |
35
+ | -------- | ------------ | ------- | ------------------- |
36
+ | `close` | `() => void` | `-` | Closes the dialog. |
37
+ | `open` | `() => void` | `-` | Opens the dialog. |
38
+ | `toggle` | `() => void` | `-` | Toggles open state. |
39
+ | `isOpen` | `boolean` | `-` | Current open state. |
40
+
41
+ ### Stack utilities
42
+
43
+ Name: `dialog-stack.ts`
44
+ Description: Internal global stack utilities used by `Dialog.Content` and `Dialog.Overlay` to support nested dialogs.
45
+
46
+ | Prop | Type | Default | Description |
47
+ | ------------------ | ------------------------------------------------------ | ----------------------- | ------------------------------------------------------ |
48
+ | `pushDialog` | `(close: () => void) => { id: symbol; level: number }` | `-` | Registers an opened dialog and returns stack id/level. |
49
+ | `popDialog` | `(id: symbol) => void` | `-` | Unregisters a dialog by id. |
50
+ | `isTopmostDialog` | `(id: symbol) => boolean` | `-` | Returns whether a dialog is currently topmost. |
51
+ | `getOverlayZIndex` | `(level: number) => number` | `BASE + level * 10` | Computes overlay z-index for a stack level. |
52
+ | `getContentZIndex` | `(level: number) => number` | `BASE + level * 10 + 1` | Computes content z-index for a stack level. |
53
+ | `getDialogCount` | `() => number` | `-` | Returns the number of currently open dialogs. |
@@ -1,3 +1,4 @@
1
+ export type DialogCloseReason = 'escape-key' | 'outside-press' | 'imperative-action' | 'none';
1
2
  /**
2
3
  * Context shared between Dialog components (Root, Trigger, Content).
3
4
  */
@@ -13,7 +14,7 @@ export type DialogContext = {
13
14
  /** Open the dialog */
14
15
  open: () => void;
15
16
  /** Close the dialog and return focus to trigger */
16
- close: () => void;
17
+ close: (reason?: DialogCloseReason, event?: Event) => void;
17
18
  /** Called when dialog open state changes */
18
19
  onOpenChange: (open: boolean) => void;
19
20
  /** Stack level for z-index calculation (set by Content) */