@tempoxyz/ds 0.3.9 → 0.3.11

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 (128) hide show
  1. package/dist/docs/AGENTS.md +9 -0
  2. package/dist/docs/components/accordion.md +489 -0
  3. package/dist/docs/components/address-card.md +147 -0
  4. package/dist/docs/components/agent-logo.md +194 -0
  5. package/dist/docs/components/alert-dialog.md +631 -0
  6. package/dist/docs/components/alert.md +448 -0
  7. package/dist/docs/components/amount-input.md +305 -0
  8. package/dist/docs/components/amount.md +794 -0
  9. package/dist/docs/components/app-shell.md +559 -0
  10. package/dist/docs/components/asset-chip.md +294 -0
  11. package/dist/docs/components/autocomplete.md +619 -0
  12. package/dist/docs/components/avatar.md +321 -0
  13. package/dist/docs/components/badge.md +339 -0
  14. package/dist/docs/components/badged-logo.md +116 -0
  15. package/dist/docs/components/banner.md +379 -0
  16. package/dist/docs/components/bar-chart.md +208 -0
  17. package/dist/docs/components/breadcrumbs.md +380 -0
  18. package/dist/docs/components/button-group.md +286 -0
  19. package/dist/docs/components/button.md +650 -0
  20. package/dist/docs/components/calendar.md +375 -0
  21. package/dist/docs/components/callout.md +96 -0
  22. package/dist/docs/components/checkbox-group.md +521 -0
  23. package/dist/docs/components/checkbox.md +467 -0
  24. package/dist/docs/components/choice-group.md +516 -0
  25. package/dist/docs/components/choicebox.md +641 -0
  26. package/dist/docs/components/code.md +100 -0
  27. package/dist/docs/components/combobox.md +939 -0
  28. package/dist/docs/components/container.md +257 -0
  29. package/dist/docs/components/copy-button.md +642 -0
  30. package/dist/docs/components/date-picker.md +514 -0
  31. package/dist/docs/components/dialog.md +1332 -0
  32. package/dist/docs/components/drawer.md +966 -0
  33. package/dist/docs/components/empty.md +340 -0
  34. package/dist/docs/components/field.md +570 -0
  35. package/dist/docs/components/fieldset.md +398 -0
  36. package/dist/docs/components/frame.md +434 -0
  37. package/dist/docs/components/gauge.md +299 -0
  38. package/dist/docs/components/get-started-visual.md +117 -0
  39. package/dist/docs/components/grid.md +288 -0
  40. package/dist/docs/components/hero-visual.md +155 -0
  41. package/dist/docs/components/hex.md +487 -0
  42. package/dist/docs/components/icon-tile.md +292 -0
  43. package/dist/docs/components/identicon.md +371 -0
  44. package/dist/docs/components/inline.md +233 -0
  45. package/dist/docs/components/inset.md +225 -0
  46. package/dist/docs/components/kbd.md +423 -0
  47. package/dist/docs/components/list-group.md +981 -0
  48. package/dist/docs/components/loading-dots.md +237 -0
  49. package/dist/docs/components/menu.md +934 -0
  50. package/dist/docs/components/native-select.md +204 -0
  51. package/dist/docs/components/network-logo.md +248 -0
  52. package/dist/docs/components/number-field.md +543 -0
  53. package/dist/docs/components/otp-field.md +616 -0
  54. package/dist/docs/components/pagination.md +516 -0
  55. package/dist/docs/components/popover.md +544 -0
  56. package/dist/docs/components/progress.md +388 -0
  57. package/dist/docs/components/qr.md +314 -0
  58. package/dist/docs/components/radio-group.md +528 -0
  59. package/dist/docs/components/secret-value.md +406 -0
  60. package/dist/docs/components/select.md +751 -0
  61. package/dist/docs/components/separator.md +379 -0
  62. package/dist/docs/components/sidebar-menu.md +922 -0
  63. package/dist/docs/components/skeleton.md +517 -0
  64. package/dist/docs/components/slider.md +539 -0
  65. package/dist/docs/components/snippet.md +424 -0
  66. package/dist/docs/components/spinner.md +216 -0
  67. package/dist/docs/components/split-bar.md +139 -0
  68. package/dist/docs/components/split-button.md +464 -0
  69. package/dist/docs/components/stack.md +299 -0
  70. package/dist/docs/components/status-chip.md +226 -0
  71. package/dist/docs/components/status-indicator.md +119 -0
  72. package/dist/docs/components/status-row.md +174 -0
  73. package/dist/docs/components/stepper.md +451 -0
  74. package/dist/docs/components/success-hero.md +157 -0
  75. package/dist/docs/components/surface.md +639 -0
  76. package/dist/docs/components/switch.md +472 -0
  77. package/dist/docs/components/table.md +967 -0
  78. package/dist/docs/components/tabs.md +627 -0
  79. package/dist/docs/components/tempo-logo.md +185 -0
  80. package/dist/docs/components/text-input.md +624 -0
  81. package/dist/docs/components/textarea.md +352 -0
  82. package/dist/docs/components/toast.md +535 -0
  83. package/dist/docs/components/token-logo.md +371 -0
  84. package/dist/docs/components/token.md +247 -0
  85. package/dist/docs/components/tooltip.md +490 -0
  86. package/dist/docs/components/verification-code.md +116 -0
  87. package/dist/docs/components/visual.md +249 -0
  88. package/dist/docs/components.md +203 -0
  89. package/dist/docs/foundations/accessibility.md +377 -0
  90. package/dist/docs/foundations/agents.md +150 -0
  91. package/dist/docs/foundations/color.md +522 -0
  92. package/dist/docs/foundations/content/tone.md +194 -0
  93. package/dist/docs/foundations/content/voice.md +194 -0
  94. package/dist/docs/foundations/content/writing-style.md +406 -0
  95. package/dist/docs/foundations/iconography.md +282 -0
  96. package/dist/docs/foundations/intent.md +360 -0
  97. package/dist/docs/foundations/layout.md +508 -0
  98. package/dist/docs/foundations/linter.md +296 -0
  99. package/dist/docs/foundations/motion.md +151 -0
  100. package/dist/docs/foundations/radius-and-padding.md +86 -0
  101. package/dist/docs/foundations/typography.md +266 -0
  102. package/dist/docs/index.md +137 -0
  103. package/dist/docs/introduction/faq.md +132 -0
  104. package/dist/docs/introduction/getting-started.md +377 -0
  105. package/dist/docs/patterns/blockchain-values.md +709 -0
  106. package/dist/docs/patterns/dashboards.md +638 -0
  107. package/dist/docs/patterns/destructive-actions.md +626 -0
  108. package/dist/docs/patterns/empty-states.md +612 -0
  109. package/dist/docs/patterns/errors-and-validation.md +808 -0
  110. package/dist/docs/patterns/feedback-and-status.md +518 -0
  111. package/dist/docs/patterns/forms.md +679 -0
  112. package/dist/docs/patterns/loading.md +630 -0
  113. package/dist/docs/patterns/navigation.md +397 -0
  114. package/dist/docs/patterns/payments.md +765 -0
  115. package/dist/docs/patterns/responsive-layout.md +997 -0
  116. package/dist/docs/patterns/tables-and-lists.md +964 -0
  117. package/dist/docs/products/tempo-console.md +671 -0
  118. package/dist/docs/products/tempo-performance.md +437 -0
  119. package/dist/docs/products/tempo-wallet.md +438 -0
  120. package/dist/web/components/OtpField.css +1 -1
  121. package/dist/web/components/OtpField.d.ts +1 -1
  122. package/dist/web/components/OtpField.d.ts.map +1 -1
  123. package/dist/web/components/OtpField.js +3 -4
  124. package/dist/web/components/OtpField.js.map +1 -1
  125. package/dist/web/components/OtpField.js.zyzz.json +1 -1
  126. package/dist/web/index.js.zyzz.json +1 -1
  127. package/package.json +1 -1
  128. package/src/web/components/OtpField.tsx +2 -24
@@ -0,0 +1,397 @@
1
+ # Navigation
2
+
3
+ Move between product areas, page views, and nested pages in one shared frame.
4
+
5
+ ## Overview
6
+
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
+
9
+ * **Product Area (SidebarMenu):** [AppShell](/docs/components/app-shell) with [SidebarMenu](/docs/components/sidebar-menu) lists the main areas and marks the current one.
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.
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.
15
+
16
+ ## Structure
17
+
18
+ A page renders the sidebar, then breadcrumbs on nested pages, one page title in `AppShell.Header` with the page actions, tabs if the page has several views of one object, and the content.
19
+
20
+ ```tsx
21
+ import { AppShell, Breadcrumbs, Field, ListGroup, SidebarMenu, style, Surface, Switch, Tabs } from '@tempoxyz/ds'
22
+ import { Grid, Key, Link, Settings, Users } from '@tempoxyz/ds/icons'
23
+
24
+ export const fill = true
25
+ const pages = [
26
+ ['Home', Grid],
27
+ ['API Keys', Key],
28
+ ['Webhooks', Link],
29
+ ['Team', Users],
30
+ ['Settings', Settings],
31
+ ] as const
32
+
33
+ export function Demo() {
34
+ return (
35
+ <div {...styles.frame()}>
36
+ <AppShell.Root style={{ height: '100%', minHeight: 0, overflowY: 'auto' }}>
37
+ <AppShell.Sidebar aria-label="Console" style={{ height: '100%' }}>
38
+ <AppShell.SidebarHeader>
39
+ <span {...styles.product()}>Tempo Console</span>
40
+ </AppShell.SidebarHeader>
41
+ <AppShell.SidebarBody>
42
+ <SidebarMenu.Root>
43
+ {pages.map(([label, Icon]) => (
44
+ <SidebarMenu.Item active={label === 'API Keys'} href="#" key={label}>
45
+ <Icon />
46
+ {label}
47
+ </SidebarMenu.Item>
48
+ ))}
49
+ </SidebarMenu.Root>
50
+ </AppShell.SidebarBody>
51
+ </AppShell.Sidebar>
52
+ <AppShell.Main>
53
+ <Breadcrumbs>
54
+ <Breadcrumbs.Item href="#">API Keys</Breadcrumbs.Item>
55
+ <Breadcrumbs.Item current>Production</Breadcrumbs.Item>
56
+ </Breadcrumbs>
57
+ <AppShell.Header>
58
+ <AppShell.Title>Production</AppShell.Title>
59
+ <AppShell.Trigger />
60
+ </AppShell.Header>
61
+ <Tabs.Root defaultValue="overview">
62
+ <Tabs.List aria-label="Key details">
63
+ <Tabs.Tab value="overview">Overview</Tabs.Tab>
64
+ <Tabs.Tab value="usage">Usage</Tabs.Tab>
65
+ <Tabs.Tab value="settings">Settings</Tabs.Tab>
66
+ <Tabs.Indicator />
67
+ </Tabs.List>
68
+ <Tabs.Panel value="overview" {...styles.panel()}>
69
+ <Surface size="medium">
70
+ <ListGroup.Root>
71
+ <ListGroup.Row>
72
+ <ListGroup.Label>Created</ListGroup.Label>
73
+ March 3, 2026
74
+ </ListGroup.Row>
75
+ <ListGroup.Row>
76
+ <ListGroup.Label>Last used</ListGroup.Label>2 minutes ago
77
+ </ListGroup.Row>
78
+ <ListGroup.Row>
79
+ <ListGroup.Label>Network</ListGroup.Label>
80
+ Mainnet
81
+ </ListGroup.Row>
82
+ </ListGroup.Root>
83
+ </Surface>
84
+ </Tabs.Panel>
85
+ <Tabs.Panel value="usage" {...styles.panel()}>
86
+ <Surface size="medium">
87
+ <ListGroup.Root>
88
+ <ListGroup.Row>
89
+ <ListGroup.Label>Requests, last 24 hours</ListGroup.Label>
90
+ 12,480
91
+ </ListGroup.Row>
92
+ <ListGroup.Row>
93
+ <ListGroup.Label>Errors</ListGroup.Label>3
94
+ </ListGroup.Row>
95
+ </ListGroup.Root>
96
+ </Surface>
97
+ </Tabs.Panel>
98
+ <Tabs.Panel value="settings" {...styles.panel()}>
99
+ <Surface size="medium">
100
+ <Field.Root>
101
+ <Field.Label>Allow testnet requests</Field.Label>
102
+ <Switch />
103
+ <Field.Description>
104
+ Use this key against testnet as well as mainnet.
105
+ </Field.Description>
106
+ </Field.Root>
107
+ </Surface>
108
+ </Tabs.Panel>
109
+ </Tabs.Root>
110
+ </AppShell.Main>
111
+ </AppShell.Root>
112
+ </div>
113
+ )
114
+ }
115
+
116
+ namespace styles {
117
+ // The transform makes the frame the containing block for the drawer below 1024px.
118
+ export const frame = style({
119
+ borderRadius: 'sm',
120
+ height: '32rem !custom',
121
+ overflow: 'hidden',
122
+ transform: 'translateZ(0) !custom',
123
+ selectors: {
124
+ ':root[data-maximized] &': { borderRadius: '0px !custom', height: '100vh !custom' },
125
+ },
126
+ })
127
+
128
+ export const panel = style({ marginBlockStart: '16' })
129
+
130
+ export const product = style({ paddingInline: '12', typography: 'body.b2Strong' })
131
+ }
132
+ ```
133
+
134
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/Patterns/ConsoleNavigation.tsx)
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.
137
+
138
+ ## Product Navigation
139
+
140
+ Put every product area in the [SidebarMenu](/docs/components/sidebar-menu) inside `AppShell.Sidebar`, in the same order on every page.
141
+
142
+ * **One Active Item (active):** Mark only the area of the current page. It sets `aria-current="page"`.
143
+ * **Consistent Icons:** Items do not wrap. Give each one a short label and an icon, never a mix with and without.
144
+ * **Grouped Sections (SidebarMenu.Group):** Past about seven items, group them under specific labels, such as Project and Organization.
145
+
146
+ **Do:** Mark the current area `active`, with short labels and icons.
147
+
148
+ ```tsx
149
+ /**
150
+ * Do example for "Navigation" on the Navigation page.
151
+ * Mark the current area `active`, with short labels and icons.
152
+ * @module
153
+ */
154
+ import { SidebarMenu, style } from '@tempoxyz/ds'
155
+ import { Grid, Key, Link, Users } from '@tempoxyz/ds/icons'
156
+
157
+ /** Renders the static preview, which the guideline card shows inert. */
158
+ export function Demo() {
159
+ return (
160
+ <SidebarMenu.Root aria-label="Console" {...styles.column()}>
161
+ <SidebarMenu.Item href="#">
162
+ <Grid />
163
+ Home
164
+ </SidebarMenu.Item>
165
+ <SidebarMenu.Item active href="#">
166
+ <Key />
167
+ API Keys
168
+ </SidebarMenu.Item>
169
+ <SidebarMenu.Item href="#">
170
+ <Link />
171
+ Webhooks
172
+ </SidebarMenu.Item>
173
+ <SidebarMenu.Item href="#">
174
+ <Users />
175
+ Team
176
+ </SidebarMenu.Item>
177
+ </SidebarMenu.Root>
178
+ )
179
+ }
180
+
181
+ namespace styles {
182
+ export const column = style({ width: '15rem !custom' })
183
+ }
184
+ ```
185
+
186
+ **Don't:** Leave the current area unmarked.
187
+
188
+ ```tsx
189
+ /** Don't example for "Navigation" on the Navigation page. Don't leave the current area unmarked. @module */
190
+ import { SidebarMenu, style } from '@tempoxyz/ds'
191
+ import { Grid, Key, Link, Users } from '@tempoxyz/ds/icons'
192
+
193
+ /** Renders the static preview, which the guideline card shows inert. */
194
+ export function Demo() {
195
+ return (
196
+ <SidebarMenu.Root aria-label="Console" {...styles.column()}>
197
+ <SidebarMenu.Item href="#">
198
+ <Grid />
199
+ Home
200
+ </SidebarMenu.Item>
201
+ <SidebarMenu.Item href="#">
202
+ <Key />
203
+ API Keys
204
+ </SidebarMenu.Item>
205
+ <SidebarMenu.Item href="#">
206
+ <Link />
207
+ Webhooks
208
+ </SidebarMenu.Item>
209
+ <SidebarMenu.Item href="#">
210
+ <Users />
211
+ Team
212
+ </SidebarMenu.Item>
213
+ </SidebarMenu.Root>
214
+ )
215
+ }
216
+
217
+ namespace styles {
218
+ export const column = style({ width: '15rem !custom' })
219
+ }
220
+ ```
221
+
222
+ ### Move the Sidebar Into a Drawer Below 1024px
223
+
224
+ Below 1024px, `AppShell.Sidebar` renders as a modal drawer from the right edge, with the same items in the same order. `AppShell.Trigger` toggles it from a menu button at the end of the bottom bar, which hides from 1024px.
225
+
226
+ * **Main Action in the Header (AppShell.Header):** Keep the main action in the header, not the drawer.
227
+ * **Server Rendering (Hydration):** The server emits the wide layout. Narrow screens switch to the drawer after hydration.
228
+
229
+ ## Tabs
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.
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.
235
+ * **Tabs inside tabs:** Never nest them. Split the view, or move the inner level to its own page.
236
+
237
+ If tabs overflow one line, the list scrolls horizontally. Set `expand` on `Tabs.List` to stretch tabs across a narrow column.
238
+
239
+ **Do:** Use one or two words per tab, in parallel form.
240
+
241
+ ```tsx
242
+ /**
243
+ * Do example for "Move the Sidebar Into a Drawer Below 1024px" on the Navigation page.
244
+ * Use one or two words per tab, in parallel form.
245
+ * @module
246
+ */
247
+ import { Tabs } from '@tempoxyz/ds'
248
+
249
+ /** Renders the static preview, which the guideline card shows inert. */
250
+ export function Demo() {
251
+ return (
252
+ <Tabs.Root defaultValue="overview">
253
+ <Tabs.List aria-label="Key details">
254
+ <Tabs.Tab value="overview">Overview</Tabs.Tab>
255
+ <Tabs.Tab value="usage">Usage</Tabs.Tab>
256
+ <Tabs.Tab value="settings">Settings</Tabs.Tab>
257
+ <Tabs.Indicator />
258
+ </Tabs.List>
259
+ </Tabs.Root>
260
+ )
261
+ }
262
+ ```
263
+
264
+ **Don't:** Write long or mismatched tab labels.
265
+
266
+ ```tsx
267
+ /**
268
+ * Don't example for "Move the Sidebar Into a Drawer Below 1024px" on the Navigation page.
269
+ * Don't write long or mismatched tab labels.
270
+ * @module
271
+ */
272
+ import { Tabs } from '@tempoxyz/ds'
273
+
274
+ /** Renders the static preview, which the guideline card shows inert. */
275
+ export function Demo() {
276
+ return (
277
+ <Tabs.Root defaultValue="overview">
278
+ <Tabs.List aria-label="Key details">
279
+ <Tabs.Tab value="overview">About this key</Tabs.Tab>
280
+ <Tabs.Tab value="usage">Requests in the last 30 days</Tabs.Tab>
281
+ <Tabs.Tab value="settings">Configure</Tabs.Tab>
282
+ <Tabs.Indicator />
283
+ </Tabs.List>
284
+ </Tabs.Root>
285
+ )
286
+ }
287
+ ```
288
+
289
+ ## Breadcrumbs
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`.
292
+
293
+ **Do:** Show the path from the product area down to the current page.
294
+
295
+ ```tsx
296
+ /**
297
+ * Do example for "Move the Sidebar Into a Drawer Below 1024px" on the Navigation page.
298
+ * Show the path from the product area down to the current page.
299
+ * @module
300
+ */
301
+ import { Breadcrumbs } from '@tempoxyz/ds'
302
+
303
+ /** Renders the static preview, which the guideline card shows inert. */
304
+ export function Demo() {
305
+ return (
306
+ <Breadcrumbs>
307
+ <Breadcrumbs.Item href="#">Settings</Breadcrumbs.Item>
308
+ <Breadcrumbs.Item href="#">Webhooks</Breadcrumbs.Item>
309
+ <Breadcrumbs.Item current>Order events</Breadcrumbs.Item>
310
+ </Breadcrumbs>
311
+ )
312
+ }
313
+ ```
314
+
315
+ **Don't:** Show breadcrumbs on a top-level page, where they hold only the current page.
316
+
317
+ ```tsx
318
+ /**
319
+ * Don't example for "Move the Sidebar Into a Drawer Below 1024px" on the Navigation page.
320
+ * Don't show breadcrumbs on a top-level page, where they hold only the current page.
321
+ * @module
322
+ */
323
+ import { Breadcrumbs } from '@tempoxyz/ds'
324
+
325
+ /** Renders the static preview, which the guideline card shows inert. */
326
+ export function Demo() {
327
+ return (
328
+ <Breadcrumbs>
329
+ <Breadcrumbs.Item current>API Keys</Breadcrumbs.Item>
330
+ </Breadcrumbs>
331
+ )
332
+ }
333
+ ```
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.
336
+
337
+ ## Pagination
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.
340
+
341
+ ## Best Practices
342
+
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.
345
+
346
+ ## States
347
+
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).
350
+ * **Disabled:** Leave out unavailable areas. Disable a tab only if its view does not apply yet, and state the reason.
351
+ * **Success:** After a flow such as key creation, open the page of the new item with its area marked active.
352
+
353
+ ## Content
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.
356
+
357
+ ## Accessibility
358
+
359
+ * **Landmarks (aria-label):** Sidebar, breadcrumbs, and pagination are named landmarks. Rename one if two share a kind.
360
+ * **Sidebar Drawer (Escape):** The drawer takes focus, also closes on the backdrop or a swipe, and returns focus to the menu button.
361
+ * **One Page Title (h1):** The page title is the page's heading. Render exactly one title per page.
362
+ * **Named Tab Lists (aria-label):** Give every tab list a name that states its content, such as Key details.
363
+ * **Skip Links (AppShell.Main):** If the sidebar holds many links, add a skip link to the main column.
364
+
365
+ ## Related
366
+
367
+ [AppShell](/docs/components/app-shell)
368
+
369
+ Use for the application frame.
370
+
371
+ [SidebarMenu](/docs/components/sidebar-menu)
372
+
373
+ Use for links to product areas.
374
+
375
+ [Tabs](/docs/components/tabs)
376
+
377
+ Use for views of a page.
378
+
379
+ [Breadcrumbs](/docs/components/breadcrumbs)
380
+
381
+ Use for nested pages.
382
+
383
+ [Pagination](/docs/components/pagination)
384
+
385
+ Use for long lists.
386
+
387
+ [Stepper](/docs/components/stepper)
388
+
389
+ Use for fixed sequences of steps.
390
+
391
+ [Responsive Layout](/docs/patterns/responsive-layout)
392
+
393
+ Covers breakpoints.
394
+
395
+ [Tempo Console](/docs/products/tempo-console)
396
+
397
+ Covers the console's pages.