nexa-ui-kit 0.11.4 → 0.11.6

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 +63 -18
  10. package/dist/components/NButton.nexa +63 -18
  11. package/dist/components/NCard.js +6 -5
  12. package/dist/components/NCard.nexa +6 -5
  13. package/dist/components/NCheckbox.js +62 -47
  14. package/dist/components/NCheckbox.nexa +46 -33
  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 +63 -18
  51. package/src/components/NCard.nexa +6 -5
  52. package/src/components/NCheckbox.nexa +46 -33
  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
@@ -77,11 +77,16 @@ const __style = `.n-alert[data-v-291d86b1]{
77
77
  align-items: flex-start;
78
78
  gap: var(--n-space-3);
79
79
  padding: var(--n-space-4) var(--n-space-5);
80
- border-radius: var(--n-radius-md);
81
- border: 1px solid transparent;
80
+ border-radius: var(--n-radius-lg);
81
+ border-style: solid;
82
+ border-width: 1px;
83
+ border-left-width: 4px;
84
+ border-color: transparent;
82
85
  font-size: var(--n-text-sm);
83
86
  line-height: var(--n-leading-normal);
84
- animation: n-alert-in 0.25s ease-out;
87
+ animation: n-alert-in 0.3s cubic-bezier(0.16, 1, 0.3, 1);
88
+ box-shadow: 0 4px 24px rgba(0,0,0,0.06);
89
+ backdrop-filter: blur(12px);
85
90
  }
86
91
 
87
92
  @keyframes n-alert-in {
@@ -92,24 +97,28 @@ to[data-v-291d86b1]{ opacity: 1; transform: translateY(0); }
92
97
  .is-info[data-v-291d86b1]{
93
98
  background: var(--n-color-primary-light);
94
99
  border-color: var(--n-color-primary-border);
100
+ border-left-color: var(--n-color-primary);
95
101
  color: var(--n-color-primary);
96
102
  }
97
103
 
98
104
  .is-success[data-v-291d86b1]{
99
105
  background: var(--n-color-success-light);
100
106
  border-color: var(--n-color-success-border);
107
+ border-left-color: var(--n-color-success);
101
108
  color: var(--n-color-success);
102
109
  }
103
110
 
104
111
  .is-warning[data-v-291d86b1]{
105
112
  background: var(--n-color-warning-light);
106
113
  border-color: var(--n-color-warning-border);
114
+ border-left-color: var(--n-color-warning);
107
115
  color: var(--n-color-warning);
108
116
  }
109
117
 
110
118
  .is-error[data-v-291d86b1]{
111
119
  background: var(--n-color-danger-light);
112
120
  border-color: var(--n-color-danger-border);
121
+ border-left-color: var(--n-color-danger);
113
122
  color: var(--n-color-danger);
114
123
  }
115
124
 
@@ -117,7 +126,13 @@ to[data-v-291d86b1]{ opacity: 1; transform: translateY(0); }
117
126
  font-size: var(--n-text-base);
118
127
  font-weight: var(--n-weight-bold);
119
128
  flex-shrink: 0;
120
- line-height: 1.4;
129
+ line-height: 1;
130
+ display: flex;
131
+ align-items: center;
132
+ justify-content: center;
133
+ width: 20px;
134
+ height: 20px;
135
+ margin-top: 2px;
121
136
  }
122
137
 
123
138
  .n-alert-body{
@@ -146,7 +161,7 @@ to[data-v-291d86b1]{ opacity: 1; transform: translateY(0); }
146
161
  padding: 0;
147
162
  line-height: 1;
148
163
  flex-shrink: 0;
149
- transition: color var(--n-transition-fast);
164
+ transition: color 0.2s cubic-bezier(0.16, 1, 0.3, 1);
150
165
  }
151
166
 
152
167
  .n-alert-close[data-v-291d86b1]:hover{
@@ -43,11 +43,16 @@ const icons = { success: '✓', error: '✕', warning: '⚡', info: 'ℹ' }
43
43
  align-items: flex-start;
44
44
  gap: var(--n-space-3);
45
45
  padding: var(--n-space-4) var(--n-space-5);
46
- border-radius: var(--n-radius-md);
47
- border: 1px solid transparent;
46
+ border-radius: var(--n-radius-lg);
47
+ border-style: solid;
48
+ border-width: 1px;
49
+ border-left-width: 4px;
50
+ border-color: transparent;
48
51
  font-size: var(--n-text-sm);
49
52
  line-height: var(--n-leading-normal);
50
- animation: n-alert-in 0.25s ease-out;
53
+ animation: n-alert-in 0.3s cubic-bezier(0.16, 1, 0.3, 1);
54
+ box-shadow: 0 4px 24px rgba(0,0,0,0.06);
55
+ backdrop-filter: blur(12px);
51
56
  }
52
57
 
53
58
  @keyframes n-alert-in {
@@ -58,24 +63,28 @@ const icons = { success: '✓', error: '✕', warning: '⚡', info: 'ℹ' }
58
63
  .is-info {
59
64
  background: var(--n-color-primary-light);
60
65
  border-color: var(--n-color-primary-border);
66
+ border-left-color: var(--n-color-primary);
61
67
  color: var(--n-color-primary);
62
68
  }
63
69
 
64
70
  .is-success {
65
71
  background: var(--n-color-success-light);
66
72
  border-color: var(--n-color-success-border);
73
+ border-left-color: var(--n-color-success);
67
74
  color: var(--n-color-success);
68
75
  }
69
76
 
70
77
  .is-warning {
71
78
  background: var(--n-color-warning-light);
72
79
  border-color: var(--n-color-warning-border);
80
+ border-left-color: var(--n-color-warning);
73
81
  color: var(--n-color-warning);
74
82
  }
75
83
 
76
84
  .is-error {
77
85
  background: var(--n-color-danger-light);
78
86
  border-color: var(--n-color-danger-border);
87
+ border-left-color: var(--n-color-danger);
79
88
  color: var(--n-color-danger);
80
89
  }
81
90
 
@@ -83,7 +92,13 @@ const icons = { success: '✓', error: '✕', warning: '⚡', info: 'ℹ' }
83
92
  font-size: var(--n-text-base);
84
93
  font-weight: var(--n-weight-bold);
85
94
  flex-shrink: 0;
86
- line-height: 1.4;
95
+ line-height: 1;
96
+ display: flex;
97
+ align-items: center;
98
+ justify-content: center;
99
+ width: 20px;
100
+ height: 20px;
101
+ margin-top: 2px;
87
102
  }
88
103
 
89
104
  .n-alert-body {
@@ -112,7 +127,7 @@ const icons = { success: '✓', error: '✕', warning: '⚡', info: 'ℹ' }
112
127
  padding: 0;
113
128
  line-height: 1;
114
129
  flex-shrink: 0;
115
- transition: color var(--n-transition-fast);
130
+ transition: color 0.2s cubic-bezier(0.16, 1, 0.3, 1);
116
131
  }
117
132
 
118
133
  .n-alert-close:hover {
@@ -51,6 +51,8 @@ const __style = `.n-avatar[data-v-147134]{
51
51
  color: var(--n-color-text);
52
52
  user-select: none;
53
53
  transition: all var(--n-transition-fast);
54
+ border: 1px solid var(--n-color-border);
55
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
54
56
  }
55
57
 
56
58
  .is-sm[data-v-147134]{ width: 32px; height: 32px; font-size: var(--n-text-xs); }
@@ -43,6 +43,8 @@ const initials = computed(() => {
43
43
  color: var(--n-color-text);
44
44
  user-select: none;
45
45
  transition: all var(--n-transition-fast);
46
+ border: 1px solid var(--n-color-border);
47
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
46
48
  }
47
49
 
48
50
  .is-sm { width: 32px; height: 32px; font-size: var(--n-text-xs); }
@@ -35,13 +35,14 @@ const __style = `.n-badge[data-v-ff3cf3e]{
35
35
  justify-content: center;
36
36
  padding: 0.25rem 0.6rem;
37
37
  font-size: var(--n-text-xs);
38
- font-weight: var(--n-weight-bold);
39
- border-radius: var(--n-radius-sm);
38
+ font-weight: var(--n-weight-semibold);
39
+ border-radius: var(--n-radius-full);
40
40
  line-height: 1;
41
41
  font-family: var(--n-font-sans);
42
42
  text-transform: uppercase;
43
- letter-spacing: var(--n-tracking-wide);
43
+ letter-spacing: 0.03em;
44
44
  transition: all var(--n-transition-fast);
45
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.2);
45
46
  }
46
47
 
47
48
  .n-badge-primary[data-v-ff3cf3e]{ background: var(--n-color-primary); color: white; }
@@ -49,7 +50,7 @@ const __style = `.n-badge[data-v-ff3cf3e]{
49
50
  .n-badge-danger[data-v-ff3cf3e]{ background: var(--n-color-danger); color: white; }
50
51
  .n-badge-warning[data-v-ff3cf3e]{ background: var(--n-color-warning); color: white; }
51
52
  .n-badge-info[data-v-ff3cf3e]{ background: var(--n-color-info); color: white; }
52
- .n-badge-secondary[data-v-ff3cf3e]{ background: var(--n-color-surface-hover); color: var(--n-color-text-secondary); }
53
+ .n-badge-secondary[data-v-ff3cf3e]{ background: var(--n-color-surface-hover); color: var(--n-color-text); }
53
54
 
54
55
  .n-badge-sm[data-v-ff3cf3e]{ padding: 0.15rem 0.4rem; font-size: 0.65rem; }
55
56
  .n-badge-lg[data-v-ff3cf3e]{ padding: 0.4rem 0.8rem; font-size: var(--n-text-sm); }
@@ -22,13 +22,14 @@ const props = defineProps({
22
22
  justify-content: center;
23
23
  padding: 0.25rem 0.6rem;
24
24
  font-size: var(--n-text-xs);
25
- font-weight: var(--n-weight-bold);
26
- border-radius: var(--n-radius-sm);
25
+ font-weight: var(--n-weight-semibold);
26
+ border-radius: var(--n-radius-full);
27
27
  line-height: 1;
28
28
  font-family: var(--n-font-sans);
29
29
  text-transform: uppercase;
30
- letter-spacing: var(--n-tracking-wide);
30
+ letter-spacing: 0.03em;
31
31
  transition: all var(--n-transition-fast);
32
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.2);
32
33
  }
33
34
 
34
35
  .n-badge-primary { background: var(--n-color-primary); color: white; }
@@ -36,7 +37,7 @@ const props = defineProps({
36
37
  .n-badge-danger { background: var(--n-color-danger); color: white; }
37
38
  .n-badge-warning { background: var(--n-color-warning); color: white; }
38
39
  .n-badge-info { background: var(--n-color-info); color: white; }
39
- .n-badge-secondary { background: var(--n-color-surface-hover); color: var(--n-color-text-secondary); }
40
+ .n-badge-secondary { background: var(--n-color-surface-hover); color: var(--n-color-text); }
40
41
 
41
42
  .n-badge-sm { padding: 0.15rem 0.4rem; font-size: 0.65rem; }
42
43
  .n-badge-lg { padding: 0.4rem 0.8rem; font-size: var(--n-text-sm); }
@@ -2,7 +2,7 @@ import { signal, computed, effect, onMounted, onUnmounted, h, hText, defineCompo
2
2
  import { useGestures } from 'nexa-mobile'
3
3
 
4
4
  const _sfc_main = defineComponent({
5
- __scopeId: 'data-v-3df910b7',
5
+ __scopeId: 'data-v-2489c54f',
6
6
  __hmrId: 'NBottomSheet_nexa',
7
7
  props: {
8
8
  show: { type: Boolean, default: false },
@@ -61,20 +61,20 @@ const _sfc_main = defineComponent({
61
61
  // Injected render function
62
62
  _sfc_main.render = function(ctx) {
63
63
  let { yOffset, isDragging, currentSnap, gestures, sortedPoints, translateY, overlayOpacity, useGestures, $slots, emit, show, snapPoints, Fragment: _ntc_Fragment, Teleport: _ntc_Teleport } = ctx
64
- return h(_ntc_Teleport, { to: "body", "data-v-3df910b7": "" }, [
64
+ return h(_ntc_Teleport, { to: "body", "data-v-2489c54f": "" }, [
65
65
  "\n ",
66
- h('div', { class: ["n-bottom-sheet-root", { 'is-active': show || isDragging.value }], "data-v-3df910b7": "" }, [
66
+ h('div', { class: ["n-bottom-sheet-root", { 'is-active': show || isDragging.value }], "data-v-2489c54f": "" }, [
67
67
  "\n ",
68
- h('div', { class: "n-bottom-sheet-overlay", style: { opacity: overlayOpacity.value }, onClick: ($event) => { emit('close') }, "data-v-3df910b7": "" }),
68
+ h('div', { class: "n-bottom-sheet-overlay", style: { opacity: overlayOpacity.value }, onClick: ($event) => { emit('close') }, "data-v-2489c54f": "" }),
69
69
  "\n ",
70
70
  h('div', { class: "n-bottom-sheet-container", id: "n-bottom-sheet-content", style: {
71
71
  transform: `translateY(${translateY.value})`,
72
- transition: isDragging.value ? 'none' : 'transform var(--n-transition-slow)'
73
- }, "data-v-3df910b7": "" }, [
72
+ transition: isDragging.value ? 'none' : 'transform 0.4s cubic-bezier(0.16, 1, 0.3, 1)'
73
+ }, "data-v-2489c54f": "" }, [
74
74
  "\n ",
75
- h('div', { class: "n-bottom-sheet-handle", "data-v-3df910b7": "" }),
75
+ h('div', { class: "n-bottom-sheet-handle", "data-v-2489c54f": "" }),
76
76
  "\n ",
77
- h('div', { class: "n-bottom-sheet-inner", "data-v-3df910b7": "" }, [
77
+ h('div', { class: "n-bottom-sheet-inner", "data-v-2489c54f": "" }, [
78
78
  "\n ",
79
79
  ctx.$slots.default ? ctx.$slots.default() : null,
80
80
  "\n "
@@ -86,12 +86,12 @@ _sfc_main.render = function(ctx) {
86
86
  "\n "
87
87
  ])
88
88
  }
89
- _sfc_main.__scopeId = 'data-v-3df910b7'
89
+ _sfc_main.__scopeId = 'data-v-2489c54f'
90
90
  _sfc_main.__hmrId = 'NBottomSheet_nexa'
91
91
 
92
92
  export default _sfc_main
93
93
 
94
- const __style = `.n-bottom-sheet-root[data-v-3df910b7]{
94
+ const __style = `.n-bottom-sheet-root[data-v-2489c54f]{
95
95
  position: fixed;
96
96
  top: 0;
97
97
  left: 0;
@@ -103,47 +103,49 @@ const __style = `.n-bottom-sheet-root[data-v-3df910b7]{
103
103
  align-items: flex-end;
104
104
  }
105
105
 
106
- .n-bottom-sheet-root.is-active[data-v-3df910b7]{
106
+ .n-bottom-sheet-root.is-active[data-v-2489c54f]{
107
107
  pointer-events: auto;
108
108
  }
109
109
 
110
- .n-bottom-sheet-overlay[data-v-3df910b7]{
110
+ .n-bottom-sheet-overlay[data-v-2489c54f]{
111
111
  position: absolute;
112
112
  top: 0;
113
113
  left: 0;
114
114
  width: 100%;
115
115
  height: 100%;
116
116
  background: var(--n-color-overlay);
117
- backdrop-filter: blur(4px);
118
- transition: opacity 0.3s ease;
117
+ backdrop-filter: blur(8px);
118
+ transition: opacity 0.35s cubic-bezier(0.16, 1, 0.3, 1);
119
119
  }
120
120
 
121
- .n-bottom-sheet-container[data-v-3df910b7]{
121
+ .n-bottom-sheet-container[data-v-2489c54f]{
122
122
  position: relative;
123
123
  width: 100%;
124
124
  max-height: 90vh;
125
125
  background: var(--n-color-surface);
126
126
  border-top: 1px solid var(--n-color-border);
127
127
  border-radius: var(--n-radius-2xl) var(--n-radius-2xl) 0 0;
128
- box-shadow: var(--n-shadow-top-lg);
128
+ box-shadow: var(--n-shadow-top-lg), 0 -8px 32px rgba(0, 0, 0, 0.08);
129
129
  padding-bottom: env(safe-area-inset-bottom, 20px);
130
130
  touch-action: none;
131
131
  display: flex;
132
132
  flex-direction: column;
133
+ transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1);
133
134
  }
134
135
 
135
- .n-bottom-sheet-handle[data-v-3df910b7]{
136
- width: 40px;
137
- height: 4px;
138
- background: var(--n-color-surface-hover);
136
+ .n-bottom-sheet-handle[data-v-2489c54f]{
137
+ width: 48px;
138
+ height: 5px;
139
+ background: var(--n-color-text-muted);
139
140
  border-radius: var(--n-radius-full);
140
141
  margin: var(--n-space-3) auto;
141
142
  flex-shrink: 0;
143
+ opacity: 0.3;
142
144
  }
143
145
 
144
- .n-bottom-sheet-inner[data-v-3df910b7]{
146
+ .n-bottom-sheet-inner[data-v-2489c54f]{
145
147
  padding: var(--n-space-4) var(--n-space-8) var(--n-space-8);
146
148
  overflow-y: auto;
147
149
  flex: 1;
148
150
  }`
149
- injectStyle('data-v-3df910b7', __style)
151
+ injectStyle('data-v-2489c54f', __style)
@@ -74,7 +74,7 @@ const overlayOpacity = computed(() => {
74
74
  class="n-bottom-sheet-container"
75
75
  :style="{
76
76
  transform: `translateY(${translateY.value})`,
77
- transition: isDragging.value ? 'none' : 'transform var(--n-transition-slow)'
77
+ transition: isDragging.value ? 'none' : 'transform 0.4s cubic-bezier(0.16, 1, 0.3, 1)'
78
78
  }"
79
79
  >
80
80
  <div class="n-bottom-sheet-handle"></div>
@@ -110,8 +110,8 @@ const overlayOpacity = computed(() => {
110
110
  width: 100%;
111
111
  height: 100%;
112
112
  background: var(--n-color-overlay);
113
- backdrop-filter: blur(4px);
114
- transition: opacity 0.3s ease;
113
+ backdrop-filter: blur(8px);
114
+ transition: opacity 0.35s cubic-bezier(0.16, 1, 0.3, 1);
115
115
  }
116
116
 
117
117
  .n-bottom-sheet-container {
@@ -121,20 +121,22 @@ const overlayOpacity = computed(() => {
121
121
  background: var(--n-color-surface);
122
122
  border-top: 1px solid var(--n-color-border);
123
123
  border-radius: var(--n-radius-2xl) var(--n-radius-2xl) 0 0;
124
- box-shadow: var(--n-shadow-top-lg);
124
+ box-shadow: var(--n-shadow-top-lg), 0 -8px 32px rgba(0, 0, 0, 0.08);
125
125
  padding-bottom: env(safe-area-inset-bottom, 20px);
126
126
  touch-action: none;
127
127
  display: flex;
128
128
  flex-direction: column;
129
+ transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1);
129
130
  }
130
131
 
131
132
  .n-bottom-sheet-handle {
132
- width: 40px;
133
- height: 4px;
134
- background: var(--n-color-surface-hover);
133
+ width: 48px;
134
+ height: 5px;
135
+ background: var(--n-color-text-muted);
135
136
  border-radius: var(--n-radius-full);
136
137
  margin: var(--n-space-3) auto;
137
138
  flex-shrink: 0;
139
+ opacity: 0.3;
138
140
  }
139
141
 
140
142
  .n-bottom-sheet-inner {
@@ -75,9 +75,10 @@ const __style = `.n-btn[data-v-72f6f577]{
75
75
  gap: var(--n-space-2);
76
76
  font-family: var(--n-font-sans);
77
77
  font-weight: var(--n-weight-semibold);
78
+ letter-spacing: 0.01em;
78
79
  border-radius: var(--n-radius-md);
79
80
  cursor: pointer;
80
- transition: all var(--n-transition-normal);
81
+ transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
81
82
  border: 1px solid transparent;
82
83
  outline: none;
83
84
  white-space: nowrap;
@@ -86,16 +87,18 @@ const __style = `.n-btn[data-v-72f6f577]{
86
87
  text-decoration: none;
87
88
  line-height: var(--n-leading-normal, 1.5);
88
89
  min-width: fit-content;
90
+ will-change: transform;
91
+ -webkit-tap-highlight-color: transparent;
89
92
  }
90
93
 
91
94
  .n-btn[data-v-72f6f577]:focus-visible{
92
- box-shadow: 0 0 0 3px var(--n-color-primary-light);
95
+ box-shadow: 0 0 0 3px var(--n-color-primary-light), 0 0 0 1px var(--n-color-primary);
93
96
  }
94
97
 
95
98
  /* Sizes */
96
- .n-btn-sm[data-v-72f6f577]{ padding: 0.5rem 1.25rem; font-size: var(--n-text-sm); gap: var(--n-space-1); border-radius: var(--n-radius-sm); min-height: 32px; }
97
- .n-btn-md[data-v-72f6f577]{ padding: 0.65rem 1.75rem; font-size: var(--n-text-base); min-height: 40px; }
98
- .n-btn-lg[data-v-72f6f577]{ padding: 0.85rem 2.5rem; font-size: var(--n-text-lg); border-radius: var(--n-radius-lg); min-height: 48px; }
99
+ .n-btn-sm[data-v-72f6f577]{ padding: 0.5rem 1.5rem; font-size: var(--n-text-sm); gap: var(--n-space-1); border-radius: var(--n-radius-sm); min-height: 36px; }
100
+ .n-btn-md[data-v-72f6f577]{ padding: 0.75rem 2rem; font-size: var(--n-text-base); min-height: 44px; }
101
+ .n-btn-lg[data-v-72f6f577]{ padding: 1rem 2.75rem; font-size: var(--n-text-lg); border-radius: var(--n-radius-lg); min-height: 52px; }
99
102
 
100
103
  /* Block */
101
104
  .is-block[data-v-72f6f577]{ width: 100%; }
@@ -103,18 +106,25 @@ const __style = `.n-btn[data-v-72f6f577]{
103
106
  /* Rounded */
104
107
  .is-rounded[data-v-72f6f577]{ border-radius: var(--n-radius-full); }
105
108
 
109
+ /* Active/Press */
110
+ .n-btn[data-v-72f6f577]:active:not(:disabled){
111
+ transform: scale(0.97);
112
+ }
113
+
106
114
  /* Variant: Primary */
107
115
  .n-btn-primary[data-v-72f6f577]{
108
- background: linear-gradient(135deg, var(--n-color-primary) 0%, var(--n-color-primary-hover) 100%);
116
+ background: linear-gradient(135deg, #6366f1 0%, #4f46e5 50%, #4338ca 100%);
109
117
  color: white;
110
- box-shadow: var(--n-shadow-glow-primary);
118
+ box-shadow: 0 4px 14px rgba(99, 102, 241, 0.4), 0 0 0 1px rgba(99, 102, 241, 0.3);
119
+ text-shadow: 0 1px 2px rgba(0,0,0,0.2);
111
120
  }
112
121
  .n-btn-primary[data-v-72f6f577]:hover:not(:disabled){
113
- transform: translateY(-2px);
114
- box-shadow: 0 8px 20px -3px var(--n-color-primary-glow);
122
+ transform: translateY(-3px) scale(1.02);
123
+ box-shadow: 0 8px 25px rgba(99, 102, 241, 0.5), 0 0 0 1px rgba(99, 102, 241, 0.4), 0 0 40px rgba(99, 102, 241, 0.15);
115
124
  }
116
125
  .n-btn-primary[data-v-72f6f577]:active:not(:disabled){
117
- transform: translateY(0) scale(0.97);
126
+ transform: translateY(-1px) scale(0.98);
127
+ box-shadow: 0 2px 8px rgba(99, 102, 241, 0.4), inset 0 2px 4px rgba(0,0,0,0.15);
118
128
  }
119
129
 
120
130
  /* Variant: Secondary */
@@ -126,6 +136,10 @@ const __style = `.n-btn[data-v-72f6f577]{
126
136
  .n-btn-secondary[data-v-72f6f577]:hover:not(:disabled){
127
137
  background: var(--n-color-surface-hover);
128
138
  border-color: var(--n-color-border-hover);
139
+ transform: translateY(-1px);
140
+ }
141
+ .n-btn-secondary[data-v-72f6f577]:active:not(:disabled){
142
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.08);
129
143
  }
130
144
 
131
145
  /* Variant: Success */
@@ -139,7 +153,7 @@ const __style = `.n-btn[data-v-72f6f577]{
139
153
  box-shadow: var(--n-shadow-glow-success);
140
154
  }
141
155
  .n-btn-success[data-v-72f6f577]:active:not(:disabled){
142
- transform: translateY(0) scale(0.97);
156
+ box-shadow: var(--n-shadow-glow-success), inset 0 1px 3px rgba(0,0,0,0.15);
143
157
  }
144
158
 
145
159
  /* Variant: Warning */
@@ -153,7 +167,7 @@ const __style = `.n-btn[data-v-72f6f577]{
153
167
  box-shadow: var(--n-shadow-glow-warning);
154
168
  }
155
169
  .n-btn-warning[data-v-72f6f577]:active:not(:disabled){
156
- transform: translateY(0) scale(0.97);
170
+ box-shadow: var(--n-shadow-glow-warning), inset 0 1px 3px rgba(0,0,0,0.15);
157
171
  }
158
172
 
159
173
  /* Variant: Info */
@@ -167,7 +181,7 @@ const __style = `.n-btn[data-v-72f6f577]{
167
181
  box-shadow: var(--n-shadow-glow-info);
168
182
  }
169
183
  .n-btn-info[data-v-72f6f577]:active:not(:disabled){
170
- transform: translateY(0) scale(0.97);
184
+ box-shadow: var(--n-shadow-glow-info), inset 0 1px 3px rgba(0,0,0,0.15);
171
185
  }
172
186
 
173
187
  /* Variant: Danger */
@@ -181,28 +195,46 @@ const __style = `.n-btn[data-v-72f6f577]{
181
195
  box-shadow: var(--n-shadow-glow-danger);
182
196
  }
183
197
  .n-btn-danger[data-v-72f6f577]:active:not(:disabled){
184
- transform: translateY(0) scale(0.97);
198
+ box-shadow: var(--n-shadow-glow-danger), inset 0 1px 3px rgba(0,0,0,0.15);
185
199
  }
186
200
 
187
201
  /* Variant: Ghost */
188
202
  .n-btn-ghost[data-v-72f6f577]{
189
203
  background: transparent;
204
+ backdrop-filter: blur(12px);
205
+ -webkit-backdrop-filter: blur(12px);
190
206
  color: var(--n-color-text-secondary);
207
+ border-color: transparent;
191
208
  }
192
209
  .n-btn-ghost[data-v-72f6f577]:hover:not(:disabled){
193
210
  background: var(--n-color-glass);
211
+ backdrop-filter: blur(12px);
212
+ -webkit-backdrop-filter: blur(12px);
194
213
  color: var(--n-color-text);
214
+ border-color: var(--n-color-glass-border);
215
+ }
216
+ .n-btn-ghost[data-v-72f6f577]:active:not(:disabled){
217
+ background: var(--n-color-glass-hover);
218
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.06);
195
219
  }
196
220
 
197
221
  /* Variant: Outline */
198
222
  .n-btn-outline[data-v-72f6f577]{
199
223
  background: transparent;
200
224
  color: var(--n-color-primary);
201
- border-color: var(--n-color-primary);
225
+ border: 1.5px solid transparent;
226
+ background-image: linear-gradient(transparent, transparent), linear-gradient(135deg, var(--n-color-primary), var(--n-color-primary-hover));
227
+ background-origin: padding-box, border-box;
228
+ background-clip: padding-box, border-box;
202
229
  }
203
230
  .n-btn-outline[data-v-72f6f577]:hover:not(:disabled){
204
- background: var(--n-color-primary-light);
205
- border-color: var(--n-color-primary-hover);
231
+ background-image: linear-gradient(var(--n-color-primary-light), var(--n-color-primary-light)), linear-gradient(135deg, var(--n-color-primary-hover), var(--n-color-primary));
232
+ background-origin: padding-box, border-box;
233
+ background-clip: padding-box, border-box;
234
+ color: var(--n-color-primary-hover);
235
+ }
236
+ .n-btn-outline[data-v-72f6f577]:active:not(:disabled){
237
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.08);
206
238
  }
207
239
 
208
240
  /* Variant: Glass */
@@ -216,13 +248,26 @@ const __style = `.n-btn[data-v-72f6f577]{
216
248
  background: var(--n-color-glass-hover);
217
249
  border-color: var(--n-color-border-hover);
218
250
  }
251
+ .n-btn-glass[data-v-72f6f577]:active:not(:disabled){
252
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.08);
253
+ }
219
254
 
220
255
  /* Disabled */
221
256
  .n-btn[data-v-72f6f577]:disabled{
222
- opacity: 0.45;
223
257
  cursor: not-allowed;
224
258
  transform: none !important;
225
259
  box-shadow: none !important;
260
+ pointer-events: none;
261
+ opacity: 0.55;
262
+ }
263
+ .n-btn[data-v-72f6f577]:disabled::after{
264
+ content: '';
265
+ position: absolute;
266
+ inset: 0;
267
+ border-radius: inherit;
268
+ background: var(--n-color-surface, #fff);
269
+ opacity: 0.3;
270
+ pointer-events: none;
226
271
  }
227
272
 
228
273
  /* Loader */