nexa-ui-kit 0.11.6 → 0.11.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/components/NAlert.js +2 -14
  2. package/dist/components/NAlert.nexa +3 -14
  3. package/dist/components/NAutocomplete.js +1 -1
  4. package/dist/components/NAutocomplete.nexa +2 -1
  5. package/dist/components/NAvatar.js +0 -5
  6. package/dist/components/NAvatar.nexa +1 -5
  7. package/dist/components/NBadge.js +0 -6
  8. package/dist/components/NBadge.nexa +1 -6
  9. package/dist/components/NBottomSheet.js +0 -5
  10. package/dist/components/NBottomSheet.nexa +1 -5
  11. package/dist/components/NButton.js +202 -296
  12. package/dist/components/NButton.nexa +224 -320
  13. package/dist/components/NCard.js +39 -82
  14. package/dist/components/NCard.nexa +27 -71
  15. package/dist/components/NCheckbox.js +74 -63
  16. package/dist/components/NCheckbox.nexa +64 -44
  17. package/dist/components/NChips.nexa +1 -0
  18. package/dist/components/NDataTable.js +1 -313
  19. package/dist/components/NDataTable.nexa +2 -314
  20. package/dist/components/NDatepicker.js +4 -25
  21. package/dist/components/NDatepicker.nexa +5 -25
  22. package/dist/components/NForm.nexa +1 -0
  23. package/dist/components/NFormField.js +0 -5
  24. package/dist/components/NFormField.nexa +1 -5
  25. package/dist/components/NImage.js +1 -6
  26. package/dist/components/NImage.nexa +2 -6
  27. package/dist/components/NInput.js +96 -263
  28. package/dist/components/NInput.nexa +89 -259
  29. package/dist/components/NInputNumber.nexa +1 -1
  30. package/dist/components/NModal.js +1 -118
  31. package/dist/components/NModal.nexa +2 -119
  32. package/dist/components/NMultiSelect.js +1 -1
  33. package/dist/components/NMultiSelect.nexa +2 -1
  34. package/dist/components/NPaginator.js +1 -11
  35. package/dist/components/NPaginator.nexa +2 -11
  36. package/dist/components/NPassword.nexa +1 -0
  37. package/dist/components/NProgressBar.js +0 -11
  38. package/dist/components/NProgressBar.nexa +1 -11
  39. package/dist/components/NRadio.js +1 -8
  40. package/dist/components/NRadio.nexa +2 -8
  41. package/dist/components/NScrollView.js +0 -6
  42. package/dist/components/NScrollView.nexa +1 -6
  43. package/dist/components/NSelect.js +7 -35
  44. package/dist/components/NSelect.nexa +8 -35
  45. package/dist/components/NSkeleton.js +3 -9
  46. package/dist/components/NSkeleton.nexa +4 -9
  47. package/dist/components/NSwitch.js +0 -6
  48. package/dist/components/NSwitch.nexa +1 -6
  49. package/dist/components/NTabs.js +0 -11
  50. package/dist/components/NTabs.nexa +1 -11
  51. package/dist/components/NTag.js +1 -11
  52. package/dist/components/NTag.nexa +2 -11
  53. package/dist/components/NToastContainer.js +3 -27
  54. package/dist/components/NToastContainer.nexa +4 -27
  55. package/dist/components/NTooltip.js +0 -13
  56. package/dist/components/NTooltip.nexa +1 -13
  57. package/dist/components/NTreeMenu.js +1 -21
  58. package/dist/components/NTreeMenu.nexa +2 -21
  59. package/dist/components/NVirtualList.js +0 -2
  60. package/dist/components/NVirtualList.nexa +1 -2
  61. package/dist/styles/tokens.css +82 -173
  62. package/package.json +4 -4
  63. package/src/components/NAlert.nexa +3 -14
  64. package/src/components/NAutocomplete.nexa +2 -1
  65. package/src/components/NAvatar.nexa +1 -5
  66. package/src/components/NBadge.nexa +1 -6
  67. package/src/components/NBottomSheet.nexa +1 -5
  68. package/src/components/NButton.nexa +224 -320
  69. package/src/components/NCard.nexa +27 -71
  70. package/src/components/NCheckbox.nexa +64 -44
  71. package/src/components/NChips.nexa +1 -0
  72. package/src/components/NDataTable.nexa +2 -314
  73. package/src/components/NDatepicker.nexa +5 -25
  74. package/src/components/NForm.nexa +1 -0
  75. package/src/components/NFormField.nexa +1 -5
  76. package/src/components/NImage.nexa +2 -6
  77. package/src/components/NInput.nexa +89 -259
  78. package/src/components/NInputNumber.nexa +1 -1
  79. package/src/components/NModal.nexa +2 -119
  80. package/src/components/NMultiSelect.nexa +2 -1
  81. package/src/components/NPaginator.nexa +2 -11
  82. package/src/components/NPassword.nexa +1 -0
  83. package/src/components/NProgressBar.nexa +1 -11
  84. package/src/components/NRadio.nexa +2 -8
  85. package/src/components/NScrollView.nexa +1 -6
  86. package/src/components/NSelect.nexa +8 -35
  87. package/src/components/NSkeleton.nexa +4 -9
  88. package/src/components/NSwitch.nexa +1 -6
  89. package/src/components/NTabs.nexa +1 -11
  90. package/src/components/NTag.nexa +2 -11
  91. package/src/components/NToastContainer.nexa +4 -27
  92. package/src/components/NTooltip.nexa +1 -13
  93. package/src/components/NTreeMenu.nexa +2 -21
  94. package/src/components/NVirtualList.nexa +1 -2
  95. package/src/styles/tokens.css +82 -173
@@ -143,30 +143,25 @@ const __style = `.n-form-field[data-v-30bdb720]{
143
143
  gap: var(--n-space-2);
144
144
  width: 100%;
145
145
  }
146
-
147
146
  .n-form-field-label[data-v-30bdb720]{
148
147
  font-size: var(--n-text-sm);
149
148
  font-weight: var(--n-weight-semibold);
150
149
  color: var(--n-color-text-secondary);
151
150
  margin-left: var(--n-space-1);
152
151
  }
153
-
154
152
  .n-form-field-control[data-v-30bdb720]{
155
153
  width: 100%;
156
154
  }
157
-
158
155
  .n-form-field-help[data-v-30bdb720]{
159
156
  font-size: var(--n-text-xs);
160
157
  color: var(--n-color-text-muted);
161
158
  padding: 0 var(--n-space-1);
162
159
  }
163
-
164
160
  .n-form-field-error[data-v-30bdb720]{
165
161
  font-size: var(--n-text-xs);
166
162
  color: var(--n-color-danger);
167
163
  padding: 0 var(--n-space-1);
168
164
  }
169
-
170
165
  .is-disabled[data-v-30bdb720]{
171
166
  opacity: 0.6;
172
167
  }`
@@ -141,31 +141,27 @@ onUnmounted(() => {
141
141
  gap: var(--n-space-2);
142
142
  width: 100%;
143
143
  }
144
-
145
144
  .n-form-field-label {
146
145
  font-size: var(--n-text-sm);
147
146
  font-weight: var(--n-weight-semibold);
148
147
  color: var(--n-color-text-secondary);
149
148
  margin-left: var(--n-space-1);
150
149
  }
151
-
152
150
  .n-form-field-control {
153
151
  width: 100%;
154
152
  }
155
-
156
153
  .n-form-field-help {
157
154
  font-size: var(--n-text-xs);
158
155
  color: var(--n-color-text-muted);
159
156
  padding: 0 var(--n-space-1);
160
157
  }
161
-
162
158
  .n-form-field-error {
163
159
  font-size: var(--n-text-xs);
164
160
  color: var(--n-color-danger);
165
161
  padding: 0 var(--n-space-1);
166
162
  }
167
-
168
163
  .is-disabled {
169
164
  opacity: 0.6;
170
165
  }
166
+
171
167
  </style>
@@ -81,25 +81,20 @@ const __style = `.n-image-wrapper[data-v-309b6eb8]{
81
81
  background: var(--n-color-surface-hover, #1a1a2e);
82
82
  display: inline-block;
83
83
  }
84
-
85
84
  .n-image-skeleton[data-v-309b6eb8]{
86
85
  position: absolute;
87
86
  inset: 0;
88
- background: linear-gradient(
89
- 90deg,
90
- var(--n-color-surface, #111827) 25%,
87
+ background-color: var(--n-color-surface); 25%,
91
88
  var(--n-color-surface-hover, #1f2937) 50%,
92
89
  var(--n-color-surface, #111827) 75%
93
90
  );
94
91
  background-size: 200% 100%;
95
92
  animation: n-img-shimmer 1.5s infinite;
96
93
  }
97
-
98
94
  @keyframes n-img-shimmer {
99
95
  0%[data-v-309b6eb8]{ background-position: 200% 0; }
100
96
  100%[data-v-309b6eb8]{ background-position: -200% 0; }
101
97
  }
102
-
103
98
  .n-image[data-v-309b6eb8]{
104
99
  display: block;
105
100
  position: relative;
@@ -90,28 +90,24 @@ const onError = () => { error.value = true; loaded.value = true }
90
90
  background: var(--n-color-surface-hover, #1a1a2e);
91
91
  display: inline-block;
92
92
  }
93
-
94
93
  .n-image-skeleton {
95
94
  position: absolute;
96
95
  inset: 0;
97
- background: linear-gradient(
98
- 90deg,
99
- var(--n-color-surface, #111827) 25%,
96
+ background-color: var(--n-color-surface); 25%,
100
97
  var(--n-color-surface-hover, #1f2937) 50%,
101
98
  var(--n-color-surface, #111827) 75%
102
99
  );
103
100
  background-size: 200% 100%;
104
101
  animation: n-img-shimmer 1.5s infinite;
105
102
  }
106
-
107
103
  @keyframes n-img-shimmer {
108
104
  0% { background-position: 200% 0; }
109
105
  100% { background-position: -200% 0; }
110
106
  }
111
-
112
107
  .n-image {
113
108
  display: block;
114
109
  position: relative;
115
110
  z-index: 1;
116
111
  }
112
+
117
113
  </style>
@@ -1,7 +1,7 @@
1
- import { signal, computed, inject, effect, h, hText, defineComponent, registerComponent, reloadComponent, injectStyle } from 'nexa-framework'
1
+ import { signal, computed, h, hText, effect, defineComponent, registerComponent, reloadComponent, injectStyle } from 'nexa-framework'
2
2
 
3
3
  const _sfc_main = defineComponent({
4
- __scopeId: 'data-v-5b5ed8a8',
4
+ __scopeId: 'data-v-58540fa7',
5
5
  __hmrId: 'NInput_nexa',
6
6
  props: {
7
7
  modelValue: { type: [String, Number], default: '' },
@@ -9,334 +9,167 @@ const _sfc_main = defineComponent({
9
9
  placeholder: { type: String, default: '' },
10
10
  label: { type: String, default: '' },
11
11
  error: { type: String, default: '' },
12
- id: { type: String, default: '' },
13
- name: { type: String, default: '' },
14
- autocomplete: { type: String, default: '' },
15
- ariaDescribedby: { type: String, default: '' },
16
- ariaInvalid: { type: [Boolean, String], default: false },
17
- bindField: { type: Boolean, default: false },
18
12
  disabled: { type: Boolean, default: false },
19
13
  readonly: { type: Boolean, default: false },
14
+ required: { type: Boolean, default: false },
20
15
  clearable: { type: Boolean, default: false },
21
- maxlength: { type: Number, default: 0 },
22
- prefixIcon: { type: String, default: '' },
23
- suffixIcon: { type: String, default: '' }
16
+ prefix: { type: String, default: '' },
17
+ suffix: { type: String, default: '' }
24
18
  },
25
- emits: ['update:modelValue', 'clear', 'focus', 'blur'],
19
+ emits: ['update:modelValue', 'focus', 'blur', 'clear'],
26
20
  setup(props, setupContext) {
27
21
  const { emit, slots, slots: $slots } = setupContext
28
- const field = inject('nexa-ui:form-field', undefined)
29
- const showPassword = signal(false)
30
22
  const isFocused = signal(false)
31
- const effectiveValue = computed(() => {
32
- if (props.bindField && field?.value) return field.value.value
33
- return props.modelValue
34
- })
35
- const draft = signal(String(effectiveValue.value ?? ''))
36
- effect(() => {
37
- const next = String(effectiveValue.value ?? '')
38
- if (draft.value === next) return
39
- draft.value = next
40
- })
41
- const effectiveId = computed(() => {
42
- if (props.id) return props.id
43
- if (props.bindField && field?.inputId) return field.inputId.value
44
- return ''
45
- })
46
- const effectiveDescribedBy = computed(() => {
47
- if (props.ariaDescribedby) return props.ariaDescribedby
48
- if (props.bindField && field?.describedBy) return field.describedBy.value || ''
49
- return ''
50
- })
51
- const effectiveInvalid = computed(() => {
52
- if (props.bindField && field?.invalid) return field.invalid.value
53
- return props.ariaInvalid
54
- })
55
- const effectiveError = computed(() => {
56
- if (props.error) return props.error
57
- if (props.bindField && field?.error) return field.error.value || ''
58
- return ''
59
- })
60
- const effectiveDisabled = computed(() => {
61
- if (props.disabled) return true
62
- if (props.bindField && field?.disabled) return !!field.disabled.value
63
- return false
64
- })
65
- const inputType = computed(() => {
66
- if (props.type === 'password' && showPassword.value) return 'text'
67
- return props.type
68
- })
69
- const currentLength = computed(() => draft.value.length)
70
- const onInput = (e) => {
71
- const next = e.target.value
72
- if (draft.value !== next) draft.value = next
73
- if (props.bindField && field?.setValue) {
74
- field.setValue(next)
75
- return
76
- }
77
- emit('update:modelValue', next)
23
+ const handleInput = (e) => {
24
+ emit('update:modelValue', e.target.value)
78
25
  }
79
- const onFocus = () => {
26
+ const handleFocus = (e) => {
80
27
  isFocused.value = true
81
- emit('focus')
28
+ emit('focus', e)
82
29
  }
83
- const onBlur = () => {
30
+ const handleBlur = (e) => {
84
31
  isFocused.value = false
85
- if (props.bindField && field?.onBlur) {
86
- field.onBlur()
87
- }
88
- emit('blur')
32
+ emit('blur', e)
89
33
  }
90
- const clear = () => {
91
- if (draft.value) draft.value = ''
92
- if (props.bindField && field?.setValue) {
93
- field.setValue('')
94
- emit('clear')
95
- return
96
- }
34
+ const handleClear = () => {
97
35
  emit('update:modelValue', '')
98
36
  emit('clear')
99
37
  }
100
- const togglePassword = () => {
101
- showPassword.value = !showPassword.value
102
- }
103
- return { field, showPassword, isFocused, effectiveValue, draft, effectiveId, effectiveDescribedBy, effectiveInvalid, effectiveError, effectiveDisabled, inputType, currentLength, onInput, onFocus, onBlur, clear, togglePassword, inject, $slots, emit }
38
+ return { isFocused, handleInput, handleFocus, handleBlur, handleClear, $slots, emit }
104
39
  }
105
40
  })
106
41
  // Injected render function
107
42
  _sfc_main.render = function(ctx) {
108
- let { field, showPassword, isFocused, effectiveValue, draft, effectiveId, effectiveDescribedBy, effectiveInvalid, effectiveError, effectiveDisabled, inputType, currentLength, onInput, onFocus, onBlur, clear, togglePassword, inject, $slots, emit, modelValue, type, placeholder, label, error, id, name, autocomplete, ariaDescribedby, ariaInvalid, bindField, disabled, readonly, clearable, maxlength, prefixIcon, suffixIcon, Fragment: _ntc_Fragment } = ctx
109
- return h('div', { class: "n-input-group", "data-v-5b5ed8a8": "" }, [
43
+ let { isFocused, handleInput, handleFocus, handleBlur, handleClear, $slots, emit, modelValue, type, placeholder, label, error, disabled, readonly, required, clearable, prefix, suffix, Fragment: _ntc_Fragment } = ctx
44
+ return h('div', { class: ["n-input-wrapper", { 'is-focused': isFocused, 'is-error': error, 'is-disabled': disabled }], "data-v-58540fa7": "" }, [
110
45
  "\n ",
111
- (label) ? h('label', { class: "n-input-label", "data-v-5b5ed8a8": "" }, [
112
- label
113
- ]) : null,
114
- h('div', { class: ["n-input-wrapper", { 'is-focused': isFocused.value, 'has-error': effectiveError.value, 'is-disabled': effectiveDisabled.value }], "data-v-5b5ed8a8": "" }, [
46
+ (label) ? h('label', { class: "n-input-label", "data-v-58540fa7": "" }, [
47
+ "\n ",
48
+ label,
115
49
  "\n ",
116
- (prefixIcon) ? h('span', { class: "n-input-icon is-prefix", "data-v-5b5ed8a8": "" }, [
117
- prefixIcon
50
+ (required) ? h('span', { class: "n-input-required", "data-v-58540fa7": "" }, [
51
+ "*"
52
+ ]) : null
118
53
  ]) : null,
119
- h('input', { class: ["n-input", { 'has-prefix': !!prefixIcon, 'has-suffix': !!suffixIcon || clearable || type === 'password' }], id: effectiveId.value || undefined, name: name || undefined, type: inputType.value, value: draft.value, placeholder: placeholder, disabled: effectiveDisabled.value, readonly: readonly, autocomplete: autocomplete || undefined, "aria-describedby": effectiveDescribedBy.value || undefined, "aria-invalid": effectiveInvalid.value || undefined, maxlength: maxlength || undefined, onInput: onInput, onFocus: onFocus, onBlur: onBlur, "data-v-5b5ed8a8": "" }),
54
+ h('div', { class: "n-input-container", "data-v-58540fa7": "" }, [
120
55
  "\n ",
121
- h('div', { class: "n-input-focus-ring", "data-v-5b5ed8a8": "" }),
56
+ (prefix) ? h('span', { class: "n-input-prefix", "data-v-58540fa7": "" }, [
57
+ prefix
58
+ ]) : null,
59
+ h('input', { class: "n-input", type: type, value: modelValue, placeholder: placeholder, disabled: disabled, readonly: readonly, required: required, onInput: handleInput, onFocus: handleFocus, onBlur: handleBlur, "data-v-58540fa7": "" }),
122
60
  "\n ",
123
- h('div', { class: "n-input-actions", "data-v-5b5ed8a8": "" }, [
61
+ (clearable && modelValue) ? h('button', { class: "n-input-clear", onClick: handleClear, type: "button", "data-v-58540fa7": "" }, [
124
62
  "\n ",
125
- (clearable && draft.value) ? h('button', { class: "n-input-action", onClick: clear, tabindex: "-1", type: "button", "aria-label": "Clear", "data-v-5b5ed8a8": "" }, [
126
- h('svg', { viewBox: "0 0 24 24", width: "14", height: "14", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", focusable: "false", "aria-hidden": "true", "data-v-5b5ed8a8": "" }, [
127
- h('path', { d: "M18 6L6 18", "data-v-5b5ed8a8": "" }),
128
- h('path', { d: "M6 6l12 12", "data-v-5b5ed8a8": "" })
129
- ])
130
- ]) : null,
131
- (type === 'password') ? h('button', { class: "n-input-action", onClick: togglePassword, tabindex: "-1", type: "button", "aria-label": showPassword.value ? 'Hide password' : 'Show password', "data-v-5b5ed8a8": "" }, [
63
+ h('svg', { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "data-v-58540fa7": "" }, [
132
64
  "\n ",
133
- (!showPassword.value) ? h('svg', { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", focusable: "false", "aria-hidden": "true", "data-v-5b5ed8a8": "" }, [
134
- h('path', { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z", "data-v-5b5ed8a8": "" }),
135
- h('circle', { cx: "12", cy: "12", r: "3", "data-v-5b5ed8a8": "" })
136
- ]) : (true) ? h('svg', { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", focusable: "false", "aria-hidden": "true", "data-v-5b5ed8a8": "" }, [
137
- h('path', { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z", "data-v-5b5ed8a8": "" }),
138
- h('circle', { cx: "12", cy: "12", r: "3", "data-v-5b5ed8a8": "" }),
139
- h('path', { d: "M23 1L1 23", "data-v-5b5ed8a8": "" })
140
- ]) : null,
65
+ h('line', { x1: "18", y1: "6", x2: "6", y2: "18", "data-v-58540fa7": "" }),
66
+ "\n ",
67
+ h('line', { x1: "6", y1: "6", x2: "18", y2: "18", "data-v-58540fa7": "" }),
141
68
  "\n "
69
+ ]),
70
+ "\n "
142
71
  ]) : null,
143
- (suffixIcon) ? h('span', { class: "n-input-icon is-suffix", "data-v-5b5ed8a8": "" }, [
144
- suffixIcon
72
+ (suffix) ? h('span', { class: "n-input-suffix", "data-v-58540fa7": "" }, [
73
+ suffix
145
74
  ]) : null
146
- ]),
147
- "\n "
148
75
  ]),
149
76
  "\n ",
150
- h('div', { class: "n-input-bottom", "data-v-5b5ed8a8": "" }, [
151
- "\n ",
152
- (effectiveError.value) ? h('span', { class: "n-input-error-msg", "data-v-5b5ed8a8": "" }, [
153
- effectiveError.value
154
- ]) : null,
155
- (maxlength > 0) ? h('span', { class: "n-input-counter", "data-v-5b5ed8a8": "" }, [
156
- currentLength.value,
157
- "/",
158
- maxlength
77
+ (error) ? h('span', { class: "n-input-error", "data-v-58540fa7": "" }, [
78
+ error
159
79
  ]) : null
160
- ]),
161
- "\n "
162
80
  ])
163
81
  }
164
- _sfc_main.__scopeId = 'data-v-5b5ed8a8'
82
+ _sfc_main.__scopeId = 'data-v-58540fa7'
165
83
  _sfc_main.__hmrId = 'NInput_nexa'
166
84
 
167
85
  export default _sfc_main
168
86
 
169
- const __style = `.n-input-group[data-v-5b5ed8a8]{
87
+ const __style = `.n-input-wrapper[data-v-58540fa7]{
170
88
  display: flex;
171
89
  flex-direction: column;
172
- gap: var(--n-space-2);
90
+ gap: 0.5rem;
173
91
  width: 100%;
174
92
  }
175
-
176
- .n-input-label[data-v-5b5ed8a8]{
177
- font-size: var(--n-text-sm);
178
- font-weight: var(--n-weight-medium);
179
- color: var(--n-color-text-secondary);
180
- margin-left: var(--n-space-1);
181
- letter-spacing: 0.01em;
93
+ .n-input-label[data-v-58540fa7]{
94
+ font-size: 0.875rem;
95
+ font-weight: 500;
96
+ color: var(--n-color-text);
97
+ letter-spacing: normal;
182
98
  }
183
-
184
- .n-input-wrapper[data-v-5b5ed8a8]{
99
+ .n-input-required[data-v-58540fa7]{
100
+ color: var(--n-color-danger);
101
+ margin-left: 0.25rem;
102
+ }
103
+ .n-input-container[data-v-58540fa7]{
185
104
  position: relative;
186
105
  display: flex;
187
106
  align-items: center;
188
- transition: all var(--n-transition-fast);
189
- }
190
-
191
- .n-input[data-v-5b5ed8a8]{
192
- position: relative;
193
- z-index: 1;
194
- width: 100%;
195
- min-height: 44px;
196
- background: var(--n-color-bg);
107
+ background-color: var(--n-color-surface);
197
108
  border: 1px solid var(--n-color-border);
198
- color: var(--n-color-text);
199
- padding: 0.75rem 1.125rem;
200
- border-radius: var(--n-radius-md);
201
- font-family: inherit;
202
- font-size: var(--n-text-base);
203
- line-height: 1.2;
204
- box-sizing: border-box;
205
- transition: all var(--n-transition-normal) cubic-bezier(0.16, 1, 0.3, 1);
206
- outline: none;
207
- caret-color: var(--n-color-primary);
208
- -webkit-font-smoothing: antialiased;
209
- -moz-osx-font-smoothing: grayscale;
210
- }
211
-
212
- .n-input.has-prefix[data-v-5b5ed8a8]{
213
- padding-left: 2.5rem;
214
- }
215
-
216
- .n-input.has-suffix[data-v-5b5ed8a8]{
217
- padding-right: 2.5rem;
218
- }
219
-
220
- .n-input[data-v-5b5ed8a8]::placeholder{
221
- color: var(--n-color-text-muted);
222
- }
223
-
224
- .n-input-focus-ring[data-v-5b5ed8a8]{
225
- position: absolute;
226
- inset: 0;
227
109
  border-radius: var(--n-radius-md);
228
- background: linear-gradient(135deg, var(--n-color-primary), var(--n-color-info));
229
- opacity: 0;
230
- pointer-events: none;
231
- transition: opacity var(--n-transition-normal) cubic-bezier(0.16, 1, 0.3, 1);
232
- z-index: 0;
110
+ transition: background-color var(--n-transition-fast), border-color var(--n-transition-fast), color var(--n-transition-fast), box-shadow var(--n-transition-fast);
233
111
  }
234
-
235
- .is-focused .n-input-focus-ring[data-v-5b5ed8a8]{
236
- opacity: 0.15;
112
+ .n-input-container[data-v-58540fa7]:hover{
113
+ border-color: var(--n-color-border-hover);
237
114
  }
238
-
239
- .is-focused .n-input[data-v-5b5ed8a8]{
115
+ .is-focused .n-input-container[data-v-58540fa7]{
240
116
  border-color: var(--n-color-primary);
241
- background: var(--n-color-surface);
242
- box-shadow:
243
- 0 0 0 3px var(--n-color-primary-light),
244
- 0 0 0 1px var(--n-color-primary),
245
- inset 0 1px 3px rgba(0,0,0,0.04);
117
+ box-shadow: var(--n-ring-primary);
246
118
  }
247
-
248
- .has-error .n-input[data-v-5b5ed8a8]{
119
+ .is-error .n-input-container[data-v-58540fa7]{
249
120
  border-color: var(--n-color-danger);
250
121
  }
251
-
252
- .has-error .n-input-focus-ring[data-v-5b5ed8a8]{
253
- background: var(--n-color-danger);
254
- opacity: 0.35;
122
+ .is-error.is-focused .n-input-container[data-v-58540fa7]{
123
+ box-shadow: var(--n-ring-danger);
255
124
  }
256
-
257
- .n-input-icon[data-v-5b5ed8a8]{
258
- position: absolute;
259
- top: 50%;
260
- transform: translateY(-50%);
261
- color: var(--n-color-text-muted);
262
- font-size: var(--n-text-sm);
263
- pointer-events: none;
264
- display: flex;
265
- align-items: center;
266
- line-height: 1;
125
+ .is-disabled .n-input-container[data-v-58540fa7]{
126
+ opacity: 0.6;
127
+ cursor: not-allowed;
128
+ background-color: var(--n-color-surface-alt);
267
129
  }
268
-
269
- .n-input-icon.is-prefix[data-v-5b5ed8a8]{
270
- left: 0.85rem;
130
+ .n-input[data-v-58540fa7]{
131
+ flex: 1;
132
+ background: transparent;
133
+ border: none;
134
+ outline: none;
135
+ padding: 0.5rem 0.75rem;
136
+ font-size: 0.875rem;
137
+ color: var(--n-color-text);
138
+ font-family: inherit;
139
+ width: 100%;
271
140
  }
272
-
273
- .n-input-icon.is-suffix[data-v-5b5ed8a8]{
274
- right: 0.85rem;
141
+ .n-input[data-v-58540fa7]::placeholder{
142
+ color: var(--n-color-text-muted);
275
143
  }
276
-
277
- .n-input-actions[data-v-5b5ed8a8]{
278
- position: absolute;
279
- right: 0.5rem;
280
- top: 50%;
281
- transform: translateY(-50%);
282
- display: flex;
283
- align-items: center;
284
- gap: 0.15rem;
144
+ .n-input[data-v-58540fa7]:disabled{
145
+ cursor: not-allowed;
285
146
  }
286
-
287
- .n-input-action[data-v-5b5ed8a8]{
147
+ .n-input-prefix[data-v-58540fa7],
148
+ .n-input-suffix[data-v-58540fa7]{
149
+ padding: 0 0.75rem;
150
+ color: var(--n-color-text-muted);
151
+ font-size: 0.875rem;
152
+ user-select: none;
153
+ }
154
+ .n-input-clear[data-v-58540fa7]{
288
155
  background: transparent;
289
156
  border: none;
290
- color: var(--n-color-text-muted);
291
157
  cursor: pointer;
292
- padding: 0.25rem;
293
- font-size: var(--n-text-sm);
294
- border-radius: var(--n-radius-sm);
295
- transition: all var(--n-transition-fast);
158
+ padding: 0.5rem;
159
+ color: var(--n-color-text-muted);
160
+ transition: color var(--n-transition-fast);
296
161
  display: flex;
297
162
  align-items: center;
298
- line-height: 1;
163
+ justify-content: center;
299
164
  }
300
-
301
- .n-input-action[data-v-5b5ed8a8]:hover{
165
+ .n-input-clear[data-v-58540fa7]:hover{
302
166
  color: var(--n-color-text);
303
- background: var(--n-color-glass);
304
167
  }
305
-
306
- .n-input-bottom[data-v-5b5ed8a8]{
168
+ .n-input-error[data-v-58540fa7]{
169
+ font-size: 0.75rem;
170
+ color: var(--n-color-danger);
307
171
  display: flex;
308
- justify-content: space-between;
309
172
  align-items: center;
310
- padding: 0 var(--n-space-1);
311
- }
312
-
313
- .n-input-error-msg[data-v-5b5ed8a8]{
314
- font-size: var(--n-text-xs);
315
- color: var(--n-color-danger);
316
- }
317
-
318
- .n-input-counter[data-v-5b5ed8a8]{
319
- font-size: var(--n-text-xs);
320
- color: var(--n-color-text-muted);
321
- margin-left: auto;
322
- }
323
-
324
- .is-disabled[data-v-5b5ed8a8]{
325
- position: relative;
326
- }
327
-
328
- .is-disabled[data-v-5b5ed8a8]::after{
329
- content: '';
330
- position: absolute;
331
- inset: 0;
332
- background: var(--n-color-glass);
333
- border-radius: var(--n-radius-md);
334
- pointer-events: none;
335
- z-index: 2;
336
- }
337
-
338
- .is-disabled .n-input[data-v-5b5ed8a8]{
339
- cursor: not-allowed;
340
- background: var(--n-color-surface-alt);
173
+ gap: 0.25rem;
341
174
  }`
342
- injectStyle('data-v-5b5ed8a8', __style)
175
+ injectStyle('data-v-58540fa7', __style)