nexa-ui-kit 0.10.0 → 0.11.0

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 +24 -22
  50. package/dist/components/NTreeMenu.nexa +1 -1
  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 +1 -1
  73. package/src/styles/tokens.css +18 -0
@@ -1,7 +1,7 @@
1
- import { signal, h, hText, effect, computed, onMounted, onUnmounted, defineComponent, registerComponent, reloadComponent, injectStyle } from 'nexa-framework'
1
+ import { signal, h, hText, effect, defineComponent, registerComponent, reloadComponent, injectStyle } from 'nexa-framework'
2
2
 
3
3
  const _sfc_main = defineComponent({
4
- __scopeId: 'data-v-22a3a541',
4
+ __scopeId: 'data-v-291d86b1',
5
5
  __hmrId: 'NAlert_nexa',
6
6
  props: {
7
7
  variant: { type: String, default: 'info' },
@@ -24,34 +24,55 @@ const _sfc_main = defineComponent({
24
24
  // Injected render function
25
25
  _sfc_main.render = function(ctx) {
26
26
  let { visible, dismiss, icons, $slots, emit, variant, title, closable, icon, Fragment: _ntc_Fragment } = ctx
27
- return (visible.value) ? h('div', { class: ["n-alert", `is-${variant}`], "data-v-22a3a541": "" }, [
27
+ return (visible.value) ? h('div', { class: ["n-alert", `is-${variant}`], "data-v-291d86b1": "" }, [
28
28
  "\n ",
29
- h('span', { class: "n-alert-icon", "data-v-22a3a541": "" }, [
30
- icon || icons[variant] || 'ℹ'
29
+ h('span', { class: "n-alert-icon", "data-v-291d86b1": "" }, [
30
+ "\n ",
31
+ (icon) ? h('template', { "data-v-291d86b1": "" }, [
32
+ icon
33
+ ]) : (variant === 'success') ? h('svg', { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", stroke: "currentColor", "stroke-width": "2.5", "stroke-linecap": "round", "stroke-linejoin": "round", focusable: "false", "aria-hidden": "true", "data-v-291d86b1": "" }, [
34
+ h('path', { d: "M20 6L9 17l-5-5", "data-v-291d86b1": "" })
35
+ ]) : (variant === 'error') ? h('svg', { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", stroke: "currentColor", "stroke-width": "2.5", "stroke-linecap": "round", "stroke-linejoin": "round", focusable: "false", "aria-hidden": "true", "data-v-291d86b1": "" }, [
36
+ h('circle', { cx: "12", cy: "12", r: "10", "data-v-291d86b1": "" }),
37
+ h('line', { x1: "15", y1: "9", x2: "9", y2: "15", "data-v-291d86b1": "" }),
38
+ h('line', { x1: "9", y1: "9", x2: "15", y2: "15", "data-v-291d86b1": "" })
39
+ ]) : (variant === 'warning') ? h('svg', { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", stroke: "currentColor", "stroke-width": "2.5", "stroke-linecap": "round", "stroke-linejoin": "round", focusable: "false", "aria-hidden": "true", "data-v-291d86b1": "" }, [
40
+ h('path', { d: "M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z", "data-v-291d86b1": "" }),
41
+ h('line', { x1: "12", y1: "9", x2: "12", y2: "13", "data-v-291d86b1": "" }),
42
+ h('line', { x1: "12", y1: "17", x2: "12.01", y2: "17", "data-v-291d86b1": "" })
43
+ ]) : (true) ? h('svg', { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", stroke: "currentColor", "stroke-width": "2.5", "stroke-linecap": "round", "stroke-linejoin": "round", focusable: "false", "aria-hidden": "true", "data-v-291d86b1": "" }, [
44
+ h('circle', { cx: "12", cy: "12", r: "10", "data-v-291d86b1": "" }),
45
+ h('line', { x1: "12", y1: "16", x2: "12", y2: "12", "data-v-291d86b1": "" }),
46
+ h('line', { x1: "12", y1: "8", x2: "12.01", y2: "8", "data-v-291d86b1": "" })
47
+ ]) : null,
48
+ "\n "
31
49
  ]),
32
50
  "\n ",
33
- h('div', { class: "n-alert-body", "data-v-22a3a541": "" }, [
51
+ h('div', { class: "n-alert-body", "data-v-291d86b1": "" }, [
34
52
  "\n ",
35
- (title) ? h('span', { class: "n-alert-title", "data-v-22a3a541": "" }, [
53
+ (title) ? h('span', { class: "n-alert-title", "data-v-291d86b1": "" }, [
36
54
  title
37
55
  ]) : null,
38
- h('span', { class: "n-alert-text", "data-v-22a3a541": "" }, [
56
+ h('span', { class: "n-alert-text", "data-v-291d86b1": "" }, [
39
57
  ctx.$slots.default ? ctx.$slots.default() : null
40
58
  ]),
41
59
  "\n "
42
60
  ]),
43
61
  "\n ",
44
- (closable) ? h('button', { class: "n-alert-close", onClick: dismiss, "data-v-22a3a541": "" }, [
45
- "×"
62
+ (closable) ? h('button', { class: "n-alert-close", onClick: dismiss, "aria-label": "Close", "data-v-291d86b1": "" }, [
63
+ 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-291d86b1": "" }, [
64
+ h('path', { d: "M18 6L6 18", "data-v-291d86b1": "" }),
65
+ h('path', { d: "M6 6l12 12", "data-v-291d86b1": "" })
66
+ ])
46
67
  ]) : null
47
68
  ]) : null
48
69
  }
49
- _sfc_main.__scopeId = 'data-v-22a3a541'
70
+ _sfc_main.__scopeId = 'data-v-291d86b1'
50
71
  _sfc_main.__hmrId = 'NAlert_nexa'
51
72
 
52
73
  export default _sfc_main
53
74
 
54
- const __style = `.n-alert[data-v-22a3a541]{
75
+ const __style = `.n-alert[data-v-291d86b1]{
55
76
  display: flex;
56
77
  align-items: flex-start;
57
78
  gap: var(--n-space-3);
@@ -64,35 +85,35 @@ const __style = `.n-alert[data-v-22a3a541]{
64
85
  }
65
86
 
66
87
  @keyframes n-alert-in {
67
- from[data-v-22a3a541]{ opacity: 0; transform: translateY(-8px); }
68
- to[data-v-22a3a541]{ opacity: 1; transform: translateY(0); }
88
+ from[data-v-291d86b1]{ opacity: 0; transform: translateY(-8px); }
89
+ to[data-v-291d86b1]{ opacity: 1; transform: translateY(0); }
69
90
  }
70
91
 
71
- .is-info[data-v-22a3a541]{
92
+ .is-info[data-v-291d86b1]{
72
93
  background: var(--n-color-primary-light);
73
- border-color: rgba(59, 130, 246, 0.2);
94
+ border-color: var(--n-color-primary-border);
74
95
  color: var(--n-color-primary);
75
96
  }
76
97
 
77
- .is-success[data-v-22a3a541]{
98
+ .is-success[data-v-291d86b1]{
78
99
  background: var(--n-color-success-light);
79
- border-color: rgba(16, 185, 129, 0.2);
100
+ border-color: var(--n-color-success-border);
80
101
  color: var(--n-color-success);
81
102
  }
82
103
 
83
- .is-warning[data-v-22a3a541]{
104
+ .is-warning[data-v-291d86b1]{
84
105
  background: var(--n-color-warning-light);
85
- border-color: rgba(245, 158, 11, 0.2);
106
+ border-color: var(--n-color-warning-border);
86
107
  color: var(--n-color-warning);
87
108
  }
88
109
 
89
- .is-error[data-v-22a3a541]{
110
+ .is-error[data-v-291d86b1]{
90
111
  background: var(--n-color-danger-light);
91
- border-color: rgba(239, 68, 68, 0.2);
112
+ border-color: var(--n-color-danger-border);
92
113
  color: var(--n-color-danger);
93
114
  }
94
115
 
95
- .n-alert-icon[data-v-22a3a541]{
116
+ .n-alert-icon[data-v-291d86b1]{
96
117
  font-size: var(--n-text-base);
97
118
  font-weight: var(--n-weight-bold);
98
119
  flex-shrink: 0;
@@ -107,16 +128,16 @@ to[data-v-22a3a541]{ opacity: 1; transform: translateY(0); }
107
128
  color: var(--n-color-text);
108
129
  }
109
130
 
110
- .n-alert-title[data-v-22a3a541]{
131
+ .n-alert-title[data-v-291d86b1]{
111
132
  font-weight: var(--n-weight-semibold);
112
133
  font-size: var(--n-text-sm);
113
134
  }
114
135
 
115
- .n-alert-text[data-v-22a3a541]{
136
+ .n-alert-text[data-v-291d86b1]{
116
137
  color: var(--n-color-text-secondary);
117
138
  }
118
139
 
119
- .n-alert-close[data-v-22a3a541]{
140
+ .n-alert-close[data-v-291d86b1]{
120
141
  background: transparent;
121
142
  border: none;
122
143
  color: var(--n-color-text-muted);
@@ -128,7 +149,7 @@ to[data-v-22a3a541]{ opacity: 1; transform: translateY(0); }
128
149
  transition: color var(--n-transition-fast);
129
150
  }
130
151
 
131
- .n-alert-close[data-v-22a3a541]:hover{
152
+ .n-alert-close[data-v-291d86b1]:hover{
132
153
  color: var(--n-color-text);
133
154
  }`
134
- injectStyle('data-v-22a3a541', __style)
155
+ injectStyle('data-v-291d86b1', __style)
@@ -22,12 +22,18 @@ const icons = { success: '✓', error: '✕', warning: '⚡', info: 'ℹ' }
22
22
 
23
23
  <template>
24
24
  <div v-if="visible.value" class="n-alert" :class="`is-${variant}`">
25
- <span class="n-alert-icon">{{ icon || icons[variant] || 'ℹ' }}</span>
25
+ <span class="n-alert-icon">
26
+ <template v-if="icon">{{ icon }}</template>
27
+ <svg v-else-if="variant === 'success'" viewBox="0 0 24 24" width="16" height="16" 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>
28
+ <svg v-else-if="variant === 'error'" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" focusable="false" aria-hidden="true"><circle cx="12" cy="12" r="10"/><line x1="15" y1="9" x2="9" y2="15"/><line x1="9" y1="9" x2="15" y2="15"/></svg>
29
+ <svg v-else-if="variant === 'warning'" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" focusable="false" aria-hidden="true"><path d="M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
30
+ <svg v-else viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" focusable="false" aria-hidden="true"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>
31
+ </span>
26
32
  <div class="n-alert-body">
27
33
  <span v-if="title" class="n-alert-title">{{ title }}</span>
28
34
  <span class="n-alert-text"><slot /></span>
29
35
  </div>
30
- <button v-if="closable" class="n-alert-close" @click="dismiss">&times;</button>
36
+ <button v-if="closable" class="n-alert-close" @click="dismiss" aria-label="Close"><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="M18 6L6 18"/><path d="M6 6l12 12"/></svg></button>
31
37
  </div>
32
38
  </template>
33
39
 
@@ -51,25 +57,25 @@ const icons = { success: '✓', error: '✕', warning: '⚡', info: 'ℹ' }
51
57
 
52
58
  .is-info {
53
59
  background: var(--n-color-primary-light);
54
- border-color: rgba(59, 130, 246, 0.2);
60
+ border-color: var(--n-color-primary-border);
55
61
  color: var(--n-color-primary);
56
62
  }
57
63
 
58
64
  .is-success {
59
65
  background: var(--n-color-success-light);
60
- border-color: rgba(16, 185, 129, 0.2);
66
+ border-color: var(--n-color-success-border);
61
67
  color: var(--n-color-success);
62
68
  }
63
69
 
64
70
  .is-warning {
65
71
  background: var(--n-color-warning-light);
66
- border-color: rgba(245, 158, 11, 0.2);
72
+ border-color: var(--n-color-warning-border);
67
73
  color: var(--n-color-warning);
68
74
  }
69
75
 
70
76
  .is-error {
71
77
  background: var(--n-color-danger-light);
72
- border-color: rgba(239, 68, 68, 0.2);
78
+ border-color: var(--n-color-danger-border);
73
79
  color: var(--n-color-danger);
74
80
  }
75
81
 
@@ -1,8 +1,8 @@
1
- import { signal, computed, effect, onBeforeUnmount, h, hText, onMounted, onUnmounted, defineComponent, registerComponent, reloadComponent, injectStyle, Teleport } from 'nexa-framework'
1
+ import { signal, computed, effect, onBeforeUnmount, 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-741257a1',
5
+ __scopeId: 'data-v-24d51847',
6
6
  __hmrId: 'NAutocomplete_nexa',
7
7
  props: { modelValue: { type: String, default: '' }, options: { type: Array, default: () => [] }, placeholder: { type: String, default: '' }, label: { type: String, default: '' }, disabled: { type: Boolean, default: false }, readonly: { type: Boolean, default: false }, clearable: { type: Boolean, default: false }, minLength: { type: Number, default: 1 }, delay: { type: Number, default: 200 }, loading: { type: Boolean, default: false }, dropdown: { type: Boolean, default: false }, emptyMessage: { type: String, default: 'No results' }, placement: { type: String, default: 'auto' } },
8
8
  emits: ['update:modelValue', 'select', 'complete', 'clear'],
@@ -40,42 +40,47 @@ const _sfc_main = defineComponent({
40
40
  // Injected render function
41
41
  _sfc_main.render = function(ctx) {
42
42
  let { instanceId, listboxId, inputId, isOpen, query, focusedIndex, rootEl, popupStyle, resolvedPlacement, stopTracking, completeTimer, normalizeOption, normalizedOptions, filteredOptions, activeId, close, open, requestComplete, onInput, onFocus, onKeydown, selectOption, clearValue, openAll, onBeforeUnmount, trackFloatingOverlay, $slots, emit, modelValue, options, placeholder, label, disabled, readonly, clearable, minLength, delay, loading, dropdown, emptyMessage, placement, Fragment: _ntc_Fragment, Teleport: _ntc_Teleport } = ctx
43
- return h('div', { class: "n-ac", "data-autocomplete-root": instanceId, "data-v-741257a1": "" }, [
43
+ return h('div', { class: "n-ac", "data-autocomplete-root": instanceId, "data-v-24d51847": "" }, [
44
44
  "\n ",
45
- (label) ? h('label', { class: "n-ac-label", for: inputId, "data-v-741257a1": "" }, [
45
+ (label) ? h('label', { class: "n-ac-label", for: inputId, "data-v-24d51847": "" }, [
46
46
  label
47
47
  ]) : null,
48
- h('div', { class: ["n-ac-input-wrap", { 'is-disabled': disabled }], "data-v-741257a1": "" }, [
48
+ h('div', { class: ["n-ac-input-wrap", { 'is-disabled': disabled }], "data-v-24d51847": "" }, [
49
49
  "\n ",
50
- h('input', { class: "n-ac-input", id: inputId, value: modelValue, placeholder: placeholder, disabled: disabled, readonly: readonly, role: "combobox", "aria-autocomplete": "list", "aria-expanded": isOpen.value, "aria-controls": listboxId, "aria-activedescendant": activeId.value || undefined, onInput: onInput, onFocus: onFocus, onKeydown: onKeydown, "data-v-741257a1": "" }),
50
+ h('input', { class: "n-ac-input", id: inputId, value: modelValue, placeholder: placeholder, disabled: disabled, readonly: readonly, role: "combobox", "aria-autocomplete": "list", "aria-expanded": isOpen.value, "aria-controls": listboxId, "aria-activedescendant": activeId.value || undefined, onInput: onInput, onFocus: onFocus, onKeydown: onKeydown, "data-v-24d51847": "" }),
51
51
  "\n ",
52
- h('div', { class: "n-ac-actions", "data-v-741257a1": "" }, [
52
+ h('div', { class: "n-ac-actions", "data-v-24d51847": "" }, [
53
53
  "\n ",
54
- (clearable && modelValue) ? h('button', { class: "n-ac-action", type: "button", disabled: disabled || readonly, "aria-label": "Limpiar", onClick: clearValue, "data-v-741257a1": "" }, [
55
- ""
54
+ (clearable && modelValue) ? h('button', { class: "n-ac-action", type: "button", disabled: disabled || readonly, "aria-label": "Clear", onClick: clearValue, "data-v-24d51847": "" }, [
55
+ 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-24d51847": "" }, [
56
+ h('path', { d: "M18 6L6 18", "data-v-24d51847": "" }),
57
+ h('path', { d: "M6 6l12 12", "data-v-24d51847": "" })
58
+ ])
56
59
  ]) : null,
57
- (dropdown) ? h('button', { class: "n-ac-action", type: "button", disabled: disabled || readonly, "aria-label": "Abrir", onClick: openAll, "data-v-741257a1": "" }, [
58
- ""
60
+ (dropdown) ? h('button', { class: "n-ac-action", type: "button", disabled: disabled || readonly, "aria-label": "Open", onClick: openAll, "data-v-24d51847": "" }, [
61
+ 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-24d51847": "" }, [
62
+ h('path', { d: "M6 9l6 6 6-6", "data-v-24d51847": "" })
63
+ ])
59
64
  ]) : null
60
65
  ]),
61
66
  "\n "
62
67
  ]),
63
68
  "\n ",
64
- h(_ntc_Teleport, { to: "body", "data-v-741257a1": "" }, [
69
+ h(_ntc_Teleport, { to: "body", "data-v-24d51847": "" }, [
65
70
  "\n ",
66
- (isOpen.value) ? h('div', { class: ["n-ac-popup", { 'is-top': resolvedPlacement.value === 'top' }], "data-autocomplete-popup": instanceId, style: popupStyle.value, "data-v-741257a1": "" }, [
71
+ (isOpen.value) ? h('div', { class: ["n-ac-popup", { 'is-top': resolvedPlacement.value === 'top' }], "data-autocomplete-popup": instanceId, style: popupStyle.value, "data-v-24d51847": "" }, [
67
72
  "\n ",
68
- (loading) ? h('div', { class: "n-ac-loading", "data-v-741257a1": "" }, [
73
+ (loading) ? h('div', { class: "n-ac-loading", "data-v-24d51847": "" }, [
69
74
  "Loading..."
70
- ]) : (true) ? h('div', { class: "n-ac-list", role: "listbox", id: listboxId, "data-v-741257a1": "" }, [
75
+ ]) : (true) ? h('div', { class: "n-ac-list", role: "listbox", id: listboxId, "data-v-24d51847": "" }, [
71
76
  "\n ",
72
77
  (filteredOptions.value).map((opt, i) =>
73
- h('button', { class: ["n-ac-option", { 'is-focused': i === focusedIndex.value }], key: opt.value, type: "button", role: "option", id: instanceId + '-opt-' + i, "aria-selected": (i === focusedIndex.value).toString(), onMouseenter: ($event) => { focusedIndex.value = i }, onClick: ($event) => { selectOption(opt) }, "data-v-741257a1": "" }, [
78
+ h('button', { class: ["n-ac-option", { 'is-focused': i === focusedIndex.value }], key: opt.value, type: "button", role: "option", id: instanceId + '-opt-' + i, "aria-selected": (i === focusedIndex.value).toString(), onMouseenter: ($event) => { focusedIndex.value = i }, onClick: ($event) => { selectOption(opt) }, "data-v-24d51847": "" }, [
74
79
  opt.label
75
80
  ])
76
81
  ),
77
82
  "\n ",
78
- (filteredOptions.value.length === 0) ? h('div', { class: "n-ac-empty", "data-v-741257a1": "" }, [
83
+ (filteredOptions.value.length === 0) ? h('div', { class: "n-ac-empty", "data-v-24d51847": "" }, [
79
84
  emptyMessage
80
85
  ]) : null
81
86
  ]) : null,
@@ -85,10 +90,10 @@ _sfc_main.render = function(ctx) {
85
90
  "\n "
86
91
  ])
87
92
  }
88
- _sfc_main.__scopeId = 'data-v-741257a1'
93
+ _sfc_main.__scopeId = 'data-v-24d51847'
89
94
  _sfc_main.__hmrId = 'NAutocomplete_nexa'
90
95
 
91
96
  export default _sfc_main
92
97
 
93
- const __style = `.n-ac[data-v-741257a1]{display:flex;flex-direction:column;gap:var(--n-space-2);width:100%;font-family:var(--n-font-sans)}.n-ac-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-ac-input-wrap{position:relative;display:flex;align-items:center;background:var(--n-color-surface);border:1px solid var(--n-color-border);border-radius:var(--n-radius-md);transition:all var(--n-transition-fast)}.n-ac-input-wrap:focus-within{border-color:var(--n-color-primary);box-shadow:0 0 0 3px var(--n-color-primary-light)}.n-ac-input{width:100%;background:transparent;border:none;outline:none;padding:0.75rem 2.75rem 0.75rem 1rem;color:var(--n-color-text);font-size:var(--n-text-base);font-family:inherit}.n-ac-input::placeholder{color:var(--n-color-text-muted)}.n-ac-actions{position:absolute;right:0.5rem;display:flex;align-items:center;gap:0.15rem}.n-ac-action{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}.n-ac-action:hover:not(:disabled){color:var(--n-color-text);background:var(--n-color-glass)}.n-ac-action:disabled{opacity:0.5;cursor:not-allowed}.n-ac-input-wrap.is-disabled{opacity:0.5;cursor:not-allowed;background:var(--n-color-surface-alt)}.n-ac-popup{background:var(--n-color-surface);border:1px solid var(--n-color-border);border-radius:var(--n-radius-md);box-shadow:var(--n-shadow-lg);overflow:hidden;animation:n-ac-in .2s cubic-bezier(0,1,0,1)}.n-ac-popup.is-top{animation:n-ac-in-top .2s cubic-bezier(0,1,0,1)}@keyframes n-ac-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes n-ac-in-top{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.n-ac-loading{padding:var(--n-space-3) var(--n-space-4);color:var(--n-color-text-muted);font-size:var(--n-text-sm)}.n-ac-list{max-height:260px;overflow:auto;display:flex;flex-direction:column}.n-ac-option{text-align:left;padding:0.7rem 1rem;color:var(--n-color-text-secondary);background:transparent;border:none;cursor:pointer;transition:all var(--n-transition-fast)}.n-ac-option:hover,.n-ac-option.is-focused{background:var(--n-color-glass);color:var(--n-color-text)}.n-ac-empty{padding:var(--n-space-4);color:var(--n-color-text-muted);text-align:center;font-size:var(--n-text-sm)}`
94
- injectStyle('data-v-741257a1', __style)
98
+ const __style = `.n-ac[data-v-24d51847]{display:flex;flex-direction:column;gap:var(--n-space-2);width:100%;font-family:var(--n-font-sans)}.n-ac-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-ac-input-wrap{position:relative;display:flex;align-items:center;background:var(--n-color-surface);border:1px solid var(--n-color-border);border-radius:var(--n-radius-md);transition:all var(--n-transition-fast)}.n-ac-input-wrap:focus-within{border-color:var(--n-color-primary);box-shadow:0 0 0 3px var(--n-color-primary-light)}.n-ac-input{width:100%;background:transparent;border:none;outline:none;padding:0.75rem 2.75rem 0.75rem 1rem;color:var(--n-color-text);font-size:var(--n-text-base);font-family:inherit}.n-ac-input::placeholder{color:var(--n-color-text-muted)}.n-ac-actions{position:absolute;right:0.5rem;display:flex;align-items:center;gap:0.15rem}.n-ac-action{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}.n-ac-action:hover:not(:disabled){color:var(--n-color-text);background:var(--n-color-glass)}.n-ac-action:disabled{opacity:0.5;cursor:not-allowed}.n-ac-input-wrap.is-disabled{opacity:0.5;cursor:not-allowed;background:var(--n-color-surface-alt)}.n-ac-popup{background:var(--n-color-surface);border:1px solid var(--n-color-border);border-radius:var(--n-radius-md);box-shadow:var(--n-shadow-lg);overflow:hidden;animation:n-ac-in .2s ease-out}.n-ac-popup.is-top{animation:n-ac-in-top .2s ease-out}@keyframes n-ac-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes n-ac-in-top{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.n-ac-loading{padding:var(--n-space-3) var(--n-space-4);color:var(--n-color-text-muted);font-size:var(--n-text-sm)}.n-ac-list{max-height:260px;overflow:auto;display:flex;flex-direction:column}.n-ac-option{text-align:left;padding:0.7rem 1rem;color:var(--n-color-text-secondary);background:transparent;border:none;cursor:pointer;transition:all var(--n-transition-fast)}.n-ac-option:hover,.n-ac-option.is-focused{background:var(--n-color-glass);color:var(--n-color-text)}.n-ac-empty{padding:var(--n-space-4);color:var(--n-color-text-muted);text-align:center;font-size:var(--n-text-sm)}`
99
+ injectStyle('data-v-24d51847', __style)
@@ -37,8 +37,8 @@ onBeforeUnmount(() => { clearTimeout(completeTimer); close() })
37
37
  <div class="n-ac-input-wrap" :class="{ 'is-disabled': disabled }">
38
38
  <input class="n-ac-input" :id="inputId" :value="modelValue" :placeholder="placeholder" :disabled="disabled" :readonly="readonly" role="combobox" aria-autocomplete="list" :aria-expanded="isOpen.value" :aria-controls="listboxId" :aria-activedescendant="activeId.value || undefined" @input="onInput" @focus="onFocus" @keydown="onKeydown" />
39
39
  <div class="n-ac-actions">
40
- <button v-if="clearable && modelValue" type="button" class="n-ac-action" :disabled="disabled || readonly" aria-label="Limpiar" @click="clearValue">✕</button>
41
- <button v-if="dropdown" type="button" class="n-ac-action" :disabled="disabled || readonly" aria-label="Abrir" @click="openAll">▾</button>
40
+ <button v-if="clearable && modelValue" type="button" class="n-ac-action" :disabled="disabled || readonly" aria-label="Clear" @click="clearValue"><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>
41
+ <button v-if="dropdown" type="button" class="n-ac-action" :disabled="disabled || readonly" aria-label="Open" @click="openAll"><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="M6 9l6 6 6-6"/></svg></button>
42
42
  </div>
43
43
  </div>
44
44
  <Teleport to="body">
@@ -54,5 +54,5 @@ onBeforeUnmount(() => { clearTimeout(completeTimer); close() })
54
54
  </template>
55
55
 
56
56
  <style scoped>
57
- .n-ac{display:flex;flex-direction:column;gap:var(--n-space-2);width:100%;font-family:var(--n-font-sans)}.n-ac-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-ac-input-wrap{position:relative;display:flex;align-items:center;background:var(--n-color-surface);border:1px solid var(--n-color-border);border-radius:var(--n-radius-md);transition:all var(--n-transition-fast)}.n-ac-input-wrap:focus-within{border-color:var(--n-color-primary);box-shadow:0 0 0 3px var(--n-color-primary-light)}.n-ac-input{width:100%;background:transparent;border:none;outline:none;padding:0.75rem 2.75rem 0.75rem 1rem;color:var(--n-color-text);font-size:var(--n-text-base);font-family:inherit}.n-ac-input::placeholder{color:var(--n-color-text-muted)}.n-ac-actions{position:absolute;right:0.5rem;display:flex;align-items:center;gap:0.15rem}.n-ac-action{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}.n-ac-action:hover:not(:disabled){color:var(--n-color-text);background:var(--n-color-glass)}.n-ac-action:disabled{opacity:0.5;cursor:not-allowed}.n-ac-input-wrap.is-disabled{opacity:0.5;cursor:not-allowed;background:var(--n-color-surface-alt)}.n-ac-popup{background:var(--n-color-surface);border:1px solid var(--n-color-border);border-radius:var(--n-radius-md);box-shadow:var(--n-shadow-lg);overflow:hidden;animation:n-ac-in .2s cubic-bezier(0,1,0,1)}.n-ac-popup.is-top{animation:n-ac-in-top .2s cubic-bezier(0,1,0,1)}@keyframes n-ac-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes n-ac-in-top{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.n-ac-loading{padding:var(--n-space-3) var(--n-space-4);color:var(--n-color-text-muted);font-size:var(--n-text-sm)}.n-ac-list{max-height:260px;overflow:auto;display:flex;flex-direction:column}.n-ac-option{text-align:left;padding:0.7rem 1rem;color:var(--n-color-text-secondary);background:transparent;border:none;cursor:pointer;transition:all var(--n-transition-fast)}.n-ac-option:hover,.n-ac-option.is-focused{background:var(--n-color-glass);color:var(--n-color-text)}.n-ac-empty{padding:var(--n-space-4);color:var(--n-color-text-muted);text-align:center;font-size:var(--n-text-sm)}
57
+ .n-ac{display:flex;flex-direction:column;gap:var(--n-space-2);width:100%;font-family:var(--n-font-sans)}.n-ac-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-ac-input-wrap{position:relative;display:flex;align-items:center;background:var(--n-color-surface);border:1px solid var(--n-color-border);border-radius:var(--n-radius-md);transition:all var(--n-transition-fast)}.n-ac-input-wrap:focus-within{border-color:var(--n-color-primary);box-shadow:0 0 0 3px var(--n-color-primary-light)}.n-ac-input{width:100%;background:transparent;border:none;outline:none;padding:0.75rem 2.75rem 0.75rem 1rem;color:var(--n-color-text);font-size:var(--n-text-base);font-family:inherit}.n-ac-input::placeholder{color:var(--n-color-text-muted)}.n-ac-actions{position:absolute;right:0.5rem;display:flex;align-items:center;gap:0.15rem}.n-ac-action{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}.n-ac-action:hover:not(:disabled){color:var(--n-color-text);background:var(--n-color-glass)}.n-ac-action:disabled{opacity:0.5;cursor:not-allowed}.n-ac-input-wrap.is-disabled{opacity:0.5;cursor:not-allowed;background:var(--n-color-surface-alt)}.n-ac-popup{background:var(--n-color-surface);border:1px solid var(--n-color-border);border-radius:var(--n-radius-md);box-shadow:var(--n-shadow-lg);overflow:hidden;animation:n-ac-in .2s ease-out}.n-ac-popup.is-top{animation:n-ac-in-top .2s ease-out}@keyframes n-ac-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes n-ac-in-top{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.n-ac-loading{padding:var(--n-space-3) var(--n-space-4);color:var(--n-color-text-muted);font-size:var(--n-text-sm)}.n-ac-list{max-height:260px;overflow:auto;display:flex;flex-direction:column}.n-ac-option{text-align:left;padding:0.7rem 1rem;color:var(--n-color-text-secondary);background:transparent;border:none;cursor:pointer;transition:all var(--n-transition-fast)}.n-ac-option:hover,.n-ac-option.is-focused{background:var(--n-color-glass);color:var(--n-color-text)}.n-ac-empty{padding:var(--n-space-4);color:var(--n-color-text-muted);text-align:center;font-size:var(--n-text-sm)}
58
58
  </style>
@@ -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-147134',
@@ -1,4 +1,4 @@
1
- import { h, hText, effect, signal, computed, onMounted, onUnmounted, defineComponent, registerComponent, reloadComponent, injectStyle } from 'nexa-framework'
1
+ import { h, hText, effect, defineComponent, registerComponent, reloadComponent, injectStyle } from 'nexa-framework'
2
2
 
3
3
  const _sfc_main = defineComponent({
4
4
  __scopeId: 'data-v-ff3cf3e',
@@ -2,7 +2,7 @@ import { signal, computed, effect, onMounted, onUnmounted, h, hText, defineCompo
2
2
  import { useGestures } from 'nexa-mobile'
3
3
 
4
4
  const _sfc_main = defineComponent({
5
- __scopeId: 'data-v-55f61938',
5
+ __scopeId: 'data-v-3df910b7',
6
6
  __hmrId: 'NBottomSheet_nexa',
7
7
  props: {
8
8
  show: { type: Boolean, default: false },
@@ -61,20 +61,20 @@ const _sfc_main = defineComponent({
61
61
  // Injected render function
62
62
  _sfc_main.render = function(ctx) {
63
63
  let { yOffset, isDragging, currentSnap, gestures, sortedPoints, translateY, overlayOpacity, useGestures, $slots, emit, show, snapPoints, Fragment: _ntc_Fragment, Teleport: _ntc_Teleport } = ctx
64
- return h(_ntc_Teleport, { to: "body", "data-v-55f61938": "" }, [
64
+ return h(_ntc_Teleport, { to: "body", "data-v-3df910b7": "" }, [
65
65
  "\n ",
66
- h('div', { class: ["n-bottom-sheet-root", { 'is-active': show || isDragging.value }], "data-v-55f61938": "" }, [
66
+ h('div', { class: ["n-bottom-sheet-root", { 'is-active': show || isDragging.value }], "data-v-3df910b7": "" }, [
67
67
  "\n ",
68
- h('div', { class: "n-bottom-sheet-overlay", style: { opacity: overlayOpacity.value }, onClick: ($event) => { emit('close') }, "data-v-55f61938": "" }),
68
+ h('div', { class: "n-bottom-sheet-overlay", style: { opacity: overlayOpacity.value }, onClick: ($event) => { emit('close') }, "data-v-3df910b7": "" }),
69
69
  "\n ",
70
70
  h('div', { class: "n-bottom-sheet-container", id: "n-bottom-sheet-content", style: {
71
71
  transform: `translateY(${translateY.value})`,
72
- transition: isDragging.value ? 'none' : 'transform 0.4s cubic-bezier(0.4, 0, 0.2, 1)'
73
- }, "data-v-55f61938": "" }, [
72
+ transition: isDragging.value ? 'none' : 'transform var(--n-transition-slow)'
73
+ }, "data-v-3df910b7": "" }, [
74
74
  "\n ",
75
- h('div', { class: "n-bottom-sheet-handle", "data-v-55f61938": "" }),
75
+ h('div', { class: "n-bottom-sheet-handle", "data-v-3df910b7": "" }),
76
76
  "\n ",
77
- h('div', { class: "n-bottom-sheet-inner", "data-v-55f61938": "" }, [
77
+ h('div', { class: "n-bottom-sheet-inner", "data-v-3df910b7": "" }, [
78
78
  "\n ",
79
79
  ctx.$slots.default ? ctx.$slots.default() : null,
80
80
  "\n "
@@ -86,12 +86,12 @@ _sfc_main.render = function(ctx) {
86
86
  "\n "
87
87
  ])
88
88
  }
89
- _sfc_main.__scopeId = 'data-v-55f61938'
89
+ _sfc_main.__scopeId = 'data-v-3df910b7'
90
90
  _sfc_main.__hmrId = 'NBottomSheet_nexa'
91
91
 
92
92
  export default _sfc_main
93
93
 
94
- const __style = `.n-bottom-sheet-root[data-v-55f61938]{
94
+ const __style = `.n-bottom-sheet-root[data-v-3df910b7]{
95
95
  position: fixed;
96
96
  top: 0;
97
97
  left: 0;
@@ -103,11 +103,11 @@ const __style = `.n-bottom-sheet-root[data-v-55f61938]{
103
103
  align-items: flex-end;
104
104
  }
105
105
 
106
- .n-bottom-sheet-root.is-active[data-v-55f61938]{
106
+ .n-bottom-sheet-root.is-active[data-v-3df910b7]{
107
107
  pointer-events: auto;
108
108
  }
109
109
 
110
- .n-bottom-sheet-overlay[data-v-55f61938]{
110
+ .n-bottom-sheet-overlay[data-v-3df910b7]{
111
111
  position: absolute;
112
112
  top: 0;
113
113
  left: 0;
@@ -118,21 +118,21 @@ const __style = `.n-bottom-sheet-root[data-v-55f61938]{
118
118
  transition: opacity 0.3s ease;
119
119
  }
120
120
 
121
- .n-bottom-sheet-container[data-v-55f61938]{
121
+ .n-bottom-sheet-container[data-v-3df910b7]{
122
122
  position: relative;
123
123
  width: 100%;
124
124
  max-height: 90vh;
125
125
  background: var(--n-color-surface);
126
126
  border-top: 1px solid var(--n-color-border);
127
127
  border-radius: var(--n-radius-2xl) var(--n-radius-2xl) 0 0;
128
- box-shadow: 0 -10px 25px -5px rgba(0, 0, 0, 0.3);
128
+ box-shadow: var(--n-shadow-top-lg);
129
129
  padding-bottom: env(safe-area-inset-bottom, 20px);
130
130
  touch-action: none;
131
131
  display: flex;
132
132
  flex-direction: column;
133
133
  }
134
134
 
135
- .n-bottom-sheet-handle[data-v-55f61938]{
135
+ .n-bottom-sheet-handle[data-v-3df910b7]{
136
136
  width: 40px;
137
137
  height: 4px;
138
138
  background: var(--n-color-surface-hover);
@@ -141,9 +141,9 @@ const __style = `.n-bottom-sheet-root[data-v-55f61938]{
141
141
  flex-shrink: 0;
142
142
  }
143
143
 
144
- .n-bottom-sheet-inner[data-v-55f61938]{
144
+ .n-bottom-sheet-inner[data-v-3df910b7]{
145
145
  padding: var(--n-space-4) var(--n-space-8) var(--n-space-8);
146
146
  overflow-y: auto;
147
147
  flex: 1;
148
148
  }`
149
- injectStyle('data-v-55f61938', __style)
149
+ injectStyle('data-v-3df910b7', __style)
@@ -74,7 +74,7 @@ const overlayOpacity = computed(() => {
74
74
  class="n-bottom-sheet-container"
75
75
  :style="{
76
76
  transform: `translateY(${translateY.value})`,
77
- transition: isDragging.value ? 'none' : 'transform 0.4s cubic-bezier(0.4, 0, 0.2, 1)'
77
+ transition: isDragging.value ? 'none' : 'transform var(--n-transition-slow)'
78
78
  }"
79
79
  >
80
80
  <div class="n-bottom-sheet-handle"></div>
@@ -121,7 +121,7 @@ const overlayOpacity = computed(() => {
121
121
  background: var(--n-color-surface);
122
122
  border-top: 1px solid var(--n-color-border);
123
123
  border-radius: var(--n-radius-2xl) var(--n-radius-2xl) 0 0;
124
- box-shadow: 0 -10px 25px -5px rgba(0, 0, 0, 0.3);
124
+ box-shadow: var(--n-shadow-top-lg);
125
125
  padding-bottom: env(safe-area-inset-bottom, 20px);
126
126
  touch-action: none;
127
127
  display: flex;