@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
@@ -6,7 +6,7 @@
6
6
 
7
7
  <ComboBox.Root bind:value={selected}>
8
8
  <ComboBox.Input placeholder="Search countries..." />
9
- <ComboBox.Button />
9
+ <ComboBox.Trigger />
10
10
 
11
11
  <ComboBox.Popover>
12
12
  <ComboBox.List emptyPlaceholder="No countries found">
@@ -11,7 +11,6 @@
11
11
  import { untrack, onDestroy, setContext } from 'svelte';
12
12
  import ListBoxItem from '../../listbox/item/listbox-item.svelte';
13
13
  import { useComboBoxContext } from '../root/context';
14
- import { cn } from '../../utils/cn';
15
14
 
16
15
  /**
17
16
  * ComboBox.ListBoxItem wraps ListBox.Item and provides ComboBox-specific behavior:
@@ -33,7 +32,7 @@
33
32
  | 'isParentDisabled'
34
33
  >;
35
34
 
36
- let { id, class: className, ...props }: ComboBoxListBoxItemProps = $props();
35
+ let { id, ...props }: ComboBoxListBoxItemProps = $props();
37
36
 
38
37
  const ctx = useComboBoxContext();
39
38
 
@@ -125,12 +124,5 @@
125
124
  onResolvedTextValue={handleResolvedTextValue}
126
125
  scrollOnFocus={true}
127
126
  isParentDisabled={ctx.isDisabled}
128
- class={cn(
129
- 'cursor-pointer px-3 py-2 transition-colors outline-none',
130
- 'data-focused:bg-accent data-hovered:bg-accent',
131
- 'data-selected:bg-primary/10 data-selected:font-medium',
132
- 'data-disabled:pointer-events-none data-disabled:opacity-50',
133
- className
134
- )}
135
127
  />
136
128
  {/if}
@@ -0,0 +1,15 @@
1
+ # ComboBox Item Indicator
2
+
3
+ ## API reference
4
+
5
+ ### ComboBox.ItemIndicator
6
+
7
+ Name: `ComboBox.ItemIndicator`
8
+ Description: Visual selection indicator rendered inside `ComboBox.Item`.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | -------------- | --------------------------------- | ------------ | ---------------------------------------------------- |
12
+ | `children` | `Snippet` | `check icon` | Custom indicator content. |
13
+ | `forceMount` | `boolean` | `false` | Forces rendering even when the item is not selected. |
14
+ | `class` | `string` | `undefined` | CSS class names for the indicator wrapper. |
15
+ | `...restProps` | `HTMLAttributes<HTMLSpanElement>` | `-` | Additional attributes passed to the wrapper span. |
@@ -1,13 +1,12 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte';
3
- import type { HTMLAttributes } from 'svelte/elements';
4
3
  import { getContext } from 'svelte';
5
- import { cn } from '../../utils/cn';
6
- import { useComboBoxContext } from '../root/context';
4
+ import type { HTMLAttributes } from 'svelte/elements';
7
5
  import {
8
6
  COMBOBOX_ITEM_CONTEXT_KEY,
9
7
  type ComboBoxItemContext
10
8
  } from '../item/combobox-listboxitem.svelte';
9
+ import { useComboBoxContext } from '../root/context';
11
10
 
12
11
  /**
13
12
  * ComboBox.ItemIndicator - Visual indicator shown when an item is selected.
@@ -22,12 +21,7 @@
22
21
  class?: string;
23
22
  } & Omit<HTMLAttributes<HTMLSpanElement>, 'class' | 'children'>;
24
23
 
25
- let {
26
- children,
27
- forceMount = false,
28
- class: className,
29
- ...restProps
30
- }: ComboBoxItemIndicatorProps = $props();
24
+ let { children, forceMount = false, ...restProps }: ComboBoxItemIndicatorProps = $props();
31
25
 
32
26
  const comboboxCtx = useComboBoxContext();
33
27
  const itemCtx = getContext<ComboBoxItemContext>(COMBOBOX_ITEM_CONTEXT_KEY);
@@ -37,12 +31,7 @@
37
31
  </script>
38
32
 
39
33
  {#if shouldRender}
40
- <span
41
- aria-hidden="true"
42
- data-state={isSelected ? 'checked' : 'unchecked'}
43
- class={cn('inline-flex items-center justify-center', className)}
44
- {...restProps}
45
- >
34
+ <span aria-hidden="true" data-state={isSelected ? 'checked' : 'unchecked'} {...restProps}>
46
35
  {#if children}
47
36
  {@render children()}
48
37
  {:else}
@@ -0,0 +1,27 @@
1
+ # ComboBox List
2
+
3
+ ## API reference
4
+
5
+ ### ComboBox.List
6
+
7
+ Name: `ComboBox.List`
8
+ Description: Listbox bridge for combobox options. It delegates selection state and mode to `ComboBox.Root`.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | ----------------- | --------------------------------------------------- | ----------- | ------------------------------------------------------------------------------- |
12
+ | `aria-label` | `string` | `'Options'` | Accessible label for the internal listbox. |
13
+ | `items` | `Iterable<T>` | `ctx.items` | Dynamic data source. If omitted, uses items from root context. |
14
+ | `children` | `Snippet<[T]> \| Snippet` | `undefined` | Dynamic item renderer or static list content. |
15
+ | `...listBoxProps` | `Omit<ComponentProps<ListBoxRoot>, internal props>` | `-` | Additional listbox props such as `class`, `emptyPlaceholder`, or `disabledIds`. |
16
+
17
+ ### Internally controlled props
18
+
19
+ Name: Controlled by `ComboBox.Root`
20
+ Description: The following values are set by `ComboBox.List` and should not be overridden directly.
21
+
22
+ | Prop | Type | Default | Description |
23
+ | --------------- | ------------------------ | -------------------------------- | ----------------------------------------------------- |
24
+ | `selectionMode` | `'single' \| 'multiple'` | `ctx.selectionMode` | Selection mode inherited from root. |
25
+ | `value` | `Set<string \| number>` | `ctx.selectedValue` | Current combobox selection state. |
26
+ | `onChange` | `(selection) => void` | `internal handler` | Delegates selected item handling to combobox context. |
27
+ | `id` | `string` | `combobox-listbox-${instanceId}` | Auto-generated listbox id for ARIA wiring. |
@@ -17,7 +17,7 @@ declare function $$render<T extends object = object>(): {
17
17
  } & {
18
18
  context?: ListBoxContext;
19
19
  element?: HTMLElement;
20
- }, "selectionMode" | "selectionBehavior" | "id" | "value" | "defaultValue" | "onChange" | "items" | "children" | "context" | "element"> & {
20
+ }, "children" | "value" | "id" | "element" | "selectionMode" | "selectionBehavior" | "defaultValue" | "onChange" | "items" | "context"> & {
21
21
  /** Optional items for dynamic rendering - overrides items from ComboBox context */
22
22
  items?: Iterable<T>;
23
23
  /** Content of the listbox. Receives item in dynamic mode. */
@@ -0,0 +1,13 @@
1
+ # ComboBox Popover
2
+
3
+ ## API reference
4
+
5
+ ### ComboBox.Popover
6
+
7
+ Name: `ComboBox.Popover`
8
+ Description: Floating container for combobox options. Internally composes `Popover.Root` and `Popover.Content` in non-modal mode.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | ---------- | --------- | ----------- | ------------------------------------------- |
12
+ | `class` | `string` | `''` | CSS class names for the floating panel. |
13
+ | `children` | `Snippet` | `undefined` | Popover content, typically `ComboBox.List`. |
@@ -2,6 +2,8 @@
2
2
  import type { Snippet } from 'svelte';
3
3
  import { useComboBoxContext } from '../root/context';
4
4
  import { Popover } from '../../popover';
5
+ import { focusWithModality, type InputModality } from '../../primitives/input-modality';
6
+ import type { PopoverOpenChangeDetails } from '../../popover/root/context';
5
7
 
6
8
  /**
7
9
  * ComboBox.Popover - Just the floating container wrapper.
@@ -15,39 +17,152 @@
15
17
  let { class: className = '', children }: ComboBoxPopoverProps = $props();
16
18
 
17
19
  const ctx = useComboBoxContext();
20
+ let restoreListboxMaxHeight: (() => void) | undefined;
21
+
22
+ function resolveFocusTarget(details?: PopoverOpenChangeDetails): HTMLElement | null {
23
+ const rawTarget = details?.event?.target;
24
+ if (!(rawTarget instanceof Node)) return null;
25
+ if (ctx.inputRef?.contains(rawTarget)) return null;
26
+ return rawTarget instanceof HTMLElement ? rawTarget : rawTarget.parentElement;
27
+ }
28
+
29
+ function handleOpenChange(open: boolean, details?: PopoverOpenChangeDetails) {
30
+ if (!open) {
31
+ // Cancel Popover.Root's close to prevent scheduleTriggerCloseFocus from
32
+ // setting stale data-focused on the trigger. The combobox passes triggerRef
33
+ // via prop (not Popover.Trigger), so Popover.Root never registers a
34
+ // blur-cleanup listener and any data-focused it sets persists forever.
35
+ //
36
+ // IMPORTANT: the actual state change is deferred to a microtask so that
37
+ // when Popover.Root's closePopover re-reads `isOpen` after the callback,
38
+ // the derived value is still `true` and the guard succeeds. A synchronous
39
+ // ctx.onOpenChange(false) would update the upstream signal immediately,
40
+ // making the derived `false` and bypassing the guard despite the cancel.
41
+ details?.cancel();
42
+
43
+ if (details?.reason === 'outside-press') {
44
+ const target = resolveFocusTarget(details);
45
+ queueMicrotask(() => {
46
+ ctx.onOpenChange(false);
47
+
48
+ if (target) {
49
+ focusWithModality(target, 'pointer' satisfies InputModality);
50
+ }
51
+
52
+ // If focus is still on the input (non-focusable target), blur it
53
+ // so focusWithin becomes false.
54
+ if (document.activeElement === ctx.inputRef) {
55
+ ctx.inputRef?.blur();
56
+ }
57
+ });
58
+ return;
59
+ }
60
+
61
+ queueMicrotask(() => {
62
+ ctx.onOpenChange(false);
63
+ });
64
+ return;
65
+ }
18
66
 
19
- function handleOpenChange(open: boolean) {
20
67
  ctx.onOpenChange(open);
21
68
  }
22
69
 
70
+ function handleMouseDown() {
71
+ ctx.markPopoverPointerDown();
72
+ }
73
+
74
+ function applyListboxViewportConstraint() {
75
+ const listbox = ctx.listboxRef;
76
+ if (!listbox) return;
77
+
78
+ const previousInlineMaxHeight = listbox.style.maxHeight;
79
+ const computedMaxHeight = getComputedStyle(listbox).maxHeight;
80
+
81
+ listbox.style.maxHeight =
82
+ computedMaxHeight && computedMaxHeight !== 'none'
83
+ ? `min(${computedMaxHeight}, var(--available-height))`
84
+ : 'var(--available-height)';
85
+
86
+ restoreListboxMaxHeight = () => {
87
+ listbox.style.maxHeight = previousInlineMaxHeight;
88
+ };
89
+ }
90
+
91
+ function canElementScrollInDirection(element: HTMLElement, deltaY: number) {
92
+ const isScrollingDown = deltaY > 0;
93
+ const isScrollingUp = deltaY < 0;
94
+ const canScrollDown = element.scrollTop < element.scrollHeight - element.clientHeight;
95
+ const canScrollUp = element.scrollTop > 0;
96
+
97
+ return (isScrollingDown && canScrollDown) || (isScrollingUp && canScrollUp);
98
+ }
99
+
100
+ function isScrollableElement(element: HTMLElement) {
101
+ const { overflowY } = getComputedStyle(element);
102
+ return (
103
+ ['auto', 'scroll', 'overlay'].includes(overflowY) &&
104
+ element.scrollHeight > element.clientHeight
105
+ );
106
+ }
107
+
108
+ function hasScrollableDescendantForWheel(
109
+ boundary: HTMLElement,
110
+ target: EventTarget | null,
111
+ deltaY: number
112
+ ) {
113
+ let current =
114
+ target instanceof HTMLElement ? target : target instanceof Node ? target.parentElement : null;
115
+
116
+ while (current) {
117
+ if (isScrollableElement(current) && canElementScrollInDirection(current, deltaY)) {
118
+ return true;
119
+ }
120
+
121
+ if (current === boundary) {
122
+ break;
123
+ }
124
+
125
+ current = current.parentElement;
126
+ }
127
+
128
+ return false;
129
+ }
130
+
23
131
  /**
24
132
  * Prevent wheel/scroll events from propagating to the page
25
133
  * This keeps the page from scrolling when scrolling over the popover
26
- * But allows internal scrolling when the popover has overflow
134
+ * But allows internal scrolling when either the popover or a descendant owns overflow
27
135
  */
28
136
  function handleWheel(event: WheelEvent) {
29
137
  const element = event.currentTarget as HTMLElement;
30
138
  if (!element) return;
31
139
 
32
- const { scrollTop, scrollHeight, clientHeight } = element;
33
- const isScrollingDown = event.deltaY > 0;
34
- const isScrollingUp = event.deltaY < 0;
35
-
36
- // Check if we can scroll in the direction of the wheel
37
- const canScrollDown = scrollTop < scrollHeight - clientHeight;
38
- const canScrollUp = scrollTop > 0;
39
-
40
- // If we can scroll internally in this direction, allow it
41
- if ((isScrollingDown && canScrollDown) || (isScrollingUp && canScrollUp)) {
42
- // Allow internal scroll, but stop propagation to page
43
- event.stopPropagation();
44
- } else {
45
- // Can't scroll internally, prevent both default and propagation
46
- event.preventDefault();
140
+ if (
141
+ hasScrollableDescendantForWheel(element, event.target, event.deltaY) ||
142
+ (isScrollableElement(element) && canElementScrollInDirection(element, event.deltaY))
143
+ ) {
47
144
  event.stopPropagation();
145
+ return;
48
146
  }
147
+
148
+ event.preventDefault();
149
+ event.stopPropagation();
49
150
  }
50
151
 
152
+ $effect(() => {
153
+ restoreListboxMaxHeight?.();
154
+ restoreListboxMaxHeight = undefined;
155
+
156
+ if (ctx.isOpen && ctx.listboxRef) {
157
+ applyListboxViewportConstraint();
158
+ }
159
+
160
+ return () => {
161
+ restoreListboxMaxHeight?.();
162
+ restoreListboxMaxHeight = undefined;
163
+ };
164
+ });
165
+
51
166
  $effect(() => {
52
167
  if (ctx.isOpen) {
53
168
  ctx.inputRef?.focus();
@@ -60,6 +175,7 @@
60
175
  isNonModal={true}
61
176
  placement="bottom-start"
62
177
  class={className}
178
+ onmousedown={handleMouseDown}
63
179
  onwheel={handleWheel}
64
180
  >
65
181
  {#if children}
@@ -0,0 +1,23 @@
1
+ <script lang="ts">
2
+ import ComboBox from '../index';
3
+
4
+ const items = Array.from({ length: 12 }, (_, index) => ({
5
+ id: `item-${index + 1}`,
6
+ name: `Item ${index + 1}`
7
+ }));
8
+ </script>
9
+
10
+ <ComboBox.Root trigger="press">
11
+ <ComboBox.Input placeholder="Search items..." />
12
+ <ComboBox.Trigger />
13
+
14
+ <ComboBox.Popover>
15
+ <ComboBox.List class="combobox-test-scroll-list" emptyPlaceholder="No items found">
16
+ {#each items as item (item.id)}
17
+ <ComboBox.Item id={item.id} textValue={item.name}>
18
+ {item.name}
19
+ </ComboBox.Item>
20
+ {/each}
21
+ </ComboBox.List>
22
+ </ComboBox.Popover>
23
+ </ComboBox.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 ComboboxScrollableListTest: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}, {}, string>;
17
+ type ComboboxScrollableListTest = InstanceType<typeof ComboboxScrollableListTest>;
18
+ export default ComboboxScrollableListTest;
@@ -0,0 +1,45 @@
1
+ # ComboBox Root
2
+
3
+ ## API reference
4
+
5
+ ### ComboBox.Root
6
+
7
+ Name: `ComboBox.Root`
8
+ Description: State container for combobox behavior, including open state, input value, selection logic, filtering, and keyboard interaction.
9
+
10
+ | Prop | Type | Default | Description |
11
+ | ------------------- | ------------------------------------------ | -------------------------------- | ----------------------------------------------------------- |
12
+ | `id` | `string` | `$props.id()` | Stable id used to derive internal ARIA ids. |
13
+ | `isDisabled` | `boolean` | `false` | Disables all user interaction. |
14
+ | `isPending` | `boolean` | `false` | Exposes busy async state on the root via `data-pending`. |
15
+ | `isReadOnly` | `boolean` | `false` | Keeps the component interactive but prevents value changes. |
16
+ | `value` | `string \| number \| (string \| number)[]` | `undefined` | Controlled selection value. Supports `bind:value`. |
17
+ | `defaultValue` | `string \| number \| (string \| number)[]` | `undefined` | Initial selection value in uncontrolled mode. |
18
+ | `inputValue` | `string` | `undefined` | Controlled input value. Supports `bind:inputValue`. |
19
+ | `defaultInputValue` | `string` | `''` | Initial input value in uncontrolled mode. |
20
+ | `selectionBehavior` | `'toggle' \| 'replace'` | `'toggle'` | Selection behavior when selecting an option. |
21
+ | `selectionMode` | `'single' \| 'multiple'` | `'single'` | Single-select or multi-select mode. |
22
+ | `closeOnSelect` | `boolean` | `single: true / multiple: false` | Controls whether the popover closes after selection. |
23
+ | `isOpen` | `boolean` | `undefined` | Controlled open state. Supports `bind:isOpen`. |
24
+ | `trigger` | `'focus' \| 'input' \| 'press'` | `'press'` | Opening strategy for the popover. |
25
+ | `onInputChange` | `(value: string) => void` | `undefined` | Called when the input value changes. |
26
+ | `onOpenChange` | `(open: boolean) => void` | `undefined` | Called when open state changes. |
27
+ | `onChange` | `(value) => void` | `undefined` | Called when selection changes. |
28
+ | `items` | `T[]` | `undefined` | Optional item collection for dynamic rendering. |
29
+ | `renderItem` | `Snippet<[T]>` | `undefined` | Optional item renderer for dynamic mode. |
30
+ | `children` | `Snippet` | `undefined` | Composed combobox parts. |
31
+ | `class` | `string` | `''` | CSS class names for the root group element. |
32
+ | `aria-label` | `string` | `undefined` | Accessible label for the combobox group. |
33
+ | `aria-labelledby` | `string` | `undefined` | Id of an external labeling element. |
34
+
35
+ ### Context utilities
36
+
37
+ Name: `context.ts` helpers
38
+ Description: Internal and advanced APIs for publishing and consuming combobox state.
39
+
40
+ | Prop | Type | Default | Description |
41
+ | -------------------- | ------------------------------------ | ------- | --------------------------------------------------- |
42
+ | `setComboBoxContext` | `(ctx: ComboBoxContext) => void` | `-` | Registers combobox context in root. |
43
+ | `getComboBoxContext` | `() => ComboBoxContext \| undefined` | `-` | Returns context if available. |
44
+ | `useComboBoxContext` | `() => ComboBoxContext` | `-` | Returns context and throws outside `ComboBox.Root`. |
45
+ | `ComboBoxContext` | `type` | `-` | Full context contract for state and actions. |
@@ -47,7 +47,7 @@
47
47
  {/snippet}
48
48
  </ComboBox.Tags>
49
49
  <ComboBox.Input placeholder="Search fruits..." />
50
- <ComboBox.Button>▼</ComboBox.Button>
50
+ <ComboBox.Trigger>▼</ComboBox.Trigger>
51
51
  </div>
52
52
 
53
53
  <ComboBox.Popover>
@@ -6,7 +6,7 @@
6
6
 
7
7
  <ComboBox.Root bind:value={selected}>
8
8
  <ComboBox.Input placeholder="Search codes..." />
9
- <ComboBox.Button />
9
+ <ComboBox.Trigger />
10
10
 
11
11
  <ComboBox.Popover>
12
12
  <ComboBox.List emptyPlaceholder="No codes found">
@@ -4,11 +4,20 @@
4
4
  type Props = {
5
5
  id?: string;
6
6
  isDisabled?: boolean;
7
+ isPending?: boolean;
7
8
  isReadOnly?: boolean;
8
9
  trigger?: 'focus' | 'input' | 'press';
9
10
  };
10
11
 
11
- let { id, isDisabled = false, isReadOnly = false, trigger = 'press' }: Props = $props();
12
+ let {
13
+ id,
14
+ isDisabled = false,
15
+ isPending = false,
16
+ isReadOnly = false,
17
+ trigger = 'press'
18
+ }: Props = $props();
19
+
20
+ let selectedValue = $state<string | number | undefined>();
12
21
 
13
22
  const countries = [
14
23
  { id: 'ar', name: 'Argentina' },
@@ -24,9 +33,9 @@
24
33
  ];
25
34
  </script>
26
35
 
27
- <ComboBox.Root {id} {isDisabled} {isReadOnly} {trigger}>
36
+ <ComboBox.Root {id} {isDisabled} {isPending} {isReadOnly} {trigger} bind:value={selectedValue}>
28
37
  <ComboBox.Input placeholder="Search countries..." />
29
- <ComboBox.Button />
38
+ <ComboBox.Trigger />
30
39
 
31
40
  <ComboBox.Popover>
32
41
  <ComboBox.List emptyPlaceholder="No countries found">
@@ -39,5 +48,9 @@
39
48
  </ComboBox.Popover>
40
49
  </ComboBox.Root>
41
50
 
51
+ <output data-selected-value
52
+ >{selectedValue === undefined ? 'undefined' : String(selectedValue)}</output
53
+ >
54
+
42
55
  <!-- Button outside the combobox for testing blur behavior -->
43
56
  <button type="button" data-testid="outside-button">Outside</button>
@@ -1,6 +1,7 @@
1
1
  type Props = {
2
2
  id?: string;
3
3
  isDisabled?: boolean;
4
+ isPending?: boolean;
4
5
  isReadOnly?: boolean;
5
6
  trigger?: 'focus' | 'input' | 'press';
6
7
  };