altitude-design 0.3.2 → 0.4.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 (294) hide show
  1. package/README.md +2 -0
  2. package/dist/cli/altitude.mjs +120 -20
  3. package/dist/guidance/README.md +4 -0
  4. package/dist/guidance/agent-setup.md +3 -2
  5. package/dist/guidance/components/AILabel/README.md +60 -0
  6. package/dist/guidance/components/Accordion/README.md +32 -0
  7. package/dist/guidance/components/AgentFleet/README.md +81 -0
  8. package/dist/guidance/components/AgentLanes/README.md +53 -0
  9. package/dist/guidance/components/AgentRequests/README.md +76 -0
  10. package/dist/guidance/components/Alert/README.md +71 -0
  11. package/dist/guidance/components/AltitudeProvider/README.md +111 -0
  12. package/dist/guidance/components/AppShell/README.md +121 -0
  13. package/dist/guidance/components/AreaChart/README.md +101 -0
  14. package/dist/guidance/components/Artifact/README.md +99 -0
  15. package/dist/guidance/components/Avatar/README.md +75 -0
  16. package/dist/guidance/components/Await/README.md +128 -0
  17. package/dist/guidance/components/Badge/README.md +66 -0
  18. package/dist/guidance/components/BarChart/README.md +109 -0
  19. package/dist/guidance/components/BarList/README.md +87 -0
  20. package/dist/guidance/components/Board/README.md +98 -0
  21. package/dist/guidance/components/Breadcrumb/README.md +66 -0
  22. package/dist/guidance/components/Button/README.md +58 -0
  23. package/dist/guidance/components/Card/README.md +52 -0
  24. package/dist/guidance/components/ChartBrush/README.md +98 -0
  25. package/dist/guidance/components/ChartContainer/README.md +229 -0
  26. package/dist/guidance/components/ChartLegend/README.md +78 -0
  27. package/dist/guidance/components/ChartReference/README.md +115 -0
  28. package/dist/guidance/components/ChartTooltip/README.md +101 -0
  29. package/dist/guidance/components/Checkbox/README.md +46 -0
  30. package/dist/guidance/components/Checklist/README.md +137 -0
  31. package/dist/guidance/components/CodeBlock/README.md +72 -0
  32. package/dist/guidance/components/ColorPicker/README.md +69 -0
  33. package/dist/guidance/components/Combobox/README.md +51 -0
  34. package/dist/guidance/components/CommandPalette/README.md +204 -0
  35. package/dist/guidance/components/CommentThread/README.md +81 -0
  36. package/dist/guidance/components/Confirmation/README.md +94 -0
  37. package/dist/guidance/components/ContextMenu/README.md +81 -0
  38. package/dist/guidance/components/Conversation/README.md +169 -0
  39. package/dist/guidance/components/CopyButton/README.md +54 -0
  40. package/dist/guidance/components/DataGrid/README.md +157 -0
  41. package/dist/guidance/components/DatePicker/README.md +116 -0
  42. package/dist/guidance/components/Dialog/README.md +204 -0
  43. package/dist/guidance/components/DiffView/README.md +107 -0
  44. package/dist/guidance/components/DotPlot/README.md +82 -0
  45. package/dist/guidance/components/Drilldown/README.md +43 -0
  46. package/dist/guidance/components/DropZone/README.md +71 -0
  47. package/dist/guidance/components/DropdownMenu/README.md +63 -0
  48. package/dist/guidance/components/EditRegion/README.md +263 -0
  49. package/dist/guidance/components/EmptyState/README.md +66 -0
  50. package/dist/guidance/components/FeatureGate/README.md +67 -0
  51. package/dist/guidance/components/Field/README.md +46 -0
  52. package/dist/guidance/components/FilterBar/README.md +132 -0
  53. package/dist/guidance/components/FormattedNumber/README.md +81 -0
  54. package/dist/guidance/components/Heatmap/README.md +116 -0
  55. package/dist/guidance/components/HoldButton/README.md +48 -0
  56. package/dist/guidance/components/HoverCard/README.md +71 -0
  57. package/dist/guidance/components/InlineCitation/README.md +56 -0
  58. package/dist/guidance/components/InlineEdit/README.md +379 -0
  59. package/dist/guidance/components/Input/README.md +63 -0
  60. package/dist/guidance/components/InputOTP/README.md +76 -0
  61. package/dist/guidance/components/ItemGroup/README.md +193 -0
  62. package/dist/guidance/components/Kbd/README.md +36 -0
  63. package/dist/guidance/components/LineChart/README.md +109 -0
  64. package/dist/guidance/components/Link/README.md +69 -0
  65. package/dist/guidance/components/Markdown/README.md +113 -0
  66. package/dist/guidance/components/Meter/README.md +81 -0
  67. package/dist/guidance/components/NotificationCenter/README.md +67 -0
  68. package/dist/guidance/components/NumberInput/README.md +66 -0
  69. package/dist/guidance/components/PageHeader/README.md +74 -0
  70. package/dist/guidance/components/Pagination/README.md +58 -0
  71. package/dist/guidance/components/PasswordInput/README.md +70 -0
  72. package/dist/guidance/components/PermissionMatrix/README.md +68 -0
  73. package/dist/guidance/components/Pile/README.md +54 -0
  74. package/dist/guidance/components/PlanPicker/README.md +62 -0
  75. package/dist/guidance/components/Popover/README.md +48 -0
  76. package/dist/guidance/components/Progress/README.md +41 -0
  77. package/dist/guidance/components/PromptInput/README.md +138 -0
  78. package/dist/guidance/components/PropertyList/README.md +137 -0
  79. package/dist/guidance/components/Question/README.md +81 -0
  80. package/dist/guidance/components/RadioGroup/README.md +47 -0
  81. package/dist/guidance/components/RelativeTime/README.md +73 -0
  82. package/dist/guidance/components/RemovalReceipt/README.md +111 -0
  83. package/dist/guidance/components/Resizable/README.md +65 -0
  84. package/dist/guidance/components/SaveBar/README.md +65 -0
  85. package/dist/guidance/components/SavedViews/README.md +82 -0
  86. package/dist/guidance/components/ScatterChart/README.md +104 -0
  87. package/dist/guidance/components/Schedule/README.md +142 -0
  88. package/dist/guidance/components/ScrollArea/README.md +35 -0
  89. package/dist/guidance/components/SecretField/README.md +74 -0
  90. package/dist/guidance/components/Select/README.md +97 -0
  91. package/dist/guidance/components/Separator/README.md +70 -0
  92. package/dist/guidance/components/Sheet/README.md +126 -0
  93. package/dist/guidance/components/Skeleton/README.md +50 -0
  94. package/dist/guidance/components/Slider/README.md +60 -0
  95. package/dist/guidance/components/SortableList/README.md +45 -0
  96. package/dist/guidance/components/Sparkline/README.md +87 -0
  97. package/dist/guidance/components/SplitButton/README.md +65 -0
  98. package/dist/guidance/components/Stat/README.md +92 -0
  99. package/dist/guidance/components/Stepper/README.md +90 -0
  100. package/dist/guidance/components/Suggestions/README.md +87 -0
  101. package/dist/guidance/components/Surface/README.md +48 -0
  102. package/dist/guidance/components/Switch/README.md +38 -0
  103. package/dist/guidance/components/SyncIndicator/README.md +78 -0
  104. package/dist/guidance/components/Table/README.md +138 -0
  105. package/dist/guidance/components/Tabs/README.md +73 -0
  106. package/dist/guidance/components/TagInput/README.md +116 -0
  107. package/dist/guidance/components/Terminal/README.md +69 -0
  108. package/dist/guidance/components/ThreadList/README.md +110 -0
  109. package/dist/guidance/components/TimeInput/README.md +63 -0
  110. package/dist/guidance/components/Timeline/README.md +87 -0
  111. package/dist/guidance/components/Toaster/README.md +54 -0
  112. package/dist/guidance/components/Toggle/README.md +85 -0
  113. package/dist/guidance/components/Toolbar/README.md +106 -0
  114. package/dist/guidance/components/Tooltip/README.md +41 -0
  115. package/dist/guidance/components/Tour/README.md +73 -0
  116. package/dist/guidance/components/Trace/README.md +129 -0
  117. package/dist/guidance/components/Tree/README.md +171 -0
  118. package/dist/guidance/evidence.json +18 -0
  119. package/dist/guidance/index.json +811 -7
  120. package/dist/guidance/llms.txt +153 -2
  121. package/dist/guidance/manifest.json +133 -12
  122. package/dist/guidance/patterns/screen-layout.md +1 -1
  123. package/dist/guidance/references/build/checks/agent-setup.mjs +7 -0
  124. package/dist/guidance/references/build/checks/guidance.mjs +8 -2
  125. package/dist/guidance/references/build/checks/source-check.mjs +101 -0
  126. package/dist/guidance/rules.json +155 -0
  127. package/dist/guidance/visual/ActionsInPlace.md +463 -0
  128. package/dist/guidance/visual/Charts.md +119 -0
  129. package/dist/guidance/visual/Distinctiveness.md +106 -0
  130. package/dist/guidance/visual/Elevation.md +1 -1
  131. package/dist/guidance/visual/Mobile.md +64 -0
  132. package/dist/guidance/visual/Motion.md +225 -0
  133. package/dist/guidance/visual/README.md +98 -0
  134. package/dist/guidance/visual/Research.md +1 -1
  135. package/dist/guidance/visual/Theming.md +349 -0
  136. package/dist/types/agent-fleet.d.ts +28 -0
  137. package/dist/types/ai-label.d.ts +7 -0
  138. package/dist/types/app-shell.d.ts +23 -0
  139. package/dist/types/area-chart.d.ts +8 -0
  140. package/dist/types/artifact.d.ts +14 -0
  141. package/dist/types/bar-chart.d.ts +6 -0
  142. package/dist/types/bar-list.d.ts +6 -0
  143. package/dist/types/breadcrumb.d.ts +6 -0
  144. package/dist/types/chart-brush.d.ts +6 -0
  145. package/dist/types/chart.d.ts +29 -1
  146. package/dist/types/checklist.d.ts +6 -0
  147. package/dist/types/code-block.d.ts +6 -0
  148. package/dist/types/collections.d.ts +15 -0
  149. package/dist/types/color-picker.d.ts +6 -0
  150. package/dist/types/command.d.ts +13 -0
  151. package/dist/types/comment-thread.d.ts +11 -0
  152. package/dist/types/confirmation.d.ts +8 -0
  153. package/dist/types/context-menu.d.ts +11 -0
  154. package/dist/types/controls.d.ts +174 -10
  155. package/dist/types/conversation.d.ts +21 -0
  156. package/dist/types/copy-button.d.ts +6 -0
  157. package/dist/types/core.d.ts +31 -0
  158. package/dist/types/data-grid.d.ts +25 -0
  159. package/dist/types/date-picker.d.ts +6 -0
  160. package/dist/types/diff-view.d.ts +8 -0
  161. package/dist/types/dot-plot.d.ts +6 -0
  162. package/dist/types/edit-region.d.ts +23 -0
  163. package/dist/types/empty.d.ts +9 -0
  164. package/dist/types/feature-gate.d.ts +8 -0
  165. package/dist/types/filter-bar.d.ts +8 -0
  166. package/dist/types/formatted-number.d.ts +6 -0
  167. package/dist/types/heatmap.d.ts +6 -0
  168. package/dist/types/inline-citation.d.ts +6 -0
  169. package/dist/types/inline-edit.d.ts +7 -0
  170. package/dist/types/input-otp.d.ts +11 -0
  171. package/dist/types/item-group.d.ts +29 -0
  172. package/dist/types/line-chart.d.ts +6 -0
  173. package/dist/types/link.d.ts +8 -1
  174. package/dist/types/markdown.d.ts +6 -0
  175. package/dist/types/meter.d.ts +6 -0
  176. package/dist/types/nav.d.ts +6 -0
  177. package/dist/types/notifications.d.ts +6 -0
  178. package/dist/types/number-input.d.ts +6 -0
  179. package/dist/types/overlays.d.ts +61 -0
  180. package/dist/types/page-header.d.ts +14 -0
  181. package/dist/types/pagination.d.ts +6 -0
  182. package/dist/types/password-input.d.ts +6 -0
  183. package/dist/types/permission-matrix.d.ts +7 -0
  184. package/dist/types/pile.d.ts +6 -0
  185. package/dist/types/plan-picker.d.ts +6 -0
  186. package/dist/types/prompt-input.d.ts +11 -0
  187. package/dist/types/property-list.d.ts +17 -0
  188. package/dist/types/question.d.ts +11 -0
  189. package/dist/types/relative-time.d.ts +8 -1
  190. package/dist/types/removal-receipt.d.ts +18 -1
  191. package/dist/types/save-bar.d.ts +6 -0
  192. package/dist/types/saved-views.d.ts +12 -0
  193. package/dist/types/scatter-chart.d.ts +8 -0
  194. package/dist/types/schedule.d.ts +21 -0
  195. package/dist/types/secret-field.d.ts +6 -0
  196. package/dist/types/select.d.ts +12 -0
  197. package/dist/types/separator.d.ts +8 -1
  198. package/dist/types/sheet.d.ts +19 -0
  199. package/dist/types/sparkline.d.ts +6 -0
  200. package/dist/types/split-button.d.ts +7 -0
  201. package/dist/types/stat.d.ts +7 -0
  202. package/dist/types/stepper.d.ts +12 -0
  203. package/dist/types/suggestions.d.ts +10 -0
  204. package/dist/types/sync-indicator.d.ts +8 -0
  205. package/dist/types/tag-input.d.ts +8 -0
  206. package/dist/types/terminal.d.ts +6 -0
  207. package/dist/types/thread-list.d.ts +16 -0
  208. package/dist/types/time-input.d.ts +6 -0
  209. package/dist/types/timeline.d.ts +9 -0
  210. package/dist/types/toggle.d.ts +6 -0
  211. package/dist/types/toolbar.d.ts +20 -0
  212. package/dist/types/tour.d.ts +10 -0
  213. package/dist/types/trace.d.ts +16 -0
  214. package/dist/types/tree.d.ts +21 -0
  215. package/dist/types-cjs/agent-fleet.d.cts +28 -0
  216. package/dist/types-cjs/ai-label.d.cts +7 -0
  217. package/dist/types-cjs/app-shell.d.cts +23 -0
  218. package/dist/types-cjs/area-chart.d.cts +8 -0
  219. package/dist/types-cjs/artifact.d.cts +14 -0
  220. package/dist/types-cjs/bar-chart.d.cts +6 -0
  221. package/dist/types-cjs/bar-list.d.cts +6 -0
  222. package/dist/types-cjs/breadcrumb.d.cts +6 -0
  223. package/dist/types-cjs/chart-brush.d.cts +6 -0
  224. package/dist/types-cjs/chart.d.cts +29 -1
  225. package/dist/types-cjs/checklist.d.cts +6 -0
  226. package/dist/types-cjs/code-block.d.cts +6 -0
  227. package/dist/types-cjs/collections.d.cts +15 -0
  228. package/dist/types-cjs/color-picker.d.cts +6 -0
  229. package/dist/types-cjs/command.d.cts +13 -0
  230. package/dist/types-cjs/comment-thread.d.cts +11 -0
  231. package/dist/types-cjs/confirmation.d.cts +8 -0
  232. package/dist/types-cjs/context-menu.d.cts +11 -0
  233. package/dist/types-cjs/controls.d.cts +174 -10
  234. package/dist/types-cjs/conversation.d.cts +21 -0
  235. package/dist/types-cjs/copy-button.d.cts +6 -0
  236. package/dist/types-cjs/core.d.cts +31 -0
  237. package/dist/types-cjs/data-grid.d.cts +25 -0
  238. package/dist/types-cjs/date-picker.d.cts +6 -0
  239. package/dist/types-cjs/diff-view.d.cts +8 -0
  240. package/dist/types-cjs/dot-plot.d.cts +6 -0
  241. package/dist/types-cjs/edit-region.d.cts +23 -0
  242. package/dist/types-cjs/empty.d.cts +9 -0
  243. package/dist/types-cjs/feature-gate.d.cts +8 -0
  244. package/dist/types-cjs/filter-bar.d.cts +8 -0
  245. package/dist/types-cjs/formatted-number.d.cts +6 -0
  246. package/dist/types-cjs/heatmap.d.cts +6 -0
  247. package/dist/types-cjs/inline-citation.d.cts +6 -0
  248. package/dist/types-cjs/inline-edit.d.cts +7 -0
  249. package/dist/types-cjs/input-otp.d.cts +11 -0
  250. package/dist/types-cjs/item-group.d.cts +29 -0
  251. package/dist/types-cjs/line-chart.d.cts +6 -0
  252. package/dist/types-cjs/link.d.cts +8 -1
  253. package/dist/types-cjs/markdown.d.cts +6 -0
  254. package/dist/types-cjs/meter.d.cts +6 -0
  255. package/dist/types-cjs/nav.d.cts +6 -0
  256. package/dist/types-cjs/notifications.d.cts +6 -0
  257. package/dist/types-cjs/number-input.d.cts +6 -0
  258. package/dist/types-cjs/overlays.d.cts +61 -0
  259. package/dist/types-cjs/page-header.d.cts +14 -0
  260. package/dist/types-cjs/pagination.d.cts +6 -0
  261. package/dist/types-cjs/password-input.d.cts +6 -0
  262. package/dist/types-cjs/permission-matrix.d.cts +7 -0
  263. package/dist/types-cjs/pile.d.cts +6 -0
  264. package/dist/types-cjs/plan-picker.d.cts +6 -0
  265. package/dist/types-cjs/prompt-input.d.cts +11 -0
  266. package/dist/types-cjs/property-list.d.cts +17 -0
  267. package/dist/types-cjs/question.d.cts +11 -0
  268. package/dist/types-cjs/relative-time.d.cts +8 -1
  269. package/dist/types-cjs/removal-receipt.d.cts +18 -1
  270. package/dist/types-cjs/save-bar.d.cts +6 -0
  271. package/dist/types-cjs/saved-views.d.cts +12 -0
  272. package/dist/types-cjs/scatter-chart.d.cts +8 -0
  273. package/dist/types-cjs/schedule.d.cts +21 -0
  274. package/dist/types-cjs/secret-field.d.cts +6 -0
  275. package/dist/types-cjs/select.d.cts +12 -0
  276. package/dist/types-cjs/separator.d.cts +8 -1
  277. package/dist/types-cjs/sheet.d.cts +19 -0
  278. package/dist/types-cjs/sparkline.d.cts +6 -0
  279. package/dist/types-cjs/split-button.d.cts +7 -0
  280. package/dist/types-cjs/stat.d.cts +7 -0
  281. package/dist/types-cjs/stepper.d.cts +12 -0
  282. package/dist/types-cjs/suggestions.d.cts +10 -0
  283. package/dist/types-cjs/sync-indicator.d.cts +8 -0
  284. package/dist/types-cjs/tag-input.d.cts +8 -0
  285. package/dist/types-cjs/terminal.d.cts +6 -0
  286. package/dist/types-cjs/thread-list.d.cts +16 -0
  287. package/dist/types-cjs/time-input.d.cts +6 -0
  288. package/dist/types-cjs/timeline.d.cts +9 -0
  289. package/dist/types-cjs/toggle.d.cts +6 -0
  290. package/dist/types-cjs/toolbar.d.cts +20 -0
  291. package/dist/types-cjs/tour.d.cts +10 -0
  292. package/dist/types-cjs/trace.d.cts +16 -0
  293. package/dist/types-cjs/tree.d.cts +21 -0
  294. package/package.json +1 -1
@@ -17,5 +17,12 @@ export interface RelativeTimeProps extends RelativeTimeOptions, Omit<React.TimeH
17
17
  /** Show the exact date, time and zone in a Tooltip on hover and focus (the element becomes focusable). Default true. */
18
18
  tooltip?: boolean;
19
19
  }
20
- /** A moment as "3 minutes ago" in a <time>, refreshed on one shared timer, with its exact time on hand. Ticking isn't a change. */
20
+ /** A moment as "3 minutes ago" in a <time>, refreshed on one shared timer, with its exact time on hand. Ticking isn't a change.
21
+ * @example
22
+ * ```tsx
23
+ * import { RelativeTime } from 'altitude-design';
24
+ *
25
+ * <RelativeTime date={when} format="auto" />
26
+ * ```
27
+ */
21
28
  export declare function RelativeTime({ date, format, threshold, tense, locale, tooltip, className, title, style, ...rest }: RelativeTimeProps): React.JSX.Element;
@@ -28,7 +28,24 @@ export interface RemovalReceiptProps extends Omit<React.HTMLAttributes<HTMLEleme
28
28
  /** When mounted, the slot glides open from nothing (an item brought back from elsewhere), then settles. */
29
29
  arrive?: boolean;
30
30
  }
31
- /** An item's slot that keeps its place when the item leaves: the result shows where the item was, then the gap closes. */
31
+ /** An item's slot that keeps its place when the item leaves: the result shows where the item was, then the gap closes.
32
+ * @example
33
+ * ```tsx
34
+ * import { Button, RemovalReceipt, toast } from 'altitude-design';
35
+ *
36
+ * <RemovalReceipt as="li" key={hook.id} removed={!!receipt} pending={receipt?.pending} arrive={back === hook.id}
37
+ * title={receipt?.undoing ? `Restoring ${hook.name}…` : receipt?.pending ? `Removing ${hook.name}…` : `${hook.name} removed.`}
38
+ * action={receipt && (!receipt.pending || receipt.undoing) &&
39
+ * <Button size="sm" loading={!!receipt.undoing} aria-label={`Undo removing ${hook.name}`} onClick={() => undo(hook)}>Undo</Button>}
40
+ * onClosed={() => {
41
+ * put(hook.id, null); setHooks((list) => list.filter((h) => h.id !== hook.id));
42
+ * toast({ title: `${hook.name} removed.`, action: { label: 'Undo', onClick: () => restore(hook) } });
43
+ * }}>
44
+ * <div className="rr-body"><div className="rr-name">{hook.name}</div><div className="rr-url">{hook.url}</div></div>
45
+ * <Button size="sm" variant="ghost" aria-label={`Remove ${hook.name}`} onClick={() => remove(hook)}>Remove</Button>
46
+ * </RemovalReceipt>
47
+ * ```
48
+ */
32
49
  export declare function RemovalReceipt({ as, removed, pending, title, action, tone, icon, hold, onClosed, focusFallback, arrive, settle, className, style, children, ...rest }: RemovalReceiptProps): React.DetailedReactHTMLElement<{
33
50
  style: {
34
51
  accentColor?: import("csstype").Property.AccentColor | undefined;
@@ -33,6 +33,12 @@ export interface SaveBarProps {
33
33
  * Unsaved changes on a page, held above it until saved or discarded. A draft is something in your hand, so the bar
34
34
  * floats at level 3, docked to the bottom edge (below Sheets and Dialogs). Saving hovers as a pending write; a saved
35
35
  * draft lowers away while the fields settle; a failed save drops the bar to a trench and keeps the draft.
36
+ * @example
37
+ * ```tsx
38
+ * import { SaveBar } from 'altitude-design';
39
+ *
40
+ * <SaveBar record={record} />
41
+ * ```
36
42
  */
37
43
  export declare function SaveBar({ record, dirty: dirtyProp, saving: savingProp, error: errorProp, invalidCount: invalidProp, changedCount, onSave, onDiscard, delay, saveLabel, discardLabel, className }: SaveBarProps): React.JSX.Element;
38
44
  export {};
@@ -68,5 +68,17 @@ export interface SavedViewsProps {
68
68
  /**
69
69
  * Saved views as folder Tabs: the active tab and the table beneath it are one raised sheet. A view you've changed is a
70
70
  * draft: its tab carries a dot and "modified", and Save view, Save as new view and Reset appear beside the tabs.
71
+ * @example
72
+ * ```tsx
73
+ * import { DataTable, FilterBar, FormattedNumber, SavedViews } from 'altitude-design';
74
+ *
75
+ * <SavedViews views={views} aria-label="Deal views">
76
+ * <FilterBar fields={fields} {...views.filterBarProps} aria-label="Filter deals" />
77
+ * <DataTable aria-label="Deals" rows={deals} getRowId={(r) => r.id} {...views.tableProps} columnsMenu density="compact"
78
+ * relevance={(r) => (value.some((f) => f.value !== undefined) ? (matches(r, value, match) ? 'match' : 'miss') : undefined)}
79
+ * columns={[{ key: 'name', header: 'Deal', sortValue: (r) => r.name }, { key: 'stage', header: 'Stage', sortValue: (r) => r.stage }, { key: 'owner', header: 'Owner', sortValue: (r) => r.owner },
80
+ * { key: 'value', header: 'Value', align: 'end', sortValue: (r) => r.value, cell: (r) => <FormattedNumber value={r.value} format="currency" currency="USD" minorUnits={false} maximumFractionDigits={0} /> }]} />
81
+ * </SavedViews>
82
+ * ```
71
83
  */
72
84
  export declare function SavedViews({ views: v, children, 'aria-label': label, className }: SavedViewsProps): React.JSX.Element;
@@ -47,6 +47,14 @@ export interface ScatterChartProps {
47
47
  * customer. Dots are the record, so they lie on the plot: at least 8px, a data-* fill and a marker shape per group, a
48
48
  * 2px ring of the plot's own colour so overlapping dots stay apart. Never raised, never shaded. A few can be labelled
49
49
  * in ink with a 1px leader, and a least-squares trend drawn as a 1px ink-muted line.
50
+ * @example
51
+ * ```tsx
52
+ * import { ChartLegend, ChartLegendContent, ScatterChart } from 'altitude-design';
53
+ *
54
+ * <ScatterChart data={endpoints} x="kb" y="ms" group="service" id="name" name="name" label={(d) => (d.ms > 250 && d.kb < 300 ? d.name : null)} trend>
55
+ * <ChartLegend content={<ChartLegendContent toggle label="Services" />} />
56
+ * </ScatterChart>
57
+ * ```
50
58
  */
51
59
  export declare function ScatterChart(props: ScatterChartProps): React.JSX.Element;
52
60
  export declare namespace ScatterChart {
@@ -76,5 +76,26 @@ export interface ScheduleProps<T> {
76
76
  * A day or week of time whose events you handle directly. The grid is ground; events are live work items raised one
77
77
  * level, like BoardCards. Time opens into wells only while something could land in it (carrying or drawing), and the
78
78
  * slot under a carried event deepens to a trench the length of the event. A carried event floats at level 3, tilted.
79
+ * @example
80
+ * ```tsx
81
+ * import { Schedule } from 'altitude-design';
82
+ *
83
+ * <Schedule aria-label="Room bookings" view="workweek" date={date} onDateChange={setDate} now="2026-10-27T10:20"
84
+ * events={events} getKey={e => e.id} getStart={e => e.start} getEnd={e => e.end} getLabel={e => e.title}
85
+ * dayStart="08:00" dayEnd="18:00"
86
+ * renderEvent={e => <><strong>{e.title}</strong><small className="sch-room">{e.start.slice(11)}–{e.end.slice(11)} · {e.room}</small></>}
87
+ * heldBy={e => e.id === 'e6' ? { name: 'Ana', presence: 2 } : null}
88
+ * // Rooms close at 17:00 on Fridays.
89
+ * isUnavailable={({ start, end }) => start.slice(0, 10) === '2026-10-30' && end.slice(11) > '17:00'}
90
+ * onChange={async ({ id, start, end }) => {
91
+ * await schWait(300);
92
+ * // The demo service refuses Wednesday mornings: the rooms are being cleaned.
93
+ * if (start.slice(0, 10) === '2026-10-28' && start.slice(11) < '12:00') return { ok: false, error: 'Both rooms are being cleaned on Wednesday morning.' };
94
+ * setEvents(list => list.map(e => e.id === id ? { ...e, start, end } : e)); return { ok: true };
95
+ * }}
96
+ * onCreate={async ({ start, end, title }) => { await schWait(300); const event = { id: 'n' + ++seq.current, title, start, end, room: 'Room A' }; setEvents(list => [...list, event]); return { ok: true, value: event }; }}
97
+ * onRename={async (e, title) => { await schWait(200); setEvents(list => list.map(x => x.id === e.id ? { ...x, title } : x)); return { ok: true }; }}
98
+ * onRemove={e => setEvents(list => list.filter(x => x.id !== e.id))} />
99
+ * ```
79
100
  */
80
101
  export declare function Schedule<T>({ view: viewProp, narrowView, date, onDateChange, events, getKey, getStart, getEnd, getLabel, step, dayStart, dayEnd, hourHeight: hourHeightProp, weekStartsOn, defaultDuration, renderEvent, onCreate, onChange, onRename, onOpen, onRemove, heldBy, isUnavailable, now, locale, className, ...aria }: ScheduleProps<T>): React.JSX.Element;
@@ -29,5 +29,11 @@ export interface SecretFieldProps {
29
29
  * A key or token: shown once when created, masked afterwards. A new secret is an opening, something to take away: a
30
30
  * sunk well with copy beside it and a warning, until you say you've saved it; then it fills flush and masks. A stored
31
31
  * secret is settled: flush, masked to its tail, with reveal (if allowed), rotate and a held revoke.
32
+ * @example
33
+ * ```tsx
34
+ * import { SecretField } from 'altitude-design';
35
+ *
36
+ * <SecretField label="Secret key" value="ak_live_EXAMPLE0000demo4f2a" once onAcknowledge={() => setSaved(true)} />
37
+ * ```
32
38
  */
33
39
  export declare function SecretField({ label, noun, value, once, onAcknowledge, acknowledgeLabel, warning, prefix, maskedTail, onReveal, onRotate, onRevoke, className }: SecretFieldProps): React.JSX.Element;
@@ -84,6 +84,12 @@ export interface SelectProps extends FieldLike {
84
84
  * Choosing a value is filling a field, so the trigger is an opening built like Input: its back wall shows while it's
85
85
  * empty, its floor rises flush once a value is chosen, and it drops to trench depth when invalid. The list rises from
86
86
  * the field's edge at level 3 with one gliding highlight; the chosen option wears the Checkbox family's tick.
87
+ * @example
88
+ * ```tsx
89
+ * import { Select } from 'altitude-design';
90
+ *
91
+ * <Select items={regions} placeholder="Choose a region" name="region" />
92
+ * ```
87
93
  */
88
94
  export declare function Select({ value, defaultValue, onValueChange, items, children, id, name, required, disabled, invalid, size, placeholder, requiredMessage, defaultOpen, className, presentation, ...aria }: SelectProps): React.JSX.Element;
89
95
  export interface ComboboxProps extends FieldLike {
@@ -104,6 +110,12 @@ export interface ComboboxProps extends FieldLike {
104
110
  /**
105
111
  * An editable Select: type to filter, choose to fill. What you type is a query, not yet a value, so the field stays an
106
112
  * opening (its back wall showing) until an option is chosen; then its floor rises flush.
113
+ * @example
114
+ * ```tsx
115
+ * import { Combobox } from 'altitude-design';
116
+ *
117
+ * <Combobox items={people} value={who} onValueChange={setWho} placeholder="Search people" />
118
+ * ```
107
119
  */
108
120
  export declare function Combobox({ items, value, defaultValue, onValueChange, filter, empty, id, name, required, disabled, invalid, size, placeholder, defaultOpen, className, presentation, ...aria }: ComboboxProps): React.JSX.Element;
109
121
  export {};
@@ -7,5 +7,12 @@ export interface SeparatorProps extends Omit<React.HTMLAttributes<HTMLDivElement
7
7
  /** A word between two lines ("or"). It's read in the flow, so it's never decorative. */
8
8
  label?: React.ReactNode;
9
9
  }
10
- /** A divider on the ground: 1px of `line`, never `line-control` and never a shadow. role="separator" unless decorative. */
10
+ /** A divider on the ground: 1px of `line`, never `line-control` and never a shadow. role="separator" unless decorative.
11
+ * @example
12
+ * ```tsx
13
+ * import { Separator } from 'altitude-design';
14
+ *
15
+ * <Separator />
16
+ * ```
17
+ */
11
18
  export declare const Separator: React.ForwardRefExoticComponent<SeparatorProps & React.RefAttributes<HTMLDivElement>>;
@@ -17,6 +17,25 @@ export interface SheetProps extends Omit<React.HTMLAttributes<HTMLDivElement>, '
17
17
  /**
18
18
  * A large sheet laid over the page at level 4, anchored to an edge. It rises at that edge (16px of travel at most,
19
19
  * a fade, its shadow growing from elev-1 to elev-4) while the page recedes behind it; closing lifts it off.
20
+ * @example
21
+ * ```tsx
22
+ * import { Button, Input, Sheet, SheetDescription, SheetFooter, SheetHeader, SheetTitle } from 'altitude-design';
23
+ *
24
+ * <Sheet side="bottom" size="sm" trigger={<Button>Share</Button>}>
25
+ * <SheetHeader>
26
+ * <SheetTitle>Share Northwind</SheetTitle>
27
+ * <SheetDescription>
28
+ * Anyone with the link can view the latest deployment.
29
+ * </SheetDescription>
30
+ * </SheetHeader>
31
+ * <Input
32
+ * defaultValue="https://acme.dev/n/8dc01b2"
33
+ * readOnly={true}
34
+ * aria-label="Share link"
35
+ * />
36
+ * <SheetFooter><Button variant="primary">Copy link</Button></SheetFooter>
37
+ * </Sheet>
38
+ * ```
20
39
  */
21
40
  export declare function Sheet({ open, defaultOpen, onOpenChange, trigger, side, size, modal, dismissible, className, style, children, ...rest }: SheetProps): React.JSX.Element;
22
41
  /** The title block. It stays at the top while the sheet scrolls, and rises once content passes under it. */
@@ -41,6 +41,12 @@ export declare function describeTrend(vals: Array<number | null>, opts: {
41
41
  * record in the row it sits in, so it lies flush on the ground like everything a chart draws: a 1.5px stroke (or flat
42
42
  * bars), no axes, no gridlines, no readout, no fill under the line. Its height is the line height of the text beside
43
43
  * it. The last point wears a 4px marker. Colour is context (ink-muted) unless you say it's the series or a status.
44
+ * @example
45
+ * ```tsx
46
+ * import { Sparkline } from 'altitude-design';
47
+ *
48
+ * <Sparkline data={signups} x="day" y="signups" tone="data" width={120} aria-label="Signups, last 30 days" />
49
+ * ```
44
50
  */
45
51
  export declare function Sparkline({ data, ...props }: SparklineProps): React.JSX.Element;
46
52
  export {};
@@ -17,5 +17,12 @@ export interface SplitButtonProps extends Omit<ButtonProps, 'variant' | 'childre
17
17
  * One action with its alternatives: two faces on one slab, sharing one wall and parted by a line notch. The slab lifts
18
18
  * and presses as one whichever face is pointed at; the face under the pointer is tinted, so you can tell which action a
19
19
  * click takes without the faces splitting into two heights. Alt+Down on the action opens the menu.
20
+ * @example
21
+ * ```tsx
22
+ * import { SplitButton } from 'altitude-design';
23
+ *
24
+ * <SplitButton label="Save changes" menuLabel="More save options" onClick={() => setSaid('Saved.')}
25
+ * items={[{ label: 'Save as draft', onSelect: () => setSaid('Saved as a draft.') }, { label: 'Save and close', onSelect: () => setSaid('Saved and closed.') }]} />
26
+ * ```
20
27
  */
21
28
  export declare const SplitButton: React.ForwardRefExoticComponent<SplitButtonProps & React.RefAttributes<HTMLButtonElement>>;
@@ -41,6 +41,13 @@ export interface StatProps extends Omit<React.HTMLAttributes<HTMLElement>, 'chil
41
41
  * it sits on (a Card, or the page): no level of its own. A changed value cross-fades and the stat gets the afterglow,
42
42
  * within the attention budget; it never counts up. The change says its direction in words and with an arrow, and only
43
43
  * takes a status colour when you say which direction is good.
44
+ * @example
45
+ * ```tsx
46
+ * import { Stat } from 'altitude-design';
47
+ *
48
+ * <Stat label="Monthly recurring revenue" size="hero" value={mrr} format={usd.format} good="up"
49
+ * change={{ value: 0.042, vs: 'September', previous: 176800 }} help="Paid plans only, before refunds." />
50
+ * ```
44
51
  */
45
52
  export declare function Stat({ value, ...props }: StatProps): React.JSX.Element;
46
53
  export interface StatGroupProps extends React.HTMLAttributes<HTMLDivElement> {
@@ -22,5 +22,17 @@ export interface StepperProps extends Omit<React.OlHTMLAttributes<HTMLOListEleme
22
22
  * the record: flush plates with a stamped check. The current step is a raised slab with a wall. Steps to come are imprints
23
23
  * pressed into the page. Advancing presses the current step down into the record, stamps its check in, then raises the
24
24
  * next one out of its imprint.
25
+ * @example
26
+ * ```tsx
27
+ * import { Stepper } from 'altitude-design';
28
+ *
29
+ * <Stepper
30
+ * steps={steps}
31
+ * current={at}
32
+ * onStepChange={setAt}
33
+ * orientation="auto"
34
+ * aria-label="Workspace setup"
35
+ * />
36
+ * ```
25
37
  */
26
38
  export declare function Stepper({ steps, current, onStepChange, orientation: orientationProp, className, ...rest }: StepperProps): React.JSX.Element;
@@ -23,6 +23,16 @@ export interface SuggestionItemProps extends Omit<React.ButtonHTMLAttributes<HTM
23
23
  * never level 2, since the view's one primary is the composer's Send. Starters sit in an EmptyState; follow-ups sit
24
24
  * under an answer and cross-fade in once it's complete. More than four become one toolbar tab stop with arrow keys.
25
25
  * After choosing, focus goes to the composer (with the caret at the end, to edit what was filled).
26
+ * @example
27
+ * ```tsx
28
+ * import { Suggestion, Suggestions } from 'altitude-design';
29
+ *
30
+ * <Suggestions aria-label="Start with" onChoose={setDraft}>
31
+ * <Suggestion>Summarise last week's incidents</Suggestion>
32
+ * <Suggestion>Draft a release note</Suggestion>
33
+ * <Suggestion value="Which of my open pull requests are blocked, and by whom?">What's blocked?</Suggestion>
34
+ * </Suggestions>
35
+ * ```
26
36
  */
27
37
  export declare function Suggestions({ mode, onChoose, arrive, className, children, ...rest }: SuggestionsProps): React.JSX.Element;
28
38
  /** One suggestion: named by its text, plus "sends now" when choosing it sends. */
@@ -20,5 +20,13 @@ export interface SyncIndicatorProps {
20
20
  * Whether your work has reached the server, said in words on a flush Badge plate whose lamp relights when the state
21
21
  * changes: labels never lift, and a state change cross-fades rather than rises. The items it covers hover as pending
22
22
  * until they land, so the global and per-item signals agree. With a queue, the plate opens it (and lifts, because it acts).
23
+ * @example
24
+ * ```tsx
25
+ * import { Surface, SyncIndicator } from 'altitude-design';
26
+ *
27
+ * <SyncIndicator state={state} pending={waiting.length} lastSyncedAt={at} conflicts={1} onRetry={() => { setState('saving'); setTimeout(() => { setState('saved'); setAt(new Date()); }, 700); }}
28
+ * onOpenConflicts={() => setState('saved')}
29
+ * queue={waiting.length ? waiting.map((w, i) => <Surface key={i} status="pending" className="change">{w}</Surface>) : undefined} />
30
+ * ```
23
31
  */
24
32
  export declare function SyncIndicator({ state, pending, conflicts, lastSyncedAt, onRetry, onOpenConflicts, queue, announceEvery, className }: SyncIndicatorProps): React.JSX.Element;
@@ -52,6 +52,14 @@ export interface TagInputProps {
52
52
  * A field that holds a set of short values. The field is an opening; each tag is a label stamped flush into its floor
53
53
  * like a Badge plate, and once it holds a tag the floor rises flush (filled). The last tag, armed by a first Backspace,
54
54
  * lifts one level on a critical tint before a second Backspace takes it off. Suggestions are the Combobox's list.
55
+ * @example
56
+ * ```tsx
57
+ * import { TagInput } from 'altitude-design';
58
+ *
59
+ * <TagInput value={labels} onValueChange={setLabels} suggestions={TAG_LABELS} max={6} noun={['label', 'labels']}
60
+ * placeholder="Add a label" normalize={tag => tag.trim().toLowerCase()} validate={tag => tag.length <= 24 ? undefined : 'Use 24 characters or fewer.'}
61
+ * renderTag={tag => <>{TAG_DOTS[tag] && <span className="tags-dot" style={{ '--dot': TAG_DOTS[tag] }} aria-hidden="true" />}{tag}</>} />
62
+ * ```
55
63
  */
56
64
  export declare function TagInput({ value, defaultValue, onValueChange, suggestions, restrict, separators, max, validate, normalize, onAdd, onRemove, renderTag, noun, placeholder, id, name, disabled, required, invalid, size, className, ...aria }: TagInputProps): React.JSX.Element;
57
65
  export interface TagProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {
@@ -29,5 +29,11 @@ export interface TerminalProps extends Omit<React.HTMLAttributes<HTMLElement>, '
29
29
  * it isn't the record yet: a dashed rule down the left, "Running", and the output follows its end until you scroll up
30
30
  * (then "Jump to latest output" rises). It finishes with one afterglow and its exit in words: "Exited with 0 · 4.2s",
31
31
  * with a critical mark when non-zero (the edge stays neutral: #374), or "Stopped by you". stderr lines carry a critical mark and say "stderr".
32
+ * @example
33
+ * ```tsx
34
+ * import { Terminal } from 'altitude-design';
35
+ *
36
+ * <Terminal command="npm test" output={testRun} status="exited" exitCode={1} duration={4200} />
37
+ * ```
32
38
  */
33
39
  export declare function Terminal({ command, output, status, exitCode, duration, onStop, stopOnEscape, maxLines, ansi, copyable, className, ...rest }: TerminalProps): React.JSX.Element;
@@ -14,6 +14,22 @@ export interface ThreadListProps extends Omit<React.HTMLAttributes<HTMLDivElemen
14
14
  * pill), and each says its state in words. A working thread isn't pending (nothing you sent is in flight), so it
15
15
  * doesn't hover: a plate with a steady lamp says "Working". One that needs you says so on a caution plate, and is
16
16
  * announced once; finishing isn't announced. Rename in place, delete with a receipt and Undo.
17
+ * @example
18
+ * ```tsx
19
+ * import { ThreadList, ThreadListGroup, ThreadListItem, groupByDate } from 'altitude-design';
20
+ *
21
+ * <ThreadList searchable onSearch={setQ}>
22
+ * {groupByDate(shown, (t) => t.at, now).map((g) => (
23
+ * <ThreadListGroup key={g.label} label={g.label}>
24
+ * {g.threads.map((t) => (
25
+ * <ThreadListItem key={t.id} href={'#/c/' + t.id} title={t.title} updatedAt={t.at} status={t.status} needs={t.needs} unread={t.unread} current={t.id === at}
26
+ * onSelect={(e) => { e.preventDefault(); setAt(t.id); set(t.id, { unread: false }); }}
27
+ * onRename={(title) => set(t.id, { title })} onDelete={() => {}} onUndoDelete={() => {}} onDeleted={() => setThreads((ts) => ts.filter((x) => x.id !== t.id))} />
28
+ * ))}
29
+ * </ThreadListGroup>
30
+ * ))}
31
+ * </ThreadList>
32
+ * ```
17
33
  */
18
34
  export declare function ThreadList({ searchable, onSearch, searchLabel, className, children, ...rest }: ThreadListProps): React.JSX.Element;
19
35
  export interface ThreadListGroupProps {
@@ -29,5 +29,11 @@ export interface TimeInputProps {
29
29
  /**
30
30
  * A time of day, typed by segment like DatePicker's dates. It's an opening that fills only when every segment holds a
31
31
  * value: a partial time ("09:__") is still a hole. Hours, minutes and AM/PM are spinbuttons in a labelled group.
32
+ * @example
33
+ * ```tsx
34
+ * import { TimeInput } from 'altitude-design';
35
+ *
36
+ * <TimeInput value={report} onValueChange={setReport} step={15} hourCycle="h12" locale="en-US" timeZone="Europe/Berlin" />
37
+ * ```
32
38
  */
33
39
  export declare function TimeInput({ value, defaultValue, onValueChange, step, hourCycle, min, max, timeZone, locale, invalid, disabled, required, size, name, id, className, 'aria-describedby': describedBy, ...aria }: TimeInputProps): React.JSX.Element;
@@ -14,6 +14,15 @@ export interface TimelineProps extends React.HTMLAttributes<HTMLElement> {
14
14
  * Events in order on one ground line: the 1px ink-muted rule Stepper and the chart baseline stand on, turned upright.
15
15
  * Events are flush entries stamped onto it. A new event arrives lifted and settles; one you caused hovers until it
16
16
  * lands, or drops to a trench with Retry.
17
+ * @example
18
+ * ```tsx
19
+ * import { Timeline, TimelineItem } from 'altitude-design';
20
+ *
21
+ * <Timeline aria-label="Activity">
22
+ * {events.map((e) => <TimelineItem key={e.id} time={e.at} icon={<I d={icons[e.icon]} />} status={e.status} href={e.href} detail={e.detail}
23
+ * onRetry={() => setEvents((xs) => xs.map((x) => (x.id === e.id ? { ...x, status: 'committed' } : x)))}>{e.text}</TimelineItem>)}
24
+ * </Timeline>
25
+ * ```
17
26
  */
18
27
  export declare function Timeline({ groupBy, headingLevel, locale, className, children, 'aria-label': label, ...rest }: TimelineProps): React.JSX.Element;
19
28
  export interface TimelineItemProps {
@@ -10,6 +10,12 @@ export interface ToggleProps extends Omit<ButtonProps, 'variant' | 'onChange'> {
10
10
  /**
11
11
  * A button that stays on. On is a choice, so it's built like the Switch, not like a held press: the face is cut into a
12
12
  * shallow well with accent-soft poured in and the label in accent-ink. Its name never changes; aria-pressed says it.
13
+ * @example
14
+ * ```tsx
15
+ * import { Toggle } from 'altitude-design';
16
+ *
17
+ * <Toggle variant="secondary" pressed={archived} onPressedChange={setArchived}>Show archived</Toggle>
18
+ * ```
13
19
  */
14
20
  export declare const Toggle: React.ForwardRefExoticComponent<ToggleProps & React.RefAttributes<HTMLButtonElement>>;
15
21
  /** Set by Toolbar: a ToggleGroup inside one leaves the arrow keys to it, so the whole bar is one tab stop. */
@@ -16,6 +16,26 @@ export interface ToolbarProps extends React.HTMLAttributes<HTMLDivElement> {
16
16
  /**
17
17
  * A row of tools with one tab stop. The bar lies on the ground; its tools are ghosts that lift when pointed at, and
18
18
  * latched tools are Toggles. Arrow keys move between tools, Home and End jump, and returning lands where you left.
19
+ * @example
20
+ * ```tsx
21
+ * import { ToggleGroup, ToggleGroupItem, Toolbar, ToolbarButton, ToolbarGroup, ToolbarSeparator, ToolbarToggle } from 'altitude-design';
22
+ *
23
+ * <Toolbar aria-label="Formatting" overflow="menu" bordered className={className}>
24
+ * <ToggleGroup type="multiple" value={marks} onValueChange={setMarks} aria-label="Text style">
25
+ * <ToggleGroupItem value="bold" aria-label="Bold" square><b>B</b></ToggleGroupItem>
26
+ * <ToggleGroupItem value="italic" aria-label="Italic" square><i>I</i></ToggleGroupItem>
27
+ * <ToggleGroupItem value="underline" aria-label="Underline" square><u>U</u></ToggleGroupItem>
28
+ * </ToggleGroup>
29
+ * <ToolbarSeparator />
30
+ * <ToolbarGroup aria-label="Blocks">
31
+ * <ToolbarButton aria-label="Bulleted list" square><I d={list} /></ToolbarButton>
32
+ * <ToolbarToggle aria-label="Quote" square pressed={quoted} onPressedChange={setQuoted}><I d={quote} /></ToolbarToggle>
33
+ * <ToolbarButton aria-label="Code" square><I d={code} /></ToolbarButton>
34
+ * </ToolbarGroup>
35
+ * <ToolbarSeparator />
36
+ * <ToolbarButton aria-label="Insert link" square><I d={link} /></ToolbarButton>
37
+ * </Toolbar>
38
+ * ```
19
39
  */
20
40
  export declare function Toolbar({ orientation, overflow, bordered, className, children, ...rest }: ToolbarProps): React.JSX.Element;
21
41
  /** Tools that belong together, parted from the next group by a ToolbarSeparator. */
@@ -19,5 +19,15 @@ export interface TourProps {
19
19
  * A few steps pointing at parts of the interface, without taking it over. One step at a time floats at level 3 beside
20
20
  * its target, which is marked with a 2px accent-ink ring (a ring, not a lift: it may not be something you press). It
21
21
  * never dims the page (receding is the summit's privilege) and isn't modal: the target stays usable.
22
+ * @example
23
+ * ```tsx
24
+ * import { Tour } from 'altitude-design';
25
+ *
26
+ * <Tour open={open} onOpenChange={setOpen} onFinish={(how) => setSaid(how === 'done' ? 'Tour finished.' : 'Tour skipped.')} steps={[
27
+ * { target: '#tour-projects', title: 'Projects moved here', body: 'All your projects now live in one place.' },
28
+ * { target: '[data-tour="owner"]', title: 'Filter by owner', body: 'Type a name to see only their projects.' },
29
+ * { target: '[data-tour="new"]', title: 'Start something new', body: 'Projects can start from a template.' },
30
+ * ]} />
31
+ * ```
22
32
  */
23
33
  export declare function Tour({ steps, open, defaultOpen, onOpenChange, onFinish, onStepChange }: TourProps): React.JSX.Element | null;
@@ -7,6 +7,22 @@ export interface TraceProps extends React.OlHTMLAttributes<HTMLOListElement> {
7
7
  * The steps an agent takes, drawn as a vertical Stepper: done steps are flush in the record with a stamped check, the
8
8
  * running step stands raised on its wall, planned steps are imprints. No spinners. A failed step drops to a trench with
9
9
  * Retry; one waiting for approval holds a Confirmation. Steps that start without a plan arrive with the afterglow.
10
+ * @example
11
+ * ```tsx
12
+ * import { Confirmation, Trace, TraceReasoning, TraceStep, TraceToolCall } from 'altitude-design';
13
+ *
14
+ * <Trace aria-label="Agent run: answer refund question">
15
+ * {plan.map((s, i) => (
16
+ * <TraceStep key={s.id} title={s.title} status={status(i)} duration={i < at ? s.ms : undefined}
17
+ * error={failed && i === at ? 'The billing service timed out.' : undefined} onRetry={failed && i === at ? () => { setRetried(true); setFailed(false); } : undefined}>
18
+ * {s.tool && <TraceToolCall name={s.tool.name} input={s.tool.input} output={i < at ? s.tool.output ?? { plan: 'annual', startedDaysAgo: 20 } : undefined} />}
19
+ * {s.reasoning && i < at && <TraceReasoning duration={s.ms}>{s.reasoning}</TraceReasoning>}
20
+ * {s.approval && <Confirmation state={approval} title="Send reply to Jamie Lee" consequence="Jamie will get an email confirming a full refund of €240." approveLabel="Send reply" rejectLabel="Don't send" runningLabel="Sending…" doneLabel="Sent"
21
+ * onApprove={() => { setApproval('running'); setTimeout(() => setApproval('done'), 1000); }} onReject={() => setApproval('rejected')} />}
22
+ * </TraceStep>
23
+ * ))}
24
+ * </Trace>
25
+ * ```
10
26
  */
11
27
  export declare function Trace(props: TraceProps): React.JSX.Element;
12
28
  export interface TraceParallelProps {
@@ -66,6 +66,27 @@ export interface TreeProps<T> {
66
66
  onRemove?: (item: T) => void;
67
67
  className?: string;
68
68
  }
69
+ /**
70
+ * @example
71
+ * ```tsx
72
+ * import { Tree } from 'altitude-design';
73
+ *
74
+ * <Tree ref={tree} aria-label="Pages" items={pages} getKey={p => p.id} getLabel={p => p.title} getChildren={p => p.children} hasChildren={p => !!p.children}
75
+ * expanded={expanded} onExpandedChange={setExpanded} selected={selected} onSelectedChange={setSelected}
76
+ * renderItem={p => <><span className="tree-demo-icon" aria-hidden="true">{p.children ? <FolderIcon /> : <PageIcon />}</span>{p.title}</>}
77
+ * onRename={async (page, title) => { await treeWait(250); if (title.length > 40) return { ok: false, error: 'Use 40 characters or fewer.' }; setPages(list => treeRename(list, page.id, title.trim())); return { ok: true }; }}
78
+ * canDrop={({ to }) => to.parentId === null || !!treeFind(pages, to.parentId).page.children}
79
+ * onMove={async ({ id, to }) => {
80
+ * await treeWait(250);
81
+ * // The demo service refuses to move anything out of Archive.
82
+ * if (treeFind(pages, id).parent === 'archive' && to.parentId !== 'archive') return { ok: false, error: 'Archived pages can’t be moved out of Archive.' };
83
+ * setPages(list => { const page = treeFind(list, id).page; return treeInsert(treeRemove(list, id), to.parentId, to.index, page); });
84
+ * return { ok: true };
85
+ * }}
86
+ * onCreate={async ({ parentId, index, name }) => { await treeWait(250); const page = { id: 'new-' + ++seq.current, title: name }; setPages(list => treeInsert(list, parentId, index, page)); return { ok: true, value: page }; }}
87
+ * onRemove={page => setPages(list => treeRemove(list, page.id))} />
88
+ * ```
89
+ */
69
90
  export declare const Tree: <T>(props: TreeProps<T> & {
70
91
  ref?: React.Ref<TreeHandle>;
71
92
  }) => React.ReactElement;
@@ -26,6 +26,16 @@ export interface AgentFleetProps extends React.HTMLAttributes<HTMLDivElement> {
26
26
  * longest wait at the top, then the ones working, then the finished ones folded away. Rows are the record, flush, each
27
27
  * saying its state in words with a lamp that only repeats it; the one open beside the fleet is selected (tinted and
28
28
  * raised a level, as a table's selected row). An agent that starts needing you is announced once.
29
+ * @example
30
+ * ```tsx
31
+ * import { AgentFleet, AgentFleetGroup, summarizeFleet } from 'altitude-design';
32
+ *
33
+ * <AgentFleet now={now} summary={summarizeFleet(seed.map((a) => a.state))}>
34
+ * <AgentFleetGroup label="Needs you" empty="Nothing needs you.">{g.needsYou.map(row)}</AgentFleetGroup>
35
+ * <AgentFleetGroup label="Working">{g.working.map(row)}</AgentFleetGroup>
36
+ * <AgentFleetGroup label="Done" collapsible>{g.finished.map(row)}</AgentFleetGroup>
37
+ * </AgentFleet>
38
+ * ```
29
39
  */
30
40
  export declare function AgentFleet({ 'aria-label': label, now, summary, className, children, ...rest }: AgentFleetProps): React.JSX.Element;
31
41
  export interface AgentFleetGroupProps {
@@ -111,6 +121,18 @@ export interface AgentRequestsProps extends React.HTMLAttributes<HTMLElement> {
111
121
  * Every decision your agents are waiting on, in one queue, so you can answer them without opening
112
122
  * each agent: oldest first, because a wait costs the most the longer it runs. Each request asks for action, so it's a
113
123
  * raised card that arrives lifted and settles; nothing in it has been dispatched. A new one is announced once.
124
+ * @example
125
+ * ```tsx
126
+ * import { AgentRequest, AgentRequests, Button } from 'altitude-design';
127
+ *
128
+ * <AgentRequests now={now}>
129
+ * {left.map((r) => (
130
+ * <AgentRequest key={r.id} agent={r.agent} kind={r.kind} since={r.since} title={r.title} detail={r.detail} onOpen={() => {}}
131
+ * actions={<>{r.answers.map((a) => <Button key={a} size="sm" variant="secondary" onClick={() => done(r.id)}>{a}</Button>)}
132
+ * {r.decline && <Button size="sm" variant="ghost" onClick={() => done(r.id)}>{r.decline}</Button>}</>} />
133
+ * ))}
134
+ * </AgentRequests>
135
+ * ```
114
136
  */
115
137
  export declare function AgentRequests({ title, now, empty, className, children, ...rest }: AgentRequestsProps): React.JSX.Element;
116
138
  export interface AgentRequestProps {
@@ -161,6 +183,12 @@ export interface AgentLanesProps extends Omit<React.HTMLAttributes<HTMLElement>,
161
183
  * you is the bottleneck a fleet hides, so the takeaway says it first. A chart, so its marks are flat (Charts): the
162
184
  * stretches are equal-height bars on each lane's ground line, told apart by fill and pattern (waiting is hatched,
163
185
  * blocked an outline) and named in a legend in words; a 1px "Now" rule ends the record. A table says the same.
186
+ * @example
187
+ * ```tsx
188
+ * import { AgentLanes } from 'altitude-design';
189
+ *
190
+ * <AgentLanes lanes={lanes} start={t0} now={m(31)} selected={sel} onSelect={setSel} />
191
+ * ```
164
192
  */
165
193
  export declare function AgentLanes({ lanes, start, now, takeaway, 'aria-label': label, selected, onSelect, className, ...rest }: AgentLanesProps): React.JSX.Element;
166
194
  export {};
@@ -26,5 +26,12 @@ export interface AILabelProps {
26
26
  * "Drafted with AI" once a person has reviewed it), with no gradient and no glow: the light never moves. It acts, so it
27
27
  * lifts one level when pointed at and opens a Popover saying how the content was produced. Provenance stays on the
28
28
  * accepted record.
29
+ * @example
30
+ * ```tsx
31
+ * import { AILabel } from 'altitude-design';
32
+ *
33
+ * <AILabel subject="Summary" model="Opus 5.5" generatedAt={new Date(Date.now() - 4 * 60000)} confidence="Medium: two sources disagreed about the renewal date"
34
+ * sources={[{ title: 'Call with Jamie Lee, 28 Oct', url: '#/calls/28' }, { title: 'Contract v3.pdf', url: '#/files/contract' }]} />
35
+ * ```
29
36
  */
30
37
  export declare function AILabel({ subject, model, generatedAt, sources, confidence, reviewedBy, editedBy, children, className }: AILabelProps): React.JSX.Element;
@@ -78,6 +78,29 @@ export interface AppShellProps extends Omit<SidebarProviderProps, 'children'> {
78
78
  /**
79
79
  * The frame of an app: a sidebar of destinations, a top bar and the page, all on the ground and divided by lines.
80
80
  * The top bar rises when content passes under it. A skip link jumps to the page.
81
+ * @example
82
+ * ```tsx
83
+ * import { AppShell, Avatar, Button, DropdownMenu, Kbd, PageHeader, PageHeaderDescription, PageHeaderTitle, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem } from 'altitude-design';
84
+ *
85
+ * <AppShell
86
+ * sidebar={
87
+ * <Sidebar>
88
+ * <SidebarHeader>
89
+ * <DropdownMenu items={[{ label: 'Acme Inc.' }, { label: 'Northwind' }, { type: 'separator' }, { label: 'Create workspace' }]}
90
+ * trigger={<button className="as-ws"><Avatar name="Acme Inc." size={24} /><span className="alt-sidebar-text">Acme Inc.</span></button>} />
91
+ * </SidebarHeader>
92
+ * <SidebarContent>
93
+ * <SidebarGroup label="Workspace"><SidebarMenu>{item('inbox', 'Inbox', 4)}{item('projects', 'Projects')}{item('reports', 'Reports')}</SidebarMenu></SidebarGroup>
94
+ * <SidebarGroup label="Admin" collapsible><SidebarMenu>{item('members', 'Members')}{item('billing', 'Billing')}{item('settings', 'Settings')}</SidebarMenu></SidebarGroup>
95
+ * </SidebarContent>
96
+ * <SidebarFooter><SidebarMenu><SidebarMenuItem><SidebarMenuButton href="#/me" icon={<Avatar name="Maya Chen" size={20} />}>Maya Chen</SidebarMenuButton></SidebarMenuItem></SidebarMenu></SidebarFooter>
97
+ * </Sidebar>
98
+ * }
99
+ * topBar={<Button variant="secondary" size="sm" className="search">Search… <Kbd>⌘K</Kbd></Button>}>
100
+ * <PageHeader primary={<Button variant="primary">New message</Button>}><PageHeaderTitle>{at[0].toUpperCase() + at.slice(1)}</PageHeaderTitle><PageHeaderDescription>The sidebar's current destination sits on a raised pill that glides as you move. ⌘B collapses it to a rail.</PageHeaderDescription></PageHeader>
101
+ * <div className="rows">{Array.from({ length: 8 }, (_, i) => <div key={i} />)}</div>
102
+ * </AppShell>
103
+ * ```
81
104
  */
82
105
  export declare function AppShell({ sidebar, topBar, children, className, ...provider }: AppShellProps): React.JSX.Element;
83
106
  export {};
@@ -72,6 +72,14 @@ export interface AreaChartProps {
72
72
  * order (the order never changes, so a band never jumps), each parted from the one above by a 2px line in the plot's
73
73
  * own colour, with a 2px top line on the topmost. A single area is a flat data-1 fill at reduced opacity under a 2px
74
74
  * line. No gradient fill: the only face gradient in Altitude is the sheen, and it means "press it".
75
+ * @example
76
+ * ```tsx
77
+ * import { AreaChart, ChartLegend, ChartLegendContent } from 'altitude-design';
78
+ *
79
+ * <AreaChart data={week ? reqB : reqA} x="day" stack curve="monotone">
80
+ * <ChartLegend content={<ChartLegendContent toggle />} />
81
+ * </AreaChart>
82
+ * ```
75
83
  */
76
84
  export declare function AreaChart({ stack, curve, labels }: AreaChartProps): React.JSX.Element;
77
85
  export declare namespace AreaChart {