agentic-ds-kit 0.1.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.
- package/AGENTS.md +10 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +21 -0
- package/README.md +38 -0
- package/contracts/accordion.json +38 -0
- package/contracts/alert.json +57 -0
- package/contracts/alertdialog.json +89 -0
- package/contracts/appheader.json +140 -0
- package/contracts/appnav.json +72 -0
- package/contracts/avatar.json +63 -0
- package/contracts/avatargroup.json +83 -0
- package/contracts/badge.json +92 -0
- package/contracts/barchart.json +55 -0
- package/contracts/breadcrumb.json +76 -0
- package/contracts/button.json +120 -0
- package/contracts/buttongroup.json +48 -0
- package/contracts/calendar.json +93 -0
- package/contracts/card.json +123 -0
- package/contracts/carousel.json +98 -0
- package/contracts/cell.json +203 -0
- package/contracts/chat.json +131 -0
- package/contracts/checkbox.json +101 -0
- package/contracts/collapsible.json +66 -0
- package/contracts/command.json +84 -0
- package/contracts/datatable.json +126 -0
- package/contracts/datepicker.json +102 -0
- package/contracts/drawer.json +93 -0
- package/contracts/dropdownmenu.json +190 -0
- package/contracts/empty.json +79 -0
- package/contracts/field.json +49 -0
- package/contracts/fieldset.json +29 -0
- package/contracts/headercell.json +107 -0
- package/contracts/index.json +478 -0
- package/contracts/input.json +119 -0
- package/contracts/inputotp.json +119 -0
- package/contracts/insightcard.json +130 -0
- package/contracts/linechart.json +51 -0
- package/contracts/loadinganimation.json +33 -0
- package/contracts/modal.json +100 -0
- package/contracts/modalcard.json +88 -0
- package/contracts/navigationmenu.json +65 -0
- package/contracts/numbertransition.json +33 -0
- package/contracts/pageheader.json +101 -0
- package/contracts/pagination.json +85 -0
- package/contracts/patterns/activity.json +30 -0
- package/contracts/patterns/assistant-workspace.json +16 -0
- package/contracts/patterns/dashboard.json +12 -0
- package/contracts/patterns/empty-first-run.json +15 -0
- package/contracts/patterns/inbox.json +32 -0
- package/contracts/patterns/invite-members.json +14 -0
- package/contracts/patterns/list-detail.json +13 -0
- package/contracts/patterns/settings-form.json +13 -0
- package/contracts/piechart.json +68 -0
- package/contracts/progress.json +124 -0
- package/contracts/progresssteps.json +91 -0
- package/contracts/radiogroup.json +132 -0
- package/contracts/scoreboard.json +46 -0
- package/contracts/scorecard.json +124 -0
- package/contracts/section.json +97 -0
- package/contracts/select.json +130 -0
- package/contracts/shimmertext.json +33 -0
- package/contracts/sidenav.json +133 -0
- package/contracts/slider.json +81 -0
- package/contracts/spinner.json +52 -0
- package/contracts/switch.json +94 -0
- package/contracts/table.json +92 -0
- package/contracts/tabs.json +90 -0
- package/contracts/textarea.json +54 -0
- package/contracts/thinkinganimation.json +32 -0
- package/contracts/timeline.json +49 -0
- package/contracts/toast.json +104 -0
- package/contracts/tooltip.json +66 -0
- package/lib/tokens.css +637 -0
- package/package.json +60 -0
- package/skills/prototype-from-kit/SKILL.md +29 -0
- package/src/index.ts +71 -0
- package/tokens/tokens.json +725 -0
- package/ui/Accordion/Accordion.module.css +68 -0
- package/ui/Accordion/Accordion.tsx +51 -0
- package/ui/Accordion/Accordion.types.ts +10 -0
- package/ui/Accordion/index.ts +2 -0
- package/ui/Alert/Alert.module.css +62 -0
- package/ui/Alert/Alert.tsx +27 -0
- package/ui/Alert/Alert.types.ts +7 -0
- package/ui/Alert/index.ts +2 -0
- package/ui/AlertDialog/AlertDialog.module.css +71 -0
- package/ui/AlertDialog/AlertDialog.tsx +109 -0
- package/ui/AlertDialog/AlertDialog.types.ts +14 -0
- package/ui/AlertDialog/index.ts +6 -0
- package/ui/AppHeader/AppHeader.module.css +120 -0
- package/ui/AppHeader/AppHeader.tsx +70 -0
- package/ui/AppHeader/AppHeader.types.ts +28 -0
- package/ui/AppHeader/index.ts +2 -0
- package/ui/AppNav/AppNav.module.css +168 -0
- package/ui/AppNav/AppNav.tsx +137 -0
- package/ui/AppNav/AppNav.types.ts +24 -0
- package/ui/AppNav/index.ts +2 -0
- package/ui/Avatar/Avatar.module.css +52 -0
- package/ui/Avatar/Avatar.tsx +62 -0
- package/ui/Avatar/Avatar.types.ts +8 -0
- package/ui/Avatar/index.ts +2 -0
- package/ui/AvatarGroup/AvatarGroup.module.css +49 -0
- package/ui/AvatarGroup/AvatarGroup.tsx +29 -0
- package/ui/AvatarGroup/AvatarGroup.types.ts +16 -0
- package/ui/AvatarGroup/index.ts +2 -0
- package/ui/Badge/Badge.module.css +92 -0
- package/ui/Badge/Badge.tsx +43 -0
- package/ui/Badge/Badge.types.ts +11 -0
- package/ui/Badge/index.ts +2 -0
- package/ui/BarChart/BarChart.module.css +56 -0
- package/ui/BarChart/BarChart.tsx +380 -0
- package/ui/BarChart/BarChart.types.ts +18 -0
- package/ui/BarChart/index.ts +2 -0
- package/ui/Breadcrumb/Breadcrumb.module.css +64 -0
- package/ui/Breadcrumb/Breadcrumb.tsx +89 -0
- package/ui/Breadcrumb/Breadcrumb.types.ts +14 -0
- package/ui/Breadcrumb/index.ts +2 -0
- package/ui/Button/Button.module.css +101 -0
- package/ui/Button/Button.tsx +49 -0
- package/ui/Button/Button.types.ts +18 -0
- package/ui/Button/index.ts +2 -0
- package/ui/Button/lucideName.tsx +188 -0
- package/ui/ButtonGroup/ButtonGroup.module.css +31 -0
- package/ui/ButtonGroup/ButtonGroup.tsx +12 -0
- package/ui/ButtonGroup/ButtonGroup.types.ts +6 -0
- package/ui/ButtonGroup/index.ts +2 -0
- package/ui/Calendar/Calendar.module.css +146 -0
- package/ui/Calendar/Calendar.tsx +296 -0
- package/ui/Calendar/Calendar.types.ts +11 -0
- package/ui/Calendar/index.ts +2 -0
- package/ui/Card/Card.module.css +95 -0
- package/ui/Card/Card.tsx +69 -0
- package/ui/Card/Card.types.ts +23 -0
- package/ui/Card/index.ts +2 -0
- package/ui/Carousel/Carousel.module.css +114 -0
- package/ui/Carousel/Carousel.tsx +152 -0
- package/ui/Carousel/Carousel.types.ts +17 -0
- package/ui/Carousel/index.ts +7 -0
- package/ui/Cell/Cell.module.css +133 -0
- package/ui/Cell/Cell.tsx +300 -0
- package/ui/Cell/Cell.types.ts +69 -0
- package/ui/Cell/index.ts +11 -0
- package/ui/Chat/Chat.module.css +149 -0
- package/ui/Chat/Chat.tsx +175 -0
- package/ui/Chat/Chat.types.ts +39 -0
- package/ui/Chat/index.ts +2 -0
- package/ui/Checkbox/Checkbox.module.css +135 -0
- package/ui/Checkbox/Checkbox.tsx +70 -0
- package/ui/Checkbox/Checkbox.types.ts +15 -0
- package/ui/Checkbox/index.ts +2 -0
- package/ui/Collapsible/Collapsible.module.css +68 -0
- package/ui/Collapsible/Collapsible.tsx +59 -0
- package/ui/Collapsible/Collapsible.types.ts +9 -0
- package/ui/Collapsible/index.ts +2 -0
- package/ui/Command/Command.module.css +138 -0
- package/ui/Command/Command.tsx +152 -0
- package/ui/Command/Command.types.ts +20 -0
- package/ui/Command/index.ts +2 -0
- package/ui/DataTable/DataTable.module.css +211 -0
- package/ui/DataTable/DataTable.tsx +429 -0
- package/ui/DataTable/DataTable.types.ts +35 -0
- package/ui/DataTable/index.ts +8 -0
- package/ui/DatePicker/DatePicker.module.css +44 -0
- package/ui/DatePicker/DatePicker.tsx +123 -0
- package/ui/DatePicker/DatePicker.types.ts +15 -0
- package/ui/DatePicker/index.ts +2 -0
- package/ui/Drawer/Drawer.module.css +204 -0
- package/ui/Drawer/Drawer.tsx +112 -0
- package/ui/Drawer/Drawer.types.ts +14 -0
- package/ui/Drawer/index.ts +2 -0
- package/ui/DropdownMenu/DropdownMenu.module.css +319 -0
- package/ui/DropdownMenu/DropdownMenu.tsx +580 -0
- package/ui/DropdownMenu/DropdownMenu.types.ts +48 -0
- package/ui/DropdownMenu/index.ts +8 -0
- package/ui/Empty/Empty.module.css +68 -0
- package/ui/Empty/Empty.tsx +35 -0
- package/ui/Empty/Empty.types.ts +10 -0
- package/ui/Empty/index.ts +2 -0
- package/ui/Field/Field.module.css +66 -0
- package/ui/Field/Field.tsx +46 -0
- package/ui/Field/Field.types.ts +12 -0
- package/ui/Field/index.ts +2 -0
- package/ui/FieldSet/FieldSet.module.css +30 -0
- package/ui/FieldSet/FieldSet.tsx +14 -0
- package/ui/FieldSet/FieldSet.types.ts +7 -0
- package/ui/FieldSet/index.ts +2 -0
- package/ui/HeaderCell/HeaderCell.module.css +85 -0
- package/ui/HeaderCell/HeaderCell.tsx +71 -0
- package/ui/HeaderCell/HeaderCell.types.ts +18 -0
- package/ui/HeaderCell/index.ts +2 -0
- package/ui/Input/Input.module.css +59 -0
- package/ui/Input/Input.tsx +65 -0
- package/ui/Input/Input.types.ts +22 -0
- package/ui/Input/index.ts +2 -0
- package/ui/InputOTP/InputOTP.module.css +139 -0
- package/ui/InputOTP/InputOTP.tsx +136 -0
- package/ui/InputOTP/InputOTP.types.ts +19 -0
- package/ui/InputOTP/index.ts +2 -0
- package/ui/InsightCard/InsightCard.module.css +166 -0
- package/ui/InsightCard/InsightCard.tsx +90 -0
- package/ui/InsightCard/InsightCard.types.ts +20 -0
- package/ui/InsightCard/index.ts +7 -0
- package/ui/LineChart/LineChart.module.css +93 -0
- package/ui/LineChart/LineChart.tsx +424 -0
- package/ui/LineChart/LineChart.types.ts +19 -0
- package/ui/LineChart/index.ts +2 -0
- package/ui/LoadingAnimation/LoadingAnimation.module.css +66 -0
- package/ui/LoadingAnimation/LoadingAnimation.tsx +41 -0
- package/ui/LoadingAnimation/LoadingAnimation.types.ts +9 -0
- package/ui/LoadingAnimation/index.ts +6 -0
- package/ui/Modal/Modal.module.css +48 -0
- package/ui/Modal/Modal.tsx +114 -0
- package/ui/Modal/Modal.types.ts +15 -0
- package/ui/Modal/index.ts +2 -0
- package/ui/ModalCard/ModalCard.module.css +137 -0
- package/ui/ModalCard/ModalCard.tsx +58 -0
- package/ui/ModalCard/ModalCard.types.ts +15 -0
- package/ui/ModalCard/index.ts +2 -0
- package/ui/NavigationMenu/NavigationMenu.module.css +31 -0
- package/ui/NavigationMenu/NavigationMenu.tsx +57 -0
- package/ui/NavigationMenu/NavigationMenu.types.ts +22 -0
- package/ui/NavigationMenu/index.ts +7 -0
- package/ui/NumberTransition/NumberTransition.module.css +110 -0
- package/ui/NumberTransition/NumberTransition.tsx +78 -0
- package/ui/NumberTransition/NumberTransition.types.ts +9 -0
- package/ui/NumberTransition/index.ts +2 -0
- package/ui/PageHeader/PageHeader.module.css +57 -0
- package/ui/PageHeader/PageHeader.tsx +39 -0
- package/ui/PageHeader/PageHeader.types.ts +12 -0
- package/ui/PageHeader/index.ts +2 -0
- package/ui/Pagination/Pagination.module.css +19 -0
- package/ui/Pagination/Pagination.tsx +147 -0
- package/ui/Pagination/Pagination.types.ts +12 -0
- package/ui/Pagination/index.ts +2 -0
- package/ui/PieChart/PieChart.module.css +116 -0
- package/ui/PieChart/PieChart.tsx +293 -0
- package/ui/PieChart/PieChart.types.ts +22 -0
- package/ui/PieChart/index.ts +2 -0
- package/ui/Progress/Progress.module.css +226 -0
- package/ui/Progress/Progress.tsx +167 -0
- package/ui/Progress/Progress.types.ts +15 -0
- package/ui/Progress/index.ts +8 -0
- package/ui/ProgressSteps/ProgressSteps.module.css +210 -0
- package/ui/ProgressSteps/ProgressSteps.tsx +105 -0
- package/ui/ProgressSteps/ProgressSteps.types.ts +19 -0
- package/ui/ProgressSteps/index.ts +8 -0
- package/ui/RadioGroup/RadioGroup.module.css +284 -0
- package/ui/RadioGroup/RadioGroup.tsx +116 -0
- package/ui/RadioGroup/RadioGroup.types.ts +30 -0
- package/ui/RadioGroup/index.ts +8 -0
- package/ui/Scoreboard/Scoreboard.module.css +53 -0
- package/ui/Scoreboard/Scoreboard.tsx +41 -0
- package/ui/Scoreboard/Scoreboard.types.ts +7 -0
- package/ui/Scoreboard/index.ts +2 -0
- package/ui/Scorecard/Scorecard.module.css +150 -0
- package/ui/Scorecard/Scorecard.tsx +92 -0
- package/ui/Scorecard/Scorecard.types.ts +18 -0
- package/ui/Scorecard/index.ts +2 -0
- package/ui/Section/Section.module.css +104 -0
- package/ui/Section/Section.tsx +75 -0
- package/ui/Section/Section.types.ts +15 -0
- package/ui/Section/index.ts +2 -0
- package/ui/Select/Select.module.css +7 -0
- package/ui/Select/Select.tsx +113 -0
- package/ui/Select/Select.types.ts +26 -0
- package/ui/Select/index.ts +2 -0
- package/ui/ShimmerText/ShimmerText.module.css +46 -0
- package/ui/ShimmerText/ShimmerText.tsx +48 -0
- package/ui/ShimmerText/ShimmerText.types.ts +12 -0
- package/ui/ShimmerText/index.ts +2 -0
- package/ui/SideNav/SideNav.module.css +347 -0
- package/ui/SideNav/SideNav.tsx +222 -0
- package/ui/SideNav/SideNav.types.ts +42 -0
- package/ui/SideNav/index.ts +8 -0
- package/ui/Slider/Slider.module.css +105 -0
- package/ui/Slider/Slider.tsx +187 -0
- package/ui/Slider/Slider.types.ts +11 -0
- package/ui/Slider/index.ts +2 -0
- package/ui/Spinner/Spinner.module.css +58 -0
- package/ui/Spinner/Spinner.tsx +19 -0
- package/ui/Spinner/Spinner.types.ts +6 -0
- package/ui/Spinner/index.ts +2 -0
- package/ui/Switch/Switch.module.css +189 -0
- package/ui/Switch/Switch.tsx +65 -0
- package/ui/Switch/Switch.types.ts +12 -0
- package/ui/Switch/index.ts +2 -0
- package/ui/Table/Table.module.css +132 -0
- package/ui/Table/Table.tsx +108 -0
- package/ui/Table/Table.types.ts +26 -0
- package/ui/Table/index.ts +8 -0
- package/ui/Tabs/Tabs.module.css +162 -0
- package/ui/Tabs/Tabs.tsx +150 -0
- package/ui/Tabs/Tabs.types.ts +21 -0
- package/ui/Tabs/index.ts +2 -0
- package/ui/Textarea/Textarea.module.css +74 -0
- package/ui/Textarea/Textarea.tsx +38 -0
- package/ui/Textarea/Textarea.types.ts +14 -0
- package/ui/Textarea/index.ts +2 -0
- package/ui/ThinkingAnimation/ThinkingAnimation.module.css +75 -0
- package/ui/ThinkingAnimation/ThinkingAnimation.tsx +31 -0
- package/ui/ThinkingAnimation/ThinkingAnimation.types.ts +8 -0
- package/ui/ThinkingAnimation/index.ts +2 -0
- package/ui/Timeline/Timeline.module.css +99 -0
- package/ui/Timeline/Timeline.tsx +47 -0
- package/ui/Timeline/Timeline.types.ts +16 -0
- package/ui/Timeline/index.ts +2 -0
- package/ui/Toast/Toast.module.css +133 -0
- package/ui/Toast/Toast.tsx +89 -0
- package/ui/Toast/Toast.types.ts +17 -0
- package/ui/Toast/index.ts +2 -0
- package/ui/Tooltip/Tooltip.module.css +111 -0
- package/ui/Tooltip/Tooltip.tsx +101 -0
- package/ui/Tooltip/index.ts +2 -0
- package/ui/patterns/ActivityPattern/ActivityFeed.tsx +77 -0
- package/ui/patterns/ActivityPattern/ActivityPattern.tsx +120 -0
- package/ui/patterns/ActivityPattern/ActivityTasks.tsx +86 -0
- package/ui/patterns/ActivityPattern/TaskDrawer.module.css +39 -0
- package/ui/patterns/ActivityPattern/TaskDrawer.tsx +186 -0
- package/ui/patterns/ActivityPattern/index.ts +2 -0
- package/ui/patterns/AssistantWorkspacePattern/AssistantWorkspacePattern.module.css +16 -0
- package/ui/patterns/AssistantWorkspacePattern/AssistantWorkspacePattern.tsx +159 -0
- package/ui/patterns/AssistantWorkspacePattern/index.ts +2 -0
- package/ui/patterns/DashboardPattern/DashboardPattern.tsx +102 -0
- package/ui/patterns/DashboardPattern/index.ts +1 -0
- package/ui/patterns/DashboardPattern/patterns.module.css +6 -0
- package/ui/patterns/EmptyFirstRunPattern/EmptyFirstRunPattern.tsx +125 -0
- package/ui/patterns/EmptyFirstRunPattern/index.ts +2 -0
- package/ui/patterns/InboxPattern/InboxPattern.module.css +40 -0
- package/ui/patterns/InboxPattern/InboxPattern.tsx +192 -0
- package/ui/patterns/InboxPattern/InboxReplyDrawer.tsx +97 -0
- package/ui/patterns/InboxPattern/inbox-data.ts +101 -0
- package/ui/patterns/InboxPattern/index.ts +2 -0
- package/ui/patterns/InviteMembersPattern/InviteMembersPattern.tsx +148 -0
- package/ui/patterns/InviteMembersPattern/index.ts +2 -0
- package/ui/patterns/ListDetailPattern/ListDetailPattern.module.css +34 -0
- package/ui/patterns/ListDetailPattern/ListDetailPattern.tsx +145 -0
- package/ui/patterns/ListDetailPattern/index.ts +2 -0
- package/ui/patterns/SettingsFormPattern/SettingsFormPattern.module.css +12 -0
- package/ui/patterns/SettingsFormPattern/SettingsFormPattern.tsx +89 -0
- package/ui/patterns/SettingsFormPattern/index.ts +3 -0
- package/ui/shared/ChartFrame.module.css +295 -0
- package/ui/shared/ChartFrame.tsx +87 -0
- package/ui/shared/chartMath.ts +228 -0
- package/ui/shared/controls.module.css +48 -0
- package/ui/shared/useChartSize.ts +22 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "badge",
|
|
3
|
+
"status": "stable",
|
|
4
|
+
"intent": "Compact status or category pill.",
|
|
5
|
+
"useWhen": [
|
|
6
|
+
"Status badges on table rows or cards",
|
|
7
|
+
"Filtering labels and category markers"
|
|
8
|
+
],
|
|
9
|
+
"doNotUseWhen": [
|
|
10
|
+
"Primary actions — use Button",
|
|
11
|
+
"Clickable navigation — use AppNav links",
|
|
12
|
+
"People or faces — use Avatar",
|
|
13
|
+
"Long sentences — use body text"
|
|
14
|
+
],
|
|
15
|
+
"props": {
|
|
16
|
+
"children": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"required": true
|
|
19
|
+
},
|
|
20
|
+
"tone": {
|
|
21
|
+
"type": "enum",
|
|
22
|
+
"values": [
|
|
23
|
+
"neutral",
|
|
24
|
+
"brand",
|
|
25
|
+
"success",
|
|
26
|
+
"warning",
|
|
27
|
+
"danger",
|
|
28
|
+
"info"
|
|
29
|
+
],
|
|
30
|
+
"default": "neutral"
|
|
31
|
+
},
|
|
32
|
+
"size": {
|
|
33
|
+
"type": "enum",
|
|
34
|
+
"values": [
|
|
35
|
+
"sm",
|
|
36
|
+
"md",
|
|
37
|
+
"lg"
|
|
38
|
+
],
|
|
39
|
+
"default": "md"
|
|
40
|
+
},
|
|
41
|
+
"removable": {
|
|
42
|
+
"type": "boolean",
|
|
43
|
+
"default": false
|
|
44
|
+
},
|
|
45
|
+
"disabled": {
|
|
46
|
+
"type": "boolean",
|
|
47
|
+
"default": false
|
|
48
|
+
},
|
|
49
|
+
"onRemove": {
|
|
50
|
+
"type": "function",
|
|
51
|
+
"required": false,
|
|
52
|
+
"note": "used when removable"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"tokens": [
|
|
56
|
+
"surface.muted",
|
|
57
|
+
"surface.card",
|
|
58
|
+
"text.secondary",
|
|
59
|
+
"border.faint",
|
|
60
|
+
"border.focus",
|
|
61
|
+
"action.primary",
|
|
62
|
+
"status.success",
|
|
63
|
+
"status.successSubtle",
|
|
64
|
+
"status.successBorder",
|
|
65
|
+
"status.warning",
|
|
66
|
+
"status.warningSubtle",
|
|
67
|
+
"status.warningBorder",
|
|
68
|
+
"status.danger",
|
|
69
|
+
"status.dangerSubtle",
|
|
70
|
+
"status.dangerBorder",
|
|
71
|
+
"status.info",
|
|
72
|
+
"status.infoSubtle",
|
|
73
|
+
"status.infoBorder",
|
|
74
|
+
"radius.controlSm"
|
|
75
|
+
],
|
|
76
|
+
"a11y": {
|
|
77
|
+
"element": "span",
|
|
78
|
+
"requirements": [
|
|
79
|
+
"Text content must be readable",
|
|
80
|
+
"disabled sets aria-disabled and prevents interaction",
|
|
81
|
+
"When removable, the X control is a button with aria-label Remove {children}",
|
|
82
|
+
"If removable and disabled, the remove control does not fire",
|
|
83
|
+
"Remove control shows a focus-visible ring using --border-focus"
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
"doNot": [
|
|
87
|
+
"Do not invent local Badge or Tag",
|
|
88
|
+
"Do not use raw hex",
|
|
89
|
+
"Do not use Badge as a button except the remove control"
|
|
90
|
+
],
|
|
91
|
+
"snippet": "<Badge tone=\"info\" size=\"md\">In progress</Badge>"
|
|
92
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "barchart",
|
|
3
|
+
"status": "stable",
|
|
4
|
+
"intent": "Compare magnitudes across categories with vertical or horizontal bars.",
|
|
5
|
+
"useWhen": [
|
|
6
|
+
"Ranking values at a glance",
|
|
7
|
+
"Grouped comparisons with categories plus series"
|
|
8
|
+
],
|
|
9
|
+
"doNotUseWhen": [
|
|
10
|
+
"Part-to-whole share — use PieChart",
|
|
11
|
+
"Change over time — use LineChart"
|
|
12
|
+
],
|
|
13
|
+
"props": {
|
|
14
|
+
"data": {
|
|
15
|
+
"type": "array",
|
|
16
|
+
"required": false,
|
|
17
|
+
"note": "single-series flat array"
|
|
18
|
+
},
|
|
19
|
+
"categories": { "type": "array", "required": false },
|
|
20
|
+
"series": { "type": "array", "required": false },
|
|
21
|
+
"title": { "type": "string", "required": false },
|
|
22
|
+
"description": { "type": "string", "required": false },
|
|
23
|
+
"orientation": {
|
|
24
|
+
"type": "enum",
|
|
25
|
+
"values": ["vertical", "horizontal"],
|
|
26
|
+
"default": "vertical"
|
|
27
|
+
},
|
|
28
|
+
"showGrid": { "type": "boolean", "default": true },
|
|
29
|
+
"showTable": { "type": "boolean", "default": true },
|
|
30
|
+
"height": { "type": "number", "default": 240 },
|
|
31
|
+
"emptyLabel": { "type": "string", "default": "No data for this range" }
|
|
32
|
+
},
|
|
33
|
+
"tokens": [
|
|
34
|
+
"surface.card",
|
|
35
|
+
"text.primary",
|
|
36
|
+
"text.muted",
|
|
37
|
+
"border.faint",
|
|
38
|
+
"fill.brand"
|
|
39
|
+
],
|
|
40
|
+
"a11y": {
|
|
41
|
+
"element": "figure",
|
|
42
|
+
"requirements": [
|
|
43
|
+
"Title on figure when provided",
|
|
44
|
+
"Hover reads the category",
|
|
45
|
+
"Legend highlight emphasises one series",
|
|
46
|
+
"Bars expose category and value in accessible names",
|
|
47
|
+
"Table view keeps values readable"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
"doNot": [
|
|
51
|
+
"Do not invent chart container cousins",
|
|
52
|
+
"Do not use raw hex"
|
|
53
|
+
],
|
|
54
|
+
"snippet": "<BarChart title=\"Revenue by region\" data={[{ label: 'North', value: 2610 }]} />"
|
|
55
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "breadcrumb",
|
|
3
|
+
"status": "stable",
|
|
4
|
+
"intent": "Path to the current page as a hierarchy of links.",
|
|
5
|
+
"useWhen": [
|
|
6
|
+
"show where this page sits in the app",
|
|
7
|
+
"sit above PageHeader or in a list-detail chrome"
|
|
8
|
+
],
|
|
9
|
+
"doNotUseWhen": [
|
|
10
|
+
"page title block — use PageHeader",
|
|
11
|
+
"sidebar nav — use AppNav",
|
|
12
|
+
"in-page sections — use Tabs or Section"
|
|
13
|
+
],
|
|
14
|
+
"props": {
|
|
15
|
+
"items": {
|
|
16
|
+
"type": "array",
|
|
17
|
+
"required": true,
|
|
18
|
+
"minItems": 2,
|
|
19
|
+
"itemShape": {
|
|
20
|
+
"label": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"required": true
|
|
23
|
+
},
|
|
24
|
+
"href": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"required": false
|
|
27
|
+
},
|
|
28
|
+
"onClick": {
|
|
29
|
+
"type": "function",
|
|
30
|
+
"required": false,
|
|
31
|
+
"note": "In-app select. When set, the crumb is a button. Last item is still the current page and is never a control."
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"note": "Last item is the current page (no href used even if passed). Need at least 2 items."
|
|
35
|
+
},
|
|
36
|
+
"separator": {
|
|
37
|
+
"type": "enum",
|
|
38
|
+
"values": [
|
|
39
|
+
"chevron",
|
|
40
|
+
"slash"
|
|
41
|
+
],
|
|
42
|
+
"default": "chevron",
|
|
43
|
+
"note": "chevron = Lucide ChevronRight. slash = text /."
|
|
44
|
+
},
|
|
45
|
+
"maxItems": {
|
|
46
|
+
"type": "number",
|
|
47
|
+
"required": false,
|
|
48
|
+
"note": "When items.length > maxItems, show the first item, an ellipsis, then the last (maxItems - 1) items. Ellipsis is aria-hidden, not interactive."
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"tokens": [
|
|
52
|
+
"text.primary",
|
|
53
|
+
"text.secondary",
|
|
54
|
+
"text.muted",
|
|
55
|
+
"icon.muted",
|
|
56
|
+
"border.focus",
|
|
57
|
+
"type.size.body-sm"
|
|
58
|
+
],
|
|
59
|
+
"a11y": {
|
|
60
|
+
"element": "nav",
|
|
61
|
+
"requirements": [
|
|
62
|
+
"nav with aria-label=\"Breadcrumb\"",
|
|
63
|
+
"ordered list",
|
|
64
|
+
"current page has aria-current=\"page\" and is not a link",
|
|
65
|
+
"separators aria-hidden",
|
|
66
|
+
"collapsed ellipsis is aria-hidden and not interactive"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
"doNot": [
|
|
70
|
+
"Do not invent local Breadcrumb, BreadcrumbItem, or BreadcrumbLink",
|
|
71
|
+
"Do not use raw hex",
|
|
72
|
+
"Do not turn the current page into a link",
|
|
73
|
+
"Do not put a dropdown on the ellipsis (no DropdownMenu in the kit)"
|
|
74
|
+
],
|
|
75
|
+
"snippet": "<Breadcrumb items={[{ label: \"Home\", href: \"/\" }, { label: \"Components\", href: \"/components\" }, { label: \"Breadcrumb\" }]} />"
|
|
76
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "button",
|
|
3
|
+
"status": "stable",
|
|
4
|
+
"intent": "Clickable action control with a fixed set of sizes and visual variants.",
|
|
5
|
+
"useWhen": [
|
|
6
|
+
"Submitting a form or triggering a primary workflow action",
|
|
7
|
+
"Offering a secondary or tertiary action alongside content",
|
|
8
|
+
"Destructive actions that need explicit danger styling",
|
|
9
|
+
"Toolbar or compact actions with a Lucide icon and a visible label",
|
|
10
|
+
"Icon-only actions when space is tight and ariaLabel names the action"
|
|
11
|
+
],
|
|
12
|
+
"doNotUseWhen": [
|
|
13
|
+
"Navigation that should be a link \u2014 use an anchor styled elsewhere",
|
|
14
|
+
"Icon-only without aria-label \u2014 icon-only must set ariaLabel",
|
|
15
|
+
"More than one primary button in the same view"
|
|
16
|
+
],
|
|
17
|
+
"props": {
|
|
18
|
+
"size": {
|
|
19
|
+
"type": "enum",
|
|
20
|
+
"values": [
|
|
21
|
+
"lg",
|
|
22
|
+
"md",
|
|
23
|
+
"sm"
|
|
24
|
+
],
|
|
25
|
+
"default": "md"
|
|
26
|
+
},
|
|
27
|
+
"variant": {
|
|
28
|
+
"type": "enum",
|
|
29
|
+
"values": [
|
|
30
|
+
"primary",
|
|
31
|
+
"secondary",
|
|
32
|
+
"tertiary",
|
|
33
|
+
"danger"
|
|
34
|
+
],
|
|
35
|
+
"default": "primary"
|
|
36
|
+
},
|
|
37
|
+
"disabled": {
|
|
38
|
+
"type": "boolean",
|
|
39
|
+
"default": false
|
|
40
|
+
},
|
|
41
|
+
"children": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"required": false,
|
|
44
|
+
"note": "required unless icon-only"
|
|
45
|
+
},
|
|
46
|
+
"iconStart": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"required": false,
|
|
49
|
+
"note": "lucide-react export name from the Foundations catalog (Plus, ArrowRight, \u2026)"
|
|
50
|
+
},
|
|
51
|
+
"iconEnd": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"required": false,
|
|
54
|
+
"note": "lucide-react export name from the Foundations catalog (Plus, ArrowRight, \u2026)"
|
|
55
|
+
},
|
|
56
|
+
"ariaLabel": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"required": false,
|
|
59
|
+
"note": "required when children is omitted (icon-only)"
|
|
60
|
+
},
|
|
61
|
+
"onClick": {
|
|
62
|
+
"type": "function",
|
|
63
|
+
"required": false
|
|
64
|
+
},
|
|
65
|
+
"type": {
|
|
66
|
+
"type": "enum",
|
|
67
|
+
"values": [
|
|
68
|
+
"button",
|
|
69
|
+
"submit",
|
|
70
|
+
"reset"
|
|
71
|
+
],
|
|
72
|
+
"default": "button"
|
|
73
|
+
},
|
|
74
|
+
"shape": {
|
|
75
|
+
"type": "enum",
|
|
76
|
+
"values": [
|
|
77
|
+
"default",
|
|
78
|
+
"pill"
|
|
79
|
+
],
|
|
80
|
+
"default": "default",
|
|
81
|
+
"note": "pill uses radius-pill. Drawer footers use pill."
|
|
82
|
+
},
|
|
83
|
+
"block": {
|
|
84
|
+
"type": "boolean",
|
|
85
|
+
"default": false,
|
|
86
|
+
"note": "Full width of the parent."
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"tokens": [
|
|
90
|
+
"text.inverse",
|
|
91
|
+
"text.primary",
|
|
92
|
+
"text.secondary",
|
|
93
|
+
"surface.card",
|
|
94
|
+
"surface.muted",
|
|
95
|
+
"border.faint",
|
|
96
|
+
"action.primary",
|
|
97
|
+
"action.primaryHover",
|
|
98
|
+
"action.danger",
|
|
99
|
+
"action.dangerHover",
|
|
100
|
+
"icon.default",
|
|
101
|
+
"radius.pill"
|
|
102
|
+
],
|
|
103
|
+
"a11y": {
|
|
104
|
+
"element": "button",
|
|
105
|
+
"requirements": [
|
|
106
|
+
"Visible label via children, OR aria-label for icon-only",
|
|
107
|
+
"Decorative icons are aria-hidden",
|
|
108
|
+
"disabled sets aria-disabled and prevents interaction",
|
|
109
|
+
"Focus ring must be visible on keyboard focus"
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
"doNot": [
|
|
113
|
+
"Do not invent local Button variants outside the enum",
|
|
114
|
+
"Do not use raw hex colors in styles",
|
|
115
|
+
"Do not place more than one variant=primary Button in a single view",
|
|
116
|
+
"Do not pass custom SVG or React nodes as icons \u2014 use lucide-react export names on iconStart/iconEnd",
|
|
117
|
+
"Do not ship icon-only without ariaLabel"
|
|
118
|
+
],
|
|
119
|
+
"snippet": "<Button variant=\"primary\" size=\"md\">Save changes</Button>\n<Button variant=\"secondary\" iconStart=\"Plus\">Add</Button>"
|
|
120
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "buttongroup",
|
|
3
|
+
"status": "stable",
|
|
4
|
+
"intent": "Joined row of kit Buttons that share one size and act as one control cluster.",
|
|
5
|
+
"useWhen": [
|
|
6
|
+
"Related sibling actions such as a view switch",
|
|
7
|
+
"Split confirm/cancel pairs that should read as one cluster",
|
|
8
|
+
"A toolbar of same-size Buttons"
|
|
9
|
+
],
|
|
10
|
+
"doNotUseWhen": [
|
|
11
|
+
"Unrelated actions that should stay separate Buttons",
|
|
12
|
+
"Wrapping non-Button controls",
|
|
13
|
+
"Nesting groups",
|
|
14
|
+
"paging a list — use Pagination"
|
|
15
|
+
],
|
|
16
|
+
"props": {
|
|
17
|
+
"children": {
|
|
18
|
+
"type": "node",
|
|
19
|
+
"required": true,
|
|
20
|
+
"note": "only kit Button nodes, same size, 2+"
|
|
21
|
+
},
|
|
22
|
+
"ariaLabel": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"required": false,
|
|
25
|
+
"note": "names the group"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"tokens": [
|
|
29
|
+
"border.faint",
|
|
30
|
+
"radius.md"
|
|
31
|
+
],
|
|
32
|
+
"a11y": {
|
|
33
|
+
"element": "div",
|
|
34
|
+
"requirements": [
|
|
35
|
+
"role=group",
|
|
36
|
+
"optional aria-label names the group",
|
|
37
|
+
"Buttons keep their own names"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"doNot": [
|
|
41
|
+
"Do not invent a local button group / segmented control",
|
|
42
|
+
"Do not mix sizes inside one group",
|
|
43
|
+
"Do not put more than one variant=primary Button in a group (or the view)",
|
|
44
|
+
"Do not wrap Input, Select, or anything except kit Button",
|
|
45
|
+
"Do not use raw hex"
|
|
46
|
+
],
|
|
47
|
+
"snippet": "<ButtonGroup ariaLabel=\"Plan period\"><Button variant=\"secondary\" size=\"md\">Day</Button><Button variant=\"secondary\" size=\"md\">Week</Button><Button variant=\"secondary\" size=\"md\">Month</Button></ButtonGroup>"
|
|
48
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "calendar",
|
|
3
|
+
"status": "stable",
|
|
4
|
+
"intent": "Month grid for picking one date.",
|
|
5
|
+
"useWhen": [
|
|
6
|
+
"Booking, scheduling, or choosing a single calendar day",
|
|
7
|
+
"A date field\u2019s overlay content"
|
|
8
|
+
],
|
|
9
|
+
"doNotUseWhen": [
|
|
10
|
+
"Time-only \u2014 ask first",
|
|
11
|
+
"A typed date field without a grid \u2014 use Input type=date or ask",
|
|
12
|
+
"Range of dates \u2014 not in this contract, ask first",
|
|
13
|
+
"A form date field \u2014 use DatePicker"
|
|
14
|
+
],
|
|
15
|
+
"props": {
|
|
16
|
+
"value": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"required": false,
|
|
19
|
+
"note": "controlled YYYY-MM-DD"
|
|
20
|
+
},
|
|
21
|
+
"defaultValue": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"required": false,
|
|
24
|
+
"note": "uncontrolled YYYY-MM-DD"
|
|
25
|
+
},
|
|
26
|
+
"onValueChange": {
|
|
27
|
+
"type": "function",
|
|
28
|
+
"required": false,
|
|
29
|
+
"note": "(date: string) => void // ISO date"
|
|
30
|
+
},
|
|
31
|
+
"size": {
|
|
32
|
+
"type": "enum",
|
|
33
|
+
"values": [
|
|
34
|
+
"sm",
|
|
35
|
+
"md",
|
|
36
|
+
"lg"
|
|
37
|
+
],
|
|
38
|
+
"default": "md"
|
|
39
|
+
},
|
|
40
|
+
"disabled": {
|
|
41
|
+
"type": "boolean",
|
|
42
|
+
"default": false
|
|
43
|
+
},
|
|
44
|
+
"minDate": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"required": false,
|
|
47
|
+
"note": "YYYY-MM-DD inclusive lower bound"
|
|
48
|
+
},
|
|
49
|
+
"maxDate": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"required": false,
|
|
52
|
+
"note": "YYYY-MM-DD inclusive upper bound"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"tokens": [
|
|
56
|
+
"surface.page",
|
|
57
|
+
"surface.card",
|
|
58
|
+
"surface.muted",
|
|
59
|
+
"text.primary",
|
|
60
|
+
"text.muted",
|
|
61
|
+
"text.inverse",
|
|
62
|
+
"border.faint",
|
|
63
|
+
"border.strong",
|
|
64
|
+
"border.focus",
|
|
65
|
+
"action.primary",
|
|
66
|
+
"action.onPrimary",
|
|
67
|
+
"radius.surfaceMd",
|
|
68
|
+
"radius.controlSm",
|
|
69
|
+
"shadow.sm",
|
|
70
|
+
"opacity.disabled",
|
|
71
|
+
"opacity.muted"
|
|
72
|
+
],
|
|
73
|
+
"a11y": {
|
|
74
|
+
"element": "div[role=grid]",
|
|
75
|
+
"requirements": [
|
|
76
|
+
"role=grid for the month days",
|
|
77
|
+
"Heading names the visible month and uses aria-live polite",
|
|
78
|
+
"Previous and next month controls have aria-labels",
|
|
79
|
+
"Selected day is aria-selected",
|
|
80
|
+
"Today is announced in the day accessible name",
|
|
81
|
+
"Disabled days are not selectable",
|
|
82
|
+
"Keyboard arrows move day focus (roving tabindex)"
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
"doNot": [
|
|
86
|
+
"Do not invent a local calendar",
|
|
87
|
+
"Do not use raw hex",
|
|
88
|
+
"Do not use Calendar as a form field \u2014 use DatePicker",
|
|
89
|
+
"Do not add range selection in this contract",
|
|
90
|
+
"Do not replace nav with custom icon buttons \u2014 use kit Buttons"
|
|
91
|
+
],
|
|
92
|
+
"snippet": "<Calendar size=\"md\" defaultValue=\"2026-08-29\" onValueChange={(date) => setDate(date)} />"
|
|
93
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card",
|
|
3
|
+
"status": "stable",
|
|
4
|
+
"intent": "Framed tile with optional header, body, and footer actions.",
|
|
5
|
+
"useWhen": [
|
|
6
|
+
"Login or settings tiles",
|
|
7
|
+
"Feature summaries",
|
|
8
|
+
"Grouped content that should sit on a card surface"
|
|
9
|
+
],
|
|
10
|
+
"doNotUseWhen": [
|
|
11
|
+
"Page-level grouping — use Section",
|
|
12
|
+
"One KPI — use Scorecard",
|
|
13
|
+
"Dialogs — use Modal or AlertDialog",
|
|
14
|
+
"Recommended insight — use InsightCard"
|
|
15
|
+
],
|
|
16
|
+
"props": {
|
|
17
|
+
"title": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"required": false
|
|
20
|
+
},
|
|
21
|
+
"description": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"required": false
|
|
24
|
+
},
|
|
25
|
+
"children": {
|
|
26
|
+
"type": "slot",
|
|
27
|
+
"required": true,
|
|
28
|
+
"note": "Body. Compose kit Field/Input/Button/Badge/etc, never a local cousin"
|
|
29
|
+
},
|
|
30
|
+
"size": {
|
|
31
|
+
"type": "enum",
|
|
32
|
+
"values": [
|
|
33
|
+
"sm",
|
|
34
|
+
"md"
|
|
35
|
+
],
|
|
36
|
+
"default": "md"
|
|
37
|
+
},
|
|
38
|
+
"headerAction": {
|
|
39
|
+
"type": "object",
|
|
40
|
+
"required": false,
|
|
41
|
+
"note": "Header kit Button (shadcn CardAction). One max. Tertiary or secondary, not a second primary.",
|
|
42
|
+
"label": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"required": true
|
|
45
|
+
},
|
|
46
|
+
"variant": {
|
|
47
|
+
"type": "enum",
|
|
48
|
+
"values": [
|
|
49
|
+
"primary",
|
|
50
|
+
"secondary",
|
|
51
|
+
"tertiary",
|
|
52
|
+
"danger"
|
|
53
|
+
],
|
|
54
|
+
"required": false
|
|
55
|
+
},
|
|
56
|
+
"onClick": {
|
|
57
|
+
"type": "function",
|
|
58
|
+
"required": false
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"actions": {
|
|
62
|
+
"type": "array",
|
|
63
|
+
"required": false,
|
|
64
|
+
"note": "Footer kit Buttons, max 2, still one primary per view",
|
|
65
|
+
"items": {
|
|
66
|
+
"label": {
|
|
67
|
+
"type": "string",
|
|
68
|
+
"required": true
|
|
69
|
+
},
|
|
70
|
+
"variant": {
|
|
71
|
+
"type": "enum",
|
|
72
|
+
"values": [
|
|
73
|
+
"primary",
|
|
74
|
+
"secondary",
|
|
75
|
+
"tertiary",
|
|
76
|
+
"danger"
|
|
77
|
+
],
|
|
78
|
+
"required": false
|
|
79
|
+
},
|
|
80
|
+
"onClick": {
|
|
81
|
+
"type": "function",
|
|
82
|
+
"required": false
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"imageSrc": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"required": false
|
|
89
|
+
},
|
|
90
|
+
"imageAlt": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"required": false,
|
|
93
|
+
"note": "Required when imageSrc is set"
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"tokens": [
|
|
97
|
+
"surface.card",
|
|
98
|
+
"border.faint",
|
|
99
|
+
"radius.surfaceMd",
|
|
100
|
+
"shadow.sm",
|
|
101
|
+
"text.primary",
|
|
102
|
+
"text.secondary",
|
|
103
|
+
"space.6",
|
|
104
|
+
"space.4",
|
|
105
|
+
"space.2"
|
|
106
|
+
],
|
|
107
|
+
"a11y": {
|
|
108
|
+
"element": "article",
|
|
109
|
+
"requirements": [
|
|
110
|
+
"title is heading when set (use useId)",
|
|
111
|
+
"aria-labelledby when title exists"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"doNot": [
|
|
115
|
+
"Do not invent local Card, Panel, or Tile",
|
|
116
|
+
"Do not use raw hex",
|
|
117
|
+
"Do not use Card as a Scorecard-in-disguise — do not put a lone metric here",
|
|
118
|
+
"Footer actions must be kit Buttons",
|
|
119
|
+
"Do not invent CardHeader components",
|
|
120
|
+
"headerAction is tertiary/secondary, not a second primary"
|
|
121
|
+
],
|
|
122
|
+
"snippet": "<Card title=\"Login to your account\" description=\"Enter your email below to login to your account.\" headerAction={{ label: \"Sign Up\", variant: \"tertiary\" }} actions={[{ label: \"Login\", variant: \"primary\" }, { label: \"Login with Google\", variant: \"secondary\" }]}><Field label=\"Name\" htmlFor=\"name\"><Input id=\"name\" placeholder=\"Boris Jovanovic\" /></Field><Field label=\"Email\" htmlFor=\"email\"><Input id=\"email\" type=\"email\" /></Field><Field label=\"Password\" htmlFor=\"password\" hint=\"Forgot your password?\"><Input id=\"password\" type=\"password\" /></Field><Field label=\"Workspace\" htmlFor=\"workspace\"><Input id=\"workspace\" placeholder=\"Studio\" /></Field></Card>"
|
|
123
|
+
}
|