@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,194 @@
1
+ # Tone
2
+
3
+ How Tempo's voice adjusts to the reader, from a first visit to an error.
4
+
5
+ ## Overview
6
+
7
+ [Voice](voice.md) stays the same everywhere. Tone shifts with what the reader is doing and how they feel, and grows plainer and more specific as more money or access is at stake.
8
+
9
+ ## Situations
10
+
11
+ ### Onboarding
12
+
13
+ Welcome a new reader, and explain each new term once, in one sentence.
14
+
15
+ **Do:** Explain the first step and why it matters.
16
+
17
+ ```tsx
18
+ <Empty.Root>
19
+ <Empty.Icon>
20
+ <Wallet />
21
+ </Empty.Icon>
22
+ <Empty.Title>Add funds to start</Empty.Title>
23
+ <Empty.Description>Deposit dollars or stablecoins to send your first payment.</Empty.Description>
24
+ <Empty.Actions>
25
+ <Button size="small">Add funds</Button>
26
+ </Empty.Actions>
27
+ </Empty.Root>
28
+ ```
29
+
30
+ **Don't:** Assume crypto vocabulary.
31
+
32
+ ```tsx
33
+ <Empty.Root>
34
+ <Empty.Icon>
35
+ <Wallet />
36
+ </Empty.Icon>
37
+ <Empty.Title>Bridge assets</Empty.Title>
38
+ <Empty.Description>Bridge ERC-20s to the L1 to bootstrap liquidity.</Empty.Description>
39
+ </Empty.Root>
40
+ ```
41
+
42
+ ### Success
43
+
44
+ State what finished in a positive [Toast](../../components/toast.md) when nothing is left to do, then stop.
45
+
46
+ * **Name the Result:** Use a noun and a past-tense verb.
47
+ * **Add the Detail:** Add the amount or recipient as confirmation.
48
+ * **Skip the Celebration:** Leave out praise, exclamation marks, and emoji.
49
+ * **Wait for the Network:** Show a pending state until the network confirms.
50
+
51
+ ### In Progress
52
+
53
+ Be calm and specific about what happens next and how long it takes.
54
+
55
+ * **Name the Step:** End a status label with an ellipsis (…).
56
+ * **Explain Long Waits:** Name the wait, and whether to stay on the page.
57
+
58
+ **Do:** State what the system does and set an expectation.
59
+
60
+ ```tsx
61
+ <Progress.Root value={60}>
62
+ <Progress.Label>Confirming payment</Progress.Label>
63
+ <Progress.Track>
64
+ <Progress.Indicator />
65
+ </Progress.Track>
66
+ </Progress.Root>
67
+ <p>This usually takes less than a second.</p>
68
+ ```
69
+
70
+ **Don't:** Leave the reader with an open-ended wait.
71
+
72
+ ```tsx
73
+ <Spinner />
74
+ <p>Please wait…</p>
75
+ ```
76
+
77
+ ### Warnings
78
+
79
+ State a risk once, beside the content it affects, and only if the reader can act on it.
80
+
81
+ **Do:** State the risk and what to check in one or two plain sentences.
82
+
83
+ ```tsx
84
+ /**
85
+ * Do example for "Warnings" on the Tone page.
86
+ * State the risk and what to check in one or two plain sentences.
87
+ * @module
88
+ */
89
+ import { Alert, style } from '@tempoxyz/ds'
90
+
91
+ /** Renders the static preview, which the guideline card shows inert. */
92
+ export function Demo() {
93
+ return (
94
+ <Alert intent="warning" {...styles.alert()}>
95
+ <Alert.Icon />
96
+ <Alert.Content>
97
+ Payments are final. Check that the address matches the one you were given.
98
+ </Alert.Content>
99
+ </Alert>
100
+ )
101
+ }
102
+
103
+ namespace styles {
104
+ export const alert = style({ maxWidth: '20rem !custom' })
105
+ }
106
+ ```
107
+
108
+ **Don't:** Shout, stack exclamation marks, or use the `negative` intent for a warning.
109
+
110
+ ```tsx
111
+ /**
112
+ * Don't example for "Warnings" on the Tone page.
113
+ * Don't shout, stack exclamation marks, or use the `negative` intent for a warning.
114
+ * @module
115
+ */
116
+ import { Alert, style } from '@tempoxyz/ds'
117
+
118
+ /** Renders the static preview, which the guideline card shows inert. */
119
+ export function Demo() {
120
+ return (
121
+ <Alert intent="negative" {...styles.alert()}>
122
+ <Alert.Icon />
123
+ <Alert.Content>
124
+ WARNING!! Double-check everything or your money is GONE forever!
125
+ </Alert.Content>
126
+ </Alert>
127
+ )
128
+ }
129
+
130
+ namespace styles {
131
+ export const alert = style({ maxWidth: '20rem !custom' })
132
+ }
133
+ ```
134
+
135
+ * **Local Risk (Alert):** Use a warning [Alert](../../components/alert.md) for a field or section.
136
+ * **Product-Wide Condition (Banner):** Use a warning [Banner](../../components/banner.md) for the whole product.
137
+
138
+ ### Errors
139
+
140
+ Stay neutral and direct, and follow the [error message structure](writing-style.md#structure-error-messages).
141
+
142
+ * **Lead With the Fix:** Add the cause only if it helps the reader act.
143
+ * **Show It Inline:** Show a blocking error inline, not in a [Toast](../../components/toast.md).
144
+ * **Keep the TextInput:** Keep the input, and state what to change.
145
+ * **Skip Blame and Jokes:** Don't apologize at length, blame, or joke.
146
+
147
+ ### Security and Keys
148
+
149
+ **Do:** State the exact consequence and who is responsible.
150
+
151
+ ```tsx
152
+ <Empty.Root>
153
+ <Empty.Icon>
154
+ <Key />
155
+ </Empty.Icon>
156
+ <Empty.Title>Save your recovery key</Empty.Title>
157
+ <Empty.Description>Anyone with this key can move your funds. Tempo cannot recover it for you.</Empty.Description>
158
+ </Empty.Root>
159
+ ```
160
+
161
+ **Don't:** Use humor for a security step.
162
+
163
+ ```tsx
164
+ <Empty.Root>
165
+ <Empty.Icon>
166
+ <Key />
167
+ </Empty.Icon>
168
+ <Empty.Title>Your secret sauce 🤫</Empty.Title>
169
+ <Empty.Description>Keep it somewhere safe-ish!</Empty.Description>
170
+ </Empty.Root>
171
+ ```
172
+
173
+ ### Sending Money
174
+
175
+ Repeat the exact amount, recipient, and fee on every step.
176
+
177
+ **Do:** Put the exact amount on the final action.
178
+
179
+ ```tsx
180
+ <Button><Send />Send 25.00 USDC</Button>
181
+ ```
182
+
183
+ **Don't:** Use a playful label for a payment.
184
+
185
+ ```tsx
186
+ <Button>Let's go</Button>
187
+ ```
188
+
189
+ ### Irreversible Actions
190
+
191
+ Use a serious, explicit tone, as [Destructive Actions](../../patterns/destructive-actions.md) shows.
192
+
193
+ * **Name the Consequence:** Name exactly what the action removes or ends.
194
+ * **Confirm Payments on Review:** On review, state once that payments are final.
@@ -0,0 +1,194 @@
1
+ # Voice
2
+
3
+ Tempo's personality in words, consistent across every product.
4
+
5
+ ## Overview
6
+
7
+ Voice is how Tempo sounds in every product: a knowledgeable colleague who explains plainly and wastes no time, as on [tempo.xyz](https://tempo.xyz) and in the [developer docs](https://tempo.xyz/developers). [Tone](tone.md) adapts it to each situation, such as a first visit or a failed payment.
8
+
9
+ ## How Tempo Writes
10
+
11
+ * **Cover Three Points:** State what is happening, what it costs, and what happens next.
12
+ * **Define Before Explaining:** Open with one sentence that defines the thing, then list its parts.
13
+ * **State Rules as Facts:** State limits and protections as what Tempo enforces, not as warnings.
14
+ * **Name Availability Plainly (Testnet only):** Name a stage, such as beta or devnet only, with where it applies and what changes it.
15
+ * **State What an Operation Doesn't Do:** State plainly that a refund is a new payment, not a reversal.
16
+
17
+ ## Traits
18
+
19
+ Each trait names the line it must not cross.
20
+
21
+ ### Clear, Not Simplistic
22
+
23
+ **Do:** Describe a payment in everyday money words, and format each value with
24
+ [Amount](../../components/amount.md) or [Hex](../../components/hex.md).
25
+
26
+ ```tsx
27
+ /**
28
+ * Do example for "Clear, Not Simplistic" on the Voice page.
29
+ * Describe a payment in everyday money words, and format each value with Amount or Hex.
30
+ * @module
31
+ */
32
+ import { Amount, Hex, ListGroup, style } from '@tempoxyz/ds'
33
+
34
+ /** Renders the static preview, which the guideline card shows inert. */
35
+ export function Demo() {
36
+ return (
37
+ <ListGroup.Root {...styles.rows()}>
38
+ <ListGroup.Row>
39
+ <ListGroup.Label>To</ListGroup.Label>
40
+ <Hex value="0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc" />
41
+ </ListGroup.Row>
42
+ <ListGroup.Row>
43
+ <ListGroup.Label>Amount</ListGroup.Label>
44
+ <Amount symbol="USDC" value="250.00" />
45
+ </ListGroup.Row>
46
+ <ListGroup.Row>
47
+ <ListGroup.Label>Network fee</ListGroup.Label>
48
+ <Amount currency="USD" precise value="0.0003" />
49
+ </ListGroup.Row>
50
+ </ListGroup.Root>
51
+ )
52
+ }
53
+
54
+ namespace styles {
55
+ export const rows = style({ maxWidth: '18rem !custom', width: '100% !custom' })
56
+ }
57
+ ```
58
+
59
+ **Don't:** Show protocol fields, base units, or gas parameters on a payment review.
60
+
61
+ ```tsx
62
+ /**
63
+ * Don't example for "Clear, Not Simplistic" on the Voice page.
64
+ * Don't show protocol fields, base units, or gas parameters on a payment review.
65
+ * @module
66
+ */
67
+ import { ListGroup, style } from '@tempoxyz/ds'
68
+
69
+ /** Renders the static preview, which the guideline card shows inert. */
70
+ export function Demo() {
71
+ return (
72
+ <ListGroup.Root {...styles.rows()}>
73
+ <ListGroup.Row>
74
+ <ListGroup.Label>Recipient EOA</ListGroup.Label>
75
+ <span {...styles.value()}>0x3c44cddd…</span>
76
+ </ListGroup.Row>
77
+ <ListGroup.Row>
78
+ <ListGroup.Label>Value</ListGroup.Label>
79
+ <span {...styles.value()}>250000000</span>
80
+ </ListGroup.Row>
81
+ <ListGroup.Row>
82
+ <ListGroup.Label>Gas limit</ListGroup.Label>
83
+ <span {...styles.value()}>21000</span>
84
+ </ListGroup.Row>
85
+ </ListGroup.Root>
86
+ )
87
+ }
88
+
89
+ namespace styles {
90
+ export const rows = style({ maxWidth: '18rem !custom', width: '100% !custom' })
91
+
92
+ export const value = style({ typography: 'mono.m1' })
93
+ }
94
+ ```
95
+
96
+ ### Precise, Not Approximate
97
+
98
+ **Do:** State the exact amount, time, or limit.
99
+
100
+ ```tsx
101
+ <Alert>
102
+ <Alert.Icon />
103
+ <Alert.Content>This quote expires in 10 minutes.</Alert.Content>
104
+ </Alert>
105
+ ```
106
+
107
+ **Don't:** Use vague words such as soon or shortly.
108
+
109
+ ```tsx
110
+ <Alert>
111
+ <Alert.Icon />
112
+ <Alert.Content>This quote expires soon.</Alert.Content>
113
+ </Alert>
114
+ ```
115
+
116
+ ### Confident, Not Boastful
117
+
118
+ **Do:** Confirm the result as a fact, and stop.
119
+
120
+ ```tsx
121
+ <Empty.Root>
122
+ <Empty.Icon>
123
+ <Receipt />
124
+ </Empty.Icon>
125
+ <Empty.Title>Payment sent</Empty.Title>
126
+ <Empty.Description>Alice received 25.00 USDC.</Empty.Description>
127
+ </Empty.Root>
128
+ ```
129
+
130
+ **Don't:** Use hype, hedging, exclamation marks, or emoji for a routine result.
131
+
132
+ ```tsx
133
+ <Empty.Root>
134
+ <Empty.Icon>
135
+ <Receipt />
136
+ </Empty.Icon>
137
+ <Empty.Title>Woohoo! 🎉</Empty.Title>
138
+ <Empty.Description>Your lightning-fast payment is on its way!</Empty.Description>
139
+ </Empty.Root>
140
+ ```
141
+
142
+ ### Calm, Not Casual
143
+
144
+ **Do:** State what failed, and reassure the reader with a fact.
145
+
146
+ ```tsx
147
+ <Alert intent="negative">
148
+ <Alert.Icon />
149
+ <Alert.Content>The payment did not go through. Your balance has not changed.</Alert.Content>
150
+ </Alert>
151
+ ```
152
+
153
+ **Don't:** Joke about a failure that involves money.
154
+
155
+ ```tsx
156
+ <Alert intent="negative">
157
+ <Alert.Icon />
158
+ <Alert.Content>Oops! Something broke. Our bad.</Alert.Content>
159
+ </Alert>
160
+ ```
161
+
162
+ ### Respectful, Not Condescending
163
+
164
+ **Do:** Address the reader as you, and describe the problem and the fix.
165
+
166
+ ```tsx
167
+ <Alert intent="negative">
168
+ <Alert.Icon />
169
+ <Alert.Content>This address isn't valid. Check it and try again.</Alert.Content>
170
+ </Alert>
171
+ ```
172
+
173
+ **Don't:** Blame the reader for an error.
174
+
175
+ ```tsx
176
+ <Alert intent="negative">
177
+ <Alert.Icon />
178
+ <Alert.Content>You entered an invalid address.</Alert.Content>
179
+ </Alert>
180
+ ```
181
+
182
+ ### Helpful, Not Pushy
183
+
184
+ **Do:** Offer the next step plainly, and let the reader decide.
185
+
186
+ ```tsx
187
+ <Button variant="secondary">Turn on notifications</Button>
188
+ ```
189
+
190
+ **Don't:** Use fear or urgency to drive a choice.
191
+
192
+ ```tsx
193
+ <Button variant="secondary">Don't miss out</Button>
194
+ ```