@twoux/ui 0.0.0-stage → 0.1.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.
Files changed (325) hide show
  1. package/LICENSE.md +61 -0
  2. package/LICENSES/Apache-2.0.txt +202 -0
  3. package/NOTICE.md +64 -0
  4. package/README.md +211 -2
  5. package/SHADCN-DIFF.md +228 -0
  6. package/agent/AGENTS.md +358 -0
  7. package/agent/docs-md/accessibility.md +49 -0
  8. package/agent/docs-md/action-catalogue.md +81 -0
  9. package/agent/docs-md/actions.md +74 -0
  10. package/agent/docs-md/agent-activity-log.md +70 -0
  11. package/agent/docs-md/agent-permissions.md +82 -0
  12. package/agent/docs-md/agent-run.md +90 -0
  13. package/agent/docs-md/agents-on-behalf.md +74 -0
  14. package/agent/docs-md/ai-column.md +85 -0
  15. package/agent/docs-md/ai-origin-label.md +70 -0
  16. package/agent/docs-md/announcing-features.md +73 -0
  17. package/agent/docs-md/answer-actions.md +81 -0
  18. package/agent/docs-md/app-shell.md +114 -0
  19. package/agent/docs-md/artifact-card.md +89 -0
  20. package/agent/docs-md/ask-on-screen.md +72 -0
  21. package/agent/docs-md/assistant-page.md +100 -0
  22. package/agent/docs-md/assistant-panel.md +142 -0
  23. package/agent/docs-md/avatar.md +82 -0
  24. package/agent/docs-md/banner.md +106 -0
  25. package/agent/docs-md/board.md +163 -0
  26. package/agent/docs-md/breadcrumb.md +89 -0
  27. package/agent/docs-md/breakdown-table.md +97 -0
  28. package/agent/docs-md/bulk-action-bar.md +112 -0
  29. package/agent/docs-md/button.md +293 -0
  30. package/agent/docs-md/card.md +115 -0
  31. package/agent/docs-md/change-list.md +99 -0
  32. package/agent/docs-md/change-request.md +166 -0
  33. package/agent/docs-md/chart-area.md +87 -0
  34. package/agent/docs-md/chart-bar.md +100 -0
  35. package/agent/docs-md/chart-box-plot.md +88 -0
  36. package/agent/docs-md/chart-bullet.md +89 -0
  37. package/agent/docs-md/chart-candlestick.md +112 -0
  38. package/agent/docs-md/chart-card-line.md +120 -0
  39. package/agent/docs-md/chart-donut.md +90 -0
  40. package/agent/docs-md/chart-drill-down.md +72 -0
  41. package/agent/docs-md/chart-funnel.md +71 -0
  42. package/agent/docs-md/chart-heatmap.md +76 -0
  43. package/agent/docs-md/chart-histogram.md +81 -0
  44. package/agent/docs-md/chart-map.md +165 -0
  45. package/agent/docs-md/chart-mixed.md +88 -0
  46. package/agent/docs-md/chart-price.md +92 -0
  47. package/agent/docs-md/chart-radial-bars.md +109 -0
  48. package/agent/docs-md/chart-radial-lines.md +111 -0
  49. package/agent/docs-md/chart-sankey.md +104 -0
  50. package/agent/docs-md/chart-scatter.md +87 -0
  51. package/agent/docs-md/chart-share-bar.md +89 -0
  52. package/agent/docs-md/chart-treemap.md +98 -0
  53. package/agent/docs-md/chart-waterfall.md +93 -0
  54. package/agent/docs-md/checkbox.md +131 -0
  55. package/agent/docs-md/choosing-selection-control.md +71 -0
  56. package/agent/docs-md/citations-sources.md +79 -0
  57. package/agent/docs-md/citing-sources.md +63 -0
  58. package/agent/docs-md/clarify-before-acting.md +69 -0
  59. package/agent/docs-md/clarifying-question.md +92 -0
  60. package/agent/docs-md/code-block.md +174 -0
  61. package/agent/docs-md/colours.md +87 -0
  62. package/agent/docs-md/columns-menu.md +140 -0
  63. package/agent/docs-md/combobox.md +161 -0
  64. package/agent/docs-md/command-palette.md +126 -0
  65. package/agent/docs-md/confidence-note.md +87 -0
  66. package/agent/docs-md/configurable-dashboard.md +76 -0
  67. package/agent/docs-md/confirmation-dialog.md +93 -0
  68. package/agent/docs-md/connected-tools.md +80 -0
  69. package/agent/docs-md/connector-picker.md +127 -0
  70. package/agent/docs-md/consistency.md +53 -0
  71. package/agent/docs-md/content-density.md +61 -0
  72. package/agent/docs-md/conversation-history.md +78 -0
  73. package/agent/docs-md/create-record.md +80 -0
  74. package/agent/docs-md/csv-import.md +88 -0
  75. package/agent/docs-md/dashboard-items.md +78 -0
  76. package/agent/docs-md/data-export.md +61 -0
  77. package/agent/docs-md/data-grid.md +137 -0
  78. package/agent/docs-md/data-vis-colours.md +76 -0
  79. package/agent/docs-md/data-visualisation.md +76 -0
  80. package/agent/docs-md/date-picker.md +178 -0
  81. package/agent/docs-md/delete-record.md +75 -0
  82. package/agent/docs-md/dense-table.md +495 -0
  83. package/agent/docs-md/design-tokens.md +53 -0
  84. package/agent/docs-md/disabled-read-only.md +75 -0
  85. package/agent/docs-md/drag-and-drop.md +74 -0
  86. package/agent/docs-md/dropdown-menu.md +137 -0
  87. package/agent/docs-md/edit-record.md +73 -0
  88. package/agent/docs-md/empty-loading-error.md +78 -0
  89. package/agent/docs-md/empty-state.md +128 -0
  90. package/agent/docs-md/error-messages.md +75 -0
  91. package/agent/docs-md/error-state.md +123 -0
  92. package/agent/docs-md/export-menu.md +86 -0
  93. package/agent/docs-md/feedback-prompt.md +88 -0
  94. package/agent/docs-md/field-mapping.md +78 -0
  95. package/agent/docs-md/file-drop.md +110 -0
  96. package/agent/docs-md/filter-bar.md +138 -0
  97. package/agent/docs-md/filter-panel.md +103 -0
  98. package/agent/docs-md/filtering-search.md +79 -0
  99. package/agent/docs-md/follow-ups-starters.md +79 -0
  100. package/agent/docs-md/form-validation.md +95 -0
  101. package/agent/docs-md/generated-columns.md +65 -0
  102. package/agent/docs-md/generated-drafts-files.md +71 -0
  103. package/agent/docs-md/grouped-list.md +89 -0
  104. package/agent/docs-md/guide-cue.md +170 -0
  105. package/agent/docs-md/help-panel.md +103 -0
  106. package/agent/docs-md/help-system.md +74 -0
  107. package/agent/docs-md/iconography.md +49 -0
  108. package/agent/docs-md/inbox.md +108 -0
  109. package/agent/docs-md/inline-editing-validation.md +80 -0
  110. package/agent/docs-md/inline-input-in-answer.md +70 -0
  111. package/agent/docs-md/items-palette.md +116 -0
  112. package/agent/docs-md/keyboard-model.md +47 -0
  113. package/agent/docs-md/keyboard-navigation.md +68 -0
  114. package/agent/docs-md/keyboard-shortcut-hint.md +87 -0
  115. package/agent/docs-md/keyboard-shortcut-sheet.md +90 -0
  116. package/agent/docs-md/labelling-ai-output.md +66 -0
  117. package/agent/docs-md/layout.md +47 -0
  118. package/agent/docs-md/list-table.md +254 -0
  119. package/agent/docs-md/loading-skeleton.md +91 -0
  120. package/agent/docs-md/managing-agents.md +71 -0
  121. package/agent/docs-md/message-composer.md +105 -0
  122. package/agent/docs-md/migrating.md +49 -0
  123. package/agent/docs-md/motion.md +93 -0
  124. package/agent/docs-md/navigation.md +76 -0
  125. package/agent/docs-md/notification-channels.md +65 -0
  126. package/agent/docs-md/notifications-decision.md +100 -0
  127. package/agent/docs-md/onboarding-step.md +114 -0
  128. package/agent/docs-md/order-book.md +108 -0
  129. package/agent/docs-md/page-header.md +96 -0
  130. package/agent/docs-md/pagination.md +88 -0
  131. package/agent/docs-md/pane-layout.md +105 -0
  132. package/agent/docs-md/period-comparison.md +66 -0
  133. package/agent/docs-md/plan-card.md +120 -0
  134. package/agent/docs-md/popover-rules.md +88 -0
  135. package/agent/docs-md/prompt-editor.md +90 -0
  136. package/agent/docs-md/propose-apply.md +65 -0
  137. package/agent/docs-md/provider-logo.md +97 -0
  138. package/agent/docs-md/radio.md +83 -0
  139. package/agent/docs-md/ranked-list.md +102 -0
  140. package/agent/docs-md/reasoning-progress.md +72 -0
  141. package/agent/docs-md/record-detail.md +71 -0
  142. package/agent/docs-md/regenerating-answers.md +70 -0
  143. package/agent/docs-md/run-status-bar.md +94 -0
  144. package/agent/docs-md/saved-tasks-schedules.md +63 -0
  145. package/agent/docs-md/saved-views.md +149 -0
  146. package/agent/docs-md/saving-views.md +68 -0
  147. package/agent/docs-md/scheduler.md +258 -0
  148. package/agent/docs-md/secondary-panels.md +72 -0
  149. package/agent/docs-md/segmented-control.md +88 -0
  150. package/agent/docs-md/selection-bulk-actions.md +70 -0
  151. package/agent/docs-md/separator.md +75 -0
  152. package/agent/docs-md/setup-checklist.md +92 -0
  153. package/agent/docs-md/shape-elevation.md +55 -0
  154. package/agent/docs-md/sheet-grid.md +211 -0
  155. package/agent/docs-md/side-panel.md +134 -0
  156. package/agent/docs-md/sign-in.md +114 -0
  157. package/agent/docs-md/spacing.md +55 -0
  158. package/agent/docs-md/split-button.md +100 -0
  159. package/agent/docs-md/stat-compare.md +82 -0
  160. package/agent/docs-md/static-dashboard.md +75 -0
  161. package/agent/docs-md/status-badge.md +140 -0
  162. package/agent/docs-md/step-card.md +75 -0
  163. package/agent/docs-md/stepper.md +92 -0
  164. package/agent/docs-md/suggested-changes.md +91 -0
  165. package/agent/docs-md/switch.md +78 -0
  166. package/agent/docs-md/table-settings.md +81 -0
  167. package/agent/docs-md/tabs.md +85 -0
  168. package/agent/docs-md/tag-input.md +108 -0
  169. package/agent/docs-md/tag.md +79 -0
  170. package/agent/docs-md/task-builder.md +87 -0
  171. package/agent/docs-md/team-instructions.md +72 -0
  172. package/agent/docs-md/templates-gallery.md +85 -0
  173. package/agent/docs-md/text-input.md +160 -0
  174. package/agent/docs-md/thinking-steps.md +89 -0
  175. package/agent/docs-md/timeline.md +189 -0
  176. package/agent/docs-md/timestamp.md +84 -0
  177. package/agent/docs-md/timestamps.md +70 -0
  178. package/agent/docs-md/toast.md +117 -0
  179. package/agent/docs-md/tooltip.md +90 -0
  180. package/agent/docs-md/typography.md +62 -0
  181. package/agent/docs-md/undo-destructive.md +66 -0
  182. package/agent/docs-md/unsaved-changes.md +71 -0
  183. package/agent/docs-md/usage-meter.md +80 -0
  184. package/agent/docs-md/user-feedback.md +71 -0
  185. package/agent/docs-md/voice-and-tone.md +60 -0
  186. package/agent/docs-md/why-choice.md +93 -0
  187. package/agent/docs-md/workspace-onboarding.md +74 -0
  188. package/agent/docs-md/writing.md +48 -0
  189. package/agent/llms-full.txt +18369 -0
  190. package/agent/llms.txt +198 -0
  191. package/agent/skills/twoux-audit/SKILL.md +49 -0
  192. package/agent/skills/twoux-build/SKILL.md +39 -0
  193. package/agent/skills/twoux-design/SKILL.md +54 -0
  194. package/agent/skills/twoux-write/SKILL.md +32 -0
  195. package/bin/check.mjs +123 -0
  196. package/bin/docs.mjs +24 -0
  197. package/bin/guard.mjs +27 -0
  198. package/bin/init.mjs +113 -0
  199. package/bin/knowledge.mjs +87 -0
  200. package/bin/mcp.mjs +116 -0
  201. package/bin/theme.mjs +168 -0
  202. package/bin/twoux.mjs +25 -0
  203. package/package.json +80 -3
  204. package/registry/jobs.json +1028 -0
  205. package/registry/palette.json +770 -0
  206. package/registry/rules.json +913 -0
  207. package/src/components/agent-review.tsx +364 -0
  208. package/src/components/ai-basics.tsx +212 -0
  209. package/src/components/ai-work.tsx +304 -0
  210. package/src/components/ai.tsx +227 -0
  211. package/src/components/alert-dialog.tsx +203 -0
  212. package/src/components/alert.tsx +86 -0
  213. package/src/components/avatar.tsx +114 -0
  214. package/src/components/badge.tsx +59 -0
  215. package/src/components/board.tsx +397 -0
  216. package/src/components/breadcrumb.tsx +114 -0
  217. package/src/components/button-group.tsx +90 -0
  218. package/src/components/button.tsx +109 -0
  219. package/src/components/calendar.tsx +247 -0
  220. package/src/components/card.tsx +102 -0
  221. package/src/components/chart-map.tsx +336 -0
  222. package/src/components/charts-more.tsx +1331 -0
  223. package/src/components/charts-radial.tsx +328 -0
  224. package/src/components/charts.tsx +390 -0
  225. package/src/components/checkbox.tsx +40 -0
  226. package/src/components/code.tsx +139 -0
  227. package/src/components/collapsible.tsx +37 -0
  228. package/src/components/combobox.tsx +339 -0
  229. package/src/components/command-extras.tsx +11 -0
  230. package/src/components/command.tsx +196 -0
  231. package/src/components/data-grid.tsx +213 -0
  232. package/src/components/data-table.tsx +334 -0
  233. package/src/components/data-views.tsx +740 -0
  234. package/src/components/date-picker.tsx +686 -0
  235. package/src/components/dense-table.tsx +207 -0
  236. package/src/components/dialog.tsx +162 -0
  237. package/src/components/dropdown-menu.tsx +264 -0
  238. package/src/components/empty.tsx +114 -0
  239. package/src/components/feedback-prompt.tsx +80 -0
  240. package/src/components/field.tsx +254 -0
  241. package/src/components/fields.tsx +112 -0
  242. package/src/components/flow.tsx +840 -0
  243. package/src/components/guide-cue.tsx +273 -0
  244. package/src/components/inbox.tsx +113 -0
  245. package/src/components/input-group.tsx +176 -0
  246. package/src/components/input.tsx +26 -0
  247. package/src/components/kbd.tsx +34 -0
  248. package/src/components/label.tsx +27 -0
  249. package/src/components/labels.tsx +176 -0
  250. package/src/components/motion.tsx +136 -0
  251. package/src/components/onboarding.tsx +454 -0
  252. package/src/components/order-book.tsx +185 -0
  253. package/src/components/pane-layout.tsx +417 -0
  254. package/src/components/popover.tsx +96 -0
  255. package/src/components/provider-logos.data.ts +49 -0
  256. package/src/components/radio-group.tsx +52 -0
  257. package/src/components/scheduler.tsx +997 -0
  258. package/src/components/segmented-control.tsx +28 -0
  259. package/src/components/select.tsx +195 -0
  260. package/src/components/separator.tsx +31 -0
  261. package/src/components/sheet.tsx +148 -0
  262. package/src/components/shell.tsx +426 -0
  263. package/src/components/shortcut-sheet.tsx +83 -0
  264. package/src/components/skeleton.tsx +18 -0
  265. package/src/components/sonner.tsx +107 -0
  266. package/src/components/spinner.tsx +13 -0
  267. package/src/components/split-button.tsx +58 -0
  268. package/src/components/stepper.tsx +78 -0
  269. package/src/components/switch.tsx +43 -0
  270. package/src/components/table.tsx +126 -0
  271. package/src/components/tabs.tsx +118 -0
  272. package/src/components/tag-input.tsx +253 -0
  273. package/src/components/textarea.tsx +21 -0
  274. package/src/components/theme.tsx +80 -0
  275. package/src/components/timeline.tsx +408 -0
  276. package/src/components/toggle-group.tsx +87 -0
  277. package/src/components/toggle.tsx +54 -0
  278. package/src/components/tooltip.tsx +65 -0
  279. package/src/components/workspace-actions.tsx +294 -0
  280. package/src/components/workspace-import.tsx +465 -0
  281. package/src/components/workspace.tsx +1884 -0
  282. package/src/index.ts +80 -0
  283. package/src/lib/active-indicator.tsx +53 -0
  284. package/src/lib/chart-kit.tsx +72 -0
  285. package/src/lib/cn.ts +6 -0
  286. package/src/lib/shortcuts.tsx +61 -0
  287. package/src/lib/workspace.tsx +10 -0
  288. package/src/shadcn/alert-dialog.tsx +196 -0
  289. package/src/shadcn/alert.tsx +65 -0
  290. package/src/shadcn/avatar.tsx +108 -0
  291. package/src/shadcn/badge.tsx +47 -0
  292. package/src/shadcn/breadcrumb.tsx +108 -0
  293. package/src/shadcn/button-group.tsx +83 -0
  294. package/src/shadcn/button.tsx +63 -0
  295. package/src/shadcn/calendar.tsx +220 -0
  296. package/src/shadcn/card.tsx +91 -0
  297. package/src/shadcn/checkbox.tsx +31 -0
  298. package/src/shadcn/collapsible.tsx +33 -0
  299. package/src/shadcn/command.tsx +184 -0
  300. package/src/shadcn/dialog.tsx +158 -0
  301. package/src/shadcn/dropdown-menu.tsx +256 -0
  302. package/src/shadcn/empty.tsx +103 -0
  303. package/src/shadcn/field.tsx +248 -0
  304. package/src/shadcn/input-group.tsx +170 -0
  305. package/src/shadcn/input.tsx +20 -0
  306. package/src/shadcn/kbd.tsx +28 -0
  307. package/src/shadcn/label.tsx +23 -0
  308. package/src/shadcn/popover.tsx +88 -0
  309. package/src/shadcn/radio-group.tsx +44 -0
  310. package/src/shadcn/select.tsx +189 -0
  311. package/src/shadcn/separator.tsx +27 -0
  312. package/src/shadcn/sheet.tsx +142 -0
  313. package/src/shadcn/skeleton.tsx +13 -0
  314. package/src/shadcn/sonner.tsx +40 -0
  315. package/src/shadcn/switch.tsx +34 -0
  316. package/src/shadcn/table.tsx +115 -0
  317. package/src/shadcn/tabs.tsx +90 -0
  318. package/src/shadcn/textarea.tsx +17 -0
  319. package/src/shadcn/toggle-group.tsx +83 -0
  320. package/src/shadcn/toggle.tsx +46 -0
  321. package/src/shadcn/tooltip.tsx +56 -0
  322. package/src/styles/palette.css +127 -0
  323. package/src/styles/theme.css +35 -0
  324. package/src/styles/twoux.css +236 -0
  325. package/theme.json +14 -0
@@ -0,0 +1,1028 @@
1
+ {
2
+ "$comment": "Source of truth: for each job, the ONE component or pattern to use, and the ones that are wrong for it. Read by the docs site, AGENTS.md, llms.txt and the lint checker. Edit here only.",
3
+ "jobs": [
4
+ {
5
+ "job": "Run the main action of a page or panel",
6
+ "use": "button",
7
+ "how": "`variant=\"default\"`, once per view",
8
+ "notThis": [
9
+ "a second primary button",
10
+ "a link styled as a button"
11
+ ]
12
+ },
13
+ {
14
+ "job": "Run any other action",
15
+ "use": "button",
16
+ "how": "`variant=\"outline\"`, or `\"ghost\"` in toolbars, rows and bars",
17
+ "notThis": [
18
+ "primary",
19
+ "link variant"
20
+ ]
21
+ },
22
+ {
23
+ "job": "Go to another page",
24
+ "use": "button",
25
+ "how": "`variant=\"link\"` or a plain link",
26
+ "notThis": [
27
+ "secondary button"
28
+ ]
29
+ },
30
+ {
31
+ "job": "Show a keyboard shortcut",
32
+ "use": "keyboard-shortcut-hint",
33
+ "how": "Button `shortcut` prop, or one `<Kbd>` per key",
34
+ "notThis": [
35
+ "plain text in brackets"
36
+ ]
37
+ },
38
+ {
39
+ "job": "Show code, a command or log output to copy",
40
+ "use": "code-block",
41
+ "how": "`<Code>` inside sentences, `<CodeBlock>` for anything longer",
42
+ "notThis": [
43
+ "text-input"
44
+ ]
45
+ },
46
+ {
47
+ "job": "Show the status of a record",
48
+ "use": "status-badge",
49
+ "how": "always a word, tone by meaning",
50
+ "notThis": [
51
+ "a coloured dot alone",
52
+ "tag",
53
+ "chart colours"
54
+ ]
55
+ },
56
+ {
57
+ "job": "Label or categorise a record",
58
+ "use": "tag",
59
+ "notThis": [
60
+ "status-badge"
61
+ ]
62
+ },
63
+ {
64
+ "job": "Switch between sections of a page",
65
+ "use": "tabs",
66
+ "notThis": [
67
+ "segmented-control"
68
+ ]
69
+ },
70
+ {
71
+ "job": "Switch between 2 or 3 views of the same data",
72
+ "use": "segmented-control",
73
+ "notThis": [
74
+ "tabs",
75
+ "dropdown-menu"
76
+ ]
77
+ },
78
+ {
79
+ "job": "Offer several actions on one record",
80
+ "use": "dropdown-menu",
81
+ "notThis": [
82
+ "a row of many buttons"
83
+ ]
84
+ },
85
+ {
86
+ "job": "Turn a setting on or off, applied immediately",
87
+ "use": "switch",
88
+ "notThis": [
89
+ "checkbox"
90
+ ]
91
+ },
92
+ {
93
+ "job": "Pick options in a form that is submitted later",
94
+ "use": "checkbox",
95
+ "notThis": [
96
+ "switch"
97
+ ]
98
+ },
99
+ {
100
+ "job": "Explain an icon-only button",
101
+ "use": "tooltip",
102
+ "notThis": [
103
+ "title attribute alone",
104
+ "popover"
105
+ ]
106
+ },
107
+ {
108
+ "job": "Confirm an action the person just took",
109
+ "use": "toast",
110
+ "how": "with Undo when reversible",
111
+ "notThis": [
112
+ "banner",
113
+ "dialog",
114
+ "inbox"
115
+ ]
116
+ },
117
+ {
118
+ "job": "Something on the page needs attention",
119
+ "use": "banner",
120
+ "notThis": [
121
+ "toast",
122
+ "dialog"
123
+ ]
124
+ },
125
+ {
126
+ "job": "Something needs a person to act, later",
127
+ "use": "inbox",
128
+ "notThis": [
129
+ "notification bell list",
130
+ "toast",
131
+ "email only"
132
+ ]
133
+ },
134
+ {
135
+ "job": "Stop before an irreversible action",
136
+ "use": "confirmation-dialog",
137
+ "how": "states the consequence, safe option first",
138
+ "notThis": [
139
+ "toast",
140
+ "browser confirm()"
141
+ ]
142
+ },
143
+ {
144
+ "job": "Show or edit one record next to the list",
145
+ "use": "side-panel",
146
+ "how": "`mode=\"push\"` by default, `\"overlay\"` below 1100px",
147
+ "notThis": [
148
+ "dialog",
149
+ "a new page"
150
+ ]
151
+ },
152
+ {
153
+ "job": "Show nothing yet, or no results",
154
+ "use": "empty-state",
155
+ "notThis": [
156
+ "an empty table with no message"
157
+ ]
158
+ },
159
+ {
160
+ "job": "Show content while it loads",
161
+ "use": "loading-skeleton",
162
+ "notThis": [
163
+ "a full-page spinner"
164
+ ]
165
+ },
166
+ {
167
+ "job": "Something failed to load",
168
+ "use": "error-state",
169
+ "how": "say what failed, keep filters, offer Try again",
170
+ "notThis": [
171
+ "toast",
172
+ "empty-state"
173
+ ]
174
+ },
175
+ {
176
+ "job": "Find anything or run a command",
177
+ "use": "command-palette",
178
+ "how": "`⌘K`"
179
+ },
180
+ {
181
+ "job": "Scan and triage records",
182
+ "use": "list-table",
183
+ "notThis": [
184
+ "data-grid"
185
+ ]
186
+ },
187
+ {
188
+ "job": "Edit, enrich or export many columns",
189
+ "use": "data-grid",
190
+ "notThis": [
191
+ "list-table"
192
+ ]
193
+ },
194
+ {
195
+ "job": "Show spreadsheet-like data people scan many rows of, such as an inventory, a ledger or a bill of materials",
196
+ "use": "dense-table",
197
+ "how": "`Table size=\"dense\"` with `TableGroupRow`, `TableRowNumber`, frozen columns (`data-pinned`) and `TableFilterRow`",
198
+ "notThis": [
199
+ "list-table at 36px rows",
200
+ "a density setting"
201
+ ]
202
+ },
203
+ {
204
+ "job": "Group a table's rows into sections, such as Inputs, Wastes and emissions and Products",
205
+ "use": "dense-table",
206
+ "how": "One `TableBody` per group with `TableGroupRow` (label, info tooltip, count, collapsible); in a sheet, `SheetGrid groupBy`",
207
+ "notThis": [
208
+ "grouped-list for tabular data"
209
+ ]
210
+ },
211
+ {
212
+ "job": "Offer a shortcut button inside a table row, such as Open or Share",
213
+ "use": "dense-table",
214
+ "how": "`TableCellAction` with an aria-label naming the row, and the same action in the `TableRowNumber` menu",
215
+ "notThis": [
216
+ "a hover-only action with no menu item"
217
+ ]
218
+ },
219
+ {
220
+ "job": "Let people select ranges, paste from Excel or Google Sheets, fill down and undo cell edits",
221
+ "use": "sheet-grid",
222
+ "how": "`SheetGrid` (`size=\"dense\"` for spreadsheet-like data) with `onCellsChange`; `ShortcutSheet` groups from `sheetGridShortcuts()`",
223
+ "notThis": [
224
+ "data-grid",
225
+ "a custom keyboard handler"
226
+ ]
227
+ },
228
+ {
229
+ "job": "Run the usual action with a few variants, such as Import data with Import all and Import selection",
230
+ "use": "split-button",
231
+ "how": "`SplitButton` with `menuLabel=\"More import options\"` and `DropdownMenuItem` variants",
232
+ "notThis": [
233
+ "a Button beside a hand-made menu trigger",
234
+ "two separate buttons"
235
+ ]
236
+ },
237
+ {
238
+ "job": "Filter a list by a few fields",
239
+ "use": "filter-bar",
240
+ "how": "pills: field, operator, value; apply on tick",
241
+ "notThis": [
242
+ "filter-panel",
243
+ "a filter row under each column"
244
+ ]
245
+ },
246
+ {
247
+ "job": "Search with many fields",
248
+ "use": "filter-panel",
249
+ "notThis": [
250
+ "filter-bar"
251
+ ]
252
+ },
253
+ {
254
+ "job": "Save a combination of filters, columns and sort",
255
+ "use": "saved-views"
256
+ },
257
+ {
258
+ "job": "Act on several selected rows",
259
+ "use": "bulk-action-bar",
260
+ "notThis": [
261
+ "a toolbar that replaces the filters"
262
+ ]
263
+ },
264
+ {
265
+ "job": "Show one number that matters",
266
+ "use": "stat-compare",
267
+ "how": "number, change with arrow and sign, what it compares to",
268
+ "notThis": [
269
+ "a chart"
270
+ ]
271
+ },
272
+ {
273
+ "job": "Show change over time",
274
+ "use": "chart-card-line",
275
+ "notThis": [
276
+ "bar chart for long series",
277
+ "two y-axes"
278
+ ]
279
+ },
280
+ {
281
+ "job": "Compare amounts across categories",
282
+ "use": "chart-bar"
283
+ },
284
+ {
285
+ "job": "Ask the assistant about what is on screen",
286
+ "use": "assistant-panel",
287
+ "how": "`⌘J`; selection and filters become context chips",
288
+ "notThis": [
289
+ "a floating chat bubble"
290
+ ]
291
+ },
292
+ {
293
+ "job": "Have the AI change data",
294
+ "use": "suggested-changes",
295
+ "how": "proposal with checkboxes, Apply, then Undo",
296
+ "notThis": [
297
+ "applying directly",
298
+ "batch Apply for decisions about people"
299
+ ]
300
+ },
301
+ {
302
+ "job": "Mark content written by AI",
303
+ "use": "ai-origin-label",
304
+ "notThis": [
305
+ "an AI colour",
306
+ "sparkles on every button"
307
+ ]
308
+ },
309
+ {
310
+ "job": "Let an agent act on someone's behalf",
311
+ "use": "agent-permissions",
312
+ "how": "Off / Ask first / Allow; decisions about candidates are capped at Ask first",
313
+ "notThis": [
314
+ "Allow on decisions with legal or similar effects on people"
315
+ ]
316
+ },
317
+ {
318
+ "job": "Group one settings section or form",
319
+ "use": "card",
320
+ "how": "`Card` with header, content, footer actions on the right; `CardFooter band` for one secondary line",
321
+ "notThis": [
322
+ "banner"
323
+ ]
324
+ },
325
+ {
326
+ "job": "Divide two ways of doing the same thing",
327
+ "use": "separator",
328
+ "how": "`FieldSeparator` with “or”; plain `Separator` between groups",
329
+ "notThis": []
330
+ },
331
+ {
332
+ "job": "Guide a task done in steps, in order",
333
+ "use": "stepper",
334
+ "how": "`Stepper steps current onStepSelect`; 3 to 6 steps",
335
+ "notThis": [
336
+ "tabs"
337
+ ]
338
+ },
339
+ {
340
+ "job": "Show how a total splits over time, such as applications by source per week",
341
+ "use": "chart-area",
342
+ "how": "`ChartArea` with 2 to 5 `series` stacked from zero, legend toggles, `Table` view",
343
+ "notThis": [
344
+ "chart-donut",
345
+ "chart-card-line"
346
+ ]
347
+ },
348
+ {
349
+ "job": "Show a count against its plan or average in the same unit",
350
+ "use": "chart-mixed",
351
+ "how": "`ChartMixed` with one `bar` series and up to three `line` series on one y-axis",
352
+ "notThis": [
353
+ "chart-card-line"
354
+ ]
355
+ },
356
+ {
357
+ "job": "Show how one total splits at a single moment into a few parts",
358
+ "use": "chart-donut",
359
+ "how": "`ChartDonut` with 2 to 5 `segments`, centre `total` and `unit`, labels as count and share",
360
+ "notThis": [
361
+ "chart-area",
362
+ "chart-funnel"
363
+ ]
364
+ },
365
+ {
366
+ "job": "See whether two measures move together across listings and spot outliers",
367
+ "use": "chart-scatter",
368
+ "how": "`ChartScatter` with up to 3 `groups` (colour plus marker shape), axis titles with units, popover linking to the record",
369
+ "notThis": [
370
+ "chart-card-line"
371
+ ]
372
+ },
373
+ {
374
+ "job": "Pick the right chart for a question on a dashboard",
375
+ "use": "data-visualisation",
376
+ "how": "Tag the question (trend, anomaly, comparison, investigation), then use the chart-choice step; finish with title, units, `Table` view and four states",
377
+ "notThis": []
378
+ },
379
+ {
380
+ "job": "Find out why a chart spiked or dropped on a given day",
381
+ "use": "chart-drill-down",
382
+ "how": "Pin the `ChartPopover` on the point, read the breakdown, then \"Filter chart\" or \"Filter page\" to add pills to the `FilterBar`",
383
+ "notThis": [
384
+ "breakdown-table"
385
+ ]
386
+ },
387
+ {
388
+ "job": "Mark a target or limit on a chart",
389
+ "use": "chart-bar",
390
+ "how": "Add a `threshold` (dashed, neutral, with a text `label`) instead of an extra series",
391
+ "notThis": [
392
+ "chart-mixed"
393
+ ]
394
+ },
395
+ {
396
+ "job": "Build the team's weekly hiring overview that everyone reads the same way",
397
+ "use": "static-dashboard",
398
+ "how": "12-column grid: `stat-compare` row at full width, then `chart-card-line` and short `list-table` items at 6 columns, getting started and links at the bottom",
399
+ "notThis": [
400
+ "configurable-dashboard",
401
+ "board"
402
+ ]
403
+ },
404
+ {
405
+ "job": "Let each recruiter choose and arrange what they see on their home page",
406
+ "use": "configurable-dashboard",
407
+ "how": "`Board` with `BoardItem`s, Add items in `page-header` opening `items-palette` in `side-panel`, layout saved per person, Reset to default layout in the more menu",
408
+ "notThis": [
409
+ "static-dashboard"
410
+ ]
411
+ },
412
+ {
413
+ "job": "Decide what to put inside a new dashboard tile",
414
+ "use": "dashboard-items",
415
+ "how": "Pick one type (key metrics, chart, list, status and alerts, quick links, getting started, feature news); one header action, `dropdown-menu` for the rest, footer \"View all N\" link",
416
+ "notThis": [
417
+ "list-table"
418
+ ]
419
+ },
420
+ {
421
+ "job": "Let someone add a chart back to their dashboard after removing it",
422
+ "use": "items-palette",
423
+ "how": "Open Add items; the removed item is listed again; drag it or press its `Add to dashboard` button",
424
+ "notThis": [
425
+ "templates-gallery",
426
+ "command-palette"
427
+ ]
428
+ },
429
+ {
430
+ "job": "Give people a way back after rearranging their dashboard badly",
431
+ "use": "configurable-dashboard",
432
+ "how": "`Reset to default layout` in the page header more menu, applied at once with a `toast` offering Undo",
433
+ "notThis": [
434
+ "confirmation-dialog"
435
+ ]
436
+ },
437
+ {
438
+ "job": "Get a different version of the assistant's last answer",
439
+ "use": "regenerating-answers",
440
+ "how": "`AnswerActions` Regenerate on the latest answer; version switch `2 / 2`; Stop replaces Send while writing",
441
+ "notThis": [
442
+ "clarify-before-acting",
443
+ "generated-columns"
444
+ ]
445
+ },
446
+ {
447
+ "job": "Give the person a job description or CSV the assistant made",
448
+ "use": "generated-drafts-files",
449
+ "how": "`ArtifactCard` under the answer with `Open`/`Download`; record-bound drafts use `Suggest for LST-…` into `SuggestedChanges`",
450
+ "notThis": [
451
+ "data-export",
452
+ "propose-apply"
453
+ ]
454
+ },
455
+ {
456
+ "job": "Collect a closing date and salary band before preparing a new listing",
457
+ "use": "inline-input-in-answer",
458
+ "how": "Inline `Card` with up to five required, prefilled fields and `Continue`, which produces `SuggestedChanges`",
459
+ "notThis": [
460
+ "clarify-before-acting",
461
+ "workspace-onboarding"
462
+ ]
463
+ },
464
+ {
465
+ "job": "See what an agent did last week and which run changed a listing",
466
+ "use": "agent-activity-log",
467
+ "how": "`GroupedList` by day with time, `StatusBadge` outcome and past-tense label linking to the `AgentRun` step; `FilterBar` by agent and outcome",
468
+ "notThis": [
469
+ "reasoning-progress"
470
+ ]
471
+ },
472
+ {
473
+ "job": "Turn an agent on or off and limit which listings it touches",
474
+ "use": "managing-agents",
475
+ "how": "Agents page `ListTable` with `Switch` (Undo toast) and row detail in `SidePanel` showing `AgentPermissions` and scope",
476
+ "notThis": [
477
+ "agents-on-behalf",
478
+ "connected-tools"
479
+ ]
480
+ },
481
+ {
482
+ "job": "Let a person approve a tool call the agent needs mid-conversation",
483
+ "use": "agents-on-behalf",
484
+ "how": "Approval card above `MessageComposer`: `Allow once` / `Allow in this conversation` / `Always allow`, focus on heading, resolved line afterwards",
485
+ "notThis": [
486
+ "confirmation-dialog",
487
+ "propose-apply"
488
+ ]
489
+ },
490
+ {
491
+ "job": "Explain why an action can't be used right now",
492
+ "use": "disabled-read-only",
493
+ "how": "`Button aria-disabled` with `Tooltip` reason \"Available when the listing is Live.\"; hide it if the role can never use it",
494
+ "notThis": [
495
+ "help-system"
496
+ ]
497
+ },
498
+ {
499
+ "job": "Let people reorder pipeline stages or columns",
500
+ "use": "drag-and-drop",
501
+ "how": "Grip handle plus keyboard pick-up (Enter, arrows, Enter) and `DropdownMenu` items Move up / Move down",
502
+ "notThis": [
503
+ "board"
504
+ ]
505
+ },
506
+ {
507
+ "job": "Tell people a save, load or action failed",
508
+ "use": "error-messages",
509
+ "how": "Field: `FormField error`; form: `Banner variant=\"error\"` above actions; region: `ErrorState` with Try again",
510
+ "notThis": [
511
+ "toast",
512
+ "empty-state"
513
+ ]
514
+ },
515
+ {
516
+ "job": "Explain a field or concept that needs more than a label",
517
+ "use": "help-system",
518
+ "how": "Info link beside the label opens `HelpPanel topic=\"visa-sponsorship\"` in the right slot",
519
+ "notThis": [
520
+ "tooltip",
521
+ "assistant-panel"
522
+ ]
523
+ },
524
+ {
525
+ "job": "Decide which right-hand panel to use",
526
+ "use": "secondary-panels",
527
+ "how": "Record: `SidePanel`; questions about data: `AssistantPanel`; guidance: `HelpPanel`; one open at a time",
528
+ "notThis": [
529
+ "confirmation-dialog"
530
+ ]
531
+ },
532
+ {
533
+ "job": "Ask people whether a help topic or report was useful",
534
+ "use": "user-feedback",
535
+ "how": "`FeedbackPrompt question=\"Was this helpful?\"` at the end of the content, follow-up revealed after the vote",
536
+ "notThis": [
537
+ "labelling-ai-output"
538
+ ]
539
+ },
540
+ {
541
+ "job": "Stop people losing a half-written listing",
542
+ "use": "unsaved-changes",
543
+ "how": "Autosave drafts with `Timestamp` \"Draft saved\"; `ConfirmationDialog` \"Discard changes?\" only when dirty; `beforeunload` while dirty",
544
+ "notThis": [
545
+ "undo-destructive"
546
+ ]
547
+ },
548
+ {
549
+ "job": "Show when something happened or is due",
550
+ "use": "timestamps",
551
+ "how": "`Timestamp format=\"relative\"` in tables, `format=\"absolute\"` in details and deadlines, `by` for the source",
552
+ "notThis": []
553
+ },
554
+ {
555
+ "job": "Place actions for a page, a selection and a single row",
556
+ "use": "actions",
557
+ "how": "`PageHeader actions` (one primary, last), `BulkActionBar` for selections, row icon buttons plus `DropdownMenu` More actions",
558
+ "notThis": [
559
+ "selection-bulk-actions"
560
+ ]
561
+ },
562
+ {
563
+ "job": "Pick between radio, checkbox, switch and select",
564
+ "use": "choosing-selection-control",
565
+ "how": "Up to 7 options: `RadioGroup` or `Checkbox` group; 8+: select; immediate on/off: `Switch`",
566
+ "notThis": [
567
+ "segmented-control"
568
+ ]
569
+ },
570
+ {
571
+ "job": "Add a new job listing",
572
+ "use": "create-record",
573
+ "how": "`Create listing` in the `page-header` opens a single page with `card` sections, defaults filled in and `Additional settings` collapsed; never disable the submit `button`.",
574
+ "notThis": [
575
+ "stepper",
576
+ "confirmation-dialog"
577
+ ]
578
+ },
579
+ {
580
+ "job": "Publish a listing to external job boards",
581
+ "use": "create-record",
582
+ "how": "Use the `stepper` with 3 to 5 steps ending in a Review step whose `Edit` links return to each step.",
583
+ "notThis": [
584
+ "side-panel"
585
+ ]
586
+ },
587
+ {
588
+ "job": "Add a location that does not exist yet while creating a listing",
589
+ "use": "create-record",
590
+ "how": "Offer `Create \"Leeds office\"` in the select, or open an overlay `side-panel`; select the new item and return focus to the field.",
591
+ "notThis": [
592
+ "confirmation-dialog"
593
+ ]
594
+ },
595
+ {
596
+ "job": "Change the salary and location of a listing",
597
+ "use": "edit-record",
598
+ "how": "Section `Edit` in the `card` header turns the section into a form with `Save` and `Cancel`; `toast` \"Listing updated. Undo\".",
599
+ "notThis": [
600
+ "inline-editing-validation"
601
+ ]
602
+ },
603
+ {
604
+ "job": "Change the stage of many candidates",
605
+ "use": "inline-editing-validation",
606
+ "how": "Edit the cell in the `data-grid` or use the `bulk-action-bar`; Undo in the `toast`.",
607
+ "notThis": [
608
+ "edit-record"
609
+ ]
610
+ },
611
+ {
612
+ "job": "Delete a duplicate candidate record",
613
+ "use": "delete-record",
614
+ "how": "Move to Deleted at once with `toast` \"Candidate deleted. Undo\" and ⌘Z; no dialog.",
615
+ "notThis": [
616
+ "confirmation-dialog"
617
+ ]
618
+ },
619
+ {
620
+ "job": "Erase a candidate's data on request",
621
+ "use": "delete-record",
622
+ "how": "`confirmation-dialog` with role `alertdialog`, the name in bold, what is erased and what stays, buttons `Keep candidate` and `Delete permanently`.",
623
+ "notThis": [
624
+ "toast"
625
+ ]
626
+ },
627
+ {
628
+ "job": "Delete a whole workspace or a team with live listings",
629
+ "use": "delete-record",
630
+ "how": "`confirmation-dialog` plus a warning `banner` listing what else goes and a `text-input` where the person types the name.",
631
+ "notThis": [
632
+ "undo-destructive"
633
+ ]
634
+ },
635
+ {
636
+ "job": "Decide where a new area of the product goes in the navigation",
637
+ "use": "navigation",
638
+ "how": "Add an item to the `app-shell` sidebar only if people go there directly; keep the `breadcrumb` and sidebar labels identical.",
639
+ "notThis": [
640
+ "page-header"
641
+ ]
642
+ },
643
+ {
644
+ "job": "Tell people about a new Reports page",
645
+ "use": "announcing-features",
646
+ "how": "`New` text label after the sidebar item, opening a popover with two sentences and Learn more; remove after 30 days.",
647
+ "notThis": [
648
+ "toast",
649
+ "banner",
650
+ "status-badge"
651
+ ]
652
+ },
653
+ {
654
+ "job": "Mark an AI feature as beta",
655
+ "use": "announcing-features",
656
+ "how": "`FeatureLabel kind=\"Beta\"` in the sidebar (`SidebarItem tag`) and after the page title (`PageHeader titleAddon`), popover saying results may change, plus Send feedback; still label output per `labelling-ai-output`.",
657
+ "notThis": [
658
+ "tag",
659
+ "status-badge"
660
+ ]
661
+ },
662
+ {
663
+ "job": "Agree a multi-step or costly run before it starts",
664
+ "use": "plan-card",
665
+ "how": "`PlanCard` with removable steps and risk marks; approval starts the `AgentRun`; a mid-run change adds `PlanChange`.",
666
+ "notThis": [
667
+ "suggested-changes",
668
+ "confirmation-dialog"
669
+ ]
670
+ },
671
+ {
672
+ "job": "Review a change an agent proposes to procedures, prompts, tools or another agent",
673
+ "use": "change-request",
674
+ "how": "`ChangeRequest` with reason, `AiOrigin`, `DiffView` and `SimulationResults`; Approve, or Reject with a reason; list open ones in the Inbox.",
675
+ "notThis": [
676
+ "suggested-changes",
677
+ "alert-dialog"
678
+ ]
679
+ },
680
+ {
681
+ "job": "Tell people the agent is unsure",
682
+ "use": "confidence-note",
683
+ "how": "`ConfidenceNote` with the cause in words and a safer option or a way to check; ask first when the scope of a change is unclear.",
684
+ "notThis": [
685
+ "alert",
686
+ "toast",
687
+ "badge"
688
+ ]
689
+ },
690
+ {
691
+ "job": "Explain why the agent chose something",
692
+ "use": "why-choice",
693
+ "how": "`WhyChoice` next to the choice: factors, options that lost, anything it couldn't meet, then Change this or Keep it.",
694
+ "notThis": [
695
+ "tooltip",
696
+ "help-panel"
697
+ ]
698
+ },
699
+ {
700
+ "job": "Let people sign in with Google, Microsoft, SSO or email",
701
+ "use": "sign-in",
702
+ "how": "`SignInOptions` with `providers` and `ssoDomains`; errors under the email field.",
703
+ "notThis": [
704
+ "dialog",
705
+ "text-field"
706
+ ]
707
+ },
708
+ {
709
+ "job": "Set up a new account in a few steps",
710
+ "use": "onboarding-step",
711
+ "how": "Three to five `OnboardingStep`s; optional ones with Skip; then a `SetupChecklist` in the sidebar.",
712
+ "notThis": [
713
+ "stepper",
714
+ "dialog"
715
+ ]
716
+ },
717
+ {
718
+ "job": "Upload a profile picture, logo or document",
719
+ "use": "file-drop",
720
+ "how": "`FileDrop` with `accept`, `hint` and `maxBytes`; preview once chosen.",
721
+ "notThis": [
722
+ "empty-state"
723
+ ]
724
+ },
725
+ {
726
+ "job": "Connect Google, Slack, a CRM or another service",
727
+ "use": "connector-picker",
728
+ "how": "`ConnectorPicker` with what each connection can do; `ConnectDialog` for OAuth or an API key test.",
729
+ "notThis": [
730
+ "connected-tools",
731
+ "agent-permissions"
732
+ ]
733
+ },
734
+ {
735
+ "job": "Show credits, seats or storage against a limit",
736
+ "use": "usage-meter",
737
+ "how": "`UsageMeter` with used, limit, unit and reset date; upgrade link appears from 80%.",
738
+ "notThis": [
739
+ "stat-compare",
740
+ "badge"
741
+ ]
742
+ },
743
+ {
744
+ "job": "Show a third-party service's logo",
745
+ "use": "provider-logo",
746
+ "how": "`ProviderLogo provider=\"google\"` beside its name; add new ones in scripts/provider-logos.mjs.",
747
+ "notThis": [
748
+ "avatar",
749
+ "tag"
750
+ ]
751
+ },
752
+ {
753
+ "job": "Show how one total splits at one moment, in a line of space",
754
+ "use": "chart-share-bar",
755
+ "how": "`ShareBar` with up to 6 `parts`; the rest fold into grey Other; `shareTable` for the table view",
756
+ "notThis": [
757
+ "chart-donut",
758
+ "a pie chart"
759
+ ]
760
+ },
761
+ {
762
+ "job": "Rank items by one measure beside a stacked chart, as its legend",
763
+ "use": "ranked-list",
764
+ "how": "`RankedList` with `colorIndex` matching the chart's series, change with arrow and sign",
765
+ "notThis": [
766
+ "ChartLegend plus a second list",
767
+ "list-table"
768
+ ]
769
+ },
770
+ {
771
+ "job": "List prices, indices or rates with today's change",
772
+ "use": "change-list",
773
+ "how": "`ChangeList` with name, code, value and unit, change, optional `spark`, and `seeAll`",
774
+ "notThis": [
775
+ "a stat tile per instrument",
776
+ "colour without arrow and sign"
777
+ ]
778
+ },
779
+ {
780
+ "job": "Show a price moving within a narrow range today",
781
+ "use": "chart-price",
782
+ "how": "`PriceChart` over the whole session with `reference` (previous close) and `live`; the axis says when it does not start at zero",
783
+ "notThis": [
784
+ "chart-card-line",
785
+ "a line chart cropped without saying so"
786
+ ]
787
+ },
788
+ {
789
+ "job": "Explain how an opening amount became a closing amount",
790
+ "use": "chart-waterfall",
791
+ "how": "`Waterfall` with `total` steps in grey and changes in c1 and c2 with + and − labels",
792
+ "notThis": [
793
+ "green and red bars",
794
+ "stacked bar"
795
+ ]
796
+ },
797
+ {
798
+ "job": "Show actual against target for a few measures",
799
+ "use": "chart-bullet",
800
+ "how": "`BulletChart` rows with `value`, `target` and neutral `bands`",
801
+ "notThis": [
802
+ "a gauge",
803
+ "a dial",
804
+ "a donut"
805
+ ]
806
+ },
807
+ {
808
+ "job": "Show which of many items make up most of a total",
809
+ "use": "chart-treemap",
810
+ "how": "`Treemap` with up to 12 `items`, optional `group` for colour and legend",
811
+ "notThis": [
812
+ "chart-donut with many slices",
813
+ "colour by value"
814
+ ]
815
+ },
816
+ {
817
+ "job": "Show how a quantity flows across two or three stages",
818
+ "use": "chart-sankey",
819
+ "how": "`SankeyChart` with `nodes` and `links`; `sankeyTable` for the table view",
820
+ "notThis": [
821
+ "chart-funnel",
822
+ "more than three columns"
823
+ ]
824
+ },
825
+ {
826
+ "job": "Show how one set of values is spread",
827
+ "use": "chart-histogram",
828
+ "how": "`Histogram` with `binValues(values, { binWidth })` and an optional median `marker`",
829
+ "notThis": [
830
+ "an average alone",
831
+ "chart-bar of categories"
832
+ ]
833
+ },
834
+ {
835
+ "job": "Compare how spread out several groups are",
836
+ "use": "chart-box-plot",
837
+ "how": "`BoxPlot` with raw `values` per group on one shared axis",
838
+ "notThis": [
839
+ "averages in a bar chart",
840
+ "one histogram per group"
841
+ ]
842
+ },
843
+ {
844
+ "job": "Show daily open, high, low and close for a traded price",
845
+ "use": "chart-candlestick",
846
+ "how": "`CandlestickChart` with up hollow and down filled; volume as its own panel; `colors=\"market\"` and `showLast` on trading screens",
847
+ "notThis": [
848
+ "colour as the only sign of direction",
849
+ "volume on a second y axis"
850
+ ]
851
+ },
852
+ {
853
+ "job": "Show the prices people are offering to buy and sell at, and let them pick one",
854
+ "use": "order-book",
855
+ "how": "`OrderBook` with `asks`, `bids`, `steps` and `onSelectPrice` filling the order form's limit price",
856
+ "notThis": [
857
+ "a list table of orders",
858
+ "colour as the only sign of side"
859
+ ]
860
+ },
861
+ {
862
+ "job": "Build a table whose columns are looked up, calculated or written per row",
863
+ "use": "sheet-grid",
864
+ "how": "`SheetGrid` with typed `columns` and computed cells in `rows[].computed`; `RunStatusBar` under it",
865
+ "notThis": [
866
+ "data-grid",
867
+ "list-table"
868
+ ]
869
+ },
870
+ {
871
+ "job": "Show, hide or reorder the columns of a sheet or list table",
872
+ "use": "columns-menu",
873
+ "how": "`ColumnsMenu` in the table toolbar; applies at once, with keyboard and Move buttons for reordering; on list tables add `onWrapChange` and `onPageSizeChange`",
874
+ "notThis": [
875
+ "dialog"
876
+ ]
877
+ },
878
+ {
879
+ "job": "Show what a sheet is running, how far it is and what it costs",
880
+ "use": "run-status-bar",
881
+ "how": "`RunStatusBar` with done, total, creditsUsed, costPerRow and onStop; Auto-run states its cost per row",
882
+ "notThis": [
883
+ "usage-meter",
884
+ "agent-run"
885
+ ]
886
+ },
887
+ {
888
+ "job": "Import rows from a CSV file",
889
+ "use": "csv-import",
890
+ "how": "`CsvImport` with the table's `targets`: map, read the problem summary, then Import with the row count",
891
+ "notThis": [
892
+ "file-drop"
893
+ ]
894
+ },
895
+ {
896
+ "job": "Match fields from a file, form or service to a table's fields",
897
+ "use": "field-mapping",
898
+ "how": "`FieldMapping` with `targets`, `sources` and `autoMapFields`; required marked, type mismatches warned",
899
+ "notThis": [
900
+ "columns-menu"
901
+ ]
902
+ },
903
+ {
904
+ "job": "Add a looked-up, AI, formula or export column to a sheet",
905
+ "use": "action-catalogue",
906
+ "how": "`ActionCatalogue` in a `SidePanel` titled Add column; cost per row, then the total before adding, test on 10 rows by default",
907
+ "notThis": [
908
+ "items-palette",
909
+ "templates-gallery"
910
+ ]
911
+ },
912
+ {
913
+ "job": "Set how a table handles duplicates, empty rows and template sharing",
914
+ "use": "table-settings",
915
+ "how": "`TableSettings` in the side panel slot, saved with Save; asks before discarding only when changed",
916
+ "notThis": [
917
+ "confirmation-dialog"
918
+ ]
919
+ },
920
+ {
921
+ "job": "Show where something happens when location itself matters, such as conversion rate by country or ARR by city",
922
+ "use": "chart-map",
923
+ "how": "`MapChart` with your TopoJSON and `values` as a rate (five steps, No data hatched), or `markers` for raw amounts; `mapTable` for the Table view",
924
+ "notThis": [
925
+ "Bar chart or Ranked list to compare amounts",
926
+ "raw counts as shading"
927
+ ]
928
+ },
929
+ {
930
+ "job": "Show someone where the controls for a task are, after they ask",
931
+ "use": "guide-cue",
932
+ "how": "`GuideCue` with 1 to 3 `steps` (target ref or data attribute, title, body), opened from a `SetupChecklist` Start, Help menu, `HelpPanel` link or a `FeatureLabel` Show me via `useGuide().start`",
933
+ "notThis": [
934
+ "a product tour on load",
935
+ "an auto-opening popover",
936
+ "a dimmed spotlight overlay"
937
+ ]
938
+ },
939
+ {
940
+ "job": "See releases, maintenance windows or campaign phases across services or teams on one time scale",
941
+ "use": "timeline",
942
+ "how": "`Timeline` with `tracks`, `start`, `end` and `now` inside `ChartFrame` with `timelineTable`; `onSelect` opens the record in `SidePanel`",
943
+ "notThis": [
944
+ "List table",
945
+ "Line chart card",
946
+ "Agent activity log"
947
+ ]
948
+ },
949
+ {
950
+ "job": "Show how much of a few fixed limits is used, such as seats, credits and storage, in a small card",
951
+ "use": "chart-radial-bars",
952
+ "how": "`RadialBars` with 1 to 4 `items` ({ label, value, limit, unit }), used of limit written beside the rings, `radialBarsTable` for the table view",
953
+ "notThis": [
954
+ "Bullet chart for actual against target",
955
+ "a gauge or dial",
956
+ "Donut chart for parts of one total"
957
+ ]
958
+ },
959
+ {
960
+ "job": "Show how a measure rises and falls through a repeating cycle, such as support tickets by hour of day",
961
+ "use": "chart-radial-lines",
962
+ "how": "`RadialLines` with `periods` for one full cycle and 1 to 3 `series` (null for gaps), `periodLabel`, `radialLinesTable` for the table view",
963
+ "notThis": [
964
+ "Line chart card for time that does not repeat",
965
+ "Heatmap for a cycle against a second dimension",
966
+ "an area fill that paints gaps as zero"
967
+ ]
968
+ },
969
+ {
970
+ "job": "Book and rearrange interviews, shifts or rooms across a few people on a calendar",
971
+ "use": "scheduler",
972
+ "how": "`Scheduler` with `resources`, `view`/`onViewChange` and `date`/`onDateChange`; `onSelectEvent` opens `SidePanel`, `onCreate` opens a dialog of up to three fields, `onMove` applies with an Undo `toast`",
973
+ "notThis": [
974
+ "List table",
975
+ "Timeline",
976
+ "Board and board item"
977
+ ]
978
+ },
979
+ {
980
+ "job": "Set a date on a record, such as a closing date or start date",
981
+ "use": "date-picker",
982
+ "how": "`DatePicker` with `label`, ISO `value` and `onValueChange`; typing dd/mm/yyyy is the main path, Alt+↓ or the calendar button the second; `min`, `isDateUnavailable` and `unavailableReason` say which dates can't be chosen",
983
+ "notThis": [
984
+ "Text input",
985
+ "Scheduler"
986
+ ]
987
+ },
988
+ {
989
+ "job": "Filter a list or chart to a period, such as the last 30 days or last quarter",
990
+ "use": "date-picker",
991
+ "how": "In a filter bar, `DateFilterPill` beside `FilterPill` (\"Applied is in Last 30 days\"); in a form or chart header, `DateRangePicker` with `presets`. Store the value with `dateFilterToValues` in the URL and saved views, and get the dates with `resolveDateRange`",
992
+ "notThis": [
993
+ "Segmented control",
994
+ "Text input"
995
+ ]
996
+ },
997
+ {
998
+ "job": "Pick one or several values from a list of eight or more, such as a location or skills",
999
+ "use": "combobox",
1000
+ "how": "`Combobox` with `options` (add `multiple` for several); `onCreate` offers Create \"Leeds office\"; server search with `filter={null}`, `onSearch`, `loading` and `loadError`",
1001
+ "notThis": [
1002
+ "Radio",
1003
+ "Checkbox",
1004
+ "Filter pills and filter bar",
1005
+ "Command palette (⌘K)"
1006
+ ]
1007
+ },
1008
+ {
1009
+ "job": "Enter several free values that don't come from a list, such as email addresses to invite",
1010
+ "use": "tag-input",
1011
+ "how": "`TagInput` with `validateValue` and `noun`; pasted lists are split, duplicates are reported and invalid values stay marked with their reason",
1012
+ "notThis": [
1013
+ "Combobox",
1014
+ "Text input",
1015
+ "Tag"
1016
+ ]
1017
+ },
1018
+ {
1019
+ "job": "Keep several regions of a tool page in view and let people resize and rearrange them, such as a trading screen",
1020
+ "use": "pane-layout",
1021
+ "how": "`PaneLayout` with `value`, `onValueChange`, `panes` and `onReset` inside `AppShell frame=\"flush\"`; `usePaneSize` sizes charts and lists to their pane",
1022
+ "notThis": [
1023
+ "a page that scrolls past regions people need together",
1024
+ "a hand-built grid of fixed cards"
1025
+ ]
1026
+ }
1027
+ ]
1028
+ }