@zvoove/unity-ui 2.29.1 → 2.30.0

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/llms.txt CHANGED
@@ -30,7 +30,7 @@ Dark mode: add `data-theme="dark"` to a parent element.
30
30
  ## Responsive Props
31
31
 
32
32
  Many props accept `ResponsiveType<T>`, meaning either a direct value OR a breakpoint object.
33
- Breakpoints (from smallest to largest): `minimum` (0px), `mobile` (320px), `tablet` (768px), `laptop` (1024px), `desktop` (1440px).
33
+ Breakpoints (from smallest to largest): `minimum` (0px), `mobile` (768px), `tablet` (1024px), `laptop` (1280px), `desktop` (1536px), `wide` (1920px), `ultrawide` (2560px).
34
34
  Values cascade upward — setting `mobile` applies to all larger breakpoints until overridden.
35
35
 
36
36
  ```tsx
@@ -39,7 +39,10 @@ Values cascade upward — setting `mobile` applies to all larger breakpoints unt
39
39
 
40
40
  // Responsive object — values cascade up from smallest to largest
41
41
  <Button size={{ mobile: 'sm', tablet: 'md', desktop: 'lg' }} />
42
- // mobile: sm → tablet: md → laptop: md (inherited) → desktop: lg
42
+ // mobile: sm → tablet: md → laptop: md (inherited) → desktop: lg → wide: lg → ultrawide: lg
43
+
44
+ // Use wide / ultrawide to fine-tune large displays beyond `desktop`
45
+ <Grid columns={{ mobile: 1, tablet: 2, desktop: 3, wide: 4, ultrawide: 6 }} />
43
46
 
44
47
  // Common patterns:
45
48
  <Stack direction={{ mobile: 'column', tablet: 'row' }} /> // Stack vertically on mobile, horizontally on tablet+
@@ -65,7 +68,7 @@ import { Stack } from '@zvoove/unity-ui';
65
68
 
66
69
  <Stack
67
70
  direction="column" // ResponsiveType<'row' | 'row-reverse' | 'column' | 'column-reverse'>
68
- gap="md" // ResponsiveType<SpacingKeys> - none|xs2|xs|sm|md|lg|xl|xl2|xl3|xl4|xl5|xl6|xl7
71
+ gap="md" // ResponsiveType<Gap> where Gap = SpacingKeys | { row?: SpacingKeys; column?: SpacingKeys }
69
72
  align="center" // ResponsiveType<AlignItems> - default: 'baseline' — set explicitly every time
70
73
  justify="space-between" // ResponsiveType<JustifyContent>
71
74
  wrap="wrap" // ResponsiveType<FlexWrap>
@@ -84,14 +87,14 @@ Common patterns:
84
87
  // Row with icon + label — must set align="center" or they baseline-align
85
88
  <Stack direction="row" gap="sm" align="center">
86
89
  <Icon name="info" />
87
- <Typography variant="body" size="medium">Label</Typography>
90
+ <Typography variant="body" size="md">Label</Typography>
88
91
  </Stack>
89
92
 
90
93
  // Divider spanning full width — Stack must have width="100%"
91
94
  <Stack direction="column" gap="md" width="100%">
92
- <Typography variant="title" size="large">Title</Typography>
95
+ <Typography variant="title" size="lg">Title</Typography>
93
96
  <Divider />
94
- <Typography variant="body" size="medium">Content</Typography>
97
+ <Typography variant="body" size="md">Content</Typography>
95
98
  </Stack>
96
99
 
97
100
  // Page layout — stacks vertically on mobile, horizontally on tablet+
@@ -109,7 +112,14 @@ Common patterns:
109
112
  // Centered content
110
113
  <Stack direction="column" align="center" justify="center" gap="md" height="100%">
111
114
  <Icon name="check-circle" size="2xl" />
112
- <Typography variant="headline" size="medium">Success!</Typography>
115
+ <Typography variant="headline" size="md">Success!</Typography>
116
+ </Stack>
117
+
118
+ // Asymmetric row/column gap — wrap row with different vertical vs horizontal spacing
119
+ <Stack direction="row" wrap="wrap" gap={{ row: 'lg', column: 'sm' }}>
120
+ <Chip>One</Chip>
121
+ <Chip>Two</Chip>
122
+ <Chip>Three</Chip>
113
123
  </Stack>
114
124
  ```
115
125
 
@@ -121,7 +131,7 @@ import { Grid } from '@zvoove/unity-ui';
121
131
  <Grid
122
132
  columns={3} // ResponsiveType<number | string> - default: 1
123
133
  rows={1} // ResponsiveType<number | string> - default: 1
124
- gap="md" // ResponsiveType<SpacingKeys>
134
+ gap="md" // ResponsiveType<Gap> where Gap = SpacingKeys | { row?: SpacingKeys; column?: SpacingKeys }
125
135
  padding="none" // ResponsiveType<Padding>
126
136
  margin="none" // ResponsiveType<Margin>
127
137
  width="100%" // ResponsiveType<number | string>
@@ -132,6 +142,8 @@ import { Grid } from '@zvoove/unity-ui';
132
142
  </Grid>
133
143
  ```
134
144
 
145
+ The `gap` prop accepts either a single `SpacingKeys` (applied to both axes) or an object with `row` / `column` keys to control each axis independently. Both forms are fully responsive — any per-breakpoint value can itself be a `SpacingKeys` or a `{ row, column }` object, so the two shapes can be mixed across breakpoints.
146
+
135
147
  Common patterns:
136
148
  ```tsx
137
149
  // Responsive card grid — 1 col on mobile, 2 on tablet, 3 on desktop
@@ -152,6 +164,29 @@ Common patterns:
152
164
  <Grid.Item colSpan={2}><Card>Main content</Card></Grid.Item>
153
165
  <Grid.Item colSpan={1}><Card>Sidebar</Card></Grid.Item>
154
166
  </Grid>
167
+
168
+ // Asymmetric row vs column gap — large vertical breathing room, tight horizontal columns
169
+ <Grid columns={3} gap={{ row: 'xl3', column: 'xs' }}>
170
+ <Card>1</Card>
171
+ <Card>2</Card>
172
+ <Card>3</Card>
173
+ <Card>4</Card>
174
+ <Card>5</Card>
175
+ <Card>6</Card>
176
+ </Grid>
177
+
178
+ // Responsive object gap — single key on minimum, per-axis on larger breakpoints
179
+ <Grid
180
+ columns={{ minimum: 1, mobile: 2, tablet: 3, desktop: 4 }}
181
+ gap={{
182
+ minimum: 'xs2',
183
+ mobile: { row: 'md', column: 'xs' },
184
+ tablet: { row: 'lg', column: 'sm' },
185
+ desktop: { row: 'xl3', column: 'lg' },
186
+ }}
187
+ >
188
+ {items.map((item) => <Card key={item.id}>{item.title}</Card>)}
189
+ </Grid>
155
190
  ```
156
191
 
157
192
  ### Card
@@ -178,8 +213,8 @@ Common patterns:
178
213
  // Content card with internal layout using Stack (NOT Card for layout)
179
214
  <Card variant="outlined" padding="lg" elevation={1}>
180
215
  <Stack direction="column" gap="md">
181
- <Typography variant="title" size="large">Profile</Typography>
182
- <Typography variant="body" size="medium">User details here.</Typography>
216
+ <Typography variant="title" size="lg">Profile</Typography>
217
+ <Typography variant="body" size="md">User details here.</Typography>
183
218
  </Stack>
184
219
  </Card>
185
220
 
@@ -187,8 +222,8 @@ Common patterns:
187
222
  <Card variant="outlined" padding="none">
188
223
  <img src="/banner.jpg" style={{ width: '100%' }} />
189
224
  <Stack padding="md" gap="sm">
190
- <Typography variant="title" size="medium">Article title</Typography>
191
- <Typography variant="body" size="medium">Article excerpt...</Typography>
225
+ <Typography variant="title" size="md">Article title</Typography>
226
+ <Typography variant="body" size="md">Article excerpt...</Typography>
192
227
  </Stack>
193
228
  </Card>
194
229
 
@@ -242,7 +277,7 @@ import { Typography } from '@zvoove/unity-ui';
242
277
 
243
278
  <Typography
244
279
  variant="body" // 'display' | 'headline' | 'title' | 'body' | 'label'
245
- size="medium" // 'small' | 'medium' | 'large'
280
+ size="md" // 'sm' | 'md' | 'lg' (responsive — accepts breakpoint object). 'small' | 'medium' | 'large' are accepted but deprecated; will be removed in v3.0.0
246
281
  as="p" // 'p' | 'span' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
247
282
  color="on-surface" // ForegroundColors
248
283
  textAlign="left" // 'left' | 'center' | 'right'
@@ -258,22 +293,22 @@ import { Typography } from '@zvoove/unity-ui';
258
293
  Variant guide:
259
294
  ```tsx
260
295
  // Page heading
261
- <Typography variant="display" size="large" as="h1">Page Title</Typography>
296
+ <Typography variant="display" size="lg" as="h1">Page Title</Typography>
262
297
 
263
298
  // Section heading
264
- <Typography variant="headline" size="medium" as="h2">Section Title</Typography>
299
+ <Typography variant="headline" size="md" as="h2">Section Title</Typography>
265
300
 
266
301
  // Card/dialog title
267
- <Typography variant="title" size="large">Card Title</Typography>
302
+ <Typography variant="title" size="lg">Card Title</Typography>
268
303
 
269
304
  // Body text (default)
270
- <Typography variant="body" size="medium">Paragraph text goes here.</Typography>
305
+ <Typography variant="body" size="md">Paragraph text goes here.</Typography>
271
306
 
272
307
  // Small labels, captions
273
- <Typography variant="label" size="small" color="on-surface-variant">Updated 2 hours ago</Typography>
308
+ <Typography variant="label" size="sm" color="on-surface-variant">Updated 2 hours ago</Typography>
274
309
 
275
310
  // Truncate long text to 2 lines
276
- <Typography variant="body" size="medium" truncate={2}>Very long text that will be cut off...</Typography>
311
+ <Typography variant="body" size="md" truncate={2}>Very long text that will be cut off...</Typography>
277
312
  ```
278
313
 
279
314
  ---
@@ -646,7 +681,7 @@ import { Tag } from '@zvoove/unity-ui';
646
681
  variant="solid" // 'solid' | 'outlined' | 'ghost'
647
682
  color="green" // 'green' | 'yellow' | 'pink' | 'steel-blue' | 'error' | 'primary' | 'neutral'
648
683
  tone="dark" // 'dark' | 'light' (only with variant='solid')
649
- size="medium" // 'large' | 'medium' | 'small'
684
+ size="md" // 'sm' | 'md' | 'lg' (responsive — accepts breakpoint object). 'small' | 'medium' | 'large' are accepted but deprecated; will be removed in v3.0.0
650
685
  icon="Check" // CommonIconNames
651
686
  />
652
687
  ```
@@ -677,7 +712,7 @@ User avatar display. When `image` is provided and `type` is omitted, type is aut
677
712
  import { Avatar, AvatarGroup } from '@zvoove/unity-ui';
678
713
 
679
714
  <Avatar
680
- size="large" // ResponsiveType<'small' | 'medium' | 'large'>
715
+ size="md" // ResponsiveType<'sm' | 'md' | 'lg'>. 'small' | 'medium' | 'large' are accepted but deprecated; will be removed in v3.0.0
681
716
  type="initials" // 'initials' | 'check' | 'avatar' | 'image' | 'zvoove' — auto-inferred as 'image' when image prop is set
682
717
  name="Max Mustermann" // string
683
718
  image="/path/to/photo.jpg" // string — when set, type defaults to 'image'
@@ -784,8 +819,8 @@ Common patterns:
784
819
  content: (
785
820
  <Stack direction="row" gap="sm" align="center">
786
821
  <Icon name="remark" size="xs" />
787
- <Typography variant="body" size="medium">Inbox</Typography>
788
- <div className="ml-auto"><Tag label="3" color="error" size="small" /></div>
822
+ <Typography variant="body" size="md">Inbox</Typography>
823
+ <div className="ml-auto"><Tag label="3" color="error" size="sm" /></div>
789
824
  </Stack>
790
825
  ),
791
826
  },
@@ -814,7 +849,7 @@ import { Link } from 'react-router-dom';
814
849
  <Card padding="none" width={320} variant="outlined">
815
850
  <Stack padding="md" direction="row" gap="sm" align="center">
816
851
  <Icon name="users" size="md" weight="light" />
817
- <Typography variant="label" size="large">Team members</Typography>
852
+ <Typography variant="label" size="lg">Team members</Typography>
818
853
  </Stack>
819
854
  <Divider />
820
855
  <List items={[{ id: 'anna', content: 'Anna Mueller' }]} />
@@ -1006,7 +1041,7 @@ import { Dialog } from '@zvoove/unity-ui';
1006
1041
  padding="md" // CardProps['padding'] — use "none" for edge-to-edge content
1007
1042
  zIndex={20} // number
1008
1043
  >
1009
- <Typography variant="title" size="large">Dialog Title</Typography>
1044
+ <Typography variant="title" size="lg">Dialog Title</Typography>
1010
1045
  <Typography>Dialog content goes here.</Typography>
1011
1046
  <Stack direction="row" gap="sm" justify="flex-end">
1012
1047
  <Button variant="outlined" onClick={handleClose}>Cancel</Button>
@@ -1024,7 +1059,7 @@ Common patterns:
1024
1059
  size={{ mobile: 'fullscreen', tablet: 'md' }}
1025
1060
  >
1026
1061
  <Stack direction="column" gap="lg">
1027
- <Typography variant="title" size="large">Edit Profile</Typography>
1062
+ <Typography variant="title" size="lg">Edit Profile</Typography>
1028
1063
  <TextField label="Name" name="name" value={name} onChange={setName} />
1029
1064
  <TextField label="Email" name="email" value={email} onChange={setEmail} />
1030
1065
  <Stack direction="row" gap="sm" justify="flex-end">
@@ -1037,8 +1072,8 @@ Common patterns:
1037
1072
  // Confirmation dialog (small)
1038
1073
  <Dialog open={showConfirm} onClose={() => setShowConfirm(false)} size="sm">
1039
1074
  <Stack direction="column" gap="md">
1040
- <Typography variant="title" size="medium">Delete item?</Typography>
1041
- <Typography variant="body" size="medium">This action cannot be undone.</Typography>
1075
+ <Typography variant="title" size="md">Delete item?</Typography>
1076
+ <Typography variant="body" size="md">This action cannot be undone.</Typography>
1042
1077
  <Stack direction="row" gap="sm" justify="flex-end">
1043
1078
  <Button variant="outlined" onClick={() => setShowConfirm(false)}>Cancel</Button>
1044
1079
  <Button variant="negative" icon="delete" onClick={handleDelete}>Delete</Button>
@@ -1572,6 +1607,17 @@ file-empty, file-pdf, file-folder, file-image, file-video, file-video-2, file-au
1572
1607
 
1573
1608
  Use `getIconForFileExtension(extension)` to resolve a file extension (e.g., "pdf") to its icon name automatically.
1574
1609
 
1610
+ ### Logos
1611
+
1612
+ Brand and product logos. By default rendered in their duotone brand colors (auto-switching to white in dark mode). Pass a `color` prop to render a flat single-color version using `currentColor`:
1613
+
1614
+ zvoove, zvoove-one, zvoove-recruit, zvoove-invoice-monitor, zvoove-go, zvoove-intelligence, zvoove-free, zvoove-work-expert, zvoove-elevate, zvoove-cashlink, zvoove-docs-ai.
1615
+
1616
+ ```tsx
1617
+ <Icon name="zvoove-one" size="xl" />
1618
+ <Icon name="zvoove-go" color="on-surface" />
1619
+ ```
1620
+
1575
1621
  ---
1576
1622
 
1577
1623
  ## EXAMPLE: Contact Form
@@ -1592,7 +1638,7 @@ function ContactForm() {
1592
1638
  return (
1593
1639
  <Card padding="xl" elevation={1} variant="outlined" maxWidth={600}>
1594
1640
  <Stack direction="column" gap="lg">
1595
- <Typography variant="headline" size="medium" as="h2">
1641
+ <Typography variant="headline" size="md" as="h2">
1596
1642
  Contact Us
1597
1643
  </Typography>
1598
1644
 
package/dist/theme.css CHANGED
@@ -36,11 +36,21 @@
36
36
  font-display: swap;
37
37
  }
38
38
 
39
+ @font-face {
40
+ font-family: 'Overpass';
41
+ font-style: normal;
42
+ font-weight: 400;
43
+ src: url('https://dj4fauerr81yp.cloudfront.net/fonts/overpass-normal-variable.woff2')
44
+ format('woff2');
45
+ font-display: swap;
46
+ }
47
+
39
48
  @custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));
40
49
  @custom-variant child (& > *);
41
50
  @theme {
42
51
  --font-*: initial;
43
52
  --font-body: 'Source Sans 3', sans-serif;
53
+ --font-tagline: 'Overpass', sans-serif;
44
54
 
45
55
  --text-*: initial;
46
56
  --text-display-large: 4rem;
@@ -388,6 +398,8 @@
388
398
  --breakpoint-tablet: 64rem; /* 1024px */
389
399
  --breakpoint-laptop: 80rem; /* 1280px */
390
400
  --breakpoint-desktop: 96rem; /* 1536px */
401
+ --breakpoint-wide: 120rem; /* 1920px */
402
+ --breakpoint-ultrawide: 160rem; /* 2560px */
391
403
 
392
404
  --container-*: initial;
393
405
  --container-minimum: 0rem; /* 0px */
@@ -395,6 +407,8 @@
395
407
  --container-tablet: 64rem; /* 1024px */
396
408
  --container-laptop: 80rem; /* 1280px */
397
409
  --container-desktop: 96rem; /* 1536px */
410
+ --container-wide: 120rem; /* 1920px */
411
+ --container-ultrawide: 160rem; /* 2560px */
398
412
 
399
413
  --chat-content-measure: 60%; /* max inline-size for bubbles & cards */
400
414