bits-ui 1.8.0 → 2.2.0

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 (317) hide show
  1. package/dist/bits/accordion/accordion.svelte.d.ts +56 -53
  2. package/dist/bits/accordion/accordion.svelte.js +78 -89
  3. package/dist/bits/accordion/components/accordion-content.svelte +5 -3
  4. package/dist/bits/accordion/components/accordion-header.svelte +4 -2
  5. package/dist/bits/accordion/components/accordion-item.svelte +6 -3
  6. package/dist/bits/accordion/components/accordion-trigger.svelte +4 -2
  7. package/dist/bits/accordion/components/accordion.svelte +4 -2
  8. package/dist/bits/alert-dialog/components/alert-dialog-action.svelte +4 -2
  9. package/dist/bits/alert-dialog/components/alert-dialog-cancel.svelte +4 -2
  10. package/dist/bits/alert-dialog/components/alert-dialog-content.svelte +8 -3
  11. package/dist/bits/aspect-ratio/aspect-ratio.svelte.js +2 -2
  12. package/dist/bits/aspect-ratio/components/aspect-ratio.svelte +4 -2
  13. package/dist/bits/avatar/avatar.svelte.d.ts +2 -1
  14. package/dist/bits/avatar/avatar.svelte.js +8 -6
  15. package/dist/bits/avatar/components/avatar-fallback.svelte +4 -2
  16. package/dist/bits/avatar/components/avatar-image.svelte +4 -2
  17. package/dist/bits/avatar/components/avatar.svelte +4 -2
  18. package/dist/bits/button/components/button.svelte +1 -1
  19. package/dist/bits/calendar/calendar.svelte.d.ts +3 -9
  20. package/dist/bits/calendar/calendar.svelte.js +55 -41
  21. package/dist/bits/calendar/components/calendar-cell.svelte +4 -2
  22. package/dist/bits/calendar/components/calendar-day.svelte +4 -2
  23. package/dist/bits/calendar/components/calendar-grid-body.svelte +4 -2
  24. package/dist/bits/calendar/components/calendar-grid-head.svelte +4 -2
  25. package/dist/bits/calendar/components/calendar-grid-row.svelte +4 -2
  26. package/dist/bits/calendar/components/calendar-grid.svelte +4 -2
  27. package/dist/bits/calendar/components/calendar-head-cell.svelte +4 -2
  28. package/dist/bits/calendar/components/calendar-header.svelte +4 -2
  29. package/dist/bits/calendar/components/calendar-heading.svelte +4 -2
  30. package/dist/bits/calendar/components/calendar-next-button.svelte +4 -2
  31. package/dist/bits/calendar/components/calendar-prev-button.svelte +4 -2
  32. package/dist/bits/checkbox/checkbox.svelte.js +4 -14
  33. package/dist/bits/checkbox/components/checkbox-group-label.svelte +4 -2
  34. package/dist/bits/checkbox/components/checkbox-group.svelte +4 -2
  35. package/dist/bits/checkbox/components/checkbox.svelte +4 -2
  36. package/dist/bits/collapsible/collapsible.svelte.js +4 -10
  37. package/dist/bits/collapsible/components/collapsible-content.svelte +5 -3
  38. package/dist/bits/collapsible/components/collapsible-trigger.svelte +4 -2
  39. package/dist/bits/collapsible/components/collapsible.svelte +4 -2
  40. package/dist/bits/combobox/components/combobox-input.svelte +3 -3
  41. package/dist/bits/combobox/components/combobox.svelte +6 -1
  42. package/dist/bits/combobox/types.d.ts +18 -1
  43. package/dist/bits/command/command.svelte.js +13 -45
  44. package/dist/bits/command/components/_command-label.svelte +6 -7
  45. package/dist/bits/command/components/_command-label.svelte.d.ts +1 -1
  46. package/dist/bits/command/components/command-empty.svelte +4 -2
  47. package/dist/bits/command/components/command-group-heading.svelte +4 -2
  48. package/dist/bits/command/components/command-group-items.svelte +4 -2
  49. package/dist/bits/command/components/command-group.svelte +4 -2
  50. package/dist/bits/command/components/command-input.svelte +4 -2
  51. package/dist/bits/command/components/command-item.svelte +4 -2
  52. package/dist/bits/command/components/command-link-item.svelte +4 -2
  53. package/dist/bits/command/components/command-list.svelte +4 -2
  54. package/dist/bits/command/components/command-loading.svelte +4 -2
  55. package/dist/bits/command/components/command-separator.svelte +4 -2
  56. package/dist/bits/command/components/command-viewport.svelte +4 -2
  57. package/dist/bits/command/components/command.svelte +4 -2
  58. package/dist/bits/context-menu/components/context-menu-content-static.svelte +2 -3
  59. package/dist/bits/context-menu/components/context-menu-content.svelte +2 -3
  60. package/dist/bits/context-menu/components/context-menu-trigger.svelte +1 -1
  61. package/dist/bits/date-field/components/date-field-input.svelte +4 -2
  62. package/dist/bits/date-field/components/date-field-label.svelte +4 -2
  63. package/dist/bits/date-field/components/date-field-segment.svelte +4 -2
  64. package/dist/bits/date-field/date-field.svelte.d.ts +7 -5
  65. package/dist/bits/date-field/date-field.svelte.js +29 -38
  66. package/dist/bits/date-picker/components/date-picker-calendar.svelte +4 -2
  67. package/dist/bits/date-range-field/components/date-range-field-input.svelte +4 -2
  68. package/dist/bits/date-range-field/components/date-range-field-label.svelte +4 -2
  69. package/dist/bits/date-range-field/components/date-range-field.svelte +4 -2
  70. package/dist/bits/date-range-field/date-range-field.svelte.d.ts +2 -0
  71. package/dist/bits/date-range-field/date-range-field.svelte.js +6 -14
  72. package/dist/bits/date-range-picker/components/date-range-picker-calendar.svelte +4 -2
  73. package/dist/bits/dialog/components/dialog-close.svelte +4 -2
  74. package/dist/bits/dialog/components/dialog-content.svelte +8 -2
  75. package/dist/bits/dialog/components/dialog-description.svelte +4 -2
  76. package/dist/bits/dialog/components/dialog-overlay.svelte +8 -3
  77. package/dist/bits/dialog/components/dialog-title.svelte +4 -2
  78. package/dist/bits/dialog/components/dialog-trigger.svelte +4 -2
  79. package/dist/bits/dialog/dialog.svelte.d.ts +1 -1
  80. package/dist/bits/dialog/dialog.svelte.js +19 -47
  81. package/dist/bits/dropdown-menu/components/dropdown-menu-content-static.svelte +6 -5
  82. package/dist/bits/dropdown-menu/components/dropdown-menu-content.svelte +6 -5
  83. package/dist/bits/index.d.ts +2 -0
  84. package/dist/bits/index.js +2 -0
  85. package/dist/bits/label/components/label.svelte +4 -2
  86. package/dist/bits/label/label.svelte.js +2 -2
  87. package/dist/bits/link-preview/components/link-preview-content-static.svelte +6 -2
  88. package/dist/bits/link-preview/components/link-preview-content.svelte +6 -2
  89. package/dist/bits/link-preview/components/link-preview-trigger.svelte +5 -3
  90. package/dist/bits/link-preview/link-preview.svelte.d.ts +2 -0
  91. package/dist/bits/link-preview/link-preview.svelte.js +13 -19
  92. package/dist/bits/menu/components/menu-checkbox-group.svelte +4 -2
  93. package/dist/bits/menu/components/menu-checkbox-item.svelte +6 -4
  94. package/dist/bits/menu/components/menu-content-static.svelte +6 -5
  95. package/dist/bits/menu/components/menu-content.svelte +6 -5
  96. package/dist/bits/menu/components/menu-group-heading.svelte +4 -2
  97. package/dist/bits/menu/components/menu-group.svelte +4 -2
  98. package/dist/bits/menu/components/menu-item.svelte +4 -2
  99. package/dist/bits/menu/components/menu-radio-group.svelte +4 -2
  100. package/dist/bits/menu/components/menu-radio-item.svelte +4 -2
  101. package/dist/bits/menu/components/menu-separator.svelte +4 -2
  102. package/dist/bits/menu/components/menu-sub-content-static.svelte +6 -5
  103. package/dist/bits/menu/components/menu-sub-content.svelte +6 -5
  104. package/dist/bits/menu/components/menu-sub-trigger.svelte +6 -3
  105. package/dist/bits/menu/components/menu-trigger.svelte +5 -3
  106. package/dist/bits/menu/menu.svelte.d.ts +9 -20
  107. package/dist/bits/menu/menu.svelte.js +40 -63
  108. package/dist/bits/menubar/components/menubar-content-static.svelte +4 -2
  109. package/dist/bits/menubar/components/menubar-content.svelte +4 -2
  110. package/dist/bits/menubar/components/menubar-menu.svelte +4 -2
  111. package/dist/bits/menubar/components/menubar-trigger.svelte +14 -6
  112. package/dist/bits/menubar/components/menubar.svelte +4 -2
  113. package/dist/bits/menubar/menubar.svelte.d.ts +24 -20
  114. package/dist/bits/menubar/menubar.svelte.js +40 -56
  115. package/dist/bits/meter/components/meter.svelte +4 -2
  116. package/dist/bits/meter/meter.svelte.js +2 -2
  117. package/dist/bits/navigation-menu/components/navigation-menu-content-impl.svelte +5 -2
  118. package/dist/bits/navigation-menu/components/navigation-menu-content.svelte +8 -3
  119. package/dist/bits/navigation-menu/components/navigation-menu-indicator-impl.svelte +4 -2
  120. package/dist/bits/navigation-menu/components/navigation-menu-indicator.svelte +6 -4
  121. package/dist/bits/navigation-menu/components/navigation-menu-item.svelte +6 -3
  122. package/dist/bits/navigation-menu/components/navigation-menu-link.svelte +4 -2
  123. package/dist/bits/navigation-menu/components/navigation-menu-list.svelte +4 -2
  124. package/dist/bits/navigation-menu/components/navigation-menu-sub.svelte +4 -2
  125. package/dist/bits/navigation-menu/components/navigation-menu-trigger.svelte +4 -2
  126. package/dist/bits/navigation-menu/components/navigation-menu-viewport.svelte +5 -3
  127. package/dist/bits/navigation-menu/components/navigation-menu.svelte +4 -2
  128. package/dist/bits/navigation-menu/navigation-menu.svelte.d.ts +3 -1
  129. package/dist/bits/navigation-menu/navigation-menu.svelte.js +33 -60
  130. package/dist/bits/pagination/components/pagination-next-button.svelte +4 -2
  131. package/dist/bits/pagination/components/pagination-page.svelte +4 -2
  132. package/dist/bits/pagination/components/pagination-prev-button.svelte +4 -2
  133. package/dist/bits/pagination/components/pagination.svelte +4 -2
  134. package/dist/bits/pagination/pagination.svelte.js +4 -4
  135. package/dist/bits/pin-input/components/pin-input-cell.svelte +4 -2
  136. package/dist/bits/pin-input/components/pin-input.svelte +5 -3
  137. package/dist/bits/pin-input/pin-input.svelte.d.ts +4 -2
  138. package/dist/bits/pin-input/pin-input.svelte.js +20 -22
  139. package/dist/bits/pin-input/usePasswordManager.svelte.d.ts +3 -2
  140. package/dist/bits/pin-input/usePasswordManager.svelte.js +6 -5
  141. package/dist/bits/popover/components/popover-close.svelte +4 -2
  142. package/dist/bits/popover/components/popover-content-static.svelte +6 -2
  143. package/dist/bits/popover/components/popover-content.svelte +6 -2
  144. package/dist/bits/popover/components/popover-trigger.svelte +5 -3
  145. package/dist/bits/popover/popover.svelte.js +4 -18
  146. package/dist/bits/progress/components/progress.svelte +4 -2
  147. package/dist/bits/progress/progress.svelte.js +2 -2
  148. package/dist/bits/radio-group/components/radio-group-item.svelte +4 -2
  149. package/dist/bits/radio-group/components/radio-group.svelte +4 -2
  150. package/dist/bits/radio-group/radio-group.svelte.js +4 -7
  151. package/dist/bits/range-calendar/components/range-calendar-cell.svelte +4 -2
  152. package/dist/bits/range-calendar/components/range-calendar-day.svelte +4 -2
  153. package/dist/bits/range-calendar/components/range-calendar.svelte +4 -2
  154. package/dist/bits/range-calendar/range-calendar.svelte.d.ts +2 -0
  155. package/dist/bits/range-calendar/range-calendar.svelte.js +12 -6
  156. package/dist/bits/scroll-area/components/scroll-area-corner.svelte +8 -2
  157. package/dist/bits/scroll-area/components/scroll-area-scrollbar-auto.svelte +4 -1
  158. package/dist/bits/scroll-area/components/scroll-area-scrollbar-hover.svelte +1 -1
  159. package/dist/bits/scroll-area/components/scroll-area-scrollbar-scroll.svelte +5 -1
  160. package/dist/bits/scroll-area/components/scroll-area-scrollbar.svelte +4 -2
  161. package/dist/bits/scroll-area/components/scroll-area-thumb.svelte +8 -3
  162. package/dist/bits/scroll-area/components/scroll-area-viewport.svelte +4 -2
  163. package/dist/bits/scroll-area/components/scroll-area.svelte +4 -2
  164. package/dist/bits/scroll-area/scroll-area.svelte.d.ts +2 -0
  165. package/dist/bits/scroll-area/scroll-area.svelte.js +27 -58
  166. package/dist/bits/select/components/select-content-static.svelte +6 -2
  167. package/dist/bits/select/components/select-content.svelte +6 -2
  168. package/dist/bits/select/components/select-group-heading.svelte +3 -2
  169. package/dist/bits/select/components/select-group.svelte +4 -2
  170. package/dist/bits/select/components/select-item.svelte +4 -2
  171. package/dist/bits/select/components/select-scroll-down-button.svelte +4 -2
  172. package/dist/bits/select/components/select-scroll-up-button.svelte +4 -2
  173. package/dist/bits/select/components/select-trigger.svelte +5 -3
  174. package/dist/bits/select/components/select-viewport.svelte +4 -2
  175. package/dist/bits/select/components/select.svelte +7 -1
  176. package/dist/bits/select/select.svelte.d.ts +5 -19
  177. package/dist/bits/select/select.svelte.js +43 -60
  178. package/dist/bits/separator/components/separator.svelte +4 -2
  179. package/dist/bits/separator/separator.svelte.js +2 -2
  180. package/dist/bits/slider/components/slider-range.svelte +4 -2
  181. package/dist/bits/slider/components/slider-thumb-label.svelte +50 -0
  182. package/dist/bits/slider/components/slider-thumb-label.svelte.d.ts +4 -0
  183. package/dist/bits/slider/components/slider-thumb.svelte +4 -2
  184. package/dist/bits/slider/components/slider-tick-label.svelte +50 -0
  185. package/dist/bits/slider/components/slider-tick-label.svelte.d.ts +4 -0
  186. package/dist/bits/slider/components/slider-tick.svelte +4 -2
  187. package/dist/bits/slider/components/slider.svelte +24 -5
  188. package/dist/bits/slider/exports.d.ts +3 -1
  189. package/dist/bits/slider/exports.js +2 -0
  190. package/dist/bits/slider/helpers.d.ts +14 -0
  191. package/dist/bits/slider/helpers.js +122 -0
  192. package/dist/bits/slider/slider.svelte.d.ts +91 -5
  193. package/dist/bits/slider/slider.svelte.js +194 -101
  194. package/dist/bits/slider/types.d.ts +105 -11
  195. package/dist/bits/switch/components/switch-thumb.svelte +4 -2
  196. package/dist/bits/switch/components/switch.svelte +4 -2
  197. package/dist/bits/switch/switch.svelte.js +3 -3
  198. package/dist/bits/tabs/components/tabs-content.svelte +4 -2
  199. package/dist/bits/tabs/components/tabs-list.svelte +4 -2
  200. package/dist/bits/tabs/components/tabs-trigger.svelte +4 -2
  201. package/dist/bits/tabs/components/tabs.svelte +4 -2
  202. package/dist/bits/tabs/tabs.svelte.js +6 -6
  203. package/dist/bits/time-field/components/time-field-hidden-input.svelte +10 -0
  204. package/dist/bits/{date-field/components/date-field-error.svelte.d.ts → time-field/components/time-field-hidden-input.svelte.d.ts} +6 -14
  205. package/dist/bits/time-field/components/time-field-input.svelte +39 -0
  206. package/dist/bits/time-field/components/time-field-input.svelte.d.ts +4 -0
  207. package/dist/bits/time-field/components/time-field-label.svelte +34 -0
  208. package/dist/bits/time-field/components/time-field-label.svelte.d.ts +4 -0
  209. package/dist/bits/time-field/components/time-field-segment.svelte +37 -0
  210. package/dist/bits/time-field/components/time-field-segment.svelte.d.ts +4 -0
  211. package/dist/bits/time-field/components/time-field.svelte +94 -0
  212. package/dist/bits/time-field/components/time-field.svelte.d.ts +20 -0
  213. package/dist/bits/time-field/exports.d.ts +5 -0
  214. package/dist/bits/time-field/exports.js +4 -0
  215. package/dist/bits/time-field/index.d.ts +1 -0
  216. package/dist/bits/time-field/index.js +1 -0
  217. package/dist/bits/time-field/time-field.svelte.d.ts +417 -0
  218. package/dist/bits/time-field/time-field.svelte.js +980 -0
  219. package/dist/bits/time-field/types.d.ts +137 -0
  220. package/dist/bits/time-field/types.js +1 -0
  221. package/dist/bits/time-range-field/components/time-range-field-input.svelte +43 -0
  222. package/dist/bits/time-range-field/components/time-range-field-input.svelte.d.ts +4 -0
  223. package/dist/bits/time-range-field/components/time-range-field-label.svelte +34 -0
  224. package/dist/bits/time-range-field/components/time-range-field-label.svelte.d.ts +4 -0
  225. package/dist/bits/time-range-field/components/time-range-field.svelte +144 -0
  226. package/dist/bits/time-range-field/components/time-range-field.svelte.d.ts +20 -0
  227. package/dist/bits/time-range-field/exports.d.ts +5 -0
  228. package/dist/bits/time-range-field/exports.js +4 -0
  229. package/dist/bits/time-range-field/index.d.ts +1 -0
  230. package/dist/bits/time-range-field/index.js +1 -0
  231. package/dist/bits/time-range-field/time-range-field.svelte.d.ts +92 -0
  232. package/dist/bits/time-range-field/time-range-field.svelte.js +212 -0
  233. package/dist/bits/time-range-field/types.d.ts +150 -0
  234. package/dist/bits/time-range-field/types.js +1 -0
  235. package/dist/bits/toggle/components/toggle.svelte +4 -2
  236. package/dist/bits/toggle/toggle.svelte.js +2 -2
  237. package/dist/bits/toggle-group/components/toggle-group-item.svelte +4 -2
  238. package/dist/bits/toggle-group/components/toggle-group.svelte +4 -2
  239. package/dist/bits/toggle-group/toggle-group.svelte.js +4 -4
  240. package/dist/bits/toolbar/components/toolbar-button.svelte +4 -2
  241. package/dist/bits/toolbar/components/toolbar-group-item.svelte +4 -2
  242. package/dist/bits/toolbar/components/toolbar-group.svelte +4 -2
  243. package/dist/bits/toolbar/components/toolbar-link.svelte +4 -2
  244. package/dist/bits/toolbar/components/toolbar.svelte +4 -2
  245. package/dist/bits/toolbar/toolbar.svelte.js +7 -7
  246. package/dist/bits/tooltip/components/tooltip-content-static.svelte +6 -2
  247. package/dist/bits/tooltip/components/tooltip-content.svelte +6 -2
  248. package/dist/bits/tooltip/components/tooltip-trigger.svelte +5 -3
  249. package/dist/bits/tooltip/tooltip.svelte.d.ts +2 -0
  250. package/dist/bits/tooltip/tooltip.svelte.js +6 -15
  251. package/dist/bits/utilities/dismissible-layer/dismissible-layer.svelte +2 -0
  252. package/dist/bits/utilities/dismissible-layer/types.d.ts +2 -0
  253. package/dist/bits/utilities/dismissible-layer/use-dismissable-layer.svelte.d.ts +3 -3
  254. package/dist/bits/utilities/dismissible-layer/use-dismissable-layer.svelte.js +16 -25
  255. package/dist/bits/utilities/floating-layer/components/floating-layer-anchor.svelte +2 -1
  256. package/dist/bits/utilities/floating-layer/types.d.ts +1 -0
  257. package/dist/bits/utilities/floating-layer/use-floating-layer.svelte.d.ts +3 -2
  258. package/dist/bits/utilities/floating-layer/use-floating-layer.svelte.js +7 -27
  259. package/dist/bits/utilities/focus-scope/focus-scope.svelte +2 -0
  260. package/dist/bits/utilities/focus-scope/types.d.ts +2 -0
  261. package/dist/bits/utilities/focus-scope/use-focus-scope.svelte.d.ts +2 -1
  262. package/dist/bits/utilities/focus-scope/use-focus-scope.svelte.js +15 -16
  263. package/dist/bits/utilities/popper-layer/popper-layer-inner.svelte +4 -0
  264. package/dist/bits/utilities/popper-layer/popper-layer.svelte +3 -1
  265. package/dist/bits/utilities/portal/types.d.ts +1 -1
  266. package/dist/bits/utilities/presence-layer/presence-layer.svelte +2 -2
  267. package/dist/bits/utilities/presence-layer/types.d.ts +2 -1
  268. package/dist/bits/utilities/presence-layer/use-presence.svelte.d.ts +1 -1
  269. package/dist/bits/utilities/presence-layer/use-presence.svelte.js +19 -36
  270. package/dist/bits/utilities/text-selection-layer/text-selection-layer.svelte +2 -0
  271. package/dist/bits/utilities/text-selection-layer/types.d.ts +2 -0
  272. package/dist/bits/utilities/text-selection-layer/use-text-selection-layer.svelte.d.ts +5 -1
  273. package/dist/bits/utilities/text-selection-layer/use-text-selection-layer.svelte.js +8 -14
  274. package/dist/index.d.ts +1 -1
  275. package/dist/index.js +1 -1
  276. package/dist/internal/box-auto-reset.svelte.d.ts +7 -1
  277. package/dist/internal/box-auto-reset.svelte.js +11 -6
  278. package/dist/internal/create-id.d.ts +8 -0
  279. package/dist/internal/create-id.js +5 -0
  280. package/dist/internal/date-time/announcer.d.ts +1 -1
  281. package/dist/internal/date-time/announcer.js +20 -20
  282. package/dist/internal/date-time/calendar-helpers.svelte.js +7 -5
  283. package/dist/internal/date-time/field/helpers.d.ts +9 -2
  284. package/dist/internal/date-time/field/helpers.js +16 -9
  285. package/dist/internal/date-time/field/parts.d.ts +3 -1
  286. package/dist/internal/date-time/field/parts.js +10 -2
  287. package/dist/internal/date-time/field/segments.d.ts +9 -0
  288. package/dist/internal/date-time/field/segments.js +65 -0
  289. package/dist/internal/date-time/field/time-helpers.d.ts +83 -0
  290. package/dist/internal/date-time/field/time-helpers.js +301 -0
  291. package/dist/internal/date-time/field/types.d.ts +2 -2
  292. package/dist/internal/date-time/formatter.d.ts +11 -1
  293. package/dist/internal/date-time/formatter.js +56 -0
  294. package/dist/internal/date-time/utils.d.ts +7 -2
  295. package/dist/internal/date-time/utils.js +15 -1
  296. package/dist/internal/dom.d.ts +0 -1
  297. package/dist/internal/dom.js +0 -3
  298. package/dist/internal/focus.d.ts +2 -2
  299. package/dist/internal/focus.js +14 -9
  300. package/dist/internal/math.d.ts +0 -4
  301. package/dist/internal/math.js +0 -28
  302. package/dist/internal/tabbable.d.ts +0 -2
  303. package/dist/internal/tabbable.js +10 -14
  304. package/dist/internal/use-data-typeahead.svelte.d.ts +1 -0
  305. package/dist/internal/use-data-typeahead.svelte.js +4 -1
  306. package/dist/internal/use-dom-typeahead.svelte.d.ts +3 -1
  307. package/dist/internal/use-dom-typeahead.svelte.js +5 -2
  308. package/dist/internal/use-grace-area.svelte.js +9 -5
  309. package/dist/internal/use-roving-focus.svelte.d.ts +3 -3
  310. package/dist/internal/use-roving-focus.svelte.js +10 -11
  311. package/dist/shared/date/types.d.ts +27 -4
  312. package/dist/shared/index.d.ts +2 -2
  313. package/dist/types.d.ts +2 -0
  314. package/package.json +18 -16
  315. package/dist/bits/date-field/components/date-field-error.svelte +0 -0
  316. package/dist/internal/use-size.svelte.d.ts +0 -7
  317. package/dist/internal/use-size.svelte.js +0 -54
@@ -3,7 +3,7 @@ export type PortalProps = {
3
3
  /**
4
4
  * Where to portal the content to.
5
5
  *
6
- * @defaultValue document.body
6
+ * @default document.body
7
7
  */
8
8
  to?: HTMLElement | string | DocumentFragment;
9
9
  /**
@@ -3,11 +3,11 @@
3
3
  import type { PresenceLayerImplProps } from "./types.js";
4
4
  import { usePresence } from "./use-presence.svelte.js";
5
5
 
6
- let { present, forceMount, presence, id }: PresenceLayerImplProps = $props();
6
+ let { present, forceMount, presence, ref }: PresenceLayerImplProps = $props();
7
7
 
8
8
  const isPresent = usePresence(
9
9
  box.with(() => present),
10
- box.with(() => id)
10
+ ref
11
11
  );
12
12
  </script>
13
13
 
@@ -1,4 +1,5 @@
1
1
  import type { Snippet } from "svelte";
2
+ import type { ReadableBox } from "svelte-toolbelt";
2
3
  export type PresenceLayerProps = {
3
4
  /**
4
5
  * Whether to force mount the component.
@@ -6,7 +7,6 @@ export type PresenceLayerProps = {
6
7
  forceMount?: boolean;
7
8
  };
8
9
  export type PresenceLayerImplProps = PresenceLayerProps & {
9
- id: string;
10
10
  /**
11
11
  * The presence status.
12
12
  */
@@ -16,4 +16,5 @@ export type PresenceLayerImplProps = PresenceLayerProps & {
16
16
  current: boolean;
17
17
  };
18
18
  }]>;
19
+ ref: ReadableBox<HTMLElement | null>;
19
20
  };
@@ -1,4 +1,4 @@
1
1
  import { type ReadableBox } from "svelte-toolbelt";
2
- export declare function usePresence(present: ReadableBox<boolean>, id: ReadableBox<string>): {
2
+ export declare function usePresence(present: ReadableBox<boolean>, ref: ReadableBox<HTMLElement | null>): {
3
3
  readonly current: boolean;
4
4
  };
@@ -1,20 +1,12 @@
1
- import { afterTick, executeCallbacks } from "svelte-toolbelt";
1
+ import { executeCallbacks } from "svelte-toolbelt";
2
2
  import { Previous, watch } from "runed";
3
3
  import { on } from "svelte/events";
4
4
  import { useStateMachine } from "../../../internal/use-state-machine.svelte.js";
5
- export function usePresence(present, id) {
5
+ export function usePresence(present, ref) {
6
6
  let styles = $state({});
7
7
  let prevAnimationNameState = $state("none");
8
8
  const initialState = present.current ? "mounted" : "unmounted";
9
- let node = $state(null);
10
9
  const prevPresent = new Previous(() => present.current);
11
- watch([() => id.current, () => present.current], ([id, present]) => {
12
- if (!id || !present)
13
- return;
14
- afterTick(() => {
15
- node = document.getElementById(id);
16
- });
17
- });
18
10
  const { state, dispatch } = useStateMachine(initialState, {
19
11
  mounted: {
20
12
  UNMOUNT: "unmounted",
@@ -28,18 +20,15 @@ export function usePresence(present, id) {
28
20
  MOUNT: "mounted",
29
21
  },
30
22
  });
31
- watch(() => present.current, (currPresent) => {
32
- if (!node) {
33
- node = document.getElementById(id.current);
34
- }
35
- if (!node)
23
+ watch(() => present.current, () => {
24
+ if (!ref.current)
36
25
  return;
37
- const hasPresentChanged = currPresent !== prevPresent.current;
26
+ const hasPresentChanged = present.current !== prevPresent.current;
38
27
  if (!hasPresentChanged)
39
28
  return;
40
29
  const prevAnimationName = prevAnimationNameState;
41
- const currAnimationName = getAnimationName(node);
42
- if (currPresent) {
30
+ const currAnimationName = getAnimationName(ref.current);
31
+ if (present.current) {
43
32
  dispatch("MOUNT");
44
33
  }
45
34
  else if (currAnimationName === "none" || styles.display === "none") {
@@ -69,38 +58,32 @@ export function usePresence(present, id) {
69
58
  * make sure we only trigger ANIMATION_END for the currently active animation.
70
59
  */
71
60
  function handleAnimationEnd(event) {
72
- if (!node)
73
- node = document.getElementById(id.current);
74
- if (!node)
61
+ if (!ref.current)
75
62
  return;
76
- const currAnimationName = getAnimationName(node);
63
+ const currAnimationName = getAnimationName(ref.current);
77
64
  const isCurrentAnimation = currAnimationName.includes(event.animationName) || currAnimationName === "none";
78
- if (event.target === node && isCurrentAnimation) {
65
+ if (event.target === ref.current && isCurrentAnimation) {
79
66
  dispatch("ANIMATION_END");
80
67
  }
81
68
  }
82
69
  function handleAnimationStart(event) {
83
- if (!node)
84
- node = document.getElementById(id.current);
85
- if (!node)
70
+ if (!ref.current)
86
71
  return;
87
- if (event.target === node) {
88
- prevAnimationNameState = getAnimationName(node);
72
+ if (event.target === ref.current) {
73
+ prevAnimationNameState = getAnimationName(ref.current);
89
74
  }
90
75
  }
91
76
  watch(() => state.current, () => {
92
- if (!node)
93
- node = document.getElementById(id.current);
94
- if (!node)
77
+ if (!ref.current)
95
78
  return;
96
- const currAnimationName = getAnimationName(node);
79
+ const currAnimationName = getAnimationName(ref.current);
97
80
  prevAnimationNameState = state.current === "mounted" ? currAnimationName : "none";
98
81
  });
99
- watch(() => node, (node) => {
100
- if (!node)
82
+ watch(() => ref.current, () => {
83
+ if (!ref.current)
101
84
  return;
102
- styles = getComputedStyle(node);
103
- return executeCallbacks(on(node, "animationstart", handleAnimationStart), on(node, "animationcancel", handleAnimationEnd), on(node, "animationend", handleAnimationEnd));
85
+ styles = getComputedStyle(ref.current);
86
+ return executeCallbacks(on(ref.current, "animationstart", handleAnimationStart), on(ref.current, "animationcancel", handleAnimationEnd), on(ref.current, "animationend", handleAnimationEnd));
104
87
  });
105
88
  const isPresentDerived = $derived(["mounted", "unmountSuspended"].includes(state.current));
106
89
  return {
@@ -11,6 +11,7 @@
11
11
  id,
12
12
  children,
13
13
  enabled,
14
+ ref,
14
15
  }: TextSelectionLayerImplProps = $props();
15
16
 
16
17
  useTextSelectionLayer({
@@ -18,6 +19,7 @@
18
19
  onPointerDown: box.with(() => onPointerDown),
19
20
  onPointerUp: box.with(() => onPointerUp),
20
21
  enabled: box.with(() => enabled && preventOverflowTextSelection),
22
+ ref,
21
23
  });
22
24
  </script>
23
25
 
@@ -1,4 +1,5 @@
1
1
  import type { Snippet } from "svelte";
2
+ import type { ReadableBox } from "svelte-toolbelt";
2
3
  export type PointerHandler = (e: PointerEvent) => void;
3
4
  export type TextSelectionLayerProps = {
4
5
  /**
@@ -28,4 +29,5 @@ export type TextSelectionLayerImplProps = {
28
29
  * Callback fired when pointerup event triggers.
29
30
  */
30
31
  onPointerUp?: PointerHandler;
32
+ ref: ReadableBox<HTMLElement | null>;
31
33
  } & TextSelectionLayerProps;
@@ -1,9 +1,13 @@
1
+ import { DOMContext } from "svelte-toolbelt";
1
2
  import type { TextSelectionLayerImplProps } from "./types.js";
2
3
  import type { ReadableBoxedValues } from "../../../internal/box.svelte.js";
3
- type TextSelectionLayerStateProps = ReadableBoxedValues<Required<Omit<TextSelectionLayerImplProps, "children" | "preventOverflowTextSelection">>>;
4
+ type TextSelectionLayerStateProps = ReadableBoxedValues<Required<Omit<TextSelectionLayerImplProps, "children" | "preventOverflowTextSelection" | "ref">> & {
5
+ ref: HTMLElement | null;
6
+ }>;
4
7
  export declare class TextSelectionLayerState {
5
8
  #private;
6
9
  readonly opts: TextSelectionLayerStateProps;
10
+ readonly domContext: DOMContext;
7
11
  constructor(opts: TextSelectionLayerStateProps);
8
12
  }
9
13
  export declare function useTextSelectionLayer(props: TextSelectionLayerStateProps): TextSelectionLayerState;
@@ -1,21 +1,16 @@
1
- import { box, composeHandlers, executeCallbacks, useRefById, } from "svelte-toolbelt";
1
+ import { DOMContext, composeHandlers, contains, executeCallbacks, } from "svelte-toolbelt";
2
2
  import { watch } from "runed";
3
3
  import { on } from "svelte/events";
4
4
  import { noop } from "../../../internal/noop.js";
5
5
  import { isHTMLElement } from "../../../internal/is.js";
6
- import { isOrContainsTarget } from "../../../internal/elements.js";
7
6
  globalThis.bitsTextSelectionLayers ??= new Map();
8
7
  export class TextSelectionLayerState {
9
8
  opts;
9
+ domContext;
10
10
  #unsubSelectionLock = noop;
11
- #ref = box(null);
12
11
  constructor(opts) {
13
12
  this.opts = opts;
14
- useRefById({
15
- id: opts.id,
16
- ref: this.#ref,
17
- deps: () => this.opts.enabled.current,
18
- });
13
+ this.domContext = new DOMContext(opts.ref);
19
14
  let unsubEvents = noop;
20
15
  watch(() => this.opts.enabled.current, (isEnabled) => {
21
16
  if (isEnabled) {
@@ -31,10 +26,10 @@ export class TextSelectionLayerState {
31
26
  });
32
27
  }
33
28
  #addEventListeners() {
34
- return executeCallbacks(on(document, "pointerdown", this.#pointerdown), on(document, "pointerup", composeHandlers(this.#resetSelectionLock, this.opts.onPointerUp.current)));
29
+ return executeCallbacks(on(this.domContext.getDocument(), "pointerdown", this.#pointerdown), on(this.domContext.getDocument(), "pointerup", composeHandlers(this.#resetSelectionLock, this.opts.onPointerUp.current)));
35
30
  }
36
31
  #pointerdown = (e) => {
37
- const node = this.#ref.current;
32
+ const node = this.opts.ref.current;
38
33
  const target = e.target;
39
34
  if (!isHTMLElement(node) || !isHTMLElement(target) || !this.opts.enabled.current)
40
35
  return;
@@ -43,12 +38,12 @@ export class TextSelectionLayerState {
43
38
  * pointerdown occurred inside the node. You are still allowed to select text
44
39
  * outside the node provided pointerdown occurs outside the node.
45
40
  */
46
- if (!isHighestLayer(this) || !isOrContainsTarget(node, target))
41
+ if (!isHighestLayer(this) || !contains(node, target))
47
42
  return;
48
43
  this.opts.onPointerDown.current(e);
49
44
  if (e.defaultPrevented)
50
45
  return;
51
- this.#unsubSelectionLock = preventTextSelectionOverflow(node);
46
+ this.#unsubSelectionLock = preventTextSelectionOverflow(node, this.domContext.getDocument().body);
52
47
  };
53
48
  #resetSelectionLock = () => {
54
49
  this.#unsubSelectionLock();
@@ -59,8 +54,7 @@ export function useTextSelectionLayer(props) {
59
54
  return new TextSelectionLayerState(props);
60
55
  }
61
56
  const getUserSelect = (node) => node.style.userSelect || node.style.webkitUserSelect;
62
- function preventTextSelectionOverflow(node) {
63
- const body = document.body;
57
+ function preventTextSelectionOverflow(node, body) {
64
58
  const originalBodyUserSelect = getUserSelect(body);
65
59
  const originalNodeUserSelect = getUserSelect(node);
66
60
  setUserSelect(body, "none");
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { Accordion, AlertDialog, AspectRatio, Avatar, Button, Calendar, Checkbox, Collapsible, Combobox, Command, ContextMenu, DateField, DatePicker, DateRangeField, DateRangePicker, Dialog, DropdownMenu, Label, LinkPreview, Menubar, Meter, NavigationMenu, Pagination, PinInput, Popover, Progress, RadioGroup, RangeCalendar, ScrollArea, Select, Separator, Slider, Switch, Tabs, Toggle, ToggleGroup, Toolbar, Tooltip, Portal, IsUsingKeyboard, computeCommandScore, } from "./bits/index.js";
1
+ export { Accordion, AlertDialog, AspectRatio, Avatar, Button, Calendar, Checkbox, Collapsible, Combobox, Command, ContextMenu, DateField, DatePicker, DateRangeField, DateRangePicker, Dialog, DropdownMenu, Label, LinkPreview, Menubar, Meter, NavigationMenu, Pagination, PinInput, Popover, Progress, RadioGroup, RangeCalendar, ScrollArea, Select, Separator, Slider, Switch, Tabs, TimeField, TimeRangeField, Toggle, ToggleGroup, Toolbar, Tooltip, Portal, IsUsingKeyboard, computeCommandScore, } from "./bits/index.js";
2
2
  export * from "./shared/index.js";
3
3
  export type * from "./shared/index.js";
4
4
  export * from "./types.js";
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Accordion, AlertDialog, AspectRatio, Avatar, Button, Calendar, Checkbox, Collapsible, Combobox, Command, ContextMenu, DateField, DatePicker, DateRangeField, DateRangePicker, Dialog, DropdownMenu, Label, LinkPreview, Menubar, Meter, NavigationMenu, Pagination, PinInput, Popover, Progress, RadioGroup, RangeCalendar, ScrollArea, Select, Separator, Slider, Switch, Tabs, Toggle, ToggleGroup, Toolbar, Tooltip, Portal, IsUsingKeyboard, computeCommandScore, } from "./bits/index.js";
1
+ export { Accordion, AlertDialog, AspectRatio, Avatar, Button, Calendar, Checkbox, Collapsible, Combobox, Command, ContextMenu, DateField, DatePicker, DateRangeField, DateRangePicker, Dialog, DropdownMenu, Label, LinkPreview, Menubar, Meter, NavigationMenu, Pagination, PinInput, Popover, Progress, RadioGroup, RangeCalendar, ScrollArea, Select, Separator, Slider, Switch, Tabs, TimeField, TimeRangeField, Toggle, ToggleGroup, Toolbar, Tooltip, Portal, IsUsingKeyboard, computeCommandScore, } from "./bits/index.js";
2
2
  export * from "./shared/index.js";
3
3
  export * from "./types.js";
@@ -1,8 +1,14 @@
1
1
  import { type WritableBox } from "svelte-toolbelt";
2
+ type BoxAutoResetOptions<T> = {
3
+ afterMs?: number;
4
+ onChange?: (value: T) => void;
5
+ getWindow: () => Window & typeof globalThis;
6
+ };
2
7
  /**
3
8
  * Creates a box which will be reset to the default value after some time.
4
9
  *
5
10
  * @param defaultValue The value which will be set.
6
11
  * @param afterMs A zero-or-greater delay in milliseconds.
7
12
  */
8
- export declare function boxAutoReset<T>(defaultValue: T, afterMs?: number, onChange?: (value: T) => void): WritableBox<T>;
13
+ export declare function boxAutoReset<T>(defaultValue: T, options: BoxAutoResetOptions<T>): WritableBox<T>;
14
+ export {};
@@ -1,31 +1,36 @@
1
1
  import { box } from "svelte-toolbelt";
2
2
  import { noop } from "./noop.js";
3
+ const defaultOptions = {
4
+ afterMs: 10000,
5
+ onChange: noop,
6
+ };
3
7
  /**
4
8
  * Creates a box which will be reset to the default value after some time.
5
9
  *
6
10
  * @param defaultValue The value which will be set.
7
11
  * @param afterMs A zero-or-greater delay in milliseconds.
8
12
  */
9
- export function boxAutoReset(defaultValue, afterMs = 10000, onChange = noop) {
13
+ export function boxAutoReset(defaultValue, options) {
14
+ const { afterMs, onChange, getWindow } = { ...defaultOptions, ...options };
10
15
  let timeout = null;
11
16
  let value = $state(defaultValue);
12
17
  function resetAfter() {
13
- return window.setTimeout(() => {
18
+ return getWindow().setTimeout(() => {
14
19
  value = defaultValue;
15
- onChange(defaultValue);
20
+ onChange?.(defaultValue);
16
21
  }, afterMs);
17
22
  }
18
23
  $effect(() => {
19
24
  return () => {
20
25
  if (timeout)
21
- clearTimeout(timeout);
26
+ getWindow().clearTimeout(timeout);
22
27
  };
23
28
  });
24
29
  return box.with(() => value, (v) => {
25
30
  value = v;
26
- onChange(v);
31
+ onChange?.(v);
27
32
  if (timeout)
28
- clearTimeout(timeout);
33
+ getWindow().clearTimeout(timeout);
29
34
  timeout = resetAfter();
30
35
  });
31
36
  }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Creates a unique ID for a given uid and optional prefix.
3
+ *
4
+ * @param uid - the uid generated by $props.id()
5
+ * @param prefix - optional prefix to use for the id (defaults to "bits")
6
+ */
7
+ export declare function createId(uid: string): string;
8
+ export declare function createId(prefix: string, uid: string): string;
@@ -0,0 +1,5 @@
1
+ export function createId(prefixOrUid, uid) {
2
+ if (uid === undefined)
3
+ return `bits-${prefixOrUid}`;
4
+ return `bits-${prefixOrUid}-${uid}`;
5
+ }
@@ -2,6 +2,6 @@ export type Announcer = ReturnType<typeof getAnnouncer>;
2
2
  /**
3
3
  * Creates an announcer object that can be used to make `aria-live` announcements to screen readers.
4
4
  */
5
- export declare function getAnnouncer(): {
5
+ export declare function getAnnouncer(doc: Document | null): {
6
6
  announce: (value: string | null | number, kind?: "assertive" | "polite", timeout?: number) => NodeJS.Timeout | undefined;
7
7
  };
@@ -5,40 +5,40 @@ import { isBrowser, isHTMLElement } from "../is.js";
5
5
  * Within the date components, we use this to announce when the values of the individual segments
6
6
  * change, as without it we get inconsistent behavior across screen readers.
7
7
  */
8
- function initAnnouncer() {
9
- if (!isBrowser)
8
+ function initAnnouncer(doc) {
9
+ if (!isBrowser || !doc)
10
10
  return null;
11
- let el = document.querySelector("[data-bits-announcer]");
12
- if (!isHTMLElement(el)) {
13
- const div = document.createElement("div");
14
- div.style.cssText = srOnlyStylesString;
15
- div.setAttribute("data-bits-announcer", "");
16
- div.appendChild(createLog("assertive"));
17
- div.appendChild(createLog("polite"));
18
- el = div;
19
- document.body.insertBefore(el, document.body.firstChild);
20
- }
11
+ let el = doc.querySelector("[data-bits-announcer]");
21
12
  /**
22
13
  * Creates a log element for assertive or polite announcements.
23
14
  */
24
- function createLog(kind) {
25
- const log = document.createElement("div");
15
+ const createLog = (kind) => {
16
+ const log = doc.createElement("div");
26
17
  log.role = "log";
27
18
  log.ariaLive = kind;
28
19
  log.setAttribute("aria-relevant", "additions");
29
20
  return log;
21
+ };
22
+ if (!isHTMLElement(el)) {
23
+ const div = doc.createElement("div");
24
+ div.style.cssText = srOnlyStylesString;
25
+ div.setAttribute("data-bits-announcer", "");
26
+ div.appendChild(createLog("assertive"));
27
+ div.appendChild(createLog("polite"));
28
+ el = div;
29
+ doc.body.insertBefore(el, doc.body.firstChild);
30
30
  }
31
31
  /**
32
32
  * Retrieves the log element for assertive or polite announcements.
33
33
  */
34
- function getLog(kind) {
34
+ const getLog = (kind) => {
35
35
  if (!isHTMLElement(el))
36
36
  return null;
37
37
  const log = el.querySelector(`[aria-live="${kind}"]`);
38
38
  if (!isHTMLElement(log))
39
39
  return null;
40
40
  return log;
41
- }
41
+ };
42
42
  return {
43
43
  getLog,
44
44
  };
@@ -46,16 +46,16 @@ function initAnnouncer() {
46
46
  /**
47
47
  * Creates an announcer object that can be used to make `aria-live` announcements to screen readers.
48
48
  */
49
- export function getAnnouncer() {
50
- const announcer = initAnnouncer();
49
+ export function getAnnouncer(doc) {
50
+ const announcer = initAnnouncer(doc);
51
51
  /**
52
52
  * Announces a message to screen readers using the specified kind of announcement.
53
53
  */
54
54
  function announce(value, kind = "assertive", timeout = 7500) {
55
- if (!announcer || !isBrowser)
55
+ if (!announcer || !isBrowser || !doc)
56
56
  return;
57
57
  const log = announcer.getLog(kind);
58
- const content = document.createElement("div");
58
+ const content = doc.createElement("div");
59
59
  if (typeof value === "number") {
60
60
  value = value.toString();
61
61
  }
@@ -1,5 +1,5 @@
1
1
  import { endOfMonth, isSameDay, isSameMonth, startOfMonth, } from "@internationalized/date";
2
- import { afterTick, styleToString } from "svelte-toolbelt";
2
+ import { afterTick, getDocument, styleToString, } from "svelte-toolbelt";
3
3
  import { untrack } from "svelte";
4
4
  import { getDaysInMonth, getLastFirstDayOfWeek, getNextLastDayOfWeek, hasTime, isAfter, isBefore, parseAnyDateValue, parseStringToDateValue, toDate, } from "./utils.js";
5
5
  import { getDataDisabled, getDataInvalid, getDataReadonly } from "../attrs.js";
@@ -331,7 +331,8 @@ export function useMonthViewOptionsSync(props) {
331
331
  * Returns a function that removes the heading element.
332
332
  */
333
333
  export function createAccessibleHeading({ calendarNode, label, accessibleHeadingId, }) {
334
- const div = document.createElement("div");
334
+ const doc = getDocument(calendarNode);
335
+ const div = doc.createElement("div");
335
336
  div.style.cssText = styleToString({
336
337
  border: "0px",
337
338
  clip: "rect(0px, 0px, 0px, 0px)",
@@ -344,7 +345,7 @@ export function createAccessibleHeading({ calendarNode, label, accessibleHeading
344
345
  whiteSpace: "nowrap",
345
346
  width: "1px",
346
347
  });
347
- const h2 = document.createElement("div");
348
+ const h2 = doc.createElement("div");
348
349
  h2.textContent = label;
349
350
  h2.id = accessibleHeadingId;
350
351
  h2.role = "heading";
@@ -352,7 +353,7 @@ export function createAccessibleHeading({ calendarNode, label, accessibleHeading
352
353
  calendarNode.insertBefore(div, calendarNode.firstChild);
353
354
  div.appendChild(h2);
354
355
  return () => {
355
- const h2 = document.getElementById(accessibleHeadingId);
356
+ const h2 = doc.getElementById(accessibleHeadingId);
356
357
  if (!h2)
357
358
  return;
358
359
  div.parentElement?.removeChild(div);
@@ -442,7 +443,8 @@ export function getCalendarElementProps({ fullCalendarLabel, id, isInvalid, disa
442
443
  };
443
444
  }
444
445
  export function pickerOpenFocus(e) {
445
- const nodeToFocus = document.querySelector("[data-bits-day][data-focused]");
446
+ const doc = getDocument(e.target);
447
+ const nodeToFocus = doc.querySelector("[data-bits-day][data-focused]");
446
448
  if (nodeToFocus) {
447
449
  e.preventDefault();
448
450
  nodeToFocus?.focus();
@@ -61,6 +61,12 @@ export declare function isAcceptableSegmentKey(key: string): boolean;
61
61
  * @param fieldNode - The id of the date field associated with the segment
62
62
  */
63
63
  export declare function isFirstSegment(id: string, fieldNode: HTMLElement | null): boolean;
64
+ type SetDescriptionProps = {
65
+ id: string;
66
+ formatter: Formatter;
67
+ value: DateValue;
68
+ doc: Document;
69
+ };
64
70
  /**
65
71
  * Creates or updates a description element for a date field
66
72
  * which enables screen readers to read the date field's value.
@@ -69,11 +75,12 @@ export declare function isFirstSegment(id: string, fieldNode: HTMLElement | null
69
75
  * so it can be associated via `aria-describedby` and read by
70
76
  * screen readers as the user interacts with the date field.
71
77
  */
72
- export declare function setDescription(id: string, formatter: Formatter, value: DateValue): void;
78
+ export declare function setDescription(props: SetDescriptionProps): void;
73
79
  /**
74
80
  * Removes the description element for the date field with
75
81
  * the provided ID. This function should be called when the
76
82
  * date field is unmounted.
77
83
  */
78
- export declare function removeDescriptionElement(id: string): void;
84
+ export declare function removeDescriptionElement(id: string, doc: Document): void;
85
+ export declare function getDefaultHourCycle(locale: string): 12 | 24;
79
86
  export {};
@@ -1,7 +1,7 @@
1
1
  import { styleToString } from "svelte-toolbelt";
2
2
  import { getPlaceholder } from "../placeholders.js";
3
3
  import { hasTime, isZonedDateTime } from "../utils.js";
4
- import { ALL_SEGMENT_PARTS, DATE_SEGMENT_PARTS, EDITABLE_SEGMENT_PARTS, TIME_SEGMENT_PARTS, } from "./parts.js";
4
+ import { ALL_SEGMENT_PARTS, DATE_SEGMENT_PARTS, EDITABLE_SEGMENT_PARTS, EDITABLE_TIME_SEGMENT_PARTS, } from "./parts.js";
5
5
  import { getSegments } from "./segments.js";
6
6
  import { isBrowser, isNull, isNumberString } from "../../is.js";
7
7
  import { useId } from "../../use-id.js";
@@ -289,7 +289,7 @@ export function isDateAndTimeSegmentObj(obj) {
289
289
  return false;
290
290
  }
291
291
  return Object.entries(obj).every(([key, value]) => {
292
- const validKey = TIME_SEGMENT_PARTS.includes(key) ||
292
+ const validKey = EDITABLE_TIME_SEGMENT_PARTS.includes(key) ||
293
293
  DATE_SEGMENT_PARTS.includes(key);
294
294
  const validValue = key === "dayPeriod"
295
295
  ? value === "AM" || value === "PM" || value === null
@@ -345,19 +345,20 @@ export function isFirstSegment(id, fieldNode) {
345
345
  * so it can be associated via `aria-describedby` and read by
346
346
  * screen readers as the user interacts with the date field.
347
347
  */
348
- export function setDescription(id, formatter, value) {
348
+ export function setDescription(props) {
349
+ const { id, formatter, value, doc } = props;
349
350
  if (!isBrowser)
350
351
  return;
351
352
  const valueString = formatter.selectedDate(value);
352
- const el = document.getElementById(id);
353
+ const el = doc.getElementById(id);
353
354
  if (!el) {
354
- const div = document.createElement("div");
355
+ const div = doc.createElement("div");
355
356
  div.style.cssText = styleToString({
356
357
  display: "none",
357
358
  });
358
359
  div.id = id;
359
360
  div.innerText = `Selected Date: ${valueString}`;
360
- document.body.appendChild(div);
361
+ doc.body.appendChild(div);
361
362
  }
362
363
  else {
363
364
  el.innerText = `Selected Date: ${valueString}`;
@@ -368,11 +369,17 @@ export function setDescription(id, formatter, value) {
368
369
  * the provided ID. This function should be called when the
369
370
  * date field is unmounted.
370
371
  */
371
- export function removeDescriptionElement(id) {
372
+ export function removeDescriptionElement(id, doc) {
372
373
  if (!isBrowser)
373
374
  return;
374
- const el = document.getElementById(id);
375
+ const el = doc.getElementById(id);
375
376
  if (!el)
376
377
  return;
377
- document.body.removeChild(el);
378
+ doc.body.removeChild(el);
379
+ }
380
+ export function getDefaultHourCycle(locale) {
381
+ const formatter = new Intl.DateTimeFormat(locale, { hour: "numeric" });
382
+ const parts = formatter.formatToParts(new Date("2023-01-01T13:00:00"));
383
+ const hourPart = parts.find((part) => part.type === "hour");
384
+ return hourPart?.value === "1" ? 12 : 24;
378
385
  }
@@ -1,6 +1,8 @@
1
1
  export declare const DATE_SEGMENT_PARTS: readonly ["day", "month", "year"];
2
- export declare const TIME_SEGMENT_PARTS: readonly ["hour", "minute", "second", "dayPeriod"];
2
+ export declare const EDITABLE_TIME_SEGMENT_PARTS: readonly ["hour", "minute", "second", "dayPeriod"];
3
3
  export declare const NON_EDITABLE_SEGMENT_PARTS: readonly ["literal", "timeZoneName"];
4
4
  export declare const EDITABLE_SEGMENT_PARTS: readonly ["day", "month", "year", "hour", "minute", "second", "dayPeriod"];
5
5
  export declare const ALL_SEGMENT_PARTS: readonly ["day", "month", "year", "hour", "minute", "second", "dayPeriod", "literal", "timeZoneName"];
6
+ export declare const ALL_TIME_SEGMENT_PARTS: readonly ["hour", "minute", "second", "dayPeriod", "literal", "timeZoneName"];
6
7
  export declare const ALL_EXCEPT_LITERAL_PARTS: ("day" | "month" | "year" | "hour" | "minute" | "second" | "dayPeriod" | "timeZoneName")[];
8
+ export declare const ALL_TIME_EXCEPT_LITERAL_PARTS: ("hour" | "minute" | "second" | "dayPeriod" | "timeZoneName")[];
@@ -1,9 +1,17 @@
1
1
  export const DATE_SEGMENT_PARTS = ["day", "month", "year"];
2
- export const TIME_SEGMENT_PARTS = ["hour", "minute", "second", "dayPeriod"];
2
+ export const EDITABLE_TIME_SEGMENT_PARTS = ["hour", "minute", "second", "dayPeriod"];
3
3
  export const NON_EDITABLE_SEGMENT_PARTS = ["literal", "timeZoneName"];
4
- export const EDITABLE_SEGMENT_PARTS = [...DATE_SEGMENT_PARTS, ...TIME_SEGMENT_PARTS];
4
+ export const EDITABLE_SEGMENT_PARTS = [
5
+ ...DATE_SEGMENT_PARTS,
6
+ ...EDITABLE_TIME_SEGMENT_PARTS,
7
+ ];
5
8
  export const ALL_SEGMENT_PARTS = [
6
9
  ...EDITABLE_SEGMENT_PARTS,
7
10
  ...NON_EDITABLE_SEGMENT_PARTS,
8
11
  ];
12
+ export const ALL_TIME_SEGMENT_PARTS = [
13
+ ...EDITABLE_TIME_SEGMENT_PARTS,
14
+ ...NON_EDITABLE_SEGMENT_PARTS,
15
+ ];
9
16
  export const ALL_EXCEPT_LITERAL_PARTS = ALL_SEGMENT_PARTS.filter((part) => part !== "literal");
17
+ export const ALL_TIME_EXCEPT_LITERAL_PARTS = ALL_TIME_SEGMENT_PARTS.filter((part) => part !== "literal");
@@ -5,6 +5,7 @@
5
5
  * @param fieldNode - The ID of the field we're navigating within
6
6
  */
7
7
  export declare function handleSegmentNavigation(e: KeyboardEvent, fieldNode: HTMLElement | null): void;
8
+ export declare function handleTimeSegmentNavigation(e: KeyboardEvent, fieldNode: HTMLElement | null): void;
8
9
  /**
9
10
  * Retrieves the next segment in the list of segments relative to the provided node.
10
11
  *
@@ -29,11 +30,17 @@ export declare function getPrevNextSegments(startingNode: HTMLElement, fieldNode
29
30
  next: HTMLElement | null | undefined;
30
31
  prev: HTMLElement | null | undefined;
31
32
  };
33
+ export declare function getPrevNextTimeSegments(startingNode: HTMLElement, fieldNode: HTMLElement | null): {
34
+ next: HTMLElement | null | undefined;
35
+ prev: HTMLElement | null | undefined;
36
+ };
32
37
  /**
33
38
  * Shifts the focus to the next segment in the list of segments
34
39
  * within the field identified by the provided ID.
35
40
  */
36
41
  export declare function moveToNextSegment(e: KeyboardEvent, fieldNode: HTMLElement | null): void;
42
+ export declare function moveToNextTimeSegment(e: KeyboardEvent, fieldNode: HTMLElement | null): void;
43
+ export declare function moveToPrevTimeSegment(e: KeyboardEvent, fieldNode: HTMLElement | null): void;
37
44
  /**
38
45
  * Shifts the focus to the previous segment in the list of segments
39
46
  * within the field identified by the provided ID. If this is the first
@@ -45,6 +52,8 @@ export declare function isSegmentNavigationKey(key: string): boolean;
45
52
  * Retrieves all the interactive segments within the field identified by the provided ID.
46
53
  */
47
54
  export declare function getSegments(fieldNode: HTMLElement | null): HTMLElement[];
55
+ export declare function getTimeSegments(fieldNode: HTMLElement | null): HTMLElement[];
56
+ export declare function getFirstTimeSegment(fieldNode: HTMLElement | null): HTMLElement | undefined;
48
57
  /**
49
58
  * Get the first interactive segment within the field identified by the provided ID.
50
59
  */