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

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 (424) 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 +1 -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 +13 -0
  151. package/dist/combobox/popover/combobox-popover.svelte +133 -17
  152. package/dist/combobox/popover/combobox-scrollable-list-test.svelte +23 -0
  153. package/dist/combobox/popover/combobox-scrollable-list-test.svelte.d.ts +18 -0
  154. package/dist/combobox/root/README.md +45 -0
  155. package/dist/combobox/root/combobox-multiselect-test.svelte +1 -1
  156. package/dist/combobox/root/combobox-numeric-string-id-test.svelte +1 -1
  157. package/dist/combobox/root/combobox-test.svelte +16 -3
  158. package/dist/combobox/root/combobox-test.svelte.d.ts +1 -0
  159. package/dist/combobox/root/combobox.svelte +78 -2
  160. package/dist/combobox/root/combobox.svelte.d.ts +1 -0
  161. package/dist/combobox/root/context.d.ts +9 -1
  162. package/dist/combobox/tag/README.md +37 -0
  163. package/dist/combobox/tag-remove/README.md +14 -0
  164. package/dist/combobox/tag-remove/combobox-tag-remove.svelte +3 -2
  165. package/dist/combobox/tags/README.md +23 -0
  166. package/dist/combobox/trigger/README.md +21 -0
  167. package/dist/combobox/trigger/combobox-trigger.svelte +56 -0
  168. package/dist/combobox/trigger/combobox-trigger.svelte.d.ts +9 -0
  169. package/dist/datepicker/README.md +100 -0
  170. package/dist/datepicker/TODO.md +28 -0
  171. package/dist/datepicker/calendar/README.md +19 -0
  172. package/dist/datepicker/calendar/date-picker-calendar-unsafe-props-test.svelte +60 -0
  173. package/dist/datepicker/calendar/date-picker-calendar-unsafe-props-test.svelte.d.ts +3 -0
  174. package/dist/datepicker/calendar/date-picker-calendar.svelte +65 -0
  175. package/dist/datepicker/calendar/date-picker-calendar.svelte.d.ts +10 -0
  176. package/dist/datepicker/index.d.ts +18 -0
  177. package/dist/datepicker/index.js +18 -0
  178. package/dist/datepicker/index.parts.d.ts +14 -0
  179. package/dist/datepicker/index.parts.js +14 -0
  180. package/dist/datepicker/input/README.md +15 -0
  181. package/dist/datepicker/input/date-picker-input.svelte +108 -0
  182. package/dist/datepicker/input/date-picker-input.svelte.d.ts +11 -0
  183. package/dist/datepicker/internal/strict-props.d.ts +2 -0
  184. package/dist/datepicker/internal/strict-props.js +28 -0
  185. package/dist/datepicker/popover/README.md +20 -0
  186. package/dist/datepicker/popover/date-picker-popover-handler-test.svelte +57 -0
  187. package/dist/datepicker/popover/date-picker-popover-handler-test.svelte.d.ts +3 -0
  188. package/dist/datepicker/popover/date-picker-popover-unsafe-props-test.svelte +45 -0
  189. package/dist/datepicker/popover/date-picker-popover-unsafe-props-test.svelte.d.ts +18 -0
  190. package/dist/datepicker/popover/date-picker-popover.svelte +87 -0
  191. package/dist/datepicker/popover/date-picker-popover.svelte.d.ts +7 -0
  192. package/dist/datepicker/root/README.md +38 -0
  193. package/dist/datepicker/root/context.d.ts +43 -0
  194. package/dist/datepicker/root/context.js +15 -0
  195. package/dist/datepicker/root/date-picker-bindable-empty-test.svelte +24 -0
  196. package/dist/datepicker/root/date-picker-bindable-empty-test.svelte.d.ts +3 -0
  197. package/dist/datepicker/root/date-picker-bindable-test.svelte +41 -0
  198. package/dist/datepicker/root/date-picker-bindable-test.svelte.d.ts +3 -0
  199. package/dist/datepicker/root/date-picker-empty-test.svelte +47 -0
  200. package/dist/datepicker/root/date-picker-empty-test.svelte.d.ts +3 -0
  201. package/dist/datepicker/root/date-picker-locale-typing-test.svelte +47 -0
  202. package/dist/datepicker/root/date-picker-locale-typing-test.svelte.d.ts +3 -0
  203. package/dist/datepicker/root/date-picker-open-cancel-test.svelte +54 -0
  204. package/dist/datepicker/root/date-picker-open-cancel-test.svelte.d.ts +8 -0
  205. package/dist/datepicker/root/date-picker-root.svelte +495 -0
  206. package/dist/datepicker/root/date-picker-root.svelte.d.ts +24 -0
  207. package/dist/datepicker/root/date-picker-test.svelte +86 -0
  208. package/dist/datepicker/root/date-picker-test.svelte.d.ts +13 -0
  209. package/dist/datepicker/root/date-utils.d.ts +17 -0
  210. package/dist/datepicker/root/date-utils.js +138 -0
  211. package/dist/datepicker/root/draft-evaluation.d.ts +13 -0
  212. package/dist/datepicker/root/draft-evaluation.js +56 -0
  213. package/dist/datepicker/root/focus-controller.d.ts +3 -0
  214. package/dist/datepicker/root/focus-controller.js +15 -0
  215. package/dist/datepicker/root/open-change.d.ts +5 -0
  216. package/dist/datepicker/root/open-change.js +13 -0
  217. package/dist/datepicker/root/open-controller.d.ts +7 -0
  218. package/dist/datepicker/root/open-controller.js +15 -0
  219. package/dist/datepicker/root/segment-controller.d.ts +8 -0
  220. package/dist/datepicker/root/segment-controller.js +53 -0
  221. package/dist/datepicker/root/segment-state.d.ts +18 -0
  222. package/dist/datepicker/root/segment-state.js +134 -0
  223. package/dist/datepicker/root/value-commit.d.ts +4 -0
  224. package/dist/datepicker/root/value-commit.js +8 -0
  225. package/dist/datepicker/segment/README.md +14 -0
  226. package/dist/datepicker/segment/date-picker-segment.svelte +319 -0
  227. package/dist/datepicker/segment/date-picker-segment.svelte.d.ts +9 -0
  228. package/dist/datepicker/trigger/README.md +14 -0
  229. package/dist/datepicker/trigger/date-picker-trigger.svelte +110 -0
  230. package/dist/datepicker/trigger/date-picker-trigger.svelte.d.ts +9 -0
  231. package/dist/dialog/README.md +35 -0
  232. package/dist/dialog/content/README.md +16 -0
  233. package/dist/dialog/content/dialog-content.svelte +6 -6
  234. package/dist/dialog/index.d.ts +3 -3
  235. package/dist/dialog/index.js +2 -2
  236. package/dist/dialog/overlay/README.md +13 -0
  237. package/dist/dialog/portal/README.md +12 -0
  238. package/dist/dialog/root/README.md +53 -0
  239. package/dist/dialog/root/context.d.ts +2 -1
  240. package/dist/dialog/root/dialog-root.svelte +9 -2
  241. package/dist/dialog/trigger/README.md +12 -0
  242. package/dist/dialog/trigger/dialog-trigger-multi-button-test.svelte +19 -0
  243. package/dist/dialog/trigger/dialog-trigger-multi-button-test.svelte.d.ts +18 -0
  244. package/dist/dialog/trigger/dialog-trigger.svelte +18 -6
  245. package/dist/index.d.ts +31 -13
  246. package/dist/index.js +31 -13
  247. package/dist/input/README.md +38 -0
  248. package/dist/input/TODO.md +12 -0
  249. package/dist/input/input-test.svelte +43 -0
  250. package/dist/input/input-test.svelte.d.ts +12 -0
  251. package/dist/input/input.svelte +151 -7
  252. package/dist/input/input.svelte.d.ts +8 -2
  253. package/dist/listbox/README.md +26 -0
  254. package/dist/listbox/index.d.ts +3 -3
  255. package/dist/listbox/index.js +3 -3
  256. package/dist/listbox/item/README.md +25 -0
  257. package/dist/listbox/item/listbox-item.svelte +152 -2
  258. package/dist/listbox/item/listbox-item.svelte.d.ts +2 -0
  259. package/dist/listbox/root/README.md +40 -0
  260. package/dist/listbox/root/listbox-test.svelte +14 -2
  261. package/dist/listbox/root/listbox-test.svelte.d.ts +1 -0
  262. package/dist/listbox/root/listbox.svelte +44 -0
  263. package/dist/listbox/root/listbox.svelte.d.ts +2 -2
  264. package/dist/locale-provider/context.d.ts +8 -0
  265. package/dist/locale-provider/context.js +18 -0
  266. package/dist/locale-provider/index.d.ts +4 -0
  267. package/dist/locale-provider/index.js +4 -0
  268. package/dist/locale-provider/locale-provider-initial-value-test.svelte +15 -0
  269. package/dist/locale-provider/locale-provider-initial-value-test.svelte.d.ts +7 -0
  270. package/dist/locale-provider/locale-provider-test.svelte +20 -0
  271. package/dist/locale-provider/locale-provider-test.svelte.d.ts +6 -0
  272. package/dist/locale-provider/locale-provider-value-probe.svelte +22 -0
  273. package/dist/locale-provider/locale-provider-value-probe.svelte.d.ts +6 -0
  274. package/dist/locale-provider/locale-provider.svelte +23 -0
  275. package/dist/locale-provider/locale-provider.svelte.d.ts +8 -0
  276. package/dist/popover/README.md +42 -0
  277. package/dist/popover/content/README.md +36 -0
  278. package/dist/popover/content/popover-content-standalone-test.svelte +28 -0
  279. package/dist/popover/content/popover-content-standalone-test.svelte.d.ts +6 -0
  280. package/dist/popover/content/popover-content-test.svelte +32 -2
  281. package/dist/popover/content/popover-content-test.svelte.d.ts +3 -1
  282. package/dist/popover/content/popover-content.svelte +276 -23
  283. package/dist/popover/content/popover-content.svelte.d.ts +5 -1
  284. package/dist/popover/index.d.ts +3 -3
  285. package/dist/popover/index.js +3 -5
  286. package/dist/popover/root/README.md +25 -0
  287. package/dist/popover/root/context.d.ts +16 -7
  288. package/dist/popover/root/context.js +0 -2
  289. package/dist/popover/root/focus-state.d.ts +4 -0
  290. package/dist/popover/root/focus-state.js +33 -0
  291. package/dist/popover/root/popover-root.svelte +90 -17
  292. package/dist/popover/root/popover-root.svelte.d.ts +2 -1
  293. package/dist/popover/root/popover-test.svelte +2 -1
  294. package/dist/popover/root/popover-test.svelte.d.ts +2 -1
  295. package/dist/popover/trigger/README.md +23 -0
  296. package/dist/popover/trigger/popover-trigger-button.svelte +14 -10
  297. package/dist/popover/trigger/popover-trigger-button.svelte.d.ts +2 -3
  298. package/dist/popover/trigger/popover-trigger-multi-button-test.svelte +16 -0
  299. package/dist/popover/trigger/popover-trigger-multi-button-test.svelte.d.ts +18 -0
  300. package/dist/popover/trigger/popover-trigger.svelte +19 -7
  301. package/dist/portal/portal.svelte +3 -1
  302. package/dist/primitives/click-outside.d.ts +1 -1
  303. package/dist/primitives/click-outside.js +1 -1
  304. package/dist/primitives/floating.js +12 -4
  305. package/dist/primitives/focus-trap.d.ts +7 -2
  306. package/dist/primitives/focus-trap.js +50 -17
  307. package/dist/primitives/index.d.ts +1 -0
  308. package/dist/primitives/index.js +1 -0
  309. package/dist/primitives/input-modality.d.ts +7 -0
  310. package/dist/primitives/input-modality.js +125 -0
  311. package/dist/table/IMPLEMENTATION_NOTES.md +8 -0
  312. package/dist/table/PLAN-HIDDEN-COLUMNS.md +152 -0
  313. package/dist/table/PLAN.md +924 -0
  314. package/dist/table/README.md +116 -0
  315. package/dist/table/SELECTION_CHECKBOX_PLAN.md +234 -0
  316. package/dist/table/TODO.md +100 -0
  317. package/dist/table/body/README.md +24 -0
  318. package/dist/table/body/table-body.svelte +25 -0
  319. package/dist/table/body/table-body.svelte.d.ts +9 -0
  320. package/dist/table/cell/README.md +25 -0
  321. package/dist/table/cell/table-cell.svelte +247 -0
  322. package/dist/table/cell/table-cell.svelte.d.ts +9 -0
  323. package/dist/table/checkbox/README.md +38 -0
  324. package/dist/table/checkbox/table-checkbox-test.svelte +121 -0
  325. package/dist/table/checkbox/table-checkbox-test.svelte.d.ts +16 -0
  326. package/dist/table/checkbox/table-checkbox.svelte +274 -0
  327. package/dist/table/checkbox/table-checkbox.svelte.d.ts +13 -0
  328. package/dist/table/checkbox-indicator/README.md +29 -0
  329. package/dist/table/checkbox-indicator/table-checkbox-indicator.svelte +22 -0
  330. package/dist/table/checkbox-indicator/table-checkbox-indicator.svelte.d.ts +10 -0
  331. package/dist/table/column/README.md +32 -0
  332. package/dist/table/column/table-column.svelte +108 -0
  333. package/dist/table/column/table-column.svelte.d.ts +18 -0
  334. package/dist/table/column-header-cell/README.md +28 -0
  335. package/dist/table/column-header-cell/table-column-header-cell.svelte +281 -0
  336. package/dist/table/column-header-cell/table-column-header-cell.svelte.d.ts +9 -0
  337. package/dist/table/column-resizer/README.md +32 -0
  338. package/dist/table/column-resizer/table-column-resizer-freeze-layout-test.svelte +51 -0
  339. package/dist/table/column-resizer/table-column-resizer-freeze-layout-test.svelte.d.ts +3 -0
  340. package/dist/table/column-resizer/table-column-resizer-selection-column-test.svelte +83 -0
  341. package/dist/table/column-resizer/table-column-resizer-selection-column-test.svelte.d.ts +3 -0
  342. package/dist/table/column-resizer/table-column-resizer-test.svelte +75 -0
  343. package/dist/table/column-resizer/table-column-resizer-test.svelte.d.ts +3 -0
  344. package/dist/table/column-resizer/table-column-resizer.svelte +616 -0
  345. package/dist/table/column-resizer/table-column-resizer.svelte.d.ts +11 -0
  346. package/dist/table/empty-state/README.md +25 -0
  347. package/dist/table/empty-state/table-empty-state.svelte +38 -0
  348. package/dist/table/empty-state/table-empty-state.svelte.d.ts +8 -0
  349. package/dist/table/footer/README.md +24 -0
  350. package/dist/table/footer/table-footer.svelte +19 -0
  351. package/dist/table/footer/table-footer.svelte.d.ts +9 -0
  352. package/dist/table/header/README.md +24 -0
  353. package/dist/table/header/table-header.svelte +19 -0
  354. package/dist/table/header/table-header.svelte.d.ts +9 -0
  355. package/dist/table/index.d.ts +16 -0
  356. package/dist/table/index.js +16 -0
  357. package/dist/table/index.parts.d.ts +12 -0
  358. package/dist/table/index.parts.js +12 -0
  359. package/dist/table/root/README.md +56 -0
  360. package/dist/table/root/context.d.ts +198 -0
  361. package/dist/table/root/context.js +1426 -0
  362. package/dist/table/root/table-reorder-test.svelte +64 -0
  363. package/dist/table/root/table-reorder-test.svelte.d.ts +3 -0
  364. package/dist/table/root/table-root.svelte +410 -0
  365. package/dist/table/root/table-root.svelte.d.ts +29 -0
  366. package/dist/table/root/table-test.svelte +165 -0
  367. package/dist/table/root/table-test.svelte.d.ts +25 -0
  368. package/dist/table/row/README.md +27 -0
  369. package/dist/table/row/table-row.svelte +321 -0
  370. package/dist/table/row/table-row.svelte.d.ts +13 -0
  371. package/dist/test-utils/focus-contract.d.ts +3 -0
  372. package/dist/test-utils/focus-contract.js +26 -0
  373. package/dist/timepicker/IMPLEMENTATION_PLAN.md +254 -0
  374. package/dist/timepicker/README.md +97 -0
  375. package/dist/timepicker/TODO.md +86 -0
  376. package/dist/timepicker/clock/README.md +14 -0
  377. package/dist/timepicker/clock/time-picker-clock-test.svelte +45 -0
  378. package/dist/timepicker/clock/time-picker-clock-test.svelte.d.ts +11 -0
  379. package/dist/timepicker/clock/time-picker-clock.svelte +65 -0
  380. package/dist/timepicker/clock/time-picker-clock.svelte.d.ts +10 -0
  381. package/dist/timepicker/index.d.ts +14 -0
  382. package/dist/timepicker/index.js +14 -0
  383. package/dist/timepicker/index.parts.d.ts +8 -0
  384. package/dist/timepicker/index.parts.js +8 -0
  385. package/dist/timepicker/input/README.md +15 -0
  386. package/dist/timepicker/input/time-picker-input-forwarding-test.svelte +40 -0
  387. package/dist/timepicker/input/time-picker-input-forwarding-test.svelte.d.ts +3 -0
  388. package/dist/timepicker/input/time-picker-input.svelte +109 -0
  389. package/dist/timepicker/input/time-picker-input.svelte.d.ts +11 -0
  390. package/dist/timepicker/internal/strict-props.d.ts +4 -0
  391. package/dist/timepicker/internal/strict-props.js +51 -0
  392. package/dist/timepicker/popover/README.md +20 -0
  393. package/dist/timepicker/popover/time-picker-popover-unsafe-props-test.svelte +22 -0
  394. package/dist/timepicker/popover/time-picker-popover-unsafe-props-test.svelte.d.ts +3 -0
  395. package/dist/timepicker/popover/time-picker-popover.svelte +89 -0
  396. package/dist/timepicker/popover/time-picker-popover.svelte.d.ts +7 -0
  397. package/dist/timepicker/root/README.md +42 -0
  398. package/dist/timepicker/root/context.d.ts +51 -0
  399. package/dist/timepicker/root/context.js +15 -0
  400. package/dist/timepicker/root/time-picker-12h-test.svelte +22 -0
  401. package/dist/timepicker/root/time-picker-12h-test.svelte.d.ts +3 -0
  402. package/dist/timepicker/root/time-picker-bindable-test.svelte +25 -0
  403. package/dist/timepicker/root/time-picker-bindable-test.svelte.d.ts +3 -0
  404. package/dist/timepicker/root/time-picker-empty-test.svelte +20 -0
  405. package/dist/timepicker/root/time-picker-empty-test.svelte.d.ts +3 -0
  406. package/dist/timepicker/root/time-picker-root.svelte +625 -0
  407. package/dist/timepicker/root/time-picker-root.svelte.d.ts +28 -0
  408. package/dist/timepicker/root/time-picker-test.svelte +72 -0
  409. package/dist/timepicker/root/time-picker-test.svelte.d.ts +15 -0
  410. package/dist/timepicker/root/time-utils.d.ts +1 -0
  411. package/dist/timepicker/root/time-utils.js +3 -0
  412. package/dist/timepicker/segment/README.md +14 -0
  413. package/dist/timepicker/segment/time-picker-segment.svelte +365 -0
  414. package/dist/timepicker/segment/time-picker-segment.svelte.d.ts +9 -0
  415. package/dist/timepicker/trigger/README.md +14 -0
  416. package/dist/timepicker/trigger/time-picker-trigger-forwarding-test.svelte +35 -0
  417. package/dist/timepicker/trigger/time-picker-trigger-forwarding-test.svelte.d.ts +3 -0
  418. package/dist/timepicker/trigger/time-picker-trigger.svelte +122 -0
  419. package/dist/timepicker/trigger/time-picker-trigger.svelte.d.ts +9 -0
  420. package/dist/utils/date-only.d.ts +11 -0
  421. package/dist/utils/date-only.js +53 -0
  422. package/dist/utils/index.d.ts +1 -0
  423. package/dist/utils/index.js +1 -0
  424. package/package.json +41 -1
@@ -3,6 +3,10 @@
3
3
  import type { HTMLAttributes } from 'svelte/elements';
4
4
  import { useListBoxContext } from '../root/context';
5
5
  import { onMount, onDestroy } from 'svelte';
6
+ import {
7
+ shouldShowFocusVisible,
8
+ trackInteractionModality
9
+ } from '../../primitives/input-modality';
6
10
 
7
11
  /**
8
12
  * Props for the ListBox.Item component.
@@ -34,6 +38,8 @@
34
38
  scrollOnFocus?: boolean;
35
39
  /** Additional disabled state from parent. */
36
40
  isParentDisabled?: boolean;
41
+ /** Override the visual pressed state. When provided, this value is used instead of internal press tracking. */
42
+ pressed?: boolean;
37
43
  };
38
44
 
39
45
  let {
@@ -50,6 +56,7 @@
50
56
  onResolvedTextValue,
51
57
  scrollOnFocus = false,
52
58
  isParentDisabled = false,
59
+ pressed: pressedOverride,
53
60
  ...restProps
54
61
  }: ListBoxItemProps = $props();
55
62
 
@@ -58,7 +65,10 @@
58
65
  let elementRef: HTMLElement;
59
66
  let isSelected = $state(false);
60
67
  let isFocused = $state(false);
68
+ let isFocusVisible = $state(false);
61
69
  let isHovered = $state(false);
70
+ let isPressed = $state(false);
71
+ let pressedKey: 'Enter' | 'Space' | null = $state(null);
62
72
 
63
73
  // Focus: use override if provided, otherwise use internal state
64
74
  const isFocusedComputed = $derived(
@@ -67,6 +77,11 @@
67
77
  const isDisabledComputed = $derived(
68
78
  disabled || listboxCtx.disabledIds.has(id) || isParentDisabled
69
79
  );
80
+ const isPressedComputed = $derived(
81
+ pressedOverride !== undefined
82
+ ? Boolean(pressedOverride) && !isDisabledComputed
83
+ : isPressed && !isDisabledComputed
84
+ );
70
85
 
71
86
  // ID: use custom if provided, otherwise generate
72
87
  const uniqueId = $derived(customId ?? `listbox-item-${id}`);
@@ -113,6 +128,18 @@
113
128
  }
114
129
  });
115
130
 
131
+ $effect(() => {
132
+ if (!isDisabledComputed) return;
133
+ clearPressedState();
134
+ isHovered = false;
135
+ isFocusVisible = false;
136
+ });
137
+
138
+ function clearPressedState() {
139
+ isPressed = false;
140
+ pressedKey = null;
141
+ }
142
+
116
143
  function handleClick() {
117
144
  if (isDisabledComputed) return;
118
145
 
@@ -128,12 +155,55 @@
128
155
  }
129
156
 
130
157
  function handleFocus() {
158
+ if (isDisabledComputed) return;
159
+ isFocusVisible = shouldShowFocusVisible(elementRef);
131
160
  if (!disableFocusHandling) {
132
161
  listboxCtx.setFocusedId(id);
133
162
  }
134
163
  }
135
164
 
136
- function handleBlur() {}
165
+ function handleBlur() {
166
+ isFocusVisible = false;
167
+ }
168
+
169
+ function handlePointerDown(event: PointerEvent) {
170
+ trackInteractionModality(event, elementRef);
171
+ isFocusVisible = false;
172
+
173
+ if (isDisabledComputed) {
174
+ event.preventDefault();
175
+ clearPressedState();
176
+ return;
177
+ }
178
+
179
+ if (event.button !== 0) return;
180
+ isPressed = true;
181
+ pressedKey = null;
182
+ }
183
+
184
+ function handlePointerUp(event: PointerEvent) {
185
+ if (event.button !== 0) return;
186
+ isPressed = false;
187
+ pressedKey = null;
188
+ }
189
+
190
+ function handlePointerCancel() {
191
+ clearPressedState();
192
+ }
193
+
194
+ function handlePointerEnter(event: PointerEvent) {
195
+ if (isDisabledComputed) return;
196
+
197
+ if ((event.buttons & 1) === 1 && pressedKey === null) {
198
+ isPressed = true;
199
+ }
200
+ }
201
+
202
+ function handlePointerLeave() {
203
+ if (pressedKey === null) {
204
+ isPressed = false;
205
+ }
206
+ }
137
207
 
138
208
  function handleMouseEnter() {
139
209
  if (!isDisabledComputed) {
@@ -143,17 +213,88 @@
143
213
 
144
214
  function handleMouseLeave() {
145
215
  isHovered = false;
216
+ if (pressedKey === null) {
217
+ isPressed = false;
218
+ }
146
219
  }
147
220
 
148
221
  // Keyboard is handled by parent container
149
- function handleKeydown() {}
222
+ function handleKeydown(event: KeyboardEvent) {
223
+ trackInteractionModality(event, elementRef);
224
+ if (isFocusedComputed) {
225
+ isFocusVisible = true;
226
+ }
227
+
228
+ const key =
229
+ event.key === 'Enter'
230
+ ? 'Enter'
231
+ : event.key === ' ' || event.key === 'Spacebar'
232
+ ? 'Space'
233
+ : null;
234
+
235
+ if (!key) return;
236
+
237
+ if (isDisabledComputed) {
238
+ event.preventDefault();
239
+ clearPressedState();
240
+ return;
241
+ }
242
+
243
+ if (event.repeat && isPressed && pressedKey === key) return;
244
+
245
+ isPressed = true;
246
+ pressedKey = key;
247
+ }
248
+
249
+ function handleKeyup(event: KeyboardEvent) {
250
+ const key =
251
+ event.key === 'Enter'
252
+ ? 'Enter'
253
+ : event.key === ' ' || event.key === 'Spacebar'
254
+ ? 'Space'
255
+ : null;
256
+
257
+ if (!key) return;
258
+
259
+ if (isDisabledComputed) {
260
+ event.preventDefault();
261
+ clearPressedState();
262
+ return;
263
+ }
264
+
265
+ if (pressedKey === key) {
266
+ clearPressedState();
267
+ }
268
+ }
269
+
150
270
  function handleMouseDown(event: MouseEvent) {
271
+ trackInteractionModality(event, elementRef);
272
+ isFocusVisible = false;
273
+
151
274
  // Prevent focus stealing when used in ComboBox (disableFocusHandling=true)
152
275
  // This keeps the focus on the input while allowing click selection
276
+ if (isDisabledComputed) {
277
+ event.preventDefault();
278
+ clearPressedState();
279
+ return;
280
+ }
281
+
282
+ if (event.button === 0) {
283
+ isPressed = true;
284
+ pressedKey = null;
285
+ }
286
+
153
287
  if (disableFocusHandling) {
154
288
  event.preventDefault();
155
289
  }
156
290
  }
291
+
292
+ function handleMouseUp(event: MouseEvent) {
293
+ if (event.button !== 0) return;
294
+ if (pressedKey === null) {
295
+ clearPressedState();
296
+ }
297
+ }
157
298
  </script>
158
299
 
159
300
  <div
@@ -170,10 +311,19 @@
170
311
  data-selected={isSelected || undefined}
171
312
  data-disabled={isDisabledComputed || undefined}
172
313
  data-focused={isFocusedComputed || undefined}
314
+ data-focus-visible={isFocusVisible || undefined}
173
315
  data-hovered={isHovered || undefined}
316
+ data-pressed={isPressedComputed || undefined}
317
+ onpointerdown={handlePointerDown}
318
+ onpointerup={handlePointerUp}
319
+ onpointercancel={handlePointerCancel}
320
+ onpointerenter={handlePointerEnter}
321
+ onpointerleave={handlePointerLeave}
174
322
  onmousedown={handleMouseDown}
323
+ onmouseup={handleMouseUp}
175
324
  onclick={handleClick}
176
325
  onkeydown={handleKeydown}
326
+ onkeyup={handleKeyup}
177
327
  onfocus={handleFocus}
178
328
  onblur={handleBlur}
179
329
  onmouseenter={handleMouseEnter}
@@ -28,6 +28,8 @@ type ListBoxItemProps = Omit<HTMLAttributes<HTMLDivElement>, 'id' | 'children'>
28
28
  scrollOnFocus?: boolean;
29
29
  /** Additional disabled state from parent. */
30
30
  isParentDisabled?: boolean;
31
+ /** Override the visual pressed state. When provided, this value is used instead of internal press tracking. */
32
+ pressed?: boolean;
31
33
  };
32
34
  declare const ListboxItem: import("svelte").Component<ListBoxItemProps, {}, "">;
33
35
  type ListboxItem = ReturnType<typeof ListboxItem>;
@@ -0,0 +1,40 @@
1
+ # ListBox Root
2
+
3
+ ## API reference
4
+
5
+ ### ListBox.Root
6
+
7
+ Name: `ListBox.Root`
8
+ Description: Main listbox state container that manages registration, selection, focus, and keyboard navigation.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | ------------------- | ---------------------------------------- | --------------------- | ------------------------------------------------------------ |
12
+ | `selectionBehavior` | `'toggle' \| 'replace'` | `'toggle'` | Selection behavior for already selected options. |
13
+ | `emptyPlaceholder` | `string \| Snippet` | `'No items selected'` | Fallback content when no options are available. |
14
+ | `items` | `Iterable<T>` | `undefined` | Dynamic source collection for rendering. |
15
+ | `disabledIds` | `Iterable<string \| number>` | `undefined` | Option ids that should be disabled. |
16
+ | `selectionMode` | `'single' \| 'multiple'` | `'single'` | Selection mode for the listbox. |
17
+ | `value` | `Iterable<string \| number>` | `undefined` | Controlled selection values. |
18
+ | `defaultValue` | `Iterable<string \| number>` | `undefined` | Initial uncontrolled selection values. |
19
+ | `children` | `Snippet \| Snippet<[T]>` | `undefined` | Static or dynamic option rendering. |
20
+ | `class` | `string` | `''` | CSS class names for the root element. |
21
+ | `id` | `string` | `undefined` | DOM id for the listbox element. |
22
+ | `aria-label` | `string` | `undefined` | Accessible label for the listbox. |
23
+ | `onChange` | `(value: Set<string \| number>) => void` | `undefined` | Called when selection changes. |
24
+ | `context` | `ListBoxContext` | `bindable` | Exposes context via `bind:context` for advanced composition. |
25
+ | `element` | `HTMLElement` | `bindable` | Exposes root element via `bind:element`. |
26
+
27
+ ### Context utilities
28
+
29
+ Name: `context.ts` helpers
30
+ Description: Low-level APIs for creating and consuming listbox state outside visual composition.
31
+
32
+ | Prop | Type | Default | Description |
33
+ | ----------------------------------------------- | ------------------------------------------------- | ----------- | ------------------------------------------------------------ |
34
+ | `createListBoxContext(options)` | `(CreateListBoxContextOptions) => ListBoxContext` | `{}` | Creates a listbox context with selection and focus behavior. |
35
+ | `useListBoxContext()` | `() => ListBoxContext` | `-` | Returns context and throws outside `ListBox.Root`. |
36
+ | `CreateListBoxContextOptions.selectionMode` | `'single' \| 'multiple'` | `'single'` | Initial selection mode. |
37
+ | `CreateListBoxContextOptions.selectionBehavior` | `'toggle' \| 'replace'` | `'toggle'` | Initial selection behavior. |
38
+ | `CreateListBoxContextOptions.disabledIds` | `Iterable<string \| number>` | `undefined` | Initial disabled ids. |
39
+ | `CreateListBoxContextOptions.initialSelection` | `Set<string \| number>` | `new Set()` | Initial uncontrolled selection set. |
40
+ | `CreateListBoxContextOptions.onSelectionChange` | `(selection) => void` | `undefined` | Callback for selection updates. |
@@ -5,9 +5,17 @@
5
5
  selectionMode?: 'single' | 'multiple';
6
6
  selectionBehavior?: 'toggle' | 'replace';
7
7
  disabledIds?: Iterable<string | number>;
8
+ pressedIds?: Iterable<string | number>;
8
9
  };
9
10
 
10
- let { selectionMode = 'single', selectionBehavior = 'toggle', disabledIds }: Props = $props();
11
+ let {
12
+ selectionMode = 'single',
13
+ selectionBehavior = 'toggle',
14
+ disabledIds,
15
+ pressedIds
16
+ }: Props = $props();
17
+
18
+ const pressedIdSet = $derived(new Set(pressedIds ?? []));
11
19
 
12
20
  const fruits = [
13
21
  { id: 'apple', name: 'Apple' },
@@ -20,7 +28,11 @@
20
28
 
21
29
  <ListBox.Root {selectionMode} {selectionBehavior} {disabledIds} aria-label="Fruits list">
22
30
  {#each fruits as fruit (fruit.id)}
23
- <ListBox.Item id={fruit.id} textValue={fruit.name}>
31
+ <ListBox.Item
32
+ id={fruit.id}
33
+ textValue={fruit.name}
34
+ pressed={pressedIdSet.has(fruit.id) ? true : undefined}
35
+ >
24
36
  {fruit.name}
25
37
  </ListBox.Item>
26
38
  {/each}
@@ -2,6 +2,7 @@ type Props = {
2
2
  selectionMode?: 'single' | 'multiple';
3
3
  selectionBehavior?: 'toggle' | 'replace';
4
4
  disabledIds?: Iterable<string | number>;
5
+ pressedIds?: Iterable<string | number>;
5
6
  };
6
7
  declare const ListboxTest: import("svelte").Component<Props, {}, "">;
7
8
  type ListboxTest = ReturnType<typeof ListboxTest>;
@@ -1,6 +1,10 @@
1
1
  <script lang="ts" generics="T extends object = object">
2
2
  import type { Snippet } from 'svelte';
3
3
  import { createListBoxContext, type ListBoxContext } from './context';
4
+ import {
5
+ shouldShowFocusVisible,
6
+ trackInteractionModality
7
+ } from '../../primitives/input-modality';
4
8
 
5
9
  /**
6
10
  * Props for the ListBox component.
@@ -114,6 +118,40 @@
114
118
 
115
119
  const itemsArray = $derived(items ? Array.from(items) : []);
116
120
  const hasItems = $derived(itemsArray.length > 0 || itemCount > 0);
121
+
122
+ let focusWithin = $state(false);
123
+ let focusVisible = $state(false);
124
+
125
+ function syncFocusWithin() {
126
+ focusWithin =
127
+ !!listboxElement &&
128
+ !!document.activeElement &&
129
+ listboxElement.contains(document.activeElement);
130
+ if (!focusWithin) {
131
+ focusVisible = false;
132
+ }
133
+ }
134
+
135
+ function handleFocusIn(event: FocusEvent) {
136
+ focusWithin = true;
137
+ focusVisible = shouldShowFocusVisible(event.target as HTMLElement | null);
138
+ }
139
+
140
+ function handleFocusOut() {
141
+ queueMicrotask(syncFocusWithin);
142
+ }
143
+
144
+ function handleMouseDown(event: MouseEvent) {
145
+ trackInteractionModality(event, event.target as HTMLElement | null);
146
+ focusVisible = false;
147
+ }
148
+
149
+ function handleKeyDown(event: KeyboardEvent) {
150
+ trackInteractionModality(event, event.target as HTMLElement | null);
151
+ if (focusWithin) {
152
+ focusVisible = true;
153
+ }
154
+ }
117
155
  </script>
118
156
 
119
157
  <div
@@ -124,7 +162,13 @@
124
162
  aria-label={ariaLabel}
125
163
  class={className}
126
164
  tabindex="0"
165
+ data-focus-within={focusWithin || undefined}
166
+ data-focus-visible={focusVisible || undefined}
127
167
  use:keyboardAction
168
+ onfocusin={handleFocusIn}
169
+ onfocusout={handleFocusOut}
170
+ onmousedown={handleMouseDown}
171
+ onkeydown={handleKeyDown}
128
172
  >
129
173
  {#if items && children}
130
174
  {#each itemsArray as item (item)}
@@ -31,7 +31,7 @@ declare function $$render<T extends object = object>(): {
31
31
  element?: HTMLElement;
32
32
  };
33
33
  exports: {};
34
- bindings: "value" | "context" | "element";
34
+ bindings: "value" | "element" | "context";
35
35
  slots: {};
36
36
  events: {};
37
37
  };
@@ -39,7 +39,7 @@ declare class __sveltets_Render<T extends object = object> {
39
39
  props(): ReturnType<typeof $$render<T>>['props'];
40
40
  events(): ReturnType<typeof $$render<T>>['events'];
41
41
  slots(): ReturnType<typeof $$render<T>>['slots'];
42
- bindings(): "value" | "context" | "element";
42
+ bindings(): "value" | "element" | "context";
43
43
  exports(): {};
44
44
  }
45
45
  interface $$IsomorphicComponent {
@@ -0,0 +1,8 @@
1
+ import type { Readable } from 'svelte/store';
2
+ export type LocaleContext = {
3
+ locale: Readable<string | undefined>;
4
+ };
5
+ export declare function setLocaleContext(context: LocaleContext): void;
6
+ export declare function getLocaleContext(): LocaleContext | undefined;
7
+ export declare function useLocaleContext(): LocaleContext;
8
+ export declare function useLocaleContextOptional(): LocaleContext | undefined;
@@ -0,0 +1,18 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ const KEY = Symbol('locale-provider');
3
+ export function setLocaleContext(context) {
4
+ setContext(KEY, context);
5
+ }
6
+ export function getLocaleContext() {
7
+ return getContext(KEY);
8
+ }
9
+ export function useLocaleContext() {
10
+ const context = getLocaleContext();
11
+ if (!context) {
12
+ throw new Error('LocaleProvider must wrap component tree when using useLocaleContext.');
13
+ }
14
+ return context;
15
+ }
16
+ export function useLocaleContextOptional() {
17
+ return getLocaleContext();
18
+ }
@@ -0,0 +1,4 @@
1
+ import LocaleProvider from './locale-provider.svelte';
2
+ export { LocaleProvider };
3
+ export default LocaleProvider;
4
+ export { getLocaleContext, setLocaleContext, useLocaleContext, useLocaleContextOptional, type LocaleContext } from './context';
@@ -0,0 +1,4 @@
1
+ import LocaleProvider from './locale-provider.svelte';
2
+ export { LocaleProvider };
3
+ export default LocaleProvider;
4
+ export { getLocaleContext, setLocaleContext, useLocaleContext, useLocaleContextOptional } from './context';
@@ -0,0 +1,15 @@
1
+ <script lang="ts">
2
+ import { LocaleProvider } from '../index';
3
+ import LocaleProviderValueProbe from './locale-provider-value-probe.svelte';
4
+
5
+ type Props = {
6
+ locale?: string;
7
+ onValue?: (value: string | undefined) => void;
8
+ };
9
+
10
+ let { locale = 'es-ES', onValue }: Props = $props();
11
+ </script>
12
+
13
+ <LocaleProvider {locale}>
14
+ <LocaleProviderValueProbe {onValue} />
15
+ </LocaleProvider>
@@ -0,0 +1,7 @@
1
+ type Props = {
2
+ locale?: string;
3
+ onValue?: (value: string | undefined) => void;
4
+ };
5
+ declare const LocaleProviderInitialValueTest: import("svelte").Component<Props, {}, "">;
6
+ type LocaleProviderInitialValueTest = ReturnType<typeof LocaleProviderInitialValueTest>;
7
+ export default LocaleProviderInitialValueTest;
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ import { LocaleProvider } from '../index';
3
+ import Calendar from '../calendar';
4
+
5
+ type Props = {
6
+ locale?: string;
7
+ };
8
+
9
+ let { locale = 'es-ES' }: Props = $props();
10
+ </script>
11
+
12
+ <LocaleProvider {locale}>
13
+ <Calendar.Root defaultValue="2026-02-10" aria-label="Locale provider test calendar">
14
+ <Calendar.Heading />
15
+ <Calendar.Grid>
16
+ <Calendar.GridHeader />
17
+ <Calendar.GridBody />
18
+ </Calendar.Grid>
19
+ </Calendar.Root>
20
+ </LocaleProvider>
@@ -0,0 +1,6 @@
1
+ type Props = {
2
+ locale?: string;
3
+ };
4
+ declare const LocaleProviderTest: import("svelte").Component<Props, {}, "">;
5
+ type LocaleProviderTest = ReturnType<typeof LocaleProviderTest>;
6
+ export default LocaleProviderTest;
@@ -0,0 +1,22 @@
1
+ <script lang="ts">
2
+ import { useLocaleContext } from './context';
3
+
4
+ type Props = {
5
+ onValue?: (value: string | undefined) => void;
6
+ };
7
+
8
+ let { onValue }: Props = $props();
9
+
10
+ const { locale } = useLocaleContext();
11
+ const unsubscribe = locale.subscribe((value) => {
12
+ onValue?.(value);
13
+ });
14
+
15
+ $effect(() => {
16
+ return () => {
17
+ unsubscribe();
18
+ };
19
+ });
20
+ </script>
21
+
22
+ <div data-testid="locale-value-probe"></div>
@@ -0,0 +1,6 @@
1
+ type Props = {
2
+ onValue?: (value: string | undefined) => void;
3
+ };
4
+ declare const LocaleProviderValueProbe: import("svelte").Component<Props, {}, "">;
5
+ type LocaleProviderValueProbe = ReturnType<typeof LocaleProviderValueProbe>;
6
+ export default LocaleProviderValueProbe;
@@ -0,0 +1,23 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { writable } from 'svelte/store';
4
+ import { setLocaleContext } from './context';
5
+
6
+ type LocaleProviderProps = {
7
+ locale?: string;
8
+ children?: Snippet;
9
+ };
10
+
11
+ let props: LocaleProviderProps = $props();
12
+
13
+ const localeStore = writable<string | undefined>(props.locale);
14
+ setLocaleContext({ locale: localeStore });
15
+
16
+ $effect(() => {
17
+ localeStore.set(props.locale);
18
+ });
19
+ </script>
20
+
21
+ {#if props.children}
22
+ {@render props.children()}
23
+ {/if}
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ type LocaleProviderProps = {
3
+ locale?: string;
4
+ children?: Snippet;
5
+ };
6
+ declare const LocaleProvider: import("svelte").Component<LocaleProviderProps, {}, "">;
7
+ type LocaleProvider = ReturnType<typeof LocaleProvider>;
8
+ export default LocaleProvider;
@@ -0,0 +1,42 @@
1
+ # Popover
2
+
3
+ ## Description
4
+
5
+ `Popover` renders floating content anchored to a trigger element. It supports modal and non-modal interaction patterns, outside interaction handling, and configurable positioning.
6
+
7
+ ## Usage guidelines
8
+
9
+ - Use `Popover.Root` to share open state and trigger reference.
10
+ - Use `Popover.Trigger` when you want to auto-wire an existing button in children.
11
+ - Use `Popover.TriggerButton` when you want a pre-wired trigger button component.
12
+ - Use `Popover.Content` inside `Popover.Root`, or in standalone mode with `open`, `triggerRef`, and `onOpenChange`.
13
+ - Configure `isNonModal`, `shouldCloseOnInteractOutside`, and `shouldCloseOnBlur` to match your interaction model.
14
+
15
+ ## onOpenChange details
16
+
17
+ `Popover.Root` and standalone `Popover.Content` use:
18
+
19
+ - `onOpenChange(open, details)`
20
+ - `details.reason`: `trigger-press | imperative-action | none | escape-key | outside-press | focus-out | close-press`
21
+ - `details.event?`: native event that triggered the change when available
22
+ - `details.cancel()`: prevents the open-state transition
23
+ - `details.isCanceled`: reflects cancellation state inside the callback
24
+
25
+ ## Anatomy
26
+
27
+ Import the component and compose its parts:
28
+
29
+ ```svelte
30
+ <Popover.Root>
31
+ <Popover.Trigger>
32
+ <button>Open</button>
33
+ </Popover.Trigger>
34
+ <Popover.Content>
35
+ <div>Content</div>
36
+ </Popover.Content>
37
+ </Popover.Root>
38
+ ```
39
+
40
+ - `Popover.Root`
41
+ - `Popover.Trigger` or `Popover.TriggerButton`
42
+ - `Popover.Content`
@@ -0,0 +1,36 @@
1
+ # Popover Content
2
+
3
+ ## API reference
4
+
5
+ ### Popover.Content
6
+
7
+ Name: `Popover.Content`
8
+ Description: Floating panel rendered in a portal. Supports context mode (`Popover.Root`) and standalone controlled mode.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | ------------------------------ | -------------------------------- | ----------- | ------------------------------------------------------------------------------ |
12
+ | `offset` | `number` | `8` | Main-axis offset from the anchor element. |
13
+ | `placement` | `ExtendedPlacement` | `'bottom'` | Preferred floating placement. |
14
+ | `shouldFlip` | `boolean` | `true` | Enables automatic fallback placement when space is limited. |
15
+ | `boundaryElement` | `Element \| null` | `null` | Optional boundary element for positioning constraints. |
16
+ | `children` | `Snippet` | `undefined` | Rendered popover panel content. |
17
+ | `class` | `string` | `''` | CSS class names for the panel element. |
18
+ | `isNonModal` | `boolean` | `false` | Disables modal behaviors (focus trap, scroll lock, outside aria hiding). |
19
+ | `shouldCloseOnInteractOutside` | `boolean` | `true` | Closes when interacting outside the panel. |
20
+ | `shouldCloseOnEscape` | `boolean` | `true` | Closes on Escape key press. |
21
+ | `shouldCloseOnBlur` | `boolean` | `undefined` | Closes on focus leaving trigger/content. Defaults to `true` in non-modal mode. |
22
+ | `open` | `boolean` | `undefined` | Controlled open state in standalone mode. |
23
+ | `triggerRef` | `HTMLElement \| null` | `null` | Trigger reference in standalone mode. |
24
+ | `onOpenChange` | `(open: boolean) => void` | `undefined` | Open-state callback in standalone mode. |
25
+ | `...restProps` | `HTMLAttributes<HTMLDivElement>` | `-` | Additional panel attributes. |
26
+
27
+ ## Styling state
28
+
29
+ `Popover.Content` exposes RAC-style data attributes that can drive CSS or Tailwind animation utilities:
30
+
31
+ - `data-state="open" | "closed"`
32
+ - `data-entering`
33
+ - `data-exiting`
34
+ - `data-placement="top" | "right" | "bottom" | "left"`
35
+
36
+ Exit animations keep the panel mounted until the element's own CSS transition or animation finishes. If no motion is defined, the panel unmounts immediately.