luaniverse 4.2.24 → 4.2.26

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
@@ -113,6 +113,10 @@ export const luaniverseSafelist = [
113
113
  'lua:focus-visible:bg-warning-base',
114
114
 
115
115
  // Semantic Color Tokens - Disabled State
116
+ 'lua:bg-disabled',
117
+ 'lua:text-disabled-foreground',
118
+ 'lua:disabled:bg-disabled',
119
+ 'lua:disabled:text-disabled-foreground',
116
120
  'lua:bg-disabled-bg',
117
121
  'lua:text-disabled-text',
118
122
  'lua:border-disabled-border',
@@ -221,6 +225,7 @@ export const luaniverseSafelist = [
221
225
  'lua:border-primary',
222
226
  'lua:border-secondary',
223
227
  'lua:border-destructive',
228
+ 'lua:border-danger',
224
229
  'lua:border-success',
225
230
  'lua:border-warning',
226
231
  'lua:border-info',
@@ -280,7 +285,14 @@ export const luaniverseSafelist = [
280
285
  'lua:bg-accent',
281
286
  'lua:text-accent-foreground',
282
287
 
283
- // Semantic Color Tokens - Destructive (Danger - Red)
288
+ // Semantic Color Tokens - Danger (Error/Validation Indicators)
289
+ 'lua:text-danger',
290
+ 'lua:border-danger',
291
+ 'lua:bg-danger',
292
+ 'lua:text-danger-foreground',
293
+ 'lua:hover:bg-danger-hover',
294
+
295
+ // Semantic Color Tokens - Destructive (Action - Dark Maroon)
284
296
  'lua:bg-destructive',
285
297
  'lua:text-destructive-foreground',
286
298
  'lua:bg-destructive-hover',
@@ -464,6 +476,34 @@ export const luaniverseSafelist = [
464
476
  'lua:before:min-w-[100px]',
465
477
  'lua:md:before:content-none',
466
478
 
479
+ // Button loading state
480
+ 'lua-btn-loading',
481
+ 'lua-btn-loader-dot',
482
+
483
+ // Button
484
+ 'lua:gap-1.5',
485
+ 'lua:h-7',
486
+ 'lua:h-9',
487
+ 'lua:h-12',
488
+ 'lua:leading-5',
489
+ 'lua:leading-6',
490
+ 'lua:size-4',
491
+ 'lua:text-current',
492
+ 'lua:pl-3',
493
+ 'lua:pr-3',
494
+ 'lua:disabled:bg-black/5',
495
+ 'lua:disabled:text-black/15',
496
+ 'lua:disabled:shadow-none',
497
+ 'lua:disabled:border-transparent',
498
+ 'lua:active:bg-primary-active',
499
+ 'lua:active:text-primary-foreground',
500
+ 'lua:active:bg-secondary-active',
501
+ 'lua:active:bg-secondary-hover',
502
+ 'lua:active:bg-secondary',
503
+ 'lua:active:bg-default-active',
504
+ 'lua:active:bg-destructive-active',
505
+ 'lua:hover:bg-muted',
506
+
467
507
  // IconButton
468
508
  'lua:size-7',
469
509
  'lua:size-10',
@@ -483,7 +523,7 @@ export const luaniverseSafelist = [
483
523
  'lua:data-[state=checked]:bg-primary',
484
524
  'lua:data-[state=checked]:text-primary-foreground',
485
525
  'lua:data-[state=checked]:border-primary',
486
- 'lua:aria-[invalid=true]:border-destructive',
526
+ 'lua:aria-[invalid=true]:border-danger',
487
527
  'lua:disabled:opacity-50',
488
528
  'lua:disabled:cursor-not-allowed',
489
529
  'lua:focus-visible:ring-offset-2',
@@ -647,7 +687,9 @@ export const luaniverseSafelist = [
647
687
  'lua:border-input',
648
688
  'lua:focus-visible:ring-ring',
649
689
  'lua:border-destructive',
690
+ 'lua:border-danger',
650
691
  'lua:focus-visible:ring-destructive',
692
+ 'lua:focus-visible:ring-danger',
651
693
  'lua:border-success',
652
694
  'lua:focus-visible:ring-success',
653
695
  '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: 690
9
9
 
10
10
  lua:bg-emphasis-base
11
11
  lua:bg-emphasis-hover
@@ -99,6 +99,10 @@ lua:active:bg-warning-base
99
99
  lua:active:bg-warning-hover
100
100
  lua:active:bg-warning-active
101
101
  lua:focus-visible:bg-warning-base
102
+ lua:bg-disabled
103
+ lua:text-disabled-foreground
104
+ lua:disabled:bg-disabled
105
+ lua:disabled:text-disabled-foreground
102
106
  lua:bg-disabled-bg
103
107
  lua:text-disabled-text
104
108
  lua:border-disabled-border
@@ -185,6 +189,7 @@ lua:border-border
185
189
  lua:border-primary
186
190
  lua:border-secondary
187
191
  lua:border-destructive
192
+ lua:border-danger
188
193
  lua:border-success
189
194
  lua:border-warning
190
195
  lua:border-info
@@ -229,6 +234,11 @@ lua:bg-muted
229
234
  lua:text-muted-foreground
230
235
  lua:bg-accent
231
236
  lua:text-accent-foreground
237
+ lua:text-danger
238
+ lua:border-danger
239
+ lua:bg-danger
240
+ lua:text-danger-foreground
241
+ lua:hover:bg-danger-hover
232
242
  lua:bg-destructive
233
243
  lua:text-destructive-foreground
234
244
  lua:bg-destructive-hover
@@ -393,6 +403,30 @@ lua:before:font-normal
393
403
  lua:before:mr-4
394
404
  lua:before:min-w-[100px]
395
405
  lua:md:before:content-none
406
+ lua-btn-loading
407
+ lua-btn-loader-dot
408
+ lua:gap-1.5
409
+ lua:h-7
410
+ lua:h-9
411
+ lua:h-12
412
+ lua:leading-5
413
+ lua:leading-6
414
+ lua:size-4
415
+ lua:text-current
416
+ lua:pl-3
417
+ lua:pr-3
418
+ lua:disabled:bg-black/5
419
+ lua:disabled:text-black/15
420
+ lua:disabled:shadow-none
421
+ lua:disabled:border-transparent
422
+ lua:active:bg-primary-active
423
+ lua:active:text-primary-foreground
424
+ lua:active:bg-secondary-active
425
+ lua:active:bg-secondary-hover
426
+ lua:active:bg-secondary
427
+ lua:active:bg-default-active
428
+ lua:active:bg-destructive-active
429
+ lua:hover:bg-muted
396
430
  lua:size-7
397
431
  lua:size-10
398
432
  lua:size-12
@@ -409,7 +443,7 @@ lua:outline-hidden
409
443
  lua:data-[state=checked]:bg-primary
410
444
  lua:data-[state=checked]:text-primary-foreground
411
445
  lua:data-[state=checked]:border-primary
412
- lua:aria-[invalid=true]:border-destructive
446
+ lua:aria-[invalid=true]:border-danger
413
447
  lua:disabled:opacity-50
414
448
  lua:disabled:cursor-not-allowed
415
449
  lua:focus-visible:ring-offset-2
@@ -555,7 +589,9 @@ lua:focus-visible:ring-offset-background
555
589
  lua:border-input
556
590
  lua:focus-visible:ring-ring
557
591
  lua:border-destructive
592
+ lua:border-danger
558
593
  lua:focus-visible:ring-destructive
594
+ lua:focus-visible:ring-danger
559
595
  lua:border-success
560
596
  lua:focus-visible:ring-success
561
597
  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,17 @@
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%;
90
+
91
+ /* Disabled State (buttons, inputs when disabled) */
92
+ --disabled: 220 13% 95%;
93
+ --disabled-foreground: 220 9% 46%;
85
94
 
86
95
  /* Semantic Border Tokens */
87
- --border-primary: 221 83% 53%;
96
+ --border-primary: 218 100% 59%;
88
97
  --border-secondary: 220 13% 87%;
89
- --border-destructive: 0 84% 60%;
98
+ --border-destructive: 0 63% 31%;
99
+ --border-danger: 0 84% 60%;
90
100
  --border-success: 142 71% 45%;
91
101
  --border-warning: 38 92% 50%;
92
102
  --border-info: 217 91% 60%;
@@ -137,12 +147,17 @@
137
147
  --color-accent-subtle-foreground: hsl(var(--accent-subtle-foreground));
138
148
  --color-accent-subtle-hover: hsl(var(--accent-subtle-hover));
139
149
 
140
- /* Destructive Tokens (Danger - Red) */
150
+ /* Destructive Tokens (Action - Dark Maroon) */
141
151
  --color-destructive: hsl(var(--destructive));
142
152
  --color-destructive-foreground: hsl(var(--destructive-foreground));
143
153
  --color-destructive-hover: hsl(var(--destructive-hover));
144
154
  --color-destructive-active: hsl(var(--destructive-active));
145
155
 
156
+ /* Danger Tokens (Indicator - Bright Red) */
157
+ --color-danger: hsl(var(--danger));
158
+ --color-danger-foreground: hsl(var(--danger-foreground));
159
+ --color-danger-hover: hsl(var(--danger-hover));
160
+
146
161
  /* Success Tokens (Green) */
147
162
  --color-success: hsl(var(--success));
148
163
  --color-success-foreground: hsl(var(--success-foreground));
@@ -163,10 +178,15 @@
163
178
  --color-input: hsl(var(--input));
164
179
  --color-ring: hsl(var(--ring));
165
180
 
181
+ /* Disabled State Tokens */
182
+ --color-disabled: hsl(var(--disabled));
183
+ --color-disabled-foreground: hsl(var(--disabled-foreground));
184
+
166
185
  /* Semantic Border Tokens */
167
186
  --color-border-primary: hsl(var(--border-primary));
168
187
  --color-border-secondary: hsl(var(--border-secondary));
169
188
  --color-border-destructive: hsl(var(--border-destructive));
189
+ --color-border-danger: hsl(var(--border-danger));
170
190
  --color-border-success: hsl(var(--border-success));
171
191
  --color-border-warning: hsl(var(--border-warning));
172
192
  --color-border-info: hsl(var(--border-info));
@@ -216,12 +236,17 @@
216
236
  --accent-subtle-foreground: 213 94% 68%;
217
237
  --accent-subtle-hover: 217 19% 35%;
218
238
 
219
- /* Destructive (Danger) - Bright enough for readability */
239
+ /* Destructive (Action) - Inverted for dark mode */
220
240
  --destructive: 0 84% 60%;
221
241
  --destructive-foreground: 0 0% 98%;
222
242
  --destructive-hover: 0 91% 71%;
223
243
  --destructive-active: 0 72% 51%;
224
244
 
245
+ /* Danger (Indicator) - Bright red for errors on dark backgrounds */
246
+ --danger: 0 84% 60%;
247
+ --danger-foreground: 0 0% 98%;
248
+ --danger-hover: 0 91% 71%;
249
+
225
250
  /* Success - Slightly lighter */
226
251
  --success: 142 71% 45%;
227
252
  --success-foreground: 0 0% 100%;
@@ -242,16 +267,96 @@
242
267
  --input: 220 13% 24%;
243
268
  --ring: 217 70% 60%;
244
269
 
270
+ /* Disabled State - visible on dark surfaces */
271
+ --disabled: 220 13% 20%;
272
+ --disabled-foreground: 220 9% 58%;
273
+
245
274
  /* Semantic Border Tokens - Dark Mode */
246
275
  --border-primary: 217 91% 60%;
247
276
  --border-secondary: 220 13% 24%;
248
277
  --border-destructive: 0 84% 60%;
278
+ --border-danger: 0 84% 60%;
249
279
  --border-success: 142 71% 45%;
250
280
  --border-warning: 38 92% 50%;
251
281
  --border-info: 213 97% 70%;
252
282
  }
253
283
  }
254
284
 
285
+ /* Button gradient shine overlay - subtle white-to-transparent highlight from Figma */
286
+ .lua-btn-shine {
287
+ position: relative;
288
+ overflow: hidden;
289
+ }
290
+ .lua-btn-shine::before {
291
+ content: '';
292
+ position: absolute;
293
+ inset: 0;
294
+ border-radius: inherit;
295
+ pointer-events: none;
296
+ z-index: 1;
297
+ }
298
+ .lua-btn-shine-brand::before {
299
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0) 100%);
300
+ }
301
+ .lua-btn-shine-destructive::before {
302
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0) 100%);
303
+ }
304
+ .lua-btn-shine:disabled::before {
305
+ display: none;
306
+ }
307
+
308
+ @keyframes button-loader-pulse {
309
+ 0%, 100% { opacity: 0.35; transform: scale(0.95); }
310
+ 50% { opacity: 1; transform: scale(1); }
311
+ }
312
+
313
+ .lua-btn-loader-dot {
314
+ animation: button-loader-pulse 1.4s ease-in-out infinite;
315
+ }
316
+
317
+ .lua-btn-loader-dot:nth-child(2) {
318
+ animation-delay: 0.2s;
319
+ }
320
+
321
+ .lua-btn-loader-dot:nth-child(3) {
322
+ animation-delay: 0.4s;
323
+ }
324
+
325
+ .lua-btn-loading[data-loading='true'] {
326
+ --lua-loading-bg: hsl(220 13% 95%);
327
+ --lua-loading-text: hsl(220 9% 46%);
328
+ background-color: var(--lua-loading-bg) !important;
329
+ color: var(--lua-loading-text) !important;
330
+ border-color: transparent !important;
331
+ }
332
+
333
+ .lua-btn-loading[data-loading='true'][data-variant='brand'] {
334
+ --lua-loading-bg: hsl(218 100% 59% / 0.15);
335
+ --lua-loading-text: hsl(218 100% 59%);
336
+ }
337
+
338
+ .lua-btn-loading[data-loading='true'][data-variant='destructive'] {
339
+ --lua-loading-bg: hsl(0 63% 31% / 0.12);
340
+ --lua-loading-text: hsl(0 63% 31%);
341
+ }
342
+
343
+ @media (prefers-color-scheme: dark) {
344
+ .lua-btn-loading[data-loading='true'] {
345
+ --lua-loading-bg: hsl(220 13% 16%);
346
+ --lua-loading-text: hsl(220 9% 65%);
347
+ }
348
+
349
+ .lua-btn-loading[data-loading='true'][data-variant='brand'] {
350
+ --lua-loading-bg: hsl(217 91% 60% / 0.2);
351
+ --lua-loading-text: hsl(213 97% 70%);
352
+ }
353
+
354
+ .lua-btn-loading[data-loading='true'][data-variant='destructive'] {
355
+ --lua-loading-bg: hsl(0 84% 60% / 0.15);
356
+ --lua-loading-text: hsl(0 91% 71%);
357
+ }
358
+ }
359
+
255
360
  .rdp-root {
256
361
  /* Calendar background */
257
362
  --rdp-background-color: hsl(var(--surface));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "luaniverse",
3
- "version": "4.2.24",
3
+ "version": "4.2.26",
4
4
  "description": "Lua Design System - A React component library for Lua applications",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",