luaniverse 4.2.23 → 4.2.25

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/safelist.js CHANGED
@@ -221,6 +221,7 @@ export const luaniverseSafelist = [
221
221
  'lua:border-primary',
222
222
  'lua:border-secondary',
223
223
  'lua:border-destructive',
224
+ 'lua:border-danger',
224
225
  'lua:border-success',
225
226
  'lua:border-warning',
226
227
  'lua:border-info',
@@ -280,7 +281,14 @@ export const luaniverseSafelist = [
280
281
  'lua:bg-accent',
281
282
  'lua:text-accent-foreground',
282
283
 
283
- // Semantic Color Tokens - Destructive (Danger - Red)
284
+ // Semantic Color Tokens - Danger (Error/Validation Indicators)
285
+ 'lua:text-danger',
286
+ 'lua:border-danger',
287
+ 'lua:bg-danger',
288
+ 'lua:text-danger-foreground',
289
+ 'lua:hover:bg-danger-hover',
290
+
291
+ // Semantic Color Tokens - Destructive (Action - Dark Maroon)
284
292
  'lua:bg-destructive',
285
293
  'lua:text-destructive-foreground',
286
294
  'lua:bg-destructive-hover',
@@ -464,6 +472,34 @@ export const luaniverseSafelist = [
464
472
  'lua:before:min-w-[100px]',
465
473
  'lua:md:before:content-none',
466
474
 
475
+ // Button loading state
476
+ 'lua-btn-loading',
477
+ 'lua-btn-loader-dot',
478
+
479
+ // Button
480
+ 'lua:gap-1.5',
481
+ 'lua:h-7',
482
+ 'lua:h-9',
483
+ 'lua:h-12',
484
+ 'lua:leading-5',
485
+ 'lua:leading-6',
486
+ 'lua:size-4',
487
+ 'lua:text-current',
488
+ 'lua:pl-3',
489
+ 'lua:pr-3',
490
+ 'lua:disabled:bg-black/5',
491
+ 'lua:disabled:text-black/15',
492
+ 'lua:disabled:shadow-none',
493
+ 'lua:disabled:border-transparent',
494
+ 'lua:active:bg-primary-active',
495
+ 'lua:active:text-primary-foreground',
496
+ 'lua:active:bg-secondary-active',
497
+ 'lua:active:bg-secondary-hover',
498
+ 'lua:active:bg-secondary',
499
+ 'lua:active:bg-default-active',
500
+ 'lua:active:bg-destructive-active',
501
+ 'lua:hover:bg-muted',
502
+
467
503
  // IconButton
468
504
  'lua:size-7',
469
505
  'lua:size-10',
@@ -483,7 +519,7 @@ export const luaniverseSafelist = [
483
519
  'lua:data-[state=checked]:bg-primary',
484
520
  'lua:data-[state=checked]:text-primary-foreground',
485
521
  'lua:data-[state=checked]:border-primary',
486
- 'lua:aria-[invalid=true]:border-destructive',
522
+ 'lua:aria-[invalid=true]:border-danger',
487
523
  'lua:disabled:opacity-50',
488
524
  'lua:disabled:cursor-not-allowed',
489
525
  'lua:focus-visible:ring-offset-2',
@@ -647,7 +683,9 @@ export const luaniverseSafelist = [
647
683
  'lua:border-input',
648
684
  'lua:focus-visible:ring-ring',
649
685
  'lua:border-destructive',
686
+ 'lua:border-danger',
650
687
  'lua:focus-visible:ring-destructive',
688
+ 'lua:focus-visible:ring-danger',
651
689
  'lua:border-success',
652
690
  'lua:focus-visible:ring-success',
653
691
  'lua:opacity-50',
package/dist/safelist.txt CHANGED
@@ -5,7 +5,7 @@
5
5
  # Usage in your CSS:
6
6
  # @source "./node_modules/@lua-ai-global/luaniverse/dist/safelist.txt";
7
7
  #
8
- # Total classes: 654
8
+ # Total classes: 686
9
9
 
10
10
  lua:bg-emphasis-base
11
11
  lua:bg-emphasis-hover
@@ -185,6 +185,7 @@ lua:border-border
185
185
  lua:border-primary
186
186
  lua:border-secondary
187
187
  lua:border-destructive
188
+ lua:border-danger
188
189
  lua:border-success
189
190
  lua:border-warning
190
191
  lua:border-info
@@ -229,6 +230,11 @@ lua:bg-muted
229
230
  lua:text-muted-foreground
230
231
  lua:bg-accent
231
232
  lua:text-accent-foreground
233
+ lua:text-danger
234
+ lua:border-danger
235
+ lua:bg-danger
236
+ lua:text-danger-foreground
237
+ lua:hover:bg-danger-hover
232
238
  lua:bg-destructive
233
239
  lua:text-destructive-foreground
234
240
  lua:bg-destructive-hover
@@ -393,6 +399,30 @@ lua:before:font-normal
393
399
  lua:before:mr-4
394
400
  lua:before:min-w-[100px]
395
401
  lua:md:before:content-none
402
+ lua-btn-loading
403
+ lua-btn-loader-dot
404
+ lua:gap-1.5
405
+ lua:h-7
406
+ lua:h-9
407
+ lua:h-12
408
+ lua:leading-5
409
+ lua:leading-6
410
+ lua:size-4
411
+ lua:text-current
412
+ lua:pl-3
413
+ lua:pr-3
414
+ lua:disabled:bg-black/5
415
+ lua:disabled:text-black/15
416
+ lua:disabled:shadow-none
417
+ lua:disabled:border-transparent
418
+ lua:active:bg-primary-active
419
+ lua:active:text-primary-foreground
420
+ lua:active:bg-secondary-active
421
+ lua:active:bg-secondary-hover
422
+ lua:active:bg-secondary
423
+ lua:active:bg-default-active
424
+ lua:active:bg-destructive-active
425
+ lua:hover:bg-muted
396
426
  lua:size-7
397
427
  lua:size-10
398
428
  lua:size-12
@@ -409,7 +439,7 @@ lua:outline-hidden
409
439
  lua:data-[state=checked]:bg-primary
410
440
  lua:data-[state=checked]:text-primary-foreground
411
441
  lua:data-[state=checked]:border-primary
412
- lua:aria-[invalid=true]:border-destructive
442
+ lua:aria-[invalid=true]:border-danger
413
443
  lua:disabled:opacity-50
414
444
  lua:disabled:cursor-not-allowed
415
445
  lua:focus-visible:ring-offset-2
@@ -555,7 +585,9 @@ lua:focus-visible:ring-offset-background
555
585
  lua:border-input
556
586
  lua:focus-visible:ring-ring
557
587
  lua:border-destructive
588
+ lua:border-danger
558
589
  lua:focus-visible:ring-destructive
590
+ lua:focus-visible:ring-danger
559
591
  lua:border-success
560
592
  lua:focus-visible:ring-success
561
593
  lua:opacity-50
package/dist/theme.css CHANGED
@@ -29,14 +29,14 @@
29
29
  /* Default (Emphasis - Black/Bold) */
30
30
  --default: 0 0% 0%;
31
31
  --default-foreground: 0 0% 100%;
32
- --default-hover: 0 0% 10%;
33
- --default-active: 0 0% 10%;
32
+ --default-hover: 0 0% 20%;
33
+ --default-active: 0 0% 30%;
34
34
 
35
35
  /* Primary (Brand - Blue) */
36
- --primary: 221 83% 53%;
36
+ --primary: 218 100% 59%;
37
37
  --primary-foreground: 0 0% 100%;
38
- --primary-hover: 221 83% 45%;
39
- --primary-active: 221 77% 40%;
38
+ --primary-hover: 218 74% 53%;
39
+ --primary-active: 218 66% 48%;
40
40
 
41
41
  /* Secondary (Neutral) */
42
42
  --secondary: 220 13% 95%;
@@ -49,7 +49,7 @@
49
49
  --muted-foreground: 215 16% 47%;
50
50
 
51
51
  /* Accent */
52
- --accent: 221 83% 53%;
52
+ --accent: 218 100% 59%;
53
53
  --accent-foreground: 0 0% 100%;
54
54
 
55
55
  /* Accent Subtle (for tabs, pills) */
@@ -57,11 +57,16 @@
57
57
  --accent-subtle-foreground: 213 97% 27%;
58
58
  --accent-subtle-hover: 214 100% 92%;
59
59
 
60
- /* Destructive (Danger) */
61
- --destructive: 0 84% 60%;
60
+ /* Destructive (Action - Dark Maroon for button fills) */
61
+ --destructive: 0 63% 31%;
62
62
  --destructive-foreground: 0 0% 100%;
63
- --destructive-hover: 0 72% 51%;
64
- --destructive-active: 0 74% 42%;
63
+ --destructive-hover: 0 63% 36%;
64
+ --destructive-active: 0 63% 26%;
65
+
66
+ /* Danger (Indicator - Bright red for errors, alerts, validation) */
67
+ --danger: 0 84% 60%;
68
+ --danger-foreground: 0 0% 100%;
69
+ --danger-hover: 0 72% 51%;
65
70
 
66
71
  /* Success */
67
72
  --success: 142 71% 45%;
@@ -81,12 +86,13 @@
81
86
  /* Border & Input */
82
87
  --border: 220 13% 87%;
83
88
  --input: 220 13% 87%;
84
- --ring: 221 83% 53%;
89
+ --ring: 218 100% 59%;
85
90
 
86
91
  /* Semantic Border Tokens */
87
- --border-primary: 221 83% 53%;
92
+ --border-primary: 218 100% 59%;
88
93
  --border-secondary: 220 13% 87%;
89
- --border-destructive: 0 84% 60%;
94
+ --border-destructive: 0 63% 31%;
95
+ --border-danger: 0 84% 60%;
90
96
  --border-success: 142 71% 45%;
91
97
  --border-warning: 38 92% 50%;
92
98
  --border-info: 217 91% 60%;
@@ -137,12 +143,17 @@
137
143
  --color-accent-subtle-foreground: hsl(var(--accent-subtle-foreground));
138
144
  --color-accent-subtle-hover: hsl(var(--accent-subtle-hover));
139
145
 
140
- /* Destructive Tokens (Danger - Red) */
146
+ /* Destructive Tokens (Action - Dark Maroon) */
141
147
  --color-destructive: hsl(var(--destructive));
142
148
  --color-destructive-foreground: hsl(var(--destructive-foreground));
143
149
  --color-destructive-hover: hsl(var(--destructive-hover));
144
150
  --color-destructive-active: hsl(var(--destructive-active));
145
151
 
152
+ /* Danger Tokens (Indicator - Bright Red) */
153
+ --color-danger: hsl(var(--danger));
154
+ --color-danger-foreground: hsl(var(--danger-foreground));
155
+ --color-danger-hover: hsl(var(--danger-hover));
156
+
146
157
  /* Success Tokens (Green) */
147
158
  --color-success: hsl(var(--success));
148
159
  --color-success-foreground: hsl(var(--success-foreground));
@@ -167,6 +178,7 @@
167
178
  --color-border-primary: hsl(var(--border-primary));
168
179
  --color-border-secondary: hsl(var(--border-secondary));
169
180
  --color-border-destructive: hsl(var(--border-destructive));
181
+ --color-border-danger: hsl(var(--border-danger));
170
182
  --color-border-success: hsl(var(--border-success));
171
183
  --color-border-warning: hsl(var(--border-warning));
172
184
  --color-border-info: hsl(var(--border-info));
@@ -216,12 +228,17 @@
216
228
  --accent-subtle-foreground: 213 94% 68%;
217
229
  --accent-subtle-hover: 217 19% 35%;
218
230
 
219
- /* Destructive (Danger) - Bright enough for readability */
231
+ /* Destructive (Action) - Inverted for dark mode */
220
232
  --destructive: 0 84% 60%;
221
233
  --destructive-foreground: 0 0% 98%;
222
234
  --destructive-hover: 0 91% 71%;
223
235
  --destructive-active: 0 72% 51%;
224
236
 
237
+ /* Danger (Indicator) - Bright red for errors on dark backgrounds */
238
+ --danger: 0 84% 60%;
239
+ --danger-foreground: 0 0% 98%;
240
+ --danger-hover: 0 91% 71%;
241
+
225
242
  /* Success - Slightly lighter */
226
243
  --success: 142 71% 45%;
227
244
  --success-foreground: 0 0% 100%;
@@ -246,12 +263,88 @@
246
263
  --border-primary: 217 91% 60%;
247
264
  --border-secondary: 220 13% 24%;
248
265
  --border-destructive: 0 84% 60%;
266
+ --border-danger: 0 84% 60%;
249
267
  --border-success: 142 71% 45%;
250
268
  --border-warning: 38 92% 50%;
251
269
  --border-info: 213 97% 70%;
252
270
  }
253
271
  }
254
272
 
273
+ /* Button gradient shine overlay - subtle white-to-transparent highlight from Figma */
274
+ .lua-btn-shine {
275
+ position: relative;
276
+ overflow: hidden;
277
+ }
278
+ .lua-btn-shine::before {
279
+ content: '';
280
+ position: absolute;
281
+ inset: 0;
282
+ border-radius: inherit;
283
+ pointer-events: none;
284
+ z-index: 1;
285
+ }
286
+ .lua-btn-shine-brand::before {
287
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0) 100%);
288
+ }
289
+ .lua-btn-shine-destructive::before {
290
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0) 100%);
291
+ }
292
+ .lua-btn-shine:disabled::before {
293
+ display: none;
294
+ }
295
+
296
+ @keyframes button-loader-pulse {
297
+ 0%, 100% { opacity: 0.35; transform: scale(0.95); }
298
+ 50% { opacity: 1; transform: scale(1); }
299
+ }
300
+
301
+ .lua-btn-loader-dot {
302
+ animation: button-loader-pulse 1.4s ease-in-out infinite;
303
+ }
304
+
305
+ .lua-btn-loader-dot:nth-child(2) {
306
+ animation-delay: 0.2s;
307
+ }
308
+
309
+ .lua-btn-loader-dot:nth-child(3) {
310
+ animation-delay: 0.4s;
311
+ }
312
+
313
+ .lua-btn-loading[data-loading='true'] {
314
+ --lua-loading-bg: hsl(220 13% 95%);
315
+ --lua-loading-text: hsl(220 9% 46%);
316
+ background-color: var(--lua-loading-bg) !important;
317
+ color: var(--lua-loading-text) !important;
318
+ border-color: transparent !important;
319
+ }
320
+
321
+ .lua-btn-loading[data-loading='true'][data-variant='brand'] {
322
+ --lua-loading-bg: hsl(218 100% 59% / 0.15);
323
+ --lua-loading-text: hsl(218 100% 59%);
324
+ }
325
+
326
+ .lua-btn-loading[data-loading='true'][data-variant='destructive'] {
327
+ --lua-loading-bg: hsl(0 63% 31% / 0.12);
328
+ --lua-loading-text: hsl(0 63% 31%);
329
+ }
330
+
331
+ @media (prefers-color-scheme: dark) {
332
+ .lua-btn-loading[data-loading='true'] {
333
+ --lua-loading-bg: hsl(220 13% 16%);
334
+ --lua-loading-text: hsl(220 9% 65%);
335
+ }
336
+
337
+ .lua-btn-loading[data-loading='true'][data-variant='brand'] {
338
+ --lua-loading-bg: hsl(217 91% 60% / 0.2);
339
+ --lua-loading-text: hsl(213 97% 70%);
340
+ }
341
+
342
+ .lua-btn-loading[data-loading='true'][data-variant='destructive'] {
343
+ --lua-loading-bg: hsl(0 84% 60% / 0.15);
344
+ --lua-loading-text: hsl(0 91% 71%);
345
+ }
346
+ }
347
+
255
348
  .rdp-root {
256
349
  /* Calendar background */
257
350
  --rdp-background-color: hsl(var(--surface));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "luaniverse",
3
- "version": "4.2.23",
3
+ "version": "4.2.25",
4
4
  "description": "Lua Design System - A React component library for Lua applications",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",