@tempoxyz/ds 0.3.6 → 0.3.9

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 (219) hide show
  1. package/dist/web/components/Accordion.js.zyzz.json +1 -1
  2. package/dist/web/components/AddressCard.css +1 -1
  3. package/dist/web/components/AddressCard.js.zyzz.json +1 -1
  4. package/dist/web/components/AgentLogo.css +1 -1
  5. package/dist/web/components/AgentLogo.js.zyzz.json +1 -1
  6. package/dist/web/components/Alert.js.zyzz.json +1 -1
  7. package/dist/web/components/AlertDialog.js.zyzz.json +1 -1
  8. package/dist/web/components/Amount.js.zyzz.json +1 -1
  9. package/dist/web/components/AmountInput.css +1 -1
  10. package/dist/web/components/AmountInput.js +1 -1
  11. package/dist/web/components/AmountInput.js.map +1 -1
  12. package/dist/web/components/AmountInput.js.zyzz.json +1 -1
  13. package/dist/web/components/AppShell.css +1 -1
  14. package/dist/web/components/AppShell.d.ts +31 -110
  15. package/dist/web/components/AppShell.d.ts.map +1 -1
  16. package/dist/web/components/AppShell.js +40 -44
  17. package/dist/web/components/AppShell.js.map +1 -1
  18. package/dist/web/components/AppShell.js.zyzz.json +1 -1
  19. package/dist/web/components/AssetChip.css +1 -1
  20. package/dist/web/components/AssetChip.js.zyzz.json +1 -1
  21. package/dist/web/components/Autocomplete.js.zyzz.json +1 -1
  22. package/dist/web/components/Avatar.js.zyzz.json +1 -1
  23. package/dist/web/components/Badge.css +1 -1
  24. package/dist/web/components/Badge.d.ts +1 -1
  25. package/dist/web/components/Badge.js.map +1 -1
  26. package/dist/web/components/Badge.js.zyzz.json +1 -1
  27. package/dist/web/components/BadgedLogo.css +1 -0
  28. package/dist/web/components/BadgedLogo.d.ts +44 -0
  29. package/dist/web/components/BadgedLogo.d.ts.map +1 -0
  30. package/dist/web/components/BadgedLogo.js +59 -0
  31. package/dist/web/components/BadgedLogo.js.map +1 -0
  32. package/dist/web/components/BadgedLogo.js.zyzz.json +1 -0
  33. package/dist/web/components/Banner.js.zyzz.json +1 -1
  34. package/dist/web/components/BarChart.css +1 -1
  35. package/dist/web/components/BarChart.d.ts +1 -1
  36. package/dist/web/components/BarChart.js.map +1 -1
  37. package/dist/web/components/BarChart.js.zyzz.json +1 -1
  38. package/dist/web/components/Breadcrumbs.js.zyzz.json +1 -1
  39. package/dist/web/components/Button.css +1 -1
  40. package/dist/web/components/Button.d.ts +40 -31
  41. package/dist/web/components/Button.d.ts.map +1 -1
  42. package/dist/web/components/Button.js +25 -8
  43. package/dist/web/components/Button.js.map +1 -1
  44. package/dist/web/components/Button.js.zyzz.json +1 -1
  45. package/dist/web/components/ButtonGroup.js.zyzz.json +1 -1
  46. package/dist/web/components/Calendar.css +1 -1
  47. package/dist/web/components/Calendar.js.zyzz.json +1 -1
  48. package/dist/web/components/Callout.js.zyzz.json +1 -1
  49. package/dist/web/components/Checkbox.css +1 -1
  50. package/dist/web/components/Checkbox.js.zyzz.json +1 -1
  51. package/dist/web/components/CheckboxGroup.js.zyzz.json +1 -1
  52. package/dist/web/components/ChoiceGroup.css +1 -1
  53. package/dist/web/components/ChoiceGroup.js.zyzz.json +1 -1
  54. package/dist/web/components/Choicebox.css +1 -1
  55. package/dist/web/components/Choicebox.js.zyzz.json +1 -1
  56. package/dist/web/components/Code.js.zyzz.json +1 -1
  57. package/dist/web/components/Combobox.css +1 -1
  58. package/dist/web/components/Combobox.js.zyzz.json +1 -1
  59. package/dist/web/components/Container.js.zyzz.json +1 -1
  60. package/dist/web/components/CopyButton.js.zyzz.json +1 -1
  61. package/dist/web/components/DatePicker.css +1 -1
  62. package/dist/web/components/DatePicker.js.zyzz.json +1 -1
  63. package/dist/web/components/Dialog.css +1 -1
  64. package/dist/web/components/Dialog.d.ts +14 -0
  65. package/dist/web/components/Dialog.d.ts.map +1 -1
  66. package/dist/web/components/Dialog.js +7 -5
  67. package/dist/web/components/Dialog.js.map +1 -1
  68. package/dist/web/components/Dialog.js.zyzz.json +1 -1
  69. package/dist/web/components/Drawer.css +1 -1
  70. package/dist/web/components/Drawer.js.zyzz.json +1 -1
  71. package/dist/web/components/Empty.js.zyzz.json +1 -1
  72. package/dist/web/components/Field.js.zyzz.json +1 -1
  73. package/dist/web/components/Fieldset.js.zyzz.json +1 -1
  74. package/dist/web/components/Frame.js.zyzz.json +1 -1
  75. package/dist/web/components/Gauge.js.zyzz.json +1 -1
  76. package/dist/web/components/GetStartedVisual.js.zyzz.json +1 -1
  77. package/dist/web/components/Grid.js.zyzz.json +1 -1
  78. package/dist/web/components/HeroVisual.js.zyzz.json +1 -1
  79. package/dist/web/components/Hex.js.zyzz.json +1 -1
  80. package/dist/web/components/IconTile.js.zyzz.json +1 -1
  81. package/dist/web/components/Identicon.js.zyzz.json +1 -1
  82. package/dist/web/components/Inline.js.zyzz.json +1 -1
  83. package/dist/web/components/Inset.js.zyzz.json +1 -1
  84. package/dist/web/components/Kbd.js.zyzz.json +1 -1
  85. package/dist/web/components/ListGroup.css +1 -1
  86. package/dist/web/components/ListGroup.d.ts +46 -4
  87. package/dist/web/components/ListGroup.d.ts.map +1 -1
  88. package/dist/web/components/ListGroup.js +11 -9
  89. package/dist/web/components/ListGroup.js.map +1 -1
  90. package/dist/web/components/ListGroup.js.zyzz.json +1 -1
  91. package/dist/web/components/LoadingDots.js.zyzz.json +1 -1
  92. package/dist/web/components/Menu.css +1 -1
  93. package/dist/web/components/Menu.js.zyzz.json +1 -1
  94. package/dist/web/components/NativeSelect.css +1 -1
  95. package/dist/web/components/NativeSelect.js.zyzz.json +1 -1
  96. package/dist/web/components/NetworkLogo.js.zyzz.json +1 -1
  97. package/dist/web/components/NumberField.js.zyzz.json +1 -1
  98. package/dist/web/components/OtpField.css +1 -1
  99. package/dist/web/components/OtpField.js.zyzz.json +1 -1
  100. package/dist/web/components/Pagination.css +1 -1
  101. package/dist/web/components/Pagination.js.zyzz.json +1 -1
  102. package/dist/web/components/Popover.css +1 -1
  103. package/dist/web/components/Popover.js.zyzz.json +1 -1
  104. package/dist/web/components/Progress.js.zyzz.json +1 -1
  105. package/dist/web/components/Qr.js.zyzz.json +1 -1
  106. package/dist/web/components/RadioGroup.css +1 -1
  107. package/dist/web/components/RadioGroup.js.zyzz.json +1 -1
  108. package/dist/web/components/SecretValue.js.zyzz.json +1 -1
  109. package/dist/web/components/Select.css +1 -1
  110. package/dist/web/components/Select.d.ts +14 -7
  111. package/dist/web/components/Select.d.ts.map +1 -1
  112. package/dist/web/components/Select.js +8 -6
  113. package/dist/web/components/Select.js.map +1 -1
  114. package/dist/web/components/Select.js.zyzz.json +1 -1
  115. package/dist/web/components/Separator.js.zyzz.json +1 -1
  116. package/dist/web/components/SidebarMenu.css +1 -1
  117. package/dist/web/components/SidebarMenu.d.ts +102 -11
  118. package/dist/web/components/SidebarMenu.d.ts.map +1 -1
  119. package/dist/web/components/SidebarMenu.js +58 -4
  120. package/dist/web/components/SidebarMenu.js.map +1 -1
  121. package/dist/web/components/SidebarMenu.js.zyzz.json +1 -1
  122. package/dist/web/components/Skeleton.js.zyzz.json +1 -1
  123. package/dist/web/components/Slider.js.zyzz.json +1 -1
  124. package/dist/web/components/Snippet.css +1 -1
  125. package/dist/web/components/Snippet.js.zyzz.json +1 -1
  126. package/dist/web/components/Spinner.css +1 -1
  127. package/dist/web/components/Spinner.d.ts +40 -12
  128. package/dist/web/components/Spinner.d.ts.map +1 -1
  129. package/dist/web/components/Spinner.js +8 -7
  130. package/dist/web/components/Spinner.js.map +1 -1
  131. package/dist/web/components/Spinner.js.zyzz.json +1 -1
  132. package/dist/web/components/SplitBar.js.zyzz.json +1 -1
  133. package/dist/web/components/SplitButton.js.zyzz.json +1 -1
  134. package/dist/web/components/Stack.js.zyzz.json +1 -1
  135. package/dist/web/components/StatusChip.js.zyzz.json +1 -1
  136. package/dist/web/components/StatusIndicator.js.zyzz.json +1 -1
  137. package/dist/web/components/StatusRow.js.zyzz.json +1 -1
  138. package/dist/web/components/Stepper.js.zyzz.json +1 -1
  139. package/dist/web/components/SuccessHero.css +1 -1
  140. package/dist/web/components/SuccessHero.d.ts.map +1 -1
  141. package/dist/web/components/SuccessHero.js +0 -2
  142. package/dist/web/components/SuccessHero.js.map +1 -1
  143. package/dist/web/components/SuccessHero.js.zyzz.json +1 -1
  144. package/dist/web/components/Surface.css +1 -1
  145. package/dist/web/components/Surface.d.ts +1 -1
  146. package/dist/web/components/Surface.js.map +1 -1
  147. package/dist/web/components/Surface.js.zyzz.json +1 -1
  148. package/dist/web/components/Switch.css +1 -1
  149. package/dist/web/components/Switch.d.ts +1 -1
  150. package/dist/web/components/Switch.js.map +1 -1
  151. package/dist/web/components/Switch.js.zyzz.json +1 -1
  152. package/dist/web/components/Table.css +1 -1
  153. package/dist/web/components/Table.js.zyzz.json +1 -1
  154. package/dist/web/components/Tabs.css +1 -1
  155. package/dist/web/components/Tabs.d.ts +9 -18
  156. package/dist/web/components/Tabs.d.ts.map +1 -1
  157. package/dist/web/components/Tabs.js.map +1 -1
  158. package/dist/web/components/Tabs.js.zyzz.json +1 -1
  159. package/dist/web/components/TempoLogo.js.zyzz.json +1 -1
  160. package/dist/web/components/TextInput.js.zyzz.json +1 -1
  161. package/dist/web/components/Textarea.css +1 -1
  162. package/dist/web/components/Textarea.js.zyzz.json +1 -1
  163. package/dist/web/components/Toast.css +1 -1
  164. package/dist/web/components/Toast.d.ts.map +1 -1
  165. package/dist/web/components/Toast.js +6 -7
  166. package/dist/web/components/Toast.js.map +1 -1
  167. package/dist/web/components/Toast.js.zyzz.json +1 -1
  168. package/dist/web/components/Token.css +1 -1
  169. package/dist/web/components/Token.d.ts.map +1 -1
  170. package/dist/web/components/Token.js +1 -1
  171. package/dist/web/components/Token.js.map +1 -1
  172. package/dist/web/components/Token.js.zyzz.json +1 -1
  173. package/dist/web/components/TokenLogo.js.zyzz.json +1 -1
  174. package/dist/web/components/Tooltip.css +1 -1
  175. package/dist/web/components/Tooltip.js.zyzz.json +1 -1
  176. package/dist/web/components/VerificationCode.js.zyzz.json +1 -1
  177. package/dist/web/components/Visual.css +1 -1
  178. package/dist/web/components/Visual.js.zyzz.json +1 -1
  179. package/dist/web/components/internal/Field.css +1 -1
  180. package/dist/web/components/internal/Field.js.zyzz.json +1 -1
  181. package/dist/web/components/internal/InputGroup.css +1 -1
  182. package/dist/web/components/internal/InputGroup.js.zyzz.json +1 -1
  183. package/dist/web/components/internal/Listbox.css +1 -1
  184. package/dist/web/components/internal/Listbox.js.zyzz.json +1 -1
  185. package/dist/web/components/internal/Streaks.js.zyzz.json +1 -1
  186. package/dist/web/components/internal/TabBar.d.ts +1 -1
  187. package/dist/web/index.d.ts +1 -0
  188. package/dist/web/index.d.ts.map +1 -1
  189. package/dist/web/index.js +1 -0
  190. package/dist/web/index.js.map +1 -1
  191. package/dist/web/index.js.zyzz.json +1 -1
  192. package/dist/web/vars.d.ts +50 -4
  193. package/dist/web/vars.d.ts.map +1 -1
  194. package/dist/web/vars.js.map +1 -1
  195. package/dist/web/vars.js.zyzz.json +1 -1
  196. package/dist/web/zyzz.config.d.ts +250 -20
  197. package/dist/web/zyzz.config.d.ts.map +1 -1
  198. package/dist/web/zyzz.config.js.zyzz.json +1 -1
  199. package/package.json +1 -1
  200. package/src/web/components/AmountInput.tsx +6 -1
  201. package/src/web/components/AppShell.tsx +64 -125
  202. package/src/web/components/Badge.tsx +1 -1
  203. package/src/web/components/BadgedLogo.tsx +125 -0
  204. package/src/web/components/BarChart.tsx +1 -1
  205. package/src/web/components/Button.tsx +66 -36
  206. package/src/web/components/Dialog.tsx +11 -0
  207. package/src/web/components/ListGroup.tsx +53 -7
  208. package/src/web/components/Select.tsx +15 -8
  209. package/src/web/components/SidebarMenu.tsx +165 -11
  210. package/src/web/components/Spinner.tsx +34 -11
  211. package/src/web/components/SuccessHero.tsx +2 -4
  212. package/src/web/components/Surface.tsx +1 -1
  213. package/src/web/components/Switch.tsx +1 -1
  214. package/src/web/components/Tabs.tsx +10 -20
  215. package/src/web/components/Toast.tsx +17 -5
  216. package/src/web/components/Token.tsx +2 -4
  217. package/src/web/components/internal/TabBar.ts +1 -1
  218. package/src/web/index.ts +1 -0
  219. package/src/web/vars.ts +43 -5
@@ -8,8 +8,9 @@ import { style, variants } from '../zyzz.config.js'
8
8
  * An indeterminate loading indicator. Renders a Base UI `Progress.Root` with
9
9
  * `role="progressbar"`, no `aria-valuenow`, and the name `Loading`. The arc draws in
10
10
  * `currentColor` on a faint track, black in light mode and the text color in dark mode, and stops
11
- * rotating under `prefers-reduced-motion: reduce`. `elevated` places it on a 44px elevated tile
12
- * with a shadow.
11
+ * rotating under `prefers-reduced-motion: reduce`. `size` sets the ring to 16px or 40px, and the
12
+ * ring and its stroke scale together. `elevated` places a 16px ring on a 44px elevated tile with a
13
+ * shadow, whatever the `size`.
13
14
  *
14
15
  * - Pass `aria-label` to say what is loading, such as `Loading transactions`.
15
16
  * - Show it only after a short delay, so fast responses do not flash an indicator.
@@ -24,13 +25,13 @@ import { style, variants } from '../zyzz.config.js'
24
25
  * @see {@link https://www.w3.org/WAI/WCAG22/Understanding/pause-stop-hide.html | WCAG 2.2 Pause, Stop, Hide}
25
26
  */
26
27
  export function Spinner(props: Spinner.Props) {
27
- const { className, elevated, vars, ...attributes } = props
28
+ const { className, elevated, size, vars, ...attributes } = props
28
29
 
29
30
  return (
30
31
  <BaseUi.Progress.Root
31
32
  aria-label="Loading"
32
33
  {...attributes}
33
- {...styles.spinner({ className, elevated, style: props.style, vars })}
34
+ {...styles.spinner({ className, elevated, size, style: props.style, vars })}
34
35
  value={null}
35
36
  >
36
37
  <svg aria-hidden="true" {...styles.glyph()} fill="none" viewBox="0 0 16 16">
@@ -61,6 +62,8 @@ namespace styles {
61
62
  animation: `${rotation} 0.8s linear infinite !custom`,
62
63
  height: '100% !custom',
63
64
  width: '100% !custom',
65
+ // The stroke keeps its CSS width at every size, instead of scaling with the view box.
66
+ selectors: { '& > *': { vectorEffect: 'non-scaling-stroke !custom' } },
64
67
  '@media (prefers-reduced-motion: reduce)': { animation: 'none !custom' },
65
68
  },
66
69
  { id: 'tds/web/spinner/glyph' },
@@ -77,12 +80,12 @@ namespace styles {
77
80
  justifyContent: 'center',
78
81
  width: '16',
79
82
  },
80
- defaultVariants: { elevated: false },
81
- variants: {
82
- // The tile is a 44px square around the 16px ring.
83
- elevated: {
84
- false: {},
85
- true: {
83
+ // The designs draw the elevated tile only around the 16px ring, so the tile outranks `size`.
84
+ // The tile is a 44px square around the 16px ring.
85
+ compoundVariants: [
86
+ {
87
+ when: { elevated: true },
88
+ style: {
86
89
  backgroundColor: 'background.elevated',
87
90
  borderRadius: 'xs',
88
91
  // Web has no elevated shadow step, so this repeats the Mobile `shadow.elevated` layers, in
@@ -90,7 +93,27 @@ namespace styles {
90
93
  boxShadow: '0 12px 36px #0000000a, 0 8px 32px #0000000a, 0 4px 12px #0000000a !custom',
91
94
  height: '44',
92
95
  width: '44',
93
- selectors: { '& > svg': { height: '16', width: '16' } },
96
+ selectors: {
97
+ '& > svg': { height: '16', width: '16' },
98
+ '& > svg > *': { strokeWidth: '1px !custom' },
99
+ },
100
+ },
101
+ },
102
+ ],
103
+ defaultVariants: { elevated: false, size: '16' },
104
+ variants: {
105
+ elevated: { false: {}, true: {} },
106
+ /**
107
+ * The width and height of the ring, in pixels. The 40px ring draws a 2.5px stroke.
108
+ *
109
+ * @default '16'
110
+ */
111
+ size: {
112
+ '16': {},
113
+ '40': {
114
+ height: '40',
115
+ width: '40',
116
+ selectors: { '& > svg > *': { strokeWidth: '2.5px !custom' } },
94
117
  },
95
118
  },
96
119
  },
@@ -201,9 +201,8 @@ namespace styles {
201
201
  { id: 'tds/web/success-hero/body' },
202
202
  )
203
203
 
204
- // Figma draws the caption at 50% white, which no variable holds.
205
204
  export const caption = style(
206
- { color: '#ffffff80 !custom', margin: '0', typography: 'body.b3Strong' },
205
+ { color: 'overlay.content.tertiary', margin: '0', typography: 'body.b3Strong' },
207
206
  { id: 'tds/web/success-hero/caption' },
208
207
  )
209
208
 
@@ -219,9 +218,8 @@ namespace styles {
219
218
  { id: 'tds/web/success-hero/content' },
220
219
  )
221
220
 
222
- // Figma draws the description at 60% white, which no variable holds.
223
221
  export const description = style(
224
- { color: '#ffffff99 !custom', margin: '0', typography: 'body.b2' },
222
+ { color: 'overlay.content.secondary', margin: '0', typography: 'body.b2' },
225
223
  { id: 'tds/web/success-hero/description' },
226
224
  )
227
225
 
@@ -199,7 +199,7 @@ namespace styles {
199
199
  {
200
200
  base: {
201
201
  backgroundColor: 'background.elevated',
202
- borderColor: 'line.secondary',
202
+ borderColor: 'line.card',
203
203
  borderStyle: 'solid',
204
204
  borderWidth: 'regular',
205
205
  boxSizing: 'border-box',
@@ -131,7 +131,7 @@ namespace styles {
131
131
  '&::after': { content: '"" !custom', inset: '-8', position: 'absolute' },
132
132
  '&:focus-visible': { outlineColor: 'border.focus', outlineOffset: '2' },
133
133
  '&:hover:not([data-disabled]):not([data-checked])': { backgroundColor: 'line.primary' },
134
- '&[data-checked]': { backgroundColor: 'content.accent' },
134
+ '&[data-checked]': { backgroundColor: 'inverse.background.primary' },
135
135
  '&[data-checked]:hover:not([data-disabled])': { opacity: 'hover' },
136
136
  '&[data-disabled]': { cursor: 'default', opacity: 'disabled' },
137
137
  '&[data-invalid]': {
@@ -212,8 +212,7 @@ namespace styles {
212
212
  position: 'relative',
213
213
  },
214
214
  // The pill sizes follow the Platform Tab: 48, 40 and 32px, padded by 32, 24 and 16px, with
215
- // a label in Pilat at the size and weight of B2 Strong, or of B3 Strong for small. Each
216
- // family follows its typography set, which sets the family of the body.
215
+ // an L2 label, or an L3 label for small.
217
216
  compoundVariants: [
218
217
  {
219
218
  when: { size: 'large', variant: 'pill' },
@@ -222,16 +221,13 @@ namespace styles {
222
221
  '& > [role="tab"]': {
223
222
  height: '48',
224
223
  paddingInline: '32',
225
- typography: 'body.b2Strong',
226
- fontFamily: 'heading',
224
+ typography: 'label.l2',
227
225
  },
228
226
  '& > [role="tab"]:is([data-active], [data-active]:hover)': {
229
- typography: 'body.b2Strong',
230
- fontFamily: 'heading',
227
+ typography: 'label.l2',
231
228
  },
232
229
  '& > [role="tab"] [data-reserve]': {
233
- typography: 'body.b2Strong',
234
- fontFamily: 'heading',
230
+ typography: 'label.l2',
235
231
  },
236
232
  },
237
233
  },
@@ -246,16 +242,13 @@ namespace styles {
246
242
  selectors: {
247
243
  '& > [role="tab"]': {
248
244
  paddingInline: '16',
249
- typography: 'body.b3Strong',
250
- fontFamily: 'heading',
245
+ typography: 'label.l3',
251
246
  },
252
247
  '& > [role="tab"]:is([data-active], [data-active]:hover)': {
253
- typography: 'body.b3Strong',
254
- fontFamily: 'heading',
248
+ typography: 'label.l3',
255
249
  },
256
250
  '& > [role="tab"] [data-reserve]': {
257
- typography: 'body.b3Strong',
258
- fontFamily: 'heading',
251
+ typography: 'label.l3',
259
252
  },
260
253
  },
261
254
  },
@@ -366,16 +359,13 @@ namespace styles {
366
359
  minWidth: '5rem !custom',
367
360
  outlineOffset: '2',
368
361
  transitionProperty: 'background-color, color, outline-color, scale',
369
- typography: 'body.b2Strong',
370
- fontFamily: 'heading',
362
+ typography: 'label.l2',
371
363
  },
372
364
  '& > [role="tab"]:is([data-active], [data-active]:hover)': {
373
- typography: 'body.b2Strong',
374
- fontFamily: 'heading',
365
+ typography: 'label.l2',
375
366
  },
376
367
  '& > [role="tab"] [data-reserve]': {
377
- typography: 'body.b2Strong',
378
- fontFamily: 'heading',
368
+ typography: 'label.l2',
379
369
  },
380
370
  // The fill marks the active tab, so the list hides the underline indicator.
381
371
  '& > span:not([role="tab"])': { display: 'none' },
@@ -284,10 +284,9 @@ namespace styles {
284
284
  { id: 'tds/web/toast/content' },
285
285
  )
286
286
 
287
- // The title and description set Pilat at the size of their typography set, so the family
288
- // follows the set, which sets the family of the body.
287
+ // The title and description set their Pilat labels through the label typography sets.
289
288
  export const description = style(
290
- { color: 'content.secondary', margin: '0', typography: 'body.b3Strong', fontFamily: 'heading' },
289
+ { color: 'content.secondary', margin: '0', typography: 'label.l3' },
291
290
  { id: 'tds/web/toast/description' },
292
291
  )
293
292
 
@@ -309,7 +308,7 @@ namespace styles {
309
308
 
310
309
  export const root = style(
311
310
  {
312
- backgroundColor: 'background.elevated',
311
+ backgroundColor: 'background.menu',
313
312
  borderRadius: 'sm',
314
313
  boxShadow: 'large',
315
314
  boxSizing: 'border-box',
@@ -328,6 +327,19 @@ namespace styles {
328
327
  userSelect: 'none',
329
328
  zIndex: 'calc(1000 - var(--toast-index)) !custom',
330
329
  selectors: {
330
+ // The 1px card line is inset, so it adds nothing to the height that Base UI measures.
331
+ '&::before': {
332
+ borderColor: 'line.card',
333
+ borderRadius: 'inherit !custom',
334
+ borderStyle: 'solid !custom',
335
+ borderWidth: 'regular',
336
+ boxSizing: 'border-box',
337
+ content: '"" !custom',
338
+ cornerShape: 'inherit !custom',
339
+ inset: '0',
340
+ pointerEvents: 'none',
341
+ position: 'absolute',
342
+ },
331
343
  '&::after': {
332
344
  content: '"" !custom',
333
345
  height: '16',
@@ -367,7 +379,7 @@ namespace styles {
367
379
  )
368
380
 
369
381
  export const title = style(
370
- { color: 'content.primary', margin: '0', typography: 'body.b2Strong', fontFamily: 'heading' },
382
+ { color: 'content.primary', margin: '0', typography: 'label.l2' },
371
383
  { id: 'tds/web/toast/title' },
372
384
  )
373
385
 
@@ -82,11 +82,9 @@ namespace styles {
82
82
  export const token = style(
83
83
  {
84
84
  alignItems: 'center',
85
- backgroundColor: 'background.elevated',
86
- borderColor: 'line.primary',
85
+ backgroundColor: 'container.selected',
86
+ border: 'none !custom',
87
87
  borderRadius: 'full',
88
- borderStyle: 'solid',
89
- borderWidth: 'regular',
90
88
  boxSizing: 'border-box',
91
89
  color: 'content.primary',
92
90
  columnGap: '8',
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Holds the `SidebarMenu.Item` entries that `AppShell` repeats in its bottom bar below 768px. The
2
+ * Holds the `SidebarMenu.Item` entries that `AppShell` repeats in its bottom bar. The
3
3
  * store lives outside React state, so an item that registers on every render updates the bar
4
4
  * without rendering the shell again.
5
5
  * @module
package/src/web/index.ts CHANGED
@@ -10,6 +10,7 @@ export { AssetChip } from './components/AssetChip.js'
10
10
  export { Autocomplete } from './components/Autocomplete.js'
11
11
  export { Avatar } from './components/Avatar.js'
12
12
  export { Badge } from './components/Badge.js'
13
+ export { BadgedLogo } from './components/BadgedLogo.js'
13
14
  export { Banner } from './components/Banner.js'
14
15
  export { BarChart } from './components/BarChart.js'
15
16
  export { Breadcrumbs } from './components/Breadcrumbs.js'
package/src/web/vars.ts CHANGED
@@ -384,12 +384,16 @@ export const variables = Vars.define(
384
384
  },
385
385
  },
386
386
  },
387
+ // Dark mode lifts the page to 92% black, and the elevated and menu fills step lighter from
388
+ // it, at the Platform primitive solid steps 090 and 087, which TDS 1.0 Core has no step for.
387
389
  background: {
388
- elevated: { dark: vars.color.neutral['092'], light: vars.color.neutral['000'] },
389
- primary: { dark: vars.color.neutral['100'], light: vars.color.neutral['004'] },
390
+ elevated: { dark: '#1a1a1a', light: vars.color.neutral['000'] },
391
+ menu: { dark: '#222', light: vars.color.neutral['000'] },
392
+ primary: { dark: vars.color.neutral['092'], light: vars.color.neutral['004'] },
390
393
  secondary: { dark: vars.color.neutral['092'], light: vars.color.neutral['000'] },
391
- // The layouts fill the sidebar and the page header a step lighter than the page.
392
- sidebar: { dark: vars.color.neutral['096'], light: '#fafafa' },
394
+ // The layouts fill the sidebar a step lighter than the page in light mode, and with the page
395
+ // in dark mode.
396
+ sidebar: { dark: vars.color.neutral['092'], light: '#fafafa' },
393
397
  },
394
398
  border: {
395
399
  focus: { dark: vars.color.neutral.tint['052'], light: vars.color.neutral.shade['040'] },
@@ -457,6 +461,8 @@ export const variables = Vars.define(
457
461
  },
458
462
  container: {
459
463
  accent: vars.color.accent.alpha.regular.blue['100'],
464
+ // The quiet fill of inputs and other controls.
465
+ control: { dark: vars.color.neutral.tint['004'], light: vars.color.neutral.shade['004'] },
460
466
  negative: {
461
467
  dark: vars.color.accent.alpha.regular.red['200'],
462
468
  light: vars.color.accent.alpha.regular.red['100'],
@@ -468,6 +474,10 @@ export const variables = Vars.define(
468
474
  // Dark mode fills the regular container at 8% white, dimmer than Figma's 12%, so badges and
469
475
  // other soft fills recede on the dark page.
470
476
  regular: { dark: vars.color.neutral.tint['008'], light: vars.color.neutral.shade['004'] },
477
+ // The fill of a selected option, such as a picker row.
478
+ selected: { dark: vars.color.neutral.tint['012'], light: vars.color.neutral['000'] },
479
+ // An opaque fill at the Platform primitive solid steps 079 and 010.
480
+ solid: { dark: '#353535', light: '#e6e6e6' },
471
481
  strong: { dark: vars.color.neutral.tint['016'], light: vars.color.neutral.shade['008'] },
472
482
  special: 'rgb(126 89 228 / 0.08)',
473
483
  subtle: { dark: vars.color.neutral.tint['008'], light: vars.color.neutral.shade['003'] },
@@ -500,6 +510,8 @@ export const variables = Vars.define(
500
510
  },
501
511
  },
502
512
  line: {
513
+ // The border of a card, at 5% white in dark mode.
514
+ card: { dark: '#ffffff0d', light: vars.color.neutral.shade['008'] },
503
515
  primary: { dark: vars.color.neutral.tint['024'], light: vars.color.neutral.shade['016'] },
504
516
  // Dark mode draws the secondary line at 8% white, dimmer than Figma's 16%, so the borders
505
517
  // and dividers recede on the dark fills.
@@ -508,6 +520,8 @@ export const variables = Vars.define(
508
520
  },
509
521
  material: {
510
522
  regular: { dark: vars.color.neutral.tint['048'], light: vars.color.neutral.shade['040'] },
523
+ // The grain over a material, at 7%.
524
+ texture: { dark: '#ffffff12', light: '#00000012' },
511
525
  thick: { dark: vars.color.neutral.tint['064'], light: vars.color.neutral.shade['060'] },
512
526
  thin: { dark: vars.color.neutral.tint['024'], light: vars.color.neutral.shade['020'] },
513
527
  ultrathick: {
@@ -523,13 +537,19 @@ export const variables = Vars.define(
523
537
  tertiary: { fill: { hover: vars.color.neutral.tint['012'] } },
524
538
  },
525
539
  container: { regular: '#70707052' },
526
- content: { primary: vars.color.neutral['000'] },
540
+ content: {
541
+ primary: vars.color.neutral['000'],
542
+ secondary: vars.color.neutral.tint['064'],
543
+ tertiary: vars.color.neutral.tint['052'],
544
+ },
527
545
  },
528
546
  scrim: {
529
547
  regular: vars.color.neutral.shade['016'],
530
548
  strong: vars.color.neutral.shade['032'],
531
549
  },
532
550
  shadow: {
551
+ // The shadow under elevated fills, such as menus and modals.
552
+ elevated: { dark: '#0000003d', light: vars.color.neutral.shade['012'] },
533
553
  primary: { dark: vars.color.neutral.shade['032'], light: vars.color.neutral.shade['008'] },
534
554
  secondary: {
535
555
  dark: vars.color.neutral.shade['016'],
@@ -663,6 +683,24 @@ export const variables = Vars.define(
663
683
  lineHeight: '20.7px',
664
684
  },
665
685
  },
686
+ // Labels set Pilat at the size and weight of B2 Strong and B3 Strong, tracked by 1% as the
687
+ // Platform Tab and Toast draw them.
688
+ label: {
689
+ l2: {
690
+ fontFamily: vars.fontFamily.heading,
691
+ fontSize: '14px',
692
+ fontWeight: 500,
693
+ letterSpacing: '.14px',
694
+ lineHeight: '20px',
695
+ },
696
+ l3: {
697
+ fontFamily: vars.fontFamily.heading,
698
+ fontSize: '12px',
699
+ fontWeight: 500,
700
+ letterSpacing: '.15px',
701
+ lineHeight: '16px',
702
+ },
703
+ },
666
704
  mono: {
667
705
  m1: {
668
706
  fontFamily: vars.fontFamily.mono,