@ponti-studios/ui 1.5.1 → 1.7.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/README.md +7 -11
- package/package.json +6 -31
- package/src/components/feedback/alert.tsx +8 -4
- package/src/components/feedback/index.ts +0 -4
- package/src/components/feedback/progress.stories.tsx +15 -0
- package/src/components/feedback/progress.tsx +14 -3
- package/src/components/feedback/update-guard.stories.tsx +4 -8
- package/src/components/feedback/update-guard.tsx +41 -272
- package/src/components/filters/filter-select.tsx +3 -5
- package/src/components/forms/date-picker.stories.tsx +158 -18
- package/src/components/forms/date-picker.tsx +286 -51
- package/src/components/forms/date-utils.ts +7 -2
- package/src/components/forms/drop-zone.tsx +11 -12
- package/src/components/forms/index.ts +2 -6
- package/src/components/forms/passkey-management.stories.tsx +8 -4
- package/src/components/forms/passkey-management.tsx +78 -42
- package/src/components/forms/radio-group.stories.tsx +3 -5
- package/src/components/forms/radio-group.tsx +2 -2
- package/src/components/forms/select.stories.tsx +16 -13
- package/src/components/forms/textarea.stories.tsx +1 -1
- package/src/components/layout/index.ts +2 -0
- package/src/components/layout/particle-background.stories.tsx +38 -0
- package/src/components/layout/particle-background.tsx +378 -0
- package/src/components/layout/scroll-area.stories.tsx +12 -4
- package/src/components/layout/scroll-area.tsx +41 -4
- package/src/components/navigation/tabs.stories.tsx +0 -21
- package/src/components/overlays/dialog.stories.tsx +38 -1
- package/src/components/overlays/dialog.tsx +53 -12
- package/src/components/overlays/index.ts +0 -11
- package/src/components/primitives/avatar-placeholder.svg +13 -0
- package/src/components/primitives/avatar.stories.tsx +2 -1
- package/src/components/primitives/badge.stories.tsx +13 -3
- package/src/components/primitives/badge.tsx +1 -1
- package/src/components/primitives/button.tsx +1 -1
- package/src/components/primitives/card.tsx +6 -2
- package/src/components/primitives/index.ts +0 -3
- package/src/index.ts +1 -3
- package/src/lib/index.ts +2 -3
- package/src/styles/animations.css +62 -0
- package/src/styles/index.css +27 -0
- package/src/styles/tokens/generated/dark.colors.generated.ts +15 -12
- package/src/styles/tokens/generated/dark.css +15 -12
- package/src/styles/tokens/generated/light.colors.generated.ts +14 -11
- package/src/styles/tokens/generated/light.css +14 -11
- package/src/styles/tokens/index.ts +0 -3
- package/src/styles/tokens/source/dark.tokens.json +24 -12
- package/src/styles/tokens/source/light.tokens.json +23 -11
- package/src/styles/tokens/typography.stories.tsx +157 -0
- package/src/components/feedback/file-upload-status.stories.tsx +0 -57
- package/src/components/feedback/file-upload-status.tsx +0 -160
- package/src/components/feedback/progress-bar.stories.tsx +0 -39
- package/src/components/feedback/progress-bar.tsx +0 -22
- package/src/components/forms/calendar.stories.tsx +0 -30
- package/src/components/forms/calendar.tsx +0 -70
- package/src/components/forms/date-field.stories.tsx +0 -164
- package/src/components/forms/date-field.tsx +0 -174
- package/src/components/overlays/alert-dialog.stories.tsx +0 -45
- package/src/components/overlays/alert-dialog.tsx +0 -116
- package/src/components/primitives/label.stories.tsx +0 -29
- package/src/components/primitives/label.tsx +0 -20
- package/src/components/primitives/status-badge.stories.tsx +0 -52
- package/src/components/primitives/status-badge.tsx +0 -33
- package/src/lib/create-memory-storage.ts +0 -24
- package/src/native/card.tsx +0 -36
- package/src/native/icon-button.tsx +0 -41
- package/src/native/index.ts +0 -38
- package/src/native/list-row.tsx +0 -67
- package/src/native/make-styles.ts +0 -32
- package/src/native/shadows.ts +0 -38
- package/src/native/text-field.tsx +0 -34
- package/src/native/uniwind.d.ts +0 -1
- package/src/native/use-theme-colors.ts +0 -19
- package/src/styles/tokens/foundations.stories.tsx +0 -109
- package/src/styles/tokens/generated/native.generated.ts +0 -266
- package/src/styles/tokens/normalize-native.ts +0 -88
- package/src/styles/tokens/source/native.tokens.json +0 -204
- package/src/styles/tokens/style-dictionary.native.mjs +0 -26
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">Portrait placeholder</title>
|
|
3
|
+
<desc id="desc">An illustrated portrait with warm coral and blue tones.</desc>
|
|
4
|
+
<rect width="256" height="256" fill="#dce8f2"/>
|
|
5
|
+
<circle cx="202" cy="54" r="34" fill="#ffb36b"/>
|
|
6
|
+
<path d="M0 214c36-34 74-47 112-39 37 8 63 34 79 81H0z" fill="#185a72"/>
|
|
7
|
+
<path d="M83 256c5-49 25-78 73-78 47 0 68 29 73 78z" fill="#ff704d"/>
|
|
8
|
+
<path d="M91 111c0-43 28-73 66-73s66 30 66 73c0 42-25 72-66 72s-66-30-66-72z" fill="#c97852"/>
|
|
9
|
+
<path d="M88 111c-2-46 25-79 70-79 42 0 68 29 68 72-14-16-31-26-51-30-23 27-52 39-87 37z" fill="#243746"/>
|
|
10
|
+
<circle cx="128" cy="116" r="5" fill="#243746"/>
|
|
11
|
+
<circle cx="176" cy="116" r="5" fill="#243746"/>
|
|
12
|
+
<path d="M137 145c8 6 17 6 25 0" fill="none" stroke="#243746" stroke-linecap="round" stroke-width="5"/>
|
|
13
|
+
</svg>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
2
2
|
|
|
3
3
|
import { Avatar, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage } from "./avatar";
|
|
4
|
+
import avatarPlaceholder from "./avatar-placeholder.svg";
|
|
4
5
|
|
|
5
6
|
const meta = {
|
|
6
7
|
title: "Primitives/Avatar",
|
|
@@ -14,7 +15,7 @@ type Story = StoryObj<typeof meta>;
|
|
|
14
15
|
export const WithImage: Story = {
|
|
15
16
|
render: () => (
|
|
16
17
|
<Avatar>
|
|
17
|
-
<AvatarImage src=
|
|
18
|
+
<AvatarImage src={avatarPlaceholder} alt="Illustrated portrait" />
|
|
18
19
|
<AvatarFallback>CN</AvatarFallback>
|
|
19
20
|
</Avatar>
|
|
20
21
|
),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
2
2
|
|
|
3
|
+
import { LucideAlertCircle, LucideDiamond, LucideNut } from "lucide-react";
|
|
3
4
|
import { Badge } from "./badge";
|
|
4
5
|
|
|
5
6
|
const meta = {
|
|
@@ -24,9 +25,18 @@ export const Default: Story = {
|
|
|
24
25
|
export const Variants: Story = {
|
|
25
26
|
render: () => (
|
|
26
27
|
<div className="flex flex-wrap gap-3">
|
|
27
|
-
<Badge variant="default">
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
<Badge variant="default">
|
|
29
|
+
<LucideDiamond className="size-3" />
|
|
30
|
+
Default
|
|
31
|
+
</Badge>
|
|
32
|
+
<Badge variant="secondary">
|
|
33
|
+
<LucideNut className="size-3" />
|
|
34
|
+
Secondary
|
|
35
|
+
</Badge>
|
|
36
|
+
<Badge variant="destructive">
|
|
37
|
+
<LucideAlertCircle className="size-3" />
|
|
38
|
+
Destructive
|
|
39
|
+
</Badge>
|
|
30
40
|
<Badge variant="outline">Outline</Badge>
|
|
31
41
|
</div>
|
|
32
42
|
),
|
|
@@ -4,7 +4,7 @@ import * as React from "react";
|
|
|
4
4
|
import { cn } from "../../lib/utils";
|
|
5
5
|
|
|
6
6
|
const badgeVariants = cva(
|
|
7
|
-
"state-settle inline-flex w-fit shrink-0 items-center justify-center gap-
|
|
7
|
+
"state-settle inline-flex w-fit shrink-0 items-center justify-center gap-2 overflow-hidden whitespace-nowrap rounded border border-transparent px-1.5 py-px text-xs font-medium [&>svg]:size-3 [&>svg]:pointer-events-none aria-invalid:border-destructive aria-invalid:ring-destructive/20",
|
|
8
8
|
{
|
|
9
9
|
variants: {
|
|
10
10
|
variant: {
|
|
@@ -20,7 +20,7 @@ const buttonVariants = cva(
|
|
|
20
20
|
outline: "border-input bg-background hover:bg-muted hover:text-muted-foreground",
|
|
21
21
|
secondary: "border-input bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
22
22
|
ghost: "border-transparent bg-transparent hover:bg-muted hover:text-muted-foreground",
|
|
23
|
-
link: "border-transparent bg-transparent px-0 text-
|
|
23
|
+
link: "border-transparent bg-transparent px-0 text-accent-text underline-offset-4 hover:underline",
|
|
24
24
|
},
|
|
25
25
|
size: {
|
|
26
26
|
sm: "min-h-8 px-2.5 text-xs",
|
|
@@ -25,8 +25,12 @@ function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
|
|
|
25
25
|
);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
function CardTitle({ className, ...props }: React.ComponentProps<"
|
|
29
|
-
return
|
|
28
|
+
function CardTitle({ className, ...props }: React.ComponentProps<"h3">) {
|
|
29
|
+
return (
|
|
30
|
+
<h3 data-slot="card-title" className={cn("text-xl", className)} {...props}>
|
|
31
|
+
{props.children}
|
|
32
|
+
</h3>
|
|
33
|
+
);
|
|
30
34
|
}
|
|
31
35
|
|
|
32
36
|
function CardDescription({ className, ...props }: React.ComponentProps<"div">) {
|
package/src/index.ts
CHANGED
|
@@ -9,17 +9,16 @@ export { useMediaQuery } from "./hooks/use-media-query";
|
|
|
9
9
|
export { useIsMobile } from "./hooks/use-mobile";
|
|
10
10
|
export { normalizeOtp, OTP_LENGTH } from "./lib/auth";
|
|
11
11
|
export { copyToClipboard } from "./lib/clipboard";
|
|
12
|
-
export { createMemoryStorage } from "./lib/create-memory-storage";
|
|
13
12
|
export { cn } from "./lib/utils";
|
|
14
13
|
export { colors } from "./styles/tokens/css-vars";
|
|
15
14
|
export {
|
|
16
15
|
animations,
|
|
16
|
+
breakpoints,
|
|
17
17
|
colorThemes,
|
|
18
18
|
colorTokenNames,
|
|
19
19
|
containers,
|
|
20
20
|
easing,
|
|
21
21
|
fontFamilies,
|
|
22
|
-
fontFamiliesNative,
|
|
23
22
|
fontWeights,
|
|
24
23
|
leading,
|
|
25
24
|
radii,
|
|
@@ -29,7 +28,6 @@ export {
|
|
|
29
28
|
textSizes,
|
|
30
29
|
tracking,
|
|
31
30
|
transitionDurations,
|
|
32
|
-
breakpoints,
|
|
33
31
|
zIndices,
|
|
34
32
|
} from "./styles/tokens/index";
|
|
35
33
|
export type {
|
package/src/lib/index.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export { cn } from "./utils";
|
|
2
|
-
export { copyToClipboard } from "./clipboard";
|
|
3
|
-
export { createMemoryStorage } from "./create-memory-storage";
|
|
4
1
|
export { normalizeOtp, OTP_LENGTH } from "./auth";
|
|
2
|
+
export { copyToClipboard } from "./clipboard";
|
|
3
|
+
export { cn } from "./utils";
|
|
@@ -90,6 +90,14 @@
|
|
|
90
90
|
opacity: 0;
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
|
+
@keyframes progress-shimmer {
|
|
94
|
+
from {
|
|
95
|
+
transform: translateX(-100%);
|
|
96
|
+
}
|
|
97
|
+
to {
|
|
98
|
+
transform: translateX(100%);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
93
101
|
|
|
94
102
|
.data-open\:animate-in[data-open],
|
|
95
103
|
.data-open\:animate-in[data-state="open"] {
|
|
@@ -125,6 +133,44 @@
|
|
|
125
133
|
animation: sheet-slide-out-bottom 200ms var(--ease-drawer);
|
|
126
134
|
}
|
|
127
135
|
|
|
136
|
+
[data-slot="dialog-overlay"][data-open],
|
|
137
|
+
[data-slot="dialog-overlay"][data-state="open"] {
|
|
138
|
+
animation: fade-in 200ms var(--ease-out);
|
|
139
|
+
}
|
|
140
|
+
[data-slot="dialog-overlay"][data-closed],
|
|
141
|
+
[data-slot="dialog-overlay"][data-state="closed"] {
|
|
142
|
+
/* Must stay in lockstep with [data-slot="dialog-content"]'s close duration below (both 200ms) —
|
|
143
|
+
Base UI gates the whole portal's unmount on this element's own close-animation duration, not
|
|
144
|
+
the content panel's, so a mismatch here yanks the sliding/zooming panel off mid-animation. */
|
|
145
|
+
animation: fade-out 200ms var(--ease-in);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/* Mobile: bottom sheet, slides up from the edge it's anchored to. */
|
|
149
|
+
[data-slot="dialog-content"][data-open],
|
|
150
|
+
[data-slot="dialog-content"][data-state="open"] {
|
|
151
|
+
animation: sheet-slide-in-bottom 300ms var(--ease-drawer);
|
|
152
|
+
}
|
|
153
|
+
[data-slot="dialog-content"][data-closed],
|
|
154
|
+
[data-slot="dialog-content"][data-state="closed"] {
|
|
155
|
+
animation: sheet-slide-out-bottom 200ms var(--ease-drawer);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/* Desktop: centered card, fades and scales in place instead of sliding. */
|
|
159
|
+
@media (min-width: 640px) {
|
|
160
|
+
[data-slot="dialog-content"][data-open],
|
|
161
|
+
[data-slot="dialog-content"][data-state="open"] {
|
|
162
|
+
animation:
|
|
163
|
+
fade-in 150ms var(--ease-out),
|
|
164
|
+
zoom-in 150ms var(--ease-out);
|
|
165
|
+
}
|
|
166
|
+
[data-slot="dialog-content"][data-closed],
|
|
167
|
+
[data-slot="dialog-content"][data-state="closed"] {
|
|
168
|
+
animation:
|
|
169
|
+
fade-out 200ms var(--ease-in),
|
|
170
|
+
zoom-out 200ms var(--ease-in);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
128
174
|
@media (min-width: 768px) {
|
|
129
175
|
[data-slot="sheet-content"][data-open],
|
|
130
176
|
[data-slot="sheet-content"][data-state="open"] {
|
|
@@ -162,4 +208,20 @@
|
|
|
162
208
|
[data-slot="sheet-content"][data-state="closed"] {
|
|
163
209
|
animation: fade-out 120ms var(--ease-in) !important;
|
|
164
210
|
}
|
|
211
|
+
[data-slot="dialog-overlay"][data-open],
|
|
212
|
+
[data-slot="dialog-overlay"][data-state="open"] {
|
|
213
|
+
animation: fade-in 120ms var(--ease-out) !important;
|
|
214
|
+
}
|
|
215
|
+
[data-slot="dialog-overlay"][data-closed],
|
|
216
|
+
[data-slot="dialog-overlay"][data-state="closed"] {
|
|
217
|
+
animation: fade-out 120ms var(--ease-in) !important;
|
|
218
|
+
}
|
|
219
|
+
[data-slot="dialog-content"][data-open],
|
|
220
|
+
[data-slot="dialog-content"][data-state="open"] {
|
|
221
|
+
animation: fade-in var(--duration-150) var(--ease-out) !important;
|
|
222
|
+
}
|
|
223
|
+
[data-slot="dialog-content"][data-closed],
|
|
224
|
+
[data-slot="dialog-content"][data-state="closed"] {
|
|
225
|
+
animation: fade-out 120ms var(--ease-in) !important;
|
|
226
|
+
}
|
|
165
227
|
}
|
package/src/styles/index.css
CHANGED
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
--animate-fade-out: fade-out 120ms ease-in;
|
|
30
30
|
--animate-zoom-in: zoom-in 150ms ease-out;
|
|
31
31
|
--animate-zoom-out: zoom-out 120ms ease-in;
|
|
32
|
+
--animate-progress-shimmer: progress-shimmer 1.1s linear infinite;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
@utility fade-in-0 {
|
|
@@ -63,6 +64,11 @@
|
|
|
63
64
|
--color-muted-foreground: var(--text-secondary);
|
|
64
65
|
--color-accent: var(--primary);
|
|
65
66
|
--color-accent-foreground: var(--primary-foreground);
|
|
67
|
+
/* Distinct from --color-accent: that pairs with white/primary-foreground
|
|
68
|
+
* for solid fills (badges, active states). This pairs with the page
|
|
69
|
+
* background for standalone text/icons/borders (inline links, upload
|
|
70
|
+
* affordances) and must differ per theme to stay AA-compliant. */
|
|
71
|
+
--color-accent-text: var(--text-accent);
|
|
66
72
|
--color-destructive: var(--destructive);
|
|
67
73
|
--color-destructive-foreground: var(--destructive-foreground);
|
|
68
74
|
/* Distinct from --color-destructive: that pairs with white for solid
|
|
@@ -71,7 +77,9 @@
|
|
|
71
77
|
* messages, alert copy) and must differ per theme to stay AA-compliant. */
|
|
72
78
|
--color-destructive-text: var(--text-destructive);
|
|
73
79
|
--color-success: var(--success);
|
|
80
|
+
--color-success-foreground: var(--success-foreground);
|
|
74
81
|
--color-warning: var(--warning);
|
|
82
|
+
--color-warning-foreground: var(--warning-foreground);
|
|
75
83
|
--color-border: var(--border-default);
|
|
76
84
|
--color-input: var(--border-default);
|
|
77
85
|
--color-ring: var(--focus-ring);
|
|
@@ -178,6 +186,15 @@
|
|
|
178
186
|
@utility scroll-fade-none {
|
|
179
187
|
--scroll-fade-mask: none;
|
|
180
188
|
}
|
|
189
|
+
/* Hides the native scrollbar so a custom overlay affordance (ScrollArea's
|
|
190
|
+
* Scrollbar/Thumb) can stand in for it. */
|
|
191
|
+
@utility scrollbar-hide {
|
|
192
|
+
scrollbar-width: none;
|
|
193
|
+
-ms-overflow-style: none;
|
|
194
|
+
&::-webkit-scrollbar {
|
|
195
|
+
display: none;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
181
198
|
@utility h-screen {
|
|
182
199
|
height: 100vh;
|
|
183
200
|
height: 100dvh;
|
|
@@ -279,6 +296,16 @@
|
|
|
279
296
|
cursor: pointer;
|
|
280
297
|
font-family: inherit;
|
|
281
298
|
}
|
|
299
|
+
label {
|
|
300
|
+
color: var(--color-foreground);
|
|
301
|
+
font-size: var(--text-sm);
|
|
302
|
+
font-weight: var(--font-weight-medium);
|
|
303
|
+
line-height: 1;
|
|
304
|
+
}
|
|
305
|
+
:where(.peer:disabled) ~ label {
|
|
306
|
+
cursor: not-allowed;
|
|
307
|
+
opacity: 0.7;
|
|
308
|
+
}
|
|
282
309
|
h1,
|
|
283
310
|
h2,
|
|
284
311
|
h3,
|
|
@@ -3,29 +3,32 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
|
-
background: "#
|
|
7
|
-
card: "#
|
|
8
|
-
popover: "#
|
|
9
|
-
muted: "#
|
|
10
|
-
"text-primary": "#
|
|
11
|
-
"text-secondary": "#
|
|
12
|
-
tertiary: "#
|
|
13
|
-
primary: "#
|
|
6
|
+
background: "#171714",
|
|
7
|
+
card: "#1d1d19",
|
|
8
|
+
popover: "#22221e",
|
|
9
|
+
muted: "#1d1d19",
|
|
10
|
+
"text-primary": "#ffffff",
|
|
11
|
+
"text-secondary": "#aaa79f",
|
|
12
|
+
tertiary: "#d0ccc2",
|
|
13
|
+
primary: "#178277",
|
|
14
14
|
destructive: "#ce2c31",
|
|
15
15
|
success: "#30a46c",
|
|
16
16
|
warning: "#ffc53d",
|
|
17
|
+
"success-foreground": "#15110f",
|
|
18
|
+
"warning-foreground": "#15110f",
|
|
17
19
|
"primary-foreground": "#ffffff",
|
|
18
20
|
"destructive-foreground": "#ffffff",
|
|
19
21
|
"text-destructive": "#ff9592",
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
+
"text-accent": "#1b988b",
|
|
23
|
+
"border-default": "#6b6b66",
|
|
24
|
+
"focus-ring": "#1b988b",
|
|
22
25
|
"chart-1": "#3e63dd",
|
|
23
26
|
"chart-2": "#6e56cf",
|
|
24
|
-
"chart-3": "#
|
|
27
|
+
"chart-3": "#c73178",
|
|
25
28
|
"chart-4": "#f76b15",
|
|
26
29
|
"chart-5": "#696e77",
|
|
27
30
|
"chart-positive": "#30a46c",
|
|
28
31
|
"chart-negative": "#e5484d",
|
|
29
|
-
"chart-neutral": "#
|
|
32
|
+
"chart-neutral": "#878d94",
|
|
30
33
|
"overlay-scrim": "#000000",
|
|
31
34
|
};
|
|
@@ -3,29 +3,32 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
:root {
|
|
6
|
-
--background: #
|
|
7
|
-
--card: #
|
|
8
|
-
--popover: #
|
|
9
|
-
--muted: #
|
|
10
|
-
--text-primary: #
|
|
11
|
-
--text-secondary: #
|
|
12
|
-
--tertiary: #
|
|
13
|
-
--primary: #
|
|
6
|
+
--background: #171714;
|
|
7
|
+
--card: #1d1d19;
|
|
8
|
+
--popover: #22221e;
|
|
9
|
+
--muted: #1d1d19;
|
|
10
|
+
--text-primary: #ffffff;
|
|
11
|
+
--text-secondary: #aaa79f;
|
|
12
|
+
--tertiary: #d0ccc2;
|
|
13
|
+
--primary: #178277;
|
|
14
14
|
--destructive: #ce2c31;
|
|
15
15
|
--success: #30a46c;
|
|
16
16
|
--warning: #ffc53d;
|
|
17
|
+
--success-foreground: #15110f;
|
|
18
|
+
--warning-foreground: #15110f;
|
|
17
19
|
--primary-foreground: #ffffff;
|
|
18
20
|
--destructive-foreground: #ffffff;
|
|
19
21
|
--text-destructive: #ff9592;
|
|
20
|
-
--
|
|
21
|
-
--
|
|
22
|
+
--text-accent: #1b988b;
|
|
23
|
+
--border-default: #6b6b66;
|
|
24
|
+
--focus-ring: #1b988b;
|
|
22
25
|
--chart-1: #3e63dd;
|
|
23
26
|
--chart-2: #6e56cf;
|
|
24
|
-
--chart-3: #
|
|
27
|
+
--chart-3: #c73178;
|
|
25
28
|
--chart-4: #f76b15;
|
|
26
29
|
--chart-5: #696e77;
|
|
27
30
|
--chart-positive: #30a46c;
|
|
28
31
|
--chart-negative: #e5484d;
|
|
29
|
-
--chart-neutral: #
|
|
32
|
+
--chart-neutral: #878d94;
|
|
30
33
|
--overlay-scrim: #000000;
|
|
31
34
|
}
|
|
@@ -3,25 +3,28 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
|
-
background: "#
|
|
7
|
-
card: "#
|
|
8
|
-
popover: "#
|
|
9
|
-
muted: "#
|
|
10
|
-
"text-primary": "#
|
|
11
|
-
"text-secondary": "#
|
|
12
|
-
tertiary: "#
|
|
13
|
-
primary: "#
|
|
6
|
+
background: "#f4f0e8",
|
|
7
|
+
card: "#fbf8f2",
|
|
8
|
+
popover: "#f6f2ea",
|
|
9
|
+
muted: "#efe9dc",
|
|
10
|
+
"text-primary": "#11110f",
|
|
11
|
+
"text-secondary": "#6a6352",
|
|
12
|
+
tertiary: "#6d6659",
|
|
13
|
+
primary: "#107066",
|
|
14
14
|
destructive: "#ce2c31",
|
|
15
15
|
success: "#30a46c",
|
|
16
16
|
warning: "#ffc53d",
|
|
17
|
+
"success-foreground": "#15110f",
|
|
18
|
+
"warning-foreground": "#15110f",
|
|
17
19
|
"primary-foreground": "#ffffff",
|
|
18
20
|
"destructive-foreground": "#ffffff",
|
|
19
21
|
"text-destructive": "#c82c31",
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
+
"text-accent": "#107066",
|
|
23
|
+
"border-default": "#8f8576",
|
|
24
|
+
"focus-ring": "#107066",
|
|
22
25
|
"chart-1": "#3e63dd",
|
|
23
26
|
"chart-2": "#6e56cf",
|
|
24
|
-
"chart-3": "#
|
|
27
|
+
"chart-3": "#c73178",
|
|
25
28
|
"chart-4": "#f76b15",
|
|
26
29
|
"chart-5": "#8b8d98",
|
|
27
30
|
"chart-positive": "#1f7a50",
|
|
@@ -3,25 +3,28 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
:root {
|
|
6
|
-
--background: #
|
|
7
|
-
--card: #
|
|
8
|
-
--popover: #
|
|
9
|
-
--muted: #
|
|
10
|
-
--text-primary: #
|
|
11
|
-
--text-secondary: #
|
|
12
|
-
--tertiary: #
|
|
13
|
-
--primary: #
|
|
6
|
+
--background: #f4f0e8;
|
|
7
|
+
--card: #fbf8f2;
|
|
8
|
+
--popover: #f6f2ea;
|
|
9
|
+
--muted: #efe9dc;
|
|
10
|
+
--text-primary: #11110f;
|
|
11
|
+
--text-secondary: #6a6352;
|
|
12
|
+
--tertiary: #6d6659;
|
|
13
|
+
--primary: #107066;
|
|
14
14
|
--destructive: #ce2c31;
|
|
15
15
|
--success: #30a46c;
|
|
16
16
|
--warning: #ffc53d;
|
|
17
|
+
--success-foreground: #15110f;
|
|
18
|
+
--warning-foreground: #15110f;
|
|
17
19
|
--primary-foreground: #ffffff;
|
|
18
20
|
--destructive-foreground: #ffffff;
|
|
19
21
|
--text-destructive: #c82c31;
|
|
20
|
-
--
|
|
21
|
-
--
|
|
22
|
+
--text-accent: #107066;
|
|
23
|
+
--border-default: #8f8576;
|
|
24
|
+
--focus-ring: #107066;
|
|
22
25
|
--chart-1: #3e63dd;
|
|
23
26
|
--chart-2: #6e56cf;
|
|
24
|
-
--chart-3: #
|
|
27
|
+
--chart-3: #c73178;
|
|
25
28
|
--chart-4: #f76b15;
|
|
26
29
|
--chart-5: #8b8d98;
|
|
27
30
|
--chart-positive: #1f7a50;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import darkTokens from "./generated/dark.colors.generated";
|
|
2
2
|
import foundations from "./generated/foundations.generated";
|
|
3
3
|
import lightTokens from "./generated/light.colors.generated";
|
|
4
|
-
import nativeTokens from "./generated/native.generated";
|
|
5
4
|
|
|
6
5
|
const toPixels = (value: string) => {
|
|
7
6
|
if (value.endsWith("rem")) return Number.parseFloat(value) * 16;
|
|
@@ -39,7 +38,6 @@ export const fontFamilies = Object.fromEntries(
|
|
|
39
38
|
Object.entries(foundations.font).map(([key, value]) => [key, value.join(", ")]),
|
|
40
39
|
) as Record<keyof typeof foundations.font, string>;
|
|
41
40
|
|
|
42
|
-
export const fontFamiliesNative = { sans: "System", serif: "serif", mono: "monospace" } as const;
|
|
43
41
|
export const textSizes = Object.fromEntries(
|
|
44
42
|
Object.entries(foundations.text).map(([key, value]) => [key, toPixels(value)]),
|
|
45
43
|
) as Record<keyof typeof foundations.text, number>;
|
|
@@ -63,7 +61,6 @@ export const transitionDurations = Object.fromEntries(
|
|
|
63
61
|
Object.entries(foundations.duration).map(([key, value]) => [key, toMilliseconds(value)]),
|
|
64
62
|
) as Record<keyof typeof foundations.duration, number>;
|
|
65
63
|
export const animations = foundations.animate;
|
|
66
|
-
export const motion = nativeTokens.motion;
|
|
67
64
|
|
|
68
65
|
export type RadiusToken = keyof typeof radii;
|
|
69
66
|
export type TextSizeToken = keyof typeof textSizes;
|
|
@@ -4,35 +4,35 @@
|
|
|
4
4
|
},
|
|
5
5
|
"background": {
|
|
6
6
|
"$type": "color",
|
|
7
|
-
"$value": "rgb(
|
|
7
|
+
"$value": "rgb(23, 23, 20)"
|
|
8
8
|
},
|
|
9
9
|
"card": {
|
|
10
10
|
"$type": "color",
|
|
11
|
-
"$value": "rgb(
|
|
11
|
+
"$value": "rgb(29, 29, 25)"
|
|
12
12
|
},
|
|
13
13
|
"popover": {
|
|
14
14
|
"$type": "color",
|
|
15
|
-
"$value": "rgb(
|
|
15
|
+
"$value": "rgb(34, 34, 30)"
|
|
16
16
|
},
|
|
17
17
|
"muted": {
|
|
18
18
|
"$type": "color",
|
|
19
|
-
"$value": "rgb(
|
|
19
|
+
"$value": "rgb(29, 29, 25)"
|
|
20
20
|
},
|
|
21
21
|
"text-primary": {
|
|
22
22
|
"$type": "color",
|
|
23
|
-
"$value": "rgb(
|
|
23
|
+
"$value": "rgb(255, 255, 255)"
|
|
24
24
|
},
|
|
25
25
|
"text-secondary": {
|
|
26
26
|
"$type": "color",
|
|
27
|
-
"$value": "rgb(
|
|
27
|
+
"$value": "rgb(170, 167, 159)"
|
|
28
28
|
},
|
|
29
29
|
"tertiary": {
|
|
30
30
|
"$type": "color",
|
|
31
|
-
"$value": "rgb(
|
|
31
|
+
"$value": "rgb(208, 204, 194)"
|
|
32
32
|
},
|
|
33
33
|
"primary": {
|
|
34
34
|
"$type": "color",
|
|
35
|
-
"$value": "rgb(
|
|
35
|
+
"$value": "rgb(23, 130, 119)"
|
|
36
36
|
},
|
|
37
37
|
"destructive": {
|
|
38
38
|
"$type": "color",
|
|
@@ -46,6 +46,14 @@
|
|
|
46
46
|
"$type": "color",
|
|
47
47
|
"$value": "rgb(255, 197, 61)"
|
|
48
48
|
},
|
|
49
|
+
"success-foreground": {
|
|
50
|
+
"$type": "color",
|
|
51
|
+
"$value": "rgb(21, 17, 15)"
|
|
52
|
+
},
|
|
53
|
+
"warning-foreground": {
|
|
54
|
+
"$type": "color",
|
|
55
|
+
"$value": "rgb(21, 17, 15)"
|
|
56
|
+
},
|
|
49
57
|
"primary-foreground": {
|
|
50
58
|
"$type": "color",
|
|
51
59
|
"$value": "rgb(255, 255, 255)"
|
|
@@ -58,13 +66,17 @@
|
|
|
58
66
|
"$type": "color",
|
|
59
67
|
"$value": "rgb(255, 149, 146)"
|
|
60
68
|
},
|
|
69
|
+
"text-accent": {
|
|
70
|
+
"$type": "color",
|
|
71
|
+
"$value": "rgb(27, 152, 139)"
|
|
72
|
+
},
|
|
61
73
|
"border-default": {
|
|
62
74
|
"$type": "color",
|
|
63
|
-
"$value": "rgb(
|
|
75
|
+
"$value": "rgb(107, 107, 102)"
|
|
64
76
|
},
|
|
65
77
|
"focus-ring": {
|
|
66
78
|
"$type": "color",
|
|
67
|
-
"$value": "rgb(
|
|
79
|
+
"$value": "rgb(27, 152, 139)"
|
|
68
80
|
},
|
|
69
81
|
"chart-1": {
|
|
70
82
|
"$type": "color",
|
|
@@ -76,7 +88,7 @@
|
|
|
76
88
|
},
|
|
77
89
|
"chart-3": {
|
|
78
90
|
"$type": "color",
|
|
79
|
-
"$value": "rgb(
|
|
91
|
+
"$value": "rgb(199, 49, 120)"
|
|
80
92
|
},
|
|
81
93
|
"chart-4": {
|
|
82
94
|
"$type": "color",
|
|
@@ -96,7 +108,7 @@
|
|
|
96
108
|
},
|
|
97
109
|
"chart-neutral": {
|
|
98
110
|
"$type": "color",
|
|
99
|
-
"$value": "rgb(
|
|
111
|
+
"$value": "rgb(135, 141, 148)"
|
|
100
112
|
},
|
|
101
113
|
"overlay-scrim": {
|
|
102
114
|
"$type": "color",
|
|
@@ -4,35 +4,35 @@
|
|
|
4
4
|
},
|
|
5
5
|
"background": {
|
|
6
6
|
"$type": "color",
|
|
7
|
-
"$value": "rgb(
|
|
7
|
+
"$value": "rgb(244, 240, 232)"
|
|
8
8
|
},
|
|
9
9
|
"card": {
|
|
10
10
|
"$type": "color",
|
|
11
|
-
"$value": "rgb(
|
|
11
|
+
"$value": "rgb(251, 248, 242)"
|
|
12
12
|
},
|
|
13
13
|
"popover": {
|
|
14
14
|
"$type": "color",
|
|
15
|
-
"$value": "rgb(
|
|
15
|
+
"$value": "rgb(246, 242, 234)"
|
|
16
16
|
},
|
|
17
17
|
"muted": {
|
|
18
18
|
"$type": "color",
|
|
19
|
-
"$value": "rgb(
|
|
19
|
+
"$value": "rgb(239, 233, 220)"
|
|
20
20
|
},
|
|
21
21
|
"text-primary": {
|
|
22
22
|
"$type": "color",
|
|
23
|
-
"$value": "rgb(
|
|
23
|
+
"$value": "rgb(17, 17, 15)"
|
|
24
24
|
},
|
|
25
25
|
"text-secondary": {
|
|
26
26
|
"$type": "color",
|
|
27
|
-
"$value": "rgb(
|
|
27
|
+
"$value": "rgb(106, 99, 82)"
|
|
28
28
|
},
|
|
29
29
|
"tertiary": {
|
|
30
30
|
"$type": "color",
|
|
31
|
-
"$value": "rgb(
|
|
31
|
+
"$value": "rgb(109, 102, 89)"
|
|
32
32
|
},
|
|
33
33
|
"primary": {
|
|
34
34
|
"$type": "color",
|
|
35
|
-
"$value": "rgb(
|
|
35
|
+
"$value": "rgb(16, 112, 102)"
|
|
36
36
|
},
|
|
37
37
|
"destructive": {
|
|
38
38
|
"$type": "color",
|
|
@@ -46,6 +46,14 @@
|
|
|
46
46
|
"$type": "color",
|
|
47
47
|
"$value": "rgb(255, 197, 61)"
|
|
48
48
|
},
|
|
49
|
+
"success-foreground": {
|
|
50
|
+
"$type": "color",
|
|
51
|
+
"$value": "rgb(21, 17, 15)"
|
|
52
|
+
},
|
|
53
|
+
"warning-foreground": {
|
|
54
|
+
"$type": "color",
|
|
55
|
+
"$value": "rgb(21, 17, 15)"
|
|
56
|
+
},
|
|
49
57
|
"primary-foreground": {
|
|
50
58
|
"$type": "color",
|
|
51
59
|
"$value": "rgb(255, 255, 255)"
|
|
@@ -58,13 +66,17 @@
|
|
|
58
66
|
"$type": "color",
|
|
59
67
|
"$value": "rgb(200, 44, 49)"
|
|
60
68
|
},
|
|
69
|
+
"text-accent": {
|
|
70
|
+
"$type": "color",
|
|
71
|
+
"$value": "rgb(16, 112, 102)"
|
|
72
|
+
},
|
|
61
73
|
"border-default": {
|
|
62
74
|
"$type": "color",
|
|
63
|
-
"$value": "rgb(
|
|
75
|
+
"$value": "rgb(143, 133, 118)"
|
|
64
76
|
},
|
|
65
77
|
"focus-ring": {
|
|
66
78
|
"$type": "color",
|
|
67
|
-
"$value": "rgb(
|
|
79
|
+
"$value": "rgb(16, 112, 102)"
|
|
68
80
|
},
|
|
69
81
|
"chart-1": {
|
|
70
82
|
"$type": "color",
|
|
@@ -76,7 +88,7 @@
|
|
|
76
88
|
},
|
|
77
89
|
"chart-3": {
|
|
78
90
|
"$type": "color",
|
|
79
|
-
"$value": "rgb(
|
|
91
|
+
"$value": "rgb(199, 49, 120)"
|
|
80
92
|
},
|
|
81
93
|
"chart-4": {
|
|
82
94
|
"$type": "color",
|