bits-ui 2.7.0 → 2.8.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 (366) hide show
  1. package/README.md +4 -4
  2. package/dist/bits/accordion/accordion.svelte.d.ts +66 -58
  3. package/dist/bits/accordion/accordion.svelte.js +56 -51
  4. package/dist/bits/accordion/components/accordion-content.svelte +4 -4
  5. package/dist/bits/accordion/components/accordion-header.svelte +2 -2
  6. package/dist/bits/accordion/components/accordion-item.svelte +2 -2
  7. package/dist/bits/accordion/components/accordion-trigger.svelte +2 -2
  8. package/dist/bits/accordion/components/accordion.svelte +2 -2
  9. package/dist/bits/alert-dialog/components/alert-dialog-action.svelte +2 -2
  10. package/dist/bits/alert-dialog/components/alert-dialog-cancel.svelte +2 -2
  11. package/dist/bits/alert-dialog/components/alert-dialog-content.svelte +3 -3
  12. package/dist/bits/alert-dialog/components/alert-dialog.svelte +9 -3
  13. package/dist/bits/aspect-ratio/aspect-ratio.svelte.d.ts +10 -16
  14. package/dist/bits/aspect-ratio/aspect-ratio.svelte.js +4 -11
  15. package/dist/bits/aspect-ratio/components/aspect-ratio.svelte +2 -2
  16. package/dist/bits/avatar/avatar.svelte.d.ts +25 -33
  17. package/dist/bits/avatar/avatar.svelte.js +20 -21
  18. package/dist/bits/avatar/components/avatar-fallback.svelte +2 -2
  19. package/dist/bits/avatar/components/avatar-image.svelte +2 -2
  20. package/dist/bits/avatar/components/avatar.svelte +2 -2
  21. package/dist/bits/calendar/calendar.svelte.d.ts +117 -106
  22. package/dist/bits/calendar/calendar.svelte.js +51 -52
  23. package/dist/bits/calendar/components/calendar-cell.svelte +2 -2
  24. package/dist/bits/calendar/components/calendar-day.svelte +2 -2
  25. package/dist/bits/calendar/components/calendar-grid-body.svelte +2 -2
  26. package/dist/bits/calendar/components/calendar-grid-head.svelte +2 -2
  27. package/dist/bits/calendar/components/calendar-grid-row.svelte +2 -2
  28. package/dist/bits/calendar/components/calendar-grid.svelte +2 -2
  29. package/dist/bits/calendar/components/calendar-head-cell.svelte +2 -2
  30. package/dist/bits/calendar/components/calendar-header.svelte +2 -2
  31. package/dist/bits/calendar/components/calendar-heading.svelte +5 -5
  32. package/dist/bits/calendar/components/calendar-month-select.svelte +2 -2
  33. package/dist/bits/calendar/components/calendar-next-button.svelte +2 -2
  34. package/dist/bits/calendar/components/calendar-prev-button.svelte +2 -2
  35. package/dist/bits/calendar/components/calendar-year-select.svelte +2 -2
  36. package/dist/bits/calendar/components/calendar.svelte +2 -2
  37. package/dist/bits/checkbox/checkbox.svelte.d.ts +37 -34
  38. package/dist/bits/checkbox/checkbox.svelte.js +19 -22
  39. package/dist/bits/checkbox/components/checkbox-group-label.svelte +2 -2
  40. package/dist/bits/checkbox/components/checkbox-group.svelte +2 -2
  41. package/dist/bits/checkbox/components/checkbox-input.svelte +2 -2
  42. package/dist/bits/checkbox/components/checkbox.svelte +2 -2
  43. package/dist/bits/collapsible/collapsible.svelte.d.ts +30 -27
  44. package/dist/bits/collapsible/collapsible.svelte.js +23 -15
  45. package/dist/bits/collapsible/components/collapsible-content.svelte +5 -5
  46. package/dist/bits/collapsible/components/collapsible-content.svelte.d.ts +1 -4
  47. package/dist/bits/collapsible/components/collapsible-trigger.svelte +2 -2
  48. package/dist/bits/collapsible/components/collapsible.svelte +4 -2
  49. package/dist/bits/collapsible/types.d.ts +4 -0
  50. package/dist/bits/combobox/components/combobox-input.svelte +2 -2
  51. package/dist/bits/combobox/components/combobox-trigger.svelte +2 -2
  52. package/dist/bits/combobox/components/combobox.svelte +4 -2
  53. package/dist/bits/command/command.svelte.d.ts +103 -92
  54. package/dist/bits/command/command.svelte.js +55 -57
  55. package/dist/bits/command/components/_command-label.svelte +2 -2
  56. package/dist/bits/command/components/command-empty.svelte +2 -2
  57. package/dist/bits/command/components/command-group-heading.svelte +2 -2
  58. package/dist/bits/command/components/command-group-items.svelte +2 -2
  59. package/dist/bits/command/components/command-group.svelte +2 -2
  60. package/dist/bits/command/components/command-input.svelte +2 -2
  61. package/dist/bits/command/components/command-item.svelte +2 -2
  62. package/dist/bits/command/components/command-link-item.svelte +2 -2
  63. package/dist/bits/command/components/command-list.svelte +2 -2
  64. package/dist/bits/command/components/command-loading.svelte +2 -2
  65. package/dist/bits/command/components/command-separator.svelte +2 -2
  66. package/dist/bits/command/components/command-viewport.svelte +2 -2
  67. package/dist/bits/command/components/command.svelte +2 -2
  68. package/dist/bits/context-menu/components/context-menu-content-static.svelte +3 -3
  69. package/dist/bits/context-menu/components/context-menu-content.svelte +3 -3
  70. package/dist/bits/context-menu/components/context-menu-trigger.svelte +2 -2
  71. package/dist/bits/context-menu/components/context-menu.svelte +16 -11
  72. package/dist/bits/date-field/components/date-field-hidden-input.svelte +2 -2
  73. package/dist/bits/date-field/components/date-field-input.svelte +2 -2
  74. package/dist/bits/date-field/components/date-field-label.svelte +2 -2
  75. package/dist/bits/date-field/components/date-field-segment.svelte +2 -2
  76. package/dist/bits/date-field/components/date-field.svelte +2 -2
  77. package/dist/bits/date-field/date-field.svelte.d.ts +85 -74
  78. package/dist/bits/date-field/date-field.svelte.js +55 -53
  79. package/dist/bits/date-picker/components/date-picker-calendar.svelte +2 -2
  80. package/dist/bits/date-picker/components/date-picker.svelte +8 -6
  81. package/dist/bits/date-picker/date-picker.svelte.d.ts +10 -10
  82. package/dist/bits/date-picker/date-picker.svelte.js +6 -5
  83. package/dist/bits/date-picker/types.d.ts +4 -0
  84. package/dist/bits/date-range-field/components/date-range-field-input.svelte +2 -2
  85. package/dist/bits/date-range-field/components/date-range-field-label.svelte +2 -2
  86. package/dist/bits/date-range-field/components/date-range-field.svelte +2 -2
  87. package/dist/bits/date-range-field/date-range-field.svelte.d.ts +32 -29
  88. package/dist/bits/date-range-field/date-range-field.svelte.js +33 -32
  89. package/dist/bits/date-range-picker/components/date-range-picker-calendar.svelte +2 -2
  90. package/dist/bits/date-range-picker/components/date-range-picker.svelte +8 -6
  91. package/dist/bits/date-range-picker/date-range-picker.svelte.d.ts +10 -10
  92. package/dist/bits/date-range-picker/date-range-picker.svelte.js +6 -5
  93. package/dist/bits/date-range-picker/types.d.ts +4 -0
  94. package/dist/bits/dialog/components/dialog-close.svelte +2 -2
  95. package/dist/bits/dialog/components/dialog-content.svelte +3 -3
  96. package/dist/bits/dialog/components/dialog-description.svelte +2 -2
  97. package/dist/bits/dialog/components/dialog-overlay.svelte +3 -6
  98. package/dist/bits/dialog/components/dialog-title.svelte +2 -2
  99. package/dist/bits/dialog/components/dialog-trigger.svelte +2 -2
  100. package/dist/bits/dialog/components/dialog.svelte +9 -3
  101. package/dist/bits/dialog/dialog.svelte.d.ts +75 -65
  102. package/dist/bits/dialog/dialog.svelte.js +47 -38
  103. package/dist/bits/dialog/types.d.ts +4 -0
  104. package/dist/bits/dropdown-menu/components/dropdown-menu-content-static.svelte +3 -3
  105. package/dist/bits/dropdown-menu/components/dropdown-menu-content.svelte +3 -3
  106. package/dist/bits/label/components/label.svelte +2 -2
  107. package/dist/bits/label/label.svelte.d.ts +8 -7
  108. package/dist/bits/label/label.svelte.js +4 -4
  109. package/dist/bits/link-preview/components/link-preview-content-static.svelte +3 -3
  110. package/dist/bits/link-preview/components/link-preview-content.svelte +3 -3
  111. package/dist/bits/link-preview/components/link-preview-trigger.svelte +2 -2
  112. package/dist/bits/link-preview/components/link-preview.svelte +4 -2
  113. package/dist/bits/link-preview/link-preview.svelte.d.ts +28 -25
  114. package/dist/bits/link-preview/link-preview.svelte.js +24 -16
  115. package/dist/bits/link-preview/types.d.ts +4 -0
  116. package/dist/bits/menu/components/menu-arrow.svelte +2 -2
  117. package/dist/bits/menu/components/menu-checkbox-group.svelte +2 -2
  118. package/dist/bits/menu/components/menu-checkbox-item.svelte +2 -2
  119. package/dist/bits/menu/components/menu-content-static.svelte +3 -3
  120. package/dist/bits/menu/components/menu-content.svelte +3 -3
  121. package/dist/bits/menu/components/menu-group-heading.svelte +2 -2
  122. package/dist/bits/menu/components/menu-group.svelte +2 -2
  123. package/dist/bits/menu/components/menu-item.svelte +2 -2
  124. package/dist/bits/menu/components/menu-radio-group.svelte +2 -2
  125. package/dist/bits/menu/components/menu-radio-item.svelte +2 -2
  126. package/dist/bits/menu/components/menu-separator.svelte +2 -2
  127. package/dist/bits/menu/components/menu-sub-content-static.svelte +3 -3
  128. package/dist/bits/menu/components/menu-sub-content.svelte +3 -3
  129. package/dist/bits/menu/components/menu-sub-trigger.svelte +2 -2
  130. package/dist/bits/menu/components/menu-sub.svelte +9 -3
  131. package/dist/bits/menu/components/menu-trigger.svelte +2 -2
  132. package/dist/bits/menu/components/menu.svelte +16 -11
  133. package/dist/bits/menu/menu.svelte.d.ts +136 -119
  134. package/dist/bits/menu/menu.svelte.js +106 -96
  135. package/dist/bits/menu/types.d.ts +8 -0
  136. package/dist/bits/menubar/components/menubar-content-static.svelte +2 -2
  137. package/dist/bits/menubar/components/menubar-content.svelte +2 -2
  138. package/dist/bits/menubar/components/menubar-menu.svelte +2 -2
  139. package/dist/bits/menubar/components/menubar-trigger.svelte +4 -4
  140. package/dist/bits/menubar/components/menubar.svelte +2 -2
  141. package/dist/bits/menubar/menubar.svelte.d.ts +37 -34
  142. package/dist/bits/menubar/menubar.svelte.js +21 -21
  143. package/dist/bits/meter/components/meter.svelte +2 -2
  144. package/dist/bits/meter/meter.svelte.d.ts +10 -9
  145. package/dist/bits/meter/meter.svelte.js +4 -4
  146. package/dist/bits/navigation-menu/components/navigation-menu-content-impl.svelte +2 -2
  147. package/dist/bits/navigation-menu/components/navigation-menu-content.svelte +3 -3
  148. package/dist/bits/navigation-menu/components/navigation-menu-indicator-impl.svelte +2 -2
  149. package/dist/bits/navigation-menu/components/navigation-menu-indicator.svelte +3 -3
  150. package/dist/bits/navigation-menu/components/navigation-menu-item.svelte +2 -2
  151. package/dist/bits/navigation-menu/components/navigation-menu-link.svelte +2 -2
  152. package/dist/bits/navigation-menu/components/navigation-menu-list.svelte +2 -2
  153. package/dist/bits/navigation-menu/components/navigation-menu-sub.svelte +2 -2
  154. package/dist/bits/navigation-menu/components/navigation-menu-trigger.svelte +2 -2
  155. package/dist/bits/navigation-menu/components/navigation-menu-viewport.svelte +3 -3
  156. package/dist/bits/navigation-menu/components/navigation-menu.svelte +2 -2
  157. package/dist/bits/navigation-menu/navigation-menu.svelte.d.ts +116 -109
  158. package/dist/bits/navigation-menu/navigation-menu.svelte.js +78 -81
  159. package/dist/bits/pagination/components/pagination-next-button.svelte +2 -2
  160. package/dist/bits/pagination/components/pagination-page.svelte +2 -2
  161. package/dist/bits/pagination/components/pagination-prev-button.svelte +2 -2
  162. package/dist/bits/pagination/components/pagination.svelte +2 -2
  163. package/dist/bits/pagination/pagination.svelte.d.ts +34 -32
  164. package/dist/bits/pagination/pagination.svelte.js +15 -15
  165. package/dist/bits/pin-input/components/pin-input-cell.svelte +2 -2
  166. package/dist/bits/pin-input/components/pin-input.svelte +2 -2
  167. package/dist/bits/pin-input/pin-input.svelte.d.ts +22 -21
  168. package/dist/bits/pin-input/pin-input.svelte.js +9 -9
  169. package/dist/bits/popover/components/popover-close.svelte +2 -2
  170. package/dist/bits/popover/components/popover-content-static.svelte +3 -3
  171. package/dist/bits/popover/components/popover-content.svelte +3 -3
  172. package/dist/bits/popover/components/popover-trigger.svelte +2 -2
  173. package/dist/bits/popover/components/popover.svelte +9 -3
  174. package/dist/bits/popover/popover.svelte.d.ts +36 -31
  175. package/dist/bits/popover/popover.svelte.js +26 -21
  176. package/dist/bits/popover/types.d.ts +4 -0
  177. package/dist/bits/progress/components/progress.svelte +2 -2
  178. package/dist/bits/progress/progress.svelte.d.ts +10 -9
  179. package/dist/bits/progress/progress.svelte.js +4 -4
  180. package/dist/bits/radio-group/components/radio-group-input.svelte +2 -2
  181. package/dist/bits/radio-group/components/radio-group-item.svelte +2 -2
  182. package/dist/bits/radio-group/components/radio-group.svelte +2 -2
  183. package/dist/bits/radio-group/radio-group.svelte.d.ts +21 -19
  184. package/dist/bits/radio-group/radio-group.svelte.js +15 -15
  185. package/dist/bits/range-calendar/components/range-calendar-cell.svelte +2 -2
  186. package/dist/bits/range-calendar/components/range-calendar-day.svelte +2 -2
  187. package/dist/bits/range-calendar/components/range-calendar.svelte +2 -2
  188. package/dist/bits/range-calendar/range-calendar.svelte.d.ts +21 -20
  189. package/dist/bits/range-calendar/range-calendar.svelte.js +12 -12
  190. package/dist/bits/rating-group/components/rating-group-input.svelte +2 -2
  191. package/dist/bits/rating-group/components/rating-group-item.svelte +2 -2
  192. package/dist/bits/rating-group/components/rating-group.svelte +2 -2
  193. package/dist/bits/rating-group/rating-group.svelte.d.ts +19 -18
  194. package/dist/bits/rating-group/rating-group.svelte.js +16 -17
  195. package/dist/bits/scroll-area/components/scroll-area-corner-impl.svelte +2 -2
  196. package/dist/bits/scroll-area/components/scroll-area-scrollbar-auto.svelte +3 -3
  197. package/dist/bits/scroll-area/components/scroll-area-scrollbar-hover.svelte +6 -6
  198. package/dist/bits/scroll-area/components/scroll-area-scrollbar-scroll.svelte +3 -3
  199. package/dist/bits/scroll-area/components/scroll-area-scrollbar-shared.svelte +2 -2
  200. package/dist/bits/scroll-area/components/scroll-area-scrollbar-visible.svelte +2 -2
  201. package/dist/bits/scroll-area/components/scroll-area-scrollbar-x.svelte +2 -2
  202. package/dist/bits/scroll-area/components/scroll-area-scrollbar-y.svelte +2 -2
  203. package/dist/bits/scroll-area/components/scroll-area-scrollbar.svelte +2 -2
  204. package/dist/bits/scroll-area/components/scroll-area-thumb-impl.svelte +2 -2
  205. package/dist/bits/scroll-area/components/scroll-area-thumb.svelte +2 -5
  206. package/dist/bits/scroll-area/components/scroll-area-viewport.svelte +2 -2
  207. package/dist/bits/scroll-area/components/scroll-area.svelte +2 -2
  208. package/dist/bits/scroll-area/scroll-area.svelte.d.ts +98 -78
  209. package/dist/bits/scroll-area/scroll-area.svelte.js +78 -74
  210. package/dist/bits/select/components/select-content-static.svelte +3 -3
  211. package/dist/bits/select/components/select-content.svelte +3 -3
  212. package/dist/bits/select/components/select-group-heading.svelte +2 -2
  213. package/dist/bits/select/components/select-group.svelte +2 -2
  214. package/dist/bits/select/components/select-hidden-input.svelte +2 -2
  215. package/dist/bits/select/components/select-item.svelte +2 -2
  216. package/dist/bits/select/components/select-scroll-down-button.svelte +2 -2
  217. package/dist/bits/select/components/select-scroll-up-button.svelte +2 -2
  218. package/dist/bits/select/components/select-trigger.svelte +2 -2
  219. package/dist/bits/select/components/select-viewport.svelte +2 -2
  220. package/dist/bits/select/components/select.svelte +4 -2
  221. package/dist/bits/select/select.svelte.d.ts +127 -113
  222. package/dist/bits/select/select.svelte.js +72 -62
  223. package/dist/bits/select/types.d.ts +4 -0
  224. package/dist/bits/separator/components/separator.svelte +2 -2
  225. package/dist/bits/separator/separator.svelte.d.ts +9 -8
  226. package/dist/bits/separator/separator.svelte.js +4 -4
  227. package/dist/bits/slider/components/slider-range.svelte +2 -2
  228. package/dist/bits/slider/components/slider-thumb-label.svelte +2 -2
  229. package/dist/bits/slider/components/slider-thumb.svelte +2 -2
  230. package/dist/bits/slider/components/slider-tick-label.svelte +2 -2
  231. package/dist/bits/slider/components/slider-tick.svelte +2 -2
  232. package/dist/bits/slider/components/slider.svelte +2 -2
  233. package/dist/bits/slider/slider.svelte.d.ts +82 -73
  234. package/dist/bits/slider/slider.svelte.js +30 -28
  235. package/dist/bits/switch/components/switch-input.svelte +2 -2
  236. package/dist/bits/switch/components/switch-thumb.svelte +2 -2
  237. package/dist/bits/switch/components/switch.svelte +2 -2
  238. package/dist/bits/switch/switch.svelte.d.ts +19 -17
  239. package/dist/bits/switch/switch.svelte.js +13 -13
  240. package/dist/bits/tabs/components/tabs-content.svelte +2 -2
  241. package/dist/bits/tabs/components/tabs-list.svelte +2 -2
  242. package/dist/bits/tabs/components/tabs-trigger.svelte +2 -2
  243. package/dist/bits/tabs/components/tabs.svelte +2 -2
  244. package/dist/bits/tabs/tabs.svelte.d.ts +33 -29
  245. package/dist/bits/tabs/tabs.svelte.js +19 -19
  246. package/dist/bits/time-field/components/time-field-hidden-input.svelte +2 -2
  247. package/dist/bits/time-field/components/time-field-input.svelte +2 -2
  248. package/dist/bits/time-field/components/time-field-label.svelte +2 -2
  249. package/dist/bits/time-field/components/time-field-segment.svelte +2 -2
  250. package/dist/bits/time-field/components/time-field.svelte +2 -2
  251. package/dist/bits/time-field/time-field.svelte.d.ts +72 -66
  252. package/dist/bits/time-field/time-field.svelte.js +37 -42
  253. package/dist/bits/time-range-field/components/time-range-field-input.svelte +2 -2
  254. package/dist/bits/time-range-field/components/time-range-field-label.svelte +2 -2
  255. package/dist/bits/time-range-field/components/time-range-field.svelte +2 -2
  256. package/dist/bits/time-range-field/time-range-field.svelte.d.ts +35 -31
  257. package/dist/bits/time-range-field/time-range-field.svelte.js +34 -32
  258. package/dist/bits/toggle/components/toggle.svelte +2 -2
  259. package/dist/bits/toggle/toggle.svelte.d.ts +11 -10
  260. package/dist/bits/toggle/toggle.svelte.js +4 -4
  261. package/dist/bits/toggle-group/components/toggle-group-item.svelte +2 -2
  262. package/dist/bits/toggle-group/components/toggle-group.svelte +2 -2
  263. package/dist/bits/toggle-group/toggle-group.svelte.d.ts +48 -43
  264. package/dist/bits/toggle-group/toggle-group.svelte.js +24 -25
  265. package/dist/bits/toolbar/components/toolbar-button.svelte +2 -2
  266. package/dist/bits/toolbar/components/toolbar-group-item.svelte +2 -2
  267. package/dist/bits/toolbar/components/toolbar-group.svelte +2 -2
  268. package/dist/bits/toolbar/components/toolbar-link.svelte +2 -2
  269. package/dist/bits/toolbar/components/toolbar.svelte +2 -2
  270. package/dist/bits/toolbar/toolbar.svelte.d.ts +59 -51
  271. package/dist/bits/toolbar/toolbar.svelte.js +32 -30
  272. package/dist/bits/tooltip/components/tooltip-content-static.svelte +3 -3
  273. package/dist/bits/tooltip/components/tooltip-content.svelte +3 -3
  274. package/dist/bits/tooltip/components/tooltip-provider.svelte +2 -2
  275. package/dist/bits/tooltip/components/tooltip-trigger.svelte +2 -2
  276. package/dist/bits/tooltip/components/tooltip.svelte +4 -2
  277. package/dist/bits/tooltip/tooltip.svelte.d.ts +33 -29
  278. package/dist/bits/tooltip/tooltip.svelte.js +33 -28
  279. package/dist/bits/tooltip/types.d.ts +4 -0
  280. package/dist/bits/utilities/config/bits-config.d.ts +1 -1
  281. package/dist/bits/utilities/dismissible-layer/dismissible-layer.svelte +2 -2
  282. package/dist/bits/utilities/dismissible-layer/use-dismissable-layer.svelte.d.ts +6 -7
  283. package/dist/bits/utilities/dismissible-layer/use-dismissable-layer.svelte.js +3 -3
  284. package/dist/bits/utilities/escape-layer/escape-layer.svelte +2 -2
  285. package/dist/bits/utilities/escape-layer/use-escape-layer.svelte.d.ts +6 -7
  286. package/dist/bits/utilities/escape-layer/use-escape-layer.svelte.js +3 -3
  287. package/dist/bits/utilities/floating-layer/components/floating-layer-anchor.svelte +2 -2
  288. package/dist/bits/utilities/floating-layer/components/floating-layer-arrow.svelte +2 -2
  289. package/dist/bits/utilities/floating-layer/components/floating-layer-content.svelte +2 -2
  290. package/dist/bits/utilities/floating-layer/components/floating-layer.svelte +2 -2
  291. package/dist/bits/utilities/floating-layer/use-floating-layer.svelte.d.ts +25 -23
  292. package/dist/bits/utilities/floating-layer/use-floating-layer.svelte.js +25 -25
  293. package/dist/bits/utilities/focus-scope/use-focus-scope.svelte.d.ts +1 -1
  294. package/dist/bits/utilities/focus-scope/use-focus-scope.svelte.js +1 -1
  295. package/dist/bits/utilities/popper-layer/popper-layer-force-mount.svelte +1 -1
  296. package/dist/bits/utilities/popper-layer/popper-layer-force-mount.svelte.d.ts +1 -1
  297. package/dist/bits/utilities/popper-layer/popper-layer-inner.svelte +1 -1
  298. package/dist/bits/utilities/popper-layer/popper-layer-inner.svelte.d.ts +1 -1
  299. package/dist/bits/utilities/popper-layer/popper-layer.svelte +3 -3
  300. package/dist/bits/utilities/presence-layer/presence-layer.svelte +8 -8
  301. package/dist/bits/utilities/presence-layer/presence.svelte.d.ts +42 -0
  302. package/dist/bits/utilities/presence-layer/presence.svelte.js +116 -0
  303. package/dist/bits/utilities/presence-layer/types.d.ts +3 -5
  304. package/dist/bits/utilities/scroll-lock/scroll-lock.svelte +2 -2
  305. package/dist/bits/utilities/text-selection-layer/text-selection-layer.svelte +2 -2
  306. package/dist/bits/utilities/text-selection-layer/use-text-selection-layer.svelte.d.ts +7 -7
  307. package/dist/bits/utilities/text-selection-layer/use-text-selection-layer.svelte.js +3 -3
  308. package/dist/internal/animations-complete.d.ts +12 -0
  309. package/dist/internal/animations-complete.js +55 -0
  310. package/dist/internal/arrays.js +20 -36
  311. package/dist/internal/attrs.d.ts +9 -2
  312. package/dist/internal/attrs.js +21 -11
  313. package/dist/internal/body-scroll-lock.svelte.d.ts +10 -0
  314. package/dist/internal/body-scroll-lock.svelte.js +106 -0
  315. package/dist/internal/data-typeahead.svelte.d.ts +15 -0
  316. package/dist/internal/data-typeahead.svelte.js +33 -0
  317. package/dist/internal/date-time/calendar-helpers.svelte.d.ts +1 -1
  318. package/dist/internal/dom-typeahead.svelte.d.ts +14 -0
  319. package/dist/internal/dom-typeahead.svelte.js +44 -0
  320. package/dist/internal/dom.d.ts +0 -2
  321. package/dist/internal/dom.js +0 -15
  322. package/dist/internal/{use-grace-area.svelte.d.ts → grace-area.svelte.d.ts} +5 -4
  323. package/dist/internal/{use-grace-area.svelte.js → grace-area.svelte.js} +60 -56
  324. package/dist/internal/open-change-complete.d.ts +13 -0
  325. package/dist/internal/open-change-complete.js +24 -0
  326. package/dist/internal/{use-roving-focus.svelte.d.ts → roving-focus-group.d.ts} +9 -8
  327. package/dist/internal/{use-roving-focus.svelte.js → roving-focus-group.js} +30 -34
  328. package/dist/internal/shared-state.svelte.d.ts +6 -0
  329. package/dist/internal/shared-state.svelte.js +31 -0
  330. package/dist/internal/should-trap-focus.js +1 -2
  331. package/dist/internal/state-machine.d.ts +16 -0
  332. package/dist/internal/state-machine.js +18 -0
  333. package/dist/internal/svelte-resize-observer.svelte.d.ts +6 -0
  334. package/dist/internal/svelte-resize-observer.svelte.js +25 -0
  335. package/dist/internal/tabbable.d.ts +0 -1
  336. package/dist/internal/tabbable.js +0 -11
  337. package/dist/internal/timeout-fn.d.ts +16 -0
  338. package/dist/internal/timeout-fn.js +38 -0
  339. package/dist/internal/types.d.ts +2 -2
  340. package/package.json +1 -1
  341. package/dist/bits/utilities/presence-layer/use-presence.svelte.d.ts +0 -4
  342. package/dist/bits/utilities/presence-layer/use-presence.svelte.js +0 -97
  343. package/dist/internal/box.svelte.d.ts +0 -21
  344. package/dist/internal/box.svelte.js +0 -26
  345. package/dist/internal/create-event-hook.svelte.d.ts +0 -18
  346. package/dist/internal/create-event-hook.svelte.js +0 -29
  347. package/dist/internal/create-shared-hook.svelte.d.ts +0 -2
  348. package/dist/internal/create-shared-hook.svelte.js +0 -27
  349. package/dist/internal/sleep.d.ts +0 -1
  350. package/dist/internal/sleep.js +0 -3
  351. package/dist/internal/use-after-animations.svelte.d.ts +0 -5
  352. package/dist/internal/use-after-animations.svelte.js +0 -27
  353. package/dist/internal/use-body-scroll-lock.svelte.d.ts +0 -6
  354. package/dist/internal/use-body-scroll-lock.svelte.js +0 -106
  355. package/dist/internal/use-data-typeahead.svelte.d.ts +0 -15
  356. package/dist/internal/use-data-typeahead.svelte.js +0 -34
  357. package/dist/internal/use-dom-typeahead.svelte.d.ts +0 -13
  358. package/dist/internal/use-dom-typeahead.svelte.js +0 -32
  359. package/dist/internal/use-form-control.svelte.d.ts +0 -4
  360. package/dist/internal/use-form-control.svelte.js +0 -16
  361. package/dist/internal/use-resize-observer.svelte.d.ts +0 -2
  362. package/dist/internal/use-resize-observer.svelte.js +0 -17
  363. package/dist/internal/use-state-machine.svelte.d.ts +0 -24
  364. package/dist/internal/use-state-machine.svelte.js +0 -28
  365. package/dist/internal/use-timeout-fn.svelte.d.ts +0 -25
  366. package/dist/internal/use-timeout-fn.svelte.js +0 -39
@@ -1,6 +1,6 @@
1
1
  import { type Box, type ReadableBox } from "svelte-toolbelt";
2
2
  import type { Orientation } from "../shared/index.js";
3
- type UseRovingFocusProps = ({
3
+ type RovingFocusGroupOptions = ({
4
4
  /**
5
5
  * The selector used to find the focusable candidates.
6
6
  */
@@ -31,12 +31,13 @@ type UseRovingFocusProps = ({
31
31
  */
32
32
  onCandidateFocus?: (node: HTMLElement) => void;
33
33
  };
34
- export type UseRovingFocusReturn = ReturnType<typeof useRovingFocus>;
35
- export declare function useRovingFocus(opts: UseRovingFocusProps): {
34
+ export declare class RovingFocusGroup {
35
+ #private;
36
+ constructor(opts: RovingFocusGroupOptions);
37
+ getCandidateNodes(): HTMLElement[];
38
+ focusFirstCandidate(): void;
39
+ handleKeydown(node: HTMLElement | null | undefined, e: KeyboardEvent, both?: boolean): HTMLElement | undefined;
40
+ getTabIndex(node: HTMLElement | null | undefined): 0 | -1;
36
41
  setCurrentTabStopId(id: string): void;
37
- getTabIndex: (node: HTMLElement | null | undefined) => 0 | -1;
38
- handleKeydown: (node: HTMLElement | null | undefined, e: KeyboardEvent, both?: boolean) => HTMLElement | undefined;
39
- focusFirstCandidate: () => void;
40
- currentTabStopId: import("svelte-toolbelt").WritableBox<string | null>;
41
- };
42
+ }
42
43
  export {};
@@ -2,41 +2,43 @@ import { box } from "svelte-toolbelt";
2
2
  import { getElemDirection } from "./locale.js";
3
3
  import { getDirectionalKeys } from "./get-directional-keys.js";
4
4
  import { kbd } from "./kbd.js";
5
- import { isBrowser } from "./is.js";
6
- export function useRovingFocus(opts) {
7
- const currentTabStopId = box(null);
8
- function getCandidateNodes() {
9
- if (!isBrowser)
10
- return [];
11
- if (!opts.rootNode.current)
5
+ import { BROWSER } from "esm-env";
6
+ export class RovingFocusGroup {
7
+ #opts;
8
+ #currentTabStopId = box(null);
9
+ constructor(opts) {
10
+ this.#opts = opts;
11
+ }
12
+ getCandidateNodes() {
13
+ if (!BROWSER || !this.#opts.rootNode.current)
12
14
  return [];
13
- if (opts.candidateSelector) {
14
- const candidates = Array.from(opts.rootNode.current.querySelectorAll(opts.candidateSelector));
15
+ if (this.#opts.candidateSelector) {
16
+ const candidates = Array.from(this.#opts.rootNode.current.querySelectorAll(this.#opts.candidateSelector));
15
17
  return candidates;
16
18
  }
17
- else if (opts.candidateAttr) {
18
- const candidates = Array.from(opts.rootNode.current.querySelectorAll(`[${opts.candidateAttr}]:not([data-disabled])`));
19
+ else if (this.#opts.candidateAttr) {
20
+ const candidates = Array.from(this.#opts.rootNode.current.querySelectorAll(`[${this.#opts.candidateAttr}]:not([data-disabled])`));
19
21
  return candidates;
20
22
  }
21
23
  return [];
22
24
  }
23
- function focusFirstCandidate() {
24
- const items = getCandidateNodes();
25
+ focusFirstCandidate() {
26
+ const items = this.getCandidateNodes();
25
27
  if (!items.length)
26
28
  return;
27
29
  items[0]?.focus();
28
30
  }
29
- function handleKeydown(node, e, both = false) {
30
- const rootNode = opts.rootNode.current;
31
+ handleKeydown(node, e, both = false) {
32
+ const rootNode = this.#opts.rootNode.current;
31
33
  if (!rootNode || !node)
32
34
  return;
33
- const items = getCandidateNodes();
35
+ const items = this.getCandidateNodes();
34
36
  if (!items.length)
35
37
  return;
36
38
  const currentIndex = items.indexOf(node);
37
39
  const dir = getElemDirection(rootNode);
38
- const { nextKey, prevKey } = getDirectionalKeys(dir, opts.orientation.current);
39
- const loop = opts.loop.current;
40
+ const { nextKey, prevKey } = getDirectionalKeys(dir, this.#opts.orientation.current);
41
+ const loop = this.#opts.loop.current;
40
42
  const keyToIndex = {
41
43
  [nextKey]: currentIndex + 1,
42
44
  [prevKey]: currentIndex - 1,
@@ -63,29 +65,23 @@ export function useRovingFocus(opts) {
63
65
  if (!itemToFocus)
64
66
  return;
65
67
  itemToFocus.focus();
66
- currentTabStopId.current = itemToFocus.id;
67
- opts.onCandidateFocus?.(itemToFocus);
68
+ this.#currentTabStopId.current = itemToFocus.id;
69
+ this.#opts.onCandidateFocus?.(itemToFocus);
68
70
  return itemToFocus;
69
71
  }
70
- function getTabIndex(node) {
71
- const items = getCandidateNodes();
72
- const anyActive = currentTabStopId.current !== null;
72
+ getTabIndex(node) {
73
+ const items = this.getCandidateNodes();
74
+ const anyActive = this.#currentTabStopId.current !== null;
73
75
  if (node && !anyActive && items[0] === node) {
74
- currentTabStopId.current = node.id;
76
+ this.#currentTabStopId.current = node.id;
75
77
  return 0;
76
78
  }
77
- else if (node?.id === currentTabStopId.current) {
79
+ else if (node?.id === this.#currentTabStopId.current) {
78
80
  return 0;
79
81
  }
80
82
  return -1;
81
83
  }
82
- return {
83
- setCurrentTabStopId(id) {
84
- currentTabStopId.current = id;
85
- },
86
- getTabIndex,
87
- handleKeydown,
88
- focusFirstCandidate,
89
- currentTabStopId,
90
- };
84
+ setCurrentTabStopId(id) {
85
+ this.#currentTabStopId.current = id;
86
+ }
91
87
  }
@@ -0,0 +1,6 @@
1
+ import type { AnyFn } from "./types.js";
2
+ export declare class SharedState<T extends AnyFn> {
3
+ #private;
4
+ constructor(factory: T);
5
+ get(...args: Parameters<T>): ReturnType<T>;
6
+ }
@@ -0,0 +1,31 @@
1
+ export class SharedState {
2
+ #factory;
3
+ #subscribers = 0;
4
+ #state = $state();
5
+ #scope;
6
+ constructor(factory) {
7
+ this.#factory = factory;
8
+ }
9
+ #dispose() {
10
+ this.#subscribers -= 1;
11
+ if (this.#scope && this.#subscribers <= 0) {
12
+ this.#scope();
13
+ this.#state = undefined;
14
+ this.#scope = undefined;
15
+ }
16
+ }
17
+ get(...args) {
18
+ this.#subscribers += 1;
19
+ if (this.#state === undefined) {
20
+ this.#scope = $effect.root(() => {
21
+ this.#state = this.#factory(...args);
22
+ });
23
+ }
24
+ $effect(() => {
25
+ return () => {
26
+ this.#dispose();
27
+ };
28
+ });
29
+ return this.#state;
30
+ }
31
+ }
@@ -1,6 +1,5 @@
1
1
  export function shouldTrapFocus({ forceMount, present, trapFocus, open, }) {
2
- if (forceMount) {
2
+ if (forceMount)
3
3
  return open && trapFocus;
4
- }
5
4
  return present && trapFocus && open;
6
5
  }
@@ -0,0 +1,16 @@
1
+ import { type WritableBox } from "svelte-toolbelt";
2
+ interface Machine<S> {
3
+ [k: string]: {
4
+ [k: string]: S;
5
+ };
6
+ }
7
+ type MachineState<T> = keyof T;
8
+ type MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;
9
+ type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R : never;
10
+ export declare class StateMachine<M> {
11
+ #private;
12
+ readonly state: WritableBox<MachineState<M>>;
13
+ constructor(initialState: MachineState<M>, machine: M & Machine<MachineState<M>>);
14
+ dispatch(event: MachineEvent<M>): void;
15
+ }
16
+ export {};
@@ -0,0 +1,18 @@
1
+ import { box } from "svelte-toolbelt";
2
+ export class StateMachine {
3
+ state;
4
+ #machine;
5
+ constructor(initialState, machine) {
6
+ this.state = box(initialState);
7
+ this.#machine = machine;
8
+ this.dispatch = this.dispatch.bind(this);
9
+ }
10
+ #reducer(event) {
11
+ // @ts-expect-error state.current is keyof M
12
+ const nextState = this.#machine[this.state.current][event];
13
+ return nextState ?? this.state.current;
14
+ }
15
+ dispatch(event) {
16
+ this.state.current = this.#reducer(event);
17
+ }
18
+ }
@@ -0,0 +1,6 @@
1
+ import type { Getter } from "svelte-toolbelt";
2
+ export declare class SvelteResizeObserver {
3
+ #private;
4
+ constructor(node: Getter<HTMLElement | null>, onResize: () => void);
5
+ handler(): (() => void) | undefined;
6
+ }
@@ -0,0 +1,25 @@
1
+ export class SvelteResizeObserver {
2
+ #node;
3
+ #onResize;
4
+ constructor(node, onResize) {
5
+ this.#node = node;
6
+ this.#onResize = onResize;
7
+ this.handler = this.handler.bind(this);
8
+ $effect(this.handler);
9
+ }
10
+ handler() {
11
+ let rAF = 0;
12
+ const _node = this.#node();
13
+ if (!_node)
14
+ return;
15
+ const resizeObserver = new ResizeObserver(() => {
16
+ cancelAnimationFrame(rAF);
17
+ rAF = window.requestAnimationFrame(this.#onResize);
18
+ });
19
+ resizeObserver.observe(_node);
20
+ return () => {
21
+ window.cancelAnimationFrame(rAF);
22
+ resizeObserver.unobserve(_node);
23
+ };
24
+ }
25
+ }
@@ -1,4 +1,3 @@
1
- export declare function getTabbableIn(container: HTMLElement, direction: "next" | "prev"): import("tabbable").FocusableElement | undefined;
2
1
  /**
3
2
  * Gets all tabbable elements in the body and finds the next/previous tabbable element
4
3
  * from the `currentNode` based on the `direction` provided.
@@ -1,5 +1,4 @@
1
1
  import { focusable, isFocusable, isTabbable, tabbable } from "tabbable";
2
- import { activeElement } from "./dom.js";
3
2
  import { getDocument } from "svelte-toolbelt";
4
3
  function getTabbableOptions() {
5
4
  return {
@@ -14,16 +13,6 @@ function getTabbableOptions() {
14
13
  : "none",
15
14
  };
16
15
  }
17
- export function getTabbableIn(container, direction) {
18
- const allTabbable = tabbable(container, getTabbableOptions());
19
- if (direction === "prev") {
20
- allTabbable.reverse();
21
- }
22
- const activeEl = activeElement(getDocument(container));
23
- const activeIndex = allTabbable.indexOf(activeEl);
24
- const nextTabbableElements = allTabbable.slice(activeIndex + 1);
25
- return nextTabbableElements[0];
26
- }
27
16
  /**
28
17
  * Gets all tabbable elements in the body and finds the next/previous tabbable element
29
18
  * from the `currentNode` based on the `direction` provided.
@@ -0,0 +1,16 @@
1
+ import type { AnyFn } from "./types.js";
2
+ type TimeoutFnOptions = {
3
+ /**
4
+ * Start the timer immediate after calling this function
5
+ *
6
+ * @default true
7
+ */
8
+ immediate?: boolean;
9
+ };
10
+ export declare class TimeoutFn<T extends AnyFn> {
11
+ #private;
12
+ constructor(cb: T, interval: number, opts?: TimeoutFnOptions);
13
+ stop(): void;
14
+ start(...args: Parameters<T> | []): void;
15
+ }
16
+ export {};
@@ -0,0 +1,38 @@
1
+ import { onDestroyEffect } from "svelte-toolbelt";
2
+ import { BROWSER } from "esm-env";
3
+ const defaultOpts = {
4
+ immediate: true,
5
+ };
6
+ export class TimeoutFn {
7
+ #opts;
8
+ #interval;
9
+ #cb;
10
+ #timer = null;
11
+ constructor(cb, interval, opts = {}) {
12
+ this.#cb = cb;
13
+ this.#interval = interval;
14
+ this.#opts = { ...defaultOpts, ...opts };
15
+ this.stop = this.stop.bind(this);
16
+ this.start = this.start.bind(this);
17
+ if (this.#opts.immediate && BROWSER) {
18
+ this.start();
19
+ }
20
+ onDestroyEffect(this.stop);
21
+ }
22
+ #clear() {
23
+ if (this.#timer !== null) {
24
+ window.clearTimeout(this.#timer);
25
+ this.#timer = null;
26
+ }
27
+ }
28
+ stop() {
29
+ this.#clear();
30
+ }
31
+ start(...args) {
32
+ this.#clear();
33
+ this.#timer = window.setTimeout(() => {
34
+ this.#timer = null;
35
+ this.#cb(...args);
36
+ }, this.#interval);
37
+ }
38
+ }
@@ -1,5 +1,5 @@
1
1
  import type { Snippet } from "svelte";
2
- import type { Box, ReadableBoxedValues, WritableBoxedValues } from "./box.svelte.js";
2
+ import type { Box, ReadableBoxedValues, WritableBoxedValues } from "svelte-toolbelt";
3
3
  import type { StyleProperties } from "../shared/index.js";
4
4
  export type OnChangeFn<T> = (value: T) => void;
5
5
  export type ElementRef = Box<HTMLElement | null>;
@@ -78,7 +78,7 @@ export type Without<T extends object, U extends object> = Omit<T, keyof U>;
78
78
  export type Arrayable<T> = T[] | T;
79
79
  export type Fn = () => void;
80
80
  export type AnyFn = (...args: any[]) => any;
81
- export type WithRefProps<T = {}> = T & ReadableBoxedValues<{
81
+ export type WithRefOpts<T = {}> = T & ReadableBoxedValues<{
82
82
  id: string;
83
83
  }> & WritableBoxedValues<{
84
84
  ref: HTMLElement | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bits-ui",
3
- "version": "2.7.0",
3
+ "version": "2.8.0",
4
4
  "license": "MIT",
5
5
  "repository": "github:huntabyte/bits-ui",
6
6
  "funding": "https://github.com/sponsors/huntabyte",
@@ -1,4 +0,0 @@
1
- import { type ReadableBox } from "svelte-toolbelt";
2
- export declare function usePresence(present: ReadableBox<boolean>, ref: ReadableBox<HTMLElement | null>): {
3
- readonly current: boolean;
4
- };
@@ -1,97 +0,0 @@
1
- import { executeCallbacks } from "svelte-toolbelt";
2
- import { Previous, watch } from "runed";
3
- import { on } from "svelte/events";
4
- import { useStateMachine } from "../../../internal/use-state-machine.svelte.js";
5
- export function usePresence(present, ref) {
6
- let styles = $state({});
7
- let prevAnimationNameState = $state("none");
8
- const initialState = present.current ? "mounted" : "unmounted";
9
- const prevPresent = new Previous(() => present.current);
10
- const { state, dispatch } = useStateMachine(initialState, {
11
- mounted: {
12
- UNMOUNT: "unmounted",
13
- ANIMATION_OUT: "unmountSuspended",
14
- },
15
- unmountSuspended: {
16
- MOUNT: "mounted",
17
- ANIMATION_END: "unmounted",
18
- },
19
- unmounted: {
20
- MOUNT: "mounted",
21
- },
22
- });
23
- watch(() => present.current, () => {
24
- if (!ref.current)
25
- return;
26
- const hasPresentChanged = present.current !== prevPresent.current;
27
- if (!hasPresentChanged)
28
- return;
29
- const prevAnimationName = prevAnimationNameState;
30
- const currAnimationName = getAnimationName(ref.current);
31
- if (present.current) {
32
- dispatch("MOUNT");
33
- }
34
- else if (currAnimationName === "none" || styles.display === "none") {
35
- // If there is no exit animation or the element is hidden, animations won't run
36
- // so we unmount instantly
37
- dispatch("UNMOUNT");
38
- }
39
- else {
40
- /**
41
- * When `present` changes to `false`, we check changes to animation-name to
42
- * determine whether an animation has started. We chose this approach (reading
43
- * computed styles) because there is no `animationrun` event and `animationstart`
44
- * fires after `animation-delay` has expired which would be too late.
45
- */
46
- const isAnimating = prevAnimationName !== currAnimationName;
47
- if (prevPresent && isAnimating) {
48
- dispatch("ANIMATION_OUT");
49
- }
50
- else {
51
- dispatch("UNMOUNT");
52
- }
53
- }
54
- });
55
- /**
56
- * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`
57
- * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we
58
- * make sure we only trigger ANIMATION_END for the currently active animation.
59
- */
60
- function handleAnimationEnd(event) {
61
- if (!ref.current)
62
- return;
63
- const currAnimationName = getAnimationName(ref.current);
64
- const isCurrentAnimation = currAnimationName.includes(event.animationName) || currAnimationName === "none";
65
- if (event.target === ref.current && isCurrentAnimation) {
66
- dispatch("ANIMATION_END");
67
- }
68
- }
69
- function handleAnimationStart(event) {
70
- if (!ref.current)
71
- return;
72
- if (event.target === ref.current) {
73
- prevAnimationNameState = getAnimationName(ref.current);
74
- }
75
- }
76
- watch(() => state.current, () => {
77
- if (!ref.current)
78
- return;
79
- const currAnimationName = getAnimationName(ref.current);
80
- prevAnimationNameState = state.current === "mounted" ? currAnimationName : "none";
81
- });
82
- watch(() => ref.current, () => {
83
- if (!ref.current)
84
- return;
85
- styles = getComputedStyle(ref.current);
86
- return executeCallbacks(on(ref.current, "animationstart", handleAnimationStart), on(ref.current, "animationcancel", handleAnimationEnd), on(ref.current, "animationend", handleAnimationEnd));
87
- });
88
- const isPresentDerived = $derived(["mounted", "unmountSuspended"].includes(state.current));
89
- return {
90
- get current() {
91
- return isPresentDerived;
92
- },
93
- };
94
- }
95
- function getAnimationName(node) {
96
- return node ? getComputedStyle(node).animationName || "none" : "none";
97
- }
@@ -1,21 +0,0 @@
1
- import type { ReadableBox, WritableBox } from "svelte-toolbelt";
2
- export type Box<T> = ReadableBox<T> | WritableBox<T>;
3
- export type WritableBoxedValues<T> = {
4
- [K in keyof T]: WritableBox<T[K]>;
5
- };
6
- export type ReadableBoxedValues<T> = {
7
- [K in keyof T]: ReadableBox<T[K]>;
8
- };
9
- type WatcherCallback<T> = (curr: T, prev: T) => void | Promise<void> | (() => void) | (() => Promise<void>);
10
- type WatchOptions = {
11
- /**
12
- * Whether to eagerly run the watcher before the state is updated.
13
- */
14
- immediate?: boolean;
15
- /**
16
- * Whether to run the watcher only once.
17
- */
18
- once?: boolean;
19
- };
20
- export declare function watch<T>(box: Box<T>, callback: WatcherCallback<T>, options?: WatchOptions): () => void;
21
- export {};
@@ -1,26 +0,0 @@
1
- import { untrack } from "svelte";
2
- export function watch(box, callback, options = {}) {
3
- let prev = $state(box.current);
4
- let ranOnce = false;
5
- const watchEffect = $effect.root(() => {
6
- $effect.pre(() => {
7
- if (prev === box.current || !options.immediate)
8
- return;
9
- if (options.once && ranOnce)
10
- return;
11
- callback(box.current, untrack(() => prev));
12
- untrack(() => (prev = box.current));
13
- ranOnce = true;
14
- });
15
- $effect(() => {
16
- if (prev === box.current || options.immediate)
17
- return;
18
- if (options.once && ranOnce)
19
- return;
20
- callback(box.current, untrack(() => prev));
21
- untrack(() => (prev = box.current));
22
- ranOnce = true;
23
- });
24
- });
25
- return watchEffect;
26
- }
@@ -1,18 +0,0 @@
1
- export type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;
2
- /**
3
- * will return `true` if `T` is `any`, or `false` otherwise
4
- */
5
- export type IsAny<T> = IfAny<T, true, false>;
6
- type Callback<T> = IsAny<T> extends true ? (param: any) => void : [T] extends [void] ? () => void : (param: T) => void;
7
- export type EventHookOn<T = unknown> = (fn: Callback<T>) => {
8
- off: () => void;
9
- };
10
- export type EventHookOff<T = unknown> = (fn: Callback<T>) => void;
11
- export type EventHookTrigger<T = unknown> = (param?: T) => Promise<unknown[]>;
12
- export interface EventHook<T = unknown> {
13
- on: EventHookOn<T>;
14
- off: EventHookOff<T>;
15
- trigger: EventHookTrigger<T>;
16
- }
17
- export declare function createEventHook<T = unknown>(): EventHook<T>;
18
- export {};
@@ -1,29 +0,0 @@
1
- import { executeCallbacks } from "svelte-toolbelt";
2
- export function createEventHook() {
3
- const callbacks = new Set();
4
- const callbacksToDispose = [];
5
- function off(cb) {
6
- callbacks.delete(cb);
7
- }
8
- function on(cb) {
9
- callbacks.add(cb);
10
- const offFn = () => off(cb);
11
- callbacksToDispose.push(offFn);
12
- return { off: offFn };
13
- }
14
- const trigger = (...args) => {
15
- return Promise.all(Array.from(callbacks).map((cb) => {
16
- return Promise.resolve(cb(...args));
17
- }));
18
- };
19
- $effect(() => {
20
- return () => {
21
- executeCallbacks(callbacksToDispose);
22
- };
23
- });
24
- return {
25
- on,
26
- off,
27
- trigger,
28
- };
29
- }
@@ -1,2 +0,0 @@
1
- import type { AnyFn } from "./types.js";
2
- export declare function createSharedHook<T extends AnyFn>(factory: T): T;
@@ -1,27 +0,0 @@
1
- export function createSharedHook(factory) {
2
- let subscribers = 0;
3
- let state = $state();
4
- let scope;
5
- function dispose() {
6
- subscribers -= 1;
7
- if (scope && subscribers <= 0) {
8
- scope();
9
- state = undefined;
10
- scope = undefined;
11
- }
12
- }
13
- return ((...args) => {
14
- subscribers += 1;
15
- if (state === undefined) {
16
- scope = $effect.root(() => {
17
- state = factory(...args);
18
- });
19
- }
20
- $effect(() => {
21
- return () => {
22
- dispose();
23
- };
24
- });
25
- return state;
26
- });
27
- }
@@ -1 +0,0 @@
1
- export declare function sleep(ms: number): Promise<unknown>;
@@ -1,3 +0,0 @@
1
- export function sleep(ms) {
2
- return new Promise((resolve) => setTimeout(resolve, ms));
3
- }
@@ -1,5 +0,0 @@
1
- import type { Getter } from "svelte-toolbelt";
2
- /**
3
- * Calls a function the next frame after all animations have finished.
4
- */
5
- export declare function useAfterAnimations(getNode: Getter<HTMLElement | null>): (fn: () => void) => void;
@@ -1,27 +0,0 @@
1
- import { flushSync } from "svelte";
2
- /**
3
- * Calls a function the next frame after all animations have finished.
4
- */
5
- export function useAfterAnimations(getNode) {
6
- let frame = -1;
7
- function cancelFrame() {
8
- cancelAnimationFrame(frame);
9
- }
10
- $effect(() => cancelFrame);
11
- return (fn) => {
12
- cancelFrame();
13
- const node = getNode();
14
- if (!node)
15
- return;
16
- if (typeof node.getAnimations !== "function" || globalThis.bitsAnimationsDisabled) {
17
- fn();
18
- }
19
- else {
20
- frame = requestAnimationFrame(() => {
21
- Promise.allSettled(node.getAnimations().map((anim) => anim.finished)).then(() => {
22
- flushSync(fn);
23
- });
24
- });
25
- }
26
- };
27
- }
@@ -1,6 +0,0 @@
1
- import { type Getter } from "svelte-toolbelt";
2
- export type ScrollBodyOption = {
3
- padding?: boolean | number;
4
- margin?: boolean | number;
5
- };
6
- export declare function useBodyScrollLock(initialState?: boolean | undefined, restoreScrollDelay?: Getter<number | null>): import("svelte-toolbelt").WritableBox<boolean> | undefined;