ionbase-ui 0.76.0 → 0.81.1
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.
- package/dist/components/Card.d.ts +61 -0
- package/dist/components/Card.d.ts.map +1 -0
- package/dist/components/Card.js +37 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/CommandPalette.d.ts +76 -0
- package/dist/components/CommandPalette.d.ts.map +1 -0
- package/dist/components/CommandPalette.js +194 -0
- package/dist/components/CommandPalette.js.map +1 -0
- package/dist/components/DateField.d.ts +14 -0
- package/dist/components/DateField.d.ts.map +1 -1
- package/dist/components/DateField.js +1 -1
- package/dist/components/DateField.js.map +1 -1
- package/dist/components/DatePicker.d.ts +1 -1
- package/dist/components/DatePicker.d.ts.map +1 -1
- package/dist/components/DatePicker.js +14 -6
- package/dist/components/DatePicker.js.map +1 -1
- package/dist/components/DateRangePicker.d.ts +1 -1
- package/dist/components/DateRangePicker.d.ts.map +1 -1
- package/dist/components/DateRangePicker.js +14 -6
- package/dist/components/DateRangePicker.js.map +1 -1
- package/dist/components/Kbd.d.ts +45 -0
- package/dist/components/Kbd.d.ts.map +1 -0
- package/dist/components/Kbd.js +45 -0
- package/dist/components/Kbd.js.map +1 -0
- package/dist/components/Table.d.ts +18 -0
- package/dist/components/Table.d.ts.map +1 -1
- package/dist/components/Table.js +14 -3
- package/dist/components/Table.js.map +1 -1
- package/dist/components/TagGroup.d.ts +51 -0
- package/dist/components/TagGroup.d.ts.map +1 -0
- package/dist/components/TagGroup.js +84 -0
- package/dist/components/TagGroup.js.map +1 -0
- package/dist/components/TimeField.d.ts +72 -0
- package/dist/components/TimeField.d.ts.map +1 -0
- package/dist/components/TimeField.js +102 -0
- package/dist/components/TimeField.js.map +1 -0
- package/dist/components/index.d.ts +14 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +6 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/iso-time.d.ts +23 -0
- package/dist/components/iso-time.d.ts.map +1 -0
- package/dist/components/iso-time.js +34 -0
- package/dist/components/iso-time.js.map +1 -0
- package/dist/components/shortcut.d.ts +19 -0
- package/dist/components/shortcut.d.ts.map +1 -0
- package/dist/components/shortcut.js +122 -0
- package/dist/components/shortcut.js.map +1 -0
- package/dist/components/use-table-sort.d.ts +38 -0
- package/dist/components/use-table-sort.d.ts.map +1 -0
- package/dist/components/use-table-sort.js +33 -0
- package/dist/components/use-table-sort.js.map +1 -0
- package/dist/figma-descriptions.json +103 -68
- package/dist/figma-map.json +343 -2
- package/dist/meta/Card.json +153 -0
- package/dist/meta/Checkbox.json +2 -2
- package/dist/meta/CommandPalette.json +178 -0
- package/dist/meta/DatePicker.json +5 -4
- package/dist/meta/DateRangePicker.json +3 -2
- package/dist/meta/Kbd.json +97 -0
- package/dist/meta/Radio.json +2 -2
- package/dist/meta/RadioGroup.json +2 -2
- package/dist/meta/Table.json +4 -1
- package/dist/meta/TableBody.json +3 -0
- package/dist/meta/TableCell.json +49 -5
- package/dist/meta/TableHead.json +3 -0
- package/dist/meta/TableRow.json +3 -0
- package/dist/meta/Tag.json +54 -0
- package/dist/meta/TagGroup.json +211 -0
- package/dist/meta/TimeField.json +224 -0
- package/dist/meta/Toggle.json +2 -2
- package/dist/meta/components.json +1014 -38
- package/dist/meta/contrast.json +1133 -6
- package/dist/meta/index.json +86 -12
- package/dist/meta/patterns/DataTable.json +27 -3
- package/dist/meta/patterns/PageShell.json +15 -2
- package/dist/meta/patterns/index.json +7 -3
- package/dist/styles/agent-activity.css +4 -2
- package/dist/styles/approval-gate.css +4 -3
- package/dist/styles/card.css +75 -0
- package/dist/styles/citation.css +4 -2
- package/dist/styles/command-palette.css +250 -0
- package/dist/styles/confidence-indicator.css +2 -2
- package/dist/styles/index.css +5 -0
- package/dist/styles/kbd.css +47 -0
- package/dist/styles/streaming-text.css +3 -2
- package/dist/styles/table.css +51 -0
- package/dist/styles/tag-group.css +172 -0
- package/dist/styles/time-field.css +31 -0
- package/llms.txt +2 -2
- package/package.json +1 -1
package/dist/figma-map.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"package": "ionbase-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.81.1",
|
|
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.",
|
|
@@ -672,6 +672,31 @@
|
|
|
672
672
|
}
|
|
673
673
|
}
|
|
674
674
|
},
|
|
675
|
+
"1453:805": {
|
|
676
|
+
"figmaComponent": "Time Field",
|
|
677
|
+
"figmaNodeId": "1453:805",
|
|
678
|
+
"figmaPage": "Date Picker",
|
|
679
|
+
"component": "TimeField",
|
|
680
|
+
"import": "import { TimeField } from 'ionbase-ui';",
|
|
681
|
+
"docs": "components/time-field/index.html.md",
|
|
682
|
+
"props": {
|
|
683
|
+
"Size": {
|
|
684
|
+
"prop": "size",
|
|
685
|
+
"values": {
|
|
686
|
+
"Small": "sm",
|
|
687
|
+
"Medium": "md",
|
|
688
|
+
"Large": "lg"
|
|
689
|
+
}
|
|
690
|
+
},
|
|
691
|
+
"State": {
|
|
692
|
+
"prop": "isInvalid",
|
|
693
|
+
"when": {
|
|
694
|
+
"Invalid": true
|
|
695
|
+
},
|
|
696
|
+
"note": "Hover, Focus and Filled are CSS or content; Disabled is isDisabled and Read-only is isReadOnly — the same split as Date Picker, whose box this is. The value text shows the reader’s own format; the prop is 24-hour HH:MM"
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
},
|
|
675
700
|
"1365:2404": {
|
|
676
701
|
"figmaComponent": "Drawer",
|
|
677
702
|
"figmaNodeId": "1365:2404",
|
|
@@ -798,6 +823,49 @@
|
|
|
798
823
|
}
|
|
799
824
|
}
|
|
800
825
|
},
|
|
826
|
+
"1441:294": {
|
|
827
|
+
"figmaComponent": "Card",
|
|
828
|
+
"figmaNodeId": "1441:294",
|
|
829
|
+
"figmaPage": "Card",
|
|
830
|
+
"component": "Card",
|
|
831
|
+
"import": "import { Card } from 'ionbase-ui';",
|
|
832
|
+
"docs": "components/card/index.html.md",
|
|
833
|
+
"props": {
|
|
834
|
+
"Intent": {
|
|
835
|
+
"prop": "intent",
|
|
836
|
+
"values": {
|
|
837
|
+
"Default": "default",
|
|
838
|
+
"Danger": "danger"
|
|
839
|
+
}
|
|
840
|
+
},
|
|
841
|
+
"Title#1441:0": {
|
|
842
|
+
"prop": "title"
|
|
843
|
+
},
|
|
844
|
+
"Show Header#1441:6": {
|
|
845
|
+
"prop": "title",
|
|
846
|
+
"note": "false hides the whole title row. In code, omit title: the card renders a <div> rather than a named <section>, and description goes with it"
|
|
847
|
+
},
|
|
848
|
+
"Description#1441:3": {
|
|
849
|
+
"prop": "description"
|
|
850
|
+
},
|
|
851
|
+
"Show Description#1441:9": {
|
|
852
|
+
"prop": "description",
|
|
853
|
+
"note": "false means description is omitted"
|
|
854
|
+
},
|
|
855
|
+
"Action#1441:15": {
|
|
856
|
+
"prop": "action",
|
|
857
|
+
"note": "a standalone Link in the design; a small Button also fits. One control only"
|
|
858
|
+
},
|
|
859
|
+
"Show Action#1441:12": {
|
|
860
|
+
"prop": "action",
|
|
861
|
+
"note": "false means action is omitted"
|
|
862
|
+
},
|
|
863
|
+
"Show Body#1441:18": {
|
|
864
|
+
"prop": "children",
|
|
865
|
+
"note": "the body frame is a placeholder; in code the card’s children follow the title row"
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
},
|
|
801
869
|
"592:857": {
|
|
802
870
|
"figmaComponent": "Full Card",
|
|
803
871
|
"figmaNodeId": "592:857",
|
|
@@ -1840,6 +1908,73 @@
|
|
|
1840
1908
|
}
|
|
1841
1909
|
}
|
|
1842
1910
|
},
|
|
1911
|
+
"1444:761": {
|
|
1912
|
+
"figmaComponent": "Table Sort Indicator",
|
|
1913
|
+
"figmaNodeId": "1444:761",
|
|
1914
|
+
"figmaPage": "Table",
|
|
1915
|
+
"component": "TableCell",
|
|
1916
|
+
"import": "import { TableCell } from 'ionbase-ui';",
|
|
1917
|
+
"docs": "components/table-cell/index.html.md",
|
|
1918
|
+
"props": {
|
|
1919
|
+
"Direction": {
|
|
1920
|
+
"prop": "sortDirection",
|
|
1921
|
+
"values": {
|
|
1922
|
+
"None": "none",
|
|
1923
|
+
"Ascending": "ascending",
|
|
1924
|
+
"Descending": "descending"
|
|
1925
|
+
},
|
|
1926
|
+
"note": "drawn in a header Cell Text’s Trailing Icon slot; in code the header cell draws it and the label is a button. Set sortDirection on every sortable header and wire onSort, or use useTableSort’s sortProps(column)"
|
|
1927
|
+
}
|
|
1928
|
+
}
|
|
1929
|
+
},
|
|
1930
|
+
"1448:290": {
|
|
1931
|
+
"figmaComponent": "Tag",
|
|
1932
|
+
"figmaNodeId": "1448:290",
|
|
1933
|
+
"figmaPage": "Tag",
|
|
1934
|
+
"component": "Tag",
|
|
1935
|
+
"import": "import { Tag } from 'ionbase-ui';",
|
|
1936
|
+
"docs": "components/tag/index.html.md",
|
|
1937
|
+
"note": "Tag is a collection item and takes no props of its own. Size and removability are set once on the parent TagGroup, so every tag in a group matches.",
|
|
1938
|
+
"example": "<Tag key=\"team:finance\">Team: Finance</Tag>",
|
|
1939
|
+
"props": {
|
|
1940
|
+
"Label#1448:0": {
|
|
1941
|
+
"ignore": "Tag’s label is its children, a collection prop the TypeScript checker cannot see — see Tag’s contract."
|
|
1942
|
+
},
|
|
1943
|
+
"Show Remove#1448:9": {
|
|
1944
|
+
"ignore": "removability is TagGroup’s onRemove: pass it and every tag in the group shows the button, leave it out and none do"
|
|
1945
|
+
},
|
|
1946
|
+
"Size": {
|
|
1947
|
+
"ignore": "set once on the parent TagGroup, not per tag"
|
|
1948
|
+
},
|
|
1949
|
+
"State": {
|
|
1950
|
+
"ignore": "Hover is CSS and Focus is :focus-visible; Disabled is disabledKeys on TagGroup"
|
|
1951
|
+
}
|
|
1952
|
+
}
|
|
1953
|
+
},
|
|
1954
|
+
"1448:333": {
|
|
1955
|
+
"figmaComponent": "Tag Group",
|
|
1956
|
+
"figmaNodeId": "1448:333",
|
|
1957
|
+
"figmaPage": "Tag",
|
|
1958
|
+
"component": "TagGroup",
|
|
1959
|
+
"import": "import { TagGroup } from 'ionbase-ui';",
|
|
1960
|
+
"docs": "components/tag-group/index.html.md",
|
|
1961
|
+
"props": {
|
|
1962
|
+
"Size": {
|
|
1963
|
+
"prop": "size",
|
|
1964
|
+
"values": {
|
|
1965
|
+
"Small": "sm",
|
|
1966
|
+
"Medium": "md"
|
|
1967
|
+
}
|
|
1968
|
+
},
|
|
1969
|
+
"Label#1448:18": {
|
|
1970
|
+
"prop": "label"
|
|
1971
|
+
},
|
|
1972
|
+
"Show Label#1448:21": {
|
|
1973
|
+
"prop": "label",
|
|
1974
|
+
"note": "false means no visible label — pass aria-label instead, the group still needs a name"
|
|
1975
|
+
}
|
|
1976
|
+
}
|
|
1977
|
+
},
|
|
1843
1978
|
"157:126": {
|
|
1844
1979
|
"figmaComponent": "Tabs",
|
|
1845
1980
|
"figmaNodeId": "157:126",
|
|
@@ -2135,6 +2270,41 @@
|
|
|
2135
2270
|
"note": "true draws a third entry in items; the entry count is the length of the array"
|
|
2136
2271
|
}
|
|
2137
2272
|
}
|
|
2273
|
+
},
|
|
2274
|
+
"1458:368": {
|
|
2275
|
+
"figmaComponent": "Command Palette",
|
|
2276
|
+
"figmaNodeId": "1458:368",
|
|
2277
|
+
"figmaPage": "Command Palette",
|
|
2278
|
+
"component": "CommandPalette",
|
|
2279
|
+
"import": "import { CommandPalette } from 'ionbase-ui';",
|
|
2280
|
+
"docs": "components/command-palette/index.html.md",
|
|
2281
|
+
"example": "<CommandPalette\n commands={[\n { id: 'new-agent', label: 'Create agent', section: 'Actions' },\n { id: 'go-runs', label: 'Go to Runs', section: 'Navigation' },\n ]}\n onAction={(id) => run(id)}\n/>",
|
|
2282
|
+
"props": {
|
|
2283
|
+
"Placeholder#1458:0": {
|
|
2284
|
+
"prop": "placeholder"
|
|
2285
|
+
},
|
|
2286
|
+
"Show Footer#1458:3": {
|
|
2287
|
+
"ignore": "the key hints are always rendered and hidden by CSS below 40rem, where there are no arrow keys to hint at — a viewport's answer, not a prop"
|
|
2288
|
+
},
|
|
2289
|
+
"State": {
|
|
2290
|
+
"ignore": "Results and Empty are what the query produces against `commands`; the empty text is `emptyLabel`"
|
|
2291
|
+
}
|
|
2292
|
+
}
|
|
2293
|
+
},
|
|
2294
|
+
"1457:242": {
|
|
2295
|
+
"figmaComponent": "Kbd",
|
|
2296
|
+
"figmaNodeId": "1457:242",
|
|
2297
|
+
"figmaPage": "Command Palette",
|
|
2298
|
+
"component": "Kbd",
|
|
2299
|
+
"import": "import { Kbd } from 'ionbase-ui';",
|
|
2300
|
+
"docs": "components/kbd/index.html.md",
|
|
2301
|
+
"example": "<Kbd shortcut=\"mod+k\" />",
|
|
2302
|
+
"props": {
|
|
2303
|
+
"Key#1457:0": {
|
|
2304
|
+
"prop": "children",
|
|
2305
|
+
"note": "one Figma Kbd is one key. For a shortcut, use `shortcut=\"mod+k\"` on a single Kbd rather than several: it draws each platform's own keys and names them for a screen reader"
|
|
2306
|
+
}
|
|
2307
|
+
}
|
|
2138
2308
|
}
|
|
2139
2309
|
},
|
|
2140
2310
|
"byFigmaName": {
|
|
@@ -2804,6 +2974,31 @@
|
|
|
2804
2974
|
}
|
|
2805
2975
|
}
|
|
2806
2976
|
},
|
|
2977
|
+
"Time Field": {
|
|
2978
|
+
"figmaComponent": "Time Field",
|
|
2979
|
+
"figmaNodeId": "1453:805",
|
|
2980
|
+
"figmaPage": "Date Picker",
|
|
2981
|
+
"component": "TimeField",
|
|
2982
|
+
"import": "import { TimeField } from 'ionbase-ui';",
|
|
2983
|
+
"docs": "components/time-field/index.html.md",
|
|
2984
|
+
"props": {
|
|
2985
|
+
"Size": {
|
|
2986
|
+
"prop": "size",
|
|
2987
|
+
"values": {
|
|
2988
|
+
"Small": "sm",
|
|
2989
|
+
"Medium": "md",
|
|
2990
|
+
"Large": "lg"
|
|
2991
|
+
}
|
|
2992
|
+
},
|
|
2993
|
+
"State": {
|
|
2994
|
+
"prop": "isInvalid",
|
|
2995
|
+
"when": {
|
|
2996
|
+
"Invalid": true
|
|
2997
|
+
},
|
|
2998
|
+
"note": "Hover, Focus and Filled are CSS or content; Disabled is isDisabled and Read-only is isReadOnly — the same split as Date Picker, whose box this is. The value text shows the reader’s own format; the prop is 24-hour HH:MM"
|
|
2999
|
+
}
|
|
3000
|
+
}
|
|
3001
|
+
},
|
|
2807
3002
|
"Drawer": {
|
|
2808
3003
|
"figmaComponent": "Drawer",
|
|
2809
3004
|
"figmaNodeId": "1365:2404",
|
|
@@ -2930,6 +3125,49 @@
|
|
|
2930
3125
|
}
|
|
2931
3126
|
}
|
|
2932
3127
|
},
|
|
3128
|
+
"Card": {
|
|
3129
|
+
"figmaComponent": "Card",
|
|
3130
|
+
"figmaNodeId": "1441:294",
|
|
3131
|
+
"figmaPage": "Card",
|
|
3132
|
+
"component": "Card",
|
|
3133
|
+
"import": "import { Card } from 'ionbase-ui';",
|
|
3134
|
+
"docs": "components/card/index.html.md",
|
|
3135
|
+
"props": {
|
|
3136
|
+
"Intent": {
|
|
3137
|
+
"prop": "intent",
|
|
3138
|
+
"values": {
|
|
3139
|
+
"Default": "default",
|
|
3140
|
+
"Danger": "danger"
|
|
3141
|
+
}
|
|
3142
|
+
},
|
|
3143
|
+
"Title#1441:0": {
|
|
3144
|
+
"prop": "title"
|
|
3145
|
+
},
|
|
3146
|
+
"Show Header#1441:6": {
|
|
3147
|
+
"prop": "title",
|
|
3148
|
+
"note": "false hides the whole title row. In code, omit title: the card renders a <div> rather than a named <section>, and description goes with it"
|
|
3149
|
+
},
|
|
3150
|
+
"Description#1441:3": {
|
|
3151
|
+
"prop": "description"
|
|
3152
|
+
},
|
|
3153
|
+
"Show Description#1441:9": {
|
|
3154
|
+
"prop": "description",
|
|
3155
|
+
"note": "false means description is omitted"
|
|
3156
|
+
},
|
|
3157
|
+
"Action#1441:15": {
|
|
3158
|
+
"prop": "action",
|
|
3159
|
+
"note": "a standalone Link in the design; a small Button also fits. One control only"
|
|
3160
|
+
},
|
|
3161
|
+
"Show Action#1441:12": {
|
|
3162
|
+
"prop": "action",
|
|
3163
|
+
"note": "false means action is omitted"
|
|
3164
|
+
},
|
|
3165
|
+
"Show Body#1441:18": {
|
|
3166
|
+
"prop": "children",
|
|
3167
|
+
"note": "the body frame is a placeholder; in code the card’s children follow the title row"
|
|
3168
|
+
}
|
|
3169
|
+
}
|
|
3170
|
+
},
|
|
2933
3171
|
"Full Card": {
|
|
2934
3172
|
"figmaComponent": "Full Card",
|
|
2935
3173
|
"figmaNodeId": "592:857",
|
|
@@ -3972,6 +4210,73 @@
|
|
|
3972
4210
|
}
|
|
3973
4211
|
}
|
|
3974
4212
|
},
|
|
4213
|
+
"Table Sort Indicator": {
|
|
4214
|
+
"figmaComponent": "Table Sort Indicator",
|
|
4215
|
+
"figmaNodeId": "1444:761",
|
|
4216
|
+
"figmaPage": "Table",
|
|
4217
|
+
"component": "TableCell",
|
|
4218
|
+
"import": "import { TableCell } from 'ionbase-ui';",
|
|
4219
|
+
"docs": "components/table-cell/index.html.md",
|
|
4220
|
+
"props": {
|
|
4221
|
+
"Direction": {
|
|
4222
|
+
"prop": "sortDirection",
|
|
4223
|
+
"values": {
|
|
4224
|
+
"None": "none",
|
|
4225
|
+
"Ascending": "ascending",
|
|
4226
|
+
"Descending": "descending"
|
|
4227
|
+
},
|
|
4228
|
+
"note": "drawn in a header Cell Text’s Trailing Icon slot; in code the header cell draws it and the label is a button. Set sortDirection on every sortable header and wire onSort, or use useTableSort’s sortProps(column)"
|
|
4229
|
+
}
|
|
4230
|
+
}
|
|
4231
|
+
},
|
|
4232
|
+
"Tag": {
|
|
4233
|
+
"figmaComponent": "Tag",
|
|
4234
|
+
"figmaNodeId": "1448:290",
|
|
4235
|
+
"figmaPage": "Tag",
|
|
4236
|
+
"component": "Tag",
|
|
4237
|
+
"import": "import { Tag } from 'ionbase-ui';",
|
|
4238
|
+
"docs": "components/tag/index.html.md",
|
|
4239
|
+
"note": "Tag is a collection item and takes no props of its own. Size and removability are set once on the parent TagGroup, so every tag in a group matches.",
|
|
4240
|
+
"example": "<Tag key=\"team:finance\">Team: Finance</Tag>",
|
|
4241
|
+
"props": {
|
|
4242
|
+
"Label#1448:0": {
|
|
4243
|
+
"ignore": "Tag’s label is its children, a collection prop the TypeScript checker cannot see — see Tag’s contract."
|
|
4244
|
+
},
|
|
4245
|
+
"Show Remove#1448:9": {
|
|
4246
|
+
"ignore": "removability is TagGroup’s onRemove: pass it and every tag in the group shows the button, leave it out and none do"
|
|
4247
|
+
},
|
|
4248
|
+
"Size": {
|
|
4249
|
+
"ignore": "set once on the parent TagGroup, not per tag"
|
|
4250
|
+
},
|
|
4251
|
+
"State": {
|
|
4252
|
+
"ignore": "Hover is CSS and Focus is :focus-visible; Disabled is disabledKeys on TagGroup"
|
|
4253
|
+
}
|
|
4254
|
+
}
|
|
4255
|
+
},
|
|
4256
|
+
"Tag Group": {
|
|
4257
|
+
"figmaComponent": "Tag Group",
|
|
4258
|
+
"figmaNodeId": "1448:333",
|
|
4259
|
+
"figmaPage": "Tag",
|
|
4260
|
+
"component": "TagGroup",
|
|
4261
|
+
"import": "import { TagGroup } from 'ionbase-ui';",
|
|
4262
|
+
"docs": "components/tag-group/index.html.md",
|
|
4263
|
+
"props": {
|
|
4264
|
+
"Size": {
|
|
4265
|
+
"prop": "size",
|
|
4266
|
+
"values": {
|
|
4267
|
+
"Small": "sm",
|
|
4268
|
+
"Medium": "md"
|
|
4269
|
+
}
|
|
4270
|
+
},
|
|
4271
|
+
"Label#1448:18": {
|
|
4272
|
+
"prop": "label"
|
|
4273
|
+
},
|
|
4274
|
+
"Show Label#1448:21": {
|
|
4275
|
+
"prop": "label",
|
|
4276
|
+
"note": "false means no visible label — pass aria-label instead, the group still needs a name"
|
|
4277
|
+
}
|
|
4278
|
+
}
|
|
4279
|
+
},
|
|
3975
4280
|
"Tabs": {
|
|
3976
4281
|
"figmaComponent": "Tabs",
|
|
3977
4282
|
"figmaNodeId": "157:126",
|
|
@@ -4267,6 +4572,41 @@
|
|
|
4267
4572
|
"note": "true draws a third entry in items; the entry count is the length of the array"
|
|
4268
4573
|
}
|
|
4269
4574
|
}
|
|
4575
|
+
},
|
|
4576
|
+
"Command Palette": {
|
|
4577
|
+
"figmaComponent": "Command Palette",
|
|
4578
|
+
"figmaNodeId": "1458:368",
|
|
4579
|
+
"figmaPage": "Command Palette",
|
|
4580
|
+
"component": "CommandPalette",
|
|
4581
|
+
"import": "import { CommandPalette } from 'ionbase-ui';",
|
|
4582
|
+
"docs": "components/command-palette/index.html.md",
|
|
4583
|
+
"example": "<CommandPalette\n commands={[\n { id: 'new-agent', label: 'Create agent', section: 'Actions' },\n { id: 'go-runs', label: 'Go to Runs', section: 'Navigation' },\n ]}\n onAction={(id) => run(id)}\n/>",
|
|
4584
|
+
"props": {
|
|
4585
|
+
"Placeholder#1458:0": {
|
|
4586
|
+
"prop": "placeholder"
|
|
4587
|
+
},
|
|
4588
|
+
"Show Footer#1458:3": {
|
|
4589
|
+
"ignore": "the key hints are always rendered and hidden by CSS below 40rem, where there are no arrow keys to hint at — a viewport's answer, not a prop"
|
|
4590
|
+
},
|
|
4591
|
+
"State": {
|
|
4592
|
+
"ignore": "Results and Empty are what the query produces against `commands`; the empty text is `emptyLabel`"
|
|
4593
|
+
}
|
|
4594
|
+
}
|
|
4595
|
+
},
|
|
4596
|
+
"Kbd": {
|
|
4597
|
+
"figmaComponent": "Kbd",
|
|
4598
|
+
"figmaNodeId": "1457:242",
|
|
4599
|
+
"figmaPage": "Command Palette",
|
|
4600
|
+
"component": "Kbd",
|
|
4601
|
+
"import": "import { Kbd } from 'ionbase-ui';",
|
|
4602
|
+
"docs": "components/kbd/index.html.md",
|
|
4603
|
+
"example": "<Kbd shortcut=\"mod+k\" />",
|
|
4604
|
+
"props": {
|
|
4605
|
+
"Key#1457:0": {
|
|
4606
|
+
"prop": "children",
|
|
4607
|
+
"note": "one Figma Kbd is one key. For a shortcut, use `shortcut=\"mod+k\"` on a single Kbd rather than several: it draws each platform's own keys and names them for a screen reader"
|
|
4608
|
+
}
|
|
4609
|
+
}
|
|
4270
4610
|
}
|
|
4271
4611
|
},
|
|
4272
4612
|
"unmapped": {
|
|
@@ -4283,7 +4623,8 @@
|
|
|
4283
4623
|
"Progress": "As Line — internal to ScrollProgress.",
|
|
4284
4624
|
"Progress Heading": "As Line — internal to ScrollProgress.",
|
|
4285
4625
|
"Screen Frame": "The frame FullCard draws around its media slot. The component owns it, so there is nothing for a caller to place.",
|
|
4286
|
-
"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."
|
|
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."
|
|
4287
4628
|
},
|
|
4288
4629
|
"codeUnmapped": {
|
|
4289
4630
|
"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.",
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Card",
|
|
3
|
+
"source": "src/components/Card.tsx",
|
|
4
|
+
"propsType": "CardProps",
|
|
5
|
+
"description": "Card — a bordered surface that groups one part of a page.\n\nPromoted from the demo app, where the same surface was hand-written as\n`.demo-panel` in nine screens: a settings group, a chart panel, a runs log,\nthe danger zone. For a feature row with media use FullCard; for one\nheadline figure use StatTile.\n\nTHE TITLE DECIDES THE ELEMENT\n\nA titled card is a `<section aria-labelledby>` — a named region, so a\nscreen reader user can jump between cards the way a sighted one scans\nthem. An untitled card is a `<div>`: a `<section>` with no name is not a\nlandmark at all, and pretending otherwise only adds noise.\n\nNo `'use client'`: `useId` resolves on the server, and nothing here is\ninteractive. Interactive parts arrive through `action` and `children`.",
|
|
6
|
+
"import": "import { Card } from 'ionbase-ui';",
|
|
7
|
+
"status": "stable",
|
|
8
|
+
"since": "0.77.0",
|
|
9
|
+
"summary": "A bordered surface that groups one part of a page, with an optional title row. A titled card is a named region; an untitled one is a plain surface.",
|
|
10
|
+
"useWhen": [
|
|
11
|
+
"a page is several distinct groups — settings sections, dashboard panels, a log beside a chart",
|
|
12
|
+
"a group needs a title, a one-line description or a single action like \"All runs\"",
|
|
13
|
+
"a loading placeholder needs the same frame as the content it stands in for"
|
|
14
|
+
],
|
|
15
|
+
"useInstead": [
|
|
16
|
+
{
|
|
17
|
+
"when": "it is a feature row with a headline, text and a media panel",
|
|
18
|
+
"use": "FullCard"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"when": "it is one headline figure and how it moved",
|
|
22
|
+
"use": "StatTile"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"when": "the content is a list of settings, each with a label and a control",
|
|
26
|
+
"use": "SettingRow"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"when": "the message needs the user's attention now rather than a place on the page",
|
|
30
|
+
"use": "Alert"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"composition": {
|
|
34
|
+
"note": "The title row is built from props — `title`, `description`, `action` — so every card lays it out the same way. The body is `children`, spaced 12 apart by the card's grid.",
|
|
35
|
+
"example": "<Card title=\"Recent runs\" action={<Link variant=\"standalone\" href=\"/runs\">All runs</Link>}><Table aria-label=\"Recent runs\">…</Table></Card>"
|
|
36
|
+
},
|
|
37
|
+
"variants": {
|
|
38
|
+
"intent": {
|
|
39
|
+
"default": {
|
|
40
|
+
"use": "every card that is not a danger zone"
|
|
41
|
+
},
|
|
42
|
+
"danger": {
|
|
43
|
+
"use": "a card of irreversible actions — delete the workspace, transfer ownership. The rule turns red; the title must still say what is at stake"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"a11y": {
|
|
48
|
+
"guarantees": [
|
|
49
|
+
"a titled card renders a <section> named by its heading, so it is a landmark a screen reader can jump to",
|
|
50
|
+
"an untitled card renders a <div>, never an unnamed <section>",
|
|
51
|
+
"the danger intent is a border colour only, so the meaning stays in the words"
|
|
52
|
+
],
|
|
53
|
+
"requires": [
|
|
54
|
+
"the right `headingLevel` for where the card sits in the page outline",
|
|
55
|
+
"`isRegion={false}` when the card's only content is a landmark named by the same words, such as a Table labelled by the card's title"
|
|
56
|
+
],
|
|
57
|
+
"notes": [
|
|
58
|
+
"`headingLevel` takes 2-6 and defaults to 2. It is a number rather than a variant because it is an outline decision, not a visual one: the title looks the same at every level.",
|
|
59
|
+
"`description` renders only under a `title`. An untitled card has no title row to put it in."
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"antiPatterns": [
|
|
63
|
+
{
|
|
64
|
+
"dont": "a heading passed in `children` instead of `title`",
|
|
65
|
+
"why": "the card does not become a named region, and the title row loses its layout for `description` and `action`"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"dont": "several buttons in `action`",
|
|
69
|
+
"why": "the title row wraps and the card reads as a toolbar; `action` is for one control — put the rest in the body"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"dont": "relying on `intent=\"danger\"` alone to warn",
|
|
73
|
+
"why": "a red border is not read aloud and is easy to miss; the title and the button labels must say what cannot be undone"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"dont": "cards nested inside cards",
|
|
77
|
+
"why": "border inside border reads as a mistake; group the inner content with a heading or a Divider instead"
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"stylesheet": "src/styles/card.css",
|
|
81
|
+
"tokens": [
|
|
82
|
+
"--border-error-subtle",
|
|
83
|
+
"--border-subtle",
|
|
84
|
+
"--border-width-default",
|
|
85
|
+
"--font-family-sans",
|
|
86
|
+
"--font-weight-semibold",
|
|
87
|
+
"--radius-lg",
|
|
88
|
+
"--spacing-12",
|
|
89
|
+
"--spacing-16",
|
|
90
|
+
"--spacing-2",
|
|
91
|
+
"--spacing-8",
|
|
92
|
+
"--surface-default",
|
|
93
|
+
"--text-default",
|
|
94
|
+
"--text-secondary",
|
|
95
|
+
"--type-body-sm",
|
|
96
|
+
"--type-body-sm-line-height",
|
|
97
|
+
"--type-h6",
|
|
98
|
+
"--type-h6-line-height"
|
|
99
|
+
],
|
|
100
|
+
"props": {
|
|
101
|
+
"title": {
|
|
102
|
+
"type": "React.ReactNode",
|
|
103
|
+
"required": false,
|
|
104
|
+
"origin": "own",
|
|
105
|
+
"description": "The card's heading. With a title the card is a `<section>` named by it;\nwithout one it is a plain surface — a `<div>`, for skeletons and for\ncontent that already has its own heading."
|
|
106
|
+
},
|
|
107
|
+
"headingLevel": {
|
|
108
|
+
"type": "CardHeadingLevel | undefined",
|
|
109
|
+
"required": false,
|
|
110
|
+
"origin": "own",
|
|
111
|
+
"description": "Heading element for the title. Defaults to `h2`: most cards are the\nfirst level of section under the page's `h1`. The outline is the page's\ndecision, so it is a prop, not a constant."
|
|
112
|
+
},
|
|
113
|
+
"description": {
|
|
114
|
+
"type": "React.ReactNode",
|
|
115
|
+
"required": false,
|
|
116
|
+
"origin": "own",
|
|
117
|
+
"description": "One line under the title — what the card holds or when changes apply."
|
|
118
|
+
},
|
|
119
|
+
"action": {
|
|
120
|
+
"type": "React.ReactNode",
|
|
121
|
+
"required": false,
|
|
122
|
+
"origin": "own",
|
|
123
|
+
"description": "One control at the end of the title row: a standalone Link (\"All runs\")\nor a small Button. More than one belongs in the body."
|
|
124
|
+
},
|
|
125
|
+
"intent": {
|
|
126
|
+
"type": "CardIntent | undefined",
|
|
127
|
+
"required": false,
|
|
128
|
+
"origin": "own",
|
|
129
|
+
"description": "`danger` for a card of irreversible actions — the danger zone.",
|
|
130
|
+
"values": [
|
|
131
|
+
"default",
|
|
132
|
+
"danger"
|
|
133
|
+
]
|
|
134
|
+
},
|
|
135
|
+
"isRegion": {
|
|
136
|
+
"type": "boolean | undefined",
|
|
137
|
+
"required": false,
|
|
138
|
+
"origin": "own",
|
|
139
|
+
"description": "Whether a titled card is a landmark. Defaults to `true`. Set `false`\nwhen the card's only content is itself a landmark named by the same\nwords — a Table's scroll region — or the page gets two regions with one\nname. The heading still renders; only the `<section>` becomes a `<div>`."
|
|
140
|
+
},
|
|
141
|
+
"children": {
|
|
142
|
+
"type": "React.ReactNode",
|
|
143
|
+
"required": false,
|
|
144
|
+
"origin": "own"
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
"propCounts": {
|
|
148
|
+
"own": 7,
|
|
149
|
+
"aria": 0,
|
|
150
|
+
"dom": 276,
|
|
151
|
+
"other": 0
|
|
152
|
+
}
|
|
153
|
+
}
|