@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
@@ -0,0 +1,76 @@
1
+ <script lang="ts">
2
+ import { Button } from '../index';
3
+
4
+ type Props = {
5
+ isDisabled?: boolean;
6
+ isPending?: boolean;
7
+ type?: 'button' | 'submit' | 'reset';
8
+ ariaLabel?: string;
9
+ onMouseEnter?: (event: MouseEvent) => void;
10
+ onFocus?: (event: FocusEvent) => void;
11
+ };
12
+
13
+ let {
14
+ isDisabled = false,
15
+ isPending = false,
16
+ type = 'button',
17
+ ariaLabel = 'Save',
18
+ onMouseEnter,
19
+ onFocus
20
+ }: Props = $props();
21
+
22
+ let pendingOverride = $state<boolean | null>(null);
23
+ let clickCount = $state(0);
24
+ let submitCount = $state(0);
25
+ const pending = $derived(pendingOverride ?? isPending);
26
+
27
+ function handleClick() {
28
+ clickCount += 1;
29
+ }
30
+
31
+ function handleSubmit(event: SubmitEvent) {
32
+ event.preventDefault();
33
+ submitCount += 1;
34
+ }
35
+ </script>
36
+
37
+ <form onsubmit={handleSubmit}>
38
+ <label for="name">Name</label>
39
+ <input id="name" type="text" />
40
+
41
+ <Button.Root
42
+ {type}
43
+ {isDisabled}
44
+ isPending={pending}
45
+ onclick={handleClick}
46
+ onmouseenter={onMouseEnter}
47
+ onfocus={onFocus}
48
+ aria-label={ariaLabel}
49
+ class="inline-flex items-center"
50
+ >
51
+ {#snippet children(state)}
52
+ <span data-button-label>{pending ? 'Saving' : 'Save'}</span>
53
+ <span
54
+ data-render-state="true"
55
+ data-render-pressed={state.isPressed || undefined}
56
+ data-render-hovered={state.isHovered || undefined}
57
+ data-render-pending={state.isPending || undefined}
58
+ data-render-focused={state.isFocused || undefined}
59
+ data-render-focus-visible={state.isFocusVisible || undefined}
60
+ >
61
+ {state.isPressed ? 'pressed' : state.isPending ? 'pending' : 'idle'}
62
+ </span>
63
+ {/snippet}
64
+ </Button.Root>
65
+
66
+ <button type="button" data-set-pending onclick={() => (pendingOverride = true)}
67
+ >Set pending</button
68
+ >
69
+ <button type="button" data-clear-pending onclick={() => (pendingOverride = false)}>
70
+ Clear pending
71
+ </button>
72
+
73
+ <output data-click-count>{String(clickCount)}</output>
74
+ <output data-submit-count>{String(submitCount)}</output>
75
+ <output data-pending-state>{String(pending)}</output>
76
+ </form>
@@ -0,0 +1,11 @@
1
+ type Props = {
2
+ isDisabled?: boolean;
3
+ isPending?: boolean;
4
+ type?: 'button' | 'submit' | 'reset';
5
+ ariaLabel?: string;
6
+ onMouseEnter?: (event: MouseEvent) => void;
7
+ onFocus?: (event: FocusEvent) => void;
8
+ };
9
+ declare const ButtonTest: import("svelte").Component<Props, {}, "">;
10
+ type ButtonTest = ReturnType<typeof ButtonTest>;
11
+ export default ButtonTest;
@@ -0,0 +1,66 @@
1
+ # Calendar
2
+
3
+ ## Description
4
+
5
+ `Calendar` provides single-date and range selection (ISO `YYYY-MM-DD`) with keyboard navigation, controlled/uncontrolled state, and part-based composition.
6
+
7
+ ## Usage Guidelines
8
+
9
+ - Use `Calendar.Root` as the stateful container.
10
+ - `selectionMode` supports `'single'` (default) and `'range'`.
11
+ - In controlled mode, use `value` with `onChange`; in uncontrolled mode, use `defaultValue`.
12
+ - In `single` mode, `value/defaultValue` is `YYYY-MM-DD`.
13
+ - In `range` mode, `value/defaultValue` is `{ start?: 'YYYY-MM-DD', end?: 'YYYY-MM-DD' }`.
14
+ - `visibleMonths` controls how many months are rendered and how paging behaves.
15
+ - `showOutsideDays` controls whether days outside the current month are shown; default is `false`.
16
+ - `isDateUnavailable` marks specific days as non-focusable and non-selectable.
17
+ - Use `LocaleProvider` to localize month/day labels and first day of week.
18
+ - Keyboard navigation uses `Arrow` keys for day/week movement and `Home/End` for month edges.
19
+
20
+ ## Accessibility
21
+
22
+ - Each `grid` exposes an accessible name using the visible month heading.
23
+ - Today exposes `aria-current="date"`.
24
+ - Unavailable cells expose `aria-disabled="true"`. According to ARIA Grid specifications, disabled cells remain focusable so that screen reader users can spatially navigate and discover them, but they are not selectable.
25
+
26
+ ### Keyboard
27
+
28
+ - `ArrowRight/ArrowLeft`: move focus by +/- 1 day.
29
+ - `ArrowDown/ArrowUp`: move focus by +/- 7 days.
30
+ - `Home/End`: move focus to first/last day of month.
31
+ - `PageUp/PageDown`: move to previous/next month while trying to preserve day number.
32
+ - `Enter` or `Space`: select the focused date (if selectable).
33
+ - In `selectionMode="range"`, `Arrow/Page/Home/End` extend preview range while a range is pending.
34
+ - In `selectionMode="range"`, `Enter` or `Space` confirm the preview when pending.
35
+
36
+ ## Internal Notes
37
+
38
+ - `PageUp/PageDown` try to preserve the day when crossing months; if no focusable target exists in the destination month and a range is pending, focus falls back to the reachable edge in the current month (aligned with `Home/End` behavior).
39
+ - In `selectionMode="range"`, the first click starts the range (`start`) and the second click confirms it (`end`), with automatic normalization for reversed selection order.
40
+ - In `selectionMode="range"`, hover updates a live preview before confirmation.
41
+
42
+ ## Anatomy
43
+
44
+ - `Calendar.Root`
45
+ - `Calendar.TriggerPrevious`
46
+ - `Calendar.Heading`
47
+ - `Calendar.TriggerNext`
48
+ - `Calendar.Grid`
49
+ - `Calendar.GridHeader`
50
+ - `Calendar.HeaderCell`
51
+ - `Calendar.GridBody`
52
+ - `Calendar.BodyCell`
53
+
54
+ ```svelte
55
+ <LocaleProvider locale="es-ES">
56
+ <Calendar.Root>
57
+ <Calendar.TriggerPrevious />
58
+ <Calendar.Heading />
59
+ <Calendar.TriggerNext />
60
+ <Calendar.Grid>
61
+ <Calendar.GridHeader />
62
+ <Calendar.GridBody />
63
+ </Calendar.Grid>
64
+ </Calendar.Root>
65
+ </LocaleProvider>
66
+ ```
@@ -0,0 +1,23 @@
1
+ # Calendar TODO
2
+
3
+ ## Goal
4
+
5
+ Track Calendar work with a single mandatory TODO format.
6
+
7
+ ## Backlog
8
+
9
+ - [x] [M][P0][Area: Core API][Owner: Unassigned][Target: Done] Implement controlled/uncontrolled root (`value`, `defaultValue`, `onChange`).
10
+ - [x] [M][P0][Area: Navigation][Owner: Unassigned][Target: Done] Implement paginated navigation via `visibleMonths`.
11
+ - [x] [M][P0][Area: Selection][Owner: Unassigned][Target: Done] Implement single-date selection.
12
+ - [x] [M][P0][Area: State][Owner: Unassigned][Target: Done] Support `isDisabled`, `isReadOnly`, and `isDateUnavailable`.
13
+ - [x] [M][P0][Area: Accessibility][Owner: Unassigned][Target: Done] Deliver keyboard-accessible grid baseline.
14
+ - [x] [M][P0][Area: Delivery][Owner: Unassigned][Target: Done] Ship exports, docs page, and initial tests.
15
+ - [x] [S][P1][Area: Selection][Owner: Unassigned][Target: Done] Implement range selection.
16
+ - [ ] [S][P1][Area: Selection][Owner: Unassigned][Target: TBD] Implement multi-select mode.
17
+ - [ ] [C][P2][Area: Internationalization][Owner: Unassigned][Target: TBD] Add non-Gregorian calendar configuration.
18
+ - [ ] [S][P1][Area: Availability API][Owner: Unassigned][Target: TBD] Add advanced unavailable API (set/ranges/rules).
19
+ - [ ] [M][P0][Area: Availability API][Owner: Unassigned][Target: TBD] Keep backward compatibility with `isDateUnavailable`.
20
+ - [ ] [M][P0][Area: Performance][Owner: Unassigned][Target: TBD] Compile unavailability config to cached predicate with proper invalidation.
21
+ - [ ] [M][P0][Area: Testing][Owner: Unassigned][Target: TBD] Add coverage for unavailable parser, composition rules, and interaction flows.
22
+ - [ ] [S][P1][Area: Documentation][Owner: Unassigned][Target: TBD] Document advanced unavailable API with migration examples.
23
+ - [ ] [C][P2][Area: Demo][Owner: Unassigned][Target: TBD] Extend docs demo with unavailable strategy examples.
@@ -0,0 +1,15 @@
1
+ # Calendar BodyCell
2
+
3
+ ## API reference
4
+
5
+ ### Calendar.BodyCell
6
+
7
+ Name: `Calendar.BodyCell`
8
+ Description: Wrapper part for date grid cells inside `Calendar.GridBody`.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | -------------- | -------------------------------------- | ----------- | --------------------------------------------------------------- |
12
+ | `date` | `string` | `required` | Calendar date value rendered by the cell (`YYYY-MM-DD`). |
13
+ | `children` | `Snippet<[string]>` | `undefined` | Optional custom renderer receiving the day label text. |
14
+ | `class` | `string` | `''` | CSS class names for the inner gridcell element. |
15
+ | `...restProps` | `HTMLAttributes<HTMLTableCellElement>` | `-` | Additional attributes forwarded to the outer table cell (`td`). |
@@ -0,0 +1,230 @@
1
+ <script module lang="ts">
2
+ const ariaDateFormatterCache: Record<string, Intl.DateTimeFormat> = Object.create(null);
3
+
4
+ function getAriaDateFormatter(locale: string): Intl.DateTimeFormat {
5
+ let formatter = ariaDateFormatterCache[locale];
6
+ if (!formatter) {
7
+ formatter = new Intl.DateTimeFormat(locale, {
8
+ dateStyle: 'full',
9
+ timeZone: 'UTC'
10
+ });
11
+ ariaDateFormatterCache[locale] = formatter;
12
+ }
13
+ return formatter;
14
+ }
15
+
16
+ function formatAriaDateLabel(locale: string, date: string): string {
17
+ const [yearText, monthText, dayText] = date.split('-');
18
+ const year = Number(yearText);
19
+ const month = Number(monthText);
20
+ const day = Number(dayText);
21
+
22
+ if (!Number.isInteger(year) || !Number.isInteger(month) || !Number.isInteger(day)) {
23
+ return date;
24
+ }
25
+
26
+ const parsed = new Date(Date.UTC(year, month - 1, day));
27
+ if (Number.isNaN(parsed.getTime())) return date;
28
+
29
+ return getAriaDateFormatter(locale).format(parsed);
30
+ }
31
+ </script>
32
+
33
+ <script lang="ts">
34
+ import type { Snippet } from 'svelte';
35
+ import type { HTMLAttributes } from 'svelte/elements';
36
+ import { useCalendarContext } from '../root/context';
37
+ import { getCalendarMonthIndex } from '../grid/month-scope';
38
+ import { formatCalendarDate, getTodayUtcDate, parseCalendarDate } from '../root/date-utils';
39
+ import {
40
+ shouldShowFocusVisible,
41
+ trackInteractionModality
42
+ } from '../../primitives/input-modality';
43
+
44
+ type CalendarBodyCellProps = Omit<HTMLAttributes<HTMLTableCellElement>, 'children'> & {
45
+ date: string;
46
+ children?: Snippet<[string]>;
47
+ };
48
+
49
+ let { date, children, class: className = '', ...restProps }: CalendarBodyCellProps = $props();
50
+
51
+ const calendar = useCalendarContext();
52
+ const layoutVersion = calendar.layoutVersion;
53
+ const selectionVersion = calendar.selectionVersion;
54
+ const monthIndex = getCalendarMonthIndex();
55
+
56
+ const parsedDate = $derived(parseCalendarDate(date));
57
+ const dayLabel = $derived(parsedDate ? String(parsedDate.getUTCDate()) : '');
58
+ const isSelected = $derived.by(() => {
59
+ void $layoutVersion;
60
+ void $selectionVersion;
61
+ if (calendar.isDisabled || calendar.isReadOnly) return false;
62
+ return calendar.isSelected(date);
63
+ });
64
+ const isRangeStart = $derived.by(() => {
65
+ void $layoutVersion;
66
+ void $selectionVersion;
67
+ if (calendar.isDisabled || calendar.isReadOnly) return false;
68
+ return calendar.isRangeStart(date);
69
+ });
70
+ const isRangeEnd = $derived.by(() => {
71
+ void $layoutVersion;
72
+ void $selectionVersion;
73
+ if (calendar.isDisabled || calendar.isReadOnly) return false;
74
+ return calendar.isRangeEnd(date);
75
+ });
76
+ const isInRange = $derived.by(() => {
77
+ void $layoutVersion;
78
+ void $selectionVersion;
79
+ if (calendar.isDisabled || calendar.isReadOnly) return false;
80
+ return calendar.isInRange(date);
81
+ });
82
+ const isFocused = $derived.by(() => {
83
+ void $selectionVersion;
84
+ return calendar.focusedValue === date;
85
+ });
86
+ const isFocusVisible = $derived.by(() => {
87
+ void $selectionVersion;
88
+ return calendar.focusVisible;
89
+ });
90
+ const isVisuallyFocused = $derived(isFocused && isFocusVisible);
91
+ const isDisabled = $derived.by(() => {
92
+ void $layoutVersion;
93
+ void $selectionVersion;
94
+ return calendar.isDateDisabled(date);
95
+ });
96
+ const isUnavailable = $derived.by(() => {
97
+ void $layoutVersion;
98
+ return calendar.isDateUnavailable(date);
99
+ });
100
+ const isAriaDisabled = $derived(isDisabled || isUnavailable);
101
+ const isOutsideMonth = $derived.by(() => {
102
+ void $layoutVersion;
103
+ return calendar.isOutsideVisibleRange(date, monthIndex);
104
+ });
105
+ const showOutsideDays = $derived.by(() => {
106
+ void $layoutVersion;
107
+ return calendar.showOutsideDays;
108
+ });
109
+ const hidesOutsideDay = $derived(isOutsideMonth && !showOutsideDays);
110
+ const isSelectionDisabled = $derived(isDisabled || hidesOutsideDay);
111
+ const isFocusDisabled = $derived(calendar.isDisabled || hidesOutsideDay);
112
+ const todayDate = formatCalendarDate(getTodayUtcDate());
113
+ const isToday = $derived(date === todayDate);
114
+ const ariaDateLabel = $derived.by(() => {
115
+ void $layoutVersion;
116
+ return formatAriaDateLabel(calendar.locale, date);
117
+ });
118
+
119
+ let gridCellElement = $state<HTMLDivElement | undefined>(undefined);
120
+
121
+ $effect(() => {
122
+ if (!isFocused || isFocusDisabled) return;
123
+ if (!gridCellElement) return;
124
+ if (document.activeElement === gridCellElement) return;
125
+ gridCellElement.focus();
126
+ });
127
+
128
+ $effect(() => {
129
+ if (!isFocusDisabled) return;
130
+ if (!gridCellElement) return;
131
+ if (document.activeElement !== gridCellElement) return;
132
+ gridCellElement.blur();
133
+ });
134
+
135
+ function handleClick() {
136
+ if (isFocusDisabled) return;
137
+ calendar.setFocusedValue(date);
138
+ if (!isSelectionDisabled) {
139
+ calendar.selectDate(date);
140
+ }
141
+ }
142
+
143
+ function handleFocus() {
144
+ if (isFocusDisabled) return;
145
+ calendar.setFocusedValue(date);
146
+ calendar.setFocusVisible(shouldShowFocusVisible(gridCellElement ?? null));
147
+ }
148
+
149
+ function handleMousedown(event: MouseEvent) {
150
+ trackInteractionModality(event, gridCellElement ?? null);
151
+ calendar.setFocusVisible(false);
152
+ if (isSelectionDisabled) {
153
+ event.preventDefault();
154
+ }
155
+ }
156
+
157
+ function handleMouseenter() {
158
+ if (isFocusDisabled) return;
159
+ calendar.setHoveredValue(date);
160
+ }
161
+
162
+ function handleMouseleave() {
163
+ if (isFocusDisabled) return;
164
+ calendar.setHoveredValue(undefined);
165
+ }
166
+
167
+ function handleKeydown(event: KeyboardEvent) {
168
+ if (isFocusDisabled) return;
169
+ trackInteractionModality(event, gridCellElement ?? null);
170
+ calendar.handleCellKeydown(event, date);
171
+ }
172
+ </script>
173
+
174
+ <td
175
+ role="presentation"
176
+ data-selected={isSelected || undefined}
177
+ data-focused={isFocused || undefined}
178
+ data-focus-visible={isVisuallyFocused || undefined}
179
+ data-disabled={isAriaDisabled || undefined}
180
+ data-unavailable={isUnavailable || undefined}
181
+ data-outside-month={isOutsideMonth || undefined}
182
+ data-range-start={isRangeStart || undefined}
183
+ data-range-end={isRangeEnd || undefined}
184
+ data-in-range={isInRange || undefined}
185
+ {...restProps}
186
+ >
187
+ {#if hidesOutsideDay}
188
+ <div
189
+ class={className}
190
+ role="presentation"
191
+ data-disabled={true}
192
+ data-outside-month={true}
193
+ aria-hidden="true"
194
+ ></div>
195
+ {:else}
196
+ <div
197
+ bind:this={gridCellElement}
198
+ class={className}
199
+ role="gridcell"
200
+ tabindex={isFocusDisabled ? -1 : isFocused ? 0 : -1}
201
+ data-selected={isSelected || undefined}
202
+ data-focused={isFocused || undefined}
203
+ data-focus-visible={isVisuallyFocused || undefined}
204
+ data-disabled={isAriaDisabled || hidesOutsideDay || undefined}
205
+ data-unavailable={isUnavailable || undefined}
206
+ data-outside-month={isOutsideMonth || undefined}
207
+ data-range-start={isRangeStart || undefined}
208
+ data-range-end={isRangeEnd || undefined}
209
+ data-in-range={isInRange || undefined}
210
+ data-date={date}
211
+ aria-selected={isSelected}
212
+ aria-disabled={isAriaDisabled || hidesOutsideDay || undefined}
213
+ aria-current={isToday ? 'date' : undefined}
214
+ aria-label={ariaDateLabel}
215
+ style={isVisuallyFocused ? undefined : 'outline: none;'}
216
+ onmousedown={handleMousedown}
217
+ onmouseenter={handleMouseenter}
218
+ onmouseleave={handleMouseleave}
219
+ onclick={handleClick}
220
+ onfocus={handleFocus}
221
+ onkeydown={handleKeydown}
222
+ >
223
+ {#if children}
224
+ {@render children(date)}
225
+ {:else}
226
+ {dayLabel}
227
+ {/if}
228
+ </div>
229
+ {/if}
230
+ </td>
@@ -0,0 +1,9 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ type CalendarBodyCellProps = Omit<HTMLAttributes<HTMLTableCellElement>, 'children'> & {
4
+ date: string;
5
+ children?: Snippet<[string]>;
6
+ };
7
+ declare const CalendarBodyCell: import("svelte").Component<CalendarBodyCellProps, {}, "">;
8
+ type CalendarBodyCell = ReturnType<typeof CalendarBodyCell>;
9
+ export default CalendarBodyCell;
@@ -0,0 +1,13 @@
1
+ # Calendar Grid
2
+
3
+ ## API reference
4
+
5
+ ### Calendar.Grid
6
+
7
+ Name: `Calendar.Grid`
8
+ Description: Calendar month table container rendered by `Calendar.Root`.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | ---------- | --------- | ----------- | --------------------------------------------- |
12
+ | `children` | `Snippet` | `undefined` | Optional custom month-grid content. |
13
+ | `class` | `string` | `''` | CSS class names for the outer grid container. |
@@ -0,0 +1,16 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { setCalendarMonthIndex } from './month-scope';
4
+
5
+ type CalendarGridMonthScopeProps = {
6
+ monthIndex: number;
7
+ children?: Snippet;
8
+ };
9
+
10
+ const props: CalendarGridMonthScopeProps = $props();
11
+ setCalendarMonthIndex(props.monthIndex);
12
+ </script>
13
+
14
+ {#if props.children}
15
+ {@render props.children()}
16
+ {/if}
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ type CalendarGridMonthScopeProps = {
3
+ monthIndex: number;
4
+ children?: Snippet;
5
+ };
6
+ declare const CalendarGridMonthScope: import("svelte").Component<CalendarGridMonthScopeProps, {}, "">;
7
+ type CalendarGridMonthScope = ReturnType<typeof CalendarGridMonthScope>;
8
+ export default CalendarGridMonthScope;
@@ -0,0 +1,45 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { useCalendarContext } from '../root/context';
4
+ import CalendarGridMonthScope from './calendar-grid-month-scope.svelte';
5
+
6
+ type CalendarGridProps = {
7
+ children?: Snippet;
8
+ class?: string;
9
+ };
10
+
11
+ let { children, class: className = '' }: CalendarGridProps = $props();
12
+ const calendar = useCalendarContext();
13
+ const layoutVersion = calendar.layoutVersion;
14
+ const months = $derived.by(() => {
15
+ void $layoutVersion;
16
+ return calendar.months;
17
+ });
18
+ const selectionMode = $derived.by(() => {
19
+ void $layoutVersion;
20
+ return calendar.selectionMode;
21
+ });
22
+ const isReadOnly = $derived.by(() => {
23
+ void $layoutVersion;
24
+ return calendar.isReadOnly;
25
+ });
26
+ </script>
27
+
28
+ <div class={className} data-calendar-grid>
29
+ {#each months as month (month.monthIndex)}
30
+ <div role="group" aria-label={month.heading} data-calendar-month={month.monthIndex}>
31
+ <CalendarGridMonthScope monthIndex={month.monthIndex}>
32
+ <table
33
+ role="grid"
34
+ aria-label={month.heading}
35
+ aria-readonly={isReadOnly || undefined}
36
+ aria-multiselectable={selectionMode === 'range' ? true : undefined}
37
+ >
38
+ {#if children}
39
+ {@render children()}
40
+ {/if}
41
+ </table>
42
+ </CalendarGridMonthScope>
43
+ </div>
44
+ {/each}
45
+ </div>
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ type CalendarGridProps = {
3
+ children?: Snippet;
4
+ class?: string;
5
+ };
6
+ declare const CalendarGrid: import("svelte").Component<CalendarGridProps, {}, "">;
7
+ type CalendarGrid = ReturnType<typeof CalendarGrid>;
8
+ export default CalendarGrid;
@@ -0,0 +1,2 @@
1
+ export declare function setCalendarMonthIndex(monthIndex: number): void;
2
+ export declare function getCalendarMonthIndex(): number;
@@ -0,0 +1,8 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ const MONTH_SCOPE_KEY = Symbol('calendar-month-scope');
3
+ export function setCalendarMonthIndex(monthIndex) {
4
+ setContext(MONTH_SCOPE_KEY, monthIndex);
5
+ }
6
+ export function getCalendarMonthIndex() {
7
+ return getContext(MONTH_SCOPE_KEY) ?? 0;
8
+ }
@@ -0,0 +1,13 @@
1
+ # Calendar GridBody
2
+
3
+ ## API reference
4
+
5
+ ### Calendar.GridBody
6
+
7
+ Name: `Calendar.GridBody`
8
+ Description: TBody container for week rows in `Calendar.Grid`.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | ---------- | ------------------- | ----------- | -------------------------------------------------------- |
12
+ | `children` | `Snippet<[string]>` | `undefined` | Optional custom renderer receiving each day date string. |
13
+ | `class` | `string` | `''` | CSS class names for the `tbody` element. |
@@ -0,0 +1,13 @@
1
+ <script lang="ts">
2
+ import Calendar from '../index';
3
+ </script>
4
+
5
+ <Calendar.Root defaultValue="2026-02-10" aria-label="Body custom test">
6
+ <Calendar.Grid>
7
+ <Calendar.GridBody>
8
+ {#snippet children(date)}
9
+ <Calendar.BodyCell {date}>{date}</Calendar.BodyCell>
10
+ {/snippet}
11
+ </Calendar.GridBody>
12
+ </Calendar.Grid>
13
+ </Calendar.Root>
@@ -0,0 +1,18 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const CalendarGridBodyCustomTest: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}, {}, string>;
17
+ type CalendarGridBodyCustomTest = InstanceType<typeof CalendarGridBodyCustomTest>;
18
+ export default CalendarGridBodyCustomTest;
@@ -0,0 +1,36 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { useCalendarContext } from '../root/context';
4
+ import { getCalendarMonthIndex } from '../grid/month-scope';
5
+ import CalendarBodyCell from '../body-cell/calendar-body-cell.svelte';
6
+
7
+ type CalendarGridBodyProps = {
8
+ children?: Snippet<[string]>;
9
+ class?: string;
10
+ };
11
+
12
+ let { children, class: className = '' }: CalendarGridBodyProps = $props();
13
+
14
+ const calendar = useCalendarContext();
15
+ const layoutVersion = calendar.layoutVersion;
16
+ const monthIndex = getCalendarMonthIndex();
17
+ const month = $derived.by(() => {
18
+ void $layoutVersion;
19
+ return calendar.months[monthIndex];
20
+ });
21
+ const weeks = $derived(month?.weeks ?? []);
22
+ </script>
23
+
24
+ <tbody class={className}>
25
+ {#each weeks as week, weekIndex (weekIndex)}
26
+ <tr data-week={weekIndex}>
27
+ {#each week as day (day.date)}
28
+ {#if children}
29
+ {@render children(day.date)}
30
+ {:else}
31
+ <CalendarBodyCell date={day.date} />
32
+ {/if}
33
+ {/each}
34
+ </tr>
35
+ {/each}
36
+ </tbody>
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ type CalendarGridBodyProps = {
3
+ children?: Snippet<[string]>;
4
+ class?: string;
5
+ };
6
+ declare const CalendarGridBody: import("svelte").Component<CalendarGridBodyProps, {}, "">;
7
+ type CalendarGridBody = ReturnType<typeof CalendarGridBody>;
8
+ export default CalendarGridBody;
@@ -0,0 +1,13 @@
1
+ # Calendar GridHeader
2
+
3
+ ## API reference
4
+
5
+ ### Calendar.GridHeader
6
+
7
+ Name: `Calendar.GridHeader`
8
+ Description: Header row group for weekday labels in `Calendar.Grid`.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | ---------- | ------------------- | ----------- | ---------------------------------------------------------------- |
12
+ | `children` | `Snippet<[string]>` | `undefined` | Optional custom renderer receiving each localized weekday label. |
13
+ | `class` | `string` | `''` | CSS class names for the `thead` element. |
@@ -0,0 +1,13 @@
1
+ <script lang="ts">
2
+ import Calendar from '../index';
3
+ </script>
4
+
5
+ <Calendar.Root defaultValue="2026-02-10" aria-label="Header custom test">
6
+ <Calendar.Grid>
7
+ <Calendar.GridHeader>
8
+ {#snippet children(day)}
9
+ <Calendar.HeaderCell>DAY-{day}</Calendar.HeaderCell>
10
+ {/snippet}
11
+ </Calendar.GridHeader>
12
+ </Calendar.Grid>
13
+ </Calendar.Root>