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
@@ -1,3 +1,4 @@
1
+ import { getDocument, getWindow } from "svelte-toolbelt";
1
2
  import { isBrowser, isElementHidden, isSelectableInput } from "./is.js";
2
3
  /**
3
4
  * Handles `initialFocus` prop behavior for the
@@ -20,12 +21,14 @@ export function handleCalendarInitialFocus(calendar) {
20
21
  * A utility function that focuses an element without scrolling.
21
22
  */
22
23
  export function focusWithoutScroll(element) {
24
+ const doc = getDocument(element);
25
+ const win = getWindow(element);
23
26
  const scrollPosition = {
24
- x: window.pageXOffset || document.documentElement.scrollLeft,
25
- y: window.pageYOffset || document.documentElement.scrollTop,
27
+ x: win.pageXOffset || doc.documentElement.scrollLeft,
28
+ y: win.pageYOffset || doc.documentElement.scrollTop,
26
29
  };
27
30
  element.focus();
28
- window.scrollTo(scrollPosition.x, scrollPosition.y);
31
+ win.scrollTo(scrollPosition.x, scrollPosition.y);
29
32
  }
30
33
  /**
31
34
  * A utility function that focuses an element.
@@ -33,9 +36,10 @@ export function focusWithoutScroll(element) {
33
36
  export function focus(element, { select = false } = {}) {
34
37
  if (!(element && element.focus))
35
38
  return;
36
- if (document.activeElement === element)
39
+ const doc = getDocument(element);
40
+ if (doc.activeElement === element)
37
41
  return;
38
- const previouslyFocusedElement = document.activeElement;
42
+ const previouslyFocusedElement = doc.activeElement;
39
43
  // prevent scroll on focus
40
44
  element.focus({ preventScroll: true });
41
45
  // only elect if its not the same element, it supports selection, and we need to select it
@@ -47,11 +51,11 @@ export function focus(element, { select = false } = {}) {
47
51
  * Attempts to focus the first element in a list of candidates.
48
52
  * Stops when focus is successful.
49
53
  */
50
- export function focusFirst(candidates, { select = false } = {}) {
51
- const previouslyFocusedElement = document.activeElement;
54
+ export function focusFirst(candidates, { select = false } = {}, getActiveElement) {
55
+ const previouslyFocusedElement = getActiveElement();
52
56
  for (const candidate of candidates) {
53
57
  focus(candidate, { select });
54
- if (document.activeElement !== previouslyFocusedElement)
58
+ if (getActiveElement() !== previouslyFocusedElement)
55
59
  return true;
56
60
  }
57
61
  }
@@ -78,7 +82,8 @@ export function findVisible(elements, container) {
78
82
  */
79
83
  export function getTabbableCandidates(container) {
80
84
  const nodes = [];
81
- const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {
85
+ const doc = getDocument(container);
86
+ const walker = doc.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {
82
87
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
88
  acceptNode: (node) => {
84
89
  const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden";
@@ -1,5 +1 @@
1
- /**
2
- * From https://github.com/melt-ui/melt-ui/blob/main/packages/svelte/src/lib/internal/math.ts
3
- */
4
- export declare function snapValueToStep(value: number, min: number, max: number, step: number): number;
5
1
  export declare function linearScale(domain: [number, number], range: [number, number], clamp?: boolean): (x: number) => number;
@@ -1,31 +1,3 @@
1
- /**
2
- * From https://github.com/melt-ui/melt-ui/blob/main/packages/svelte/src/lib/internal/math.ts
3
- */
4
- export function snapValueToStep(value, min, max, step) {
5
- const remainder = (value - (Number.isNaN(min) ? 0 : min)) % step;
6
- let snappedValue = Math.abs(remainder) * 2 >= step
7
- ? value + Math.sign(remainder) * (step - Math.abs(remainder))
8
- : value - remainder;
9
- if (!Number.isNaN(min)) {
10
- if (snappedValue < min) {
11
- snappedValue = min;
12
- }
13
- else if (!Number.isNaN(max) && snappedValue > max) {
14
- snappedValue = min + Math.floor((max - min) / step) * step;
15
- }
16
- }
17
- else if (!Number.isNaN(max) && snappedValue > max) {
18
- snappedValue = Math.floor(max / step) * step;
19
- }
20
- const string = step.toString();
21
- const index = string.indexOf(".");
22
- const precision = index >= 0 ? string.length - index : 0;
23
- if (precision > 0) {
24
- const pow = 10 ** precision;
25
- snappedValue = Math.round(snappedValue * pow) / pow;
26
- }
27
- return snappedValue;
28
- }
29
1
  export function linearScale(domain, range, clamp = true) {
30
2
  const [d0, d1] = domain;
31
3
  const [r0, r1] = range;
@@ -6,5 +6,3 @@ export declare function getTabbableIn(container: HTMLElement, direction: "next"
6
6
  */
7
7
  export declare function getTabbableFrom(currentNode: HTMLElement, direction: "next" | "prev"): import("tabbable").FocusableElement | undefined;
8
8
  export declare function getTabbableFromFocusable(currentNode: HTMLElement, direction: "next" | "prev"): import("tabbable").FocusableElement;
9
- export declare function getNextTabbable(): import("tabbable").FocusableElement | undefined;
10
- export declare function getPreviousTabbable(): import("tabbable").FocusableElement | undefined;
@@ -1,5 +1,6 @@
1
1
  import { focusable, isFocusable, isTabbable, tabbable } from "tabbable";
2
- import { activeElement, getDocument } from "./dom.js";
2
+ import { activeElement } from "./dom.js";
3
+ import { getDocument } from "svelte-toolbelt";
3
4
  function getTabbableOptions() {
4
5
  return {
5
6
  getShadowRoot: true,
@@ -32,35 +33,30 @@ export function getTabbableFrom(currentNode, direction) {
32
33
  if (!isTabbable(currentNode, getTabbableOptions())) {
33
34
  return getTabbableFromFocusable(currentNode, direction);
34
35
  }
35
- const allTabbable = tabbable(getDocument(currentNode).body, getTabbableOptions());
36
+ const doc = getDocument(currentNode);
37
+ const allTabbable = tabbable(doc.body, getTabbableOptions());
36
38
  if (direction === "prev")
37
39
  allTabbable.reverse();
38
40
  const activeIndex = allTabbable.indexOf(currentNode);
39
41
  if (activeIndex === -1)
40
- return document.body;
42
+ return doc.body;
41
43
  const nextTabbableElements = allTabbable.slice(activeIndex + 1);
42
44
  return nextTabbableElements[0];
43
45
  }
44
46
  export function getTabbableFromFocusable(currentNode, direction) {
47
+ const doc = getDocument(currentNode);
45
48
  if (!isFocusable(currentNode, getTabbableOptions()))
46
- return document.body;
49
+ return doc.body;
47
50
  // find all focusable nodes, since some elements may be focusable but not tabbable
48
51
  // such as context menu triggers
49
- const allFocusable = focusable(getDocument(currentNode).body, getTabbableOptions());
52
+ const allFocusable = focusable(doc.body, getTabbableOptions());
50
53
  // find index of current node among focusable siblings
51
54
  if (direction === "prev")
52
55
  allFocusable.reverse();
53
56
  const activeIndex = allFocusable.indexOf(currentNode);
54
57
  if (activeIndex === -1)
55
- return document.body;
58
+ return doc.body;
56
59
  const nextFocusableElements = allFocusable.slice(activeIndex + 1);
57
60
  // find the next focusable node that is also tabbable
58
- return (nextFocusableElements.find((node) => isTabbable(node, getTabbableOptions())) ??
59
- document.body);
60
- }
61
- export function getNextTabbable() {
62
- return getTabbableIn(document.body, "next");
63
- }
64
- export function getPreviousTabbable() {
65
- return getTabbableIn(document.body, "prev");
61
+ return nextFocusableElements.find((node) => isTabbable(node, getTabbableOptions())) ?? doc.body;
66
62
  }
@@ -5,6 +5,7 @@ type UseDataTypeaheadOpts = {
5
5
  getCurrentItem: () => string;
6
6
  candidateValues: Getter<string[]>;
7
7
  enabled: boolean;
8
+ getWindow: () => Window & typeof globalThis;
8
9
  };
9
10
  export declare function useDataTypeahead(opts: UseDataTypeaheadOpts): {
10
11
  search: import("svelte-toolbelt").WritableBox<string>;
@@ -2,7 +2,10 @@ import { getNextMatch } from "./arrays.js";
2
2
  import { boxAutoReset } from "./box-auto-reset.svelte.js";
3
3
  export function useDataTypeahead(opts) {
4
4
  // Reset `search` 1 second after it was last updated
5
- const search = boxAutoReset("", 1000);
5
+ const search = boxAutoReset("", {
6
+ afterMs: 1000,
7
+ getWindow: opts.getWindow,
8
+ });
6
9
  const candidateValues = $derived(opts.candidateValues());
7
10
  function handleTypeaheadSearch(key) {
8
11
  if (!opts.enabled)
@@ -2,8 +2,10 @@ export type DOMTypeahead = ReturnType<typeof useDOMTypeahead>;
2
2
  type UseDOMTypeaheadOpts = {
3
3
  onMatch?: (item: HTMLElement) => void;
4
4
  getCurrentItem?: () => HTMLElement | null;
5
+ getActiveElement: () => HTMLElement | null;
6
+ getWindow: () => Window & typeof globalThis;
5
7
  };
6
- export declare function useDOMTypeahead(opts?: UseDOMTypeaheadOpts): {
8
+ export declare function useDOMTypeahead(opts: UseDOMTypeaheadOpts): {
7
9
  search: import("svelte-toolbelt").WritableBox<string>;
8
10
  handleTypeaheadSearch: (key: string, candidates: HTMLElement[]) => HTMLElement | undefined;
9
11
  resetTypeahead: () => void;
@@ -2,9 +2,12 @@ import { getNextMatch } from "./arrays.js";
2
2
  import { boxAutoReset } from "./box-auto-reset.svelte.js";
3
3
  export function useDOMTypeahead(opts) {
4
4
  // Reset `search` 1 second after it was last updated
5
- const search = boxAutoReset("", 1000);
5
+ const search = boxAutoReset("", {
6
+ afterMs: 1000,
7
+ getWindow: opts.getWindow,
8
+ });
6
9
  const onMatch = opts?.onMatch ?? ((node) => node.focus());
7
- const getCurrentItem = opts?.getCurrentItem ?? (() => document.activeElement);
10
+ const getCurrentItem = opts?.getCurrentItem ?? (() => opts?.getActiveElement());
8
11
  function handleTypeaheadSearch(key, candidates) {
9
12
  if (!candidates.length)
10
13
  return;
@@ -1,14 +1,18 @@
1
- import { executeCallbacks } from "svelte-toolbelt";
1
+ import { executeCallbacks, getWindow } from "svelte-toolbelt";
2
2
  import { on } from "svelte/events";
3
3
  import { watch } from "runed";
4
4
  import { boxAutoReset } from "./box-auto-reset.svelte.js";
5
5
  import { isElement, isHTMLElement } from "./is.js";
6
6
  export function useGraceArea(opts) {
7
7
  const enabled = $derived(opts.enabled());
8
- const isPointerInTransit = boxAutoReset(false, opts.transitTimeout ?? 300, (value) => {
9
- if (enabled) {
10
- opts.setIsPointerInTransit?.(value);
11
- }
8
+ const isPointerInTransit = boxAutoReset(false, {
9
+ afterMs: opts.transitTimeout ?? 300,
10
+ onChange: (value) => {
11
+ if (enabled) {
12
+ opts.setIsPointerInTransit?.(value);
13
+ }
14
+ },
15
+ getWindow: () => getWindow(opts.triggerNode()),
12
16
  });
13
17
  let pointerGraceArea = $state(null);
14
18
  function handleRemoveGraceArea() {
@@ -1,4 +1,4 @@
1
- import { type ReadableBox } from "svelte-toolbelt";
1
+ import { type Box, type ReadableBox } from "svelte-toolbelt";
2
2
  import type { Orientation } from "../shared/index.js";
3
3
  type UseRovingFocusProps = ({
4
4
  /**
@@ -16,7 +16,7 @@ type UseRovingFocusProps = ({
16
16
  /**
17
17
  * The id of the root node
18
18
  */
19
- rootNodeId: ReadableBox<string>;
19
+ rootNode: Box<HTMLElement | null>;
20
20
  /**
21
21
  * Whether to loop through the candidates when reaching the end.
22
22
  */
@@ -32,7 +32,7 @@ type UseRovingFocusProps = ({
32
32
  onCandidateFocus?: (node: HTMLElement) => void;
33
33
  };
34
34
  export type UseRovingFocusReturn = ReturnType<typeof useRovingFocus>;
35
- export declare function useRovingFocus(props: UseRovingFocusProps): {
35
+ export declare function useRovingFocus(opts: UseRovingFocusProps): {
36
36
  setCurrentTabStopId(id: string): void;
37
37
  getTabIndex: (node: HTMLElement | null | undefined) => 0 | -1;
38
38
  handleKeydown: (node: HTMLElement | null | undefined, e: KeyboardEvent, both?: boolean) => HTMLElement | undefined;
@@ -3,20 +3,19 @@ import { getElemDirection } from "./locale.js";
3
3
  import { getDirectionalKeys } from "./get-directional-keys.js";
4
4
  import { kbd } from "./kbd.js";
5
5
  import { isBrowser } from "./is.js";
6
- export function useRovingFocus(props) {
6
+ export function useRovingFocus(opts) {
7
7
  const currentTabStopId = box(null);
8
8
  function getCandidateNodes() {
9
9
  if (!isBrowser)
10
10
  return [];
11
- const node = document.getElementById(props.rootNodeId.current);
12
- if (!node)
11
+ if (!opts.rootNode.current)
13
12
  return [];
14
- if (props.candidateSelector) {
15
- const candidates = Array.from(node.querySelectorAll(props.candidateSelector));
13
+ if (opts.candidateSelector) {
14
+ const candidates = Array.from(opts.rootNode.current.querySelectorAll(opts.candidateSelector));
16
15
  return candidates;
17
16
  }
18
- else if (props.candidateAttr) {
19
- const candidates = Array.from(node.querySelectorAll(`[${props.candidateAttr}]:not([data-disabled])`));
17
+ else if (opts.candidateAttr) {
18
+ const candidates = Array.from(opts.rootNode.current.querySelectorAll(`[${opts.candidateAttr}]:not([data-disabled])`));
20
19
  return candidates;
21
20
  }
22
21
  return [];
@@ -28,7 +27,7 @@ export function useRovingFocus(props) {
28
27
  items[0]?.focus();
29
28
  }
30
29
  function handleKeydown(node, e, both = false) {
31
- const rootNode = document.getElementById(props.rootNodeId.current);
30
+ const rootNode = opts.rootNode.current;
32
31
  if (!rootNode || !node)
33
32
  return;
34
33
  const items = getCandidateNodes();
@@ -36,8 +35,8 @@ export function useRovingFocus(props) {
36
35
  return;
37
36
  const currentIndex = items.indexOf(node);
38
37
  const dir = getElemDirection(rootNode);
39
- const { nextKey, prevKey } = getDirectionalKeys(dir, props.orientation.current);
40
- const loop = props.loop.current;
38
+ const { nextKey, prevKey } = getDirectionalKeys(dir, opts.orientation.current);
39
+ const loop = opts.loop.current;
41
40
  const keyToIndex = {
42
41
  [nextKey]: currentIndex + 1,
43
42
  [prevKey]: currentIndex - 1,
@@ -65,7 +64,7 @@ export function useRovingFocus(props) {
65
64
  return;
66
65
  itemToFocus.focus();
67
66
  currentTabStopId.current = itemToFocus.id;
68
- props.onCandidateFocus?.(itemToFocus);
67
+ opts.onCandidateFocus?.(itemToFocus);
69
68
  return itemToFocus;
70
69
  }
71
70
  function getTabIndex(node) {
@@ -1,9 +1,12 @@
1
- import type { DateValue } from "@internationalized/date";
2
- import type { DATE_SEGMENT_PARTS, EDITABLE_SEGMENT_PARTS, NON_EDITABLE_SEGMENT_PARTS, TIME_SEGMENT_PARTS } from "../../internal/date-time/field/parts.js";
1
+ import type { CalendarDateTime, DateValue, Time, ZonedDateTime } from "@internationalized/date";
2
+ import type { DATE_SEGMENT_PARTS, EDITABLE_SEGMENT_PARTS, NON_EDITABLE_SEGMENT_PARTS, EDITABLE_TIME_SEGMENT_PARTS } from "../../internal/date-time/field/parts.js";
3
3
  export type Granularity = "day" | "hour" | "minute" | "second";
4
+ export type TimeGranularity = "hour" | "minute" | "second";
4
5
  export type HourCycle = 12 | 24;
5
6
  export type WeekStartsOn = 0 | 1 | 2 | 3 | 4 | 5 | 6;
6
7
  export type DateMatcher = (date: DateValue) => boolean;
8
+ export type TimeValue = Time | CalendarDateTime | ZonedDateTime;
9
+ export type TimeValidator<T extends TimeValue> = (time: T) => string[] | string | void;
7
10
  /**
8
11
  * A function that returns a string or array of strings as validation errors if the date is
9
12
  * invalid, or nothing if the date is valid
@@ -17,15 +20,28 @@ export type DateRangeValidator = (range: {
17
20
  start: DateValue;
18
21
  end: DateValue;
19
22
  }) => string[] | string | void;
23
+ export type TimeRangeValidator<T extends TimeValue = Time> = (range: {
24
+ start: T;
25
+ end: T;
26
+ }) => string[] | string | void;
20
27
  /**
21
28
  * A callback fired when the date field's value is invalid. Use this to display an error
22
29
  * message to the user.
23
30
  */
24
31
  export type DateOnInvalid = (reason: "min" | "max" | "custom", msg?: string | string[]) => void;
32
+ /**
33
+ * A callback fired when the time field's value is invalid. Use this to display an error
34
+ * message to the user.
35
+ */
36
+ export type TimeOnInvalid = (reason: "min" | "max" | "custom", msg?: string | string[]) => void;
25
37
  export type DateRange = {
26
38
  start: DateValue | undefined;
27
39
  end: DateValue | undefined;
28
40
  };
41
+ export type TimeRange<T extends TimeValue = Time> = {
42
+ start: T | undefined;
43
+ end: T | undefined;
44
+ };
29
45
  export type Month<T> = {
30
46
  /**
31
47
  * A `DateValue` used to represent the month. Since days
@@ -52,21 +68,25 @@ export type Month<T> = {
52
68
  dates: T[];
53
69
  };
54
70
  export type DateSegmentPart = (typeof DATE_SEGMENT_PARTS)[number];
55
- export type TimeSegmentPart = (typeof TIME_SEGMENT_PARTS)[number];
71
+ export type EditableTimeSegmentPart = (typeof EDITABLE_TIME_SEGMENT_PARTS)[number];
56
72
  export type EditableSegmentPart = (typeof EDITABLE_SEGMENT_PARTS)[number];
57
73
  export type NonEditableSegmentPart = (typeof NON_EDITABLE_SEGMENT_PARTS)[number];
58
74
  export type SegmentPart = EditableSegmentPart | NonEditableSegmentPart;
75
+ export type TimeSegmentPart = EditableTimeSegmentPart | "literal";
76
+ export type AnyTimeExceptLiteral = Exclude<TimeSegmentPart, "literal">;
59
77
  export type AnyExceptLiteral = Exclude<SegmentPart, "literal">;
60
78
  export type DayPeriod = "AM" | "PM" | null;
61
79
  export type DateSegmentObj = {
62
80
  [K in DateSegmentPart]: string | null;
63
81
  };
64
82
  export type TimeSegmentObj = {
65
- [K in TimeSegmentPart]: K extends "dayPeriod" ? DayPeriod : string | null;
83
+ [K in EditableTimeSegmentPart]: K extends "dayPeriod" ? DayPeriod : string | null;
66
84
  };
67
85
  export type DateAndTimeSegmentObj = DateSegmentObj & TimeSegmentObj;
68
86
  export type SegmentValueObj = DateSegmentObj | DateAndTimeSegmentObj;
69
87
  export type SegmentContentObj = Record<EditableSegmentPart, string>;
88
+ export type TimeSegmentValueObj = TimeSegmentObj;
89
+ export type TimeSegmentContentObj = Record<EditableTimeSegmentPart, string>;
70
90
  export type SegmentState = {
71
91
  lastKeyZero: boolean;
72
92
  hasLeftFocus: boolean;
@@ -75,3 +95,6 @@ export type SegmentState = {
75
95
  export type SegmentStateMap = {
76
96
  [K in EditableSegmentPart]: SegmentState;
77
97
  };
98
+ export type TimeSegmentStateMap = {
99
+ [K in EditableTimeSegmentPart]: SegmentState;
100
+ };
@@ -29,8 +29,8 @@ export type WithoutChild<T> = T extends {
29
29
  export type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & {
30
30
  ref?: U | null;
31
31
  };
32
- export type { EditableSegmentPart } from "./date/types.js";
33
- export type { Month, DateMatcher, DateOnInvalid, DateRangeValidator, DateValidator, DateRange, } from "./date/types.js";
32
+ export type { EditableSegmentPart, EditableTimeSegmentPart } from "./date/types.js";
33
+ export type { Month, DateMatcher, DateOnInvalid, DateRangeValidator, DateValidator, DateRange, TimeValue, TimeSegmentPart, TimeRange, TimeValidator, TimeRangeValidator, TimeOnInvalid, } from "./date/types.js";
34
34
  export type { WithChild, Without, WithChildren } from "../internal/types.js";
35
35
  export { mergeProps } from "svelte-toolbelt";
36
36
  export { useId } from "../internal/use-id.js";
package/dist/types.d.ts CHANGED
@@ -33,6 +33,8 @@ export type * from "./bits/separator/types.js";
33
33
  export type * from "./bits/slider/types.js";
34
34
  export type * from "./bits/switch/types.js";
35
35
  export type * from "./bits/tabs/types.js";
36
+ export type * from "./bits/time-field/types.js";
37
+ export type * from "./bits/time-range-field/types.js";
36
38
  export type * from "./bits/toggle/types.js";
37
39
  export type * from "./bits/toggle-group/types.js";
38
40
  export type * from "./bits/toolbar/types.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bits-ui",
3
- "version": "1.8.0",
3
+ "version": "2.2.0",
4
4
  "license": "MIT",
5
5
  "repository": "github:huntabyte/bits-ui",
6
6
  "funding": "https://github.com/sponsors/huntabyte",
@@ -9,7 +9,8 @@
9
9
  "exports": {
10
10
  ".": {
11
11
  "types": "./dist/index.d.ts",
12
- "svelte": "./dist/index.js"
12
+ "svelte": "./dist/index.js",
13
+ "default": "./dist/index.js"
13
14
  }
14
15
  },
15
16
  "files": [
@@ -18,9 +19,10 @@
18
19
  "!dist/**/*.spec.*"
19
20
  ],
20
21
  "devDependencies": {
21
- "@sveltejs/kit": "^2.16.1",
22
- "@sveltejs/package": "^2.3.9",
23
- "@sveltejs/vite-plugin-svelte": "4.0.0",
22
+ "@internationalized/date": "^3.8.1",
23
+ "@sveltejs/kit": "^2.21.1",
24
+ "@sveltejs/package": "^2.3.11",
25
+ "@sveltejs/vite-plugin-svelte": "5.0.3",
24
26
  "@types/css.escape": "^1.5.2",
25
27
  "@types/node": "^20.17.6",
26
28
  "@types/resize-observer-browser": "^0.1.11",
@@ -28,32 +30,32 @@
28
30
  "jest-axe": "^9.0.0",
29
31
  "jsdom": "^24.1.3",
30
32
  "publint": "^0.2.12",
31
- "svelte": "^5.22.6",
32
- "svelte-check": "^4.1.4",
33
+ "svelte": "^5.33.2",
34
+ "svelte-check": "^4.2.1",
33
35
  "tslib": "^2.8.1",
34
36
  "typescript": "^5.8.3",
35
- "vite": "^5.4.11",
36
- "vitest": "^2.1.8"
37
+ "vite": "^6.3.5",
38
+ "vitest": "^3.1.4"
37
39
  },
38
40
  "svelte": "./dist/index.js",
39
41
  "types": "./dist/index.d.ts",
40
42
  "type": "module",
41
43
  "dependencies": {
42
- "@floating-ui/core": "^1.6.4",
43
- "@floating-ui/dom": "^1.6.7",
44
- "@internationalized/date": "^3.5.6",
44
+ "@floating-ui/core": "^1.7.0",
45
+ "@floating-ui/dom": "^1.7.0",
45
46
  "css.escape": "^1.5.1",
46
47
  "esm-env": "^1.1.2",
47
- "runed": "^0.23.2",
48
- "svelte-toolbelt": "^0.7.1",
48
+ "runed": "^0.28.0",
49
+ "svelte-toolbelt": "^0.9.1",
49
50
  "tabbable": "^6.2.0"
50
51
  },
51
52
  "peerDependencies": {
52
- "svelte": "^5.11.0"
53
+ "@internationalized/date": "^3.8.1",
54
+ "svelte": "^5.33.0"
53
55
  },
54
56
  "engines": {
55
57
  "pnpm": ">=8.7.0",
56
- "node": ">=18"
58
+ "node": ">=20"
57
59
  },
58
60
  "sideEffects": false,
59
61
  "scripts": {
@@ -1,7 +0,0 @@
1
- import { type WritableBox } from "svelte-toolbelt";
2
- export declare function useSize(node: WritableBox<HTMLElement | null>): {
3
- readonly value: {
4
- width: number;
5
- height: number;
6
- } | undefined;
7
- };
@@ -1,54 +0,0 @@
1
- /// <reference types="resize-observer-browser" />
2
- import { untrack } from "svelte";
3
- import { afterTick } from "svelte-toolbelt";
4
- export function useSize(node) {
5
- let size = $state(undefined);
6
- $effect(() => {
7
- const currNode = node.current;
8
- if (!currNode) {
9
- size = undefined;
10
- return;
11
- }
12
- afterTick(() => {
13
- if (!currNode)
14
- return;
15
- size = {
16
- width: currNode.offsetWidth,
17
- height: currNode.offsetHeight,
18
- };
19
- });
20
- const resizeObserver = new ResizeObserver((entries) => {
21
- if (!Array.isArray(entries) || !entries.length)
22
- return;
23
- const entry = entries[0];
24
- if (!entry)
25
- return;
26
- let width;
27
- let height;
28
- if ("borderBoxSize" in entry) {
29
- const borderSizeEntry = entry.borderBoxSize;
30
- const borderSize = Array.isArray(borderSizeEntry)
31
- ? borderSizeEntry[0]
32
- : borderSizeEntry;
33
- width = borderSize.inlineSize;
34
- height = borderSize.blockSize;
35
- }
36
- else {
37
- width = currNode.offsetWidth;
38
- height = currNode.offsetHeight;
39
- }
40
- untrack(() => (size = { width, height }));
41
- });
42
- resizeObserver.observe(currNode, { box: "border-box" });
43
- return () => {
44
- if (!currNode)
45
- return;
46
- resizeObserver.unobserve(currNode);
47
- };
48
- });
49
- return {
50
- get value() {
51
- return size;
52
- },
53
- };
54
- }