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,10 +1,10 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from "svelte";
3
- import { useFloatingRootState } from "../use-floating-layer.svelte.js";
3
+ import { FloatingRootState } from "../use-floating-layer.svelte.js";
4
4
 
5
5
  let { children, tooltip = false }: { children?: Snippet; tooltip?: boolean } = $props();
6
6
 
7
- useFloatingRootState(tooltip);
7
+ FloatingRootState.create(tooltip);
8
8
  </script>
9
9
 
10
10
  {@render children?.()}
@@ -1,7 +1,6 @@
1
1
  import { type Middleware, type Placement } from "@floating-ui/dom";
2
- import { type ReadableBox } from "svelte-toolbelt";
3
- import type { Arrayable, WithRefProps } from "../../../internal/types.js";
4
- import type { Box, ReadableBoxedValues } from "../../../internal/box.svelte.js";
2
+ import { type ReadableBoxedValues, type ReadableBox, type Box } from "svelte-toolbelt";
3
+ import type { Arrayable, WithRefOpts } from "../../../internal/types.js";
5
4
  import type { Measurable, UseFloatingReturn } from "../../../internal/floating-svelte/types.js";
6
5
  import type { Direction, StyleProperties } from "../../../shared/index.js";
7
6
  export declare const SIDE_OPTIONS: readonly ["top", "right", "bottom", "left"];
@@ -9,13 +8,14 @@ export declare const ALIGN_OPTIONS: readonly ["start", "center", "end"];
9
8
  export type Side = (typeof SIDE_OPTIONS)[number];
10
9
  export type Align = (typeof ALIGN_OPTIONS)[number];
11
10
  export type Boundary = Element | null;
12
- declare class FloatingRootState {
11
+ export declare class FloatingRootState {
12
+ static create(tooltip?: boolean): FloatingRootState;
13
13
  anchorNode: import("svelte-toolbelt").WritableBox<HTMLElement | Measurable | null>;
14
14
  customAnchorNode: import("svelte-toolbelt").WritableBox<string | HTMLElement | Measurable | null>;
15
15
  triggerNode: ReadableBox<Measurable | HTMLElement | null>;
16
16
  constructor();
17
17
  }
18
- export type FloatingContentStateProps = ReadableBoxedValues<{
18
+ export interface FloatingContentStateOpts extends ReadableBoxedValues<{
19
19
  id: string;
20
20
  wrapperId: string;
21
21
  side: Side;
@@ -35,10 +35,12 @@ export type FloatingContentStateProps = ReadableBoxedValues<{
35
35
  style: StyleProperties | null | undefined | string;
36
36
  enabled: boolean;
37
37
  customAnchor: string | HTMLElement | null | Measurable;
38
- }>;
39
- declare class FloatingContentState {
38
+ }> {
39
+ }
40
+ export declare class FloatingContentState {
40
41
  #private;
41
- readonly opts: FloatingContentStateProps;
42
+ static create(opts: FloatingContentStateOpts, tooltip?: boolean): FloatingContentState;
43
+ readonly opts: FloatingContentStateOpts;
42
44
  readonly root: FloatingRootState;
43
45
  contentRef: import("svelte-toolbelt").WritableBox<HTMLElement | null>;
44
46
  wrapperRef: import("svelte-toolbelt").WritableBox<HTMLElement | null>;
@@ -911,14 +913,16 @@ declare class FloatingContentState {
911
913
  transform: string;
912
914
  visibility: string | undefined;
913
915
  };
914
- constructor(opts: FloatingContentStateProps, root: FloatingRootState);
916
+ constructor(opts: FloatingContentStateOpts, root: FloatingRootState);
917
+ }
918
+ interface FloatingArrowStateOpts extends WithRefOpts {
915
919
  }
916
- type FloatingArrowStateProps = WithRefProps;
917
- declare class FloatingArrowState {
918
- readonly opts: FloatingArrowStateProps;
920
+ export declare class FloatingArrowState {
921
+ static create(opts: FloatingArrowStateOpts): FloatingArrowState;
922
+ readonly opts: FloatingArrowStateOpts;
919
923
  readonly content: FloatingContentState;
920
- constructor(opts: FloatingArrowStateProps, content: FloatingContentState);
921
- props: {
924
+ constructor(opts: FloatingArrowStateOpts, content: FloatingContentState);
925
+ readonly props: {
922
926
  readonly id: string;
923
927
  readonly style: {
924
928
  [x: string]: string | number | undefined;
@@ -932,20 +936,18 @@ declare class FloatingArrowState {
932
936
  readonly "data-side": "left" | "right" | "top" | "bottom";
933
937
  };
934
938
  }
935
- type FloatingAnchorStateProps = ReadableBoxedValues<{
939
+ interface FloatingAnchorStateOpts extends ReadableBoxedValues<{
936
940
  id: string;
937
941
  virtualEl?: Measurable | null;
938
942
  ref: Measurable | HTMLElement | null;
939
- }>;
940
- declare class FloatingAnchorState {
941
- readonly opts: FloatingAnchorStateProps;
943
+ }> {
944
+ }
945
+ export declare class FloatingAnchorState {
946
+ static create(opts: FloatingAnchorStateOpts, tooltip?: boolean): FloatingAnchorState;
947
+ readonly opts: FloatingAnchorStateOpts;
942
948
  readonly root: FloatingRootState;
943
- constructor(opts: FloatingAnchorStateProps, root: FloatingRootState);
949
+ constructor(opts: FloatingAnchorStateOpts, root: FloatingRootState);
944
950
  }
945
- export declare function useFloatingRootState(tooltip?: boolean): FloatingRootState;
946
- export declare function useFloatingContentState(props: FloatingContentStateProps, tooltip?: boolean): FloatingContentState;
947
- export declare function useFloatingArrowState(props: FloatingArrowStateProps): FloatingArrowState;
948
- export declare function useFloatingAnchorState(props: FloatingAnchorStateProps, tooltip?: boolean): FloatingAnchorState;
949
951
  export declare function getSideFromPlacement(placement: Placement): "left" | "right" | "top" | "bottom";
950
952
  export declare function getAlignFromPlacement(placement: Placement): "end" | "center" | "start";
951
953
  export {};
@@ -12,7 +12,15 @@ const OPPOSITE_SIDE = {
12
12
  bottom: "top",
13
13
  left: "right",
14
14
  };
15
- class FloatingRootState {
15
+ const FloatingRootContext = new Context("Floating.Root");
16
+ const FloatingContentContext = new Context("Floating.Content");
17
+ const FloatingTooltipRootContext = new Context("Floating.Root");
18
+ export class FloatingRootState {
19
+ static create(tooltip = false) {
20
+ return tooltip
21
+ ? FloatingTooltipRootContext.set(new FloatingRootState())
22
+ : FloatingRootContext.set(new FloatingRootState());
23
+ }
16
24
  anchorNode = box(null);
17
25
  customAnchorNode = box(null);
18
26
  triggerNode = box(null);
@@ -32,7 +40,12 @@ class FloatingRootState {
32
40
  });
33
41
  }
34
42
  }
35
- class FloatingContentState {
43
+ export class FloatingContentState {
44
+ static create(opts, tooltip = false) {
45
+ return tooltip
46
+ ? FloatingContentContext.set(new FloatingContentState(opts, FloatingTooltipRootContext.get()))
47
+ : FloatingContentContext.set(new FloatingContentState(opts, FloatingRootContext.get()));
48
+ }
36
49
  opts;
37
50
  root;
38
51
  // nodes
@@ -202,7 +215,10 @@ class FloatingContentState {
202
215
  });
203
216
  }
204
217
  }
205
- class FloatingArrowState {
218
+ export class FloatingArrowState {
219
+ static create(opts) {
220
+ return new FloatingArrowState(opts, FloatingContentContext.get());
221
+ }
206
222
  opts;
207
223
  content;
208
224
  constructor(opts, content) {
@@ -216,7 +232,12 @@ class FloatingArrowState {
216
232
  ...attachRef(this.content.arrowRef),
217
233
  }));
218
234
  }
219
- class FloatingAnchorState {
235
+ export class FloatingAnchorState {
236
+ static create(opts, tooltip = false) {
237
+ return tooltip
238
+ ? new FloatingAnchorState(opts, FloatingTooltipRootContext.get())
239
+ : new FloatingAnchorState(opts, FloatingRootContext.get());
240
+ }
220
241
  opts;
221
242
  root;
222
243
  constructor(opts, root) {
@@ -230,27 +251,6 @@ class FloatingAnchorState {
230
251
  }
231
252
  }
232
253
  }
233
- const FloatingRootContext = new Context("Floating.Root");
234
- const FloatingContentContext = new Context("Floating.Content");
235
- const FloatingTooltipRootContext = new Context("Floating.Root");
236
- export function useFloatingRootState(tooltip = false) {
237
- return tooltip
238
- ? FloatingTooltipRootContext.set(new FloatingRootState())
239
- : FloatingRootContext.set(new FloatingRootState());
240
- }
241
- export function useFloatingContentState(props, tooltip = false) {
242
- return tooltip
243
- ? FloatingContentContext.set(new FloatingContentState(props, FloatingTooltipRootContext.get()))
244
- : FloatingContentContext.set(new FloatingContentState(props, FloatingRootContext.get()));
245
- }
246
- export function useFloatingArrowState(props) {
247
- return new FloatingArrowState(props, FloatingContentContext.get());
248
- }
249
- export function useFloatingAnchorState(props, tooltip = false) {
250
- return tooltip
251
- ? new FloatingAnchorState(props, FloatingTooltipRootContext.get())
252
- : new FloatingAnchorState(props, FloatingRootContext.get());
253
- }
254
254
  //
255
255
  // HELPERS
256
256
  //
@@ -1,5 +1,5 @@
1
+ import { type ReadableBoxedValues } from "svelte-toolbelt";
1
2
  import { Context } from "runed";
2
- import type { ReadableBoxedValues } from "../../../internal/box.svelte.js";
3
3
  import { type EventCallback } from "../../../internal/events.js";
4
4
  export type FocusScopeContextValue = {
5
5
  ignoreCloseAutoFocus: boolean;
@@ -1,4 +1,4 @@
1
- import { afterSleep, afterTick, DOMContext, executeCallbacks } from "svelte-toolbelt";
1
+ import { afterSleep, afterTick, DOMContext, executeCallbacks, } from "svelte-toolbelt";
2
2
  import { Context, watch } from "runed";
3
3
  import { on } from "svelte/events";
4
4
  import { createFocusScopeAPI, createFocusScopeStack, removeLinks, } from "./focus-scope-stack.svelte.js";
@@ -39,7 +39,7 @@
39
39
  isStatic = false,
40
40
  enabled,
41
41
  ...restProps
42
- }: Omit<PopperLayerImplProps, "present"> & {
42
+ }: Omit<PopperLayerImplProps, "open"> & {
43
43
  enabled: boolean;
44
44
  } = $props();
45
45
  </script>
@@ -1,5 +1,5 @@
1
1
  import type { PopperLayerImplProps } from "./types.js";
2
- type $$ComponentProps = Omit<PopperLayerImplProps, "present"> & {
2
+ type $$ComponentProps = Omit<PopperLayerImplProps, "open"> & {
3
3
  enabled: boolean;
4
4
  };
5
5
  declare const PopperLayerForceMount: import("svelte").Component<$$ComponentProps, {}, "">;
@@ -47,7 +47,7 @@
47
47
  ref,
48
48
  tooltip = false,
49
49
  ...restProps
50
- }: Omit<PopperLayerImplProps, "present" | "children"> & {
50
+ }: Omit<PopperLayerImplProps, "open" | "children"> & {
51
51
  enabled: boolean;
52
52
  } = $props();
53
53
  </script>
@@ -1,5 +1,5 @@
1
1
  import type { PopperLayerImplProps } from "./types.js";
2
- type $$ComponentProps = Omit<PopperLayerImplProps, "present" | "children"> & {
2
+ type $$ComponentProps = Omit<PopperLayerImplProps, "open" | "children"> & {
3
3
  enabled: boolean;
4
4
  };
5
5
  declare const PopperLayerInner: import("svelte").Component<$$ComponentProps, {}, "">;
@@ -5,7 +5,7 @@
5
5
 
6
6
  let {
7
7
  popper,
8
- present,
8
+ open,
9
9
  onEscapeKeydown,
10
10
  escapeKeydownBehavior,
11
11
  preventOverflowTextSelection,
@@ -44,7 +44,7 @@
44
44
  }: PopperLayerImplProps = $props();
45
45
  </script>
46
46
 
47
- <PresenceLayer {present} {ref}>
47
+ <PresenceLayer {open} {ref}>
48
48
  {#snippet presence()}
49
49
  <PopperLayerInner
50
50
  {popper}
@@ -73,7 +73,7 @@
73
73
  {onPlaced}
74
74
  {customAnchor}
75
75
  {isStatic}
76
- enabled={present}
76
+ enabled={open}
77
77
  {onInteractOutside}
78
78
  {onCloseAutoFocus}
79
79
  {onOpenAutoFocus}
@@ -1,16 +1,16 @@
1
1
  <script lang="ts">
2
2
  import { box } from "svelte-toolbelt";
3
3
  import type { PresenceLayerImplProps } from "./types.js";
4
- import { usePresence } from "./use-presence.svelte.js";
4
+ import { Presence } from "./presence.svelte.js";
5
5
 
6
- let { present, forceMount, presence, ref }: PresenceLayerImplProps = $props();
6
+ let { open, forceMount, presence, ref }: PresenceLayerImplProps = $props();
7
7
 
8
- const isPresent = usePresence(
9
- box.with(() => present),
10
- ref
11
- );
8
+ const presenceState = new Presence({
9
+ open: box.with(() => open),
10
+ ref,
11
+ });
12
12
  </script>
13
13
 
14
- {#if forceMount || present || isPresent.current}
15
- {@render presence?.({ present: isPresent })}
14
+ {#if forceMount || open || presenceState.isPresent}
15
+ {@render presence?.({ present: presenceState.isPresent })}
16
16
  {/if}
@@ -0,0 +1,42 @@
1
+ import { type ReadableBox, type ReadableBoxedValues } from "svelte-toolbelt";
2
+ import { Previous } from "runed";
3
+ import { StateMachine } from "../../../internal/state-machine.js";
4
+ export interface PresenceOptions extends ReadableBoxedValues<{
5
+ open: boolean;
6
+ ref: HTMLElement | null;
7
+ }> {
8
+ }
9
+ type PresenceStatus = "unmounted" | "mounted" | "unmountSuspended";
10
+ declare const presenceMachine: {
11
+ readonly mounted: {
12
+ readonly UNMOUNT: "unmounted";
13
+ readonly ANIMATION_OUT: "unmountSuspended";
14
+ };
15
+ readonly unmountSuspended: {
16
+ readonly MOUNT: "mounted";
17
+ readonly ANIMATION_END: "unmounted";
18
+ };
19
+ readonly unmounted: {
20
+ readonly MOUNT: "mounted";
21
+ };
22
+ };
23
+ type PresenceMachine = StateMachine<typeof presenceMachine>;
24
+ export declare class Presence {
25
+ readonly opts: PresenceOptions;
26
+ prevAnimationNameState: string;
27
+ styles: CSSStyleDeclaration;
28
+ initialStatus: PresenceStatus;
29
+ previousPresent: Previous<boolean>;
30
+ machine: PresenceMachine;
31
+ present: ReadableBox<boolean>;
32
+ constructor(opts: PresenceOptions);
33
+ /**
34
+ * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`
35
+ * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we
36
+ * make sure we only trigger ANIMATION_END for the currently active animation.
37
+ */
38
+ handleAnimationEnd(event: AnimationEvent): void;
39
+ handleAnimationStart(event: AnimationEvent): void;
40
+ isPresent: boolean;
41
+ }
42
+ export {};
@@ -0,0 +1,116 @@
1
+ import { executeCallbacks } from "svelte-toolbelt";
2
+ import { Previous, watch } from "runed";
3
+ import { on } from "svelte/events";
4
+ import { StateMachine } from "../../../internal/state-machine.js";
5
+ const presenceMachine = {
6
+ mounted: {
7
+ UNMOUNT: "unmounted",
8
+ ANIMATION_OUT: "unmountSuspended",
9
+ },
10
+ unmountSuspended: {
11
+ MOUNT: "mounted",
12
+ ANIMATION_END: "unmounted",
13
+ },
14
+ unmounted: {
15
+ MOUNT: "mounted",
16
+ },
17
+ };
18
+ export class Presence {
19
+ opts;
20
+ prevAnimationNameState = $state("none");
21
+ styles = $state({});
22
+ initialStatus;
23
+ previousPresent;
24
+ machine;
25
+ present;
26
+ constructor(opts) {
27
+ this.opts = opts;
28
+ this.present = this.opts.open;
29
+ this.initialStatus = opts.open.current ? "mounted" : "unmounted";
30
+ this.previousPresent = new Previous(() => this.present.current);
31
+ this.machine = new StateMachine(this.initialStatus, presenceMachine);
32
+ this.handleAnimationEnd = this.handleAnimationEnd.bind(this);
33
+ this.handleAnimationStart = this.handleAnimationStart.bind(this);
34
+ watchPresenceChange(this);
35
+ watchStatusChange(this);
36
+ watchRefChange(this);
37
+ }
38
+ /**
39
+ * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`
40
+ * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we
41
+ * make sure we only trigger ANIMATION_END for the currently active animation.
42
+ */
43
+ handleAnimationEnd(event) {
44
+ if (!this.opts.ref.current)
45
+ return;
46
+ const currAnimationName = getAnimationName(this.opts.ref.current);
47
+ const isCurrentAnimation = currAnimationName.includes(event.animationName) || currAnimationName === "none";
48
+ if (event.target === this.opts.ref.current && isCurrentAnimation) {
49
+ this.machine.dispatch("ANIMATION_END");
50
+ }
51
+ }
52
+ handleAnimationStart(event) {
53
+ if (!this.opts.ref.current)
54
+ return;
55
+ if (event.target === this.opts.ref.current) {
56
+ this.prevAnimationNameState = getAnimationName(this.opts.ref.current);
57
+ }
58
+ }
59
+ isPresent = $derived.by(() => {
60
+ return ["mounted", "unmountSuspended"].includes(this.machine.state.current);
61
+ });
62
+ }
63
+ function watchPresenceChange(state) {
64
+ watch(() => state.present.current, () => {
65
+ if (!state.opts.ref.current)
66
+ return;
67
+ const hasPresentChanged = state.present.current !== state.previousPresent.current;
68
+ if (!hasPresentChanged)
69
+ return;
70
+ const prevAnimationName = state.prevAnimationNameState;
71
+ const currAnimationName = getAnimationName(state.opts.ref.current);
72
+ if (state.present.current) {
73
+ state.machine.dispatch("MOUNT");
74
+ }
75
+ else if (currAnimationName === "none" || state.styles.display === "none") {
76
+ // If there is no exit animation or the element is hidden, animations won't run
77
+ // so we unmount instantly
78
+ state.machine.dispatch("UNMOUNT");
79
+ }
80
+ else {
81
+ /**
82
+ * When `present` changes to `false`, we check changes to animation-name to
83
+ * determine whether an animation has started. We chose this approach (reading
84
+ * computed styles) because there is no `animationrun` event and `animationstart`
85
+ * fires after `animation-delay` has expired which would be too late.
86
+ */
87
+ const isAnimating = prevAnimationName !== currAnimationName;
88
+ if (state.previousPresent.current && isAnimating) {
89
+ state.machine.dispatch("ANIMATION_OUT");
90
+ }
91
+ else {
92
+ state.machine.dispatch("UNMOUNT");
93
+ }
94
+ }
95
+ });
96
+ }
97
+ function watchStatusChange(state) {
98
+ watch(() => state.machine.state.current, () => {
99
+ if (!state.opts.ref.current)
100
+ return;
101
+ const currAnimationName = getAnimationName(state.opts.ref.current);
102
+ state.prevAnimationNameState =
103
+ state.machine.state.current === "mounted" ? currAnimationName : "none";
104
+ });
105
+ }
106
+ function watchRefChange(state) {
107
+ watch(() => state.opts.ref.current, () => {
108
+ if (!state.opts.ref.current)
109
+ return;
110
+ state.styles = getComputedStyle(state.opts.ref.current);
111
+ return executeCallbacks(on(state.opts.ref.current, "animationstart", state.handleAnimationStart), on(state.opts.ref.current, "animationcancel", state.handleAnimationEnd), on(state.opts.ref.current, "animationend", state.handleAnimationEnd));
112
+ });
113
+ }
114
+ function getAnimationName(node) {
115
+ return node ? getComputedStyle(node).animationName || "none" : "none";
116
+ }
@@ -8,13 +8,11 @@ export type PresenceLayerProps = {
8
8
  };
9
9
  export type PresenceLayerImplProps = PresenceLayerProps & {
10
10
  /**
11
- * The presence status.
11
+ * The open state of the component.
12
12
  */
13
- present: boolean;
13
+ open: boolean;
14
14
  presence?: Snippet<[{
15
- present: {
16
- current: boolean;
17
- };
15
+ present: boolean;
18
16
  }]>;
19
17
  ref: ReadableBox<HTMLElement | null>;
20
18
  };
@@ -1,10 +1,10 @@
1
1
  <script lang="ts">
2
2
  import type { ScrollLockProps } from "./index.js";
3
- import { useBodyScrollLock } from "../../../internal/use-body-scroll-lock.svelte.js";
3
+ import { BodyScrollLock } from "../../../internal/body-scroll-lock.svelte.js";
4
4
 
5
5
  let { preventScroll = true, restoreScrollDelay = null }: ScrollLockProps = $props();
6
6
 
7
7
  if (preventScroll) {
8
- useBodyScrollLock(preventScroll, () => restoreScrollDelay);
8
+ new BodyScrollLock(preventScroll, () => restoreScrollDelay);
9
9
  }
10
10
  </script>
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { box } from "svelte-toolbelt";
3
3
  import type { TextSelectionLayerImplProps } from "./types.js";
4
- import { useTextSelectionLayer } from "./use-text-selection-layer.svelte.js";
4
+ import { TextSelectionLayerState } from "./use-text-selection-layer.svelte.js";
5
5
  import { noop } from "../../../internal/noop.js";
6
6
 
7
7
  let {
@@ -14,7 +14,7 @@
14
14
  ref,
15
15
  }: TextSelectionLayerImplProps = $props();
16
16
 
17
- useTextSelectionLayer({
17
+ TextSelectionLayerState.create({
18
18
  id: box.with(() => id),
19
19
  onPointerDown: box.with(() => onPointerDown),
20
20
  onPointerUp: box.with(() => onPointerUp),
@@ -1,14 +1,14 @@
1
- import { DOMContext } from "svelte-toolbelt";
1
+ import { DOMContext, type ReadableBoxedValues } from "svelte-toolbelt";
2
2
  import type { TextSelectionLayerImplProps } from "./types.js";
3
- import type { ReadableBoxedValues } from "../../../internal/box.svelte.js";
4
- type TextSelectionLayerStateProps = ReadableBoxedValues<Required<Omit<TextSelectionLayerImplProps, "children" | "preventOverflowTextSelection" | "ref">> & {
3
+ interface TextSelectionLayerStateOpts extends ReadableBoxedValues<Required<Omit<TextSelectionLayerImplProps, "children" | "preventOverflowTextSelection" | "ref">> & {
5
4
  ref: HTMLElement | null;
6
- }>;
5
+ }> {
6
+ }
7
7
  export declare class TextSelectionLayerState {
8
8
  #private;
9
- readonly opts: TextSelectionLayerStateProps;
9
+ static create(opts: TextSelectionLayerStateOpts): TextSelectionLayerState;
10
+ readonly opts: TextSelectionLayerStateOpts;
10
11
  readonly domContext: DOMContext;
11
- constructor(opts: TextSelectionLayerStateProps);
12
+ constructor(opts: TextSelectionLayerStateOpts);
12
13
  }
13
- export declare function useTextSelectionLayer(props: TextSelectionLayerStateProps): TextSelectionLayerState;
14
14
  export {};
@@ -5,6 +5,9 @@ import { noop } from "../../../internal/noop.js";
5
5
  import { isHTMLElement } from "../../../internal/is.js";
6
6
  globalThis.bitsTextSelectionLayers ??= new Map();
7
7
  export class TextSelectionLayerState {
8
+ static create(opts) {
9
+ return new TextSelectionLayerState(opts);
10
+ }
8
11
  opts;
9
12
  domContext;
10
13
  #unsubSelectionLock = noop;
@@ -50,9 +53,6 @@ export class TextSelectionLayerState {
50
53
  this.#unsubSelectionLock = noop;
51
54
  };
52
55
  }
53
- export function useTextSelectionLayer(props) {
54
- return new TextSelectionLayerState(props);
55
- }
56
56
  const getUserSelect = (node) => node.style.userSelect || node.style.webkitUserSelect;
57
57
  function preventTextSelectionOverflow(node, body) {
58
58
  const originalBodyUserSelect = getUserSelect(body);
@@ -0,0 +1,12 @@
1
+ import { type ReadableBoxedValues } from "svelte-toolbelt";
2
+ interface AnimationsCompleteOpts extends ReadableBoxedValues<{
3
+ ref: HTMLElement | null;
4
+ afterTick: boolean;
5
+ }> {
6
+ }
7
+ export declare class AnimationsComplete {
8
+ #private;
9
+ constructor(opts: AnimationsCompleteOpts);
10
+ run(fn: () => void | Promise<void>): void;
11
+ }
12
+ export {};
@@ -0,0 +1,55 @@
1
+ import { afterTick, onDestroyEffect } from "svelte-toolbelt";
2
+ export class AnimationsComplete {
3
+ #opts;
4
+ #currentFrame = undefined;
5
+ #isRunning = false;
6
+ constructor(opts) {
7
+ this.#opts = opts;
8
+ onDestroyEffect(() => this.#cleanup());
9
+ }
10
+ #cleanup() {
11
+ if (this.#currentFrame) {
12
+ window.cancelAnimationFrame(this.#currentFrame);
13
+ this.#currentFrame = undefined;
14
+ }
15
+ this.#isRunning = false;
16
+ }
17
+ run(fn) {
18
+ // prevent multiple concurrent runs
19
+ if (this.#isRunning)
20
+ return;
21
+ this.#cleanup();
22
+ this.#isRunning = true;
23
+ const node = this.#opts.ref.current;
24
+ if (!node) {
25
+ this.#isRunning = false;
26
+ return;
27
+ }
28
+ if (typeof node.getAnimations !== "function") {
29
+ this.#executeCallback(fn);
30
+ return;
31
+ }
32
+ this.#currentFrame = window.requestAnimationFrame(() => {
33
+ const animations = node.getAnimations();
34
+ if (animations.length === 0) {
35
+ this.#executeCallback(fn);
36
+ return;
37
+ }
38
+ Promise.allSettled(animations.map((animation) => animation.finished)).then(() => {
39
+ this.#executeCallback(fn);
40
+ });
41
+ });
42
+ }
43
+ #executeCallback(fn) {
44
+ const execute = () => {
45
+ fn();
46
+ this.#isRunning = false;
47
+ };
48
+ if (this.#opts.afterTick) {
49
+ afterTick(execute);
50
+ }
51
+ else {
52
+ execute();
53
+ }
54
+ }
55
+ }