@volverjs/ui-vue 0.0.4 → 0.0.5-beta.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 (204) hide show
  1. package/README.md +2 -2
  2. package/auto-imports.d.ts +12 -3
  3. package/bin/icons.cjs +1 -73
  4. package/dist/Volver.d.ts +19 -11
  5. package/dist/components/VvAccordion/VvAccordion.es.js +165 -106
  6. package/dist/components/VvAccordion/VvAccordion.umd.js +1 -1
  7. package/dist/components/VvAccordion/VvAccordion.vue.d.ts +4 -1
  8. package/dist/components/VvAccordion/index.d.ts +8 -3
  9. package/dist/components/VvAccordionGroup/VvAccordionGroup.es.js +264 -164
  10. package/dist/components/VvAccordionGroup/VvAccordionGroup.umd.js +1 -1
  11. package/dist/components/VvAccordionGroup/VvAccordionGroup.vue.d.ts +15 -12
  12. package/dist/components/VvAccordionGroup/index.d.ts +8 -0
  13. package/dist/components/VvAction/VvAction.es.js +266 -98
  14. package/dist/components/VvAction/VvAction.umd.js +1 -1
  15. package/dist/components/VvAction/VvAction.vue.d.ts +12 -12
  16. package/dist/components/VvAction/index.d.ts +2 -2
  17. package/dist/components/VvBadge/VvBadge.es.js +203 -44
  18. package/dist/components/VvBadge/VvBadge.umd.js +1 -1
  19. package/dist/components/VvBadge/VvBadge.vue.d.ts +2 -2
  20. package/dist/components/VvBadge/index.d.ts +1 -1
  21. package/dist/components/VvBreadcrumb/VvBreadcrumb.es.js +237 -75
  22. package/dist/components/VvBreadcrumb/VvBreadcrumb.umd.js +1 -1
  23. package/dist/components/VvBreadcrumb/VvBreadcrumb.vue.d.ts +11 -11
  24. package/dist/components/VvBreadcrumb/index.d.ts +1 -1
  25. package/dist/components/VvButton/VvButton.es.js +636 -360
  26. package/dist/components/VvButton/VvButton.umd.js +1 -1
  27. package/dist/components/VvButton/VvButton.vue.d.ts +18 -18
  28. package/dist/components/VvButton/index.d.ts +13 -13
  29. package/dist/components/VvButtonGroup/VvButtonGroup.es.js +251 -79
  30. package/dist/components/VvButtonGroup/VvButtonGroup.umd.js +1 -1
  31. package/dist/components/VvButtonGroup/VvButtonGroup.vue.d.ts +2 -2
  32. package/dist/components/VvButtonGroup/index.d.ts +1 -1
  33. package/dist/components/VvCard/VvCard.es.js +57 -38
  34. package/dist/components/VvCard/VvCard.umd.js +1 -1
  35. package/dist/components/VvCheckbox/VvCheckbox.es.js +552 -274
  36. package/dist/components/VvCheckbox/VvCheckbox.umd.js +1 -1
  37. package/dist/components/VvCheckbox/VvCheckbox.vue.d.ts +2 -2
  38. package/dist/components/VvCheckbox/index.d.ts +5 -5
  39. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js +651 -340
  40. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.umd.js +1 -1
  41. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.vue.d.ts +7 -7
  42. package/dist/components/VvCheckboxGroup/index.d.ts +3 -3
  43. package/dist/components/VvCombobox/VvCombobox.es.js +1532 -983
  44. package/dist/components/VvCombobox/VvCombobox.umd.js +1 -1
  45. package/dist/components/VvCombobox/VvCombobox.vue.d.ts +125 -51
  46. package/dist/components/VvCombobox/index.d.ts +36 -10
  47. package/dist/components/VvDialog/VvDialog.es.js +377 -141
  48. package/dist/components/VvDialog/VvDialog.umd.js +1 -1
  49. package/dist/components/VvDialog/VvDialog.vue.d.ts +12 -3
  50. package/dist/components/VvDialog/index.d.ts +4 -1
  51. package/dist/components/VvDropdown/VvDropdown.es.js +440 -244
  52. package/dist/components/VvDropdown/VvDropdown.umd.js +1 -1
  53. package/dist/components/VvDropdown/VvDropdown.vue.d.ts +113 -41
  54. package/dist/components/VvDropdown/VvDropdownAction.vue.d.ts +13 -13
  55. package/dist/components/VvDropdown/VvDropdownOption.vue.d.ts +2 -2
  56. package/dist/components/VvDropdown/index.d.ts +35 -11
  57. package/dist/components/VvDropdownAction/VvDropdownAction.es.js +363 -160
  58. package/dist/components/VvDropdownAction/VvDropdownAction.umd.js +1 -1
  59. package/dist/components/VvDropdownItem/VvDropdownItem.es.js +43 -28
  60. package/dist/components/VvDropdownItem/VvDropdownItem.umd.js +1 -1
  61. package/dist/components/VvDropdownOption/VvDropdownOption.es.js +275 -90
  62. package/dist/components/VvDropdownOption/VvDropdownOption.umd.js +1 -1
  63. package/dist/components/VvIcon/VvIcon.es.js +113 -65
  64. package/dist/components/VvIcon/VvIcon.umd.js +1 -1
  65. package/dist/components/VvIcon/VvIcon.vue.d.ts +7 -7
  66. package/dist/components/VvIcon/index.d.ts +2 -2
  67. package/dist/components/VvInputText/VvInputPasswordAction.d.ts +2 -2
  68. package/dist/components/VvInputText/VvInputStepAction.d.ts +1 -1
  69. package/dist/components/VvInputText/VvInputText.es.js +974 -460
  70. package/dist/components/VvInputText/VvInputText.umd.js +1 -1
  71. package/dist/components/VvInputText/VvInputText.vue.d.ts +96 -16
  72. package/dist/components/VvInputText/VvInputTextActions.d.ts +1 -1
  73. package/dist/components/VvInputText/index.d.ts +64 -11
  74. package/dist/components/VvProgress/VvProgress.es.js +206 -45
  75. package/dist/components/VvProgress/VvProgress.umd.js +1 -1
  76. package/dist/components/VvProgress/VvProgress.vue.d.ts +2 -2
  77. package/dist/components/VvProgress/index.d.ts +1 -1
  78. package/dist/components/VvRadio/VvRadio.es.js +489 -238
  79. package/dist/components/VvRadio/VvRadio.umd.js +1 -1
  80. package/dist/components/VvRadio/VvRadio.vue.d.ts +2 -2
  81. package/dist/components/VvRadio/index.d.ts +5 -5
  82. package/dist/components/VvRadioGroup/VvRadioGroup.es.js +588 -304
  83. package/dist/components/VvRadioGroup/VvRadioGroup.umd.js +1 -1
  84. package/dist/components/VvRadioGroup/VvRadioGroup.vue.d.ts +7 -7
  85. package/dist/components/VvRadioGroup/index.d.ts +3 -3
  86. package/dist/components/VvSelect/VvSelect.es.js +621 -324
  87. package/dist/components/VvSelect/VvSelect.umd.js +1 -1
  88. package/dist/components/VvSelect/VvSelect.vue.d.ts +13 -13
  89. package/dist/components/VvSelect/index.d.ts +3 -3
  90. package/dist/components/VvTextarea/VvTextarea.es.js +664 -353
  91. package/dist/components/VvTextarea/VvTextarea.umd.js +1 -1
  92. package/dist/components/VvTextarea/VvTextarea.vue.d.ts +10 -10
  93. package/dist/components/VvTextarea/index.d.ts +2 -2
  94. package/dist/components/VvTooltip/VvTooltip.es.js +205 -47
  95. package/dist/components/VvTooltip/VvTooltip.umd.js +1 -1
  96. package/dist/components/VvTooltip/VvTooltip.vue.d.ts +7 -7
  97. package/dist/components/VvTooltip/index.d.ts +2 -2
  98. package/dist/components/index.es.js +3508 -2231
  99. package/dist/components/index.umd.js +1 -1
  100. package/dist/composables/dropdown/useInjectDropdown.d.ts +1 -1
  101. package/dist/composables/dropdown/useProvideDropdown.d.ts +3 -3
  102. package/dist/composables/group/useInjectedGroupState.d.ts +2 -2
  103. package/dist/composables/group/useProvideGroupState.d.ts +1 -1
  104. package/dist/composables/useComponentFocus.d.ts +1 -1
  105. package/dist/composables/useComponentIcon.d.ts +7 -7
  106. package/dist/composables/useDebouncedInput.d.ts +4 -1
  107. package/dist/composables/useDefaults.d.ts +2 -0
  108. package/dist/composables/useModifiers.d.ts +1 -1
  109. package/dist/composables/useOptions.d.ts +2 -2
  110. package/dist/composables/useTextCount.d.ts +3 -3
  111. package/dist/composables/useUniqueId.d.ts +1 -1
  112. package/dist/composables/useVolver.d.ts +1 -1
  113. package/dist/directives/index.es.js +215 -55
  114. package/dist/directives/index.umd.js +1 -1
  115. package/dist/directives/v-tooltip.es.js +212 -53
  116. package/dist/directives/v-tooltip.umd.js +1 -1
  117. package/dist/icons.es.js +38 -23
  118. package/dist/icons.umd.js +1 -1
  119. package/dist/index.d.ts +0 -1
  120. package/dist/index.es.js +112 -3607
  121. package/dist/index.umd.js +1 -1
  122. package/dist/props/index.d.ts +40 -16
  123. package/dist/resolvers/unplugin.d.ts +7 -1
  124. package/dist/resolvers/unplugin.es.js +77 -37
  125. package/dist/resolvers/unplugin.umd.js +1 -1
  126. package/dist/stories/InputText/InputText.settings.d.ts +53 -0
  127. package/dist/stories/argTypes.d.ts +1 -1
  128. package/package.json +114 -36
  129. package/src/Volver.ts +49 -22
  130. package/src/assets/icons/detailed.json +1 -1
  131. package/src/assets/icons/normal.json +1 -1
  132. package/src/assets/icons/simple.json +1 -1
  133. package/src/components/VvAccordion/VvAccordion.vue +19 -22
  134. package/src/components/VvAccordion/index.ts +12 -4
  135. package/src/components/VvAccordionGroup/VvAccordionGroup.vue +19 -10
  136. package/src/components/VvAccordionGroup/index.ts +8 -0
  137. package/src/components/VvAction/VvAction.vue +7 -7
  138. package/src/components/VvAction/index.ts +1 -1
  139. package/src/components/VvBadge/VvBadge.vue +2 -2
  140. package/src/components/VvBadge/index.ts +1 -1
  141. package/src/components/VvBreadcrumb/VvBreadcrumb.vue +3 -3
  142. package/src/components/VvButton/VvButton.vue +11 -11
  143. package/src/components/VvButton/index.ts +10 -9
  144. package/src/components/VvButtonGroup/VvButtonGroup.vue +4 -7
  145. package/src/components/VvButtonGroup/index.ts +1 -1
  146. package/src/components/VvCard/VvCard.vue +2 -2
  147. package/src/components/VvCheckbox/VvCheckbox.vue +3 -7
  148. package/src/components/VvCheckbox/index.ts +11 -7
  149. package/src/components/VvCheckboxGroup/VvCheckboxGroup.vue +7 -10
  150. package/src/components/VvCheckboxGroup/index.ts +1 -1
  151. package/src/components/VvCombobox/VvCombobox.vue +39 -23
  152. package/src/components/VvCombobox/index.ts +1 -1
  153. package/src/components/VvDialog/VvDialog.vue +28 -11
  154. package/src/components/VvDialog/index.ts +5 -2
  155. package/src/components/VvDropdown/VvDropdown.vue +6 -5
  156. package/src/components/VvDropdown/VvDropdownAction.vue +7 -5
  157. package/src/components/VvDropdown/VvDropdownOption.vue +17 -10
  158. package/src/components/VvDropdown/index.ts +3 -3
  159. package/src/components/VvIcon/VvIcon.vue +3 -3
  160. package/src/components/VvIcon/index.ts +3 -3
  161. package/src/components/VvInputText/VvInputClearAction.ts +2 -2
  162. package/src/components/VvInputText/VvInputPasswordAction.ts +3 -4
  163. package/src/components/VvInputText/VvInputStepAction.ts +3 -2
  164. package/src/components/VvInputText/VvInputText.vue +128 -35
  165. package/src/components/VvInputText/VvInputTextActions.ts +5 -8
  166. package/src/components/VvInputText/index.ts +62 -1
  167. package/src/components/VvProgress/VvProgress.vue +2 -2
  168. package/src/components/VvProgress/index.ts +1 -1
  169. package/src/components/VvRadio/VvRadio.vue +3 -7
  170. package/src/components/VvRadio/index.ts +11 -7
  171. package/src/components/VvRadioGroup/VvRadioGroup.vue +7 -10
  172. package/src/components/VvRadioGroup/index.ts +1 -1
  173. package/src/components/VvSelect/VvSelect.vue +4 -4
  174. package/src/components/VvSelect/index.ts +1 -1
  175. package/src/components/VvTextarea/VvTextarea.vue +4 -4
  176. package/src/components/VvTextarea/index.ts +1 -1
  177. package/src/components/VvTooltip/VvTooltip.vue +2 -2
  178. package/src/components/VvTooltip/index.ts +3 -3
  179. package/src/composables/dropdown/useInjectDropdown.ts +2 -2
  180. package/src/composables/dropdown/useProvideDropdown.ts +2 -2
  181. package/src/composables/group/useInjectedGroupState.ts +1 -1
  182. package/src/composables/group/useProvideGroupState.ts +1 -1
  183. package/src/composables/useComponentIcon.ts +1 -1
  184. package/src/composables/useDebouncedInput.ts +10 -3
  185. package/src/composables/useDefaults.ts +89 -0
  186. package/src/composables/useModifiers.ts +4 -2
  187. package/src/composables/useOptions.ts +1 -1
  188. package/src/composables/useVolver.ts +2 -2
  189. package/src/directives/index.ts +1 -1
  190. package/src/directives/v-tooltip.ts +2 -2
  191. package/src/index.ts +0 -2
  192. package/src/props/index.ts +8 -8
  193. package/src/resolvers/unplugin.ts +15 -1
  194. package/src/stories/Accordion/Accordion.stories.mdx +8 -2
  195. package/src/stories/Accordion/Accordion.test.ts +21 -15
  196. package/src/stories/Accordion/AccordionSlots.stories.mdx +8 -8
  197. package/src/stories/AccordionGroup/AccordionGroup.stories.mdx +17 -1
  198. package/src/stories/AccordionGroup/AccordionGroup.test.ts +18 -12
  199. package/src/stories/AccordionGroup/AccordionGroupSlots.stories.mdx +1 -1
  200. package/src/stories/InputText/InputText.settings.ts +53 -0
  201. package/src/stories/InputText/InputText.stories.mdx +40 -0
  202. package/src/stories/InputText/InputText.test.ts +5 -2
  203. package/src/stories/argTypes.ts +2 -2
  204. package/src/types/group.d.ts +5 -0
@@ -1,61 +1,89 @@
1
- import { unref as s, toRefs as U, computed as l, h as y, inject as Re, defineComponent as L, ref as j, openBlock as g, createBlock as P, mergeProps as $, createCommentVNode as O, watch as ve, useSlots as xe, createElementBlock as H, normalizeClass as Le, toDisplayString as ue, createElementVNode as Y, renderSlot as J, normalizeProps as G, guardReactiveProps as Q, withDirectives as Ne, isRef as Ve, vModelDynamic as ke, createTextVNode as Me, createVNode as $e } from "vue";
2
- import { toReactive as Ue, useFocus as je, useElementVisibility as We } from "@vueuse/core";
3
- import { iconExists as k, Icon as Fe, addIcon as qe } from "@iconify/vue";
4
- import { nanoid as ze } from "nanoid";
5
- function ce(e, t) {
6
- if (e && Object.keys(e).length && t) {
7
- if (t.indexOf(".") === -1)
8
- return e[t];
9
- {
10
- const n = t.split(".");
11
- let a = e;
12
- for (let o = 0, p = n.length; o < p; ++o) {
13
- if (e == null)
1
+ import { unref, toRefs, computed, h, inject, defineComponent, ref, openBlock, createBlock, mergeProps, createCommentVNode, watch, useSlots, createElementBlock, normalizeClass, toDisplayString, createElementVNode, renderSlot, normalizeProps, guardReactiveProps, withModifiers, withDirectives, isRef, vModelDynamic, createTextVNode, createVNode } from "vue";
2
+ import { Mask } from "maska";
3
+ import { toReactive, useFocus, useElementVisibility } from "@vueuse/core";
4
+ import { iconExists, Icon, addIcon } from "@iconify/vue";
5
+ import { nanoid } from "nanoid";
6
+ function resolveFieldData(data, field) {
7
+ if (data && Object.keys(data).length && field) {
8
+ if (field.indexOf(".") === -1) {
9
+ return data[field];
10
+ } else {
11
+ const fields = field.split(".");
12
+ let value = data;
13
+ for (let i = 0, len = fields.length; i < len; ++i) {
14
+ if (data == null) {
14
15
  return null;
15
- a = a[n[o]];
16
+ }
17
+ value = value[fields[i]];
16
18
  }
17
- return a;
19
+ return value;
18
20
  }
19
- } else
21
+ } else {
20
22
  return null;
23
+ }
21
24
  }
22
- function R(e) {
23
- return ((t) => t == null || t === "" || Array.isArray(t) && t.length === 0 || !(t instanceof Date) && typeof t == "object" && Object.keys(t).length === 0)(s(e));
25
+ function isEmpty(value) {
26
+ return ((value2) => value2 === null || value2 === void 0 || value2 === "" || Array.isArray(value2) && value2.length === 0 || !(value2 instanceof Date) && typeof value2 === "object" && Object.keys(value2).length === 0)(unref(value));
24
27
  }
25
- function Ke(e) {
26
- return typeof e == "string" || e instanceof String;
28
+ function isString(value) {
29
+ return typeof value === "string" || value instanceof String;
27
30
  }
28
- function M(e) {
29
- return Array.isArray(e) ? e.filter((t) => Ke(t)).join(" ") : e;
31
+ function joinLines(errors) {
32
+ if (Array.isArray(errors)) {
33
+ return errors.filter((e) => isString(e)).join(" ");
34
+ }
35
+ return errors;
30
36
  }
31
- function Xe(e, t) {
37
+ function HintSlotFactory(parentProps, parentSlots) {
38
+ const {
39
+ invalid: invalidSlot,
40
+ valid: validSlot,
41
+ hint: hintSlot,
42
+ loading: loadingSlot
43
+ } = parentSlots;
32
44
  const {
33
- invalid: n,
34
- valid: a,
35
- hint: o,
36
- loading: p
37
- } = t, {
38
- hintLabel: d,
39
- modelValue: A,
40
- valid: w,
41
- validLabel: m,
42
- invalid: i,
43
- invalidLabel: u,
44
- ...S
45
- } = U(e), v = ce(S, "loading"), b = ce(S, "loadingLabel"), E = l(() => i.value ? !!(i.value && n || u != null && u.value && Array.isArray(u.value) && u.value.length > 0 || u != null && u.value && !R(u)) : !1), N = l(
46
- () => !!(d && d.value || o)
47
- ), h = l(
48
- () => !!(m && m.value || a)
49
- ), C = l(
50
- () => !!(v != null && v.value && p || v != null && v.value && (b != null && b.value))
51
- ), W = l(
52
- () => N.value || h.value || E.value || C.value
45
+ hintLabel,
46
+ modelValue,
47
+ valid,
48
+ validLabel,
49
+ invalid,
50
+ invalidLabel,
51
+ ...otherProps
52
+ } = toRefs(parentProps);
53
+ const loading = resolveFieldData(otherProps, "loading");
54
+ const loadingLabel = resolveFieldData(otherProps, "loadingLabel");
55
+ const hasInvalid = computed(() => {
56
+ if (!invalid.value) {
57
+ return false;
58
+ }
59
+ if (invalid.value && invalidSlot) {
60
+ return true;
61
+ }
62
+ if ((invalidLabel == null ? void 0 : invalidLabel.value) && Array.isArray(invalidLabel.value) && invalidLabel.value.length > 0) {
63
+ return true;
64
+ }
65
+ if ((invalidLabel == null ? void 0 : invalidLabel.value) && !isEmpty(invalidLabel)) {
66
+ return true;
67
+ }
68
+ return false;
69
+ });
70
+ const hasHint = computed(
71
+ () => !!(hintLabel && hintLabel.value || hintSlot)
72
+ );
73
+ const hasValid = computed(
74
+ () => !!(validLabel && validLabel.value || validSlot)
75
+ );
76
+ const hasLoading = computed(
77
+ () => !!((loading == null ? void 0 : loading.value) && loadingSlot || (loading == null ? void 0 : loading.value) && (loadingLabel == null ? void 0 : loadingLabel.value))
78
+ );
79
+ const isVisible = computed(
80
+ () => hasHint.value || hasValid.value || hasInvalid.value || hasLoading.value
53
81
  );
54
82
  return {
55
- hasInvalid: E,
56
- hasHint: N,
57
- hasValid: h,
58
- hasLoading: C,
83
+ hasInvalid,
84
+ hasHint,
85
+ hasValid,
86
+ hasLoading,
59
87
  HintSlot: {
60
88
  name: "HintSlot",
61
89
  props: {
@@ -64,42 +92,50 @@ function Xe(e, t) {
64
92
  default: () => ({})
65
93
  }
66
94
  },
67
- setup(B) {
68
- const V = l(() => {
69
- const D = Ue({
70
- hintLabel: d,
71
- modelValue: A,
72
- valid: w,
73
- validLabel: m,
74
- invalid: i,
75
- invalidLabel: u,
76
- loading: v,
77
- loadingLabel: b,
78
- ...B.params
95
+ setup(props) {
96
+ const hintContent = computed(() => {
97
+ const slotProps = toReactive({
98
+ hintLabel,
99
+ modelValue,
100
+ valid,
101
+ validLabel,
102
+ invalid,
103
+ invalidLabel,
104
+ loading,
105
+ loadingLabel,
106
+ ...props.params
79
107
  });
80
- return i != null && i.value ? (n == null ? void 0 : n(D)) || M(u == null ? void 0 : u.value) || (d == null ? void 0 : d.value) : w != null && w.value ? (a == null ? void 0 : a(D)) || M(m == null ? void 0 : m.value) || (d == null ? void 0 : d.value) : v != null && v.value ? (p == null ? void 0 : p(D)) || M(b == null ? void 0 : b.value) || (d == null ? void 0 : d.value) : (o == null ? void 0 : o(D)) || M(d == null ? void 0 : d.value) || (d == null ? void 0 : d.value);
108
+ if (invalid == null ? void 0 : invalid.value) {
109
+ return (invalidSlot == null ? void 0 : invalidSlot(slotProps)) || joinLines(invalidLabel == null ? void 0 : invalidLabel.value) || (hintLabel == null ? void 0 : hintLabel.value);
110
+ }
111
+ if (valid == null ? void 0 : valid.value)
112
+ return (validSlot == null ? void 0 : validSlot(slotProps)) || joinLines(validLabel == null ? void 0 : validLabel.value) || (hintLabel == null ? void 0 : hintLabel.value);
113
+ if (loading == null ? void 0 : loading.value)
114
+ return (loadingSlot == null ? void 0 : loadingSlot(slotProps)) || joinLines(loadingLabel == null ? void 0 : loadingLabel.value) || (hintLabel == null ? void 0 : hintLabel.value);
115
+ return (hintSlot == null ? void 0 : hintSlot(slotProps)) || joinLines(hintLabel == null ? void 0 : hintLabel.value) || (hintLabel == null ? void 0 : hintLabel.value);
81
116
  });
82
117
  return {
83
- isVisible: W,
84
- hasInvalid: E,
85
- hasValid: h,
86
- hintContent: V
118
+ isVisible,
119
+ hasInvalid,
120
+ hasValid,
121
+ hintContent
87
122
  };
88
123
  },
89
124
  render() {
90
- if (this.isVisible)
91
- return y(
125
+ if (this.isVisible) {
126
+ return h(
92
127
  "small",
93
128
  {
94
129
  role: this.hasInvalid ? "alert" : this.hasValid ? "status" : void 0
95
130
  },
96
131
  this.hintContent
97
132
  );
133
+ }
98
134
  }
99
135
  }
100
136
  };
101
137
  }
102
- const Ye = {
138
+ const VvIconProps = {
103
139
  /**
104
140
  * Color
105
141
  */
@@ -123,7 +159,7 @@ const Ye = {
123
159
  */
124
160
  name: {
125
161
  type: String,
126
- required: !0
162
+ required: true
127
163
  },
128
164
  /**
129
165
  * By default 'vv'
@@ -193,77 +229,160 @@ const Ye = {
193
229
  type: [String, Array]
194
230
  }
195
231
  };
196
- var T = /* @__PURE__ */ ((e) => (e.left = "left", e.right = "right", e.top = "top", e.bottom = "bottom", e))(T || {}), fe = /* @__PURE__ */ ((e) => (e.topStart = "top-start", e.topEnd = "top-end", e.bottomStart = "bottom-start", e.bottomEnd = "bottom-end", e.leftStart = "left-start", e.leftEnd = "left-end", e.rightStart = "right-start", e.rightEnd = "right-end", e))(fe || {}), x = /* @__PURE__ */ ((e) => (e.before = "before", e.after = "after", e))(x || {}), te = /* @__PURE__ */ ((e) => (e.button = "button", e.submit = "submit", e.reset = "reset", e))(te || {}), me = /* @__PURE__ */ ((e) => (e._blank = "_blank", e._self = "_self", e._parent = "_parent", e._top = "_top", e))(me || {});
197
- const Je = Symbol.for("volver");
198
- function Ge() {
199
- return Re(Je);
232
+ var Side = /* @__PURE__ */ ((Side2) => {
233
+ Side2["left"] = "left";
234
+ Side2["right"] = "right";
235
+ Side2["top"] = "top";
236
+ Side2["bottom"] = "bottom";
237
+ return Side2;
238
+ })(Side || {});
239
+ var Placement = /* @__PURE__ */ ((Placement2) => {
240
+ Placement2["topStart"] = "top-start";
241
+ Placement2["topEnd"] = "top-end";
242
+ Placement2["bottomStart"] = "bottom-start";
243
+ Placement2["bottomEnd"] = "bottom-end";
244
+ Placement2["leftStart"] = "left-start";
245
+ Placement2["leftEnd"] = "left-end";
246
+ Placement2["rightStart"] = "right-start";
247
+ Placement2["rightEnd"] = "right-end";
248
+ return Placement2;
249
+ })(Placement || {});
250
+ var Position = /* @__PURE__ */ ((Position2) => {
251
+ Position2["before"] = "before";
252
+ Position2["after"] = "after";
253
+ return Position2;
254
+ })(Position || {});
255
+ var ButtonType = /* @__PURE__ */ ((ButtonType2) => {
256
+ ButtonType2["button"] = "button";
257
+ ButtonType2["submit"] = "submit";
258
+ ButtonType2["reset"] = "reset";
259
+ return ButtonType2;
260
+ })(ButtonType || {});
261
+ var AnchorTarget = /* @__PURE__ */ ((AnchorTarget2) => {
262
+ AnchorTarget2["_blank"] = "_blank";
263
+ AnchorTarget2["_self"] = "_self";
264
+ AnchorTarget2["_parent"] = "_parent";
265
+ AnchorTarget2["_top"] = "_top";
266
+ return AnchorTarget2;
267
+ })(AnchorTarget || {});
268
+ const INJECTION_KEY_VOLVER = Symbol.for("volver");
269
+ function useVolver() {
270
+ return inject(INJECTION_KEY_VOLVER);
200
271
  }
201
- function be(e, t, n) {
202
- return l(() => {
203
- const a = {
204
- [e]: !0
205
- }, o = typeof (t == null ? void 0 : t.value) == "string" ? t.value.split(" ") : t == null ? void 0 : t.value;
206
- return o && Array.isArray(o) && o.forEach((p) => {
207
- a[`${e}--${p}`] = !0;
208
- }), n && Object.keys(n.value).forEach((p) => {
209
- a[`${e}--${p}`] = s(n.value[p]);
210
- }), a;
272
+ function useModifiers(prefix, modifiers, others) {
273
+ return computed(() => {
274
+ const toReturn = {
275
+ [prefix]: true
276
+ };
277
+ const modifiersArray = typeof (modifiers == null ? void 0 : modifiers.value) === "string" ? modifiers.value.split(" ") : modifiers == null ? void 0 : modifiers.value;
278
+ if (modifiersArray) {
279
+ if (Array.isArray(modifiersArray)) {
280
+ modifiersArray.forEach((modifier) => {
281
+ if (modifier) {
282
+ toReturn[`${prefix}--${modifier}`] = true;
283
+ }
284
+ });
285
+ }
286
+ }
287
+ if (others) {
288
+ Object.keys(others.value).forEach((key) => {
289
+ toReturn[`${prefix}--${key}`] = unref(others.value[key]);
290
+ });
291
+ }
292
+ return toReturn;
211
293
  });
212
294
  }
213
- const Qe = {
295
+ const __default__$1 = {
214
296
  name: "VvIcon"
215
- }, _ = /* @__PURE__ */ L({
216
- ...Qe,
217
- props: Ye,
218
- setup(e) {
219
- const t = e, n = j(!0), a = Ge(), { modifiers: o } = U(t), p = be("vv-icon", o), d = l(() => t.provider || (a == null ? void 0 : a.provider)), A = l(() => {
220
- const i = t.name ?? "", u = `@${d.value}:${t.prefix}:${t.name}`;
221
- return k(i) ? i : k(u) ? u : (a == null ? void 0 : a.iconsCollections.find(
222
- (S) => {
223
- const v = `@${d.value}:${S.prefix}:${i}`;
224
- if (k(v))
225
- return v;
226
- }
227
- )) || i;
297
+ };
298
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
299
+ ...__default__$1,
300
+ props: VvIconProps,
301
+ setup(__props) {
302
+ const props = __props;
303
+ const show = ref(true);
304
+ const volver = useVolver();
305
+ const { modifiers } = toRefs(props);
306
+ const bemCssClasses = useModifiers("vv-icon", modifiers);
307
+ const provider = computed(() => {
308
+ return props.provider || (volver == null ? void 0 : volver.iconsProvider);
309
+ });
310
+ const icon = computed(() => {
311
+ const _name = props.name ?? "";
312
+ const iconName = `@${provider.value}:${props.prefix}:${props.name}`;
313
+ if (iconExists(_name)) {
314
+ return _name;
315
+ } else if (iconExists(iconName)) {
316
+ return iconName;
317
+ } else {
318
+ return (volver == null ? void 0 : volver.iconsCollections.find(
319
+ (iconsCollection) => {
320
+ const icon2 = `@${provider.value}:${iconsCollection.prefix}:${_name}`;
321
+ if (iconExists(icon2)) {
322
+ return icon2;
323
+ }
324
+ }
325
+ )) || _name;
326
+ }
228
327
  });
229
- function w(i) {
230
- let u = null;
231
- if (typeof window > "u") {
232
- const { JSDOM: E } = require("jsdom");
233
- u = new E().window;
328
+ function getSvgContent(svg) {
329
+ let dom = null;
330
+ if (typeof window === "undefined") {
331
+ const { JSDOM } = require("jsdom");
332
+ dom = new JSDOM().window;
234
333
  }
235
- return (u ? new u.DOMParser() : new window.DOMParser()).parseFromString(i, "text/html").querySelector("svg");
334
+ const domParser = dom ? new dom.DOMParser() : new window.DOMParser();
335
+ const svgDomString = domParser.parseFromString(svg, "text/html");
336
+ const svgEl = svgDomString.querySelector("svg");
337
+ return svgEl;
236
338
  }
237
- function m(i) {
238
- const u = w(i), S = (u == null ? void 0 : u.innerHTML.trim()) || "";
239
- u && S && qe(`@${d.value}:${t.prefix}:${t.name}`, {
240
- body: S,
241
- // Set height and width from svg content
242
- height: u.viewBox.baseVal.height,
243
- width: u.viewBox.baseVal.width
244
- });
339
+ function addIconFromSvg(svg) {
340
+ const svgContentEl = getSvgContent(svg);
341
+ const svgContent = (svgContentEl == null ? void 0 : svgContentEl.innerHTML.trim()) || "";
342
+ if (svgContentEl && svgContent) {
343
+ addIcon(`@${provider.value}:${props.prefix}:${props.name}`, {
344
+ body: svgContent,
345
+ // Set height and width from svg content
346
+ height: svgContentEl.viewBox.baseVal.height,
347
+ width: svgContentEl.viewBox.baseVal.width
348
+ });
349
+ }
350
+ }
351
+ if (volver) {
352
+ if (props.src && !iconExists(`@${provider.value}:${props.prefix}:${props.name}`)) {
353
+ show.value = false;
354
+ volver.fetchIcon(props.src).then((svg) => {
355
+ if (svg) {
356
+ addIconFromSvg(svg);
357
+ show.value = true;
358
+ }
359
+ }).catch((e) => {
360
+ throw new Error(`During fetch icon: ${e == null ? void 0 : e.message}`);
361
+ });
362
+ } else if (props.svg) {
363
+ addIconFromSvg(props.svg);
364
+ }
245
365
  }
246
- return a && (t.src && !k(`@${d.value}:${t.prefix}:${t.name}`) ? (n.value = !1, a.fetchIcon(t.src).then((i) => {
247
- i && (m(i), n.value = !0);
248
- }).catch((i) => {
249
- throw new Error(`During fetch icon: ${i == null ? void 0 : i.message}`);
250
- })) : t.svg && m(t.svg)), (i, u) => s(n) ? (g(), P(s(Fe), $({
251
- key: 0,
252
- class: s(p)
253
- }, {
254
- inline: i.inline,
255
- width: i.width,
256
- height: i.height,
257
- horizontalFlip: i.horizontalFlip,
258
- verticalFlip: i.verticalFlip,
259
- flip: i.flip,
260
- rotate: i.rotate,
261
- color: i.color,
262
- onLoad: i.onLoad,
263
- icon: s(A)
264
- }), null, 16, ["class"])) : O("", !0);
366
+ return (_ctx, _cache) => {
367
+ return unref(show) ? (openBlock(), createBlock(unref(Icon), mergeProps({
368
+ key: 0,
369
+ class: unref(bemCssClasses)
370
+ }, {
371
+ inline: _ctx.inline,
372
+ width: _ctx.width,
373
+ height: _ctx.height,
374
+ horizontalFlip: _ctx.horizontalFlip,
375
+ verticalFlip: _ctx.verticalFlip,
376
+ flip: _ctx.flip,
377
+ rotate: _ctx.rotate,
378
+ color: _ctx.color,
379
+ onLoad: _ctx.onLoad,
380
+ icon: unref(icon)
381
+ }), null, 16, ["class"])) : createCommentVNode("", true);
382
+ };
265
383
  }
266
- }), Ze = {
384
+ });
385
+ const LinkProps = {
267
386
  /**
268
387
  * The router-link/nuxt-link property, if it is defined the button is rendered as a ruouter-link or nuxt-link.
269
388
  * @see Documentation of [router-link](https://router.vuejs.org/api/#router-link) and [nuxt-link](https://nuxtjs.org/api/components-nuxt-link/)
@@ -280,7 +399,7 @@ const Qe = {
280
399
  */
281
400
  target: {
282
401
  type: String,
283
- validator: (e) => Object.values(me).includes(e)
402
+ validator: (value) => Object.values(AnchorTarget).includes(value)
284
403
  },
285
404
  /**
286
405
  * Anchor rel
@@ -289,7 +408,8 @@ const Qe = {
289
408
  type: String,
290
409
  default: "noopener noreferrer"
291
410
  }
292
- }, et = {
411
+ };
412
+ const ValidProps = {
293
413
  /**
294
414
  * Valid status
295
415
  */
@@ -298,7 +418,8 @@ const Qe = {
298
418
  * Valid label
299
419
  */
300
420
  validLabel: [String, Array]
301
- }, tt = {
421
+ };
422
+ const InvalidProps = {
302
423
  /**
303
424
  * Invalid status
304
425
  */
@@ -307,7 +428,8 @@ const Qe = {
307
428
  * Invalid label
308
429
  */
309
430
  invalidLabel: [String, Array]
310
- }, nt = {
431
+ };
432
+ const LoadingProps = {
311
433
  /**
312
434
  * Loading status
313
435
  */
@@ -319,53 +441,63 @@ const Qe = {
319
441
  type: String,
320
442
  default: "Loading..."
321
443
  }
322
- }, Se = {
444
+ };
445
+ const DisabledProps = {
323
446
  /**
324
447
  * Whether the form control is disabled
325
448
  */
326
449
  disabled: Boolean
327
- }, at = {
450
+ };
451
+ const ActiveProps = {
328
452
  /**
329
453
  * Whether the item is active
330
454
  */
331
455
  active: Boolean
332
- }, rt = {
456
+ };
457
+ const PressedProps = {
333
458
  /**
334
459
  * Whether the item is pressed
335
460
  */
336
461
  pressed: Boolean
337
- }, he = {
462
+ };
463
+ const LabelProps = {
338
464
  /**
339
465
  * The item label
340
466
  */
341
467
  label: [String, Number]
342
- }, lt = {
468
+ };
469
+ const ReadonlyProps = {
343
470
  /**
344
471
  * The value is not editable
345
472
  */
346
473
  readonly: Boolean
347
- }, ot = {
474
+ };
475
+ const ModifiersProps = {
348
476
  /**
349
477
  * Component BEM modifiers
350
478
  */
351
479
  modifiers: [String, Array]
352
- }, st = {
480
+ };
481
+ const HintProps = {
353
482
  hintLabel: { type: String, default: "" }
354
- }, it = {
483
+ };
484
+ const CountProps = {
355
485
  /**
356
486
  * Show character limit
357
487
  */
358
488
  count: {
359
489
  type: [Boolean, String],
360
- default: !1,
361
- validator: (e) => [!0, !1, "limit", "countdown"].includes(e)
490
+ default: false,
491
+ validator: (value) => [true, false, "limit", "countdown"].includes(value)
362
492
  }
363
- }, ut = {
493
+ };
494
+ const DebounceProps = {
364
495
  /**
365
496
  * Milliseconds to wait before emitting the input event
366
497
  */
367
498
  debounce: [Number, String]
368
- }, ct = {
499
+ };
500
+ const IconProps = {
369
501
  /**
370
502
  * VvIcon name or props
371
503
  * @see VVIcon
@@ -376,65 +508,156 @@ const Qe = {
376
508
  */
377
509
  iconPosition: {
378
510
  type: String,
379
- default: x.before,
380
- validation: (e) => Object.values(x).includes(e)
511
+ default: Position.before,
512
+ validation: (value) => Object.values(Position).includes(value)
381
513
  }
382
- }, dt = {
514
+ };
515
+ const TabindexProps = {
383
516
  /**
384
517
  * Global attribute tabindex
385
518
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex
386
519
  */
387
520
  tabindex: { type: [String, Number], default: 0 }
388
- }, pt = {
521
+ };
522
+ const FloatingLabelProps = {
389
523
  /**
390
524
  * If true the label will be floating
391
525
  */
392
526
  floating: Boolean
393
- }, vt = {
527
+ };
528
+ const IdProps = {
394
529
  /**
395
530
  * Global attribute id
396
531
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id
397
532
  */
398
533
  id: [String, Number]
399
534
  };
400
- T.bottom;
401
- const ft = {
402
- ...vt,
535
+ ({
536
+ /**
537
+ * Dropdown placement
538
+ */
539
+ placement: {
540
+ type: String,
541
+ default: Side.bottom,
542
+ validator: (value) => {
543
+ return Object.values(Side).includes(value) || Object.values(Placement).includes(value);
544
+ }
545
+ },
546
+ /**
547
+ * Dropdown show / hide transition name
548
+ */
549
+ transitionName: {
550
+ type: String
551
+ },
552
+ /**
553
+ * Offset of the dropdown from the trigger
554
+ * @see https://floating-ui.com/docs/offset
555
+ */
556
+ offset: {
557
+ type: [Number, String, Object],
558
+ default: 0
559
+ },
560
+ /**
561
+ * Move dropdown to the side if there is no space in the default position
562
+ * @see https://floating-ui.com/docs/shift
563
+ */
564
+ shift: {
565
+ type: [Boolean, Object],
566
+ default: false
567
+ },
568
+ /**
569
+ * Flip dropdown position if there is no space in the default position
570
+ * @see https://floating-ui.com/docs/flip
571
+ */
572
+ flip: {
573
+ type: [Boolean, Object],
574
+ default: true
575
+ },
576
+ /**
577
+ * Size of the dropdown
578
+ * @see https://floating-ui.com/docs/size
579
+ */
580
+ size: {
581
+ type: [Boolean, Object],
582
+ default: () => ({ padding: 10 })
583
+ },
584
+ /**
585
+ * Automatically change the position of the dropdown
586
+ * @see https://floating-ui.com/docs/autoPlacement
587
+ */
588
+ autoPlacement: {
589
+ type: [Boolean, Object],
590
+ default: false
591
+ },
592
+ /**
593
+ * Add arrow to the dropdown
594
+ * @see https://floating-ui.com/docs/arrow
595
+ */
596
+ arrow: {
597
+ type: Boolean,
598
+ default: false
599
+ },
600
+ /**
601
+ * Close dropdown on click outside
602
+ */
603
+ autoClose: {
604
+ type: Boolean,
605
+ default: true
606
+ },
607
+ /**
608
+ * Autofocus first item on dropdown open
609
+ */
610
+ autofocusFirst: {
611
+ type: Boolean,
612
+ default: true
613
+ },
614
+ /**
615
+ * Set dropdown width to the same as the trigger
616
+ */
617
+ triggerWidth: {
618
+ type: Boolean
619
+ }
620
+ });
621
+ const IdNameProps = {
622
+ ...IdProps,
403
623
  /**
404
624
  * Input / Textarea name
405
625
  * Name of the form control. Submitted with the form as part of a name/value pair
406
626
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#name
407
627
  */
408
- name: { type: String, required: !0 }
409
- }, mt = {
628
+ name: { type: String, required: true }
629
+ };
630
+ const AutofocusProps = {
410
631
  /**
411
632
  * Global attribute autofocus
412
633
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus
413
634
  */
414
635
  autofocus: Boolean
415
- }, bt = {
636
+ };
637
+ const AutocompleteProps = {
416
638
  /**
417
639
  * Global attribute autocomplete
418
640
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete
419
641
  */
420
642
  autocomplete: { type: String, default: "off" }
421
- }, St = {
422
- ...ft,
423
- ...mt,
424
- ...bt,
425
- ...dt,
426
- ...Se,
427
- ...lt,
428
- ...et,
429
- ...tt,
430
- ...st,
431
- ...nt,
432
- ...ot,
433
- ...it,
434
- ...ut,
435
- ...ct,
436
- ...pt,
437
- ...he,
643
+ };
644
+ const InputTextareaProps = {
645
+ ...IdNameProps,
646
+ ...AutofocusProps,
647
+ ...AutocompleteProps,
648
+ ...TabindexProps,
649
+ ...DisabledProps,
650
+ ...ReadonlyProps,
651
+ ...ValidProps,
652
+ ...InvalidProps,
653
+ ...HintProps,
654
+ ...LoadingProps,
655
+ ...ModifiersProps,
656
+ ...CountProps,
657
+ ...DebounceProps,
658
+ ...IconProps,
659
+ ...FloatingLabelProps,
660
+ ...LabelProps,
438
661
  /**
439
662
  * Input / Textarea minlength
440
663
  * Minimum length (number of characters) of value
@@ -465,17 +688,21 @@ const ft = {
465
688
  required: Boolean
466
689
  };
467
690
  ({
468
- ...Se,
469
- ...he,
470
- ...rt,
471
- ...at,
472
- ...Ze,
691
+ ...DisabledProps,
692
+ ...LabelProps,
693
+ ...PressedProps,
694
+ ...ActiveProps,
695
+ ...LinkProps,
473
696
  /**
474
697
  * Button type
475
698
  */
476
- type: te.button
699
+ type: {
700
+ type: String,
701
+ default: ButtonType.button,
702
+ validator: (value) => Object.values(ButtonType).includes(value)
703
+ }
477
704
  });
478
- const r = {
705
+ const INPUT_TYPES = {
479
706
  TEXT: "text",
480
707
  PASSWORD: "password",
481
708
  NUMBER: "number",
@@ -489,15 +716,18 @@ const r = {
489
716
  DATETIME_LOCAL: "datetime-local",
490
717
  MONTH: "month",
491
718
  WEEK: "week"
492
- }, I = {
719
+ };
720
+ const TYPES_ICON = {
493
721
  PASSWORD_SHOW: "eye-on",
494
722
  PASSWORD_HIDE: "eye-off",
495
723
  DATE: "calendar",
496
724
  TIME: "time",
497
725
  COLOR: "color",
498
726
  SEARCH: "close"
499
- }, ht = ["update:modelValue", "focus", "blur", "keyup"], gt = {
500
- ...St,
727
+ };
728
+ const VvInputTextEvents = ["update:modelValue", "focus", "blur", "keyup"];
729
+ const VvInputTextProps = {
730
+ ...InputTextareaProps,
501
731
  /**
502
732
  * Input value
503
733
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#value
@@ -509,8 +739,8 @@ const r = {
509
739
  */
510
740
  type: {
511
741
  type: String,
512
- default: r.TEXT,
513
- validator: (e) => Object.values(r).includes(e)
742
+ default: INPUT_TYPES.TEXT,
743
+ validator: (value) => Object.values(INPUT_TYPES).includes(value)
514
744
  },
515
745
  /**
516
746
  * Minimum value
@@ -548,7 +778,7 @@ const r = {
548
778
  */
549
779
  iconShowPassword: {
550
780
  type: String,
551
- default: I.PASSWORD_SHOW
781
+ default: TYPES_ICON.PASSWORD_SHOW
552
782
  },
553
783
  /**
554
784
  * VvIcon name for hide password button
@@ -556,7 +786,7 @@ const r = {
556
786
  */
557
787
  iconHidePassword: {
558
788
  type: String,
559
- default: I.PASSWORD_HIDE
789
+ default: TYPES_ICON.PASSWORD_HIDE
560
790
  },
561
791
  /**
562
792
  * VvIcon name for clear button
@@ -564,7 +794,7 @@ const r = {
564
794
  */
565
795
  iconClear: {
566
796
  type: String,
567
- default: I.SEARCH
797
+ default: TYPES_ICON.SEARCH
568
798
  },
569
799
  /**
570
800
  * Label for step up button
@@ -600,15 +830,76 @@ const r = {
600
830
  labelClear: {
601
831
  type: String,
602
832
  default: "Clear"
833
+ },
834
+ /**
835
+ * Input mask, only for text type
836
+ * @see https://beholdr.github.io/maska/
837
+ */
838
+ mask: {
839
+ type: String,
840
+ default: void 0
841
+ },
842
+ /**
843
+ * Show mask before typing
844
+ * @see https://beholdr.github.io/maska/#/?id=maskinput-options
845
+ */
846
+ maskEager: {
847
+ type: Boolean,
848
+ default: false
849
+ },
850
+ /**
851
+ * Write values reverse (ex. for numbers)
852
+ * @see https://beholdr.github.io/maska/#/?id=maskinput-options
853
+ */
854
+ maskReversed: {
855
+ type: Boolean,
856
+ default: false
857
+ },
858
+ /**
859
+ * Add mask custom tokens
860
+ * @see https://beholdr.github.io/maska/#/?id=custom-tokens
861
+ */
862
+ maskTokens: {
863
+ type: Object,
864
+ default: void 0
865
+ },
866
+ /**
867
+ * Replace default tokens
868
+ * @see https://beholdr.github.io/maska/#/?id=custom-tokens
869
+ */
870
+ maskTokensReplace: {
871
+ type: Boolean,
872
+ default: false
873
+ },
874
+ /**
875
+ * Adjust input width to content
876
+ */
877
+ autoWidth: {
878
+ type: Boolean,
879
+ default: false
880
+ },
881
+ /**
882
+ * Hide type number, password and search actions
883
+ */
884
+ hideActions: {
885
+ type: Boolean,
886
+ default: false
887
+ },
888
+ /**
889
+ * Add unit label to input
890
+ */
891
+ unit: {
892
+ type: String
603
893
  }
604
- }, de = L({
894
+ };
895
+ const VvInputPasswordAction = defineComponent({
605
896
  components: {
606
- VvIcon: _
897
+ VvIcon: _sfc_main$1
607
898
  },
608
899
  props: {
609
900
  disabled: {
610
901
  type: Boolean,
611
- default: !1
902
+ default: false
612
903
  },
613
904
  labelShow: {
614
905
  type: String,
@@ -620,33 +911,38 @@ const r = {
620
911
  },
621
912
  iconShow: {
622
913
  type: String,
623
- default: I.PASSWORD_SHOW
914
+ default: TYPES_ICON.PASSWORD_SHOW
624
915
  },
625
916
  iconHide: {
626
917
  type: String,
627
- default: I.PASSWORD_HIDE
918
+ default: TYPES_ICON.PASSWORD_HIDE
628
919
  }
629
920
  },
630
921
  emits: ["toggle-password"],
631
- setup(e, { emit: t }) {
632
- const n = j(!1), a = l(
633
- () => n.value ? e.iconHide : e.iconShow
922
+ setup(props, { emit }) {
923
+ const active = ref(false);
924
+ const activeIcon = computed(
925
+ () => active.value ? props.iconHide : props.iconShow
634
926
  );
635
- function o(p) {
636
- p == null || p.stopPropagation(), e.disabled || (n.value = !n.value, t("toggle-password", n.value));
927
+ function onClick(e) {
928
+ e == null ? void 0 : e.stopPropagation();
929
+ if (!props.disabled) {
930
+ active.value = !active.value;
931
+ emit("toggle-password", active.value);
932
+ }
637
933
  }
638
934
  return {
639
- active: n,
640
- activeIcon: a,
641
- onClick: o
935
+ active,
936
+ activeIcon,
937
+ onClick
642
938
  };
643
939
  },
644
940
  render() {
645
- const e = y(_, {
941
+ const icon = h(_sfc_main$1, {
646
942
  name: this.activeIcon,
647
- class: "vv-input-text__action-icon"
943
+ class: "vv-input-text__icon"
648
944
  });
649
- return y(
945
+ return h(
650
946
  "button",
651
947
  {
652
948
  disabled: this.disabled,
@@ -655,56 +951,63 @@ const r = {
655
951
  type: "button",
656
952
  onClick: this.onClick
657
953
  },
658
- e
954
+ icon
659
955
  );
660
956
  }
661
- }), Z = L({
957
+ });
958
+ const VvInputStepAction = defineComponent({
662
959
  components: {
663
- VvIcon: _
960
+ VvIcon: _sfc_main$1
664
961
  },
665
962
  props: {
666
963
  disabled: {
667
964
  type: Boolean,
668
- default: !1
965
+ default: false
669
966
  },
670
967
  label: {
671
968
  type: String
672
969
  },
673
970
  mode: {
674
971
  type: String,
675
- validator: (e) => ["up", "down"].includes(e),
972
+ validator: (v) => ["up", "down"].includes(v),
676
973
  default: "up"
677
974
  }
678
975
  },
679
976
  emits: ["step-up", "step-down"],
680
- setup(e, { emit: t }) {
681
- const n = l(() => e.mode === "up");
682
- return {
683
- isUp: n,
684
- onClick: (o) => {
685
- o == null || o.stopPropagation(), e.disabled || t(n.value ? "step-up" : "step-down");
977
+ setup(props, { emit }) {
978
+ const isUp = computed(() => props.mode === "up");
979
+ const onClick = (e) => {
980
+ e == null ? void 0 : e.stopPropagation();
981
+ if (!props.disabled) {
982
+ emit(isUp.value ? "step-up" : "step-down");
686
983
  }
687
984
  };
985
+ return {
986
+ isUp,
987
+ onClick
988
+ };
688
989
  },
689
990
  render() {
690
- return y("button", {
991
+ return h("button", {
691
992
  class: [
692
- "vv-input-text__action-chevron",
993
+ "vv-input-text__action vv-input-text__action-chevron",
693
994
  this.isUp && "vv-input-text__action-chevron-up"
694
995
  ],
695
996
  disabled: this.disabled,
696
997
  ariaLabel: this.label,
998
+ type: "button",
697
999
  onClick: this.onClick
698
1000
  });
699
1001
  }
700
- }), pe = L({
1002
+ });
1003
+ const VvInputClearAction = defineComponent({
701
1004
  components: {
702
- VvIcon: _
1005
+ VvIcon: _sfc_main$1
703
1006
  },
704
1007
  props: {
705
1008
  disabled: {
706
1009
  type: Boolean,
707
- default: !1
1010
+ default: false
708
1011
  },
709
1012
  label: {
710
1013
  type: String,
@@ -716,20 +1019,23 @@ const r = {
716
1019
  }
717
1020
  },
718
1021
  emits: ["clear"],
719
- setup(e, { emit: t }) {
720
- function n(a) {
721
- a == null || a.stopPropagation(), e.disabled || t("clear");
1022
+ setup(props, { emit }) {
1023
+ function onClick(e) {
1024
+ e == null ? void 0 : e.stopPropagation();
1025
+ if (!props.disabled) {
1026
+ emit("clear");
1027
+ }
722
1028
  }
723
1029
  return {
724
- onClick: n
1030
+ onClick
725
1031
  };
726
1032
  },
727
1033
  render() {
728
- const e = y(_, {
1034
+ const icon = h(_sfc_main$1, {
729
1035
  name: this.icon,
730
- class: "vv-input-text__action-icon"
1036
+ class: "vv-input-text__icon"
731
1037
  });
732
- return y(
1038
+ return h(
733
1039
  "button",
734
1040
  {
735
1041
  disabled: this.disabled,
@@ -738,51 +1044,54 @@ const r = {
738
1044
  type: "button",
739
1045
  onClick: this.onClick
740
1046
  },
741
- e
1047
+ icon
742
1048
  );
743
1049
  }
744
1050
  });
745
- function ee(e, t) {
1051
+ function VvInputTextActionsFactory(type, parentProps) {
746
1052
  return {
747
1053
  name: "VvInputTextActions",
748
1054
  components: {
749
- VvIcon: _,
750
- VvInputPasswordAction: de,
751
- VvInputStepAction: Z,
752
- VvInputClearAction: pe
1055
+ VvIcon: _sfc_main$1,
1056
+ VvInputPasswordAction,
1057
+ VvInputStepAction,
1058
+ VvInputClearAction
753
1059
  },
754
1060
  setup() {
1061
+ const isDisabled = computed(() => {
1062
+ return parentProps.disabled || parentProps.readonly;
1063
+ });
755
1064
  return {
756
- isDisabled: l(() => t.disabled || t.readonly),
757
- labelStepUp: t.labelStepUp,
758
- labelStepDown: t.labelStepDown,
759
- labelShowPassword: t.labelShowPassword,
760
- labelHidePassword: t.labelHidePassword,
761
- labelClear: t.labelClear,
762
- iconShowPassword: t.iconShowPassword,
763
- iconHidePassword: t.iconHidePassword
1065
+ isDisabled,
1066
+ labelStepUp: parentProps.labelStepUp,
1067
+ labelStepDown: parentProps.labelStepDown,
1068
+ labelShowPassword: parentProps.labelShowPassword,
1069
+ labelHidePassword: parentProps.labelHidePassword,
1070
+ labelClear: parentProps.labelClear,
1071
+ iconShowPassword: parentProps.iconShowPassword,
1072
+ iconHidePassword: parentProps.iconHidePassword
764
1073
  };
765
1074
  },
766
1075
  render() {
767
- let n = null;
768
- switch (e) {
769
- case r.SEARCH: {
770
- const { onClear: a } = this.$attrs;
771
- n = [
772
- y(pe, {
1076
+ let actions = null;
1077
+ switch (type) {
1078
+ case INPUT_TYPES.SEARCH: {
1079
+ const { onClear } = this.$attrs;
1080
+ actions = [
1081
+ h(VvInputClearAction, {
773
1082
  disabled: this.isDisabled,
774
1083
  label: this.labelShowPassword,
775
- onClear: a
1084
+ onClear
776
1085
  })
777
1086
  ];
778
1087
  break;
779
1088
  }
780
- case r.PASSWORD: {
781
- const { onTogglePassword: a } = this.$attrs;
782
- n = [
783
- y(de, {
1089
+ case INPUT_TYPES.PASSWORD: {
1090
+ const { onTogglePassword } = this.$attrs;
1091
+ actions = [
1092
+ h(VvInputPasswordAction, {
784
1093
  disabled: this.isDisabled,
785
- onTogglePassword: a,
1094
+ onTogglePassword,
786
1095
  labelShow: this.labelShowPassword,
787
1096
  labelHide: this.labelHidePassword,
788
1097
  iconShow: this.iconShowPassword,
@@ -791,258 +1100,463 @@ function ee(e, t) {
791
1100
  ];
792
1101
  break;
793
1102
  }
794
- case r.NUMBER: {
795
- const { onStepUp: a, onStepDown: o } = this.$attrs;
796
- n = [
797
- y(Z, {
1103
+ case INPUT_TYPES.NUMBER: {
1104
+ const { onStepUp, onStepDown } = this.$attrs;
1105
+ actions = [
1106
+ h(VvInputStepAction, {
798
1107
  mode: "up",
799
- disabled: this.isDisabled || t.max !== void 0 && t.modelValue === t.max,
1108
+ disabled: this.isDisabled || parentProps.max !== void 0 && parentProps.modelValue === parentProps.max,
800
1109
  label: this.labelStepUp,
801
- onStepUp: a,
802
- onStepDown: o
1110
+ onStepUp,
1111
+ onStepDown
803
1112
  }),
804
- y(Z, {
1113
+ h(VvInputStepAction, {
805
1114
  mode: "down",
806
- disabled: this.isDisabled || t.min !== void 0 && t.modelValue === t.min,
1115
+ disabled: this.isDisabled || parentProps.min !== void 0 && parentProps.modelValue === parentProps.min,
807
1116
  label: this.labelStepDown,
808
- onStepUp: a,
809
- onStepDown: o
1117
+ onStepUp,
1118
+ onStepDown
810
1119
  })
811
1120
  ];
812
1121
  break;
813
1122
  }
814
1123
  }
815
- return Array.isArray(n) ? y("div", { class: "vv-input-text__actions-group" }, n) : n;
1124
+ return Array.isArray(actions) ? h("div", { class: "vv-input-text__actions-group" }, actions) : actions;
816
1125
  }
817
1126
  };
818
1127
  }
819
- const yt = (e) => l(() => String((e == null ? void 0 : e.value) || ze()));
820
- function wt(e, t, n = 0) {
821
- let a;
822
- return typeof n == "string" && (n = parseInt(n)), l({
823
- get: () => e == null ? void 0 : e.value,
824
- set: (o) => {
825
- a && clearTimeout(a), a = setTimeout(() => {
826
- t("update:modelValue", o);
827
- }, n);
1128
+ const useUniqueId = (id) => computed(() => String((id == null ? void 0 : id.value) || nanoid()));
1129
+ function useDebouncedInput(modelValue, emit, ms = 0, {
1130
+ getter = (value) => value,
1131
+ setter = (value) => value
1132
+ } = {}) {
1133
+ let timeout;
1134
+ if (typeof ms === "string") {
1135
+ ms = parseInt(ms);
1136
+ }
1137
+ return computed({
1138
+ get: () => getter(modelValue == null ? void 0 : modelValue.value),
1139
+ set: (value) => {
1140
+ if (timeout) {
1141
+ clearTimeout(timeout);
1142
+ }
1143
+ timeout = setTimeout(() => {
1144
+ emit("update:modelValue", setter(value));
1145
+ }, ms);
828
1146
  }
829
1147
  });
830
1148
  }
831
- function Et(e, t) {
832
- const { focused: n } = je(e);
833
- return ve(n, (a) => {
834
- t(a ? "focus" : "blur", s(e));
835
- }), {
836
- focused: n
1149
+ function useComponentFocus(inputTemplateRef, emit) {
1150
+ const { focused } = useFocus(inputTemplateRef);
1151
+ watch(focused, (newValue) => {
1152
+ emit(newValue ? "focus" : "blur", unref(inputTemplateRef));
1153
+ });
1154
+ return {
1155
+ focused
837
1156
  };
838
1157
  }
839
- function It(e, t) {
840
- const n = l(
841
- () => Boolean((e == null ? void 0 : e.value) && t.value === x.before)
842
- ), a = l(
843
- () => Boolean((e == null ? void 0 : e.value) && t.value === x.after)
844
- ), o = l(
845
- () => Boolean((e == null ? void 0 : e.value) && t.value === T.left)
846
- ), p = l(
847
- () => Boolean((e == null ? void 0 : e.value) && t.value === T.right)
848
- ), d = l(
849
- () => Boolean((e == null ? void 0 : e.value) && t.value === T.top)
850
- ), A = l(
851
- () => Boolean((e == null ? void 0 : e.value) && t.value === T.bottom)
1158
+ function useComponentIcon(icon, iconPosition) {
1159
+ const hasIconBefore = computed(
1160
+ () => Boolean((icon == null ? void 0 : icon.value) && iconPosition.value === Position.before)
1161
+ );
1162
+ const hasIconAfter = computed(
1163
+ () => Boolean((icon == null ? void 0 : icon.value) && iconPosition.value === Position.after)
1164
+ );
1165
+ const hasIconLeft = computed(
1166
+ () => Boolean((icon == null ? void 0 : icon.value) && iconPosition.value === Side.left)
1167
+ );
1168
+ const hasIconRight = computed(
1169
+ () => Boolean((icon == null ? void 0 : icon.value) && iconPosition.value === Side.right)
1170
+ );
1171
+ const hasIconTop = computed(
1172
+ () => Boolean((icon == null ? void 0 : icon.value) && iconPosition.value === Side.top)
852
1173
  );
1174
+ const hasIconBottom = computed(
1175
+ () => Boolean((icon == null ? void 0 : icon.value) && iconPosition.value === Side.bottom)
1176
+ );
1177
+ const hasIcon = computed(() => {
1178
+ if (typeof (icon == null ? void 0 : icon.value) === "string") {
1179
+ return { name: icon == null ? void 0 : icon.value };
1180
+ }
1181
+ return icon == null ? void 0 : icon.value;
1182
+ });
853
1183
  return {
854
- hasIcon: l(() => typeof (e == null ? void 0 : e.value) == "string" ? { name: e == null ? void 0 : e.value } : e == null ? void 0 : e.value),
855
- hasIconLeft: o,
856
- hasIconRight: p,
857
- hasIconTop: d,
858
- hasIconBottom: A,
859
- hasIconBefore: n,
860
- hasIconAfter: a
1184
+ hasIcon,
1185
+ hasIconLeft,
1186
+ hasIconRight,
1187
+ hasIconTop,
1188
+ hasIconBottom,
1189
+ hasIconBefore,
1190
+ hasIconAfter
861
1191
  };
862
1192
  }
863
- function _t(e, t) {
864
- const n = l(() => (s(e) ?? "").length), a = l(() => (t == null ? void 0 : t.lowerLimit) !== void 0 && n.value < (t == null ? void 0 : t.lowerLimit) ? n.value - t.lowerLimit : (t == null ? void 0 : t.upperLimit) !== void 0 && n.value < (t == null ? void 0 : t.upperLimit) ? t.upperLimit - n.value : 0), o = l(() => (t == null ? void 0 : t.mode) === !1 ? "" : (t == null ? void 0 : t.mode) === "limit" && (t != null && t.upperLimit) ? `${n.value} / ${t.lowerLimit ? `${t.lowerLimit}-` : ""}${t.upperLimit}` : (t == null ? void 0 : t.mode) === "countdown" ? a.value === 0 ? void 0 : a : n.value);
1193
+ function useTextCount(text, options) {
1194
+ const length = computed(() => {
1195
+ return (unref(text) ?? "").length;
1196
+ });
1197
+ const gap = computed(() => {
1198
+ if ((options == null ? void 0 : options.lowerLimit) !== void 0 && length.value < (options == null ? void 0 : options.lowerLimit)) {
1199
+ return length.value - options.lowerLimit;
1200
+ }
1201
+ if ((options == null ? void 0 : options.upperLimit) !== void 0 && length.value < (options == null ? void 0 : options.upperLimit)) {
1202
+ return options.upperLimit - length.value;
1203
+ }
1204
+ return 0;
1205
+ });
1206
+ const formatted = computed(() => {
1207
+ if ((options == null ? void 0 : options.mode) === false) {
1208
+ return "";
1209
+ }
1210
+ if ((options == null ? void 0 : options.mode) === "limit" && (options == null ? void 0 : options.upperLimit)) {
1211
+ return `${length.value} / ${options.lowerLimit ? `${options.lowerLimit}-` : ""}${options.upperLimit}`;
1212
+ }
1213
+ if ((options == null ? void 0 : options.mode) === "countdown") {
1214
+ if (gap.value === 0) {
1215
+ return void 0;
1216
+ }
1217
+ return gap;
1218
+ }
1219
+ return length.value;
1220
+ });
865
1221
  return {
866
- length: n,
867
- gap: a,
868
- formatted: o
1222
+ length,
1223
+ gap,
1224
+ formatted
869
1225
  };
870
1226
  }
871
- const At = ["for"], Dt = { class: "vv-input-text__wrapper" }, Ot = {
1227
+ const _hoisted_1 = ["for"];
1228
+ const _hoisted_2 = { class: "vv-input-text__wrapper" };
1229
+ const _hoisted_3 = {
872
1230
  key: 0,
873
1231
  class: "vv-input-text__input-before"
874
- }, Tt = { class: "vv-input-text__inner" }, Ct = ["id"], Pt = {
1232
+ };
1233
+ const _hoisted_4 = ["onClick"];
1234
+ const _hoisted_5 = ["id"];
1235
+ const _hoisted_6 = {
875
1236
  key: 1,
1237
+ class: "vv-input-text__unit"
1238
+ };
1239
+ const _hoisted_7 = {
1240
+ key: 5,
876
1241
  class: "vv-input-text__input-after"
877
- }, Bt = {
878
- key: 2,
1242
+ };
1243
+ const _hoisted_8 = {
1244
+ key: 6,
879
1245
  class: "vv-input-text__limit"
880
- }, Ht = {
1246
+ };
1247
+ const __default__ = {
881
1248
  name: "VvInputText"
882
- }, Vt = /* @__PURE__ */ L({
883
- ...Ht,
884
- props: gt,
885
- emits: ht,
886
- setup(e, { emit: t }) {
887
- const n = e, a = xe(), o = j(), {
888
- id: p,
889
- icon: d,
890
- iconPosition: A,
891
- label: w,
892
- modelValue: m,
893
- count: i,
894
- valid: u,
895
- invalid: S,
896
- loading: v
897
- } = U(n), b = yt(p), E = l(() => `${b.value}-hint`), N = l(
898
- () => n.floating && R(n.placeholder) ? " " : n.placeholder
899
- ), h = wt(m, t, n.debounce), { focused: C } = Et(o, t), W = We(o);
900
- ve(W, (c) => {
901
- c && n.autofocus && (C.value = !0);
1249
+ };
1250
+ const _sfc_main = /* @__PURE__ */ defineComponent({
1251
+ ...__default__,
1252
+ props: VvInputTextProps,
1253
+ emits: VvInputTextEvents,
1254
+ setup(__props, { expose, emit }) {
1255
+ const props = __props;
1256
+ const slots = useSlots();
1257
+ const inputEl = ref();
1258
+ const innerEl = ref();
1259
+ expose({ $inner: innerEl });
1260
+ const {
1261
+ id,
1262
+ icon,
1263
+ iconPosition,
1264
+ label,
1265
+ modelValue,
1266
+ count,
1267
+ valid,
1268
+ invalid,
1269
+ loading
1270
+ } = toRefs(props);
1271
+ const hasId = useUniqueId(id);
1272
+ const hasDescribedBy = computed(() => `${hasId.value}-hint`);
1273
+ const inputTextPlaceholder = computed(
1274
+ () => props.floating && isEmpty(props.placeholder) ? " " : props.placeholder
1275
+ );
1276
+ const localModelValue = useDebouncedInput(
1277
+ modelValue,
1278
+ emit,
1279
+ props.debounce,
1280
+ {
1281
+ getter: (value) => {
1282
+ if (mask.value) {
1283
+ return mask.value.masked(value ?? "");
1284
+ }
1285
+ return value;
1286
+ },
1287
+ setter: (value) => {
1288
+ if (mask.value) {
1289
+ value = mask.value.unmasked(value);
1290
+ }
1291
+ if (props.type === INPUT_TYPES.NUMBER) {
1292
+ return Number(value);
1293
+ }
1294
+ return value;
1295
+ }
1296
+ }
1297
+ );
1298
+ const { focused } = useComponentFocus(inputEl, emit);
1299
+ const isFocused = computed(
1300
+ () => focused.value && !props.disabled && !props.readonly
1301
+ );
1302
+ const isVisible = useElementVisibility(inputEl);
1303
+ watch(isVisible, (newValue) => {
1304
+ if (newValue && props.autofocus && !props.disabled && !props.readonly) {
1305
+ focused.value = true;
1306
+ }
902
1307
  });
903
- const B = j(!1), V = l(() => n.type === r.PASSWORD), D = () => {
904
- B.value = !B.value;
905
- }, ge = l(
906
- () => n.type === r.TIME || n.type === r.DATETIME_LOCAL || n.type === r.DATE || n.type === r.WEEK || n.type === r.MONTH
907
- ), ye = l(() => n.type === r.NUMBER), ne = () => {
908
- z.value && (o.value.stepUp(), h.value = s(o).value);
909
- }, ae = () => {
910
- z.value && (o.value.stepDown(), h.value = s(o).value);
911
- }, we = l(() => n.type === r.SEARCH), re = () => {
912
- h.value = void 0;
913
- }, { hasIcon: le, hasIconBefore: oe, hasIconAfter: F } = It(
914
- d,
915
- A
916
- ), q = l(() => {
917
- switch (n.type) {
918
- case r.COLOR:
919
- return { name: I.COLOR };
920
- case r.DATE:
921
- case r.DATETIME_LOCAL:
922
- case r.WEEK:
923
- case r.MONTH:
924
- return { name: I.DATE };
925
- case r.TIME:
926
- return { name: I.TIME };
1308
+ const showPassword = ref(false);
1309
+ const isPassword = computed(() => props.type === INPUT_TYPES.PASSWORD);
1310
+ const onTogglePassword = () => {
1311
+ showPassword.value = !showPassword.value;
1312
+ };
1313
+ const isDateTime = computed(
1314
+ () => props.type === INPUT_TYPES.TIME || props.type === INPUT_TYPES.DATETIME_LOCAL || props.type === INPUT_TYPES.DATE || props.type === INPUT_TYPES.WEEK || props.type === INPUT_TYPES.MONTH
1315
+ );
1316
+ const isNumber = computed(() => props.type === INPUT_TYPES.NUMBER);
1317
+ const onStepUp = () => {
1318
+ if (isClickable.value) {
1319
+ inputEl.value.stepUp();
1320
+ localModelValue.value = unref(inputEl).value;
1321
+ }
1322
+ };
1323
+ const onStepDown = () => {
1324
+ if (isClickable.value) {
1325
+ inputEl.value.stepDown();
1326
+ localModelValue.value = unref(inputEl).value;
1327
+ }
1328
+ };
1329
+ const isSearch = computed(() => props.type === INPUT_TYPES.SEARCH);
1330
+ const onClear = () => {
1331
+ localModelValue.value = void 0;
1332
+ };
1333
+ const { hasIcon, hasIconBefore, hasIconAfter } = useComponentIcon(
1334
+ icon,
1335
+ iconPosition
1336
+ );
1337
+ const defaultAfterIcon = computed(() => {
1338
+ switch (props.type) {
1339
+ case INPUT_TYPES.COLOR:
1340
+ return { name: TYPES_ICON.COLOR };
1341
+ case INPUT_TYPES.DATE:
1342
+ case INPUT_TYPES.DATETIME_LOCAL:
1343
+ case INPUT_TYPES.WEEK:
1344
+ case INPUT_TYPES.MONTH:
1345
+ return { name: TYPES_ICON.DATE };
1346
+ case INPUT_TYPES.TIME:
1347
+ return { name: TYPES_ICON.TIME };
927
1348
  default:
928
1349
  return "";
929
1350
  }
930
- }), { formatted: Ee } = _t(h, {
931
- mode: n.count,
932
- upperLimit: n.maxlength,
933
- lowerLimit: n.minlength
934
- }), z = l(() => !n.disabled && !n.readonly), Ie = l(
935
- () => z.value ? n.tabindex : -1
936
- ), se = l(() => !R(m)), _e = l(() => {
937
- if (S.value === !0)
938
- return !0;
939
- if (u.value === !0)
940
- return !1;
941
- }), { modifiers: Ae } = U(n), De = be(
1351
+ });
1352
+ const { formatted: countFormatted } = useTextCount(localModelValue, {
1353
+ mode: props.count,
1354
+ upperLimit: props.maxlength,
1355
+ lowerLimit: props.minlength
1356
+ });
1357
+ const isClickable = computed(() => !props.disabled && !props.readonly);
1358
+ const hasTabindex = computed(
1359
+ () => isClickable.value ? props.tabindex : -1
1360
+ );
1361
+ const isDirty = computed(() => !isEmpty(modelValue));
1362
+ const isInvalid = computed(() => {
1363
+ if (invalid.value === true) {
1364
+ return true;
1365
+ }
1366
+ if (valid.value === true) {
1367
+ return false;
1368
+ }
1369
+ return void 0;
1370
+ });
1371
+ const { modifiers } = toRefs(props);
1372
+ const bemCssClasses = useModifiers(
942
1373
  "vv-input-text",
943
- Ae,
944
- l(() => ({
945
- valid: u.value,
946
- invalid: S.value,
947
- loading: v.value,
948
- disabled: n.disabled,
949
- readonly: n.readonly,
950
- "icon-before": oe.value,
951
- "icon-after": F.value || !R(q),
952
- floating: n.floating && !R(n.label),
953
- dirty: se.value,
954
- focus: C.value
1374
+ modifiers,
1375
+ computed(() => ({
1376
+ valid: valid.value,
1377
+ invalid: invalid.value,
1378
+ loading: loading.value,
1379
+ disabled: props.disabled,
1380
+ readonly: props.readonly,
1381
+ "icon-before": hasIconBefore.value,
1382
+ "icon-after": hasIconAfter.value || !isEmpty(defaultAfterIcon),
1383
+ floating: props.floating && !isEmpty(props.label),
1384
+ dirty: isDirty.value,
1385
+ focus: isFocused.value,
1386
+ "auto-width": props.autoWidth
955
1387
  }))
956
- ), Oe = l(() => {
957
- const c = (() => V.value && B.value || ge.value && !se.value && !C.value ? r.TEXT : n.type)(), f = {
958
- type: c,
959
- name: n.name,
960
- tabindex: Ie.value,
961
- disabled: n.disabled,
962
- readonly: n.readonly,
963
- required: n.required,
964
- autocomplete: n.autocomplete,
965
- "aria-invalid": _e.value,
966
- "aria-describedby": !ie.value && Ce.value ? E.value : void 0,
967
- "aria-errormessage": ie.value ? E.value : void 0
1388
+ );
1389
+ const hasAttrs = computed(() => {
1390
+ const type = (() => {
1391
+ if (isPassword.value && showPassword.value) {
1392
+ return INPUT_TYPES.TEXT;
1393
+ }
1394
+ if (isDateTime.value && !isDirty.value && !focused.value) {
1395
+ return INPUT_TYPES.TEXT;
1396
+ }
1397
+ return props.type;
1398
+ })();
1399
+ const toReturn = {
1400
+ type,
1401
+ name: props.name,
1402
+ tabindex: hasTabindex.value,
1403
+ disabled: props.disabled,
1404
+ readonly: props.readonly,
1405
+ required: props.required,
1406
+ autocomplete: props.autocomplete,
1407
+ "aria-invalid": isInvalid.value,
1408
+ "aria-describedby": !hasInvalid.value && hasHint.value ? hasDescribedBy.value : void 0,
1409
+ "aria-errormessage": hasInvalid.value ? hasDescribedBy.value : void 0
968
1410
  };
969
- return (c === r.DATE || c === r.MONTH || c === r.WEEK || c === r.TIME || c === r.DATETIME_LOCAL || c === r.NUMBER) && (f.step = n.step, f.max = String(n.max), f.min = String(n.min)), (c === r.TEXT || c === r.SEARCH || c === r.URL || c === r.TEL || c === r.EMAIL || c === r.PASSWORD || c === r.NUMBER) && (f.placeholder = N.value), (c === r.TEXT || c === r.SEARCH || c === r.URL || c === r.TEL || c === r.EMAIL || c === r.PASSWORD) && (f.minlength = n.minlength, f.maxlength = n.maxlength, f.pattern = n.pattern), c === r.EMAIL && (f.multiple = n.multiple), f;
970
- }), K = l(() => ({
971
- valid: n.valid,
972
- invalid: n.invalid,
973
- modelValue: n.modelValue,
974
- togglePassword: D,
975
- stepUp: ne,
976
- stepDown: ae,
977
- clear: re
978
- })), { HintSlot: Te, hasHint: Ce, hasInvalid: ie } = Xe(n, a), Pe = ee(
979
- r.PASSWORD,
980
- n
981
- ), Be = ee(
982
- r.NUMBER,
983
- n
984
- ), He = ee(
985
- r.SEARCH,
986
- n
1411
+ if (type === INPUT_TYPES.DATE || type === INPUT_TYPES.MONTH || type === INPUT_TYPES.WEEK || type === INPUT_TYPES.TIME || type === INPUT_TYPES.DATETIME_LOCAL || type === INPUT_TYPES.NUMBER) {
1412
+ toReturn.step = props.step;
1413
+ toReturn.max = props.max !== void 0 ? String(props.max) : void 0;
1414
+ toReturn.min = props.min !== void 0 ? String(props.min) : void 0;
1415
+ }
1416
+ if (type === INPUT_TYPES.TEXT || type === INPUT_TYPES.SEARCH || type === INPUT_TYPES.URL || type === INPUT_TYPES.TEL || type === INPUT_TYPES.EMAIL || type === INPUT_TYPES.PASSWORD || type === INPUT_TYPES.NUMBER) {
1417
+ toReturn.placeholder = inputTextPlaceholder.value;
1418
+ }
1419
+ if (type === INPUT_TYPES.TEXT || type === INPUT_TYPES.SEARCH || type === INPUT_TYPES.URL || type === INPUT_TYPES.TEL || type === INPUT_TYPES.EMAIL || type === INPUT_TYPES.PASSWORD) {
1420
+ toReturn.minlength = props.minlength;
1421
+ toReturn.maxlength = props.maxlength;
1422
+ toReturn.pattern = props.pattern;
1423
+ }
1424
+ if (type === INPUT_TYPES.EMAIL) {
1425
+ toReturn.multiple = props.multiple;
1426
+ }
1427
+ return toReturn;
1428
+ });
1429
+ const slotProps = computed(() => ({
1430
+ valid: props.valid,
1431
+ invalid: props.invalid,
1432
+ modelValue: props.modelValue,
1433
+ togglePassword: onTogglePassword,
1434
+ stepUp: onStepUp,
1435
+ stepDown: onStepDown,
1436
+ clear: onClear
1437
+ }));
1438
+ const { HintSlot, hasHint, hasInvalid } = HintSlotFactory(props, slots);
1439
+ const PasswordInputActions = VvInputTextActionsFactory(
1440
+ INPUT_TYPES.PASSWORD,
1441
+ props
987
1442
  );
988
- return (c, f) => (g(), H("div", {
989
- class: Le(s(De))
990
- }, [
991
- s(w) ? (g(), H("label", {
992
- key: 0,
993
- for: s(b),
994
- class: "vv-input-text__label"
995
- }, ue(s(w)), 9, At)) : O("", !0),
996
- Y("div", Dt, [
997
- c.$slots.before ? (g(), H("div", Ot, [
998
- J(c.$slots, "before", G(Q(s(K))))
999
- ])) : O("", !0),
1000
- Y("div", Tt, [
1001
- s(oe) ? (g(), P(_, $({
1002
- key: 0,
1003
- class: "vv-input-text__icon"
1004
- }, s(le)), null, 16)) : O("", !0),
1005
- Ne(Y("input", $({
1006
- id: s(b),
1007
- ref_key: "input",
1008
- ref: o,
1009
- "onUpdate:modelValue": f[0] || (f[0] = (X) => Ve(h) ? h.value = X : null)
1010
- }, s(Oe), {
1011
- onKeyup: f[1] || (f[1] = (X) => t("keyup", X))
1012
- }), null, 16, Ct), [
1013
- [ke, s(h)]
1014
- ]),
1015
- s(F) || s(q) ? (g(), P(_, $({
1443
+ const NumberInputActions = VvInputTextActionsFactory(
1444
+ INPUT_TYPES.NUMBER,
1445
+ props
1446
+ );
1447
+ const SearchInputActions = VvInputTextActionsFactory(
1448
+ INPUT_TYPES.SEARCH,
1449
+ props
1450
+ );
1451
+ const mask = ref();
1452
+ watch(
1453
+ [
1454
+ () => props.mask,
1455
+ () => props.type,
1456
+ () => props.maskEager,
1457
+ () => props.maskReversed,
1458
+ () => props.maskTokens,
1459
+ () => props.maskTokensReplace
1460
+ ],
1461
+ ([newMask, newType, eager, reversed, tokens, tokensReplace]) => {
1462
+ if (newMask && newType === INPUT_TYPES.TEXT) {
1463
+ mask.value = new Mask({
1464
+ mask: newMask,
1465
+ eager,
1466
+ reversed,
1467
+ tokens,
1468
+ tokensReplace
1469
+ });
1470
+ return;
1471
+ }
1472
+ mask.value = void 0;
1473
+ },
1474
+ { immediate: true }
1475
+ );
1476
+ const onClickInner = () => {
1477
+ if (isClickable.value) {
1478
+ focused.value = true;
1479
+ }
1480
+ };
1481
+ const hasStyle = computed(() => {
1482
+ if (!props.autoWidth) {
1483
+ return void 0;
1484
+ }
1485
+ return {
1486
+ width: localModelValue.value !== void 0 ? `${String(localModelValue.value).length + 1}ch` : void 0
1487
+ };
1488
+ });
1489
+ return (_ctx, _cache) => {
1490
+ return openBlock(), createElementBlock("div", {
1491
+ class: normalizeClass(unref(bemCssClasses))
1492
+ }, [
1493
+ unref(label) ? (openBlock(), createElementBlock("label", {
1494
+ key: 0,
1495
+ for: unref(hasId),
1496
+ class: "vv-input-text__label"
1497
+ }, toDisplayString(unref(label)), 9, _hoisted_1)) : createCommentVNode("", true),
1498
+ createElementVNode("div", _hoisted_2, [
1499
+ _ctx.$slots.before ? (openBlock(), createElementBlock("div", _hoisted_3, [
1500
+ renderSlot(_ctx.$slots, "before", normalizeProps(guardReactiveProps(unref(slotProps))))
1501
+ ])) : createCommentVNode("", true),
1502
+ createElementVNode("div", {
1503
+ ref_key: "innerEl",
1504
+ ref: innerEl,
1505
+ class: "vv-input-text__inner",
1506
+ onClick: withModifiers(onClickInner, ["stop"])
1507
+ }, [
1508
+ unref(hasIconBefore) ? (openBlock(), createBlock(_sfc_main$1, mergeProps({
1509
+ key: 0,
1510
+ class: "vv-input-text__icon"
1511
+ }, unref(hasIcon)), null, 16)) : createCommentVNode("", true),
1512
+ withDirectives(createElementVNode("input", mergeProps({
1513
+ id: unref(hasId),
1514
+ ref_key: "inputEl",
1515
+ ref: inputEl,
1516
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(localModelValue) ? localModelValue.value = $event : null)
1517
+ }, unref(hasAttrs), {
1518
+ style: unref(hasStyle),
1519
+ onKeyup: _cache[1] || (_cache[1] = ($event) => emit("keyup", $event))
1520
+ }), null, 16, _hoisted_5), [
1521
+ [vModelDynamic, unref(localModelValue)]
1522
+ ]),
1523
+ (_ctx.unit || _ctx.$slots.unit) && unref(isDirty) ? (openBlock(), createElementBlock("div", _hoisted_6, [
1524
+ renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(unref(slotProps))), () => [
1525
+ createTextVNode(toDisplayString(_ctx.unit), 1)
1526
+ ])
1527
+ ])) : createCommentVNode("", true)
1528
+ ], 8, _hoisted_4),
1529
+ unref(hasIconAfter) || unref(defaultAfterIcon) ? (openBlock(), createBlock(_sfc_main$1, mergeProps({
1016
1530
  key: 1,
1017
1531
  class: "vv-input-text__icon vv-input-text__icon-after"
1018
- }, s(F) ? s(le) : s(q)), null, 16)) : s(V) ? (g(), P(s(Pe), {
1532
+ }, unref(hasIconAfter) ? unref(hasIcon) : unref(defaultAfterIcon)), null, 16)) : unref(isPassword) && !_ctx.hideActions && unref(isClickable) ? (openBlock(), createBlock(unref(PasswordInputActions), {
1019
1533
  key: 2,
1020
- onTogglePassword: D
1021
- })) : s(ye) ? (g(), P(s(Be), {
1534
+ onTogglePassword
1535
+ })) : unref(isNumber) && !_ctx.hideActions && unref(isClickable) ? (openBlock(), createBlock(unref(NumberInputActions), {
1022
1536
  key: 3,
1023
- onStepUp: ne,
1024
- onStepDown: ae
1025
- })) : s(we) ? (g(), P(s(He), {
1537
+ onStepUp,
1538
+ onStepDown
1539
+ })) : unref(isSearch) && !_ctx.hideActions && unref(isClickable) ? (openBlock(), createBlock(unref(SearchInputActions), {
1026
1540
  key: 4,
1027
- onClear: re
1028
- })) : O("", !0)
1541
+ onClear
1542
+ })) : createCommentVNode("", true),
1543
+ _ctx.$slots.after ? (openBlock(), createElementBlock("div", _hoisted_7, [
1544
+ renderSlot(_ctx.$slots, "after", normalizeProps(guardReactiveProps(unref(slotProps))))
1545
+ ])) : createCommentVNode("", true),
1546
+ unref(count) ? (openBlock(), createElementBlock("span", _hoisted_8, [
1547
+ renderSlot(_ctx.$slots, "count", normalizeProps(guardReactiveProps(unref(slotProps))), () => [
1548
+ createTextVNode(toDisplayString(unref(countFormatted)), 1)
1549
+ ])
1550
+ ])) : createCommentVNode("", true)
1029
1551
  ]),
1030
- c.$slots.after ? (g(), H("div", Pt, [
1031
- J(c.$slots, "after", G(Q(s(K))))
1032
- ])) : O("", !0),
1033
- s(i) ? (g(), H("span", Bt, [
1034
- J(c.$slots, "count", G(Q(s(K))), () => [
1035
- Me(ue(s(Ee)), 1)
1036
- ])
1037
- ])) : O("", !0)
1038
- ]),
1039
- $e(s(Te), {
1040
- id: s(E),
1041
- class: "vv-input-text__hint"
1042
- }, null, 8, ["id"])
1043
- ], 2));
1552
+ createVNode(unref(HintSlot), {
1553
+ id: unref(hasDescribedBy),
1554
+ class: "vv-input-text__hint"
1555
+ }, null, 8, ["id"])
1556
+ ], 2);
1557
+ };
1044
1558
  }
1045
1559
  });
1046
1560
  export {
1047
- Vt as default
1561
+ _sfc_main as default
1048
1562
  };