@allxsmith/bestax-bulma 2.6.2 → 3.0.2

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 (139) 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/Card.d.ts +1 -1
  13. package/dist/types/components/Carousel.d.ts +34 -0
  14. package/dist/types/components/Collapse.d.ts +17 -0
  15. package/dist/types/components/Dialog.d.ts +47 -0
  16. package/dist/types/components/Loading.d.ts +18 -0
  17. package/dist/types/components/Navbar.d.ts +10 -0
  18. package/dist/types/components/Panel.d.ts +2 -4
  19. package/dist/types/components/Sidebar.d.ts +37 -0
  20. package/dist/types/components/Steps.d.ts +45 -0
  21. package/dist/types/components/Tabs.d.ts +42 -6
  22. package/dist/types/components/Toast.d.ts +46 -0
  23. package/dist/types/components/Tooltip.d.ts +22 -0
  24. package/dist/types/elements/Button.d.ts +1 -1
  25. package/dist/types/elements/Code.d.ts +9 -0
  26. package/dist/types/elements/Divider.d.ts +7 -0
  27. package/dist/types/elements/Emphasis.d.ts +9 -0
  28. package/dist/types/elements/Figure.d.ts +17 -0
  29. package/dist/types/elements/Icon.d.ts +2 -1
  30. package/dist/types/elements/Link.d.ts +10 -0
  31. package/dist/types/elements/LinkButton.d.ts +8 -0
  32. package/dist/types/elements/ListItem.d.ts +9 -0
  33. package/dist/types/elements/Notification.d.ts +31 -0
  34. package/dist/types/elements/OrderedList.d.ts +9 -0
  35. package/dist/types/elements/Paragraph.d.ts +9 -0
  36. package/dist/types/elements/Pre.d.ts +9 -0
  37. package/dist/types/elements/Span.d.ts +9 -0
  38. package/dist/types/elements/Strong.d.ts +9 -0
  39. package/dist/types/elements/UnorderedList.d.ts +9 -0
  40. package/dist/types/form/Autocomplete.d.ts +42 -0
  41. package/dist/types/form/Checkbox.d.ts +7 -2
  42. package/dist/types/form/Checkboxes.d.ts +6 -1
  43. package/dist/types/form/DateInput.d.ts +26 -0
  44. package/dist/types/form/DateInputBase.d.ts +42 -0
  45. package/dist/types/form/DateTimeInput.d.ts +26 -0
  46. package/dist/types/form/DateTimeInputBase.d.ts +50 -0
  47. package/dist/types/form/Field.d.ts +2 -1
  48. package/dist/types/form/File.d.ts +3 -2
  49. package/dist/types/form/FormContext.d.ts +22 -0
  50. package/dist/types/form/Input.d.ts +22 -11
  51. package/dist/types/form/InputBase.d.ts +16 -0
  52. package/dist/types/form/Numberinput.d.ts +30 -0
  53. package/dist/types/form/Radio.d.ts +7 -2
  54. package/dist/types/form/Radios.d.ts +6 -1
  55. package/dist/types/form/Rate.d.ts +38 -0
  56. package/dist/types/form/Select.d.ts +18 -11
  57. package/dist/types/form/SelectBase.d.ts +19 -0
  58. package/dist/types/form/Slider.d.ts +49 -0
  59. package/dist/types/form/Switch.d.ts +17 -0
  60. package/dist/types/form/Taginput.d.ts +54 -0
  61. package/dist/types/form/TextArea.d.ts +13 -14
  62. package/dist/types/form/TextAreaBase.d.ts +19 -0
  63. package/dist/types/form/TimeInput.d.ts +26 -0
  64. package/dist/types/form/TimeInputBase.d.ts +44 -0
  65. package/dist/types/form/_pickerInternals/Calendar.d.ts +26 -0
  66. package/dist/types/form/_pickerInternals/PickerPopover.d.ts +20 -0
  67. package/dist/types/form/_pickerInternals/TimeWheels.d.ts +29 -0
  68. package/dist/types/form/_pickerInternals/audioTick.d.ts +3 -0
  69. package/dist/types/form/_pickerInternals/dateUtils.d.ts +39 -0
  70. package/dist/types/form/_pickerInternals/formatters.d.ts +13 -0
  71. package/dist/types/form/_pickerInternals/haptics.d.ts +1 -0
  72. package/dist/types/form/_pickerInternals/pickerTypes.d.ts +31 -0
  73. package/dist/types/form/_pickerInternals/segmentMap.d.ts +20 -0
  74. package/dist/types/form/_pickerInternals/useFocusTrap.d.ts +7 -0
  75. package/dist/types/form/_pickerInternals/useNativeMobilePicker.d.ts +10 -0
  76. package/dist/types/form/_pickerInternals/useSegmentedEntry.d.ts +45 -0
  77. package/dist/types/form/fieldProps.d.ts +12 -0
  78. package/dist/types/helpers/bulmaClassHelpers.d.ts +35 -0
  79. package/dist/types/helpers/useBulmaClasses.d.ts +16 -83
  80. package/dist/types/helpers/useColorClasses.d.ts +8 -0
  81. package/dist/types/helpers/useFlexboxClasses.d.ts +12 -0
  82. package/dist/types/helpers/useOtherClasses.d.ts +15 -0
  83. package/dist/types/helpers/useSpacingClasses.d.ts +18 -0
  84. package/dist/types/helpers/useTypographyClasses.d.ts +19 -0
  85. package/dist/types/helpers/useVisibilityClasses.d.ts +10 -0
  86. package/dist/types/index.d.ts +53 -3
  87. package/dist/versions/bestax-bulma-prefixed.css +3 -0
  88. package/dist/versions/bestax-bulma-prefixed.css.map +1 -0
  89. package/dist/versions/bestax-bulma-prefixed.js +1 -0
  90. package/dist/versions/bestax-no-dark-mode.css +3 -0
  91. package/dist/versions/bestax-no-dark-mode.css.map +1 -0
  92. package/dist/versions/bestax-no-dark-mode.js +1 -0
  93. package/dist/versions/bestax-no-helpers-prefixed.css +3 -0
  94. package/dist/versions/bestax-no-helpers-prefixed.css.map +1 -0
  95. package/dist/versions/bestax-no-helpers-prefixed.js +1 -0
  96. package/dist/versions/bestax-no-helpers.css +3 -0
  97. package/dist/versions/bestax-no-helpers.css.map +1 -0
  98. package/dist/versions/bestax-no-helpers.js +1 -0
  99. package/dist/versions/bestax-prefixed.css +3 -0
  100. package/dist/versions/bestax-prefixed.css.map +1 -0
  101. package/dist/versions/bestax-prefixed.js +1 -0
  102. package/package.json +109 -35
  103. package/src/scss/_mixins.scss +215 -0
  104. package/src/scss/_variables.scss +94 -0
  105. package/src/scss/bestax.scss +18 -0
  106. package/src/scss/components/_carousel.scss +580 -0
  107. package/src/scss/components/_collapse.scss +126 -0
  108. package/src/scss/components/_dialog.scss +134 -0
  109. package/src/scss/components/_index.scss +13 -0
  110. package/src/scss/components/_loading.scss +231 -0
  111. package/src/scss/components/_sidebar.scss +347 -0
  112. package/src/scss/components/_steps.scss +459 -0
  113. package/src/scss/components/_tabs.scss +147 -0
  114. package/src/scss/components/_toast.scss +244 -0
  115. package/src/scss/components/_tooltip.scss +250 -0
  116. package/src/scss/elements/_index.scss +5 -0
  117. package/src/scss/elements/_linkbutton.scss +77 -0
  118. package/src/scss/extras.scss +24 -0
  119. package/src/scss/form/_autocomplete.scss +261 -0
  120. package/src/scss/form/_checkbox.scss +217 -0
  121. package/src/scss/form/_dateinput.scss +292 -0
  122. package/src/scss/form/_datetimeinput.scss +191 -0
  123. package/src/scss/form/_index.scss +16 -0
  124. package/src/scss/form/_numberinput.scss +176 -0
  125. package/src/scss/form/_picker-popover.scss +185 -0
  126. package/src/scss/form/_radio.scss +196 -0
  127. package/src/scss/form/_rate.scss +307 -0
  128. package/src/scss/form/_slider.scss +630 -0
  129. package/src/scss/form/_switch.scss +314 -0
  130. package/src/scss/form/_taginput.scss +356 -0
  131. package/src/scss/form/_timeinput.scss +374 -0
  132. package/src/scss/helpers/_cursor.scss +5 -0
  133. package/src/scss/helpers/_index.scss +2 -0
  134. package/src/scss/helpers/_sizing.scss +5 -0
  135. package/src/scss/versions/bestax-bulma-prefixed.scss +15 -0
  136. package/src/scss/versions/bestax-no-dark-mode.scss +32 -0
  137. package/src/scss/versions/bestax-no-helpers-prefixed.scss +22 -0
  138. package/src/scss/versions/bestax-no-helpers.scss +23 -0
  139. package/src/scss/versions/bestax-prefixed.scss +15 -0
@@ -0,0 +1,459 @@
1
+ // Steps Component Styles
2
+ // A multi-step progress indicator
3
+
4
+ @use "bulma/sass/utilities/initial-variables" as iv;
5
+ @use "bulma/sass/utilities/css-variables" as cv;
6
+ @use '../variables' as *;
7
+ @use '../mixins' as *;
8
+
9
+ // Steps-specific SCSS variables
10
+ $steps-marker-size: 2rem !default;
11
+ $steps-marker-size-small: 1.5rem !default;
12
+ $steps-marker-size-medium: 2.5rem !default;
13
+ $steps-marker-size-large: 3rem !default;
14
+ $steps-divider-height: 0.2em !default;
15
+ $steps-default-color: cv.getVar("grey-light") !default;
16
+ $steps-marker-background: cv.getVar("scheme-main") !default;
17
+ $steps-marker-font-size: cv.getVar("size-small") !default;
18
+ $steps-marker-font-weight: cv.getVar("weight-bold") !default;
19
+ $steps-title-size: cv.getVar("size-small") !default;
20
+ $steps-title-weight: cv.getVar("weight-medium") !default;
21
+ $steps-title-color: cv.getVar("text-weak") !default;
22
+ $steps-title-active-color: cv.getVar("text-strong") !default;
23
+ $steps-title-active-weight: cv.getVar("weight-semibold") !default;
24
+ $steps-content-margin-top: 0.5rem !default;
25
+ $steps-vertical-padding: 1.5rem !default;
26
+ $steps-vertical-content-margin-left: 1rem !default;
27
+ $steps-animation-duration: 0.3s !default;
28
+ $steps-navigation-margin-top: 1rem !default;
29
+
30
+ // Register CSS variables
31
+ .#{iv.$class-prefix}steps {
32
+ @include cv.register-vars(
33
+ (
34
+ "steps-marker-size": #{$steps-marker-size},
35
+ "steps-marker-size-small": #{$steps-marker-size-small},
36
+ "steps-marker-size-medium": #{$steps-marker-size-medium},
37
+ "steps-marker-size-large": #{$steps-marker-size-large},
38
+ "steps-divider-height": #{$steps-divider-height},
39
+ "steps-default-color": #{$steps-default-color},
40
+ "steps-marker-background": #{$steps-marker-background},
41
+ "steps-marker-font-size": #{$steps-marker-font-size},
42
+ "steps-marker-font-weight": #{$steps-marker-font-weight},
43
+ "steps-title-size": #{$steps-title-size},
44
+ "steps-title-weight": #{$steps-title-weight},
45
+ "steps-title-color": #{$steps-title-color},
46
+ "steps-title-active-color": #{$steps-title-active-color},
47
+ "steps-title-active-weight": #{$steps-title-active-weight},
48
+ "steps-content-margin-top": #{$steps-content-margin-top},
49
+ "steps-vertical-padding": #{$steps-vertical-padding},
50
+ "steps-vertical-content-margin-left": #{$steps-vertical-content-margin-left},
51
+ "steps-animation-duration": #{$steps-animation-duration},
52
+ "steps-navigation-margin-top": #{$steps-navigation-margin-top},
53
+ )
54
+ );
55
+ }
56
+
57
+ // Size mixin
58
+ @mixin steps-size($marker-size) {
59
+ .#{iv.$class-prefix}steps-marker {
60
+ width: $marker-size;
61
+ height: $marker-size;
62
+ }
63
+
64
+ .#{iv.$class-prefix}steps-list:not(.#{iv.$class-prefix}is-vertical) .#{iv.$class-prefix}steps-segment {
65
+ padding-top: calc(#{$marker-size} / 2);
66
+
67
+ &:not(:last-child)::before {
68
+ top: calc(#{$marker-size} - cv.getVar("steps-divider-height") / 2);
69
+ left: calc(50% + #{$marker-size} / 2);
70
+ right: calc(-50% + #{$marker-size} / 2);
71
+ }
72
+ }
73
+
74
+ &.#{iv.$class-prefix}is-vertical .#{iv.$class-prefix}steps-segment {
75
+ &:not(:last-child)::after {
76
+ top: $marker-size;
77
+ left: calc(#{$marker-size} / 2 - cv.getVar("steps-divider-height") / 2);
78
+ }
79
+ }
80
+ }
81
+
82
+ // Main steps container
83
+ .#{iv.$class-prefix}steps {
84
+ // Block-level spacing like Panel, Card, etc.
85
+ &:not(:last-child) {
86
+ margin-bottom: cv.getVar("block-spacing");
87
+ }
88
+
89
+ .#{iv.$class-prefix}steps-list {
90
+ display: flex;
91
+ flex-wrap: wrap;
92
+ list-style: none;
93
+ margin: 0;
94
+ padding: 0;
95
+
96
+ &:not(.#{iv.$class-prefix}is-vertical) {
97
+ .#{iv.$class-prefix}steps-segment {
98
+ flex: 1;
99
+ position: relative;
100
+ padding-top: calc(cv.getVar("steps-marker-size") / 2);
101
+
102
+ // Horizontal divider line — centered through marker
103
+ &:not(:last-child)::before {
104
+ content: '';
105
+ position: absolute;
106
+ top: calc(cv.getVar("steps-marker-size") - cv.getVar("steps-divider-height") / 2);
107
+ left: calc(50% + cv.getVar("steps-marker-size") / 2);
108
+ right: calc(-50% + cv.getVar("steps-marker-size") / 2);
109
+ height: cv.getVar("steps-divider-height");
110
+ background-color: cv.getVar("steps-default-color");
111
+ @include extras-transition(background-color);
112
+ }
113
+
114
+ &.#{iv.$class-prefix}is-completed:not(:last-child)::before {
115
+ background-color: cv.getVar("steps-default-color");
116
+ }
117
+ }
118
+ }
119
+ }
120
+ }
121
+
122
+ // Step segment
123
+ .#{iv.$class-prefix}steps-segment {
124
+ text-align: center;
125
+ cursor: default;
126
+
127
+ &[tabindex="0"] {
128
+ cursor: pointer;
129
+
130
+ &:focus {
131
+ outline: none;
132
+ }
133
+
134
+ &:focus-visible .#{iv.$class-prefix}steps-marker {
135
+ @include extras-focus-outline;
136
+ }
137
+ }
138
+ }
139
+
140
+ // Step link — wrapper around marker + content (like Buefy's .step-link)
141
+ // Default: column layout (label below marker)
142
+ .#{iv.$class-prefix}steps-link {
143
+ display: flex;
144
+ align-items: center;
145
+ justify-content: center;
146
+ flex-direction: column;
147
+ }
148
+
149
+ // Step marker
150
+ .#{iv.$class-prefix}steps-marker {
151
+ display: flex;
152
+ align-items: center;
153
+ justify-content: center;
154
+ width: cv.getVar("steps-marker-size");
155
+ height: cv.getVar("steps-marker-size");
156
+ margin: 0 auto;
157
+ border: cv.getVar("steps-divider-height") solid cv.getVar("steps-default-color");
158
+ border-radius: cv.getVar("radius");
159
+ background-color: cv.getVar("steps-marker-background");
160
+ font-size: cv.getVar("steps-marker-font-size");
161
+ font-weight: cv.getVar("steps-marker-font-weight");
162
+ color: cv.getVar("steps-default-color");
163
+ position: relative;
164
+ z-index: 1;
165
+ @include extras-transition(border-color, background-color, color);
166
+
167
+ .#{iv.$class-prefix}steps-segment.#{iv.$class-prefix}is-active & {
168
+ border-color: cv.getVar("steps-default-color");
169
+ color: cv.getVar("steps-default-color");
170
+ }
171
+
172
+ .#{iv.$class-prefix}steps-segment.#{iv.$class-prefix}is-completed & {
173
+ border-color: cv.getVar("steps-default-color");
174
+ background-color: cv.getVar("steps-default-color");
175
+ color: cv.getVar("steps-marker-background");
176
+ }
177
+ }
178
+
179
+ // Step content
180
+ .#{iv.$class-prefix}steps-content {
181
+ margin-top: cv.getVar("steps-content-margin-top");
182
+ text-align: center;
183
+ }
184
+
185
+ // Step title
186
+ .#{iv.$class-prefix}steps-title {
187
+ font-size: cv.getVar("steps-title-size");
188
+ font-weight: cv.getVar("steps-title-weight");
189
+ color: cv.getVar("steps-title-color");
190
+ margin: 0;
191
+
192
+ .#{iv.$class-prefix}steps-segment.#{iv.$class-prefix}is-active & {
193
+ color: cv.getVar("steps-title-active-color");
194
+ font-weight: cv.getVar("steps-title-active-weight");
195
+ }
196
+
197
+ .#{iv.$class-prefix}steps-segment.#{iv.$class-prefix}is-completed & {
198
+ color: cv.getVar("steps-title-color");
199
+ }
200
+ }
201
+
202
+ // Sizes
203
+ .#{iv.$class-prefix}steps {
204
+ &.#{iv.$class-prefix}is-small {
205
+ @include steps-size(cv.getVar("steps-marker-size-small"));
206
+
207
+ .#{iv.$class-prefix}steps-marker {
208
+ font-size: 0.625rem;
209
+ }
210
+ }
211
+
212
+ &.#{iv.$class-prefix}is-medium {
213
+ @include steps-size(cv.getVar("steps-marker-size-medium"));
214
+
215
+ .#{iv.$class-prefix}steps-marker {
216
+ font-size: 1rem;
217
+ }
218
+ }
219
+
220
+ &.#{iv.$class-prefix}is-large {
221
+ @include steps-size(cv.getVar("steps-marker-size-large"));
222
+
223
+ .#{iv.$class-prefix}steps-marker {
224
+ font-size: 1.25rem;
225
+ }
226
+ }
227
+ }
228
+
229
+ // Color variants
230
+ @each $name in "primary", "link", "info", "success", "warning", "danger" {
231
+ .#{iv.$class-prefix}steps.#{iv.$class-prefix}is-#{$name} {
232
+ .#{iv.$class-prefix}steps-segment.#{iv.$class-prefix}is-active
233
+ .#{iv.$class-prefix}steps-marker {
234
+ border-color: cv.getVar($name);
235
+ color: cv.getVar($name);
236
+ }
237
+
238
+ .#{iv.$class-prefix}steps-segment.#{iv.$class-prefix}is-completed
239
+ .#{iv.$class-prefix}steps-marker {
240
+ border-color: cv.getVar($name);
241
+ background-color: cv.getVar($name);
242
+ color: hsl(
243
+ cv.getVar($name, "", "-h"),
244
+ cv.getVar($name, "", "-s"),
245
+ cv.getVar($name, "", "-invert-l")
246
+ );
247
+ }
248
+
249
+ .#{iv.$class-prefix}steps-list:not(.#{iv.$class-prefix}is-vertical)
250
+ .#{iv.$class-prefix}steps-segment.#{iv.$class-prefix}is-completed:not(:last-child)::before {
251
+ background-color: cv.getVar($name);
252
+ }
253
+
254
+ .#{iv.$class-prefix}steps-list.#{iv.$class-prefix}is-vertical
255
+ .#{iv.$class-prefix}steps-segment.#{iv.$class-prefix}is-completed:not(:last-child)::after {
256
+ background-color: cv.getVar($name);
257
+ }
258
+ }
259
+ }
260
+
261
+ // Rounded markers (circular)
262
+ .#{iv.$class-prefix}steps.#{iv.$class-prefix}is-rounded .#{iv.$class-prefix}steps-marker {
263
+ border-radius: 50%;
264
+ }
265
+
266
+ // Animated
267
+ .#{iv.$class-prefix}steps.#{iv.$class-prefix}is-animated {
268
+ .#{iv.$class-prefix}steps-marker {
269
+ transition: border-color cv.getVar("steps-animation-duration") ease,
270
+ background-color cv.getVar("steps-animation-duration") ease,
271
+ color cv.getVar("steps-animation-duration") ease,
272
+ transform cv.getVar("steps-animation-duration") ease;
273
+ }
274
+
275
+ .#{iv.$class-prefix}steps-segment.#{iv.$class-prefix}is-active .#{iv.$class-prefix}steps-marker {
276
+ transform: scale(1.1);
277
+ }
278
+ }
279
+
280
+ // No marker (text only)
281
+ .#{iv.$class-prefix}steps:not(.#{iv.$class-prefix}has-marker) {
282
+ .#{iv.$class-prefix}steps-marker {
283
+ display: none;
284
+ }
285
+
286
+ .#{iv.$class-prefix}steps-segment {
287
+ padding-top: 0;
288
+
289
+ &:not(:last-child)::before {
290
+ top: 50%;
291
+ transform: translateY(-50%);
292
+ }
293
+ }
294
+ }
295
+
296
+ // Vertical layout
297
+ .#{iv.$class-prefix}steps .#{iv.$class-prefix}steps-list.#{iv.$class-prefix}is-vertical {
298
+ flex-direction: column;
299
+
300
+ .#{iv.$class-prefix}steps-segment {
301
+ text-align: left;
302
+ padding: 0 0 cv.getVar("steps-vertical-padding") 0;
303
+ position: relative;
304
+
305
+ // Vertical divider line
306
+ &:not(:last-child)::after {
307
+ content: '';
308
+ position: absolute;
309
+ top: cv.getVar("steps-marker-size");
310
+ left: calc(cv.getVar("steps-marker-size") / 2 - cv.getVar("steps-divider-height") / 2);
311
+ width: cv.getVar("steps-divider-height");
312
+ bottom: 0;
313
+ background-color: cv.getVar("steps-default-color");
314
+ @include extras-transition(background-color);
315
+ }
316
+
317
+ &.#{iv.$class-prefix}is-completed:not(:last-child)::after {
318
+ background-color: cv.getVar("steps-default-color");
319
+ }
320
+ }
321
+
322
+ .#{iv.$class-prefix}steps-link {
323
+ flex-direction: row;
324
+ justify-content: flex-start;
325
+ align-items: flex-start;
326
+ }
327
+
328
+ .#{iv.$class-prefix}steps-marker {
329
+ margin: 0;
330
+ flex-shrink: 0;
331
+ }
332
+
333
+ .#{iv.$class-prefix}steps-content {
334
+ margin-top: 0;
335
+ margin-left: cv.getVar("steps-vertical-content-margin-left");
336
+ text-align: left;
337
+ padding-top: 0.25rem;
338
+ }
339
+ }
340
+
341
+ // Label on right / left (horizontal only)
342
+ // The marker stays centered at 50%. The label is absolutely positioned right
343
+ // next to the marker with a background-color + z-index to cover the connector line.
344
+ .#{iv.$class-prefix}steps.#{iv.$class-prefix}has-label-right:not(.#{iv.$class-prefix}is-vertical),
345
+ .#{iv.$class-prefix}steps.#{iv.$class-prefix}has-label-left:not(.#{iv.$class-prefix}is-vertical) {
346
+ .#{iv.$class-prefix}steps-link {
347
+ position: relative;
348
+ }
349
+
350
+ .#{iv.$class-prefix}steps-content {
351
+ position: absolute;
352
+ top: 50%;
353
+ transform: translateY(-50%);
354
+ margin-top: 0;
355
+ background-color: cv.getVar("scheme-main");
356
+ z-index: 1;
357
+ padding: 0.2em;
358
+ white-space: nowrap;
359
+ }
360
+ }
361
+
362
+ .#{iv.$class-prefix}steps.#{iv.$class-prefix}has-label-right:not(.#{iv.$class-prefix}is-vertical) {
363
+ .#{iv.$class-prefix}steps-content {
364
+ left: calc(50% + cv.getVar("steps-marker-size") / 2 + 0.25rem);
365
+ text-align: left;
366
+ }
367
+ }
368
+
369
+ .#{iv.$class-prefix}steps.#{iv.$class-prefix}has-label-left:not(.#{iv.$class-prefix}is-vertical) {
370
+ .#{iv.$class-prefix}steps-content {
371
+ right: calc(50% + cv.getVar("steps-marker-size") / 2 + 0.25rem);
372
+ text-align: right;
373
+ }
374
+ }
375
+
376
+ // Vertical + label-left: marker on right, label on left, divider on right
377
+ .#{iv.$class-prefix}steps.#{iv.$class-prefix}has-label-left.#{iv.$class-prefix}is-vertical {
378
+ .#{iv.$class-prefix}steps-list.#{iv.$class-prefix}is-vertical {
379
+ .#{iv.$class-prefix}steps-link {
380
+ flex-direction: row-reverse;
381
+ }
382
+
383
+ .#{iv.$class-prefix}steps-content {
384
+ margin-left: 0;
385
+ margin-right: cv.getVar("steps-vertical-content-margin-left");
386
+ text-align: right;
387
+ }
388
+
389
+ .#{iv.$class-prefix}steps-segment:not(:last-child)::after {
390
+ left: auto;
391
+ right: calc(cv.getVar("steps-marker-size") / 2 - cv.getVar("steps-divider-height") / 2);
392
+ }
393
+ }
394
+ }
395
+
396
+ // Vertical + label-bottom: marker on top, label below, centered
397
+ .#{iv.$class-prefix}steps.#{iv.$class-prefix}has-label-bottom.#{iv.$class-prefix}is-vertical {
398
+ .#{iv.$class-prefix}steps-list.#{iv.$class-prefix}is-vertical {
399
+ align-items: center;
400
+
401
+ .#{iv.$class-prefix}steps-segment {
402
+ text-align: center;
403
+ }
404
+
405
+ .#{iv.$class-prefix}steps-link {
406
+ flex-direction: column;
407
+ align-items: center;
408
+ }
409
+
410
+ .#{iv.$class-prefix}steps-content {
411
+ margin-left: 0;
412
+ margin-top: cv.getVar("steps-content-margin-top");
413
+ text-align: center;
414
+ background-color: cv.getVar("scheme-main");
415
+ position: relative;
416
+ z-index: 1;
417
+ padding: 0.2em;
418
+ }
419
+
420
+ .#{iv.$class-prefix}steps-segment:not(:last-child)::after {
421
+ left: calc(50% - cv.getVar("steps-divider-height") / 2);
422
+ }
423
+ }
424
+ }
425
+
426
+ // Navigation buttons
427
+ .#{iv.$class-prefix}steps-navigation {
428
+ display: flex;
429
+ justify-content: space-between;
430
+ margin-top: cv.getVar("steps-navigation-margin-top");
431
+ }
432
+
433
+ // Mobile modes
434
+ @include extras-mobile {
435
+ .#{iv.$class-prefix}steps.#{iv.$class-prefix}is-minimal {
436
+ .#{iv.$class-prefix}steps-content {
437
+ display: none;
438
+ }
439
+ }
440
+
441
+ .#{iv.$class-prefix}steps.#{iv.$class-prefix}is-compact {
442
+ .#{iv.$class-prefix}steps-title {
443
+ font-size: 0.625rem;
444
+ }
445
+ }
446
+ }
447
+
448
+ // Reduced motion
449
+ @media (prefers-reduced-motion: reduce) {
450
+ .#{iv.$class-prefix}steps.#{iv.$class-prefix}is-animated {
451
+ .#{iv.$class-prefix}steps-marker {
452
+ transition: none;
453
+ }
454
+
455
+ .#{iv.$class-prefix}steps-segment.#{iv.$class-prefix}is-active .#{iv.$class-prefix}steps-marker {
456
+ transform: none;
457
+ }
458
+ }
459
+ }
@@ -0,0 +1,147 @@
1
+ // Tabs Component Styles
2
+ // Vertical layout and content panel visibility for Tabs
3
+ // Bulma already handles horizontal tabs — this adds extras
4
+
5
+ @use "bulma/sass/utilities/initial-variables" as iv;
6
+ @use "bulma/sass/utilities/css-variables" as cv;
7
+ @use '../variables' as *;
8
+ @use '../mixins' as *;
9
+
10
+ // Tabs-specific SCSS variables
11
+ $tabs-vertical-min-width: 200px !default;
12
+ $tabs-vertical-border-color: cv.getVar("border") !default;
13
+ $tabs-vertical-border-width: 1px !default;
14
+ $tabs-content-padding: 1rem !default;
15
+
16
+ // Register CSS variables
17
+ .#{iv.$class-prefix}tabs-root {
18
+ @include cv.register-vars(
19
+ (
20
+ "tabs-vertical-min-width": #{$tabs-vertical-min-width},
21
+ "tabs-vertical-border-color": #{$tabs-vertical-border-color},
22
+ "tabs-vertical-border-width": #{$tabs-vertical-border-width},
23
+ "tabs-content-padding": #{$tabs-content-padding},
24
+ )
25
+ );
26
+ }
27
+
28
+ // Content item visibility (works for both horizontal and vertical)
29
+ .#{iv.$class-prefix}tabs-content-item {
30
+ display: none;
31
+
32
+ &.#{iv.$class-prefix}is-active {
33
+ display: block;
34
+ }
35
+ }
36
+
37
+ // Content wrapper
38
+ .#{iv.$class-prefix}tabs-content {
39
+ padding: cv.getVar("tabs-content-padding");
40
+ }
41
+
42
+ // Vertical layout — .tabs-root.is-vertical becomes a flex row
43
+ .#{iv.$class-prefix}tabs-root.#{iv.$class-prefix}is-vertical {
44
+ display: flex;
45
+ flex-direction: row;
46
+
47
+ // The .tabs container becomes a vertical column
48
+ > .#{iv.$class-prefix}tabs {
49
+ flex-shrink: 0;
50
+ min-width: cv.getVar("tabs-vertical-min-width");
51
+
52
+ // Remove Bulma's default bottom border on the nav
53
+ border-bottom: none;
54
+
55
+ > ul {
56
+ flex-direction: column;
57
+ align-items: stretch;
58
+ border-bottom: none;
59
+
60
+ // Right border for left-side tabs
61
+ border-right: cv.getVar("tabs-vertical-border-width") solid cv.getVar("tabs-vertical-border-color");
62
+
63
+ > li {
64
+ width: 100%;
65
+
66
+ a {
67
+ justify-content: flex-start;
68
+ border-bottom: none;
69
+ border-right: 2px solid transparent;
70
+ padding: 0.5em 1em;
71
+ }
72
+
73
+ &.#{iv.$class-prefix}is-active a {
74
+ border-right-color: cv.getVar("link");
75
+ border-bottom-color: transparent;
76
+ }
77
+ }
78
+ }
79
+ }
80
+
81
+ // Content fills remaining space
82
+ > .#{iv.$class-prefix}tabs-content {
83
+ flex: 1;
84
+ min-width: 0;
85
+ }
86
+
87
+ // Right side variant — reverse the flex direction
88
+ &.#{iv.$class-prefix}is-right {
89
+ flex-direction: row-reverse;
90
+
91
+ > .#{iv.$class-prefix}tabs > ul {
92
+ border-right: none;
93
+ border-left: cv.getVar("tabs-vertical-border-width") solid cv.getVar("tabs-vertical-border-color");
94
+
95
+ > li {
96
+ a {
97
+ border-right: none;
98
+ border-left: 2px solid transparent;
99
+ }
100
+
101
+ &.#{iv.$class-prefix}is-active a {
102
+ border-left-color: cv.getVar("link");
103
+ border-right-color: transparent;
104
+ }
105
+ }
106
+ }
107
+ }
108
+
109
+ // Expanded — tabs list fills full height
110
+ &.#{iv.$class-prefix}is-expanded {
111
+ > .#{iv.$class-prefix}tabs > ul {
112
+ height: 100%;
113
+ }
114
+ }
115
+ }
116
+
117
+ // Mobile fallback — vertical tabs stack to horizontal
118
+ @include extras-mobile {
119
+ .#{iv.$class-prefix}tabs-root.#{iv.$class-prefix}is-vertical {
120
+ flex-direction: column;
121
+
122
+ > .#{iv.$class-prefix}tabs {
123
+ min-width: auto;
124
+
125
+ > ul {
126
+ flex-direction: row;
127
+ border-right: none;
128
+ border-left: none;
129
+ border-bottom: 1px solid cv.getVar("tabs-vertical-border-color");
130
+
131
+ > li {
132
+ a {
133
+ border-right: none;
134
+ border-left: none;
135
+ border-bottom: 2px solid transparent;
136
+ }
137
+
138
+ &.#{iv.$class-prefix}is-active a {
139
+ border-bottom-color: cv.getVar("link");
140
+ border-right-color: transparent;
141
+ border-left-color: transparent;
142
+ }
143
+ }
144
+ }
145
+ }
146
+ }
147
+ }