@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,374 @@
1
+ @use 'bulma/sass/utilities/initial-variables' as iv;
2
+ @use 'bulma/sass/utilities/css-variables' as cv;
3
+
4
+ $timeinput-wheel-width: 3rem !default;
5
+ $timeinput-wheel-item-height: 2rem !default;
6
+ $timeinput-wheel-gap: 0.4rem !default;
7
+ $timeinput-wheel-bg: cv.getVar('scheme-main') !default;
8
+ $timeinput-wheel-color: cv.getVar('text') !default;
9
+ $timeinput-wheel-dim-color: cv.getVar('text-weak') !default;
10
+ $timeinput-wheel-hover-bg: hsla(0, 0%, 50%, 0.13) !default;
11
+ $timeinput-wheel-selected-bg: cv.getVar('primary') !default;
12
+ $timeinput-wheel-selected-color: cv.getVar('primary-invert') !default;
13
+ $timeinput-wheel-radius: cv.getVar('radius') !default;
14
+ // The per-item depth fade applied inline in TimeWheels.tsx now does the heavy
15
+ // lifting of dimming away-from-centre values. The mask just trims the very
16
+ // edges so partial items at the top/bottom don't get a hard cut-off — keep
17
+ // the transparent band thin so the fade and the mask don't compound and make
18
+ // near-edge items vanish before they reach the edge.
19
+ $timeinput-wheel-mask: linear-gradient(
20
+ 180deg,
21
+ transparent 0,
22
+ black 18%,
23
+ black 82%,
24
+ transparent 100%
25
+ ) !default;
26
+ $timeinput-separator-color: cv.getVar('text-weak') !default;
27
+ $timeinput-separator-size: cv.getVar('size-5') !default;
28
+ $timeinput-footer-padding: 0.5rem 0 0 !default;
29
+
30
+ .#{iv.$class-prefix}timeinput {
31
+ @include cv.register-vars(
32
+ (
33
+ 'timeinput-wheel-width': #{$timeinput-wheel-width},
34
+ 'timeinput-wheel-item-height': #{$timeinput-wheel-item-height},
35
+ 'timeinput-wheel-gap': #{$timeinput-wheel-gap},
36
+ 'timeinput-wheel-bg': #{$timeinput-wheel-bg},
37
+ 'timeinput-wheel-color': #{$timeinput-wheel-color},
38
+ 'timeinput-wheel-dim-color': #{$timeinput-wheel-dim-color},
39
+ 'timeinput-wheel-hover-bg': #{$timeinput-wheel-hover-bg},
40
+ 'timeinput-wheel-selected-bg': #{$timeinput-wheel-selected-bg},
41
+ 'timeinput-wheel-selected-color': #{$timeinput-wheel-selected-color},
42
+ 'timeinput-wheel-radius': #{$timeinput-wheel-radius},
43
+ 'timeinput-wheel-mask': #{$timeinput-wheel-mask},
44
+ 'timeinput-separator-color': #{$timeinput-separator-color},
45
+ 'timeinput-separator-size': #{$timeinput-separator-size},
46
+ 'timeinput-footer-padding': #{$timeinput-footer-padding},
47
+ )
48
+ );
49
+ }
50
+
51
+ .#{iv.$class-prefix}timeinput {
52
+ display: inline-block;
53
+ }
54
+
55
+ // Inline rendering: when the panel is a direct child of the container
56
+ // (no popover wrapper), give it a subtle frame so the wheels don't look
57
+ // orphaned on the page. Mirrors the popover's visual weight without the
58
+ // drop-shadow / animation.
59
+ .#{iv.$class-prefix}timeinput-container
60
+ > .#{iv.$class-prefix}timeinput-panel {
61
+ display: inline-block;
62
+ background-color: cv.getVar('scheme-main');
63
+ border: 1px solid cv.getVar('border');
64
+ border-radius: cv.getVar('radius');
65
+ padding: 0.75rem;
66
+ }
67
+
68
+ .#{iv.$class-prefix}timeinput-wheels {
69
+ display: flex;
70
+ align-items: center;
71
+ gap: cv.getVar('timeinput-wheel-gap');
72
+ // Stop the browser from interpreting touches on the empty space inside
73
+ // this row (left/right of the wheels, between columns) as page-scroll
74
+ // gestures. The parent component routes those drags to the nearest
75
+ // wheel column via the `startDrag` ref method, matching the iOS native
76
+ // picker where the whole picker surface is grabbable.
77
+ touch-action: none;
78
+ }
79
+
80
+ .#{iv.$class-prefix}timeinput-wheel {
81
+ position: relative;
82
+ width: cv.getVar('timeinput-wheel-width');
83
+ outline: none;
84
+ overflow: hidden;
85
+ touch-action: none;
86
+ user-select: none;
87
+ -webkit-mask-image: cv.getVar('timeinput-wheel-mask');
88
+ mask-image: cv.getVar('timeinput-wheel-mask');
89
+
90
+ // Soft cylinder vignette: the wheel surface stays clean in the middle
91
+ // and gradually darkens toward the top and bottom, suggesting depth like
92
+ // the surface of a rotating drum. Kept very subtle (low alpha) so the
93
+ // numbers themselves stay fully readable — the depth cue comes from the
94
+ // background, not from fading the digits. Sits above the items and the
95
+ // band (z-index 2) with pointer-events disabled so clicks still land.
96
+ &::after {
97
+ content: '';
98
+ position: absolute;
99
+ inset: 0;
100
+ z-index: 2;
101
+ pointer-events: none;
102
+ background: linear-gradient(
103
+ 180deg,
104
+ hsla(0, 0%, 0%, 0.22) 0%,
105
+ hsla(0, 0%, 0%, 0) 50%,
106
+ hsla(0, 0%, 0%, 0.22) 100%
107
+ );
108
+ }
109
+
110
+ // Focus emphasis uses `:focus-visible` so keyboard users see a clear ring
111
+ // while mouse/touch users (who have the stationary centre band as their
112
+ // visual anchor) don't get a distracting outline. The per-item box-shadow
113
+ // that used to live here was removed when the band became the indicator —
114
+ // pinning a ring to the selected item caused a broken-outline artefact
115
+ // whenever position was mid-flight (item offset from band).
116
+ &:focus-visible {
117
+ outline: 2px solid cv.getVar('primary');
118
+ outline-offset: 2px;
119
+ border-radius: cv.getVar('timeinput-wheel-radius');
120
+ }
121
+
122
+ &.#{iv.$class-prefix}is-dragging .#{iv.$class-prefix}timeinput-wheel-item {
123
+ transition: none;
124
+ }
125
+
126
+ &.#{iv.$class-prefix}is-disabled {
127
+ opacity: 0.55;
128
+ cursor: not-allowed;
129
+ }
130
+ }
131
+
132
+ .#{iv.$class-prefix}timeinput-wheel-item {
133
+ display: flex;
134
+ align-items: center;
135
+ justify-content: center;
136
+ flex: 0 0 auto;
137
+ border: 0;
138
+ background: transparent;
139
+ color: cv.getVar('timeinput-wheel-dim-color');
140
+ font: inherit;
141
+ font-variant-numeric: tabular-nums;
142
+ font-weight: cv.getVar('weight-medium');
143
+ cursor: pointer;
144
+ padding: 0;
145
+ border-radius: cv.getVar('timeinput-wheel-radius');
146
+ // Items render ABOVE the stationary band so the band tints them.
147
+ z-index: 1;
148
+ transition:
149
+ color 0.1s ease,
150
+ font-weight 0.1s ease;
151
+
152
+ &:hover:not(:disabled):not(.#{iv.$class-prefix}is-selected) {
153
+ color: cv.getVar('timeinput-wheel-color');
154
+ }
155
+
156
+ // The selected item (whichever is currently centred over the band) is
157
+ // emphasised by colour + weight only — the green fill belongs to the
158
+ // band beneath it now, so it doesn't visibly slide with the finger.
159
+ &.#{iv.$class-prefix}is-selected {
160
+ color: cv.getVar('timeinput-wheel-selected-color');
161
+ font-weight: cv.getVar('weight-semibold');
162
+ }
163
+
164
+ &:disabled {
165
+ cursor: not-allowed;
166
+ // Dim individually-disabled values (driven by `unselectableTimes` per
167
+ // column in TimeWheels) so users can see what's unavailable. The whole
168
+ // wheel's `is-disabled` modifier dims the entire column separately.
169
+ opacity: 0.35;
170
+ }
171
+ }
172
+
173
+ // Stationary selection band — sits at the centre of each wheel viewport and
174
+ // does NOT move while items slide through it (iOS-native picker feel). The
175
+ // vertical position and height are set inline by the JSX, so CSS only
176
+ // provides the visual treatment.
177
+ .#{iv.$class-prefix}timeinput-wheel-band {
178
+ background-color: cv.getVar('timeinput-wheel-selected-bg');
179
+ border-radius: cv.getVar('timeinput-wheel-radius');
180
+ z-index: 0;
181
+ // Explicit centre origin so the per-tick pulse animation (driven via WAI
182
+ // in TimeWheels.tsx) scales symmetrically rather than from a default
183
+ // corner. Defensive — current geometry centres the band, but this keeps
184
+ // future width / radius tweaks from skewing the pulse.
185
+ transform-origin: center;
186
+ }
187
+
188
+ .#{iv.$class-prefix}timeinput-separator {
189
+ font-size: cv.getVar('timeinput-separator-size');
190
+ font-weight: cv.getVar('weight-bold');
191
+ color: cv.getVar('timeinput-separator-color');
192
+ line-height: 1;
193
+ align-self: center;
194
+ padding: 0 0.1rem;
195
+ }
196
+
197
+ .#{iv.$class-prefix}timeinput-footer {
198
+ display: flex;
199
+ padding: cv.getVar('timeinput-footer-padding');
200
+
201
+ // Make the segmented button group span the full popover width: each
202
+ // child claims an equal share, so OK / Now / Cancel sit side-by-side
203
+ // across the bottom rather than huddling on the right.
204
+ > button {
205
+ flex: 1 1 0;
206
+ }
207
+ }
208
+
209
+ // Soft "primed" indicator on OK whenever any wheel column is focused (via
210
+ // keyboard Tab or click — wheel root takes focus in both cases). Hint that
211
+ // Enter on a wheel will activate OK. Deliberately subtle — just a faint
212
+ // neutral background tint. Real focus on OK uses Bulma's default focus ring
213
+ // (same as Now / Cancel) so the three buttons stay visually consistent.
214
+ .#{iv.$class-prefix}timeinput-panel:has(
215
+ .#{iv.$class-prefix}timeinput-wheel:focus
216
+ )
217
+ .#{iv.$class-prefix}timeinput-footer-ok:not(:focus-visible) {
218
+ background-color: hsla(0, 0%, 50%, 0.12);
219
+ }
220
+
221
+ // Sizes scale the item height + wheel width.
222
+ .#{iv.$class-prefix}timeinput-wheel.#{iv.$class-prefix}is-small {
223
+ width: 2.5rem;
224
+ }
225
+ .#{iv.$class-prefix}timeinput-wheel.#{iv.$class-prefix}is-medium {
226
+ width: 3.5rem;
227
+ }
228
+ .#{iv.$class-prefix}timeinput-wheel.#{iv.$class-prefix}is-large {
229
+ width: 4.25rem;
230
+ }
231
+
232
+ @media (prefers-reduced-motion: reduce) {
233
+ .#{iv.$class-prefix}timeinput-wheel-list {
234
+ transition: none;
235
+ }
236
+ }
237
+
238
+ // Mobile (small viewport): bigger touch targets, larger numbers, more iOS-native
239
+ // feel. Item *height* is set inline by JS and bumped from 40px to 48px on small
240
+ // viewports by TimeInputBase; the rules below adjust everything that's CSS-only
241
+ // (font size, wheel width, gap, separator, mask intensity).
242
+ @media (max-width: 768px) {
243
+ .#{iv.$class-prefix}timeinput {
244
+ --bestax-timeinput-wheel-width: 4rem;
245
+ --bestax-timeinput-wheel-gap: 0.5rem;
246
+ // Mobile mask: with the per-item depth fade already pulling brightness
247
+ // down toward the edges, the mask only needs to handle the final crop.
248
+ // Slightly tighter than desktop because mobile items are bigger and the
249
+ // edge taper benefits from a touch more softening.
250
+ --bestax-timeinput-wheel-mask: linear-gradient(
251
+ 180deg,
252
+ transparent 0,
253
+ black 28%,
254
+ black 72%,
255
+ transparent 100%
256
+ );
257
+ }
258
+
259
+ .#{iv.$class-prefix}timeinput-wheel-item {
260
+ font-size: 1.1rem;
261
+ }
262
+
263
+ .#{iv.$class-prefix}timeinput-separator {
264
+ font-size: 1.4rem;
265
+ padding: 0 0.25rem;
266
+ }
267
+
268
+ // The wheel widths from .is-small / .is-medium / .is-large would otherwise
269
+ // override the mobile bump above. Re-apply the larger mobile widths so the
270
+ // size variants still scale around the iOS-native baseline.
271
+ .#{iv.$class-prefix}timeinput-wheel.#{iv.$class-prefix}is-small {
272
+ width: 3.25rem;
273
+ }
274
+ .#{iv.$class-prefix}timeinput-wheel.#{iv.$class-prefix}is-medium {
275
+ width: 4.5rem;
276
+ }
277
+ .#{iv.$class-prefix}timeinput-wheel.#{iv.$class-prefix}is-large {
278
+ width: 5.25rem;
279
+ }
280
+
281
+ // On mobile, the popover is wide and the panel is a column flex container
282
+ // (see below), so the timeinput root becomes a stretched flex item. For
283
+ // the wheels row to actually expose empty space on the sides (where we
284
+ // forward drag gestures to the nearest wheel), it has to span the full
285
+ // panel width — otherwise `display: flex` shrinks it to its content and
286
+ // `justify-content: center` has nothing to centre.
287
+ .#{iv.$class-prefix}timeinput {
288
+ display: block;
289
+ width: 100%;
290
+ }
291
+ .#{iv.$class-prefix}timeinput-wheels {
292
+ width: 100%;
293
+ justify-content: center;
294
+ }
295
+
296
+ // Wide bottom-anchored popover when it contains a TimeInput panel — the
297
+ // OS-native picker on iOS occupies almost the full screen width with the
298
+ // wheels centred, so we mirror that. `:has()` is supported on iOS 15.4+,
299
+ // Safari 15.4+, and all current Chromium / Firefox.
300
+ .#{iv.$class-prefix}picker-popover:has(.#{iv.$class-prefix}timeinput-panel) {
301
+ // Override the popover's registered radius var so border-radius (which
302
+ // already references `cv.getVar('picker-popover-radius')`) updates
303
+ // automatically. We use Bulma's `radius-large` scaled by 4 for an
304
+ // iOS-sheet-sized corner without hard-coding a px value.
305
+ --bestax-picker-popover-radius: calc(#{cv.getVar('radius-large')} * 4);
306
+ position: fixed;
307
+ left: 1rem;
308
+ right: 1rem;
309
+ bottom: 1rem;
310
+ top: auto;
311
+ width: auto;
312
+ max-width: none;
313
+ }
314
+ .#{iv.$class-prefix}timeinput-panel {
315
+ display: flex;
316
+ flex-direction: column;
317
+ align-items: stretch;
318
+ // Prevent the browser from interpreting touches anywhere on the panel
319
+ // (the wheels row, the gap between wheels and footer, and the footer
320
+ // itself) as page-scroll gestures. Taps on the footer buttons still
321
+ // work — touch-action only suppresses native pan/zoom, not clicks.
322
+ touch-action: none;
323
+ }
324
+
325
+ // iOS-style mobile footer: "Reset" text link on the left, blue circular
326
+ // checkmark on the right.
327
+ .#{iv.$class-prefix}timeinput-footer-mobile {
328
+ display: flex;
329
+ align-items: center;
330
+ justify-content: space-between;
331
+ padding: 0.75rem 0.25rem 0;
332
+ }
333
+
334
+ .#{iv.$class-prefix}timeinput-footer-reset {
335
+ appearance: none;
336
+ background: transparent;
337
+ border: 0;
338
+ padding: 0.5rem 0.25rem;
339
+ font: inherit;
340
+ color: cv.getVar('text');
341
+ cursor: pointer;
342
+ border-radius: cv.getVar('radius');
343
+
344
+ &:hover,
345
+ &:focus-visible {
346
+ background-color: hsla(0, 0%, 50%, 0.12);
347
+ }
348
+ }
349
+
350
+ .#{iv.$class-prefix}timeinput-footer-done {
351
+ appearance: none;
352
+ border: 0;
353
+ padding: 0;
354
+ width: 2.75rem;
355
+ height: 2.75rem;
356
+ border-radius: 50%;
357
+ display: inline-flex;
358
+ align-items: center;
359
+ justify-content: center;
360
+ background-color: cv.getVar('primary');
361
+ color: cv.getVar('primary-invert');
362
+ cursor: pointer;
363
+ box-shadow: 0 1px 3px hsla(0, 0%, 0%, 0.18);
364
+ transition: transform 0.1s ease;
365
+
366
+ &:active {
367
+ transform: scale(0.94);
368
+ }
369
+ &:focus-visible {
370
+ outline: 2px solid cv.getVar('primary');
371
+ outline-offset: 2px;
372
+ }
373
+ }
374
+ }
@@ -0,0 +1,5 @@
1
+ @use "bulma/sass/utilities/initial-variables" as iv;
2
+
3
+ .#{iv.$class-prefix}is-cursor-help {
4
+ cursor: help !important;
5
+ }
@@ -0,0 +1,2 @@
1
+ @use 'cursor';
2
+ @use 'sizing';
@@ -0,0 +1,5 @@
1
+ @use "bulma/sass/utilities/initial-variables" as iv;
2
+
3
+ .#{iv.$class-prefix}is-full-height {
4
+ height: 100% !important;
5
+ }
@@ -0,0 +1,15 @@
1
+ // Bestax Bulma-Prefixed - Combined Bulma + Extras with "bulma-" class prefix
2
+ //
3
+ // Usage (pre-built CSS):
4
+ // import '@allxsmith/bestax-bulma/versions/bestax-bulma-prefixed.css';
5
+ //
6
+ // All CSS classes will be prefixed with "bulma-", e.g. "bulma-button", "bulma-is-primary"
7
+
8
+ @use 'bulma/sass' with ($class-prefix: "bulma-", $primary: #1e6b99);
9
+
10
+ @use '../variables';
11
+ @use '../mixins';
12
+ @use '../components/index' as components;
13
+ @use '../form/index' as form;
14
+ @use '../elements/index' as elements;
15
+ @use '../helpers/index' as helpers;
@@ -0,0 +1,32 @@
1
+ // Bestax No Dark Mode - Combined Bulma + Extras, light theme only
2
+ //
3
+ // Usage (pre-built CSS):
4
+ // import '@allxsmith/bestax-bulma/versions/bestax-no-dark-mode.css';
5
+ //
6
+ // Includes only the light theme, reducing CSS bundle size
7
+
8
+ // Configure utilities (primary override) before themes load it transitively
9
+ @use "bulma/sass/utilities" with ($primary: #1e6b99);
10
+ @use "bulma/sass/themes/light";
11
+ @use "bulma/sass/themes/setup";
12
+ @use '../variables';
13
+ @use '../mixins';
14
+ @use '../components/index' as components;
15
+ @use '../form/index' as form;
16
+ @use '../elements/index' as elements;
17
+ @use '../helpers/index' as helpers;
18
+
19
+ @forward "bulma/sass/utilities";
20
+ @forward "bulma/sass/base";
21
+ @forward "bulma/sass/elements";
22
+ @forward "bulma/sass/form";
23
+ @forward "bulma/sass/components";
24
+ @forward "bulma/sass/grid";
25
+ @forward "bulma/sass/layout";
26
+ @forward "bulma/sass/base/skeleton";
27
+ @forward "bulma/sass/helpers";
28
+
29
+ :root {
30
+ @include light.light-theme;
31
+ @include setup.setup-theme;
32
+ }
@@ -0,0 +1,22 @@
1
+ // Bestax No Helpers, Prefixed - Combined Bulma + Extras with "bestax-" prefix, no helpers
2
+ //
3
+ // Usage (pre-built CSS):
4
+ // import '@allxsmith/bestax-bulma/versions/bestax-no-helpers-prefixed.css';
5
+ //
6
+ // Excludes helper classes and prefixes all CSS classes with "bestax-"
7
+
8
+ @use "bulma/sass/utilities" with ($class-prefix: "bestax-", $primary: #1e6b99);
9
+ @forward "bulma/sass/themes";
10
+ @forward "bulma/sass/base";
11
+ @forward "bulma/sass/elements";
12
+ @forward "bulma/sass/form";
13
+ @forward "bulma/sass/components";
14
+ @forward "bulma/sass/grid";
15
+ @forward "bulma/sass/layout";
16
+ @forward "bulma/sass/base/skeleton";
17
+
18
+ @use '../variables';
19
+ @use '../mixins';
20
+ @use '../components/index' as components;
21
+ @use '../form/index' as form;
22
+ @use '../elements/index' as elements;
@@ -0,0 +1,23 @@
1
+ // Bestax No Helpers - Combined Bulma + Extras without helper classes
2
+ //
3
+ // Usage (pre-built CSS):
4
+ // import '@allxsmith/bestax-bulma/versions/bestax-no-helpers.css';
5
+ //
6
+ // Excludes Bulma helper classes (spacing, typography, color utilities, etc.)
7
+
8
+ @use "bulma/sass/utilities" with ($primary: #1e6b99);
9
+ @forward "bulma/sass/utilities";
10
+ @forward "bulma/sass/themes";
11
+ @forward "bulma/sass/base";
12
+ @forward "bulma/sass/elements";
13
+ @forward "bulma/sass/form";
14
+ @forward "bulma/sass/components";
15
+ @forward "bulma/sass/grid";
16
+ @forward "bulma/sass/layout";
17
+ @forward "bulma/sass/base/skeleton";
18
+
19
+ @use '../variables';
20
+ @use '../mixins';
21
+ @use '../components/index' as components;
22
+ @use '../form/index' as form;
23
+ @use '../elements/index' as elements;
@@ -0,0 +1,15 @@
1
+ // Bestax Prefixed - Combined Bulma + Extras with "bestax-" class prefix
2
+ //
3
+ // Usage (pre-built CSS):
4
+ // import '@allxsmith/bestax-bulma/versions/bestax-prefixed.css';
5
+ //
6
+ // All CSS classes will be prefixed with "bestax-", e.g. "bestax-button", "bestax-is-primary"
7
+
8
+ @use 'bulma/sass' with ($class-prefix: "bestax-", $primary: #1e6b99);
9
+
10
+ @use '../variables';
11
+ @use '../mixins';
12
+ @use '../components/index' as components;
13
+ @use '../form/index' as form;
14
+ @use '../elements/index' as elements;
15
+ @use '../helpers/index' as helpers;