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
@@ -67,9 +67,10 @@ const btnClass = computed(() => {
67
67
  gap: var(--n-space-2);
68
68
  font-family: var(--n-font-sans);
69
69
  font-weight: var(--n-weight-semibold);
70
+ letter-spacing: 0.01em;
70
71
  border-radius: var(--n-radius-md);
71
72
  cursor: pointer;
72
- transition: all var(--n-transition-normal);
73
+ transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
73
74
  border: 1px solid transparent;
74
75
  outline: none;
75
76
  white-space: nowrap;
@@ -78,16 +79,18 @@ const btnClass = computed(() => {
78
79
  text-decoration: none;
79
80
  line-height: var(--n-leading-normal, 1.5);
80
81
  min-width: fit-content;
82
+ will-change: transform;
83
+ -webkit-tap-highlight-color: transparent;
81
84
  }
82
85
 
83
86
  .n-btn:focus-visible {
84
- box-shadow: 0 0 0 3px var(--n-color-primary-light);
87
+ box-shadow: 0 0 0 3px var(--n-color-primary-light), 0 0 0 1px var(--n-color-primary);
85
88
  }
86
89
 
87
90
  /* Sizes */
88
- .n-btn-sm { 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; }
89
- .n-btn-md { padding: 0.65rem 1.75rem; font-size: var(--n-text-base); min-height: 40px; }
90
- .n-btn-lg { padding: 0.85rem 2.5rem; font-size: var(--n-text-lg); border-radius: var(--n-radius-lg); min-height: 48px; }
91
+ .n-btn-sm { 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; }
92
+ .n-btn-md { padding: 0.75rem 2rem; font-size: var(--n-text-base); min-height: 44px; }
93
+ .n-btn-lg { padding: 1rem 2.75rem; font-size: var(--n-text-lg); border-radius: var(--n-radius-lg); min-height: 52px; }
91
94
 
92
95
  /* Block */
93
96
  .is-block { width: 100%; }
@@ -95,6 +98,11 @@ const btnClass = computed(() => {
95
98
  /* Rounded */
96
99
  .is-rounded { border-radius: var(--n-radius-full); }
97
100
 
101
+ /* Active/Press */
102
+ .n-btn:active:not(:disabled) {
103
+ transform: scale(0.97);
104
+ }
105
+
98
106
  /* Variant: Primary */
99
107
  .n-btn-primary {
100
108
  background: linear-gradient(135deg, var(--n-color-primary) 0%, var(--n-color-primary-hover) 100%);
@@ -106,7 +114,7 @@ const btnClass = computed(() => {
106
114
  box-shadow: 0 8px 20px -3px var(--n-color-primary-glow);
107
115
  }
108
116
  .n-btn-primary:active:not(:disabled) {
109
- transform: translateY(0) scale(0.97);
117
+ box-shadow: var(--n-shadow-glow-primary), inset 0 1px 3px rgba(0,0,0,0.15);
110
118
  }
111
119
 
112
120
  /* Variant: Secondary */
@@ -118,6 +126,10 @@ const btnClass = computed(() => {
118
126
  .n-btn-secondary:hover:not(:disabled) {
119
127
  background: var(--n-color-surface-hover);
120
128
  border-color: var(--n-color-border-hover);
129
+ transform: translateY(-1px);
130
+ }
131
+ .n-btn-secondary:active:not(:disabled) {
132
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.08);
121
133
  }
122
134
 
123
135
  /* Variant: Success */
@@ -131,7 +143,7 @@ const btnClass = computed(() => {
131
143
  box-shadow: var(--n-shadow-glow-success);
132
144
  }
133
145
  .n-btn-success:active:not(:disabled) {
134
- transform: translateY(0) scale(0.97);
146
+ box-shadow: var(--n-shadow-glow-success), inset 0 1px 3px rgba(0,0,0,0.15);
135
147
  }
136
148
 
137
149
  /* Variant: Warning */
@@ -145,7 +157,7 @@ const btnClass = computed(() => {
145
157
  box-shadow: var(--n-shadow-glow-warning);
146
158
  }
147
159
  .n-btn-warning:active:not(:disabled) {
148
- transform: translateY(0) scale(0.97);
160
+ box-shadow: var(--n-shadow-glow-warning), inset 0 1px 3px rgba(0,0,0,0.15);
149
161
  }
150
162
 
151
163
  /* Variant: Info */
@@ -159,7 +171,7 @@ const btnClass = computed(() => {
159
171
  box-shadow: var(--n-shadow-glow-info);
160
172
  }
161
173
  .n-btn-info:active:not(:disabled) {
162
- transform: translateY(0) scale(0.97);
174
+ box-shadow: var(--n-shadow-glow-info), inset 0 1px 3px rgba(0,0,0,0.15);
163
175
  }
164
176
 
165
177
  /* Variant: Danger */
@@ -173,28 +185,46 @@ const btnClass = computed(() => {
173
185
  box-shadow: var(--n-shadow-glow-danger);
174
186
  }
175
187
  .n-btn-danger:active:not(:disabled) {
176
- transform: translateY(0) scale(0.97);
188
+ box-shadow: var(--n-shadow-glow-danger), inset 0 1px 3px rgba(0,0,0,0.15);
177
189
  }
178
190
 
179
191
  /* Variant: Ghost */
180
192
  .n-btn-ghost {
181
193
  background: transparent;
194
+ backdrop-filter: blur(12px);
195
+ -webkit-backdrop-filter: blur(12px);
182
196
  color: var(--n-color-text-secondary);
197
+ border-color: transparent;
183
198
  }
184
199
  .n-btn-ghost:hover:not(:disabled) {
185
200
  background: var(--n-color-glass);
201
+ backdrop-filter: blur(12px);
202
+ -webkit-backdrop-filter: blur(12px);
186
203
  color: var(--n-color-text);
204
+ border-color: var(--n-color-glass-border);
205
+ }
206
+ .n-btn-ghost:active:not(:disabled) {
207
+ background: var(--n-color-glass-hover);
208
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.06);
187
209
  }
188
210
 
189
211
  /* Variant: Outline */
190
212
  .n-btn-outline {
191
213
  background: transparent;
192
214
  color: var(--n-color-primary);
193
- border-color: var(--n-color-primary);
215
+ border: 1.5px solid transparent;
216
+ background-image: linear-gradient(transparent, transparent), linear-gradient(135deg, var(--n-color-primary), var(--n-color-primary-hover));
217
+ background-origin: padding-box, border-box;
218
+ background-clip: padding-box, border-box;
194
219
  }
195
220
  .n-btn-outline:hover:not(:disabled) {
196
- background: var(--n-color-primary-light);
197
- border-color: var(--n-color-primary-hover);
221
+ 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));
222
+ background-origin: padding-box, border-box;
223
+ background-clip: padding-box, border-box;
224
+ color: var(--n-color-primary-hover);
225
+ }
226
+ .n-btn-outline:active:not(:disabled) {
227
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.08);
198
228
  }
199
229
 
200
230
  /* Variant: Glass */
@@ -208,13 +238,26 @@ const btnClass = computed(() => {
208
238
  background: var(--n-color-glass-hover);
209
239
  border-color: var(--n-color-border-hover);
210
240
  }
241
+ .n-btn-glass:active:not(:disabled) {
242
+ box-shadow: inset 0 1px 3px rgba(0,0,0,0.08);
243
+ }
211
244
 
212
245
  /* Disabled */
213
246
  .n-btn:disabled {
214
- opacity: 0.45;
215
247
  cursor: not-allowed;
216
248
  transform: none !important;
217
249
  box-shadow: none !important;
250
+ pointer-events: none;
251
+ opacity: 0.55;
252
+ }
253
+ .n-btn:disabled::after {
254
+ content: '';
255
+ position: absolute;
256
+ inset: 0;
257
+ border-radius: inherit;
258
+ background: var(--n-color-surface, #fff);
259
+ opacity: 0.3;
260
+ pointer-events: none;
218
261
  }
219
262
 
220
263
  /* Loader */
@@ -53,16 +53,17 @@ export default _sfc_main
53
53
  const __style = `.n-card[data-v-28bb4c76]{
54
54
  background: var(--n-color-surface);
55
55
  border: 1px solid var(--n-color-border);
56
- border-radius: var(--n-radius-xl);
56
+ border-radius: var(--n-radius-lg);
57
57
  overflow: hidden;
58
- transition: all var(--n-transition-normal);
58
+ transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
59
59
  display: flex;
60
60
  flex-direction: column;
61
+ will-change: transform, box-shadow;
61
62
  }
62
63
 
63
64
  .is-elevated[data-v-28bb4c76]{
64
65
  background: var(--n-color-surface-elevated);
65
- box-shadow: var(--n-shadow-lg);
66
+ box-shadow: var(--n-shadow-md);
66
67
  }
67
68
 
68
69
  .is-outlined[data-v-28bb4c76]{
@@ -78,9 +79,9 @@ const __style = `.n-card[data-v-28bb4c76]{
78
79
  }
79
80
 
80
81
  .n-card.is-hoverable[data-v-28bb4c76]:hover{
81
- transform: translateY(-4px);
82
+ transform: translateY(-2px);
82
83
  border-color: var(--n-color-border-hover);
83
- box-shadow: var(--n-shadow-xl);
84
+ box-shadow: var(--n-shadow-lg);
84
85
  }
85
86
 
86
87
  .n-card-image[data-v-28bb4c76]{
@@ -32,16 +32,17 @@ const props = defineProps({
32
32
  .n-card {
33
33
  background: var(--n-color-surface);
34
34
  border: 1px solid var(--n-color-border);
35
- border-radius: var(--n-radius-xl);
35
+ border-radius: var(--n-radius-lg);
36
36
  overflow: hidden;
37
- transition: all var(--n-transition-normal);
37
+ transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
38
38
  display: flex;
39
39
  flex-direction: column;
40
+ will-change: transform, box-shadow;
40
41
  }
41
42
 
42
43
  .is-elevated {
43
44
  background: var(--n-color-surface-elevated);
44
- box-shadow: var(--n-shadow-lg);
45
+ box-shadow: var(--n-shadow-md);
45
46
  }
46
47
 
47
48
  .is-outlined {
@@ -57,9 +58,9 @@ const props = defineProps({
57
58
  }
58
59
 
59
60
  .n-card.is-hoverable:hover {
60
- transform: translateY(-4px);
61
+ transform: translateY(-2px);
61
62
  border-color: var(--n-color-border-hover);
62
- box-shadow: var(--n-shadow-xl);
63
+ box-shadow: var(--n-shadow-lg);
63
64
  }
64
65
 
65
66
  .n-card-image {
@@ -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-1e350f9a',
4
+ __scopeId: 'data-v-3302b953',
5
5
  __hmrId: 'NCheckbox_nexa',
6
6
  props: {
7
7
  modelValue: { type: Boolean, default: false },
@@ -22,33 +22,37 @@ const _sfc_main = defineComponent({
22
22
  // Injected render function
23
23
  _sfc_main.render = function(ctx) {
24
24
  let { toggle, $slots, emit, modelValue, label, disabled, indeterminate, Fragment: _ntc_Fragment } = ctx
25
- return h('label', { class: ["n-checkbox", { 'is-checked': modelValue && !indeterminate, 'is-indeterminate': indeterminate, 'is-disabled': disabled }], "data-v-1e350f9a": "" }, [
25
+ return h('label', { class: ["n-checkbox", { 'is-checked': modelValue && !indeterminate, 'is-indeterminate': indeterminate, 'is-disabled': disabled }], "data-v-3302b953": "" }, [
26
26
  "\n ",
27
- h('div', { class: "n-checkbox-box", onClick: toggle, "data-v-1e350f9a": "" }, [
27
+ h('div', { class: "n-checkbox-box", onClick: toggle, "data-v-3302b953": "" }, [
28
28
  "\n ",
29
- h('span', { class: "n-checkbox-icon", "data-v-1e350f9a": "" }, [
29
+ (modelValue && !indeterminate) ? h('span', { class: "n-checkbox-icon", "data-v-3302b953": "" }, [
30
30
  "\n ",
31
- (indeterminate) ? h('svg', { viewBox: "0 0 24 24", width: "14", height: "14", fill: "none", stroke: "currentColor", "stroke-width": "3", "stroke-linecap": "round", focusable: "false", "aria-hidden": "true", "data-v-1e350f9a": "" }, [
32
- h('line', { x1: "4", y1: "12", x2: "20", y2: "12", "data-v-1e350f9a": "" })
33
- ]) : (true) ? h('svg', { viewBox: "0 0 24 24", width: "14", height: "14", fill: "none", stroke: "currentColor", "stroke-width": "3", "stroke-linecap": "round", "stroke-linejoin": "round", focusable: "false", "aria-hidden": "true", "data-v-1e350f9a": "" }, [
34
- h('path', { d: "M20 6L9 17l-5-5", "data-v-1e350f9a": "" })
35
- ]) : null,
31
+ h('svg', { viewBox: "0 0 24 24", width: "14", height: "14", fill: "none", stroke: "currentColor", "stroke-width": "3", "stroke-linecap": "round", "stroke-linejoin": "round", focusable: "false", "aria-hidden": "true", "data-v-3302b953": "" }, [
32
+ h('path', { d: "M20 6L9 17l-5-5", "data-v-3302b953": "" })
33
+ ]),
36
34
  "\n "
35
+ ]) : null,
36
+ (indeterminate) ? h('span', { class: "n-checkbox-icon", "data-v-3302b953": "" }, [
37
+ "\n ",
38
+ h('svg', { viewBox: "0 0 24 24", width: "14", height: "14", fill: "none", stroke: "currentColor", "stroke-width": "3", "stroke-linecap": "round", focusable: "false", "aria-hidden": "true", "data-v-3302b953": "" }, [
39
+ h('line', { x1: "4", y1: "12", x2: "20", y2: "12", "data-v-3302b953": "" })
37
40
  ]),
38
- "\n "
41
+ "\n "
42
+ ]) : null
39
43
  ]),
40
44
  "\n ",
41
- (label) ? h('span', { class: "n-checkbox-label", "data-v-1e350f9a": "" }, [
45
+ (label) ? h('span', { class: "n-checkbox-label", "data-v-3302b953": "" }, [
42
46
  label
43
47
  ]) : null
44
48
  ])
45
49
  }
46
- _sfc_main.__scopeId = 'data-v-1e350f9a'
50
+ _sfc_main.__scopeId = 'data-v-3302b953'
47
51
  _sfc_main.__hmrId = 'NCheckbox_nexa'
48
52
 
49
53
  export default _sfc_main
50
54
 
51
- const __style = `.n-checkbox[data-v-1e350f9a]{
55
+ const __style = `.n-checkbox[data-v-3302b953]{
52
56
  display: inline-flex;
53
57
  align-items: center;
54
58
  gap: var(--n-space-3);
@@ -56,57 +60,62 @@ const __style = `.n-checkbox[data-v-1e350f9a]{
56
60
  user-select: none;
57
61
  }
58
62
 
59
- .n-checkbox-box[data-v-1e350f9a]{
60
- width: 20px;
61
- height: 20px;
63
+ .n-checkbox-box[data-v-3302b953]{
64
+ width: 22px;
65
+ height: 22px;
62
66
  border: 2px solid var(--n-color-border);
63
67
  border-radius: var(--n-radius-sm);
64
68
  display: flex;
65
69
  align-items: center;
66
70
  justify-content: center;
67
- transition: all var(--n-transition-fast);
71
+ transition: all var(--n-transition-normal);
68
72
  flex-shrink: 0;
69
73
  background: transparent;
70
74
  }
71
75
 
72
- .is-checked .n-checkbox-box[data-v-1e350f9a]{
76
+ .is-checked .n-checkbox-box[data-v-3302b953]{
73
77
  background: var(--n-color-primary);
74
78
  border-color: var(--n-color-primary);
79
+ box-shadow: var(--n-shadow-glow-primary);
75
80
  }
76
81
 
77
- .is-indeterminate .n-checkbox-box[data-v-1e350f9a]{
82
+ .is-indeterminate .n-checkbox-box[data-v-3302b953]{
78
83
  background: var(--n-color-primary);
79
84
  border-color: var(--n-color-primary);
85
+ box-shadow: var(--n-shadow-glow-primary);
80
86
  }
81
87
 
82
- .n-checkbox-icon[data-v-1e350f9a]{
88
+ .n-checkbox-icon[data-v-3302b953]{
89
+ display: flex;
90
+ align-items: center;
91
+ justify-content: center;
83
92
  color: white;
84
- font-size: 12px;
85
- font-weight: var(--n-weight-bold);
86
93
  line-height: 1;
87
- opacity: 0;
88
- transform: scale(0);
89
- transition: all var(--n-transition-fast);
94
+ animation: n-checkbox-pop 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);
95
+ }
96
+
97
+ .n-checkbox-icon svg[data-v-3302b953]{
98
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.2));
90
99
  }
91
100
 
92
- .is-checked .n-checkbox-icon[data-v-1e350f9a],
93
- .is-indeterminate .n-checkbox-icon[data-v-1e350f9a]{
94
- opacity: 1;
95
- transform: scale(1);
101
+ @keyframes n-checkbox-pop {
102
+ 0%[data-v-3302b953]{ transform: scale(0); opacity: 0; }
103
+ 50%[data-v-3302b953]{ transform: scale(1.15); }
104
+ 100%[data-v-3302b953]{ transform: scale(1); opacity: 1; }
96
105
  }
97
106
 
98
- .n-checkbox-label[data-v-1e350f9a]{
107
+ .n-checkbox-label[data-v-3302b953]{
99
108
  font-size: var(--n-text-sm);
100
109
  color: var(--n-color-text);
101
110
  font-weight: var(--n-weight-medium);
102
111
  }
103
112
 
104
- .is-disabled[data-v-1e350f9a]{
113
+ .is-disabled[data-v-3302b953]{
105
114
  opacity: 0.5;
106
115
  cursor: not-allowed;
107
116
  }
108
117
 
109
- .n-checkbox[data-v-1e350f9a]:hover:not(.is-disabled) .n-checkbox-box{
118
+ .n-checkbox[data-v-3302b953]:hover:not(.is-disabled) .n-checkbox-box{
110
119
  border-color: var(--n-color-primary);
111
120
  }`
112
- injectStyle('data-v-1e350f9a', __style)
121
+ injectStyle('data-v-3302b953', __style)
@@ -17,9 +17,11 @@ const toggle = () => {
17
17
  <template>
18
18
  <label class="n-checkbox" :class="{ 'is-checked': modelValue && !indeterminate, 'is-indeterminate': indeterminate, 'is-disabled': disabled }">
19
19
  <div class="n-checkbox-box" @click="toggle">
20
- <span class="n-checkbox-icon">
21
- <svg v-if="indeterminate" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" focusable="false" aria-hidden="true"><line x1="4" y1="12" x2="20" y2="12"/></svg>
22
- <svg v-else viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" focusable="false" aria-hidden="true"><path d="M20 6L9 17l-5-5"/></svg>
20
+ <span v-if="modelValue && !indeterminate" class="n-checkbox-icon">
21
+ <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" focusable="false" aria-hidden="true"><path d="M20 6L9 17l-5-5"/></svg>
22
+ </span>
23
+ <span v-if="indeterminate" class="n-checkbox-icon">
24
+ <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" focusable="false" aria-hidden="true"><line x1="4" y1="12" x2="20" y2="12"/></svg>
23
25
  </span>
24
26
  </div>
25
27
  <span v-if="label" class="n-checkbox-label">{{ label }}</span>
@@ -36,14 +38,14 @@ const toggle = () => {
36
38
  }
37
39
 
38
40
  .n-checkbox-box {
39
- width: 20px;
40
- height: 20px;
41
+ width: 22px;
42
+ height: 22px;
41
43
  border: 2px solid var(--n-color-border);
42
44
  border-radius: var(--n-radius-sm);
43
45
  display: flex;
44
46
  align-items: center;
45
47
  justify-content: center;
46
- transition: all var(--n-transition-fast);
48
+ transition: all var(--n-transition-normal);
47
49
  flex-shrink: 0;
48
50
  background: transparent;
49
51
  }
@@ -51,27 +53,32 @@ const toggle = () => {
51
53
  .is-checked .n-checkbox-box {
52
54
  background: var(--n-color-primary);
53
55
  border-color: var(--n-color-primary);
56
+ box-shadow: var(--n-shadow-glow-primary);
54
57
  }
55
58
 
56
59
  .is-indeterminate .n-checkbox-box {
57
60
  background: var(--n-color-primary);
58
61
  border-color: var(--n-color-primary);
62
+ box-shadow: var(--n-shadow-glow-primary);
59
63
  }
60
64
 
61
65
  .n-checkbox-icon {
66
+ display: flex;
67
+ align-items: center;
68
+ justify-content: center;
62
69
  color: white;
63
- font-size: 12px;
64
- font-weight: var(--n-weight-bold);
65
70
  line-height: 1;
66
- opacity: 0;
67
- transform: scale(0);
68
- transition: all var(--n-transition-fast);
71
+ animation: n-checkbox-pop 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);
72
+ }
73
+
74
+ .n-checkbox-icon svg {
75
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.2));
69
76
  }
70
77
 
71
- .is-checked .n-checkbox-icon,
72
- .is-indeterminate .n-checkbox-icon {
73
- opacity: 1;
74
- transform: scale(1);
78
+ @keyframes n-checkbox-pop {
79
+ 0% { transform: scale(0); opacity: 0; }
80
+ 50% { transform: scale(1.15); }
81
+ 100% { transform: scale(1); opacity: 1; }
75
82
  }
76
83
 
77
84
  .n-checkbox-label {