bitboss-ui 2.1.113 → 2.1.115

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 (423) hide show
  1. package/dist/ai/BaseButton.md +448 -0
  2. package/dist/ai/BaseCheckbox.md +494 -0
  3. package/dist/ai/BaseCheckboxGroup.md +597 -0
  4. package/dist/ai/BaseColorInput.md +461 -0
  5. package/dist/ai/BaseDatePicker.md +739 -0
  6. package/dist/ai/BaseDatePickerInput.md +1517 -0
  7. package/dist/ai/BaseDialog.md +610 -0
  8. package/dist/ai/BaseInputContainer.md +570 -0
  9. package/dist/ai/BaseNumberInput.md +509 -0
  10. package/dist/ai/BaseRadio.md +405 -0
  11. package/dist/ai/BaseRadioGroup.md +535 -0
  12. package/dist/ai/BaseRating.md +489 -0
  13. package/dist/ai/BaseSelect.md +1720 -0
  14. package/dist/ai/BaseSlider.md +871 -0
  15. package/dist/ai/BaseSwitch.md +322 -0
  16. package/dist/ai/BaseSwitchGroup.md +298 -0
  17. package/dist/ai/BaseTag.md +624 -0
  18. package/dist/ai/BaseTextInput.md +392 -0
  19. package/dist/ai/BaseTextarea.md +398 -0
  20. package/dist/ai/BbAccordion.md +135 -0
  21. package/dist/ai/BbAlert.md +226 -0
  22. package/dist/ai/BbAvatar.md +200 -0
  23. package/dist/ai/BbBadge.md +185 -0
  24. package/dist/ai/BbBreadcrumbs.md +536 -0
  25. package/dist/ai/BbButton.md +687 -0
  26. package/dist/ai/BbCheckbox.md +280 -0
  27. package/dist/ai/BbCheckboxGroup.md +387 -0
  28. package/dist/ai/BbChip.md +148 -0
  29. package/dist/ai/BbCollapsible.md +119 -0
  30. package/dist/ai/BbColorInput.md +345 -0
  31. package/dist/ai/BbColorPalette.md +360 -0
  32. package/dist/ai/BbConfirm.md +160 -0
  33. package/dist/ai/BbDatePickerInput.md +414 -0
  34. package/dist/ai/BbDialog.md +135 -0
  35. package/dist/ai/BbDropdown.md +765 -0
  36. package/dist/ai/BbDropdownButton.md +629 -0
  37. package/dist/ai/BbDropzone.md +504 -0
  38. package/dist/ai/BbIcon.md +238 -0
  39. package/dist/ai/BbIntersection.md +121 -0
  40. package/dist/ai/BbNumberInput.md +372 -0
  41. package/dist/ai/BbOffCanvas.md +549 -0
  42. package/dist/ai/BbPagination.md +562 -0
  43. package/dist/ai/BbPopover.md +580 -0
  44. package/dist/ai/BbProgress.md +97 -0
  45. package/dist/ai/BbRadio.md +256 -0
  46. package/dist/ai/BbRadioGroup.md +373 -0
  47. package/dist/ai/BbRating.md +245 -0
  48. package/dist/ai/BbRatio.md +62 -0
  49. package/dist/ai/BbRows.md +307 -0
  50. package/dist/ai/BbSelect.md +562 -0
  51. package/dist/ai/BbSelectPopover.md +2010 -0
  52. package/dist/ai/BbSlider.md +274 -0
  53. package/dist/ai/BbSmoothHeight.md +167 -0
  54. package/dist/ai/BbSpinner.md +154 -0
  55. package/dist/ai/BbSwitch.md +151 -0
  56. package/dist/ai/BbSwitchGroup.md +237 -0
  57. package/dist/ai/BbTab.md +954 -0
  58. package/dist/ai/BbTable.md +1624 -0
  59. package/dist/ai/BbTag.md +315 -0
  60. package/dist/ai/BbTextInput.md +357 -0
  61. package/dist/ai/BbTextarea.md +277 -0
  62. package/dist/ai/BbToast.md +219 -0
  63. package/dist/ai/BbTooltip.md +353 -0
  64. package/dist/ai/BbTree.md +271 -0
  65. package/dist/ai/ChipsBox.md +211 -0
  66. package/dist/ai/ClearableButton.md +67 -0
  67. package/dist/ai/CommaBox.md +212 -0
  68. package/dist/ai/CommonInputInnerContainer.md +419 -0
  69. package/dist/ai/CommonInputOuterContainer.md +56 -0
  70. package/dist/ai/CommonPopover.md +446 -0
  71. package/dist/ai/ErrorIcon.md +61 -0
  72. package/dist/ai/FlatListBox.md +382 -0
  73. package/dist/ai/GroupedListBox.md +538 -0
  74. package/dist/ai/ListBox.md +234 -0
  75. package/dist/ai/OptionsContainer.md +257 -0
  76. package/dist/ai/index.md +124 -0
  77. package/dist/components/BaseButton/BaseButton.vue.d.ts +2 -163
  78. package/dist/components/BaseButton/types.d.ts +158 -0
  79. package/dist/components/BaseCheckbox/BaseCheckbox.vue.d.ts +4 -4
  80. package/dist/components/BaseCheckboxGroup/BaseCheckboxGroup.vue.d.ts +2 -2
  81. package/dist/components/BaseCheckboxGroup/types.d.ts +16 -9
  82. package/dist/components/BaseColorInput/BaseColorInput.vue.d.ts +12 -52
  83. package/dist/components/BaseDatePicker/BaseDatePicker.vue.d.ts +4 -76
  84. package/dist/components/BaseDatePicker/types.d.ts +100 -0
  85. package/dist/components/BaseDatePickerInput/BaseDatePickerInput.vue.d.ts +18 -315
  86. package/dist/components/BaseDatePickerInput/types.d.ts +206 -0
  87. package/dist/components/BaseDialog/BaseDialog.vue.d.ts +6 -156
  88. package/dist/components/BaseDialog/types.d.ts +180 -0
  89. package/dist/components/BaseInputContainer/BaseInputContainer.vue.d.ts +1 -107
  90. package/dist/components/BaseInputContainer/types.d.ts +126 -0
  91. package/dist/components/BaseNumberInput/BaseNumberInput.vue.d.ts +7 -170
  92. package/dist/components/BaseNumberInput/types.d.ts +191 -0
  93. package/dist/components/BaseRadio/BaseRadio.vue.d.ts +6 -119
  94. package/dist/components/BaseRadio/types.d.ts +173 -0
  95. package/dist/components/BaseRadioGroup/BaseRadioGroup.vue.d.ts +4 -274
  96. package/dist/components/BaseRadioGroup/types.d.ts +240 -0
  97. package/dist/components/BaseRating/BaseRating.vue.d.ts +5 -106
  98. package/dist/components/BaseRating/types.d.ts +144 -0
  99. package/dist/components/BaseSelect/BaseSelect.vue.d.ts +2 -363
  100. package/dist/components/BaseSelect/types.d.ts +457 -0
  101. package/dist/components/BaseSlider/BaseSlider.vue.d.ts +6 -178
  102. package/dist/components/BaseSlider/types.d.ts +201 -0
  103. package/dist/components/BaseSwitch/BaseSwitch.vue.d.ts +7 -35
  104. package/dist/components/BaseSwitch/types.d.ts +25 -0
  105. package/dist/components/BaseSwitchGroup/BaseSwitchGroup.vue.d.ts +5 -11
  106. package/dist/components/BaseSwitchGroup/types.d.ts +8 -0
  107. package/dist/components/BaseTag/BaseTag.vue.d.ts +27 -222
  108. package/dist/components/BaseTag/types.d.ts +136 -0
  109. package/dist/components/BaseTextInput/BaseTextInput.vue.d.ts +5 -141
  110. package/dist/components/BaseTextInput/types.d.ts +166 -0
  111. package/dist/components/BaseTextarea/BaseTextarea.vue.d.ts +5 -131
  112. package/dist/components/BaseTextarea/types.d.ts +151 -0
  113. package/dist/components/BbAccordion/BbAccordion.vue.d.ts +3 -51
  114. package/dist/components/BbAccordion/types.d.ts +32 -0
  115. package/dist/components/BbAlert/BbAlert.vue.d.ts +3 -50
  116. package/dist/components/BbAlert/types.d.ts +42 -0
  117. package/dist/components/BbAvatar/BbAvatar.vue.d.ts +3 -23
  118. package/dist/components/BbAvatar/types.d.ts +34 -0
  119. package/dist/components/BbBadge/BbBadge.vue.d.ts +3 -40
  120. package/dist/components/BbBadge/types.d.ts +30 -0
  121. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue.d.ts +14 -178
  122. package/dist/components/BbBreadcrumbs/types.d.ts +109 -0
  123. package/dist/components/BbButton/BbButton.vue.d.ts +4 -163
  124. package/dist/components/BbButton/types.d.ts +159 -0
  125. package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +7 -165
  126. package/dist/components/BbCheckbox/types.d.ts +130 -0
  127. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +7 -324
  128. package/dist/components/BbCheckboxGroup/types.d.ts +189 -0
  129. package/dist/components/BbChip/BbChip.vue.d.ts +6 -28
  130. package/dist/components/BbChip/types.d.ts +23 -0
  131. package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +3 -24
  132. package/dist/components/BbCollapsible/types.d.ts +20 -0
  133. package/dist/components/BbColorInput/BbColorInput.vue.d.ts +10 -151
  134. package/dist/components/BbColorInput/types.d.ts +131 -0
  135. package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +2 -112
  136. package/dist/components/BbColorPalette/types.d.ts +127 -0
  137. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +6 -212
  138. package/dist/components/BbDatePickerInput/types.d.ts +180 -0
  139. package/dist/components/BbDialog/BbDialog.vue.d.ts +2 -2
  140. package/dist/components/BbDialog/types.d.ts +1 -0
  141. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +21 -247
  142. package/dist/components/BbDropdown/types.d.ts +147 -0
  143. package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +16 -209
  144. package/dist/components/BbDropdownButton/types.d.ts +114 -0
  145. package/dist/components/BbDropzone/BbDropzone.vue.d.ts +7 -86
  146. package/dist/components/BbDropzone/types.d.ts +67 -0
  147. package/dist/components/BbIcon/BbIcon.vue.d.ts +2 -26
  148. package/dist/components/BbIcon/types.d.ts +28 -0
  149. package/dist/components/BbIntersection/BbIntersection.vue.d.ts +3 -41
  150. package/dist/components/BbIntersection/types.d.ts +36 -0
  151. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +44 -175
  152. package/dist/components/BbNumberInput/types.d.ts +130 -0
  153. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +5 -93
  154. package/dist/components/BbOffCanvas/types.d.ts +97 -0
  155. package/dist/components/BbPagination/BbPagination.vue.d.ts +4 -87
  156. package/dist/components/BbPagination/types.d.ts +80 -0
  157. package/dist/components/BbPopover/BbPopover.vue.d.ts +9 -135
  158. package/dist/components/BbPopover/types.d.ts +99 -0
  159. package/dist/components/BbProgress/BbProgress.vue.d.ts +2 -14
  160. package/dist/components/BbProgress/types.d.ts +20 -0
  161. package/dist/components/BbRadio/BbRadio.vue.d.ts +7 -150
  162. package/dist/components/BbRadio/types.d.ts +117 -0
  163. package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +7 -322
  164. package/dist/components/BbRadioGroup/types.d.ts +182 -0
  165. package/dist/components/BbRating/BbRating.vue.d.ts +10 -113
  166. package/dist/components/BbRating/types.d.ts +105 -0
  167. package/dist/components/BbRatio/BbRatio.vue.d.ts +3 -18
  168. package/dist/components/BbRatio/types.d.ts +15 -0
  169. package/dist/components/BbSelect/BbSelect.vue.d.ts +7 -375
  170. package/dist/components/BbSelect/types.d.ts +351 -0
  171. package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +1 -1
  172. package/dist/components/BbSelectPopover/types.d.ts +351 -0
  173. package/dist/components/BbSlider/BbSlider.vue.d.ts +10 -129
  174. package/dist/components/BbSlider/types.d.ts +123 -0
  175. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +2 -23
  176. package/dist/components/BbSmoothHeight/types.d.ts +24 -0
  177. package/dist/components/BbSpinner/BbSpinner.vue.d.ts +3 -5
  178. package/dist/components/BbSpinner/types.d.ts +8 -0
  179. package/dist/components/BbSwitch/BbSwitch.vue.d.ts +9 -65
  180. package/dist/components/BbSwitch/types.d.ts +29 -0
  181. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +7 -190
  182. package/dist/components/BbSwitchGroup/types.d.ts +81 -0
  183. package/dist/components/BbTab/BbTab.vue.d.ts +9 -247
  184. package/dist/components/BbTab/types.d.ts +186 -0
  185. package/dist/components/BbTag/BbTag.vue.d.ts +6 -156
  186. package/dist/components/BbTag/types.d.ts +158 -0
  187. package/dist/components/BbTextInput/BbTextInput.vue.d.ts +10 -152
  188. package/dist/components/BbTextInput/types.d.ts +137 -0
  189. package/dist/components/BbTextarea/BbTextarea.vue.d.ts +10 -142
  190. package/dist/components/BbTextarea/types.d.ts +123 -0
  191. package/dist/components/BbToast/BbToast.vue.d.ts +2 -6
  192. package/dist/components/BbToast/types.d.ts +8 -0
  193. package/dist/components/BbTooltip/BbTooltip.vue.d.ts +8 -65
  194. package/dist/components/BbTooltip/types.d.ts +55 -0
  195. package/dist/components/BbTree/BbTree.vue.d.ts +2 -65
  196. package/dist/components/BbTree/types.d.ts +69 -0
  197. package/dist/components/{ChipsBox.vue.d.ts → ChipsBox/ChipsBox.vue.d.ts} +5 -6
  198. package/dist/components/ChipsBox/types.d.ts +14 -0
  199. package/dist/components/{ClearableButton.vue.d.ts → ClearableButton/ClearableButton.vue.d.ts} +2 -0
  200. package/dist/components/ClearableButton/types.d.ts +3 -0
  201. package/dist/components/{CommaBox.vue.d.ts → CommaBox/CommaBox.vue.d.ts} +5 -6
  202. package/dist/components/CommaBox/types.d.ts +14 -0
  203. package/dist/components/CommonInputInnerContainer/CommonInputInnerContainer.vue.d.ts +25 -0
  204. package/dist/components/CommonInputInnerContainer/types.d.ts +47 -0
  205. package/dist/components/CommonInputOuterContainer/CommonInputOuterContainer.vue.d.ts +17 -0
  206. package/dist/components/CommonInputOuterContainer/types.d.ts +16 -0
  207. package/dist/components/{CommonPopover.vue.d.ts → CommonPopover/CommonPopover.vue.d.ts} +5 -30
  208. package/dist/components/CommonPopover/types.d.ts +43 -0
  209. package/dist/components/{ErrorIcon.vue.d.ts → ErrorIcon/ErrorIcon.vue.d.ts} +2 -0
  210. package/dist/components/ErrorIcon/types.d.ts +3 -0
  211. package/dist/components/FlatListBox/types.d.ts +97 -0
  212. package/dist/components/GroupedListBox/types.d.ts +118 -0
  213. package/dist/components/ListBox/ListBox.vue.d.ts +30 -0
  214. package/dist/components/ListBox/types.d.ts +133 -0
  215. package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +13 -0
  216. package/dist/components/OptionsContainer/types.d.ts +96 -0
  217. package/dist/composables/useBbConfig.d.ts +1 -1
  218. package/dist/composables/useConfirm.d.ts +1 -1
  219. package/dist/index.css +1 -1
  220. package/dist/index.d.ts +18 -18
  221. package/dist/index109.js +9 -9
  222. package/dist/index110.js +50 -49
  223. package/dist/index114.js +1 -1
  224. package/dist/index118.js +1 -1
  225. package/dist/index122.js +1 -0
  226. package/dist/index124.js +4 -4
  227. package/dist/index126.js +13 -13
  228. package/dist/index132.js +22 -19
  229. package/dist/index134.js +1 -1
  230. package/dist/index136.js +5 -5
  231. package/dist/index138.js +1 -1
  232. package/dist/index14.js +1 -1
  233. package/dist/index140.js +18 -17
  234. package/dist/index144.js +1 -1
  235. package/dist/index146.js +2 -2
  236. package/dist/index149.js +2 -2
  237. package/dist/index16.js +3 -3
  238. package/dist/index18.js +3 -3
  239. package/dist/index20.js +70 -59
  240. package/dist/index22.js +14 -14
  241. package/dist/index221.js +138 -2
  242. package/dist/index222.js +2 -138
  243. package/dist/index224.js +5 -34
  244. package/dist/index225.js +7 -32
  245. package/dist/index226.js +32 -26
  246. package/dist/index227.js +7 -0
  247. package/dist/index228.js +5 -5
  248. package/dist/index229.js +5 -8
  249. package/dist/index230.js +5 -7
  250. package/dist/index231.js +3 -2
  251. package/dist/index232.js +2 -9
  252. package/dist/index233.js +6 -13
  253. package/dist/index234.js +8 -3
  254. package/dist/index235.js +268 -2
  255. package/dist/index236.js +52 -11
  256. package/dist/index237.js +50 -6
  257. package/dist/index238.js +32 -3
  258. package/dist/index239.js +60 -3
  259. package/dist/index24.js +10 -10
  260. package/dist/index240.js +13 -2
  261. package/dist/index241.js +187 -17
  262. package/dist/index242.js +3 -12
  263. package/dist/index243.js +2 -51
  264. package/dist/index244.js +2 -18
  265. package/dist/index245.js +2 -12
  266. package/dist/index246.js +12 -16
  267. package/dist/index247.js +11 -28
  268. package/dist/index248.js +48 -15
  269. package/dist/index249.js +17 -4
  270. package/dist/index250.js +2 -2
  271. package/dist/index252.js +2 -2
  272. package/dist/index254.js +3 -135
  273. package/dist/index255.js +4 -0
  274. package/dist/index256.js +4 -107
  275. package/dist/index257.js +19 -12
  276. package/dist/index258.js +6 -2
  277. package/dist/index259.js +16 -7
  278. package/dist/index26.js +3 -3
  279. package/dist/index260.js +86 -7
  280. package/dist/index262.js +32 -0
  281. package/dist/index263.js +18 -5
  282. package/dist/index264.js +12 -5
  283. package/dist/index265.js +18 -5
  284. package/dist/index266.js +2 -5
  285. package/dist/index267.js +7 -5
  286. package/dist/index268.js +7 -5
  287. package/dist/index269.js +3 -67
  288. package/dist/index270.js +4 -33
  289. package/dist/index271.js +5 -2
  290. package/dist/index272.js +5 -2
  291. package/dist/index273.js +5 -3
  292. package/dist/index274.js +135 -4
  293. package/dist/index276.js +9 -6
  294. package/dist/index277.js +7 -11
  295. package/dist/index278.js +23 -5
  296. package/dist/index279.js +3 -5
  297. package/dist/index28.js +57 -55
  298. package/dist/index280.js +21 -266
  299. package/dist/index281.js +364 -43
  300. package/dist/index283.js +32 -31
  301. package/dist/index284.js +3 -60
  302. package/dist/index285.js +25 -4
  303. package/dist/index286.js +3 -20
  304. package/dist/index287.js +18 -5
  305. package/dist/index288.js +12 -373
  306. package/dist/index289.js +109 -0
  307. package/dist/index290.js +11 -6
  308. package/dist/index291.js +66 -15
  309. package/dist/index292.js +32 -10
  310. package/dist/index294.js +5 -8
  311. package/dist/index295.js +9 -20
  312. package/dist/index296.js +2 -8
  313. package/dist/index297.js +9 -23
  314. package/dist/index298.js +52 -24
  315. package/dist/index299.js +5 -188
  316. package/dist/index30.js +3 -3
  317. package/dist/index300.js +21 -3
  318. package/dist/index301.js +28 -3
  319. package/dist/index303.js +9 -0
  320. package/dist/index304.js +2 -7
  321. package/dist/index305.js +280 -3
  322. package/dist/index306.js +2 -2
  323. package/dist/index307.js +16 -5
  324. package/dist/index308.js +2 -7
  325. package/dist/index309.js +16 -3
  326. package/dist/index310.js +2 -3
  327. package/dist/index311.js +27 -3
  328. package/dist/index312.js +2 -2
  329. package/dist/index313.js +2 -28
  330. package/dist/index314.js +2 -17
  331. package/dist/index315.js +2 -4
  332. package/dist/index316.js +1 -1
  333. package/dist/index317.js +28 -3
  334. package/dist/index318.js +2 -280
  335. package/dist/index319.js +7 -2
  336. package/dist/index32.js +2 -2
  337. package/dist/index320.js +719 -125
  338. package/dist/index321.js +366 -2
  339. package/dist/index322.js +56 -14
  340. package/dist/index323.js +4 -2
  341. package/dist/index324.js +3 -16
  342. package/dist/index325.js +17 -2
  343. package/dist/index326.js +3 -16
  344. package/dist/index327.js +3 -2
  345. package/dist/index328.js +3 -19
  346. package/dist/index329.js +3 -2
  347. package/dist/index330.js +120 -22
  348. package/dist/index331.js +2 -2
  349. package/dist/index332.js +15 -2
  350. package/dist/index333.js +2 -2
  351. package/dist/index334.js +19 -2
  352. package/dist/index335.js +2 -2
  353. package/dist/index336.js +5 -2
  354. package/dist/index337.js +5 -3
  355. package/dist/index338.js +2 -4
  356. package/dist/index339.js +4 -719
  357. package/dist/index34.js +8 -8
  358. package/dist/index340.js +2 -366
  359. package/dist/index341.js +3 -57
  360. package/dist/index342.js +3 -6
  361. package/dist/index343.js +6 -5
  362. package/dist/index344.js +6 -34
  363. package/dist/index345.js +17 -127
  364. package/dist/index346.js +7 -396
  365. package/dist/index347.js +14 -199
  366. package/dist/index348.js +5 -259
  367. package/dist/index349.js +6 -227
  368. package/dist/index352.js +35 -2
  369. package/dist/index353.js +129 -2
  370. package/dist/index354.js +378 -114
  371. package/dist/index355.js +92 -6
  372. package/dist/index356.js +226 -17
  373. package/dist/index357.js +22 -9
  374. package/dist/index359.js +7 -5
  375. package/dist/index36.js +4 -4
  376. package/dist/index360.js +200 -7
  377. package/dist/index361.js +255 -18
  378. package/dist/index362.js +136 -0
  379. package/dist/index363.js +2 -93
  380. package/dist/index364.js +2 -441
  381. package/dist/index365.js +427 -114
  382. package/dist/index366.js +127 -46
  383. package/dist/index367.js +44 -67
  384. package/dist/index368.js +66 -516
  385. package/dist/index369.js +515 -45
  386. package/dist/index370.js +52 -0
  387. package/dist/index38.js +133 -131
  388. package/dist/index40.js +8 -8
  389. package/dist/index42.js +2 -2
  390. package/dist/index44.js +16 -15
  391. package/dist/index46.js +4 -4
  392. package/dist/index50.js +28 -25
  393. package/dist/index54.js +1 -1
  394. package/dist/index56.js +1 -1
  395. package/dist/index58.js +2 -2
  396. package/dist/index60.js +2 -2
  397. package/dist/index62.js +5 -5
  398. package/dist/index66.js +3 -1
  399. package/dist/index68.js +1 -1
  400. package/dist/index74.js +4 -4
  401. package/dist/index82.js +6 -6
  402. package/dist/index84.js +1 -1
  403. package/dist/index86.js +2 -2
  404. package/dist/index88.js +3 -3
  405. package/dist/index90.js +1 -1
  406. package/dist/index93.js +3 -3
  407. package/dist/index95.js +2 -2
  408. package/dist/index97.js +5 -5
  409. package/dist/index99.js +1 -1
  410. package/dist/utilities/functions/parseSize.d.ts +1 -1
  411. package/package.json +5 -3
  412. package/dist/components/CommonInputInnerContainer.vue.d.ts +0 -81
  413. package/dist/components/CommonInputOuterContainer.vue.d.ts +0 -41
  414. package/dist/components/FlatListBox.vue.d.ts +0 -119
  415. package/dist/components/GroupedListBox.vue.d.ts +0 -153
  416. package/dist/components/ListBox.vue.d.ts +0 -170
  417. package/dist/components/OptionsContainer.vue.d.ts +0 -172
  418. package/dist/index261.js +0 -88
  419. package/dist/index275.js +0 -25
  420. package/dist/index282.js +0 -54
  421. package/dist/index293.js +0 -5
  422. package/dist/index302.js +0 -55
  423. package/dist/index358.js +0 -17
@@ -0,0 +1,871 @@
1
+ # BaseSlider
2
+
3
+ ## Template & Script
4
+
5
+ ```vue
6
+ <template>
7
+ <span v-bind="outerContainerAttributes">
8
+ <slot :decrease="decrease" :increase="increase" name="prepend"></slot>
9
+ <span
10
+ ref="container"
11
+ v-bind="innerContainerAttributes"
12
+ class="bb-base-slider__slider-container"
13
+ >
14
+ <span v-if="ticks.length" class="bb-base-slider__ticks-container">
15
+ <span
16
+ v-for="tick in ticks"
17
+ :key="tick.value"
18
+ class="bb-base-slider__tick"
19
+ ><slot
20
+ :active="tick.active"
21
+ name="tick"
22
+ :percent="tick.percent"
23
+ :value="tick.value"
24
+ /></span>
25
+ </span>
26
+ <input
27
+ :id="id"
28
+ class="sr-only"
29
+ :disabled="disabled"
30
+ :name="name"
31
+ :readonly="true"
32
+ :required="required"
33
+ :tabindex="-1"
34
+ :type="'text'"
35
+ :value="JSON.stringify(modelValue)"
36
+ />
37
+ <span ref="track" class="bb-base-slider__track-container">
38
+ <span class="bb-base-slider__track-fill"></span>
39
+ <span v-bind="sliderBackgroundAttributes"></span>
40
+ </span>
41
+ <span
42
+ v-if="props.range"
43
+ v-bind="listeners"
44
+ key="thumblower"
45
+ ref="thumblower"
46
+ :aria-describedby="ariaDescribedby"
47
+ :aria-orientation="'horizontal'"
48
+ :aria-readonly="!readonly"
49
+ :aria-valuemax="max"
50
+ :aria-valuemin="min"
51
+ :aria-valuenow="valueNowLower"
52
+ :class="'bb-base-slider__thumb-container'"
53
+ data-thumb="lower"
54
+ :role="'slider'"
55
+ :style="{ left: `${internalValueLower}%` }"
56
+ :tabindex="disabled ? -1 : 0"
57
+ @focus="onFocus"
58
+ @keydown="onKeydown"
59
+ >
60
+ <span
61
+ :class="{
62
+ 'bb-base-slider__thumb': true,
63
+ 'bb-base-slider__thumb--lower': true,
64
+ 'bb-base-slider__thumb--focused': targetThumb === 'lower',
65
+ }"
66
+ :style="{
67
+ transform: `translateY(-50%) ${thumbTranslate ? `translateX(-${internalValueLower}%)` : `translateX(-50%)`}`,
68
+ left: `${internalValueLower}%`,
69
+ }"
70
+ ><slot
71
+ :focused="targetThumb === 'lower'"
72
+ name="thumb:lower"
73
+ :percent="internalValueLower"
74
+ :value="valueNowLower"
75
+ ><slot
76
+ :focused="targetThumb === 'lower'"
77
+ name="thumb"
78
+ :percent="internalValueLower"
79
+ :value="valueNowLower" /></slot
80
+ ></span>
81
+ </span>
82
+ <span
83
+ v-bind="listeners"
84
+ key="thumbhigher"
85
+ ref="thumbhigher"
86
+ :aria-describedby="ariaDescribedby"
87
+ :aria-orientation="'horizontal'"
88
+ :aria-readonly="!readonly"
89
+ :aria-valuemax="max"
90
+ :aria-valuemin="min"
91
+ :aria-valuenow="valueNowHigher"
92
+ :class="'bb-base-slider__thumb-container'"
93
+ data-thumb="higher"
94
+ :role="'slider'"
95
+ :style="{ left: `${internalValueHigher}%` }"
96
+ :tabindex="disabled ? -1 : 0"
97
+ @focus="onFocus"
98
+ @keydown="onKeydown"
99
+ >
100
+ <span
101
+ :class="{
102
+ 'bb-base-slider__thumb': true,
103
+ 'bb-base-slider__thumb--higher': true,
104
+ 'bb-base-slider__thumb--focused': targetThumb === 'higher',
105
+ }"
106
+ :style="{
107
+ transform: `translateY(-50%) ${thumbTranslate ? `translateX(-${internalValueHigher}%)` : `translateX(-50%)`}`,
108
+ left: `${internalValueHigher}%`,
109
+ }"
110
+ ><slot
111
+ :focused="targetThumb === 'higher'"
112
+ name="thumb:higher"
113
+ :percent="internalValueHigher"
114
+ :value="valueNowHigher"
115
+ ><slot
116
+ :focused="targetThumb === 'higher'"
117
+ name="thumb"
118
+ :percent="internalValueHigher"
119
+ :value="valueNowHigher" /></slot
120
+ ></span>
121
+ </span>
122
+ </span>
123
+ <slot :decrease="decrease" :increase="increase" name="append"></slot>
124
+ </span>
125
+ </template>
126
+
127
+ <script setup lang="ts">
128
+ import { computed, onMounted, ref, watch } from 'vue';
129
+ import { head } from '@/utilities/functions/head';
130
+ import { isCssColor } from '@/utilities/functions/isCssColor';
131
+ import { isNil } from '@/utilities/functions/isNil';
132
+ import {
133
+ getAsPercentage,
134
+ getAsPercentageBetween,
135
+ getValueFromPercentageInInterval,
136
+ } from '@/utilities/functions/percentage';
137
+ import { snapToStep } from '@/utilities/functions/snapToStep';
138
+ import { last } from '@/utilities/functions/last';
139
+ import { transpose } from '@/utilities/functions/transpose';
140
+ import { clamp } from '@/utilities/functions/clamp';
141
+
142
+ import type {
143
+ BaseSliderProps,
144
+ BaseSliderEvents,
145
+ BaseSliderSlots,
146
+ } from './types';
147
+
148
+ const props = withDefaults(defineProps<BaseSliderProps>(), {
149
+ maxPrecision: 2,
150
+ max: 100,
151
+ min: 0,
152
+ modelValue: 0,
153
+ step: 1,
154
+ thumbTranslate: true,
155
+ });
156
+
157
+ const emit = defineEmits<BaseSliderEvents>();
158
+
159
+ defineSlots<BaseSliderSlots>();
160
+
161
+ if (
162
+ props.min < Number.MIN_SAFE_INTEGER ||
163
+ props.max > Number.MAX_SAFE_INTEGER
164
+ ) {
165
+ throw new Error('BaseSlider min or max is too large');
166
+ }
167
+
168
+ const container = ref<HTMLElement>();
169
+ const track = ref<HTMLElement>();
170
+ const thumblower = ref<HTMLElement>();
171
+ const thumbhigher = ref<HTMLElement>();
172
+ const internalValueLower = ref(0);
173
+ const internalValueHigher = ref(0);
174
+ const valueNowLower = computed(() => {
175
+ if (Array.isArray(props.modelValue))
176
+ return head(props.modelValue) ?? undefined;
177
+ return isNil(props.modelValue) ? undefined : Number(props.modelValue);
178
+ });
179
+ const valueNowHigher = computed(() => {
180
+ if (Array.isArray(props.modelValue))
181
+ return last(props.modelValue) ?? undefined;
182
+ return isNil(props.modelValue) ? undefined : Number(props.modelValue);
183
+ });
184
+ const sortedInternalValues = computed(() => {
185
+ return [internalValueLower.value, internalValueHigher.value].sort(
186
+ (a, b) => a - b
187
+ );
188
+ });
189
+
190
+ const active = ref(false);
191
+
192
+ if (props.range && !Array.isArray(props.modelValue)) {
193
+ throw new TypeError(
194
+ 'BaseSlider mode is set as range but modelValue is not an array'
195
+ );
196
+ }
197
+
198
+ onMounted(() => {
199
+ if (props.autofocus) {
200
+ thumbhigher.value?.focus();
201
+ }
202
+ });
203
+
204
+ let thumbPressed = ref(false);
205
+ let targetThumb = ref<'higher' | 'lower' | null>(null);
206
+
207
+ const getTargetThumb = (event: FocusEvent) => {
208
+ if (thumbhigher.value && thumbhigher.value.contains(event.target as Node))
209
+ return 'higher';
210
+ if (thumblower.value && thumblower.value.contains(event.target as Node))
211
+ return 'lower';
212
+ throw new Error('Could not identify target thumb');
213
+ };
214
+
215
+ const onPointerdown = (event: PointerEvent) => {
216
+ if (props.disabled || props.readonly) return;
217
+ if (!targetThumb.value) {
218
+ targetThumb.value = getTargetThumb(event);
219
+ }
220
+ thumbPressed.value = true;
221
+ document.addEventListener('pointermove', onPointermove);
222
+ document.addEventListener('pointerup', onPointerup);
223
+ emit('pointerdown', event);
224
+ };
225
+
226
+ let listeners = computed(() => (thumbPressed.value ? {} : { onPointerdown }));
227
+
228
+ const onPointermove = (event: PointerEvent | MouseEvent) => {
229
+ if (props.disabled || props.readonly) return;
230
+ if (track.value) {
231
+ if (event instanceof PointerEvent) {
232
+ emit('pointermove', event);
233
+ } else {
234
+ emit('click', event);
235
+ }
236
+ const trackPosition = track.value.getBoundingClientRect();
237
+ const clickOffset = event.clientX;
238
+ const trackStart = trackPosition.left;
239
+ const trackLength = trackPosition.width;
240
+
241
+ // Snap the value to the step
242
+ let transposedValue = transpose(
243
+ clickOffset,
244
+ trackStart,
245
+ trackStart + trackLength,
246
+ props.min,
247
+ props.max
248
+ );
249
+ const snappedValue = snapToStep(
250
+ transposedValue,
251
+ props.min,
252
+ props.max,
253
+ props.step
254
+ );
255
+
256
+ // Transform the snapped value back to a percentage so it matches the original intent
257
+ const adjustedPercent = getAsPercentageBetween(
258
+ snappedValue,
259
+ props.min,
260
+ props.max
261
+ );
262
+ const clampedPercent = clamp(adjustedPercent, 0, 100);
263
+ if (targetThumb.value === 'higher') {
264
+ internalValueHigher.value = clampedPercent;
265
+ } else if (targetThumb.value === 'lower') {
266
+ internalValueLower.value = clampedPercent;
267
+ }
268
+ emit('update:modelValue', getValueToEmit());
269
+ }
270
+ };
271
+
272
+ const getValueToEmit = () => {
273
+ if (props.range) {
274
+ return (
275
+ [
276
+ getValueFromPercentageInInterval(
277
+ internalValueLower.value,
278
+ props.min,
279
+ props.max
280
+ ),
281
+ getValueFromPercentageInInterval(
282
+ internalValueHigher.value,
283
+ props.min,
284
+ props.max
285
+ ),
286
+ ]
287
+ .sort((a, b) => a - b)
288
+ // This prevents floating point precision issues like 10.000000000000002
289
+ .map((v) => Number(v.toFixed(props.maxPrecision)))
290
+ );
291
+ } else {
292
+ const value = getValueFromPercentageInInterval(
293
+ internalValueHigher.value,
294
+ props.min,
295
+ props.max
296
+ );
297
+ return Number(value.toFixed(props.maxPrecision));
298
+ }
299
+ };
300
+
301
+ const increase = () => {
302
+ if (props.disabled || props.readonly || props.range) return;
303
+ const initialValue = (props.modelValue as number | null) ?? 0;
304
+ const increased = initialValue + props.step;
305
+ const clamped = clamp(increased, props.min, props.max);
306
+ emit('update:modelValue', clamped);
307
+ };
308
+
309
+ const decrease = () => {
310
+ if (props.disabled || props.readonly || props.range) return;
311
+ const initialValue = (props.modelValue as number | null) ?? 0;
312
+ const decreased = initialValue - props.step;
313
+ const clamped = clamp(decreased, props.min, props.max);
314
+ emit('update:modelValue', clamped);
315
+ };
316
+
317
+ watch(
318
+ () => props.modelValue,
319
+ (value) => {
320
+ if (props.range) {
321
+ if (!Array.isArray(value)) {
322
+ throw new Error('BaseSlider modelValue must be an array');
323
+ }
324
+ if (value.length !== 2) {
325
+ internalValueLower.value = 0;
326
+ internalValueHigher.value = 100;
327
+ return;
328
+ }
329
+ const sortedExternal = [...value].sort((a, b) => a - b);
330
+ const normalizedExternal = sortedExternal.map((v) =>
331
+ clamp(getAsPercentageBetween(v, props.min, props.max), 0, 100)
332
+ );
333
+ // Assign the values to the internal values based on which is closest
334
+ // this is useful so the user doesn't have to think about the thumbs position
335
+ if (internalValueLower.value > internalValueHigher.value) {
336
+ internalValueLower.value = normalizedExternal[1];
337
+ internalValueHigher.value = normalizedExternal[0];
338
+ } else {
339
+ internalValueLower.value = normalizedExternal[0];
340
+ internalValueHigher.value = normalizedExternal[1];
341
+ }
342
+ } else {
343
+ let newValue = (value as number | null) ?? props.min;
344
+ const transposed = transpose(newValue, props.min, props.max, 0, 100);
345
+ const clamped = clamp(transposed, 0, 100);
346
+ internalValueHigher.value = clamped;
347
+ }
348
+ },
349
+ { immediate: true }
350
+ );
351
+
352
+ const onPointerup = (event: PointerEvent) => {
353
+ thumbPressed.value = false;
354
+ targetThumb.value = null;
355
+ document.removeEventListener('pointermove', onPointermove);
356
+ document.removeEventListener('pointerup', onPointerup);
357
+ emit('pointerup', event);
358
+ };
359
+
360
+ const proportionalStep = getAsPercentage(props.step, props.max - props.min);
361
+
362
+ const onKeydown = (event: KeyboardEvent) => {
363
+ emit('keydown', event);
364
+ if (
365
+ props.disabled ||
366
+ props.readonly ||
367
+ (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight')
368
+ ) {
369
+ return;
370
+ }
371
+
372
+ if (event.key === 'ArrowLeft') {
373
+ if (
374
+ targetThumb.value === 'higher' ||
375
+ document.activeElement === thumbhigher.value ||
376
+ event.target === thumbhigher.value
377
+ ) {
378
+ internalValueHigher.value = clamp(
379
+ internalValueHigher.value - proportionalStep,
380
+ 0,
381
+ 100
382
+ );
383
+ } else if (
384
+ targetThumb.value === 'lower' ||
385
+ document.activeElement === thumblower.value ||
386
+ event.target === thumblower.value
387
+ ) {
388
+ internalValueLower.value = clamp(
389
+ internalValueLower.value - proportionalStep,
390
+ 0,
391
+ 100
392
+ );
393
+ }
394
+ } else if (event.key === 'ArrowRight') {
395
+ if (
396
+ targetThumb.value === 'higher' ||
397
+ document.activeElement === thumbhigher.value ||
398
+ event.target === thumbhigher.value
399
+ ) {
400
+ internalValueHigher.value = clamp(
401
+ internalValueHigher.value + proportionalStep,
402
+ 0,
403
+ 100
404
+ );
405
+ } else if (
406
+ targetThumb.value === 'lower' ||
407
+ document.activeElement === thumblower.value ||
408
+ event.target === thumblower.value
409
+ ) {
410
+ internalValueLower.value = clamp(
411
+ internalValueLower.value + proportionalStep,
412
+ 0,
413
+ 100
414
+ );
415
+ }
416
+ }
417
+ emit('update:modelValue', getValueToEmit());
418
+ };
419
+
420
+ const onFocus = (event: FocusEvent) => {
421
+ emit('focus', event);
422
+ const found = getTargetThumb(event);
423
+ if (found) targetThumb.value = found;
424
+ if (!active.value) {
425
+ active.value = true;
426
+ emit('active');
427
+ document.addEventListener('focusin', onDocumentInteraction);
428
+ document.addEventListener('click', onDocumentInteraction);
429
+ }
430
+ };
431
+
432
+ const onDocumentInteraction = (event: FocusEvent) => {
433
+ if (event.target instanceof HTMLElement) {
434
+ if (!container.value?.contains(event.target)) {
435
+ active.value = false;
436
+ targetThumb.value = null;
437
+ emit('inactive');
438
+ document.removeEventListener('focusin', onDocumentInteraction);
439
+ document.removeEventListener('click', onDocumentInteraction);
440
+ }
441
+ }
442
+ };
443
+
444
+ const outerContainerAttributes: Record<string, any> = computed(() => {
445
+ const base: Record<string, any> = {
446
+ class: {
447
+ 'bb-base-slider': true,
448
+ 'bb-base-slider--disabled': props.disabled,
449
+ 'bb-base-slider--errors': props.hasErrors,
450
+ 'bb-base-slider--readonly': props.readonly,
451
+ [`bb-base-slider--${props.color}`]:
452
+ props.color && !isCssColor(props.color),
453
+ },
454
+ style: {},
455
+ };
456
+ if (props.color && isCssColor(props.color)) {
457
+ base.style['--color'] = props.color;
458
+ }
459
+ return base;
460
+ });
461
+
462
+ const innerContainerAttributes: Record<string, any> = {
463
+ onPointerdown: (event: MouseEvent) => {
464
+ if (props.range) return;
465
+ thumbhigher.value?.focus();
466
+ onPointermove(event);
467
+ document.addEventListener('pointermove', onPointermove);
468
+ document.addEventListener('pointerup', onPointerup);
469
+ },
470
+ };
471
+
472
+ const sliderBackgroundAttributes = computed(() => {
473
+ const classes = 'bb-base-slider__track-background';
474
+ const style: Record<string, any> = {
475
+ width: `${sortedInternalValues.value[1] - sortedInternalValues.value[0]}%`,
476
+ left: `${sortedInternalValues.value[0]}%`,
477
+ };
478
+ return {
479
+ class: classes,
480
+ style,
481
+ };
482
+ });
483
+
484
+ type Tick = {
485
+ value: number;
486
+ percent: number;
487
+ active: boolean;
488
+ };
489
+
490
+ const isSelected = (value: number) => {
491
+ if (isNil(props.modelValue)) return false;
492
+
493
+ if (Array.isArray(props.modelValue)) {
494
+ if (props.modelValue.length === 0) return false;
495
+ return props.modelValue[0] <= value && props.modelValue[1] >= value;
496
+ }
497
+ return value <= Number(props.modelValue);
498
+ };
499
+
500
+ const ticks = computed<Tick[]>(() => {
501
+ if (!props.ticks) return [] as Tick[];
502
+ let ticks: Tick[] = [];
503
+ let current = props.min;
504
+ while (current <= props.max) {
505
+ let value = current;
506
+ const percent = getAsPercentageBetween(value, props.min, props.max);
507
+ const active = isSelected(value);
508
+ ticks.push({
509
+ value,
510
+ percent,
511
+ active,
512
+ });
513
+ current += props.step;
514
+ }
515
+ return ticks;
516
+ });
517
+ </script>
518
+
519
+ <style lang="postcss">
520
+ @import './index.css';
521
+ </style>
522
+ ```
523
+
524
+ ## Types
525
+
526
+ ```ts
527
+ import type { InputHTMLAttributes, HTMLAttributes } from 'vue';
528
+
529
+ /**
530
+ * Props for the slider component with range support, ticks, and keyboard navigation.
531
+ */
532
+ export type BaseSliderProps = {
533
+ /**
534
+ * Id(s) of elements describing this slider for assistive technologies.
535
+ */
536
+ ariaDescribedby?: InputHTMLAttributes['aria-describedby'];
537
+
538
+ /**
539
+ * Focus the slider on mount.
540
+ */
541
+ autofocus?: InputHTMLAttributes['autofocus'];
542
+
543
+ /**
544
+ * Define a color for the component.
545
+ *
546
+ * Either a custom color or a coded color in common HEX, RGB, etc... format.
547
+ */
548
+ color?: string;
549
+
550
+ /**
551
+ * Disable all interactions with the slider.
552
+ */
553
+ disabled?: boolean;
554
+
555
+ /**
556
+ * Apply error styling to the slider.
557
+ */
558
+ hasErrors?: boolean;
559
+
560
+ /**
561
+ * Explicit id for the slider container. Used to generate ids for thumbs.
562
+ */
563
+ id?: HTMLAttributes['id'];
564
+
565
+ /**
566
+ * Upper bound for slider values.
567
+ * @defaultValue `100`
568
+ */
569
+ max?: number;
570
+
571
+ /**
572
+ * Maximum decimal places to retain in emitted values.
573
+ * @defaultValue `2`
574
+ */
575
+ maxPrecision?: number;
576
+
577
+ /**
578
+ * Lower bound for slider values.
579
+ * @defaultValue `0`
580
+ */
581
+ min?: number;
582
+
583
+ /**
584
+ * v-model value. Single number for single slider, two-element array for range.
585
+ * @defaultValue `0`
586
+ */
587
+ modelValue: number[] | number | string | null;
588
+
589
+ /**
590
+ * Defines the name of the input.
591
+ */
592
+ name?: InputHTMLAttributes['name'];
593
+
594
+ /**
595
+ * Enable range selection with two thumbs. When true, modelValue must be an array.
596
+ */
597
+ range?: boolean;
598
+
599
+ /**
600
+ * Make the slider read-only while keeping it visible.
601
+ */
602
+ readonly?: boolean;
603
+
604
+ /**
605
+ * Mark the slider as required.
606
+ */
607
+ required?: boolean;
608
+
609
+ /**
610
+ * Granularity step for value changes via keyboard or pointer interaction.
611
+ * @defaultValue `1`
612
+ */
613
+ step?: number;
614
+
615
+ /**
616
+ * Show tick marks at each step interval.
617
+ */
618
+ ticks?: boolean;
619
+
620
+ /**
621
+ * Translate thumbs proportionally to stay centered on the track.
622
+ * Set to false when displaying ticks for better alignment.
623
+ * @defaultValue `true`
624
+ */
625
+ thumbTranslate?: boolean;
626
+ };
627
+
628
+ export type BaseSliderEvents = {
629
+ /**
630
+ * Emitted when the slider gains focus and becomes interactive.
631
+ */
632
+ (e: 'active'): void;
633
+ /**
634
+ * Emitted when focus/click moves outside the slider after it was active.
635
+ */
636
+ (e: 'inactive'): void;
637
+ /**
638
+ * Emitted when the slider receives a click interaction.
639
+ * Forwards the original DOM `MouseEvent`.
640
+ */
641
+ (e: 'click', event: MouseEvent): void;
642
+ /**
643
+ * Emitted when a thumb gains focus.
644
+ * Forwards the original DOM `FocusEvent`.
645
+ */
646
+ (e: 'focus', event: FocusEvent): void;
647
+ /**
648
+ * Emitted for keyboard interaction on a thumb.
649
+ * Forwards the original DOM `KeyboardEvent`.
650
+ */
651
+ (e: 'keydown', event: KeyboardEvent): void;
652
+ /**
653
+ * Emitted when a pointer device is pressed on a thumb.
654
+ * Forwards the original DOM `PointerEvent`.
655
+ */
656
+ (e: 'pointerdown', event: PointerEvent): void;
657
+ /**
658
+ * Emitted as a pointer device moves while dragging a thumb.
659
+ * Forwards the original DOM `PointerEvent`.
660
+ */
661
+ (e: 'pointermove', event: PointerEvent): void;
662
+ /**
663
+ * Emitted when a pointer device is released after dragging.
664
+ * Forwards the original DOM `PointerEvent`.
665
+ */
666
+ (e: 'pointerup', event: PointerEvent): void;
667
+ /**
668
+ * Emitted with new value(s) whenever the slider position changes.
669
+ * Single number for single slider, array for range mode.
670
+ */
671
+ (e: 'update:modelValue', event: number | number[]): void;
672
+ };
673
+
674
+ /**
675
+ * Props exposed by the `thumb`, `thumb:higher`, and `thumb:lower` slots.
676
+ */
677
+ export type BaseSliderThumbSlotProps = {
678
+ /**
679
+ * The current value controlled by this thumb, or `undefined` if unset.
680
+ */
681
+ value: number | undefined;
682
+ /**
683
+ * The thumb's horizontal position as a percentage (0–100) along the track.
684
+ */
685
+ percent: number;
686
+ /**
687
+ * Whether this thumb currently has keyboard focus.
688
+ */
689
+ focused: boolean;
690
+ };
691
+
692
+ /**
693
+ * Props exposed by the `append` and `prepend` slots.
694
+ */
695
+ export type BaseSliderStepSlotProps = {
696
+ /**
697
+ * Increments the value by one `step`.
698
+ */
699
+ increase: () => void;
700
+ /**
701
+ * Decrements the value by one `step`.
702
+ */
703
+ decrease: () => void;
704
+ };
705
+
706
+ /**
707
+ * Props exposed by the `tick` slot.
708
+ */
709
+ export type BaseSliderTickSlotProps = {
710
+ /**
711
+ * The numeric value this tick represents.
712
+ */
713
+ value: number;
714
+ /**
715
+ * The tick's horizontal position as a percentage (0–100) along the track.
716
+ */
717
+ percent: number;
718
+ /**
719
+ * Whether the tick falls within the currently selected range/value.
720
+ */
721
+ active: boolean;
722
+ };
723
+
724
+ export type BaseSliderSlots = {
725
+ /**
726
+ * Replaces the default higher-value thumb in range mode (`range: true`).
727
+ */
728
+ 'thumb:higher': (props: BaseSliderThumbSlotProps) => any;
729
+ /**
730
+ * Replaces the default lower-value thumb in range mode (`range: true`).
731
+ */
732
+ 'thumb:lower': (props: BaseSliderThumbSlotProps) => any;
733
+ /**
734
+ * Content rendered after the slider track, typically used to add a max-value label or button.
735
+ */
736
+ append: (props: BaseSliderStepSlotProps) => any;
737
+ /**
738
+ * Content rendered before the slider track, typically used to add a min-value label or button.
739
+ */
740
+ prepend: (props: BaseSliderStepSlotProps) => any;
741
+ /**
742
+ * Fallback thumb used for non-range sliders (or inside `thumb:higher`/`thumb:lower` when not overridden separately).
743
+ */
744
+ thumb: (props: BaseSliderThumbSlotProps) => any;
745
+ /**
746
+ * Replaces the default tick mark rendered at each step when ticks are enabled.
747
+ */
748
+ tick: (props: BaseSliderTickSlotProps) => any;
749
+ };
750
+ ```
751
+
752
+ ## Styles
753
+
754
+ ```css
755
+ .bb-base-slider {
756
+ --padding: calc((var(--bb-slider-thumb) - var(--bb-slider-track)) / 2);
757
+ --color: var(--bb-primary);
758
+ --ring-color: color-mix(
759
+ in srgb,
760
+ var(--color),
761
+ transparent calc(100% - var(--bb-ring-opacity) * 100%)
762
+ );
763
+
764
+ --radius: var(--bb-radius);
765
+ align-items: center;
766
+ display: inline-flex;
767
+
768
+ &__slider-container {
769
+ display: block;
770
+ flex-grow: 1;
771
+ min-width: 100px;
772
+ padding-bottom: var(--padding);
773
+ padding-top: var(--padding);
774
+ position: relative;
775
+ -webkit-touch-callout: none;
776
+ -webkit-user-select: none;
777
+ -khtml-user-select: none;
778
+ -moz-user-select: none;
779
+ -ms-user-select: none;
780
+ user-select: none;
781
+ }
782
+
783
+ &.bb-base-slider--disabled {
784
+ .bb-base-slider__track-background {
785
+ background-color: color-mix(in srgb, var(--bb-panel), var(--bb-text) 40%);
786
+ cursor: not-allowed;
787
+ }
788
+ .bb-base-slider__track-fill {
789
+ background-color: var(--bb-panel-disabled);
790
+ cursor: not-allowed;
791
+ }
792
+ .bb-base-slider__thumb {
793
+ cursor: not-allowed;
794
+ }
795
+ }
796
+
797
+ input[type='number'] {
798
+ }
799
+
800
+ &__track-container {
801
+ display: block;
802
+ height: var(--bb-slider-track);
803
+ position: relative;
804
+ }
805
+
806
+ &__track-background {
807
+ background-color: var(--color);
808
+ border-bottom-left-radius: var(--radius);
809
+ border-top-left-radius: var(--radius);
810
+ cursor: pointer;
811
+ display: block;
812
+ height: 100%;
813
+ left: 0;
814
+ position: absolute;
815
+ top: 0;
816
+ }
817
+
818
+ &__track-fill {
819
+ background-color: color-mix(in srgb, var(--bb-panel) 92%, var(--bb-text));
820
+ border-radius: var(--radius);
821
+ cursor: pointer;
822
+ display: block;
823
+ height: 100%;
824
+ position: absolute;
825
+ right: 0;
826
+ top: 0;
827
+ width: 100%;
828
+ }
829
+
830
+ &__thumb-container {
831
+ display: block;
832
+ position: absolute;
833
+ top: 50%;
834
+
835
+ &:focus {
836
+ .bb-base-slider__thumb {
837
+ box-shadow: 0px 0px 0px var(--bb-ring-size) var(--ring-color);
838
+ }
839
+ }
840
+ }
841
+
842
+ &__thumb {
843
+ background-color: var(--bb-panel);
844
+ border: 1px solid var(--bb-border);
845
+ border-radius: 999px;
846
+ box-shadow: 0px 0px 0px 0px var(--bb-ring);
847
+ cursor: pointer;
848
+ display: block;
849
+ height: var(--bb-slider-thumb);
850
+ position: absolute;
851
+ top: 50%;
852
+ touch-action: none;
853
+ transition-duration: 150ms;
854
+ transition-property: box-shadow;
855
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
856
+ width: var(--bb-slider-thumb);
857
+ }
858
+
859
+ &__ticks-container {
860
+ display: flex;
861
+ justify-content: space-between;
862
+ position: absolute;
863
+ top: 100%;
864
+ width: 100%;
865
+ }
866
+
867
+ &__tick {
868
+ position: relative;
869
+ }
870
+ }
871
+ ```