ionbase-ui 0.81.1 → 0.86.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.
Files changed (59) hide show
  1. package/dist/components/Checkbox.d.ts +39 -0
  2. package/dist/components/Checkbox.d.ts.map +1 -1
  3. package/dist/components/Checkbox.js +77 -4
  4. package/dist/components/Checkbox.js.map +1 -1
  5. package/dist/components/Fieldset.d.ts +62 -0
  6. package/dist/components/Fieldset.d.ts.map +1 -0
  7. package/dist/components/Fieldset.js +58 -0
  8. package/dist/components/Fieldset.js.map +1 -0
  9. package/dist/components/Menu.d.ts +87 -24
  10. package/dist/components/Menu.d.ts.map +1 -1
  11. package/dist/components/Menu.js +245 -28
  12. package/dist/components/Menu.js.map +1 -1
  13. package/dist/components/PageHeader.d.ts +59 -0
  14. package/dist/components/PageHeader.d.ts.map +1 -0
  15. package/dist/components/PageHeader.js +29 -0
  16. package/dist/components/PageHeader.js.map +1 -0
  17. package/dist/components/Radio.d.ts +14 -0
  18. package/dist/components/Radio.d.ts.map +1 -1
  19. package/dist/components/Radio.js +15 -4
  20. package/dist/components/Radio.js.map +1 -1
  21. package/dist/components/SearchField.d.ts +36 -0
  22. package/dist/components/SearchField.d.ts.map +1 -0
  23. package/dist/components/SearchField.js +76 -0
  24. package/dist/components/SearchField.js.map +1 -0
  25. package/dist/components/index.d.ts +10 -4
  26. package/dist/components/index.d.ts.map +1 -1
  27. package/dist/components/index.js +5 -2
  28. package/dist/components/index.js.map +1 -1
  29. package/dist/figma-descriptions.json +96 -76
  30. package/dist/figma-map.json +272 -39
  31. package/dist/meta/Checkbox.json +8 -6
  32. package/dist/meta/CheckboxGroup.json +268 -0
  33. package/dist/meta/Divider.json +2 -2
  34. package/dist/meta/Fieldset.json +162 -0
  35. package/dist/meta/Menu.json +201 -27
  36. package/dist/meta/MenuItem.json +137 -17
  37. package/dist/meta/MenuSection.json +90 -0
  38. package/dist/meta/MenuTrigger.json +177 -0
  39. package/dist/meta/PageHeader.json +169 -0
  40. package/dist/meta/Radio.json +0 -1
  41. package/dist/meta/RadioGroup.json +59 -7
  42. package/dist/meta/SearchField.json +487 -0
  43. package/dist/meta/Stepper.json +2 -2
  44. package/dist/meta/Tabs.json +3 -3
  45. package/dist/meta/components.json +1917 -217
  46. package/dist/meta/contrast.json +594 -90
  47. package/dist/meta/index.json +89 -10
  48. package/dist/meta/patterns/DataTable.json +14 -6
  49. package/dist/meta/patterns/Form.json +27 -2
  50. package/dist/meta/patterns/PageShell.json +18 -5
  51. package/dist/meta/patterns/index.json +5 -2
  52. package/dist/styles/fieldset.css +65 -0
  53. package/dist/styles/index.css +3 -0
  54. package/dist/styles/menu.css +153 -32
  55. package/dist/styles/page-header.css +94 -0
  56. package/dist/styles/radio.css +0 -20
  57. package/dist/styles/search-field.css +70 -0
  58. package/llms.txt +2 -2
  59. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "ionbase-ui",
3
- "version": "0.81.1",
3
+ "version": "0.86.0",
4
4
  "figmaFile": "gaLbGd0QNb1fUl6BjSpfBA",
5
5
  "figmaExported": "2026-09-25",
6
6
  "usage": "Given a Figma node id or component name, look it up here for the React component, its import, and how each Figma property maps onto a real prop. Every mapping is verified against both the Figma export and the TypeScript API on each build.",
@@ -539,6 +539,41 @@
539
539
  }
540
540
  }
541
541
  },
542
+ "1501:475": {
543
+ "figmaComponent": "Checkbox Group",
544
+ "figmaNodeId": "1501:475",
545
+ "figmaPage": "Checkbox",
546
+ "component": "CheckboxGroup",
547
+ "import": "import { CheckboxGroup } from 'ionbase-ui';",
548
+ "docs": "components/checkbox-group/index.html.md",
549
+ "props": {
550
+ "Orientation": {
551
+ "prop": "orientation",
552
+ "values": {
553
+ "Vertical": "vertical",
554
+ "Horizontal": "horizontal"
555
+ }
556
+ },
557
+ "State": {
558
+ "prop": "isInvalid",
559
+ "when": {
560
+ "Error": true
561
+ },
562
+ "note": "Error recolours the helper and shows errorMessage in its place; pass the error copy as errorMessage, not description. Disabled is isDisabled on the group, which cascades to every Checkbox."
563
+ },
564
+ "Label#1501:0": {
565
+ "prop": "label"
566
+ },
567
+ "Helper Text#1501:7": {
568
+ "prop": "description",
569
+ "note": "the help text; while State=Error the same slot holds errorMessage"
570
+ },
571
+ "Show Helper#1501:14": {
572
+ "prop": "description",
573
+ "note": "an absent prop is the switch, so false means omit description"
574
+ }
575
+ }
576
+ },
542
577
  "1167:247": {
543
578
  "figmaComponent": "Citation",
544
579
  "figmaNodeId": "1167:247",
@@ -1129,37 +1164,52 @@
1129
1164
  "docs": "components/menu/index.html.md",
1130
1165
  "props": {
1131
1166
  "Type": {
1132
- "ignore": "Single and Multi describe how many items may be selected, which is the caller's state. Menu renders the surface and holds no selection of its own."
1167
+ "prop": "selectionMode",
1168
+ "values": {
1169
+ "Single": "single",
1170
+ "Multi": "multiple"
1171
+ },
1172
+ "note": "selectionMode none — an action menu with no check slot — is not drawn; every Figma menu shows a selection."
1133
1173
  }
1134
1174
  }
1135
1175
  },
1136
- "639:2634": {
1176
+ "82:217": {
1137
1177
  "figmaComponent": "Menu Item",
1138
- "figmaNodeId": "639:2634",
1139
- "figmaPage": "Side Menu",
1178
+ "figmaNodeId": "82:217",
1179
+ "figmaPage": "Menu",
1140
1180
  "component": "MenuItem",
1141
1181
  "import": "import { MenuItem } from 'ionbase-ui';",
1142
1182
  "docs": "components/menu-item/index.html.md",
1143
1183
  "props": {
1144
- "Status": {
1145
- "prop": "isSelected",
1146
- "when": {
1147
- "Selected": true,
1148
- "Selected Primary": true
1149
- },
1150
- "note": "Hover is CSS. Selected Primary is a second selected styling Figma draws and code does not yet ship."
1151
- },
1152
- "Text#639:12": {
1184
+ "Label#82:0": {
1153
1185
  "prop": "children"
1154
1186
  },
1155
- "Show Icon#639:16": {
1156
- "prop": "icon"
1187
+ "Leading Icon#82:12": {
1188
+ "prop": "icon",
1189
+ "note": "wrap in Icon; omit Icon's label, the row text names it"
1157
1190
  },
1158
- "Select Icon#639:20": {
1159
- "prop": "icon"
1191
+ "Show Leading Icon#82:6": {
1192
+ "prop": "icon",
1193
+ "note": "an absent prop is the switch, so false means omit icon"
1194
+ },
1195
+ "State": {
1196
+ "prop": "isDisabled",
1197
+ "when": {
1198
+ "Disabled": true
1199
+ },
1200
+ "note": "Hover is the highlighted row, which the keyboard and the pointer share. Selected and Selected-hover are the row's key in Menu's selectedKeys, not an item prop. A row that opens a submenu is not drawn: code puts a chevron where the check sits."
1160
1201
  }
1161
1202
  }
1162
1203
  },
1204
+ "1468:271": {
1205
+ "figmaComponent": "Menu Section Title",
1206
+ "figmaNodeId": "1468:271",
1207
+ "figmaPage": "Menu",
1208
+ "component": "MenuSection",
1209
+ "import": "import { MenuSection } from 'ionbase-ui';",
1210
+ "docs": "components/menu-section/index.html.md",
1211
+ "props": {}
1212
+ },
1163
1213
  "792:1537": {
1164
1214
  "figmaComponent": "Modal",
1165
1215
  "figmaNodeId": "792:1537",
@@ -1268,6 +1318,42 @@
1268
1318
  }
1269
1319
  }
1270
1320
  },
1321
+ "1473:242": {
1322
+ "figmaComponent": "Page Header",
1323
+ "figmaNodeId": "1473:242",
1324
+ "figmaPage": "Page Header",
1325
+ "component": "PageHeader",
1326
+ "import": "import { PageHeader } from 'ionbase-ui';",
1327
+ "docs": "components/page-header/index.html.md",
1328
+ "props": {
1329
+ "Title#1473:0": {
1330
+ "prop": "title"
1331
+ },
1332
+ "Description#1473:1": {
1333
+ "prop": "description"
1334
+ },
1335
+ "Show Description#1473:4": {
1336
+ "prop": "description",
1337
+ "note": "an absent prop is the switch, so false means omit description"
1338
+ },
1339
+ "Show Breadcrumb#1473:2": {
1340
+ "prop": "breadcrumb",
1341
+ "note": "pass a Breadcrumb; false means omit breadcrumb"
1342
+ },
1343
+ "Show Status#1473:3": {
1344
+ "prop": "status",
1345
+ "note": "a Badge for the record's state; false means omit status"
1346
+ },
1347
+ "Show Actions#1473:5": {
1348
+ "prop": "actions",
1349
+ "note": "Buttons, most important last, and a MenuTrigger with an icon-only Button for the rest; false means omit actions"
1350
+ },
1351
+ "Show Below#1473:6": {
1352
+ "prop": "children",
1353
+ "note": "the row beneath — the page's Tabs or its filters; false means no children"
1354
+ }
1355
+ }
1356
+ },
1271
1357
  "1291:503": {
1272
1358
  "figmaComponent": "Pagination",
1273
1359
  "figmaNodeId": "1291:503",
@@ -1461,6 +1547,35 @@
1461
1547
  }
1462
1548
  }
1463
1549
  },
1550
+ "1498:242": {
1551
+ "figmaComponent": "Search Field",
1552
+ "figmaNodeId": "1498:242",
1553
+ "figmaPage": "Search Field",
1554
+ "component": "SearchField",
1555
+ "import": "import { SearchField } from 'ionbase-ui';",
1556
+ "docs": "components/search-field/index.html.md",
1557
+ "props": {
1558
+ "Size": {
1559
+ "prop": "size",
1560
+ "values": {
1561
+ "Small": "sm",
1562
+ "Medium": "md",
1563
+ "Large": "lg"
1564
+ }
1565
+ },
1566
+ "State": {
1567
+ "prop": "isInvalid",
1568
+ "when": {
1569
+ "Invalid": true
1570
+ },
1571
+ "note": "Hover, Focus and Filled are CSS or content; Disabled is isDisabled and Read-only is isReadOnly — Input's split, because the box is Input's. The clear button Filled shows is not a prop: it appears whenever there is a query."
1572
+ },
1573
+ "Value#80:0": {
1574
+ "prop": "value",
1575
+ "note": "The query. Figma's text is also the placeholder until one is typed — pass that as placeholder, and name the field with aria-label, not the placeholder."
1576
+ }
1577
+ }
1578
+ },
1464
1579
  "1390:435": {
1465
1580
  "figmaComponent": "Segmented Control",
1466
1581
  "figmaNodeId": "1390:435",
@@ -2841,6 +2956,41 @@
2841
2956
  }
2842
2957
  }
2843
2958
  },
2959
+ "Checkbox Group": {
2960
+ "figmaComponent": "Checkbox Group",
2961
+ "figmaNodeId": "1501:475",
2962
+ "figmaPage": "Checkbox",
2963
+ "component": "CheckboxGroup",
2964
+ "import": "import { CheckboxGroup } from 'ionbase-ui';",
2965
+ "docs": "components/checkbox-group/index.html.md",
2966
+ "props": {
2967
+ "Orientation": {
2968
+ "prop": "orientation",
2969
+ "values": {
2970
+ "Vertical": "vertical",
2971
+ "Horizontal": "horizontal"
2972
+ }
2973
+ },
2974
+ "State": {
2975
+ "prop": "isInvalid",
2976
+ "when": {
2977
+ "Error": true
2978
+ },
2979
+ "note": "Error recolours the helper and shows errorMessage in its place; pass the error copy as errorMessage, not description. Disabled is isDisabled on the group, which cascades to every Checkbox."
2980
+ },
2981
+ "Label#1501:0": {
2982
+ "prop": "label"
2983
+ },
2984
+ "Helper Text#1501:7": {
2985
+ "prop": "description",
2986
+ "note": "the help text; while State=Error the same slot holds errorMessage"
2987
+ },
2988
+ "Show Helper#1501:14": {
2989
+ "prop": "description",
2990
+ "note": "an absent prop is the switch, so false means omit description"
2991
+ }
2992
+ }
2993
+ },
2844
2994
  "Citation": {
2845
2995
  "figmaComponent": "Citation",
2846
2996
  "figmaNodeId": "1167:247",
@@ -3431,37 +3581,52 @@
3431
3581
  "docs": "components/menu/index.html.md",
3432
3582
  "props": {
3433
3583
  "Type": {
3434
- "ignore": "Single and Multi describe how many items may be selected, which is the caller's state. Menu renders the surface and holds no selection of its own."
3584
+ "prop": "selectionMode",
3585
+ "values": {
3586
+ "Single": "single",
3587
+ "Multi": "multiple"
3588
+ },
3589
+ "note": "selectionMode none — an action menu with no check slot — is not drawn; every Figma menu shows a selection."
3435
3590
  }
3436
3591
  }
3437
3592
  },
3438
3593
  "Menu Item": {
3439
3594
  "figmaComponent": "Menu Item",
3440
- "figmaNodeId": "639:2634",
3441
- "figmaPage": "Side Menu",
3595
+ "figmaNodeId": "82:217",
3596
+ "figmaPage": "Menu",
3442
3597
  "component": "MenuItem",
3443
3598
  "import": "import { MenuItem } from 'ionbase-ui';",
3444
3599
  "docs": "components/menu-item/index.html.md",
3445
3600
  "props": {
3446
- "Status": {
3447
- "prop": "isSelected",
3448
- "when": {
3449
- "Selected": true,
3450
- "Selected Primary": true
3451
- },
3452
- "note": "Hover is CSS. Selected Primary is a second selected styling Figma draws and code does not yet ship."
3453
- },
3454
- "Text#639:12": {
3601
+ "Label#82:0": {
3455
3602
  "prop": "children"
3456
3603
  },
3457
- "Show Icon#639:16": {
3458
- "prop": "icon"
3604
+ "Leading Icon#82:12": {
3605
+ "prop": "icon",
3606
+ "note": "wrap in Icon; omit Icon's label, the row text names it"
3459
3607
  },
3460
- "Select Icon#639:20": {
3461
- "prop": "icon"
3608
+ "Show Leading Icon#82:6": {
3609
+ "prop": "icon",
3610
+ "note": "an absent prop is the switch, so false means omit icon"
3611
+ },
3612
+ "State": {
3613
+ "prop": "isDisabled",
3614
+ "when": {
3615
+ "Disabled": true
3616
+ },
3617
+ "note": "Hover is the highlighted row, which the keyboard and the pointer share. Selected and Selected-hover are the row's key in Menu's selectedKeys, not an item prop. A row that opens a submenu is not drawn: code puts a chevron where the check sits."
3462
3618
  }
3463
3619
  }
3464
3620
  },
3621
+ "Menu Section Title": {
3622
+ "figmaComponent": "Menu Section Title",
3623
+ "figmaNodeId": "1468:271",
3624
+ "figmaPage": "Menu",
3625
+ "component": "MenuSection",
3626
+ "import": "import { MenuSection } from 'ionbase-ui';",
3627
+ "docs": "components/menu-section/index.html.md",
3628
+ "props": {}
3629
+ },
3465
3630
  "Modal": {
3466
3631
  "figmaComponent": "Modal",
3467
3632
  "figmaNodeId": "792:1537",
@@ -3570,6 +3735,42 @@
3570
3735
  }
3571
3736
  }
3572
3737
  },
3738
+ "Page Header": {
3739
+ "figmaComponent": "Page Header",
3740
+ "figmaNodeId": "1473:242",
3741
+ "figmaPage": "Page Header",
3742
+ "component": "PageHeader",
3743
+ "import": "import { PageHeader } from 'ionbase-ui';",
3744
+ "docs": "components/page-header/index.html.md",
3745
+ "props": {
3746
+ "Title#1473:0": {
3747
+ "prop": "title"
3748
+ },
3749
+ "Description#1473:1": {
3750
+ "prop": "description"
3751
+ },
3752
+ "Show Description#1473:4": {
3753
+ "prop": "description",
3754
+ "note": "an absent prop is the switch, so false means omit description"
3755
+ },
3756
+ "Show Breadcrumb#1473:2": {
3757
+ "prop": "breadcrumb",
3758
+ "note": "pass a Breadcrumb; false means omit breadcrumb"
3759
+ },
3760
+ "Show Status#1473:3": {
3761
+ "prop": "status",
3762
+ "note": "a Badge for the record's state; false means omit status"
3763
+ },
3764
+ "Show Actions#1473:5": {
3765
+ "prop": "actions",
3766
+ "note": "Buttons, most important last, and a MenuTrigger with an icon-only Button for the rest; false means omit actions"
3767
+ },
3768
+ "Show Below#1473:6": {
3769
+ "prop": "children",
3770
+ "note": "the row beneath — the page's Tabs or its filters; false means no children"
3771
+ }
3772
+ }
3773
+ },
3573
3774
  "Pagination": {
3574
3775
  "figmaComponent": "Pagination",
3575
3776
  "figmaNodeId": "1291:503",
@@ -3763,6 +3964,35 @@
3763
3964
  }
3764
3965
  }
3765
3966
  },
3967
+ "Search Field": {
3968
+ "figmaComponent": "Search Field",
3969
+ "figmaNodeId": "1498:242",
3970
+ "figmaPage": "Search Field",
3971
+ "component": "SearchField",
3972
+ "import": "import { SearchField } from 'ionbase-ui';",
3973
+ "docs": "components/search-field/index.html.md",
3974
+ "props": {
3975
+ "Size": {
3976
+ "prop": "size",
3977
+ "values": {
3978
+ "Small": "sm",
3979
+ "Medium": "md",
3980
+ "Large": "lg"
3981
+ }
3982
+ },
3983
+ "State": {
3984
+ "prop": "isInvalid",
3985
+ "when": {
3986
+ "Invalid": true
3987
+ },
3988
+ "note": "Hover, Focus and Filled are CSS or content; Disabled is isDisabled and Read-only is isReadOnly — Input's split, because the box is Input's. The clear button Filled shows is not a prop: it appears whenever there is a query."
3989
+ },
3990
+ "Value#80:0": {
3991
+ "prop": "value",
3992
+ "note": "The query. Figma's text is also the placeholder until one is typed — pass that as placeholder, and name the field with aria-label, not the placeholder."
3993
+ }
3994
+ }
3995
+ },
3766
3996
  "Segmented Control": {
3767
3997
  "figmaComponent": "Segmented Control",
3768
3998
  "figmaNodeId": "1390:435",
@@ -4616,25 +4846,28 @@
4616
4846
  "Chart Legend Item": "One entry of Chart Legend — `items[n]` in code, `{ label, series }`. Its Shape follows the legend’s `shape`; Series picks chart/1…8. Internal to the legend.",
4617
4847
  "Chart Tooltip Row": "One entry of Chart Tooltip — `rows[n]` in code, `{ label, value, series }`. Series picks the swatch from chart/1…8, exactly as `series` does. Internal to the tooltip the way Pagination Item is internal to Pagination.",
4618
4848
  "Combobox Menu": "The list Combobox opens. It is not a separate export: the React component renders its own menu, because the two are one control and splitting them would let a caller mount a listbox with no combobox to own it. Drawn separately in Figma because a frame cannot both hug a field and overlay a list on top of it.",
4849
+ "Command Palette Item": "One row of the palette, drawn so Active and Disabled can be seen. There is no code export behind it and there should not be: rows are built from the palette's `commands` array, where the Label, Description, Icon and shortcut are fields of one command — `label`, `description`, `icon`, `shortcut` — and Active is the keyboard's position, not a prop. The same call Combobox Menu gets.",
4619
4850
  "Form Field": "Label, helper text and error wiring are built into Input and Select rather than a separate wrapper — the wrapper is how Figma composes them, not how React does.",
4620
4851
  "Line": "An internal part of the Scroll Progress rail, not a component a caller composes.",
4621
- "Menu Section Title": "No code counterpart yet. It is a heading inside a menu surface; nothing renders it.",
4622
4852
  "Pagination Item": "The cell inside Pagination — a page number, an arrow or the truncation ellipsis. Figma needs it as its own set to hold the Size x State matrix; a caller never places one, so it is internal to Pagination the way Line and Progress are internal to Scroll Progress.",
4623
4853
  "Progress": "As Line — internal to ScrollProgress.",
4624
4854
  "Progress Heading": "As Line — internal to ScrollProgress.",
4625
4855
  "Screen Frame": "The frame FullCard draws around its media slot. The component owns it, so there is nothing for a caller to place.",
4626
- "Table/Cell Text": "TableCell covers Figma's Table Cell and Cell Text together; the two are never used apart in the design. Recorded in TableCell's contract.",
4627
- "Command Palette Item": "One row of the palette, drawn so Active and Disabled can be seen. There is no code export behind it and there should not be: rows are built from the palette's `commands` array, where the Label, Description, Icon and shortcut are fields of one command — `label`, `description`, `icon`, `shortcut` — and Active is the keyboard's position, not a prop. The same call Combobox Menu gets."
4856
+ "Side Menu Item": "A 32-tall side-navigation row on the Side Menu page, which predates Sidebar. It shared the name Menu Item with the real one (82:217) until 25 Sep 2026, and because the export keyed on the name it silently replaced it — the mapping, the gates and the Dev Mode block all pointed here. Sidebar Item is the side-navigation row code ships.",
4857
+ "Side Menu Section Title": "The section heading of the same pre-Sidebar side menu. Menu Section Title (1468:271) is the menu's own, drawn on the Menu page; Sidebar Section is the side navigation's.",
4858
+ "Table/Cell Text": "TableCell covers Figma's Table Cell and Cell Text together; the two are never used apart in the design. Recorded in TableCell's contract."
4628
4859
  },
4629
4860
  "codeUnmapped": {
4630
4861
  "DateRangePicker": "Drawn, but not as a set of its own: its field is Date Picker Type=Range and its calendar is Calendar Mode=Range. A Figma set maps to exactly one code component, and splitting one field into two sets to satisfy that would draw the same box twice. Read Date Picker’s Type note for the handoff.",
4631
4862
  "Icon": "Figma has no Icon component; icons are vector assets dropped into slots. Icon is the React wrapper that gives any of them a size rung and an accessible label, so there is nothing on the Figma side to point at.",
4632
4863
  "LogoMark": "Logo-Ionbase maps to Logo. Figma spells the no-wordmark case as that component's Type axis rather than a separate component; LogoMark is how code spells the same thing.",
4633
- "RadioGroup": "Figma draws Radio only. The group is the thing that owns the selected value, which a static frame cannot express — Figma's Radio State axis is ignored for exactly this reason.",
4864
+ "RadioGroup": "Figma draws Radio only. The group is the thing that owns the selected value, which a static frame cannot express — Figma's Radio State axis is ignored for exactly this reason. Its label, help, error and orientation are the shell drawn as Checkbox Group; the two groups share it in code as well.",
4634
4865
  "ScrollProgress": "Drawn in Figma as its three parts — Line, Progress, Progress Heading — all of which the component owns internally. There is no whole-component frame to map.",
4635
4866
  "Table": "Figma draws Table Row and Table Cell; the table itself is the caller assembling them. Density, the one property Table owns, is mapped on Table Cell.",
4636
4867
  "TableBody": "As TableHead.",
4637
4868
  "TableHead": "As Table — a code-side grouping element. Figma expresses a header row as a Table Row variant, not a separate component.",
4638
- "ToastProvider": "Figma draws Toast, which is mapped. The provider is placement, queueing and the live region — runtime behaviour with nothing to draw."
4869
+ "ToastProvider": "Figma draws Toast, which is mapped. The provider is placement, queueing and the live region — runtime behaviour with nothing to draw.",
4870
+ "MenuTrigger": "Composition, not a drawing: a Button followed by a Menu, both already drawn and mapped. What MenuTrigger adds — open state, positioning, aria-haspopup and aria-expanded, focus on open and return on close — is runtime behaviour a static frame cannot hold, the same reason RadioGroup is here.",
4871
+ "Fieldset": "Drawn as the shell of Checkbox Group: the legend, the helper and the Error recolour are Form Field's type, laid around a set of options. A Fieldset of Inputs is the caller composing Form Fields under that legend, so there is no separate frame to point at."
4639
4872
  }
4640
4873
  }
@@ -8,8 +8,7 @@
8
8
  "summary": "A native checkbox with the system's styling, supporting an indeterminate state.",
9
9
  "useWhen": [
10
10
  "a single on/off choice inside a form that is submitted",
11
- "selecting rows in a Table",
12
- "several independent options where more than one may be picked"
11
+ "selecting rows in a Table"
13
12
  ],
14
13
  "useInstead": [
15
14
  {
@@ -17,6 +16,11 @@
17
16
  "use": "Toggle",
18
17
  "why": "a switch reads as a setting taking effect now; a checkbox reads as a value being collected"
19
18
  },
19
+ {
20
+ "when": "several options answer one question",
21
+ "use": "CheckboxGroup",
22
+ "why": "it announces the question with each option, carries the group's error, and can require at least one"
23
+ },
20
24
  {
21
25
  "when": "the options are mutually exclusive",
22
26
  "use": "RadioGroup"
@@ -148,8 +152,7 @@
148
152
  "sm",
149
153
  "md",
150
154
  "lg"
151
- ],
152
- "default": "md"
155
+ ]
153
156
  },
154
157
  "intent": {
155
158
  "type": "CheckboxIntent | undefined",
@@ -160,8 +163,7 @@
160
163
  "neutral",
161
164
  "danger",
162
165
  "brand"
163
- ],
164
- "default": "brand"
166
+ ]
165
167
  },
166
168
  "isIndeterminate": {
167
169
  "type": "boolean | undefined",