@tempoxyz/ds 0.3.10 → 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.
Files changed (210) hide show
  1. package/README.md +7 -6
  2. package/dist/docs/AGENTS.md +12 -0
  3. package/dist/docs/index.md +145 -0
  4. package/dist/docs/marketing/introduction/getting-started.md +241 -0
  5. package/dist/docs/product/components/accordion.md +489 -0
  6. package/dist/docs/product/components/address-card.md +147 -0
  7. package/dist/docs/product/components/agent-logo.md +194 -0
  8. package/dist/docs/product/components/alert-dialog.md +631 -0
  9. package/dist/docs/product/components/alert.md +448 -0
  10. package/dist/docs/product/components/amount-input.md +305 -0
  11. package/dist/docs/product/components/amount.md +794 -0
  12. package/dist/docs/product/components/app-shell.md +559 -0
  13. package/dist/docs/product/components/asset-chip.md +294 -0
  14. package/dist/docs/product/components/autocomplete.md +620 -0
  15. package/dist/docs/product/components/avatar.md +321 -0
  16. package/dist/docs/product/components/badge.md +339 -0
  17. package/dist/docs/product/components/badged-logo.md +116 -0
  18. package/dist/docs/product/components/banner.md +379 -0
  19. package/dist/docs/product/components/bar-chart.md +208 -0
  20. package/dist/docs/product/components/breadcrumbs.md +380 -0
  21. package/dist/docs/product/components/button-group.md +286 -0
  22. package/dist/docs/product/components/button.md +650 -0
  23. package/dist/docs/product/components/calendar.md +375 -0
  24. package/dist/docs/product/components/callout.md +96 -0
  25. package/dist/docs/product/components/checkbox-group.md +521 -0
  26. package/dist/docs/product/components/checkbox.md +467 -0
  27. package/dist/docs/product/components/choice-group.md +516 -0
  28. package/dist/docs/product/components/choicebox.md +641 -0
  29. package/dist/docs/product/components/code.md +100 -0
  30. package/dist/docs/product/components/combobox.md +939 -0
  31. package/dist/docs/product/components/container.md +257 -0
  32. package/dist/docs/product/components/copy-button.md +642 -0
  33. package/dist/docs/product/components/date-picker.md +514 -0
  34. package/dist/docs/product/components/dialog.md +1332 -0
  35. package/dist/docs/product/components/drawer.md +966 -0
  36. package/dist/docs/product/components/empty.md +340 -0
  37. package/dist/docs/product/components/field.md +570 -0
  38. package/dist/docs/product/components/fieldset.md +398 -0
  39. package/dist/docs/product/components/frame.md +434 -0
  40. package/dist/docs/product/components/gauge.md +299 -0
  41. package/dist/docs/product/components/get-started-visual.md +117 -0
  42. package/dist/docs/product/components/grid.md +288 -0
  43. package/dist/docs/product/components/hero-visual.md +155 -0
  44. package/dist/docs/product/components/hex.md +487 -0
  45. package/dist/docs/product/components/icon-tile.md +292 -0
  46. package/dist/docs/product/components/identicon.md +371 -0
  47. package/dist/docs/product/components/inline.md +233 -0
  48. package/dist/docs/product/components/inset.md +225 -0
  49. package/dist/docs/product/components/kbd.md +423 -0
  50. package/dist/docs/product/components/list-group.md +981 -0
  51. package/dist/docs/product/components/loading-dots.md +237 -0
  52. package/dist/docs/product/components/menu.md +934 -0
  53. package/dist/docs/product/components/native-select.md +204 -0
  54. package/dist/docs/product/components/network-logo.md +248 -0
  55. package/dist/docs/product/components/number-field.md +543 -0
  56. package/dist/docs/product/components/otp-field.md +616 -0
  57. package/dist/docs/product/components/pagination.md +516 -0
  58. package/dist/docs/product/components/popover.md +544 -0
  59. package/dist/docs/product/components/progress.md +388 -0
  60. package/dist/docs/product/components/qr.md +314 -0
  61. package/dist/docs/product/components/radio-group.md +528 -0
  62. package/dist/docs/product/components/secret-value.md +406 -0
  63. package/dist/docs/product/components/select.md +751 -0
  64. package/dist/docs/product/components/separator.md +379 -0
  65. package/dist/docs/product/components/sidebar-menu.md +922 -0
  66. package/dist/docs/product/components/skeleton.md +517 -0
  67. package/dist/docs/product/components/slider.md +539 -0
  68. package/dist/docs/product/components/snippet.md +424 -0
  69. package/dist/docs/product/components/spinner.md +216 -0
  70. package/dist/docs/product/components/split-bar.md +139 -0
  71. package/dist/docs/product/components/split-button.md +464 -0
  72. package/dist/docs/product/components/stack.md +299 -0
  73. package/dist/docs/product/components/status-chip.md +226 -0
  74. package/dist/docs/product/components/status-indicator.md +119 -0
  75. package/dist/docs/product/components/status-row.md +174 -0
  76. package/dist/docs/product/components/stepper.md +451 -0
  77. package/dist/docs/product/components/success-hero.md +157 -0
  78. package/dist/docs/product/components/surface.md +639 -0
  79. package/dist/docs/product/components/switch.md +472 -0
  80. package/dist/docs/product/components/table.md +967 -0
  81. package/dist/docs/product/components/tabs.md +627 -0
  82. package/dist/docs/product/components/tempo-logo.md +185 -0
  83. package/dist/docs/product/components/text-input.md +624 -0
  84. package/dist/docs/product/components/textarea.md +352 -0
  85. package/dist/docs/product/components/toast.md +535 -0
  86. package/dist/docs/product/components/token-logo.md +371 -0
  87. package/dist/docs/product/components/token.md +247 -0
  88. package/dist/docs/product/components/tooltip.md +490 -0
  89. package/dist/docs/product/components/verification-code.md +116 -0
  90. package/dist/docs/product/components/visual.md +249 -0
  91. package/dist/docs/product/components.md +203 -0
  92. package/dist/docs/product/foundations/accessibility.md +377 -0
  93. package/dist/docs/product/foundations/agents.md +150 -0
  94. package/dist/docs/product/foundations/color.md +522 -0
  95. package/dist/docs/product/foundations/content/tone.md +194 -0
  96. package/dist/docs/product/foundations/content/voice.md +194 -0
  97. package/dist/docs/product/foundations/content/writing-style.md +406 -0
  98. package/dist/docs/product/foundations/iconography.md +282 -0
  99. package/dist/docs/product/foundations/intent.md +360 -0
  100. package/dist/docs/product/foundations/layout.md +508 -0
  101. package/dist/docs/product/foundations/linter.md +496 -0
  102. package/dist/docs/product/foundations/motion.md +151 -0
  103. package/dist/docs/product/foundations/radius-and-padding.md +86 -0
  104. package/dist/docs/product/foundations/typography.md +266 -0
  105. package/dist/docs/product/introduction/faq.md +133 -0
  106. package/dist/docs/product/introduction/getting-started.md +377 -0
  107. package/dist/docs/product/patterns/blockchain-values.md +709 -0
  108. package/dist/docs/product/patterns/dashboards.md +638 -0
  109. package/dist/docs/product/patterns/destructive-actions.md +626 -0
  110. package/dist/docs/product/patterns/empty-states.md +612 -0
  111. package/dist/docs/product/patterns/errors-and-validation.md +808 -0
  112. package/dist/docs/product/patterns/feedback-and-status.md +518 -0
  113. package/dist/docs/product/patterns/forms.md +679 -0
  114. package/dist/docs/product/patterns/loading.md +630 -0
  115. package/dist/docs/product/patterns/navigation.md +397 -0
  116. package/dist/docs/product/patterns/payments.md +765 -0
  117. package/dist/docs/product/patterns/responsive-layout.md +997 -0
  118. package/dist/docs/product/patterns/tables-and-lists.md +964 -0
  119. package/dist/docs/product/products/tempo-console.md +671 -0
  120. package/dist/docs/product/products/tempo-performance.md +437 -0
  121. package/dist/docs/product/products/tempo-wallet.md +438 -0
  122. package/dist/marketing/index.d.ts +4 -0
  123. package/dist/marketing/index.d.ts.map +1 -0
  124. package/dist/marketing/index.js +4 -0
  125. package/dist/marketing/index.js.map +1 -0
  126. package/dist/marketing/index.js.zyzz.json +1 -0
  127. package/dist/marketing/vars.d.ts +907 -0
  128. package/dist/marketing/vars.d.ts.map +1 -0
  129. package/dist/marketing/vars.js +15 -0
  130. package/dist/marketing/vars.js.map +1 -0
  131. package/dist/marketing/vars.js.zyzz.json +1 -0
  132. package/dist/marketing/zyzz.config.d.ts +4512 -0
  133. package/dist/marketing/zyzz.config.d.ts.map +1 -0
  134. package/dist/marketing/zyzz.config.js +63 -0
  135. package/dist/marketing/zyzz.config.js.map +1 -0
  136. package/dist/marketing/zyzz.config.js.zyzz.json +1 -0
  137. package/dist/oxlint/index.d.ts +12 -1
  138. package/dist/oxlint/index.d.ts.map +1 -1
  139. package/dist/oxlint/index.js +39 -1
  140. package/dist/oxlint/index.js.map +1 -1
  141. package/dist/oxlint/internal/Docs.d.ts +9 -0
  142. package/dist/oxlint/internal/Docs.d.ts.map +1 -0
  143. package/dist/oxlint/internal/Docs.js +15 -0
  144. package/dist/oxlint/internal/Docs.js.map +1 -0
  145. package/dist/oxlint/internal/Imports.d.ts +1 -1
  146. package/dist/oxlint/internal/Imports.d.ts.map +1 -1
  147. package/dist/oxlint/internal/Imports.js +2 -0
  148. package/dist/oxlint/internal/Imports.js.map +1 -1
  149. package/dist/oxlint/internal/Styles.d.ts +40 -0
  150. package/dist/oxlint/internal/Styles.d.ts.map +1 -0
  151. package/dist/oxlint/internal/Styles.js +194 -0
  152. package/dist/oxlint/internal/Styles.js.map +1 -0
  153. package/dist/oxlint/internal/Tokens.d.ts +16 -0
  154. package/dist/oxlint/internal/Tokens.d.ts.map +1 -0
  155. package/dist/oxlint/internal/Tokens.js +39 -0
  156. package/dist/oxlint/internal/Tokens.js.map +1 -0
  157. package/dist/oxlint/rules/NoCrossSurface.d.ts +2 -2
  158. package/dist/oxlint/rules/NoCrossSurface.js +3 -3
  159. package/dist/oxlint/rules/NoCrossSurface.js.map +1 -1
  160. package/dist/oxlint/rules/NoCustomValues.d.ts +11 -0
  161. package/dist/oxlint/rules/NoCustomValues.d.ts.map +1 -0
  162. package/dist/oxlint/rules/NoCustomValues.js +150 -0
  163. package/dist/oxlint/rules/NoCustomValues.js.map +1 -0
  164. package/dist/oxlint/rules/NoSingleKeyShortcuts.d.ts +11 -0
  165. package/dist/oxlint/rules/NoSingleKeyShortcuts.d.ts.map +1 -0
  166. package/dist/oxlint/rules/NoSingleKeyShortcuts.js +158 -0
  167. package/dist/oxlint/rules/NoSingleKeyShortcuts.js.map +1 -0
  168. package/dist/oxlint/rules/PreferComponent.d.ts +3 -2
  169. package/dist/oxlint/rules/PreferComponent.d.ts.map +1 -1
  170. package/dist/oxlint/rules/PreferComponent.js +11 -4
  171. package/dist/oxlint/rules/PreferComponent.js.map +1 -1
  172. package/dist/oxlint/rules/PreferLayout.d.ts +9 -0
  173. package/dist/oxlint/rules/PreferLayout.d.ts.map +1 -0
  174. package/dist/oxlint/rules/PreferLayout.js +90 -0
  175. package/dist/oxlint/rules/PreferLayout.js.map +1 -0
  176. package/dist/oxlint/rules/PreferProgress.d.ts +9 -0
  177. package/dist/oxlint/rules/PreferProgress.d.ts.map +1 -0
  178. package/dist/oxlint/rules/PreferProgress.js +43 -0
  179. package/dist/oxlint/rules/PreferProgress.js.map +1 -0
  180. package/dist/oxlint/rules/PreferSurface.d.ts +9 -0
  181. package/dist/oxlint/rules/PreferSurface.d.ts.map +1 -0
  182. package/dist/oxlint/rules/PreferSurface.js +55 -0
  183. package/dist/oxlint/rules/PreferSurface.js.map +1 -0
  184. package/dist/oxlint/rules/RequireAccessibleName.d.ts.map +1 -1
  185. package/dist/oxlint/rules/RequireAccessibleName.js +3 -1
  186. package/dist/oxlint/rules/RequireAccessibleName.js.map +1 -1
  187. package/dist/oxlint/rules/RequireScrollRegion.d.ts +11 -0
  188. package/dist/oxlint/rules/RequireScrollRegion.d.ts.map +1 -0
  189. package/dist/oxlint/rules/RequireScrollRegion.js +71 -0
  190. package/dist/oxlint/rules/RequireScrollRegion.js.map +1 -0
  191. package/dist/web/icons/index.js.zyzz.json +1 -0
  192. package/package.json +6 -1
  193. package/src/marketing/README.md +21 -0
  194. package/src/marketing/index.ts +3 -0
  195. package/src/marketing/vars.ts +751 -0
  196. package/src/marketing/zyzz.config.ts +376 -0
  197. package/src/oxlint/index.ts +40 -1
  198. package/src/oxlint/internal/Docs.ts +18 -0
  199. package/src/oxlint/internal/Imports.ts +2 -1
  200. package/src/oxlint/internal/Styles.ts +240 -0
  201. package/src/oxlint/internal/Tokens.ts +43 -0
  202. package/src/oxlint/rules/NoCrossSurface.ts +3 -3
  203. package/src/oxlint/rules/NoCustomValues.ts +170 -0
  204. package/src/oxlint/rules/NoSingleKeyShortcuts.ts +190 -0
  205. package/src/oxlint/rules/PreferComponent.ts +11 -4
  206. package/src/oxlint/rules/PreferLayout.ts +96 -0
  207. package/src/oxlint/rules/PreferProgress.ts +49 -0
  208. package/src/oxlint/rules/PreferSurface.ts +70 -0
  209. package/src/oxlint/rules/RequireAccessibleName.ts +3 -1
  210. package/src/oxlint/rules/RequireScrollRegion.ts +92 -0
@@ -0,0 +1,379 @@
1
+ # Separator
2
+
3
+ Draws a rule between groups of content.
4
+
5
+ [View source and API](https://github.com/tempoxyz/ds/blob/main/src/web/components/Separator.tsx)
6
+
7
+ Figma: [Elements/Divider](https://www.figma.com/design/yE96kcymnNR88PJp6G1sPs?node-id=5227-3269)
8
+
9
+ ## Overview
10
+
11
+ Separator renders a 1px rule between thematic groups, such as menu sections or toolbar clusters. A horizontal rule sits centered in a 16px row. With `children`, it centers a short label between two rules, such as `or` between two ways to sign in.
12
+
13
+ ## Examples
14
+
15
+ ### Basic
16
+
17
+ ```tsx
18
+ import { Separator, style } from '@tempoxyz/ds'
19
+
20
+ export const fill = true
21
+ export function Demo() {
22
+ return (
23
+ <div {...styles.stack()}>
24
+ <span>Above</span>
25
+ <Separator />
26
+ <span>Below</span>
27
+ </div>
28
+ )
29
+ }
30
+
31
+ namespace styles {
32
+ export const stack = style({
33
+ display: 'flex',
34
+ flexDirection: 'column',
35
+ gap: '12',
36
+ maxWidth: '16rem !custom',
37
+ })
38
+ }
39
+ ```
40
+
41
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/Separator/Basic.tsx)
42
+
43
+ ### Orientation
44
+
45
+ Set `orientation` to `horizontal` (default) or `vertical`.
46
+
47
+ ```tsx
48
+ import { Separator, style } from '@tempoxyz/ds'
49
+
50
+ export function Demo() {
51
+ return (
52
+ <div {...styles.row()}>
53
+ <span>Left</span>
54
+ <Separator orientation="vertical" />
55
+ <span>Right</span>
56
+ </div>
57
+ )
58
+ }
59
+
60
+ namespace styles {
61
+ export const row = style({ alignItems: 'center', display: 'flex', gap: '12', height: '24' })
62
+ }
63
+ ```
64
+
65
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/Separator/Orientation.tsx)
66
+
67
+ ### Label
68
+
69
+ Pass a short label as `children` to join two alternatives. A vertical separator ignores it.
70
+
71
+ ```tsx
72
+ import { Button, Separator, style } from '@tempoxyz/ds'
73
+
74
+ export function Demo() {
75
+ return (
76
+ <div {...styles.stack()}>
77
+ <Button variant="secondary">Continue with passkey</Button>
78
+ <Separator>or</Separator>
79
+ <Button variant="secondary">Continue with email</Button>
80
+ </div>
81
+ )
82
+ }
83
+
84
+ namespace styles {
85
+ export const stack = style({ display: 'grid', gap: '16', width: '320' })
86
+ }
87
+ ```
88
+
89
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/Separator/Label.tsx)
90
+
91
+ ## Anatomy
92
+
93
+ Import the component and assemble its parts.
94
+
95
+ ```tsx
96
+ import { Separator } from '@tempoxyz/ds'
97
+
98
+ <Separator />
99
+ ```
100
+
101
+ ## Guidelines
102
+
103
+ ### When to Use
104
+
105
+ * Divide groups that spacing alone does not separate, such as line items and a total.
106
+ * Divide clusters of toolbar controls, with `orientation="vertical"`.
107
+ * Join two alternatives with a label, such as `or` between two ways to sign in.
108
+
109
+ ### When Not to Use
110
+
111
+ * Use [ListGroup](list-group.md) or [Table](table.md) for lists of records. They draw their own dividers.
112
+ * Use `SidebarMenu.Group` in a [SidebarMenu](sidebar-menu.md) and `Menu.Separator` in a [Menu](menu.md).
113
+
114
+ ### Try Space First
115
+
116
+ A larger gap separates most groups, such as a [Stack](stack.md) with `gap="24"`. Add a separator only if the groups still run together, or one row must stand apart, such as a total.
117
+
118
+ **Do:** Separate the total from the line items above it.
119
+
120
+ ```tsx
121
+ /**
122
+ * Do example for "Try Space First" on the Separator page.
123
+ * Separate the total from the line items above it.
124
+ * @module
125
+ */
126
+ import { Separator, style } from '@tempoxyz/ds'
127
+
128
+ /** Renders the static preview, which the guideline card shows inert. */
129
+ export function Demo() {
130
+ return (
131
+ <div {...styles.summary()}>
132
+ <div {...styles.row()}>
133
+ <span>Amount</span>
134
+ <span>250.00 USDC</span>
135
+ </div>
136
+ <div {...styles.row()}>
137
+ <span>Network fee</span>
138
+ <span>0.01 USDC</span>
139
+ </div>
140
+ <Separator />
141
+ <div {...styles.total()}>
142
+ <span>Total</span>
143
+ <span>250.01 USDC</span>
144
+ </div>
145
+ </div>
146
+ )
147
+ }
148
+
149
+ namespace styles {
150
+ export const row = style({
151
+ color: 'content.secondary',
152
+ display: 'flex',
153
+ justifyContent: 'space-between',
154
+ typography: 'body.b2',
155
+ })
156
+
157
+ export const summary = style({
158
+ display: 'flex',
159
+ flexDirection: 'column',
160
+ rowGap: '12',
161
+ width: '100% !custom',
162
+ })
163
+
164
+ export const total = style({
165
+ color: 'content.primary',
166
+ display: 'flex',
167
+ justifyContent: 'space-between',
168
+ typography: 'body.b2Strong',
169
+ })
170
+ }
171
+ ```
172
+
173
+ **Don't:** Rule off every row.
174
+
175
+ ```tsx
176
+ /** Don't example for "Try Space First" on the Separator page. Don't rule off every row. @module */
177
+ import { Separator, style } from '@tempoxyz/ds'
178
+
179
+ /** Renders the static preview, which the guideline card shows inert. */
180
+ export function Demo() {
181
+ return (
182
+ <div {...styles.summary()}>
183
+ <Separator />
184
+ <div {...styles.row()}>
185
+ <span>Amount</span>
186
+ <span>250.00 USDC</span>
187
+ </div>
188
+ <Separator />
189
+ <div {...styles.row()}>
190
+ <span>Network fee</span>
191
+ <span>0.01 USDC</span>
192
+ </div>
193
+ <Separator />
194
+ <div {...styles.total()}>
195
+ <span>Total</span>
196
+ <span>250.01 USDC</span>
197
+ </div>
198
+ <Separator />
199
+ </div>
200
+ )
201
+ }
202
+
203
+ namespace styles {
204
+ export const row = style({
205
+ color: 'content.secondary',
206
+ display: 'flex',
207
+ justifyContent: 'space-between',
208
+ typography: 'body.b2',
209
+ })
210
+
211
+ export const summary = style({
212
+ display: 'flex',
213
+ flexDirection: 'column',
214
+ rowGap: '12',
215
+ width: '100% !custom',
216
+ })
217
+
218
+ export const total = style({
219
+ color: 'content.primary',
220
+ display: 'flex',
221
+ justifyContent: 'space-between',
222
+ typography: 'body.b2Strong',
223
+ })
224
+ }
225
+ ```
226
+
227
+ ### Keep Rules Inside Containers
228
+
229
+ The edge of a [Surface](surface.md) or popup already ends the group.
230
+
231
+ **Do:** Place separators only between groups.
232
+
233
+ ```tsx
234
+ /**
235
+ * Do example for "Keep Rules Inside Containers" on the Separator page.
236
+ * Place separators only between groups.
237
+ * @module
238
+ */
239
+ import { Separator, style, Surface } from '@tempoxyz/ds'
240
+
241
+ /** Renders the static preview, which the guideline card shows inert. */
242
+ export function Demo() {
243
+ return (
244
+ <div {...styles.canvas()}>
245
+ <Surface size="medium" {...styles.summary()}>
246
+ <div {...styles.row()}>
247
+ <span>Amount</span>
248
+ <span>250.00 USDC</span>
249
+ </div>
250
+ <div {...styles.row()}>
251
+ <span>Network fee</span>
252
+ <span>0.01 USDC</span>
253
+ </div>
254
+ <Separator />
255
+ <div {...styles.total()}>
256
+ <span>Total</span>
257
+ <span>250.01 USDC</span>
258
+ </div>
259
+ </Surface>
260
+ </div>
261
+ )
262
+ }
263
+
264
+ namespace styles {
265
+ export const canvas = style({
266
+ backgroundColor: 'background.primary',
267
+ borderRadius: 'sm',
268
+ boxSizing: 'border-box',
269
+ padding: '12',
270
+ width: '100% !custom',
271
+ })
272
+
273
+ export const row = style({
274
+ color: 'content.secondary',
275
+ display: 'flex',
276
+ justifyContent: 'space-between',
277
+ typography: 'body.b2',
278
+ })
279
+
280
+ export const summary = style({ display: 'flex', flexDirection: 'column', rowGap: '12' })
281
+
282
+ export const total = style({
283
+ color: 'content.primary',
284
+ display: 'flex',
285
+ justifyContent: 'space-between',
286
+ typography: 'body.b2Strong',
287
+ })
288
+ }
289
+ ```
290
+
291
+ **Don't:** Place a separator at the top or bottom edge of a Surface.
292
+
293
+ ```tsx
294
+ /**
295
+ * Don't example for "Keep Rules Inside Containers" on the Separator page.
296
+ * Don't place a separator at the top or bottom edge of a Surface.
297
+ * @module
298
+ */
299
+ import { Separator, style, Surface } from '@tempoxyz/ds'
300
+
301
+ /** Renders the static preview, which the guideline card shows inert. */
302
+ export function Demo() {
303
+ return (
304
+ <div {...styles.canvas()}>
305
+ <Surface size="medium" {...styles.summary()}>
306
+ <Separator />
307
+ <div {...styles.row()}>
308
+ <span>Amount</span>
309
+ <span>250.00 USDC</span>
310
+ </div>
311
+ <div {...styles.row()}>
312
+ <span>Network fee</span>
313
+ <span>0.01 USDC</span>
314
+ </div>
315
+ <Separator />
316
+ <div {...styles.total()}>
317
+ <span>Total</span>
318
+ <span>250.01 USDC</span>
319
+ </div>
320
+ <Separator />
321
+ </Surface>
322
+ </div>
323
+ )
324
+ }
325
+
326
+ namespace styles {
327
+ export const canvas = style({
328
+ backgroundColor: 'background.primary',
329
+ borderRadius: 'sm',
330
+ boxSizing: 'border-box',
331
+ padding: '12',
332
+ width: '100% !custom',
333
+ })
334
+
335
+ export const row = style({
336
+ color: 'content.secondary',
337
+ display: 'flex',
338
+ justifyContent: 'space-between',
339
+ typography: 'body.b2',
340
+ })
341
+
342
+ export const summary = style({ display: 'flex', flexDirection: 'column', rowGap: '12' })
343
+
344
+ export const total = style({
345
+ color: 'content.primary',
346
+ display: 'flex',
347
+ justifyContent: 'space-between',
348
+ typography: 'body.b2Strong',
349
+ })
350
+ }
351
+ ```
352
+
353
+ ## Accessibility
354
+
355
+ ### Semantics
356
+
357
+ * **Element (separator):** Exposed as a boundary between groups. Some screen readers announce "separator", and others skip it.
358
+ * **Orientation (aria-orientation):** Follows `orientation`. A vertical separator stretches to the height of its row, at least 1em.
359
+ * **Label (div):** A separator hides its children from screen readers, so a labeled one renders a `div` without the role. Screen readers read the label in place, and the rules stay hidden.
360
+ * **No Focus:** Not focusable, with no keyboard behavior.
361
+
362
+ ### Your Responsibilities
363
+
364
+ * **Use Headings for Structure (SC 1.3.1):** A separator does not [name the group](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) that follows it.
365
+ * **Separate Meaningful Groups:** Use it only between meaningful groups. Draw a decorative line with a CSS border.
366
+
367
+ ## Related
368
+
369
+ [Stack](stack.md)
370
+
371
+ Use for spacing groups apart.
372
+
373
+ [ListGroup](list-group.md)
374
+
375
+ Use for divided lists.
376
+
377
+ [Menu](menu.md)
378
+
379
+ Use for separators between menu groups.