bits-ui 1.8.0 → 2.1.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 (287) hide show
  1. package/dist/bits/accordion/accordion.svelte.d.ts +56 -53
  2. package/dist/bits/accordion/accordion.svelte.js +78 -89
  3. package/dist/bits/accordion/components/accordion-content.svelte +5 -3
  4. package/dist/bits/accordion/components/accordion-header.svelte +4 -2
  5. package/dist/bits/accordion/components/accordion-item.svelte +6 -3
  6. package/dist/bits/accordion/components/accordion-trigger.svelte +4 -2
  7. package/dist/bits/accordion/components/accordion.svelte +4 -2
  8. package/dist/bits/alert-dialog/components/alert-dialog-action.svelte +4 -2
  9. package/dist/bits/alert-dialog/components/alert-dialog-cancel.svelte +4 -2
  10. package/dist/bits/alert-dialog/components/alert-dialog-content.svelte +8 -3
  11. package/dist/bits/aspect-ratio/aspect-ratio.svelte.js +2 -2
  12. package/dist/bits/aspect-ratio/components/aspect-ratio.svelte +4 -2
  13. package/dist/bits/avatar/avatar.svelte.js +4 -4
  14. package/dist/bits/avatar/components/avatar-fallback.svelte +4 -2
  15. package/dist/bits/avatar/components/avatar-image.svelte +4 -2
  16. package/dist/bits/avatar/components/avatar.svelte +4 -2
  17. package/dist/bits/button/components/button.svelte +1 -1
  18. package/dist/bits/calendar/calendar.svelte.d.ts +1 -9
  19. package/dist/bits/calendar/calendar.svelte.js +47 -38
  20. package/dist/bits/calendar/components/calendar-cell.svelte +4 -2
  21. package/dist/bits/calendar/components/calendar-day.svelte +4 -2
  22. package/dist/bits/calendar/components/calendar-grid-body.svelte +4 -2
  23. package/dist/bits/calendar/components/calendar-grid-head.svelte +4 -2
  24. package/dist/bits/calendar/components/calendar-grid-row.svelte +4 -2
  25. package/dist/bits/calendar/components/calendar-grid.svelte +4 -2
  26. package/dist/bits/calendar/components/calendar-head-cell.svelte +4 -2
  27. package/dist/bits/calendar/components/calendar-header.svelte +4 -2
  28. package/dist/bits/calendar/components/calendar-heading.svelte +4 -2
  29. package/dist/bits/calendar/components/calendar-next-button.svelte +4 -2
  30. package/dist/bits/calendar/components/calendar-prev-button.svelte +4 -2
  31. package/dist/bits/checkbox/checkbox.svelte.js +4 -14
  32. package/dist/bits/checkbox/components/checkbox-group-label.svelte +4 -2
  33. package/dist/bits/checkbox/components/checkbox-group.svelte +4 -2
  34. package/dist/bits/checkbox/components/checkbox.svelte +4 -2
  35. package/dist/bits/collapsible/collapsible.svelte.js +4 -10
  36. package/dist/bits/collapsible/components/collapsible-content.svelte +5 -3
  37. package/dist/bits/collapsible/components/collapsible-trigger.svelte +4 -2
  38. package/dist/bits/collapsible/components/collapsible.svelte +4 -2
  39. package/dist/bits/combobox/components/combobox-input.svelte +1 -1
  40. package/dist/bits/combobox/components/combobox.svelte +1 -1
  41. package/dist/bits/command/command.svelte.js +13 -45
  42. package/dist/bits/command/components/_command-label.svelte +6 -7
  43. package/dist/bits/command/components/_command-label.svelte.d.ts +1 -1
  44. package/dist/bits/command/components/command-empty.svelte +4 -2
  45. package/dist/bits/command/components/command-group-heading.svelte +4 -2
  46. package/dist/bits/command/components/command-group-items.svelte +4 -2
  47. package/dist/bits/command/components/command-group.svelte +4 -2
  48. package/dist/bits/command/components/command-input.svelte +4 -2
  49. package/dist/bits/command/components/command-item.svelte +4 -2
  50. package/dist/bits/command/components/command-link-item.svelte +4 -2
  51. package/dist/bits/command/components/command-list.svelte +4 -2
  52. package/dist/bits/command/components/command-loading.svelte +4 -2
  53. package/dist/bits/command/components/command-separator.svelte +4 -2
  54. package/dist/bits/command/components/command-viewport.svelte +4 -2
  55. package/dist/bits/command/components/command.svelte +4 -2
  56. package/dist/bits/context-menu/components/context-menu-content-static.svelte +2 -3
  57. package/dist/bits/context-menu/components/context-menu-content.svelte +2 -3
  58. package/dist/bits/context-menu/components/context-menu-trigger.svelte +1 -1
  59. package/dist/bits/date-field/components/date-field-input.svelte +4 -2
  60. package/dist/bits/date-field/components/date-field-label.svelte +4 -2
  61. package/dist/bits/date-field/components/date-field-segment.svelte +4 -2
  62. package/dist/bits/date-field/date-field.svelte.d.ts +4 -4
  63. package/dist/bits/date-field/date-field.svelte.js +15 -33
  64. package/dist/bits/date-picker/components/date-picker-calendar.svelte +4 -2
  65. package/dist/bits/date-range-field/components/date-range-field-input.svelte +4 -2
  66. package/dist/bits/date-range-field/components/date-range-field-label.svelte +4 -2
  67. package/dist/bits/date-range-field/components/date-range-field.svelte +4 -2
  68. package/dist/bits/date-range-field/date-range-field.svelte.js +3 -13
  69. package/dist/bits/date-range-picker/components/date-range-picker-calendar.svelte +4 -2
  70. package/dist/bits/dialog/components/dialog-close.svelte +4 -2
  71. package/dist/bits/dialog/components/dialog-content.svelte +8 -2
  72. package/dist/bits/dialog/components/dialog-description.svelte +4 -2
  73. package/dist/bits/dialog/components/dialog-overlay.svelte +8 -3
  74. package/dist/bits/dialog/components/dialog-title.svelte +4 -2
  75. package/dist/bits/dialog/components/dialog-trigger.svelte +4 -2
  76. package/dist/bits/dialog/dialog.svelte.d.ts +1 -1
  77. package/dist/bits/dialog/dialog.svelte.js +19 -47
  78. package/dist/bits/dropdown-menu/components/dropdown-menu-content-static.svelte +6 -5
  79. package/dist/bits/dropdown-menu/components/dropdown-menu-content.svelte +6 -5
  80. package/dist/bits/index.d.ts +2 -0
  81. package/dist/bits/index.js +2 -0
  82. package/dist/bits/label/components/label.svelte +4 -2
  83. package/dist/bits/label/label.svelte.js +2 -2
  84. package/dist/bits/link-preview/components/link-preview-content-static.svelte +6 -2
  85. package/dist/bits/link-preview/components/link-preview-content.svelte +6 -2
  86. package/dist/bits/link-preview/components/link-preview-trigger.svelte +5 -3
  87. package/dist/bits/link-preview/link-preview.svelte.js +3 -14
  88. package/dist/bits/menu/components/menu-checkbox-group.svelte +4 -2
  89. package/dist/bits/menu/components/menu-checkbox-item.svelte +6 -4
  90. package/dist/bits/menu/components/menu-content-static.svelte +6 -5
  91. package/dist/bits/menu/components/menu-content.svelte +6 -5
  92. package/dist/bits/menu/components/menu-group-heading.svelte +4 -2
  93. package/dist/bits/menu/components/menu-group.svelte +4 -2
  94. package/dist/bits/menu/components/menu-item.svelte +4 -2
  95. package/dist/bits/menu/components/menu-radio-group.svelte +4 -2
  96. package/dist/bits/menu/components/menu-radio-item.svelte +4 -2
  97. package/dist/bits/menu/components/menu-separator.svelte +4 -2
  98. package/dist/bits/menu/components/menu-sub-content-static.svelte +6 -5
  99. package/dist/bits/menu/components/menu-sub-content.svelte +6 -5
  100. package/dist/bits/menu/components/menu-sub-trigger.svelte +6 -3
  101. package/dist/bits/menu/components/menu-trigger.svelte +5 -3
  102. package/dist/bits/menu/menu.svelte.d.ts +7 -20
  103. package/dist/bits/menu/menu.svelte.js +26 -54
  104. package/dist/bits/menubar/components/menubar-content-static.svelte +4 -2
  105. package/dist/bits/menubar/components/menubar-content.svelte +4 -2
  106. package/dist/bits/menubar/components/menubar-menu.svelte +4 -2
  107. package/dist/bits/menubar/components/menubar-trigger.svelte +14 -6
  108. package/dist/bits/menubar/components/menubar.svelte +4 -2
  109. package/dist/bits/menubar/menubar.svelte.d.ts +24 -20
  110. package/dist/bits/menubar/menubar.svelte.js +40 -56
  111. package/dist/bits/meter/components/meter.svelte +4 -2
  112. package/dist/bits/meter/meter.svelte.js +2 -2
  113. package/dist/bits/navigation-menu/components/navigation-menu-content-impl.svelte +5 -2
  114. package/dist/bits/navigation-menu/components/navigation-menu-content.svelte +8 -3
  115. package/dist/bits/navigation-menu/components/navigation-menu-indicator-impl.svelte +4 -2
  116. package/dist/bits/navigation-menu/components/navigation-menu-indicator.svelte +6 -4
  117. package/dist/bits/navigation-menu/components/navigation-menu-item.svelte +6 -3
  118. package/dist/bits/navigation-menu/components/navigation-menu-link.svelte +4 -2
  119. package/dist/bits/navigation-menu/components/navigation-menu-list.svelte +4 -2
  120. package/dist/bits/navigation-menu/components/navigation-menu-sub.svelte +4 -2
  121. package/dist/bits/navigation-menu/components/navigation-menu-trigger.svelte +4 -2
  122. package/dist/bits/navigation-menu/components/navigation-menu-viewport.svelte +5 -3
  123. package/dist/bits/navigation-menu/components/navigation-menu.svelte +4 -2
  124. package/dist/bits/navigation-menu/navigation-menu.svelte.js +13 -50
  125. package/dist/bits/pagination/components/pagination-next-button.svelte +4 -2
  126. package/dist/bits/pagination/components/pagination-page.svelte +4 -2
  127. package/dist/bits/pagination/components/pagination-prev-button.svelte +4 -2
  128. package/dist/bits/pagination/components/pagination.svelte +4 -2
  129. package/dist/bits/pagination/pagination.svelte.js +4 -4
  130. package/dist/bits/pin-input/components/pin-input-cell.svelte +4 -2
  131. package/dist/bits/pin-input/components/pin-input.svelte +5 -3
  132. package/dist/bits/pin-input/pin-input.svelte.js +4 -10
  133. package/dist/bits/popover/components/popover-close.svelte +4 -2
  134. package/dist/bits/popover/components/popover-content-static.svelte +6 -2
  135. package/dist/bits/popover/components/popover-content.svelte +6 -2
  136. package/dist/bits/popover/components/popover-trigger.svelte +5 -3
  137. package/dist/bits/popover/popover.svelte.js +4 -18
  138. package/dist/bits/progress/components/progress.svelte +4 -2
  139. package/dist/bits/progress/progress.svelte.js +2 -2
  140. package/dist/bits/radio-group/components/radio-group-item.svelte +4 -2
  141. package/dist/bits/radio-group/components/radio-group.svelte +4 -2
  142. package/dist/bits/radio-group/radio-group.svelte.js +4 -7
  143. package/dist/bits/range-calendar/components/range-calendar-cell.svelte +4 -2
  144. package/dist/bits/range-calendar/components/range-calendar-day.svelte +4 -2
  145. package/dist/bits/range-calendar/components/range-calendar.svelte +4 -2
  146. package/dist/bits/range-calendar/range-calendar.svelte.js +4 -4
  147. package/dist/bits/scroll-area/components/scroll-area-corner.svelte +8 -2
  148. package/dist/bits/scroll-area/components/scroll-area-scrollbar-auto.svelte +4 -1
  149. package/dist/bits/scroll-area/components/scroll-area-scrollbar-hover.svelte +1 -1
  150. package/dist/bits/scroll-area/components/scroll-area-scrollbar-scroll.svelte +5 -1
  151. package/dist/bits/scroll-area/components/scroll-area-scrollbar.svelte +4 -2
  152. package/dist/bits/scroll-area/components/scroll-area-thumb.svelte +8 -3
  153. package/dist/bits/scroll-area/components/scroll-area-viewport.svelte +4 -2
  154. package/dist/bits/scroll-area/components/scroll-area.svelte +4 -2
  155. package/dist/bits/scroll-area/scroll-area.svelte.js +13 -47
  156. package/dist/bits/select/components/select-content-static.svelte +6 -2
  157. package/dist/bits/select/components/select-content.svelte +6 -2
  158. package/dist/bits/select/components/select-group-heading.svelte +3 -2
  159. package/dist/bits/select/components/select-group.svelte +4 -2
  160. package/dist/bits/select/components/select-item.svelte +4 -2
  161. package/dist/bits/select/components/select-scroll-down-button.svelte +4 -2
  162. package/dist/bits/select/components/select-scroll-up-button.svelte +4 -2
  163. package/dist/bits/select/components/select-trigger.svelte +5 -3
  164. package/dist/bits/select/components/select-viewport.svelte +4 -2
  165. package/dist/bits/select/components/select.svelte +1 -1
  166. package/dist/bits/select/select.svelte.d.ts +0 -18
  167. package/dist/bits/select/select.svelte.js +10 -43
  168. package/dist/bits/separator/components/separator.svelte +4 -2
  169. package/dist/bits/separator/separator.svelte.js +2 -2
  170. package/dist/bits/slider/components/slider-range.svelte +4 -2
  171. package/dist/bits/slider/components/slider-thumb-label.svelte +50 -0
  172. package/dist/bits/slider/components/slider-thumb-label.svelte.d.ts +4 -0
  173. package/dist/bits/slider/components/slider-thumb.svelte +4 -2
  174. package/dist/bits/slider/components/slider-tick-label.svelte +50 -0
  175. package/dist/bits/slider/components/slider-tick-label.svelte.d.ts +4 -0
  176. package/dist/bits/slider/components/slider-tick.svelte +4 -2
  177. package/dist/bits/slider/components/slider.svelte +24 -5
  178. package/dist/bits/slider/exports.d.ts +3 -1
  179. package/dist/bits/slider/exports.js +2 -0
  180. package/dist/bits/slider/helpers.d.ts +14 -0
  181. package/dist/bits/slider/helpers.js +122 -0
  182. package/dist/bits/slider/slider.svelte.d.ts +91 -5
  183. package/dist/bits/slider/slider.svelte.js +194 -101
  184. package/dist/bits/slider/types.d.ts +105 -11
  185. package/dist/bits/switch/components/switch-thumb.svelte +4 -2
  186. package/dist/bits/switch/components/switch.svelte +4 -2
  187. package/dist/bits/switch/switch.svelte.js +3 -3
  188. package/dist/bits/tabs/components/tabs-content.svelte +4 -2
  189. package/dist/bits/tabs/components/tabs-list.svelte +4 -2
  190. package/dist/bits/tabs/components/tabs-trigger.svelte +4 -2
  191. package/dist/bits/tabs/components/tabs.svelte +4 -2
  192. package/dist/bits/tabs/tabs.svelte.js +6 -6
  193. package/dist/bits/time-field/components/time-field-hidden-input.svelte +10 -0
  194. package/dist/bits/{date-field/components/date-field-error.svelte.d.ts → time-field/components/time-field-hidden-input.svelte.d.ts} +6 -14
  195. package/dist/bits/time-field/components/time-field-input.svelte +39 -0
  196. package/dist/bits/time-field/components/time-field-input.svelte.d.ts +4 -0
  197. package/dist/bits/time-field/components/time-field-label.svelte +34 -0
  198. package/dist/bits/time-field/components/time-field-label.svelte.d.ts +4 -0
  199. package/dist/bits/time-field/components/time-field-segment.svelte +37 -0
  200. package/dist/bits/time-field/components/time-field-segment.svelte.d.ts +4 -0
  201. package/dist/bits/time-field/components/time-field.svelte +94 -0
  202. package/dist/bits/time-field/components/time-field.svelte.d.ts +20 -0
  203. package/dist/bits/time-field/exports.d.ts +5 -0
  204. package/dist/bits/time-field/exports.js +4 -0
  205. package/dist/bits/time-field/index.d.ts +1 -0
  206. package/dist/bits/time-field/index.js +1 -0
  207. package/dist/bits/time-field/time-field.svelte.d.ts +415 -0
  208. package/dist/bits/time-field/time-field.svelte.js +971 -0
  209. package/dist/bits/time-field/types.d.ts +137 -0
  210. package/dist/bits/time-field/types.js +1 -0
  211. package/dist/bits/time-range-field/components/time-range-field-input.svelte +43 -0
  212. package/dist/bits/time-range-field/components/time-range-field-input.svelte.d.ts +4 -0
  213. package/dist/bits/time-range-field/components/time-range-field-label.svelte +34 -0
  214. package/dist/bits/time-range-field/components/time-range-field-label.svelte.d.ts +4 -0
  215. package/dist/bits/time-range-field/components/time-range-field.svelte +144 -0
  216. package/dist/bits/time-range-field/components/time-range-field.svelte.d.ts +20 -0
  217. package/dist/bits/time-range-field/exports.d.ts +5 -0
  218. package/dist/bits/time-range-field/exports.js +4 -0
  219. package/dist/bits/time-range-field/index.d.ts +1 -0
  220. package/dist/bits/time-range-field/index.js +1 -0
  221. package/dist/bits/time-range-field/time-range-field.svelte.d.ts +90 -0
  222. package/dist/bits/time-range-field/time-range-field.svelte.js +210 -0
  223. package/dist/bits/time-range-field/types.d.ts +150 -0
  224. package/dist/bits/time-range-field/types.js +1 -0
  225. package/dist/bits/toggle/components/toggle.svelte +4 -2
  226. package/dist/bits/toggle/toggle.svelte.js +2 -2
  227. package/dist/bits/toggle-group/components/toggle-group-item.svelte +4 -2
  228. package/dist/bits/toggle-group/components/toggle-group.svelte +4 -2
  229. package/dist/bits/toggle-group/toggle-group.svelte.js +4 -4
  230. package/dist/bits/toolbar/components/toolbar-button.svelte +4 -2
  231. package/dist/bits/toolbar/components/toolbar-group-item.svelte +4 -2
  232. package/dist/bits/toolbar/components/toolbar-group.svelte +4 -2
  233. package/dist/bits/toolbar/components/toolbar-link.svelte +4 -2
  234. package/dist/bits/toolbar/components/toolbar.svelte +4 -2
  235. package/dist/bits/toolbar/toolbar.svelte.js +7 -7
  236. package/dist/bits/tooltip/components/tooltip-content-static.svelte +6 -2
  237. package/dist/bits/tooltip/components/tooltip-content.svelte +6 -2
  238. package/dist/bits/tooltip/components/tooltip-trigger.svelte +5 -3
  239. package/dist/bits/tooltip/tooltip.svelte.js +3 -14
  240. package/dist/bits/utilities/dismissible-layer/dismissible-layer.svelte +2 -0
  241. package/dist/bits/utilities/dismissible-layer/types.d.ts +2 -0
  242. package/dist/bits/utilities/dismissible-layer/use-dismissable-layer.svelte.d.ts +3 -3
  243. package/dist/bits/utilities/dismissible-layer/use-dismissable-layer.svelte.js +16 -25
  244. package/dist/bits/utilities/floating-layer/components/floating-layer-anchor.svelte +2 -1
  245. package/dist/bits/utilities/floating-layer/types.d.ts +1 -0
  246. package/dist/bits/utilities/floating-layer/use-floating-layer.svelte.d.ts +3 -2
  247. package/dist/bits/utilities/floating-layer/use-floating-layer.svelte.js +5 -26
  248. package/dist/bits/utilities/focus-scope/focus-scope.svelte +2 -0
  249. package/dist/bits/utilities/focus-scope/types.d.ts +2 -0
  250. package/dist/bits/utilities/focus-scope/use-focus-scope.svelte.d.ts +2 -1
  251. package/dist/bits/utilities/focus-scope/use-focus-scope.svelte.js +2 -8
  252. package/dist/bits/utilities/popper-layer/popper-layer-inner.svelte +4 -0
  253. package/dist/bits/utilities/popper-layer/popper-layer.svelte +3 -1
  254. package/dist/bits/utilities/presence-layer/presence-layer.svelte +2 -2
  255. package/dist/bits/utilities/presence-layer/types.d.ts +2 -1
  256. package/dist/bits/utilities/presence-layer/use-presence.svelte.d.ts +1 -1
  257. package/dist/bits/utilities/presence-layer/use-presence.svelte.js +19 -36
  258. package/dist/bits/utilities/text-selection-layer/text-selection-layer.svelte +2 -0
  259. package/dist/bits/utilities/text-selection-layer/types.d.ts +2 -0
  260. package/dist/bits/utilities/text-selection-layer/use-text-selection-layer.svelte.d.ts +3 -1
  261. package/dist/bits/utilities/text-selection-layer/use-text-selection-layer.svelte.js +2 -8
  262. package/dist/index.d.ts +1 -1
  263. package/dist/index.js +1 -1
  264. package/dist/internal/create-id.d.ts +8 -0
  265. package/dist/internal/create-id.js +5 -0
  266. package/dist/internal/date-time/field/helpers.d.ts +1 -0
  267. package/dist/internal/date-time/field/helpers.js +8 -2
  268. package/dist/internal/date-time/field/parts.d.ts +3 -1
  269. package/dist/internal/date-time/field/parts.js +10 -2
  270. package/dist/internal/date-time/field/segments.d.ts +9 -0
  271. package/dist/internal/date-time/field/segments.js +65 -0
  272. package/dist/internal/date-time/field/time-helpers.d.ts +77 -0
  273. package/dist/internal/date-time/field/time-helpers.js +301 -0
  274. package/dist/internal/date-time/field/types.d.ts +2 -2
  275. package/dist/internal/date-time/formatter.d.ts +11 -1
  276. package/dist/internal/date-time/formatter.js +56 -0
  277. package/dist/internal/date-time/utils.d.ts +7 -2
  278. package/dist/internal/date-time/utils.js +15 -1
  279. package/dist/internal/dom-context.svelte.d.ts +9 -0
  280. package/dist/internal/dom-context.svelte.js +26 -0
  281. package/dist/internal/use-roving-focus.svelte.d.ts +3 -3
  282. package/dist/internal/use-roving-focus.svelte.js +10 -11
  283. package/dist/shared/date/types.d.ts +27 -4
  284. package/dist/shared/index.d.ts +2 -2
  285. package/dist/types.d.ts +2 -0
  286. package/package.json +18 -16
  287. package/dist/bits/date-field/components/date-field-error.svelte +0 -0
@@ -2,13 +2,15 @@
2
2
  import { box, mergeProps } from "svelte-toolbelt";
3
3
  import type { MenuGroupProps } from "../types.js";
4
4
  import { useMenuGroup } from "../menu.svelte.js";
5
- import { useId } from "../../../internal/use-id.js";
5
+ import { createId } from "../../../internal/create-id.js";
6
+
7
+ const uid = $props.id();
6
8
 
7
9
  let {
8
10
  children,
9
11
  child,
10
12
  ref = $bindable(null),
11
- id = useId(),
13
+ id = createId(uid),
12
14
  ...restProps
13
15
  }: MenuGroupProps = $props();
14
16
 
@@ -2,14 +2,16 @@
2
2
  import { box, mergeProps } from "svelte-toolbelt";
3
3
  import type { MenuItemProps } from "../types.js";
4
4
  import { useMenuItem } from "../menu.svelte.js";
5
- import { useId } from "../../../internal/use-id.js";
5
+ import { createId } from "../../../internal/create-id.js";
6
6
  import { noop } from "../../../internal/noop.js";
7
7
 
8
+ const uid = $props.id();
9
+
8
10
  let {
9
11
  child,
10
12
  children,
11
13
  ref = $bindable(null),
12
- id = useId(),
14
+ id = createId(uid),
13
15
  disabled = false,
14
16
  onSelect = noop,
15
17
  closeOnSelect = true,
@@ -3,10 +3,12 @@
3
3
  import type { MenuRadioGroupProps } from "../types.js";
4
4
  import { useMenuRadioGroup } from "../menu.svelte.js";
5
5
  import { noop } from "../../../internal/noop.js";
6
- import { useId } from "../../../internal/use-id.js";
6
+ import { createId } from "../../../internal/create-id.js";
7
+
8
+ const uid = $props.id();
7
9
 
8
10
  let {
9
- id = useId(),
11
+ id = createId(uid),
10
12
  children,
11
13
  child,
12
14
  ref = $bindable(null),
@@ -2,16 +2,18 @@
2
2
  import { box, mergeProps } from "svelte-toolbelt";
3
3
  import type { MenuRadioItemProps } from "../types.js";
4
4
  import { useMenuRadioItem } from "../menu.svelte.js";
5
- import { useId } from "../../../internal/use-id.js";
5
+ import { createId } from "../../../internal/create-id.js";
6
6
  import { noop } from "../../../internal/noop.js";
7
7
 
8
+ const uid = $props.id();
9
+
8
10
  let {
9
11
  children,
10
12
  child,
11
13
  ref = $bindable(null),
12
14
  value,
13
15
  onSelect = noop,
14
- id = useId(),
16
+ id = createId(uid),
15
17
  disabled = false,
16
18
  closeOnSelect = true,
17
19
  ...restProps
@@ -2,11 +2,13 @@
2
2
  import { box, mergeProps } from "svelte-toolbelt";
3
3
  import type { MenuSeparatorProps } from "../types.js";
4
4
  import { useMenuSeparator } from "../menu.svelte.js";
5
- import { useId } from "../../../internal/use-id.js";
5
+ import { createId } from "../../../internal/create-id.js";
6
+
7
+ const uid = $props.id();
6
8
 
7
9
  let {
8
10
  ref = $bindable(null),
9
- id = useId(),
11
+ id = createId(uid),
10
12
  child,
11
13
  children,
12
14
  ...restProps
@@ -3,16 +3,17 @@
3
3
  import type { MenuSubContentStaticProps } from "../types.js";
4
4
  import { useMenuContent } from "../menu.svelte.js";
5
5
  import { SUB_CLOSE_KEYS } from "../utils.js";
6
- import { useId } from "../../../internal/use-id.js";
6
+ import { createId } from "../../../internal/create-id.js";
7
7
  import PopperLayer from "../../utilities/popper-layer/popper-layer.svelte";
8
8
  import { noop } from "../../../internal/noop.js";
9
9
  import { isHTMLElement } from "../../../internal/is.js";
10
- import Mounted from "../../utilities/mounted.svelte";
11
10
  import { getFloatingContentCSSVars } from "../../../internal/floating-svelte/floating-utils.svelte.js";
12
11
  import PopperLayerForceMount from "../../utilities/popper-layer/popper-layer-force-mount.svelte";
13
12
 
13
+ const uid = $props.id();
14
+
14
15
  let {
15
- id = useId(),
16
+ id = createId(uid),
16
17
  ref = $bindable(null),
17
18
  children,
18
19
  child,
@@ -107,6 +108,7 @@
107
108
  {#if forceMount}
108
109
  <PopperLayerForceMount
109
110
  {...mergedProps}
111
+ ref={subContentState.opts.ref}
110
112
  {interactOutsideBehavior}
111
113
  {escapeKeydownBehavior}
112
114
  onOpenAutoFocus={handleOpenAutoFocus}
@@ -130,12 +132,12 @@
130
132
  {@render children?.()}
131
133
  </div>
132
134
  {/if}
133
- <Mounted bind:mounted={subContentState.mounted} />
134
135
  {/snippet}
135
136
  </PopperLayerForceMount>
136
137
  {:else if !forceMount}
137
138
  <PopperLayer
138
139
  {...mergedProps}
140
+ ref={subContentState.opts.ref}
139
141
  {interactOutsideBehavior}
140
142
  {escapeKeydownBehavior}
141
143
  onCloseAutoFocus={handleCloseAutoFocus}
@@ -160,7 +162,6 @@
160
162
  {@render children?.()}
161
163
  </div>
162
164
  {/if}
163
- <Mounted bind:mounted={subContentState.mounted} />
164
165
  {/snippet}
165
166
  </PopperLayer>
166
167
  {/if}
@@ -3,16 +3,17 @@
3
3
  import type { MenuSubContentProps } from "../types.js";
4
4
  import { MenuOpenEvent, useMenuContent } from "../menu.svelte.js";
5
5
  import { SUB_CLOSE_KEYS } from "../utils.js";
6
- import { useId } from "../../../internal/use-id.js";
6
+ import { createId } from "../../../internal/create-id.js";
7
7
  import PopperLayer from "../../utilities/popper-layer/popper-layer.svelte";
8
8
  import { noop } from "../../../internal/noop.js";
9
9
  import { isHTMLElement } from "../../../internal/is.js";
10
- import Mounted from "../../utilities/mounted.svelte";
11
10
  import { getFloatingContentCSSVars } from "../../../internal/floating-svelte/floating-utils.svelte.js";
12
11
  import PopperLayerForceMount from "../../utilities/popper-layer/popper-layer-force-mount.svelte";
13
12
 
13
+ const uid = $props.id();
14
+
14
15
  let {
15
- id = useId(),
16
+ id = createId(uid),
16
17
  ref = $bindable(null),
17
18
  children,
18
19
  child,
@@ -109,6 +110,7 @@
109
110
  {#if forceMount}
110
111
  <PopperLayerForceMount
111
112
  {...mergedProps}
113
+ ref={subContentState.opts.ref}
112
114
  {interactOutsideBehavior}
113
115
  {escapeKeydownBehavior}
114
116
  onOpenAutoFocus={handleOpenAutoFocus}
@@ -137,12 +139,12 @@
137
139
  </div>
138
140
  </div>
139
141
  {/if}
140
- <Mounted bind:mounted={subContentState.mounted} />
141
142
  {/snippet}
142
143
  </PopperLayerForceMount>
143
144
  {:else if !forceMount}
144
145
  <PopperLayer
145
146
  {...mergedProps}
147
+ ref={subContentState.opts.ref}
146
148
  {interactOutsideBehavior}
147
149
  {escapeKeydownBehavior}
148
150
  onCloseAutoFocus={handleCloseAutoFocus}
@@ -172,7 +174,6 @@
172
174
  </div>
173
175
  </div>
174
176
  {/if}
175
- <Mounted bind:mounted={subContentState.mounted} />
176
177
  {/snippet}
177
178
  </PopperLayer>
178
179
  {/if}
@@ -2,11 +2,14 @@
2
2
  import { box, mergeProps } from "svelte-toolbelt";
3
3
  import type { MenuSubTriggerProps } from "../types.js";
4
4
  import { useMenuSubTrigger } from "../menu.svelte.js";
5
- import { useId } from "../../../internal/use-id.js";
6
5
  import FloatingLayerAnchor from "../../utilities/floating-layer/components/floating-layer-anchor.svelte";
7
6
  import { noop } from "../../../internal/noop.js";
7
+ import { createId } from "../../../internal/create-id.js";
8
+
9
+ const uid = $props.id();
10
+
8
11
  let {
9
- id = useId(),
12
+ id = createId(uid),
10
13
  disabled = false,
11
14
  ref = $bindable(null),
12
15
  children,
@@ -28,7 +31,7 @@
28
31
  const mergedProps = $derived(mergeProps(restProps, subTriggerState.props));
29
32
  </script>
30
33
 
31
- <FloatingLayerAnchor {id}>
34
+ <FloatingLayerAnchor {id} ref={subTriggerState.opts.ref}>
32
35
  {#if child}
33
36
  {@render child({ props: mergedProps })}
34
37
  {:else}
@@ -2,11 +2,13 @@
2
2
  import { box, mergeProps } from "svelte-toolbelt";
3
3
  import type { MenuTriggerProps } from "../types.js";
4
4
  import { useMenuDropdownTrigger } from "../menu.svelte.js";
5
- import { useId } from "../../../internal/use-id.js";
5
+ import { createId } from "../../../internal/create-id.js";
6
6
  import FloatingLayerAnchor from "../../utilities/floating-layer/components/floating-layer-anchor.svelte";
7
7
 
8
+ const uid = $props.id();
9
+
8
10
  let {
9
- id = useId(),
11
+ id = createId(uid),
10
12
  ref = $bindable(null),
11
13
  child,
12
14
  children,
@@ -27,7 +29,7 @@
27
29
  const mergedProps = $derived(mergeProps(restProps, triggerState.props, { type }));
28
30
  </script>
29
31
 
30
- <FloatingLayerAnchor {id}>
32
+ <FloatingLayerAnchor {id} ref={triggerState.opts.ref}>
31
33
  {#if child}
32
34
  {@render child({ props: mergedProps })}
33
35
  {:else}
@@ -5,6 +5,7 @@ import type { AnyFn, BitsFocusEvent, BitsKeyboardEvent, BitsMouseEvent, BitsPoin
5
5
  import { useRovingFocus } from "../../internal/use-roving-focus.svelte.js";
6
6
  import type { Direction } from "../../shared/index.js";
7
7
  import { IsUsingKeyboard } from "../../index.js";
8
+ import type { KeyboardEventHandler, PointerEventHandler } from "svelte/elements";
8
9
  export declare const CONTEXT_MENU_TRIGGER_ATTR = "data-context-menu-trigger";
9
10
  export declare const MenuCheckboxGroupContext: Context<MenuCheckboxGroupState>;
10
11
  type MenuVariant = "context-menu" | "dropdown-menu" | "menubar";
@@ -66,9 +67,6 @@ declare class MenuContentState {
66
67
  open: boolean;
67
68
  };
68
69
  props: {
69
- readonly [x: string]: string | ((e: BitsKeyboardEvent) => void) | ((e: BitsFocusEvent) => void) | {
70
- readonly pointerEvents: "auto";
71
- };
72
70
  readonly id: string;
73
71
  readonly role: "menu";
74
72
  readonly "aria-orientation": "horizontal" | "vertical";
@@ -98,7 +96,6 @@ declare class MenuItemSharedState {
98
96
  onfocus(e: BitsFocusEvent): void;
99
97
  onblur(e: BitsFocusEvent): void;
100
98
  props: {
101
- readonly [x: string]: string | -1 | ((e: BitsPointerEvent) => void) | undefined;
102
99
  readonly id: string;
103
100
  readonly tabindex: -1;
104
101
  readonly role: "menuitem";
@@ -126,7 +123,6 @@ declare class MenuItemState {
126
123
  onpointerup(e: BitsPointerEvent): void;
127
124
  onpointerdown(_: BitsPointerEvent): void;
128
125
  props: {
129
- readonly [x: string]: string | -1 | ((e: BitsPointerEvent) => void) | undefined;
130
126
  readonly id: string;
131
127
  readonly tabindex: -1;
132
128
  readonly role: "menuitem";
@@ -158,7 +154,6 @@ declare class MenuSubTriggerState {
158
154
  onkeydown(e: BitsKeyboardEvent): void;
159
155
  onclick(e: BitsMouseEvent): void;
160
156
  props: {
161
- readonly [x: string]: string | -1 | ((e: BitsPointerEvent) => void) | undefined;
162
157
  readonly id: string;
163
158
  readonly tabindex: -1;
164
159
  readonly role: "menuitem";
@@ -170,7 +165,6 @@ declare class MenuSubTriggerState {
170
165
  readonly onfocus: (e: BitsFocusEvent) => void;
171
166
  readonly onblur: (e: BitsFocusEvent) => void;
172
167
  } & {
173
- [x: string]: string | ((e: BitsPointerEvent) => void) | ((e: BitsKeyboardEvent) => void) | undefined;
174
168
  "aria-haspopup": string;
175
169
  "aria-expanded": "true" | "false";
176
170
  "data-state": "open" | "closed";
@@ -200,7 +194,6 @@ declare class MenuCheckboxItemState {
200
194
  indeterminate: boolean;
201
195
  };
202
196
  props: {
203
- readonly [x: string]: string | -1 | ((e: BitsPointerEvent) => void) | undefined;
204
197
  readonly role: "menuitemcheckbox";
205
198
  readonly "aria-checked": "true" | "false" | "mixed";
206
199
  readonly "data-state": "checked" | "indeterminate" | "unchecked";
@@ -227,7 +220,6 @@ declare class MenuGroupState {
227
220
  groupHeadingId: string | undefined;
228
221
  constructor(opts: MenuGroupStateProps, root: MenuRootState);
229
222
  props: {
230
- readonly [x: string]: string | undefined;
231
223
  readonly id: string;
232
224
  readonly role: "group";
233
225
  readonly "aria-labelledby": string | undefined;
@@ -239,7 +231,6 @@ declare class MenuGroupHeadingState {
239
231
  readonly group: MenuGroupState | MenuRadioGroupState | MenuCheckboxGroupState;
240
232
  constructor(opts: MenuGroupHeadingStateProps, group: MenuGroupState | MenuRadioGroupState | MenuCheckboxGroupState);
241
233
  props: {
242
- readonly [x: string]: string;
243
234
  readonly id: string;
244
235
  readonly role: "group";
245
236
  };
@@ -250,7 +241,6 @@ declare class MenuSeparatorState {
250
241
  readonly root: MenuRootState;
251
242
  constructor(opts: MenuSeparatorStateProps, root: MenuRootState);
252
243
  props: {
253
- readonly [x: string]: string;
254
244
  readonly id: string;
255
245
  readonly role: "group";
256
246
  };
@@ -273,7 +263,6 @@ declare class MenuRadioGroupState {
273
263
  constructor(opts: MenuRadioGroupStateProps, content: MenuContentState);
274
264
  setValue(v: string): void;
275
265
  props: {
276
- readonly [x: string]: string | null;
277
266
  readonly id: string;
278
267
  readonly role: "group";
279
268
  readonly "aria-labelledby": string | null;
@@ -318,11 +307,10 @@ declare class DropdownMenuTriggerState {
318
307
  readonly opts: DropdownMenuTriggerStateProps;
319
308
  readonly parentMenu: MenuMenuState;
320
309
  constructor(opts: DropdownMenuTriggerStateProps, parentMenu: MenuMenuState);
321
- onpointerdown(e: BitsPointerEvent): void;
322
- onpointerup(e: BitsPointerEvent): void;
323
- onkeydown(e: BitsKeyboardEvent): void;
310
+ onpointerdown: PointerEventHandler<HTMLElement>;
311
+ onpointerup: PointerEventHandler<HTMLElement>;
312
+ onkeydown: KeyboardEventHandler<HTMLElement>;
324
313
  props: {
325
- readonly [x: string]: string | boolean | ((e: BitsPointerEvent) => void) | ((e: BitsKeyboardEvent) => void) | undefined;
326
314
  readonly id: string;
327
315
  readonly disabled: boolean;
328
316
  readonly "aria-haspopup": "menu";
@@ -330,9 +318,9 @@ declare class DropdownMenuTriggerState {
330
318
  readonly "aria-controls": string | undefined;
331
319
  readonly "data-disabled": "" | undefined;
332
320
  readonly "data-state": "open" | "closed";
333
- readonly onpointerdown: (e: BitsPointerEvent) => void;
334
- readonly onpointerup: (e: BitsPointerEvent) => void;
335
- readonly onkeydown: (e: BitsKeyboardEvent) => void;
321
+ readonly onpointerdown: PointerEventHandler<HTMLElement>;
322
+ readonly onpointerup: PointerEventHandler<HTMLElement>;
323
+ readonly onkeydown: KeyboardEventHandler<HTMLElement>;
336
324
  };
337
325
  }
338
326
  type ContextMenuTriggerStateProps = WithRefProps & ReadableBoxedValues<{
@@ -379,7 +367,6 @@ declare class MenuCheckboxGroupState {
379
367
  addValue(checkboxValue: string | undefined): void;
380
368
  removeValue(checkboxValue: string | undefined): void;
381
369
  props: {
382
- readonly [x: string]: string | null;
383
370
  readonly id: string;
384
371
  readonly role: "group";
385
372
  readonly "aria-labelledby": string | null;
@@ -1,4 +1,4 @@
1
- import { afterTick, box, mergeProps, onDestroyEffect, useRefById } from "svelte-toolbelt";
1
+ import { afterTick, box, mergeProps, onDestroyEffect, attachRef } from "svelte-toolbelt";
2
2
  import { Context, watch } from "runed";
3
3
  import { FIRST_LAST_KEYS, LAST_KEYS, SELECTION_KEYS, SUB_OPEN_KEYS, getCheckedState, isMouseEvent, } from "./utils.js";
4
4
  import { focusFirst } from "../../internal/focus.js";
@@ -13,6 +13,7 @@ import { useGraceArea } from "../../internal/use-grace-area.svelte.js";
13
13
  import { getTabbableFrom } from "../../internal/tabbable.js";
14
14
  import { FocusScopeContext } from "../utilities/focus-scope/use-focus-scope.svelte.js";
15
15
  import { isTabbable } from "tabbable";
16
+ import { untrack } from "svelte";
16
17
  export const CONTEXT_MENU_TRIGGER_ATTR = "data-context-menu-trigger";
17
18
  const MenuRootContext = new Context("Menu.Root");
18
19
  const MenuMenuContext = new Context("Menu.Root | Menu.Sub");
@@ -83,15 +84,6 @@ class MenuContentState {
83
84
  this.onblur = this.onblur.bind(this);
84
85
  this.onfocus = this.onfocus.bind(this);
85
86
  this.handleInteractOutside = this.handleInteractOutside.bind(this);
86
- useRefById({
87
- ...opts,
88
- deps: () => this.parentMenu.opts.open.current,
89
- onRefChange: (node) => {
90
- if (this.parentMenu.contentNode !== node) {
91
- this.parentMenu.contentNode = node;
92
- }
93
- },
94
- });
95
87
  useGraceArea({
96
88
  contentNode: () => this.parentMenu.contentNode,
97
89
  triggerNode: () => this.parentMenu.triggerNode,
@@ -106,7 +98,7 @@ class MenuContentState {
106
98
  });
107
99
  this.#handleTypeaheadSearch = useDOMTypeahead().handleTypeaheadSearch;
108
100
  this.rovingFocusGroup = useRovingFocus({
109
- rootNodeId: this.parentMenu.contentId,
101
+ rootNode: box.with(() => this.parentMenu.contentNode),
110
102
  candidateAttr: this.parentMenu.root.getAttr("item"),
111
103
  loop: this.opts.loop,
112
104
  orientation: box.with(() => "vertical"),
@@ -289,6 +281,13 @@ class MenuContentState {
289
281
  style: {
290
282
  pointerEvents: "auto",
291
283
  },
284
+ ...attachRef(this.opts.ref, (v) => {
285
+ untrack(() => {
286
+ if (this.parentMenu.contentNode !== v) {
287
+ this.parentMenu.contentNode = v;
288
+ }
289
+ });
290
+ }),
292
291
  }));
293
292
  popperProps = {
294
293
  onCloseAutoFocus: (e) => this.onCloseAutoFocus(e),
@@ -305,10 +304,6 @@ class MenuItemSharedState {
305
304
  this.onpointerleave = this.onpointerleave.bind(this);
306
305
  this.onfocus = this.onfocus.bind(this);
307
306
  this.onblur = this.onblur.bind(this);
308
- useRefById({
309
- ...opts,
310
- deps: () => this.content.mounted,
311
- });
312
307
  }
313
308
  onpointermove(e) {
314
309
  if (e.defaultPrevented)
@@ -362,6 +357,7 @@ class MenuItemSharedState {
362
357
  onpointerleave: this.onpointerleave,
363
358
  onfocus: this.onfocus,
364
359
  onblur: this.onblur,
360
+ ...attachRef(this.opts.ref),
365
361
  }));
366
362
  }
367
363
  class MenuItemState {
@@ -452,12 +448,6 @@ class MenuSubTriggerState {
452
448
  onDestroyEffect(() => {
453
449
  this.#clearOpenTimer();
454
450
  });
455
- useRefById({
456
- ...item.opts,
457
- onRefChange: (node) => {
458
- this.submenu.triggerNode = node;
459
- },
460
- });
461
451
  }
462
452
  #clearOpenTimer() {
463
453
  if (this.#openTimer === null)
@@ -530,6 +520,7 @@ class MenuSubTriggerState {
530
520
  onpointermove: this.onpointermove,
531
521
  onpointerleave: this.onpointerleave,
532
522
  onkeydown: this.onkeydown,
523
+ ...attachRef(this.opts.ref, (v) => (this.submenu.triggerNode = v)),
533
524
  }, this.item.props));
534
525
  }
535
526
  class MenuCheckboxItemState {
@@ -584,13 +575,13 @@ class MenuGroupState {
584
575
  constructor(opts, root) {
585
576
  this.opts = opts;
586
577
  this.root = root;
587
- useRefById(this.opts);
588
578
  }
589
579
  props = $derived.by(() => ({
590
580
  id: this.opts.id.current,
591
581
  role: "group",
592
582
  "aria-labelledby": this.groupHeadingId,
593
583
  [this.root.getAttr("group")]: "",
584
+ ...attachRef(this.opts.ref),
594
585
  }));
595
586
  }
596
587
  class MenuGroupHeadingState {
@@ -599,17 +590,12 @@ class MenuGroupHeadingState {
599
590
  constructor(opts, group) {
600
591
  this.opts = opts;
601
592
  this.group = group;
602
- useRefById({
603
- ...opts,
604
- onRefChange: (node) => {
605
- this.group.groupHeadingId = node?.id;
606
- },
607
- });
608
593
  }
609
594
  props = $derived.by(() => ({
610
595
  id: this.opts.id.current,
611
596
  role: "group",
612
597
  [this.group.root.getAttr("group-heading")]: "",
598
+ ...attachRef(this.opts.ref, (v) => (this.group.groupHeadingId = v?.id)),
613
599
  }));
614
600
  }
615
601
  class MenuSeparatorState {
@@ -618,12 +604,12 @@ class MenuSeparatorState {
618
604
  constructor(opts, root) {
619
605
  this.opts = opts;
620
606
  this.root = root;
621
- useRefById(opts);
622
607
  }
623
608
  props = $derived.by(() => ({
624
609
  id: this.opts.id.current,
625
610
  role: "group",
626
611
  [this.root.getAttr("separator")]: "",
612
+ ...attachRef(this.opts.ref),
627
613
  }));
628
614
  }
629
615
  class MenuArrowState {
@@ -644,7 +630,6 @@ class MenuRadioGroupState {
644
630
  this.opts = opts;
645
631
  this.content = content;
646
632
  this.root = content.parentMenu.root;
647
- useRefById(opts);
648
633
  }
649
634
  setValue(v) {
650
635
  this.opts.value.current = v;
@@ -654,6 +639,7 @@ class MenuRadioGroupState {
654
639
  [this.root.getAttr("radio-group")]: "",
655
640
  role: "group",
656
641
  "aria-labelledby": this.groupHeadingId,
642
+ ...attachRef(this.opts.ref),
657
643
  }));
658
644
  }
659
645
  class MenuRadioItemState {
@@ -665,7 +651,6 @@ class MenuRadioItemState {
665
651
  this.opts = opts;
666
652
  this.item = item;
667
653
  this.group = group;
668
- useRefById(opts);
669
654
  }
670
655
  selectValue() {
671
656
  this.group.setValue(this.opts.value.current);
@@ -676,6 +661,7 @@ class MenuRadioItemState {
676
661
  role: "menuitemradio",
677
662
  "aria-checked": getAriaChecked(this.isChecked, false),
678
663
  "data-state": getCheckedState(this.isChecked),
664
+ ...attachRef(this.opts.ref),
679
665
  }));
680
666
  }
681
667
  class DropdownMenuTriggerState {
@@ -684,17 +670,8 @@ class DropdownMenuTriggerState {
684
670
  constructor(opts, parentMenu) {
685
671
  this.opts = opts;
686
672
  this.parentMenu = parentMenu;
687
- this.onpointerdown = this.onpointerdown.bind(this);
688
- this.onpointerup = this.onpointerup.bind(this);
689
- this.onkeydown = this.onkeydown.bind(this);
690
- useRefById({
691
- ...opts,
692
- onRefChange: (ref) => {
693
- this.parentMenu.triggerNode = ref;
694
- },
695
- });
696
673
  }
697
- onpointerdown(e) {
674
+ onpointerdown = (e) => {
698
675
  if (this.opts.disabled.current)
699
676
  return;
700
677
  if (e.pointerType === "touch")
@@ -706,16 +683,16 @@ class DropdownMenuTriggerState {
706
683
  if (!this.parentMenu.opts.open.current)
707
684
  e.preventDefault();
708
685
  }
709
- }
710
- onpointerup(e) {
686
+ };
687
+ onpointerup = (e) => {
711
688
  if (this.opts.disabled.current)
712
689
  return;
713
690
  if (e.pointerType === "touch") {
714
691
  e.preventDefault();
715
692
  this.parentMenu.toggleOpen();
716
693
  }
717
- }
718
- onkeydown(e) {
694
+ };
695
+ onkeydown = (e) => {
719
696
  if (this.opts.disabled.current)
720
697
  return;
721
698
  if (e.key === kbd.SPACE || e.key === kbd.ENTER) {
@@ -727,7 +704,7 @@ class DropdownMenuTriggerState {
727
704
  this.parentMenu.onOpen();
728
705
  e.preventDefault();
729
706
  }
730
- }
707
+ };
731
708
  #ariaControls = $derived.by(() => {
732
709
  if (this.parentMenu.opts.open.current && this.parentMenu.contentId.current)
733
710
  return this.parentMenu.contentId.current;
@@ -746,6 +723,7 @@ class DropdownMenuTriggerState {
746
723
  onpointerdown: this.onpointerdown,
747
724
  onpointerup: this.onpointerup,
748
725
  onkeydown: this.onkeydown,
726
+ ...attachRef(this.opts.ref, (v) => (this.parentMenu.triggerNode = v)),
749
727
  }));
750
728
  }
751
729
  class ContextMenuTriggerState {
@@ -764,13 +742,6 @@ class ContextMenuTriggerState {
764
742
  this.onpointermove = this.onpointermove.bind(this);
765
743
  this.onpointercancel = this.onpointercancel.bind(this);
766
744
  this.onpointerup = this.onpointerup.bind(this);
767
- useRefById({
768
- ...opts,
769
- onRefChange: (node) => {
770
- this.parentMenu.triggerNode = node;
771
- },
772
- deps: () => this.parentMenu.opts.open.current,
773
- });
774
745
  watch(() => this.#point, (point) => {
775
746
  this.virtualElement.current = {
776
747
  getBoundingClientRect: () => DOMRect.fromRect({ width: 0, height: 0, ...point }),
@@ -834,6 +805,7 @@ class ContextMenuTriggerState {
834
805
  onpointercancel: this.onpointercancel,
835
806
  onpointerup: this.onpointerup,
836
807
  oncontextmenu: this.oncontextmenu,
808
+ ...attachRef(this.opts.ref, (v) => (this.parentMenu.triggerNode = v)),
837
809
  }));
838
810
  }
839
811
  class MenuCheckboxGroupState {
@@ -845,7 +817,6 @@ class MenuCheckboxGroupState {
845
817
  this.opts = opts;
846
818
  this.content = content;
847
819
  this.root = content.parentMenu.root;
848
- useRefById(opts);
849
820
  }
850
821
  addValue(checkboxValue) {
851
822
  if (!checkboxValue)
@@ -871,6 +842,7 @@ class MenuCheckboxGroupState {
871
842
  [this.root.getAttr("checkbox-group")]: "",
872
843
  role: "group",
873
844
  "aria-labelledby": this.groupHeadingId,
845
+ ...attachRef(this.opts.ref),
874
846
  }));
875
847
  }
876
848
  export function useMenuRoot(props) {
@@ -2,14 +2,16 @@
2
2
  import { box, mergeProps } from "svelte-toolbelt";
3
3
  import type { MenubarContentStaticProps } from "../types.js";
4
4
  import { useMenubarContent } from "../menubar.svelte.js";
5
- import { useId } from "../../../internal/use-id.js";
5
+ import { createId } from "../../../internal/create-id.js";
6
6
  import MenuContentStatic from "../../menu/components/menu-content-static.svelte";
7
7
  import { noop } from "../../../internal/noop.js";
8
8
 
9
+ const uid = $props.id();
10
+
9
11
  let {
10
12
  ref = $bindable(null),
11
13
  interactOutsideBehavior = "close",
12
- id = useId(),
14
+ id = createId(uid),
13
15
  onInteractOutside = noop,
14
16
  onCloseAutoFocus = noop,
15
17
  onFocusOutside = noop,
@@ -3,13 +3,15 @@
3
3
  import type { MenubarContentProps } from "../types.js";
4
4
  import { useMenubarContent } from "../menubar.svelte.js";
5
5
  import MenuContent from "../../menu/components/menu-content.svelte";
6
- import { useId } from "../../../internal/use-id.js";
6
+ import { createId } from "../../../internal/create-id.js";
7
7
  import { noop } from "../../../internal/noop.js";
8
8
 
9
+ const uid = $props.id();
10
+
9
11
  let {
10
12
  ref = $bindable(null),
11
13
  interactOutsideBehavior = "close",
12
- id = useId(),
14
+ id = createId(uid),
13
15
  onInteractOutside = noop,
14
16
  onFocusOutside = noop,
15
17
  onCloseAutoFocus = noop,