@chesapeake/stack 0.1.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/CHANGELOG.md +26 -0
- package/LICENSE +190 -0
- package/README.md +440 -0
- package/components/ui/avatar.tsx +87 -0
- package/components/ui/badge.tsx +49 -0
- package/components/ui/badgeVariants.ts +26 -0
- package/components/ui/button-group.tsx +67 -0
- package/components/ui/button.tsx +70 -0
- package/components/ui/buttonGroupVariants.ts +23 -0
- package/components/ui/buttonVariants.ts +38 -0
- package/components/ui/calendar.tsx +220 -0
- package/components/ui/card.tsx +162 -0
- package/components/ui/dialog.tsx +290 -0
- package/components/ui/drawer.tsx +227 -0
- package/components/ui/dropdown-menu.tsx +260 -0
- package/components/ui/index.ts +86 -0
- package/components/ui/input.tsx +59 -0
- package/components/ui/label.tsx +47 -0
- package/components/ui/location-input.md +194 -0
- package/components/ui/location-input.tsx +384 -0
- package/components/ui/popover.tsx +110 -0
- package/components/ui/select.tsx +306 -0
- package/components/ui/separator.tsx +50 -0
- package/components/ui/sonner-api.ts +8 -0
- package/components/ui/sonner.tsx +69 -0
- package/components/ui/textarea.tsx +53 -0
- package/components/ui/tooltip.tsx +125 -0
- package/components/ux/ActivityAnimation.tsx +135 -0
- package/components/ux/EmptyState.tsx +22 -0
- package/components/ux/FeedbackDrawer.tsx +141 -0
- package/components/ux/FireAnimation.tsx +189 -0
- package/components/ux/FriendList.tsx +111 -0
- package/components/ux/FriendRequestList.tsx +104 -0
- package/components/ux/GifSearch.tsx +264 -0
- package/components/ux/ImageUpload.tsx +829 -0
- package/components/ux/SelectedUsersList.tsx +91 -0
- package/components/ux/StandardLayout/PageLayout.tsx +107 -0
- package/components/ux/StandardLayout/ProfilePage.tsx +452 -0
- package/components/ux/StandardLayout/StandardLayout.tsx +345 -0
- package/components/ux/StandardLayout/index.ts +22 -0
- package/components/ux/TutorialCarousel.tsx +128 -0
- package/components/ux/UserSearch.tsx +324 -0
- package/components/ux/UserSelector.tsx +116 -0
- package/components/ux/auth/AuthSelector.tsx +154 -0
- package/components/ux/auth/MultiAuthProvider.tsx +196 -0
- package/components/ux/auth/README.md +317 -0
- package/components/ux/auth/context.ts +46 -0
- package/components/ux/auth/github/AuthCallback.tsx +177 -0
- package/components/ux/auth/github/AuthProvider.tsx +111 -0
- package/components/ux/auth/github/README.md +208 -0
- package/components/ux/auth/github/client.ts +127 -0
- package/components/ux/auth/github/config.ts +68 -0
- package/components/ux/auth/github/context.ts +34 -0
- package/components/ux/auth/github/default-client.ts +74 -0
- package/components/ux/auth/github/index.ts +43 -0
- package/components/ux/auth/github/types.ts +44 -0
- package/components/ux/auth/github/useGitHubAuth.ts +16 -0
- package/components/ux/auth/google/AuthCallback.tsx +170 -0
- package/components/ux/auth/google/AuthProvider.tsx +108 -0
- package/components/ux/auth/google/README.md +450 -0
- package/components/ux/auth/google/client.ts +109 -0
- package/components/ux/auth/google/config.ts +65 -0
- package/components/ux/auth/google/context.ts +34 -0
- package/components/ux/auth/google/default-client.ts +69 -0
- package/components/ux/auth/google/index.ts +43 -0
- package/components/ux/auth/google/types.ts +42 -0
- package/components/ux/auth/google/useGoogleAuth.ts +16 -0
- package/components/ux/auth/index.ts +72 -0
- package/components/ux/auth/useAuth.ts +16 -0
- package/components/ux/index.ts +46 -0
- package/components/ux/theme-provider-context.ts +20 -0
- package/components/ux/theme-provider.tsx +114 -0
- package/components/ux/useTheme.ts +42 -0
- package/index.ts +29 -0
- package/lib/utils.ts +57 -0
- package/package.json +170 -0
- package/styles/base.css +38 -0
- package/styles/components.css +54 -0
- package/styles/index.css +7 -0
- package/styles/tokens.css +189 -0
- package/tailwind.preset.ts +169 -0
- package/types/user.ts +69 -0
package/package.json
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@chesapeake/stack",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A simple, reusable React component library and design system built on shadcn/ui with Tailwind CSS",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"packageManager": "npm@10.2.0",
|
|
7
|
+
"license": "Apache-2.0",
|
|
8
|
+
"author": "Chesapeake Computing <chris@chesapeake.dev>",
|
|
9
|
+
"keywords": [
|
|
10
|
+
"react",
|
|
11
|
+
"components",
|
|
12
|
+
"ui",
|
|
13
|
+
"design-system",
|
|
14
|
+
"tailwindcss",
|
|
15
|
+
"shadcn",
|
|
16
|
+
"typescript"
|
|
17
|
+
],
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/chesapeake-computing/stack.git"
|
|
24
|
+
},
|
|
25
|
+
"homepage": "https://github.com/chesapeake-computing/stack#readme",
|
|
26
|
+
"bugs": {
|
|
27
|
+
"url": "https://github.com/chesapeake-computing/stack/issues"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"components",
|
|
31
|
+
"lib",
|
|
32
|
+
"styles",
|
|
33
|
+
"types",
|
|
34
|
+
"index.ts",
|
|
35
|
+
"tailwind.preset.ts",
|
|
36
|
+
"README.md",
|
|
37
|
+
"LICENSE",
|
|
38
|
+
"CHANGELOG.md"
|
|
39
|
+
],
|
|
40
|
+
"main": "./index.ts",
|
|
41
|
+
"types": "./index.ts",
|
|
42
|
+
"scripts": {
|
|
43
|
+
"dev": "vite",
|
|
44
|
+
"build": "vite build",
|
|
45
|
+
"preview": "vite preview",
|
|
46
|
+
"lint": "eslint .",
|
|
47
|
+
"lint:fix": "eslint . --fix",
|
|
48
|
+
"typecheck": "tsc -b --noEmit",
|
|
49
|
+
"fmt": "prettier --write .",
|
|
50
|
+
"fmt:check": "prettier --check .",
|
|
51
|
+
"prepublishOnly": "npm run lint && npm run typecheck"
|
|
52
|
+
},
|
|
53
|
+
"exports": {
|
|
54
|
+
".": "./index.ts",
|
|
55
|
+
"./components/ui": "./components/ui/index.ts",
|
|
56
|
+
"./components/ui/button": "./components/ui/button.tsx",
|
|
57
|
+
"./components/ui/avatar": "./components/ui/avatar.tsx",
|
|
58
|
+
"./components/ui/badge": "./components/ui/badge.tsx",
|
|
59
|
+
"./components/ui/badgeVariants": "./components/ui/badgeVariants.ts",
|
|
60
|
+
"./components/ui/button-group": "./components/ui/button-group.tsx",
|
|
61
|
+
"./components/ui/buttonGroupVariants": "./components/ui/buttonGroupVariants.ts",
|
|
62
|
+
"./components/ui/buttonVariants": "./components/ui/buttonVariants.ts",
|
|
63
|
+
"./components/ui/calendar": "./components/ui/calendar.tsx",
|
|
64
|
+
"./components/ui/card": "./components/ui/card.tsx",
|
|
65
|
+
"./components/ui/dialog": "./components/ui/dialog.tsx",
|
|
66
|
+
"./components/ui/drawer": "./components/ui/drawer.tsx",
|
|
67
|
+
"./components/ui/dropdown-menu": "./components/ui/dropdown-menu.tsx",
|
|
68
|
+
"./components/ui/input": "./components/ui/input.tsx",
|
|
69
|
+
"./components/ui/label": "./components/ui/label.tsx",
|
|
70
|
+
"./components/ui/location-input": "./components/ui/location-input.tsx",
|
|
71
|
+
"./components/ui/popover": "./components/ui/popover.tsx",
|
|
72
|
+
"./components/ui/select": "./components/ui/select.tsx",
|
|
73
|
+
"./components/ui/separator": "./components/ui/separator.tsx",
|
|
74
|
+
"./components/ui/sonner": "./components/ui/sonner.tsx",
|
|
75
|
+
"./components/ui/sonner-api": "./components/ui/sonner-api.ts",
|
|
76
|
+
"./components/ui/textarea": "./components/ui/textarea.tsx",
|
|
77
|
+
"./components/ui/tooltip": "./components/ui/tooltip.tsx",
|
|
78
|
+
"./components/ux": "./components/ux/index.ts",
|
|
79
|
+
"./components/ux/ActivityAnimation": "./components/ux/ActivityAnimation.tsx",
|
|
80
|
+
"./components/ux/FireAnimation": "./components/ux/FireAnimation.tsx",
|
|
81
|
+
"./components/ux/GifSearch": "./components/ux/GifSearch.tsx",
|
|
82
|
+
"./components/ux/ImageUpload": "./components/ux/ImageUpload.tsx",
|
|
83
|
+
"./components/ux/PageLayout": "./components/ux/PageLayout.tsx",
|
|
84
|
+
"./components/ux/TutorialCarousel": "./components/ux/TutorialCarousel.tsx",
|
|
85
|
+
"./components/ux/theme-provider": "./components/ux/theme-provider.tsx",
|
|
86
|
+
"./components/ux/useTheme": "./components/ux/useTheme.ts",
|
|
87
|
+
"./components/ux/FeedbackDrawer": "./components/ux/FeedbackDrawer.tsx",
|
|
88
|
+
"./components/ux/auth": "./components/ux/auth/index.ts",
|
|
89
|
+
"./components/ux/auth/google": "./components/ux/auth/google/index.ts",
|
|
90
|
+
"./components/ux/auth/google/client": "./components/ux/auth/google/client.ts",
|
|
91
|
+
"./components/ux/auth/google/default-client": "./components/ux/auth/google/default-client.ts",
|
|
92
|
+
"./components/ux/auth/google/AuthProvider": "./components/ux/auth/google/AuthProvider.tsx",
|
|
93
|
+
"./components/ux/auth/google/AuthCallback": "./components/ux/auth/google/AuthCallback.tsx",
|
|
94
|
+
"./components/ux/auth/google/types": "./components/ux/auth/google/types.ts",
|
|
95
|
+
"./components/ux/auth/github": "./components/ux/auth/github/index.ts",
|
|
96
|
+
"./components/ux/auth/github/client": "./components/ux/auth/github/client.ts",
|
|
97
|
+
"./components/ux/auth/github/default-client": "./components/ux/auth/github/default-client.ts",
|
|
98
|
+
"./components/ux/auth/github/AuthProvider": "./components/ux/auth/github/AuthProvider.tsx",
|
|
99
|
+
"./components/ux/auth/github/AuthCallback": "./components/ux/auth/github/AuthCallback.tsx",
|
|
100
|
+
"./components/ux/auth/github/types": "./components/ux/auth/github/types.ts",
|
|
101
|
+
"./lib/utils": "./lib/utils.ts",
|
|
102
|
+
"./types/user": "./types/user.ts",
|
|
103
|
+
"./styles": "./styles/index.css",
|
|
104
|
+
"./tailwind.preset": "./tailwind.preset.ts",
|
|
105
|
+
"./eslint.config": "./eslint.config.js",
|
|
106
|
+
"./prettier.config": "./prettier.config.js"
|
|
107
|
+
},
|
|
108
|
+
"dependencies": {
|
|
109
|
+
"@radix-ui/react-avatar": "^1.1.10",
|
|
110
|
+
"@radix-ui/react-checkbox": "^1.1.1",
|
|
111
|
+
"@radix-ui/react-dialog": "^1.1.15",
|
|
112
|
+
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
113
|
+
"@radix-ui/react-label": "^2.1.7",
|
|
114
|
+
"@radix-ui/react-popover": "^1.1.15",
|
|
115
|
+
"@radix-ui/react-select": "^2.2.6",
|
|
116
|
+
"@radix-ui/react-separator": "^1.1.8",
|
|
117
|
+
"@radix-ui/react-slot": "^1.2.4",
|
|
118
|
+
"@radix-ui/react-tooltip": "^1.2.8",
|
|
119
|
+
"class-variance-authority": "^0.7.0",
|
|
120
|
+
"clsx": "^2.0.0",
|
|
121
|
+
"date-fns": "^4.1.0",
|
|
122
|
+
"lucide-react": "^0.400.0",
|
|
123
|
+
"sonner": "^1.7.4",
|
|
124
|
+
"tailwind-merge": "^2.0.0"
|
|
125
|
+
},
|
|
126
|
+
"devDependencies": {
|
|
127
|
+
"@eslint/js": "^9.21.0",
|
|
128
|
+
"@tailwindcss/vite": "^4.1.3",
|
|
129
|
+
"@types/node": "^22.14.0",
|
|
130
|
+
"@types/react": "^19.0.10",
|
|
131
|
+
"@types/react-dom": "^19.0.4",
|
|
132
|
+
"@vitejs/plugin-react": "^5.1.2",
|
|
133
|
+
"eslint": "^9.21.0",
|
|
134
|
+
"eslint-plugin-react-hooks": "^5.1.0",
|
|
135
|
+
"eslint-plugin-react-refresh": "^0.4.19",
|
|
136
|
+
"globals": "^15.15.0",
|
|
137
|
+
"prettier": "^3.5.3",
|
|
138
|
+
"typescript": "~5.7.2",
|
|
139
|
+
"typescript-eslint": "^8.24.1",
|
|
140
|
+
"vite": "^7.3.1"
|
|
141
|
+
},
|
|
142
|
+
"peerDependencies": {
|
|
143
|
+
"react": "^19.0.0",
|
|
144
|
+
"react-day-picker": "^9.11.1",
|
|
145
|
+
"react-dom": "^19.0.0",
|
|
146
|
+
"tailwindcss": "^4.1.0",
|
|
147
|
+
"tw-animate-css": "^1.2.0",
|
|
148
|
+
"vaul": "^1.1.2"
|
|
149
|
+
},
|
|
150
|
+
"peerDependenciesMeta": {
|
|
151
|
+
"tailwindcss": {
|
|
152
|
+
"optional": false
|
|
153
|
+
},
|
|
154
|
+
"tw-animate-css": {
|
|
155
|
+
"optional": false
|
|
156
|
+
},
|
|
157
|
+
"react-day-picker": {
|
|
158
|
+
"optional": false
|
|
159
|
+
},
|
|
160
|
+
"vaul": {
|
|
161
|
+
"optional": false
|
|
162
|
+
},
|
|
163
|
+
"react": {
|
|
164
|
+
"optional": false
|
|
165
|
+
},
|
|
166
|
+
"react-dom": {
|
|
167
|
+
"optional": false
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
package/styles/base.css
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* Chesapeake Base Styles */
|
|
2
|
+
@layer base {
|
|
3
|
+
* {
|
|
4
|
+
@apply border-border outline-ring/50;
|
|
5
|
+
}
|
|
6
|
+
body {
|
|
7
|
+
@apply bg-background text-foreground;
|
|
8
|
+
font-family: var(--font-sans);
|
|
9
|
+
}
|
|
10
|
+
code,
|
|
11
|
+
pre {
|
|
12
|
+
font-family: var(--font-mono);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* iOS Safe Area Utilities */
|
|
17
|
+
@layer utilities {
|
|
18
|
+
.pt-safe {
|
|
19
|
+
padding-top: env(safe-area-inset-top);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.pb-safe {
|
|
23
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.pl-safe {
|
|
27
|
+
padding-left: env(safe-area-inset-left);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.pr-safe {
|
|
31
|
+
padding-right: env(safe-area-inset-right);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.h-screen {
|
|
35
|
+
height: 100vh;
|
|
36
|
+
height: 100dvh;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/* Chesapeake Component Styles */
|
|
2
|
+
/* Add any component-specific styles here that can't be handled by Tailwind */
|
|
3
|
+
|
|
4
|
+
/* Example: Custom animations or complex styles */
|
|
5
|
+
@keyframes slideInFromTop {
|
|
6
|
+
from {
|
|
7
|
+
transform: translateY(-100%);
|
|
8
|
+
opacity: 0;
|
|
9
|
+
}
|
|
10
|
+
to {
|
|
11
|
+
transform: translateY(0);
|
|
12
|
+
opacity: 1;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.animate-slide-in-from-top {
|
|
17
|
+
animation: slideInFromTop 0.3s ease-out;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Particle float animation for ActivityAnimation component */
|
|
21
|
+
@keyframes particle-float-opacity {
|
|
22
|
+
0%,
|
|
23
|
+
100% {
|
|
24
|
+
opacity: 0.3;
|
|
25
|
+
}
|
|
26
|
+
50% {
|
|
27
|
+
opacity: 0.8;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* Fire flicker animation for FireAnimation component */
|
|
32
|
+
@keyframes fire-flicker {
|
|
33
|
+
0%,
|
|
34
|
+
100% {
|
|
35
|
+
opacity: 0.8;
|
|
36
|
+
transform: scaleY(1) scaleX(1);
|
|
37
|
+
}
|
|
38
|
+
25% {
|
|
39
|
+
opacity: 0.7;
|
|
40
|
+
transform: scaleY(1.1) scaleX(0.95);
|
|
41
|
+
}
|
|
42
|
+
50% {
|
|
43
|
+
opacity: 0.8;
|
|
44
|
+
transform: scaleY(0.95) scaleX(1.05);
|
|
45
|
+
}
|
|
46
|
+
75% {
|
|
47
|
+
opacity: 0.9;
|
|
48
|
+
transform: scaleY(1.05) scaleX(0.98);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.animate-fire-flicker {
|
|
53
|
+
animation: fire-flicker 1.5s ease-in-out infinite;
|
|
54
|
+
}
|
package/styles/index.css
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/* Chesapeake Design Tokens - Base Theme */
|
|
2
|
+
/* Projects can override these variables in their own CSS files after importing @chesapeake/stack/styles */
|
|
3
|
+
|
|
4
|
+
@custom-variant dark (&:is(.dark *));
|
|
5
|
+
|
|
6
|
+
/* Base theme variables */
|
|
7
|
+
:root {
|
|
8
|
+
--background: oklch(0.9399 0.0203 345.6985);
|
|
9
|
+
--foreground: oklch(0.4712 0 0);
|
|
10
|
+
--card: oklch(0.9498 0.05 86.8891);
|
|
11
|
+
--card-foreground: oklch(0.4712 0 0);
|
|
12
|
+
--popover: oklch(1 0 0);
|
|
13
|
+
--popover-foreground: oklch(0.4712 0 0);
|
|
14
|
+
--primary: oklch(0.6209 0.1801 348.1385);
|
|
15
|
+
--primary-foreground: oklch(1 0 0);
|
|
16
|
+
--secondary: oklch(0.8095 0.0694 198.1863);
|
|
17
|
+
--secondary-foreground: oklch(0.3211 0 0);
|
|
18
|
+
--muted: oklch(0.88 0.0504 212.0952);
|
|
19
|
+
--muted-foreground: oklch(0.5795 0 0);
|
|
20
|
+
--accent: oklch(0.9195 0.0801 87.667);
|
|
21
|
+
--accent-foreground: oklch(0.3211 0 0);
|
|
22
|
+
--destructive: oklch(0.7091 0.1697 21.9551);
|
|
23
|
+
--destructive-foreground: oklch(1 0 0);
|
|
24
|
+
--border: oklch(0.6209 0.1801 348.1385);
|
|
25
|
+
--input: oklch(0.9189 0 0);
|
|
26
|
+
--ring: oklch(0.7002 0.1597 350.7532);
|
|
27
|
+
--chart-1: oklch(0.7002 0.1597 350.7532);
|
|
28
|
+
--chart-2: oklch(0.8189 0.0799 212.0892);
|
|
29
|
+
--chart-3: oklch(0.9195 0.0801 87.667);
|
|
30
|
+
--chart-4: oklch(0.7998 0.111 348.1791);
|
|
31
|
+
--chart-5: oklch(0.6197 0.1899 353.9091);
|
|
32
|
+
--sidebar: oklch(0.914 0.0424 343.0913);
|
|
33
|
+
--sidebar-foreground: oklch(0.3211 0 0);
|
|
34
|
+
--sidebar-primary: oklch(0.6559 0.2118 354.3084);
|
|
35
|
+
--sidebar-primary-foreground: oklch(1 0 0);
|
|
36
|
+
--sidebar-accent: oklch(0.8228 0.1095 346.0184);
|
|
37
|
+
--sidebar-accent-foreground: oklch(0.3211 0 0);
|
|
38
|
+
--sidebar-border: oklch(0.9464 0.0327 307.1745);
|
|
39
|
+
--sidebar-ring: oklch(0.6559 0.2118 354.3084);
|
|
40
|
+
--font-sans: Poppins, sans-serif;
|
|
41
|
+
--font-serif: Lora, serif;
|
|
42
|
+
--font-mono: "Fira Code", monospace;
|
|
43
|
+
--radius: 0.4rem;
|
|
44
|
+
--shadow-x: 3px;
|
|
45
|
+
--shadow-y: 3px;
|
|
46
|
+
--shadow-blur: 0px;
|
|
47
|
+
--shadow-spread: 0px;
|
|
48
|
+
--shadow-opacity: 1;
|
|
49
|
+
--shadow-color: hsl(325.78 58.18% 56.86% / 0.5);
|
|
50
|
+
--shadow-2xs: 3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 0.5);
|
|
51
|
+
--shadow-xs: 3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 0.5);
|
|
52
|
+
--shadow-sm:
|
|
53
|
+
3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 1),
|
|
54
|
+
3px 1px 2px -1px hsl(325.78 58.18% 56.86% / 1);
|
|
55
|
+
--shadow:
|
|
56
|
+
3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 1),
|
|
57
|
+
3px 1px 2px -1px hsl(325.78 58.18% 56.86% / 1);
|
|
58
|
+
--shadow-md:
|
|
59
|
+
3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 1),
|
|
60
|
+
3px 2px 4px -1px hsl(325.78 58.18% 56.86% / 1);
|
|
61
|
+
--shadow-lg:
|
|
62
|
+
3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 1),
|
|
63
|
+
3px 4px 6px -1px hsl(325.78 58.18% 56.86% / 1);
|
|
64
|
+
--shadow-xl:
|
|
65
|
+
3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 1),
|
|
66
|
+
3px 8px 10px -1px hsl(325.78 58.18% 56.86% / 1);
|
|
67
|
+
--shadow-2xl: 3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 2.5);
|
|
68
|
+
--tracking-normal: 0em;
|
|
69
|
+
--spacing: 0.25rem;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.dark {
|
|
73
|
+
--background: oklch(0.2497 0.0305 234.1628);
|
|
74
|
+
--foreground: oklch(0.9306 0.0197 349.0785);
|
|
75
|
+
--card: oklch(0.2902 0.0299 233.5352);
|
|
76
|
+
--card-foreground: oklch(0.9306 0.0197 349.0785);
|
|
77
|
+
--popover: oklch(0.2902 0.0299 233.5352);
|
|
78
|
+
--popover-foreground: oklch(0.9306 0.0197 349.0785);
|
|
79
|
+
--primary: oklch(0.9195 0.0801 87.667);
|
|
80
|
+
--primary-foreground: oklch(0.2497 0.0305 234.1628);
|
|
81
|
+
--secondary: oklch(0.7794 0.0803 4.133);
|
|
82
|
+
--secondary-foreground: oklch(0.2497 0.0305 234.1628);
|
|
83
|
+
--muted: oklch(0.2713 0.0086 255.578);
|
|
84
|
+
--muted-foreground: oklch(0.7794 0.0803 4.133);
|
|
85
|
+
--accent: oklch(0.6699 0.0988 356.9762);
|
|
86
|
+
--accent-foreground: oklch(0.9306 0.0197 349.0785);
|
|
87
|
+
--destructive: oklch(0.6702 0.1806 350.3599);
|
|
88
|
+
--destructive-foreground: oklch(0.2497 0.0305 234.1628);
|
|
89
|
+
--border: oklch(0.3907 0.0399 242.2181);
|
|
90
|
+
--input: oklch(0.3093 0.0305 232.0027);
|
|
91
|
+
--ring: oklch(0.6998 0.0896 201.8672);
|
|
92
|
+
--chart-1: oklch(0.6998 0.0896 201.8672);
|
|
93
|
+
--chart-2: oklch(0.7794 0.0803 4.133);
|
|
94
|
+
--chart-3: oklch(0.6699 0.0988 356.9762);
|
|
95
|
+
--chart-4: oklch(0.4408 0.0702 217.0848);
|
|
96
|
+
--chart-5: oklch(0.2713 0.0086 255.578);
|
|
97
|
+
--sidebar: oklch(0.2303 0.027 235.9743);
|
|
98
|
+
--sidebar-foreground: oklch(0.967 0.0029 264.5419);
|
|
99
|
+
--sidebar-primary: oklch(0.6559 0.2118 354.3084);
|
|
100
|
+
--sidebar-primary-foreground: oklch(1 0 0);
|
|
101
|
+
--sidebar-accent: oklch(0.8228 0.1095 346.0184);
|
|
102
|
+
--sidebar-accent-foreground: oklch(0.2781 0.0296 256.848);
|
|
103
|
+
--sidebar-border: oklch(0.3729 0.0306 259.7328);
|
|
104
|
+
--sidebar-ring: oklch(0.6559 0.2118 354.3084);
|
|
105
|
+
--font-sans: Poppins, sans-serif;
|
|
106
|
+
--font-serif: Lora, serif;
|
|
107
|
+
--font-mono: "Fira Code", monospace;
|
|
108
|
+
--radius: 0.4rem;
|
|
109
|
+
--shadow-x: 3px;
|
|
110
|
+
--shadow-y: 3px;
|
|
111
|
+
--shadow-blur: 0px;
|
|
112
|
+
--shadow-spread: 0px;
|
|
113
|
+
--shadow-opacity: 1;
|
|
114
|
+
--shadow-color: #324859;
|
|
115
|
+
--shadow-2xs: 3px 3px 0px 0px hsl(206.1538 28.0576% 27.2549% / 0.5);
|
|
116
|
+
--shadow-xs: 3px 3px 0px 0px hsl(206.1538 28.0576% 27.2549% / 0.5);
|
|
117
|
+
--shadow-sm:
|
|
118
|
+
3px 3px 0px 0px hsl(206.1538 28.0576% 27.2549% / 1),
|
|
119
|
+
3px 1px 2px -1px hsl(206.1538 28.0576% 27.2549% / 1);
|
|
120
|
+
--shadow:
|
|
121
|
+
3px 3px 0px 0px hsl(206.1538 28.0576% 27.2549% / 1),
|
|
122
|
+
3px 1px 2px -1px hsl(206.1538 28.0576% 27.2549% / 1);
|
|
123
|
+
--shadow-md:
|
|
124
|
+
3px 3px 0px 0px hsl(206.1538 28.0576% 27.2549% / 1),
|
|
125
|
+
3px 2px 4px -1px hsl(206.1538 28.0576% 27.2549% / 1);
|
|
126
|
+
--shadow-lg:
|
|
127
|
+
3px 3px 0px 0px hsl(206.1538 28.0576% 27.2549% / 1),
|
|
128
|
+
3px 4px 6px -1px hsl(206.1538 28.0576% 27.2549% / 1);
|
|
129
|
+
--shadow-xl:
|
|
130
|
+
3px 3px 0px 0px hsl(206.1538 28.0576% 27.2549% / 1),
|
|
131
|
+
3px 8px 10px -1px hsl(206.1538 28.0576% 27.2549% / 1);
|
|
132
|
+
--shadow-2xl: 3px 3px 0px 0px hsl(206.1538 28.0576% 27.2549% / 2.5);
|
|
133
|
+
--tracking-normal: 0em;
|
|
134
|
+
--spacing: 0.25rem;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* Tailwind v4 theme integration */
|
|
138
|
+
@theme inline {
|
|
139
|
+
--color-background: var(--background);
|
|
140
|
+
--color-foreground: var(--foreground);
|
|
141
|
+
--color-card: var(--card);
|
|
142
|
+
--color-card-foreground: var(--card-foreground);
|
|
143
|
+
--color-popover: var(--popover);
|
|
144
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
145
|
+
--color-primary: var(--primary);
|
|
146
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
147
|
+
--color-secondary: var(--secondary);
|
|
148
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
149
|
+
--color-muted: var(--muted);
|
|
150
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
151
|
+
--color-accent: var(--accent);
|
|
152
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
153
|
+
--color-destructive: var(--destructive);
|
|
154
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
155
|
+
--color-border: var(--border);
|
|
156
|
+
--color-input: var(--input);
|
|
157
|
+
--color-ring: var(--ring);
|
|
158
|
+
--color-chart-1: var(--chart-1);
|
|
159
|
+
--color-chart-2: var(--chart-2);
|
|
160
|
+
--color-chart-3: var(--chart-3);
|
|
161
|
+
--color-chart-4: var(--chart-4);
|
|
162
|
+
--color-chart-5: var(--chart-5);
|
|
163
|
+
--color-sidebar: var(--sidebar);
|
|
164
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
165
|
+
--color-sidebar-primary: var(--sidebar-primary);
|
|
166
|
+
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
167
|
+
--color-sidebar-accent: var(--sidebar-accent);
|
|
168
|
+
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
169
|
+
--color-sidebar-border: var(--sidebar-border);
|
|
170
|
+
--color-sidebar-ring: var(--sidebar-ring);
|
|
171
|
+
|
|
172
|
+
--font-sans: var(--font-sans);
|
|
173
|
+
--font-mono: var(--font-mono);
|
|
174
|
+
--font-serif: var(--font-serif);
|
|
175
|
+
|
|
176
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
177
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
178
|
+
--radius-lg: var(--radius);
|
|
179
|
+
--radius-xl: calc(var(--radius) + 4px);
|
|
180
|
+
|
|
181
|
+
--shadow-2xs: var(--shadow-2xs);
|
|
182
|
+
--shadow-xs: var(--shadow-xs);
|
|
183
|
+
--shadow-sm: var(--shadow-sm);
|
|
184
|
+
--shadow: var(--shadow);
|
|
185
|
+
--shadow-md: var(--shadow-md);
|
|
186
|
+
--shadow-lg: var(--shadow-lg);
|
|
187
|
+
--shadow-xl: var(--shadow-xl);
|
|
188
|
+
--shadow-2xl: var(--shadow-2xl);
|
|
189
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// Copyright 2026 Chesapeake Computing
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import type { Config } from "tailwindcss";
|
|
5
|
+
|
|
6
|
+
const config: Config = {
|
|
7
|
+
content: [],
|
|
8
|
+
theme: {
|
|
9
|
+
extend: {
|
|
10
|
+
colors: {
|
|
11
|
+
border: "var(--border)",
|
|
12
|
+
input: "var(--input)",
|
|
13
|
+
ring: "var(--ring)",
|
|
14
|
+
background: "var(--background)",
|
|
15
|
+
foreground: "var(--foreground)",
|
|
16
|
+
primary: {
|
|
17
|
+
DEFAULT: "var(--primary)",
|
|
18
|
+
foreground: "var(--primary-foreground)",
|
|
19
|
+
},
|
|
20
|
+
secondary: {
|
|
21
|
+
DEFAULT: "var(--secondary)",
|
|
22
|
+
foreground: "var(--secondary-foreground)",
|
|
23
|
+
},
|
|
24
|
+
destructive: {
|
|
25
|
+
DEFAULT: "var(--destructive)",
|
|
26
|
+
foreground: "var(--destructive-foreground)",
|
|
27
|
+
},
|
|
28
|
+
muted: {
|
|
29
|
+
DEFAULT: "var(--muted)",
|
|
30
|
+
foreground: "var(--muted-foreground)",
|
|
31
|
+
},
|
|
32
|
+
accent: {
|
|
33
|
+
DEFAULT: "var(--accent)",
|
|
34
|
+
foreground: "var(--accent-foreground)",
|
|
35
|
+
},
|
|
36
|
+
popover: {
|
|
37
|
+
DEFAULT: "var(--popover)",
|
|
38
|
+
foreground: "var(--popover-foreground)",
|
|
39
|
+
},
|
|
40
|
+
card: {
|
|
41
|
+
DEFAULT: "var(--card)",
|
|
42
|
+
foreground: "var(--card-foreground)",
|
|
43
|
+
},
|
|
44
|
+
chart: {
|
|
45
|
+
"1": "var(--chart-1)",
|
|
46
|
+
"2": "var(--chart-2)",
|
|
47
|
+
"3": "var(--chart-3)",
|
|
48
|
+
"4": "var(--chart-4)",
|
|
49
|
+
"5": "var(--chart-5)",
|
|
50
|
+
},
|
|
51
|
+
sidebar: {
|
|
52
|
+
DEFAULT: "var(--sidebar)",
|
|
53
|
+
foreground: "var(--sidebar-foreground)",
|
|
54
|
+
primary: "var(--sidebar-primary)",
|
|
55
|
+
"primary-foreground": "var(--sidebar-primary-foreground)",
|
|
56
|
+
accent: "var(--sidebar-accent)",
|
|
57
|
+
"accent-foreground": "var(--sidebar-accent-foreground)",
|
|
58
|
+
border: "var(--sidebar-border)",
|
|
59
|
+
ring: "var(--sidebar-ring)",
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
borderRadius: {
|
|
63
|
+
lg: "var(--radius)",
|
|
64
|
+
md: "calc(var(--radius) - 2px)",
|
|
65
|
+
sm: "calc(var(--radius) - 4px)",
|
|
66
|
+
xl: "calc(var(--radius) + 4px)",
|
|
67
|
+
},
|
|
68
|
+
keyframes: {
|
|
69
|
+
"accordion-down": {
|
|
70
|
+
from: { height: "0" },
|
|
71
|
+
to: { height: "var(--radix-accordion-content-height)" },
|
|
72
|
+
},
|
|
73
|
+
"accordion-up": {
|
|
74
|
+
from: { height: "var(--radix-accordion-content-height)" },
|
|
75
|
+
to: { height: "0" },
|
|
76
|
+
},
|
|
77
|
+
"fade-in": {
|
|
78
|
+
from: { opacity: "0" },
|
|
79
|
+
to: { opacity: "1" },
|
|
80
|
+
},
|
|
81
|
+
"fade-out": {
|
|
82
|
+
from: { opacity: "1" },
|
|
83
|
+
to: { opacity: "0" },
|
|
84
|
+
},
|
|
85
|
+
"slide-in-from-top": {
|
|
86
|
+
"0%": {
|
|
87
|
+
transform: "translateY(-100%)",
|
|
88
|
+
},
|
|
89
|
+
"100%": {
|
|
90
|
+
transform: "translateY(0)",
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
"slide-in-from-bottom": {
|
|
94
|
+
"0%": {
|
|
95
|
+
transform: "translateY(100%)",
|
|
96
|
+
},
|
|
97
|
+
"100%": {
|
|
98
|
+
transform: "translateY(0)",
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
"slide-in-from-left": {
|
|
102
|
+
"0%": {
|
|
103
|
+
transform: "translateX(-100%)",
|
|
104
|
+
},
|
|
105
|
+
"100%": {
|
|
106
|
+
transform: "translateX(0)",
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
"slide-in-from-right": {
|
|
110
|
+
"0%": {
|
|
111
|
+
transform: "translateX(100%)",
|
|
112
|
+
},
|
|
113
|
+
"100%": {
|
|
114
|
+
transform: "translateX(0)",
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
"slide-out-to-top": {
|
|
118
|
+
"0%": {
|
|
119
|
+
transform: "translateY(0)",
|
|
120
|
+
},
|
|
121
|
+
"100%": {
|
|
122
|
+
transform: "translateY(-100%)",
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
"slide-out-to-bottom": {
|
|
126
|
+
"0%": {
|
|
127
|
+
transform: "translateY(0)",
|
|
128
|
+
},
|
|
129
|
+
"100%": {
|
|
130
|
+
transform: "translateY(100%)",
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
"slide-out-to-left": {
|
|
134
|
+
"0%": {
|
|
135
|
+
transform: "translateX(0)",
|
|
136
|
+
},
|
|
137
|
+
"100%": {
|
|
138
|
+
transform: "translateX(-100%)",
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
"slide-out-to-right": {
|
|
142
|
+
"0%": {
|
|
143
|
+
transform: "translateX(0)",
|
|
144
|
+
},
|
|
145
|
+
"100%": {
|
|
146
|
+
transform: "translateX(100%)",
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
animation: {
|
|
151
|
+
"accordion-down": "accordion-down 0.2s ease-out",
|
|
152
|
+
"accordion-up": "accordion-up 0.2s ease-out",
|
|
153
|
+
"fade-in": "fade-in 0.2s ease-out",
|
|
154
|
+
"fade-out": "fade-out 0.2s ease-out",
|
|
155
|
+
"slide-in-from-top": "slide-in-from-top 0.2s ease-out",
|
|
156
|
+
"slide-in-from-bottom": "slide-in-from-bottom 0.2s ease-out",
|
|
157
|
+
"slide-in-from-left": "slide-in-from-left 0.2s ease-out",
|
|
158
|
+
"slide-in-from-right": "slide-in-from-right 0.2s ease-out",
|
|
159
|
+
"slide-out-to-top": "slide-out-to-top 0.2s ease-out",
|
|
160
|
+
"slide-out-to-bottom": "slide-out-to-bottom 0.2s ease-out",
|
|
161
|
+
"slide-out-to-left": "slide-out-to-left 0.2s ease-out",
|
|
162
|
+
"slide-out-to-right": "slide-out-to-right 0.2s ease-out",
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
plugins: [],
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export default config;
|