@allxsmith/bestax-bulma 5.66.1 → 5.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/bestax.css +1 -1
  2. package/dist/bestax.css.map +1 -1
  3. package/dist/esm/components/Command.js.map +1 -1
  4. package/dist/esm/components/HoverCard.js.map +1 -1
  5. package/dist/esm/components/Loading.js +3 -3
  6. package/dist/esm/components/Loading.js.map +1 -1
  7. package/dist/esm/components/Modal.js.map +1 -1
  8. package/dist/esm/components/Popover.js.map +1 -1
  9. package/dist/esm/components/Sidebar.js +21 -29
  10. package/dist/esm/components/Sidebar.js.map +1 -1
  11. package/dist/esm/components/Toast.js +6 -8
  12. package/dist/esm/components/Toast.js.map +1 -1
  13. package/dist/esm/elements/IconButton.js.map +1 -1
  14. package/dist/esm/form/Combobox.js.map +1 -1
  15. package/dist/esm/form/DateInputBase.js.map +1 -1
  16. package/dist/esm/form/DateRangeInputBase.js.map +1 -1
  17. package/dist/esm/form/DateTimeInputBase.js.map +1 -1
  18. package/dist/esm/form/TreeSelect.js.map +1 -1
  19. package/dist/esm/form/_pickerInternals/Calendar.js +12 -5
  20. package/dist/esm/form/_pickerInternals/Calendar.js.map +1 -1
  21. package/dist/esm/form/_pickerInternals/PickerPopover.js +6 -2
  22. package/dist/esm/form/_pickerInternals/PickerPopover.js.map +1 -1
  23. package/dist/esm/helpers/scrollLock.js +47 -11
  24. package/dist/esm/helpers/scrollLock.js.map +1 -1
  25. package/dist/esm/helpers/useAnchoredPosition.js +35 -11
  26. package/dist/esm/helpers/useAnchoredPosition.js.map +1 -1
  27. package/dist/esm/layout/Level.js +2 -2
  28. package/dist/esm/layout/Level.js.map +1 -1
  29. package/dist/extras.css +1 -1
  30. package/dist/extras.css.map +1 -1
  31. package/dist/index.cjs +128 -65
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/types/components/Command.d.ts +5 -5
  34. package/dist/types/components/HoverCard.d.ts +2 -4
  35. package/dist/types/components/Modal.d.ts +6 -3
  36. package/dist/types/components/Popover.d.ts +1 -3
  37. package/dist/types/components/Sidebar.d.ts +6 -2
  38. package/dist/types/components/Toast.d.ts +3 -1
  39. package/dist/types/elements/IconButton.d.ts +2 -5
  40. package/dist/types/form/Combobox.d.ts +13 -13
  41. package/dist/types/form/DateInputBase.d.ts +8 -1
  42. package/dist/types/form/DateRangeInputBase.d.ts +5 -0
  43. package/dist/types/form/DateTimeInputBase.d.ts +8 -1
  44. package/dist/types/form/TreeSelect.d.ts +4 -4
  45. package/dist/types/helpers/scrollLock.d.ts +4 -4
  46. package/dist/types/helpers/useAnchoredPosition.d.ts +14 -12
  47. package/dist/types/layout/Level.d.ts +10 -0
  48. package/dist/types-cjs/components/Command.d.ts +5 -5
  49. package/dist/types-cjs/components/HoverCard.d.ts +2 -4
  50. package/dist/types-cjs/components/Modal.d.ts +6 -3
  51. package/dist/types-cjs/components/Popover.d.ts +1 -3
  52. package/dist/types-cjs/components/Sidebar.d.ts +6 -2
  53. package/dist/types-cjs/components/Toast.d.ts +3 -1
  54. package/dist/types-cjs/elements/IconButton.d.ts +2 -5
  55. package/dist/types-cjs/form/Combobox.d.ts +13 -13
  56. package/dist/types-cjs/form/DateInputBase.d.ts +8 -1
  57. package/dist/types-cjs/form/DateRangeInputBase.d.ts +5 -0
  58. package/dist/types-cjs/form/DateTimeInputBase.d.ts +8 -1
  59. package/dist/types-cjs/form/TreeSelect.d.ts +4 -4
  60. package/dist/types-cjs/helpers/scrollLock.d.ts +4 -4
  61. package/dist/types-cjs/helpers/useAnchoredPosition.d.ts +14 -12
  62. package/dist/types-cjs/layout/Level.d.ts +10 -0
  63. package/dist/versions/bestax-no-dark-mode.css +1 -1
  64. package/dist/versions/bestax-no-dark-mode.css.map +1 -1
  65. package/dist/versions/bestax-no-helpers-prefixed.css +1 -1
  66. package/dist/versions/bestax-no-helpers-prefixed.css.map +1 -1
  67. package/dist/versions/bestax-no-helpers.css +1 -1
  68. package/dist/versions/bestax-no-helpers.css.map +1 -1
  69. package/dist/versions/bestax-prefixed.css +1 -1
  70. package/dist/versions/bestax-prefixed.css.map +1 -1
  71. package/package.json +1 -1
  72. package/src/scss/CLAUDE.md +25 -2
  73. package/src/scss/components/_index.scss +1 -0
  74. package/src/scss/components/_loading.scss +17 -3
  75. package/src/scss/components/_navbar.scss +20 -0
  76. package/src/scss/form/_radio.scss +5 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allxsmith/bestax-bulma",
3
- "version": "5.66.1",
3
+ "version": "5.67.0",
4
4
  "description": "Component library based on React, Bulma, with Agent Skills and MCP",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.esm.js",
@@ -1,9 +1,10 @@
1
1
  # scss/ — styles for the bestax "extras"
2
2
 
3
- **Only extras get SCSS.** Components that are stock Bulma (Box, Card, Navbar, …) ship no CSS
3
+ **Only extras get SCSS.** Components that are stock Bulma (Box, Card, Modal, …) ship no CSS
4
4
  of their own — Bulma provides it. A partial exists only for components that extend beyond Bulma
5
5
  (Carousel, Collapse, Dialog, the extended form inputs, …) — or that extend a stock component
6
- (e.g. `_tabs.scss` adds vertical Tabs). The `_index.scss` files are the authoritative inventory.
6
+ (e.g. `_tabs.scss` adds vertical Tabs, `_navbar.scss` keeps the burger's bars in forced
7
+ colors). The `_index.scss` files are the authoritative inventory.
7
8
 
8
9
  ## Structure
9
10
 
@@ -76,3 +77,25 @@ Rules the pattern encodes:
76
77
  CSS & Sass Variables section, which is how LinkButton shipped its variables invisibly
77
78
  (#464). The orphan rule in `check:conformance` now fails on a partial that no component
78
79
  claims, so the miss is loud, but the fix is still yours to make.
80
+
81
+ ## A partial that adjusts stock Bulma
82
+
83
+ Some partials change a stock component rather than add one (`elements/_button.scss`,
84
+ `components/_pagination.scss`, `components/_menu.scss`). They follow the pattern above, plus:
85
+
86
+ - **Outrank Bulma whichever stylesheet loads first.** An app may load `extras.css` before or
87
+ after Bulma, so match Bulma's selector and add one class or ancestor (`.button.button`,
88
+ `.pagination .pagination-link`), and test both load orders.
89
+ - **Check every case the selector reaches.** A loop over Bulma's `$colors` also reaches `text`,
90
+ which `LinkButton` uses by default. A rule for one state can erase another state's only cue: a
91
+ border at rest in forced colors is the same border Bulma draws for focus. List the variants,
92
+ sizes and states the rule touches, and check each.
93
+ - **Forced colors:** scope the rule to `@media (forced-colors: active)`, paint with system colors
94
+ (`CanvasText`, `ButtonText`), and put `forced-color-adjust: none` only on the smallest element
95
+ that needs it, so everything else keeps the user's palette.
96
+ - **Name the `@use`.** Docs that show the partial beside the Bulma module it adjusts load it
97
+ `as bestax-<name>`, since Sass refuses two `@use` lines with the same name.
98
+ - `ORPHAN_EXEMPT` in `scripts/check-conformance.mjs` is for a partial no component can claim. Its
99
+ reason says why that stays true, not which issue added it.
100
+ - A new partial also means updating every page that lists the partials: see "Finishing a change"
101
+ in the root `CLAUDE.md`.
@@ -29,3 +29,4 @@
29
29
  @use 'datatable';
30
30
  @use 'pagination';
31
31
  @use 'affix';
32
+ @use 'navbar';
@@ -144,22 +144,36 @@ $loading-animation-duration: 0.75s !default;
144
144
  );
145
145
  animation: extras-spin cv.getVar("loading-animation-duration") infinite linear;
146
146
 
147
+ // Each size takes its ring width from its own variable on `.loading`, as it
148
+ // takes its dimensions.
147
149
  &.#{iv.$class-prefix}is-small {
148
150
  width: cv.getVar("loading-icon-size-small");
149
151
  height: cv.getVar("loading-icon-size-small");
150
- @include cv.register-vars(("loading-icon-border-width": #{$loading-icon-border-width-small}));
152
+ @include cv.register-vars(
153
+ (
154
+ "loading-icon-border-width": #{cv.getVar("loading-icon-border-width-small")},
155
+ )
156
+ );
151
157
  }
152
158
 
153
159
  &.#{iv.$class-prefix}is-medium {
154
160
  width: cv.getVar("loading-icon-size-medium");
155
161
  height: cv.getVar("loading-icon-size-medium");
156
- @include cv.register-vars(("loading-icon-border-width": #{$loading-icon-border-width-medium}));
162
+ @include cv.register-vars(
163
+ (
164
+ "loading-icon-border-width": #{cv.getVar("loading-icon-border-width-medium")},
165
+ )
166
+ );
157
167
  }
158
168
 
159
169
  &.#{iv.$class-prefix}is-large {
160
170
  width: cv.getVar("loading-icon-size-large");
161
171
  height: cv.getVar("loading-icon-size-large");
162
- @include cv.register-vars(("loading-icon-border-width": #{$loading-icon-border-width-large}));
172
+ @include cv.register-vars(
173
+ (
174
+ "loading-icon-border-width": #{cv.getVar("loading-icon-border-width-large")},
175
+ )
176
+ );
163
177
  }
164
178
  }
165
179
 
@@ -0,0 +1,20 @@
1
+ // Bestax Extras - Navbar Styles
2
+ // Bulma draws `.navbar-burger`'s bars as `background-color: currentColor`
3
+ // on a button with no background. Forced colors (Windows' contrast themes)
4
+ // replaces background colors, and Chromium paints the bars in the page's
5
+ // Canvas color, so the burger vanishes while it still works. This keeps
6
+ // the bars in ButtonText. Outside forced colors it changes nothing.
7
+ //
8
+ // Bulma's CSS can land on either side of this partial, as it can for
9
+ // `_delete.scss`, so the selector names its class twice to outrank Bulma's
10
+ // `.navbar-burger span`, wherever the two load.
11
+
12
+ @use 'bulma/sass/utilities/initial-variables' as iv;
13
+
14
+ @media (forced-colors: active) {
15
+ .#{iv.$class-prefix}navbar-burger.#{iv.$class-prefix}navbar-burger span {
16
+ // Opt out so Chromium keeps these bars in ButtonText, not Canvas.
17
+ forced-color-adjust: none;
18
+ background-color: ButtonText;
19
+ }
20
+ }
@@ -21,7 +21,10 @@ $radio-border-width: 2px !default;
21
21
  // scheme's surfaces in light and dark. `border` falls well short of it.
22
22
  $radio-border-color: cv.getVar("text-weak") !default;
23
23
  $radio-background: transparent !default;
24
- $radio-dot-color: cv.getVar("scheme-main") !default;
24
+ // The dot takes the ring's color unless a theme sets its own. It's declared
25
+ // on the same element as `radio-active-color`, so the color variants and the
26
+ // selected-row rule below, which set that one, carry through to the dot.
27
+ $radio-dot-color: cv.getVar("radio-active-color") !default;
25
28
  $radio-active-color: cv.getVar("primary") !default;
26
29
  $radio-label-gap: 0.5em !default;
27
30
  $radio-focus-shadow-size: 0 0 0 0.125em !default;
@@ -116,7 +119,7 @@ $radio-transition-duration: cv.getVar("duration") !default;
116
119
  width: 50%;
117
120
  height: 50%;
118
121
  border-radius: 50%;
119
- background-color: cv.getVar("radio-active-color");
122
+ background-color: cv.getVar("radio-dot-color");
120
123
  opacity: 0;
121
124
  transform: translate(-50%, -50%) scale(0.5);
122
125
  transition-property: opacity, transform;