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,11 +2,13 @@
2
2
  import { box, mergeProps } from "svelte-toolbelt";
3
3
  import { useSelectTrigger } from "../select.svelte.js";
4
4
  import type { SelectTriggerProps } from "../types.js";
5
- import { useId } from "../../../internal/use-id.js";
5
+ import { createId } from "../../../internal/create-id.js";
6
6
  import { FloatingLayer } from "../../utilities/floating-layer/index.js";
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,
@@ -25,7 +27,7 @@
25
27
  const mergedProps = $derived(mergeProps(restProps, triggerState.props, { type }));
26
28
  </script>
27
29
 
28
- <FloatingLayer.Anchor {id}>
30
+ <FloatingLayer.Anchor {id} ref={triggerState.opts.ref}>
29
31
  {#if child}
30
32
  {@render child({ props: mergedProps })}
31
33
  {:else}
@@ -2,10 +2,12 @@
2
2
  import { box, mergeProps } from "svelte-toolbelt";
3
3
  import type { SelectViewportProps } from "../types.js";
4
4
  import { useSelectViewport } from "../select.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
- id = useId(),
10
+ id = createId(uid),
9
11
  ref = $bindable(null),
10
12
  children,
11
13
  child,
@@ -72,7 +72,7 @@
72
72
 
73
73
  {#if Array.isArray(rootState.opts.value.current)}
74
74
  {#if rootState.opts.value.current.length}
75
- {#each rootState.opts.value.current as item}
75
+ {#each rootState.opts.value.current as item (item)}
76
76
  <SelectHiddenInput value={item} />
77
77
  {/each}
78
78
  {/if}
@@ -88,7 +88,6 @@ declare class SelectInputState {
88
88
  onkeydown(e: BitsKeyboardEvent): void;
89
89
  oninput(e: BitsEvent<Event, HTMLInputElement>): void;
90
90
  props: {
91
- readonly [x: string]: string | true | ((e: BitsKeyboardEvent) => void) | ((e: BitsEvent<Event, HTMLInputElement>) => void) | undefined;
92
91
  readonly id: string;
93
92
  readonly role: "combobox";
94
93
  readonly disabled: true | undefined;
@@ -113,7 +112,6 @@ declare class SelectComboTriggerState {
113
112
  */
114
113
  onpointerdown(e: BitsPointerEvent): void;
115
114
  props: {
116
- readonly [x: string]: string | true | ((e: BitsKeyboardEvent) => void) | ((e: BitsPointerEvent) => void) | undefined;
117
115
  readonly id: string;
118
116
  readonly disabled: true | undefined;
119
117
  readonly "aria-haspopup": "listbox";
@@ -134,7 +132,6 @@ declare class SelectTriggerState {
134
132
  onpointerdown(e: BitsPointerEvent): void;
135
133
  onpointerup(e: BitsPointerEvent): void;
136
134
  props: {
137
- readonly [x: string]: string | true | ((e: BitsKeyboardEvent) => void) | ((e: BitsPointerEvent) => void) | undefined;
138
135
  readonly id: string;
139
136
  readonly disabled: true | undefined;
140
137
  readonly "aria-haspopup": "listbox";
@@ -169,13 +166,6 @@ declare class SelectContentState {
169
166
  open: boolean;
170
167
  };
171
168
  props: {
172
- readonly [x: string]: string | ((_: BitsPointerEvent) => void) | {
173
- readonly display: "flex";
174
- readonly flexDirection: "column";
175
- readonly outline: "none";
176
- readonly boxSizing: "border-box";
177
- readonly pointerEvents: "auto";
178
- } | undefined;
179
169
  readonly id: string;
180
170
  readonly role: "listbox";
181
171
  readonly "aria-multiselectable": "true" | undefined;
@@ -228,7 +218,6 @@ declare class SelectItemState {
228
218
  onpointerup(e: BitsPointerEvent): void;
229
219
  onpointermove(e: BitsPointerEvent): void;
230
220
  props: {
231
- readonly [x: string]: string | ((e: BitsPointerEvent) => void) | undefined;
232
221
  readonly id: string;
233
222
  readonly role: "option";
234
223
  readonly "aria-selected": "true" | undefined;
@@ -249,7 +238,6 @@ declare class SelectGroupState {
249
238
  labelNode: HTMLElement | null;
250
239
  constructor(opts: SelectGroupStateProps, root: SelectBaseRootState);
251
240
  props: {
252
- readonly [x: string]: string | undefined;
253
241
  readonly id: string;
254
242
  readonly role: "group";
255
243
  readonly "aria-labelledby": string | undefined;
@@ -261,7 +249,6 @@ declare class SelectGroupHeadingState {
261
249
  readonly group: SelectGroupState;
262
250
  constructor(opts: SelectGroupHeadingStateProps, group: SelectGroupState);
263
251
  props: {
264
- readonly [x: string]: string;
265
252
  readonly id: string;
266
253
  };
267
254
  }
@@ -290,11 +277,6 @@ declare class SelectViewportState {
290
277
  prevScrollTop: number;
291
278
  constructor(opts: SelectViewportStateProps, content: SelectContentState);
292
279
  props: {
293
- readonly [x: string]: string | {
294
- readonly position: "relative";
295
- readonly flex: 1;
296
- readonly overflow: "auto";
297
- };
298
280
  readonly id: string;
299
281
  readonly role: "presentation";
300
282
  readonly style: {
@@ -1,5 +1,5 @@
1
1
  import { Context, Previous, watch } from "runed";
2
- import { afterSleep, afterTick, onDestroyEffect, useRefById } from "svelte-toolbelt";
2
+ import { afterSleep, afterTick, onDestroyEffect, attachRef } from "svelte-toolbelt";
3
3
  import { on } from "svelte/events";
4
4
  import { backward, forward, next, prev } from "../../internal/arrays.js";
5
5
  import { getAriaExpanded, getAriaHidden, getDataDisabled, getDataOpenClosed, getDisabled, getRequired, } from "../../internal/attrs.js";
@@ -210,12 +210,6 @@ class SelectInputState {
210
210
  constructor(opts, root) {
211
211
  this.opts = opts;
212
212
  this.root = root;
213
- useRefById({
214
- ...opts,
215
- onRefChange: (node) => {
216
- this.root.inputNode = node;
217
- },
218
- });
219
213
  this.onkeydown = this.onkeydown.bind(this);
220
214
  this.oninput = this.oninput.bind(this);
221
215
  watch([() => this.root.opts.value.current, () => this.opts.clearOnDeselect.current], ([value, clearOnDeselect], [prevValue]) => {
@@ -340,6 +334,7 @@ class SelectInputState {
340
334
  onkeydown: this.onkeydown,
341
335
  oninput: this.oninput,
342
336
  [this.root.bitsAttrs.input]: "",
337
+ ...attachRef(this.opts.ref, (v) => (this.root.inputNode = v)),
343
338
  }));
344
339
  }
345
340
  class SelectComboTriggerState {
@@ -348,7 +343,6 @@ class SelectComboTriggerState {
348
343
  constructor(opts, root) {
349
344
  this.opts = opts;
350
345
  this.root = root;
351
- useRefById(opts);
352
346
  this.onkeydown = this.onkeydown.bind(this);
353
347
  this.onpointerdown = this.onpointerdown.bind(this);
354
348
  }
@@ -383,6 +377,7 @@ class SelectComboTriggerState {
383
377
  [this.root.bitsAttrs.trigger]: "",
384
378
  onpointerdown: this.onpointerdown,
385
379
  onkeydown: this.onkeydown,
380
+ ...attachRef(this.opts.ref),
386
381
  }));
387
382
  }
388
383
  class SelectTriggerState {
@@ -393,12 +388,6 @@ class SelectTriggerState {
393
388
  constructor(opts, root) {
394
389
  this.opts = opts;
395
390
  this.root = root;
396
- useRefById({
397
- ...opts,
398
- onRefChange: (node) => {
399
- this.root.triggerNode = node;
400
- },
401
- });
402
391
  this.#domTypeahead = useDOMTypeahead({
403
392
  getCurrentItem: () => this.root.highlightedNode,
404
393
  onMatch: (node) => {
@@ -617,6 +606,7 @@ class SelectTriggerState {
617
606
  onkeydown: this.onkeydown,
618
607
  onclick: this.onclick,
619
608
  onpointerup: this.onpointerup,
609
+ ...attachRef(this.opts.ref, (v) => (this.root.triggerNode = v)),
620
610
  }));
621
611
  }
622
612
  class SelectContentState {
@@ -627,13 +617,6 @@ class SelectContentState {
627
617
  constructor(opts, root) {
628
618
  this.opts = opts;
629
619
  this.root = root;
630
- useRefById({
631
- ...opts,
632
- onRefChange: (node) => {
633
- this.root.contentNode = node;
634
- },
635
- deps: () => this.root.opts.open.current,
636
- });
637
620
  onDestroyEffect(() => {
638
621
  this.root.contentNode = null;
639
622
  this.isPositioned = false;
@@ -696,6 +679,7 @@ class SelectContentState {
696
679
  ...this.#styles,
697
680
  },
698
681
  onpointermove: this.onpointermove,
682
+ ...attachRef(this.opts.ref, (v) => (this.root.contentNode = v)),
699
683
  }));
700
684
  popperProps = {
701
685
  onInteractOutside: this.onInteractOutside,
@@ -723,10 +707,6 @@ class SelectItemState {
723
707
  constructor(opts, root) {
724
708
  this.opts = opts;
725
709
  this.root = root;
726
- useRefById({
727
- ...opts,
728
- deps: () => this.mounted,
729
- });
730
710
  watch([() => this.isHighlighted, () => this.prevHighlighted.current], () => {
731
711
  if (this.isHighlighted) {
732
712
  this.opts.onHighlight.current();
@@ -830,6 +810,7 @@ class SelectItemState {
830
810
  onpointermove: this.onpointermove,
831
811
  onpointerdown: this.onpointerdown,
832
812
  onpointerup: this.onpointerup,
813
+ ...attachRef(this.opts.ref),
833
814
  }));
834
815
  }
835
816
  class SelectGroupState {
@@ -839,13 +820,13 @@ class SelectGroupState {
839
820
  constructor(opts, root) {
840
821
  this.opts = opts;
841
822
  this.root = root;
842
- useRefById(opts);
843
823
  }
844
824
  props = $derived.by(() => ({
845
825
  id: this.opts.id.current,
846
826
  role: "group",
847
827
  [this.root.bitsAttrs.group]: "",
848
828
  "aria-labelledby": this.labelNode?.id ?? undefined,
829
+ ...attachRef(this.opts.ref),
849
830
  }));
850
831
  }
851
832
  class SelectGroupHeadingState {
@@ -854,16 +835,11 @@ class SelectGroupHeadingState {
854
835
  constructor(opts, group) {
855
836
  this.opts = opts;
856
837
  this.group = group;
857
- useRefById({
858
- ...opts,
859
- onRefChange: (node) => {
860
- group.labelNode = node;
861
- },
862
- });
863
838
  }
864
839
  props = $derived.by(() => ({
865
840
  id: this.opts.id.current,
866
841
  [this.group.root.bitsAttrs["group-label"]]: "",
842
+ ...attachRef(this.opts.ref, (v) => (this.group.labelNode = v)),
867
843
  }));
868
844
  }
869
845
  class SelectHiddenInputState {
@@ -901,13 +877,6 @@ class SelectViewportState {
901
877
  this.opts = opts;
902
878
  this.content = content;
903
879
  this.root = content.root;
904
- useRefById({
905
- ...opts,
906
- onRefChange: (node) => {
907
- this.content.viewportNode = node;
908
- },
909
- deps: () => this.root.opts.open.current,
910
- });
911
880
  }
912
881
  props = $derived.by(() => ({
913
882
  id: this.opts.id.current,
@@ -921,6 +890,7 @@ class SelectViewportState {
921
890
  flex: 1,
922
891
  overflow: "auto",
923
892
  },
893
+ ...attachRef(this.opts.ref, (v) => (this.content.viewportNode = v)),
924
894
  }));
925
895
  }
926
896
  class SelectScrollButtonImplState {
@@ -936,10 +906,6 @@ class SelectScrollButtonImplState {
936
906
  this.opts = opts;
937
907
  this.content = content;
938
908
  this.root = content.root;
939
- useRefById({
940
- ...opts,
941
- deps: () => this.mounted,
942
- });
943
909
  watch([() => this.mounted], () => {
944
910
  if (!this.mounted) {
945
911
  this.isUserScrolling = false;
@@ -994,6 +960,7 @@ class SelectScrollButtonImplState {
994
960
  onpointerdown: this.onpointerdown,
995
961
  onpointermove: this.onpointermove,
996
962
  onpointerleave: this.onpointerleave,
963
+ ...attachRef(this.opts.ref),
997
964
  }));
998
965
  }
999
966
  class SelectScrollDownButtonState {
@@ -2,10 +2,12 @@
2
2
  import { box, mergeProps } from "svelte-toolbelt";
3
3
  import { useSeparatorRoot } from "../separator.svelte.js";
4
4
  import type { SeparatorRootProps } from "../types.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
- id = useId(),
10
+ id = createId(uid),
9
11
  ref = $bindable(null),
10
12
  child,
11
13
  children,
@@ -1,11 +1,10 @@
1
- import { useRefById } from "svelte-toolbelt";
1
+ import { attachRef } from "svelte-toolbelt";
2
2
  import { getAriaHidden, getAriaOrientation, getDataOrientation } from "../../internal/attrs.js";
3
3
  const SEPARATOR_ROOT_ATTR = "data-separator-root";
4
4
  class SeparatorRootState {
5
5
  opts;
6
6
  constructor(opts) {
7
7
  this.opts = opts;
8
- useRefById(opts);
9
8
  }
10
9
  props = $derived.by(() => ({
11
10
  id: this.opts.id.current,
@@ -14,6 +13,7 @@ class SeparatorRootState {
14
13
  "aria-hidden": getAriaHidden(this.opts.decorative.current),
15
14
  "data-orientation": getDataOrientation(this.opts.orientation.current),
16
15
  [SEPARATOR_ROOT_ATTR]: "",
16
+ ...attachRef(this.opts.ref),
17
17
  }));
18
18
  }
19
19
  export function useSeparatorRoot(props) {
@@ -2,13 +2,15 @@
2
2
  import { box, mergeProps } from "svelte-toolbelt";
3
3
  import type { SliderRangeProps } from "../types.js";
4
4
  import { useSliderRange } from "../slider.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
  }: SliderRangeProps = $props();
14
16
 
@@ -0,0 +1,50 @@
1
+ <script lang="ts">
2
+ import { box, mergeProps } from "svelte-toolbelt";
3
+ import type { SliderThumbLabelProps } from "../types.js";
4
+ import { SliderRootContext, useSliderThumbLabel } from "../slider.svelte.js";
5
+ import { createId } from "../../../internal/create-id.js";
6
+
7
+ const uid = $props.id();
8
+
9
+ let {
10
+ children,
11
+ child,
12
+ ref = $bindable(null),
13
+ id = createId(uid),
14
+ index,
15
+ position: positionProp,
16
+ ...restProps
17
+ }: SliderThumbLabelProps = $props();
18
+
19
+ const root = SliderRootContext.get();
20
+
21
+ const position = $derived.by(() => {
22
+ if (positionProp !== undefined) return positionProp;
23
+ switch (root.direction) {
24
+ case "lr":
25
+ case "rl":
26
+ return "top";
27
+ case "tb":
28
+ case "bt":
29
+ return "left";
30
+ }
31
+ });
32
+
33
+ const tickLabelState = useSliderThumbLabel({
34
+ id: box.with(() => id),
35
+ ref: box.with(
36
+ () => ref,
37
+ (v) => (ref = v)
38
+ ),
39
+ index: box.with(() => index),
40
+ position: box.with(() => position),
41
+ });
42
+
43
+ const mergedProps = $derived(mergeProps(restProps, tickLabelState.props));
44
+ </script>
45
+
46
+ {#if child}
47
+ {@render child({ props: mergedProps })}
48
+ {:else}
49
+ <span {...mergedProps}>{@render children?.()}</span>
50
+ {/if}
@@ -0,0 +1,4 @@
1
+ import type { SliderThumbLabelProps } from "../types.js";
2
+ declare const SliderThumbLabel: import("svelte").Component<SliderThumbLabelProps, {}, "ref">;
3
+ type SliderThumbLabel = ReturnType<typeof SliderThumbLabel>;
4
+ export default SliderThumbLabel;
@@ -2,13 +2,15 @@
2
2
  import { box, mergeProps } from "svelte-toolbelt";
3
3
  import type { SliderThumbProps } from "../types.js";
4
4
  import { useSliderThumb } from "../slider.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
  index,
13
15
  disabled = false,
14
16
  ...restProps
@@ -0,0 +1,50 @@
1
+ <script lang="ts">
2
+ import { box, mergeProps } from "svelte-toolbelt";
3
+ import type { SliderTickLabelProps } from "../types.js";
4
+ import { SliderRootContext, useSliderTickLabel } from "../slider.svelte.js";
5
+ import { createId } from "../../../internal/create-id.js";
6
+
7
+ const uid = $props.id();
8
+
9
+ let {
10
+ children,
11
+ child,
12
+ ref = $bindable(null),
13
+ id = createId(uid),
14
+ index,
15
+ position: positionProp,
16
+ ...restProps
17
+ }: SliderTickLabelProps = $props();
18
+
19
+ const root = SliderRootContext.get();
20
+
21
+ const position = $derived.by(() => {
22
+ if (positionProp !== undefined) return positionProp;
23
+ switch (root.direction) {
24
+ case "lr":
25
+ case "rl":
26
+ return "top";
27
+ case "tb":
28
+ case "bt":
29
+ return "left";
30
+ }
31
+ });
32
+
33
+ const tickLabelState = useSliderTickLabel({
34
+ id: box.with(() => id),
35
+ ref: box.with(
36
+ () => ref,
37
+ (v) => (ref = v)
38
+ ),
39
+ index: box.with(() => index),
40
+ position: box.with(() => position),
41
+ });
42
+
43
+ const mergedProps = $derived(mergeProps(restProps, tickLabelState.props));
44
+ </script>
45
+
46
+ {#if child}
47
+ {@render child({ props: mergedProps })}
48
+ {:else}
49
+ <span {...mergedProps}>{@render children?.()}</span>
50
+ {/if}
@@ -0,0 +1,4 @@
1
+ import type { SliderTickLabelProps } from "../types.js";
2
+ declare const SliderTickLabel: import("svelte").Component<SliderTickLabelProps, {}, "ref">;
3
+ type SliderTickLabel = ReturnType<typeof SliderTickLabel>;
4
+ export default SliderTickLabel;
@@ -2,13 +2,15 @@
2
2
  import { box, mergeProps } from "svelte-toolbelt";
3
3
  import type { SliderTickProps } from "../types.js";
4
4
  import { useSliderTick } from "../slider.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
  index,
13
15
  ...restProps
14
16
  }: SliderTickProps = $props();
@@ -2,33 +2,51 @@
2
2
  import { box, mergeProps, type WritableBox } from "svelte-toolbelt";
3
3
  import type { SliderRootProps } from "../types.js";
4
4
  import { useSliderRoot } from "../slider.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
  import { watch } from "runed";
8
8
 
9
+ const uid = $props.id();
10
+
9
11
  let {
10
12
  children,
11
13
  child,
12
- id = useId(),
14
+ id = createId(uid),
13
15
  ref = $bindable(null),
14
16
  value = $bindable(),
15
17
  type,
16
18
  onValueChange = noop,
17
19
  onValueCommit = noop,
18
20
  disabled = false,
19
- min = 0,
20
- max = 100,
21
+ min: minProp,
22
+ max: maxProp,
21
23
  step = 1,
22
24
  dir = "ltr",
23
25
  autoSort = true,
24
26
  orientation = "horizontal",
25
27
  thumbPositioning = "contain",
28
+ trackPadding,
26
29
  ...restProps
27
30
  }: SliderRootProps = $props();
28
31
 
32
+ const min = $derived.by(() => {
33
+ if (minProp !== undefined) return minProp;
34
+ if (Array.isArray(step)) return Math.min(...step);
35
+ return 0;
36
+ });
37
+
38
+ const max = $derived.by(() => {
39
+ if (maxProp !== undefined) return maxProp;
40
+ if (Array.isArray(step)) return Math.max(...step);
41
+ return 100;
42
+ });
43
+
29
44
  function handleDefaultValue() {
30
45
  if (value !== undefined) return;
31
- value = type === "single" ? 0 : [];
46
+ if (type === "single") {
47
+ return min;
48
+ }
49
+ return [];
32
50
  }
33
51
 
34
52
  // SSR
@@ -66,6 +84,7 @@
66
84
  orientation: box.with(() => orientation),
67
85
  thumbPositioning: box.with(() => thumbPositioning),
68
86
  type,
87
+ trackPadding: box.with(() => trackPadding),
69
88
  });
70
89
 
71
90
  const mergedProps = $derived(mergeProps(restProps, rootState.props));
@@ -2,4 +2,6 @@ export { default as Root } from "./components/slider.svelte";
2
2
  export { default as Range } from "./components/slider-range.svelte";
3
3
  export { default as Thumb } from "./components/slider-thumb.svelte";
4
4
  export { default as Tick } from "./components/slider-tick.svelte";
5
- export type { SliderRootProps as RootProps, SliderRangeProps as RangeProps, SliderThumbProps as ThumbProps, SliderTickProps as TickProps, } from "./types.js";
5
+ export { default as TickLabel } from "./components/slider-tick-label.svelte";
6
+ export { default as ThumbLabel } from "./components/slider-thumb-label.svelte";
7
+ export type { SliderRootProps as RootProps, SliderRangeProps as RangeProps, SliderThumbProps as ThumbProps, SliderTickProps as TickProps, SliderTickLabelProps as TickLabelProps, SliderThumbLabelProps as ThumbLabelProps, } from "./types.js";
@@ -2,3 +2,5 @@ export { default as Root } from "./components/slider.svelte";
2
2
  export { default as Range } from "./components/slider-range.svelte";
3
3
  export { default as Thumb } from "./components/slider-thumb.svelte";
4
4
  export { default as Tick } from "./components/slider-tick.svelte";
5
+ export { default as TickLabel } from "./components/slider-tick-label.svelte";
6
+ export { default as ThumbLabel } from "./components/slider-thumb-label.svelte";
@@ -2,3 +2,17 @@ import type { StyleProperties } from "../../shared/index.js";
2
2
  export declare function getRangeStyles(direction: "lr" | "rl" | "tb" | "bt", min: number, max: number): StyleProperties;
3
3
  export declare function getThumbStyles(direction: "lr" | "rl" | "tb" | "bt", thumbPos: number): StyleProperties;
4
4
  export declare function getTickStyles(direction: "lr" | "rl" | "tb" | "bt", tickPosition: number, offsetPercentage: number): StyleProperties;
5
+ export declare function getTickLabelStyles(direction: "lr" | "rl" | "tb" | "bt", tickPosition: number, labelPosition?: "top" | "bottom" | "left" | "right"): StyleProperties;
6
+ export declare function getThumbLabelStyles(direction: "lr" | "rl" | "tb" | "bt", thumbPosition: number, labelPosition?: "top" | "bottom" | "left" | "right"): StyleProperties;
7
+ /**
8
+ * Normalizes step to always be a sorted array of valid values within min/max range
9
+ */
10
+ export declare function normalizeSteps(step: number | number[], min: number, max: number): number[];
11
+ /**
12
+ * Snaps a value to the nearest step in a custom steps array
13
+ */
14
+ export declare function snapValueToCustomSteps(value: number, steps: number[]): number;
15
+ /**
16
+ * Gets the next/previous step value for keyboard navigation
17
+ */
18
+ export declare function getAdjacentStepValue(currentValue: number, steps: number[], direction: "next" | "prev"): number;