@tempoxyz/ds 0.3.9 → 0.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/AGENTS.md +9 -0
- package/dist/docs/components/accordion.md +489 -0
- package/dist/docs/components/address-card.md +147 -0
- package/dist/docs/components/agent-logo.md +194 -0
- package/dist/docs/components/alert-dialog.md +631 -0
- package/dist/docs/components/alert.md +448 -0
- package/dist/docs/components/amount-input.md +305 -0
- package/dist/docs/components/amount.md +794 -0
- package/dist/docs/components/app-shell.md +559 -0
- package/dist/docs/components/asset-chip.md +294 -0
- package/dist/docs/components/autocomplete.md +619 -0
- package/dist/docs/components/avatar.md +321 -0
- package/dist/docs/components/badge.md +339 -0
- package/dist/docs/components/badged-logo.md +116 -0
- package/dist/docs/components/banner.md +379 -0
- package/dist/docs/components/bar-chart.md +208 -0
- package/dist/docs/components/breadcrumbs.md +380 -0
- package/dist/docs/components/button-group.md +286 -0
- package/dist/docs/components/button.md +650 -0
- package/dist/docs/components/calendar.md +375 -0
- package/dist/docs/components/callout.md +96 -0
- package/dist/docs/components/checkbox-group.md +521 -0
- package/dist/docs/components/checkbox.md +467 -0
- package/dist/docs/components/choice-group.md +516 -0
- package/dist/docs/components/choicebox.md +641 -0
- package/dist/docs/components/code.md +100 -0
- package/dist/docs/components/combobox.md +939 -0
- package/dist/docs/components/container.md +257 -0
- package/dist/docs/components/copy-button.md +642 -0
- package/dist/docs/components/date-picker.md +514 -0
- package/dist/docs/components/dialog.md +1332 -0
- package/dist/docs/components/drawer.md +966 -0
- package/dist/docs/components/empty.md +340 -0
- package/dist/docs/components/field.md +570 -0
- package/dist/docs/components/fieldset.md +398 -0
- package/dist/docs/components/frame.md +434 -0
- package/dist/docs/components/gauge.md +299 -0
- package/dist/docs/components/get-started-visual.md +117 -0
- package/dist/docs/components/grid.md +288 -0
- package/dist/docs/components/hero-visual.md +155 -0
- package/dist/docs/components/hex.md +487 -0
- package/dist/docs/components/icon-tile.md +292 -0
- package/dist/docs/components/identicon.md +371 -0
- package/dist/docs/components/inline.md +233 -0
- package/dist/docs/components/inset.md +225 -0
- package/dist/docs/components/kbd.md +423 -0
- package/dist/docs/components/list-group.md +981 -0
- package/dist/docs/components/loading-dots.md +237 -0
- package/dist/docs/components/menu.md +934 -0
- package/dist/docs/components/native-select.md +204 -0
- package/dist/docs/components/network-logo.md +248 -0
- package/dist/docs/components/number-field.md +543 -0
- package/dist/docs/components/otp-field.md +616 -0
- package/dist/docs/components/pagination.md +516 -0
- package/dist/docs/components/popover.md +544 -0
- package/dist/docs/components/progress.md +388 -0
- package/dist/docs/components/qr.md +314 -0
- package/dist/docs/components/radio-group.md +528 -0
- package/dist/docs/components/secret-value.md +406 -0
- package/dist/docs/components/select.md +751 -0
- package/dist/docs/components/separator.md +379 -0
- package/dist/docs/components/sidebar-menu.md +922 -0
- package/dist/docs/components/skeleton.md +517 -0
- package/dist/docs/components/slider.md +539 -0
- package/dist/docs/components/snippet.md +424 -0
- package/dist/docs/components/spinner.md +216 -0
- package/dist/docs/components/split-bar.md +139 -0
- package/dist/docs/components/split-button.md +464 -0
- package/dist/docs/components/stack.md +299 -0
- package/dist/docs/components/status-chip.md +226 -0
- package/dist/docs/components/status-indicator.md +119 -0
- package/dist/docs/components/status-row.md +174 -0
- package/dist/docs/components/stepper.md +451 -0
- package/dist/docs/components/success-hero.md +157 -0
- package/dist/docs/components/surface.md +639 -0
- package/dist/docs/components/switch.md +472 -0
- package/dist/docs/components/table.md +967 -0
- package/dist/docs/components/tabs.md +627 -0
- package/dist/docs/components/tempo-logo.md +185 -0
- package/dist/docs/components/text-input.md +624 -0
- package/dist/docs/components/textarea.md +352 -0
- package/dist/docs/components/toast.md +535 -0
- package/dist/docs/components/token-logo.md +371 -0
- package/dist/docs/components/token.md +247 -0
- package/dist/docs/components/tooltip.md +490 -0
- package/dist/docs/components/verification-code.md +116 -0
- package/dist/docs/components/visual.md +249 -0
- package/dist/docs/components.md +203 -0
- package/dist/docs/foundations/accessibility.md +377 -0
- package/dist/docs/foundations/agents.md +150 -0
- package/dist/docs/foundations/color.md +522 -0
- package/dist/docs/foundations/content/tone.md +194 -0
- package/dist/docs/foundations/content/voice.md +194 -0
- package/dist/docs/foundations/content/writing-style.md +406 -0
- package/dist/docs/foundations/iconography.md +282 -0
- package/dist/docs/foundations/intent.md +360 -0
- package/dist/docs/foundations/layout.md +508 -0
- package/dist/docs/foundations/linter.md +296 -0
- package/dist/docs/foundations/motion.md +151 -0
- package/dist/docs/foundations/radius-and-padding.md +86 -0
- package/dist/docs/foundations/typography.md +266 -0
- package/dist/docs/index.md +137 -0
- package/dist/docs/introduction/faq.md +132 -0
- package/dist/docs/introduction/getting-started.md +377 -0
- package/dist/docs/patterns/blockchain-values.md +709 -0
- package/dist/docs/patterns/dashboards.md +638 -0
- package/dist/docs/patterns/destructive-actions.md +626 -0
- package/dist/docs/patterns/empty-states.md +612 -0
- package/dist/docs/patterns/errors-and-validation.md +808 -0
- package/dist/docs/patterns/feedback-and-status.md +518 -0
- package/dist/docs/patterns/forms.md +679 -0
- package/dist/docs/patterns/loading.md +630 -0
- package/dist/docs/patterns/navigation.md +397 -0
- package/dist/docs/patterns/payments.md +765 -0
- package/dist/docs/patterns/responsive-layout.md +997 -0
- package/dist/docs/patterns/tables-and-lists.md +964 -0
- package/dist/docs/products/tempo-console.md +671 -0
- package/dist/docs/products/tempo-performance.md +437 -0
- package/dist/docs/products/tempo-wallet.md +438 -0
- package/dist/web/components/OtpField.css +1 -1
- package/dist/web/components/OtpField.d.ts +1 -1
- package/dist/web/components/OtpField.d.ts.map +1 -1
- package/dist/web/components/OtpField.js +3 -4
- package/dist/web/components/OtpField.js.map +1 -1
- package/dist/web/components/OtpField.js.zyzz.json +1 -1
- package/dist/web/index.js.zyzz.json +1 -1
- package/package.json +1 -1
- package/src/web/components/OtpField.tsx +2 -24
|
@@ -0,0 +1,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](/docs/components/select) when the options need icons, logos, or a styled popup.
|
|
126
|
+
* Use [ChoiceGroup](/docs/components/choice-group) or [RadioGroup](/docs/components/radio-group) when a few options fit on screen.
|
|
127
|
+
* Use [Combobox](/docs/components/combobox) 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](/docs/components/select)
|
|
191
|
+
|
|
192
|
+
Use for options with icons or a styled popup.
|
|
193
|
+
|
|
194
|
+
[Field](/docs/components/field)
|
|
195
|
+
|
|
196
|
+
Use for labels, descriptions, and errors.
|
|
197
|
+
|
|
198
|
+
[RadioGroup](/docs/components/radio-group)
|
|
199
|
+
|
|
200
|
+
Use for a few options shown at once.
|
|
201
|
+
|
|
202
|
+
[Forms](/docs/patterns/forms)
|
|
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](/docs/components/token-logo) for the token itself.
|
|
114
|
+
* Use [Identicon](/docs/components/identicon) for an account address.
|
|
115
|
+
* Use [IconTile](/docs/components/icon-tile) 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](/docs/components/token-logo)
|
|
235
|
+
|
|
236
|
+
Use for token logos.
|
|
237
|
+
|
|
238
|
+
[AssetChip](/docs/components/asset-chip)
|
|
239
|
+
|
|
240
|
+
Use for listing the assets a network supports.
|
|
241
|
+
|
|
242
|
+
[ListGroup](/docs/components/list-group)
|
|
243
|
+
|
|
244
|
+
Use for network lists.
|
|
245
|
+
|
|
246
|
+
[Blockchain Values](/docs/patterns/blockchain-values)
|
|
247
|
+
|
|
248
|
+
Covers tokens, networks, and addresses.
|