@tempoxyz/ds 0.3.11 → 0.3.13

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 (212) hide show
  1. package/README.md +7 -6
  2. package/dist/docs/AGENTS.md +8 -5
  3. package/dist/docs/index.md +143 -135
  4. package/dist/docs/marketing/introduction/getting-started.md +241 -0
  5. package/dist/docs/{components → product/components}/accordion.md +8 -8
  6. package/dist/docs/{components → product/components}/address-card.md +5 -5
  7. package/dist/docs/{components → product/components}/agent-logo.md +5 -5
  8. package/dist/docs/{components → product/components}/alert-dialog.md +11 -11
  9. package/dist/docs/{components → product/components}/alert.md +11 -11
  10. package/dist/docs/{components → product/components}/amount-input.md +13 -13
  11. package/dist/docs/{components → product/components}/amount.md +8 -8
  12. package/dist/docs/{components → product/components}/app-shell.md +13 -13
  13. package/dist/docs/{components → product/components}/asset-chip.md +11 -11
  14. package/dist/docs/{components → product/components}/autocomplete.md +10 -9
  15. package/dist/docs/{components → product/components}/avatar.md +8 -8
  16. package/dist/docs/{components → product/components}/badge.md +9 -9
  17. package/dist/docs/{components → product/components}/badged-logo.md +6 -6
  18. package/dist/docs/{components → product/components}/banner.md +8 -8
  19. package/dist/docs/{components → product/components}/bar-chart.md +7 -7
  20. package/dist/docs/{components → product/components}/breadcrumbs.md +8 -8
  21. package/dist/docs/{components → product/components}/button-group.md +8 -8
  22. package/dist/docs/{components → product/components}/button.md +17 -17
  23. package/dist/docs/{components → product/components}/calendar.md +8 -8
  24. package/dist/docs/{components → product/components}/callout.md +5 -5
  25. package/dist/docs/{components → product/components}/checkbox-group.md +13 -13
  26. package/dist/docs/{components → product/components}/checkbox.md +12 -12
  27. package/dist/docs/{components → product/components}/choice-group.md +14 -14
  28. package/dist/docs/{components → product/components}/choicebox.md +9 -9
  29. package/dist/docs/{components → product/components}/code.md +5 -5
  30. package/dist/docs/{components → product/components}/combobox.md +9 -9
  31. package/dist/docs/{components → product/components}/container.md +7 -7
  32. package/dist/docs/{components → product/components}/copy-button.md +13 -13
  33. package/dist/docs/{components → product/components}/date-picker.md +11 -11
  34. package/dist/docs/{components → product/components}/dialog.md +17 -17
  35. package/dist/docs/{components → product/components}/drawer.md +11 -11
  36. package/dist/docs/{components → product/components}/empty.md +9 -9
  37. package/dist/docs/{components → product/components}/field.md +14 -14
  38. package/dist/docs/{components → product/components}/fieldset.md +6 -6
  39. package/dist/docs/{components → product/components}/frame.md +9 -9
  40. package/dist/docs/{components → product/components}/gauge.md +7 -7
  41. package/dist/docs/{components → product/components}/get-started-visual.md +4 -4
  42. package/dist/docs/{components → product/components}/grid.md +7 -7
  43. package/dist/docs/{components → product/components}/hero-visual.md +4 -4
  44. package/dist/docs/{components → product/components}/hex.md +9 -9
  45. package/dist/docs/{components → product/components}/icon-tile.md +8 -8
  46. package/dist/docs/{components → product/components}/identicon.md +7 -7
  47. package/dist/docs/{components → product/components}/inline.md +7 -7
  48. package/dist/docs/{components → product/components}/inset.md +8 -8
  49. package/dist/docs/{components → product/components}/kbd.md +8 -8
  50. package/dist/docs/{components → product/components}/list-group.md +24 -24
  51. package/dist/docs/{components → product/components}/loading-dots.md +8 -8
  52. package/dist/docs/{components → product/components}/menu.md +14 -14
  53. package/dist/docs/{components → product/components}/native-select.md +7 -7
  54. package/dist/docs/{components → product/components}/network-logo.md +7 -7
  55. package/dist/docs/{components → product/components}/number-field.md +8 -8
  56. package/dist/docs/{components → product/components}/otp-field.md +9 -9
  57. package/dist/docs/{components → product/components}/pagination.md +8 -8
  58. package/dist/docs/{components → product/components}/popover.md +11 -11
  59. package/dist/docs/{components → product/components}/progress.md +10 -10
  60. package/dist/docs/{components → product/components}/qr.md +8 -8
  61. package/dist/docs/{components → product/components}/radio-group.md +10 -10
  62. package/dist/docs/{components → product/components}/secret-value.md +8 -8
  63. package/dist/docs/{components → product/components}/select.md +13 -13
  64. package/dist/docs/{components → product/components}/separator.md +7 -7
  65. package/dist/docs/{components → product/components}/sidebar-menu.md +11 -11
  66. package/dist/docs/{components → product/components}/skeleton.md +9 -9
  67. package/dist/docs/{components → product/components}/slider.md +8 -8
  68. package/dist/docs/{components → product/components}/snippet.md +10 -10
  69. package/dist/docs/{components → product/components}/spinner.md +12 -12
  70. package/dist/docs/{components → product/components}/split-bar.md +5 -5
  71. package/dist/docs/{components → product/components}/split-button.md +11 -11
  72. package/dist/docs/{components → product/components}/stack.md +8 -8
  73. package/dist/docs/{components → product/components}/status-chip.md +7 -7
  74. package/dist/docs/{components → product/components}/status-indicator.md +6 -6
  75. package/dist/docs/{components → product/components}/status-row.md +7 -7
  76. package/dist/docs/{components → product/components}/stepper.md +9 -9
  77. package/dist/docs/{components → product/components}/success-hero.md +5 -5
  78. package/dist/docs/{components → product/components}/surface.md +11 -11
  79. package/dist/docs/{components → product/components}/switch.md +11 -11
  80. package/dist/docs/{components → product/components}/table.md +16 -16
  81. package/dist/docs/{components → product/components}/tabs.md +11 -11
  82. package/dist/docs/{components → product/components}/tempo-logo.md +4 -4
  83. package/dist/docs/{components → product/components}/text-input.md +14 -14
  84. package/dist/docs/{components → product/components}/textarea.md +7 -7
  85. package/dist/docs/{components → product/components}/toast.md +11 -11
  86. package/dist/docs/{components → product/components}/token-logo.md +16 -16
  87. package/dist/docs/{components → product/components}/token.md +10 -10
  88. package/dist/docs/{components → product/components}/tooltip.md +11 -11
  89. package/dist/docs/{components → product/components}/verification-code.md +4 -4
  90. package/dist/docs/{components → product/components}/visual.md +5 -5
  91. package/dist/docs/product/components.md +203 -0
  92. package/dist/docs/{foundations → product/foundations}/accessibility.md +16 -16
  93. package/dist/docs/{foundations → product/foundations}/agents.md +17 -17
  94. package/dist/docs/{foundations → product/foundations}/color.md +7 -7
  95. package/dist/docs/{foundations → product/foundations}/content/tone.md +7 -7
  96. package/dist/docs/{foundations → product/foundations}/content/voice.md +2 -2
  97. package/dist/docs/{foundations → product/foundations}/content/writing-style.md +8 -8
  98. package/dist/docs/{foundations → product/foundations}/iconography.md +11 -11
  99. package/dist/docs/{foundations → product/foundations}/intent.md +28 -28
  100. package/dist/docs/{foundations → product/foundations}/layout.md +22 -22
  101. package/dist/docs/product/foundations/linter.md +496 -0
  102. package/dist/docs/{foundations → product/foundations}/motion.md +7 -7
  103. package/dist/docs/{foundations → product/foundations}/radius-and-padding.md +3 -3
  104. package/dist/docs/{foundations → product/foundations}/typography.md +4 -4
  105. package/dist/docs/{introduction → product/introduction}/faq.md +22 -21
  106. package/dist/docs/{introduction → product/introduction}/getting-started.md +4 -4
  107. package/dist/docs/{patterns → product/patterns}/blockchain-values.md +20 -20
  108. package/dist/docs/{patterns → product/patterns}/dashboards.md +28 -28
  109. package/dist/docs/{patterns → product/patterns}/destructive-actions.md +16 -16
  110. package/dist/docs/{patterns → product/patterns}/empty-states.md +14 -14
  111. package/dist/docs/{patterns → product/patterns}/errors-and-validation.md +23 -23
  112. package/dist/docs/{patterns → product/patterns}/feedback-and-status.md +31 -31
  113. package/dist/docs/{patterns → product/patterns}/forms.md +24 -24
  114. package/dist/docs/{patterns → product/patterns}/loading.md +19 -19
  115. package/dist/docs/{patterns → product/patterns}/navigation.md +23 -23
  116. package/dist/docs/{patterns → product/patterns}/payments.md +20 -20
  117. package/dist/docs/{patterns → product/patterns}/responsive-layout.md +23 -23
  118. package/dist/docs/{patterns → product/patterns}/tables-and-lists.md +19 -19
  119. package/dist/docs/{products → product/products}/tempo-console.md +12 -12
  120. package/dist/docs/{products → product/products}/tempo-performance.md +11 -11
  121. package/dist/docs/{products → product/products}/tempo-wallet.md +12 -12
  122. package/dist/marketing/index.d.ts +4 -0
  123. package/dist/marketing/index.d.ts.map +1 -0
  124. package/dist/marketing/index.js +4 -0
  125. package/dist/marketing/index.js.map +1 -0
  126. package/dist/marketing/index.js.zyzz.json +1 -0
  127. package/dist/marketing/vars.d.ts +907 -0
  128. package/dist/marketing/vars.d.ts.map +1 -0
  129. package/dist/marketing/vars.js +15 -0
  130. package/dist/marketing/vars.js.map +1 -0
  131. package/dist/marketing/vars.js.zyzz.json +1 -0
  132. package/dist/marketing/zyzz.config.d.ts +4512 -0
  133. package/dist/marketing/zyzz.config.d.ts.map +1 -0
  134. package/dist/marketing/zyzz.config.js +63 -0
  135. package/dist/marketing/zyzz.config.js.map +1 -0
  136. package/dist/marketing/zyzz.config.js.zyzz.json +1 -0
  137. package/dist/oxlint/index.d.ts +12 -1
  138. package/dist/oxlint/index.d.ts.map +1 -1
  139. package/dist/oxlint/index.js +39 -1
  140. package/dist/oxlint/index.js.map +1 -1
  141. package/dist/oxlint/internal/Docs.d.ts +9 -0
  142. package/dist/oxlint/internal/Docs.d.ts.map +1 -0
  143. package/dist/oxlint/internal/Docs.js +15 -0
  144. package/dist/oxlint/internal/Docs.js.map +1 -0
  145. package/dist/oxlint/internal/Imports.d.ts +1 -1
  146. package/dist/oxlint/internal/Imports.d.ts.map +1 -1
  147. package/dist/oxlint/internal/Imports.js +2 -0
  148. package/dist/oxlint/internal/Imports.js.map +1 -1
  149. package/dist/oxlint/internal/Styles.d.ts +40 -0
  150. package/dist/oxlint/internal/Styles.d.ts.map +1 -0
  151. package/dist/oxlint/internal/Styles.js +194 -0
  152. package/dist/oxlint/internal/Styles.js.map +1 -0
  153. package/dist/oxlint/internal/Tokens.d.ts +16 -0
  154. package/dist/oxlint/internal/Tokens.d.ts.map +1 -0
  155. package/dist/oxlint/internal/Tokens.js +39 -0
  156. package/dist/oxlint/internal/Tokens.js.map +1 -0
  157. package/dist/oxlint/rules/NoCrossSurface.d.ts +2 -2
  158. package/dist/oxlint/rules/NoCrossSurface.js +3 -3
  159. package/dist/oxlint/rules/NoCrossSurface.js.map +1 -1
  160. package/dist/oxlint/rules/NoCustomValues.d.ts +11 -0
  161. package/dist/oxlint/rules/NoCustomValues.d.ts.map +1 -0
  162. package/dist/oxlint/rules/NoCustomValues.js +150 -0
  163. package/dist/oxlint/rules/NoCustomValues.js.map +1 -0
  164. package/dist/oxlint/rules/NoSingleKeyShortcuts.d.ts +11 -0
  165. package/dist/oxlint/rules/NoSingleKeyShortcuts.d.ts.map +1 -0
  166. package/dist/oxlint/rules/NoSingleKeyShortcuts.js +158 -0
  167. package/dist/oxlint/rules/NoSingleKeyShortcuts.js.map +1 -0
  168. package/dist/oxlint/rules/PreferComponent.d.ts +3 -2
  169. package/dist/oxlint/rules/PreferComponent.d.ts.map +1 -1
  170. package/dist/oxlint/rules/PreferComponent.js +11 -4
  171. package/dist/oxlint/rules/PreferComponent.js.map +1 -1
  172. package/dist/oxlint/rules/PreferLayout.d.ts +9 -0
  173. package/dist/oxlint/rules/PreferLayout.d.ts.map +1 -0
  174. package/dist/oxlint/rules/PreferLayout.js +90 -0
  175. package/dist/oxlint/rules/PreferLayout.js.map +1 -0
  176. package/dist/oxlint/rules/PreferProgress.d.ts +9 -0
  177. package/dist/oxlint/rules/PreferProgress.d.ts.map +1 -0
  178. package/dist/oxlint/rules/PreferProgress.js +43 -0
  179. package/dist/oxlint/rules/PreferProgress.js.map +1 -0
  180. package/dist/oxlint/rules/PreferSurface.d.ts +9 -0
  181. package/dist/oxlint/rules/PreferSurface.d.ts.map +1 -0
  182. package/dist/oxlint/rules/PreferSurface.js +55 -0
  183. package/dist/oxlint/rules/PreferSurface.js.map +1 -0
  184. package/dist/oxlint/rules/RequireAccessibleName.d.ts.map +1 -1
  185. package/dist/oxlint/rules/RequireAccessibleName.js +3 -1
  186. package/dist/oxlint/rules/RequireAccessibleName.js.map +1 -1
  187. package/dist/oxlint/rules/RequireScrollRegion.d.ts +11 -0
  188. package/dist/oxlint/rules/RequireScrollRegion.d.ts.map +1 -0
  189. package/dist/oxlint/rules/RequireScrollRegion.js +71 -0
  190. package/dist/oxlint/rules/RequireScrollRegion.js.map +1 -0
  191. package/dist/web/icons/index.js.zyzz.json +1 -0
  192. package/package.json +6 -1
  193. package/src/marketing/README.md +21 -0
  194. package/src/marketing/index.ts +3 -0
  195. package/src/marketing/vars.ts +751 -0
  196. package/src/marketing/zyzz.config.ts +376 -0
  197. package/src/oxlint/index.ts +40 -1
  198. package/src/oxlint/internal/Docs.ts +18 -0
  199. package/src/oxlint/internal/Imports.ts +2 -1
  200. package/src/oxlint/internal/Styles.ts +240 -0
  201. package/src/oxlint/internal/Tokens.ts +43 -0
  202. package/src/oxlint/rules/NoCrossSurface.ts +3 -3
  203. package/src/oxlint/rules/NoCustomValues.ts +170 -0
  204. package/src/oxlint/rules/NoSingleKeyShortcuts.ts +190 -0
  205. package/src/oxlint/rules/PreferComponent.ts +11 -4
  206. package/src/oxlint/rules/PreferLayout.ts +96 -0
  207. package/src/oxlint/rules/PreferProgress.ts +49 -0
  208. package/src/oxlint/rules/PreferSurface.ts +70 -0
  209. package/src/oxlint/rules/RequireAccessibleName.ts +3 -1
  210. package/src/oxlint/rules/RequireScrollRegion.ts +92 -0
  211. package/dist/docs/components.md +0 -203
  212. package/dist/docs/foundations/linter.md +0 -296
@@ -6,12 +6,12 @@ Move between product areas, page views, and nested pages in one shared frame.
6
6
 
7
7
  Navigation shows the current location, the possible destinations, and the way back. Tempo products share one navigation model with four levels. Each level has its own component, so a control always leads to another area, another view, or one level up.
8
8
 
9
- * **Product Area (SidebarMenu):** [AppShell](/docs/components/app-shell) with [SidebarMenu](/docs/components/sidebar-menu) lists the main areas and marks the current one.
9
+ * **Product Area (SidebarMenu):** [AppShell](../components/app-shell.md) with [SidebarMenu](../components/sidebar-menu.md) lists the main areas and marks the current one.
10
10
  * **Page (AppShell.Title):** The page title names the current page and serves as its main heading.
11
- * **Depth (Breadcrumbs):** [Breadcrumbs](/docs/components/breadcrumbs) show the position of a nested page and lead back up.
12
- * **View (Tabs):** [Tabs](/docs/components/tabs) switch between views of the same content without leaving the page.
11
+ * **Depth (Breadcrumbs):** [Breadcrumbs](../components/breadcrumbs.md) show the position of a nested page and lead back up.
12
+ * **View (Tabs):** [Tabs](../components/tabs.md) switch between views of the same content without leaving the page.
13
13
 
14
- [Pagination](/docs/components/pagination) moves through a long list, and [Stepper](/docs/components/stepper) marks the position in a fixed sequence of steps, such as account setup.
14
+ [Pagination](../components/pagination.md) moves through a long list, and [Stepper](../components/stepper.md) marks the position in a fixed sequence of steps, such as account setup.
15
15
 
16
16
  ## Structure
17
17
 
@@ -133,11 +133,11 @@ namespace styles {
133
133
 
134
134
  [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/Patterns/ConsoleNavigation.tsx)
135
135
 
136
- This reference layout uses [AppShell](/docs/components/app-shell), [SidebarMenu](/docs/components/sidebar-menu), [Breadcrumbs](/docs/components/breadcrumbs), and [Tabs](/docs/components/tabs). On a wide display, open the preview full screen for the sticky sidebar.
136
+ This reference layout uses [AppShell](../components/app-shell.md), [SidebarMenu](../components/sidebar-menu.md), [Breadcrumbs](../components/breadcrumbs.md), and [Tabs](../components/tabs.md). On a wide display, open the preview full screen for the sticky sidebar.
137
137
 
138
138
  ## Product Navigation
139
139
 
140
- Put every product area in the [SidebarMenu](/docs/components/sidebar-menu) inside `AppShell.Sidebar`, in the same order on every page.
140
+ Put every product area in the [SidebarMenu](../components/sidebar-menu.md) inside `AppShell.Sidebar`, in the same order on every page.
141
141
 
142
142
  * **One Active Item (active):** Mark only the area of the current page. It sets `aria-current="page"`.
143
143
  * **Consistent Icons:** Items do not wrap. Give each one a short label and an icon, never a mix with and without.
@@ -228,10 +228,10 @@ Below 1024px, `AppShell.Sidebar` renders as a modal drawer from the right edge,
228
228
 
229
229
  ## Tabs
230
230
 
231
- Use [Tabs](/docs/components/tabs) when a page shows several views of one object, such as the Overview, Usage, and Settings of an API key.
231
+ Use [Tabs](../components/tabs.md) when a page shows several views of one object, such as the Overview, Usage, and Settings of an API key.
232
232
 
233
- * **Another page:** Use [SidebarMenu](/docs/components/sidebar-menu) or links.
234
- * **A mode of the same content:** Use [ChoiceGroup](/docs/components/choice-group), such as for the time range of a chart.
233
+ * **Another page:** Use [SidebarMenu](../components/sidebar-menu.md) or links.
234
+ * **A mode of the same content:** Use [ChoiceGroup](../components/choice-group.md), such as for the time range of a chart.
235
235
  * **Tabs inside tabs:** Never nest them. Split the view, or move the inner level to its own page.
236
236
 
237
237
  If tabs overflow one line, the list scrolls horizontally. Set `expand` on `Tabs.List` to stretch tabs across a narrow column.
@@ -288,7 +288,7 @@ export function Demo() {
288
288
 
289
289
  ## Breadcrumbs
290
290
 
291
- Use [Breadcrumbs](/docs/components/breadcrumbs) on pages below a product area, such as a key under API Keys or an invoice inside Payments. Start with the product area, follow the hierarchy rather than the visit history, and mark the last item `current`.
291
+ Use [Breadcrumbs](../components/breadcrumbs.md) on pages below a product area, such as a key under API Keys or an invoice inside Payments. Start with the product area, follow the hierarchy rather than the visit history, and mark the last item `current`.
292
292
 
293
293
  **Do:** Show the path from the product area down to the current page.
294
294
 
@@ -332,27 +332,27 @@ export function Demo() {
332
332
  }
333
333
  ```
334
334
 
335
- If the full path would wrap on a narrow screen, show only the parent page as a back link, such as a secondary `Button.Link` from [Button](/docs/components/button) with an arrow icon and the parent's name.
335
+ If the full path would wrap on a narrow screen, show only the parent page as a back link, such as a secondary `Button.Link` from [Button](../components/button.md) with an arrow icon and the parent's name.
336
336
 
337
337
  ## Pagination
338
338
 
339
- Use [Pagination](/docs/components/pagination) for long lists that load page by page and need a stable position, such as transaction history. [Tables and Lists](/docs/patterns/tables-and-lists#paginate-or-load-more) covers when to page and when to load more.
339
+ Use [Pagination](../components/pagination.md) for long lists that load page by page and need a stable position, such as transaction history. [Tables and Lists](tables-and-lists.md#paginate-or-load-more) covers when to page and when to load more.
340
340
 
341
341
  ## Best Practices
342
342
 
343
343
  * **Location in the URL:** Reflect the selected tab and page in the URL, so links and the back button work.
344
- * **Links for Navigation (Button.Link):** Use a link to change pages. Put commands, such as Log out, in a [Menu](/docs/components/menu) in the sidebar footer.
344
+ * **Links for Navigation (Button.Link):** Use a link to change pages. Put commands, such as Log out, in a [Menu](../components/menu.md) in the sidebar footer.
345
345
 
346
346
  ## States
347
347
 
348
348
  * **Loading and Error:** Navigation renders at once and works. Only the main column shows placeholders and errors.
349
- * **Empty:** A product area with no content still appears in the sidebar. Its page shows an [empty state](/docs/patterns/empty-states).
349
+ * **Empty:** A product area with no content still appears in the sidebar. Its page shows an [empty state](empty-states.md).
350
350
  * **Disabled:** Leave out unavailable areas. Disable a tab only if its view does not apply yet, and state the reason.
351
351
  * **Success:** After a flow such as key creation, open the page of the new item with its area marked active.
352
352
 
353
353
  ## Content
354
354
 
355
- Name destinations with nouns, such as Activity, not verbs, such as View activity. Use the same name in the sidebar, the page title, and the breadcrumb. [Writing Style](/docs/foundations/content/writing-style) covers capitalization.
355
+ Name destinations with nouns, such as Activity, not verbs, such as View activity. Use the same name in the sidebar, the page title, and the breadcrumb. [Writing Style](../foundations/content/writing-style.md) covers capitalization.
356
356
 
357
357
  ## Accessibility
358
358
 
@@ -364,34 +364,34 @@ Name destinations with nouns, such as Activity, not verbs, such as View activity
364
364
 
365
365
  ## Related
366
366
 
367
- [AppShell](/docs/components/app-shell)
367
+ [AppShell](../components/app-shell.md)
368
368
 
369
369
  Use for the application frame.
370
370
 
371
- [SidebarMenu](/docs/components/sidebar-menu)
371
+ [SidebarMenu](../components/sidebar-menu.md)
372
372
 
373
373
  Use for links to product areas.
374
374
 
375
- [Tabs](/docs/components/tabs)
375
+ [Tabs](../components/tabs.md)
376
376
 
377
377
  Use for views of a page.
378
378
 
379
- [Breadcrumbs](/docs/components/breadcrumbs)
379
+ [Breadcrumbs](../components/breadcrumbs.md)
380
380
 
381
381
  Use for nested pages.
382
382
 
383
- [Pagination](/docs/components/pagination)
383
+ [Pagination](../components/pagination.md)
384
384
 
385
385
  Use for long lists.
386
386
 
387
- [Stepper](/docs/components/stepper)
387
+ [Stepper](../components/stepper.md)
388
388
 
389
389
  Use for fixed sequences of steps.
390
390
 
391
- [Responsive Layout](/docs/patterns/responsive-layout)
391
+ [Responsive Layout](responsive-layout.md)
392
392
 
393
393
  Covers breakpoints.
394
394
 
395
- [Tempo Console](/docs/products/tempo-console)
395
+ [Tempo Console](../products/tempo-console.md)
396
396
 
397
397
  Covers the console's pages.
@@ -4,14 +4,14 @@ Build send, receive, and deposit flows, from the amount to the receipt.
4
4
 
5
5
  ## Overview
6
6
 
7
- A payment moves money and cannot be undone. Each step shows exactly what will happen, catches mistakes before confirmation, and reports the outcome plainly. [Tempo Wallet](/docs/products/tempo-wallet) (wallet.tempo.xyz) uses three flows: Send, Receive, and Add funds. [Blockchain Values](/docs/patterns/blockchain-values) covers how each amount, address, and hash in these flows is formatted.
7
+ A payment moves money and cannot be undone. Each step shows exactly what will happen, catches mistakes before confirmation, and reports the outcome plainly. [Tempo Wallet](../products/tempo-wallet.md) (wallet.tempo.xyz) uses three flows: Send, Receive, and Add funds. [Blockchain Values](blockchain-values.md) covers how each amount, address, and hash in these flows is formatted.
8
8
 
9
9
  > [!NOTE]
10
10
  > The live examples are reference layouts built from library components and `style`, not shipped components. They simulate the network, so no funds move.
11
11
 
12
12
  ## Recommended Structure
13
13
 
14
- Run each flow in focus: a centered column about 28rem wide with global navigation hidden, or a [Dialog](/docs/components/dialog), which becomes a bottom sheet on narrow screens. Mark progress with a [Stepper](/docs/components/stepper).
14
+ Run each flow in focus: a centered column about 28rem wide with global navigation hidden, or a [Dialog](../components/dialog.md), which becomes a bottom sheet on narrow screens. Mark progress with a [Stepper](../components/stepper.md).
15
15
 
16
16
  * **Details (1):** The asset, the amount, and the recipient.
17
17
  * **Review (2):** The full payment, with the confirm action.
@@ -266,23 +266,23 @@ namespace styles {
266
266
 
267
267
  ## Enter the Amount
268
268
 
269
- Place the [AmountInput](/docs/components/amount-input) first, in a [Field](/docs/components/field), with the `Field.Label` and `Field.Description` inside `AmountInput.Root`.
269
+ Place the [AmountInput](../components/amount-input.md) first, in a [Field](../components/field.md), with the `Field.Label` and `Field.Description` inside `AmountInput.Root`.
270
270
 
271
- * **Unit:** Name the token beside the amount with a [Token](/docs/components/token), such as PathUSD.
271
+ * **Unit:** Name the token beside the amount with a [Token](../components/token.md), such as PathUSD.
272
272
  * **Balance:** Show the available balance in `Field.Description`, such as Balance: 1,240.50 PathUSD.
273
273
  * **Limit:** Check the amount against the balance on blur and on submit, and name the limit in the error, such as Enter an amount up to 1,240.50 PathUSD.
274
- * **Several tokens:** Put a [Select](/docs/components/select) above the amount, with a [TokenLogo](/docs/components/token-logo) icon in `Select.ItemPrefix` and the balance in `Select.ItemSuffix`. Default to the token used last.
274
+ * **Several tokens:** Put a [Select](../components/select.md) above the amount, with a [TokenLogo](../components/token-logo.md) icon in `Select.ItemPrefix` and the balance in `Select.ItemSuffix`. Default to the token used last.
275
275
 
276
276
  ## Enter the Recipient
277
277
 
278
- * **Address input:** Use a [TextInput](/docs/components/text-input) labelled Recipient, with `autoComplete="off"`, spell check off, and a `0x…` placeholder.
278
+ * **Address input:** Use a [TextInput](../components/text-input.md) labelled Recipient, with `autoComplete="off"`, spell check off, and a `0x…` placeholder.
279
279
  * **Format check:** On blur, trim pasted spaces and check for `0x` plus 40 hex characters. Explain a bad address under the field.
280
- * **Saved contacts:** If the address matches a saved contact, show the name beside it, as [Blockchain Values](/docs/patterns/blockchain-values#pair-addresses-with-names) describes.
281
- * **New addresses:** If the account has never sent to the address, show a `warning` [Alert](/docs/components/alert), such as You haven't sent to this address before.
280
+ * **Saved contacts:** If the address matches a saved contact, show the name beside it, as [Blockchain Values](blockchain-values.md#pair-addresses-with-names) describes.
281
+ * **New addresses:** If the account has never sent to the address, show a `warning` [Alert](../components/alert.md), such as You haven't sent to this address before.
282
282
 
283
283
  ## Review Before Confirming
284
284
 
285
- The review step repeats every detail of the payment in [ListGroup](/docs/components/list-group), with a `ListGroup.Label` for each.
285
+ The review step repeats every detail of the payment in [ListGroup](../components/list-group.md), with a `ListGroup.Label` for each.
286
286
 
287
287
  * **Amount (size=lg):** The amount and token, shown large as the main value of the review.
288
288
  * **To (Full address):** The full address and any known contact name. Ask people to check all of it against its source.
@@ -356,7 +356,7 @@ namespace styles {
356
356
 
357
357
  ### Confirm With One Large Action
358
358
 
359
- End the review with one full-width `primary` [Button](/docs/components/button) with `size="large"`, labelled with the verb and the amount, such as Send 250.00 PathUSD or Confirm and send. Put a `text` Edit payment action beneath it. Set `loading` while the wallet signs and submits, so the button shows a spinner and blocks a second press.
359
+ End the review with one full-width `primary` [Button](../components/button.md) with `size="large"`, labelled with the verb and the amount, such as Send 250.00 PathUSD or Confirm and send. Put a `text` Edit payment action beneath it. Set `loading` while the wallet signs and submits, so the button shows a spinner and blocks a second press.
360
360
 
361
361
  **Do:** Use one large, specific confirm action with a quiet way back.
362
362
 
@@ -532,7 +532,7 @@ Announce the outcome once through a polite live region, separate from the busy c
532
532
 
533
533
  ## Keep a Receipt
534
534
 
535
- A receipt records the payment in full, including values that the review step shortened: amount, fee, total, sender, recipient, the date with seconds and time zone, block, and transaction hash. Show the status in a [Badge](/docs/components/badge), such as Confirmed. [Blockchain Values](/docs/patterns/blockchain-values) covers the copy buttons and explorer links on each value.
535
+ A receipt records the payment in full, including values that the review step shortened: amount, fee, total, sender, recipient, the date with seconds and time zone, block, and transaction hash. Show the status in a [Badge](../components/badge.md), such as Confirmed. [Blockchain Values](blockchain-values.md) covers the copy buttons and explorer links on each value.
536
536
 
537
537
  ```tsx
538
538
  import { Amount, Badge, Button, Hex, ListGroup, style, Surface } from '@tempoxyz/ds'
@@ -616,7 +616,7 @@ namespace styles {
616
616
 
617
617
  ## Receive and Deposit
618
618
 
619
- Receive shows the address two ways: a [Qr](/docs/components/qr) for scanning, and a [Hex](/docs/components/hex) with `variant="filled"` across the full width for copying. Encode exactly the visible address. Name the code by purpose, such as Wallet address QR code, and state what the address accepts, such as Send stablecoins on Tempo to this address.
619
+ Receive shows the address two ways: a [Qr](../components/qr.md) for scanning, and a [Hex](../components/hex.md) with `variant="filled"` across the full width for copying. Encode exactly the visible address. Name the code by purpose, such as Wallet address QR code, and state what the address accepts, such as Send stablecoins on Tempo to this address.
620
620
 
621
621
  ```tsx
622
622
  import { Alert, Hex, Qr, style, Surface } from '@tempoxyz/ds'
@@ -721,7 +721,7 @@ export function Demo() {
721
721
  }
722
722
  ```
723
723
 
724
- Add funds starts with the method. Use `Choicebox.RadioGroup` from [Choicebox](/docs/components/choicebox), with a title and arrival time for each option, such as Bank transfer or Debit card. A crypto deposit then shows the receive layout, with the minimum deposit and the accepted tokens.
724
+ Add funds starts with the method. Use `Choicebox.RadioGroup` from [Choicebox](../components/choicebox.md), with a title and arrival time for each option, such as Bank transfer or Debit card. A crypto deposit then shows the receive layout, with the minimum deposit and the accepted tokens.
725
725
 
726
726
  ## Content
727
727
 
@@ -736,30 +736,30 @@ Add funds starts with the method. Use `Choicebox.RadioGroup` from [Choicebox](/d
736
736
 
737
737
  ## Related
738
738
 
739
- [AmountInput](/docs/components/amount-input)
739
+ [AmountInput](../components/amount-input.md)
740
740
 
741
741
  Use for entering amounts.
742
742
 
743
- [ListGroup](/docs/components/list-group)
743
+ [ListGroup](../components/list-group.md)
744
744
 
745
745
  Use for the review and receipt.
746
746
 
747
- [Qr](/docs/components/qr)
747
+ [Qr](../components/qr.md)
748
748
 
749
749
  Use for receiving funds.
750
750
 
751
- [Blockchain Values](/docs/patterns/blockchain-values)
751
+ [Blockchain Values](blockchain-values.md)
752
752
 
753
753
  Covers addresses, hashes, and precision.
754
754
 
755
- [Errors and Validation](/docs/patterns/errors-and-validation)
755
+ [Errors and Validation](errors-and-validation.md)
756
756
 
757
757
  Covers error messages.
758
758
 
759
- [Destructive Actions](/docs/patterns/destructive-actions)
759
+ [Destructive Actions](destructive-actions.md)
760
760
 
761
761
  Covers irreversible actions.
762
762
 
763
- [Tempo Wallet](/docs/products/tempo-wallet)
763
+ [Tempo Wallet](../products/tempo-wallet.md)
764
764
 
765
765
  Covers the wallet's flows.
@@ -4,9 +4,9 @@ Adapt layouts from a 320px phone to a wide desktop with shared breakpoints.
4
4
 
5
5
  ## Overview
6
6
 
7
- Components change at fixed widths. For example, [AppShell](/docs/components/app-shell) moves its sidebar into a drawer below 1024px. Change page layouts at the same widths, so the page and its components switch together.
7
+ Components change at fixed widths. For example, [AppShell](../components/app-shell.md) moves its sidebar into a drawer below 1024px. Change page layouts at the same widths, so the page and its components switch together.
8
8
 
9
- [Container](/docs/components/container) sets the content width, [AppShell](/docs/components/app-shell) holds the sidebar and content column, and [Grid](/docs/components/grid), [Stack](/docs/components/stack), and [Inline](/docs/components/inline) arrange the content inside.
9
+ [Container](../components/container.md) sets the content width, [AppShell](../components/app-shell.md) holds the sidebar and content column, and [Grid](../components/grid.md), [Stack](../components/stack.md), and [Inline](../components/inline.md) arrange the content inside.
10
10
 
11
11
  > [!NOTE]
12
12
  > The live layouts on this page are reference layouts built from library components and `style`. They are not shipped components. Copy and adapt them in your app.
@@ -46,14 +46,14 @@ namespace styles {
46
46
 
47
47
  ## Content Widths
48
48
 
49
- [Container](/docs/components/container) centers content at a maximum width and adds side gutters of 24px, or 32px from 768px. Use the narrowest size that fits the content.
49
+ [Container](../components/container.md) centers content at a maximum width and adds side gutters of 24px, or 32px from 768px. Use the narrowest size that fits the content.
50
50
 
51
51
  * **Narrow (48rem (768px)):** Settings, forms, focused flows, and long text.
52
52
  * **Medium (64rem (1024px)):** List and detail pages, and tables with a few columns.
53
53
  * **Wide (80rem (1280px)):** The default, for dashboards and wide tables.
54
54
  * **Full (None):** Viewport-wide content, such as a block explorer feed.
55
55
 
56
- Inside [AppShell](/docs/components/app-shell), `AppShell.Main` limits the column to 1024px and adds its own padding. Set `gutter={false}` on a nested [Container](/docs/components/container), or the padding doubles. Outside [AppShell](/docs/components/app-shell), render the page landmark through [Container](/docs/components/container) with `render={<main />}`.
56
+ Inside [AppShell](../components/app-shell.md), `AppShell.Main` limits the column to 1024px and adds its own padding. Set `gutter={false}` on a nested [Container](../components/container.md), or the padding doubles. Outside [AppShell](../components/app-shell.md), render the page landmark through [Container](../components/container.md) with `render={<main />}`.
57
57
 
58
58
  ## Page Structures
59
59
 
@@ -61,7 +61,7 @@ Most Tempo pages use one of four structures. Each changes only at the shared bre
61
61
 
62
62
  ### App Shell With Content
63
63
 
64
- Use [AppShell](/docs/components/app-shell) for products with persistent navigation, such as [Tempo Console](/docs/products/tempo-console). [Navigation](/docs/patterns/navigation#move-the-sidebar-into-a-drawer-below-1024px) covers its drawer below 1024px. From 1024px, the sidebar is sticky and 16.25rem wide, which `--sidebar-width` overrides. Set `align="start"` on `AppShell.Root` so a dashboard fills the width beside the sidebar.
64
+ Use [AppShell](../components/app-shell.md) for products with persistent navigation, such as [Tempo Console](../products/tempo-console.md). [Navigation](navigation.md#move-the-sidebar-into-a-drawer-below-1024px) covers its drawer below 1024px. From 1024px, the sidebar is sticky and 16.25rem wide, which `--sidebar-width` overrides. Set `align="start"` on `AppShell.Root` so a dashboard fills the width beside the sidebar.
65
65
 
66
66
  ### List and Detail
67
67
 
@@ -228,7 +228,7 @@ namespace styles {
228
228
 
229
229
  ### Settings
230
230
 
231
- Settings stay in one `narrow` column at every width, never several columns. Put each section of related settings in a [Surface](/docs/components/surface), with a `Surface.Title` and [ListGroup](/docs/components/list-group) or [Field](/docs/components/field) inside.
231
+ Settings stay in one `narrow` column at every width, never several columns. Put each section of related settings in a [Surface](../components/surface.md), with a `Surface.Title` and [ListGroup](../components/list-group.md) or [Field](../components/field.md) inside.
232
232
 
233
233
  ```tsx
234
234
  import { Container, Field, Inset, ListGroup, style, Surface, Switch } from '@tempoxyz/ds'
@@ -287,7 +287,7 @@ namespace styles {
287
287
 
288
288
  ### Focused Flow
289
289
 
290
- Send, deposit, and onboarding flows remove global navigation and center one task in a column of about 28rem (`maxWidth: '448'`). Show progress with [Stepper](/docs/components/stepper). Keep the actions at the end of the form.
290
+ Send, deposit, and onboarding flows remove global navigation and center one task in a column of about 28rem (`maxWidth: '448'`). Show progress with [Stepper](../components/stepper.md). Keep the actions at the end of the form.
291
291
 
292
292
  ```tsx
293
293
  import { AmountInput, Button, Choicebox, Field, Inset, Stepper, style, Token } from '@tempoxyz/ds'
@@ -481,11 +481,11 @@ namespace styles {
481
481
 
482
482
  Many layouts adapt without a media query:
483
483
 
484
- * **[Grid](/docs/components/grid) with `fit`:** Fits as many columns as the width allows.
485
- * **[Inline](/docs/components/inline) with `wrap`:** Moves items to a new line.
486
- * **[Hex](/docs/components/hex):** Truncates to the available space.
484
+ * **[Grid](../components/grid.md) with `fit`:** Fits as many columns as the width allows.
485
+ * **[Inline](../components/inline.md) with `wrap`:** Moves items to a new line.
486
+ * **[Hex](../components/hex.md):** Truncates to the available space.
487
487
 
488
- **Do:** Use [Grid](/docs/components/grid) with `fit`, so tiles drop to fewer columns as space runs out.
488
+ **Do:** Use [Grid](../components/grid.md) with `fit`, so tiles drop to fewer columns as space runs out.
489
489
 
490
490
  ```tsx
491
491
  /**
@@ -590,7 +590,7 @@ namespace styles {
590
590
 
591
591
  ### Change Structure Only at Shared Breakpoints
592
592
 
593
- Switch between one and two panes at 1024px, the same width as [AppShell](/docs/components/app-shell). Components do not change at one-off widths, so the page drifts out of step with them.
593
+ Switch between one and two panes at 1024px, the same width as [AppShell](../components/app-shell.md). Components do not change at one-off widths, so the page drifts out of step with them.
594
594
 
595
595
  **Do:** Split into two panes at 1024px, where the app shell also changes.
596
596
 
@@ -767,9 +767,9 @@ namespace styles {
767
767
 
768
768
  ### Keep Features and Order the Same
769
769
 
770
- A narrow screen shows the same content and actions as a wide one, in a different arrangement. Move secondary actions into a [Menu](/docs/components/menu) instead of removing them.
770
+ A narrow screen shows the same content and actions as a wide one, in a different arrangement. Move secondary actions into a [Menu](../components/menu.md) instead of removing them.
771
771
 
772
- **Do:** Keep secondary actions behind a [Menu](/docs/components/menu) button on narrow screens.
772
+ **Do:** Keep secondary actions behind a [Menu](../components/menu.md) button on narrow screens.
773
773
 
774
774
  ```tsx
775
775
  /**
@@ -839,7 +839,7 @@ namespace styles {
839
839
 
840
840
  ### Scroll Wide Content Inside Its Own Region
841
841
 
842
- Tables, code, and charts that cannot reflow scroll horizontally inside their own container. The page itself never scrolls sideways. To stack table rows instead, see [Tables and Lists](/docs/patterns/tables-and-lists#below-640px).
842
+ Tables, code, and charts that cannot reflow scroll horizontally inside their own container. The page itself never scrolls sideways. To stack table rows instead, see [Tables and Lists](tables-and-lists.md#below-640px).
843
843
 
844
844
  **Do:** Scroll a wide table inside its card, and keep the page at the viewport width.
845
845
 
@@ -956,7 +956,7 @@ namespace styles {
956
956
  ## States
957
957
 
958
958
  * **Nothing Selected (Empty):** From 1024px, select the first record or show an empty detail pane, such as Select a payment.
959
- * **Loading (Skeleton):** Render a [Skeleton](/docs/components/skeleton) in the shape of each pane, so the layout does not jump.
959
+ * **Loading (Skeleton):** Render a [Skeleton](../components/skeleton.md) in the shape of each pane, so the layout does not jump.
960
960
 
961
961
  ## Accessibility
962
962
 
@@ -968,30 +968,30 @@ namespace styles {
968
968
 
969
969
  ## Related
970
970
 
971
- [Container](/docs/components/container)
971
+ [Container](../components/container.md)
972
972
 
973
973
  Use for content width and gutters.
974
974
 
975
- [Grid](/docs/components/grid)
975
+ [Grid](../components/grid.md)
976
976
 
977
977
  Use for collections that reflow.
978
978
 
979
- [AppShell](/docs/components/app-shell)
979
+ [AppShell](../components/app-shell.md)
980
980
 
981
981
  Use for the sidebar and content column.
982
982
 
983
- [Layout](/docs/foundations/layout)
983
+ [Layout](../foundations/layout.md)
984
984
 
985
985
  Covers spacing and alignment.
986
986
 
987
- [Navigation](/docs/patterns/navigation)
987
+ [Navigation](navigation.md)
988
988
 
989
989
  Covers moving between pages.
990
990
 
991
- [Tables and Lists](/docs/patterns/tables-and-lists)
991
+ [Tables and Lists](tables-and-lists.md)
992
992
 
993
993
  Covers tables on narrow screens.
994
994
 
995
- [Dashboards](/docs/patterns/dashboards)
995
+ [Dashboards](dashboards.md)
996
996
 
997
997
  Covers metric grids that reflow.
@@ -15,7 +15,7 @@ Tempo collections include wallet activity, scheduled payouts, API keys, webhooks
15
15
  * **ListGroup (ListGroup):** The key-value details of one record, settings, and navigation lists.
16
16
  * **Stacked List Items:** Items with a main line and a few attributes, such as activity. Also narrow-screen tables.
17
17
 
18
- **Do:** Use [ListGroup](/docs/components/list-group) with `ListGroup.Label` for the fields of one
18
+ **Do:** Use [ListGroup](../components/list-group.md) with `ListGroup.Label` for the fields of one
19
19
  record.
20
20
 
21
21
  ```tsx
@@ -106,7 +106,7 @@ namespace styles {
106
106
 
107
107
  ## Recommended Structure
108
108
 
109
- Place a table in a [Surface](/docs/components/surface), with a `Surface.Header` above it for the title and actions. A direct child `table` bleeds into the padding of the surface, so row fills and dividers reach its edges.
109
+ Place a table in a [Surface](../components/surface.md), with a `Surface.Header` above it for the title and actions. A direct child `table` bleeds into the padding of the surface, so row fills and dividers reach its edges.
110
110
 
111
111
  * **Header (1):** The title of the collection, filters, and actions such as Export CSV.
112
112
  * **Table (2):** The table itself, named by a caption or by `aria-labelledby`.
@@ -304,7 +304,7 @@ namespace styles {
304
304
 
305
305
  ## Select Rows and Act in Bulk
306
306
 
307
- If an action applies to several records at once, such as pausing payouts or revoking keys, add a leading column of small [Checkbox](/docs/components/checkbox) controls. Select rows in the example to show the bulk actions.
307
+ If an action applies to several records at once, such as pausing payouts or revoking keys, add a leading column of small [Checkbox](../components/checkbox.md) controls. Select rows in the example to show the bulk actions.
308
308
 
309
309
  ```tsx
310
310
  import { Amount, Badge, Button, Checkbox, Inset, style, Surface, Table } from '@tempoxyz/ds'
@@ -522,11 +522,11 @@ namespace styles {
522
522
  * **Selection Count:** Show the count, such as 2 selected, beside the bulk actions and a Clear action.
523
523
  * **Select All Matching:** If more pages exist, state that the header selects this page only. Offer to select all matches.
524
524
 
525
- Confirm a destructive bulk action in an [AlertDialog](/docs/components/alert-dialog) that names the count, such as Cancel 2 payouts, as [Destructive Actions](/docs/patterns/destructive-actions) describes.
525
+ Confirm a destructive bulk action in an [AlertDialog](../components/alert-dialog.md) that names the count, such as Cancel 2 payouts, as [Destructive Actions](destructive-actions.md) describes.
526
526
 
527
527
  ## Sort Columns
528
528
 
529
- [Table](/docs/components/table) has no built-in sorting. Put a `button` inside each sortable `Table.HeaderCell`. Set `aria-sort` to `ascending` or `descending` on the sorted column.
529
+ [Table](../components/table.md) has no built-in sorting. Put a `button` inside each sortable `Table.HeaderCell`. Set `aria-sort` to `ascending` or `descending` on the sorted column.
530
530
 
531
531
  * **Direction:** Show the sort direction with an arrow, and mark other sortable columns with the sort icon.
532
532
  * **Default order:** Sort activity newest first. A first click on a numeric column sorts largest first.
@@ -546,9 +546,9 @@ Below 640px, show Previous and Next with a Page 1 of 3 label between them, as in
546
546
 
547
547
  * **Small (32px):** For dense consoles and dashboards with many rows. Pair with small buttons.
548
548
  * **Medium (40px):** The default size, for most tables in consoles and settings.
549
- * **Large (56px):** For touch-first screens and rows with two lines or an [Avatar](/docs/components/avatar).
549
+ * **Large (56px):** For touch-first screens and rows with two lines or an [Avatar](../components/avatar.md).
550
550
 
551
- Use one density per table. [ListGroup](/docs/components/list-group) keep one 36px height for key-value facts.
551
+ Use one density per table. [ListGroup](../components/list-group.md) keep one 36px height for key-value facts.
552
552
 
553
553
  ## Keep Headers in View
554
554
 
@@ -698,8 +698,8 @@ namespace styles {
698
698
  [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/Patterns/TablesStates.tsx)
699
699
 
700
700
  * **Loading (aria-busy):** Keep the headers and show three to five placeholder rows. Mark the table busy.
701
- * **Empty (Empty):** If no records exist yet, offer the action that creates the first one. [Empty States](/docs/patterns/empty-states) covers the variants.
702
- * **Error (negative):** Show a negative [Alert](/docs/components/alert) above the table with Retry. Keep rows that already loaded.
701
+ * **Empty (Empty):** If no records exist yet, offer the action that creates the first one. [Empty States](empty-states.md) covers the variants.
702
+ * **Error (negative):** Show a negative [Alert](../components/alert.md) above the table with Retry. Keep rows that already loaded.
703
703
  * **Updating:** Keep the current rows while a sort or filter loads. Replace them when the new rows arrive.
704
704
 
705
705
  **Do:** Explain an empty result in a row that spans every column, with a way out.
@@ -914,13 +914,13 @@ namespace styles {
914
914
 
915
915
  * **Switch Layouts (sm):** Render a table from this breakpoint and a list below it. Only the visible layout stays in the accessibility tree.
916
916
  * **Same Records and Actions:** Keep records, order, and actions the same in both layouts. Put columns that do not fit in the detail view.
917
- * **Scroll to Compare (tabIndex=0):** Keep a table only to compare values across columns, and [scroll it inside its own region](/docs/patterns/responsive-layout#scroll-wide-content-inside-its-own-region).
917
+ * **Scroll to Compare (tabIndex=0):** Keep a table only to compare values across columns, and [scroll it inside its own region](responsive-layout.md#scroll-wide-content-inside-its-own-region).
918
918
 
919
919
  ## Content
920
920
 
921
921
  * **Headers:** Put the unit of a metric in its header, such as p99 (ms). Keep the token on each amount, because one table can mix assets.
922
922
  * **Missing values:** Show a missing value as a word, such as None or Never, instead of an empty cell.
923
- * **Dates:** Format dates the same way in every row, as [Blockchain Values](/docs/patterns/blockchain-values#timestamps) describes, and keep each date on one line.
923
+ * **Dates:** Format dates the same way in every row, as [Blockchain Values](blockchain-values.md#timestamps) describes, and keep each date on one line.
924
924
 
925
925
  ## Accessibility
926
926
 
@@ -931,34 +931,34 @@ namespace styles {
931
931
 
932
932
  ## Related
933
933
 
934
- [Table](/docs/components/table)
934
+ [Table](../components/table.md)
935
935
 
936
936
  Use for tabular data.
937
937
 
938
- [ListGroup](/docs/components/list-group)
938
+ [ListGroup](../components/list-group.md)
939
939
 
940
940
  Use for details, settings, and stacked items.
941
941
 
942
- [Pagination](/docs/components/pagination)
942
+ [Pagination](../components/pagination.md)
943
943
 
944
944
  Use for paged lists.
945
945
 
946
- [Checkbox](/docs/components/checkbox)
946
+ [Checkbox](../components/checkbox.md)
947
947
 
948
948
  Use for row selection.
949
949
 
950
- [Responsive Layout](/docs/patterns/responsive-layout)
950
+ [Responsive Layout](responsive-layout.md)
951
951
 
952
952
  Covers the shared breakpoints.
953
953
 
954
- [Loading](/docs/patterns/loading)
954
+ [Loading](loading.md)
955
955
 
956
956
  Covers skeletons and spinners.
957
957
 
958
- [Empty States](/docs/patterns/empty-states)
958
+ [Empty States](empty-states.md)
959
959
 
960
960
  Covers first use and no results.
961
961
 
962
- [Destructive Actions](/docs/patterns/destructive-actions)
962
+ [Destructive Actions](destructive-actions.md)
963
963
 
964
964
  Covers confirming bulk actions.
@@ -383,9 +383,9 @@ API Keys lists the keys of the selected environment, for the whole organization
383
383
 
384
384
  Patterns:
385
385
 
386
- * [Tables and Lists](/docs/patterns/tables-and-lists) for the key table, its filter, and row actions.
387
- * [Destructive Actions](/docs/patterns/destructive-actions) for the revoke confirmation.
388
- * [Empty States](/docs/patterns/empty-states) for a project or environment with no keys.
386
+ * [Tables and Lists](../patterns/tables-and-lists.md) for the key table, its filter, and row actions.
387
+ * [Destructive Actions](../patterns/destructive-actions.md) for the revoke confirmation.
388
+ * [Empty States](../patterns/empty-states.md) for a project or environment with no keys.
389
389
 
390
390
  ### Create Key
391
391
 
@@ -587,8 +587,8 @@ New key asks for a project, a name, and scopes. The console shows the token only
587
587
 
588
588
  Patterns:
589
589
 
590
- * [Forms](/docs/patterns/forms) for labels, descriptions, and the submit action.
591
- * [Errors and Validation](/docs/patterns/errors-and-validation) for the missing name and the empty scope set.
590
+ * [Forms](../patterns/forms.md) for labels, descriptions, and the submit action.
591
+ * [Errors and Validation](../patterns/errors-and-validation.md) for the missing name and the empty scope set.
592
592
 
593
593
  ### Webhooks
594
594
 
@@ -604,7 +604,7 @@ To build one, reuse these parts:
604
604
 
605
605
  ### Show the Key's Identity, Never the Secret
606
606
 
607
- After creation, identify a key by its prefix and last four characters, such as `tempo:sk:…a91c`. Show the full token once, masked in [SecretValue](/docs/components/secret-value), and tell people to copy it into a secret manager now.
607
+ After creation, identify a key by its prefix and last four characters, such as `tempo:sk:…a91c`. Show the full token once, masked in [SecretValue](../components/secret-value.md), and tell people to copy it into a secret manager now.
608
608
 
609
609
  **Do:** Say what happens when the reveal state closes: You can't view this key again.
610
610
 
@@ -646,26 +646,26 @@ The library has no part for these needs yet. Before you add one, propose it as a
646
646
 
647
647
  ## Related
648
648
 
649
- [Tables and Lists](/docs/patterns/tables-and-lists)
649
+ [Tables and Lists](../patterns/tables-and-lists.md)
650
650
 
651
651
  Covers key and member tables.
652
652
 
653
- [Destructive Actions](/docs/patterns/destructive-actions)
653
+ [Destructive Actions](../patterns/destructive-actions.md)
654
654
 
655
655
  Covers revoking keys and removing members.
656
656
 
657
- [AppShell](/docs/components/app-shell)
657
+ [AppShell](../components/app-shell.md)
658
658
 
659
659
  Use for the console frame.
660
660
 
661
- [SecretValue](/docs/components/secret-value)
661
+ [SecretValue](../components/secret-value.md)
662
662
 
663
663
  Use for one-time key reveal.
664
664
 
665
- [Table](/docs/components/table)
665
+ [Table](../components/table.md)
666
666
 
667
667
  Use for key lists.
668
668
 
669
- [Banner](/docs/components/banner)
669
+ [Banner](../components/banner.md)
670
670
 
671
671
  Use for the sandbox notice.