nexa-ui-kit 0.11.5 → 0.11.8

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.
Files changed (95) hide show
  1. package/dist/components/NAlert.js +2 -14
  2. package/dist/components/NAlert.nexa +3 -14
  3. package/dist/components/NAutocomplete.js +1 -1
  4. package/dist/components/NAutocomplete.nexa +2 -1
  5. package/dist/components/NAvatar.js +0 -5
  6. package/dist/components/NAvatar.nexa +1 -5
  7. package/dist/components/NBadge.js +0 -6
  8. package/dist/components/NBadge.nexa +1 -6
  9. package/dist/components/NBottomSheet.js +0 -5
  10. package/dist/components/NBottomSheet.nexa +1 -5
  11. package/dist/components/NButton.js +202 -294
  12. package/dist/components/NButton.nexa +224 -318
  13. package/dist/components/NCard.js +39 -82
  14. package/dist/components/NCard.nexa +27 -71
  15. package/dist/components/NCheckbox.js +77 -60
  16. package/dist/components/NCheckbox.nexa +71 -45
  17. package/dist/components/NChips.nexa +1 -0
  18. package/dist/components/NDataTable.js +1 -313
  19. package/dist/components/NDataTable.nexa +2 -314
  20. package/dist/components/NDatepicker.js +4 -25
  21. package/dist/components/NDatepicker.nexa +5 -25
  22. package/dist/components/NForm.nexa +1 -0
  23. package/dist/components/NFormField.js +0 -5
  24. package/dist/components/NFormField.nexa +1 -5
  25. package/dist/components/NImage.js +1 -6
  26. package/dist/components/NImage.nexa +2 -6
  27. package/dist/components/NInput.js +96 -263
  28. package/dist/components/NInput.nexa +89 -259
  29. package/dist/components/NInputNumber.nexa +1 -1
  30. package/dist/components/NModal.js +1 -118
  31. package/dist/components/NModal.nexa +2 -119
  32. package/dist/components/NMultiSelect.js +1 -1
  33. package/dist/components/NMultiSelect.nexa +2 -1
  34. package/dist/components/NPaginator.js +1 -11
  35. package/dist/components/NPaginator.nexa +2 -11
  36. package/dist/components/NPassword.nexa +1 -0
  37. package/dist/components/NProgressBar.js +0 -11
  38. package/dist/components/NProgressBar.nexa +1 -11
  39. package/dist/components/NRadio.js +1 -8
  40. package/dist/components/NRadio.nexa +2 -8
  41. package/dist/components/NScrollView.js +0 -6
  42. package/dist/components/NScrollView.nexa +1 -6
  43. package/dist/components/NSelect.js +7 -35
  44. package/dist/components/NSelect.nexa +8 -35
  45. package/dist/components/NSkeleton.js +3 -9
  46. package/dist/components/NSkeleton.nexa +4 -9
  47. package/dist/components/NSwitch.js +0 -6
  48. package/dist/components/NSwitch.nexa +1 -6
  49. package/dist/components/NTabs.js +0 -11
  50. package/dist/components/NTabs.nexa +1 -11
  51. package/dist/components/NTag.js +1 -11
  52. package/dist/components/NTag.nexa +2 -11
  53. package/dist/components/NToastContainer.js +3 -27
  54. package/dist/components/NToastContainer.nexa +4 -27
  55. package/dist/components/NTooltip.js +0 -13
  56. package/dist/components/NTooltip.nexa +1 -13
  57. package/dist/components/NTreeMenu.js +1 -21
  58. package/dist/components/NTreeMenu.nexa +2 -21
  59. package/dist/components/NVirtualList.js +0 -2
  60. package/dist/components/NVirtualList.nexa +1 -2
  61. package/dist/styles/tokens.css +82 -173
  62. package/package.json +4 -4
  63. package/src/components/NAlert.nexa +3 -14
  64. package/src/components/NAutocomplete.nexa +2 -1
  65. package/src/components/NAvatar.nexa +1 -5
  66. package/src/components/NBadge.nexa +1 -6
  67. package/src/components/NBottomSheet.nexa +1 -5
  68. package/src/components/NButton.nexa +224 -318
  69. package/src/components/NCard.nexa +27 -71
  70. package/src/components/NCheckbox.nexa +71 -45
  71. package/src/components/NChips.nexa +1 -0
  72. package/src/components/NDataTable.nexa +2 -314
  73. package/src/components/NDatepicker.nexa +5 -25
  74. package/src/components/NForm.nexa +1 -0
  75. package/src/components/NFormField.nexa +1 -5
  76. package/src/components/NImage.nexa +2 -6
  77. package/src/components/NInput.nexa +89 -259
  78. package/src/components/NInputNumber.nexa +1 -1
  79. package/src/components/NModal.nexa +2 -119
  80. package/src/components/NMultiSelect.nexa +2 -1
  81. package/src/components/NPaginator.nexa +2 -11
  82. package/src/components/NPassword.nexa +1 -0
  83. package/src/components/NProgressBar.nexa +1 -11
  84. package/src/components/NRadio.nexa +2 -8
  85. package/src/components/NScrollView.nexa +1 -6
  86. package/src/components/NSelect.nexa +8 -35
  87. package/src/components/NSkeleton.nexa +4 -9
  88. package/src/components/NSwitch.nexa +1 -6
  89. package/src/components/NTabs.nexa +1 -11
  90. package/src/components/NTag.nexa +2 -11
  91. package/src/components/NToastContainer.nexa +4 -27
  92. package/src/components/NTooltip.nexa +1 -13
  93. package/src/components/NTreeMenu.nexa +2 -21
  94. package/src/components/NVirtualList.nexa +1 -2
  95. package/src/styles/tokens.css +82 -173
@@ -83,18 +83,15 @@ const end = computed(() => Math.min((safeFirst.value || 0) + (safeRows.value ||
83
83
  background: var(--n-color-surface);
84
84
  font-family: var(--n-font-sans);
85
85
  }
86
-
87
86
  .n-paginator-report {
88
87
  color: var(--n-color-text-muted);
89
88
  font-size: var(--n-text-xs);
90
89
  }
91
-
92
90
  .n-paginator-center {
93
91
  display: flex;
94
92
  align-items: center;
95
93
  gap: var(--n-space-2);
96
94
  }
97
-
98
95
  .n-pg-btn {
99
96
  background: transparent;
100
97
  border: 1px solid var(--n-color-border);
@@ -102,31 +99,26 @@ const end = computed(() => Math.min((safeFirst.value || 0) + (safeRows.value ||
102
99
  border-radius: var(--n-radius-md);
103
100
  padding: 0.3rem 0.55rem;
104
101
  cursor: pointer;
105
- transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
102
+ transition: color var(--n-transition-fast); cubic-bezier(0.16, 1, 0.3, 1);
106
103
  display: inline-flex;
107
104
  align-items: center;
108
105
  justify-content: center;
109
106
  }
110
-
111
107
  .n-pg-btn:hover:not(:disabled) {
112
108
  background: var(--n-color-glass);
113
109
  transform: scale(1.05);
114
110
  }
115
-
116
111
  .n-pg-btn:active:not(:disabled) {
117
112
  transform: scale(0.97);
118
113
  }
119
-
120
114
  .n-pg-btn:focus-visible {
121
115
  outline: 2px solid var(--n-color-primary);
122
116
  outline-offset: 2px;
123
117
  }
124
-
125
118
  .n-pg-btn:disabled {
126
119
  opacity: 0.5;
127
120
  cursor: not-allowed;
128
121
  }
129
-
130
122
  .n-pg-page {
131
123
  min-width: 2.5rem;
132
124
  text-align: center;
@@ -138,7 +130,6 @@ const end = computed(() => Math.min((safeFirst.value || 0) + (safeRows.value ||
138
130
  border-radius: var(--n-radius-md);
139
131
  line-height: 1.4;
140
132
  }
141
-
142
133
  .n-pg-select {
143
134
  background: var(--n-color-bg);
144
135
  border: 1px solid var(--n-color-border);
@@ -150,10 +141,10 @@ const end = computed(() => Math.min((safeFirst.value || 0) + (safeRows.value ||
150
141
  cursor: pointer;
151
142
  transition: border-color 0.2s cubic-bezier(0.16, 1, 0.3, 1);
152
143
  }
153
-
154
144
  .n-pg-select:focus-visible {
155
145
  border-color: var(--n-color-primary);
156
146
  outline: 2px solid var(--n-color-primary);
157
147
  outline-offset: 2px;
158
148
  }
149
+
159
150
  </style>
@@ -176,4 +176,5 @@ const toggle = (e) => {
176
176
  .n-password-req-icon { width: 14px; display:inline-flex; justify-content:center; flex-shrink:0; }
177
177
  .n-password-wrapper.is-disabled { opacity: 0.5; cursor: not-allowed; background: var(--n-color-surface-alt); }
178
178
  .n-password-wrapper.is-disabled .n-password-input { cursor: not-allowed; }
179
+
179
180
  </style>
@@ -36,19 +36,15 @@ const percentage = computed(() => Math.min(100, Math.max(0, (props.value / props
36
36
  gap: var(--n-space-3);
37
37
  width: 100%;
38
38
  }
39
-
40
39
  .n-progress-track {
41
40
  flex: 1;
42
41
  background: var(--n-color-surface-alt);
43
42
  border-radius: var(--n-radius-full);
44
43
  overflow: hidden;
45
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.06);
46
44
  }
47
-
48
45
  .is-sm .n-progress-track { height: 8px; }
49
46
  .is-md .n-progress-track { height: 12px; }
50
47
  .is-lg .n-progress-track { height: 16px; }
51
-
52
48
  .n-progress-bar {
53
49
  height: 100%;
54
50
  border-radius: var(--n-radius-full);
@@ -60,13 +56,11 @@ const percentage = computed(() => Math.min(100, Math.max(0, (props.value / props
60
56
  min-width: 0;
61
57
  box-shadow: 0 0 8px rgba(99, 102, 241, 0.3);
62
58
  }
63
-
64
59
  .is-primary { background: var(--n-color-primary); box-shadow: 0 0 8px rgba(99, 102, 241, 0.3); }
65
60
  .is-success { background: var(--n-color-success); box-shadow: 0 0 8px rgba(34, 197, 94, 0.3); }
66
61
  .is-danger { background: var(--n-color-danger); box-shadow: 0 0 8px rgba(239, 68, 68, 0.3); }
67
62
  .is-warning { background: var(--n-color-warning); box-shadow: 0 0 8px rgba(234, 179, 8, 0.3); }
68
63
  .is-info { background: var(--n-color-info); box-shadow: 0 0 8px rgba(59, 130, 246, 0.3); }
69
-
70
64
  .n-progress-label {
71
65
  color: white;
72
66
  font-size: 0.65rem;
@@ -74,11 +68,9 @@ const percentage = computed(() => Math.min(100, Math.max(0, (props.value / props
74
68
  white-space: nowrap;
75
69
  line-height: 1;
76
70
  }
77
-
78
71
  .is-lg .n-progress-label {
79
72
  font-size: var(--n-text-xs);
80
73
  }
81
-
82
74
  .n-progress-label-outside {
83
75
  font-size: var(--n-text-xs);
84
76
  font-weight: var(--n-weight-semibold);
@@ -87,7 +79,6 @@ const percentage = computed(() => Math.min(100, Math.max(0, (props.value / props
87
79
  min-width: 3rem;
88
80
  text-align: right;
89
81
  }
90
-
91
82
  .is-striped .n-progress-bar {
92
83
  background-image: linear-gradient(
93
84
  45deg,
@@ -101,13 +92,12 @@ const percentage = computed(() => Math.min(100, Math.max(0, (props.value / props
101
92
  );
102
93
  background-size: 1rem 1rem;
103
94
  }
104
-
105
95
  .is-animated .n-progress-bar {
106
96
  animation: n-progress-stripe 1s linear infinite;
107
97
  }
108
-
109
98
  @keyframes n-progress-stripe {
110
99
  from { background-position: 1rem 0; }
111
100
  to { background-position: 0 0; }
112
101
  }
102
+
113
103
  </style>
@@ -34,7 +34,6 @@ const select = () => {
34
34
  cursor: pointer;
35
35
  user-select: none;
36
36
  }
37
-
38
37
  .n-radio-circle {
39
38
  width: 22px;
40
39
  height: 22px;
@@ -43,15 +42,13 @@ const select = () => {
43
42
  display: flex;
44
43
  align-items: center;
45
44
  justify-content: center;
46
- transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
45
+ transition: color var(--n-transition-fast); cubic-bezier(0.16, 1, 0.3, 1);
47
46
  flex-shrink: 0;
48
47
  }
49
-
50
48
  .is-checked .n-radio-circle {
51
49
  border-color: var(--n-color-primary);
52
50
  box-shadow: 0 0 0 3px var(--n-color-primary-light), 0 0 12px rgba(99, 102, 241, 0.25);
53
51
  }
54
-
55
52
  .n-radio-dot {
56
53
  width: 11px;
57
54
  height: 11px;
@@ -59,24 +56,21 @@ const select = () => {
59
56
  background: var(--n-color-primary);
60
57
  animation: n-radio-dot-in 0.2s cubic-bezier(0.16, 1, 0.3, 1);
61
58
  }
62
-
63
59
  @keyframes n-radio-dot-in {
64
60
  from { transform: scale(0); }
65
61
  to { transform: scale(1); }
66
62
  }
67
-
68
63
  .n-radio-label {
69
64
  font-size: var(--n-text-sm);
70
65
  color: var(--n-color-text);
71
66
  font-weight: var(--n-weight-medium);
72
67
  }
73
-
74
68
  .is-disabled {
75
69
  opacity: 0.5;
76
70
  cursor: not-allowed;
77
71
  }
78
-
79
72
  .n-radio:hover:not(.is-disabled) .n-radio-circle {
80
73
  border-color: var(--n-color-primary);
81
74
  }
75
+
82
76
  </style>
@@ -99,13 +99,11 @@ const onScroll = (e) => {
99
99
  overscroll-behavior: contain;
100
100
  position: relative;
101
101
  }
102
-
103
102
  .n-scroll-view--horizontal {
104
103
  overflow-y: hidden;
105
104
  overflow-x: auto;
106
105
  display: flex;
107
106
  }
108
-
109
107
  .n-scroll-view-ptr {
110
108
  display: flex;
111
109
  align-items: center;
@@ -113,11 +111,9 @@ const onScroll = (e) => {
113
111
  overflow: hidden;
114
112
  transition: height 0.1s;
115
113
  }
116
-
117
114
  .n-scroll-view-ptr.is-refreshing {
118
115
  height: 52px !important;
119
116
  }
120
-
121
117
  .n-scroll-view-spinner {
122
118
  font-size: 24px;
123
119
  color: var(--n-color-primary, #6366f1);
@@ -125,12 +121,11 @@ const onScroll = (e) => {
125
121
  line-height: 1;
126
122
  transform-origin: center;
127
123
  }
128
-
129
124
  .n-scroll-view-ptr.is-refreshing .n-scroll-view-spinner {
130
125
  animation: n-spin 0.8s linear infinite;
131
126
  }
132
-
133
127
  @keyframes n-spin {
134
128
  to { transform: rotate(360deg) scale(1); }
135
129
  }
130
+
136
131
  </style>
@@ -277,7 +277,6 @@ onBeforeUnmount(() => {
277
277
  width: 100%;
278
278
  font-family: var(--n-font-sans);
279
279
  }
280
-
281
280
  .n-select-label {
282
281
  display: block;
283
282
  font-size: var(--n-text-sm);
@@ -285,7 +284,6 @@ onBeforeUnmount(() => {
285
284
  color: var(--n-color-text-secondary);
286
285
  margin-bottom: var(--n-space-2);
287
286
  }
288
-
289
287
  .n-select-trigger {
290
288
  background: var(--n-color-surface);
291
289
  border: 1px solid var(--n-color-border);
@@ -299,33 +297,27 @@ onBeforeUnmount(() => {
299
297
  color: var(--n-color-text);
300
298
  gap: var(--n-space-2);
301
299
  }
302
-
303
300
  .n-select-trigger:focus-visible {
304
301
  border-color: var(--n-color-primary);
305
302
  box-shadow: 0 0 0 3px var(--n-color-primary-light), 0 0 20px rgba(var(--n-color-primary-rgb, 99, 102, 241), 0.12);
306
303
  outline: none;
307
304
  }
308
-
309
305
  .n-select:hover .n-select-trigger:not(.is-disabled) {
310
306
  border-color: var(--n-color-border-hover);
311
307
  }
312
-
313
308
  .n-select.is-open .n-select-trigger {
314
309
  border-color: var(--n-color-primary);
315
310
  box-shadow: 0 0 0 3px var(--n-color-primary-light), 0 0 20px rgba(var(--n-color-primary-rgb, 99, 102, 241), 0.12);
316
311
  }
317
-
318
312
  .n-select-placeholder {
319
313
  color: var(--n-color-text-muted);
320
314
  }
321
-
322
315
  .n-select-trigger-actions {
323
316
  display: flex;
324
317
  align-items: center;
325
318
  gap: 0.25rem;
326
319
  flex-shrink: 0;
327
320
  }
328
-
329
321
  .n-select-clear {
330
322
  background: transparent;
331
323
  border: none;
@@ -336,21 +328,17 @@ onBeforeUnmount(() => {
336
328
  border-radius: var(--n-radius-sm);
337
329
  line-height: 1;
338
330
  }
339
-
340
331
  .n-select-clear:hover {
341
332
  color: var(--n-color-text);
342
333
  }
343
-
344
334
  .n-select-arrow {
345
335
  color: var(--n-color-text-muted);
346
336
  transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1);
347
337
  font-size: var(--n-text-xs);
348
338
  }
349
-
350
339
  .is-open .n-select-arrow {
351
340
  transform: rotate(180deg);
352
341
  }
353
-
354
342
  .n-select-dropdown {
355
343
  position: absolute;
356
344
  top: calc(100% + 0.5rem);
@@ -367,26 +355,21 @@ onBeforeUnmount(() => {
367
355
  animation: n-dropdown-in 0.3s cubic-bezier(0.16, 1, 0.3, 1);
368
356
  transform-origin: top center;
369
357
  }
370
-
371
358
  @keyframes n-dropdown-in {
372
- from { opacity: 0; transform: translateY(-6px) scale(0.98); }
373
- to { opacity: 1; transform: translateY(0) scale(1); }
359
+ from { opacity: 0; scale(0.98); }
360
+ to { opacity: 1; scale(1); }
374
361
  }
375
-
376
362
  .n-select-dropdown.is-top {
377
363
  animation: n-dropdown-in-top 0.3s cubic-bezier(0.16, 1, 0.3, 1);
378
364
  }
379
-
380
365
  @keyframes n-dropdown-in-top {
381
- from { opacity: 0; transform: translateY(6px) scale(0.98); }
382
- to { opacity: 1; transform: translateY(0) scale(1); }
366
+ from { opacity: 0; scale(0.98); }
367
+ to { opacity: 1; scale(1); }
383
368
  }
384
-
385
369
  .n-select-search {
386
370
  padding: var(--n-space-2);
387
371
  border-bottom: 1px solid var(--n-color-border);
388
372
  }
389
-
390
373
  .n-select-search-input {
391
374
  width: 100%;
392
375
  background: var(--n-color-bg);
@@ -398,16 +381,13 @@ onBeforeUnmount(() => {
398
381
  outline: none;
399
382
  font-family: inherit;
400
383
  }
401
-
402
384
  .n-select-search-input:focus {
403
385
  border-color: var(--n-color-primary);
404
386
  }
405
-
406
387
  .n-select-options {
407
388
  max-height: 250px;
408
389
  overflow-y: auto;
409
390
  }
410
-
411
391
  .n-select-group-label {
412
392
  padding: var(--n-space-2) var(--n-space-3);
413
393
  font-size: var(--n-text-xs);
@@ -417,62 +397,55 @@ onBeforeUnmount(() => {
417
397
  letter-spacing: var(--n-tracking-wide);
418
398
  background: var(--n-color-bg);
419
399
  }
420
-
421
400
  .n-select-option {
422
401
  padding: 0.7rem 1rem;
423
402
  padding-left: 1rem;
424
403
  color: var(--n-color-text-secondary);
425
404
  cursor: pointer;
426
- transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
405
+ transition: background-color var(--n-transition-fast), border-color var(--n-transition-fast), color var(--n-transition-fast), box-shadow var(--n-transition-fast);
427
406
  letter-spacing: 0.01em;
428
407
  position: relative;
429
408
  }
430
-
431
409
  .n-select-option::before {
432
410
  content: '';
433
411
  position: absolute;
434
412
  left: 0;
435
413
  top: 50%;
436
- transform: translateY(-50%) scaleY(0);
414
+ scaleY(0);
437
415
  width: 3px;
438
416
  height: 50%;
439
417
  background: var(--n-color-primary);
440
418
  border-radius: 0 3px 3px 0;
441
419
  transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1);
442
420
  }
443
-
444
421
  .n-select-option:hover::before,
445
422
  .n-select-option.is-focused::before {
446
- transform: translateY(-50%) scaleY(1);
423
+ scaleY(1);
447
424
  }
448
-
449
425
  .n-select-option:hover,
450
426
  .n-select-option.is-focused {
451
427
  background: var(--n-color-glass);
452
428
  color: var(--n-color-text);
453
429
  padding-left: 1.25rem;
454
430
  }
455
-
456
431
  .n-select-option.is-selected {
457
432
  background: var(--n-color-primary-light);
458
433
  color: var(--n-color-primary);
459
434
  font-weight: var(--n-weight-semibold);
460
435
  }
461
-
462
436
  .n-select-option.is-disabled {
463
437
  opacity: 0.4;
464
438
  cursor: not-allowed;
465
439
  }
466
-
467
440
  .n-select-empty {
468
441
  padding: var(--n-space-4);
469
442
  color: var(--n-color-text-muted);
470
443
  text-align: center;
471
444
  font-size: var(--n-text-sm);
472
445
  }
473
-
474
446
  .is-disabled .n-select-trigger {
475
447
  opacity: 0.5;
476
448
  cursor: not-allowed;
477
449
  }
450
+
478
451
  </style>
@@ -31,46 +31,41 @@ const lineArray = Array.from({ length: props.lines || 3 }, (_, i) => i + 1)
31
31
  flex-direction: column;
32
32
  gap: var(--n-space-2);
33
33
  }
34
-
35
34
  .n-skeleton-line {
36
35
  height: 14px;
37
36
  border-radius: var(--n-radius-sm);
38
- background: linear-gradient(90deg, var(--n-color-surface-alt) 25%, var(--n-color-surface-hover) 50%, var(--n-color-surface-alt) 75%);
37
+ background-color: var(--n-color-surface); 25%, var(--n-color-surface-hover) 50%, var(--n-color-surface-alt) 75%);
39
38
  background-size: 200% 100%;
40
39
  animation: n-skeleton-shimmer 1.5s ease-in-out infinite;
41
40
  }
42
-
43
41
  .is-circle .n-skeleton-circle {
44
42
  width: 60px;
45
43
  height: 60px;
46
44
  border-radius: var(--n-radius-full);
47
- background: linear-gradient(90deg, var(--n-color-surface-alt) 25%, var(--n-color-surface-hover) 50%, var(--n-color-surface-alt) 75%);
45
+ background-color: var(--n-color-surface); 25%, var(--n-color-surface-hover) 50%, var(--n-color-surface-alt) 75%);
48
46
  background-size: 200% 100%;
49
47
  animation: n-skeleton-shimmer 1.5s ease-in-out infinite;
50
48
  }
51
-
52
49
  .is-card .n-skeleton-card {
53
50
  border-radius: var(--n-radius-lg);
54
51
  overflow: hidden;
55
52
  border: 1px solid var(--n-color-border);
56
53
  }
57
-
58
54
  .is-card .n-skeleton-card-image {
59
55
  height: 140px;
60
- background: linear-gradient(90deg, var(--n-color-surface-alt) 25%, var(--n-color-surface-hover) 50%, var(--n-color-surface-alt) 75%);
56
+ background-color: var(--n-color-surface); 25%, var(--n-color-surface-hover) 50%, var(--n-color-surface-alt) 75%);
61
57
  background-size: 200% 100%;
62
58
  animation: n-skeleton-shimmer 1.5s ease-in-out infinite;
63
59
  }
64
-
65
60
  .is-card .n-skeleton-card-body {
66
61
  padding: var(--n-space-5);
67
62
  display: flex;
68
63
  flex-direction: column;
69
64
  gap: var(--n-space-3);
70
65
  }
71
-
72
66
  @keyframes n-skeleton-shimmer {
73
67
  from { background-position: 200% 0; }
74
68
  to { background-position: -200% 0; }
75
69
  }
70
+
76
71
  </style>
@@ -30,7 +30,6 @@ const toggle = () => {
30
30
  cursor: pointer;
31
31
  user-select: none;
32
32
  }
33
-
34
33
  .n-switch-track {
35
34
  width: 44px;
36
35
  height: 24px;
@@ -40,12 +39,10 @@ const toggle = () => {
40
39
  transition: all var(--n-transition-normal);
41
40
  flex-shrink: 0;
42
41
  }
43
-
44
42
  .is-checked .n-switch-track {
45
43
  background: var(--n-color-primary);
46
44
  box-shadow: var(--n-shadow-glow-primary);
47
45
  }
48
-
49
46
  .n-switch-thumb {
50
47
  width: 18px;
51
48
  height: 18px;
@@ -58,21 +55,19 @@ const toggle = () => {
58
55
  box-shadow: var(--n-shadow-md);
59
56
  will-change: transform;
60
57
  }
61
-
62
58
  .is-checked .n-switch-thumb {
63
59
  transform: translateX(20px);
64
60
  background: white;
65
61
  box-shadow: var(--n-shadow-md);
66
62
  }
67
-
68
63
  .n-switch-label {
69
64
  font-size: var(--n-text-sm);
70
65
  color: var(--n-color-text);
71
66
  font-weight: var(--n-weight-medium);
72
67
  }
73
-
74
68
  .is-disabled {
75
69
  opacity: 0.5;
76
70
  cursor: not-allowed;
77
71
  }
72
+
78
73
  </style>
@@ -50,13 +50,11 @@ const activeIndex = computed(() =>
50
50
  gap: var(--n-space-6);
51
51
  width: 100%;
52
52
  }
53
-
54
53
  .n-tabs-header {
55
54
  display: flex;
56
55
  position: relative;
57
56
  border-bottom: 1px solid var(--n-color-border);
58
57
  }
59
-
60
58
  .n-tab {
61
59
  flex: 1;
62
60
  padding: var(--n-space-3) var(--n-space-5);
@@ -74,31 +72,24 @@ const activeIndex = computed(() =>
74
72
  white-space: nowrap;
75
73
  border-radius: var(--n-radius-sm) var(--n-radius-sm) 0 0;
76
74
  }
77
-
78
75
  .n-tab:hover:not(.is-active):not(.is-disabled) {
79
76
  color: var(--n-color-text);
80
77
  background: var(--n-color-glass);
81
78
  }
82
-
83
79
  .n-tab:focus-visible {
84
80
  outline: none;
85
- box-shadow: inset 0 0 0 2px var(--n-color-primary);
86
81
  }
87
-
88
82
  .n-tab.is-active {
89
83
  color: var(--n-color-primary);
90
84
  font-weight: var(--n-weight-semibold);
91
85
  }
92
-
93
86
  .n-tab.is-disabled {
94
87
  opacity: 0.4;
95
88
  cursor: not-allowed;
96
89
  }
97
-
98
90
  .n-tab-icon {
99
91
  font-size: var(--n-text-base);
100
92
  }
101
-
102
93
  .n-tab-badge {
103
94
  background: var(--n-color-primary);
104
95
  color: white;
@@ -108,7 +99,6 @@ const activeIndex = computed(() =>
108
99
  border-radius: var(--n-radius-full);
109
100
  line-height: 1.2;
110
101
  }
111
-
112
102
  .n-tabs-indicator {
113
103
  position: absolute;
114
104
  bottom: -1px;
@@ -116,6 +106,6 @@ const activeIndex = computed(() =>
116
106
  background: var(--n-color-primary);
117
107
  transition: all 0.35s cubic-bezier(0.16, 1, 0.3, 1);
118
108
  border-radius: var(--n-radius-full);
119
- box-shadow: 0 1px 6px rgba(99, 102, 241, 0.35);
120
109
  }
110
+
121
111
  </style>
@@ -31,50 +31,41 @@ const emit = defineEmits(['close'])
31
31
  border: 1px solid transparent;
32
32
  letter-spacing: 0.02em;
33
33
  }
34
-
35
34
  .n-tag.is-rounded {
36
35
  border-radius: var(--n-radius-full);
37
36
  }
38
-
39
37
  .n-tag-sm { padding: 0.15rem 0.5rem; font-size: 0.65rem; }
40
38
  .n-tag-lg { padding: 0.4rem 0.9rem; font-size: var(--n-text-sm); }
41
-
42
39
  .n-tag-primary {
43
40
  background: var(--n-color-primary-light);
44
41
  border-color: var(--n-color-primary-border);
45
42
  color: var(--n-color-primary);
46
43
  }
47
-
48
44
  .n-tag-success {
49
45
  background: var(--n-color-success-light);
50
46
  border-color: var(--n-color-success-border);
51
47
  color: var(--n-color-success);
52
48
  }
53
-
54
49
  .n-tag-danger {
55
50
  background: var(--n-color-danger-light);
56
51
  border-color: var(--n-color-danger-border);
57
52
  color: var(--n-color-danger);
58
53
  }
59
-
60
54
  .n-tag-warning {
61
55
  background: var(--n-color-warning-light);
62
56
  border-color: var(--n-color-warning-border);
63
57
  color: var(--n-color-warning);
64
58
  }
65
-
66
59
  .n-tag-info {
67
60
  background: var(--n-color-info-light);
68
61
  border-color: var(--n-color-info-border);
69
62
  color: var(--n-color-info);
70
63
  }
71
-
72
64
  .n-tag-secondary {
73
65
  background: var(--n-color-surface-alt);
74
66
  border-color: var(--n-color-border);
75
67
  color: var(--n-color-text-secondary);
76
68
  }
77
-
78
69
  .n-tag-close {
79
70
  background: transparent;
80
71
  border: none;
@@ -85,7 +76,7 @@ const emit = defineEmits(['close'])
85
76
  margin-left: var(--n-space-1);
86
77
  color: inherit;
87
78
  opacity: 0.5;
88
- transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
79
+ transition: color var(--n-transition-fast); cubic-bezier(0.16, 1, 0.3, 1);
89
80
  border-radius: var(--n-radius-sm);
90
81
  display: flex;
91
82
  align-items: center;
@@ -93,10 +84,10 @@ const emit = defineEmits(['close'])
93
84
  width: 18px;
94
85
  height: 18px;
95
86
  }
96
-
97
87
  .n-tag-close:hover {
98
88
  opacity: 1;
99
89
  background: rgba(0,0,0,0.08);
100
90
  transform: scale(1.15);
101
91
  }
92
+
102
93
  </style>