luaniverse 4.2.4 → 4.2.7

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/dist/styles.css CHANGED
@@ -1,6 +1,8 @@
1
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Onest:wght@400;500;600;700&display=swap') layer(base);
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Onest:wght@400;500;600;700&display=swap')
2
+ layer(base);
2
3
 
3
4
  @import 'react-day-picker/style.css';
5
+ @import './theme.css';
4
6
 
5
7
  @import 'tailwindcss' prefix(lua);
6
8
 
@@ -52,21 +54,13 @@
52
54
  --color-destructive-active: hsl(var(--destructive-active));
53
55
  --color-black: #000000;
54
56
  --color-black-hover: #333333;
55
- --color-neutral-50: #F9FAFB;
56
- --color-neutral-100: #F4F4F4;
57
- --color-neutral-200: #EBEBEB;
58
- --color-neutral-300: #E6E6E6;
59
- --color-neutral-400: #E0E0E0;
60
- --color-neutral-500: #D1D5DB;
61
- --color-neutral-600: #E5E7EB;
62
- --color-border: hsl(var(--border));
63
- --color-input: hsl(var(--input));
64
- --color-ring: hsl(var(--ring));
65
- --color-chart-1: hsl(var(--chart-1));
66
- --color-chart-2: hsl(var(--chart-2));
67
- --color-chart-3: hsl(var(--chart-3));
68
- --color-chart-4: hsl(var(--chart-4));
69
- --color-chart-5: hsl(var(--chart-5));
57
+ --color-neutral-50: #f9fafb;
58
+ --color-neutral-100: #f4f4f4;
59
+ --color-neutral-200: #ebebeb;
60
+ --color-neutral-300: #e6e6e6;
61
+ --color-neutral-400: #e0e0e0;
62
+ --color-neutral-500: #d1d5db;
63
+ --color-neutral-600: #e5e7eb;
70
64
  }
71
65
 
72
66
  /*
@@ -87,10 +81,6 @@
87
81
  }
88
82
  }
89
83
 
90
-
91
-
92
-
93
-
94
84
  @utility link-primary {
95
85
  /* Responsive breakpoints */
96
86
 
@@ -116,70 +106,16 @@
116
106
 
117
107
  @layer base {
118
108
  :root {
119
- --background: 0 0% 100%;
120
109
  --foreground: 240 10% 3.9%;
121
- --card: 0 0% 100%;
122
- --card-foreground: 240 10% 3.9%;
123
- --popover: 0 0% 100%;
124
- --popover-foreground: 240 10% 3.9%;
125
- --primary: 218 100% 59%;
126
- --primary-foreground: 0 0% 100%;
127
- --primary-hover: 218 91% 56%;
128
- --primary-active: 218 85% 52%;
129
- --secondary: 240 4.8% 95.9%;
130
- --secondary-foreground: 240 5.9% 10%;
131
- --secondary-hover: 240 4.8% 90%;
132
- --secondary-active: 240 4.8% 85%;
133
- --muted: 240 4.8% 95.9%;
134
- --muted-foreground: 240 3.8% 46.1%;
135
- --accent: 240 4.8% 95.9%;
136
- --accent-foreground: 240 5.9% 10%;
137
- --destructive: 351 100% 45%;
138
- --destructive-foreground: 0 0% 100%;
139
- --destructive-hover: 351 100% 40%;
140
- --destructive-active: 351 100% 37%;
141
- --border: 240 5.9% 90%;
142
- --input: 240 5.9% 90%;
143
- --ring: 240 5.9% 10%;
144
- --chart-1: 12 76% 61%;
145
- --chart-2: 173 58% 39%;
146
- --chart-3: 197 37% 24%;
147
- --chart-4: 43 74% 66%;
148
- --chart-5: 27 87% 67%;
149
- --radius: 0.5rem;
150
110
  }
151
111
 
112
+ @media (prefers-color-scheme: dark) {
113
+ :root {
114
+ --foreground: 240 10% 3.9%;
115
+ }
116
+ }
152
117
  .dark {
153
- --background: 240 10% 3.9%;
154
118
  --foreground: 0 0% 98%;
155
- --card: 240 10% 3.9%;
156
- --card-foreground: 0 0% 98%;
157
- --popover: 240 10% 3.9%;
158
- --popover-foreground: 0 0% 98%;
159
- --primary: 218 100% 59%;
160
- --primary-foreground: 0 0% 100%;
161
- --primary-hover: 218 91% 56%;
162
- --primary-active: 218 85% 52%;
163
- --secondary: 240 3.7% 15.9%;
164
- --secondary-foreground: 0 0% 98%;
165
- --secondary-hover: 240 3.7% 20%;
166
- --secondary-active: 240 3.7% 25%;
167
- --muted: 240 3.7% 15.9%;
168
- --muted-foreground: 240 5% 64.9%;
169
- --accent: 240 3.7% 15.9%;
170
- --accent-foreground: 0 0% 98%;
171
- --destructive: 351 100% 45%;
172
- --destructive-foreground: 0 0% 100%;
173
- --destructive-hover: 351 100% 40%;
174
- --destructive-active: 351 100% 37%;
175
- --border: 240 3.7% 15.9%;
176
- --input: 240 3.7% 15.9%;
177
- --ring: 240 4.9% 83.9%;
178
- --chart-1: 220 70% 50%;
179
- --chart-2: 160 60% 45%;
180
- --chart-3: 30 80% 55%;
181
- --chart-4: 280 65% 60%;
182
- --chart-5: 340 75% 55%;
183
119
  }
184
120
  }
185
121
 
@@ -190,16 +126,21 @@
190
126
  body {
191
127
  @apply lua:bg-background lua:text-foreground lua:font-sans;
192
128
  }
193
-
129
+
194
130
  /* Typography base styles */
195
- h1, h2, h3, h4, h5, h6 {
131
+ h1,
132
+ h2,
133
+ h3,
134
+ h4,
135
+ h5,
136
+ h6 {
196
137
  @apply lua:font-heading lua:text-foreground;
197
138
  }
198
-
139
+
199
140
  p {
200
141
  @apply lua:text-sm lua:leading-relaxed lua:font-sans lua:text-foreground;
201
142
  }
202
-
143
+
203
144
  /* Link base styles */
204
145
  a {
205
146
  @apply lua:text-primary lua:underline-offset-4 lua:hover:underline lua:focus-visible:outline-2 lua:focus-visible:outline-ring lua:focus-visible:outline-offset-2 lua:focus-visible:rounded-sm;
@@ -207,55 +148,96 @@
207
148
  }
208
149
  }
209
150
 
151
+
210
152
  /* Sheet Animation Keyframes */
211
153
  @keyframes slide-in-from-top {
212
- 0% { transform: translateY(-100%); }
213
- 100% { transform: translateY(0); }
154
+ 0% {
155
+ transform: translateY(-100%);
156
+ }
157
+ 100% {
158
+ transform: translateY(0);
159
+ }
214
160
  }
215
161
 
216
162
  @keyframes slide-in-from-bottom {
217
- 0% { transform: translateY(100%); }
218
- 100% { transform: translateY(0); }
163
+ 0% {
164
+ transform: translateY(100%);
165
+ }
166
+ 100% {
167
+ transform: translateY(0);
168
+ }
219
169
  }
220
170
 
221
171
  @keyframes slide-in-from-left {
222
- 0% { transform: translateX(-100%); }
223
- 100% { transform: translateX(0); }
172
+ 0% {
173
+ transform: translateX(-100%);
174
+ }
175
+ 100% {
176
+ transform: translateX(0);
177
+ }
224
178
  }
225
179
 
226
180
  @keyframes slide-in-from-right {
227
- 0% { transform: translateX(100%); }
228
- 100% { transform: translateX(0); }
181
+ 0% {
182
+ transform: translateX(100%);
183
+ }
184
+ 100% {
185
+ transform: translateX(0);
186
+ }
229
187
  }
230
188
 
231
189
  @keyframes slide-out-to-top {
232
- 0% { transform: translateY(0); }
233
- 100% { transform: translateY(-100%); }
190
+ 0% {
191
+ transform: translateY(0);
192
+ }
193
+ 100% {
194
+ transform: translateY(-100%);
195
+ }
234
196
  }
235
197
 
236
198
  @keyframes slide-out-to-bottom {
237
- 0% { transform: translateY(0); }
238
- 100% { transform: translateY(100%); }
199
+ 0% {
200
+ transform: translateY(0);
201
+ }
202
+ 100% {
203
+ transform: translateY(100%);
204
+ }
239
205
  }
240
206
 
241
207
  @keyframes slide-out-to-left {
242
- 0% { transform: translateX(0); }
243
- 100% { transform: translateX(-100%); }
208
+ 0% {
209
+ transform: translateX(0);
210
+ }
211
+ 100% {
212
+ transform: translateX(-100%);
213
+ }
244
214
  }
245
215
 
246
216
  @keyframes slide-out-to-right {
247
- 0% { transform: translateX(0); }
248
- 100% { transform: translateX(100%); }
217
+ 0% {
218
+ transform: translateX(0);
219
+ }
220
+ 100% {
221
+ transform: translateX(100%);
222
+ }
249
223
  }
250
224
 
251
225
  @keyframes fade-in {
252
- 0% { opacity: 0; }
253
- 100% { opacity: 1; }
226
+ 0% {
227
+ opacity: 0;
228
+ }
229
+ 100% {
230
+ opacity: 1;
231
+ }
254
232
  }
255
233
 
256
234
  @keyframes fade-out {
257
- 0% { opacity: 1; }
258
- 100% { opacity: 0; }
235
+ 0% {
236
+ opacity: 1;
237
+ }
238
+ 100% {
239
+ opacity: 0;
240
+ }
259
241
  }
260
242
 
261
243
  /* Sheet Animation Classes */
@@ -308,58 +290,58 @@
308
290
  }
309
291
 
310
292
  /* Data attribute variants for Sheet animations */
311
- .lua\:data-\[state\=open\]\:animate-in[data-state="open"] {
293
+ .lua\:data-\[state\=open\]\:animate-in[data-state='open'] {
312
294
  animation: fade-in 0.2s ease-out;
313
295
  }
314
296
 
315
- .lua\:data-\[state\=closed\]\:animate-out[data-state="closed"] {
297
+ .lua\:data-\[state\=closed\]\:animate-out[data-state='closed'] {
316
298
  animation: fade-out 0.2s ease-out;
317
299
  }
318
300
 
319
- .lua\:data-\[state\=open\]\:fade-in-0[data-state="open"] {
301
+ .lua\:data-\[state\=open\]\:fade-in-0[data-state='open'] {
320
302
  animation: fade-in 0.2s ease-out;
321
303
  }
322
304
 
323
- .lua\:data-\[state\=closed\]\:fade-out-0[data-state="closed"] {
305
+ .lua\:data-\[state\=closed\]\:fade-out-0[data-state='closed'] {
324
306
  animation: fade-out 0.2s ease-out;
325
307
  }
326
308
 
327
- .lua\:data-\[state\=open\]\:slide-in-from-top[data-state="open"] {
309
+ .lua\:data-\[state\=open\]\:slide-in-from-top[data-state='open'] {
328
310
  animation: slide-in-from-top 0.3s ease-out;
329
311
  }
330
312
 
331
- .lua\:data-\[state\=closed\]\:slide-out-to-top[data-state="closed"] {
313
+ .lua\:data-\[state\=closed\]\:slide-out-to-top[data-state='closed'] {
332
314
  animation: slide-out-to-top 0.3s ease-out;
333
315
  }
334
316
 
335
- .lua\:data-\[state\=open\]\:slide-in-from-bottom[data-state="open"] {
317
+ .lua\:data-\[state\=open\]\:slide-in-from-bottom[data-state='open'] {
336
318
  animation: slide-in-from-bottom 0.3s ease-out;
337
319
  }
338
320
 
339
- .lua\:data-\[state\=closed\]\:slide-out-to-bottom[data-state="closed"] {
321
+ .lua\:data-\[state\=closed\]\:slide-out-to-bottom[data-state='closed'] {
340
322
  animation: slide-out-to-bottom 0.3s ease-out;
341
323
  }
342
324
 
343
- .lua\:data-\[state\=open\]\:slide-in-from-left[data-state="open"] {
325
+ .lua\:data-\[state\=open\]\:slide-in-from-left[data-state='open'] {
344
326
  animation: slide-in-from-left 0.3s ease-out;
345
327
  }
346
328
 
347
- .lua\:data-\[state\=closed\]\:slide-out-to-left[data-state="closed"] {
329
+ .lua\:data-\[state\=closed\]\:slide-out-to-left[data-state='closed'] {
348
330
  animation: slide-out-to-left 0.3s ease-out;
349
331
  }
350
332
 
351
- .lua\:data-\[state\=open\]\:slide-in-from-right[data-state="open"] {
333
+ .lua\:data-\[state\=open\]\:slide-in-from-right[data-state='open'] {
352
334
  animation: slide-in-from-right 0.3s ease-out;
353
335
  }
354
336
 
355
- .lua\:data-\[state\=closed\]\:slide-out-to-right[data-state="closed"] {
337
+ .lua\:data-\[state\=closed\]\:slide-out-to-right[data-state='closed'] {
356
338
  animation: slide-out-to-right 0.3s ease-out;
357
339
  }
358
340
 
359
- .lua\:data-\[state\=open\]\:duration-500[data-state="open"] {
341
+ .lua\:data-\[state\=open\]\:duration-500[data-state='open'] {
360
342
  animation-duration: 500ms;
361
343
  }
362
344
 
363
- .lua\:data-\[state\=closed\]\:duration-300[data-state="closed"] {
345
+ .lua\:data-\[state\=closed\]\:duration-300[data-state='closed'] {
364
346
  animation-duration: 300ms;
365
- }
347
+ }
@@ -2,8 +2,8 @@ import { luaniverseSafelist } from './safelist.js';
2
2
 
3
3
  /** @type {import('tailwindcss').Config} */
4
4
  export const luaniversePreset = {
5
- // Dark mode disabled globally
6
- darkMode: false,
5
+ // Dark mode enabled using class strategy
6
+ darkMode: 'class',
7
7
  // Safelist story-specific arbitrary values that are hard to standardize
8
8
  safelist: luaniverseSafelist,
9
9
  theme: {
package/dist/theme.css ADDED
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Luaniverse Semantic Color System
3
+ *
4
+ * This theme uses a two-level token system:
5
+ * 1. @layer base: Raw HSL values (space-separated) for light mode in :root
6
+ * 2. @theme inline: Color tokens that wrap base values with hsl(var(...))
7
+ * 3. @media (prefers-color-scheme: dark): Dark mode HSL values in :root
8
+ *
9
+ * Usage:
10
+ * - Use bg-card, text-foreground, bg-primary, etc. as regular Tailwind classes
11
+ * - Tokens automatically switch based on prefers-color-scheme - NO dark: prefixes needed
12
+ * - Example: className="lua:bg-card lua:text-foreground lua:border-border"
13
+ */
14
+
15
+ @layer base {
16
+ :root {
17
+ /* Base Colors */
18
+ --background: 0 0% 100%; /* white */
19
+ --foreground: 222 47% 11%; /* gray-900 */
20
+
21
+ /* Card & Surface */
22
+ --card: 0 0% 100%; /* white */
23
+ --card-foreground: 222 47% 11%; /* gray-900 */
24
+
25
+ /* Popover */
26
+ --popover: 0 0% 100%; /* white */
27
+ --popover-foreground: 222 47% 11%; /* gray-900 */
28
+
29
+ /* Default (Emphasis - Black/Bold) */
30
+ --default: 0 0% 0%; /* black */
31
+ --default-foreground: 0 0% 100%; /* white */
32
+ --default-hover: 0 0% 10%; /* near-black */
33
+ --default-active: 0 0% 10%; /* near-black */
34
+
35
+ /* Primary (Brand - Blue) */
36
+ --primary: 221 83% 53%; /* blue-600 */
37
+ --primary-foreground: 0 0% 100%; /* white */
38
+ --primary-hover: 221 83% 45%; /* blue-700 */
39
+ --primary-active: 221 77% 40%; /* blue-800 */
40
+
41
+ /* Secondary (Neutral) */
42
+ --secondary: 220 13% 95%; /* gray-100 */
43
+ --secondary-foreground: 222 47% 11%; /* gray-900 */
44
+ --secondary-hover: 220 13% 91%; /* gray-200 */
45
+ --secondary-active: 220 13% 82%; /* gray-300 */
46
+
47
+ /* Muted */
48
+ --muted: 220 13% 95%; /* gray-100 */
49
+ --muted-foreground: 215 16% 47%; /* gray-600 */
50
+
51
+ /* Accent */
52
+ --accent: 221 83% 53%; /* blue-600 */
53
+ --accent-foreground: 0 0% 100%; /* white */
54
+
55
+ /* Accent Subtle (for tabs, pills) */
56
+ --accent-subtle: 214 100% 97%; /* blue-50 - very light blue */
57
+ --accent-subtle-foreground: 213 97% 27%; /* blue-800 */
58
+ --accent-subtle-hover: 214 100% 92%; /* blue-100 */
59
+
60
+ /* Destructive (Danger) */
61
+ --destructive: 0 84% 60%; /* red-500 */
62
+ --destructive-foreground: 0 0% 100%; /* white */
63
+ --destructive-hover: 0 72% 51%; /* red-600 */
64
+ --destructive-active: 0 74% 42%; /* red-700 */
65
+
66
+ /* Success */
67
+ --success: 142 71% 45%; /* green-600 */
68
+ --success-foreground: 0 0% 100%; /* white */
69
+ --success-hover: 142 76% 36%; /* green-700 */
70
+
71
+ /* Warning */
72
+ --warning: 38 92% 50%; /* yellow-500 */
73
+ --warning-foreground: 0 0% 100%; /* white */
74
+ --warning-hover: 43 96% 56%; /* yellow-400 */
75
+
76
+ /* Border & Input */
77
+ --border: 220 13% 91%; /* gray-200 */
78
+ --input: 220 13% 91%; /* gray-200 */
79
+ --ring: 221 83% 53%; /* blue-600 */
80
+ }
81
+ }
82
+
83
+ @theme inline {
84
+ /* Base Color Tokens */
85
+ --color-background: hsl(var(--background));
86
+ --color-foreground: hsl(var(--foreground));
87
+
88
+ /* Card & Surface Tokens */
89
+ --color-card: hsl(var(--card));
90
+ --color-card-foreground: hsl(var(--card-foreground));
91
+
92
+ /* Popover Tokens */
93
+ --color-popover: hsl(var(--popover));
94
+ --color-popover-foreground: hsl(var(--popover-foreground));
95
+
96
+ /* Default Tokens (Emphasis - Black/Bold) */
97
+ --color-default: hsl(var(--default));
98
+ --color-default-foreground: hsl(var(--default-foreground));
99
+ --color-default-hover: hsl(var(--default-hover));
100
+ --color-default-active: hsl(var(--default-active));
101
+
102
+ /* Primary Tokens (Brand - Blue) */
103
+ --color-primary: hsl(var(--primary));
104
+ --color-primary-foreground: hsl(var(--primary-foreground));
105
+ --color-primary-hover: hsl(var(--primary-hover));
106
+ --color-primary-active: hsl(var(--primary-active));
107
+
108
+ /* Secondary Tokens (Neutral - Gray) */
109
+ --color-secondary: hsl(var(--secondary));
110
+ --color-secondary-foreground: hsl(var(--secondary-foreground));
111
+ --color-secondary-hover: hsl(var(--secondary-hover));
112
+ --color-secondary-active: hsl(var(--secondary-active));
113
+
114
+ /* Muted Tokens */
115
+ --color-muted: hsl(var(--muted));
116
+ --color-muted-foreground: hsl(var(--muted-foreground));
117
+
118
+ /* Accent Tokens */
119
+ --color-accent: hsl(var(--accent));
120
+ --color-accent-foreground: hsl(var(--accent-foreground));
121
+
122
+ /* Accent Subtle Tokens (for tabs, pills) */
123
+ --color-accent-subtle: hsl(var(--accent-subtle));
124
+ --color-accent-subtle-foreground: hsl(var(--accent-subtle-foreground));
125
+ --color-accent-subtle-hover: hsl(var(--accent-subtle-hover));
126
+
127
+ /* Destructive Tokens (Danger - Red) */
128
+ --color-destructive: hsl(var(--destructive));
129
+ --color-destructive-foreground: hsl(var(--destructive-foreground));
130
+ --color-destructive-hover: hsl(var(--destructive-hover));
131
+ --color-destructive-active: hsl(var(--destructive-active));
132
+
133
+ /* Success Tokens (Green) */
134
+ --color-success: hsl(var(--success));
135
+ --color-success-foreground: hsl(var(--success-foreground));
136
+ --color-success-hover: hsl(var(--success-hover));
137
+
138
+ /* Warning Tokens (Amber) */
139
+ --color-warning: hsl(var(--warning));
140
+ --color-warning-foreground: hsl(var(--warning-foreground));
141
+ --color-warning-hover: hsl(var(--warning-hover));
142
+
143
+ /* Border, Input & Ring Tokens */
144
+ --color-border: hsl(var(--border));
145
+ --color-input: hsl(var(--input));
146
+ --color-ring: hsl(var(--ring));
147
+ }
148
+ @media (prefers-color-scheme: dark) {
149
+ :root {
150
+ /* Base Colors - Dark grays and off-whites */
151
+ --background: 222 47% 11%; /* gray-900 */
152
+ --foreground: 210 20% 98%; /* gray-50 */
153
+
154
+ /* Card & Surface - Slightly lighter than background for depth */
155
+ --card: 217 19% 18%; /* gray-800/850 - elevated surface */
156
+ --card-foreground: 210 20% 98%; /* gray-50 */
157
+
158
+ /* Popover - Slightly lighter than background for depth */
159
+ --popover: 217 19% 18%; /* gray-800/850 - elevated surface */
160
+ --popover-foreground: 210 20% 98%; /* gray-50 */
161
+
162
+ /* Default (Emphasis - Inverted for dark mode) */
163
+ --default: 220 13% 95%; /* gray-100 - light gray for dark bg */
164
+ --default-foreground: 222 47% 11%; /* gray-900 - dark text */
165
+ --default-hover: 210 20% 98%; /* gray-50 - lighter on hover */
166
+ --default-active: 220 13% 91%; /* gray-200 - darker on press */
167
+
168
+ /* Primary (Brand - Blue) - Slightly lighter for visibility */
169
+ --primary: 217 91% 60%; /* blue-500 */
170
+ --primary-foreground: 222 47% 11%; /* gray-900 */
171
+ --primary-hover: 213 94% 68%; /* blue-400 */
172
+ --primary-active: 221 83% 53%; /* blue-600 */
173
+
174
+ /* Secondary (Neutral) - Dark grays */
175
+ --secondary: 217 19% 27%; /* gray-700 */
176
+ --secondary-foreground: 210 20% 98%; /* gray-50 */
177
+ --secondary-hover: 215 25% 27%; /* gray-600 */
178
+ --secondary-active: 215 28% 17%; /* gray-800 */
179
+
180
+ /* Muted */
181
+ --muted: 217 19% 27%; /* gray-700 */
182
+ --muted-foreground: 215 16% 47%; /* gray-400 */
183
+
184
+ /* Accent */
185
+ --accent: 217 91% 60%; /* blue-500 */
186
+ --accent-foreground: 222 47% 11%; /* gray-900 */
187
+
188
+ /* Accent Subtle (for tabs, pills) */
189
+ --accent-subtle: 215 25% 27%; /* gray-700 - dark subtle bg */
190
+ --accent-subtle-foreground: 213 94% 68%; /* blue-400 - bright blue text */
191
+ --accent-subtle-hover: 217 19% 35%; /* gray-600 - lighter hover */
192
+
193
+ /* Destructive (Danger) - Slightly muted */
194
+ --destructive: 0 84% 60%; /* red-500 */
195
+ --destructive-foreground: 0 0% 100%; /* white */
196
+ --destructive-hover: 0 91% 71%; /* red-400 */
197
+ --destructive-active: 0 72% 51%; /* red-600 */
198
+
199
+ /* Success - Slightly lighter */
200
+ --success: 142 71% 45%; /* green-600 */
201
+ --success-foreground: 0 0% 100%; /* white */
202
+ --success-hover: 142 69% 58%; /* green-500 */
203
+
204
+ /* Warning - Amber tones for better dark mode */
205
+ --warning: 38 92% 50%; /* amber-500 */
206
+ --warning-foreground: 222 47% 11%; /* gray-900 */
207
+ --warning-hover: 43 96% 56%; /* amber-400 */
208
+
209
+ /* Border & Input */
210
+ --border: 215 25% 27%; /* gray-700 */
211
+ --input: 215 25% 27%; /* gray-700 */
212
+ --ring: 213 94% 68%; /* blue-400 */
213
+ }
214
+ }
215
+
216
+ .rdp-root {
217
+ /* Calendar background */
218
+ --rdp-background-color: hsl(var(--card));
219
+
220
+ /* Use semantic tokens for selected days instead of default blue */
221
+ --rdp-accent-color: hsl(var(--foreground));
222
+ --rdp-accent-background-color: hsl(var(--secondary));
223
+
224
+ /* Range selection colors */
225
+ --rdp-range_middle-background-color: hsl(var(--muted));
226
+ --rdp-range_middle-color: hsl(var(--foreground));
227
+ --rdp-range_start-background: hsl(var(--secondary));
228
+ --rdp-range_start-color: hsl(var(--default-foreground));
229
+ --rdp-range_end-background: hsl(var(--secondary));
230
+ --rdp-range_end-color: hsl(var(--foreground));
231
+
232
+ /* Today indicator - use foreground color with bold font (handled in classNames) */
233
+ --rdp-today-color: hsl(var(--foreground));
234
+ }
235
+
236
+ [data-theme='dark'] .rdp-root {
237
+ /* Calendar background and base colors for dark mode */
238
+ --rdp-background-color: hsl(var(--card));
239
+
240
+ /* Use semantic tokens for selected days in dark mode */
241
+ --rdp-accent-color: hsl(var(--foreground));
242
+ --rdp-accent-background-color: hsl(var(--secondary));
243
+
244
+ /* Range selection colors for dark mode */
245
+ --rdp-range_middle-background-color: hsl(var(--muted));
246
+ --rdp-range_middle-color: hsl(var(--foreground));
247
+ --rdp-range_start-background: hsl(var(--secondary));
248
+ --rdp-range_start-color: hsl(var(--foreground));
249
+ --rdp-range_end-background: hsl(var(--secondary));
250
+ --rdp-range_end-color: hsl(var(--foreground));
251
+
252
+ /* Today indicator for dark mode */
253
+ --rdp-today-color: hsl(var(--foreground));
254
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "luaniverse",
3
- "version": "4.2.4",
3
+ "version": "4.2.7",
4
4
  "description": "Lua Design System - A React component library for Lua applications",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -114,6 +114,7 @@
114
114
  "react-dom": "^18.3.1",
115
115
  "semantic-release": "^24.2.0",
116
116
  "storybook": "^8.3.6",
117
+ "storybook-dark-mode": "^4.0.2",
117
118
  "tailwindcss": "^4.1.11",
118
119
  "tailwindcss-animate": "^1.0.7",
119
120
  "tsup": "^8.3.5",