@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.
- package/README.md +7 -6
- package/dist/docs/AGENTS.md +8 -5
- package/dist/docs/index.md +143 -135
- package/dist/docs/marketing/introduction/getting-started.md +241 -0
- package/dist/docs/{components → product/components}/accordion.md +8 -8
- package/dist/docs/{components → product/components}/address-card.md +5 -5
- package/dist/docs/{components → product/components}/agent-logo.md +5 -5
- package/dist/docs/{components → product/components}/alert-dialog.md +11 -11
- package/dist/docs/{components → product/components}/alert.md +11 -11
- package/dist/docs/{components → product/components}/amount-input.md +13 -13
- package/dist/docs/{components → product/components}/amount.md +8 -8
- package/dist/docs/{components → product/components}/app-shell.md +13 -13
- package/dist/docs/{components → product/components}/asset-chip.md +11 -11
- package/dist/docs/{components → product/components}/autocomplete.md +10 -9
- package/dist/docs/{components → product/components}/avatar.md +8 -8
- package/dist/docs/{components → product/components}/badge.md +9 -9
- package/dist/docs/{components → product/components}/badged-logo.md +6 -6
- package/dist/docs/{components → product/components}/banner.md +8 -8
- package/dist/docs/{components → product/components}/bar-chart.md +7 -7
- package/dist/docs/{components → product/components}/breadcrumbs.md +8 -8
- package/dist/docs/{components → product/components}/button-group.md +8 -8
- package/dist/docs/{components → product/components}/button.md +17 -17
- package/dist/docs/{components → product/components}/calendar.md +8 -8
- package/dist/docs/{components → product/components}/callout.md +5 -5
- package/dist/docs/{components → product/components}/checkbox-group.md +13 -13
- package/dist/docs/{components → product/components}/checkbox.md +12 -12
- package/dist/docs/{components → product/components}/choice-group.md +14 -14
- package/dist/docs/{components → product/components}/choicebox.md +9 -9
- package/dist/docs/{components → product/components}/code.md +5 -5
- package/dist/docs/{components → product/components}/combobox.md +9 -9
- package/dist/docs/{components → product/components}/container.md +7 -7
- package/dist/docs/{components → product/components}/copy-button.md +13 -13
- package/dist/docs/{components → product/components}/date-picker.md +11 -11
- package/dist/docs/{components → product/components}/dialog.md +17 -17
- package/dist/docs/{components → product/components}/drawer.md +11 -11
- package/dist/docs/{components → product/components}/empty.md +9 -9
- package/dist/docs/{components → product/components}/field.md +14 -14
- package/dist/docs/{components → product/components}/fieldset.md +6 -6
- package/dist/docs/{components → product/components}/frame.md +9 -9
- package/dist/docs/{components → product/components}/gauge.md +7 -7
- package/dist/docs/{components → product/components}/get-started-visual.md +4 -4
- package/dist/docs/{components → product/components}/grid.md +7 -7
- package/dist/docs/{components → product/components}/hero-visual.md +4 -4
- package/dist/docs/{components → product/components}/hex.md +9 -9
- package/dist/docs/{components → product/components}/icon-tile.md +8 -8
- package/dist/docs/{components → product/components}/identicon.md +7 -7
- package/dist/docs/{components → product/components}/inline.md +7 -7
- package/dist/docs/{components → product/components}/inset.md +8 -8
- package/dist/docs/{components → product/components}/kbd.md +8 -8
- package/dist/docs/{components → product/components}/list-group.md +24 -24
- package/dist/docs/{components → product/components}/loading-dots.md +8 -8
- package/dist/docs/{components → product/components}/menu.md +14 -14
- package/dist/docs/{components → product/components}/native-select.md +7 -7
- package/dist/docs/{components → product/components}/network-logo.md +7 -7
- package/dist/docs/{components → product/components}/number-field.md +8 -8
- package/dist/docs/{components → product/components}/otp-field.md +9 -9
- package/dist/docs/{components → product/components}/pagination.md +8 -8
- package/dist/docs/{components → product/components}/popover.md +11 -11
- package/dist/docs/{components → product/components}/progress.md +10 -10
- package/dist/docs/{components → product/components}/qr.md +8 -8
- package/dist/docs/{components → product/components}/radio-group.md +10 -10
- package/dist/docs/{components → product/components}/secret-value.md +8 -8
- package/dist/docs/{components → product/components}/select.md +13 -13
- package/dist/docs/{components → product/components}/separator.md +7 -7
- package/dist/docs/{components → product/components}/sidebar-menu.md +11 -11
- package/dist/docs/{components → product/components}/skeleton.md +9 -9
- package/dist/docs/{components → product/components}/slider.md +8 -8
- package/dist/docs/{components → product/components}/snippet.md +10 -10
- package/dist/docs/{components → product/components}/spinner.md +12 -12
- package/dist/docs/{components → product/components}/split-bar.md +5 -5
- package/dist/docs/{components → product/components}/split-button.md +11 -11
- package/dist/docs/{components → product/components}/stack.md +8 -8
- package/dist/docs/{components → product/components}/status-chip.md +7 -7
- package/dist/docs/{components → product/components}/status-indicator.md +6 -6
- package/dist/docs/{components → product/components}/status-row.md +7 -7
- package/dist/docs/{components → product/components}/stepper.md +9 -9
- package/dist/docs/{components → product/components}/success-hero.md +5 -5
- package/dist/docs/{components → product/components}/surface.md +11 -11
- package/dist/docs/{components → product/components}/switch.md +11 -11
- package/dist/docs/{components → product/components}/table.md +16 -16
- package/dist/docs/{components → product/components}/tabs.md +11 -11
- package/dist/docs/{components → product/components}/tempo-logo.md +4 -4
- package/dist/docs/{components → product/components}/text-input.md +14 -14
- package/dist/docs/{components → product/components}/textarea.md +7 -7
- package/dist/docs/{components → product/components}/toast.md +11 -11
- package/dist/docs/{components → product/components}/token-logo.md +16 -16
- package/dist/docs/{components → product/components}/token.md +10 -10
- package/dist/docs/{components → product/components}/tooltip.md +11 -11
- package/dist/docs/{components → product/components}/verification-code.md +4 -4
- package/dist/docs/{components → product/components}/visual.md +5 -5
- package/dist/docs/product/components.md +203 -0
- package/dist/docs/{foundations → product/foundations}/accessibility.md +16 -16
- package/dist/docs/{foundations → product/foundations}/agents.md +17 -17
- package/dist/docs/{foundations → product/foundations}/color.md +7 -7
- package/dist/docs/{foundations → product/foundations}/content/tone.md +7 -7
- package/dist/docs/{foundations → product/foundations}/content/voice.md +2 -2
- package/dist/docs/{foundations → product/foundations}/content/writing-style.md +8 -8
- package/dist/docs/{foundations → product/foundations}/iconography.md +11 -11
- package/dist/docs/{foundations → product/foundations}/intent.md +28 -28
- package/dist/docs/{foundations → product/foundations}/layout.md +22 -22
- package/dist/docs/product/foundations/linter.md +496 -0
- package/dist/docs/{foundations → product/foundations}/motion.md +7 -7
- package/dist/docs/{foundations → product/foundations}/radius-and-padding.md +3 -3
- package/dist/docs/{foundations → product/foundations}/typography.md +4 -4
- package/dist/docs/{introduction → product/introduction}/faq.md +22 -21
- package/dist/docs/{introduction → product/introduction}/getting-started.md +4 -4
- package/dist/docs/{patterns → product/patterns}/blockchain-values.md +20 -20
- package/dist/docs/{patterns → product/patterns}/dashboards.md +28 -28
- package/dist/docs/{patterns → product/patterns}/destructive-actions.md +16 -16
- package/dist/docs/{patterns → product/patterns}/empty-states.md +14 -14
- package/dist/docs/{patterns → product/patterns}/errors-and-validation.md +23 -23
- package/dist/docs/{patterns → product/patterns}/feedback-and-status.md +31 -31
- package/dist/docs/{patterns → product/patterns}/forms.md +24 -24
- package/dist/docs/{patterns → product/patterns}/loading.md +19 -19
- package/dist/docs/{patterns → product/patterns}/navigation.md +23 -23
- package/dist/docs/{patterns → product/patterns}/payments.md +20 -20
- package/dist/docs/{patterns → product/patterns}/responsive-layout.md +23 -23
- package/dist/docs/{patterns → product/patterns}/tables-and-lists.md +19 -19
- package/dist/docs/{products → product/products}/tempo-console.md +12 -12
- package/dist/docs/{products → product/products}/tempo-performance.md +11 -11
- package/dist/docs/{products → product/products}/tempo-wallet.md +12 -12
- package/dist/marketing/index.d.ts +4 -0
- package/dist/marketing/index.d.ts.map +1 -0
- package/dist/marketing/index.js +4 -0
- package/dist/marketing/index.js.map +1 -0
- package/dist/marketing/index.js.zyzz.json +1 -0
- package/dist/marketing/vars.d.ts +907 -0
- package/dist/marketing/vars.d.ts.map +1 -0
- package/dist/marketing/vars.js +15 -0
- package/dist/marketing/vars.js.map +1 -0
- package/dist/marketing/vars.js.zyzz.json +1 -0
- package/dist/marketing/zyzz.config.d.ts +4512 -0
- package/dist/marketing/zyzz.config.d.ts.map +1 -0
- package/dist/marketing/zyzz.config.js +63 -0
- package/dist/marketing/zyzz.config.js.map +1 -0
- package/dist/marketing/zyzz.config.js.zyzz.json +1 -0
- package/dist/oxlint/index.d.ts +12 -1
- package/dist/oxlint/index.d.ts.map +1 -1
- package/dist/oxlint/index.js +39 -1
- package/dist/oxlint/index.js.map +1 -1
- package/dist/oxlint/internal/Docs.d.ts +9 -0
- package/dist/oxlint/internal/Docs.d.ts.map +1 -0
- package/dist/oxlint/internal/Docs.js +15 -0
- package/dist/oxlint/internal/Docs.js.map +1 -0
- package/dist/oxlint/internal/Imports.d.ts +1 -1
- package/dist/oxlint/internal/Imports.d.ts.map +1 -1
- package/dist/oxlint/internal/Imports.js +2 -0
- package/dist/oxlint/internal/Imports.js.map +1 -1
- package/dist/oxlint/internal/Styles.d.ts +40 -0
- package/dist/oxlint/internal/Styles.d.ts.map +1 -0
- package/dist/oxlint/internal/Styles.js +194 -0
- package/dist/oxlint/internal/Styles.js.map +1 -0
- package/dist/oxlint/internal/Tokens.d.ts +16 -0
- package/dist/oxlint/internal/Tokens.d.ts.map +1 -0
- package/dist/oxlint/internal/Tokens.js +39 -0
- package/dist/oxlint/internal/Tokens.js.map +1 -0
- package/dist/oxlint/rules/NoCrossSurface.d.ts +2 -2
- package/dist/oxlint/rules/NoCrossSurface.js +3 -3
- package/dist/oxlint/rules/NoCrossSurface.js.map +1 -1
- package/dist/oxlint/rules/NoCustomValues.d.ts +11 -0
- package/dist/oxlint/rules/NoCustomValues.d.ts.map +1 -0
- package/dist/oxlint/rules/NoCustomValues.js +150 -0
- package/dist/oxlint/rules/NoCustomValues.js.map +1 -0
- package/dist/oxlint/rules/NoSingleKeyShortcuts.d.ts +11 -0
- package/dist/oxlint/rules/NoSingleKeyShortcuts.d.ts.map +1 -0
- package/dist/oxlint/rules/NoSingleKeyShortcuts.js +158 -0
- package/dist/oxlint/rules/NoSingleKeyShortcuts.js.map +1 -0
- package/dist/oxlint/rules/PreferComponent.d.ts +3 -2
- package/dist/oxlint/rules/PreferComponent.d.ts.map +1 -1
- package/dist/oxlint/rules/PreferComponent.js +11 -4
- package/dist/oxlint/rules/PreferComponent.js.map +1 -1
- package/dist/oxlint/rules/PreferLayout.d.ts +9 -0
- package/dist/oxlint/rules/PreferLayout.d.ts.map +1 -0
- package/dist/oxlint/rules/PreferLayout.js +90 -0
- package/dist/oxlint/rules/PreferLayout.js.map +1 -0
- package/dist/oxlint/rules/PreferProgress.d.ts +9 -0
- package/dist/oxlint/rules/PreferProgress.d.ts.map +1 -0
- package/dist/oxlint/rules/PreferProgress.js +43 -0
- package/dist/oxlint/rules/PreferProgress.js.map +1 -0
- package/dist/oxlint/rules/PreferSurface.d.ts +9 -0
- package/dist/oxlint/rules/PreferSurface.d.ts.map +1 -0
- package/dist/oxlint/rules/PreferSurface.js +55 -0
- package/dist/oxlint/rules/PreferSurface.js.map +1 -0
- package/dist/oxlint/rules/RequireAccessibleName.d.ts.map +1 -1
- package/dist/oxlint/rules/RequireAccessibleName.js +3 -1
- package/dist/oxlint/rules/RequireAccessibleName.js.map +1 -1
- package/dist/oxlint/rules/RequireScrollRegion.d.ts +11 -0
- package/dist/oxlint/rules/RequireScrollRegion.d.ts.map +1 -0
- package/dist/oxlint/rules/RequireScrollRegion.js +71 -0
- package/dist/oxlint/rules/RequireScrollRegion.js.map +1 -0
- package/dist/web/icons/index.js.zyzz.json +1 -0
- package/package.json +6 -1
- package/src/marketing/README.md +21 -0
- package/src/marketing/index.ts +3 -0
- package/src/marketing/vars.ts +751 -0
- package/src/marketing/zyzz.config.ts +376 -0
- package/src/oxlint/index.ts +40 -1
- package/src/oxlint/internal/Docs.ts +18 -0
- package/src/oxlint/internal/Imports.ts +2 -1
- package/src/oxlint/internal/Styles.ts +240 -0
- package/src/oxlint/internal/Tokens.ts +43 -0
- package/src/oxlint/rules/NoCrossSurface.ts +3 -3
- package/src/oxlint/rules/NoCustomValues.ts +170 -0
- package/src/oxlint/rules/NoSingleKeyShortcuts.ts +190 -0
- package/src/oxlint/rules/PreferComponent.ts +11 -4
- package/src/oxlint/rules/PreferLayout.ts +96 -0
- package/src/oxlint/rules/PreferProgress.ts +49 -0
- package/src/oxlint/rules/PreferSurface.ts +70 -0
- package/src/oxlint/rules/RequireAccessibleName.ts +3 -1
- package/src/oxlint/rules/RequireScrollRegion.ts +92 -0
- package/dist/docs/components.md +0 -203
- 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](
|
|
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](
|
|
12
|
-
* **View (Tabs):** [Tabs](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
234
|
-
* **A mode of the same content:** Use [ChoiceGroup](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
367
|
+
[AppShell](../components/app-shell.md)
|
|
368
368
|
|
|
369
369
|
Use for the application frame.
|
|
370
370
|
|
|
371
|
-
[SidebarMenu](
|
|
371
|
+
[SidebarMenu](../components/sidebar-menu.md)
|
|
372
372
|
|
|
373
373
|
Use for links to product areas.
|
|
374
374
|
|
|
375
|
-
[Tabs](
|
|
375
|
+
[Tabs](../components/tabs.md)
|
|
376
376
|
|
|
377
377
|
Use for views of a page.
|
|
378
378
|
|
|
379
|
-
[Breadcrumbs](
|
|
379
|
+
[Breadcrumbs](../components/breadcrumbs.md)
|
|
380
380
|
|
|
381
381
|
Use for nested pages.
|
|
382
382
|
|
|
383
|
-
[Pagination](
|
|
383
|
+
[Pagination](../components/pagination.md)
|
|
384
384
|
|
|
385
385
|
Use for long lists.
|
|
386
386
|
|
|
387
|
-
[Stepper](
|
|
387
|
+
[Stepper](../components/stepper.md)
|
|
388
388
|
|
|
389
389
|
Use for fixed sequences of steps.
|
|
390
390
|
|
|
391
|
-
[Responsive Layout](
|
|
391
|
+
[Responsive Layout](responsive-layout.md)
|
|
392
392
|
|
|
393
393
|
Covers breakpoints.
|
|
394
394
|
|
|
395
|
-
[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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
281
|
-
* **New addresses:** If the account has never sent to the address, show a `warning` [Alert](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
739
|
+
[AmountInput](../components/amount-input.md)
|
|
740
740
|
|
|
741
741
|
Use for entering amounts.
|
|
742
742
|
|
|
743
|
-
[ListGroup](
|
|
743
|
+
[ListGroup](../components/list-group.md)
|
|
744
744
|
|
|
745
745
|
Use for the review and receipt.
|
|
746
746
|
|
|
747
|
-
[Qr](
|
|
747
|
+
[Qr](../components/qr.md)
|
|
748
748
|
|
|
749
749
|
Use for receiving funds.
|
|
750
750
|
|
|
751
|
-
[Blockchain Values](
|
|
751
|
+
[Blockchain Values](blockchain-values.md)
|
|
752
752
|
|
|
753
753
|
Covers addresses, hashes, and precision.
|
|
754
754
|
|
|
755
|
-
[Errors and Validation](
|
|
755
|
+
[Errors and Validation](errors-and-validation.md)
|
|
756
756
|
|
|
757
757
|
Covers error messages.
|
|
758
758
|
|
|
759
|
-
[Destructive Actions](
|
|
759
|
+
[Destructive Actions](destructive-actions.md)
|
|
760
760
|
|
|
761
761
|
Covers irreversible actions.
|
|
762
762
|
|
|
763
|
-
[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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
485
|
-
* **[Inline](
|
|
486
|
-
* **[Hex](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
971
|
+
[Container](../components/container.md)
|
|
972
972
|
|
|
973
973
|
Use for content width and gutters.
|
|
974
974
|
|
|
975
|
-
[Grid](
|
|
975
|
+
[Grid](../components/grid.md)
|
|
976
976
|
|
|
977
977
|
Use for collections that reflow.
|
|
978
978
|
|
|
979
|
-
[AppShell](
|
|
979
|
+
[AppShell](../components/app-shell.md)
|
|
980
980
|
|
|
981
981
|
Use for the sidebar and content column.
|
|
982
982
|
|
|
983
|
-
[Layout](
|
|
983
|
+
[Layout](../foundations/layout.md)
|
|
984
984
|
|
|
985
985
|
Covers spacing and alignment.
|
|
986
986
|
|
|
987
|
-
[Navigation](
|
|
987
|
+
[Navigation](navigation.md)
|
|
988
988
|
|
|
989
989
|
Covers moving between pages.
|
|
990
990
|
|
|
991
|
-
[Tables and Lists](
|
|
991
|
+
[Tables and Lists](tables-and-lists.md)
|
|
992
992
|
|
|
993
993
|
Covers tables on narrow screens.
|
|
994
994
|
|
|
995
|
-
[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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
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](
|
|
702
|
-
* **Error (negative):** Show a negative [Alert](
|
|
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](
|
|
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](
|
|
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](
|
|
934
|
+
[Table](../components/table.md)
|
|
935
935
|
|
|
936
936
|
Use for tabular data.
|
|
937
937
|
|
|
938
|
-
[ListGroup](
|
|
938
|
+
[ListGroup](../components/list-group.md)
|
|
939
939
|
|
|
940
940
|
Use for details, settings, and stacked items.
|
|
941
941
|
|
|
942
|
-
[Pagination](
|
|
942
|
+
[Pagination](../components/pagination.md)
|
|
943
943
|
|
|
944
944
|
Use for paged lists.
|
|
945
945
|
|
|
946
|
-
[Checkbox](
|
|
946
|
+
[Checkbox](../components/checkbox.md)
|
|
947
947
|
|
|
948
948
|
Use for row selection.
|
|
949
949
|
|
|
950
|
-
[Responsive Layout](
|
|
950
|
+
[Responsive Layout](responsive-layout.md)
|
|
951
951
|
|
|
952
952
|
Covers the shared breakpoints.
|
|
953
953
|
|
|
954
|
-
[Loading](
|
|
954
|
+
[Loading](loading.md)
|
|
955
955
|
|
|
956
956
|
Covers skeletons and spinners.
|
|
957
957
|
|
|
958
|
-
[Empty States](
|
|
958
|
+
[Empty States](empty-states.md)
|
|
959
959
|
|
|
960
960
|
Covers first use and no results.
|
|
961
961
|
|
|
962
|
-
[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](
|
|
387
|
-
* [Destructive Actions](
|
|
388
|
-
* [Empty States](
|
|
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](
|
|
591
|
-
* [Errors and Validation](
|
|
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](
|
|
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](
|
|
649
|
+
[Tables and Lists](../patterns/tables-and-lists.md)
|
|
650
650
|
|
|
651
651
|
Covers key and member tables.
|
|
652
652
|
|
|
653
|
-
[Destructive Actions](
|
|
653
|
+
[Destructive Actions](../patterns/destructive-actions.md)
|
|
654
654
|
|
|
655
655
|
Covers revoking keys and removing members.
|
|
656
656
|
|
|
657
|
-
[AppShell](
|
|
657
|
+
[AppShell](../components/app-shell.md)
|
|
658
658
|
|
|
659
659
|
Use for the console frame.
|
|
660
660
|
|
|
661
|
-
[SecretValue](
|
|
661
|
+
[SecretValue](../components/secret-value.md)
|
|
662
662
|
|
|
663
663
|
Use for one-time key reveal.
|
|
664
664
|
|
|
665
|
-
[Table](
|
|
665
|
+
[Table](../components/table.md)
|
|
666
666
|
|
|
667
667
|
Use for key lists.
|
|
668
668
|
|
|
669
|
-
[Banner](
|
|
669
|
+
[Banner](../components/banner.md)
|
|
670
670
|
|
|
671
671
|
Use for the sandbox notice.
|