@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,377 @@
|
|
|
1
|
+
# Getting Started
|
|
2
|
+
|
|
3
|
+
Install Tempo Design System and render your first component.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Tempo Design System is the shared design language of Tempo products. `@tempoxyz/ds` ships it as components and variables for web and React Native.
|
|
8
|
+
|
|
9
|
+
The APIs accept only design system values. Zyzz compiles the components and your styles ahead of time for each platform.
|
|
10
|
+
|
|
11
|
+
## Agent Prompt
|
|
12
|
+
|
|
13
|
+
Paste this prompt into your coding agent:
|
|
14
|
+
|
|
15
|
+
Read ds.tehq.dev and help me build my project with Tempo Design System.
|
|
16
|
+
|
|
17
|
+
## Setup
|
|
18
|
+
|
|
19
|
+
### Install the Library
|
|
20
|
+
|
|
21
|
+
Install `@tempoxyz/ds` and its Zyzz peer.
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
npm install @tempoxyz/ds zyzz
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Choose Framework
|
|
28
|
+
|
|
29
|
+
Choose a compilation target and a variable mode:
|
|
30
|
+
|
|
31
|
+
* **TDS Variables (Quick):** Uses the components and variables as they ship.
|
|
32
|
+
* **Custom Variables (Advanced):** Extends the TDS variables with app tokens.
|
|
33
|
+
|
|
34
|
+
### Vite
|
|
35
|
+
|
|
36
|
+
### Configure Vite
|
|
37
|
+
|
|
38
|
+
Add Zyzz beside the existing framework plugin.
|
|
39
|
+
|
|
40
|
+
```ts title="vite.config.ts"
|
|
41
|
+
import { defineConfig } from 'vite'
|
|
42
|
+
import { zyzz } from 'zyzz/vite'
|
|
43
|
+
|
|
44
|
+
export default defineConfig({
|
|
45
|
+
plugins: [zyzz()],
|
|
46
|
+
ssr: { noExternal: ['@tempoxyz/ds', 'zyzz'] },
|
|
47
|
+
})
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Run the existing dev or build command. The plugin emits the TDS variables, the Inter, Pilat, and JetBrains Mono fonts, and keyframes once, and each component emits its own rules. You import no stylesheet.
|
|
51
|
+
|
|
52
|
+
With `ssr.noExternal`, the plugin reads the library's contracts in a server build.
|
|
53
|
+
|
|
54
|
+
#### TDS Variables (Quick)
|
|
55
|
+
|
|
56
|
+
### Use a Component
|
|
57
|
+
|
|
58
|
+
Import components from `@tempoxyz/ds`. Style your own markup with TDS tokens through `style`.
|
|
59
|
+
|
|
60
|
+
```tsx title="Checkout.tsx"
|
|
61
|
+
import { Button, style } from '@tempoxyz/ds'
|
|
62
|
+
|
|
63
|
+
export function Checkout() {
|
|
64
|
+
return (
|
|
65
|
+
<section {...styles.card()}>
|
|
66
|
+
<p>Ready to continue?</p>
|
|
67
|
+
<Button>Continue</Button>
|
|
68
|
+
</section>
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
namespace styles {
|
|
73
|
+
export const card = style({
|
|
74
|
+
backgroundColor: 'background.elevated',
|
|
75
|
+
borderRadius: 'sm',
|
|
76
|
+
color: 'content.primary',
|
|
77
|
+
padding: '24',
|
|
78
|
+
typography: 'body.b2',
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Tokens such as `content.primary`, `'24'`, and `body.b2` type-check against the TDS variables. Light and dark values follow the inherited `color-scheme`.
|
|
84
|
+
|
|
85
|
+
#### Custom Variables (Advanced)
|
|
86
|
+
|
|
87
|
+
### Define Config
|
|
88
|
+
|
|
89
|
+
Extend the TDS variables with app tokens, and export the bound helpers.
|
|
90
|
+
|
|
91
|
+
```ts title="zyzz.config.ts"
|
|
92
|
+
import { variables } from '@tempoxyz/ds'
|
|
93
|
+
import { Config, Vars } from 'zyzz'
|
|
94
|
+
|
|
95
|
+
export const { style, vars } = Config.create({
|
|
96
|
+
id: 'app',
|
|
97
|
+
vars: Vars.extend(variables, { spacing: { bleed: '-0.75rem' } }, { id: 'app/vars' }),
|
|
98
|
+
})
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Place `zyzz.config.ts` at the root of the application source, such as `src/zyzz.config.ts`. The Vite plugin scans its directory for global styles.
|
|
102
|
+
|
|
103
|
+
### Use a Component
|
|
104
|
+
|
|
105
|
+
Apply `vars()` to the app root. Style your markup with the bound `style` helper, which accepts TDS and app tokens.
|
|
106
|
+
|
|
107
|
+
```tsx title="Checkout.tsx"
|
|
108
|
+
import { Button } from '@tempoxyz/ds'
|
|
109
|
+
import { style, vars } from './zyzz.config.js'
|
|
110
|
+
|
|
111
|
+
export function App() {
|
|
112
|
+
return (
|
|
113
|
+
<main {...vars()}>
|
|
114
|
+
<Checkout />
|
|
115
|
+
</main>
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function Checkout() {
|
|
120
|
+
return (
|
|
121
|
+
<section {...styles.card()}>
|
|
122
|
+
<p>Ready to continue?</p>
|
|
123
|
+
<Button>Continue</Button>
|
|
124
|
+
</section>
|
|
125
|
+
)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
namespace styles {
|
|
129
|
+
export const card = style({
|
|
130
|
+
backgroundColor: 'background.elevated',
|
|
131
|
+
color: 'content.primary',
|
|
132
|
+
marginInline: 'bleed',
|
|
133
|
+
padding: '24',
|
|
134
|
+
})
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Other Bundlers
|
|
139
|
+
|
|
140
|
+
### Configure the Bundler
|
|
141
|
+
|
|
142
|
+
Add the matching unplugin adapter to the bundler configuration. Keep the existing TypeScript and JSX transforms.
|
|
143
|
+
|
|
144
|
+
```ts title="rollup.config.ts"
|
|
145
|
+
import { zyzz } from 'zyzz/unplugin'
|
|
146
|
+
|
|
147
|
+
const plugins = [zyzz.rollup()]
|
|
148
|
+
// Use zyzz.webpack() or zyzz.esbuild() for those bundlers.
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Load the emitted stylesheet and script in the document. Adjust the paths to the deployment base.
|
|
152
|
+
|
|
153
|
+
```html title="index.html"
|
|
154
|
+
<link rel="stylesheet" href="/zyzz.css" />
|
|
155
|
+
<script src="/zyzz.js"></script>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Run the existing build command. [Bundler Setup](https://zyzz.style/docs/api/unplugin) lists the configuration for each bundler.
|
|
159
|
+
|
|
160
|
+
#### TDS Variables (Quick)
|
|
161
|
+
|
|
162
|
+
### Use a Component
|
|
163
|
+
|
|
164
|
+
Import components from `@tempoxyz/ds`. Style your own markup with TDS tokens through `style`.
|
|
165
|
+
|
|
166
|
+
```tsx title="Checkout.tsx"
|
|
167
|
+
import { Button, style } from '@tempoxyz/ds'
|
|
168
|
+
|
|
169
|
+
export function Checkout() {
|
|
170
|
+
return (
|
|
171
|
+
<section {...styles.card()}>
|
|
172
|
+
<p>Ready to continue?</p>
|
|
173
|
+
<Button>Continue</Button>
|
|
174
|
+
</section>
|
|
175
|
+
)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
namespace styles {
|
|
179
|
+
export const card = style({
|
|
180
|
+
backgroundColor: 'background.elevated',
|
|
181
|
+
borderRadius: 'sm',
|
|
182
|
+
color: 'content.primary',
|
|
183
|
+
padding: '24',
|
|
184
|
+
typography: 'body.b2',
|
|
185
|
+
})
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Tokens such as `content.primary`, `'24'`, and `body.b2` type-check against the TDS variables. Light and dark values follow the inherited `color-scheme`.
|
|
190
|
+
|
|
191
|
+
#### Custom Variables (Advanced)
|
|
192
|
+
|
|
193
|
+
### Define Config
|
|
194
|
+
|
|
195
|
+
Extend the TDS variables with app tokens, and export the bound helpers.
|
|
196
|
+
|
|
197
|
+
```ts title="zyzz.config.ts"
|
|
198
|
+
import { variables } from '@tempoxyz/ds'
|
|
199
|
+
import { Config, Vars } from 'zyzz'
|
|
200
|
+
|
|
201
|
+
export const { style, vars } = Config.create({
|
|
202
|
+
id: 'app',
|
|
203
|
+
vars: Vars.extend(variables, { spacing: { bleed: '-0.75rem' } }, { id: 'app/vars' }),
|
|
204
|
+
})
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Use a Component
|
|
208
|
+
|
|
209
|
+
Apply `vars()` to the app root. Style your markup with the bound `style` helper, which accepts TDS and app tokens.
|
|
210
|
+
|
|
211
|
+
```tsx title="Checkout.tsx"
|
|
212
|
+
import { Button } from '@tempoxyz/ds'
|
|
213
|
+
import { style, vars } from './zyzz.config.js'
|
|
214
|
+
|
|
215
|
+
export function App() {
|
|
216
|
+
return (
|
|
217
|
+
<main {...vars()}>
|
|
218
|
+
<Checkout />
|
|
219
|
+
</main>
|
|
220
|
+
)
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function Checkout() {
|
|
224
|
+
return (
|
|
225
|
+
<section {...styles.card()}>
|
|
226
|
+
<p>Ready to continue?</p>
|
|
227
|
+
<Button>Continue</Button>
|
|
228
|
+
</section>
|
|
229
|
+
)
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
namespace styles {
|
|
233
|
+
export const card = style({
|
|
234
|
+
backgroundColor: 'background.elevated',
|
|
235
|
+
color: 'content.primary',
|
|
236
|
+
marginInline: 'bleed',
|
|
237
|
+
padding: '24',
|
|
238
|
+
})
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### React Native
|
|
243
|
+
|
|
244
|
+
### Configure Metro
|
|
245
|
+
|
|
246
|
+
Install the React Native peers, then wrap the Expo Metro configuration with Zyzz. Keep the existing transformer and Expo settings.
|
|
247
|
+
|
|
248
|
+
```sh
|
|
249
|
+
npx expo install expo-haptics react-native-reanimated react-native-svg react-native-worklets
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
```ts title="metro.config.ts"
|
|
253
|
+
import { getDefaultConfig } from 'expo/metro-config'
|
|
254
|
+
import { zyzz } from 'zyzz/metro'
|
|
255
|
+
|
|
256
|
+
export default zyzz(getDefaultConfig(import.meta.dirname), {
|
|
257
|
+
fonts: { 'HB Set v0.96': 'HBSet', Inter: 'Inter', 'JetBrains Mono': 'JetBrainsMono' },
|
|
258
|
+
units: { px: 1, rem: 16 },
|
|
259
|
+
})
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
`fonts` maps each Figma family to a font that your app registers. The library bundles no font files. To preview with iOS system fonts, map a family to `System`.
|
|
263
|
+
|
|
264
|
+
#### TDS Variables (Quick)
|
|
265
|
+
|
|
266
|
+
### Use a Component
|
|
267
|
+
|
|
268
|
+
Render components from `@tempoxyz/ds/mobile` below a `Provider` at the app root. Styles resolve against the nearest `Provider` above them.
|
|
269
|
+
|
|
270
|
+
```tsx title="App.tsx"
|
|
271
|
+
import { Button, Provider, style } from '@tempoxyz/ds/mobile'
|
|
272
|
+
import { Text, View } from 'react-native'
|
|
273
|
+
|
|
274
|
+
export function App() {
|
|
275
|
+
return (
|
|
276
|
+
<Provider colorScheme="system">
|
|
277
|
+
<Checkout />
|
|
278
|
+
</Provider>
|
|
279
|
+
)
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
function Checkout() {
|
|
283
|
+
return (
|
|
284
|
+
<View {...styles.card()}>
|
|
285
|
+
<Text {...styles.label()}>Ready to continue?</Text>
|
|
286
|
+
<Button onPress={() => {}}>Continue</Button>
|
|
287
|
+
</View>
|
|
288
|
+
)
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
namespace styles {
|
|
292
|
+
export const card = style({
|
|
293
|
+
backgroundColor: 'background.elevated',
|
|
294
|
+
gap: '12',
|
|
295
|
+
paddingHorizontal: '20',
|
|
296
|
+
paddingVertical: '16',
|
|
297
|
+
})
|
|
298
|
+
|
|
299
|
+
export const label = style({ color: 'content.primary', typography: 'body.b2' })
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
`colorScheme="system"` follows the device setting. To override it, pass `light` or `dark`.
|
|
304
|
+
|
|
305
|
+
#### Custom Variables (Advanced)
|
|
306
|
+
|
|
307
|
+
### Define Config
|
|
308
|
+
|
|
309
|
+
Define app tokens in sets named `base` and `inverse`. Every Zyzz config reads the set that `Provider` selects. Reference TDS values through `variables` and `inverse`.
|
|
310
|
+
|
|
311
|
+
```ts title="zyzz.config.ts"
|
|
312
|
+
import { inverse as tdsInverse, variables } from '@tempoxyz/ds/mobile'
|
|
313
|
+
import { Vars } from 'zyzz'
|
|
314
|
+
import { defineConfig } from 'zyzz/react-native'
|
|
315
|
+
|
|
316
|
+
export const base = Vars.define({
|
|
317
|
+
color: {
|
|
318
|
+
caption: { light: variables.color.content.secondary, dark: variables.color.content.secondary },
|
|
319
|
+
},
|
|
320
|
+
})
|
|
321
|
+
|
|
322
|
+
export const inverse = Vars.extend(base, {
|
|
323
|
+
color: {
|
|
324
|
+
caption: {
|
|
325
|
+
light: tdsInverse.color.content.secondary,
|
|
326
|
+
dark: tdsInverse.color.content.secondary,
|
|
327
|
+
},
|
|
328
|
+
},
|
|
329
|
+
})
|
|
330
|
+
|
|
331
|
+
export const { style } = defineConfig({ defaultVars: 'base', id: 'app', vars: { base, inverse } })
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
Zyzz extensions only replace existing tokens. Put app tokens in your own sets, not in extensions of the TDS sets.
|
|
335
|
+
|
|
336
|
+
### Use a Component
|
|
337
|
+
|
|
338
|
+
Render TDS components below a `Provider`. Style your own elements with the bound `style` helper.
|
|
339
|
+
|
|
340
|
+
```tsx title="App.tsx"
|
|
341
|
+
import { Button, Provider } from '@tempoxyz/ds/mobile'
|
|
342
|
+
import { Text, View } from 'react-native'
|
|
343
|
+
import { style } from './zyzz.config.js'
|
|
344
|
+
|
|
345
|
+
export function App() {
|
|
346
|
+
return (
|
|
347
|
+
<Provider colorScheme="system">
|
|
348
|
+
<View>
|
|
349
|
+
<Text {...styles.caption()}>Ready to continue?</Text>
|
|
350
|
+
<Button onPress={() => {}}>Continue</Button>
|
|
351
|
+
</View>
|
|
352
|
+
</Provider>
|
|
353
|
+
)
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
namespace styles {
|
|
357
|
+
export const caption = style({ color: 'caption' })
|
|
358
|
+
}
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
## Next Steps
|
|
362
|
+
|
|
363
|
+
[Build a Layout](/docs/components/app-shell)
|
|
364
|
+
|
|
365
|
+
Place a sticky sidebar beside the main content column.
|
|
366
|
+
|
|
367
|
+
[Trigger Actions](/docs/components/button)
|
|
368
|
+
|
|
369
|
+
Submit forms, send payments, and run other actions.
|
|
370
|
+
|
|
371
|
+
[Collect TextInput](/docs/components/field)
|
|
372
|
+
|
|
373
|
+
Link labels, descriptions, and errors to form controls.
|
|
374
|
+
|
|
375
|
+
[Show Feedback](/docs/components/toast)
|
|
376
|
+
|
|
377
|
+
Confirm results with brief notifications.
|