@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,204 @@
1
+ # NativeSelect
2
+
3
+ A native select styled as a field, which opens the browser's own picker.
4
+
5
+ [View source and API](https://github.com/tempoxyz/ds/blob/main/src/web/components/NativeSelect.tsx)
6
+
7
+ Figma: [Native select](https://www.figma.com/design/yE96kcymnNR88PJp6G1sPs?node-id=3059-449)
8
+
9
+ ## Overview
10
+
11
+ A native select is a 48px field with a chevron at its end. It renders a native `<select>`, so the browser draws the options in the platform picker, such as the wheel on a phone.
12
+
13
+ ## Examples
14
+
15
+ ### Basic
16
+
17
+ ```tsx
18
+ import { Field, NativeSelect, style } from '@tempoxyz/ds'
19
+
20
+ export const fill = true
21
+ export function Demo() {
22
+ return (
23
+ <Field.Root {...styles.field()}>
24
+ <Field.Label>Environment</Field.Label>
25
+ <NativeSelect defaultValue="">
26
+ <option disabled value="">
27
+ Select environment
28
+ </option>
29
+ <option value="production">Production</option>
30
+ <option value="staging">Staging</option>
31
+ <option value="development">Development</option>
32
+ </NativeSelect>
33
+ <Field.Description>Keys only work in the environment they belong to</Field.Description>
34
+ </Field.Root>
35
+ )
36
+ }
37
+
38
+ namespace styles {
39
+ export const field = style({ maxWidth: '20rem !custom' })
40
+ }
41
+ ```
42
+
43
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/NativeSelect/Basic.tsx)
44
+
45
+ ### Invalid
46
+
47
+ Set `invalid` on `Field.Root`, or on the select itself, to fill it red with a 1px red border. Explain the problem in a `Field.Error`.
48
+
49
+ ```tsx
50
+ import { Field, NativeSelect, style } from '@tempoxyz/ds'
51
+
52
+ export const fill = true
53
+ export function Demo() {
54
+ return (
55
+ <Field.Root invalid {...styles.field()}>
56
+ <Field.Label>Environment</Field.Label>
57
+ <NativeSelect defaultValue="">
58
+ <option disabled value="">
59
+ Select environment
60
+ </option>
61
+ <option value="production">Production</option>
62
+ <option value="staging">Staging</option>
63
+ </NativeSelect>
64
+ <Field.Error match>Select an environment for this key.</Field.Error>
65
+ </Field.Root>
66
+ )
67
+ }
68
+
69
+ namespace styles {
70
+ export const field = style({ maxWidth: '20rem !custom' })
71
+ }
72
+ ```
73
+
74
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/NativeSelect/Invalid.tsx)
75
+
76
+ ### Disabled
77
+
78
+ Set `disabled` on `Field.Root` to disable the select and fade its chevron.
79
+
80
+ ```tsx
81
+ import { Field, NativeSelect, style } from '@tempoxyz/ds'
82
+
83
+ export const fill = true
84
+ export function Demo() {
85
+ return (
86
+ <Field.Root disabled {...styles.field()}>
87
+ <Field.Label>Environment</Field.Label>
88
+ <NativeSelect defaultValue="production">
89
+ <option value="production">Production</option>
90
+ <option value="staging">Staging</option>
91
+ </NativeSelect>
92
+ <Field.Description>Keys keep the environment they were created in</Field.Description>
93
+ </Field.Root>
94
+ )
95
+ }
96
+
97
+ namespace styles {
98
+ export const field = style({ maxWidth: '20rem !custom' })
99
+ }
100
+ ```
101
+
102
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/NativeSelect/Disabled.tsx)
103
+
104
+ ## Anatomy
105
+
106
+ Import the component and nest native options in it.
107
+
108
+ ```tsx
109
+ import { NativeSelect } from '@tempoxyz/ds'
110
+
111
+ <NativeSelect>
112
+ <option />
113
+ </NativeSelect>
114
+ ```
115
+
116
+ ## Guidelines
117
+
118
+ ### When to Use
119
+
120
+ * Choose one value from a short list in a form, such as an environment, a network, or a country.
121
+ * Use the platform picker on touch devices, where it fits the screen and the keyboard.
122
+
123
+ ### When Not to Use
124
+
125
+ * Use [Select](select.md) when the options need icons, logos, or a styled popup.
126
+ * Use [ChoiceGroup](choice-group.md) or [RadioGroup](radio-group.md) when a few options fit on screen.
127
+ * Use [Combobox](combobox.md) when the list is long enough to need search.
128
+
129
+ ### Lead With a Placeholder Option
130
+
131
+ Start with a disabled, empty `option` that names the choice, and set `defaultValue=""` so it shows until a value is picked. A disabled placeholder cannot be picked again.
132
+
133
+ **Do:** Name the choice in the placeholder option.
134
+
135
+ ```tsx
136
+ <Field.Root style={{ width: 240 }}>
137
+ <Field.Label>Environment</Field.Label>
138
+ <NativeSelect defaultValue="">
139
+ <option disabled value="">
140
+ Select environment
141
+ </option>
142
+ <option value="production">Production</option>
143
+ </NativeSelect>
144
+ </Field.Root>
145
+ ```
146
+
147
+ **Don't:** Start with an empty option that people can pick as a value.
148
+
149
+ ```tsx
150
+ <Field.Root style={{ width: 240 }}>
151
+ <Field.Label>Environment</Field.Label>
152
+ <NativeSelect defaultValue="">
153
+ <option value="">--</option>
154
+ <option value="production">Production</option>
155
+ </NativeSelect>
156
+ </Field.Root>
157
+ ```
158
+
159
+ ### Keep the Label Visible
160
+
161
+ Give the select a `Field.Label`. The placeholder option disappears once a value is picked, so it cannot name the field.
162
+
163
+ ## Content
164
+
165
+ * Name the choice in the placeholder, such as Select environment.
166
+ * Write option labels in sentence case, and keep each to a few words.
167
+ * Order options by frequency of use, or alphabetically when no order applies.
168
+
169
+ ## Accessibility
170
+
171
+ `NativeSelect` renders a native `<select>` registered as the control of its `Field.Root`. The browser handles the keys and the picker.
172
+
173
+ ### Semantics
174
+
175
+ * **Select (combobox):** A native select, announced with its label and its selected option.
176
+ * **Invalid State (aria-invalid):** Marks the select invalid and fills it red. Explain the problem in an error.
177
+
178
+ ### Keyboard
179
+
180
+ * **Move Focus In and Out (Tab):** Moves focus to the select, and out of it again, as for any field.
181
+ * **Open the Picker (Space or Alt+Down Arrow):** Opens the platform picker. Other keys follow the native select.
182
+
183
+ ### Your Responsibilities
184
+
185
+ * **Label the Select (Field.Label):** Give it a visible label in a field, or set `aria-label` when none fits.
186
+ * **Explain Errors (Field.Error):** Say how to fix an invalid value in a `Field.Error`, not in red alone.
187
+
188
+ ## Related
189
+
190
+ [Select](select.md)
191
+
192
+ Use for options with icons or a styled popup.
193
+
194
+ [Field](field.md)
195
+
196
+ Use for labels, descriptions, and errors.
197
+
198
+ [RadioGroup](radio-group.md)
199
+
200
+ Use for a few options shown at once.
201
+
202
+ [Forms](../patterns/forms.md)
203
+
204
+ Covers laying out fields and actions.
@@ -0,0 +1,248 @@
1
+ # NetworkLogo
2
+
3
+ Shows the logo of the network a token lives on.
4
+
5
+ [View source and API](https://github.com/tempoxyz/ds/blob/main/src/web/components/NetworkLogo.tsx)
6
+
7
+ ## Overview
8
+
9
+ A network logo renders a network's artwork as an inline SVG, cropped to a circle. The artwork keeps the network's brand colors in both color schemes.
10
+
11
+ ## Examples
12
+
13
+ ### Basic
14
+
15
+ ```tsx
16
+ import { NetworkLogo, style } from '@tempoxyz/ds'
17
+
18
+ export function Demo() {
19
+ return (
20
+ <div {...styles.row()}>
21
+ <NetworkLogo network="tempo" />
22
+ Tempo
23
+ </div>
24
+ )
25
+ }
26
+
27
+ namespace styles {
28
+ export const row = style({ alignItems: 'center', display: 'flex', gap: '8' })
29
+ }
30
+ ```
31
+
32
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/NetworkLogo/Basic.tsx)
33
+
34
+ ### Network
35
+
36
+ Set `network` to `base`, `ethereum`, `hyperevm`, `polygon`, `solana`, or `tempo`.
37
+
38
+ ```tsx
39
+ import { NetworkLogo, style } from '@tempoxyz/ds'
40
+
41
+ const networks = [
42
+ ['base', 'Base'],
43
+ ['ethereum', 'Ethereum'],
44
+ ['hyperevm', 'HyperEVM'],
45
+ ['polygon', 'Polygon'],
46
+ ['solana', 'Solana'],
47
+ ['tempo', 'Tempo'],
48
+ ] as const
49
+
50
+ export function Demo() {
51
+ return (
52
+ <div {...styles.grid()}>
53
+ {networks.map(([network, label]) => (
54
+ <div key={network} {...styles.row()}>
55
+ <NetworkLogo network={network} />
56
+ {label}
57
+ </div>
58
+ ))}
59
+ </div>
60
+ )
61
+ }
62
+
63
+ namespace styles {
64
+ export const grid = style({ display: 'grid', gap: '12' })
65
+
66
+ export const row = style({ alignItems: 'center', display: 'flex', gap: '8' })
67
+ }
68
+ ```
69
+
70
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/NetworkLogo/Network.tsx)
71
+
72
+ ### Size
73
+
74
+ Set `size` to `medium` (20px, default) or `large` (32px).
75
+
76
+ ```tsx
77
+ import { NetworkLogo, style } from '@tempoxyz/ds'
78
+
79
+ export function Demo() {
80
+ return (
81
+ <div {...styles.row()}>
82
+ <NetworkLogo network="ethereum" size="medium" />
83
+ <NetworkLogo network="ethereum" size="large" />
84
+ </div>
85
+ )
86
+ }
87
+
88
+ namespace styles {
89
+ export const row = style({ alignItems: 'center', display: 'flex', gap: '12' })
90
+ }
91
+ ```
92
+
93
+ [View example source](https://github.com/tempoxyz/ds/blob/main/docs/src/examples/demos/NetworkLogo/Size.tsx)
94
+
95
+ ## Anatomy
96
+
97
+ Import the component and assemble its parts.
98
+
99
+ ```tsx
100
+ import { NetworkLogo } from '@tempoxyz/ds'
101
+
102
+ <NetworkLogo />
103
+ ```
104
+
105
+ ## Guidelines
106
+
107
+ ### When to Use
108
+
109
+ * Show which network a token, an address, or a deposit belongs to, such as in a Receive flow or a network picker.
110
+
111
+ ### When Not to Use
112
+
113
+ * Use [TokenLogo](token-logo.md) for the token itself.
114
+ * Use [Identicon](identicon.md) for an account address.
115
+ * Use [IconTile](icon-tile.md) for a feature or category icon.
116
+
117
+ ### Name the Network
118
+
119
+ Many people don't know every network's logo.
120
+
121
+ **Do:** Show the network name beside each logo.
122
+
123
+ ```tsx
124
+ /**
125
+ * Do example for "Name the Network" on the NetworkLogo page.
126
+ * Show the network name beside each logo.
127
+ * @module
128
+ */
129
+ import { NetworkLogo, style } from '@tempoxyz/ds'
130
+
131
+ const networks = [
132
+ ['tempo', 'Tempo'],
133
+ ['base', 'Base'],
134
+ ['ethereum', 'Ethereum'],
135
+ ] as const
136
+
137
+ /** Renders the static preview, which the guideline card shows inert. */
138
+ export function Demo() {
139
+ return (
140
+ <div {...styles.list()}>
141
+ {networks.map(([network, label]) => (
142
+ <div key={network} {...styles.row()}>
143
+ <NetworkLogo network={network} size="large" />
144
+ <span {...styles.name()}>{label}</span>
145
+ </div>
146
+ ))}
147
+ </div>
148
+ )
149
+ }
150
+
151
+ namespace styles {
152
+ export const list = style({ display: 'grid', gap: '12' })
153
+
154
+ export const name = style({ color: 'content.primary', typography: 'body.b2Strong' })
155
+
156
+ export const row = style({ alignItems: 'center', display: 'flex', gap: '12' })
157
+ }
158
+ ```
159
+
160
+ **Don't:** Ask people to tell networks apart by logo alone.
161
+
162
+ ```tsx
163
+ /**
164
+ * Don't example for "Name the Network" on the NetworkLogo page.
165
+ * Logos alone ask people to recognize every network's brand.
166
+ * @module
167
+ */
168
+ import { NetworkLogo, style } from '@tempoxyz/ds'
169
+
170
+ /** Renders the static preview, which the guideline card shows inert. */
171
+ export function Demo() {
172
+ return (
173
+ <div {...styles.row()}>
174
+ <NetworkLogo network="tempo" size="large" />
175
+ <NetworkLogo network="base" size="large" />
176
+ <NetworkLogo network="ethereum" size="large" />
177
+ </div>
178
+ )
179
+ }
180
+
181
+ namespace styles {
182
+ export const row = style({ alignItems: 'center', display: 'flex', gap: '12' })
183
+ }
184
+ ```
185
+
186
+ ### Match Size to the Context
187
+
188
+ * **Medium (20px):** Beside a network name in a value or chip.
189
+ * **Large (32px):** In network rows and network pickers.
190
+
191
+ ### Keep the Brand Artwork
192
+
193
+ **Do:** Use the logo as it renders, in its own colors.
194
+
195
+ ```tsx
196
+ <NetworkLogo network="ethereum" size="large" />
197
+ ```
198
+
199
+ **Don't:** Recolor the logo, or redraw it as a colored circle with a letter.
200
+
201
+ ```tsx
202
+ <span
203
+ style={{
204
+ alignItems: 'center',
205
+ background: '#627eea',
206
+ borderRadius: 999,
207
+ color: 'white',
208
+ display: 'inline-flex',
209
+ font: '600 14px Inter',
210
+ height: 32,
211
+ justifyContent: 'center',
212
+ width: 32,
213
+ }}
214
+ >
215
+ E
216
+ </span>
217
+ ```
218
+
219
+ ## Accessibility
220
+
221
+ A network logo renders an `<svg>` that is hidden from screen readers by default. It is not interactive and takes no focus.
222
+
223
+ ### Semantics
224
+
225
+ * **Root (aria-hidden):** Hidden from screen readers, so the visible name beside it is read once.
226
+ * **Named Logo (aria-label):** An `aria-label` gives the logo the `img` role, so screen readers announce it.
227
+
228
+ ### Your Responsibilities
229
+
230
+ * **Name a Standalone Logo (aria-label):** If no visible text names the network, pass the network name as `aria-label`.
231
+
232
+ ## Related
233
+
234
+ [TokenLogo](token-logo.md)
235
+
236
+ Use for token logos.
237
+
238
+ [AssetChip](asset-chip.md)
239
+
240
+ Use for listing the assets a network supports.
241
+
242
+ [ListGroup](list-group.md)
243
+
244
+ Use for network lists.
245
+
246
+ [Blockchain Values](../patterns/blockchain-values.md)
247
+
248
+ Covers tokens, networks, and addresses.