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
@@ -64,3 +64,125 @@ export function getTickStyles(direction, tickPosition, offsetPercentage) {
64
64
  }
65
65
  return style;
66
66
  }
67
+ export function getTickLabelStyles(direction, tickPosition, labelPosition = "top") {
68
+ const style = {
69
+ position: "absolute",
70
+ };
71
+ if (direction === "lr" || direction === "rl") {
72
+ // Horizontal slider
73
+ style.left = direction === "lr" ? `${tickPosition}%` : undefined;
74
+ style.right = direction === "rl" ? `${tickPosition}%` : undefined;
75
+ style.translate = "-50% 0";
76
+ if (labelPosition === "top") {
77
+ style.bottom = "100%";
78
+ }
79
+ else if (labelPosition === "bottom") {
80
+ style.top = "100%";
81
+ }
82
+ }
83
+ else {
84
+ // Vertical slider - use same positioning as ticks
85
+ if (direction === "tb") {
86
+ style.top = `${tickPosition}%`;
87
+ }
88
+ else {
89
+ style.bottom = `${tickPosition}%`;
90
+ }
91
+ style.translate = "0 50%";
92
+ if (labelPosition === "left") {
93
+ style.right = "100%";
94
+ }
95
+ else if (labelPosition === "right") {
96
+ style.left = "100%";
97
+ }
98
+ }
99
+ return style;
100
+ }
101
+ export function getThumbLabelStyles(direction, thumbPosition, labelPosition = "top") {
102
+ const style = {
103
+ position: "absolute",
104
+ };
105
+ if (direction === "lr" || direction === "rl") {
106
+ // Horizontal slider
107
+ style.left = direction === "lr" ? `${thumbPosition}%` : undefined;
108
+ style.right = direction === "rl" ? `${thumbPosition}%` : undefined;
109
+ style.translate = "-50% 0";
110
+ if (labelPosition === "top") {
111
+ style.bottom = "100%";
112
+ }
113
+ else if (labelPosition === "bottom") {
114
+ style.top = "100%";
115
+ }
116
+ }
117
+ else {
118
+ // Vertical slider
119
+ if (direction === "tb") {
120
+ style.top = `${thumbPosition}%`;
121
+ }
122
+ else {
123
+ style.bottom = `${thumbPosition}%`;
124
+ }
125
+ style.translate = "0 -50%";
126
+ if (labelPosition === "left") {
127
+ style.right = "100%";
128
+ }
129
+ else if (labelPosition === "right") {
130
+ style.left = "100%";
131
+ }
132
+ }
133
+ return style;
134
+ }
135
+ /**
136
+ * Normalizes step to always be a sorted array of valid values within min/max range
137
+ */
138
+ export function normalizeSteps(step, min, max) {
139
+ if (typeof step === "number") {
140
+ // generate regular steps - match original behavior exactly
141
+ const difference = max - min;
142
+ let count = Math.ceil(difference / step);
143
+ if (difference % step === 0) {
144
+ count++;
145
+ }
146
+ const steps = [];
147
+ for (let i = 0; i < count; i++) {
148
+ const value = min + i * step;
149
+ steps.push(value);
150
+ }
151
+ return steps;
152
+ }
153
+ return [...new Set(step)].filter((value) => value >= min && value <= max).sort((a, b) => a - b);
154
+ }
155
+ /**
156
+ * Snaps a value to the nearest step in a custom steps array
157
+ */
158
+ export function snapValueToCustomSteps(value, steps) {
159
+ if (steps.length === 0)
160
+ return value;
161
+ // Find the closest step
162
+ let closest = steps[0];
163
+ let minDistance = Math.abs(value - closest);
164
+ for (const step of steps) {
165
+ const distance = Math.abs(value - step);
166
+ if (distance < minDistance) {
167
+ minDistance = distance;
168
+ closest = step;
169
+ }
170
+ }
171
+ return closest;
172
+ }
173
+ /**
174
+ * Gets the next/previous step value for keyboard navigation
175
+ */
176
+ export function getAdjacentStepValue(currentValue, steps, direction) {
177
+ const currentIndex = steps.indexOf(currentValue);
178
+ if (currentIndex === -1) {
179
+ // current value is not in steps, snap to nearest
180
+ return snapValueToCustomSteps(currentValue, steps);
181
+ }
182
+ if (direction === "next") {
183
+ return currentIndex < steps.length - 1 ? steps[currentIndex + 1] : currentValue;
184
+ }
185
+ else {
186
+ return currentIndex > 0 ? steps[currentIndex - 1] : currentValue;
187
+ }
188
+ }
@@ -1,22 +1,26 @@
1
1
  import { type Box, type ReadableBox } from "svelte-toolbelt";
2
+ import { Context } from "runed";
2
3
  import type { ReadableBoxedValues, WritableBoxedValues } from "../../internal/box.svelte.js";
3
4
  import type { BitsKeyboardEvent, OnChangeFn, WithRefProps } from "../../internal/types.js";
4
5
  import type { Direction, Orientation, SliderThumbPositioning } from "../../shared/index.js";
6
+ import type { SliderLabelPosition } from "./types.js";
5
7
  type SliderBaseRootStateProps = WithRefProps<ReadableBoxedValues<{
6
8
  disabled: boolean;
7
9
  orientation: Orientation;
8
10
  min: number;
9
11
  max: number;
10
- step: number;
12
+ step: number | number[];
11
13
  dir: Direction;
12
14
  autoSort: boolean;
13
15
  thumbPositioning: SliderThumbPositioning;
16
+ trackPadding?: number;
14
17
  }>>;
15
18
  declare class SliderBaseRootState {
16
19
  #private;
17
20
  readonly opts: SliderBaseRootStateProps;
18
21
  isActive: boolean;
19
22
  direction: "rl" | "lr" | "tb" | "bt";
23
+ normalizedSteps: number[];
20
24
  constructor(opts: SliderBaseRootStateProps);
21
25
  isThumbActive(_index: number): boolean;
22
26
  getAllThumbs: () => HTMLElement[];
@@ -41,6 +45,7 @@ declare class SliderSingleRootState extends SliderBaseRootState {
41
45
  readonly opts: SliderSingleRootStateProps;
42
46
  isMulti: false;
43
47
  constructor(opts: SliderSingleRootStateProps);
48
+ isTickValueSelected: (tickValue: number) => boolean;
44
49
  applyPosition({ clientXY, start, end }: {
45
50
  clientXY: number;
46
51
  start: number;
@@ -58,7 +63,7 @@ declare class SliderSingleRootState extends SliderBaseRootState {
58
63
  readonly "aria-disabled": "true" | "false";
59
64
  readonly "aria-orientation": "horizontal" | "vertical";
60
65
  readonly "data-value": number;
61
- readonly tabindex: 0 | -1;
66
+ readonly "data-orientation": "horizontal" | "vertical";
62
67
  readonly style: import("../../shared/index.js").StyleProperties;
63
68
  readonly "data-slider-thumb": "";
64
69
  }[];
@@ -68,13 +73,30 @@ declare class SliderSingleRootState extends SliderBaseRootState {
68
73
  readonly "data-orientation": "horizontal" | "vertical";
69
74
  readonly "data-bounded": "" | undefined;
70
75
  readonly "data-value": number;
76
+ readonly "data-selected": "" | undefined;
71
77
  readonly style: import("../../shared/index.js").StyleProperties;
72
78
  readonly "data-slider-tick": "";
73
79
  }[];
74
80
  ticksRenderArr: number[];
81
+ tickItemsArr: {
82
+ value: number;
83
+ index: number;
84
+ }[];
85
+ thumbItemsArr: {
86
+ value: number;
87
+ index: number;
88
+ }[];
75
89
  snippetProps: {
76
90
  readonly ticks: number[];
77
91
  readonly thumbs: number[];
92
+ readonly tickItems: {
93
+ value: number;
94
+ index: number;
95
+ }[];
96
+ readonly thumbItems: {
97
+ value: number;
98
+ index: number;
99
+ }[];
78
100
  };
79
101
  }
80
102
  type SliderMultiRootStateProps = SliderBaseRootStateProps & ReadableBoxedValues<{
@@ -92,6 +114,7 @@ declare class SliderMultiRootState extends SliderBaseRootState {
92
114
  } | null;
93
115
  currentThumbIdx: number;
94
116
  constructor(opts: SliderMultiRootStateProps);
117
+ isTickValueSelected: (tickValue: number) => boolean;
95
118
  isThumbActive(index: number): boolean;
96
119
  applyPosition({ clientXY, activeThumbIdx, start, end, }: {
97
120
  clientXY: number;
@@ -112,7 +135,7 @@ declare class SliderMultiRootState extends SliderBaseRootState {
112
135
  readonly "aria-disabled": "true" | "false";
113
136
  readonly "aria-orientation": "horizontal" | "vertical";
114
137
  readonly "data-value": number | undefined;
115
- readonly tabindex: 0 | -1;
138
+ readonly "data-orientation": "horizontal" | "vertical";
116
139
  readonly style: import("../../shared/index.js").StyleProperties;
117
140
  readonly "data-slider-thumb": "";
118
141
  }[];
@@ -126,9 +149,25 @@ declare class SliderMultiRootState extends SliderBaseRootState {
126
149
  readonly "data-slider-tick": "";
127
150
  }[];
128
151
  ticksRenderArr: number[];
152
+ tickItemsArr: {
153
+ value: number;
154
+ index: number;
155
+ }[];
156
+ thumbItemsArr: {
157
+ value: number;
158
+ index: number;
159
+ }[];
129
160
  snippetProps: {
130
161
  readonly ticks: number[];
131
162
  readonly thumbs: number[];
163
+ readonly tickItems: {
164
+ value: number;
165
+ index: number;
166
+ }[];
167
+ readonly thumbItems: {
168
+ value: number;
169
+ index: number;
170
+ }[];
132
171
  };
133
172
  }
134
173
  type SliderRangeStateProps = WithRefProps;
@@ -1811,6 +1850,8 @@ declare class SliderThumbState {
1811
1850
  readonly id: string;
1812
1851
  readonly onkeydown: (e: BitsKeyboardEvent) => void;
1813
1852
  readonly "data-active": "" | undefined;
1853
+ readonly "data-disabled": "" | undefined;
1854
+ readonly tabindex: 0 | -1;
1814
1855
  readonly role: "slider";
1815
1856
  readonly "aria-valuemin": number;
1816
1857
  readonly "aria-valuemax": number;
@@ -1818,13 +1859,15 @@ declare class SliderThumbState {
1818
1859
  readonly "aria-disabled": "true" | "false";
1819
1860
  readonly "aria-orientation": "horizontal" | "vertical";
1820
1861
  readonly "data-value": number;
1821
- readonly tabindex: 0 | -1;
1862
+ readonly "data-orientation": "horizontal" | "vertical";
1822
1863
  readonly style: import("../../shared/index.js").StyleProperties;
1823
1864
  readonly "data-slider-thumb": "";
1824
1865
  } | {
1825
1866
  readonly id: string;
1826
1867
  readonly onkeydown: (e: BitsKeyboardEvent) => void;
1827
1868
  readonly "data-active": "" | undefined;
1869
+ readonly "data-disabled": "" | undefined;
1870
+ readonly tabindex: 0 | -1;
1828
1871
  readonly role: "slider";
1829
1872
  readonly "aria-valuemin": number;
1830
1873
  readonly "aria-valuemax": number;
@@ -1832,7 +1875,7 @@ declare class SliderThumbState {
1832
1875
  readonly "aria-disabled": "true" | "false";
1833
1876
  readonly "aria-orientation": "horizontal" | "vertical";
1834
1877
  readonly "data-value": number | undefined;
1835
- readonly tabindex: 0 | -1;
1878
+ readonly "data-orientation": "horizontal" | "vertical";
1836
1879
  readonly style: import("../../shared/index.js").StyleProperties;
1837
1880
  readonly "data-slider-thumb": "";
1838
1881
  };
@@ -1850,6 +1893,7 @@ declare class SliderTickState {
1850
1893
  readonly "data-orientation": "horizontal" | "vertical";
1851
1894
  readonly "data-bounded": "" | undefined;
1852
1895
  readonly "data-value": number;
1896
+ readonly "data-selected": "" | undefined;
1853
1897
  readonly style: import("../../shared/index.js").StyleProperties;
1854
1898
  readonly "data-slider-tick": "";
1855
1899
  } | {
@@ -1862,14 +1906,56 @@ declare class SliderTickState {
1862
1906
  readonly "data-slider-tick": "";
1863
1907
  };
1864
1908
  }
1909
+ type SliderTickLabelStateProps = WithRefProps & ReadableBoxedValues<{
1910
+ index: number;
1911
+ position?: SliderLabelPosition;
1912
+ }>;
1913
+ declare class SliderTickLabelState {
1914
+ readonly opts: SliderTickLabelStateProps;
1915
+ readonly root: SliderRootState;
1916
+ constructor(opts: SliderTickLabelStateProps, root: SliderRootState);
1917
+ props: {
1918
+ readonly id: string;
1919
+ readonly "data-orientation": "horizontal" | "vertical";
1920
+ readonly "data-disabled": "" | undefined;
1921
+ readonly "data-bounded": "" | undefined;
1922
+ readonly "data-value": number;
1923
+ readonly "data-selected": "" | undefined;
1924
+ readonly "data-position": SliderLabelPosition;
1925
+ readonly style: import("../../shared/index.js").StyleProperties;
1926
+ readonly "data-slider-tick-label": "";
1927
+ };
1928
+ }
1929
+ type SliderThumbLabelStateProps = WithRefProps & ReadableBoxedValues<{
1930
+ index: number;
1931
+ position?: SliderLabelPosition;
1932
+ }>;
1933
+ declare class SliderThumbLabelState {
1934
+ readonly opts: SliderThumbLabelStateProps;
1935
+ readonly root: SliderRootState;
1936
+ constructor(opts: SliderThumbLabelStateProps, root: SliderRootState);
1937
+ props: {
1938
+ readonly id: string;
1939
+ readonly "data-orientation": "horizontal" | "vertical";
1940
+ readonly "data-disabled": "" | undefined;
1941
+ readonly "data-value": number;
1942
+ readonly "data-active": "" | undefined;
1943
+ readonly "data-position": SliderLabelPosition;
1944
+ readonly style: import("../../shared/index.js").StyleProperties;
1945
+ readonly "data-slider-thumb-label": "";
1946
+ };
1947
+ }
1865
1948
  type SliderRootState = SliderSingleRootState | SliderMultiRootState;
1866
1949
  type InitSliderRootStateProps = {
1867
1950
  type: "single" | "multiple";
1868
1951
  value: Box<number> | Box<number[]>;
1869
1952
  onValueCommit: ReadableBox<OnChangeFn<number>> | ReadableBox<OnChangeFn<number[]>>;
1870
1953
  } & Omit<SliderBaseRootStateProps, "type">;
1954
+ export declare const SliderRootContext: Context<SliderRootState>;
1871
1955
  export declare function useSliderRoot(props: InitSliderRootStateProps): SliderRootState;
1872
1956
  export declare function useSliderRange(props: SliderRangeStateProps): SliderRangeState;
1873
1957
  export declare function useSliderThumb(props: SliderThumbStateProps): SliderThumbState;
1874
1958
  export declare function useSliderTick(props: SliderTickStateProps): SliderTickState;
1959
+ export declare function useSliderTickLabel(props: SliderTickLabelStateProps): SliderTickLabelState;
1960
+ export declare function useSliderThumbLabel(props: SliderThumbLabelStateProps): SliderThumbLabelState;
1875
1961
  export {};