@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
@@ -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.
@@ -26,6 +30,8 @@
26
30
  disableFocusHandling?: boolean;
27
31
  /** Override the focused state. When provided, this value is used instead of internal focus tracking. */
28
32
  isFocusedOverride?: boolean;
33
+ /** Override the focus-visible presentation state. */
34
+ isFocusVisibleOverride?: boolean;
29
35
  /** Override the select behavior. When provided, called instead of default listbox selection. */
30
36
  onItemSelect?: (id: string | number, label: string) => void;
31
37
  /** Callback with resolved text value when mounted (from prop or rendered content). */
@@ -34,6 +40,8 @@
34
40
  scrollOnFocus?: boolean;
35
41
  /** Additional disabled state from parent. */
36
42
  isParentDisabled?: boolean;
43
+ /** Override the visual pressed state. When provided, this value is used instead of internal press tracking. */
44
+ pressed?: boolean;
37
45
  };
38
46
 
39
47
  let {
@@ -46,10 +54,12 @@
46
54
  customId,
47
55
  disableFocusHandling = false,
48
56
  isFocusedOverride,
57
+ isFocusVisibleOverride,
49
58
  onItemSelect,
50
59
  onResolvedTextValue,
51
60
  scrollOnFocus = false,
52
61
  isParentDisabled = false,
62
+ pressed: pressedOverride,
53
63
  ...restProps
54
64
  }: ListBoxItemProps = $props();
55
65
 
@@ -58,7 +68,10 @@
58
68
  let elementRef: HTMLElement;
59
69
  let isSelected = $state(false);
60
70
  let isFocused = $state(false);
71
+ let isFocusVisible = $state(false);
61
72
  let isHovered = $state(false);
73
+ let isPressed = $state(false);
74
+ let pressedKey: 'Enter' | 'Space' | null = $state(null);
62
75
 
63
76
  // Focus: use override if provided, otherwise use internal state
64
77
  const isFocusedComputed = $derived(
@@ -67,6 +80,14 @@
67
80
  const isDisabledComputed = $derived(
68
81
  disabled || listboxCtx.disabledIds.has(id) || isParentDisabled
69
82
  );
83
+ const isPressedComputed = $derived(
84
+ pressedOverride !== undefined
85
+ ? Boolean(pressedOverride) && !isDisabledComputed
86
+ : isPressed && !isDisabledComputed
87
+ );
88
+ const isFocusVisibleComputed = $derived(
89
+ isFocusVisibleOverride !== undefined ? isFocusVisibleOverride : isFocusVisible
90
+ );
70
91
 
71
92
  // ID: use custom if provided, otherwise generate
72
93
  const uniqueId = $derived(customId ?? `listbox-item-${id}`);
@@ -113,6 +134,18 @@
113
134
  }
114
135
  });
115
136
 
137
+ $effect(() => {
138
+ if (!isDisabledComputed) return;
139
+ clearPressedState();
140
+ isHovered = false;
141
+ isFocusVisible = false;
142
+ });
143
+
144
+ function clearPressedState() {
145
+ isPressed = false;
146
+ pressedKey = null;
147
+ }
148
+
116
149
  function handleClick() {
117
150
  if (isDisabledComputed) return;
118
151
 
@@ -128,12 +161,55 @@
128
161
  }
129
162
 
130
163
  function handleFocus() {
164
+ if (isDisabledComputed) return;
165
+ isFocusVisible = shouldShowFocusVisible(elementRef);
131
166
  if (!disableFocusHandling) {
132
167
  listboxCtx.setFocusedId(id);
133
168
  }
134
169
  }
135
170
 
136
- function handleBlur() {}
171
+ function handleBlur() {
172
+ isFocusVisible = false;
173
+ }
174
+
175
+ function handlePointerDown(event: PointerEvent) {
176
+ trackInteractionModality(event, elementRef);
177
+ isFocusVisible = false;
178
+
179
+ if (isDisabledComputed) {
180
+ event.preventDefault();
181
+ clearPressedState();
182
+ return;
183
+ }
184
+
185
+ if (event.button !== 0) return;
186
+ isPressed = true;
187
+ pressedKey = null;
188
+ }
189
+
190
+ function handlePointerUp(event: PointerEvent) {
191
+ if (event.button !== 0) return;
192
+ isPressed = false;
193
+ pressedKey = null;
194
+ }
195
+
196
+ function handlePointerCancel() {
197
+ clearPressedState();
198
+ }
199
+
200
+ function handlePointerEnter(event: PointerEvent) {
201
+ if (isDisabledComputed) return;
202
+
203
+ if ((event.buttons & 1) === 1 && pressedKey === null) {
204
+ isPressed = true;
205
+ }
206
+ }
207
+
208
+ function handlePointerLeave() {
209
+ if (pressedKey === null) {
210
+ isPressed = false;
211
+ }
212
+ }
137
213
 
138
214
  function handleMouseEnter() {
139
215
  if (!isDisabledComputed) {
@@ -143,17 +219,88 @@
143
219
 
144
220
  function handleMouseLeave() {
145
221
  isHovered = false;
222
+ if (pressedKey === null) {
223
+ isPressed = false;
224
+ }
146
225
  }
147
226
 
148
227
  // Keyboard is handled by parent container
149
- function handleKeydown() {}
228
+ function handleKeydown(event: KeyboardEvent) {
229
+ trackInteractionModality(event, elementRef);
230
+ if (isFocusedComputed) {
231
+ isFocusVisible = true;
232
+ }
233
+
234
+ const key =
235
+ event.key === 'Enter'
236
+ ? 'Enter'
237
+ : event.key === ' ' || event.key === 'Spacebar'
238
+ ? 'Space'
239
+ : null;
240
+
241
+ if (!key) return;
242
+
243
+ if (isDisabledComputed) {
244
+ event.preventDefault();
245
+ clearPressedState();
246
+ return;
247
+ }
248
+
249
+ if (event.repeat && isPressed && pressedKey === key) return;
250
+
251
+ isPressed = true;
252
+ pressedKey = key;
253
+ }
254
+
255
+ function handleKeyup(event: KeyboardEvent) {
256
+ const key =
257
+ event.key === 'Enter'
258
+ ? 'Enter'
259
+ : event.key === ' ' || event.key === 'Spacebar'
260
+ ? 'Space'
261
+ : null;
262
+
263
+ if (!key) return;
264
+
265
+ if (isDisabledComputed) {
266
+ event.preventDefault();
267
+ clearPressedState();
268
+ return;
269
+ }
270
+
271
+ if (pressedKey === key) {
272
+ clearPressedState();
273
+ }
274
+ }
275
+
150
276
  function handleMouseDown(event: MouseEvent) {
277
+ trackInteractionModality(event, elementRef);
278
+ isFocusVisible = false;
279
+
151
280
  // Prevent focus stealing when used in ComboBox (disableFocusHandling=true)
152
281
  // This keeps the focus on the input while allowing click selection
282
+ if (isDisabledComputed) {
283
+ event.preventDefault();
284
+ clearPressedState();
285
+ return;
286
+ }
287
+
288
+ if (event.button === 0) {
289
+ isPressed = true;
290
+ pressedKey = null;
291
+ }
292
+
153
293
  if (disableFocusHandling) {
154
294
  event.preventDefault();
155
295
  }
156
296
  }
297
+
298
+ function handleMouseUp(event: MouseEvent) {
299
+ if (event.button !== 0) return;
300
+ if (pressedKey === null) {
301
+ clearPressedState();
302
+ }
303
+ }
157
304
  </script>
158
305
 
159
306
  <div
@@ -170,10 +317,19 @@
170
317
  data-selected={isSelected || undefined}
171
318
  data-disabled={isDisabledComputed || undefined}
172
319
  data-focused={isFocusedComputed || undefined}
320
+ data-focus-visible={isFocusVisibleComputed || undefined}
173
321
  data-hovered={isHovered || undefined}
322
+ data-pressed={isPressedComputed || undefined}
323
+ onpointerdown={handlePointerDown}
324
+ onpointerup={handlePointerUp}
325
+ onpointercancel={handlePointerCancel}
326
+ onpointerenter={handlePointerEnter}
327
+ onpointerleave={handlePointerLeave}
174
328
  onmousedown={handleMouseDown}
329
+ onmouseup={handleMouseUp}
175
330
  onclick={handleClick}
176
331
  onkeydown={handleKeydown}
332
+ onkeyup={handleKeyup}
177
333
  onfocus={handleFocus}
178
334
  onblur={handleBlur}
179
335
  onmouseenter={handleMouseEnter}
@@ -20,6 +20,8 @@ type ListBoxItemProps = Omit<HTMLAttributes<HTMLDivElement>, 'id' | 'children'>
20
20
  disableFocusHandling?: boolean;
21
21
  /** Override the focused state. When provided, this value is used instead of internal focus tracking. */
22
22
  isFocusedOverride?: boolean;
23
+ /** Override the focus-visible presentation state. */
24
+ isFocusVisibleOverride?: boolean;
23
25
  /** Override the select behavior. When provided, called instead of default listbox selection. */
24
26
  onItemSelect?: (id: string | number, label: string) => void;
25
27
  /** Callback with resolved text value when mounted (from prop or rendered content). */
@@ -28,6 +30,8 @@ type ListBoxItemProps = Omit<HTMLAttributes<HTMLDivElement>, 'id' | 'children'>
28
30
  scrollOnFocus?: boolean;
29
31
  /** Additional disabled state from parent. */
30
32
  isParentDisabled?: boolean;
33
+ /** Override the visual pressed state. When provided, this value is used instead of internal press tracking. */
34
+ pressed?: boolean;
31
35
  };
32
36
  declare const ListboxItem: import("svelte").Component<ListBoxItemProps, {}, "">;
33
37
  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.