nexa-ui-kit 0.11.3 → 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 +79 -38
  42. package/dist/components/NTreeMenu.nexa +58 -17
  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 +58 -17
  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,6 +106,11 @@ 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
116
  background: linear-gradient(135deg, var(--n-color-primary) 0%, var(--n-color-primary-hover) 100%);
@@ -114,7 +122,7 @@ const __style = `.n-btn[data-v-72f6f577]{
114
122
  box-shadow: 0 8px 20px -3px var(--n-color-primary-glow);
115
123
  }
116
124
  .n-btn-primary[data-v-72f6f577]:active:not(:disabled){
117
- transform: translateY(0) scale(0.97);
125
+ box-shadow: var(--n-shadow-glow-primary), inset 0 1px 3px rgba(0,0,0,0.15);
118
126
  }
119
127
 
120
128
  /* Variant: Secondary */
@@ -126,6 +134,10 @@ const __style = `.n-btn[data-v-72f6f577]{
126
134
  .n-btn-secondary[data-v-72f6f577]:hover:not(:disabled){
127
135
  background: var(--n-color-surface-hover);
128
136
  border-color: var(--n-color-border-hover);
137
+ transform: translateY(-1px);
138
+ }
139
+ .n-btn-secondary[data-v-72f6f577]:active:not(:disabled){
140
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.08);
129
141
  }
130
142
 
131
143
  /* Variant: Success */
@@ -139,7 +151,7 @@ const __style = `.n-btn[data-v-72f6f577]{
139
151
  box-shadow: var(--n-shadow-glow-success);
140
152
  }
141
153
  .n-btn-success[data-v-72f6f577]:active:not(:disabled){
142
- transform: translateY(0) scale(0.97);
154
+ box-shadow: var(--n-shadow-glow-success), inset 0 1px 3px rgba(0,0,0,0.15);
143
155
  }
144
156
 
145
157
  /* Variant: Warning */
@@ -153,7 +165,7 @@ const __style = `.n-btn[data-v-72f6f577]{
153
165
  box-shadow: var(--n-shadow-glow-warning);
154
166
  }
155
167
  .n-btn-warning[data-v-72f6f577]:active:not(:disabled){
156
- transform: translateY(0) scale(0.97);
168
+ box-shadow: var(--n-shadow-glow-warning), inset 0 1px 3px rgba(0,0,0,0.15);
157
169
  }
158
170
 
159
171
  /* Variant: Info */
@@ -167,7 +179,7 @@ const __style = `.n-btn[data-v-72f6f577]{
167
179
  box-shadow: var(--n-shadow-glow-info);
168
180
  }
169
181
  .n-btn-info[data-v-72f6f577]:active:not(:disabled){
170
- transform: translateY(0) scale(0.97);
182
+ box-shadow: var(--n-shadow-glow-info), inset 0 1px 3px rgba(0,0,0,0.15);
171
183
  }
172
184
 
173
185
  /* Variant: Danger */
@@ -181,28 +193,46 @@ const __style = `.n-btn[data-v-72f6f577]{
181
193
  box-shadow: var(--n-shadow-glow-danger);
182
194
  }
183
195
  .n-btn-danger[data-v-72f6f577]:active:not(:disabled){
184
- transform: translateY(0) scale(0.97);
196
+ box-shadow: var(--n-shadow-glow-danger), inset 0 1px 3px rgba(0,0,0,0.15);
185
197
  }
186
198
 
187
199
  /* Variant: Ghost */
188
200
  .n-btn-ghost[data-v-72f6f577]{
189
201
  background: transparent;
202
+ backdrop-filter: blur(12px);
203
+ -webkit-backdrop-filter: blur(12px);
190
204
  color: var(--n-color-text-secondary);
205
+ border-color: transparent;
191
206
  }
192
207
  .n-btn-ghost[data-v-72f6f577]:hover:not(:disabled){
193
208
  background: var(--n-color-glass);
209
+ backdrop-filter: blur(12px);
210
+ -webkit-backdrop-filter: blur(12px);
194
211
  color: var(--n-color-text);
212
+ border-color: var(--n-color-glass-border);
213
+ }
214
+ .n-btn-ghost[data-v-72f6f577]:active:not(:disabled){
215
+ background: var(--n-color-glass-hover);
216
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.06);
195
217
  }
196
218
 
197
219
  /* Variant: Outline */
198
220
  .n-btn-outline[data-v-72f6f577]{
199
221
  background: transparent;
200
222
  color: var(--n-color-primary);
201
- border-color: var(--n-color-primary);
223
+ border: 1.5px solid transparent;
224
+ background-image: linear-gradient(transparent, transparent), linear-gradient(135deg, var(--n-color-primary), var(--n-color-primary-hover));
225
+ background-origin: padding-box, border-box;
226
+ background-clip: padding-box, border-box;
202
227
  }
203
228
  .n-btn-outline[data-v-72f6f577]:hover:not(:disabled){
204
- background: var(--n-color-primary-light);
205
- border-color: var(--n-color-primary-hover);
229
+ 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));
230
+ background-origin: padding-box, border-box;
231
+ background-clip: padding-box, border-box;
232
+ color: var(--n-color-primary-hover);
233
+ }
234
+ .n-btn-outline[data-v-72f6f577]:active:not(:disabled){
235
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.08);
206
236
  }
207
237
 
208
238
  /* Variant: Glass */
@@ -216,13 +246,26 @@ const __style = `.n-btn[data-v-72f6f577]{
216
246
  background: var(--n-color-glass-hover);
217
247
  border-color: var(--n-color-border-hover);
218
248
  }
249
+ .n-btn-glass[data-v-72f6f577]:active:not(:disabled){
250
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.08);
251
+ }
219
252
 
220
253
  /* Disabled */
221
254
  .n-btn[data-v-72f6f577]:disabled{
222
- opacity: 0.45;
223
255
  cursor: not-allowed;
224
256
  transform: none !important;
225
257
  box-shadow: none !important;
258
+ pointer-events: none;
259
+ opacity: 0.55;
260
+ }
261
+ .n-btn[data-v-72f6f577]:disabled::after{
262
+ content: '';
263
+ position: absolute;
264
+ inset: 0;
265
+ border-radius: inherit;
266
+ background: var(--n-color-surface, #fff);
267
+ opacity: 0.3;
268
+ pointer-events: none;
226
269
  }
227
270
 
228
271
  /* Loader */