nexa-ui-kit 0.11.4 → 0.11.5

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 (68) hide show
  1. package/dist/components/NAlert.js +20 -5
  2. package/dist/components/NAlert.nexa +20 -5
  3. package/dist/components/NAvatar.js +2 -0
  4. package/dist/components/NAvatar.nexa +2 -0
  5. package/dist/components/NBadge.js +5 -4
  6. package/dist/components/NBadge.nexa +5 -4
  7. package/dist/components/NBottomSheet.js +24 -22
  8. package/dist/components/NBottomSheet.nexa +9 -7
  9. package/dist/components/NButton.js +57 -14
  10. package/dist/components/NButton.nexa +57 -14
  11. package/dist/components/NCard.js +6 -5
  12. package/dist/components/NCard.nexa +6 -5
  13. package/dist/components/NCheckbox.js +42 -33
  14. package/dist/components/NCheckbox.nexa +22 -15
  15. package/dist/components/NDataTable.js +124 -100
  16. package/dist/components/NDataTable.nexa +39 -15
  17. package/dist/components/NInput.js +27 -6
  18. package/dist/components/NInput.nexa +27 -6
  19. package/dist/components/NModal.js +22 -9
  20. package/dist/components/NModal.nexa +22 -9
  21. package/dist/components/NMultiSelect.js +1 -1
  22. package/dist/components/NMultiSelect.nexa +1 -1
  23. package/dist/components/NPaginator.js +83 -1
  24. package/dist/components/NPaginator.nexa +83 -1
  25. package/dist/components/NProgressBar.js +11 -9
  26. package/dist/components/NProgressBar.nexa +11 -9
  27. package/dist/components/NRadio.js +24 -24
  28. package/dist/components/NRadio.nexa +11 -10
  29. package/dist/components/NSelect.js +38 -12
  30. package/dist/components/NSelect.nexa +38 -12
  31. package/dist/components/NSwitch.js +5 -3
  32. package/dist/components/NSwitch.nexa +5 -3
  33. package/dist/components/NTabs.js +14 -6
  34. package/dist/components/NTabs.nexa +14 -6
  35. package/dist/components/NTag.js +14 -5
  36. package/dist/components/NTag.nexa +14 -5
  37. package/dist/components/NToastContainer.js +11 -4
  38. package/dist/components/NToastContainer.nexa +11 -4
  39. package/dist/components/NTooltip.js +5 -4
  40. package/dist/components/NTooltip.nexa +5 -4
  41. package/dist/components/NTreeMenu.js +77 -34
  42. package/dist/components/NTreeMenu.nexa +55 -12
  43. package/dist/styles/theme.js +69 -55
  44. package/dist/styles/tokens.css +90 -74
  45. package/package.json +4 -4
  46. package/src/components/NAlert.nexa +20 -5
  47. package/src/components/NAvatar.nexa +2 -0
  48. package/src/components/NBadge.nexa +5 -4
  49. package/src/components/NBottomSheet.nexa +9 -7
  50. package/src/components/NButton.nexa +57 -14
  51. package/src/components/NCard.nexa +6 -5
  52. package/src/components/NCheckbox.nexa +22 -15
  53. package/src/components/NDataTable.nexa +39 -15
  54. package/src/components/NInput.nexa +27 -6
  55. package/src/components/NModal.nexa +22 -9
  56. package/src/components/NMultiSelect.nexa +1 -1
  57. package/src/components/NPaginator.nexa +83 -1
  58. package/src/components/NProgressBar.nexa +11 -9
  59. package/src/components/NRadio.nexa +11 -10
  60. package/src/components/NSelect.nexa +38 -12
  61. package/src/components/NSwitch.nexa +5 -3
  62. package/src/components/NTabs.nexa +14 -6
  63. package/src/components/NTag.nexa +14 -5
  64. package/src/components/NToastContainer.nexa +11 -4
  65. package/src/components/NTooltip.nexa +5 -4
  66. package/src/components/NTreeMenu.nexa +55 -12
  67. package/src/styles/theme.ts +69 -55
  68. package/src/styles/tokens.css +90 -74
@@ -58,28 +58,30 @@ const __style = `.n-progress[data-v-daaa1d0]{
58
58
  background: var(--n-color-surface-alt);
59
59
  border-radius: var(--n-radius-full);
60
60
  overflow: hidden;
61
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.06);
61
62
  }
62
63
 
63
- .is-sm .n-progress-track[data-v-daaa1d0]{ height: 6px; }
64
- .is-md .n-progress-track[data-v-daaa1d0]{ height: 10px; }
65
- .is-lg .n-progress-track[data-v-daaa1d0]{ height: 14px; }
64
+ .is-sm .n-progress-track[data-v-daaa1d0]{ height: 8px; }
65
+ .is-md .n-progress-track[data-v-daaa1d0]{ height: 12px; }
66
+ .is-lg .n-progress-track[data-v-daaa1d0]{ height: 16px; }
66
67
 
67
68
  .n-progress-bar[data-v-daaa1d0]{
68
69
  height: 100%;
69
70
  border-radius: var(--n-radius-full);
70
- transition: width var(--n-transition-slow);
71
+ transition: width 0.5s cubic-bezier(0.16, 1, 0.3, 1);
71
72
  display: flex;
72
73
  align-items: center;
73
74
  justify-content: flex-end;
74
75
  padding-right: 0.35rem;
75
76
  min-width: 0;
77
+ box-shadow: 0 0 8px rgba(99, 102, 241, 0.3);
76
78
  }
77
79
 
78
- .is-primary[data-v-daaa1d0]{ background: var(--n-color-primary); }
79
- .is-success[data-v-daaa1d0]{ background: var(--n-color-success); }
80
- .is-danger[data-v-daaa1d0]{ background: var(--n-color-danger); }
81
- .is-warning[data-v-daaa1d0]{ background: var(--n-color-warning); }
82
- .is-info[data-v-daaa1d0]{ background: var(--n-color-info); }
80
+ .is-primary[data-v-daaa1d0]{ background: var(--n-color-primary); box-shadow: 0 0 8px rgba(99, 102, 241, 0.3); }
81
+ .is-success[data-v-daaa1d0]{ background: var(--n-color-success); box-shadow: 0 0 8px rgba(34, 197, 94, 0.3); }
82
+ .is-danger[data-v-daaa1d0]{ background: var(--n-color-danger); box-shadow: 0 0 8px rgba(239, 68, 68, 0.3); }
83
+ .is-warning[data-v-daaa1d0]{ background: var(--n-color-warning); box-shadow: 0 0 8px rgba(234, 179, 8, 0.3); }
84
+ .is-info[data-v-daaa1d0]{ background: var(--n-color-info); box-shadow: 0 0 8px rgba(59, 130, 246, 0.3); }
83
85
 
84
86
  .n-progress-label[data-v-daaa1d0]{
85
87
  color: white;
@@ -42,28 +42,30 @@ const percentage = computed(() => Math.min(100, Math.max(0, (props.value / props
42
42
  background: var(--n-color-surface-alt);
43
43
  border-radius: var(--n-radius-full);
44
44
  overflow: hidden;
45
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.06);
45
46
  }
46
47
 
47
- .is-sm .n-progress-track { height: 6px; }
48
- .is-md .n-progress-track { height: 10px; }
49
- .is-lg .n-progress-track { height: 14px; }
48
+ .is-sm .n-progress-track { height: 8px; }
49
+ .is-md .n-progress-track { height: 12px; }
50
+ .is-lg .n-progress-track { height: 16px; }
50
51
 
51
52
  .n-progress-bar {
52
53
  height: 100%;
53
54
  border-radius: var(--n-radius-full);
54
- transition: width var(--n-transition-slow);
55
+ transition: width 0.5s cubic-bezier(0.16, 1, 0.3, 1);
55
56
  display: flex;
56
57
  align-items: center;
57
58
  justify-content: flex-end;
58
59
  padding-right: 0.35rem;
59
60
  min-width: 0;
61
+ box-shadow: 0 0 8px rgba(99, 102, 241, 0.3);
60
62
  }
61
63
 
62
- .is-primary { background: var(--n-color-primary); }
63
- .is-success { background: var(--n-color-success); }
64
- .is-danger { background: var(--n-color-danger); }
65
- .is-warning { background: var(--n-color-warning); }
66
- .is-info { background: var(--n-color-info); }
64
+ .is-primary { background: var(--n-color-primary); box-shadow: 0 0 8px rgba(99, 102, 241, 0.3); }
65
+ .is-success { background: var(--n-color-success); box-shadow: 0 0 8px rgba(34, 197, 94, 0.3); }
66
+ .is-danger { background: var(--n-color-danger); box-shadow: 0 0 8px rgba(239, 68, 68, 0.3); }
67
+ .is-warning { background: var(--n-color-warning); box-shadow: 0 0 8px rgba(234, 179, 8, 0.3); }
68
+ .is-info { background: var(--n-color-info); box-shadow: 0 0 8px rgba(59, 130, 246, 0.3); }
67
69
 
68
70
  .n-progress-label {
69
71
  color: white;
@@ -1,7 +1,7 @@
1
1
  import { h, hText, effect, defineComponent, registerComponent, reloadComponent, injectStyle } from 'nexa-framework'
2
2
 
3
3
  const _sfc_main = defineComponent({
4
- __scopeId: 'data-v-5c3cc2',
4
+ __scopeId: 'data-v-56e32a4f',
5
5
  __hmrId: 'NRadio_nexa',
6
6
  props: {
7
7
  modelValue: { type: [String, Number], default: '' },
@@ -24,25 +24,24 @@ const _sfc_main = defineComponent({
24
24
  // Injected render function
25
25
  _sfc_main.render = function(ctx) {
26
26
  let { isChecked, select, $slots, emit, modelValue, value, label, disabled, name, Fragment: _ntc_Fragment } = ctx
27
- return h('label', { class: ["n-radio", { 'is-checked': isChecked(), 'is-disabled': disabled }], "data-v-5c3cc2": "" }, [
27
+ return h('label', { class: ["n-radio", { 'is-checked': isChecked(), 'is-disabled': disabled }], "data-v-56e32a4f": "" }, [
28
28
  "\n ",
29
- h('div', { class: "n-radio-circle", onClick: select, "data-v-5c3cc2": "" }, [
29
+ h('div', { class: "n-radio-circle", onClick: select, "data-v-56e32a4f": "" }, [
30
30
  "\n ",
31
- h('div', { class: "n-radio-dot", "data-v-5c3cc2": "" }),
32
- "\n "
31
+ (isChecked()) ? h('div', { class: "n-radio-dot", "data-v-56e32a4f": "" }) : null
33
32
  ]),
34
33
  "\n ",
35
- (label) ? h('span', { class: "n-radio-label", "data-v-5c3cc2": "" }, [
34
+ (label) ? h('span', { class: "n-radio-label", "data-v-56e32a4f": "" }, [
36
35
  label
37
36
  ]) : null
38
37
  ])
39
38
  }
40
- _sfc_main.__scopeId = 'data-v-5c3cc2'
39
+ _sfc_main.__scopeId = 'data-v-56e32a4f'
41
40
  _sfc_main.__hmrId = 'NRadio_nexa'
42
41
 
43
42
  export default _sfc_main
44
43
 
45
- const __style = `.n-radio[data-v-5c3cc2]{
44
+ const __style = `.n-radio[data-v-56e32a4f]{
46
45
  display: inline-flex;
47
46
  align-items: center;
48
47
  gap: var(--n-space-3);
@@ -50,47 +49,48 @@ const __style = `.n-radio[data-v-5c3cc2]{
50
49
  user-select: none;
51
50
  }
52
51
 
53
- .n-radio-circle[data-v-5c3cc2]{
54
- width: 20px;
55
- height: 20px;
52
+ .n-radio-circle[data-v-56e32a4f]{
53
+ width: 22px;
54
+ height: 22px;
56
55
  border: 2px solid var(--n-color-border);
57
56
  border-radius: var(--n-radius-full);
58
57
  display: flex;
59
58
  align-items: center;
60
59
  justify-content: center;
61
- transition: all var(--n-transition-fast);
60
+ transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
62
61
  flex-shrink: 0;
63
62
  }
64
63
 
65
- .is-checked .n-radio-circle[data-v-5c3cc2]{
64
+ .is-checked .n-radio-circle[data-v-56e32a4f]{
66
65
  border-color: var(--n-color-primary);
66
+ box-shadow: 0 0 0 3px var(--n-color-primary-light), 0 0 12px rgba(99, 102, 241, 0.25);
67
67
  }
68
68
 
69
- .n-radio-dot[data-v-5c3cc2]{
70
- width: 10px;
71
- height: 10px;
69
+ .n-radio-dot[data-v-56e32a4f]{
70
+ width: 11px;
71
+ height: 11px;
72
72
  border-radius: var(--n-radius-full);
73
73
  background: var(--n-color-primary);
74
- transform: scale(0);
75
- transition: all var(--n-transition-spring);
74
+ animation: n-radio-dot-in 0.2s cubic-bezier(0.16, 1, 0.3, 1);
76
75
  }
77
76
 
78
- .is-checked .n-radio-dot[data-v-5c3cc2]{
79
- transform: scale(1);
77
+ @keyframes n-radio-dot-in {
78
+ from[data-v-56e32a4f]{ transform: scale(0); }
79
+ to[data-v-56e32a4f]{ transform: scale(1); }
80
80
  }
81
81
 
82
- .n-radio-label[data-v-5c3cc2]{
82
+ .n-radio-label[data-v-56e32a4f]{
83
83
  font-size: var(--n-text-sm);
84
84
  color: var(--n-color-text);
85
85
  font-weight: var(--n-weight-medium);
86
86
  }
87
87
 
88
- .is-disabled[data-v-5c3cc2]{
88
+ .is-disabled[data-v-56e32a4f]{
89
89
  opacity: 0.5;
90
90
  cursor: not-allowed;
91
91
  }
92
92
 
93
- .n-radio[data-v-5c3cc2]:hover:not(.is-disabled) .n-radio-circle{
93
+ .n-radio[data-v-56e32a4f]:hover:not(.is-disabled) .n-radio-circle{
94
94
  border-color: var(--n-color-primary);
95
95
  }`
96
- injectStyle('data-v-5c3cc2', __style)
96
+ injectStyle('data-v-56e32a4f', __style)
@@ -20,7 +20,7 @@ const select = () => {
20
20
  <template>
21
21
  <label class="n-radio" :class="{ 'is-checked': isChecked(), 'is-disabled': disabled }">
22
22
  <div class="n-radio-circle" @click="select">
23
- <div class="n-radio-dot"></div>
23
+ <div v-if="isChecked()" class="n-radio-dot"></div>
24
24
  </div>
25
25
  <span v-if="label" class="n-radio-label">{{ label }}</span>
26
26
  </label>
@@ -36,32 +36,33 @@ const select = () => {
36
36
  }
37
37
 
38
38
  .n-radio-circle {
39
- width: 20px;
40
- height: 20px;
39
+ width: 22px;
40
+ height: 22px;
41
41
  border: 2px solid var(--n-color-border);
42
42
  border-radius: var(--n-radius-full);
43
43
  display: flex;
44
44
  align-items: center;
45
45
  justify-content: center;
46
- transition: all var(--n-transition-fast);
46
+ transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
47
47
  flex-shrink: 0;
48
48
  }
49
49
 
50
50
  .is-checked .n-radio-circle {
51
51
  border-color: var(--n-color-primary);
52
+ box-shadow: 0 0 0 3px var(--n-color-primary-light), 0 0 12px rgba(99, 102, 241, 0.25);
52
53
  }
53
54
 
54
55
  .n-radio-dot {
55
- width: 10px;
56
- height: 10px;
56
+ width: 11px;
57
+ height: 11px;
57
58
  border-radius: var(--n-radius-full);
58
59
  background: var(--n-color-primary);
59
- transform: scale(0);
60
- transition: all var(--n-transition-spring);
60
+ animation: n-radio-dot-in 0.2s cubic-bezier(0.16, 1, 0.3, 1);
61
61
  }
62
62
 
63
- .is-checked .n-radio-dot {
64
- transform: scale(1);
63
+ @keyframes n-radio-dot-in {
64
+ from { transform: scale(0); }
65
+ to { transform: scale(1); }
65
66
  }
66
67
 
67
68
  .n-radio-label {
@@ -323,7 +323,8 @@ const __style = `.n-select[data-v-2dd8d436]{
323
323
 
324
324
  .n-select-trigger[data-v-2dd8d436]:focus-visible{
325
325
  border-color: var(--n-color-primary);
326
- box-shadow: 0 0 0 3px var(--n-color-primary-light);
326
+ 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);
327
+ outline: none;
327
328
  }
328
329
 
329
330
  .n-select[data-v-2dd8d436]:hover .n-select-trigger:not(.is-disabled){
@@ -332,7 +333,7 @@ const __style = `.n-select[data-v-2dd8d436]{
332
333
 
333
334
  .n-select.is-open .n-select-trigger[data-v-2dd8d436]{
334
335
  border-color: var(--n-color-primary);
335
- box-shadow: 0 0 0 3px var(--n-color-primary-light);
336
+ 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);
336
337
  }
337
338
 
338
339
  .n-select-placeholder[data-v-2dd8d436]{
@@ -363,7 +364,7 @@ const __style = `.n-select[data-v-2dd8d436]{
363
364
 
364
365
  .n-select-arrow[data-v-2dd8d436]{
365
366
  color: var(--n-color-text-muted);
366
- transition: transform var(--n-transition-fast);
367
+ transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1);
367
368
  font-size: var(--n-text-xs);
368
369
  }
369
370
 
@@ -376,27 +377,30 @@ const __style = `.n-select[data-v-2dd8d436]{
376
377
  top: calc(100% + 0.5rem);
377
378
  left: 0;
378
379
  width: 100%;
379
- background: var(--n-color-surface);
380
+ background: color-mix(in srgb, var(--n-color-surface) 90%, transparent);
381
+ backdrop-filter: blur(16px) saturate(1.15);
382
+ -webkit-backdrop-filter: blur(16px) saturate(1.15);
380
383
  border: 1px solid var(--n-color-border);
381
384
  border-radius: var(--n-radius-md);
382
- box-shadow: var(--n-shadow-lg);
385
+ box-shadow: var(--n-shadow-lg), 0 8px 32px rgba(0,0,0,0.08);
383
386
  z-index: var(--n-z-dropdown);
384
387
  overflow: hidden;
385
- animation: n-dropdown-in 0.2s ease-out;
388
+ animation: n-dropdown-in 0.3s cubic-bezier(0.16, 1, 0.3, 1);
389
+ transform-origin: top center;
386
390
  }
387
391
 
388
392
  @keyframes n-dropdown-in {
389
- from[data-v-2dd8d436]{ opacity: 0; transform: translateY(-8px); }
390
- to[data-v-2dd8d436]{ opacity: 1; transform: translateY(0); }
393
+ from[data-v-2dd8d436]{ opacity: 0; transform: translateY(-6px) scale(0.98); }
394
+ to[data-v-2dd8d436]{ opacity: 1; transform: translateY(0) scale(1); }
391
395
  }
392
396
 
393
397
  .n-select-dropdown.is-top[data-v-2dd8d436]{
394
- animation: n-dropdown-in-top 0.2s ease-out;
398
+ animation: n-dropdown-in-top 0.3s cubic-bezier(0.16, 1, 0.3, 1);
395
399
  }
396
400
 
397
401
  @keyframes n-dropdown-in-top {
398
- from[data-v-2dd8d436]{ opacity: 0; transform: translateY(8px); }
399
- to[data-v-2dd8d436]{ opacity: 1; transform: translateY(0); }
402
+ from[data-v-2dd8d436]{ opacity: 0; transform: translateY(6px) scale(0.98); }
403
+ to[data-v-2dd8d436]{ opacity: 1; transform: translateY(0) scale(1); }
400
404
  }
401
405
 
402
406
  .n-select-search[data-v-2dd8d436]{
@@ -437,15 +441,37 @@ to[data-v-2dd8d436]{ opacity: 1; transform: translateY(0); }
437
441
 
438
442
  .n-select-option[data-v-2dd8d436]{
439
443
  padding: 0.7rem 1rem;
444
+ padding-left: 1rem;
440
445
  color: var(--n-color-text-secondary);
441
446
  cursor: pointer;
442
- transition: all var(--n-transition-fast);
447
+ transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
448
+ letter-spacing: 0.01em;
449
+ position: relative;
450
+ }
451
+
452
+ .n-select-option[data-v-2dd8d436]::before{
453
+ content: '';
454
+ position: absolute;
455
+ left: 0;
456
+ top: 50%;
457
+ transform: translateY(-50%) scaleY(0);
458
+ width: 3px;
459
+ height: 50%;
460
+ background: var(--n-color-primary);
461
+ border-radius: 0 3px 3px 0;
462
+ transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1);
463
+ }
464
+
465
+ .n-select-option[data-v-2dd8d436]:hover::before,
466
+ .n-select-option.is-focused[data-v-2dd8d436]::before{
467
+ transform: translateY(-50%) scaleY(1);
443
468
  }
444
469
 
445
470
  .n-select-option[data-v-2dd8d436]:hover,
446
471
  .n-select-option.is-focused[data-v-2dd8d436]{
447
472
  background: var(--n-color-glass);
448
473
  color: var(--n-color-text);
474
+ padding-left: 1.25rem;
449
475
  }
450
476
 
451
477
  .n-select-option.is-selected[data-v-2dd8d436]{
@@ -302,7 +302,8 @@ onBeforeUnmount(() => {
302
302
 
303
303
  .n-select-trigger:focus-visible {
304
304
  border-color: var(--n-color-primary);
305
- box-shadow: 0 0 0 3px var(--n-color-primary-light);
305
+ 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
+ outline: none;
306
307
  }
307
308
 
308
309
  .n-select:hover .n-select-trigger:not(.is-disabled) {
@@ -311,7 +312,7 @@ onBeforeUnmount(() => {
311
312
 
312
313
  .n-select.is-open .n-select-trigger {
313
314
  border-color: var(--n-color-primary);
314
- box-shadow: 0 0 0 3px var(--n-color-primary-light);
315
+ 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);
315
316
  }
316
317
 
317
318
  .n-select-placeholder {
@@ -342,7 +343,7 @@ onBeforeUnmount(() => {
342
343
 
343
344
  .n-select-arrow {
344
345
  color: var(--n-color-text-muted);
345
- transition: transform var(--n-transition-fast);
346
+ transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1);
346
347
  font-size: var(--n-text-xs);
347
348
  }
348
349
 
@@ -355,27 +356,30 @@ onBeforeUnmount(() => {
355
356
  top: calc(100% + 0.5rem);
356
357
  left: 0;
357
358
  width: 100%;
358
- background: var(--n-color-surface);
359
+ background: color-mix(in srgb, var(--n-color-surface) 90%, transparent);
360
+ backdrop-filter: blur(16px) saturate(1.15);
361
+ -webkit-backdrop-filter: blur(16px) saturate(1.15);
359
362
  border: 1px solid var(--n-color-border);
360
363
  border-radius: var(--n-radius-md);
361
- box-shadow: var(--n-shadow-lg);
364
+ box-shadow: var(--n-shadow-lg), 0 8px 32px rgba(0,0,0,0.08);
362
365
  z-index: var(--n-z-dropdown);
363
366
  overflow: hidden;
364
- animation: n-dropdown-in 0.2s ease-out;
367
+ animation: n-dropdown-in 0.3s cubic-bezier(0.16, 1, 0.3, 1);
368
+ transform-origin: top center;
365
369
  }
366
370
 
367
371
  @keyframes n-dropdown-in {
368
- from { opacity: 0; transform: translateY(-8px); }
369
- to { opacity: 1; transform: translateY(0); }
372
+ from { opacity: 0; transform: translateY(-6px) scale(0.98); }
373
+ to { opacity: 1; transform: translateY(0) scale(1); }
370
374
  }
371
375
 
372
376
  .n-select-dropdown.is-top {
373
- animation: n-dropdown-in-top 0.2s ease-out;
377
+ animation: n-dropdown-in-top 0.3s cubic-bezier(0.16, 1, 0.3, 1);
374
378
  }
375
379
 
376
380
  @keyframes n-dropdown-in-top {
377
- from { opacity: 0; transform: translateY(8px); }
378
- to { opacity: 1; transform: translateY(0); }
381
+ from { opacity: 0; transform: translateY(6px) scale(0.98); }
382
+ to { opacity: 1; transform: translateY(0) scale(1); }
379
383
  }
380
384
 
381
385
  .n-select-search {
@@ -416,15 +420,37 @@ onBeforeUnmount(() => {
416
420
 
417
421
  .n-select-option {
418
422
  padding: 0.7rem 1rem;
423
+ padding-left: 1rem;
419
424
  color: var(--n-color-text-secondary);
420
425
  cursor: pointer;
421
- transition: all var(--n-transition-fast);
426
+ transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
427
+ letter-spacing: 0.01em;
428
+ position: relative;
429
+ }
430
+
431
+ .n-select-option::before {
432
+ content: '';
433
+ position: absolute;
434
+ left: 0;
435
+ top: 50%;
436
+ transform: translateY(-50%) scaleY(0);
437
+ width: 3px;
438
+ height: 50%;
439
+ background: var(--n-color-primary);
440
+ border-radius: 0 3px 3px 0;
441
+ transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1);
442
+ }
443
+
444
+ .n-select-option:hover::before,
445
+ .n-select-option.is-focused::before {
446
+ transform: translateY(-50%) scaleY(1);
422
447
  }
423
448
 
424
449
  .n-select-option:hover,
425
450
  .n-select-option.is-focused {
426
451
  background: var(--n-color-glass);
427
452
  color: var(--n-color-text);
453
+ padding-left: 1.25rem;
428
454
  }
429
455
 
430
456
  .n-select-option.is-selected {
@@ -53,12 +53,13 @@ const __style = `.n-switch[data-v-3cd56cb4]{
53
53
  background: var(--n-color-surface-hover);
54
54
  border-radius: var(--n-radius-full);
55
55
  position: relative;
56
- transition: all var(--n-transition-fast);
56
+ transition: all var(--n-transition-normal);
57
57
  flex-shrink: 0;
58
58
  }
59
59
 
60
60
  .is-checked .n-switch-track[data-v-3cd56cb4]{
61
61
  background: var(--n-color-primary);
62
+ box-shadow: var(--n-shadow-glow-primary);
62
63
  }
63
64
 
64
65
  .n-switch-thumb[data-v-3cd56cb4]{
@@ -69,14 +70,15 @@ const __style = `.n-switch[data-v-3cd56cb4]{
69
70
  position: absolute;
70
71
  top: 3px;
71
72
  left: 3px;
72
- transition: transform var(--n-transition-spring), background var(--n-transition-normal);
73
- box-shadow: var(--n-shadow-sm);
73
+ transition: transform var(--n-transition-normal), background var(--n-transition-normal);
74
+ box-shadow: var(--n-shadow-md);
74
75
  will-change: transform;
75
76
  }
76
77
 
77
78
  .is-checked .n-switch-thumb[data-v-3cd56cb4]{
78
79
  transform: translateX(20px);
79
80
  background: white;
81
+ box-shadow: var(--n-shadow-md);
80
82
  }
81
83
 
82
84
  .n-switch-label[data-v-3cd56cb4]{
@@ -37,12 +37,13 @@ const toggle = () => {
37
37
  background: var(--n-color-surface-hover);
38
38
  border-radius: var(--n-radius-full);
39
39
  position: relative;
40
- transition: all var(--n-transition-fast);
40
+ transition: all var(--n-transition-normal);
41
41
  flex-shrink: 0;
42
42
  }
43
43
 
44
44
  .is-checked .n-switch-track {
45
45
  background: var(--n-color-primary);
46
+ box-shadow: var(--n-shadow-glow-primary);
46
47
  }
47
48
 
48
49
  .n-switch-thumb {
@@ -53,14 +54,15 @@ const toggle = () => {
53
54
  position: absolute;
54
55
  top: 3px;
55
56
  left: 3px;
56
- transition: transform var(--n-transition-spring), background var(--n-transition-normal);
57
- box-shadow: var(--n-shadow-sm);
57
+ transition: transform var(--n-transition-normal), background var(--n-transition-normal);
58
+ box-shadow: var(--n-shadow-md);
58
59
  will-change: transform;
59
60
  }
60
61
 
61
62
  .is-checked .n-switch-thumb {
62
63
  transform: translateX(20px);
63
64
  background: white;
65
+ box-shadow: var(--n-shadow-md);
64
66
  }
65
67
 
66
68
  .n-switch-label {
@@ -88,10 +88,17 @@ const __style = `.n-tabs[data-v-339e5ee5]{
88
88
  position: relative;
89
89
  user-select: none;
90
90
  white-space: nowrap;
91
+ border-radius: var(--n-radius-sm) var(--n-radius-sm) 0 0;
91
92
  }
92
93
 
93
- .n-tab[data-v-339e5ee5]:hover{
94
- color: var(--n-color-text-secondary);
94
+ .n-tab[data-v-339e5ee5]:hover:not(.is-active):not(.is-disabled){
95
+ color: var(--n-color-text);
96
+ background: var(--n-color-glass);
97
+ }
98
+
99
+ .n-tab[data-v-339e5ee5]:focus-visible{
100
+ outline: none;
101
+ box-shadow: inset 0 0 0 2px var(--n-color-primary);
95
102
  }
96
103
 
97
104
  .n-tab.is-active[data-v-339e5ee5]{
@@ -120,10 +127,11 @@ const __style = `.n-tabs[data-v-339e5ee5]{
120
127
 
121
128
  .n-tabs-indicator[data-v-339e5ee5]{
122
129
  position: absolute;
123
- bottom: 0;
124
- height: 2px;
130
+ bottom: -1px;
131
+ height: 2.5px;
125
132
  background: var(--n-color-primary);
126
- transition: all var(--n-transition-normal);
127
- border-radius: var(--n-radius-full) var(--n-radius-full) 0 0;
133
+ transition: all 0.35s cubic-bezier(0.16, 1, 0.3, 1);
134
+ border-radius: var(--n-radius-full);
135
+ box-shadow: 0 1px 6px rgba(99, 102, 241, 0.35);
128
136
  }`
129
137
  injectStyle('data-v-339e5ee5', __style)
@@ -72,10 +72,17 @@ const activeIndex = computed(() =>
72
72
  position: relative;
73
73
  user-select: none;
74
74
  white-space: nowrap;
75
+ border-radius: var(--n-radius-sm) var(--n-radius-sm) 0 0;
75
76
  }
76
77
 
77
- .n-tab:hover {
78
- color: var(--n-color-text-secondary);
78
+ .n-tab:hover:not(.is-active):not(.is-disabled) {
79
+ color: var(--n-color-text);
80
+ background: var(--n-color-glass);
81
+ }
82
+
83
+ .n-tab:focus-visible {
84
+ outline: none;
85
+ box-shadow: inset 0 0 0 2px var(--n-color-primary);
79
86
  }
80
87
 
81
88
  .n-tab.is-active {
@@ -104,10 +111,11 @@ const activeIndex = computed(() =>
104
111
 
105
112
  .n-tabs-indicator {
106
113
  position: absolute;
107
- bottom: 0;
108
- height: 2px;
114
+ bottom: -1px;
115
+ height: 2.5px;
109
116
  background: var(--n-color-primary);
110
- transition: all var(--n-transition-normal);
111
- border-radius: var(--n-radius-full) var(--n-radius-full) 0 0;
117
+ transition: all 0.35s cubic-bezier(0.16, 1, 0.3, 1);
118
+ border-radius: var(--n-radius-full);
119
+ box-shadow: 0 1px 6px rgba(99, 102, 241, 0.35);
112
120
  }
113
121
  </style>
@@ -39,7 +39,7 @@ const __style = `.n-tag[data-v-15b3bf49]{
39
39
  display: inline-flex;
40
40
  align-items: center;
41
41
  gap: var(--n-space-1);
42
- padding: 0.2rem 0.6rem;
42
+ padding: 0.25rem 0.7rem;
43
43
  font-size: var(--n-text-xs);
44
44
  font-weight: var(--n-weight-semibold);
45
45
  border-radius: var(--n-radius-sm);
@@ -47,14 +47,15 @@ const __style = `.n-tag[data-v-15b3bf49]{
47
47
  font-family: var(--n-font-sans);
48
48
  white-space: nowrap;
49
49
  border: 1px solid transparent;
50
+ letter-spacing: 0.02em;
50
51
  }
51
52
 
52
53
  .n-tag.is-rounded[data-v-15b3bf49]{
53
54
  border-radius: var(--n-radius-full);
54
55
  }
55
56
 
56
- .n-tag-sm[data-v-15b3bf49]{ padding: 0.1rem 0.4rem; font-size: 0.65rem; }
57
- .n-tag-lg[data-v-15b3bf49]{ padding: 0.35rem 0.8rem; font-size: var(--n-text-sm); }
57
+ .n-tag-sm[data-v-15b3bf49]{ padding: 0.15rem 0.5rem; font-size: 0.65rem; }
58
+ .n-tag-lg[data-v-15b3bf49]{ padding: 0.4rem 0.9rem; font-size: var(--n-text-sm); }
58
59
 
59
60
  .n-tag-primary[data-v-15b3bf49]{
60
61
  background: var(--n-color-primary-light);
@@ -101,11 +102,19 @@ const __style = `.n-tag[data-v-15b3bf49]{
101
102
  padding: 0;
102
103
  margin-left: var(--n-space-1);
103
104
  color: inherit;
104
- opacity: 0.6;
105
- transition: opacity var(--n-transition-fast);
105
+ opacity: 0.5;
106
+ transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
107
+ border-radius: var(--n-radius-sm);
108
+ display: flex;
109
+ align-items: center;
110
+ justify-content: center;
111
+ width: 18px;
112
+ height: 18px;
106
113
  }
107
114
 
108
115
  .n-tag-close[data-v-15b3bf49]:hover{
109
116
  opacity: 1;
117
+ background: rgba(0,0,0,0.08);
118
+ transform: scale(1.15);
110
119
  }`
111
120
  injectStyle('data-v-15b3bf49', __style)