nexa-ui-kit 0.10.0 → 0.11.1

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 (73) hide show
  1. package/dist/components/NAlert.js +49 -28
  2. package/dist/components/NAlert.nexa +12 -6
  3. package/dist/components/NAutocomplete.js +25 -20
  4. package/dist/components/NAutocomplete.nexa +3 -3
  5. package/dist/components/NAvatar.js +1 -1
  6. package/dist/components/NBadge.js +1 -1
  7. package/dist/components/NBottomSheet.js +17 -17
  8. package/dist/components/NBottomSheet.nexa +2 -2
  9. package/dist/components/NButton.js +59 -59
  10. package/dist/components/NButton.nexa +10 -9
  11. package/dist/components/NCard.js +2 -2
  12. package/dist/components/NCard.nexa +1 -1
  13. package/dist/components/NCheckbox.js +23 -19
  14. package/dist/components/NCheckbox.nexa +2 -1
  15. package/dist/components/NChips.js +13 -10
  16. package/dist/components/NChips.nexa +1 -1
  17. package/dist/components/NDataTable.js +360 -42
  18. package/dist/components/NDataTable.nexa +318 -10
  19. package/dist/components/NDatepicker.js +52 -43
  20. package/dist/components/NDatepicker.nexa +3 -3
  21. package/dist/components/NForm.js +1 -1
  22. package/dist/components/NFormField.js +1 -1
  23. package/dist/components/NInput.js +51 -41
  24. package/dist/components/NInput.nexa +4 -3
  25. package/dist/components/NInputNumber.js +18 -13
  26. package/dist/components/NInputNumber.nexa +2 -2
  27. package/dist/components/NModal.js +34 -28
  28. package/dist/components/NModal.nexa +4 -4
  29. package/dist/components/NMultiSelect.js +47 -38
  30. package/dist/components/NMultiSelect.nexa +3 -3
  31. package/dist/components/NPaginator.js +29 -21
  32. package/dist/components/NPaginator.nexa +4 -4
  33. package/dist/components/NPassword.js +61 -47
  34. package/dist/components/NPassword.nexa +5 -4
  35. package/dist/components/NProgressBar.js +5 -5
  36. package/dist/components/NProgressBar.nexa +4 -4
  37. package/dist/components/NRadio.js +1 -1
  38. package/dist/components/NScrollView.js +1 -1
  39. package/dist/components/NSelect.js +68 -63
  40. package/dist/components/NSelect.nexa +4 -4
  41. package/dist/components/NSkeleton.js +1 -1
  42. package/dist/components/NSwitch.js +1 -1
  43. package/dist/components/NTabs.js +1 -1
  44. package/dist/components/NTag.js +27 -24
  45. package/dist/components/NTag.nexa +6 -6
  46. package/dist/components/NToastContainer.js +65 -49
  47. package/dist/components/NToastContainer.nexa +6 -3
  48. package/dist/components/NTooltip.js +1 -1
  49. package/dist/components/NTreeMenu.js +74 -35
  50. package/dist/components/NTreeMenu.nexa +52 -15
  51. package/dist/styles/tokens.css +18 -0
  52. package/package.json +4 -4
  53. package/src/components/NAlert.nexa +12 -6
  54. package/src/components/NAutocomplete.nexa +3 -3
  55. package/src/components/NBottomSheet.nexa +2 -2
  56. package/src/components/NButton.nexa +10 -9
  57. package/src/components/NCard.nexa +1 -1
  58. package/src/components/NCheckbox.nexa +2 -1
  59. package/src/components/NChips.nexa +1 -1
  60. package/src/components/NDataTable.nexa +318 -10
  61. package/src/components/NDatepicker.nexa +3 -3
  62. package/src/components/NInput.nexa +4 -3
  63. package/src/components/NInputNumber.nexa +2 -2
  64. package/src/components/NModal.nexa +4 -4
  65. package/src/components/NMultiSelect.nexa +3 -3
  66. package/src/components/NPaginator.nexa +4 -4
  67. package/src/components/NPassword.nexa +5 -4
  68. package/src/components/NProgressBar.nexa +4 -4
  69. package/src/components/NSelect.nexa +4 -4
  70. package/src/components/NTag.nexa +6 -6
  71. package/src/components/NToastContainer.nexa +6 -3
  72. package/src/components/NTreeMenu.nexa +52 -15
  73. package/src/styles/tokens.css +18 -0
@@ -1,8 +1,8 @@
1
- import { signal, computed, inject, onBeforeUnmount, effect, batch, h, hText, onMounted, onUnmounted, defineComponent, registerComponent, reloadComponent, injectStyle, Teleport } from 'nexa-framework'
1
+ import { signal, computed, inject, onBeforeUnmount, effect, batch, h, hText, defineComponent, registerComponent, reloadComponent, injectStyle, Teleport } from 'nexa-framework'
2
2
  import { trackFloatingOverlay } from '../services/FloatingOverlay.js'
3
3
 
4
4
  const _sfc_main = defineComponent({
5
- __scopeId: 'data-v-12b3b8c4',
5
+ __scopeId: 'data-v-261608b5',
6
6
  __hmrId: 'NMultiSelect_nexa',
7
7
  props: { modelValue: { type: Array, default: () => [] }, options: { type: Array, default: () => [] }, placeholder: { type: String, default: 'Select...' }, label: { type: String, default: '' }, disabled: { type: Boolean, default: false }, bindField: { type: Boolean, default: false }, searchable: { type: Boolean, default: false }, clearable: { type: Boolean, default: false }, placement: { type: String, default: 'auto' }, appendTo: { type: String, default: 'self' }, maxChips: { type: Number, default: 3 } },
8
8
  emits: ['update:modelValue', 'clear'],
@@ -65,80 +65,89 @@ const _sfc_main = defineComponent({
65
65
  // Injected render function
66
66
  _sfc_main.render = function(ctx) {
67
67
  let { field, instanceId, isOpen, query, queryDraft, focusedIndex, popupStyle, resolvedPlacement, rootEl, stopTracking, outsideHandler, normalizeOption, normalizedOptions, effectiveModelValue, effectiveDisabled, selectedSet, filteredOptions, selectedLabels, close, open, toggleOpen, setModel, toggleValue, clear, removeChip, onKeydown, onSearchInput, inject, onBeforeUnmount, batch, trackFloatingOverlay, $slots, emit, modelValue, options, placeholder, label, disabled, bindField, searchable, clearable, placement, appendTo, maxChips, Fragment: _ntc_Fragment, Teleport: _ntc_Teleport } = ctx
68
- return h('div', { class: ["n-ms", { 'is-open': isOpen.value, 'is-disabled': effectiveDisabled.value }], "data-ms-root": instanceId, "data-v-12b3b8c4": "" }, [
68
+ return h('div', { class: ["n-ms", { 'is-open': isOpen.value, 'is-disabled': effectiveDisabled.value }], "data-ms-root": instanceId, "data-v-261608b5": "" }, [
69
69
  "\n ",
70
- (label) ? h('label', { class: "n-ms-label", "data-v-12b3b8c4": "" }, [
70
+ (label) ? h('label', { class: "n-ms-label", "data-v-261608b5": "" }, [
71
71
  label
72
72
  ]) : null,
73
- h('div', { class: "n-ms-trigger", role: "combobox", tabindex: "0", "aria-expanded": isOpen.value, onClick: toggleOpen, onKeydown: onKeydown, "data-v-12b3b8c4": "" }, [
73
+ h('div', { class: "n-ms-trigger", role: "combobox", tabindex: "0", "aria-expanded": isOpen.value, onClick: toggleOpen, onKeydown: onKeydown, "data-v-261608b5": "" }, [
74
74
  "\n ",
75
- (selectedLabels.value.length > 0) ? h('div', { class: "n-ms-chips", "data-v-12b3b8c4": "" }, [
75
+ (selectedLabels.value.length > 0) ? h('div', { class: "n-ms-chips", "data-v-261608b5": "" }, [
76
76
  (selectedLabels.value.slice(0, maxChips)).map((c, index) =>
77
- h('div', { class: "n-ms-chip", key: String(c.value), "data-v-12b3b8c4": "" }, [
78
- h('span', { class: "n-ms-chip-label", "data-v-12b3b8c4": "" }, [
77
+ h('div', { class: "n-ms-chip", key: String(c.value), "data-v-261608b5": "" }, [
78
+ h('span', { class: "n-ms-chip-label", "data-v-261608b5": "" }, [
79
79
  c.label
80
80
  ]),
81
- h('button', { class: "n-ms-chip-remove", type: "button", "aria-label": "Remove", tabindex: "-1", disabled: effectiveDisabled.value, onClick: ($event) => { removeChip(c.value, $event) }, "data-v-12b3b8c4": "" }, [
81
+ h('button', { class: "n-ms-chip-remove", type: "button", "aria-label": "Remove", tabindex: "-1", disabled: effectiveDisabled.value, onClick: ($event) => { removeChip(c.value, $event) }, "data-v-261608b5": "" }, [
82
82
  "✕"
83
83
  ])
84
84
  ])
85
85
  ),
86
- (selectedLabels.value.length > maxChips) ? h('span', { class: "n-ms-more", "data-v-12b3b8c4": "" }, [
86
+ (selectedLabels.value.length > maxChips) ? h('span', { class: "n-ms-more", "data-v-261608b5": "" }, [
87
87
  "+",
88
88
  selectedLabels.value.length - maxChips
89
89
  ]) : null
90
- ]) : (true) ? h('span', { class: "n-ms-placeholder", "data-v-12b3b8c4": "" }, [
90
+ ]) : (true) ? h('span', { class: "n-ms-placeholder", "data-v-261608b5": "" }, [
91
91
  placeholder
92
92
  ]) : null,
93
93
  "\n ",
94
- h('div', { class: "n-ms-actions", "data-v-12b3b8c4": "" }, [
95
- (clearable && selectedLabels.value.length > 0) ? h('button', { class: "n-ms-clear", type: "button", tabindex: "-1", onClick: ($event) => { $event.stopPropagation(); (clear)($event) }, "data-v-12b3b8c4": "" }, [
96
- ""
94
+ h('div', { class: "n-ms-actions", "data-v-261608b5": "" }, [
95
+ (clearable && selectedLabels.value.length > 0) ? h('button', { class: "n-ms-clear", type: "button", tabindex: "-1", onClick: ($event) => { $event.stopPropagation(); (clear)($event) }, "aria-label": "Clear", "data-v-261608b5": "" }, [
96
+ 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-261608b5": "" }, [
97
+ h('path', { d: "M18 6L6 18", "data-v-261608b5": "" }),
98
+ h('path', { d: "M6 6l12 12", "data-v-261608b5": "" })
99
+ ])
97
100
  ]) : null,
98
- h('span', { class: "n-ms-arrow", "data-v-12b3b8c4": "" }, [
99
- ""
101
+ h('span', { class: "n-ms-arrow", "data-v-261608b5": "" }, [
102
+ 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-261608b5": "" }, [
103
+ h('path', { d: "M6 9l6 6 6-6", "data-v-261608b5": "" })
104
+ ])
100
105
  ])
101
106
  ]),
102
107
  "\n "
103
108
  ]),
104
109
  "\n ",
105
- (isOpen.value && appendTo !== 'body') ? h('div', { class: "n-ms-dropdown", "data-v-12b3b8c4": "" }, [
106
- (searchable) ? h('div', { class: "n-ms-search", "data-v-12b3b8c4": "" }, [
107
- h('input', { class: "n-ms-search-input", value: queryDraft.value, placeholder: "Search...", onInput: onSearchInput, onKeydown: ($event) => { $event.stopPropagation(); (onKeydown)($event) }, "data-v-12b3b8c4": "" })
110
+ (isOpen.value && appendTo !== 'body') ? h('div', { class: "n-ms-dropdown", "data-v-261608b5": "" }, [
111
+ (searchable) ? h('div', { class: "n-ms-search", "data-v-261608b5": "" }, [
112
+ h('input', { class: "n-ms-search-input", value: queryDraft.value, placeholder: "Search...", onInput: onSearchInput, onKeydown: ($event) => { $event.stopPropagation(); (onKeydown)($event) }, "data-v-261608b5": "" })
108
113
  ]) : null,
109
- h('div', { class: "n-ms-options", "data-v-12b3b8c4": "" }, [
114
+ h('div', { class: "n-ms-options", "data-v-261608b5": "" }, [
110
115
  (filteredOptions.value).map((opt, i) =>
111
- h('button', { class: ["n-ms-option", { 'is-selected': selectedSet.value.has(opt.value), 'is-focused': i === focusedIndex.value, 'is-disabled': opt.disabled }], key: String(opt.value) + ':' + i, type: "button", "data-ms-opt": String(opt.value), disabled: opt.disabled, onMouseenter: ($event) => { focusedIndex.value = i }, onClick: ($event) => { toggleValue(opt.value) }, "data-v-12b3b8c4": "" }, [
112
- h('span', { class: "n-ms-check", "data-v-12b3b8c4": "" }, [
113
- selectedSet.value.has(opt.value) ? '' : ''
116
+ h('button', { class: ["n-ms-option", { 'is-selected': selectedSet.value.has(opt.value), 'is-focused': i === focusedIndex.value, 'is-disabled': opt.disabled }], key: String(opt.value) + ':' + i, type: "button", "data-ms-opt": String(opt.value), disabled: opt.disabled, onMouseenter: ($event) => { focusedIndex.value = i }, onClick: ($event) => { toggleValue(opt.value) }, "data-v-261608b5": "" }, [
117
+ h('span', { class: "n-ms-check", "data-v-261608b5": "" }, [
118
+ (selectedSet.value.has(opt.value)) ? h('svg', { viewBox: "0 0 24 24", width: "14", height: "14", fill: "none", stroke: "currentColor", "stroke-width": "2.5", "stroke-linecap": "round", "stroke-linejoin": "round", focusable: "false", "aria-hidden": "true", "data-v-261608b5": "" }, [
119
+ h('path', { d: "M20 6L9 17l-5-5", "data-v-261608b5": "" })
120
+ ]) : null
114
121
  ]),
115
- h('span', { class: "n-ms-option-label", "data-v-12b3b8c4": "" }, [
122
+ h('span', { class: "n-ms-option-label", "data-v-261608b5": "" }, [
116
123
  opt.label
117
124
  ])
118
125
  ])
119
126
  ),
120
- (filteredOptions.value.length === 0) ? h('div', { class: "n-ms-empty", "data-v-12b3b8c4": "" }, [
127
+ (filteredOptions.value.length === 0) ? h('div', { class: "n-ms-empty", "data-v-261608b5": "" }, [
121
128
  "No options"
122
129
  ]) : null
123
130
  ])
124
131
  ]) : null,
125
- h(_ntc_Teleport, { to: "body", "data-v-12b3b8c4": "" }, [
126
- (isOpen.value && appendTo === 'body') ? h('div', { class: ["n-ms-dropdown", { 'is-top': resolvedPlacement.value === 'top' }], "data-ms-popup": instanceId, style: popupStyle.value, "data-v-12b3b8c4": "" }, [
127
- (searchable) ? h('div', { class: "n-ms-search", "data-v-12b3b8c4": "" }, [
128
- h('input', { class: "n-ms-search-input", value: queryDraft.value, placeholder: "Search...", onInput: onSearchInput, onKeydown: ($event) => { $event.stopPropagation(); (onKeydown)($event) }, "data-v-12b3b8c4": "" })
132
+ h(_ntc_Teleport, { to: "body", "data-v-261608b5": "" }, [
133
+ (isOpen.value && appendTo === 'body') ? h('div', { class: ["n-ms-dropdown", { 'is-top': resolvedPlacement.value === 'top' }], "data-ms-popup": instanceId, style: popupStyle.value, "data-v-261608b5": "" }, [
134
+ (searchable) ? h('div', { class: "n-ms-search", "data-v-261608b5": "" }, [
135
+ h('input', { class: "n-ms-search-input", value: queryDraft.value, placeholder: "Search...", onInput: onSearchInput, onKeydown: ($event) => { $event.stopPropagation(); (onKeydown)($event) }, "data-v-261608b5": "" })
129
136
  ]) : null,
130
- h('div', { class: "n-ms-options", "data-v-12b3b8c4": "" }, [
137
+ h('div', { class: "n-ms-options", "data-v-261608b5": "" }, [
131
138
  (filteredOptions.value).map((opt, i) =>
132
- h('button', { class: ["n-ms-option", { 'is-selected': selectedSet.value.has(opt.value), 'is-focused': i === focusedIndex.value, 'is-disabled': opt.disabled }], key: String(opt.value) + ':' + i, type: "button", "data-ms-opt": String(opt.value), disabled: opt.disabled, onMouseenter: ($event) => { focusedIndex.value = i }, onClick: ($event) => { toggleValue(opt.value) }, "data-v-12b3b8c4": "" }, [
133
- h('span', { class: "n-ms-check", "data-v-12b3b8c4": "" }, [
134
- selectedSet.value.has(opt.value) ? '' : ''
139
+ h('button', { class: ["n-ms-option", { 'is-selected': selectedSet.value.has(opt.value), 'is-focused': i === focusedIndex.value, 'is-disabled': opt.disabled }], key: String(opt.value) + ':' + i, type: "button", "data-ms-opt": String(opt.value), disabled: opt.disabled, onMouseenter: ($event) => { focusedIndex.value = i }, onClick: ($event) => { toggleValue(opt.value) }, "data-v-261608b5": "" }, [
140
+ h('span', { class: "n-ms-check", "data-v-261608b5": "" }, [
141
+ (selectedSet.value.has(opt.value)) ? h('svg', { viewBox: "0 0 24 24", width: "14", height: "14", fill: "none", stroke: "currentColor", "stroke-width": "2.5", "stroke-linecap": "round", "stroke-linejoin": "round", focusable: "false", "aria-hidden": "true", "data-v-261608b5": "" }, [
142
+ h('path', { d: "M20 6L9 17l-5-5", "data-v-261608b5": "" })
143
+ ]) : null
135
144
  ]),
136
- h('span', { class: "n-ms-option-label", "data-v-12b3b8c4": "" }, [
145
+ h('span', { class: "n-ms-option-label", "data-v-261608b5": "" }, [
137
146
  opt.label
138
147
  ])
139
148
  ])
140
149
  ),
141
- (filteredOptions.value.length === 0) ? h('div', { class: "n-ms-empty", "data-v-12b3b8c4": "" }, [
150
+ (filteredOptions.value.length === 0) ? h('div', { class: "n-ms-empty", "data-v-261608b5": "" }, [
142
151
  "No options"
143
152
  ]) : null
144
153
  ])
@@ -147,10 +156,10 @@ _sfc_main.render = function(ctx) {
147
156
  "\n "
148
157
  ])
149
158
  }
150
- _sfc_main.__scopeId = 'data-v-12b3b8c4'
159
+ _sfc_main.__scopeId = 'data-v-261608b5'
151
160
  _sfc_main.__hmrId = 'NMultiSelect_nexa'
152
161
 
153
162
  export default _sfc_main
154
163
 
155
- const __style = `.n-ms[data-v-12b3b8c4]{position:relative;width:100%;font-family:var(--n-font-sans)}.n-ms-label{display:block;font-size:var(--n-text-sm);font-weight:var(--n-weight-medium);color:var(--n-color-text-secondary);margin-bottom:var(--n-space-2)}.n-ms-trigger{background:var(--n-color-surface);border:1px solid var(--n-color-border);border-radius:var(--n-radius-md);padding:0.5rem 0.75rem;display:flex;justify-content:space-between;align-items:center;cursor:pointer;transition:all var(--n-transition-fast);color:var(--n-color-text);gap:var(--n-space-2);min-height:44px}.n-ms-trigger:focus-visible{border-color:var(--n-color-primary);box-shadow:0 0 0 3px var(--n-color-primary-light)}.n-ms.is-open .n-ms-trigger{border-color:var(--n-color-primary);box-shadow:0 0 0 3px var(--n-color-primary-light)}.n-ms-placeholder{color:var(--n-color-text-muted)}.n-ms-actions{display:flex;align-items:center;gap:0.25rem;flex-shrink:0}.n-ms-clear{background:transparent;border:none;color:var(--n-color-text-muted);cursor:pointer;padding:0.15rem;font-size:var(--n-text-xs);border-radius:var(--n-radius-sm);line-height:1}.n-ms-clear:hover{color:var(--n-color-text)}.n-ms-arrow{color:var(--n-color-text-muted);transition:transform var(--n-transition-fast);font-size:var(--n-text-xs)}.is-open .n-ms-arrow{transform:rotate(180deg)}.n-ms-chips{display:flex;flex-wrap:wrap;gap:var(--n-space-2);align-items:center;min-width:0}.n-ms-chip{display:inline-flex;align-items:center;gap:0.35rem;padding:0.2rem 0.45rem;border-radius:999px;background:var(--n-color-glass);border:1px solid var(--n-color-border);font-size:var(--n-text-xs);line-height:1;max-width:12rem}.n-ms-chip-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:10rem}.n-ms-chip-remove{background:transparent;border:none;color:var(--n-color-text-muted);cursor:pointer;padding:0;line-height:1;display:flex;align-items:center}.n-ms-chip-remove:hover:not(:disabled){color:var(--n-color-text)}.n-ms-chip-remove:disabled{opacity:0.5;cursor:not-allowed}.n-ms-more{font-size:var(--n-text-xs);color:var(--n-color-text-muted)}.n-ms-dropdown{position:absolute;top:calc(100% + 0.5rem);left:0;width:100%;background:var(--n-color-surface);border:1px solid var(--n-color-border);border-radius:var(--n-radius-md);box-shadow:var(--n-shadow-lg);z-index:var(--n-z-dropdown);overflow:hidden;animation:n-ms-in .2s cubic-bezier(0,1,0,1)}@keyframes n-ms-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.n-ms-dropdown.is-top{animation:n-ms-in-top .2s cubic-bezier(0,1,0,1)}@keyframes n-ms-in-top{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.n-ms-search{padding:var(--n-space-2);border-bottom:1px solid var(--n-color-border)}.n-ms-search-input{width:100%;background:var(--n-color-bg);border:1px solid var(--n-color-border);border-radius:var(--n-radius-sm);padding:var(--n-space-2) var(--n-space-3);color:var(--n-color-text);font-size:var(--n-text-sm);outline:none;font-family:inherit}.n-ms-search-input:focus{border-color:var(--n-color-primary)}.n-ms-options{max-height:260px;overflow-y:auto}.n-ms-option{width:100%;display:flex;align-items:center;gap:0.5rem;padding:0.7rem 1rem;background:transparent;border:none;color:var(--n-color-text-secondary);cursor:pointer;transition:all var(--n-transition-fast);text-align:left}.n-ms-option:hover:not(:disabled),.n-ms-option.is-focused{background:var(--n-color-glass);color:var(--n-color-text)}.n-ms-option.is-selected{background:var(--n-color-primary-light);color:var(--n-color-primary);font-weight:var(--n-weight-semibold)}.n-ms-option:disabled,.n-ms-option.is-disabled{opacity:0.4;cursor:not-allowed}.n-ms-check{width:1.25rem;display:inline-flex;align-items:center;justify-content:center;font-size:var(--n-text-xs)}.n-ms-empty{padding:var(--n-space-4);color:var(--n-color-text-muted);text-align:center;font-size:var(--n-text-sm)}.is-disabled .n-ms-trigger{opacity:0.5;cursor:not-allowed}`
156
- injectStyle('data-v-12b3b8c4', __style)
164
+ const __style = `.n-ms[data-v-261608b5]{position:relative;width:100%;font-family:var(--n-font-sans)}.n-ms-label{display:block;font-size:var(--n-text-sm);font-weight:var(--n-weight-medium);color:var(--n-color-text-secondary);margin-bottom:var(--n-space-2)}.n-ms-trigger{background:var(--n-color-surface);border:1px solid var(--n-color-border);border-radius:var(--n-radius-md);padding:0.5rem 0.75rem;display:flex;justify-content:space-between;align-items:center;cursor:pointer;transition:all var(--n-transition-fast);color:var(--n-color-text);gap:var(--n-space-2);min-height:44px}.n-ms-trigger:focus-visible{border-color:var(--n-color-primary);box-shadow:0 0 0 3px var(--n-color-primary-light)}.n-ms.is-open .n-ms-trigger{border-color:var(--n-color-primary);box-shadow:0 0 0 3px var(--n-color-primary-light)}.n-ms-placeholder{color:var(--n-color-text-muted)}.n-ms-actions{display:flex;align-items:center;gap:0.25rem;flex-shrink:0}.n-ms-clear{background:transparent;border:none;color:var(--n-color-text-muted);cursor:pointer;padding:0.15rem;font-size:var(--n-text-xs);border-radius:var(--n-radius-sm);line-height:1}.n-ms-clear:hover{color:var(--n-color-text)}.n-ms-arrow{color:var(--n-color-text-muted);transition:transform var(--n-transition-fast);font-size:var(--n-text-xs)}.is-open .n-ms-arrow{transform:rotate(180deg)}.n-ms-chips{display:flex;flex-wrap:wrap;gap:var(--n-space-2);align-items:center;min-width:0}.n-ms-chip{display:inline-flex;align-items:center;gap:0.35rem;padding:0.2rem 0.45rem;border-radius:999px;background:var(--n-color-glass);border:1px solid var(--n-color-border);font-size:var(--n-text-xs);line-height:1;max-width:12rem}.n-ms-chip-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:10rem}.n-ms-chip-remove{background:transparent;border:none;color:var(--n-color-text-muted);cursor:pointer;padding:0;line-height:1;display:flex;align-items:center}.n-ms-chip-remove:hover:not(:disabled){color:var(--n-color-text)}.n-ms-chip-remove:disabled{opacity:0.5;cursor:not-allowed}.n-ms-more{font-size:var(--n-text-xs);color:var(--n-color-text-muted)}.n-ms-dropdown{position:absolute;top:calc(100% + 0.5rem);left:0;width:100%;background:var(--n-color-surface);border:1px solid var(--n-color-border);border-radius:var(--n-radius-md);box-shadow:var(--n-shadow-lg);z-index:var(--n-z-dropdown);overflow:hidden;animation:n-ms-in .2s cubic-bezier(0,1,0,1)}@keyframes n-ms-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.n-ms-dropdown.is-top{animation:n-ms-in-top .2s cubic-bezier(0,1,0,1)}@keyframes n-ms-in-top{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.n-ms-search{padding:var(--n-space-2);border-bottom:1px solid var(--n-color-border)}.n-ms-search-input{width:100%;background:var(--n-color-bg);border:1px solid var(--n-color-border);border-radius:var(--n-radius-sm);padding:var(--n-space-2) var(--n-space-3);color:var(--n-color-text);font-size:var(--n-text-sm);outline:none;font-family:inherit}.n-ms-search-input:focus{border-color:var(--n-color-primary)}.n-ms-options{max-height:260px;overflow-y:auto}.n-ms-option{width:100%;display:flex;align-items:center;gap:0.5rem;padding:0.7rem 1rem;background:transparent;border:none;color:var(--n-color-text-secondary);cursor:pointer;transition:all var(--n-transition-fast);text-align:left}.n-ms-option:hover:not(:disabled),.n-ms-option.is-focused{background:var(--n-color-glass);color:var(--n-color-text)}.n-ms-option.is-selected{background:var(--n-color-primary-light);color:var(--n-color-primary);font-weight:var(--n-weight-semibold)}.n-ms-option:disabled,.n-ms-option.is-disabled{opacity:0.4;cursor:not-allowed}.n-ms-check{width:1.25rem;display:inline-flex;align-items:center;justify-content:center;font-size:var(--n-text-xs)}.n-ms-empty{padding:var(--n-space-4);color:var(--n-color-text-muted);text-align:center;font-size:var(--n-text-sm)}.is-disabled .n-ms-trigger{opacity:0.5;cursor:not-allowed}`
165
+ injectStyle('data-v-261608b5', __style)
@@ -65,10 +65,10 @@ onBeforeUnmount(() => close())
65
65
  <div class="n-ms-trigger" role="combobox" tabindex="0" :aria-expanded="isOpen.value" @click="toggleOpen" @keydown="onKeydown">
66
66
  <div v-if="selectedLabels.value.length > 0" class="n-ms-chips"><div v-for="c in selectedLabels.value.slice(0, maxChips)" :key="String(c.value)" class="n-ms-chip"><span class="n-ms-chip-label">{{ c.label }}</span><button type="button" class="n-ms-chip-remove" aria-label="Remove" tabindex="-1" :disabled="effectiveDisabled.value" @click="removeChip(c.value, $event)">✕</button></div><span v-if="selectedLabels.value.length > maxChips" class="n-ms-more">+{{ selectedLabels.value.length - maxChips }}</span></div>
67
67
  <span v-else class="n-ms-placeholder">{{ placeholder }}</span>
68
- <div class="n-ms-actions"><button v-if="clearable && selectedLabels.value.length > 0" type="button" class="n-ms-clear" tabindex="-1" @click.stop="clear">✕</button><span class="n-ms-arrow">▾</span></div>
68
+ <div class="n-ms-actions"><button v-if="clearable && selectedLabels.value.length > 0" type="button" class="n-ms-clear" tabindex="-1" @click.stop="clear" aria-label="Clear"><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"><path d="M18 6L6 18"/><path d="M6 6l12 12"/></svg></button><span class="n-ms-arrow"><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"><path d="M6 9l6 6 6-6"/></svg></span></div>
69
69
  </div>
70
- <div v-if="isOpen.value && appendTo !== 'body'" class="n-ms-dropdown"><div v-if="searchable" class="n-ms-search"><input class="n-ms-search-input" :value="queryDraft.value" placeholder="Search..." @input="onSearchInput" @keydown.stop="onKeydown" /></div><div class="n-ms-options"><button v-for="(opt, i) in filteredOptions.value" :key="String(opt.value) + ':' + i" type="button" class="n-ms-option" :data-ms-opt="String(opt.value)" :class="{ 'is-selected': selectedSet.value.has(opt.value), 'is-focused': i === focusedIndex.value, 'is-disabled': opt.disabled }" :disabled="opt.disabled" @mouseenter="focusedIndex.value = i" @click="toggleValue(opt.value)"><span class="n-ms-check">{{ selectedSet.value.has(opt.value) ? '✓' : '' }}</span><span class="n-ms-option-label">{{ opt.label }}</span></button><div v-if="filteredOptions.value.length === 0" class="n-ms-empty">No options</div></div></div>
71
- <Teleport to="body"><div v-if="isOpen.value && appendTo === 'body'" class="n-ms-dropdown" :class="{ 'is-top': resolvedPlacement.value === 'top' }" :data-ms-popup="instanceId" :style="popupStyle.value"><div v-if="searchable" class="n-ms-search"><input class="n-ms-search-input" :value="queryDraft.value" placeholder="Search..." @input="onSearchInput" @keydown.stop="onKeydown" /></div><div class="n-ms-options"><button v-for="(opt, i) in filteredOptions.value" :key="String(opt.value) + ':' + i" type="button" class="n-ms-option" :data-ms-opt="String(opt.value)" :class="{ 'is-selected': selectedSet.value.has(opt.value), 'is-focused': i === focusedIndex.value, 'is-disabled': opt.disabled }" :disabled="opt.disabled" @mouseenter="focusedIndex.value = i" @click="toggleValue(opt.value)"><span class="n-ms-check">{{ selectedSet.value.has(opt.value) ? '✓' : '' }}</span><span class="n-ms-option-label">{{ opt.label }}</span></button><div v-if="filteredOptions.value.length === 0" class="n-ms-empty">No options</div></div></div></Teleport>
70
+ <div v-if="isOpen.value && appendTo !== 'body'" class="n-ms-dropdown"><div v-if="searchable" class="n-ms-search"><input class="n-ms-search-input" :value="queryDraft.value" placeholder="Search..." @input="onSearchInput" @keydown.stop="onKeydown" /></div><div class="n-ms-options"><button v-for="(opt, i) in filteredOptions.value" :key="String(opt.value) + ':' + i" type="button" class="n-ms-option" :data-ms-opt="String(opt.value)" :class="{ 'is-selected': selectedSet.value.has(opt.value), 'is-focused': i === focusedIndex.value, 'is-disabled': opt.disabled }" :disabled="opt.disabled" @mouseenter="focusedIndex.value = i" @click="toggleValue(opt.value)"><span class="n-ms-check"><svg v-if="selectedSet.value.has(opt.value)" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" focusable="false" aria-hidden="true"><path d="M20 6L9 17l-5-5"/></svg></span><span class="n-ms-option-label">{{ opt.label }}</span></button><div v-if="filteredOptions.value.length === 0" class="n-ms-empty">No options</div></div></div>
71
+ <Teleport to="body"><div v-if="isOpen.value && appendTo === 'body'" class="n-ms-dropdown" :class="{ 'is-top': resolvedPlacement.value === 'top' }" :data-ms-popup="instanceId" :style="popupStyle.value"><div v-if="searchable" class="n-ms-search"><input class="n-ms-search-input" :value="queryDraft.value" placeholder="Search..." @input="onSearchInput" @keydown.stop="onKeydown" /></div><div class="n-ms-options"><button v-for="(opt, i) in filteredOptions.value" :key="String(opt.value) + ':' + i" type="button" class="n-ms-option" :data-ms-opt="String(opt.value)" :class="{ 'is-selected': selectedSet.value.has(opt.value), 'is-focused': i === focusedIndex.value, 'is-disabled': opt.disabled }" :disabled="opt.disabled" @mouseenter="focusedIndex.value = i" @click="toggleValue(opt.value)"><span class="n-ms-check"><svg v-if="selectedSet.value.has(opt.value)" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" focusable="false" aria-hidden="true"><path d="M20 6L9 17l-5-5"/></svg></span><span class="n-ms-option-label">{{ opt.label }}</span></button><div v-if="filteredOptions.value.length === 0" class="n-ms-empty">No options</div></div></div></Teleport>
72
72
  </div>
73
73
  </template>
74
74
 
@@ -1,7 +1,7 @@
1
- import { computed, h, hText, effect, signal, onMounted, onUnmounted, defineComponent, registerComponent, reloadComponent, injectStyle } from 'nexa-framework'
1
+ import { computed, h, hText, effect, defineComponent, registerComponent, reloadComponent, injectStyle } from 'nexa-framework'
2
2
 
3
3
  const _sfc_main = defineComponent({
4
- __scopeId: 'data-v-372b30ac',
4
+ __scopeId: 'data-v-2f8f305d',
5
5
  __hmrId: 'NPaginator_nexa',
6
6
  props: {
7
7
  first: { type: Number, default: 0 },
@@ -52,11 +52,11 @@ const _sfc_main = defineComponent({
52
52
  // Injected render function
53
53
  _sfc_main.render = function(ctx) {
54
54
  let { safeFirst, safeRows, page, pageCount, canPrev, canNext, goToPage, prev, next, firstPage, lastPage, changeRows, start, end, $slots, emit, first, rows, totalRecords, rowsPerPageOptions, Fragment: _ntc_Fragment } = ctx
55
- return h('div', { class: "n-paginator", "data-v-372b30ac": "" }, [
55
+ return h('div', { class: "n-paginator", "data-v-2f8f305d": "" }, [
56
56
  "\n ",
57
- h('div', { class: "n-paginator-left", "data-v-372b30ac": "" }, [
57
+ h('div', { class: "n-paginator-left", "data-v-2f8f305d": "" }, [
58
58
  "\n ",
59
- h('span', { class: "n-paginator-report", "data-v-372b30ac": "" }, [
59
+ h('span', { class: "n-paginator-report", "data-v-2f8f305d": "" }, [
60
60
  start.value,
61
61
  "-",
62
62
  end.value,
@@ -66,38 +66,46 @@ _sfc_main.render = function(ctx) {
66
66
  "\n "
67
67
  ]),
68
68
  "\n ",
69
- h('div', { class: "n-paginator-center", "data-v-372b30ac": "" }, [
69
+ h('div', { class: "n-paginator-center", "data-v-2f8f305d": "" }, [
70
70
  "\n ",
71
- h('button', { class: "n-pg-btn", type: "button", disabled: !canPrev.value, onClick: firstPage, "data-v-372b30ac": "" }, [
72
- "«"
71
+ h('button', { class: "n-pg-btn", type: "button", disabled: !canPrev.value, onClick: firstPage, "aria-label": "First page", "data-v-2f8f305d": "" }, [
72
+ 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-2f8f305d": "" }, [
73
+ h('path', { d: "M11 17l-5-5 5-5M18 17l-5-5 5-5", "data-v-2f8f305d": "" })
74
+ ])
73
75
  ]),
74
76
  "\n ",
75
- h('button', { class: "n-pg-btn", type: "button", disabled: !canPrev.value, onClick: prev, "data-v-372b30ac": "" }, [
76
- ""
77
+ h('button', { class: "n-pg-btn", type: "button", disabled: !canPrev.value, onClick: prev, "aria-label": "Previous page", "data-v-2f8f305d": "" }, [
78
+ 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-2f8f305d": "" }, [
79
+ h('path', { d: "M15 18l-6-6 6-6", "data-v-2f8f305d": "" })
80
+ ])
77
81
  ]),
78
82
  "\n ",
79
- h('span', { class: "n-pg-page", "data-v-372b30ac": "" }, [
83
+ h('span', { class: "n-pg-page", "data-v-2f8f305d": "" }, [
80
84
  page.value + 1,
81
85
  " / ",
82
86
  pageCount.value
83
87
  ]),
84
88
  "\n ",
85
- h('button', { class: "n-pg-btn", type: "button", disabled: !canNext.value, onClick: next, "data-v-372b30ac": "" }, [
86
- ""
89
+ h('button', { class: "n-pg-btn", type: "button", disabled: !canNext.value, onClick: next, "aria-label": "Next page", "data-v-2f8f305d": "" }, [
90
+ 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-2f8f305d": "" }, [
91
+ h('path', { d: "M9 18l6-6-6-6", "data-v-2f8f305d": "" })
92
+ ])
87
93
  ]),
88
94
  "\n ",
89
- h('button', { class: "n-pg-btn", type: "button", disabled: !canNext.value, onClick: lastPage, "data-v-372b30ac": "" }, [
90
- "»"
95
+ h('button', { class: "n-pg-btn", type: "button", disabled: !canNext.value, onClick: lastPage, "aria-label": "Last page", "data-v-2f8f305d": "" }, [
96
+ 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-2f8f305d": "" }, [
97
+ h('path', { d: "M13 17l5-5-5-5M6 17l5-5-5-5", "data-v-2f8f305d": "" })
98
+ ])
91
99
  ]),
92
100
  "\n "
93
101
  ]),
94
102
  "\n ",
95
- h('div', { class: "n-paginator-right", "data-v-372b30ac": "" }, [
103
+ h('div', { class: "n-paginator-right", "data-v-2f8f305d": "" }, [
96
104
  "\n ",
97
- h('select', { class: "n-pg-select", value: rows, onChange: changeRows, "data-v-372b30ac": "" }, [
105
+ h('select', { class: "n-pg-select", value: rows, onChange: changeRows, "data-v-2f8f305d": "" }, [
98
106
  "\n ",
99
107
  (rowsPerPageOptions).map((n, index) =>
100
- h('option', { key: n, value: n, "data-v-372b30ac": "" }, [
108
+ h('option', { key: n, value: n, "data-v-2f8f305d": "" }, [
101
109
  n
102
110
  ])
103
111
  ),
@@ -108,10 +116,10 @@ _sfc_main.render = function(ctx) {
108
116
  "\n "
109
117
  ])
110
118
  }
111
- _sfc_main.__scopeId = 'data-v-372b30ac'
119
+ _sfc_main.__scopeId = 'data-v-2f8f305d'
112
120
  _sfc_main.__hmrId = 'NPaginator_nexa'
113
121
 
114
122
  export default _sfc_main
115
123
 
116
- const __style = `.n-paginator[data-v-372b30ac]{display:flex;align-items:center;justify-content:space-between;gap:var(--n-space-3);padding:var(--n-space-3) var(--n-space-4);border-top:1px solid var(--n-color-border);background:var(--n-color-surface);font-family:var(--n-font-sans)}.n-paginator-report{color:var(--n-color-text-muted);font-size:var(--n-text-xs)}.n-paginator-center{display:flex;align-items:center;gap:0.35rem}.n-pg-btn{background:transparent;border:1px solid var(--n-color-border);color:var(--n-color-text);border-radius:var(--n-radius-sm);padding:0.25rem 0.5rem;cursor:pointer;transition:all var(--n-transition-fast)}.n-pg-btn:hover:not(:disabled){background:var(--n-color-glass)}.n-pg-btn:disabled{opacity:0.5;cursor:not-allowed}.n-pg-page{min-width:5rem;text-align:center;color:var(--n-color-text-secondary);font-size:var(--n-text-xs)}.n-pg-select{background:var(--n-color-bg);border:1px solid var(--n-color-border);color:var(--n-color-text);border-radius:var(--n-radius-sm);padding:0.25rem 0.5rem;font-size:var(--n-text-xs);outline:none}`
117
- injectStyle('data-v-372b30ac', __style)
124
+ const __style = `.n-paginator[data-v-2f8f305d]{display:flex;align-items:center;justify-content:space-between;gap:var(--n-space-3);padding:var(--n-space-3) var(--n-space-4);border-top:1px solid var(--n-color-border);background:var(--n-color-surface);font-family:var(--n-font-sans)}.n-paginator-report{color:var(--n-color-text-muted);font-size:var(--n-text-xs)}.n-paginator-center{display:flex;align-items:center;gap:0.35rem}.n-pg-btn{background:transparent;border:1px solid var(--n-color-border);color:var(--n-color-text);border-radius:var(--n-radius-sm);padding:0.25rem 0.5rem;cursor:pointer;transition:all var(--n-transition-fast)}.n-pg-btn:hover:not(:disabled){background:var(--n-color-glass)}.n-pg-btn:disabled{opacity:0.5;cursor:not-allowed}.n-pg-page{min-width:5rem;text-align:center;color:var(--n-color-text-secondary);font-size:var(--n-text-xs)}.n-pg-select{background:var(--n-color-bg);border:1px solid var(--n-color-border);color:var(--n-color-text);border-radius:var(--n-radius-sm);padding:0.25rem 0.5rem;font-size:var(--n-text-xs);outline:none}`
125
+ injectStyle('data-v-2f8f305d', __style)
@@ -58,11 +58,11 @@ const end = computed(() => Math.min((safeFirst.value || 0) + (safeRows.value ||
58
58
  <span class="n-paginator-report">{{ start.value }}-{{ end.value }} of {{ totalRecords }}</span>
59
59
  </div>
60
60
  <div class="n-paginator-center">
61
- <button type="button" class="n-pg-btn" :disabled="!canPrev.value" @click="firstPage">«</button>
62
- <button type="button" class="n-pg-btn" :disabled="!canPrev.value" @click="prev">‹</button>
61
+ <button type="button" class="n-pg-btn" :disabled="!canPrev.value" @click="firstPage" aria-label="First page"><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"><path d="M11 17l-5-5 5-5M18 17l-5-5 5-5"/></svg></button>
62
+ <button type="button" class="n-pg-btn" :disabled="!canPrev.value" @click="prev" aria-label="Previous page"><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"><path d="M15 18l-6-6 6-6"/></svg></button>
63
63
  <span class="n-pg-page">{{ page.value + 1 }} / {{ pageCount.value }}</span>
64
- <button type="button" class="n-pg-btn" :disabled="!canNext.value" @click="next">›</button>
65
- <button type="button" class="n-pg-btn" :disabled="!canNext.value" @click="lastPage">»</button>
64
+ <button type="button" class="n-pg-btn" :disabled="!canNext.value" @click="next" aria-label="Next page"><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"><path d="M9 18l6-6-6-6"/></svg></button>
65
+ <button type="button" class="n-pg-btn" :disabled="!canNext.value" @click="lastPage" aria-label="Last page"><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"><path d="M13 17l5-5-5-5M6 17l5-5-5-5"/></svg></button>
66
66
  </div>
67
67
  <div class="n-paginator-right">
68
68
  <select class="n-pg-select" :value="rows" @change="changeRows">
@@ -1,7 +1,7 @@
1
- import { signal, computed, h, hText, effect, onMounted, onUnmounted, 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-7b897096',
4
+ __scopeId: 'data-v-2460271c',
5
5
  __hmrId: 'NPassword_nexa',
6
6
  props: {
7
7
  modelValue: { type: String, default: '' },
@@ -99,59 +99,73 @@ const _sfc_main = defineComponent({
99
99
  // Injected render function
100
100
  _sfc_main.render = function(ctx) {
101
101
  let { instanceId, inputId, masked, type, hasValue, requirements, strength, internalError, errorMessage, ariaInvalid, describedBy, onInput, clear, toggle, $slots, emit, modelValue, placeholder, label, error, disabled, readonly, name, autocomplete, id, clearable, toggleMask, showStrength, validate, showRequirements, minLength, requireLower, requireUpper, requireNumber, requireSpecial, Fragment: _ntc_Fragment } = ctx
102
- return h('div', { class: "n-password", "data-v-7b897096": "" }, [
102
+ return h('div', { class: "n-password", "data-v-2460271c": "" }, [
103
103
  "\n ",
104
- (label) ? h('label', { class: "n-password-label", for: inputId.value, "data-v-7b897096": "" }, [
104
+ (label) ? h('label', { class: "n-password-label", for: inputId.value, "data-v-2460271c": "" }, [
105
105
  label
106
106
  ]) : null,
107
- h('div', { class: ["n-password-wrapper", { 'has-error': !!errorMessage.value, 'is-disabled': disabled }], "data-v-7b897096": "" }, [
107
+ h('div', { class: ["n-password-wrapper", { 'has-error': !!errorMessage.value, 'is-disabled': disabled }], "data-v-2460271c": "" }, [
108
108
  "\n ",
109
- h('input', { class: "n-password-input", id: inputId.value, name: name || undefined, type: type.value, value: modelValue, placeholder: placeholder, disabled: disabled, readonly: readonly, autocomplete: autocomplete, "aria-invalid": ariaInvalid.value, "aria-describedby": describedBy.value, onInput: onInput, "data-v-7b897096": "" }),
109
+ h('input', { class: "n-password-input", id: inputId.value, name: name || undefined, type: type.value, value: modelValue, placeholder: placeholder, disabled: disabled, readonly: readonly, autocomplete: autocomplete, "aria-invalid": ariaInvalid.value, "aria-describedby": describedBy.value, onInput: onInput, "data-v-2460271c": "" }),
110
110
  "\n ",
111
- h('div', { class: "n-password-actions", "data-v-7b897096": "" }, [
111
+ h('div', { class: "n-password-actions", "data-v-2460271c": "" }, [
112
112
  "\n ",
113
- (clearable && modelValue) ? h('button', { class: "n-password-action", type: "button", disabled: disabled || readonly, "aria-label": "Limpiar", onClick: clear, "data-v-7b897096": "" }, [
114
- ""
113
+ (clearable && modelValue) ? h('button', { class: "n-password-action", type: "button", disabled: disabled || readonly, "aria-label": "Limpiar", onClick: clear, "data-v-2460271c": "" }, [
114
+ 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-2460271c": "" }, [
115
+ h('path', { d: "M18 6L6 18", "data-v-2460271c": "" }),
116
+ h('path', { d: "M6 6l12 12", "data-v-2460271c": "" })
117
+ ])
115
118
  ]) : null,
116
- (toggleMask) ? h('button', { class: "n-password-action", type: "button", "aria-pressed": (!masked.value).toString(), disabled: disabled, "aria-label": masked.value ? 'Mostrar contraseña' : 'Ocultar contraseña', onClick: toggle, "data-v-7b897096": "" }, [
119
+ (toggleMask) ? h('button', { class: "n-password-action", type: "button", "aria-pressed": (!masked.value).toString(), disabled: disabled, "aria-label": masked.value ? 'Mostrar contraseña' : 'Ocultar contraseña', onClick: toggle, "data-v-2460271c": "" }, [
117
120
  "\n ",
118
- masked.value ? '👁' : '🙈',
121
+ (masked.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-2460271c": "" }, [
122
+ h('path', { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z", "data-v-2460271c": "" }),
123
+ h('circle', { cx: "12", cy: "12", r: "3", "data-v-2460271c": "" })
124
+ ]) : (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-2460271c": "" }, [
125
+ h('path', { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z", "data-v-2460271c": "" }),
126
+ h('circle', { cx: "12", cy: "12", r: "3", "data-v-2460271c": "" }),
127
+ h('path', { d: "M23 1L1 23", "data-v-2460271c": "" })
128
+ ]) : null,
119
129
  "\n "
120
130
  ]) : null
121
131
  ]),
122
132
  "\n "
123
133
  ]),
124
134
  "\n\n ",
125
- (errorMessage.value) ? h('div', { class: "n-password-error", id: inputId.value + '-error', role: "alert", "data-v-7b897096": "" }, [
135
+ (errorMessage.value) ? h('div', { class: "n-password-error", id: inputId.value + '-error', role: "alert", "data-v-2460271c": "" }, [
126
136
  "\n ",
127
137
  errorMessage.value,
128
138
  "\n "
129
139
  ]) : null,
130
- (showStrength && modelValue) ? h('div', { class: "n-password-strength", id: inputId.value + '-strength', "data-v-7b897096": "" }, [
140
+ (showStrength && modelValue) ? h('div', { class: "n-password-strength", id: inputId.value + '-strength', "data-v-2460271c": "" }, [
131
141
  "\n ",
132
- h('div', { class: "n-password-meter", role: "progressbar", "aria-valuemin": 0, "aria-valuemax": 4, "aria-valuenow": strength.value.score, "aria-label": 'Fuerza de contraseña: ' + strength.value.label, "data-v-7b897096": "" }, [
142
+ h('div', { class: "n-password-meter", role: "progressbar", "aria-valuemin": 0, "aria-valuemax": 4, "aria-valuenow": strength.value.score, "aria-label": 'Fuerza de contraseña: ' + strength.value.label, "data-v-2460271c": "" }, [
133
143
  "\n ",
134
144
  ([1, 2, 3, 4]).map((n, index) =>
135
- h('span', { class: ["n-password-meter-seg", { 'is-on': n <= strength.value.score }], key: n, "data-v-7b897096": "" })
145
+ h('span', { class: ["n-password-meter-seg", { 'is-on': n <= strength.value.score }], key: n, "data-v-2460271c": "" })
136
146
  ),
137
147
  "\n "
138
148
  ]),
139
149
  "\n ",
140
- h('span', { class: "n-password-strength-label", "data-v-7b897096": "" }, [
150
+ h('span', { class: "n-password-strength-label", "data-v-2460271c": "" }, [
141
151
  strength.value.label
142
152
  ]),
143
153
  "\n "
144
154
  ]) : null,
145
- (showRequirements && validate && modelValue) ? h('ul', { class: "n-password-req", id: inputId.value + '-requirements', "data-v-7b897096": "" }, [
155
+ (showRequirements && validate && modelValue) ? h('ul', { class: "n-password-req", id: inputId.value + '-requirements', "data-v-2460271c": "" }, [
146
156
  "\n ",
147
157
  (requirements.value).map((r, index) =>
148
- h('li', { class: ["n-password-req-item", { 'is-ok': r.ok }], key: r.key, "data-v-7b897096": "" }, [
158
+ h('li', { class: ["n-password-req-item", { 'is-ok': r.ok }], key: r.key, "data-v-2460271c": "" }, [
149
159
  "\n ",
150
- h('span', { class: "n-password-req-icon", "data-v-7b897096": "" }, [
151
- r.ok ? '' : '•'
160
+ h('span', { class: "n-password-req-icon", "data-v-2460271c": "" }, [
161
+ (r.ok) ? h('svg', { viewBox: "0 0 24 24", width: "12", height: "12", fill: "none", stroke: "currentColor", "stroke-width": "3", "stroke-linecap": "round", "stroke-linejoin": "round", focusable: "false", "aria-hidden": "true", "data-v-2460271c": "" }, [
162
+ h('path', { d: "M20 6L9 17l-5-5", "data-v-2460271c": "" })
163
+ ]) : (true) ? h('svg', { viewBox: "0 0 24 24", width: "12", height: "12", fill: "currentColor", focusable: "false", "aria-hidden": "true", "data-v-2460271c": "" }, [
164
+ h('circle', { cx: "12", cy: "12", r: "4", "data-v-2460271c": "" })
165
+ ]) : null
152
166
  ]),
153
167
  "\n ",
154
- h('span', { "data-v-7b897096": "" }, [
168
+ h('span', { "data-v-2460271c": "" }, [
155
169
  r.label
156
170
  ]),
157
171
  "\n "
@@ -161,33 +175,33 @@ _sfc_main.render = function(ctx) {
161
175
  ]) : null
162
176
  ])
163
177
  }
164
- _sfc_main.__scopeId = 'data-v-7b897096'
178
+ _sfc_main.__scopeId = 'data-v-2460271c'
165
179
  _sfc_main.__hmrId = 'NPassword_nexa'
166
180
 
167
181
  export default _sfc_main
168
182
 
169
- const __style = `.n-password[data-v-7b897096]{ display:flex; flex-direction:column; gap: var(--n-space-2); width:100%; font-family: var(--n-font-sans); }
170
- .n-password-label[data-v-7b897096]{ font-size: var(--n-text-sm); font-weight: var(--n-weight-semibold); color: var(--n-color-text-secondary); margin-left: var(--n-space-1); }
171
- .n-password-wrapper[data-v-7b897096]{ position:relative; display:flex; align-items:center; background: var(--n-color-bg); border: 1px solid var(--n-color-border); border-radius: var(--n-radius-md); transition: all var(--n-transition-normal); }
172
- .n-password-wrapper[data-v-7b897096]:focus-within{ border-color: var(--n-color-primary); box-shadow: 0 0 0 3px var(--n-color-primary-light); background: var(--n-color-surface); }
173
- .n-password-wrapper.has-error[data-v-7b897096]{ border-color: var(--n-color-danger); }
174
- .n-password-wrapper.has-error[data-v-7b897096]:focus-within{ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.25); }
175
- .n-password-input[data-v-7b897096]{ width:100%; background:transparent; border:none; outline:none; color: var(--n-color-text); padding: 0.75rem 2.75rem 0.75rem 1rem; font-size: var(--n-text-base); font-family: inherit; }
176
- .n-password-input[data-v-7b897096]::placeholder{ color: var(--n-color-text-muted); }
177
- .n-password-actions[data-v-7b897096]{ position:absolute; right: 0.5rem; display:flex; align-items:center; gap: 0.15rem; }
178
- .n-password-action[data-v-7b897096]{ background:transparent; border:none; color: var(--n-color-text-muted); cursor:pointer; padding: 0.25rem; border-radius: var(--n-radius-sm); transition: all var(--n-transition-fast); line-height: 1; display:flex; align-items:center; }
179
- .n-password-action[data-v-7b897096]:hover:not(:disabled){ color: var(--n-color-text); background: var(--n-color-glass); }
180
- .n-password-action[data-v-7b897096]:disabled{ opacity: 0.5; cursor: not-allowed; }
181
- .n-password-error[data-v-7b897096]{ font-size: var(--n-text-xs); color: var(--n-color-danger); padding: 0 var(--n-space-1); }
182
- .n-password-strength[data-v-7b897096]{ display:flex; align-items:center; gap: var(--n-space-2); padding: 0 var(--n-space-1); }
183
- .n-password-meter[data-v-7b897096]{ display:grid; grid-template-columns: repeat(4, 1fr); gap: 4px; width: 120px; }
184
- .n-password-meter-seg[data-v-7b897096]{ height: 6px; border-radius: var(--n-radius-full); background: var(--n-color-border); transition: background var(--n-transition-fast); }
185
- .n-password-meter-seg.is-on[data-v-7b897096]{ background: var(--n-color-primary); }
186
- .n-password-strength-label[data-v-7b897096]{ font-size: var(--n-text-xs); color: var(--n-color-text-muted); }
187
- .n-password-req[data-v-7b897096]{ list-style:none; padding: 0 var(--n-space-1); margin: 0; display:flex; flex-direction:column; gap: 0.25rem; }
188
- .n-password-req-item[data-v-7b897096]{ display:flex; gap: var(--n-space-2); align-items:flex-start; font-size: var(--n-text-xs); color: var(--n-color-text-muted); }
189
- .n-password-req-item.is-ok[data-v-7b897096]{ color: var(--n-color-success); }
190
- .n-password-req-icon[data-v-7b897096]{ width: 14px; display:inline-flex; justify-content:center; flex-shrink:0; }
191
- .n-password-wrapper.is-disabled[data-v-7b897096]{ opacity: 0.5; cursor: not-allowed; background: var(--n-color-surface-alt); }
192
- .n-password-wrapper.is-disabled .n-password-input[data-v-7b897096]{ cursor: not-allowed; }`
193
- injectStyle('data-v-7b897096', __style)
183
+ const __style = `.n-password[data-v-2460271c]{ display:flex; flex-direction:column; gap: var(--n-space-2); width:100%; font-family: var(--n-font-sans); }
184
+ .n-password-label[data-v-2460271c]{ font-size: var(--n-text-sm); font-weight: var(--n-weight-semibold); color: var(--n-color-text-secondary); margin-left: var(--n-space-1); }
185
+ .n-password-wrapper[data-v-2460271c]{ position:relative; display:flex; align-items:center; background: var(--n-color-bg); border: 1px solid var(--n-color-border); border-radius: var(--n-radius-md); transition: all var(--n-transition-normal); }
186
+ .n-password-wrapper[data-v-2460271c]:focus-within{ border-color: var(--n-color-primary); box-shadow: 0 0 0 3px var(--n-color-primary-light); background: var(--n-color-surface); }
187
+ .n-password-wrapper.has-error[data-v-2460271c]{ border-color: var(--n-color-danger); }
188
+ .n-password-wrapper.has-error[data-v-2460271c]:focus-within{ box-shadow: 0 0 0 3px var(--n-color-danger-light); }
189
+ .n-password-input[data-v-2460271c]{ width:100%; background:transparent; border:none; outline:none; color: var(--n-color-text); padding: 0.75rem 2.75rem 0.75rem 1rem; font-size: var(--n-text-base); font-family: inherit; }
190
+ .n-password-input[data-v-2460271c]::placeholder{ color: var(--n-color-text-muted); }
191
+ .n-password-actions[data-v-2460271c]{ position:absolute; right: 0.5rem; display:flex; align-items:center; gap: 0.15rem; }
192
+ .n-password-action[data-v-2460271c]{ background:transparent; border:none; color: var(--n-color-text-muted); cursor:pointer; padding: 0.25rem; border-radius: var(--n-radius-sm); transition: all var(--n-transition-fast); line-height: 1; display:flex; align-items:center; }
193
+ .n-password-action[data-v-2460271c]:hover:not(:disabled){ color: var(--n-color-text); background: var(--n-color-glass); }
194
+ .n-password-action[data-v-2460271c]:disabled{ opacity: 0.5; cursor: not-allowed; }
195
+ .n-password-error[data-v-2460271c]{ font-size: var(--n-text-xs); color: var(--n-color-danger); padding: 0 var(--n-space-1); }
196
+ .n-password-strength[data-v-2460271c]{ display:flex; align-items:center; gap: var(--n-space-2); padding: 0 var(--n-space-1); }
197
+ .n-password-meter[data-v-2460271c]{ display:grid; grid-template-columns: repeat(4, 1fr); gap: 4px; width: 120px; }
198
+ .n-password-meter-seg[data-v-2460271c]{ height: 6px; border-radius: var(--n-radius-full); background: var(--n-color-border); transition: background var(--n-transition-fast); }
199
+ .n-password-meter-seg.is-on[data-v-2460271c]{ background: var(--n-color-primary); }
200
+ .n-password-strength-label[data-v-2460271c]{ font-size: var(--n-text-xs); color: var(--n-color-text-muted); }
201
+ .n-password-req[data-v-2460271c]{ list-style:none; padding: 0 var(--n-space-1); margin: 0; display:flex; flex-direction:column; gap: 0.25rem; }
202
+ .n-password-req-item[data-v-2460271c]{ display:flex; gap: var(--n-space-2); align-items:flex-start; font-size: var(--n-text-xs); color: var(--n-color-text-muted); }
203
+ .n-password-req-item.is-ok[data-v-2460271c]{ color: var(--n-color-success); }
204
+ .n-password-req-icon[data-v-2460271c]{ width: 14px; display:inline-flex; justify-content:center; flex-shrink:0; }
205
+ .n-password-wrapper.is-disabled[data-v-2460271c]{ opacity: 0.5; cursor: not-allowed; background: var(--n-color-surface-alt); }
206
+ .n-password-wrapper.is-disabled .n-password-input[data-v-2460271c]{ cursor: not-allowed; }`
207
+ injectStyle('data-v-2460271c', __style)
@@ -123,9 +123,10 @@ const toggle = (e) => {
123
123
  @input="onInput"
124
124
  />
125
125
  <div class="n-password-actions">
126
- <button v-if="clearable && modelValue" type="button" class="n-password-action" :disabled="disabled || readonly" aria-label="Limpiar" @click="clear">✕</button>
126
+ <button v-if="clearable && modelValue" type="button" class="n-password-action" :disabled="disabled || readonly" aria-label="Limpiar" @click="clear"><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"><path d="M18 6L6 18"/><path d="M6 6l12 12"/></svg></button>
127
127
  <button v-if="toggleMask" type="button" class="n-password-action" :aria-pressed="(!masked.value).toString()" :disabled="disabled" :aria-label="masked.value ? 'Mostrar contraseña' : 'Ocultar contraseña'" @click="toggle">
128
- {{ masked.value ? '👁' : '🙈' }}
128
+ <svg v-if="masked.value" 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"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>
129
+ <svg v-else 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"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/><path d="M23 1L1 23"/></svg>
129
130
  </button>
130
131
  </div>
131
132
  </div>
@@ -143,7 +144,7 @@ const toggle = (e) => {
143
144
 
144
145
  <ul v-if="showRequirements && validate && modelValue" class="n-password-req" :id="inputId.value + '-requirements'">
145
146
  <li v-for="r in requirements.value" :key="r.key" class="n-password-req-item" :class="{ 'is-ok': r.ok }">
146
- <span class="n-password-req-icon">{{ r.ok ? '✓' : '•' }}</span>
147
+ <span class="n-password-req-icon"><svg v-if="r.ok" viewBox="0 0 24 24" width="12" height="12" 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><svg v-else viewBox="0 0 24 24" width="12" height="12" fill="currentColor" focusable="false" aria-hidden="true"><circle cx="12" cy="12" r="4"/></svg></span>
147
148
  <span>{{ r.label }}</span>
148
149
  </li>
149
150
  </ul>
@@ -156,7 +157,7 @@ const toggle = (e) => {
156
157
  .n-password-wrapper { position:relative; display:flex; align-items:center; background: var(--n-color-bg); border: 1px solid var(--n-color-border); border-radius: var(--n-radius-md); transition: all var(--n-transition-normal); }
157
158
  .n-password-wrapper:focus-within { border-color: var(--n-color-primary); box-shadow: 0 0 0 3px var(--n-color-primary-light); background: var(--n-color-surface); }
158
159
  .n-password-wrapper.has-error { border-color: var(--n-color-danger); }
159
- .n-password-wrapper.has-error:focus-within { box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.25); }
160
+ .n-password-wrapper.has-error:focus-within { box-shadow: 0 0 0 3px var(--n-color-danger-light); }
160
161
  .n-password-input { width:100%; background:transparent; border:none; outline:none; color: var(--n-color-text); padding: 0.75rem 2.75rem 0.75rem 1rem; font-size: var(--n-text-base); font-family: inherit; }
161
162
  .n-password-input::placeholder { color: var(--n-color-text-muted); }
162
163
  .n-password-actions { position:absolute; right: 0.5rem; display:flex; align-items:center; gap: 0.15rem; }
@@ -1,4 +1,4 @@
1
- import { computed, h, hText, effect, signal, onMounted, onUnmounted, defineComponent, registerComponent, reloadComponent, injectStyle } from 'nexa-framework'
1
+ import { computed, h, hText, effect, defineComponent, registerComponent, reloadComponent, injectStyle } from 'nexa-framework'
2
2
 
3
3
  const _sfc_main = defineComponent({
4
4
  __scopeId: 'data-v-daaa1d0',
@@ -67,7 +67,7 @@ const __style = `.n-progress[data-v-daaa1d0]{
67
67
  .n-progress-bar[data-v-daaa1d0]{
68
68
  height: 100%;
69
69
  border-radius: var(--n-radius-full);
70
- transition: width 0.4s cubic-bezier(0.4, 0, 0.2, 1);
70
+ transition: width var(--n-transition-slow);
71
71
  display: flex;
72
72
  align-items: center;
73
73
  justify-content: flex-end;
@@ -105,11 +105,11 @@ const __style = `.n-progress[data-v-daaa1d0]{
105
105
  .is-striped .n-progress-bar[data-v-daaa1d0]{
106
106
  background-image: linear-gradient(
107
107
  45deg,
108
- rgba(255, 255, 255, 0.12) 25%,
108
+ var(--n-color-stripe) 25%,
109
109
  transparent 25%,
110
110
  transparent 50%,
111
- rgba(255, 255, 255, 0.12) 50%,
112
- rgba(255, 255, 255, 0.12) 75%,
111
+ var(--n-color-stripe) 50%,
112
+ var(--n-color-stripe) 75%,
113
113
  transparent 75%,
114
114
  transparent
115
115
  );
@@ -51,7 +51,7 @@ const percentage = computed(() => Math.min(100, Math.max(0, (props.value / props
51
51
  .n-progress-bar {
52
52
  height: 100%;
53
53
  border-radius: var(--n-radius-full);
54
- transition: width 0.4s cubic-bezier(0.4, 0, 0.2, 1);
54
+ transition: width var(--n-transition-slow);
55
55
  display: flex;
56
56
  align-items: center;
57
57
  justify-content: flex-end;
@@ -89,11 +89,11 @@ const percentage = computed(() => Math.min(100, Math.max(0, (props.value / props
89
89
  .is-striped .n-progress-bar {
90
90
  background-image: linear-gradient(
91
91
  45deg,
92
- rgba(255, 255, 255, 0.12) 25%,
92
+ var(--n-color-stripe) 25%,
93
93
  transparent 25%,
94
94
  transparent 50%,
95
- rgba(255, 255, 255, 0.12) 50%,
96
- rgba(255, 255, 255, 0.12) 75%,
95
+ var(--n-color-stripe) 50%,
96
+ var(--n-color-stripe) 75%,
97
97
  transparent 75%,
98
98
  transparent
99
99
  );