@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.
- package/dist/docs/AGENTS.md +9 -0
- package/dist/docs/components/accordion.md +489 -0
- package/dist/docs/components/address-card.md +147 -0
- package/dist/docs/components/agent-logo.md +194 -0
- package/dist/docs/components/alert-dialog.md +631 -0
- package/dist/docs/components/alert.md +448 -0
- package/dist/docs/components/amount-input.md +305 -0
- package/dist/docs/components/amount.md +794 -0
- package/dist/docs/components/app-shell.md +559 -0
- package/dist/docs/components/asset-chip.md +294 -0
- package/dist/docs/components/autocomplete.md +619 -0
- package/dist/docs/components/avatar.md +321 -0
- package/dist/docs/components/badge.md +339 -0
- package/dist/docs/components/badged-logo.md +116 -0
- package/dist/docs/components/banner.md +379 -0
- package/dist/docs/components/bar-chart.md +208 -0
- package/dist/docs/components/breadcrumbs.md +380 -0
- package/dist/docs/components/button-group.md +286 -0
- package/dist/docs/components/button.md +650 -0
- package/dist/docs/components/calendar.md +375 -0
- package/dist/docs/components/callout.md +96 -0
- package/dist/docs/components/checkbox-group.md +521 -0
- package/dist/docs/components/checkbox.md +467 -0
- package/dist/docs/components/choice-group.md +516 -0
- package/dist/docs/components/choicebox.md +641 -0
- package/dist/docs/components/code.md +100 -0
- package/dist/docs/components/combobox.md +939 -0
- package/dist/docs/components/container.md +257 -0
- package/dist/docs/components/copy-button.md +642 -0
- package/dist/docs/components/date-picker.md +514 -0
- package/dist/docs/components/dialog.md +1332 -0
- package/dist/docs/components/drawer.md +966 -0
- package/dist/docs/components/empty.md +340 -0
- package/dist/docs/components/field.md +570 -0
- package/dist/docs/components/fieldset.md +398 -0
- package/dist/docs/components/frame.md +434 -0
- package/dist/docs/components/gauge.md +299 -0
- package/dist/docs/components/get-started-visual.md +117 -0
- package/dist/docs/components/grid.md +288 -0
- package/dist/docs/components/hero-visual.md +155 -0
- package/dist/docs/components/hex.md +487 -0
- package/dist/docs/components/icon-tile.md +292 -0
- package/dist/docs/components/identicon.md +371 -0
- package/dist/docs/components/inline.md +233 -0
- package/dist/docs/components/inset.md +225 -0
- package/dist/docs/components/kbd.md +423 -0
- package/dist/docs/components/list-group.md +981 -0
- package/dist/docs/components/loading-dots.md +237 -0
- package/dist/docs/components/menu.md +934 -0
- package/dist/docs/components/native-select.md +204 -0
- package/dist/docs/components/network-logo.md +248 -0
- package/dist/docs/components/number-field.md +543 -0
- package/dist/docs/components/otp-field.md +616 -0
- package/dist/docs/components/pagination.md +516 -0
- package/dist/docs/components/popover.md +544 -0
- package/dist/docs/components/progress.md +388 -0
- package/dist/docs/components/qr.md +314 -0
- package/dist/docs/components/radio-group.md +528 -0
- package/dist/docs/components/secret-value.md +406 -0
- package/dist/docs/components/select.md +751 -0
- package/dist/docs/components/separator.md +379 -0
- package/dist/docs/components/sidebar-menu.md +922 -0
- package/dist/docs/components/skeleton.md +517 -0
- package/dist/docs/components/slider.md +539 -0
- package/dist/docs/components/snippet.md +424 -0
- package/dist/docs/components/spinner.md +216 -0
- package/dist/docs/components/split-bar.md +139 -0
- package/dist/docs/components/split-button.md +464 -0
- package/dist/docs/components/stack.md +299 -0
- package/dist/docs/components/status-chip.md +226 -0
- package/dist/docs/components/status-indicator.md +119 -0
- package/dist/docs/components/status-row.md +174 -0
- package/dist/docs/components/stepper.md +451 -0
- package/dist/docs/components/success-hero.md +157 -0
- package/dist/docs/components/surface.md +639 -0
- package/dist/docs/components/switch.md +472 -0
- package/dist/docs/components/table.md +967 -0
- package/dist/docs/components/tabs.md +627 -0
- package/dist/docs/components/tempo-logo.md +185 -0
- package/dist/docs/components/text-input.md +624 -0
- package/dist/docs/components/textarea.md +352 -0
- package/dist/docs/components/toast.md +535 -0
- package/dist/docs/components/token-logo.md +371 -0
- package/dist/docs/components/token.md +247 -0
- package/dist/docs/components/tooltip.md +490 -0
- package/dist/docs/components/verification-code.md +116 -0
- package/dist/docs/components/visual.md +249 -0
- package/dist/docs/components.md +203 -0
- package/dist/docs/foundations/accessibility.md +377 -0
- package/dist/docs/foundations/agents.md +150 -0
- package/dist/docs/foundations/color.md +522 -0
- package/dist/docs/foundations/content/tone.md +194 -0
- package/dist/docs/foundations/content/voice.md +194 -0
- package/dist/docs/foundations/content/writing-style.md +406 -0
- package/dist/docs/foundations/iconography.md +282 -0
- package/dist/docs/foundations/intent.md +360 -0
- package/dist/docs/foundations/layout.md +508 -0
- package/dist/docs/foundations/linter.md +296 -0
- package/dist/docs/foundations/motion.md +151 -0
- package/dist/docs/foundations/radius-and-padding.md +86 -0
- package/dist/docs/foundations/typography.md +266 -0
- package/dist/docs/index.md +137 -0
- package/dist/docs/introduction/faq.md +132 -0
- package/dist/docs/introduction/getting-started.md +377 -0
- package/dist/docs/patterns/blockchain-values.md +709 -0
- package/dist/docs/patterns/dashboards.md +638 -0
- package/dist/docs/patterns/destructive-actions.md +626 -0
- package/dist/docs/patterns/empty-states.md +612 -0
- package/dist/docs/patterns/errors-and-validation.md +808 -0
- package/dist/docs/patterns/feedback-and-status.md +518 -0
- package/dist/docs/patterns/forms.md +679 -0
- package/dist/docs/patterns/loading.md +630 -0
- package/dist/docs/patterns/navigation.md +397 -0
- package/dist/docs/patterns/payments.md +765 -0
- package/dist/docs/patterns/responsive-layout.md +997 -0
- package/dist/docs/patterns/tables-and-lists.md +964 -0
- package/dist/docs/products/tempo-console.md +671 -0
- package/dist/docs/products/tempo-performance.md +437 -0
- package/dist/docs/products/tempo-wallet.md +438 -0
- package/dist/web/components/OtpField.css +1 -1
- package/dist/web/components/OtpField.d.ts +1 -1
- package/dist/web/components/OtpField.d.ts.map +1 -1
- package/dist/web/components/OtpField.js +3 -4
- package/dist/web/components/OtpField.js.map +1 -1
- package/dist/web/components/OtpField.js.zyzz.json +1 -1
- package/dist/web/index.js.zyzz.json +1 -1
- package/package.json +1 -1
- package/src/web/components/OtpField.tsx +2 -24
|
@@ -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.
|