bestax-mcp 1.9.0 → 1.10.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.
@@ -3118,7 +3118,7 @@
3118
3118
  "textColor": null,
3119
3119
  "bgColor": null,
3120
3120
  "part": false,
3121
- "why": "bestax `Modal` renders its own background and content parts, and adds dialog attributes",
3121
+ "why": "bestax `Modal` writes a `data-testid` of its own over the one it's given, and adds dialog attributes and focus handling, so rebuild the root with it by hand; its parts convert on their own",
3122
3122
  "modifiers": {},
3123
3123
  "omits": {},
3124
3124
  "wrapsChildren": null,
@@ -3130,14 +3130,14 @@
3130
3130
  "topLevelOnly": false
3131
3131
  },
3132
3132
  "modal-background": {
3133
- "status": "todo",
3134
- "target": null,
3135
- "tag": null,
3133
+ "status": "mapped",
3134
+ "target": "Modal.Background",
3135
+ "tag": "div",
3136
3136
  "as": null,
3137
3137
  "sizeDrivesTag": false,
3138
3138
  "textColor": null,
3139
3139
  "bgColor": null,
3140
- "part": true,
3140
+ "part": false,
3141
3141
  "why": null,
3142
3142
  "modifiers": {},
3143
3143
  "omits": {},
@@ -3146,18 +3146,18 @@
3146
3146
  "absorbs": null,
3147
3147
  "writes": null,
3148
3148
  "countsChildren": null,
3149
- "noHelpers": false,
3149
+ "noHelpers": true,
3150
3150
  "topLevelOnly": false
3151
3151
  },
3152
3152
  "modal-content": {
3153
- "status": "todo",
3154
- "target": null,
3155
- "tag": null,
3153
+ "status": "mapped",
3154
+ "target": "Modal.Content",
3155
+ "tag": "div",
3156
3156
  "as": null,
3157
3157
  "sizeDrivesTag": false,
3158
3158
  "textColor": null,
3159
3159
  "bgColor": null,
3160
- "part": true,
3160
+ "part": false,
3161
3161
  "why": null,
3162
3162
  "modifiers": {},
3163
3163
  "omits": {},
@@ -3166,18 +3166,18 @@
3166
3166
  "absorbs": null,
3167
3167
  "writes": null,
3168
3168
  "countsChildren": null,
3169
- "noHelpers": false,
3169
+ "noHelpers": true,
3170
3170
  "topLevelOnly": false
3171
3171
  },
3172
3172
  "modal-card": {
3173
- "status": "todo",
3174
- "target": null,
3175
- "tag": null,
3173
+ "status": "mapped",
3174
+ "target": "Modal.Card",
3175
+ "tag": "div",
3176
3176
  "as": null,
3177
3177
  "sizeDrivesTag": false,
3178
3178
  "textColor": null,
3179
3179
  "bgColor": null,
3180
- "part": true,
3180
+ "part": false,
3181
3181
  "why": null,
3182
3182
  "modifiers": {},
3183
3183
  "omits": {},
@@ -3186,18 +3186,18 @@
3186
3186
  "absorbs": null,
3187
3187
  "writes": null,
3188
3188
  "countsChildren": null,
3189
- "noHelpers": false,
3189
+ "noHelpers": true,
3190
3190
  "topLevelOnly": false
3191
3191
  },
3192
3192
  "modal-card-head": {
3193
- "status": "todo",
3194
- "target": null,
3195
- "tag": null,
3193
+ "status": "mapped",
3194
+ "target": "Modal.Card.Head",
3195
+ "tag": "header",
3196
3196
  "as": null,
3197
3197
  "sizeDrivesTag": false,
3198
3198
  "textColor": null,
3199
3199
  "bgColor": null,
3200
- "part": true,
3200
+ "part": false,
3201
3201
  "why": null,
3202
3202
  "modifiers": {},
3203
3203
  "omits": {},
@@ -3206,18 +3206,18 @@
3206
3206
  "absorbs": null,
3207
3207
  "writes": null,
3208
3208
  "countsChildren": null,
3209
- "noHelpers": false,
3209
+ "noHelpers": true,
3210
3210
  "topLevelOnly": false
3211
3211
  },
3212
3212
  "modal-card-title": {
3213
- "status": "todo",
3214
- "target": null,
3215
- "tag": null,
3213
+ "status": "mapped",
3214
+ "target": "Modal.Card.Title",
3215
+ "tag": "p",
3216
3216
  "as": null,
3217
3217
  "sizeDrivesTag": false,
3218
3218
  "textColor": null,
3219
3219
  "bgColor": null,
3220
- "part": true,
3220
+ "part": false,
3221
3221
  "why": null,
3222
3222
  "modifiers": {},
3223
3223
  "omits": {},
@@ -3226,18 +3226,18 @@
3226
3226
  "absorbs": null,
3227
3227
  "writes": null,
3228
3228
  "countsChildren": null,
3229
- "noHelpers": false,
3229
+ "noHelpers": true,
3230
3230
  "topLevelOnly": false
3231
3231
  },
3232
3232
  "modal-card-body": {
3233
- "status": "todo",
3234
- "target": null,
3235
- "tag": null,
3233
+ "status": "mapped",
3234
+ "target": "Modal.Card.Body",
3235
+ "tag": "section",
3236
3236
  "as": null,
3237
3237
  "sizeDrivesTag": false,
3238
3238
  "textColor": null,
3239
3239
  "bgColor": null,
3240
- "part": true,
3240
+ "part": false,
3241
3241
  "why": null,
3242
3242
  "modifiers": {},
3243
3243
  "omits": {},
@@ -3246,18 +3246,18 @@
3246
3246
  "absorbs": null,
3247
3247
  "writes": null,
3248
3248
  "countsChildren": null,
3249
- "noHelpers": false,
3249
+ "noHelpers": true,
3250
3250
  "topLevelOnly": false
3251
3251
  },
3252
3252
  "modal-card-foot": {
3253
- "status": "todo",
3254
- "target": null,
3255
- "tag": null,
3253
+ "status": "mapped",
3254
+ "target": "Modal.Card.Foot",
3255
+ "tag": "footer",
3256
3256
  "as": null,
3257
3257
  "sizeDrivesTag": false,
3258
3258
  "textColor": null,
3259
3259
  "bgColor": null,
3260
- "part": true,
3260
+ "part": false,
3261
3261
  "why": null,
3262
3262
  "modifiers": {},
3263
3263
  "omits": {},
@@ -3266,7 +3266,7 @@
3266
3266
  "absorbs": null,
3267
3267
  "writes": null,
3268
3268
  "countsChildren": null,
3269
- "noHelpers": false,
3269
+ "noHelpers": true,
3270
3270
  "topLevelOnly": false
3271
3271
  },
3272
3272
  "modal-close": {
@@ -83,6 +83,13 @@ a `tag:<Target>` TODO instead of a conversion. A component's own `as` can take m
83
83
  | `.menu` | `Menu` | `<aside>` only |
84
84
  | `.menu-label` | `Menu.Label` | `<p>` only |
85
85
  | `.menu-list` | `Menu.List` | `<ul>` only |
86
+ | `.modal-background` | `Modal.Background` | `<div>` only |
87
+ | `.modal-content` | `Modal.Content` | `<div>` only |
88
+ | `.modal-card` | `Modal.Card` | `<div>` only |
89
+ | `.modal-card-head` | `Modal.Card.Head` | `<header>` only |
90
+ | `.modal-card-title` | `Modal.Card.Title` | `<p>` only |
91
+ | `.modal-card-body` | `Modal.Card.Body` | `<section>` only |
92
+ | `.modal-card-foot` | `Modal.Card.Foot` | `<footer>` only |
86
93
 
87
94
  An element with two of these (`<div className="column box">`) becomes the layout one
88
95
  (`Column`), and the other class stays in `className`.
@@ -200,7 +207,8 @@ inside one of them, or anything else beside them, keeps the element as markup wi
200
207
  Their markup doesn't map element by element (the bestax component renders parts of its own, or
201
208
  adds attributes), so the family's outermost class gets a `family:<class>` TODO and the markup
202
209
  stays. [unmappables.md](unmappables.md) has the recipe for each. The families are Checkbox,
203
- Checkboxes, Dropdown, File, Icon and IconText, the menu's items, Message, Modal, the navbar's burger
210
+ Checkboxes, Dropdown, File, Icon and IconText, the menu's items, Message, Modal's root and close
211
+ button, the navbar's burger
204
212
  and dropdown link, Pagination, Panel, Radio, Radios and Tabs.
205
213
 
206
214
  ## Classes left alone
@@ -168,12 +168,15 @@ Colors are `primary`, `link`, `info`, `success`, `warning`, `danger`, `black`, `
168
168
 
169
169
  Where a component renders a color class through no typed prop, the class stays: `has-text-*`
170
170
  on `Breadcrumb`, `Hero`, `Navbar.DropdownMenu`, `Navbar.Divider`, `Field.Label`, `Field.Body`,
171
- `Control`, `InputBase`, `TextAreaBase`, `SelectBase`, `Progress`, `Skeleton`, `Tag` and `Tags`;
172
- `has-background-*` on `Breadcrumb`, `Navbar.Brand`, `Navbar.Menu`, `Navbar.Start`, `Navbar.End`,
173
- `Navbar.DropdownMenu`, `Navbar.Divider`, `Field.Label`, `Field.Body`, `Control`, `Notification`,
174
- `Progress`, `Skeleton`, `Table` and `Tags`. `Navbar.DropdownMenu`, `Navbar.Divider`, `Field.Label`,
175
- `Field.Body`, `Control` and `Skeleton` take no helper props the way the codemod needs, so every
176
- helper class on them stays.
171
+ `Control`, `InputBase`, `TextAreaBase`, `SelectBase`, `Progress`, `Skeleton`, `Tag`, `Tags`,
172
+ `Modal.Background`, `Modal.Content`, `Modal.Card`, `Modal.Card.Head`, `Modal.Card.Title`,
173
+ `Modal.Card.Body` and `Modal.Card.Foot`; `has-background-*` on `Breadcrumb`, `Navbar.Brand`,
174
+ `Navbar.Menu`, `Navbar.Start`, `Navbar.End`, `Navbar.DropdownMenu`, `Navbar.Divider`, `Field.Label`,
175
+ `Field.Body`, `Control`, `Notification`, `Progress`, `Skeleton`, `Table`, `Tags`, `Modal.Background`,
176
+ `Modal.Content`, `Modal.Card`, `Modal.Card.Head`, `Modal.Card.Title`, `Modal.Card.Body` and
177
+ `Modal.Card.Foot`. `Navbar.DropdownMenu`, `Navbar.Divider`, `Field.Label`, `Field.Body`, `Control`,
178
+ `Skeleton` and Modal's parts take no helper props the way the codemod needs, so every helper class
179
+ on them stays.
177
180
 
178
181
  Some classes stay put because of how bestax renders them:
179
182
 
@@ -137,6 +137,12 @@ The codemod reads one file at a time, so it can't see a component in another fil
137
137
  a bestax `Field` or form control around this markup. If the app already uses them that way, give
138
138
  its inputs ids before running the codemod, and check its forms afterwards.
139
139
 
140
+ On a `.modal-background`, `.modal-content` or `.modal-card` it's about the `Modal` around it. A
141
+ bestax `Modal` already in the file picks what it renders from its children: with one of those
142
+ parts among them it renders them as given, and without one it adds its own background, wrapper
143
+ and close button. So converting the part would change the `Modal`, and the part stays markup.
144
+ Convert the `Modal` and its children together by hand.
145
+
140
146
  On a `.menu-list` it's about nesting: `Menu.List` renders `.menu-list` only on the outermost list,
141
147
  and drops it on one inside another. So a `.menu-list` inside another `.menu-list` (or a bestax
142
148
  `Menu.List`) stays markup, keeping its class, and so does one around a bestax `Menu.List`, which would
@@ -205,8 +211,11 @@ in the browser:
205
211
  lists the props for the button text, the file name and the icons.
206
212
  - **`family:checkbox`**, **`family:radio`**, **`family:checkboxes`**, **`family:radios`**:
207
213
  bestax renders its own styled checkbox and radio markup, not Bulma's.
208
- - **`family:modal`**: `Modal` renders its own background and content parts, and adds dialog
209
- attributes. Rebuild it with `Modal` and its parts, and drive it with its open prop. When the
214
+ - **`family:modal`**: `Modal` writes a `data-testid` of its own and adds dialog attributes and
215
+ focus handling, so the `.modal` root stays markup while its background, content and card parts
216
+ convert on their own. Rebuild the root with `Modal` around them, and drive it with its open prop.
217
+ A `.modal-close` stays too, since `Modal.Close` renders `.delete` unless it's floating: write
218
+ `<Modal.Close variant="floating" />` in its place. When the
210
219
  page has to look the same, keep `Modal` rather than `Dialog` or `Toast`: those render
211
220
  bestax's own `.dialog` and `.toast` markup, which Bulma's stylesheet doesn't style.
212
221
  - **`family:dropdown`**: `Dropdown` renders its own trigger and menu from props.
package/data/skills.json CHANGED
@@ -103,17 +103,17 @@
103
103
  {
104
104
  "id": "bulma-classes-component-map",
105
105
  "file": "references/bulma-classes/component-map.md",
106
- "bytes": 16084
106
+ "bytes": 16906
107
107
  },
108
108
  {
109
109
  "id": "bulma-classes-prop-map",
110
110
  "file": "references/bulma-classes/prop-map.md",
111
- "bytes": 28378
111
+ "bytes": 28649
112
112
  },
113
113
  {
114
114
  "id": "bulma-classes-unmappables",
115
115
  "file": "references/bulma-classes/unmappables.md",
116
- "bytes": 17279
116
+ "bytes": 17977
117
117
  },
118
118
  {
119
119
  "id": "css-migration",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bestax-mcp",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "description": "MCP server for @allxsmith/bestax-bulma — component props, examples, CSS variables and agent skills, served offline from a version-pinned index",
5
5
  "type": "module",
6
6
  "bin": {