@allxsmith/bestax-bulma 2.6.2 → 3.0.1

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 (138) hide show
  1. package/README.md +2 -2
  2. package/dist/bestax.css +3 -0
  3. package/dist/bestax.css.map +1 -0
  4. package/dist/bestax.js +1 -0
  5. package/dist/extras.css +3 -0
  6. package/dist/extras.css.map +1 -0
  7. package/dist/extras.js +1 -0
  8. package/dist/index.cjs.js +6214 -647
  9. package/dist/index.cjs.js.map +1 -1
  10. package/dist/index.esm.js +6154 -649
  11. package/dist/index.esm.js.map +1 -1
  12. package/dist/types/components/Carousel.d.ts +34 -0
  13. package/dist/types/components/Collapse.d.ts +17 -0
  14. package/dist/types/components/Dialog.d.ts +47 -0
  15. package/dist/types/components/Loading.d.ts +18 -0
  16. package/dist/types/components/Navbar.d.ts +10 -0
  17. package/dist/types/components/Panel.d.ts +2 -4
  18. package/dist/types/components/Sidebar.d.ts +37 -0
  19. package/dist/types/components/Steps.d.ts +45 -0
  20. package/dist/types/components/Tabs.d.ts +42 -6
  21. package/dist/types/components/Toast.d.ts +46 -0
  22. package/dist/types/components/Tooltip.d.ts +22 -0
  23. package/dist/types/elements/Button.d.ts +1 -1
  24. package/dist/types/elements/Code.d.ts +9 -0
  25. package/dist/types/elements/Divider.d.ts +7 -0
  26. package/dist/types/elements/Emphasis.d.ts +9 -0
  27. package/dist/types/elements/Figure.d.ts +17 -0
  28. package/dist/types/elements/Icon.d.ts +1 -0
  29. package/dist/types/elements/Link.d.ts +10 -0
  30. package/dist/types/elements/LinkButton.d.ts +8 -0
  31. package/dist/types/elements/ListItem.d.ts +9 -0
  32. package/dist/types/elements/Notification.d.ts +31 -0
  33. package/dist/types/elements/OrderedList.d.ts +9 -0
  34. package/dist/types/elements/Paragraph.d.ts +9 -0
  35. package/dist/types/elements/Pre.d.ts +9 -0
  36. package/dist/types/elements/Span.d.ts +9 -0
  37. package/dist/types/elements/Strong.d.ts +9 -0
  38. package/dist/types/elements/UnorderedList.d.ts +9 -0
  39. package/dist/types/form/Autocomplete.d.ts +42 -0
  40. package/dist/types/form/Checkbox.d.ts +7 -2
  41. package/dist/types/form/Checkboxes.d.ts +6 -1
  42. package/dist/types/form/DateInput.d.ts +26 -0
  43. package/dist/types/form/DateInputBase.d.ts +42 -0
  44. package/dist/types/form/DateTimeInput.d.ts +26 -0
  45. package/dist/types/form/DateTimeInputBase.d.ts +50 -0
  46. package/dist/types/form/Field.d.ts +2 -1
  47. package/dist/types/form/File.d.ts +3 -2
  48. package/dist/types/form/FormContext.d.ts +22 -0
  49. package/dist/types/form/Input.d.ts +22 -11
  50. package/dist/types/form/InputBase.d.ts +16 -0
  51. package/dist/types/form/Numberinput.d.ts +30 -0
  52. package/dist/types/form/Radio.d.ts +7 -2
  53. package/dist/types/form/Radios.d.ts +6 -1
  54. package/dist/types/form/Rate.d.ts +38 -0
  55. package/dist/types/form/Select.d.ts +18 -11
  56. package/dist/types/form/SelectBase.d.ts +19 -0
  57. package/dist/types/form/Slider.d.ts +49 -0
  58. package/dist/types/form/Switch.d.ts +17 -0
  59. package/dist/types/form/Taginput.d.ts +54 -0
  60. package/dist/types/form/TextArea.d.ts +13 -14
  61. package/dist/types/form/TextAreaBase.d.ts +19 -0
  62. package/dist/types/form/TimeInput.d.ts +26 -0
  63. package/dist/types/form/TimeInputBase.d.ts +44 -0
  64. package/dist/types/form/_pickerInternals/Calendar.d.ts +26 -0
  65. package/dist/types/form/_pickerInternals/PickerPopover.d.ts +20 -0
  66. package/dist/types/form/_pickerInternals/TimeWheels.d.ts +29 -0
  67. package/dist/types/form/_pickerInternals/audioTick.d.ts +3 -0
  68. package/dist/types/form/_pickerInternals/dateUtils.d.ts +39 -0
  69. package/dist/types/form/_pickerInternals/formatters.d.ts +13 -0
  70. package/dist/types/form/_pickerInternals/haptics.d.ts +1 -0
  71. package/dist/types/form/_pickerInternals/pickerTypes.d.ts +31 -0
  72. package/dist/types/form/_pickerInternals/segmentMap.d.ts +20 -0
  73. package/dist/types/form/_pickerInternals/useFocusTrap.d.ts +7 -0
  74. package/dist/types/form/_pickerInternals/useNativeMobilePicker.d.ts +10 -0
  75. package/dist/types/form/_pickerInternals/useSegmentedEntry.d.ts +45 -0
  76. package/dist/types/form/fieldProps.d.ts +12 -0
  77. package/dist/types/helpers/bulmaClassHelpers.d.ts +35 -0
  78. package/dist/types/helpers/useBulmaClasses.d.ts +16 -83
  79. package/dist/types/helpers/useColorClasses.d.ts +8 -0
  80. package/dist/types/helpers/useFlexboxClasses.d.ts +12 -0
  81. package/dist/types/helpers/useOtherClasses.d.ts +15 -0
  82. package/dist/types/helpers/useSpacingClasses.d.ts +18 -0
  83. package/dist/types/helpers/useTypographyClasses.d.ts +19 -0
  84. package/dist/types/helpers/useVisibilityClasses.d.ts +10 -0
  85. package/dist/types/index.d.ts +53 -3
  86. package/dist/versions/bestax-bulma-prefixed.css +3 -0
  87. package/dist/versions/bestax-bulma-prefixed.css.map +1 -0
  88. package/dist/versions/bestax-bulma-prefixed.js +1 -0
  89. package/dist/versions/bestax-no-dark-mode.css +3 -0
  90. package/dist/versions/bestax-no-dark-mode.css.map +1 -0
  91. package/dist/versions/bestax-no-dark-mode.js +1 -0
  92. package/dist/versions/bestax-no-helpers-prefixed.css +3 -0
  93. package/dist/versions/bestax-no-helpers-prefixed.css.map +1 -0
  94. package/dist/versions/bestax-no-helpers-prefixed.js +1 -0
  95. package/dist/versions/bestax-no-helpers.css +3 -0
  96. package/dist/versions/bestax-no-helpers.css.map +1 -0
  97. package/dist/versions/bestax-no-helpers.js +1 -0
  98. package/dist/versions/bestax-prefixed.css +3 -0
  99. package/dist/versions/bestax-prefixed.css.map +1 -0
  100. package/dist/versions/bestax-prefixed.js +1 -0
  101. package/package.json +100 -21
  102. package/src/scss/_mixins.scss +215 -0
  103. package/src/scss/_variables.scss +94 -0
  104. package/src/scss/bestax.scss +18 -0
  105. package/src/scss/components/_carousel.scss +580 -0
  106. package/src/scss/components/_collapse.scss +126 -0
  107. package/src/scss/components/_dialog.scss +134 -0
  108. package/src/scss/components/_index.scss +13 -0
  109. package/src/scss/components/_loading.scss +231 -0
  110. package/src/scss/components/_sidebar.scss +347 -0
  111. package/src/scss/components/_steps.scss +459 -0
  112. package/src/scss/components/_tabs.scss +147 -0
  113. package/src/scss/components/_toast.scss +244 -0
  114. package/src/scss/components/_tooltip.scss +250 -0
  115. package/src/scss/elements/_index.scss +5 -0
  116. package/src/scss/elements/_linkbutton.scss +77 -0
  117. package/src/scss/extras.scss +24 -0
  118. package/src/scss/form/_autocomplete.scss +261 -0
  119. package/src/scss/form/_checkbox.scss +217 -0
  120. package/src/scss/form/_dateinput.scss +292 -0
  121. package/src/scss/form/_datetimeinput.scss +191 -0
  122. package/src/scss/form/_index.scss +16 -0
  123. package/src/scss/form/_numberinput.scss +176 -0
  124. package/src/scss/form/_picker-popover.scss +185 -0
  125. package/src/scss/form/_radio.scss +196 -0
  126. package/src/scss/form/_rate.scss +307 -0
  127. package/src/scss/form/_slider.scss +630 -0
  128. package/src/scss/form/_switch.scss +314 -0
  129. package/src/scss/form/_taginput.scss +356 -0
  130. package/src/scss/form/_timeinput.scss +374 -0
  131. package/src/scss/helpers/_cursor.scss +5 -0
  132. package/src/scss/helpers/_index.scss +2 -0
  133. package/src/scss/helpers/_sizing.scss +5 -0
  134. package/src/scss/versions/bestax-bulma-prefixed.scss +15 -0
  135. package/src/scss/versions/bestax-no-dark-mode.scss +32 -0
  136. package/src/scss/versions/bestax-no-helpers-prefixed.scss +22 -0
  137. package/src/scss/versions/bestax-no-helpers.scss +23 -0
  138. package/src/scss/versions/bestax-prefixed.scss +15 -0
@@ -0,0 +1,630 @@
1
+ // Slider Component Styles
2
+ // A range slider input with ticks, range mode, vertical orientation
3
+ // Follows Bulma v1 CSS variable convention (see _checkbox.scss)
4
+
5
+ @use "bulma/sass/utilities/initial-variables" as iv;
6
+ @use "bulma/sass/utilities/css-variables" as cv;
7
+
8
+ // Slider-specific SCSS variables
9
+ $slider-track-height: 0.5rem !default;
10
+ $slider-track-height-small: 0.375rem !default;
11
+ $slider-track-height-medium: 0.625rem !default;
12
+ $slider-track-height-large: 0.75rem !default;
13
+ $slider-thumb-size: 1.25rem !default;
14
+ $slider-thumb-size-small: 1rem !default;
15
+ $slider-thumb-size-medium: 1.5rem !default;
16
+ $slider-thumb-size-large: 1.75rem !default;
17
+ $slider-track-color: cv.getVar("border") !default;
18
+ $slider-fill-color: cv.getVar("primary") !default;
19
+ $slider-thumb-color: cv.getVar("scheme-main") !default;
20
+ $slider-thumb-border: cv.getVar("border") !default;
21
+ $slider-thumb-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !default;
22
+ $slider-radius: cv.getVar("radius") !default;
23
+ $slider-disabled-opacity: 0.5 !default;
24
+ $slider-transition-duration: cv.getVar("duration") !default;
25
+ // Tooltip colors match the slider fill color
26
+ $slider-output-background: cv.getVar("slider-fill-color") !default;
27
+ $slider-output-color: cv.getVar("scheme-main") !default;
28
+ $slider-output-font-size: cv.getVar("size-small") !default;
29
+ $slider-output-font-weight: cv.getVar("weight-medium") !default;
30
+ // Tick variables
31
+ $slider-tick-width: 2px !default;
32
+ $slider-tick-height: 1rem !default;
33
+ $slider-tick-color: cv.getVar("grey-light") !default;
34
+ $slider-tick-opacity: 0.5 !default;
35
+ $slider-tick-label-font-size: 0.75rem !default;
36
+ $slider-tick-label-color: cv.getVar("text-light") !default;
37
+ // Vertical
38
+ $slider-vertical-height: 200px !default;
39
+
40
+ // Register CSS custom properties
41
+ .#{iv.$class-prefix}slider {
42
+ @include cv.register-vars(
43
+ (
44
+ "slider-track-height": #{$slider-track-height},
45
+ "slider-track-height-small": #{$slider-track-height-small},
46
+ "slider-track-height-medium": #{$slider-track-height-medium},
47
+ "slider-track-height-large": #{$slider-track-height-large},
48
+ "slider-thumb-size": #{$slider-thumb-size},
49
+ "slider-thumb-size-small": #{$slider-thumb-size-small},
50
+ "slider-thumb-size-medium": #{$slider-thumb-size-medium},
51
+ "slider-thumb-size-large": #{$slider-thumb-size-large},
52
+ "slider-track-color": #{$slider-track-color},
53
+ "slider-fill-color": #{$slider-fill-color},
54
+ "slider-thumb-color": #{$slider-thumb-color},
55
+ "slider-thumb-border": #{$slider-thumb-border},
56
+ "slider-thumb-shadow": #{$slider-thumb-shadow},
57
+ "slider-radius": #{$slider-radius},
58
+ "slider-disabled-opacity": #{$slider-disabled-opacity},
59
+ "slider-transition-duration": #{$slider-transition-duration},
60
+ "slider-output-background": #{$slider-output-background},
61
+ "slider-output-color": #{$slider-output-color},
62
+ "slider-output-font-size": #{$slider-output-font-size},
63
+ "slider-output-font-weight": #{$slider-output-font-weight},
64
+ "slider-tick-width": #{$slider-tick-width},
65
+ "slider-tick-height": #{$slider-tick-height},
66
+ "slider-tick-color": #{$slider-tick-color},
67
+ "slider-tick-opacity": #{$slider-tick-opacity},
68
+ "slider-tick-label-font-size": #{$slider-tick-label-font-size},
69
+ "slider-tick-label-color": #{$slider-tick-label-color},
70
+ "slider-vertical-height": #{$slider-vertical-height},
71
+ )
72
+ );
73
+ }
74
+
75
+ // Main slider wrapper
76
+ .#{iv.$class-prefix}slider {
77
+ position: relative;
78
+ width: 100%;
79
+ padding: 0.5rem 0;
80
+ }
81
+
82
+ // Range input
83
+ .#{iv.$class-prefix}slider-input {
84
+ -webkit-appearance: none;
85
+ appearance: none;
86
+ width: 100%;
87
+ height: cv.getVar("slider-track-height");
88
+ background: linear-gradient(
89
+ to right,
90
+ cv.getVar("slider-fill-color") 0%,
91
+ cv.getVar("slider-fill-color") var(--slider-progress, 0%),
92
+ cv.getVar("slider-track-color") var(--slider-progress, 0%),
93
+ cv.getVar("slider-track-color") 100%
94
+ );
95
+ border-radius: cv.getVar("slider-radius");
96
+ outline: none;
97
+ cursor: pointer;
98
+ transition-property: background;
99
+ transition-duration: cv.getVar("slider-transition-duration");
100
+ transition-timing-function: ease;
101
+
102
+ // Webkit thumb
103
+ &::-webkit-slider-thumb {
104
+ -webkit-appearance: none;
105
+ appearance: none;
106
+ width: cv.getVar("slider-thumb-size");
107
+ height: cv.getVar("slider-thumb-size");
108
+ background: cv.getVar("slider-thumb-color");
109
+ border: 2px solid cv.getVar("slider-thumb-border");
110
+ border-radius: 50%;
111
+ cursor: grab;
112
+ box-shadow: cv.getVar("slider-thumb-shadow");
113
+ transition-property: transform, border-color, box-shadow;
114
+ transition-duration: cv.getVar("slider-transition-duration");
115
+ transition-timing-function: ease;
116
+
117
+ &:hover {
118
+ transform: scale(1.1);
119
+ border-color: cv.getVar("slider-fill-color");
120
+ }
121
+
122
+ &:active {
123
+ cursor: grabbing;
124
+ transform: scale(1.15);
125
+ }
126
+ }
127
+
128
+ // Firefox thumb
129
+ &::-moz-range-thumb {
130
+ width: cv.getVar("slider-thumb-size");
131
+ height: cv.getVar("slider-thumb-size");
132
+ background: cv.getVar("slider-thumb-color");
133
+ border: 2px solid cv.getVar("slider-thumb-border");
134
+ border-radius: 50%;
135
+ cursor: grab;
136
+ box-shadow: cv.getVar("slider-thumb-shadow");
137
+ transition-property: transform, border-color, box-shadow;
138
+ transition-duration: cv.getVar("slider-transition-duration");
139
+ transition-timing-function: ease;
140
+
141
+ &:hover {
142
+ transform: scale(1.1);
143
+ border-color: cv.getVar("slider-fill-color");
144
+ }
145
+
146
+ &:active {
147
+ cursor: grabbing;
148
+ transform: scale(1.15);
149
+ }
150
+ }
151
+
152
+ // Firefox track
153
+ &::-moz-range-track {
154
+ background: transparent;
155
+ border: none;
156
+ }
157
+
158
+ // Focus styles
159
+ &:focus {
160
+ outline: none;
161
+
162
+ &::-webkit-slider-thumb {
163
+ border-color: cv.getVar("slider-fill-color");
164
+ box-shadow: 0 0 0 3px hsla(cv.getVar("primary-h"), cv.getVar("primary-s"), 50%, 0.3);
165
+ }
166
+
167
+ &::-moz-range-thumb {
168
+ border-color: cv.getVar("slider-fill-color");
169
+ }
170
+ }
171
+
172
+ // Disabled
173
+ .#{iv.$class-prefix}slider.#{iv.$class-prefix}is-disabled & {
174
+ cursor: not-allowed;
175
+ opacity: cv.getVar("slider-disabled-opacity");
176
+
177
+ &::-webkit-slider-thumb {
178
+ cursor: not-allowed;
179
+
180
+ &:hover {
181
+ transform: none;
182
+ }
183
+ }
184
+
185
+ &::-moz-range-thumb {
186
+ cursor: not-allowed;
187
+
188
+ &:hover {
189
+ transform: none;
190
+ }
191
+ }
192
+ }
193
+ }
194
+
195
+ // Output tooltip
196
+ .#{iv.$class-prefix}slider-output {
197
+ position: absolute;
198
+ top: -2rem;
199
+ // Default transform; overridden by inline style when nudge is applied
200
+ transform: translateX(-50%);
201
+ padding: 0.25rem 0.5rem;
202
+ font-size: cv.getVar("slider-output-font-size");
203
+ font-weight: cv.getVar("slider-output-font-weight");
204
+ background: cv.getVar("slider-output-background");
205
+ color: cv.getVar("slider-output-color");
206
+ border-radius: cv.getVar("slider-radius");
207
+ white-space: nowrap;
208
+ pointer-events: none;
209
+ opacity: 0;
210
+ visibility: hidden;
211
+ transition-property: opacity, visibility;
212
+ transition-duration: cv.getVar("slider-transition-duration");
213
+ transition-timing-function: ease;
214
+
215
+ &::after {
216
+ content: "";
217
+ position: absolute;
218
+ top: 100%;
219
+ // Uses CSS var set by inline style; falls back to 50% (centered).
220
+ // Clamp so the arrow stays within the tooltip (5px = arrow half-width).
221
+ left: clamp(5px, var(--slider-output-arrow-offset, 50%), calc(100% - 5px));
222
+ transform: translateX(-50%);
223
+ border: 5px solid transparent;
224
+ border-top-color: cv.getVar("slider-output-background");
225
+ }
226
+
227
+ &.#{iv.$class-prefix}is-visible {
228
+ opacity: 1;
229
+ visibility: visible;
230
+ }
231
+
232
+ // Flipped: tooltip below the thumb when no space above
233
+ &.#{iv.$class-prefix}is-flipped {
234
+ top: auto;
235
+ bottom: -2rem;
236
+
237
+ &::after {
238
+ top: auto;
239
+ bottom: 100%;
240
+ border-top-color: transparent;
241
+ border-bottom-color: cv.getVar("slider-output-background");
242
+ }
243
+ }
244
+ }
245
+
246
+ // Tooltip always visible mode
247
+ .#{iv.$class-prefix}slider.#{iv.$class-prefix}has-output-always {
248
+ .#{iv.$class-prefix}slider-output {
249
+ opacity: 1;
250
+ visibility: visible;
251
+ }
252
+ }
253
+
254
+ // --- Ticks ---
255
+ // We overlay the ticks on the input by matching its position exactly.
256
+ // The input is the first child in flow; ticks overlay it via the same
257
+ // padding offset, then each tick centers itself on the track midpoint.
258
+ .#{iv.$class-prefix}slider-ticks {
259
+ position: absolute;
260
+ left: 0;
261
+ right: 0;
262
+ // Match the input's track center: top padding + half thumb size + half track height.
263
+ top: calc(0.5rem + cv.getVar("slider-thumb-size") / 2 + cv.getVar("slider-track-height") / 2);
264
+ height: 0;
265
+ pointer-events: none;
266
+ }
267
+
268
+ .#{iv.$class-prefix}slider-tick {
269
+ position: absolute;
270
+ transform: translateX(-50%);
271
+ width: cv.getVar("slider-tick-width");
272
+ height: cv.getVar("slider-tick-height");
273
+ background: cv.getVar("slider-tick-color");
274
+ opacity: cv.getVar("slider-tick-opacity");
275
+ top: calc(-1 * cv.getVar("slider-tick-height") / 2);
276
+
277
+ // Hide the tick line at endpoints but keep labels visible
278
+ &.#{iv.$class-prefix}is-endpoint {
279
+ background: transparent;
280
+ }
281
+ }
282
+
283
+ .#{iv.$class-prefix}slider-tick-label {
284
+ position: absolute;
285
+ top: 100%;
286
+ left: 50%;
287
+ transform: translateX(-50%);
288
+ margin-top: 4px;
289
+ font-size: cv.getVar("slider-tick-label-font-size");
290
+ color: cv.getVar("slider-tick-label-color");
291
+ white-space: nowrap;
292
+ opacity: 1;
293
+ }
294
+
295
+ // Extra padding when tick labels are present
296
+ .#{iv.$class-prefix}slider.#{iv.$class-prefix}has-tick-labels {
297
+ padding-bottom: 1.5rem;
298
+ }
299
+
300
+ // --- Range mode ---
301
+ .#{iv.$class-prefix}slider.#{iv.$class-prefix}is-range {
302
+ position: relative;
303
+
304
+ .#{iv.$class-prefix}slider-track {
305
+ position: absolute;
306
+ top: 50%;
307
+ left: 0;
308
+ right: 0;
309
+ height: cv.getVar("slider-track-height");
310
+ transform: translateY(-50%);
311
+ border-radius: cv.getVar("slider-radius");
312
+ background: linear-gradient(
313
+ to right,
314
+ cv.getVar("slider-track-color") 0%,
315
+ cv.getVar("slider-track-color") var(--slider-progress-low, 0%),
316
+ cv.getVar("slider-fill-color") var(--slider-progress-low, 0%),
317
+ cv.getVar("slider-fill-color") var(--slider-progress-high, 100%),
318
+ cv.getVar("slider-track-color") var(--slider-progress-high, 100%),
319
+ cv.getVar("slider-track-color") 100%
320
+ );
321
+ pointer-events: none;
322
+ }
323
+
324
+ .#{iv.$class-prefix}slider-input {
325
+ position: absolute;
326
+ top: 50%;
327
+ left: 0;
328
+ width: 100%;
329
+ height: cv.getVar("slider-track-height");
330
+ transform: translateY(-50%);
331
+ background: transparent;
332
+ pointer-events: none;
333
+ margin: 0;
334
+ padding: 0;
335
+
336
+ &::-webkit-slider-thumb {
337
+ pointer-events: auto;
338
+ }
339
+
340
+ &::-moz-range-thumb {
341
+ pointer-events: auto;
342
+ }
343
+ }
344
+
345
+ // Ensure the wrapper has enough height for thumbs
346
+ min-height: cv.getVar("slider-thumb-size");
347
+ }
348
+
349
+ // --- Vertical orientation ---
350
+ .#{iv.$class-prefix}slider.#{iv.$class-prefix}is-vertical {
351
+ width: auto;
352
+ height: cv.getVar("slider-vertical-height");
353
+ display: inline-flex;
354
+ flex-direction: column;
355
+ align-items: center;
356
+ padding: 0 0.5rem;
357
+
358
+ .#{iv.$class-prefix}slider-input {
359
+ writing-mode: vertical-lr;
360
+ direction: rtl;
361
+ height: 100%;
362
+ width: cv.getVar("slider-track-height");
363
+ background: linear-gradient(
364
+ to top,
365
+ cv.getVar("slider-fill-color") 0%,
366
+ cv.getVar("slider-fill-color") var(--slider-progress, 0%),
367
+ cv.getVar("slider-track-color") var(--slider-progress, 0%),
368
+ cv.getVar("slider-track-color") 100%
369
+ );
370
+ }
371
+
372
+ // Vertical output tooltip — positioned via inline left/right style
373
+ .#{iv.$class-prefix}slider-output {
374
+ top: auto;
375
+ transform: translateY(50%);
376
+ margin-left: 0;
377
+
378
+ // Arrow pointing left (tooltip to the right of thumb)
379
+ &::after {
380
+ top: 50%;
381
+ left: auto;
382
+ right: 100%;
383
+ transform: translateY(-50%);
384
+ border: 5px solid transparent;
385
+ border-right-color: cv.getVar("slider-output-background");
386
+ border-top-color: transparent;
387
+ }
388
+
389
+ // Flipped to left side when no space on the right
390
+ &.#{iv.$class-prefix}is-flipped-left {
391
+ &::after {
392
+ right: auto;
393
+ left: 100%;
394
+ border-right-color: transparent;
395
+ border-left-color: cv.getVar("slider-output-background");
396
+ }
397
+ }
398
+ }
399
+
400
+ // Vertical ticks
401
+ .#{iv.$class-prefix}slider-ticks {
402
+ top: 0;
403
+ bottom: 0;
404
+ left: 50%;
405
+ right: auto;
406
+ width: 0;
407
+ height: auto;
408
+ }
409
+
410
+ .#{iv.$class-prefix}slider-tick {
411
+ transform: translateY(50%);
412
+ top: auto;
413
+ // Swap dimensions for vertical: width becomes height, height becomes width
414
+ width: cv.getVar("slider-tick-height");
415
+ height: cv.getVar("slider-tick-width");
416
+ left: calc(-1 * cv.getVar("slider-tick-height") / 2);
417
+ }
418
+
419
+ .#{iv.$class-prefix}slider-tick-label {
420
+ top: auto;
421
+ left: calc(cv.getVar("slider-tick-height") / 2 + 4px);
422
+ transform: translateY(50%);
423
+ }
424
+
425
+ // Vertical range
426
+ &.#{iv.$class-prefix}is-range {
427
+ .#{iv.$class-prefix}slider-track {
428
+ top: 0;
429
+ bottom: 0;
430
+ left: 50%;
431
+ right: auto;
432
+ width: cv.getVar("slider-track-height");
433
+ height: 100%;
434
+ transform: translateX(-50%);
435
+ background: linear-gradient(
436
+ to top,
437
+ cv.getVar("slider-track-color") 0%,
438
+ cv.getVar("slider-track-color") var(--slider-progress-low, 0%),
439
+ cv.getVar("slider-fill-color") var(--slider-progress-low, 0%),
440
+ cv.getVar("slider-fill-color") var(--slider-progress-high, 100%),
441
+ cv.getVar("slider-track-color") var(--slider-progress-high, 100%),
442
+ cv.getVar("slider-track-color") 100%
443
+ );
444
+ }
445
+
446
+ .#{iv.$class-prefix}slider-input {
447
+ writing-mode: vertical-lr;
448
+ direction: rtl;
449
+ height: 100%;
450
+ width: cv.getVar("slider-track-height");
451
+ top: 0;
452
+ left: 50%;
453
+ transform: translateX(-50%);
454
+ }
455
+ }
456
+ }
457
+
458
+ // Sizes
459
+ .#{iv.$class-prefix}slider.#{iv.$class-prefix}is-small {
460
+ .#{iv.$class-prefix}slider-input {
461
+ height: cv.getVar("slider-track-height-small");
462
+
463
+ &::-webkit-slider-thumb {
464
+ width: cv.getVar("slider-thumb-size-small");
465
+ height: cv.getVar("slider-thumb-size-small");
466
+ }
467
+
468
+ &::-moz-range-thumb {
469
+ width: cv.getVar("slider-thumb-size-small");
470
+ height: cv.getVar("slider-thumb-size-small");
471
+ }
472
+ }
473
+ }
474
+
475
+ .#{iv.$class-prefix}slider.#{iv.$class-prefix}is-medium {
476
+ .#{iv.$class-prefix}slider-input {
477
+ height: cv.getVar("slider-track-height-medium");
478
+
479
+ &::-webkit-slider-thumb {
480
+ width: cv.getVar("slider-thumb-size-medium");
481
+ height: cv.getVar("slider-thumb-size-medium");
482
+ }
483
+
484
+ &::-moz-range-thumb {
485
+ width: cv.getVar("slider-thumb-size-medium");
486
+ height: cv.getVar("slider-thumb-size-medium");
487
+ }
488
+ }
489
+ }
490
+
491
+ .#{iv.$class-prefix}slider.#{iv.$class-prefix}is-large {
492
+ .#{iv.$class-prefix}slider-input {
493
+ height: cv.getVar("slider-track-height-large");
494
+
495
+ &::-webkit-slider-thumb {
496
+ width: cv.getVar("slider-thumb-size-large");
497
+ height: cv.getVar("slider-thumb-size-large");
498
+ }
499
+
500
+ &::-moz-range-thumb {
501
+ width: cv.getVar("slider-thumb-size-large");
502
+ height: cv.getVar("slider-thumb-size-large");
503
+ }
504
+ }
505
+ }
506
+
507
+ // Color variants
508
+ @each $name in "primary", "link", "info", "success", "warning", "danger" {
509
+ .#{iv.$class-prefix}slider.#{iv.$class-prefix}is-#{$name} {
510
+ @include cv.register-vars(
511
+ (
512
+ "slider-fill-color": #{cv.getVar($name)},
513
+ )
514
+ );
515
+ }
516
+ }
517
+
518
+ // Rounded track
519
+ .#{iv.$class-prefix}slider.#{iv.$class-prefix}is-rounded .#{iv.$class-prefix}slider-input {
520
+ border-radius: cv.getVar("radius-rounded");
521
+ }
522
+
523
+ // Circle thumb (more prominent)
524
+ .#{iv.$class-prefix}slider.#{iv.$class-prefix}is-circle {
525
+ .#{iv.$class-prefix}slider-input::-webkit-slider-thumb {
526
+ border-radius: 50%;
527
+ width: calc(cv.getVar("slider-thumb-size") * 1.2);
528
+ height: calc(cv.getVar("slider-thumb-size") * 1.2);
529
+ }
530
+
531
+ .#{iv.$class-prefix}slider-input::-moz-range-thumb {
532
+ border-radius: 50%;
533
+ width: calc(cv.getVar("slider-thumb-size") * 1.2);
534
+ height: calc(cv.getVar("slider-thumb-size") * 1.2);
535
+ }
536
+
537
+ &.#{iv.$class-prefix}is-small .#{iv.$class-prefix}slider-input {
538
+ &::-webkit-slider-thumb,
539
+ &::-moz-range-thumb {
540
+ width: calc(cv.getVar("slider-thumb-size-small") * 1.2);
541
+ height: calc(cv.getVar("slider-thumb-size-small") * 1.2);
542
+ }
543
+ }
544
+
545
+ &.#{iv.$class-prefix}is-medium .#{iv.$class-prefix}slider-input {
546
+ &::-webkit-slider-thumb,
547
+ &::-moz-range-thumb {
548
+ width: calc(cv.getVar("slider-thumb-size-medium") * 1.2);
549
+ height: calc(cv.getVar("slider-thumb-size-medium") * 1.2);
550
+ }
551
+ }
552
+
553
+ &.#{iv.$class-prefix}is-large .#{iv.$class-prefix}slider-input {
554
+ &::-webkit-slider-thumb,
555
+ &::-moz-range-thumb {
556
+ width: calc(cv.getVar("slider-thumb-size-large") * 1.2);
557
+ height: calc(cv.getVar("slider-thumb-size-large") * 1.2);
558
+ }
559
+ }
560
+ }
561
+
562
+ // High Contrast Mode support
563
+ @media (forced-colors: active) {
564
+ .#{iv.$class-prefix}slider-input {
565
+ &::-webkit-slider-thumb {
566
+ background: ButtonText;
567
+ border-color: ButtonText;
568
+ }
569
+
570
+ &::-moz-range-thumb {
571
+ background: ButtonText;
572
+ border-color: ButtonText;
573
+ }
574
+
575
+ &:focus::-webkit-slider-thumb {
576
+ border-color: Highlight;
577
+ }
578
+
579
+ &:focus::-moz-range-thumb {
580
+ border-color: Highlight;
581
+ }
582
+ }
583
+
584
+ .#{iv.$class-prefix}slider.#{iv.$class-prefix}is-disabled .#{iv.$class-prefix}slider-input {
585
+ &::-webkit-slider-thumb {
586
+ background: GrayText;
587
+ border-color: GrayText;
588
+ }
589
+
590
+ &::-moz-range-thumb {
591
+ background: GrayText;
592
+ border-color: GrayText;
593
+ }
594
+ }
595
+
596
+ .#{iv.$class-prefix}slider-tick {
597
+ background: ButtonText;
598
+ }
599
+
600
+ .#{iv.$class-prefix}slider-tick-label {
601
+ color: ButtonText;
602
+ }
603
+
604
+ .#{iv.$class-prefix}slider.#{iv.$class-prefix}is-range .#{iv.$class-prefix}slider-track {
605
+ forced-color-adjust: none;
606
+ }
607
+ }
608
+
609
+ // Reduced motion
610
+ @media (prefers-reduced-motion: reduce) {
611
+ .#{iv.$class-prefix}slider-input {
612
+ transition: none;
613
+
614
+ &::-webkit-slider-thumb {
615
+ transition: none;
616
+ }
617
+
618
+ &::-moz-range-thumb {
619
+ transition: none;
620
+ }
621
+ }
622
+
623
+ .#{iv.$class-prefix}slider-output {
624
+ transition: none;
625
+ }
626
+
627
+ .#{iv.$class-prefix}slider-tick {
628
+ transition: none;
629
+ }
630
+ }