bestax-mcp 1.18.0 → 1.18.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.
package/data/catalog.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "schemaVersion": 2,
3
3
  "generatedFrom": {
4
4
  "package": "@allxsmith/bestax-bulma",
5
- "version": "5.41.0"
5
+ "version": "5.42.1"
6
6
  },
7
7
  "docsBase": "https://bestax.io/docs",
8
8
  "categories": [
@@ -254,8 +254,8 @@
254
254
  "slug": "components/carousel",
255
255
  "import": "import { Carousel, CarouselItem } from '@allxsmith/bestax-bulma';",
256
256
  "compound": false,
257
- "propCount": 23,
258
- "exampleCount": 10
257
+ "propCount": 30,
258
+ "exampleCount": 13
259
259
  },
260
260
  {
261
261
  "name": "Cell",
@@ -277,7 +277,7 @@
277
277
  "import": "import { Checkboxes, Checkbox } from '@allxsmith/bestax-bulma';",
278
278
  "compound": false,
279
279
  "propCount": 8,
280
- "exampleCount": 6
280
+ "exampleCount": 7
281
281
  },
282
282
  {
283
283
  "name": "Checkboxes",
@@ -1422,6 +1422,14 @@
1422
1422
  "--bulma-carousel-indicator-line-width-mobile": ["Carousel"],
1423
1423
  "--bulma-carousel-indicator-size": ["Carousel"],
1424
1424
  "--bulma-carousel-indicator-size-mobile": ["Carousel"],
1425
+ "--bulma-carousel-item-gap": ["Carousel"],
1426
+ "--bulma-carousel-items-in-view": ["Carousel"],
1427
+ "--bulma-carousel-items-to-show": ["Carousel"],
1428
+ "--bulma-carousel-items-to-show-desktop": ["Carousel"],
1429
+ "--bulma-carousel-items-to-show-fullhd": ["Carousel"],
1430
+ "--bulma-carousel-items-to-show-mobile": ["Carousel"],
1431
+ "--bulma-carousel-items-to-show-tablet": ["Carousel"],
1432
+ "--bulma-carousel-items-to-show-widescreen": ["Carousel"],
1425
1433
  "--bulma-carousel-overlay-arrow-background": ["Carousel"],
1426
1434
  "--bulma-carousel-overlay-arrow-background-hover": ["Carousel"],
1427
1435
  "--bulma-carousel-overlay-arrow-color": ["Carousel"],
@@ -9,6 +9,18 @@
9
9
  "title": "Basic Carousel",
10
10
  "code": "<Carousel indicatorStyle=\"dots\">\n <CarouselItem>\n <Hero color=\"primary\" size=\"medium\">\n <Hero.Body textAlign=\"centered\">\n <Title as=\"p\">Slide 1</Title>\n </Hero.Body>\n </Hero>\n </CarouselItem>\n <CarouselItem>\n <Hero color=\"success\" size=\"medium\">\n <Hero.Body textAlign=\"centered\">\n <Title as=\"p\">Slide 2</Title>\n </Hero.Body>\n </Hero>\n </CarouselItem>\n <CarouselItem>\n <Hero color=\"danger\" size=\"medium\">\n <Hero.Body textAlign=\"centered\">\n <Title as=\"p\">Slide 3</Title>\n </Hero.Body>\n </Hero>\n </CarouselItem>\n</Carousel>"
11
11
  },
12
+ {
13
+ "title": "Several Items in View",
14
+ "code": "<Carousel itemsToShow={1} itemsToShowTablet={2} itemsToShowDesktop={3}>\n {[\n 'Garden Room',\n 'Harbor Suite',\n 'Loft',\n 'Courtyard Twin',\n 'Terrace Room',\n 'Family Suite',\n ].map(room => (\n <CarouselItem key={room}>\n <Card m=\"2\">\n <Card.Content>\n <Title as=\"p\" size=\"5\">\n {room}\n </Title>\n <SubTitle as=\"p\" size=\"6\">\n Sleeps two\n </SubTitle>\n </Card.Content>\n </Card>\n </CarouselItem>\n ))}\n</Carousel>"
15
+ },
16
+ {
17
+ "title": "Several Items in View",
18
+ "code": "<Carousel itemsToShow={3} itemsToScroll={3} repeat={false}>\n {[1, 2, 3, 4, 5, 6, 7].map(n => (\n <CarouselItem key={n}>\n <Box m=\"2\" textAlign=\"centered\">\n Item {n}\n </Box>\n </CarouselItem>\n ))}\n</Carousel>"
19
+ },
20
+ {
21
+ "title": "Several Items in View",
22
+ "code": "<Carousel className=\"room-gallery\" itemsToShow={3}>\n {/* items */}\n</Carousel>"
23
+ },
12
24
  {
13
25
  "title": "Auto-playing Carousel",
14
26
  "code": "<Carousel autoplay interval={3000}>\n <CarouselItem>\n <Hero color=\"info\" size=\"medium\">\n <Hero.Body textAlign=\"centered\">\n <Title as=\"p\">Info</Title>\n </Hero.Body>\n </Hero>\n </CarouselItem>\n <CarouselItem>\n <Hero color=\"warning\" size=\"medium\">\n <Hero.Body textAlign=\"centered\">\n <Title as=\"p\">Warning</Title>\n </Hero.Body>\n </Hero>\n </CarouselItem>\n <CarouselItem>\n <Hero color=\"success\" size=\"medium\">\n <Hero.Body textAlign=\"centered\">\n <Title as=\"p\">Success</Title>\n </Hero.Body>\n </Hero>\n </CarouselItem>\n</Carousel>"
@@ -46,7 +58,7 @@
46
58
  "code": "<Carousel repeat={false}>\n <CarouselItem>\n <Hero color=\"danger\" size=\"medium\">\n <Hero.Body textAlign=\"centered\">\n <Paragraph textColor=\"white\">First (no previous)</Paragraph>\n </Hero.Body>\n </Hero>\n </CarouselItem>\n <CarouselItem>\n <Hero color=\"warning\" size=\"medium\">\n <Hero.Body textAlign=\"centered\">\n <Paragraph>Middle slide</Paragraph>\n </Hero.Body>\n </Hero>\n </CarouselItem>\n <CarouselItem>\n <Hero color=\"success\" size=\"medium\">\n <Hero.Body textAlign=\"centered\">\n <Paragraph textColor=\"white\">Last (no next)</Paragraph>\n </Hero.Body>\n </Hero>\n </CarouselItem>\n</Carousel>"
47
59
  }
48
60
  ],
49
- "accessibility": "- Uses `role=\"region\"` with `aria-roledescription=\"carousel\"`\n- Navigation arrows have `aria-label` for screen readers\n- Indicators use `role=\"tablist\"` and `role=\"tab\"` semantics\n- Keyboard navigation with arrow keys when focused\n- Previous/Next buttons are properly disabled at boundaries when not repeating",
61
+ "accessibility": "- Uses `role=\"region\"` with `aria-roledescription=\"carousel\"`\n- Each item is a `group` with `aria-roledescription=\"slide\"`, named for its place, such as \"2 of 6\". An item's own `aria-label` or `aria-labelledby` takes the place of that name\n- Items out of view are `aria-hidden` and `inert`, so screen readers skip them and nothing in them takes focus. With several in view, every item in view is exposed. The copies a loop adds at each end of the track follow the same rule, so where the view runs past the last item, the copies on screen are the ones exposed\n- The track is a polite live region, so what comes into view is announced, except while autoplay is moving it (`aria-live=\"off\"`)\n- Autoplay waits while the pointer is over the carousel (with `pauseOnHover`) and while focus is inside one of its items, so an item being read or used never moves out of view\n- When something else takes the item holding focus out of view (a swipe, a change of width that changes the count, a new controlled `value`, or the item's removal), focus moves to the first item in view rather than dropping to the page\n- Navigation arrows have `aria-label` for screen readers\n- Indicators use `role=\"tablist\"` and `role=\"tab\"` semantics, one for each position a step can land on\n- The Left and Right arrow keys move the carousel while focus is on its arrows or indicators. Inside an item they're left to the item's content, such as a field or a slider\n- Previous/Next buttons are properly disabled at boundaries when not repeating",
50
62
  "related": ["Modal", "Tabs"],
51
63
  "storybook": "https://bestax.io/storybook/?path=/story/components-carousel",
52
64
  "summary": "The `Carousel` component provides an image/content slider with navigation arrows and indicators.",
@@ -63,7 +75,7 @@
63
75
  "name": "value",
64
76
  "type": "number",
65
77
  "default": "0",
66
- "description": "Current active slide index (controlled).",
78
+ "description": "Index of the first item in view (controlled); with one item in view, the slide shown. A value between two of the positions a step lands on (see `itemsToScroll`) is shown as given, and the next step goes on from it. With `repeat`, a value past either end wraps around; without it, one that would leave empty space after the last item shows the last full view. Neither correction calls `onChange`. A value that takes the item holding focus out of view moves focus to the first item in view, as a swipe or a change of width does.",
67
79
  "required": false,
68
80
  "inherited": false,
69
81
  "deprecated": false
@@ -72,7 +84,7 @@
72
84
  "name": "autoplay",
73
85
  "type": "boolean",
74
86
  "default": "false",
75
- "description": "Enable auto-play.",
87
+ "description": "Enable auto-play: one step (`itemsToScroll` items) per `interval`. Without `repeat` it stops at the last position. It waits while the pointer is over the carousel (see `pauseOnHover`) and while focus is inside one of its items, so an item being read or used never moves out of view.",
76
88
  "required": false,
77
89
  "inherited": false,
78
90
  "deprecated": false
@@ -99,7 +111,7 @@
99
111
  "name": "repeat",
100
112
  "type": "boolean",
101
113
  "default": "true",
102
- "description": "Loop back to first slide after last. Default: true.",
114
+ "description": "Loop back to the first position after the last. Default: true. With several items in view, the view runs on past the last item into the first ones, so it can show the end and the start side by side. Only loops when some item is out of view.",
103
115
  "required": false,
104
116
  "inherited": false,
105
117
  "deprecated": false
@@ -108,7 +120,70 @@
108
120
  "name": "hasDrag",
109
121
  "type": "boolean",
110
122
  "default": "true",
111
- "description": "Enable drag/swipe navigation. Default: true.",
123
+ "description": "Enable drag/swipe navigation. Default: true. A swipe moves one step, however far it travels.",
124
+ "required": false,
125
+ "inherited": false,
126
+ "deprecated": false
127
+ },
128
+ {
129
+ "name": "itemsToShow",
130
+ "type": "number",
131
+ "default": "1",
132
+ "description": "How many items are in view at once, at every width no `itemsToShow<Viewport>` prop covers. Those props read the way a `Column`'s `size<Viewport>` props do: `itemsToShowMobile` applies below Bulma's tablet breakpoint, each of the others from its own breakpoint up, and where several apply the widest one wins. A whole number, rounded down and at least 1. The widths come from the stylesheet, so they are right on the first paint; the arrows, indicators and steps use the count for the window's width once the page has hydrated, and this one until then. With this many children or fewer, every item keeps its share of the width, nothing moves, and no arrows or indicators render.",
133
+ "required": false,
134
+ "inherited": false,
135
+ "deprecated": false
136
+ },
137
+ {
138
+ "name": "itemsToShowMobile",
139
+ "type": "number",
140
+ "default": null,
141
+ "description": "Items in view at any width below Bulma's tablet breakpoint (769px), fractional ones included. Falls back to `itemsToShow`.",
142
+ "required": false,
143
+ "inherited": false,
144
+ "deprecated": false
145
+ },
146
+ {
147
+ "name": "itemsToShowTablet",
148
+ "type": "number",
149
+ "default": null,
150
+ "description": "Items in view from Bulma's tablet breakpoint (769px) up, until a wider viewport's prop takes over. Falls back to `itemsToShow`.",
151
+ "required": false,
152
+ "inherited": false,
153
+ "deprecated": false
154
+ },
155
+ {
156
+ "name": "itemsToShowDesktop",
157
+ "type": "number",
158
+ "default": null,
159
+ "description": "Items in view from Bulma's desktop breakpoint (1024px) up, until a wider viewport's prop takes over. Falls back to `itemsToShowTablet`, then `itemsToShow`.",
160
+ "required": false,
161
+ "inherited": false,
162
+ "deprecated": false
163
+ },
164
+ {
165
+ "name": "itemsToShowWidescreen",
166
+ "type": "number",
167
+ "default": null,
168
+ "description": "Items in view from Bulma's widescreen breakpoint (1216px) up, until `itemsToShowFullhd` takes over. Falls back to `itemsToShowDesktop`, and on down to `itemsToShow`.",
169
+ "required": false,
170
+ "inherited": false,
171
+ "deprecated": false
172
+ },
173
+ {
174
+ "name": "itemsToShowFullhd",
175
+ "type": "number",
176
+ "default": null,
177
+ "description": "Items in view from Bulma's fullhd breakpoint (1408px) up. Falls back to `itemsToShowWidescreen`, and on down to `itemsToShow`.",
178
+ "required": false,
179
+ "inherited": false,
180
+ "deprecated": false
181
+ },
182
+ {
183
+ "name": "itemsToScroll",
184
+ "type": "number",
185
+ "default": "1",
186
+ "description": "How many items one step moves, for an arrow, an arrow key, a swipe or an autoplay tick. A whole number, capped at the count in view so a step never skips an item. Without `repeat`, the last step stops at the last full view, so it can be shorter; with `repeat`, the step after the last position goes on to the first one. The indicators mark these positions, one per step rather than one per item. When the count in view changes with the window's width, the first item in view stays in view.",
112
187
  "required": false,
113
188
  "inherited": false,
114
189
  "deprecated": false
@@ -135,7 +210,7 @@
135
210
  "name": "indicator",
136
211
  "type": "boolean",
137
212
  "default": "true",
138
- "description": "Show slide indicators. Default: true. They render `type=\"button\"`, so a carousel inside a form is not submitted by picking a slide.",
213
+ "description": "Show slide indicators. Default: true. There is one for each position a step can land on (see `itemsToScroll`). They render `type=\"button\"`, so a carousel inside a form is not submitted by picking a slide.",
139
214
  "required": false,
140
215
  "inherited": false,
141
216
  "deprecated": false
@@ -252,7 +327,7 @@
252
327
  "name": "onChange",
253
328
  "type": "(value: number) => void",
254
329
  "default": null,
255
- "description": "Callback when slide changes.",
330
+ "description": "Called with the index of the first item in view when an arrow, an arrow key, an indicator, a swipe or autoplay moves the carousel.",
256
331
  "required": false,
257
332
  "inherited": false,
258
333
  "deprecated": false
@@ -299,7 +374,7 @@
299
374
  "name": "active",
300
375
  "type": "boolean",
301
376
  "default": "false",
302
- "description": "Whether this item is active (set automatically).",
377
+ "description": "Whether this item is in view. `Carousel` sets it on every item in view, so with several in view several are active.",
303
378
  "required": false,
304
379
  "inherited": false,
305
380
  "deprecated": false
@@ -554,6 +629,54 @@
554
629
  "sass": "$carousel-fade-duration",
555
630
  "default": "0.5s",
556
631
  "scope": "root"
632
+ },
633
+ {
634
+ "css": "--bulma-carousel-item-gap",
635
+ "sass": "$carousel-item-gap",
636
+ "default": "0px",
637
+ "scope": "root"
638
+ },
639
+ {
640
+ "css": "--bulma-carousel-items-to-show",
641
+ "sass": null,
642
+ "default": "1",
643
+ "scope": "root"
644
+ },
645
+ {
646
+ "css": "--bulma-carousel-items-to-show-mobile",
647
+ "sass": null,
648
+ "default": "var(--bulma-carousel-items-to-show)",
649
+ "scope": "root"
650
+ },
651
+ {
652
+ "css": "--bulma-carousel-items-to-show-tablet",
653
+ "sass": null,
654
+ "default": "var(--bulma-carousel-items-to-show)",
655
+ "scope": "root"
656
+ },
657
+ {
658
+ "css": "--bulma-carousel-items-to-show-desktop",
659
+ "sass": null,
660
+ "default": "var(--bulma-carousel-items-to-show-tablet)",
661
+ "scope": "root"
662
+ },
663
+ {
664
+ "css": "--bulma-carousel-items-to-show-widescreen",
665
+ "sass": null,
666
+ "default": "var(--bulma-carousel-items-to-show-desktop)",
667
+ "scope": "root"
668
+ },
669
+ {
670
+ "css": "--bulma-carousel-items-to-show-fullhd",
671
+ "sass": null,
672
+ "default": "var(--bulma-carousel-items-to-show-widescreen)",
673
+ "scope": "root"
674
+ },
675
+ {
676
+ "css": "--bulma-carousel-items-in-view",
677
+ "sass": null,
678
+ "default": "var(--bulma-carousel-items-to-show-mobile)",
679
+ "scope": "root"
557
680
  }
558
681
  ]
559
682
  }
@@ -28,9 +28,13 @@
28
28
  {
29
29
  "title": "Valid Colors and Sizes",
30
30
  "code": "import { Checkbox, Checkboxes } from '@allxsmith/bestax-bulma';\nimport { checkboxColors, checkboxSizes } from '@allxsmith/bestax-bulma';\n\nfunction example() {\n return (\n <>\n <Checkboxes>\n {checkboxColors.map(color => (\n <Checkbox key={color} color={color} defaultChecked>\n {color}\n </Checkbox>\n ))}\n </Checkboxes>\n <Checkboxes>\n {checkboxSizes.map(size => (\n <Checkbox key={size} size={size} defaultChecked>\n {size}\n </Checkbox>\n ))}\n </Checkboxes>\n </>\n );\n}"
31
+ },
32
+ {
33
+ "title": "Theming the Box",
34
+ "code": "<Checkbox className=\"ink-checkbox\" defaultChecked>\n Remember me\n</Checkbox>"
31
35
  }
32
36
  ],
33
- "accessibility": "- Each `Checkbox` is rendered as a `<label>` wrapping an `<input type=\"checkbox\">` and the label text, for optimal accessibility.\n- The clickable area includes both box and label by default.\n- Browsers expose a box with `indeterminate` set as mixed, so the component adds no ARIA for it.",
37
+ "accessibility": "- Each `Checkbox` is rendered as a `<label>` wrapping an `<input type=\"checkbox\">` and the label text, for optimal accessibility.\n- The clickable area includes both box and label by default.\n- Browsers expose a box with `indeterminate` set as mixed, so the component adds no ARIA for it.\n- An unchecked box shows only its border, `--bulma-checkbox-border-color`. It defaults to `--bulma-text-weak`, which holds the 3:1 contrast WCAG asks of a control's boundary (non-text contrast) on Bulma's page and card surfaces in light and dark. Hold a replacement border, and a custom check color on its fill, to 3:1 as well.\n- In forced colors (Windows contrast themes), the box, the check mark and the mixed dash take system colors, so they stay visible whatever the variables hold.",
34
38
  "related": ["Checkboxes", "Field", "useBulmaClasses"],
35
39
  "storybook": "https://bestax.io/storybook/?path=/story/form-checkbox--default",
36
40
  "summary": "The `Checkbox` component provides a Bulma-styled checkbox input.",
@@ -93,7 +97,7 @@
93
97
  "name": "className",
94
98
  "type": "string",
95
99
  "default": null,
96
- "description": "Additional CSS classes to apply.",
100
+ "description": "Additional CSS classes, on the outer `<label>`. That's the element that declares the `--bulma-checkbox-*` variables, so a class is how to set one: `style` and the other input attributes go to the `<input>`. Name `.styled-checkbox` beside your class in the selector, so it beats the label's own declaration whatever order the stylesheets load in. A `color` prop declares the fills again on `.styled-checkbox.is-<color>`, which ties that selector, so leave `color` unset when a class sets them.",
97
101
  "required": false,
98
102
  "inherited": false,
99
103
  "deprecated": false
@@ -144,7 +148,7 @@
144
148
  {
145
149
  "css": "--bulma-checkbox-border-color",
146
150
  "sass": "$checkbox-border-color",
147
- "default": "var(--bulma-border)",
151
+ "default": "var(--bulma-text-weak)",
148
152
  "scope": "root"
149
153
  },
150
154
  {
@@ -216,7 +216,7 @@
216
216
  "name": "className",
217
217
  "type": "string",
218
218
  "default": null,
219
- "description": "Additional CSS classes to apply.",
219
+ "description": "Additional CSS classes, on the outer `<label>`. That's the element that declares the `--bulma-checkbox-*` variables, so a class is how to set one: `style` and the other input attributes go to the `<input>`. Name `.styled-checkbox` beside your class in the selector, so it beats the label's own declaration whatever order the stylesheets load in. A `color` prop declares the fills again on `.styled-checkbox.is-<color>`, which ties that selector, so leave `color` unset when a class sets them.",
220
220
  "required": false,
221
221
  "inherited": false,
222
222
  "deprecated": false
@@ -26,7 +26,7 @@
26
26
  "code": "import { Radio, Radios } from '@allxsmith/bestax-bulma';\nimport { radioColors, radioSizes } from '@allxsmith/bestax-bulma';\n\nfunction example() {\n return (\n <>\n <Radios label=\"Accent color\" name=\"accent\" defaultValue=\"primary\">\n {radioColors.map(color => (\n <Radio key={color} value={color} color={color}>\n {color}\n </Radio>\n ))}\n </Radios>\n <Radios label=\"Size\" name=\"accent-size\" defaultValue=\"normal\">\n {radioSizes.map(size => (\n <Radio key={size} value={size} size={size}>\n {size}\n </Radio>\n ))}\n </Radios>\n </>\n );\n}"
27
27
  }
28
28
  ],
29
- "accessibility": "- Each `Radio` is rendered as a `<label>` wrapping an `<input type=\"radio\">` and the label text, for optimal accessibility.\n- Use the same `name` prop for a group of radios to ensure only one can be selected.",
29
+ "accessibility": "- Each `Radio` is rendered as a `<label>` wrapping an `<input type=\"radio\">` and the label text, for optimal accessibility.\n- Use the same `name` prop for a group of radios to ensure only one can be selected.\n- An unchecked radio shows only its ring, `--bulma-radio-border-color`. It defaults to `--bulma-text-weak`, which holds the 3:1 contrast WCAG asks of a control's boundary (non-text contrast) on Bulma's page and card surfaces in light and dark. Set a replacement on a class you pass through `className`, since `style` goes to the `<input>`, naming the label's class too (`.styled-radio.my-radio`) so load order can't undo it, and hold it to 3:1 as well.",
30
30
  "related": ["Field", "Radios", "useBulmaClasses"],
31
31
  "storybook": "https://bestax.io/storybook/?path=/story/form-radio--mutually-exclusive",
32
32
  "summary": "The `Radio` component provides a Bulma-styled radio button input with flexible labels and helper classes.",
@@ -80,7 +80,7 @@
80
80
  "name": "className",
81
81
  "type": "string",
82
82
  "default": null,
83
- "description": "Additional CSS classes to apply.",
83
+ "description": "Additional CSS classes, on the outer `<label>`. That's the element that declares the `--bulma-radio-*` variables, so a class is how to set one: `style` and the other input attributes go to the `<input>`. Name `.styled-radio` beside your class in the selector, so it beats the label's own declaration whatever order the stylesheets load in. A `color` prop declares the active color again on `.styled-radio.is-<color>`, which ties that selector, so leave `color` unset when a class sets it.",
84
84
  "required": false,
85
85
  "inherited": false,
86
86
  "deprecated": false
@@ -125,7 +125,7 @@
125
125
  {
126
126
  "css": "--bulma-radio-border-color",
127
127
  "sass": "$radio-border-color",
128
- "default": "var(--bulma-border)",
128
+ "default": "var(--bulma-text-weak)",
129
129
  "scope": "root"
130
130
  },
131
131
  {
@@ -207,7 +207,7 @@
207
207
  "name": "className",
208
208
  "type": "string",
209
209
  "default": null,
210
- "description": "Additional CSS classes to apply.",
210
+ "description": "Additional CSS classes, on the outer `<label>`. That's the element that declares the `--bulma-radio-*` variables, so a class is how to set one: `style` and the other input attributes go to the `<input>`. Name `.styled-radio` beside your class in the selector, so it beats the label's own declaration whatever order the stylesheets load in. A `color` prop declares the active color again on `.styled-radio.is-<color>`, which ties that selector, so leave `color` unset when a class sets it.",
211
211
  "required": false,
212
212
  "inherited": false,
213
213
  "deprecated": false
@@ -248,6 +248,9 @@ lone class or the `style` prop cannot outrank:
248
248
  its own declaration — target the declaring element in your CSS:
249
249
  `.tooltip-content { --bulma-tooltip-background: … }`.
250
250
 
251
+ The `style` prop also misses on Checkbox and Radio, which put it on their hidden `<input>`; set
252
+ their variables through `className` (see their entries below).
253
+
251
254
  ### Avatar / Avatars / Badge
252
255
 
253
256
  | Variable | Default |
@@ -303,12 +306,22 @@ own-selector override rule applies.
303
306
  `--bulma-carousel-indicator-line-height`, `--bulma-carousel-indicator-line-height-mobile`,
304
307
  `--bulma-carousel-indicator-line-radius`, `--bulma-carousel-indicator-line-width`,
305
308
  `--bulma-carousel-indicator-line-width-mobile`, `--bulma-carousel-indicator-size`,
306
- `--bulma-carousel-indicator-size-mobile`, `--bulma-carousel-overlay-arrow-background`,
309
+ `--bulma-carousel-indicator-size-mobile`, `--bulma-carousel-item-gap`,
310
+ `--bulma-carousel-items-in-view`, `--bulma-carousel-items-to-show`,
311
+ `--bulma-carousel-items-to-show-desktop`, `--bulma-carousel-items-to-show-fullhd`,
312
+ `--bulma-carousel-items-to-show-mobile`, `--bulma-carousel-items-to-show-tablet`,
313
+ `--bulma-carousel-items-to-show-widescreen`, `--bulma-carousel-overlay-arrow-background`,
307
314
  `--bulma-carousel-overlay-arrow-background-hover`, `--bulma-carousel-overlay-arrow-color`,
308
315
  `--bulma-carousel-overlay-indicator-background`,
309
316
  `--bulma-carousel-overlay-indicator-background-active`,
310
317
  `--bulma-carousel-overlay-indicator-background-hover`, `--bulma-carousel-transition-duration`
311
318
 
319
+ `--bulma-carousel-item-gap` (a length, default `0px`) is the space between items in view; set it
320
+ on the carousel's own element through a class. The `--bulma-carousel-items-to-show*` variables
321
+ come from the `itemsToShow*` props, and `--bulma-carousel-items-in-view` is the one of them the
322
+ viewport picks. The props also decide how far a step moves, so set the count with the props
323
+ rather than with these variables.
324
+
312
325
  ### Checkbox
313
326
 
314
327
  `--bulma-checkbox-active-color`, `--bulma-checkbox-background`, `--bulma-checkbox-border-color`,
@@ -317,6 +330,17 @@ own-selector override rule applies.
317
330
  `--bulma-checkbox-label-gap`, `--bulma-checkbox-radius`, `--bulma-checkbox-size`,
318
331
  `--bulma-checkbox-transition-duration`
319
332
 
333
+ The check mark and the mixed dash are both `--bulma-checkbox-check-color`, on the
334
+ `--bulma-checkbox-active-color` (checked) or `--bulma-checkbox-indeterminate-color` (mixed) fill,
335
+ so a dark fill needs a light check color. Set these on a class you pass through `className`, not
336
+ with `style`: Checkbox puts `style` and its other attributes on the hidden `<input>`, not on the
337
+ `.styled-checkbox` label that declares them. Name both classes in the selector
338
+ (`.styled-checkbox.my-box`, mind the class prefix) so it wins whatever order the stylesheets load
339
+ in. A `color` prop declares both fills again on `.styled-checkbox.is-<color>`, which ties with
340
+ that selector, so leave `color` unset when a class sets the fill. The unchecked border, `--bulma-checkbox-border-color`, defaults to `text-weak` so
341
+ the box holds the 3:1 WCAG asks of a control's boundary; keep a replacement at 3:1 against what
342
+ the form sits on.
343
+
320
344
  ### Collapse
321
345
 
322
346
  `--bulma-collapse-border-color`, `--bulma-collapse-group-gap`, `--bulma-collapse-header-weight`,
@@ -515,6 +539,12 @@ them. See the constituent-element exception above.
515
539
  `--bulma-radio-border-width`, `--bulma-radio-dot-color`, `--bulma-radio-focus-shadow-size`,
516
540
  `--bulma-radio-label-gap`, `--bulma-radio-size`, `--bulma-radio-transition-duration`
517
541
 
542
+ As with Checkbox, set these on a class you pass through `className`, with both classes in the
543
+ selector (`.styled-radio.my-radio`): `style` goes to the hidden `<input>`. A `color` prop
544
+ declares `--bulma-radio-active-color` again on `.styled-radio.is-<color>`, which ties that
545
+ selector, so leave `color` unset when a class sets it. The unchecked ring, `--bulma-radio-border-color`, defaults to `text-weak` for the same 3:1 boundary
546
+ contrast.
547
+
518
548
  ### Rate
519
549
 
520
550
  `--bulma-rate-color-active`, `--bulma-rate-color-hover`, `--bulma-rate-color-inactive`,
package/data/skills.json CHANGED
@@ -176,7 +176,7 @@
176
176
  {
177
177
  "id": "css-variables",
178
178
  "file": "references/css-variables.md",
179
- "bytes": 45565
179
+ "bytes": 47797
180
180
  },
181
181
  {
182
182
  "id": "themeable-components",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bestax-mcp",
3
- "version": "1.18.0",
3
+ "version": "1.18.2",
4
4
  "mcpName": "io.github.allxsmith/bestax-mcp",
5
5
  "description": "MCP server for @allxsmith/bestax-bulma — component props, examples, CSS variables and agent skills, served offline from a version-pinned index",
6
6
  "type": "module",
@@ -42,7 +42,7 @@
42
42
  "dependencies": {
43
43
  "@modelcontextprotocol/sdk": "^1.31.0",
44
44
  "zod": "^4.4.3",
45
- "@allxsmith/bestax-bulma": "^5.41.0"
45
+ "@allxsmith/bestax-bulma": "^5.42.1"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@jest/globals": "^30.0.0",