bestax-mcp 1.2.3 → 1.2.5

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 (57) hide show
  1. package/data/catalog.json +12 -12
  2. package/data/components/Autocomplete.json +1 -1
  3. package/data/components/Avatar.json +34 -11
  4. package/data/components/Avatars.json +30 -11
  5. package/data/components/Block.json +1 -1
  6. package/data/components/Button.json +12 -48
  7. package/data/components/Buttons.json +24 -96
  8. package/data/components/Code.json +1 -1
  9. package/data/components/Collapse.json +2 -2
  10. package/data/components/DateInput.json +10 -10
  11. package/data/components/DateTimeInput.json +10 -10
  12. package/data/components/Dropdown.json +10 -10
  13. package/data/components/Emphasis.json +1 -1
  14. package/data/components/Hero.json +1 -1
  15. package/data/components/Icon.json +15 -13
  16. package/data/components/IconText.json +13 -11
  17. package/data/components/Level.json +1 -28
  18. package/data/components/Link.json +18 -32
  19. package/data/components/LinkButton.json +12 -48
  20. package/data/components/Menu.json +68 -9
  21. package/data/components/Navbar.json +31 -21
  22. package/data/components/Notification.json +1 -1
  23. package/data/components/Numberinput.json +3 -3
  24. package/data/components/Panel.json +13 -11
  25. package/data/components/Paragraph.json +1 -1
  26. package/data/components/Pre.json +1 -1
  27. package/data/components/Progress.json +1 -1
  28. package/data/components/Rate.json +1 -1
  29. package/data/components/Reveal.json +22 -14
  30. package/data/components/Slider.json +3 -3
  31. package/data/components/Span.json +1 -1
  32. package/data/components/Steps.json +2 -2
  33. package/data/components/Strong.json +1 -1
  34. package/data/components/SubTitle.json +1 -1
  35. package/data/components/Switch.json +5 -5
  36. package/data/components/Taginput.json +3 -3
  37. package/data/components/TimeInput.json +9 -9
  38. package/data/components/Title.json +1 -1
  39. package/data/components/Tooltip.json +1 -1
  40. package/data/components/Valid value constants.json +1 -1
  41. package/data/components/useBulmaClasses.json +1 -1
  42. package/data/skills/bestax-custom-component/references/api.md +3 -1
  43. package/data/skills/bestax-custom-component/references/library-contributor.md +40 -0
  44. package/data/skills/bestax-layout-scaffold/references/layout-components.md +7 -6
  45. package/data/skills/bestax-migrate/SKILL.md +20 -8
  46. package/data/skills/bestax-migrate/references/bloomer/component-map.md +159 -0
  47. package/data/skills/bestax-migrate/references/bloomer/prop-map.md +166 -0
  48. package/data/skills/bestax-migrate/references/bloomer/unmappables.md +290 -0
  49. package/data/skills/bestax-migrate/references/css-migration.md +4 -3
  50. package/data/skills/bestax-migrate/references/rbx/component-map.md +1 -1
  51. package/data/skills/bestax-migrate/references/rbx/prop-map.md +25 -5
  52. package/data/skills/bestax-migrate/references/rbx/unmappables.md +47 -5
  53. package/data/skills/bestax-migrate/references/react-bulma-components/prop-map.md +17 -0
  54. package/data/skills/bestax-migrate/references/react-bulma-components/unmappables.md +51 -4
  55. package/data/skills/bestax-theming/references/themeable-components.md +39 -39
  56. package/data/skills.json +25 -10
  57. package/package.json +3 -2
package/data/catalog.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "schemaVersion": 1,
3
3
  "generatedFrom": {
4
4
  "package": "@allxsmith/bestax-bulma",
5
- "version": "5.14.0"
5
+ "version": "5.15.4"
6
6
  },
7
7
  "docsBase": "https://bestax.io/docs",
8
8
  "categories": [
@@ -139,8 +139,8 @@
139
139
  "slug": "components/avatar",
140
140
  "import": "import { Avatar } from '@allxsmith/bestax-bulma';",
141
141
  "compound": false,
142
- "propCount": 14,
143
- "exampleCount": 7
142
+ "propCount": 15,
143
+ "exampleCount": 8
144
144
  },
145
145
  {
146
146
  "name": "Avatars",
@@ -150,7 +150,7 @@
150
150
  "slug": "components/avatars",
151
151
  "import": "import { Avatars, Avatar } from '@allxsmith/bestax-bulma';",
152
152
  "compound": true,
153
- "propCount": 22,
153
+ "propCount": 23,
154
154
  "exampleCount": 8
155
155
  },
156
156
  {
@@ -205,7 +205,7 @@
205
205
  "slug": "elements/button",
206
206
  "import": "import { Button } from '@allxsmith/bestax-bulma';",
207
207
  "compound": false,
208
- "propCount": 23,
208
+ "propCount": 19,
209
209
  "exampleCount": 25
210
210
  },
211
211
  {
@@ -216,7 +216,7 @@
216
216
  "slug": "elements/buttons",
217
217
  "import": "import { Buttons } from '@allxsmith/bestax-bulma';",
218
218
  "compound": true,
219
- "propCount": 53,
219
+ "propCount": 45,
220
220
  "exampleCount": 8
221
221
  },
222
222
  {
@@ -557,7 +557,7 @@
557
557
  "slug": "layout/level",
558
558
  "import": "import { Level } from '@allxsmith/bestax-bulma';",
559
559
  "compound": true,
560
- "propCount": 26,
560
+ "propCount": 23,
561
561
  "exampleCount": 5
562
562
  },
563
563
  {
@@ -569,7 +569,7 @@
569
569
  "import": "import { Link } from '@allxsmith/bestax-bulma';",
570
570
  "compound": false,
571
571
  "propCount": 6,
572
- "exampleCount": 11
572
+ "exampleCount": 12
573
573
  },
574
574
  {
575
575
  "name": "LinkButton",
@@ -579,7 +579,7 @@
579
579
  "slug": "elements/linkbutton",
580
580
  "import": "import { LinkButton } from '@allxsmith/bestax-bulma';",
581
581
  "compound": false,
582
- "propCount": 21,
582
+ "propCount": 17,
583
583
  "exampleCount": 10
584
584
  },
585
585
  {
@@ -623,8 +623,8 @@
623
623
  "slug": "components/menu",
624
624
  "import": "import { Menu } from '@allxsmith/bestax-bulma';",
625
625
  "compound": true,
626
- "propCount": 11,
627
- "exampleCount": 5
626
+ "propCount": 16,
627
+ "exampleCount": 6
628
628
  },
629
629
  {
630
630
  "name": "Message",
@@ -788,7 +788,7 @@
788
788
  "slug": "components/reveal",
789
789
  "import": "import { Reveal } from '@allxsmith/bestax-bulma';",
790
790
  "compound": false,
791
- "propCount": 9,
791
+ "propCount": 11,
792
792
  "exampleCount": 5
793
793
  },
794
794
  {
@@ -19,7 +19,7 @@
19
19
  },
20
20
  {
21
21
  "title": "Color and Size Variants",
22
- "code": "<Block display=\"flex\" flexDirection=\"column\" gap=\"4\">\n <Autocomplete\n data={['Apple', 'Banana', 'Cherry']}\n placeholder=\"Primary small\"\n color=\"primary\"\n size=\"small\"\n />\n <Autocomplete\n data={['Apple', 'Banana', 'Cherry']}\n placeholder=\"Info normal\"\n color=\"info\"\n />\n <Autocomplete\n data={['Apple', 'Banana', 'Cherry']}\n placeholder=\"Success medium\"\n color=\"success\"\n size=\"medium\"\n />\n <Autocomplete\n data={['Apple', 'Banana', 'Cherry']}\n placeholder=\"Danger large\"\n color=\"danger\"\n size=\"large\"\n />\n</Block>"
22
+ "code": "<Block display=\"flex\" flexDirection=\"column\">\n <Autocomplete\n data={['Apple', 'Banana', 'Cherry']}\n placeholder=\"Primary small\"\n color=\"primary\"\n size=\"small\"\n />\n <Autocomplete\n data={['Apple', 'Banana', 'Cherry']}\n placeholder=\"Info normal\"\n color=\"info\"\n />\n <Autocomplete\n data={['Apple', 'Banana', 'Cherry']}\n placeholder=\"Success medium\"\n color=\"success\"\n size=\"medium\"\n />\n <Autocomplete\n data={['Apple', 'Banana', 'Cherry']}\n placeholder=\"Danger large\"\n color=\"danger\"\n size=\"large\"\n />\n</Block>"
23
23
  },
24
24
  {
25
25
  "title": "With Object Data",
@@ -32,6 +32,10 @@
32
32
  {
33
33
  "title": "Forwarding Props to the Image",
34
34
  "code": "<Avatar\n src=\"https://github.com/allxsmith.png\"\n name=\"Al Smith\"\n size=\"64x64\"\n imageProps={{ loading: 'lazy' }}\n/>"
35
+ },
36
+ {
37
+ "title": "Forwarded ref",
38
+ "code": "function example() {\n const avatarRef = React.useRef(null);\n const [tag, setTag] = React.useState(null);\n\n return (\n <>\n <Avatar ref={avatarRef} name=\"Ada Lovelace\" size=\"64x64\" />\n <Button mt=\"3\" onClick={() => setTag(avatarRef.current?.tagName)}>\n Read the tag from its ref\n </Button>\n <p>Rendered element: {tag ?? '—'}</p>\n </>\n );\n}"
35
39
  }
36
40
  ],
37
41
  "accessibility": "- Image avatars use `alt` (falling back to `name`) for their accessible name.\n- Initials/icon avatars expose `role=\"img\"` and `aria-label` (from `alt`/`name`) — unless\n rendered as a link or button, where the native link/button role and `aria-label` are used\n instead.\n- **Decorative avatars:** pass an explicit `alt=\"\"` when the avatar repeats information\n already visible next to it (e.g. beside the author's name in a comment row). The image\n stays decorative and an initials/icon avatar is skipped entirely (`aria-hidden`), avoiding\n double-speak. The opt-out never applies to a link/button avatar — an interactive element\n always keeps an accessible name (from `name`, or a generic `\"Avatar\"` fallback).\n- A link/button avatar with no `alt`/`name` (e.g. an API that returns only a photo URL) still\n gets an `aria-label` fallback rather than rendering a nameless control.\n- `as=\"button\"` defaults to `type=\"button\"`, so a clickable avatar inside a form doesn't\n submit it.\n- The default fallback icon is `aria-hidden`.",
@@ -47,6 +51,15 @@
47
51
  "summary": "The `Avatar` component represents a person or entity as a compact image.",
48
52
  "component": null,
49
53
  "props": [
54
+ {
55
+ "name": "as",
56
+ "type": "React.ElementType",
57
+ "default": null,
58
+ "description": "Element/component to render as. Defaults to `'a'` when `href` is set, else `'figure'`.",
59
+ "required": false,
60
+ "inherited": false,
61
+ "deprecated": false
62
+ },
50
63
  {
51
64
  "name": "className",
52
65
  "type": "string",
@@ -128,15 +141,6 @@
128
141
  "inherited": false,
129
142
  "deprecated": false
130
143
  },
131
- {
132
- "name": "as",
133
- "type": "React.ElementType",
134
- "default": null,
135
- "description": "Element/component to render as. Defaults to `'a'` when `href` is set, else `'figure'`.",
136
- "required": false,
137
- "inherited": false,
138
- "deprecated": false
139
- },
140
144
  {
141
145
  "name": "href",
142
146
  "type": "string",
@@ -172,10 +176,29 @@
172
176
  "required": false,
173
177
  "inherited": false,
174
178
  "deprecated": false
179
+ },
180
+ {
181
+ "name": "style",
182
+ "type": "React.CSSProperties",
183
+ "default": null,
184
+ "description": "Inline styles, merged after the size style.",
185
+ "required": false,
186
+ "inherited": false,
187
+ "deprecated": false
188
+ }
189
+ ],
190
+ "extraProps": [
191
+ {
192
+ "name": "ref",
193
+ "type": "PolymorphicRef<React.ElementType>",
194
+ "default": null,
195
+ "description": "Ref forwarded to the element `as` renders, typed from `as`: the DOM node for an intrinsic tag, or whatever handle a custom component exposes.",
196
+ "required": false,
197
+ "inherited": false,
198
+ "deprecated": false
175
199
  }
176
200
  ],
177
- "extraProps": [],
178
- "catchAll": "All standard HTML attributes and Bulma helper props",
201
+ "catchAll": "Remaining props of the element or component selected by as (default <figure>) and Bulma helper props",
179
202
  "types": [
180
203
  {
181
204
  "name": "AvatarColor",
@@ -133,6 +133,15 @@
133
133
  "summary": "The `Avatar` component represents a person or entity as a compact image.",
134
134
  "component": "Avatar",
135
135
  "props": [
136
+ {
137
+ "name": "as",
138
+ "type": "React.ElementType",
139
+ "default": null,
140
+ "description": "Element/component to render as. Defaults to `'a'` when `href` is set, else `'figure'`.",
141
+ "required": false,
142
+ "inherited": false,
143
+ "deprecated": false
144
+ },
136
145
  {
137
146
  "name": "className",
138
147
  "type": "string",
@@ -214,15 +223,6 @@
214
223
  "inherited": false,
215
224
  "deprecated": false
216
225
  },
217
- {
218
- "name": "as",
219
- "type": "React.ElementType",
220
- "default": null,
221
- "description": "Element/component to render as. Defaults to `'a'` when `href` is set, else `'figure'`.",
222
- "required": false,
223
- "inherited": false,
224
- "deprecated": false
225
- },
226
226
  {
227
227
  "name": "href",
228
228
  "type": "string",
@@ -258,10 +258,29 @@
258
258
  "required": false,
259
259
  "inherited": false,
260
260
  "deprecated": false
261
+ },
262
+ {
263
+ "name": "style",
264
+ "type": "React.CSSProperties",
265
+ "default": null,
266
+ "description": "Inline styles, merged after the size style.",
267
+ "required": false,
268
+ "inherited": false,
269
+ "deprecated": false
261
270
  }
262
271
  ],
263
- "extraProps": [],
264
- "catchAll": "All standard HTML attributes and Bulma helper props",
272
+ "extraProps": [
273
+ {
274
+ "name": "ref",
275
+ "type": "PolymorphicRef<React.ElementType>",
276
+ "default": null,
277
+ "description": "Ref forwarded to the element `as` renders, typed from `as`: the DOM node for an intrinsic tag, or whatever handle a custom component exposes.",
278
+ "required": false,
279
+ "inherited": false,
280
+ "deprecated": false
281
+ }
282
+ ],
283
+ "catchAll": "Remaining props of the element or component selected by as (default <figure>) and Bulma helper props",
265
284
  "types": [
266
285
  {
267
286
  "name": "AvatarColor",
@@ -32,7 +32,7 @@
32
32
  },
33
33
  {
34
34
  "title": "Stacked Blocks (Demonstrating Vertical Spacing)",
35
- "code": "<Block display=\"flex\" flexDirection=\"column\" gap=\"0\">\n <Block>\n <Notification color=\"primary\" mb={0}>\n First Block\n </Notification>\n </Block>\n <Block>\n <Notification color=\"info\" mb={0}>\n Second Block\n </Notification>\n </Block>\n <Block>\n <Notification color=\"success\" mb={0}>\n Third Block\n </Notification>\n </Block>\n <Block>\n <Notification color=\"warning\" mb={0}>\n Fourth Block\n </Notification>\n </Block>\n</Block>"
35
+ "code": "<Block display=\"flex\" flexDirection=\"column\">\n <Block>\n <Notification color=\"primary\" mb={0}>\n First Block\n </Notification>\n </Block>\n <Block>\n <Notification color=\"info\" mb={0}>\n Second Block\n </Notification>\n </Block>\n <Block>\n <Notification color=\"success\" mb={0}>\n Third Block\n </Notification>\n </Block>\n <Block>\n <Notification color=\"warning\" mb={0}>\n Fourth Block\n </Notification>\n </Block>\n</Block>"
36
36
  }
37
37
  ],
38
38
  "accessibility": "- **Content:** Use semantic HTML inside `Block` for best accessibility.\n- **Spacing:** The `.block` class is for layout only and does not affect accessibility.\n- **Contrast:** Choose text and background colors for good readability.\n\n:::info\nUse `Block` for logical, visually separated sections of content.\n:::",
@@ -110,6 +110,15 @@
110
110
  "summary": "The `Button` component provides a flexible and highly customizable button for your Bulma React UI.",
111
111
  "component": null,
112
112
  "props": [
113
+ {
114
+ "name": "as",
115
+ "type": "React.ElementType",
116
+ "default": "'button'",
117
+ "description": "Render as a `<button>`, `<a>`, or a custom component (e.g. a router `Link`). Defaults to `'button'`; anything else renders through the anchor path, which adds `href`/`target`/`rel` and withholds the submit-override attributes (`formAction` and friends) from an `<a>`.",
118
+ "required": false,
119
+ "inherited": false,
120
+ "deprecated": false
121
+ },
113
122
  {
114
123
  "name": "color",
115
124
  "type": "'primary' | 'link' | 'info' | 'success' | 'warning' | 'danger' | 'white' | 'light' | 'dark' | 'black' | 'text' | 'ghost'",
@@ -266,51 +275,6 @@
266
275
  "deprecated": false,
267
276
  "valuesRef": "helpers/valid-values"
268
277
  },
269
- {
270
- "name": "as",
271
- "type": "React.ElementType",
272
- "default": "'button'",
273
- "description": "Render as a `<button>`, `<a>`, or a custom component (e.g. a router `Link`). Defaults to `'button'`; anything else (including `'a'`) uses anchor-style prop handling.",
274
- "required": false,
275
- "inherited": false,
276
- "deprecated": false
277
- },
278
- {
279
- "name": "href",
280
- "type": "string",
281
- "default": null,
282
- "description": "Href value (if rendering as `<a>`).",
283
- "required": false,
284
- "inherited": false,
285
- "deprecated": false
286
- },
287
- {
288
- "name": "onClick",
289
- "type": "React.MouseEventHandler<HTMLButtonElement> | React.MouseEventHandler<HTMLAnchorElement>",
290
- "default": null,
291
- "description": "Click event handler.",
292
- "required": false,
293
- "inherited": false,
294
- "deprecated": false
295
- },
296
- {
297
- "name": "target",
298
- "type": "string",
299
- "default": null,
300
- "description": "Anchor tag target.",
301
- "required": false,
302
- "inherited": false,
303
- "deprecated": false
304
- },
305
- {
306
- "name": "rel",
307
- "type": "string",
308
- "default": null,
309
- "description": "Anchor tag rel.",
310
- "required": false,
311
- "inherited": false,
312
- "deprecated": false
313
- },
314
278
  {
315
279
  "name": "children",
316
280
  "type": "React.ReactNode",
@@ -324,15 +288,15 @@
324
288
  "extraProps": [
325
289
  {
326
290
  "name": "ref",
327
- "type": "React.Ref<HTMLButtonElement | HTMLAnchorElement>",
291
+ "type": "PolymorphicRef<React.ElementType>",
328
292
  "default": null,
329
- "description": "Ref forwarded to the rendered button or anchor element.",
293
+ "description": "Ref forwarded to the element `as` renders, typed from `as`: the DOM node for an intrinsic tag, or whatever handle a custom component exposes.",
330
294
  "required": false,
331
295
  "inherited": false,
332
296
  "deprecated": false
333
297
  }
334
298
  ],
335
- "catchAll": "All standard <button> attributes and Bulma helper props",
299
+ "catchAll": "Remaining props of the element or component selected by as (default <button>) and Bulma helper props",
336
300
  "types": []
337
301
  }
338
302
  ],
@@ -144,6 +144,15 @@
144
144
  "summary": "The `Button` component provides a flexible and highly customizable button for your Bulma React UI.",
145
145
  "component": "Button",
146
146
  "props": [
147
+ {
148
+ "name": "as",
149
+ "type": "React.ElementType",
150
+ "default": "'button'",
151
+ "description": "Render as a `<button>`, `<a>`, or a custom component (e.g. a router `Link`). Defaults to `'button'`; anything else renders through the anchor path, which adds `href`/`target`/`rel` and withholds the submit-override attributes (`formAction` and friends) from an `<a>`.",
152
+ "required": false,
153
+ "inherited": false,
154
+ "deprecated": false
155
+ },
147
156
  {
148
157
  "name": "color",
149
158
  "type": "'primary' | 'link' | 'info' | 'success' | 'warning' | 'danger' | 'white' | 'light' | 'dark' | 'black' | 'text' | 'ghost'",
@@ -300,51 +309,6 @@
300
309
  "deprecated": false,
301
310
  "valuesRef": "helpers/valid-values"
302
311
  },
303
- {
304
- "name": "as",
305
- "type": "React.ElementType",
306
- "default": "'button'",
307
- "description": "Render as a `<button>`, `<a>`, or a custom component (e.g. a router `Link`). Defaults to `'button'`; anything else (including `'a'`) uses anchor-style prop handling.",
308
- "required": false,
309
- "inherited": false,
310
- "deprecated": false
311
- },
312
- {
313
- "name": "href",
314
- "type": "string",
315
- "default": null,
316
- "description": "Href value (if rendering as `<a>`).",
317
- "required": false,
318
- "inherited": false,
319
- "deprecated": false
320
- },
321
- {
322
- "name": "onClick",
323
- "type": "React.MouseEventHandler<HTMLButtonElement> | React.MouseEventHandler<HTMLAnchorElement>",
324
- "default": null,
325
- "description": "Click event handler.",
326
- "required": false,
327
- "inherited": false,
328
- "deprecated": false
329
- },
330
- {
331
- "name": "target",
332
- "type": "string",
333
- "default": null,
334
- "description": "Anchor tag target.",
335
- "required": false,
336
- "inherited": false,
337
- "deprecated": false
338
- },
339
- {
340
- "name": "rel",
341
- "type": "string",
342
- "default": null,
343
- "description": "Anchor tag rel.",
344
- "required": false,
345
- "inherited": false,
346
- "deprecated": false
347
- },
348
312
  {
349
313
  "name": "children",
350
314
  "type": "React.ReactNode",
@@ -358,15 +322,15 @@
358
322
  "extraProps": [
359
323
  {
360
324
  "name": "ref",
361
- "type": "React.Ref<HTMLButtonElement | HTMLAnchorElement>",
325
+ "type": "PolymorphicRef<React.ElementType>",
362
326
  "default": null,
363
- "description": "Ref forwarded to the rendered button or anchor element.",
327
+ "description": "Ref forwarded to the element `as` renders, typed from `as`: the DOM node for an intrinsic tag, or whatever handle a custom component exposes.",
364
328
  "required": false,
365
329
  "inherited": false,
366
330
  "deprecated": false
367
331
  }
368
332
  ],
369
- "catchAll": "All standard <button> attributes and Bulma helper props",
333
+ "catchAll": "Remaining props of the element or component selected by as (default <button>) and Bulma helper props",
370
334
  "types": []
371
335
  },
372
336
  {
@@ -374,6 +338,15 @@
374
338
  "summary": "The `LinkButton` component renders a `<button>` that visually looks like text or a link.",
375
339
  "component": "LinkButton",
376
340
  "props": [
341
+ {
342
+ "name": "as",
343
+ "type": "React.ElementType",
344
+ "default": "'button'",
345
+ "description": "Render as a `<button>`, `<a>`, or a custom component (e.g. a router `Link`).",
346
+ "required": false,
347
+ "inherited": false,
348
+ "deprecated": false
349
+ },
377
350
  {
378
351
  "name": "variant",
379
352
  "type": "'text' | 'ghost' | 'underline'",
@@ -512,51 +485,6 @@
512
485
  "deprecated": false,
513
486
  "valuesRef": "helpers/valid-values"
514
487
  },
515
- {
516
- "name": "as",
517
- "type": "React.ElementType",
518
- "default": "'button'",
519
- "description": "Render as a `<button>`, `<a>`, or a custom component (e.g. a router `Link`). Defaults to `'button'`; anything else (including `'a'`) uses anchor-style prop handling.",
520
- "required": false,
521
- "inherited": true,
522
- "deprecated": false
523
- },
524
- {
525
- "name": "href",
526
- "type": "string",
527
- "default": null,
528
- "description": "Href value (if rendering as `<a>`).",
529
- "required": false,
530
- "inherited": true,
531
- "deprecated": false
532
- },
533
- {
534
- "name": "onClick",
535
- "type": "React.MouseEventHandler<HTMLButtonElement> | React.MouseEventHandler<HTMLAnchorElement>",
536
- "default": null,
537
- "description": "Click event handler.",
538
- "required": false,
539
- "inherited": true,
540
- "deprecated": false
541
- },
542
- {
543
- "name": "target",
544
- "type": "string",
545
- "default": null,
546
- "description": "Anchor tag target.",
547
- "required": false,
548
- "inherited": true,
549
- "deprecated": false
550
- },
551
- {
552
- "name": "rel",
553
- "type": "string",
554
- "default": null,
555
- "description": "Anchor tag rel.",
556
- "required": false,
557
- "inherited": true,
558
- "deprecated": false
559
- },
560
488
  {
561
489
  "name": "children",
562
490
  "type": "React.ReactNode",
@@ -570,15 +498,15 @@
570
498
  "extraProps": [
571
499
  {
572
500
  "name": "ref",
573
- "type": "React.Ref<HTMLButtonElement | HTMLAnchorElement>",
501
+ "type": "PolymorphicRef<React.ElementType>",
574
502
  "default": null,
575
- "description": "Ref forwarded to the rendered button or anchor element.",
503
+ "description": "Ref forwarded to the element `as` renders, typed from `as`: the DOM node for an intrinsic tag, or whatever handle a custom component exposes.",
576
504
  "required": false,
577
505
  "inherited": false,
578
506
  "deprecated": false
579
507
  }
580
508
  ],
581
- "catchAll": "All standard <button> attributes and Bulma helper props",
509
+ "catchAll": "Remaining props of the element or component selected by as (default <button>) and Bulma helper props",
582
510
  "types": []
583
511
  }
584
512
  ],
@@ -31,7 +31,7 @@
31
31
  },
32
32
  {
33
33
  "title": "All Colors",
34
- "code": "<Block display=\"flex\" flexDirection=\"column\" gap=\"2\">\n <Code textColor=\"primary\">primary code</Code>\n <Code textColor=\"link\">link code</Code>\n <Code textColor=\"info\">info code</Code>\n <Code textColor=\"success\">success code</Code>\n <Code textColor=\"warning\">warning code</Code>\n <Code textColor=\"danger\">danger code</Code>\n</Block>"
34
+ "code": "<Block display=\"flex\" flexDirection=\"column\">\n <Code textColor=\"primary\">primary code</Code>\n <Code textColor=\"link\">link code</Code>\n <Code textColor=\"info\">info code</Code>\n <Code textColor=\"success\">success code</Code>\n <Code textColor=\"warning\">warning code</Code>\n <Code textColor=\"danger\">danger code</Code>\n</Block>"
35
35
  },
36
36
  {
37
37
  "title": "File Path",
@@ -23,7 +23,7 @@
23
23
  },
24
24
  {
25
25
  "title": "Accordion",
26
- "code": "function example() {\n const [openIndex, setOpenIndex] = useState(0);\n\n const items = [\n { title: 'Section 1', content: 'Content for section 1.' },\n { title: 'Section 2', content: 'Content for section 2.' },\n { title: 'Section 3', content: 'Content for section 3.' },\n ];\n\n return (\n <Block display=\"flex\" flexDirection=\"column\" gap=\"2\">\n {items.map((item, index) => (\n <Collapse\n key={index}\n className=\"collapse is-bordered\"\n open={openIndex === index}\n trigger={\n <Block\n p=\"4\"\n onClick={() => setOpenIndex(openIndex === index ? -1 : index)}\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n >\n <Strong>{item.title}</Strong>\n <Span>{openIndex === index ? '−' : '+'}</Span>\n </Block>\n }\n >\n <Paragraph p=\"4\">{item.content}</Paragraph>\n </Collapse>\n ))}\n </Block>\n );\n}"
26
+ "code": "function example() {\n const [openIndex, setOpenIndex] = useState(0);\n\n const items = [\n { title: 'Section 1', content: 'Content for section 1.' },\n { title: 'Section 2', content: 'Content for section 2.' },\n { title: 'Section 3', content: 'Content for section 3.' },\n ];\n\n return (\n <Block display=\"flex\" flexDirection=\"column\">\n {items.map((item, index) => (\n <Collapse\n key={index}\n className=\"collapse is-bordered\"\n open={openIndex === index}\n trigger={\n <Block\n p=\"4\"\n onClick={() => setOpenIndex(openIndex === index ? -1 : index)}\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n >\n <Strong>{item.title}</Strong>\n <Span>{openIndex === index ? '−' : '+'}</Span>\n </Block>\n }\n >\n <Paragraph p=\"4\">{item.content}</Paragraph>\n </Collapse>\n ))}\n </Block>\n );\n}"
27
27
  },
28
28
  {
29
29
  "title": "Card Style",
@@ -31,7 +31,7 @@
31
31
  },
32
32
  {
33
33
  "title": "FAQ Example",
34
- "code": "function example() {\n const faqs = [\n {\n q: 'What is Bestax?',\n a: 'Bestax is a React component library built on Bulma.',\n },\n { q: 'How do I install it?', a: 'pnpm add @allxsmith/bestax-bulma' },\n { q: 'Is it free?', a: 'Yes, Bestax is open source and free to use.' },\n ];\n\n const [openStates, setOpenStates] = useState(faqs.map(() => false));\n\n const toggle = index => {\n setOpenStates(prev =>\n prev.map((state, i) => (i === index ? !state : state))\n );\n };\n\n return (\n <Block>\n <Title size=\"5\" mb=\"4\">\n FAQ\n </Title>\n <Block display=\"flex\" flexDirection=\"column\" gap=\"2\">\n {faqs.map((faq, index) => (\n <Collapse\n key={index}\n className=\"collapse is-bordered\"\n trigger={\n <Block\n p=\"4\"\n onClick={() => toggle(index)}\n display=\"flex\"\n justifyContent=\"space-between\"\n >\n <Strong>{faq.q}</Strong>\n <Span>{openStates[index] ? '▲' : '▼'}</Span>\n </Block>\n }\n open={openStates[index]}\n >\n <Paragraph p=\"4\" textColor=\"grey-dark\">\n {faq.a}\n </Paragraph>\n </Collapse>\n ))}\n </Block>\n </Block>\n );\n}"
34
+ "code": "function example() {\n const faqs = [\n {\n q: 'What is Bestax?',\n a: 'Bestax is a React component library built on Bulma.',\n },\n { q: 'How do I install it?', a: 'pnpm add @allxsmith/bestax-bulma' },\n { q: 'Is it free?', a: 'Yes, Bestax is open source and free to use.' },\n ];\n\n const [openStates, setOpenStates] = useState(faqs.map(() => false));\n\n const toggle = index => {\n setOpenStates(prev =>\n prev.map((state, i) => (i === index ? !state : state))\n );\n };\n\n return (\n <Block>\n <Title size=\"5\" mb=\"4\">\n FAQ\n </Title>\n <Block display=\"flex\" flexDirection=\"column\">\n {faqs.map((faq, index) => (\n <Collapse\n key={index}\n className=\"collapse is-bordered\"\n trigger={\n <Block\n p=\"4\"\n onClick={() => toggle(index)}\n display=\"flex\"\n justifyContent=\"space-between\"\n >\n <Strong>{faq.q}</Strong>\n <Span>{openStates[index] ? '▲' : '▼'}</Span>\n </Block>\n }\n open={openStates[index]}\n >\n <Paragraph p=\"4\" textColor=\"grey-dark\">\n {faq.a}\n </Paragraph>\n </Collapse>\n ))}\n </Block>\n </Block>\n );\n}"
35
35
  }
36
36
  ],
37
37
  "accessibility": "- Trigger has `role=\"button\"` and `tabIndex=\"0\"` for keyboard access\n- Trigger has `aria-expanded` to indicate open/closed state\n- Trigger has `aria-controls` pointing to the content element\n- Content has `aria-hidden` matching the collapsed state\n- Supports keyboard navigation (Enter and Space to toggle)",
@@ -51,7 +51,7 @@
51
51
  },
52
52
  {
53
53
  "title": "Formats",
54
- "code": "<Block display=\"flex\" flexDirection=\"column\" gap=\"4\">\n <DateInput\n label=\"YYYY-MM-DD (default)\"\n defaultValue={new Date(2026, 4, 30)}\n openOnFocus={false}\n mobileNative={false}\n />\n <DateInput\n label=\"DD/MM/YYYY\"\n format=\"DD/MM/YYYY\"\n defaultValue={new Date(2026, 4, 30)}\n openOnFocus={false}\n mobileNative={false}\n />\n <DateInput\n label=\"MM-DD-YYYY\"\n format=\"MM-DD-YYYY\"\n defaultValue={new Date(2026, 4, 30)}\n openOnFocus={false}\n mobileNative={false}\n />\n <DateInput\n label=\"DD.MM.YY\"\n format=\"DD.MM.YY\"\n defaultValue={new Date(2026, 4, 30)}\n openOnFocus={false}\n mobileNative={false}\n />\n</Block>"
54
+ "code": "<Block display=\"flex\" flexDirection=\"column\">\n <DateInput\n label=\"YYYY-MM-DD (default)\"\n defaultValue={new Date(2026, 4, 30)}\n openOnFocus={false}\n mobileNative={false}\n />\n <DateInput\n label=\"DD/MM/YYYY\"\n format=\"DD/MM/YYYY\"\n defaultValue={new Date(2026, 4, 30)}\n openOnFocus={false}\n mobileNative={false}\n />\n <DateInput\n label=\"MM-DD-YYYY\"\n format=\"MM-DD-YYYY\"\n defaultValue={new Date(2026, 4, 30)}\n openOnFocus={false}\n mobileNative={false}\n />\n <DateInput\n label=\"DD.MM.YY\"\n format=\"DD.MM.YY\"\n defaultValue={new Date(2026, 4, 30)}\n openOnFocus={false}\n mobileNative={false}\n />\n</Block>"
55
55
  },
56
56
  {
57
57
  "title": "Formats",
@@ -63,11 +63,11 @@
63
63
  },
64
64
  {
65
65
  "title": "Launcher Icon",
66
- "code": "<Block display=\"flex\" flexDirection=\"column\" gap=\"4\">\n <DateInput label=\"Default (left icon + right launcher)\" />\n <DateInput label=\"Custom launcher glyph\" triggerIconName=\"calendar-day\" />\n <DateInput label=\"No launcher\" triggerIcon={false} />\n <DateInput label=\"Left icon hidden\" iconLeftName=\"\" />\n</Block>"
66
+ "code": "<Block display=\"flex\" flexDirection=\"column\">\n <DateInput label=\"Default (left icon + right launcher)\" />\n <DateInput label=\"Custom launcher glyph\" triggerIconName=\"calendar-day\" />\n <DateInput label=\"No launcher\" triggerIcon={false} />\n <DateInput label=\"Left icon hidden\" iconLeftName=\"\" />\n</Block>"
67
67
  },
68
68
  {
69
69
  "title": "Launcher Icon",
70
- "code": "<Block display=\"flex\" flexDirection=\"column\" gap=\"4\">\n <DateInput label=\"Default (left icon + right launcher)\" openOnFocus={false} />\n <DateInput\n label=\"Custom launcher glyph\"\n triggerIconName=\"calendar-day\"\n openOnFocus={false}\n />\n <DateInput\n label=\"No launcher — popover via ↓ only\"\n triggerIcon={false}\n openOnFocus={false}\n />\n <DateInput label=\"Left icon hidden\" iconLeftName=\"\" openOnFocus={false} />\n</Block>"
70
+ "code": "<Block display=\"flex\" flexDirection=\"column\">\n <DateInput label=\"Default (left icon + right launcher)\" openOnFocus={false} />\n <DateInput\n label=\"Custom launcher glyph\"\n triggerIconName=\"calendar-day\"\n openOnFocus={false}\n />\n <DateInput\n label=\"No launcher — popover via ↓ only\"\n triggerIcon={false}\n openOnFocus={false}\n />\n <DateInput label=\"Left icon hidden\" iconLeftName=\"\" openOnFocus={false} />\n</Block>"
71
71
  },
72
72
  {
73
73
  "title": "Manual Keyboard Entry",
@@ -95,11 +95,11 @@
95
95
  },
96
96
  {
97
97
  "title": "Locale",
98
- "code": "<Block display=\"flex\" flexDirection=\"column\" gap=\"4\">\n <DateInput\n label=\"ja-JP\"\n locale=\"ja-JP\"\n defaultValue={new Date()}\n mobileNative={false}\n />\n <DateInput\n label=\"fr-FR\"\n locale=\"fr-FR\"\n defaultValue={new Date()}\n mobileNative={false}\n />\n <DateInput\n label=\"de-DE\"\n locale=\"de-DE\"\n defaultValue={new Date()}\n mobileNative={false}\n />\n</Block>"
98
+ "code": "<Block display=\"flex\" flexDirection=\"column\">\n <DateInput\n label=\"ja-JP\"\n locale=\"ja-JP\"\n defaultValue={new Date()}\n mobileNative={false}\n />\n <DateInput\n label=\"fr-FR\"\n locale=\"fr-FR\"\n defaultValue={new Date()}\n mobileNative={false}\n />\n <DateInput\n label=\"de-DE\"\n locale=\"de-DE\"\n defaultValue={new Date()}\n mobileNative={false}\n />\n</Block>"
99
99
  },
100
100
  {
101
101
  "title": "Locale",
102
- "code": "<Block display=\"flex\" flexDirection=\"column\" gap=\"4\">\n <DateInput\n label=\"ja-JP\"\n locale=\"ja-JP\"\n defaultValue={new Date()}\n mobileNative={false}\n openOnFocus={false}\n />\n <DateInput\n label=\"fr-FR\"\n locale=\"fr-FR\"\n defaultValue={new Date()}\n mobileNative={false}\n openOnFocus={false}\n />\n <DateInput\n label=\"de-DE\"\n locale=\"de-DE\"\n defaultValue={new Date()}\n mobileNative={false}\n openOnFocus={false}\n />\n</Block>"
102
+ "code": "<Block display=\"flex\" flexDirection=\"column\">\n <DateInput\n label=\"ja-JP\"\n locale=\"ja-JP\"\n defaultValue={new Date()}\n mobileNative={false}\n openOnFocus={false}\n />\n <DateInput\n label=\"fr-FR\"\n locale=\"fr-FR\"\n defaultValue={new Date()}\n mobileNative={false}\n openOnFocus={false}\n />\n <DateInput\n label=\"de-DE\"\n locale=\"de-DE\"\n defaultValue={new Date()}\n mobileNative={false}\n openOnFocus={false}\n />\n</Block>"
103
103
  },
104
104
  {
105
105
  "title": "First Day of Week",
@@ -115,23 +115,23 @@
115
115
  },
116
116
  {
117
117
  "title": "Sizes",
118
- "code": "<Block display=\"flex\" flexDirection=\"column\" gap=\"4\">\n <DateInput label=\"Small\" controlSize=\"small\" size=\"small\" />\n <DateInput label=\"Default\" />\n <DateInput label=\"Medium\" controlSize=\"medium\" size=\"medium\" />\n <DateInput label=\"Large\" controlSize=\"large\" size=\"large\" />\n</Block>"
118
+ "code": "<Block display=\"flex\" flexDirection=\"column\">\n <DateInput label=\"Small\" controlSize=\"small\" size=\"small\" />\n <DateInput label=\"Default\" />\n <DateInput label=\"Medium\" controlSize=\"medium\" size=\"medium\" />\n <DateInput label=\"Large\" controlSize=\"large\" size=\"large\" />\n</Block>"
119
119
  },
120
120
  {
121
121
  "title": "Sizes",
122
- "code": "<Block display=\"flex\" flexDirection=\"column\" gap=\"4\">\n <DateInput\n label=\"Small\"\n controlSize=\"small\"\n size=\"small\"\n openOnFocus={false}\n />\n <DateInput label=\"Default\" openOnFocus={false} />\n <DateInput\n label=\"Medium\"\n controlSize=\"medium\"\n size=\"medium\"\n openOnFocus={false}\n />\n <DateInput\n label=\"Large\"\n controlSize=\"large\"\n size=\"large\"\n openOnFocus={false}\n />\n</Block>"
122
+ "code": "<Block display=\"flex\" flexDirection=\"column\">\n <DateInput\n label=\"Small\"\n controlSize=\"small\"\n size=\"small\"\n openOnFocus={false}\n />\n <DateInput label=\"Default\" openOnFocus={false} />\n <DateInput\n label=\"Medium\"\n controlSize=\"medium\"\n size=\"medium\"\n openOnFocus={false}\n />\n <DateInput\n label=\"Large\"\n controlSize=\"large\"\n size=\"large\"\n openOnFocus={false}\n />\n</Block>"
123
123
  },
124
124
  {
125
125
  "title": "Colors",
126
- "code": "<Block display=\"flex\" flexDirection=\"column\" gap=\"4\">\n <DateInput label=\"Primary\" color=\"primary\" />\n <DateInput label=\"Info\" color=\"info\" />\n <DateInput label=\"Success\" color=\"success\" />\n <DateInput label=\"Warning\" color=\"warning\" />\n <DateInput label=\"Danger\" color=\"danger\" />\n</Block>"
126
+ "code": "<Block display=\"flex\" flexDirection=\"column\">\n <DateInput label=\"Primary\" color=\"primary\" />\n <DateInput label=\"Info\" color=\"info\" />\n <DateInput label=\"Success\" color=\"success\" />\n <DateInput label=\"Warning\" color=\"warning\" />\n <DateInput label=\"Danger\" color=\"danger\" />\n</Block>"
127
127
  },
128
128
  {
129
129
  "title": "Colors",
130
- "code": "<Block display=\"flex\" flexDirection=\"column\" gap=\"4\">\n <DateInput label=\"Primary\" color=\"primary\" openOnFocus={false} />\n <DateInput label=\"Info\" color=\"info\" openOnFocus={false} />\n <DateInput label=\"Success\" color=\"success\" openOnFocus={false} />\n <DateInput label=\"Warning\" color=\"warning\" openOnFocus={false} />\n <DateInput label=\"Danger\" color=\"danger\" openOnFocus={false} />\n</Block>"
130
+ "code": "<Block display=\"flex\" flexDirection=\"column\">\n <DateInput label=\"Primary\" color=\"primary\" openOnFocus={false} />\n <DateInput label=\"Info\" color=\"info\" openOnFocus={false} />\n <DateInput label=\"Success\" color=\"success\" openOnFocus={false} />\n <DateInput label=\"Warning\" color=\"warning\" openOnFocus={false} />\n <DateInput label=\"Danger\" color=\"danger\" openOnFocus={false} />\n</Block>"
131
131
  },
132
132
  {
133
133
  "title": "States",
134
- "code": "<Block display=\"flex\" flexDirection=\"column\" gap=\"4\">\n <DateInput label=\"Disabled\" disabled />\n <DateInput label=\"Read only\" readOnly defaultValue={new Date()} />\n <DateInput label=\"Loading\" isLoading />\n</Block>"
134
+ "code": "<Block display=\"flex\" flexDirection=\"column\">\n <DateInput label=\"Disabled\" disabled />\n <DateInput label=\"Read only\" readOnly defaultValue={new Date()} />\n <DateInput label=\"Loading\" isLoading />\n</Block>"
135
135
  },
136
136
  {
137
137
  "title": "Horizontal Field",