@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,438 @@
1
+ # Tempo Wallet
2
+
3
+ Tempo Wallet is the first-party wallet for balances, transfers, and deposits.
4
+
5
+ > [!NOTE]
6
+ > The reference layouts on this page are compositions of library components and `style`, not shipped components. `@tempoxyz/ds` exports no `WalletOverview` or `SendReview`. Copy a layout into your app and adapt it.
7
+
8
+ ## Overview
9
+
10
+ Tempo Wallet runs at [wallet.tempo.xyz](https://wallet.tempo.xyz). You sign in with a passkey, then send, receive, deposit, and swap stablecoins, and manage private balances in Zones.
11
+
12
+ Roles:
13
+
14
+ * **Account Holders:** Hold, send, and receive stablecoins such as pathUSD and USDC.e.
15
+ * **Developers and Agents (MPP):** Pay for API requests. Access keys permit an app or agent to spend within limits you approve.
16
+
17
+ ## Surfaces
18
+
19
+ * **Web (@tempoxyz/ds):** wallet.tempo.xyz on desktop browsers.
20
+ * **Mobile Web (@tempoxyz/ds):** The same app in iOS and Android browsers.
21
+ * **Terminal (CLI):** Tempo Wallet CLI, built outside this library.
22
+
23
+ No native iOS or Android app is documented. The Apple Pay deposit option is the only flow tied to a device. It needs a US debit card and an iOS device.
24
+
25
+ ## Key Screens
26
+
27
+ ### Overview
28
+
29
+ ```tsx
30
+ import { Amount, Button, Grid, Hex, Identicon, ListGroup, style, Surface, TokenLogo, Tooltip } from '@tempoxyz/ds'
31
+ import { AddFunds, ArrowDownLeft, Privacy, Send, SwapHorizontal } from '@tempoxyz/ds/icons'
32
+
33
+ export const fill = true
34
+ const account = '0x0b2c69c5c1bbd3f8b642c8d8a3c8a903f780f9b2'
35
+
36
+ const balances = [
37
+ {
38
+ address: '0x20c0000000000000000000000000000000000000',
39
+ amount: '8420.00',
40
+ name: 'PathUSD',
41
+ symbol: 'pathUSD',
42
+ units: '8,420.00',
43
+ },
44
+ {
45
+ address: '0x20c000000000000000000000b9537d11c60e8b50',
46
+ amount: '3170.32',
47
+ name: 'Bridged USDC (Stargate)',
48
+ symbol: 'USDC.e',
49
+ units: '3,170.32',
50
+ },
51
+ ]
52
+
53
+ export function Demo() {
54
+ return (
55
+ <div {...styles.page()}>
56
+ <header {...styles.account()}>
57
+ <Identicon address={account} aria-hidden size="32" />
58
+ <Hex.Root value={account} {...styles.address()}>
59
+ <Hex.Text />
60
+ <Hex.Copy aria-label="Copy wallet address" />
61
+ </Hex.Root>
62
+ </header>
63
+
64
+ <Surface>
65
+ <p {...styles.caption()}>Total balance</p>
66
+ <Amount currency="USD" size="xl" value="12840.32" />
67
+ <div {...styles.actions()}>
68
+ <Button>
69
+ <Send />
70
+ Send
71
+ </Button>
72
+ <Button variant="secondary">
73
+ <ArrowDownLeft />
74
+ Receive
75
+ </Button>
76
+ <Button variant="secondary">
77
+ <AddFunds />
78
+ Deposit
79
+ </Button>
80
+ <Button variant="secondary">
81
+ <SwapHorizontal />
82
+ Swap
83
+ </Button>
84
+ </div>
85
+ </Surface>
86
+
87
+ <Grid fit="large" gap="16">
88
+ <Surface>
89
+ <Surface.Header>
90
+ <Surface.Title>Balances</Surface.Title>
91
+ </Surface.Header>
92
+ <ListGroup.Root>
93
+ {balances.map((balance) => (
94
+ <ListGroup.Row key={balance.address}>
95
+ <TokenLogo address={balance.address} />
96
+ <ListGroup.Info>
97
+ <ListGroup.Title>{balance.name}</ListGroup.Title>
98
+ <ListGroup.Description>
99
+ {balance.units} {balance.symbol}
100
+ </ListGroup.Description>
101
+ </ListGroup.Info>
102
+ <Amount currency="USD" value={balance.amount} />
103
+ <Tooltip.Root>
104
+ <Tooltip.Trigger
105
+ aria-label={`Send ${balance.name}`}
106
+ render={<Button shape="icon" size="small" variant="tertiary" />}
107
+ >
108
+ <Send />
109
+ </Tooltip.Trigger>
110
+ <Tooltip.Popup>Send {balance.name}</Tooltip.Popup>
111
+ </Tooltip.Root>
112
+ </ListGroup.Row>
113
+ ))}
114
+ <ListGroup.Row action="navigation" render={<a href="#zones" />}>
115
+ <span {...styles.zone()}>
116
+ <Privacy />
117
+ </span>
118
+ <ListGroup.Info>
119
+ <ListGroup.Title>Private balance</ListGroup.Title>
120
+ <ListGroup.Description>Held in a zone</ListGroup.Description>
121
+ </ListGroup.Info>
122
+ <Amount currency="USD" value="1250.00" />
123
+ </ListGroup.Row>
124
+ </ListGroup.Root>
125
+ </Surface>
126
+
127
+ <Surface>
128
+ <Surface.Header>
129
+ <Surface.Title>Activity</Surface.Title>
130
+ <Button size="small" variant="tertiary">
131
+ View all
132
+ </Button>
133
+ </Surface.Header>
134
+ <ListGroup.Root>
135
+ <ListGroup.Row>
136
+ <ListGroup.Info>
137
+ <ListGroup.Title>Received from 0x3c44…93bc</ListGroup.Title>
138
+ <ListGroup.Description>Today, 9:41 AM</ListGroup.Description>
139
+ </ListGroup.Info>
140
+ <Amount sign="+" symbol="pathUSD" value="250.00" />
141
+ </ListGroup.Row>
142
+ <ListGroup.Row action="navigation" render={<a href="#access-key-activity" />}>
143
+ <ListGroup.Info>
144
+ <ListGroup.Title>Access Key activity</ListGroup.Title>
145
+ <ListGroup.Description>3 transactions</ListGroup.Description>
146
+ </ListGroup.Info>
147
+ <Amount sign="−" symbol="pathUSD" value="0.08" />
148
+ </ListGroup.Row>
149
+ <ListGroup.Row>
150
+ <ListGroup.Info>
151
+ <ListGroup.Title>Sent to 0x91bd…07e1</ListGroup.Title>
152
+ <ListGroup.Description>Yesterday, 4:18 PM</ListGroup.Description>
153
+ </ListGroup.Info>
154
+ <Amount sign="−" symbol="USDC.e" value="48.50" />
155
+ </ListGroup.Row>
156
+ </ListGroup.Root>
157
+ </Surface>
158
+ </Grid>
159
+ </div>
160
+ )
161
+ }
162
+
163
+ namespace styles {
164
+ export const account = style({ alignItems: 'center', columnGap: '12', display: 'flex' })
165
+
166
+ export const actions = style({
167
+ display: 'flex',
168
+ flexWrap: 'wrap',
169
+ gap: '8',
170
+ marginBlockStart: '24',
171
+ })
172
+
173
+ export const address = style({ minWidth: '0' })
174
+
175
+ export const caption = style({
176
+ color: 'content.secondary',
177
+ margin: '0',
178
+ marginBlockEnd: '4',
179
+ typography: 'body.b2',
180
+ })
181
+
182
+ export const page = style({
183
+ backgroundColor: 'background.primary',
184
+ display: 'flex',
185
+ flexDirection: 'column',
186
+ padding: '16',
187
+ rowGap: '16',
188
+ })
189
+
190
+ export const zone = style({
191
+ alignItems: 'center',
192
+ backgroundColor: 'container.strong',
193
+ borderRadius: 'full',
194
+ cornerShape: 'round',
195
+ display: 'inline-flex',
196
+ flexShrink: '0 !custom',
197
+ height: '24',
198
+ justifyContent: 'center',
199
+ width: '24',
200
+ })
201
+ }
202
+ ```
203
+
204
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/Products/WalletOverview.tsx)
205
+
206
+ The overview leads with the total balance in USD, then the actions that move funds. On wide screens, Balances and Activity sit side by side. In a narrow column, they stack.
207
+
208
+ * **Wallet Address (Hex.Copy):** An identicon and the copyable address that others send to.
209
+ * **Total (size=xl):** Shows the total in USD.
210
+ * **Actions (primary):** Send is primary. Receive, Deposit, and Swap are secondary.
211
+ * **Balances (ListGroup):** A token icon, name, units, USD value, and a Send button.
212
+ * **Private Balance (navigation):** A row that opens Zones.
213
+ * **Access Key Activity (navigation):** Opens the list of MPP charges.
214
+
215
+ Patterns:
216
+
217
+ * [Payments](../patterns/payments.md) for the Send, Receive, Deposit, and Swap entry points.
218
+ * [Blockchain Values](../patterns/blockchain-values.md) for the address, token units, and USD values.
219
+ * [Tables and Lists](../patterns/tables-and-lists.md) for balance and activity rows.
220
+
221
+ ### Send Review
222
+
223
+ ```tsx
224
+ import { Alert, Amount, Button, Hex, Identicon, ListGroup, style, Surface, TokenLogo } from '@tempoxyz/ds'
225
+ import { useEffect, useState } from 'react'
226
+
227
+ export const fill = true
228
+ const recipient = '0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc'
229
+
230
+ export function Demo() {
231
+ const [state, setState] = useState<'review' | 'sending' | 'sent'>('review')
232
+
233
+ useEffect(() => {
234
+ if (state !== 'sending') return
235
+ const timer = setTimeout(() => setState('sent'), 1200)
236
+ return () => clearTimeout(timer)
237
+ }, [state])
238
+
239
+ return (
240
+ <div {...styles.page()}>
241
+ <Surface {...styles.panel()}>
242
+ <Surface.Header>
243
+ <Surface.Title>{state === 'sent' ? 'Sent' : 'Review send'}</Surface.Title>
244
+ </Surface.Header>
245
+
246
+ <div {...styles.hero()}>
247
+ <Amount align="center" size="lg" symbol="pathUSD" value="250.00" />
248
+ </div>
249
+
250
+ <ListGroup.Root>
251
+ <ListGroup.Row>
252
+ <ListGroup.Label>To</ListGroup.Label>
253
+ <span {...styles.recipient()}>
254
+ <Identicon address={recipient} aria-hidden size="24" />
255
+ <Hex.Root value={recipient} {...styles.hex()}>
256
+ <Hex.Text />
257
+ <Hex.Copy aria-label="Copy recipient address" />
258
+ </Hex.Root>
259
+ </span>
260
+ </ListGroup.Row>
261
+ <ListGroup.Row>
262
+ <ListGroup.Label>Token</ListGroup.Label>
263
+ <TokenLogo address="0x20c0000000000000000000000000000000000000" size="small" />
264
+ PathUSD
265
+ </ListGroup.Row>
266
+ <ListGroup.Row>
267
+ <ListGroup.Label>Network</ListGroup.Label>
268
+ Tempo
269
+ </ListGroup.Row>
270
+ <ListGroup.Row>
271
+ <ListGroup.Label>Note</ListGroup.Label>
272
+ Invoice 1042
273
+ </ListGroup.Row>
274
+ <ListGroup.Row>
275
+ <ListGroup.Label>Network fee</ListGroup.Label>
276
+ <Amount currency="USD" precise value="0.001" />
277
+ </ListGroup.Row>
278
+ </ListGroup.Root>
279
+
280
+ {state === 'sent' ? (
281
+ <>
282
+ <Alert intent="positive" {...styles.notice()}>
283
+ <Alert.Icon />
284
+ <Alert.Content>Sent 250.00 pathUSD to 0x3c44…93bc.</Alert.Content>
285
+ </Alert>
286
+ <div {...styles.actions()}>
287
+ <Button.Link href="https://explore.tempo.xyz/" variant="secondary">
288
+ View in explorer
289
+ </Button.Link>
290
+ <Button onClick={() => setState('review')}>Done</Button>
291
+ </div>
292
+ </>
293
+ ) : (
294
+ <>
295
+ <p {...styles.warning()}>
296
+ Check the address before you confirm. Funds sent to the wrong address may not be
297
+ recoverable.
298
+ </p>
299
+ <div {...styles.actions()}>
300
+ <Button disabled={state === 'sending'} variant="secondary">
301
+ Back
302
+ </Button>
303
+ <Button loading={state === 'sending'} onClick={() => setState('sending')}>
304
+ Confirm send
305
+ </Button>
306
+ </div>
307
+ </>
308
+ )}
309
+ </Surface>
310
+ </div>
311
+ )
312
+ }
313
+
314
+ namespace styles {
315
+ export const actions = style({
316
+ columnGap: '8',
317
+ display: 'flex',
318
+ justifyContent: 'flex-end',
319
+ marginBlockStart: '24',
320
+ '@media (max-width: 40rem)': {
321
+ flexDirection: 'column-reverse',
322
+ rowGap: '8',
323
+ },
324
+ })
325
+
326
+ export const hero = style({ paddingBlock: '24' })
327
+
328
+ export const hex = style({ minWidth: '0' })
329
+
330
+ export const notice = style({ marginBlockStart: '24' })
331
+
332
+ export const page = style({
333
+ backgroundColor: 'background.primary',
334
+ display: 'flex',
335
+ justifyContent: 'center',
336
+ padding: '16',
337
+ })
338
+
339
+ export const panel = style({ maxWidth: '28rem !custom', width: '100% !custom' })
340
+
341
+ export const recipient = style({
342
+ alignItems: 'center',
343
+ columnGap: '8',
344
+ display: 'flex',
345
+ justifyContent: 'flex-end',
346
+ minWidth: '0',
347
+ })
348
+
349
+ export const warning = style({
350
+ color: 'content.secondary',
351
+ margin: '0',
352
+ marginBlockStart: '24',
353
+ typography: 'body.b3',
354
+ })
355
+ }
356
+ ```
357
+
358
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/Products/WalletSendReview.tsx)
359
+
360
+ Send collects a recipient address, amount, token, and optional note. The review shows them with the network fee before you confirm.
361
+
362
+ * **Transfer Amount (symbol):** Shows the value of the transfer in large type and in token units.
363
+ * **Details (ListGroup.Label):** Lists the recipient, token, network, note, and network fee.
364
+ * **Recipient (Hex):** An identicon beside the address. Both ends stay visible for comparison.
365
+ * **Confirm (loading):** The only primary action. It is busy during the submit. A success alert with an Explorer link replaces it.
366
+
367
+ Patterns:
368
+
369
+ * [Payments](../patterns/payments.md) for the review and confirmation step.
370
+ * [Blockchain Values](../patterns/blockchain-values.md) for the truncated address and the fee.
371
+ * [Destructive Actions](../patterns/destructive-actions.md) for what can't be undone.
372
+
373
+ ## Content
374
+
375
+ ### Show USD for Holdings and Token Units for Transfers
376
+
377
+ * **Holdings:** Show balances in USD.
378
+ * **Transfers:** Show the token amount, since the transaction carries it. The review states 250.00 pathUSD, not $250.00.
379
+
380
+ ### Label Every Address by What It Receives
381
+
382
+ * **Wallet address:** Receives from other Tempo Wallets.
383
+ * **Deposit address:** Shown in the Deposit crypto flow, for one chain and token.
384
+
385
+ **Do:** Label each address by purpose, such as Wallet address or Deposit address, and name the chain and
386
+ token beside a deposit address.
387
+
388
+ **Don't:** Show a bare 0x address without a label, or ask for the wallet address inside a deposit
389
+ flow.
390
+
391
+ ### Say Where a Deposit Option Works
392
+
393
+ Deposit offers Buy MACH, Fiat/cards, Deposit crypto, and Claim referral code. Availability depends on the country and the enabled onramps.
394
+
395
+ State a limit beside the option, such as US only for Apple Pay, not after the choice.
396
+
397
+ ### Group Machine Payments
398
+
399
+ An MPP session can produce several charges. Show the session as one row, such as Access Key activity with 3 transactions. List each charge when the row expands.
400
+
401
+ ### Don't Promise Recovery
402
+
403
+ Tempo can't recover a deleted passkey, and a transfer to the wrong address may be lost. State both in sign-in and review copy. Tell people to save their passkey in a password manager that syncs across devices.
404
+
405
+ ## Open Gaps
406
+
407
+ The library has no part for these needs yet. Before you add one, propose it as an issue in the Design System project.
408
+
409
+ * **Address Field:** Nothing checks a 0x address or suggests recipients. Use an input and an error, or an autocomplete.
410
+ * **QR Scanning:** Renders a QR code but can't read one from the camera.
411
+ * **Mobile Blockchain Parts:** `@tempoxyz/ds/mobile` has no amount, address, identicon, rows, token, or QR counterpart.
412
+ * **Activity Grouping:** Each screen composes grouped MPP rows again. No part names the session or its charge count.
413
+
414
+ ## Related
415
+
416
+ [Payments](../patterns/payments.md)
417
+
418
+ Covers send, receive, and deposit flows.
419
+
420
+ [Blockchain Values](../patterns/blockchain-values.md)
421
+
422
+ Covers addresses, amounts, and fees.
423
+
424
+ [Amount](../components/amount.md)
425
+
426
+ Use for USD and token values.
427
+
428
+ [Hex](../components/hex.md)
429
+
430
+ Use for addresses and hashes.
431
+
432
+ [ListGroup](../components/list-group.md)
433
+
434
+ Use for balances and activity.
435
+
436
+ [TokenLogo](../components/token-logo.md)
437
+
438
+ Use for token icons.
@@ -0,0 +1,4 @@
1
+ /** Marketing surface: the variables and authoring helpers for Tempo's marketing websites. @module */
2
+ export { style, variants, vars } from './zyzz.config.js';
3
+ export { variables } from './vars.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/marketing/index.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,4 @@
1
+ /** Marketing surface: the variables and authoring helpers for Tempo's marketing websites. @module */
2
+ export { style, variants, vars } from './zyzz.config.js';
3
+ export { variables } from './vars.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/marketing/index.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA"}