diff --git a/bestax-mcp/data/catalog.json b/bestax-mcp/data/catalog.json
index e63cf4e28..565d17104 100644
--- a/bestax-mcp/data/catalog.json
+++ b/bestax-mcp/data/catalog.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"generatedFrom": {
"package": "@allxsmith/bestax-bulma",
- "version": "5.26.6"
+ "version": "5.27.0"
},
"docsBase": "https://bestax.io/docs",
"categories": [
diff --git a/bestax-mcp/data/components/Autocomplete.json b/bestax-mcp/data/components/Autocomplete.json
index 55b57b8f1..486c7c9ee 100644
--- a/bestax-mcp/data/components/Autocomplete.json
+++ b/bestax-mcp/data/components/Autocomplete.json
@@ -54,7 +54,7 @@
"code": "function example() {\n return (\n \n \n \n \n \n \n \n \n \n );\n}"
}
],
- "accessibility": "- The `label` prop is automatically associated with the inner text input (`htmlFor` plus a generated `id`, or your own `id` if you pass one), so clicking the label focuses the input and assistive technology announces it.\n- A user-supplied `id` is applied to the inner input (the labellable control), not the wrapper div.\n- Uses `role=\"combobox\"` with `aria-expanded`\n- Has `aria-haspopup=\"listbox\"` and `aria-autocomplete=\"list\"`\n- Dropdown items use `role=\"option\"` with `aria-selected`\n- Disabled items have `aria-disabled`\n- The `clearable` clear button is a native button named \"Clear\": `Tab` from the input reaches it, and `Enter` or `Space` clears the input and puts focus back in it\n- Full keyboard navigation support",
+ "accessibility": "- The `label` prop is automatically associated with the inner text input (`htmlFor` plus a generated `id`, or your own `id` if you pass one), so clicking the label focuses the input and assistive technology announces it.\n- A user-supplied `id` is applied to the inner input (the labellable control), not the wrapper div.\n- Uses `role=\"combobox\"` with `aria-expanded`, which is true only while the list is on screen\n- Has `aria-haspopup=\"listbox\"` and `aria-autocomplete=\"list\"`, and, while the list is on screen, `aria-controls` pointing at it\n- Focus stays in the input, which points `aria-activedescendant` at the highlighted option as the arrow keys move it\n- The list is a `role=\"listbox\"` named by the `label` prop's label. Inside an outer `Field`, or with no `label`, it falls back to `aria-label=\"Suggestions\"`\n- Dropdown items use `role=\"option\"` with `aria-selected`\n- Disabled items have `aria-disabled`\n- The `clearable` clear button is a native button named \"Clear\": `Tab` from the input reaches it, and `Enter` or `Space` clears the input and puts focus back in it\n- Full keyboard navigation support",
"related": ["Input", "Select", "Taginput"],
"storybook": "https://bestax.io/storybook/?path=/story/form-autocomplete",
"summary": "The `Autocomplete` component provides an input field with dropdown suggestions that filter based on user input.",
diff --git a/bestax-mcp/data/components/DateTimeInput.json b/bestax-mcp/data/components/DateTimeInput.json
index 2a5b6f3e2..30162114e 100644
--- a/bestax-mcp/data/components/DateTimeInput.json
+++ b/bestax-mcp/data/components/DateTimeInput.json
@@ -170,7 +170,7 @@
"code": ""
}
],
- "accessibility": "- Trigger uses `role=\"combobox\"` with `aria-haspopup=\"dialog\"`, `aria-expanded`, and `aria-controls`.\n- Popover panel has `role=\"dialog\"` with an accessible name. Opening it puts focus on the focused date.\n- Closing the popover with `Escape`, the ✓ button or `Enter` on a time wheel returns focus to the input, whether the input or the launcher opened it. Under `openOnFocus` that returning focus leaves the popover closed; focusing or clicking the input again opens it. Closing it commits nothing by itself: an empty field stays empty, and leaving afterwards commits only what you typed, so seconds the display leaves out are kept.\n- Calendar uses `role=\"grid\"`; cells expose `aria-selected`, `aria-disabled`, and `aria-current=\"date\"`.\n- Roving `tabindex` keeps a single day focusable at a time, and focus moves with it, inline as in the popover. When the focused date is disabled, that cell is the nearest enabled day of the month.\n- Each time wheel uses `role=\"spinbutton\"` with `aria-valuemin`, `aria-valuemax`, `aria-valuenow`, and `aria-valuetext`.\n- The footer's confirm button exposes an accessible label (`Done`); the Reset button reverts your edits to the value the popover opened with.\n- Tab order walks from the calendar to the footer (Reset / ✓), and from the time wheels to the footer while they are open.",
+ "accessibility": "- Trigger uses `role=\"combobox\"` with `aria-haspopup=\"dialog\"`, `aria-expanded`, and `aria-controls`.\n- Popover panel has `role=\"dialog\"` with an accessible name. Opening it puts focus on the focused date.\n- Closing the popover with `Escape`, the ✓ button or `Enter` on a time wheel returns focus to the input, whether the input or the launcher opened it. Under `openOnFocus` that returning focus leaves the popover closed; focusing or clicking the input again opens it. Closing it commits nothing by itself: an empty field stays empty, and leaving afterwards commits only what you typed, so seconds the display leaves out are kept.\n- Calendar uses `role=\"grid\"`; cells expose `aria-selected`, `aria-disabled`, and `aria-current=\"date\"`.\n- Roving `tabindex` keeps a single day focusable at a time, and focus moves with it, inline as in the popover. When the focused date is disabled, that cell is the nearest enabled day of the month.\n- Each time wheel uses `role=\"spinbutton\"` with `aria-valuemin`, `aria-valuemax`, `aria-valuenow`, and `aria-valuetext`. The values drawn above and below are click targets hidden from assistive technology, which reads the value from the spinbutton.\n- The footer's confirm button exposes an accessible label (`Done`); the Reset button reverts your edits to the value the popover opened with.\n- Tab order walks from the calendar to the footer (Reset / ✓), and from the time wheels to the footer while they are open.",
"related": ["DateInput", "Input", "TimeInput"],
"storybook": "https://bestax.io/storybook/?path=/story/form-datetimeinput",
"summary": "The `DateTimeInput` combines a calendar and a time **wheel spinner** in a single popover — an iOS-style layout.",
diff --git a/bestax-mcp/data/components/Dropdown.json b/bestax-mcp/data/components/Dropdown.json
index 35a44c7c4..1bb027f5b 100644
--- a/bestax-mcp/data/components/Dropdown.json
+++ b/bestax-mcp/data/components/Dropdown.json
@@ -42,7 +42,7 @@
"code": "\n First Item\n Second Item\n \n Third Item\n"
}
],
- "accessibility": "- The dropdown root is a `
` with ARIA roles/attributes for menu and trigger.\n- The trigger button uses `aria-haspopup`, `aria-controls`, and `aria-expanded`.\n- Menu items are focusable and use `role=\"menuitem\"`. An item given `role=\"menuitemcheckbox\"` or `role=\"menuitemradio\"` stays in the arrow-key order.\n- `Dropdown.Item as=\"button\"` defaults to `type=\"button\"`, so a menu item inside a form doesn't\n submit it. Pass `type=\"submit\"` or `type=\"reset\"` and yours is used instead; any other value\n renders `type=\"button\"`.\n- Clicking outside closes the dropdown in most cases.\n\n`Dropdown` implements the [WAI-ARIA Menu Button pattern](https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/)\nout of the box:\n\n- On the trigger: ArrowDown or Enter/Space open the menu and\n focus the first item; ArrowUp opens the menu and focuses the last item;\n Escape closes an open menu.\n- Inside the menu: ArrowDown/ArrowUp move between items and wrap around;\n Home/End jump to the first/last item; Escape closes the menu\n and returns focus to the trigger; Tab closes the menu and lets focus continue\n naturally.\n- On an item: Enter or Space activates it the way a click does, so its\n `onClick` runs and the menu closes unless `closeOnClick` is `false`. That includes the\n default anchor without an `href` and `as=\"div\"`, which the browser would not activate on\n its own.\n- When running an item closes the menu, by click or by key, focus goes back to the trigger,\n as it does for Escape. An item whose `onClick` moves focus somewhere else keeps\n it there.\n- Disabled items (a `Dropdown.Item` rendered with a native `disabled` attribute or\n `aria-disabled=\"true\"`) and dividers are skipped during arrow-key navigation.\n\n:::note\nThere is no typeahead and no built-in outside-click handling inside the menu beyond the\nexisting click-outside-to-close behavior — add those yourself if your use case needs them.\n:::",
+ "accessibility": "- The dropdown root is a `
` with ARIA roles/attributes for menu and trigger.\n- The trigger button uses `aria-haspopup`, `aria-controls`, and `aria-expanded`.\n- Menu items are focusable and use `role=\"menuitem\"`. An item given `role=\"menuitemcheckbox\"` or `role=\"menuitemradio\"` stays in the arrow-key order.\n- The items are the only focusable things inside `role=\"menu\"`. A click between them, on a divider say, focuses the menu itself, so the arrow keys still reach the items from there.\n- `Dropdown.Item as=\"button\"` defaults to `type=\"button\"`, so a menu item inside a form doesn't\n submit it. Pass `type=\"submit\"` or `type=\"reset\"` and yours is used instead; any other value\n renders `type=\"button\"`.\n- Clicking outside closes the dropdown in most cases.\n\n`Dropdown` implements the [WAI-ARIA Menu Button pattern](https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/)\nout of the box:\n\n- On the trigger: ArrowDown or Enter/Space open the menu and\n focus the first item; ArrowUp opens the menu and focuses the last item;\n Escape closes an open menu.\n- Inside the menu: ArrowDown/ArrowUp move between items and wrap around;\n Home/End jump to the first/last item; Escape closes the menu\n and returns focus to the trigger; Tab closes the menu and lets focus continue\n naturally.\n- On an item: Enter or Space activates it the way a click does, so its\n `onClick` runs and the menu closes unless `closeOnClick` is `false`. That includes the\n default anchor without an `href` and `as=\"div\"`, which the browser would not activate on\n its own.\n- When running an item closes the menu, by click or by key, focus goes back to the trigger,\n as it does for Escape. An item whose `onClick` moves focus somewhere else keeps\n it there.\n- Disabled items (a `Dropdown.Item` rendered with a native `disabled` attribute or\n `aria-disabled=\"true\"`) and dividers are skipped during arrow-key navigation.\n\n:::note\nThere is no typeahead and no built-in outside-click handling inside the menu beyond the\nexisting click-outside-to-close behavior — add those yourself if your use case needs them.\n:::",
"related": ["Button", "Popover", "useBulmaClasses"],
"storybook": "https://bestax.io/storybook/?path=/story/components-dropdown--default",
"summary": "The `Dropdown` component provides Bulma's versatile dropdown menu for your Bulma React UI.",
diff --git a/bestax-mcp/data/components/File.json b/bestax-mcp/data/components/File.json
index f3895a58e..b65e4620f 100644
--- a/bestax-mcp/data/components/File.json
+++ b/bestax-mcp/data/components/File.json
@@ -191,7 +191,7 @@
"name": "iconLeft",
"type": "React.ReactNode",
"default": null,
- "description": "Left icon element. It renders inside the `
-
+ Saved
-
+
diff --git a/bestax-migrate/src/sources/bulma-classes/__testfixtures__/file.input.tsx b/bestax-migrate/src/sources/bulma-classes/__testfixtures__/file.input.tsx
index a6c69051e..453bce795 100644
--- a/bestax-migrate/src/sources/bulma-classes/__testfixtures__/file.input.tsx
+++ b/bestax-migrate/src/sources/bulma-classes/__testfixtures__/file.input.tsx
@@ -27,7 +27,7 @@ export function Uploads({ onPick }: { onPick: () => void }) {
Upload a photo
-
+
diff --git a/bestax-migrate/src/sources/bulma-classes/__testfixtures__/file.output.tsx b/bestax-migrate/src/sources/bulma-classes/__testfixtures__/file.output.tsx
index d374b2a49..324e6e7db 100644
--- a/bestax-migrate/src/sources/bulma-classes/__testfixtures__/file.output.tsx
+++ b/bestax-migrate/src/sources/bulma-classes/__testfixtures__/file.output.tsx
@@ -18,7 +18,7 @@ export function Uploads({ onPick }: { onPick: () => void }) {
accept="image/*"
onChange={onPick}
buttonLabel="Upload a photo"
- iconRight={
+ iconRight={}
fileName="portrait.png" />
diff --git a/bestax-migrate/src/sources/bulma-classes/__testfixtures__/form.output.tsx b/bestax-migrate/src/sources/bulma-classes/__testfixtures__/form.output.tsx
index f9b7591c1..52eb9fe32 100644
--- a/bestax-migrate/src/sources/bulma-classes/__testfixtures__/form.output.tsx
+++ b/bestax-migrate/src/sources/bulma-classes/__testfixtures__/form.output.tsx
@@ -1,6 +1,6 @@
import { Button, Control, Field, InputBase, SelectBase, TextAreaBase } from "@allxsmith/bestax-bulma";
export function SignUp() {
- // TODO(bestax-migrate): bestax `Icon` renders `aria-label="icon"` when the element does not set it; add it here if that is what you want, then re-run
+ // TODO(bestax-migrate): bestax `Icon` renders `aria-hidden="true"` when the element does not set it; add it here if that is what you want, then re-run
// TODO(bestax-migrate): `.checkbox` stays as markup: bestax `Checkbox` renders its own styled markup, not Bulma's
return (