@tempoxyz/ds 0.3.10 → 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 (120) 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/package.json +1 -1
@@ -0,0 +1,340 @@
1
+ # Empty
2
+
3
+ Fills a region that has nothing to show yet.
4
+
5
+ [View source and API](https://github.com/tempoxyz/ds/blob/main/src/web/components/Empty.tsx)
6
+
7
+ Figma: [Messaging/Progress Panel](https://www.figma.com/design/yE96kcymnNR88PJp6G1sPs?node-id=5227-3967) (`Empty.Root`)
8
+
9
+ ## Overview
10
+
11
+ A centered placeholder with a title, a description, an optional icon, and actions.
12
+
13
+ ## Examples
14
+
15
+ ### Basic
16
+
17
+ ```tsx
18
+ import { Button, Empty } from '@tempoxyz/ds'
19
+ import { Clipboard } from '@tempoxyz/ds/icons'
20
+
21
+ export function Demo() {
22
+ return (
23
+ <Empty.Root>
24
+ <Empty.Icon>
25
+ <Clipboard />
26
+ </Empty.Icon>
27
+ <Empty.Title>No activity yet</Empty.Title>
28
+ <Empty.Description>Transactions will appear here once you send or receive.</Empty.Description>
29
+ <Empty.Actions>
30
+ <Button size="small">Refresh</Button>
31
+ <Button size="small" variant="secondary">
32
+ Learn more
33
+ </Button>
34
+ </Empty.Actions>
35
+ </Empty.Root>
36
+ )
37
+ }
38
+ ```
39
+
40
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/Empty/Basic.tsx)
41
+
42
+ ### Progress
43
+
44
+ Use a [Spinner](/docs/components/spinner) instead of the icon while the region waits on another task, such as a checkout in another window. Frame it in a `medium` [Surface](/docs/components/surface) for a panel.
45
+
46
+ ```tsx
47
+ /** An empty state in a medium surface that waits on a checkout in another window. @module */
48
+ import { Empty, Spinner, Surface } from '@tempoxyz/ds'
49
+
50
+ export function Demo() {
51
+ return (
52
+ <Surface size="medium">
53
+ <Empty.Root>
54
+ <Spinner aria-label="Waiting for checkout" />
55
+ <Empty.Title>Finish checkout in the window that opened</Empty.Title>
56
+ <Empty.Description>Buying $10.00 of MACH. This updates when it lands.</Empty.Description>
57
+ </Empty.Root>
58
+ </Surface>
59
+ )
60
+ }
61
+ ```
62
+
63
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/Empty/Progress.tsx)
64
+
65
+ ## Anatomy
66
+
67
+ Import the component and assemble its parts.
68
+
69
+ ```tsx
70
+ import { Empty } from '@tempoxyz/ds'
71
+
72
+ <Empty.Root>
73
+ <Empty.Icon />
74
+ <Empty.Title />
75
+ <Empty.Description />
76
+ <Empty.Actions />
77
+ </Empty.Root>
78
+ ```
79
+
80
+ ## Guidelines
81
+
82
+ ### When to Use
83
+
84
+ * Fill a list or table with no records yet.
85
+ * Replace results when a search or filter matches nothing.
86
+ * Confirm that a list is clear on purpose, such as a retry queue with nothing left.
87
+
88
+ ### When Not to Use
89
+
90
+ * Use [Skeleton](/docs/components/skeleton) while the request runs. Show the empty state only after it returns no records.
91
+ * Use a `negative` [Alert](/docs/components/alert) with a Retry action if the data fails to load.
92
+ * Use `Combobox.Empty` of [Combobox](/docs/components/combobox) or `Autocomplete.Empty` of [Autocomplete](/docs/components/autocomplete) for a popup list with no matches.
93
+
94
+ ### Explain Why, Then Offer a Next Step
95
+
96
+ * **`Empty.Title`:** States what belongs here.
97
+ * **`Empty.Description`:** States why there is nothing.
98
+ * **`Empty.Actions`:** Holds a [Button](/docs/components/button) for the next step.
99
+
100
+ **Do:** Say what will appear and offer the action that adds it.
101
+
102
+ ```tsx
103
+ /**
104
+ * Do example for "Explain Why, Then Offer a Next Step" on the Empty page.
105
+ * Say what will appear and offer the action that adds it.
106
+ * @module
107
+ */
108
+ import { Button, Empty } from '@tempoxyz/ds'
109
+ import { Key } from '@tempoxyz/ds/icons'
110
+
111
+ /** Renders the static preview, which the guideline card shows inert. */
112
+ export function Demo() {
113
+ return (
114
+ <Empty.Root>
115
+ <Empty.Icon>
116
+ <Key />
117
+ </Empty.Icon>
118
+ <Empty.Title>No API keys yet</Empty.Title>
119
+ <Empty.Description>Create a key to call the Tempo API from your server.</Empty.Description>
120
+ <Empty.Actions>
121
+ <Button size="small">Create key</Button>
122
+ </Empty.Actions>
123
+ </Empty.Root>
124
+ )
125
+ }
126
+ ```
127
+
128
+ **Don't:** Show a bare No data with no reason or next step.
129
+
130
+ ```tsx
131
+ /**
132
+ * Don't example for "Explain Why, Then Offer a Next Step" on the Empty page.
133
+ * Don't show a bare No data with no reason or next step.
134
+ * @module
135
+ */
136
+ import { Empty } from '@tempoxyz/ds'
137
+
138
+ /** Renders the static preview, which the guideline card shows inert. */
139
+ export function Demo() {
140
+ return (
141
+ <Empty.Root>
142
+ <Empty.Title>No data</Empty.Title>
143
+ </Empty.Root>
144
+ )
145
+ }
146
+ ```
147
+
148
+ ### Match the Message to the Cause
149
+
150
+ * **Nothing Created Yet:** Offer the action that adds the first item.
151
+ * **No Search Results:** Repeat the query and offer to clear it.
152
+ * **Filters Exclude All:** Offer to clear the filters.
153
+ * **Cleared on Purpose:** Offer no action, or a link to the logs.
154
+
155
+ ### Offer One Primary Action
156
+
157
+ Add a `secondary` button only for a real alternative, such as View docs. Use `size="small"` to match the centered text.
158
+
159
+ **Do:** Give `Empty.Actions` one `primary` button that resolves the empty state.
160
+
161
+ ```tsx
162
+ /**
163
+ * Do example for "Offer One Primary Action" on the Empty page.
164
+ * Give `Empty.Actions` one `primary` button that resolves the empty state.
165
+ * @module
166
+ */
167
+ import { Button, Empty } from '@tempoxyz/ds'
168
+ import { Key } from '@tempoxyz/ds/icons'
169
+
170
+ /** Renders the static preview, which the guideline card shows inert. */
171
+ export function Demo() {
172
+ return (
173
+ <Empty.Root>
174
+ <Empty.Icon>
175
+ <Key />
176
+ </Empty.Icon>
177
+ <Empty.Title>No API keys yet</Empty.Title>
178
+ <Empty.Description>Create a key to call the Tempo API from your server.</Empty.Description>
179
+ <Empty.Actions>
180
+ <Button size="small" variant="secondary">
181
+ View docs
182
+ </Button>
183
+ <Button size="small">Create key</Button>
184
+ </Empty.Actions>
185
+ </Empty.Root>
186
+ )
187
+ }
188
+ ```
189
+
190
+ **Don't:** Offer several `primary` buttons.
191
+
192
+ ```tsx
193
+ /** Don't example for "Offer One Primary Action" on the Empty page. Don't offer several `primary` buttons. @module */
194
+ import { Button, Empty } from '@tempoxyz/ds'
195
+ import { Key } from '@tempoxyz/ds/icons'
196
+
197
+ /** Renders the static preview, which the guideline card shows inert. */
198
+ export function Demo() {
199
+ return (
200
+ <Empty.Root>
201
+ <Empty.Icon>
202
+ <Key />
203
+ </Empty.Icon>
204
+ <Empty.Title>No API keys yet</Empty.Title>
205
+ <Empty.Description>Create a key to call the Tempo API from your server.</Empty.Description>
206
+ <Empty.Actions>
207
+ <Button size="small">View docs</Button>
208
+ <Button size="small">Import key</Button>
209
+ <Button size="small">Create key</Button>
210
+ </Empty.Actions>
211
+ </Empty.Root>
212
+ )
213
+ }
214
+ ```
215
+
216
+ ### Keep It Inside the Region It Replaces
217
+
218
+ **Do:** Render `Empty.Root` in place of the list or table body. Keep the heading and filters around it.
219
+
220
+ ```tsx
221
+ /**
222
+ * Do example for "Keep It Inside the Region It Replaces" on the Empty page.
223
+ * Render `Empty.Root` in place of the list or table body. Keep the heading and filters around it.
224
+ * @module
225
+ */
226
+ import { Empty, style, Surface, TextInput } from '@tempoxyz/ds'
227
+ import { Search } from '@tempoxyz/ds/icons'
228
+
229
+ /** Renders the static preview, which the guideline card shows inert. */
230
+ export function Demo() {
231
+ return (
232
+ <Surface size="medium" {...styles.card()}>
233
+ <div {...styles.heading()}>Payments</div>
234
+ <TextInput.Group>
235
+ <TextInput.Prefix>
236
+ <Search />
237
+ </TextInput.Prefix>
238
+ <TextInput.Control aria-label="Search payments" defaultValue="0x8f3c" />
239
+ </TextInput.Group>
240
+ <Empty.Root>
241
+ <Empty.Title>No results for "0x8f3c"</Empty.Title>
242
+ <Empty.Description>Check the address, or search by amount.</Empty.Description>
243
+ </Empty.Root>
244
+ </Surface>
245
+ )
246
+ }
247
+
248
+ namespace styles {
249
+ export const card = style({
250
+ boxSizing: 'border-box',
251
+ display: 'flex',
252
+ flexDirection: 'column',
253
+ gap: '16',
254
+ width: '100% !custom',
255
+ })
256
+
257
+ export const heading = style({ color: 'content.primary', typography: 'body.b1Strong' })
258
+ }
259
+ ```
260
+
261
+ **Don't:** Replace the heading and filters with the empty state.
262
+
263
+ ```tsx
264
+ /**
265
+ * Don't example for "Keep It Inside the Region It Replaces" on the Empty page.
266
+ * Don't replace the heading and filters with the empty state.
267
+ * @module
268
+ */
269
+ import { Empty, style, Surface } from '@tempoxyz/ds'
270
+
271
+ /** Renders the static preview, which the guideline card shows inert. */
272
+ export function Demo() {
273
+ return (
274
+ <Surface size="medium" {...styles.card()}>
275
+ <Empty.Root>
276
+ <Empty.Title>No results for "0x8f3c"</Empty.Title>
277
+ <Empty.Description>Check the address, or search by amount.</Empty.Description>
278
+ </Empty.Root>
279
+ </Surface>
280
+ )
281
+ }
282
+
283
+ namespace styles {
284
+ export const card = style({
285
+ boxSizing: 'border-box',
286
+ display: 'flex',
287
+ flexDirection: 'column',
288
+ gap: '16',
289
+ width: '100% !custom',
290
+ })
291
+ }
292
+ ```
293
+
294
+ Use `Empty.Icon` for an icon that names the content type, such as `Key` for API keys. Leave out status icons such as `AlertTriangle`.
295
+
296
+ ## Content
297
+
298
+ * **Title:** State what is missing, such as No activity yet, without a period.
299
+ * **Description:** In one sentence, state when content appears or why it is hidden, such as Transactions appear here once you send or receive. It wraps at 22.5rem.
300
+ * **Tone:** Avoid blame and jokes. Write No payments match these filters, not You haven't made any payments.
301
+ * **Action:** Start with a verb and name the object, such as Create key. Avoid Get started.
302
+
303
+ ## Accessibility
304
+
305
+ An empty state renders plain elements with no ARIA wiring, in the order you compose them.
306
+
307
+ ### Semantics
308
+
309
+ * **Empty.Title (h3):** Titles the empty state below a section heading.
310
+ * **Empty.Description (p):** Explains why the area is empty or what to do.
311
+ * **Empty.Icon (aria-hidden):** A decorative badge that screen readers skip.
312
+ * **Empty.Actions:** Holds the buttons or links you pass.
313
+
314
+ ### Keyboard
315
+
316
+ * **Move Through the Actions (Tab):** Moves focus to each action, in order.
317
+ * **Activate an Action (Enter or Space):** Actions keep native keys and focus outlines.
318
+
319
+ ### Your Responsibilities
320
+
321
+ * **Keep the Heading Order (h2 then h3):** Put the empty state under a section heading to keep the outline in order (SC 1.3.1).
322
+ * **Announce New Results (role="status"):** Not a live region. If it replaces results after a search, announce it in a status element.
323
+
324
+ ## Related
325
+
326
+ [Skeleton](/docs/components/skeleton)
327
+
328
+ Use for content that is still loading.
329
+
330
+ [Alert](/docs/components/alert)
331
+
332
+ Use for a failed load with a retry.
333
+
334
+ [Button](/docs/components/button)
335
+
336
+ Use for the action that fills the state.
337
+
338
+ [Empty States](/docs/patterns/empty-states)
339
+
340
+ Covers first-use, no-results, and cleared states.