@wealthx/shadcn 0.0.2 → 1.0.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/.turbo/turbo-build.log +135 -11
- package/CHANGELOG.md +6 -0
- package/CHANGES.md +345 -0
- package/dist/chunk-2WZVSBAY.mjs +232 -0
- package/dist/chunk-2Y7YJKPE.mjs +47 -0
- package/dist/chunk-3U7SD3MS.mjs +55 -0
- package/dist/chunk-3VQNJ235.mjs +114 -0
- package/dist/chunk-55CEW76V.mjs +35 -0
- package/dist/chunk-6AFMNC42.mjs +146 -0
- package/dist/chunk-6OJF6XRN.mjs +117 -0
- package/dist/chunk-7LDIMXGM.mjs +181 -0
- package/dist/chunk-AMJ23O53.mjs +122 -0
- package/dist/chunk-BBJBJSXQ.mjs +44 -0
- package/dist/chunk-BGP2N52Z.mjs +126 -0
- package/dist/chunk-BMFN37JH.mjs +41 -0
- package/dist/chunk-CGOKTPXU.mjs +79 -0
- package/dist/chunk-CZ3BW5GL.mjs +81 -0
- package/dist/chunk-DBHJ5KC3.mjs +55 -0
- package/dist/chunk-DDPA2XXS.mjs +97 -0
- package/dist/chunk-DS2AMHN2.mjs +30 -0
- package/dist/chunk-E3K6O4FZ.mjs +57 -0
- package/dist/chunk-FWCSY2DS.mjs +37 -0
- package/dist/chunk-GPRJQ24C.mjs +28 -0
- package/dist/chunk-HS7TFG7V.mjs +24 -0
- package/dist/chunk-HUVTPUV2.mjs +256 -0
- package/dist/chunk-IAOOZCUY.mjs +90 -0
- package/dist/chunk-JF4PHPD5.mjs +111 -0
- package/dist/chunk-JU2RUWHF.mjs +123 -0
- package/dist/chunk-KKHTJNMM.mjs +86 -0
- package/dist/chunk-MJIEMGRD.mjs +266 -0
- package/dist/chunk-MKFL5MNH.mjs +372 -0
- package/dist/chunk-MQ72DIBH.mjs +105 -0
- package/dist/chunk-NGYG2EA6.mjs +148 -0
- package/dist/chunk-NWZ46DJL.mjs +213 -0
- package/dist/chunk-OXQQNQZI.mjs +75 -0
- package/dist/chunk-PMKODV6M.mjs +161 -0
- package/dist/chunk-QOJ2DQD6.mjs +57 -0
- package/dist/chunk-RL772EH7.mjs +126 -0
- package/dist/chunk-SLWCCURD.mjs +99 -0
- package/dist/chunk-V7CNWJT3.mjs +10 -0
- package/dist/chunk-VG6UF6UT.mjs +68 -0
- package/dist/chunk-VYMHBV6D.mjs +123 -0
- package/dist/chunk-VZ2NR7L3.mjs +195 -0
- package/dist/chunk-YN5SYTOO.mjs +117 -0
- package/dist/chunk-Z3MK2KKZ.mjs +83 -0
- package/dist/chunk-ZN2QKLF6.mjs +187 -0
- package/dist/chunk-ZZV5JVNW.mjs +34 -0
- package/dist/components/ui/accordion.js +142 -0
- package/dist/components/ui/accordion.mjs +14 -0
- package/dist/components/ui/alert-dialog.js +413 -0
- package/dist/components/ui/alert-dialog.mjs +34 -0
- package/dist/components/ui/alert.js +134 -0
- package/dist/components/ui/alert.mjs +12 -0
- package/dist/components/ui/avatar.js +173 -0
- package/dist/components/ui/avatar.mjs +18 -0
- package/dist/components/ui/badge.js +163 -0
- package/dist/components/ui/badge.mjs +11 -0
- package/dist/components/ui/button.js +198 -0
- package/dist/components/ui/button.mjs +11 -0
- package/dist/components/ui/calendar.js +408 -0
- package/dist/components/ui/calendar.mjs +12 -0
- package/dist/components/ui/card.js +156 -0
- package/dist/components/ui/card.mjs +20 -0
- package/dist/components/ui/checkbox.js +166 -0
- package/dist/components/ui/checkbox.mjs +11 -0
- package/dist/components/ui/chip.js +199 -0
- package/dist/components/ui/chip.mjs +10 -0
- package/dist/components/ui/data-table.js +925 -0
- package/dist/components/ui/data-table.mjs +29 -0
- package/dist/components/ui/date-picker.js +561 -0
- package/dist/components/ui/date-picker.mjs +15 -0
- package/dist/components/ui/dialog.js +378 -0
- package/dist/components/ui/dialog.mjs +30 -0
- package/dist/components/ui/drawer.js +213 -0
- package/dist/components/ui/drawer.mjs +28 -0
- package/dist/components/ui/dropdown-menu.js +338 -0
- package/dist/components/ui/dropdown-menu.mjs +38 -0
- package/dist/components/ui/empty.js +173 -0
- package/dist/components/ui/empty.mjs +18 -0
- package/dist/components/ui/field.js +359 -0
- package/dist/components/ui/field.mjs +28 -0
- package/dist/components/ui/input-group.js +406 -0
- package/dist/components/ui/input-group.mjs +22 -0
- package/dist/components/ui/input-otp.js +149 -0
- package/dist/components/ui/input-otp.mjs +14 -0
- package/dist/components/ui/input.js +81 -0
- package/dist/components/ui/input.mjs +8 -0
- package/dist/components/ui/label.js +85 -0
- package/dist/components/ui/label.mjs +8 -0
- package/dist/components/ui/pagination.js +333 -0
- package/dist/components/ui/pagination.mjs +22 -0
- package/dist/components/ui/popover.js +167 -0
- package/dist/components/ui/popover.mjs +22 -0
- package/dist/components/ui/progress.js +97 -0
- package/dist/components/ui/progress.mjs +8 -0
- package/dist/components/ui/radio-group.js +178 -0
- package/dist/components/ui/radio-group.mjs +12 -0
- package/dist/components/ui/select.js +262 -0
- package/dist/components/ui/select.mjs +28 -0
- package/dist/components/ui/separator.js +86 -0
- package/dist/components/ui/separator.mjs +8 -0
- package/dist/components/ui/sheet.js +227 -0
- package/dist/components/ui/sheet.mjs +26 -0
- package/dist/components/ui/skeleton.js +75 -0
- package/dist/components/ui/skeleton.mjs +8 -0
- package/dist/components/ui/sonner.js +86 -0
- package/dist/components/ui/sonner.mjs +7 -0
- package/dist/components/ui/spinner.js +93 -0
- package/dist/components/ui/spinner.mjs +10 -0
- package/dist/components/ui/switch.js +178 -0
- package/dist/components/ui/switch.mjs +11 -0
- package/dist/components/ui/table.js +184 -0
- package/dist/components/ui/table.mjs +22 -0
- package/dist/components/ui/tabs.js +181 -0
- package/dist/components/ui/tabs.mjs +16 -0
- package/dist/components/ui/textarea.js +79 -0
- package/dist/components/ui/textarea.mjs +8 -0
- package/dist/components/ui/toggle-group.js +184 -0
- package/dist/components/ui/toggle-group.mjs +12 -0
- package/dist/components/ui/toggle.js +108 -0
- package/dist/components/ui/toggle.mjs +11 -0
- package/dist/components/ui/tooltip.js +140 -0
- package/dist/components/ui/tooltip.mjs +16 -0
- package/dist/index.js +4312 -90
- package/dist/index.mjs +459 -158
- package/dist/lib/colors.js +84 -0
- package/dist/lib/colors.mjs +13 -0
- package/dist/lib/theme-provider.js +150 -0
- package/dist/lib/theme-provider.mjs +13 -0
- package/dist/lib/typography.js +157 -0
- package/dist/lib/typography.mjs +25 -0
- package/dist/lib/utils.js +34 -0
- package/dist/lib/utils.mjs +7 -0
- package/dist/styles.css +1 -1
- package/package.json +228 -11
- package/scripts/build-css.ts +15 -9
- package/src/components/index.tsx +443 -0
- package/src/components/ui/accordion.tsx +99 -0
- package/src/components/ui/alert-dialog.tsx +239 -0
- package/src/components/ui/alert.tsx +81 -0
- package/src/components/ui/avatar.tsx +130 -0
- package/src/components/ui/badge.tsx +57 -0
- package/src/components/ui/button.tsx +69 -37
- package/src/components/ui/calendar.tsx +252 -0
- package/src/components/ui/card.tsx +106 -0
- package/src/components/ui/checkbox.tsx +111 -0
- package/src/components/ui/chip.tsx +65 -0
- package/src/components/ui/data-table.tsx +490 -0
- package/src/components/ui/date-picker.tsx +133 -0
- package/src/components/ui/dialog.tsx +195 -0
- package/src/components/ui/drawer.tsx +169 -0
- package/src/components/ui/dropdown-menu.tsx +315 -0
- package/src/components/ui/empty.tsx +128 -0
- package/src/components/ui/field.tsx +273 -0
- package/src/components/ui/input-group.tsx +190 -0
- package/src/components/ui/input-otp.tsx +90 -0
- package/src/components/ui/input.tsx +28 -0
- package/src/components/ui/label.tsx +24 -0
- package/src/components/ui/pagination.tsx +148 -0
- package/src/components/ui/popover.tsx +112 -0
- package/src/components/ui/progress.tsx +40 -0
- package/src/components/ui/radio-group.tsx +129 -0
- package/src/components/ui/select.tsx +201 -0
- package/src/components/ui/separator.tsx +26 -0
- package/src/components/ui/sheet.tsx +182 -0
- package/src/components/ui/skeleton.tsx +22 -0
- package/src/components/ui/sonner.tsx +48 -0
- package/src/components/ui/spinner.tsx +41 -0
- package/src/components/ui/switch.tsx +126 -0
- package/src/components/ui/table.tsx +143 -0
- package/src/components/ui/tabs.tsx +119 -0
- package/src/components/ui/textarea.tsx +28 -0
- package/src/components/ui/toggle-group.tsx +94 -0
- package/src/components/ui/toggle.tsx +59 -0
- package/src/components/ui/tooltip.tsx +80 -0
- package/src/index.ts +15 -3
- package/src/lib/colors.ts +74 -0
- package/src/lib/slot.tsx +68 -0
- package/src/lib/theme-provider.tsx +134 -0
- package/src/lib/typography.ts +153 -0
- package/src/lib/utils.ts +1 -1
- package/src/styles/globals.css +377 -107
- package/src/styles/styles-css.ts +1 -1
- package/tsup.config.ts +48 -2
- package/dist/index.d.mts +0 -27
- package/dist/index.d.ts +0 -27
- package/src/provider/ShadcnProvider.tsx +0 -89
- package/src/provider/index.ts +0 -2
package/src/styles/globals.css
CHANGED
|
@@ -1,119 +1,389 @@
|
|
|
1
|
-
@import "
|
|
2
|
-
@import "tailwindcss
|
|
1
|
+
@import url("https://fonts.googleapis.com/css2?family=Figtree:wght@300..900&display=swap");
|
|
2
|
+
@import "tailwindcss";
|
|
3
3
|
@import "tw-animate-css";
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
|
|
5
|
+
/* Scan shadcn component files + storybook stories for Tailwind classes */
|
|
6
|
+
@source "../components/**/*.tsx";
|
|
7
|
+
@source "../../../../apps/docs/stories/**/*.tsx";
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* Safelist: force-generate variant classes that @source glob scan may miss
|
|
11
|
+
* (e.g. when packages/shadcn is outside the Vite root apps/docs).
|
|
12
|
+
* These cover all state-dependent classes used in Checkbox, Button, etc.
|
|
13
|
+
*/
|
|
14
|
+
@source inline("h-2 h-10 h-12 h-16 h-20 h-24 h-28 h-32 h-36 h-40 h-44 h-48 size-10 size-12 size-14 size-16 rounded-full w-4/5 shrink-0 bg-muted transition-all");
|
|
15
|
+
|
|
16
|
+
@source inline("has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 border-border border-destructive/40 bg-destructive/10 border-warning/40 bg-warning/10 text-warning border-success/40 bg-success/10 text-success border-info/40 bg-info/10 text-info *:data-[slot=alert-description]:text-warning/90 *:data-[slot=alert-description]:text-success/90 *:data-[slot=alert-description]:text-info/90 *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-destructive [&>svg]:text-warning [&>svg]:text-success [&>svg]:text-info");
|
|
17
|
+
|
|
18
|
+
@source inline("focus-visible:border-primary focus-visible:ring-primary/20 focus:bg-primary/5 focus:text-foreground data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 select-none scroll-my-1 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-disabled:pointer-events-none data-disabled:opacity-50 data-selected:bg-primary/10 data-active:bg-primary/10 data-active:text-foreground data-active:shadow-sm data-active:bg-transparent data-active:shadow-none data-active:after:opacity-100 after:bg-primary data-popup-open:border-primary data-popup-open:ring-[3px] data-popup-open:ring-primary/20 data-highlighted:bg-primary/5 data-highlighted:text-foreground px-1.5");
|
|
19
|
+
@source inline("bg-foreground/50 hover:bg-foreground/5 focus:ring-border focus:ring-2 focus:ring-offset-0 fixed inset-0 translate-x-[-50%] translate-y-[-50%] max-w-[calc(100%-2rem)] sm:max-w-lg border-t pt-4 justify-end gap-1.5");
|
|
20
|
+
|
|
21
|
+
@source inline("data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20");
|
|
22
|
+
|
|
23
|
+
@source inline("h-(--accordion-panel-height) data-starting-style:h-0 data-ending-style:h-0 focus-visible:ring-foreground/30 [&[data-panel-open]>svg]:rotate-180");
|
|
24
|
+
|
|
25
|
+
/* Animation safelist — all data-[open]/data-[ending-style] animation classes used by base-ui components */
|
|
26
|
+
@source inline("animate-in animate-out animate-pulse animate-caret-blink fade-in-0 fade-out-0 zoom-in-95 data-open:slide-in-from-bottom data-open:slide-in-from-left data-open:slide-in-from-right data-open:slide-in-from-top data-ending-style:slide-out-to-bottom data-ending-style:slide-out-to-left data-ending-style:slide-out-to-right data-ending-style:slide-out-to-top data-open:duration-500 data-ending-style:duration-300 data-open:bg-accent data-open:text-accent-foreground");
|
|
27
|
+
|
|
28
|
+
@source inline("focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 dark:bg-input/30 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground data-indeterminate:border-primary data-indeterminate:bg-primary data-indeterminate:text-primary-foreground dark:data-checked:bg-primary aria-invalid:data-checked:border-destructive aria-invalid:data-checked:bg-destructive aria-invalid:data-checked:text-destructive-foreground aria-invalid:data-indeterminate:border-destructive aria-invalid:data-indeterminate:bg-destructive aria-invalid:data-indeterminate:text-destructive-foreground group-data-indeterminate:hidden group-data-indeterminate:block bg-primary/5 bg-destructive/5 border-primary border-destructive peer-disabled:cursor-not-allowed peer-disabled:opacity-70 text-destructive text-muted-foreground disabled:pointer-events-none data-open:animate-in data-ending-style:animate-out data-open:fade-in-0 data-ending-style:fade-out-0 data-open:zoom-in-95 data-ending-style:zoom-out-95 animate-spin data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-unchecked:bg-input dark:data-unchecked:bg-input/80 group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-checked:translate-x-[calc(100%-2px)] data-unchecked:translate-x-0 dark:data-checked:bg-primary-foreground dark:data-unchecked:bg-foreground group/switch");
|
|
6
29
|
|
|
7
30
|
@custom-variant dark (&:is(.dark *));
|
|
8
31
|
|
|
32
|
+
/*
|
|
33
|
+
* WealthX Design System — Token Foundation
|
|
34
|
+
* Mapped from WealthX Figma (leyTdeKX7iRKasVXbkpYMJ) → shadcn structure
|
|
35
|
+
*
|
|
36
|
+
* IMPORTANT: --primary and --primary-foreground are tenant-driven (white-label).
|
|
37
|
+
* They MUST be overridden at runtime via ThemeProvider for each tenant.
|
|
38
|
+
* Default values below use WealthX brand green (#33FF99).
|
|
39
|
+
*
|
|
40
|
+
* shadcn structure preserved — only :root/:dark values changed.
|
|
41
|
+
* Custom additions: --warning, --success, --info (not in shadcn defaults).
|
|
42
|
+
*/
|
|
43
|
+
|
|
9
44
|
@theme inline {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
/* === shadcn core semantic colors === */
|
|
46
|
+
--color-background: var(--background);
|
|
47
|
+
--color-foreground: var(--foreground);
|
|
48
|
+
--color-card: var(--card);
|
|
49
|
+
--color-card-foreground: var(--card-foreground);
|
|
50
|
+
--color-popover: var(--popover);
|
|
51
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
52
|
+
--color-primary: var(--primary);
|
|
53
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
54
|
+
--color-secondary: var(--secondary);
|
|
55
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
56
|
+
--color-muted: var(--muted);
|
|
57
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
58
|
+
--color-accent: var(--accent);
|
|
59
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
60
|
+
--color-destructive: var(--destructive);
|
|
61
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
62
|
+
--color-border: var(--border);
|
|
63
|
+
--color-input: var(--input);
|
|
64
|
+
--color-ring: var(--ring);
|
|
65
|
+
|
|
66
|
+
/* === WealthX additions: brand secondary (tenant-driven navy) === */
|
|
67
|
+
--color-brand-secondary: var(--brand-secondary);
|
|
68
|
+
--color-brand-secondary-foreground: var(--brand-secondary-foreground);
|
|
69
|
+
|
|
70
|
+
/* === WealthX additions: state colors (not in shadcn defaults) === */
|
|
71
|
+
--color-warning: var(--warning);
|
|
72
|
+
--color-warning-foreground: var(--warning-foreground);
|
|
73
|
+
--color-success: var(--success);
|
|
74
|
+
--color-success-foreground: var(--success-foreground);
|
|
75
|
+
--color-info: var(--info);
|
|
76
|
+
--color-info-foreground: var(--info-foreground);
|
|
77
|
+
|
|
78
|
+
/* === Chart colors (WealthX series) === */
|
|
79
|
+
--color-chart-1: var(--chart-1);
|
|
80
|
+
--color-chart-2: var(--chart-2);
|
|
81
|
+
--color-chart-3: var(--chart-3);
|
|
82
|
+
--color-chart-4: var(--chart-4);
|
|
83
|
+
--color-chart-5: var(--chart-5);
|
|
84
|
+
|
|
85
|
+
/* === Sidebar === */
|
|
86
|
+
--color-sidebar: var(--sidebar);
|
|
87
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
88
|
+
--color-sidebar-primary: var(--sidebar-primary);
|
|
89
|
+
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
90
|
+
--color-sidebar-accent: var(--sidebar-accent);
|
|
91
|
+
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
92
|
+
--color-sidebar-border: var(--sidebar-border);
|
|
93
|
+
--color-sidebar-ring: var(--sidebar-ring);
|
|
94
|
+
|
|
95
|
+
/* === Border radius — WealthX: sharp corners (all 0) === */
|
|
96
|
+
--radius-sm: 0px;
|
|
97
|
+
--radius-md: 0px;
|
|
98
|
+
--radius-lg: 0px;
|
|
99
|
+
--radius-xl: 0px;
|
|
100
|
+
|
|
101
|
+
/* === Font family === */
|
|
102
|
+
--font-sans: "Figtree", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
103
|
+
|
|
104
|
+
/* === Accordion animations === */
|
|
105
|
+
--animate-accordion-down: accordion-down 0.2s ease-out;
|
|
106
|
+
--animate-accordion-up: accordion-up 0.2s ease-out;
|
|
107
|
+
|
|
108
|
+
@keyframes accordion-down {
|
|
109
|
+
from { height: 0; }
|
|
110
|
+
to { height: var(--accordion-panel-height); }
|
|
111
|
+
}
|
|
112
|
+
@keyframes accordion-up {
|
|
113
|
+
from { height: var(--accordion-panel-height); }
|
|
114
|
+
to { height: 0; }
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* ==========================================================================
|
|
119
|
+
* TYPOGRAPHY — CSS custom properties + responsive overrides
|
|
120
|
+
* Spec: packages/shadcn/src/lib/typography.ts
|
|
121
|
+
* Usage: .text-display-large, .text-h1, .text-body-medium, .text-caption, etc.
|
|
122
|
+
* ========================================================================== */
|
|
123
|
+
:root {
|
|
124
|
+
/* Display */
|
|
125
|
+
--typography-display-large-size: 4rem; --typography-display-large-leading: 4.5rem; --typography-display-large-weight: 700; --typography-display-large-tracking: -0.03125rem;
|
|
126
|
+
--typography-display-medium-size: 3rem; --typography-display-medium-leading: 3.5rem; --typography-display-medium-weight: 700;
|
|
127
|
+
--typography-display-small-size: 2.125rem; --typography-display-small-leading: 2.625rem; --typography-display-small-weight: 600;
|
|
128
|
+
|
|
129
|
+
/* Headings */
|
|
130
|
+
--typography-h1-size: 2rem; --typography-h1-leading: 2.5rem; --typography-h1-weight: 700;
|
|
131
|
+
--typography-h2-size: 1.75rem; --typography-h2-leading: 2.25rem; --typography-h2-weight: 600;
|
|
132
|
+
--typography-h3-size: 1.5rem; --typography-h3-leading: 2rem; --typography-h3-weight: 600;
|
|
133
|
+
--typography-h4-size: 1.3125rem; --typography-h4-leading: 1.75rem; --typography-h4-weight: 600;
|
|
134
|
+
--typography-h5-size: 1.125rem; --typography-h5-leading: 1.5rem; --typography-h5-weight: 600;
|
|
135
|
+
--typography-h6-size: 1rem; --typography-h6-leading: 1.375rem; --typography-h6-weight: 600;
|
|
136
|
+
|
|
137
|
+
/* Body */
|
|
138
|
+
--typography-body-large-size: 1.125rem; --typography-body-large-leading: 1.75rem; --typography-body-large-weight: 400;
|
|
139
|
+
--typography-body-medium-size: 1rem; --typography-body-medium-leading: 1.5rem; --typography-body-medium-weight: 400;
|
|
140
|
+
--typography-body-small-size: 0.875rem; --typography-body-small-leading: 1.25rem; --typography-body-small-weight: 400;
|
|
141
|
+
|
|
142
|
+
/* Labels */
|
|
143
|
+
--typography-label-large-size: 1rem; --typography-label-large-leading: 1.25rem; --typography-label-large-weight: 600;
|
|
144
|
+
--typography-label-medium-size: 0.875rem; --typography-label-medium-leading: 1.125rem; --typography-label-medium-weight: 600;
|
|
145
|
+
--typography-label-small-size: 0.75rem; --typography-label-small-leading: 1rem; --typography-label-small-weight: 600; --typography-label-small-tracking: 0.03125rem;
|
|
146
|
+
|
|
147
|
+
/* Utility */
|
|
148
|
+
--typography-caption-size: 0.75rem; --typography-caption-leading: 1rem; --typography-caption-weight: 400;
|
|
149
|
+
--typography-overline-size: 0.625rem; --typography-overline-leading: 0.875rem; --typography-overline-weight: 600; --typography-overline-tracking: 0.09375rem;
|
|
150
|
+
--typography-code-size: 0.875rem; --typography-code-leading: 1.25rem; --typography-code-weight: 400;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/* Tablet — ≤1024px */
|
|
154
|
+
@media (max-width: 1024px) {
|
|
155
|
+
:root {
|
|
156
|
+
--typography-display-large-size: 3.6rem; --typography-display-large-leading: 4.05rem;
|
|
157
|
+
--typography-display-medium-size: 2.7rem; --typography-display-medium-leading: 3.15rem;
|
|
158
|
+
--typography-display-small-size: 1.9125rem; --typography-display-small-leading: 2.3625rem;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/* Mobile — ≤768px */
|
|
163
|
+
@media (max-width: 768px) {
|
|
164
|
+
:root {
|
|
165
|
+
--typography-display-large-size: 2.5rem; --typography-display-large-leading: 2.8125rem;
|
|
166
|
+
--typography-display-medium-size: 2rem; --typography-display-medium-leading: 2.334rem;
|
|
167
|
+
--typography-h1-size: 1.75rem; --typography-h1-leading: 2.1875rem;
|
|
168
|
+
--typography-h2-size: 1.5rem; --typography-h2-leading: 1.93rem;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* ==========================================================================
|
|
173
|
+
* TYPOGRAPHY — Utility classes (@layer utilities)
|
|
174
|
+
* Compose font-size + line-height + font-weight from CSS vars above.
|
|
175
|
+
* Breakpoint responsiveness is handled automatically via :root media queries.
|
|
176
|
+
* ========================================================================== */
|
|
177
|
+
@layer utilities {
|
|
178
|
+
/* Display */
|
|
179
|
+
.text-display-large { font-size: var(--typography-display-large-size); line-height: var(--typography-display-large-leading); font-weight: var(--typography-display-large-weight); letter-spacing: var(--typography-display-large-tracking, normal); font-family: var(--font-sans); }
|
|
180
|
+
.text-display-medium { font-size: var(--typography-display-medium-size); line-height: var(--typography-display-medium-leading); font-weight: var(--typography-display-medium-weight); font-family: var(--font-sans); }
|
|
181
|
+
.text-display-small { font-size: var(--typography-display-small-size); line-height: var(--typography-display-small-leading); font-weight: var(--typography-display-small-weight); font-family: var(--font-sans); }
|
|
182
|
+
|
|
183
|
+
/* Headings */
|
|
184
|
+
.text-h1 { font-size: var(--typography-h1-size); line-height: var(--typography-h1-leading); font-weight: var(--typography-h1-weight); font-family: var(--font-sans); }
|
|
185
|
+
.text-h2 { font-size: var(--typography-h2-size); line-height: var(--typography-h2-leading); font-weight: var(--typography-h2-weight); font-family: var(--font-sans); }
|
|
186
|
+
.text-h3 { font-size: var(--typography-h3-size); line-height: var(--typography-h3-leading); font-weight: var(--typography-h3-weight); font-family: var(--font-sans); }
|
|
187
|
+
.text-h4 { font-size: var(--typography-h4-size); line-height: var(--typography-h4-leading); font-weight: var(--typography-h4-weight); font-family: var(--font-sans); }
|
|
188
|
+
.text-h5 { font-size: var(--typography-h5-size); line-height: var(--typography-h5-leading); font-weight: var(--typography-h5-weight); font-family: var(--font-sans); }
|
|
189
|
+
.text-h6 { font-size: var(--typography-h6-size); line-height: var(--typography-h6-leading); font-weight: var(--typography-h6-weight); font-family: var(--font-sans); }
|
|
190
|
+
|
|
191
|
+
/* Body */
|
|
192
|
+
.text-body-large { font-size: var(--typography-body-large-size); line-height: var(--typography-body-large-leading); font-weight: var(--typography-body-large-weight); font-family: var(--font-sans); }
|
|
193
|
+
.text-body-medium { font-size: var(--typography-body-medium-size); line-height: var(--typography-body-medium-leading); font-weight: var(--typography-body-medium-weight); font-family: var(--font-sans); }
|
|
194
|
+
.text-body-small { font-size: var(--typography-body-small-size); line-height: var(--typography-body-small-leading); font-weight: var(--typography-body-small-weight); font-family: var(--font-sans); }
|
|
195
|
+
|
|
196
|
+
/* Labels */
|
|
197
|
+
.text-label-large { font-size: var(--typography-label-large-size); line-height: var(--typography-label-large-leading); font-weight: var(--typography-label-large-weight); font-family: var(--font-sans); }
|
|
198
|
+
.text-label-medium { font-size: var(--typography-label-medium-size); line-height: var(--typography-label-medium-leading); font-weight: var(--typography-label-medium-weight); font-family: var(--font-sans); }
|
|
199
|
+
.text-label-small { font-size: var(--typography-label-small-size); line-height: var(--typography-label-small-leading); font-weight: var(--typography-label-small-weight); letter-spacing: var(--typography-label-small-tracking); font-family: var(--font-sans); }
|
|
200
|
+
|
|
201
|
+
/* Utility */
|
|
202
|
+
.text-caption { font-size: var(--typography-caption-size); line-height: var(--typography-caption-leading); font-weight: var(--typography-caption-weight); font-family: var(--font-sans); }
|
|
203
|
+
.text-overline { font-size: var(--typography-overline-size); line-height: var(--typography-overline-leading); font-weight: var(--typography-overline-weight); letter-spacing: var(--typography-overline-tracking); text-transform: uppercase; font-family: var(--font-sans); }
|
|
204
|
+
.text-code { font-size: var(--typography-code-size); line-height: var(--typography-code-leading); font-weight: var(--typography-code-weight); font-family: var(--font-mono, ui-monospace, monospace); }
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/* ==========================================================================
|
|
208
|
+
* BASE — default border color so bare `border` class uses the border token
|
|
209
|
+
* ========================================================================== */
|
|
210
|
+
@layer base {
|
|
211
|
+
* {
|
|
212
|
+
border-color: var(--color-border);
|
|
213
|
+
}
|
|
50
214
|
}
|
|
51
215
|
|
|
216
|
+
/* ==========================================================================
|
|
217
|
+
* LIGHT MODE — WealthX Foundation tokens
|
|
218
|
+
* Source: Figma collection "Foundation" (Light mode)
|
|
219
|
+
* ========================================================================== */
|
|
52
220
|
:root {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
221
|
+
--radius: 0; /* WealthX: sharp corners — no border radius */
|
|
222
|
+
|
|
223
|
+
/* Core surfaces — from palette/background/* */
|
|
224
|
+
--background: oklch(1.000 0 0); /* #FFFFFF — palette/background/default */
|
|
225
|
+
--foreground: oklch(0.152 0.020 235.0); /* #040D13 — palette/text/primary */
|
|
226
|
+
|
|
227
|
+
/* Card — from color/background/elevated */
|
|
228
|
+
--card: oklch(1.000 0 0); /* #FFFFFF */
|
|
229
|
+
--card-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
|
|
230
|
+
|
|
231
|
+
/* Popover — from color/background/elevated */
|
|
232
|
+
--popover: oklch(1.000 0 0); /* #FFFFFF */
|
|
233
|
+
--popover-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
|
|
234
|
+
|
|
235
|
+
/* Primary — TENANT-DRIVEN (white-label)
|
|
236
|
+
* Default: WealthX green #33FF99
|
|
237
|
+
* Override at runtime via ThemeProvider for each tenant */
|
|
238
|
+
--primary: oklch(0.894 0.208 163.0); /* #33FF99 — palette/primary/main */
|
|
239
|
+
--primary-foreground: oklch(0.152 0.020 235.0); /* #040D13 — contrastText for bright primary (button text readability) */
|
|
240
|
+
|
|
241
|
+
/* Secondary — maps to WealthX paper/subtle background */
|
|
242
|
+
--secondary: oklch(0.977 0.004 236.5); /* #F5F8FA — palette/background/paper */
|
|
243
|
+
--secondary-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
|
|
244
|
+
|
|
245
|
+
/* Muted — secondary text and disabled states */
|
|
246
|
+
--muted: oklch(0.977 0.004 236.5); /* #F5F8FA — palette/background/paper */
|
|
247
|
+
--muted-foreground: oklch(0.465 0.032 241.8); /* #4A5C6A — palette/text/secondary */
|
|
248
|
+
|
|
249
|
+
/* Accent — tertiary surface for hover/active states */
|
|
250
|
+
--accent: oklch(0.936 0.003 247.9); /* #E8EAEC — color/background/tertiary */
|
|
251
|
+
--accent-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
|
|
252
|
+
|
|
253
|
+
/* Destructive — error state */
|
|
254
|
+
--destructive: oklch(0.643 0.215 28.8); /* #F44336 — palette/error/main */
|
|
255
|
+
--destructive-foreground: oklch(1.000 0 0); /* #FFFFFF — light text on red */
|
|
256
|
+
|
|
257
|
+
/* Borders */
|
|
258
|
+
--border: oklch(0.936 0.003 247.9); /* #E8EAEC — color/border/default */
|
|
259
|
+
--input: oklch(0.936 0.003 247.9); /* #E8EAEC — same as border */
|
|
260
|
+
--ring: oklch(0.894 0.208 163.0); /* #33FF99 — primary (focus ring uses brand color) */
|
|
261
|
+
|
|
262
|
+
/* WealthX custom: state colors */
|
|
263
|
+
--warning: oklch(0.770 0.174 64.1); /* #FF9800 — palette/warning/main */
|
|
264
|
+
--warning-foreground: oklch(1.000 0 0); /* #FFFFFF */
|
|
265
|
+
--success: oklch(0.673 0.162 144.2); /* #4CAF50 — palette/success/main */
|
|
266
|
+
--success-foreground: oklch(1.000 0 0); /* #FFFFFF */
|
|
267
|
+
--info: oklch(0.658 0.169 248.8); /* #2196F3 — palette/info/main */
|
|
268
|
+
--info-foreground: oklch(1.000 0 0); /* #FFFFFF */
|
|
269
|
+
|
|
270
|
+
/* Chart series — WealthX Charts collection */
|
|
271
|
+
--chart-1: oklch(0.590 0.217 261.8); /* #2B72FB — series/blue */
|
|
272
|
+
--chart-2: oklch(0.747 0.086 204.1); /* #64BDC6 — series/teal */
|
|
273
|
+
--chart-3: oklch(0.846 0.160 94.6); /* #EECA34 — series/yellow */
|
|
274
|
+
--chart-4: oklch(0.702 0.192 39.0); /* #FE6A35 — series/orange */
|
|
275
|
+
--chart-5: oklch(0.661 0.213 27.5); /* #FA4B42 — series/red */
|
|
276
|
+
|
|
277
|
+
/* Brand secondary — WealthX dark navy #162029 (tenant-driven via ThemeProvider)
|
|
278
|
+
* NOTE: --secondary is reserved by shadcn for surface/paper (#F5F8FA).
|
|
279
|
+
* --brand-secondary holds the WealthX brand navy used by the Secondary button variant. */
|
|
280
|
+
--brand-secondary: oklch(0.238 0.023 246.1); /* #162029 — palette/secondary/main */
|
|
281
|
+
--brand-secondary-foreground: oklch(1.000 0 0); /* #FFFFFF — white on dark navy */
|
|
282
|
+
|
|
283
|
+
/* Sidebar — uses paper/secondary background */
|
|
284
|
+
--sidebar: oklch(0.977 0.004 236.5); /* #F5F8FA */
|
|
285
|
+
--sidebar-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
|
|
286
|
+
--sidebar-primary: oklch(0.894 0.208 163.0); /* #33FF99 — tenant primary */
|
|
287
|
+
--sidebar-primary-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
|
|
288
|
+
--sidebar-accent: oklch(0.936 0.003 247.9); /* #E8EAEC */
|
|
289
|
+
--sidebar-accent-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
|
|
290
|
+
--sidebar-border: oklch(0.936 0.003 247.9); /* #E8EAEC */
|
|
291
|
+
--sidebar-ring: oklch(0.465 0.032 241.8); /* #4A5C6A */
|
|
85
292
|
}
|
|
86
293
|
|
|
294
|
+
/* ==========================================================================
|
|
295
|
+
* DARK MODE — WealthX inverted (based on secondary palette #162029)
|
|
296
|
+
* Note: WealthX Figma currently only has Light mode.
|
|
297
|
+
* Dark values derived from WealthX's secondary color (#162029) as base.
|
|
298
|
+
* ========================================================================== */
|
|
87
299
|
.dark {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
300
|
+
/* Core surfaces */
|
|
301
|
+
--background: oklch(0.188 0.013 248.5); /* #0F1419 — dark navy */
|
|
302
|
+
--foreground: oklch(0.977 0.004 236.5); /* #F5F8FA — light text */
|
|
303
|
+
|
|
304
|
+
/* Card */
|
|
305
|
+
--card: oklch(0.238 0.023 246.1); /* #162029 — secondary as dark card */
|
|
306
|
+
--card-foreground: oklch(0.977 0.004 236.5);
|
|
307
|
+
|
|
308
|
+
/* Popover */
|
|
309
|
+
--popover: oklch(0.238 0.023 246.1);
|
|
310
|
+
--popover-foreground: oklch(0.977 0.004 236.5);
|
|
311
|
+
|
|
312
|
+
/* Primary — stays same hue, slightly brighter in dark mode */
|
|
313
|
+
--primary: oklch(0.894 0.208 163.0); /* #33FF99 — same green works on dark */
|
|
314
|
+
--primary-foreground: oklch(0.152 0.020 235.0); /* #040D13 */
|
|
315
|
+
|
|
316
|
+
/* Secondary */
|
|
317
|
+
--secondary: oklch(0.278 0.023 241.1); /* #1E2A33 */
|
|
318
|
+
--secondary-foreground: oklch(0.977 0.004 236.5);
|
|
319
|
+
|
|
320
|
+
/* Muted */
|
|
321
|
+
--muted: oklch(0.278 0.023 241.1); /* #1E2A33 */
|
|
322
|
+
--muted-foreground: oklch(0.732 0.021 245.7); /* #9EAAB5 — palette/text/disabled */
|
|
323
|
+
|
|
324
|
+
/* Accent */
|
|
325
|
+
--accent: oklch(0.314 0.030 246.9); /* #253340 */
|
|
326
|
+
--accent-foreground: oklch(0.977 0.004 236.5);
|
|
327
|
+
|
|
328
|
+
/* Destructive */
|
|
329
|
+
--destructive: oklch(0.712 0.181 22.8); /* #FF6B6B — brighter red for dark */
|
|
330
|
+
--destructive-foreground: oklch(0.152 0.020 235.0);
|
|
331
|
+
|
|
332
|
+
/* Borders */
|
|
333
|
+
--border: oklch(0.314 0.030 246.9); /* #253340 */
|
|
334
|
+
--input: oklch(0.314 0.030 246.9);
|
|
335
|
+
--ring: oklch(0.894 0.208 163.0); /* #33FF99 */
|
|
336
|
+
|
|
337
|
+
/* State colors — brighter variants for dark mode */
|
|
338
|
+
--warning: oklch(0.829 0.145 73.5); /* #FFB74D */
|
|
339
|
+
--warning-foreground: oklch(0.152 0.020 235.0);
|
|
340
|
+
--success: oklch(0.766 0.118 145.3); /* #81C784 */
|
|
341
|
+
--success-foreground: oklch(0.152 0.020 235.0);
|
|
342
|
+
--info: oklch(0.748 0.123 244.7); /* #64B5F6 */
|
|
343
|
+
--info-foreground: oklch(0.152 0.020 235.0);
|
|
344
|
+
|
|
345
|
+
/* Chart series — same in dark */
|
|
346
|
+
--chart-1: oklch(0.590 0.217 261.8);
|
|
347
|
+
--chart-2: oklch(0.747 0.086 204.1);
|
|
348
|
+
--chart-3: oklch(0.846 0.160 94.6);
|
|
349
|
+
--chart-4: oklch(0.702 0.192 39.0);
|
|
350
|
+
--chart-5: oklch(0.661 0.213 27.5);
|
|
351
|
+
|
|
352
|
+
/* Brand secondary — brighter/lighter in dark mode for legibility */
|
|
353
|
+
--brand-secondary: oklch(0.314 0.030 246.9); /* #253340 — slightly lighter navy */
|
|
354
|
+
--brand-secondary-foreground: oklch(0.977 0.004 236.5); /* #F5F8FA — near-white on dark */
|
|
355
|
+
|
|
356
|
+
/* Sidebar */
|
|
357
|
+
--sidebar: oklch(0.238 0.023 246.1); /* #162029 */
|
|
358
|
+
--sidebar-foreground: oklch(0.977 0.004 236.5);
|
|
359
|
+
--sidebar-primary: oklch(0.894 0.208 163.0);
|
|
360
|
+
--sidebar-primary-foreground: oklch(0.152 0.020 235.0);
|
|
361
|
+
--sidebar-accent: oklch(0.314 0.030 246.9);
|
|
362
|
+
--sidebar-accent-foreground: oklch(0.977 0.004 236.5);
|
|
363
|
+
--sidebar-border: oklch(0.314 0.030 246.9);
|
|
364
|
+
--sidebar-ring: oklch(0.465 0.032 241.8);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/*
|
|
368
|
+
* Text selection highlight — primary at 25% opacity (subtle tint).
|
|
369
|
+
* ::selection covers regular text nodes.
|
|
370
|
+
* input::selection covers native input field selection (Chrome/Firefox).
|
|
371
|
+
* color-mix() respects tenant primary overrides (white-label friendly).
|
|
372
|
+
*/
|
|
373
|
+
::selection,
|
|
374
|
+
input::selection,
|
|
375
|
+
textarea::selection {
|
|
376
|
+
background-color: color-mix(in oklch, var(--primary) 25%, transparent);
|
|
377
|
+
color: inherit;
|
|
119
378
|
}
|
|
379
|
+
|
|
380
|
+
/*
|
|
381
|
+
* Sonner toast — left accent strip per status type.
|
|
382
|
+
* Uses data-type attribute set by the Sonner library.
|
|
383
|
+
* Inset box-shadow avoids corner artifacts from mixing 4px left + 1px other borders.
|
|
384
|
+
* !important required to override Sonner's own styles.
|
|
385
|
+
*/
|
|
386
|
+
[data-sonner-toast][data-type="success"] { box-shadow: inset 4px 0 0 var(--success) !important; }
|
|
387
|
+
[data-sonner-toast][data-type="error"] { box-shadow: inset 4px 0 0 var(--destructive) !important; }
|
|
388
|
+
[data-sonner-toast][data-type="warning"] { box-shadow: inset 4px 0 0 var(--warning) !important; }
|
|
389
|
+
[data-sonner-toast][data-type="info"] { box-shadow: inset 4px 0 0 var(--info) !important; }
|