@darthcharles/greda 0.1.0 → 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/README.md +128 -231
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/dist/components/ui/badge.d.ts +1 -1
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/index.js +310 -310
- package/dist/index.js.map +1 -1
- package/dist/lib/utils.d.ts +1 -1
- package/dist/styles.css +85 -51
- package/dist/tokens.css +216 -50
- package/dist/utils.js +11 -5
- package/dist/utils.js.map +1 -1
- package/package.json +3 -3
package/dist/tokens.css
CHANGED
|
@@ -1,28 +1,22 @@
|
|
|
1
|
-
/*
|
|
2
|
-
|
|
3
|
-
:where(:root) {
|
|
4
|
-
|
|
5
|
-
--
|
|
6
|
-
--
|
|
7
|
-
--
|
|
8
|
-
--
|
|
9
|
-
--
|
|
10
|
-
--
|
|
11
|
-
--
|
|
12
|
-
--
|
|
13
|
-
--
|
|
14
|
-
--primary
|
|
15
|
-
--primary-hover: 220 80% 38%;
|
|
16
|
-
--secondary: 220 20% 94%;
|
|
17
|
-
--
|
|
18
|
-
--
|
|
19
|
-
--
|
|
20
|
-
--border: 220 15% 82%;
|
|
21
|
-
--input: 220 15% 82%;
|
|
22
|
-
--ring: 220 80% 45%;
|
|
23
|
-
--destructive: 0 72% 43%;
|
|
24
|
-
--destructive-foreground: 0 0% 100%;
|
|
25
|
-
--overlay: 222 47% 11% / 0.4;
|
|
1
|
+
/* Consumers customize only the generic --base-* colors. All color values are
|
|
2
|
+
space-separated HSL channels. Role assignments are owned by Greda. */
|
|
3
|
+
:where(:root, [data-color-scheme="light"]) {
|
|
4
|
+
--base-white: 0 0% 100%;
|
|
5
|
+
--base-black: 222 47% 11%;
|
|
6
|
+
--base-gray-50: 220 15% 96%;
|
|
7
|
+
--base-gray-100: 220 20% 94%;
|
|
8
|
+
--base-gray-200: 220 15% 82%;
|
|
9
|
+
--base-gray-300: 220 15% 72%;
|
|
10
|
+
--base-gray-500: 220 10% 42%;
|
|
11
|
+
--base-gray-600: 220 15% 36%;
|
|
12
|
+
--base-gray-800: 222 20% 18%;
|
|
13
|
+
--base-gray-900: 222 30% 9%;
|
|
14
|
+
--base-primary: 220 80% 45%;
|
|
15
|
+
--base-primary-hover: 220 80% 38%;
|
|
16
|
+
--base-secondary: 220 20% 94%;
|
|
17
|
+
--base-tertiary: 214 100% 96.863%;
|
|
18
|
+
--base-accent: 220 20% 94%;
|
|
19
|
+
--base-destructive: 0 72% 43%;
|
|
26
20
|
--font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
|
|
27
21
|
sans-serif;
|
|
28
22
|
--font-heading: var(--font-sans);
|
|
@@ -61,9 +55,6 @@
|
|
|
61
55
|
--dialog-width: 32.5rem;
|
|
62
56
|
--tooltip-width: 20rem;
|
|
63
57
|
--toast-width: 24rem;
|
|
64
|
-
--shadow-sm: 0 1px 2px hsl(222 47% 11% / 0.08);
|
|
65
|
-
--shadow: 0 8px 24px hsl(222 47% 11% / 0.12);
|
|
66
|
-
--shadow-dialog: 0 24px 70px hsl(222 47% 11% / 0.24);
|
|
67
58
|
--focus-width: 2px;
|
|
68
59
|
--focus-offset: 2px;
|
|
69
60
|
--disabled-opacity: 0.5;
|
|
@@ -72,31 +63,206 @@
|
|
|
72
63
|
--z-popover: 60;
|
|
73
64
|
--z-toast: 70;
|
|
74
65
|
}
|
|
75
|
-
|
|
66
|
+
|
|
67
|
+
/* Rebind roles at theme boundaries so scoped base overrides update every role.
|
|
68
|
+
Low specificity lets consumers supply base colors in either import order. */
|
|
69
|
+
:where(:root, [data-theme], [data-color-scheme]) {
|
|
76
70
|
color-scheme: light;
|
|
71
|
+
--surface-primary: var(--base-white);
|
|
72
|
+
--surface-secondary: var(--base-gray-100);
|
|
73
|
+
--surface-tertiary: var(--base-tertiary);
|
|
74
|
+
--surface-raised: var(--base-gray-50);
|
|
75
|
+
--surface-inverse: var(--base-black);
|
|
76
|
+
--text-primary: var(--base-black);
|
|
77
|
+
--text-secondary: var(--base-gray-600);
|
|
78
|
+
--text-muted: var(--base-gray-500);
|
|
79
|
+
--text-inverse: var(--base-white);
|
|
80
|
+
--text-action: var(--base-primary);
|
|
81
|
+
--border-primary: var(--base-gray-200);
|
|
82
|
+
--border-secondary: var(--base-gray-100);
|
|
83
|
+
--border-inverse: var(--base-gray-600);
|
|
84
|
+
--border-action: var(--base-primary);
|
|
85
|
+
|
|
86
|
+
/* Existing component tokens derive from the same generic base palette. */
|
|
87
|
+
--background: var(--surface-primary);
|
|
88
|
+
--foreground: var(--text-primary);
|
|
89
|
+
--card: var(--surface-raised);
|
|
90
|
+
--card-foreground: var(--text-primary);
|
|
91
|
+
--popover: var(--surface-raised);
|
|
92
|
+
--popover-foreground: var(--text-primary);
|
|
93
|
+
--accent: var(--base-accent);
|
|
94
|
+
--accent-foreground: var(--text-primary);
|
|
95
|
+
--primary: var(--base-primary);
|
|
96
|
+
--primary-foreground: var(--base-white);
|
|
97
|
+
--primary-hover: var(--base-primary-hover);
|
|
98
|
+
--secondary: var(--base-secondary);
|
|
99
|
+
--secondary-foreground: var(--text-primary);
|
|
100
|
+
--muted: var(--surface-secondary);
|
|
101
|
+
--muted-foreground: var(--text-muted);
|
|
102
|
+
--border: var(--border-primary);
|
|
103
|
+
--input: var(--border-primary);
|
|
104
|
+
--ring: var(--base-primary);
|
|
105
|
+
--destructive: var(--base-destructive);
|
|
106
|
+
--destructive-foreground: var(--base-white);
|
|
107
|
+
--overlay: var(--base-black) / 0.4;
|
|
108
|
+
--shadow-sm: 0 1px 2px hsl(var(--base-black) / 0.08);
|
|
109
|
+
--shadow: 0 8px 24px hsl(var(--base-black) / 0.12);
|
|
110
|
+
--shadow-dialog: 0 24px 70px hsl(var(--base-black) / 0.24);
|
|
77
111
|
}
|
|
112
|
+
|
|
78
113
|
/* Opt in independently of the consumer's brand theme. */
|
|
79
114
|
:where([data-color-scheme="dark"]) {
|
|
80
115
|
color-scheme: dark;
|
|
81
|
-
--
|
|
82
|
-
--
|
|
83
|
-
--
|
|
84
|
-
--
|
|
85
|
-
--
|
|
86
|
-
--
|
|
87
|
-
--
|
|
88
|
-
--
|
|
89
|
-
--
|
|
90
|
-
--
|
|
91
|
-
--primary
|
|
92
|
-
--secondary:
|
|
93
|
-
--
|
|
94
|
-
--
|
|
95
|
-
--
|
|
96
|
-
--border:
|
|
97
|
-
--
|
|
98
|
-
--
|
|
99
|
-
--destructive:
|
|
100
|
-
--
|
|
101
|
-
|
|
116
|
+
--base-primary: 217 90% 70%;
|
|
117
|
+
--base-primary-hover: 217 90% 78%;
|
|
118
|
+
--base-secondary: 222 20% 22%;
|
|
119
|
+
--base-tertiary: 218 40% 18%;
|
|
120
|
+
--base-accent: 222 20% 22%;
|
|
121
|
+
--base-destructive: 0 80% 72%;
|
|
122
|
+
--surface-primary: var(--base-gray-900);
|
|
123
|
+
--surface-secondary: var(--base-gray-800);
|
|
124
|
+
--surface-raised: var(--base-gray-800);
|
|
125
|
+
--surface-inverse: var(--base-white);
|
|
126
|
+
--text-primary: var(--base-white);
|
|
127
|
+
--text-secondary: var(--base-gray-300);
|
|
128
|
+
--text-muted: var(--base-gray-300);
|
|
129
|
+
--text-inverse: var(--base-black);
|
|
130
|
+
--border-primary: var(--base-gray-600);
|
|
131
|
+
--border-secondary: var(--base-gray-800);
|
|
132
|
+
--border-inverse: var(--base-gray-200);
|
|
133
|
+
--primary-foreground: var(--base-black);
|
|
134
|
+
--destructive-foreground: var(--base-black);
|
|
135
|
+
--overlay: var(--base-black) / 0.7;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
/* Tailwind 4: import this file from your Tailwind CSS entry point. */
|
|
140
|
+
@layer theme {
|
|
141
|
+
@theme inline {
|
|
142
|
+
--color-background: hsl(var(--background));
|
|
143
|
+
--color-foreground: hsl(var(--foreground));
|
|
144
|
+
--color-card: hsl(var(--card));
|
|
145
|
+
--color-card-foreground: hsl(var(--card-foreground));
|
|
146
|
+
--color-popover: hsl(var(--popover));
|
|
147
|
+
--color-popover-foreground: hsl(var(--popover-foreground));
|
|
148
|
+
--color-accent: hsl(var(--accent));
|
|
149
|
+
--color-accent-foreground: hsl(var(--accent-foreground));
|
|
150
|
+
--greda-bg-primary: var(--primary);
|
|
151
|
+
--greda-text-primary: var(--text-primary);
|
|
152
|
+
--greda-border-primary: var(--border-primary);
|
|
153
|
+
--color-primary-foreground: hsl(var(--primary-foreground));
|
|
154
|
+
--color-primary-hover: hsl(var(--primary-hover));
|
|
155
|
+
--greda-bg-secondary: var(--secondary);
|
|
156
|
+
--greda-text-secondary: var(--text-secondary);
|
|
157
|
+
--greda-border-secondary: var(--border-secondary);
|
|
158
|
+
--color-secondary-foreground: hsl(var(--secondary-foreground));
|
|
159
|
+
--greda-bg-muted: var(--muted);
|
|
160
|
+
--greda-text-muted: var(--text-muted);
|
|
161
|
+
--greda-border-muted: var(--muted);
|
|
162
|
+
--color-muted-foreground: hsl(var(--muted-foreground));
|
|
163
|
+
--color-border: hsl(var(--border));
|
|
164
|
+
--color-input: hsl(var(--input));
|
|
165
|
+
--color-ring: hsl(var(--ring));
|
|
166
|
+
--color-destructive: hsl(var(--destructive));
|
|
167
|
+
--color-destructive-foreground: hsl(var(--destructive-foreground));
|
|
168
|
+
--color-overlay: hsl(var(--overlay));
|
|
169
|
+
--greda-surface-primary: var(--surface-primary);
|
|
170
|
+
--greda-surface-secondary: var(--surface-secondary);
|
|
171
|
+
--greda-surface-tertiary: var(--surface-tertiary);
|
|
172
|
+
--greda-surface-raised: var(--surface-raised);
|
|
173
|
+
--greda-surface-inverse: var(--surface-inverse);
|
|
174
|
+
--greda-text-inverse: var(--text-inverse);
|
|
175
|
+
--greda-text-action: var(--text-action);
|
|
176
|
+
--greda-border-inverse: var(--border-inverse);
|
|
177
|
+
--greda-border-action: var(--border-action);
|
|
178
|
+
--spacing: var(--spacing-unit);
|
|
179
|
+
--spacing-0: var(--space-0);
|
|
180
|
+
--spacing-0\.5: var(--space-0-5);
|
|
181
|
+
--spacing-1: var(--space-1);
|
|
182
|
+
--spacing-1\.5: var(--space-1-5);
|
|
183
|
+
--spacing-2: var(--space-2);
|
|
184
|
+
--spacing-2\.5: var(--space-2-5);
|
|
185
|
+
--spacing-3: var(--space-3);
|
|
186
|
+
--spacing-3\.5: var(--space-3-5);
|
|
187
|
+
--spacing-4: var(--space-4);
|
|
188
|
+
--spacing-5: var(--space-5);
|
|
189
|
+
--spacing-6: var(--space-6);
|
|
190
|
+
--spacing-8: var(--space-8);
|
|
191
|
+
--spacing-9: var(--space-9);
|
|
192
|
+
--spacing-10: var(--space-10);
|
|
193
|
+
--spacing-12: var(--space-12);
|
|
194
|
+
--spacing-16: var(--space-16);
|
|
195
|
+
--spacing-20: var(--space-20);
|
|
196
|
+
--spacing-24: var(--space-24);
|
|
197
|
+
--spacing-32: var(--space-32);
|
|
198
|
+
--font-sans: var(--font-sans);
|
|
199
|
+
--font-heading: var(--font-heading);
|
|
200
|
+
--text-xs: var(--font-size-xs);
|
|
201
|
+
--text-xs--line-height: var(--line-height);
|
|
202
|
+
--text-sm: var(--font-size-sm);
|
|
203
|
+
--text-sm--line-height: var(--line-height);
|
|
204
|
+
--text-base: var(--font-size-md);
|
|
205
|
+
--text-base--line-height: var(--line-height);
|
|
206
|
+
--text-lg: var(--font-size-lg);
|
|
207
|
+
--text-lg--line-height: var(--line-height);
|
|
208
|
+
--font-weight-medium: var(--font-weight-medium);
|
|
209
|
+
--font-weight-semibold: var(--font-weight-bold);
|
|
210
|
+
--radius-sm: var(--radius-sm);
|
|
211
|
+
--radius-md: var(--radius);
|
|
212
|
+
--radius-lg: var(--radius-lg);
|
|
213
|
+
--radius-xl: var(--radius-lg);
|
|
214
|
+
--radius-full: var(--radius-full);
|
|
215
|
+
--shadow: var(--shadow);
|
|
216
|
+
--shadow-sm: var(--shadow-sm);
|
|
217
|
+
--shadow-md: var(--shadow);
|
|
218
|
+
--shadow-lg: var(--shadow-dialog);
|
|
219
|
+
--container-lg: var(--dialog-width);
|
|
220
|
+
--default-transition-duration: var(--duration);
|
|
221
|
+
--default-border-width: var(--border-width);
|
|
222
|
+
--ring-width-1: var(--focus-width);
|
|
223
|
+
--ring-width-2: var(--focus-width);
|
|
224
|
+
--ring-offset-width-2: var(--focus-offset);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
@custom-variant dark (&:where([data-color-scheme="dark"], [data-color-scheme="dark"] *));
|
|
229
|
+
|
|
230
|
+
@utility bg-* {
|
|
231
|
+
background-color: hsl(--value(--greda-bg-*));
|
|
232
|
+
background-color: hsl(--value(--greda-bg-*) / calc(--modifier(integer) * 1%));
|
|
233
|
+
background-color: hsl(--value(--greda-bg-*) / --modifier([number], [percentage]));
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
@utility surface-* {
|
|
237
|
+
background-color: hsl(--value(--greda-surface-*));
|
|
238
|
+
background-color: hsl(--value(--greda-surface-*) / calc(--modifier(integer) * 1%));
|
|
239
|
+
background-color: hsl(--value(--greda-surface-*) / --modifier([number], [percentage]));
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
@utility text-* {
|
|
243
|
+
color: hsl(--value(--greda-text-*));
|
|
244
|
+
color: hsl(--value(--greda-text-*) / calc(--modifier(integer) * 1%));
|
|
245
|
+
color: hsl(--value(--greda-text-*) / --modifier([number], [percentage]));
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
@utility border-* {
|
|
249
|
+
border-color: hsl(--value(--greda-border-*));
|
|
250
|
+
border-color: hsl(--value(--greda-border-*) / calc(--modifier(integer) * 1%));
|
|
251
|
+
border-color: hsl(--value(--greda-border-*) / --modifier([number], [percentage]));
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
@utility z-overlay {
|
|
255
|
+
z-index: var(--z-overlay);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
@utility z-popover {
|
|
259
|
+
z-index: var(--z-popover);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
@utility z-toast {
|
|
263
|
+
z-index: var(--z-toast);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
@utility opacity-disabled {
|
|
267
|
+
opacity: var(--disabled-opacity);
|
|
102
268
|
}
|
package/dist/utils.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { clsx as e } from "clsx";
|
|
2
|
-
import { extendTailwindMerge as
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import { extendTailwindMerge as o } from "tailwind-merge";
|
|
3
|
+
const t = o({
|
|
4
|
+
extend: {
|
|
5
|
+
classGroups: {
|
|
6
|
+
"bg-color": [{ surface: ["primary", "secondary", "tertiary", "raised", "inverse"] }]
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
function s(...r) {
|
|
11
|
+
return t(e(r));
|
|
6
12
|
}
|
|
7
13
|
export {
|
|
8
|
-
|
|
14
|
+
s as cn
|
|
9
15
|
};
|
|
10
16
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../src/lib/utils.ts"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../src/lib/utils.ts"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n \"bg-color\": [{ surface: [\"primary\", \"secondary\", \"tertiary\", \"raised\", \"inverse\"] }],\n },\n },\n});\n\n/** Combine conditional classes and resolve conflicting Tailwind utilities. */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],"names":["twMerge","extendTailwindMerge","cn","inputs","clsx"],"mappings":";;AAGA,MAAMA,IAAUC,EAAoB;AAAA,EAClC,QAAQ;AAAA,IACN,aAAa;AAAA,MACX,YAAY,CAAC,EAAE,SAAS,CAAC,WAAW,aAAa,YAAY,UAAU,SAAS,EAAA,CAAG;AAAA,IAAA;AAAA,EACrF;AAEJ,CAAC;AAGM,SAASC,KAAMC,GAAsB;AAC1C,SAAOH,EAAQI,EAAKD,CAAM,CAAC;AAC7B;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darthcharles/greda",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Generic React components with a complete, overridable base theme.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -50,8 +50,7 @@
|
|
|
50
50
|
"release": "npm run check && changeset publish",
|
|
51
51
|
"prepack": "npm run build",
|
|
52
52
|
"test:browser": "playwright test",
|
|
53
|
-
"validate:stories": "node scripts/validate-stories.mjs"
|
|
54
|
-
"docs:tokens": "node scripts/generate-token-reference.mjs"
|
|
53
|
+
"validate:stories": "node scripts/validate-stories.mjs"
|
|
55
54
|
},
|
|
56
55
|
"dependencies": {
|
|
57
56
|
"@radix-ui/react-checkbox": "^1.0.0",
|
|
@@ -91,6 +90,7 @@
|
|
|
91
90
|
"storybook": "^10.6.3",
|
|
92
91
|
"tailwindcss": "^3.4.17",
|
|
93
92
|
"tailwindcss-animate": "^1.0.7",
|
|
93
|
+
"tailwindcss-v4": "npm:tailwindcss@^4.3.3",
|
|
94
94
|
"typescript": "^5.9.0",
|
|
95
95
|
"vite": "^7.0.0",
|
|
96
96
|
"vitest": "^3.2.0"
|