bestax-mcp 1.18.13 → 1.18.15

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.
@@ -13105,6 +13105,7 @@
13105
13105
  "combobox": "Combobox",
13106
13106
  "context-menu": "ContextMenu",
13107
13107
  "daterangeinput": "DateRangeInput",
13108
+ "description-list": "DescriptionList",
13108
13109
  "dialog": "Dialog",
13109
13110
  "empty-state": "EmptyState",
13110
13111
  "hover-card": "HoverCard",
@@ -13117,6 +13118,7 @@
13117
13118
  "styled-radio": "Radio",
13118
13119
  "rate": "Rate",
13119
13120
  "reveal": "Reveal",
13121
+ "ring-progress": "RingProgress",
13120
13122
  "scroll-area": "ScrollArea",
13121
13123
  "sidebar": "Sidebar",
13122
13124
  "slider": "Slider",
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.49.1"
5
+ "version": "5.51.0"
6
6
  },
7
7
  "docsBase": "https://bestax.io/docs",
8
8
  "categories": [
@@ -17,6 +17,7 @@
17
17
  "Code",
18
18
  "Content",
19
19
  "Delete",
20
+ "DescriptionList",
20
21
  "Divider",
21
22
  "Emphasis",
22
23
  "Figure",
@@ -33,6 +34,7 @@
33
34
  "Paragraph",
34
35
  "Pre",
35
36
  "Progress",
37
+ "RingProgress",
36
38
  "Skeleton",
37
39
  "Span",
38
40
  "Strong",
@@ -476,6 +478,17 @@
476
478
  "propCount": 8,
477
479
  "exampleCount": 10
478
480
  },
481
+ {
482
+ "name": "DescriptionList",
483
+ "kind": "component",
484
+ "category": "elements",
485
+ "purpose": "The `DescriptionList` component lists facts about one thing, each a label and its value, such as an order's details or a profile.",
486
+ "slug": "elements/descriptionlist",
487
+ "import": "import { DescriptionList } from '@allxsmith/bestax-bulma';",
488
+ "compound": true,
489
+ "propCount": 25,
490
+ "exampleCount": 10
491
+ },
479
492
  {
480
493
  "name": "Dialog",
481
494
  "kind": "component",
@@ -949,6 +962,17 @@
949
962
  "propCount": 11,
950
963
  "exampleCount": 5
951
964
  },
965
+ {
966
+ "name": "RingProgress",
967
+ "kind": "component",
968
+ "category": "elements",
969
+ "purpose": "The `RingProgress` component draws a value as a ring that fills as it grows, with anything you pass shown in the middle.",
970
+ "slug": "elements/ringprogress",
971
+ "import": "import { RingProgress } from '@allxsmith/bestax-bulma';",
972
+ "compound": false,
973
+ "propCount": 12,
974
+ "exampleCount": 7
975
+ },
952
976
  {
953
977
  "name": "ScrollArea",
954
978
  "kind": "component",
@@ -1655,6 +1679,15 @@
1655
1679
  "--bulma-delete-background-l": ["Delete"],
1656
1680
  "--bulma-delete-color": ["Delete"],
1657
1681
  "--bulma-delete-dimensions": ["Delete"],
1682
+ "--bulma-description-list-column-gap": ["DescriptionList"],
1683
+ "--bulma-description-list-divider-color": ["DescriptionList"],
1684
+ "--bulma-description-list-divider-width": ["DescriptionList"],
1685
+ "--bulma-description-list-gap": ["DescriptionList"],
1686
+ "--bulma-description-list-label-color": ["DescriptionList"],
1687
+ "--bulma-description-list-label-max-width": ["DescriptionList"],
1688
+ "--bulma-description-list-label-weight": ["DescriptionList"],
1689
+ "--bulma-description-list-row-gap": ["DescriptionList"],
1690
+ "--bulma-description-list-value-color": ["DescriptionList"],
1658
1691
  "--bulma-dialog-animation-duration": ["Dialog"],
1659
1692
  "--bulma-dialog-background": ["Dialog"],
1660
1693
  "--bulma-dialog-body-color": ["Dialog"],
@@ -2420,6 +2453,14 @@
2420
2453
  "--bulma-reveal-offset": ["Reveal"],
2421
2454
  "--bulma-reveal-offset-large": ["Reveal"],
2422
2455
  "--bulma-reveal-scale": ["Reveal"],
2456
+ "--bulma-ring-progress-arc-color": ["RingProgress"],
2457
+ "--bulma-ring-progress-duration": ["RingProgress"],
2458
+ "--bulma-ring-progress-label-color": ["RingProgress"],
2459
+ "--bulma-ring-progress-label-size": ["RingProgress"],
2460
+ "--bulma-ring-progress-label-weight": ["RingProgress"],
2461
+ "--bulma-ring-progress-size": ["RingProgress"],
2462
+ "--bulma-ring-progress-thickness": ["RingProgress"],
2463
+ "--bulma-ring-progress-track-color": ["RingProgress"],
2423
2464
  "--bulma-scroll-area-fade-size": ["ScrollArea"],
2424
2465
  "--bulma-scroll-area-scrollbar-width": ["ScrollArea"],
2425
2466
  "--bulma-scroll-area-thumb-color": ["ScrollArea"],
@@ -2760,6 +2801,21 @@
2760
2801
  "purpose": "Raw DateTimeInput — combined input + calendar + time spinner without Field/Control wrapping.",
2761
2802
  "standalone": "base"
2762
2803
  },
2804
+ "DescriptionListItem": {
2805
+ "component": "DescriptionList",
2806
+ "path": "DescriptionList.Item",
2807
+ "purpose": "One fact: its label and its value, in a `<div>`, from the `label` and `value` props or from `Label` and `Value` children."
2808
+ },
2809
+ "DescriptionListLabel": {
2810
+ "component": "DescriptionList",
2811
+ "path": "DescriptionList.Label",
2812
+ "purpose": "A label, the name of a fact: a `<dt>`, in the weaker text color."
2813
+ },
2814
+ "DescriptionListValue": {
2815
+ "component": "DescriptionList",
2816
+ "path": "DescriptionList.Value",
2817
+ "purpose": "A value, what the label says about the thing: a `<dd>`."
2818
+ },
2763
2819
  "DialogContainer": {
2764
2820
  "component": "Dialog",
2765
2821
  "path": "DialogContainer",
@@ -0,0 +1,436 @@
1
+ {
2
+ "name": "DescriptionList",
3
+ "kind": "component",
4
+ "category": "elements",
5
+ "slug": "elements/descriptionlist",
6
+ "docsUrl": "https://bestax.io/docs/api/elements/descriptionlist",
7
+ "examples": [
8
+ {
9
+ "title": "Basic Usage",
10
+ "code": "<>\n <Title as=\"h2\" textSize=\"5\" id=\"order-heading\">\n Order details\n </Title>\n <DescriptionList aria-labelledby=\"order-heading\">\n <DescriptionList.Item label=\"Order\" value=\"#1234\" />\n <DescriptionList.Item label=\"Placed on\" value=\"14 October 2026\" />\n <DescriptionList.Item\n label=\"Estimated delivery\"\n value=\"Between 18 and 21 October 2026\"\n />\n <DescriptionList.Item label=\"Total\" value=\"$86.40\" />\n </DescriptionList>\n</>"
11
+ },
12
+ {
13
+ "title": "Links, Tags and Other Values",
14
+ "code": "<DescriptionList>\n <DescriptionList.Item\n label=\"Status\"\n value={<Tag color=\"success\">Shipped</Tag>}\n />\n <DescriptionList.Item\n label=\"Tracking\"\n value={<Link href=\"#track\">1Z999AA10123456784</Link>}\n />\n <DescriptionList.Item label=\"Coupon\" value=\"None used\" />\n</DescriptionList>"
15
+ },
16
+ {
17
+ "title": "Several Values",
18
+ "code": "<DescriptionList>\n <DescriptionList.Item label=\"Delivery notes\">\n <DescriptionList.Value>Leave with a neighbour</DescriptionList.Value>\n <DescriptionList.Value>Ring twice</DescriptionList.Value>\n </DescriptionList.Item>\n <DescriptionList.Item label=\"Gift message\" value=\"Happy birthday, Ada!\" />\n</DescriptionList>"
19
+ },
20
+ {
21
+ "title": "An Info Tip on a Label",
22
+ "code": "<DescriptionList>\n <DescriptionList.Item label=\"Order\" value=\"#1234\" />\n <DescriptionList.Item value=\"Partner warehouse\">\n <DescriptionList.Label>\n Fulfilment{' '}\n <Popover\n ariaLabel=\"About fulfilment\"\n trigger={\n <Button size=\"small\" color=\"ghost\" aria-label=\"About fulfilment\">\n <Icon name=\"circle-info\" />\n </Button>\n }\n >\n <Popover.Body>\n Packed and shipped by a partner warehouse, not by us.\n </Popover.Body>\n <Popover.Footer>\n <Popover.Close size=\"small\">Close</Popover.Close>\n </Popover.Footer>\n </Popover>\n </DescriptionList.Label>\n </DescriptionList.Item>\n</DescriptionList>"
23
+ },
24
+ {
25
+ "title": "Orientation",
26
+ "code": "<>\n <DescriptionList orientation=\"horizontal\">\n <DescriptionList.Item label=\"Name\" value=\"Ada Lovelace\" />\n <DescriptionList.Item label=\"Email address\" value=\"ada@example.com\" />\n </DescriptionList>\n <DescriptionList orientation=\"vertical\">\n <DescriptionList.Item label=\"Name\" value=\"Ada Lovelace\" />\n <DescriptionList.Item label=\"Email address\" value=\"ada@example.com\" />\n </DescriptionList>\n</>"
27
+ },
28
+ {
29
+ "title": "Per Viewport",
30
+ "code": "<DescriptionList orientation=\"vertical\" orientationDesktop=\"horizontal\">\n <DescriptionList.Item label=\"Plan\" value=\"Team\" />\n <DescriptionList.Item label=\"Seats\" value=\"12 of 15 used\" />\n <DescriptionList.Item label=\"Renews on\" value=\"1 November 2026\" />\n</DescriptionList>"
31
+ },
32
+ {
33
+ "title": "Dividers",
34
+ "code": "<DescriptionList hasDividers>\n <DescriptionList.Item label=\"Name\" value=\"Ada Lovelace\" />\n <DescriptionList.Item label=\"Email\" value=\"ada@example.com\" />\n <DescriptionList.Item label=\"Plan\" value=\"Team\" />\n <DescriptionList.Item label=\"Member since\" value=\"March 2019\" />\n</DescriptionList>"
35
+ },
36
+ {
37
+ "title": "Text Size",
38
+ "code": "<>\n <DescriptionList textSize=\"7\">\n <DescriptionList.Item label=\"Size\" value=\"2.4 MB\" />\n <DescriptionList.Item label=\"Type\" value=\"PDF document\" />\n </DescriptionList>\n <DescriptionList textSize=\"5\">\n <DescriptionList.Item label=\"Size\" value=\"2.4 MB\" />\n <DescriptionList.Item label=\"Type\" value=\"PDF document\" />\n </DescriptionList>\n</>"
39
+ },
40
+ {
41
+ "title": "From an Array",
42
+ "code": "function example() {\n const file = [\n ['Name', 'quarterly-report.pdf'],\n ['Size', '2.4 MB'],\n ['Owner', 'Ada Lovelace'],\n ['Last changed', '27 October 2026'],\n ];\n return (\n <DescriptionList>\n {file.map(([label, value]) => (\n <DescriptionList.Item key={label} label={label} value={value} />\n ))}\n </DescriptionList>\n );\n}"
43
+ },
44
+ {
45
+ "title": "Compound (dot-notation) usage",
46
+ "code": "<DescriptionList orientation=\"horizontal\">\n <DescriptionList.Item>\n <DescriptionList.Label>Author</DescriptionList.Label>\n <DescriptionList.Label>Translator</DescriptionList.Label>\n <DescriptionList.Value>Ada Lovelace</DescriptionList.Value>\n </DescriptionList.Item>\n <DescriptionList.Item>\n <DescriptionList.Label>Languages</DescriptionList.Label>\n <DescriptionList.Value>English</DescriptionList.Value>\n <DescriptionList.Value>French</DescriptionList.Value>\n <DescriptionList.Value>Italian</DescriptionList.Value>\n </DescriptionList.Item>\n</DescriptionList>"
47
+ }
48
+ ],
49
+ "accessibility": "- **HTML's own elements, and no roles:** a `<dl>`, a `<div>` for each item, a `<dt>` for each\n label and a `<dd>` for each value. Browsers expose them as a list, terms and definitions.\n- **A name from the heading above:** point `aria-labelledby` at it, as in\n [Basic Usage](https://bestax.io/docs/api/elements/descriptionlist#basic-usage), so a screen reader names the list when it reaches it.\n- **Reading order is the order you write:** each label is read before its value at every width and\n in right-to-left text, since the layout only changes where the parts sit.\n- **Screen readers announce it in different ways,** and none of them loses the content. Some count\n the labels and the values as separate items and some count the pairs, some say \"term\" and\n \"definition\" and some don't, and some don't say there's a list at all as you move through it.\n Adrian Roselli's notes, under Additional Resources, follow which does what. Where a user must\n hear the label with every value, [use a table](https://bestax.io/docs/api/elements/descriptionlist#use-a-table-instead-when).\n- **Info tips:** a real button named \"About\" and the label, opening a `Popover`, as in\n [An Info Tip on a Label](https://bestax.io/docs/api/elements/descriptionlist#an-info-tip-on-a-label), rather than a tip that opens on hover.\n- **Contrast:** the labels, in Bulma's `text-weak`, and the values, in `text`, both clear WCAG's\n 4.5:1 against Bulma's page background in light and dark mode.\n- **Forced colors:** the layout, the text and the dividers stay. The labels lose their lighter\n color there, and their place, first or above, still tells them from the values.\n- **Not interactive and not live:** it has no tab stop of its own and announces nothing when it\n changes.",
50
+ "related": ["Content", "Popover", "Table", "Title", "useBulmaClasses"],
51
+ "storybook": "https://bestax.io/storybook/?path=/story/elements-descriptionlist--default",
52
+ "summary": "The `DescriptionList` component lists facts about one thing, each a label and its value, such as an order's details or a profile. It's a `<dl>`, with a `<div>` for each item, a `<dt>` for each label and a `<dd>` for each value, so assistive tech gets HTML's own list of terms and definitions and no roles are added. Labels sit above their values on a phone and beside them from Bulma's tablet breakpoint up, where every label shares one column so the values line up. For data with two dimensions, such as several records with the same fields, use a `Table`.",
53
+ "import": "import { DescriptionList } from '@allxsmith/bestax-bulma';",
54
+ "sourceFile": "bulma-ui/src/elements/DescriptionList.tsx",
55
+ "rootClass": "description-list",
56
+ "parts": [
57
+ {
58
+ "path": "DescriptionList",
59
+ "summary": "The `DescriptionList` component lists facts about one thing, each a label and its value, such as an order's details or a profile. It's a `<dl>`, with a `<div>` for each item, a `<dt>` for each label and a `<dd>` for each value, so assistive tech gets HTML's own list of terms and definitions and no roles are added. Labels sit above their values on a phone and beside them from Bulma's tablet breakpoint up, where every label shares one column so the values line up. For data with two dimensions, such as several records with the same fields, use a `Table`.",
60
+ "component": null,
61
+ "props": [
62
+ {
63
+ "name": "className",
64
+ "type": "string",
65
+ "default": null,
66
+ "description": "Additional CSS classes to apply.",
67
+ "required": false,
68
+ "inherited": false,
69
+ "deprecated": false
70
+ },
71
+ {
72
+ "name": "children",
73
+ "type": "React.ReactNode",
74
+ "default": null,
75
+ "description": "`DescriptionList.Item`s, one for each fact.",
76
+ "required": false,
77
+ "inherited": false,
78
+ "deprecated": false
79
+ },
80
+ {
81
+ "name": "orientation",
82
+ "type": "'vertical' | 'horizontal'",
83
+ "default": null,
84
+ "description": "Whether each label sits above its value or beside it, at every width no `orientation<Viewport>` prop covers. Those props read the way a `Column`'s `size<Viewport>` props do: `orientationMobile` applies below Bulma's tablet breakpoint, each of the others from its own breakpoint up, and where several apply the widest one wins. With none of them, labels sit above their values below the tablet breakpoint and beside them from it up. Beside, the labels share one column as wide as the longest label, up to `--bulma-description-list-label-max-width`, so the values line up.",
85
+ "required": false,
86
+ "inherited": false,
87
+ "deprecated": false
88
+ },
89
+ {
90
+ "name": "orientationMobile",
91
+ "type": "'vertical' | 'horizontal'",
92
+ "default": null,
93
+ "description": "The orientation below Bulma's tablet breakpoint (769px). Falls back to `orientation`, then to `vertical`.",
94
+ "required": false,
95
+ "inherited": false,
96
+ "deprecated": false
97
+ },
98
+ {
99
+ "name": "orientationTablet",
100
+ "type": "'vertical' | 'horizontal'",
101
+ "default": null,
102
+ "description": "The orientation from Bulma's tablet breakpoint (769px) up, until a wider viewport's prop takes over. Falls back to `orientation`, then to `horizontal`.",
103
+ "required": false,
104
+ "inherited": false,
105
+ "deprecated": false
106
+ },
107
+ {
108
+ "name": "orientationDesktop",
109
+ "type": "'vertical' | 'horizontal'",
110
+ "default": null,
111
+ "description": "The orientation from Bulma's desktop breakpoint (1024px) up, until a wider viewport's prop takes over. Falls back to `orientationTablet`, and on down.",
112
+ "required": false,
113
+ "inherited": false,
114
+ "deprecated": false
115
+ },
116
+ {
117
+ "name": "orientationWidescreen",
118
+ "type": "'vertical' | 'horizontal'",
119
+ "default": null,
120
+ "description": "The orientation from Bulma's widescreen breakpoint (1216px) up, until `orientationFullhd` takes over. Falls back to `orientationDesktop`, and on down.",
121
+ "required": false,
122
+ "inherited": false,
123
+ "deprecated": false
124
+ },
125
+ {
126
+ "name": "orientationFullhd",
127
+ "type": "'vertical' | 'horizontal'",
128
+ "default": null,
129
+ "description": "The orientation from Bulma's fullhd breakpoint (1408px) up. Falls back to `orientationWidescreen`, and on down.",
130
+ "required": false,
131
+ "inherited": false,
132
+ "deprecated": false
133
+ },
134
+ {
135
+ "name": "hasDividers",
136
+ "type": "boolean",
137
+ "default": "false",
138
+ "description": "Draws a line between items, which helps the eye from a label to its value across a wide list, and shows where each item ends to someone zoomed in.",
139
+ "required": false,
140
+ "inherited": false,
141
+ "deprecated": false
142
+ },
143
+ {
144
+ "name": "textColor",
145
+ "type": "Bulma color | 'inherit' | 'current'",
146
+ "default": null,
147
+ "description": "Text color helper. It colors the values; the labels keep their own color.",
148
+ "required": false,
149
+ "inherited": false,
150
+ "deprecated": false,
151
+ "valuesRef": "helpers/valid-values"
152
+ },
153
+ {
154
+ "name": "bgColor",
155
+ "type": "Bulma color | 'inherit' | 'current'",
156
+ "default": null,
157
+ "description": "Background color helper.",
158
+ "required": false,
159
+ "inherited": false,
160
+ "deprecated": false,
161
+ "valuesRef": "helpers/valid-values"
162
+ }
163
+ ],
164
+ "extraProps": [
165
+ {
166
+ "name": "ref",
167
+ "type": "React.Ref<HTMLDListElement>",
168
+ "default": null,
169
+ "description": "Ref forwarded to the `<dl>`.",
170
+ "required": false,
171
+ "inherited": false,
172
+ "deprecated": false
173
+ },
174
+ {
175
+ "name": "aria-labelledby",
176
+ "type": "string",
177
+ "default": null,
178
+ "description": "The id of the heading above the list, which names it.",
179
+ "required": false,
180
+ "inherited": false,
181
+ "deprecated": false
182
+ }
183
+ ],
184
+ "catchAll": "All standard <dl> attributes and Bulma helper props",
185
+ "types": []
186
+ },
187
+ {
188
+ "path": "DescriptionList.Item",
189
+ "summary": "One fact: its label and its value, in a `<div>`, from the `label` and `value` props or from `Label` and `Value` children.",
190
+ "component": null,
191
+ "props": [
192
+ {
193
+ "name": "className",
194
+ "type": "string",
195
+ "default": null,
196
+ "description": "Additional CSS classes to apply.",
197
+ "required": false,
198
+ "inherited": false,
199
+ "deprecated": false
200
+ },
201
+ {
202
+ "name": "label",
203
+ "type": "React.ReactNode",
204
+ "default": null,
205
+ "description": "The label, such as \"Order\", as a `DescriptionList.Label` before the children.",
206
+ "required": false,
207
+ "inherited": false,
208
+ "deprecated": false
209
+ },
210
+ {
211
+ "name": "value",
212
+ "type": "React.ReactNode",
213
+ "default": null,
214
+ "description": "The value, such as \"#1234\", as a `DescriptionList.Value` after the children. Text, a link, a `Tag`: anything that renders. `undefined`, `null` and `''` render nothing, so when a value is missing, say so in words, such as \"Not given\", rather than leave a label with nothing after it.",
215
+ "required": false,
216
+ "inherited": false,
217
+ "deprecated": false
218
+ },
219
+ {
220
+ "name": "children",
221
+ "type": "React.ReactNode",
222
+ "default": null,
223
+ "description": "`DescriptionList.Label`s and `DescriptionList.Value`s, for what `label` and `value` don't cover, such as a label with an info tip or several values. They render between the two, so a `Label` here reads before `value`, and a `Value` here after `label`.",
224
+ "required": false,
225
+ "inherited": false,
226
+ "deprecated": false
227
+ },
228
+ {
229
+ "name": "textColor",
230
+ "type": "Bulma color | 'inherit' | 'current'",
231
+ "default": null,
232
+ "description": "Text color helper.",
233
+ "required": false,
234
+ "inherited": false,
235
+ "deprecated": false,
236
+ "valuesRef": "helpers/valid-values"
237
+ },
238
+ {
239
+ "name": "bgColor",
240
+ "type": "Bulma color | 'inherit' | 'current'",
241
+ "default": null,
242
+ "description": "Background color helper.",
243
+ "required": false,
244
+ "inherited": false,
245
+ "deprecated": false,
246
+ "valuesRef": "helpers/valid-values"
247
+ }
248
+ ],
249
+ "extraProps": [
250
+ {
251
+ "name": "ref",
252
+ "type": "React.Ref<HTMLDivElement>",
253
+ "default": null,
254
+ "description": "Ref forwarded to the `<div>`.",
255
+ "required": false,
256
+ "inherited": false,
257
+ "deprecated": false
258
+ }
259
+ ],
260
+ "catchAll": "All standard <div> attributes and Bulma helper props",
261
+ "types": []
262
+ },
263
+ {
264
+ "path": "DescriptionList.Label",
265
+ "summary": "A label, the name of a fact: a `<dt>`, in the weaker text color.",
266
+ "component": null,
267
+ "props": [
268
+ {
269
+ "name": "className",
270
+ "type": "string",
271
+ "default": null,
272
+ "description": "Additional CSS classes to apply.",
273
+ "required": false,
274
+ "inherited": false,
275
+ "deprecated": false
276
+ },
277
+ {
278
+ "name": "children",
279
+ "type": "React.ReactNode",
280
+ "default": null,
281
+ "description": "The label. A button may sit in it, such as one that opens a `Popover` about the label, but not a heading, which HTML doesn't allow here.",
282
+ "required": false,
283
+ "inherited": false,
284
+ "deprecated": false
285
+ },
286
+ {
287
+ "name": "textColor",
288
+ "type": "Bulma color | 'inherit' | 'current'",
289
+ "default": null,
290
+ "description": "Text color helper.",
291
+ "required": false,
292
+ "inherited": false,
293
+ "deprecated": false,
294
+ "valuesRef": "helpers/valid-values"
295
+ },
296
+ {
297
+ "name": "bgColor",
298
+ "type": "Bulma color | 'inherit' | 'current'",
299
+ "default": null,
300
+ "description": "Background color helper.",
301
+ "required": false,
302
+ "inherited": false,
303
+ "deprecated": false,
304
+ "valuesRef": "helpers/valid-values"
305
+ }
306
+ ],
307
+ "extraProps": [
308
+ {
309
+ "name": "ref",
310
+ "type": "React.Ref<HTMLElement>",
311
+ "default": null,
312
+ "description": "Ref forwarded to the `<dt>`.",
313
+ "required": false,
314
+ "inherited": false,
315
+ "deprecated": false
316
+ }
317
+ ],
318
+ "catchAll": "All standard HTML attributes and Bulma helper props",
319
+ "types": []
320
+ },
321
+ {
322
+ "path": "DescriptionList.Value",
323
+ "summary": "A value, what the label says about the thing: a `<dd>`. An item may have several.",
324
+ "component": null,
325
+ "props": [
326
+ {
327
+ "name": "className",
328
+ "type": "string",
329
+ "default": null,
330
+ "description": "Additional CSS classes to apply.",
331
+ "required": false,
332
+ "inherited": false,
333
+ "deprecated": false
334
+ },
335
+ {
336
+ "name": "children",
337
+ "type": "React.ReactNode",
338
+ "default": null,
339
+ "description": "The value. Anything goes, a list or a paragraph included.",
340
+ "required": false,
341
+ "inherited": false,
342
+ "deprecated": false
343
+ },
344
+ {
345
+ "name": "textColor",
346
+ "type": "Bulma color | 'inherit' | 'current'",
347
+ "default": null,
348
+ "description": "Text color helper.",
349
+ "required": false,
350
+ "inherited": false,
351
+ "deprecated": false,
352
+ "valuesRef": "helpers/valid-values"
353
+ },
354
+ {
355
+ "name": "bgColor",
356
+ "type": "Bulma color | 'inherit' | 'current'",
357
+ "default": null,
358
+ "description": "Background color helper.",
359
+ "required": false,
360
+ "inherited": false,
361
+ "deprecated": false,
362
+ "valuesRef": "helpers/valid-values"
363
+ }
364
+ ],
365
+ "extraProps": [
366
+ {
367
+ "name": "ref",
368
+ "type": "React.Ref<HTMLElement>",
369
+ "default": null,
370
+ "description": "Ref forwarded to the `<dd>`.",
371
+ "required": false,
372
+ "inherited": false,
373
+ "deprecated": false
374
+ }
375
+ ],
376
+ "catchAll": "All standard HTML attributes and Bulma helper props",
377
+ "types": []
378
+ }
379
+ ],
380
+ "cssVars": [
381
+ {
382
+ "css": "--bulma-description-list-gap",
383
+ "sass": "$description-list-gap",
384
+ "default": "0.75em",
385
+ "scope": "root"
386
+ },
387
+ {
388
+ "css": "--bulma-description-list-column-gap",
389
+ "sass": "$description-list-column-gap",
390
+ "default": "1.5em",
391
+ "scope": "root"
392
+ },
393
+ {
394
+ "css": "--bulma-description-list-row-gap",
395
+ "sass": "$description-list-row-gap",
396
+ "default": "0.25em",
397
+ "scope": "root"
398
+ },
399
+ {
400
+ "css": "--bulma-description-list-label-max-width",
401
+ "sass": "$description-list-label-max-width",
402
+ "default": "40%",
403
+ "scope": "root"
404
+ },
405
+ {
406
+ "css": "--bulma-description-list-label-color",
407
+ "sass": "$description-list-label-color",
408
+ "default": "var(--bulma-text-weak)",
409
+ "scope": "root"
410
+ },
411
+ {
412
+ "css": "--bulma-description-list-label-weight",
413
+ "sass": "$description-list-label-weight",
414
+ "default": "var(--bulma-weight-normal)",
415
+ "scope": "root"
416
+ },
417
+ {
418
+ "css": "--bulma-description-list-value-color",
419
+ "sass": "$description-list-value-color",
420
+ "default": "var(--bulma-text)",
421
+ "scope": "root"
422
+ },
423
+ {
424
+ "css": "--bulma-description-list-divider-color",
425
+ "sass": "$description-list-divider-color",
426
+ "default": "var(--bulma-border-weak)",
427
+ "scope": "root"
428
+ },
429
+ {
430
+ "css": "--bulma-description-list-divider-width",
431
+ "sass": "$description-list-divider-width",
432
+ "default": "1px",
433
+ "scope": "root"
434
+ }
435
+ ]
436
+ }
@@ -0,0 +1,250 @@
1
+ {
2
+ "name": "RingProgress",
3
+ "kind": "component",
4
+ "category": "elements",
5
+ "slug": "elements/ringprogress",
6
+ "docsUrl": "https://bestax.io/docs/api/elements/ringprogress",
7
+ "examples": [
8
+ {
9
+ "title": "Basic Usage",
10
+ "code": "<RingProgress value={72} label=\"Upload\" color=\"success\">\n 72%\n</RingProgress>"
11
+ },
12
+ {
13
+ "title": "Out of Something Else",
14
+ "code": "<RingProgress\n value={7}\n max={10}\n label=\"Weekly goal\"\n aria-valuetext=\"7 of 10 tasks\"\n>\n 7/10\n</RingProgress>"
15
+ },
16
+ {
17
+ "title": "A Level, Not a Task",
18
+ "code": "<RingProgress isMeter value={64} label=\"Storage used\" color=\"info\" size=\"large\">\n 64%\n</RingProgress>"
19
+ },
20
+ {
21
+ "title": "Sections",
22
+ "code": "<>\n <RingProgress\n label=\"Storage\"\n size=\"medium\"\n sections={[\n { value: 40, color: 'info', label: 'Documents' },\n { value: 15, color: 'warning', label: 'Photos' },\n { value: 15, color: 'danger', label: 'Video' },\n ]}\n >\n 70%\n </RingProgress>\n <Tags mt=\"3\">\n <Tag color=\"info\">Documents 40%</Tag>\n <Tag color=\"warning\">Photos 15%</Tag>\n <Tag color=\"danger\">Video 15%</Tag>\n </Tags>\n</>"
23
+ },
24
+ {
25
+ "title": "Colors",
26
+ "code": "<>\n <RingProgress value={70} label=\"Primary\" color=\"primary\" mr=\"3\" />\n <RingProgress value={70} label=\"Link\" color=\"link\" mr=\"3\" />\n <RingProgress value={70} label=\"Info\" color=\"info\" mr=\"3\" />\n <RingProgress value={70} label=\"Success\" color=\"success\" mr=\"3\" />\n <RingProgress value={70} label=\"Warning\" color=\"warning\" mr=\"3\" />\n <RingProgress value={70} label=\"Danger\" color=\"danger\" />\n</>"
27
+ },
28
+ {
29
+ "title": "Sizes and Rounded Ends",
30
+ "code": "<>\n <RingProgress value={60} label=\"Small\" size=\"small\" isRounded mr=\"4\" />\n <RingProgress value={60} label=\"Normal\" isRounded mr=\"4\" />\n <RingProgress value={60} label=\"Medium\" size=\"medium\" isRounded mr=\"4\" />\n <RingProgress value={60} label=\"Large\" size=\"large\" isRounded />\n</>"
31
+ },
32
+ {
33
+ "title": "A Value That Changes",
34
+ "code": "function example() {\n const [value, setValue] = useState(20);\n return (\n <>\n <RingProgress value={value} label=\"Upload\" color=\"success\" mb=\"3\">\n {value}%\n </RingProgress>\n <Paragraph role=\"status\">\n {value >= 100 ? 'Upload complete' : ''}\n </Paragraph>\n <Button size=\"small\" onClick={() => setValue(v => Math.min(100, v + 20))}>\n Move it on\n </Button>\n </>\n );\n}"
35
+ }
36
+ ],
37
+ "accessibility": "- **Roles:** `role=\"progressbar\"` by default, `role=\"meter\"` with `isMeter`, and `role=\"img\"` with\n `sections`, on the ring itself, named by `label` (or `aria-label`, or `aria-labelledby` with a\n visible heading's id). A development build warns when it has no name.\n- **Values:** a progressbar or a meter has `aria-valuenow`, `aria-valuemin` and `aria-valuemax`,\n read as a percentage unless `aria-valuetext` says otherwise. With `sections`, use `label`, since\n a name from `aria-labelledby` would replace the one that lists the values.\n- **The drawing and the middle are hidden** from assistive tech, which reads the value from the\n ring, so nothing is heard twice.\n- **Contrast:** against the track, the `primary` and `link` arcs clear WCAG 1.4.11's 3:1 on a\n light page and the `info`, `success`, `warning` and `danger` arcs on a dark one. The others fall\n short in that scheme, as they do in Bulma's progress bar, so show the value as text in the middle\n where it matters.\n- **Forced colors:** the arcs take the system's text color and the track its gray, and sections\n get gaps between them, since they're one color there.\n- **Motion:** the arc doesn't slide under `prefers-reduced-motion: reduce`.\n- **Not live:** a changing value announces nothing on its own.",
38
+ "related": ["Loader", "Progress", "Tags", "useBulmaClasses"],
39
+ "storybook": "https://bestax.io/storybook/?path=/story/elements-ringprogress--default",
40
+ "summary": "The `RingProgress` component draws a value as a ring that fills as it grows, with anything you pass shown in the middle. It's a `progressbar` for a task moving toward done, or a `meter` with `isMeter` for a level within a range, named by `label`. With `sections` it draws several values around one ring and is an image whose name lists them. It has no state for work with no value: that's `Loader`.",
41
+ "import": "import { RingProgress } from '@allxsmith/bestax-bulma';",
42
+ "sourceFile": "bulma-ui/src/elements/RingProgress.tsx",
43
+ "rootClass": "ring-progress",
44
+ "parts": [
45
+ {
46
+ "path": "RingProgress",
47
+ "summary": "The `RingProgress` component draws a value as a ring that fills as it grows, with anything you pass shown in the middle. It's a `progressbar` for a task moving toward done, or a `meter` with `isMeter` for a level within a range, named by `label`. With `sections` it draws several values around one ring and is an image whose name lists them. It has no state for work with no value: that's `Loader`.",
48
+ "component": null,
49
+ "props": [
50
+ {
51
+ "name": "className",
52
+ "type": "string",
53
+ "default": null,
54
+ "description": "Additional CSS classes to apply.",
55
+ "required": false,
56
+ "inherited": false,
57
+ "deprecated": false
58
+ },
59
+ {
60
+ "name": "value",
61
+ "type": "number",
62
+ "default": null,
63
+ "description": "How far along it is, from 0 to `max`. Values outside that range are drawn, and read, at the nearest end. Ignored with `sections`.",
64
+ "required": false,
65
+ "inherited": false,
66
+ "deprecated": false
67
+ },
68
+ {
69
+ "name": "max",
70
+ "type": "number",
71
+ "default": "100",
72
+ "description": "The value that fills the ring.",
73
+ "required": false,
74
+ "inherited": false,
75
+ "deprecated": false
76
+ },
77
+ {
78
+ "name": "sections",
79
+ "type": "{ value: number; color?: RingProgressColor; label: string }[]",
80
+ "default": null,
81
+ "description": "Several values around one ring, in order clockwise from the top, each with its own color and label. The ring is then an image whose name writes them out, such as \"Storage: Documents 40%, Photos 15%\", since a screen reader can't take several values from one element. A total over `max` fills the ring and stops.",
82
+ "required": false,
83
+ "inherited": false,
84
+ "deprecated": false
85
+ },
86
+ {
87
+ "name": "label",
88
+ "type": "string",
89
+ "default": null,
90
+ "description": "What it shows, such as \"Upload\" or \"Storage\". It names the ring, so it's read with the value. A development build warns when the ring has no name.",
91
+ "required": false,
92
+ "inherited": false,
93
+ "deprecated": false
94
+ },
95
+ {
96
+ "name": "isMeter",
97
+ "type": "boolean",
98
+ "default": "false",
99
+ "description": "A level within a range, such as storage used or a score, rather than a task moving toward done: `role=\"meter\"` in place of `role=\"progressbar\"`. Ignored with `sections`.",
100
+ "required": false,
101
+ "inherited": false,
102
+ "deprecated": false
103
+ },
104
+ {
105
+ "name": "color",
106
+ "type": "RingProgressColor",
107
+ "default": null,
108
+ "description": "The arc's color, and the color of sections without one.",
109
+ "required": false,
110
+ "inherited": false,
111
+ "deprecated": false
112
+ },
113
+ {
114
+ "name": "size",
115
+ "type": "'small' | 'medium' | 'large'",
116
+ "default": null,
117
+ "description": "The ring's size.",
118
+ "required": false,
119
+ "inherited": false,
120
+ "deprecated": false
121
+ },
122
+ {
123
+ "name": "isRounded",
124
+ "type": "boolean",
125
+ "default": "false",
126
+ "description": "Rounds the ends of the arc.",
127
+ "required": false,
128
+ "inherited": false,
129
+ "deprecated": false
130
+ },
131
+ {
132
+ "name": "children",
133
+ "type": "React.ReactNode",
134
+ "default": null,
135
+ "description": "What sits in the middle of the ring, such as the value as text. It's hidden from assistive tech, which reads the value from the ring itself, so the value isn't heard twice. Say anything more, such as \"7 of 10 tasks\", in `aria-valuetext`.",
136
+ "required": false,
137
+ "inherited": false,
138
+ "deprecated": false
139
+ },
140
+ {
141
+ "name": "textColor",
142
+ "type": "Bulma color | 'inherit' | 'current'",
143
+ "default": null,
144
+ "description": "Text color helper.",
145
+ "required": false,
146
+ "inherited": false,
147
+ "deprecated": false,
148
+ "valuesRef": "helpers/valid-values"
149
+ },
150
+ {
151
+ "name": "bgColor",
152
+ "type": "Bulma color | 'inherit' | 'current'",
153
+ "default": null,
154
+ "description": "Background color helper.",
155
+ "required": false,
156
+ "inherited": false,
157
+ "deprecated": false,
158
+ "valuesRef": "helpers/valid-values"
159
+ }
160
+ ],
161
+ "extraProps": [
162
+ {
163
+ "name": "ref",
164
+ "type": "React.Ref<HTMLDivElement>",
165
+ "default": null,
166
+ "description": "Ref forwarded to the root `<div>`.",
167
+ "required": false,
168
+ "inherited": false,
169
+ "deprecated": false
170
+ },
171
+ {
172
+ "name": "aria-labelledby",
173
+ "type": "string",
174
+ "default": null,
175
+ "description": "The id of a visible heading that names the ring, in place of `label`. With `sections`, use `label`, since a name from here replaces the one that lists the values.",
176
+ "required": false,
177
+ "inherited": false,
178
+ "deprecated": false
179
+ },
180
+ {
181
+ "name": "aria-valuetext",
182
+ "type": "string",
183
+ "default": null,
184
+ "description": "What a screen reader says for the value, such as \"7 of 10 tasks\". Without it, the value is read as a percentage.",
185
+ "required": false,
186
+ "inherited": false,
187
+ "deprecated": false
188
+ }
189
+ ],
190
+ "catchAll": "All standard <div> attributes and Bulma helper props",
191
+ "types": [
192
+ {
193
+ "name": "RingProgressColor",
194
+ "expansion": "'primary' | 'link' | 'info' | 'success' | 'warning' | 'danger' | 'black' | 'dark' | 'light' | 'white'",
195
+ "summary": "The Bulma colors an arc takes, the ones `Progress` takes."
196
+ }
197
+ ]
198
+ }
199
+ ],
200
+ "cssVars": [
201
+ {
202
+ "css": "--bulma-ring-progress-size",
203
+ "sass": "$ring-progress-size",
204
+ "default": "5rem",
205
+ "scope": "root"
206
+ },
207
+ {
208
+ "css": "--bulma-ring-progress-thickness",
209
+ "sass": "$ring-progress-thickness",
210
+ "default": "10",
211
+ "scope": "root"
212
+ },
213
+ {
214
+ "css": "--bulma-ring-progress-track-color",
215
+ "sass": "$ring-progress-track-color",
216
+ "default": "var(--bulma-border-weak)",
217
+ "scope": "root"
218
+ },
219
+ {
220
+ "css": "--bulma-ring-progress-arc-color",
221
+ "sass": "$ring-progress-arc-color",
222
+ "default": "var(--bulma-primary)",
223
+ "scope": "root"
224
+ },
225
+ {
226
+ "css": "--bulma-ring-progress-duration",
227
+ "sass": "$ring-progress-duration",
228
+ "default": "var(--bulma-duration)",
229
+ "scope": "root"
230
+ },
231
+ {
232
+ "css": "--bulma-ring-progress-label-color",
233
+ "sass": "$ring-progress-label-color",
234
+ "default": "var(--bulma-text-strong)",
235
+ "scope": "root"
236
+ },
237
+ {
238
+ "css": "--bulma-ring-progress-label-weight",
239
+ "sass": "$ring-progress-label-weight",
240
+ "default": "var(--bulma-weight-semibold)",
241
+ "scope": "root"
242
+ },
243
+ {
244
+ "css": "--bulma-ring-progress-label-size",
245
+ "sass": "$ring-progress-label-size",
246
+ "default": "calc(var(--bulma-ring-progress-size) / 5)",
247
+ "scope": "root"
248
+ }
249
+ ]
250
+ }
@@ -37,7 +37,7 @@ instead of hand-writing markup.
37
37
  - Raw `*Base` form exports (`InputBase`, `SelectBase`, `TextAreaBase`, …) are
38
38
  escape-hatch variants of the convenience wrappers above them; see the Form docs.
39
39
 
40
- 106 documented components. Generated from the API docs — every exported
40
+ 108 documented components. Generated from the API docs — every exported
41
41
  component is guaranteed to appear (the generator fails if one lacks an API page).
42
42
 
43
43
  ## Elements
@@ -49,6 +49,7 @@ component is guaranteed to appear (the generator fails if one lacks an API page)
49
49
  - [Code](https://bestax.io/docs/api/elements/code) — The `Code` component renders a styled `<code>` element with Bulma helper class integration.
50
50
  - [Content](https://bestax.io/docs/api/elements/content) — The `Content` component applies Bulma’s typographic styles to its children, enhancing the appearance of HTML elements like paragraphs, headings, lists…
51
51
  - [Delete](https://bestax.io/docs/api/elements/delete) — The `Delete` component provides a Bulma-styled close/delete button for dismissing modals, notifications, tags, messages, and more.
52
+ - [DescriptionList](https://bestax.io/docs/api/elements/descriptionlist) — The `DescriptionList` component lists facts about one thing, each a label and its value, such as an order's details or a profile.
52
53
  - [Divider](https://bestax.io/docs/api/elements/divider) — The `Divider` component renders a styled horizontal rule (`<hr>`) element with Bulma helper class integration.
53
54
  - [Emphasis](https://bestax.io/docs/api/elements/emphasis) — The `Emphasis` component renders a styled `<em>` element with Bulma helper class integration.
54
55
  - [Figure](https://bestax.io/docs/api/elements/figure) — The `Figure` component renders a styled `<figure>` element with Bulma helper class integration.
@@ -65,6 +66,7 @@ component is guaranteed to appear (the generator fails if one lacks an API page)
65
66
  - [Paragraph](https://bestax.io/docs/api/elements/paragraph) — The `Paragraph` component renders a styled `<p>` element with Bulma helper class integration.
66
67
  - [Pre](https://bestax.io/docs/api/elements/pre) — The `Pre` component renders a styled `<pre>` element with Bulma helper class integration.
67
68
  - [Progress](https://bestax.io/docs/api/elements/progress) — The `Progress` component displays a Bulma-styled progress bar.
69
+ - [RingProgress](https://bestax.io/docs/api/elements/ringprogress) — The `RingProgress` component draws a value as a ring that fills as it grows, with anything you pass shown in the middle.
68
70
  - [Skeleton](https://bestax.io/docs/api/elements/skeleton) — The `Skeleton` component provides a Bulma-styled skeleton loader for React applications, useful for indicating that content is loading.
69
71
  - [Span](https://bestax.io/docs/api/elements/span) — The `Span` component renders a styled inline `<span>` element with Bulma helper class integration.
70
72
  - [Strong](https://bestax.io/docs/api/elements/strong) — The `Strong` component renders a styled `<strong>` element with Bulma helper class integration.
@@ -105,6 +105,15 @@ Centered; a collection of items → Card grid. For mixed requests, pick the domi
105
105
  parcel or a deployment, `active={i}` marks progress and `pending="Out for delivery"` ends it on
106
106
  what's under way, oldest first. A journey the user moves through, like a wizard or a checkout,
107
107
  stays `Steps`.
108
+ - **Facts about one thing, each a label and its value (an order summary, a profile, a file's
109
+ details), are `DescriptionList`**, not `Columns` of label and value or a two-column `Table`:
110
+ `<DescriptionList aria-labelledby="order-heading">` under a `Title id="order-heading"`, with a
111
+ `<DescriptionList.Item label="Order" value="#1234" />` per fact. It stacks on a phone and puts
112
+ the labels beside their values from tablet up, so add no breakpoint code; `orientation`
113
+ pins it. Several values, or a label with an info tip, go in as `DescriptionList.Label` and
114
+ `DescriptionList.Value` children. Several records with the same fields stay a `Table`, and so
115
+ do facts a screen reader must announce with their labels, as a `Table` with `scope="row"`
116
+ headers.
108
117
  - **A file browser, a checkbox tree (permissions, filters) or an outline you browse is
109
118
  `TreeView`**, with `<TreeView.Item value="…" label="…" icon="folder">` items nested inside each
110
119
  other: `<TreeView aria-label="Files" selectionMode="single">` with `selected`/`onSelectedChange`
@@ -190,9 +190,9 @@ value is flagged. The same conversion covers the modifiers bestax has no prop fo
190
190
  ## Refs
191
191
 
192
192
  bloomer forwarded no refs. bestax forwards a ref from the form controls, plus `Avatar`, `Button`,
193
- `Carousel`, `CarouselItem`, `Dialog`, `Dropdown`, `EmptyState`, `Kbd`, `Kbd.Group`, `Link`,
193
+ `Carousel`, `CarouselItem`, `DescriptionList`, `DescriptionList.Item`, `DescriptionList.Label`, `DescriptionList.Value`, `Dialog`, `Dropdown`, `EmptyState`, `Kbd`, `Kbd.Group`, `Link`,
194
194
  `LinkButton`, `Loader`, `Menu.Item`, `Modal`, `Navbar`, `Navbar.Burger`, `Navbar.Dropdown`,
195
- `Navbar.Item`, `Navbar.Link`, `ScrollArea`, `SegmentedControl`, `SegmentedControl.Segment`, `Sidebar`, `Splitter`, `Splitter.Pane`, `Timeline`,
195
+ `Navbar.Item`, `Navbar.Link`, `RingProgress`, `ScrollArea`, `SegmentedControl`, `SegmentedControl.Segment`, `Sidebar`, `Splitter`, `Splitter.Pane`, `Timeline`,
196
196
  `Timeline.Item`, `Toast`, `ToggleButton`, `TreeView` and `TreeView.Item` — pass `ref` directly on
197
197
  those. "The form controls" means the inputs themselves: the `Field`, `Field.Label`, `Field.Body`,
198
198
  `Checkboxes` and `Radios` wrappers around them forward nothing.
@@ -187,9 +187,9 @@ TODO rather than write a second `ref`; keep whichever one you meant.
187
187
 
188
188
  An existing `ref` is passed through untouched — which is safe only where the bestax target forwards
189
189
  one. rbx forwards a ref on every component; bestax does so on the form controls, plus `Avatar`,
190
- `Button`, `Carousel`, `CarouselItem`, `Dialog`, `Dropdown`, `EmptyState`, `Kbd`, `Kbd.Group`,
190
+ `Button`, `Carousel`, `CarouselItem`, `DescriptionList`, `DescriptionList.Item`, `DescriptionList.Label`, `DescriptionList.Value`, `Dialog`, `Dropdown`, `EmptyState`, `Kbd`, `Kbd.Group`,
191
191
  `Link`, `LinkButton`, `Loader`, `Menu.Item`, `Modal`, `Navbar`, `Navbar.Burger`, `Navbar.Dropdown`,
192
- `Navbar.Item`, `Navbar.Link`, `ScrollArea`, `SegmentedControl`, `SegmentedControl.Segment`, `Sidebar`, `Splitter`, `Splitter.Pane`, `Timeline`,
192
+ `Navbar.Item`, `Navbar.Link`, `RingProgress`, `ScrollArea`, `SegmentedControl`, `SegmentedControl.Segment`, `Sidebar`, `Splitter`, `Splitter.Pane`, `Timeline`,
193
193
  `Timeline.Item`, `Toast`, `ToggleButton`, `TreeView` and `TreeView.Item`. "The form controls" there
194
194
  means the inputs themselves: the `Field`, `Field.Label`, `Field.Body`, `Checkboxes` and `Radios`
195
195
  wrappers around them forward nothing, and `Field` is a target this codemod emits.
@@ -163,9 +163,9 @@ The same TODO marks a `Heading` that sets `size` and `textSize` both: drop `size
163
163
  ## `domRef`
164
164
 
165
165
  bestax components don't take `domRef`, but many forward a plain `ref` — the form controls, plus
166
- `Avatar`, `Button`, `Carousel`, `CarouselItem`, `Dialog`, `Dropdown`, `EmptyState`, `Kbd`,
166
+ `Avatar`, `Button`, `Carousel`, `CarouselItem`, `DescriptionList`, `DescriptionList.Item`, `DescriptionList.Label`, `DescriptionList.Value`, `Dialog`, `Dropdown`, `EmptyState`, `Kbd`,
167
167
  `Kbd.Group`, `Link`, `LinkButton`, `Loader`, `Menu.Item`, `Modal`, `Navbar`, `Navbar.Burger`,
168
- `Navbar.Dropdown`, `Navbar.Item`, `Navbar.Link`, `ScrollArea`, `SegmentedControl`, `SegmentedControl.Segment`,
168
+ `Navbar.Dropdown`, `Navbar.Item`, `Navbar.Link`, `RingProgress`, `ScrollArea`, `SegmentedControl`, `SegmentedControl.Segment`,
169
169
  `Sidebar`, `Splitter`, `Splitter.Pane`, `Timeline`, `Timeline.Item`, `Toast`, `ToggleButton`, `TreeView` and `TreeView.Item`. On
170
170
  those, rename `domRef` to `ref` and it works; do not restructure the markup. "The form controls"
171
171
  means the inputs themselves: the `Field`, `Field.Label`, `Field.Body`, `Checkboxes` and `Radios`
@@ -90,8 +90,8 @@ is **more complete** than the docs page's Option C example, which omits several)
90
90
  `combobox`, `taginput`, `picker-popover`, `dateinput`, `timeinput`, `datetimeinput`,
91
91
  `daterangeinput`, `file`
92
92
 
93
- **Elements** (`@allxsmith/bestax-bulma/scss/elements/<name>`): `kbd`, `linkbutton`, `loader`,
94
- `notification`, `progress`, `skeleton`
93
+ **Elements** (`@allxsmith/bestax-bulma/scss/elements/<name>`): `descriptionlist`, `kbd`,
94
+ `linkbutton`, `loader`, `notification`, `progress`, `ringprogress`, `skeleton`
95
95
 
96
96
  **Helpers** (`@allxsmith/bestax-bulma/scss/helpers/<name>`): `cursor`, `sizing`
97
97
 
@@ -464,6 +464,19 @@ The field around the two inputs. Its calendar is the `DateInput` one, with the v
464
464
  `--bulma-datetimeinput-time-card-radius`, `--bulma-datetimeinput-time-card-shadow`,
465
465
  `--bulma-datetimeinput-time-overlay-background`, `--bulma-datetimeinput-time-overlay-blur`
466
466
 
467
+ ### DescriptionList
468
+
469
+ Declared on the root, `.description-list`. The values take the root's color, so a `textColor` on
470
+ the list recolors them, and the labels keep `--bulma-description-list-label-color`. The gaps are in
471
+ `em`, so `textSize` scales them. `--bulma-description-list-label-max-width` is the most the labels'
472
+ column takes when the labels sit beside their values; it's a percentage of the list by default.
473
+
474
+ `--bulma-description-list-column-gap`, `--bulma-description-list-divider-color`,
475
+ `--bulma-description-list-divider-width`, `--bulma-description-list-gap`,
476
+ `--bulma-description-list-label-color`, `--bulma-description-list-label-max-width`,
477
+ `--bulma-description-list-label-weight`, `--bulma-description-list-row-gap`,
478
+ `--bulma-description-list-value-color`
479
+
467
480
  ### Dialog
468
481
 
469
482
  `--bulma-dialog-animation-duration`, `--bulma-dialog-background`, `--bulma-dialog-body-color`,
@@ -616,6 +629,19 @@ the label text inside the `Radio`, since the whole label is the click target.
616
629
  `--bulma-rate-spaced-gap`, `--bulma-rate-text-color`, `--bulma-rate-text-size`,
617
630
  `--bulma-rate-transition-duration`
618
631
 
632
+ ### RingProgress
633
+
634
+ Declared on the root, `.ring-progress`; the color and size classes set `--bulma-ring-progress-arc-color`
635
+ and `--bulma-ring-progress-size`. The thickness is in the ring's own units: it's 100 across with a
636
+ radius of 42, so up to 16 fits. In forced colors the arcs take `CanvasText` and the track `GrayText`
637
+ whatever these say.
638
+
639
+ `--bulma-ring-progress-arc-color`, `--bulma-ring-progress-duration`,
640
+ `--bulma-ring-progress-label-color`, `--bulma-ring-progress-label-size`,
641
+ `--bulma-ring-progress-label-weight`,
642
+ `--bulma-ring-progress-size`, `--bulma-ring-progress-thickness`,
643
+ `--bulma-ring-progress-track-color`
644
+
619
645
  ### Reveal
620
646
 
621
647
  `--bulma-reveal-duration`, `--bulma-reveal-easing`, `--bulma-reveal-flip-angle`,
@@ -64,6 +64,7 @@ Shades (`colorShade` / `backgroundColorShade`): `00, 05, 10, … 95, invert, lig
64
64
  | `DateInput` | `primary \| link \| info \| success \| warning \| danger` | `small \| medium \| large` | also `isRounded` |
65
65
  | `DateRangeInput` | `primary \| link \| info \| success \| warning \| danger` | `small \| medium \| large` | also `isRounded`; `color` also fills the calendar range |
66
66
  | `DateTimeInput` | `primary \| link \| info \| success \| warning \| danger` | `small \| medium \| large` | also `isRounded` |
67
+ | `DescriptionList` | — (no `color`: `textColor` on the root colors the values; the labels are `--bulma-description-list-label-color`) | — (sized in `em` from the text around it; size it with `textSize`) | also `hasDividers`; one look, no `variant`; retheme through `--bulma-description-list-*` |
67
68
  | `EmptyState` | `primary \| link \| info \| success \| warning \| danger` (the indicator circle and its icon only, never the text) | `small \| normal \| medium \| large` | also `variant`: `light` (default) \| `filled`; neutral with no `color`; tint text with `textColor`; `--bulma-empty-state-*` |
68
69
  | `File` | `primary \| link \| info \| success \| warning \| danger \| black \| dark \| light \| white` | `small \| medium \| large` | also `isBoxed`, `isFullwidth` |
69
70
  | `Hero` | every `validColors` member + `inherit`/`current` (the `-bis`/`-ter` shades, the greys, `inherit` and `current` deprecated: no CSS, dev-warn, removed next major — see ⚠️) | `small \| medium \| large \| fullheight \| fullheight-with-navbar` | section background |
@@ -78,6 +79,7 @@ Shades (`colorShade` / `backgroundColorShade`): `00, 05, 10, … 95, invert, lig
78
79
  | `Panel` | `primary \| link \| info \| success \| warning \| danger \| black \| dark \| light \| white` | — | — |
79
80
  | `Progress` | every `validColors` member (the `-bis`/`-ter` shades and the greys deprecated: no CSS, dev-warn, removed next major — see ⚠️) | `small \| medium \| large` | — |
80
81
  | `Radio` | `primary \| link \| info \| success \| warning \| danger` | `small \| normal \| medium \| large` | the 6 only |
82
+ | `RingProgress` | `primary \| link \| info \| success \| warning \| danger \| black \| dark \| light \| white` (the arc) | `small \| medium \| large` | a section takes its own `color`; arcs are SVG strokes, so retheme through `--bulma-ring-progress-*` |
81
83
  | `Rate` | `primary \| link \| info \| success \| warning \| danger` | `small \| medium \| large` | the 6 only |
82
84
  | `ScrollArea` | — (no `color`: the thumb is `--bulma-scroll-area-thumb-color`) | — (`--bulma-scroll-area-scrollbar-width`: `thin`, `auto` or `none`) | the browser's own bars, so forced colors gives them the system's colors; retheme through `--bulma-scroll-area-*` |
83
85
  | `SegmentedControl` | `primary \| link \| info \| success \| warning \| danger` | `small \| medium \| large` | fills only the checked segment (default `link`); `size` is the row's `are-<size>`; segments take no `color` or `size` |
package/data/skills.json CHANGED
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "id": "component-catalog",
12
12
  "file": "references/component-catalog.md",
13
- "bytes": 21209
13
+ "bytes": 21608
14
14
  },
15
15
  {
16
16
  "id": "library-contributor",
@@ -93,7 +93,7 @@
93
93
  {
94
94
  "id": "bloomer-prop-map",
95
95
  "file": "references/bloomer/prop-map.md",
96
- "bytes": 26705
96
+ "bytes": 26814
97
97
  },
98
98
  {
99
99
  "id": "bloomer-unmappables",
@@ -128,7 +128,7 @@
128
128
  {
129
129
  "id": "rbx-prop-map",
130
130
  "file": "references/rbx/prop-map.md",
131
- "bytes": 15546
131
+ "bytes": 15655
132
132
  },
133
133
  {
134
134
  "id": "rbx-unmappables",
@@ -148,7 +148,7 @@
148
148
  {
149
149
  "id": "react-bulma-components-unmappables",
150
150
  "file": "references/react-bulma-components/unmappables.md",
151
- "bytes": 13188
151
+ "bytes": 13297
152
152
  }
153
153
  ],
154
154
  "examples": []
@@ -162,7 +162,7 @@
162
162
  {
163
163
  "id": "modular-build",
164
164
  "file": "references/modular-build.md",
165
- "bytes": 12416
165
+ "bytes": 12451
166
166
  }
167
167
  ],
168
168
  "examples": []
@@ -176,12 +176,12 @@
176
176
  {
177
177
  "id": "css-variables",
178
178
  "file": "references/css-variables.md",
179
- "bytes": 53041
179
+ "bytes": 54438
180
180
  },
181
181
  {
182
182
  "id": "themeable-components",
183
183
  "file": "references/themeable-components.md",
184
- "bytes": 25951
184
+ "bytes": 26797
185
185
  }
186
186
  ],
187
187
  "examples": [
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAIjE,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7E,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAID;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,WACI,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAI5E;AAkJD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAwD/D,CAAC;AAqBF;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,SAAS,MAAM,EAAO,GAC5B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAyBrB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AA+BD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,MAAM,GACf,YAAY,EAAE,CAsBhB;AA0FD,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,eAAe,EAAE,EAC7B,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,OAAO,EAAE,EAChB,QAAQ,GAAE,SAAS,YAAY,EAAO,GACrC,GAAG,EAAE,CAiMP;AAoBD;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CAe3E"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAIjE,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7E,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAID;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,WACI,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAI5E;AAkJD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CA8D/D,CAAC;AAqBF;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,SAAS,MAAM,EAAO,GAC5B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAyBrB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AA+BD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,MAAM,GACf,YAAY,EAAE,CAsBhB;AA0FD,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,eAAe,EAAE,EAC7B,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,OAAO,EAAE,EAChB,QAAQ,GAAE,SAAS,YAAY,EAAO,GACrC,GAAG,EAAE,CAiMP;AAoBD;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CAe3E"}
package/dist/search.js CHANGED
@@ -199,12 +199,17 @@ export const ALIASES = {
199
199
  chipinput: ['Taginput'],
200
200
  combobox: ['Autocomplete'],
201
201
  confirmdialog: ['Dialog'],
202
+ // Mantine, Chakra and Radix Themes call it DataList. HTML's `<datalist>` is
203
+ // input suggestions, which is Autocomplete.
204
+ datalist: ['DescriptionList', 'Autocomplete'],
202
205
  datepicker: ['DateInput', 'DateTimeInput'],
203
206
  datetimepicker: ['DateTimeInput'],
207
+ definitionlist: ['DescriptionList'],
204
208
  drawer: ['Sidebar'],
205
209
  dropdownmenu: ['Dropdown'],
206
210
  dropzone: ['File'],
207
211
  fileupload: ['File'],
212
+ keyvalue: ['DescriptionList'],
208
213
  modaldialog: ['Modal', 'Dialog'],
209
214
  offcanvas: ['Sidebar'],
210
215
  pager: ['Pagination'],
@@ -220,6 +225,7 @@ export const ALIASES = {
220
225
  spinbutton: ['Numberinput'],
221
226
  spinner: ['Loader'],
222
227
  stepper: ['Steps', 'Numberinput'],
228
+ summarylist: ['DescriptionList'],
223
229
  taggroup: ['Tags'],
224
230
  tagsinput: ['Taginput'],
225
231
  timepicker: ['TimeInput', 'DateTimeInput'],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bestax-mcp",
3
- "version": "1.18.13",
3
+ "version": "1.18.15",
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.32.1",
44
44
  "zod": "^4.6.7",
45
- "@allxsmith/bestax-bulma": "^5.49.1"
45
+ "@allxsmith/bestax-bulma": "^5.51.0"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@jest/globals": "^30.0.0",