@tac-ui/web 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.
@@ -0,0 +1,393 @@
1
+ import { generateCSSBlock, generateKeyframes } from '@tac-ui/tokens/web';
2
+ import { containers, breakpoints } from '@tac-ui/tokens';
3
+
4
+ // src/tailwind/preset.ts
5
+ function generateThemeCSS() {
6
+ return `@layer base {
7
+ :root, [data-theme="light"] {
8
+ ${generateCSSBlock("light")}
9
+ }
10
+
11
+ [data-theme="dark"] {
12
+ ${generateCSSBlock("dark")}
13
+ }
14
+
15
+ @media (prefers-color-scheme: dark) {
16
+ :root:not([data-theme="light"]) {
17
+ ${generateCSSBlock("dark")}
18
+ }
19
+ }
20
+ }
21
+
22
+ @layer base {
23
+ * {
24
+ border-color: var(--border);
25
+ }
26
+ *:not([data-no-bg-transition]) {
27
+ transition-property: background-color, color, border-color, box-shadow;
28
+ transition-duration: var(--duration-normal);
29
+ transition-timing-function: var(--ease-standard);
30
+ }
31
+ body {
32
+ background-color: var(--background);
33
+ color: var(--foreground);
34
+ font-family: var(--font-primary), system-ui, sans-serif;
35
+ -webkit-font-smoothing: antialiased;
36
+ -moz-osx-font-smoothing: grayscale;
37
+ text-rendering: optimizeLegibility;
38
+ }
39
+ }
40
+
41
+ @keyframes indicator-slide {
42
+ 0% { transform: translateX(-100%); }
43
+ 100% { transform: translateX(250%); }
44
+ }
45
+
46
+ @keyframes snackbar-in {
47
+ from { opacity: 0; transform: translateY(16px); filter: blur(4px); }
48
+ to { opacity: 1; transform: translateY(0); filter: blur(0); }
49
+ }
50
+
51
+ @keyframes snackbar-out {
52
+ from { opacity: 1; transform: translateY(0); filter: blur(0); }
53
+ to { opacity: 0; transform: translateY(10px); filter: blur(2px); }
54
+ }
55
+
56
+ @keyframes fade-in {
57
+ from { opacity: 0; }
58
+ to { opacity: 1; }
59
+ }
60
+
61
+ @keyframes dialog-in {
62
+ from { opacity: 0; transform: scale(0.95); filter: blur(4px); }
63
+ to { opacity: 1; transform: scale(1); filter: blur(0px); }
64
+ }
65
+
66
+ @keyframes scale-in {
67
+ from { opacity: 0; transform: scale(0.95) translateY(4px); filter: blur(2px); }
68
+ to { opacity: 1; transform: scale(1) translateY(0); filter: blur(0px); }
69
+ }
70
+
71
+ @keyframes toast-in {
72
+ from { opacity: 0; transform: translateY(12px); filter: blur(4px); }
73
+ to { opacity: 1; transform: translateY(0); filter: blur(0px); }
74
+ }
75
+
76
+ @keyframes toast-out {
77
+ from { opacity: 1; transform: translateY(0); filter: blur(0); }
78
+ to { opacity: 0; transform: translateY(8px); filter: blur(2px); }
79
+ }
80
+
81
+ @keyframes drawer-left-in {
82
+ from { transform: translateX(-100%); }
83
+ to { transform: translateX(0); }
84
+ }
85
+
86
+ @keyframes drawer-right-in {
87
+ from { transform: translateX(100%); }
88
+ to { transform: translateX(0); }
89
+ }
90
+
91
+ @keyframes drawer-top-in {
92
+ from { transform: translateY(-100%); }
93
+ to { transform: translateY(0); }
94
+ }
95
+
96
+ @keyframes drawer-bottom-in {
97
+ from { transform: translateY(100%); }
98
+ to { transform: translateY(0); }
99
+ }
100
+
101
+ @keyframes btn-shine {
102
+ 0% { transform: translateX(-100%) skewX(-15deg); }
103
+ 100% { transform: translateX(200%) skewX(-15deg); }
104
+ }
105
+
106
+ @keyframes shimmer {
107
+ 0% { transform: translateX(-100%); }
108
+ 100% { transform: translateX(200%); }
109
+ }
110
+
111
+ @media (prefers-reduced-motion: reduce) {
112
+ *, *::before, *::after {
113
+ animation-duration: 0.01ms !important;
114
+ animation-iteration-count: 1 !important;
115
+ transition-duration: 0.01ms !important;
116
+ }
117
+ }
118
+
119
+ ${generateKeyframes()}`;
120
+ }
121
+ var tacPreset = {
122
+ theme: {
123
+ extend: {
124
+ colors: {
125
+ background: "var(--background)",
126
+ "background-subtle": "var(--background-subtle)",
127
+ foreground: "var(--foreground)",
128
+ surface: { DEFAULT: "var(--surface)", hover: "var(--surface-hover)" },
129
+ primary: { DEFAULT: "var(--primary)", hover: "var(--primary-hover)", foreground: "var(--primary-foreground)" },
130
+ secondary: { DEFAULT: "var(--secondary)", foreground: "var(--secondary-foreground)" },
131
+ muted: { DEFAULT: "var(--muted)", foreground: "var(--muted-foreground)" },
132
+ card: { DEFAULT: "var(--card)", foreground: "var(--card-foreground)" },
133
+ border: "var(--border)",
134
+ input: "var(--input)",
135
+ ring: "var(--ring)",
136
+ point: { DEFAULT: "var(--point)", hover: "var(--point-hover)", foreground: "var(--point-foreground)", subtle: "var(--point-subtle)" },
137
+ success: { DEFAULT: "var(--success)", bg: "var(--success-bg)", foreground: "var(--success-foreground)" },
138
+ warning: { DEFAULT: "var(--warning)", bg: "var(--warning-bg)", foreground: "var(--warning-foreground)" },
139
+ error: { DEFAULT: "var(--error)", bg: "var(--error-bg)", foreground: "var(--error-foreground)" },
140
+ info: { DEFAULT: "var(--info)", bg: "var(--info-bg)", foreground: "var(--info-foreground)" },
141
+ gray: { 50: "var(--gray-50)", 100: "var(--gray-100)", 200: "var(--gray-200)", 300: "var(--gray-300)", 400: "var(--gray-400)", 500: "var(--gray-500)", 600: "var(--gray-600)", 700: "var(--gray-700)", 800: "var(--gray-800)", 900: "var(--gray-900)" },
142
+ chart: { 1: "var(--chart-1)", 2: "var(--chart-2)", 3: "var(--chart-3)", 4: "var(--chart-4)", 5: "var(--chart-5)", 6: "var(--chart-6)", 7: "var(--chart-7)", 8: "var(--chart-8)" },
143
+ "surface-base": "var(--surface-base)",
144
+ "surface-elevated-low": "var(--surface-elevated-low)",
145
+ "surface-elevated-mid": "var(--surface-elevated-mid)",
146
+ "surface-elevated-high": "var(--surface-elevated-high)",
147
+ "interactive-hover": "var(--interactive-hover)",
148
+ "interactive-pressed": "var(--interactive-pressed)",
149
+ "interactive-focus": "var(--interactive-focus)",
150
+ // Button tokens
151
+ "btn-primary": { surface: "var(--btn-primary-surface)", hover: "var(--btn-primary-hover)" },
152
+ "btn-secondary": { surface: "var(--btn-secondary-surface)", hover: "var(--btn-secondary-hover)" },
153
+ "btn-outline": { border: "var(--btn-outline-border)", "border-hover": "var(--btn-outline-border-hover)", "hover-bg": "var(--btn-outline-hover-bg)" },
154
+ "btn-ghost-hover": "var(--btn-ghost-hover)",
155
+ "btn-point": { surface: "var(--btn-point-surface)", border: "var(--btn-point-border)", "hover-surface": "var(--btn-point-hover-surface)", "hover-border": "var(--btn-point-hover-border)" },
156
+ "btn-destructive": { surface: "var(--btn-destructive-surface)", hover: "var(--btn-destructive-hover)" },
157
+ // Interactive tokens
158
+ "interactive-surface-tint": "var(--interactive-surface-tint)",
159
+ "interactive-hover-tint": "var(--interactive-hover-tint)",
160
+ // Input tokens
161
+ "input-bg": "var(--input-bg)",
162
+ "input-border-rest": "var(--input-border-rest)",
163
+ "input-border-hover": "var(--input-border-hover)",
164
+ // Dropdown tokens
165
+ "dropdown-bg": "var(--dropdown-bg)",
166
+ "dropdown-item-hover": "var(--dropdown-item-hover)",
167
+ // Card accent tokens
168
+ "card-accent": { border: "var(--card-accent-border)", "hover-border": "var(--card-accent-hover-border)" }
169
+ },
170
+ spacing: { "2xs": "var(--spacing-2xs)", xs: "var(--spacing-xs)", sm: "var(--spacing-sm)", m: "var(--spacing-m)", lg: "var(--spacing-lg)", xl: "var(--spacing-xl)", "2xl": "var(--spacing-2xl)", "3xl": "var(--spacing-3xl)" },
171
+ borderRadius: { none: "var(--radius-none)", xs: "var(--radius-xs)", sm: "var(--radius-sm)", m: "var(--radius-m)", lg: "var(--radius-lg)", xl: "var(--radius-xl)", "2xl": "var(--radius-2xl)", pill: "var(--radius-pill)" },
172
+ boxShadow: { sm: "var(--shadow-sm)", m: "var(--shadow-m)", lg: "var(--shadow-lg)", xl: "var(--shadow-xl)", glow: "var(--accent-glow)", glass: "var(--shadow-glass)", "glass-lg": "var(--shadow-glass-lg)", "gradient-glow": "var(--gradient-glow-shadow)", "focus-glow": "var(--focus-glow)", "point-glow": "var(--point-glow)", "btn-primary-energy": "var(--btn-primary-energy)", "btn-primary-inset": "var(--btn-primary-inset)", "btn-point-energy": "var(--btn-point-energy)", "glass-inset": "var(--glass-inset)", "glass-panel": "var(--glass-panel-shadow)", "input-focus-glow": "var(--input-focus-glow)", "dropdown-shadow": "var(--dropdown-shadow)", "card-accent-glow": "var(--card-accent-glow)", "card-accent-hover-glow": "var(--card-accent-hover-glow)" },
173
+ backgroundImage: {
174
+ "gradient-brand": "var(--gradient-brand)",
175
+ "gradient-brand-hover": "var(--gradient-brand-hover)",
176
+ "gradient-subtle": "var(--gradient-subtle)",
177
+ "gradient-accent": "var(--gradient-accent)",
178
+ "gradient-accent-vivid": "var(--gradient-accent-vivid)",
179
+ "gradient-glow": "var(--gradient-glow)",
180
+ "gradient-mesh": "var(--gradient-mesh)",
181
+ "gradient-surface": "var(--gradient-surface)"
182
+ },
183
+ fontFamily: { primary: ["var(--font-primary)", "system-ui", "sans-serif"], secondary: ["var(--font-secondary)", "system-ui", "sans-serif"], display: ["var(--font-display)", "var(--font-primary)", "sans-serif"] },
184
+ transitionDuration: { instant: "var(--duration-instant)", fast: "var(--duration-fast)", normal: "var(--duration-normal)", slow: "var(--duration-slow)", complex: "var(--duration-complex)" },
185
+ transitionTimingFunction: { standard: "var(--ease-standard)", "ease-in": "var(--ease-in)", "ease-out": "var(--ease-out)", "ease-in-out": "var(--ease-in-out)", bounce: "var(--ease-bounce)", spring: "var(--ease-spring)", elastic: "var(--ease-elastic)" },
186
+ screens: { sm: `${breakpoints.sm}px`, md: `${breakpoints.md}px`, lg: `${breakpoints.lg}px`, xl: `${breakpoints.xl}px`, "2xl": `${breakpoints["2xl"]}px` },
187
+ containers: { sm: `${containers.sm}px`, md: `${containers.md}px`, lg: `${containers.lg}px`, xl: `${containers.xl}px` },
188
+ zIndex: { dropdown: "var(--z-dropdown)", sticky: "var(--z-sticky)", overlay: "var(--z-overlay)", modal: "var(--z-modal)", popover: "var(--z-popover)", tooltip: "var(--z-tooltip)", toast: "var(--z-toast)" },
189
+ keyframes: {
190
+ "indicator-slide": {
191
+ "0%": { transform: "translateX(-100%)" },
192
+ "100%": { transform: "translateX(250%)" }
193
+ },
194
+ "snackbar-in": {
195
+ from: { opacity: "0", transform: "translateY(16px)", filter: "blur(4px)" },
196
+ to: { opacity: "1", transform: "translateY(0)", filter: "blur(0)" }
197
+ },
198
+ "snackbar-out": {
199
+ from: { opacity: "1", transform: "translateY(0)", filter: "blur(0)" },
200
+ to: { opacity: "0", transform: "translateY(10px)", filter: "blur(2px)" }
201
+ },
202
+ "fade-in": {
203
+ from: { opacity: "0" },
204
+ to: { opacity: "1" }
205
+ },
206
+ "dialog-in": {
207
+ from: { opacity: "0", transform: "scale(0.95)", filter: "blur(4px)" },
208
+ to: { opacity: "1", transform: "scale(1)", filter: "blur(0px)" }
209
+ },
210
+ "scale-in": {
211
+ from: { opacity: "0", transform: "scale(0.95) translateY(4px)", filter: "blur(2px)" },
212
+ to: { opacity: "1", transform: "scale(1) translateY(0)", filter: "blur(0px)" }
213
+ },
214
+ "toast-in": {
215
+ from: { opacity: "0", transform: "translateY(12px)", filter: "blur(4px)" },
216
+ to: { opacity: "1", transform: "translateY(0)", filter: "blur(0px)" }
217
+ },
218
+ "toast-out": {
219
+ from: { opacity: "1", transform: "translateY(0)", filter: "blur(0)" },
220
+ to: { opacity: "0", transform: "translateY(8px)", filter: "blur(2px)" }
221
+ },
222
+ "drawer-left-in": {
223
+ from: { transform: "translateX(-100%)" },
224
+ to: { transform: "translateX(0)" }
225
+ },
226
+ "drawer-right-in": {
227
+ from: { transform: "translateX(100%)" },
228
+ to: { transform: "translateX(0)" }
229
+ },
230
+ "drawer-top-in": {
231
+ from: { transform: "translateY(-100%)" },
232
+ to: { transform: "translateY(0)" }
233
+ },
234
+ "drawer-bottom-in": {
235
+ from: { transform: "translateY(100%)" },
236
+ to: { transform: "translateY(0)" }
237
+ },
238
+ // Dia-inspired organic spring — blur entrance animations
239
+ "blur-fade-in": {
240
+ from: { opacity: "0", filter: "blur(8px)", transform: "translateY(8px)" },
241
+ to: { opacity: "1", filter: "blur(0px)", transform: "translateY(0)" }
242
+ },
243
+ "blur-scale-in": {
244
+ from: { opacity: "0", filter: "blur(6px)", transform: "scale(0.95)" },
245
+ to: { opacity: "1", filter: "blur(0px)", transform: "scale(1)" }
246
+ },
247
+ // Elastic micro-interactions — spring overshoot with physical mass
248
+ "elastic-press": {
249
+ "0%": { transform: "scale(1)" },
250
+ "50%": { transform: "scale(0.96)" },
251
+ "100%": { transform: "scale(0.96)" }
252
+ },
253
+ "elastic-release": {
254
+ "0%": { transform: "scale(0.96)" },
255
+ "50%": { transform: "scale(1.01)" },
256
+ "100%": { transform: "scale(1)" }
257
+ },
258
+ // Spotlight pulse
259
+ "spotlight-pulse": {
260
+ "0%, 100%": { opacity: "0" },
261
+ "50%": { opacity: "1" }
262
+ },
263
+ // Float animation
264
+ float: {
265
+ "0%, 100%": { transform: "translateY(0)" },
266
+ "50%": { transform: "translateY(-6px)" }
267
+ },
268
+ // Motion token presets
269
+ "fade-in-preset": {
270
+ from: { opacity: "0" },
271
+ to: { opacity: "1" }
272
+ },
273
+ "fade-out": {
274
+ from: { opacity: "1" },
275
+ to: { opacity: "0" }
276
+ },
277
+ "slide-in-up": {
278
+ from: { opacity: "0", transform: "translateY(8px)" },
279
+ to: { opacity: "1", transform: "translateY(0)" }
280
+ },
281
+ "slide-in-down": {
282
+ from: { opacity: "0", transform: "translateY(-8px)" },
283
+ to: { opacity: "1", transform: "translateY(0)" }
284
+ },
285
+ "slide-in-left": {
286
+ from: { opacity: "0", transform: "translateX(-8px)" },
287
+ to: { opacity: "1", transform: "translateX(0)" }
288
+ },
289
+ "slide-in-right": {
290
+ from: { opacity: "0", transform: "translateX(8px)" },
291
+ to: { opacity: "1", transform: "translateX(0)" }
292
+ },
293
+ "zoom-in": {
294
+ from: { opacity: "0", transform: "scale(0.85)" },
295
+ to: { opacity: "1", transform: "scale(1)" }
296
+ },
297
+ "press-down": {
298
+ from: { transform: "scale(1)" },
299
+ to: { transform: "scale(0.97)" }
300
+ },
301
+ "lift-up": {
302
+ from: { transform: "translateY(0)" },
303
+ to: { transform: "translateY(-2px)" }
304
+ },
305
+ "gradient-shimmer": {
306
+ "0%": { backgroundPosition: "0% 50%" },
307
+ "50%": { backgroundPosition: "100% 50%" },
308
+ "100%": { backgroundPosition: "0% 50%" }
309
+ },
310
+ shimmer: {
311
+ "0%": { transform: "translateX(-100%)" },
312
+ "100%": { transform: "translateX(200%)" }
313
+ },
314
+ "shimmer-flow": {
315
+ "0%": { transform: "translateX(-100%) scale(2) rotate(20deg)" },
316
+ "100%": { transform: "translateX(200%) scale(2) rotate(20deg)" }
317
+ },
318
+ spin: {
319
+ from: { transform: "rotate(0deg)" },
320
+ to: { transform: "rotate(360deg)" }
321
+ },
322
+ pulse: {
323
+ "0%, 100%": { opacity: "1" },
324
+ "50%": { opacity: "0.5" }
325
+ },
326
+ bounce: {
327
+ "0%, 100%": { transform: "translateY(0)" },
328
+ "50%": { transform: "translateY(-4px)" }
329
+ },
330
+ "spring-press": {
331
+ "0%": { transform: "scale(1)" },
332
+ "50%": { transform: "scale(0.95)" },
333
+ "100%": { transform: "scale(1)" }
334
+ },
335
+ "spring-hover": {
336
+ "0%": { transform: "scale(1)" },
337
+ "100%": { transform: "scale(1.02)" }
338
+ },
339
+ "btn-shine": {
340
+ "0%": { transform: "translateX(-100%) skewX(-15deg)" },
341
+ "100%": { transform: "translateX(200%) skewX(-15deg)" }
342
+ }
343
+ },
344
+ animation: {
345
+ "indicator-slide": "indicator-slide 1.5s linear infinite",
346
+ // Dia-inspired organic spring — snackbar enters with blur and momentum + overshoot
347
+ "snackbar-in": "snackbar-in 0.35s cubic-bezier(0.22, 1.1, 0.36, 1)",
348
+ "snackbar-out": "snackbar-out 0.2s cubic-bezier(0.55, 0, 1, 0.45) forwards",
349
+ // Fade is simple — spring easing still adds organic deceleration
350
+ "fade-in": "fade-in 0.2s cubic-bezier(0.22, 1, 0.36, 1)",
351
+ // Dialog inflates from behind with blur — Dia overlay feel
352
+ "dialog-in": "dialog-in 0.3s cubic-bezier(0.22, 1, 0.36, 1)",
353
+ // Popovers spring up with scale + slight overshoot
354
+ "scale-in": "scale-in 0.22s cubic-bezier(0.22, 1.1, 0.36, 1)",
355
+ // Toast rises from below with blur + overshoot spring
356
+ "toast-in": "toast-in 0.35s cubic-bezier(0.22, 1.1, 0.36, 1)",
357
+ "toast-out": "toast-out 0.2s cubic-bezier(0.55, 0, 1, 0.45) forwards",
358
+ // Drawers slide with spring overshoot for physical momentum
359
+ "drawer-left-in": "drawer-left-in 0.35s cubic-bezier(0.22, 1.1, 0.36, 1)",
360
+ "drawer-right-in": "drawer-right-in 0.35s cubic-bezier(0.22, 1.1, 0.36, 1)",
361
+ "drawer-top-in": "drawer-top-in 0.35s cubic-bezier(0.22, 1.1, 0.36, 1)",
362
+ "drawer-bottom-in": "drawer-bottom-in 0.35s cubic-bezier(0.22, 1.1, 0.36, 1)",
363
+ "slide-in-up": "slide-in-up 0.25s cubic-bezier(0.22, 1, 0.36, 1)",
364
+ "slide-in-down": "slide-in-down 0.25s cubic-bezier(0.22, 1, 0.36, 1)",
365
+ "slide-in-left": "slide-in-left 0.25s cubic-bezier(0.22, 1, 0.36, 1)",
366
+ "slide-in-right": "slide-in-right 0.25s cubic-bezier(0.22, 1, 0.36, 1)",
367
+ "fade-out": "fade-out 0.15s cubic-bezier(0.55, 0, 1, 0.45)",
368
+ "zoom-in": "zoom-in 0.25s cubic-bezier(0.22, 1, 0.36, 1)",
369
+ "press-down": "press-down 0.08s cubic-bezier(0.22, 1, 0.36, 1)",
370
+ "lift-up": "lift-up 0.15s cubic-bezier(0.22, 1, 0.36, 1)",
371
+ shimmer: "shimmer 2.5s cubic-bezier(0.4, 0, 0.6, 1) infinite",
372
+ "shimmer-flow": "shimmer-flow 3s linear infinite",
373
+ spin: "spin 1s linear infinite",
374
+ pulse: "pulse 2s ease-in-out infinite",
375
+ bounce: "bounce 1s ease-in-out infinite",
376
+ "gradient-shimmer": "gradient-shimmer 3s ease-in-out infinite",
377
+ // Dia-style page-level entrances — blur resolves as element springs into place
378
+ "blur-fade-in": "blur-fade-in 0.5s cubic-bezier(0.22, 1, 0.36, 1) both",
379
+ "blur-scale-in": "blur-scale-in 0.35s cubic-bezier(0.22, 1, 0.36, 1) both",
380
+ // Spring press/release — elastic overshoot gives physical life to interactions
381
+ "elastic-press": "elastic-press 0.2s cubic-bezier(0.22, 1.2, 0.36, 1) forwards",
382
+ "elastic-release": "elastic-release 0.35s cubic-bezier(0.22, 1.2, 0.36, 1) forwards",
383
+ "spotlight-pulse": "spotlight-pulse 3s ease-in-out infinite",
384
+ float: "float 3s ease-in-out infinite",
385
+ "spring-press": "spring-press 0.3s cubic-bezier(0.22, 1.2, 0.36, 1) forwards",
386
+ "spring-hover": "spring-hover 0.15s cubic-bezier(0.22, 1, 0.36, 1) forwards",
387
+ "btn-shine": "btn-shine 0.6s cubic-bezier(0.22, 1, 0.36, 1)"
388
+ }
389
+ }
390
+ }
391
+ };
392
+
393
+ export { generateThemeCSS, tacPreset };
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@tac-ui/web",
3
+ "version": "0.1.0",
4
+ "description": "Web components for Tac UI (Next.js / React)",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ },
14
+ "./icons": {
15
+ "types": "./dist/icons.d.ts",
16
+ "import": "./dist/icons.mjs",
17
+ "require": "./dist/icons.js"
18
+ },
19
+ "./tailwind": {
20
+ "types": "./dist/tailwind/preset.d.ts",
21
+ "import": "./dist/tailwind/preset.mjs",
22
+ "require": "./dist/tailwind/preset.js"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "publishConfig": {
29
+ "access": "public"
30
+ },
31
+ "scripts": {
32
+ "build": "tsup",
33
+ "dev": "tsup --watch",
34
+ "lint": "eslint src/",
35
+ "typecheck": "tsc --noEmit",
36
+ "clean": "rm -rf dist"
37
+ },
38
+ "dependencies": {
39
+ "@tac-ui/shared": "workspace:*",
40
+ "@tac-ui/tokens": "workspace:*",
41
+ "@tac-ui/icon": "workspace:*",
42
+ "chart.js": "^4.5.1",
43
+ "class-variance-authority": "^0.7.0",
44
+ "clsx": "^2.1.0",
45
+ "framer-motion": "^12.34.0",
46
+ "tailwind-merge": "^3.4.1"
47
+ },
48
+ "peerDependencies": {
49
+ "next-themes": "^0.4.0",
50
+ "react": "^18.0.0 || ^19.0.0",
51
+ "react-dom": "^18.0.0 || ^19.0.0"
52
+ },
53
+ "peerDependenciesMeta": {
54
+ "next-themes": {
55
+ "optional": true
56
+ }
57
+ },
58
+ "devDependencies": {
59
+ "@types/react": "^19.0.0",
60
+ "@types/react-dom": "^19.0.0",
61
+ "next-themes": "^0.4.0",
62
+ "react": "^19.0.0",
63
+ "react-dom": "^19.0.0",
64
+ "tsup": "^8.3.0",
65
+ "typescript": "^5.7.0"
66
+ }
67
+ }