@volverjs/ui-vue 0.0.3 → 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 (236) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +54 -15
  3. package/auto-imports.d.ts +12 -3
  4. package/bin/icons.cjs +1 -73
  5. package/dist/Volver.d.ts +23 -11
  6. package/dist/components/VvAccordion/VvAccordion.es.js +180 -74
  7. package/dist/components/VvAccordion/VvAccordion.umd.js +1 -1
  8. package/dist/components/VvAccordion/VvAccordion.vue.d.ts +4 -1
  9. package/dist/components/VvAccordion/index.d.ts +8 -3
  10. package/dist/components/VvAccordionGroup/VvAccordionGroup.es.js +280 -122
  11. package/dist/components/VvAccordionGroup/VvAccordionGroup.umd.js +1 -1
  12. package/dist/components/VvAccordionGroup/VvAccordionGroup.vue.d.ts +15 -12
  13. package/dist/components/VvAccordionGroup/index.d.ts +8 -0
  14. package/dist/components/VvAction/VvAction.es.js +338 -0
  15. package/dist/components/VvAction/VvAction.umd.js +1 -0
  16. package/dist/components/VvAction/VvAction.vue.d.ts +63 -0
  17. package/dist/components/VvAction/index.d.ts +24 -0
  18. package/dist/components/VvBadge/VvBadge.es.js +251 -22
  19. package/dist/components/VvBadge/VvBadge.umd.js +1 -1
  20. package/dist/components/VvBadge/VvBadge.vue.d.ts +2 -2
  21. package/dist/components/VvBadge/index.d.ts +1 -1
  22. package/dist/components/VvBreadcrumb/VvBreadcrumb.es.js +280 -62
  23. package/dist/components/VvBreadcrumb/VvBreadcrumb.umd.js +1 -1
  24. package/dist/components/VvBreadcrumb/VvBreadcrumb.vue.d.ts +11 -11
  25. package/dist/components/VvBreadcrumb/index.d.ts +1 -1
  26. package/dist/components/VvButton/VvButton.es.js +720 -261
  27. package/dist/components/VvButton/VvButton.umd.js +1 -1
  28. package/dist/components/VvButton/VvButton.vue.d.ts +54 -54
  29. package/dist/components/VvButton/index.d.ts +30 -75
  30. package/dist/components/VvButtonGroup/VvButtonGroup.es.js +296 -49
  31. package/dist/components/VvButtonGroup/VvButtonGroup.umd.js +1 -1
  32. package/dist/components/VvButtonGroup/VvButtonGroup.vue.d.ts +2 -2
  33. package/dist/components/VvButtonGroup/index.d.ts +1 -1
  34. package/dist/components/VvCard/VvCard.es.js +60 -28
  35. package/dist/components/VvCard/VvCard.umd.js +1 -1
  36. package/dist/components/VvCheckbox/VvCheckbox.es.js +630 -172
  37. package/dist/components/VvCheckbox/VvCheckbox.umd.js +1 -1
  38. package/dist/components/VvCheckbox/VvCheckbox.vue.d.ts +4 -4
  39. package/dist/components/VvCheckbox/index.d.ts +6 -6
  40. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js +736 -228
  41. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.umd.js +1 -1
  42. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.vue.d.ts +9 -9
  43. package/dist/components/VvCheckboxGroup/index.d.ts +4 -4
  44. package/dist/components/VvCombobox/VvCombobox.es.js +1673 -768
  45. package/dist/components/VvCombobox/VvCombobox.umd.js +1 -1
  46. package/dist/components/VvCombobox/VvCombobox.vue.d.ts +159 -61
  47. package/dist/components/VvCombobox/index.d.ts +54 -23
  48. package/dist/components/VvDialog/VvDialog.es.js +426 -115
  49. package/dist/components/VvDialog/VvDialog.umd.js +1 -1
  50. package/dist/components/VvDialog/VvDialog.vue.d.ts +12 -3
  51. package/dist/components/VvDialog/index.d.ts +4 -1
  52. package/dist/components/VvDropdown/VvDropdown.es.js +504 -190
  53. package/dist/components/VvDropdown/VvDropdown.umd.js +1 -1
  54. package/dist/components/VvDropdown/VvDropdown.vue.d.ts +114 -42
  55. package/dist/components/VvDropdown/VvDropdownAction.vue.d.ts +61 -0
  56. package/dist/components/VvDropdown/VvDropdownOption.vue.d.ts +52 -0
  57. package/dist/components/VvDropdown/index.d.ts +35 -14
  58. package/dist/components/VvDropdownAction/VvDropdownAction.es.js +454 -0
  59. package/dist/components/VvDropdownAction/VvDropdownAction.umd.js +1 -0
  60. package/dist/components/VvDropdownItem/VvDropdownItem.es.js +48 -18
  61. package/dist/components/VvDropdownItem/VvDropdownItem.umd.js +1 -1
  62. package/dist/components/VvDropdownOption/VvDropdownOption.es.js +361 -0
  63. package/dist/components/VvDropdownOption/VvDropdownOption.umd.js +1 -0
  64. package/dist/components/VvIcon/VvIcon.es.js +116 -52
  65. package/dist/components/VvIcon/VvIcon.umd.js +1 -1
  66. package/dist/components/VvIcon/VvIcon.vue.d.ts +7 -7
  67. package/dist/components/VvIcon/index.d.ts +2 -2
  68. package/dist/components/VvInputText/VvInputPasswordAction.d.ts +2 -2
  69. package/dist/components/VvInputText/VvInputStepAction.d.ts +1 -1
  70. package/dist/components/VvInputText/VvInputText.es.js +1054 -376
  71. package/dist/components/VvInputText/VvInputText.umd.js +1 -1
  72. package/dist/components/VvInputText/VvInputText.vue.d.ts +107 -20
  73. package/dist/components/VvInputText/VvInputTextActions.d.ts +1 -1
  74. package/dist/components/VvInputText/index.d.ts +67 -3
  75. package/dist/components/VvProgress/VvProgress.es.js +254 -23
  76. package/dist/components/VvProgress/VvProgress.umd.js +1 -1
  77. package/dist/components/VvProgress/VvProgress.vue.d.ts +2 -2
  78. package/dist/components/VvProgress/index.d.ts +1 -1
  79. package/dist/components/VvRadio/VvRadio.es.js +568 -137
  80. package/dist/components/VvRadio/VvRadio.umd.js +1 -1
  81. package/dist/components/VvRadio/VvRadio.vue.d.ts +4 -4
  82. package/dist/components/VvRadio/index.d.ts +6 -6
  83. package/dist/components/VvRadioGroup/VvRadioGroup.es.js +674 -193
  84. package/dist/components/VvRadioGroup/VvRadioGroup.umd.js +1 -1
  85. package/dist/components/VvRadioGroup/VvRadioGroup.vue.d.ts +9 -9
  86. package/dist/components/VvRadioGroup/index.d.ts +4 -4
  87. package/dist/components/VvSelect/VvSelect.es.js +703 -251
  88. package/dist/components/VvSelect/VvSelect.umd.js +1 -1
  89. package/dist/components/VvSelect/VvSelect.vue.d.ts +24 -17
  90. package/dist/components/VvSelect/index.d.ts +8 -8
  91. package/dist/components/VvTextarea/VvTextarea.es.js +747 -272
  92. package/dist/components/VvTextarea/VvTextarea.umd.js +1 -1
  93. package/dist/components/VvTextarea/VvTextarea.vue.d.ts +21 -14
  94. package/dist/components/VvTextarea/index.d.ts +7 -7
  95. package/dist/components/VvTooltip/VvTooltip.es.js +252 -24
  96. package/dist/components/VvTooltip/VvTooltip.umd.js +1 -1
  97. package/dist/components/VvTooltip/VvTooltip.vue.d.ts +7 -7
  98. package/dist/components/VvTooltip/index.d.ts +2 -2
  99. package/dist/components/index.es.js +3676 -2007
  100. package/dist/components/index.umd.js +1 -1
  101. package/dist/composables/dropdown/useInjectDropdown.d.ts +1 -1
  102. package/dist/composables/dropdown/useProvideDropdown.d.ts +3 -3
  103. package/dist/composables/group/useInjectedGroupState.d.ts +2 -2
  104. package/dist/composables/group/useProvideGroupState.d.ts +1 -1
  105. package/dist/composables/useComponentFocus.d.ts +1 -1
  106. package/dist/composables/useComponentIcon.d.ts +7 -7
  107. package/dist/composables/useDebouncedInput.d.ts +4 -1
  108. package/dist/composables/useDefaults.d.ts +2 -0
  109. package/dist/composables/useModifiers.d.ts +1 -1
  110. package/dist/composables/useOptions.d.ts +2 -2
  111. package/dist/composables/useTextCount.d.ts +3 -3
  112. package/dist/composables/useUniqueId.d.ts +1 -1
  113. package/dist/composables/useVolver.d.ts +1 -1
  114. package/dist/constants.d.ts +30 -0
  115. package/dist/directives/index.es.js +288 -0
  116. package/dist/directives/index.umd.js +1 -0
  117. package/dist/directives/v-tooltip.es.js +285 -0
  118. package/dist/directives/v-tooltip.umd.js +1 -0
  119. package/dist/icons.es.js +38 -23
  120. package/dist/icons.umd.js +1 -1
  121. package/dist/index.d.ts +0 -1
  122. package/dist/index.es.js +115 -3269
  123. package/dist/index.umd.js +1 -1
  124. package/dist/props/index.d.ts +215 -23
  125. package/dist/resolvers/unplugin.d.ts +14 -8
  126. package/dist/resolvers/unplugin.es.js +94 -33
  127. package/dist/resolvers/unplugin.umd.js +1 -1
  128. package/dist/stories/Combobox/Combobox.settings.d.ts +44 -0
  129. package/dist/stories/Dropdown/Dropdown.settings.d.ts +3 -2
  130. package/dist/stories/InputText/InputText.settings.d.ts +53 -0
  131. package/dist/stories/argTypes.d.ts +1 -1
  132. package/package.json +167 -63
  133. package/src/Volver.ts +60 -26
  134. package/src/assets/icons/detailed.json +1 -1
  135. package/src/assets/icons/normal.json +1 -1
  136. package/src/assets/icons/simple.json +1 -1
  137. package/src/components/VvAccordion/VvAccordion.vue +19 -22
  138. package/src/components/VvAccordion/index.ts +12 -4
  139. package/src/components/VvAccordionGroup/VvAccordionGroup.vue +19 -10
  140. package/src/components/VvAccordionGroup/index.ts +8 -0
  141. package/src/components/VvAction/VvAction.vue +144 -0
  142. package/src/components/VvAction/index.ts +5 -0
  143. package/src/components/VvBadge/VvBadge.vue +2 -2
  144. package/src/components/VvBadge/index.ts +1 -1
  145. package/src/components/VvBreadcrumb/VvBreadcrumb.vue +3 -3
  146. package/src/components/VvButton/VvButton.vue +41 -124
  147. package/src/components/VvButton/index.ts +16 -88
  148. package/src/components/VvButtonGroup/VvButtonGroup.vue +4 -7
  149. package/src/components/VvButtonGroup/index.ts +1 -1
  150. package/src/components/VvCard/VvCard.vue +2 -2
  151. package/src/components/VvCheckbox/VvCheckbox.vue +3 -7
  152. package/src/components/VvCheckbox/index.ts +11 -7
  153. package/src/components/VvCheckboxGroup/VvCheckboxGroup.vue +7 -10
  154. package/src/components/VvCheckboxGroup/index.ts +1 -1
  155. package/src/components/VvCombobox/VvCombobox.vue +85 -57
  156. package/src/components/VvCombobox/index.ts +12 -10
  157. package/src/components/VvDialog/VvDialog.vue +28 -11
  158. package/src/components/VvDialog/index.ts +5 -2
  159. package/src/components/VvDropdown/VvDropdown.vue +6 -5
  160. package/src/components/VvDropdown/VvDropdownAction.vue +46 -0
  161. package/src/components/VvDropdown/VvDropdownOption.vue +72 -0
  162. package/src/components/VvDropdown/index.ts +6 -11
  163. package/src/components/VvIcon/VvIcon.vue +3 -3
  164. package/src/components/VvIcon/index.ts +3 -3
  165. package/src/components/VvInputText/VvInputClearAction.ts +2 -2
  166. package/src/components/VvInputText/VvInputPasswordAction.ts +3 -4
  167. package/src/components/VvInputText/VvInputStepAction.ts +3 -2
  168. package/src/components/VvInputText/VvInputText.vue +128 -35
  169. package/src/components/VvInputText/VvInputTextActions.ts +5 -8
  170. package/src/components/VvInputText/index.ts +62 -1
  171. package/src/components/VvProgress/VvProgress.vue +2 -2
  172. package/src/components/VvProgress/index.ts +1 -1
  173. package/src/components/VvRadio/VvRadio.vue +3 -7
  174. package/src/components/VvRadio/index.ts +11 -7
  175. package/src/components/VvRadioGroup/VvRadioGroup.vue +7 -10
  176. package/src/components/VvRadioGroup/index.ts +1 -1
  177. package/src/components/VvSelect/VvSelect.vue +4 -4
  178. package/src/components/VvSelect/index.ts +3 -5
  179. package/src/components/VvTextarea/VvTextarea.vue +4 -4
  180. package/src/components/VvTextarea/index.ts +1 -1
  181. package/src/components/VvTooltip/VvTooltip.vue +2 -2
  182. package/src/components/VvTooltip/index.ts +3 -3
  183. package/src/composables/dropdown/useInjectDropdown.ts +2 -2
  184. package/src/composables/dropdown/useProvideDropdown.ts +9 -11
  185. package/src/composables/group/useInjectedGroupState.ts +1 -1
  186. package/src/composables/group/useProvideGroupState.ts +1 -1
  187. package/src/composables/useComponentIcon.ts +1 -1
  188. package/src/composables/useDebouncedInput.ts +10 -3
  189. package/src/composables/useDefaults.ts +89 -0
  190. package/src/composables/useModifiers.ts +8 -9
  191. package/src/composables/useOptions.ts +1 -1
  192. package/src/composables/useVolver.ts +2 -2
  193. package/src/constants.ts +36 -0
  194. package/src/directives/index.ts +1 -1
  195. package/src/directives/v-tooltip.ts +2 -2
  196. package/src/index.ts +0 -2
  197. package/src/props/index.ts +111 -19
  198. package/src/resolvers/unplugin.ts +96 -49
  199. package/src/stories/Accordion/Accordion.stories.mdx +8 -2
  200. package/src/stories/Accordion/Accordion.test.ts +21 -15
  201. package/src/stories/Accordion/AccordionSlots.stories.mdx +8 -8
  202. package/src/stories/AccordionGroup/AccordionGroup.stories.mdx +17 -1
  203. package/src/stories/AccordionGroup/AccordionGroup.test.ts +18 -12
  204. package/src/stories/AccordionGroup/AccordionGroupSlots.stories.mdx +3 -2
  205. package/src/stories/Breadcrumb/Breadcrumb.stories.mdx +2 -1
  206. package/src/stories/Button/Button.stories.mdx +4 -2
  207. package/src/stories/Button/Button.test.ts +3 -1
  208. package/src/stories/Button/ButtonModifiers.stories.mdx +2 -2
  209. package/src/stories/Button/ButtonSlots.stories.mdx +8 -7
  210. package/src/stories/Button/ButtonState.stories.mdx +2 -11
  211. package/src/stories/Card/Card.stories.mdx +2 -1
  212. package/src/stories/Checkbox/Checkbox.stories.mdx +2 -1
  213. package/src/stories/CheckboxGroup/CheckboxGroup.stories.mdx +2 -1
  214. package/src/stories/CheckboxGroup/CheckboxGroupSlots.stories.mdx +2 -1
  215. package/src/stories/Combobox/Combobox.settings.ts +44 -0
  216. package/src/stories/Combobox/Combobox.stories.mdx +40 -1
  217. package/src/stories/Dialog/Dialog.stories.mdx +2 -1
  218. package/src/stories/Dropdown/Dropdown.settings.ts +3 -2
  219. package/src/stories/Dropdown/Dropdown.stories.mdx +14 -12
  220. package/src/stories/Dropdown/DropdownMultilevel.stories.mdx +56 -0
  221. package/src/stories/Dropdown/DropdownSlots.stories.mdx +14 -13
  222. package/src/stories/Icon/Icon.stories.mdx +2 -1
  223. package/src/stories/Icon/IconsCollection.stories.mdx +2 -1
  224. package/src/stories/InputText/InputText.settings.ts +53 -0
  225. package/src/stories/InputText/InputText.stories.mdx +42 -1
  226. package/src/stories/InputText/InputText.test.ts +5 -2
  227. package/src/stories/Progress/Progress.stories.mdx +2 -1
  228. package/src/stories/Radio/Radio.stories.mdx +2 -1
  229. package/src/stories/RadioGroup/RadioGroup.stories.mdx +2 -1
  230. package/src/stories/RadioGroup/RadioGroupSlots.stories.mdx +2 -1
  231. package/src/stories/Select/Select.stories.mdx +2 -1
  232. package/src/stories/Textarea/Textarea.stories.mdx +2 -1
  233. package/src/stories/Tooltip/Tooltip.stories.mdx +2 -1
  234. package/src/stories/Tooltip/TooltipDirective.stories.mdx +2 -1
  235. package/src/stories/argTypes.ts +2 -2
  236. package/src/types/group.d.ts +5 -0
@@ -1,36 +1,89 @@
1
- import { defineComponent as ie, unref as i, openBlock as g, createBlock as C, mergeProps as V, createCommentVNode as _, createElementBlock as O, normalizeClass as Ee, toDisplayString as ne, createElementVNode as W, renderSlot as F, normalizeProps as j, guardReactiveProps as q, withDirectives as Ae, isRef as Ie, vModelDynamic as _e, createTextVNode as De, createVNode as Ce } from "vue";
2
- import { iconExists as x, Icon as Te, addIcon as Pe } from "@iconify/vue";
3
- function B(t) {
4
- return Array.isArray(t) ? t.filter((n) => isString(n)).join(" ") : t;
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) {
15
+ return null;
16
+ }
17
+ value = value[fields[i]];
18
+ }
19
+ return value;
20
+ }
21
+ } else {
22
+ return null;
23
+ }
24
+ }
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));
27
+ }
28
+ function isString(value) {
29
+ return typeof value === "string" || value instanceof String;
30
+ }
31
+ function joinLines(errors) {
32
+ if (Array.isArray(errors)) {
33
+ return errors.filter((e) => isString(e)).join(" ");
34
+ }
35
+ return errors;
5
36
  }
6
- function Oe(t, n) {
37
+ function HintSlotFactory(parentProps, parentSlots) {
7
38
  const {
8
- invalid: e,
9
- valid: l,
10
- hint: d,
11
- loading: v
12
- } = n, {
13
- hintLabel: u,
14
- modelValue: T,
15
- valid: y,
16
- validLabel: f,
17
- invalid: s,
18
- invalidLabel: a,
19
- ...S
20
- } = toRefs(t), c = resolveFieldData(S, "loading"), m = resolveFieldData(S, "loadingLabel"), w = computed(() => s.value ? !!(s.value && e || a != null && a.value && Array.isArray(a.value) && a.value.length > 0 || a != null && a.value && !isEmpty(a)) : !1), H = computed(
21
- () => !!(u && u.value || d)
22
- ), b = computed(
23
- () => !!(f && f.value || l)
24
- ), D = computed(
25
- () => !!(c != null && c.value && v || c != null && c.value && (m != null && m.value))
26
- ), N = computed(
27
- () => H.value || b.value || w.value || D.value
39
+ invalid: invalidSlot,
40
+ valid: validSlot,
41
+ hint: hintSlot,
42
+ loading: loadingSlot
43
+ } = parentSlots;
44
+ const {
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
28
81
  );
29
82
  return {
30
- hasInvalid: w,
31
- hasHint: H,
32
- hasValid: b,
33
- hasLoading: D,
83
+ hasInvalid,
84
+ hasHint,
85
+ hasValid,
86
+ hasLoading,
34
87
  HintSlot: {
35
88
  name: "HintSlot",
36
89
  props: {
@@ -39,30 +92,37 @@ function Oe(t, n) {
39
92
  default: () => ({})
40
93
  }
41
94
  },
42
- setup(P) {
43
- const R = computed(() => {
44
- const I = toReactive({
45
- hintLabel: u,
46
- modelValue: T,
47
- valid: y,
48
- validLabel: f,
49
- invalid: s,
50
- invalidLabel: a,
51
- loading: c,
52
- loadingLabel: m,
53
- ...P.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
54
107
  });
55
- return s != null && s.value ? (e == null ? void 0 : e(I)) || B(a == null ? void 0 : a.value) || (u == null ? void 0 : u.value) : y != null && y.value ? (l == null ? void 0 : l(I)) || B(f == null ? void 0 : f.value) || (u == null ? void 0 : u.value) : c != null && c.value ? (v == null ? void 0 : v(I)) || B(m == null ? void 0 : m.value) || (u == null ? void 0 : u.value) : (d == null ? void 0 : d(I)) || B(u == null ? void 0 : u.value) || (u == null ? void 0 : u.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);
56
116
  });
57
117
  return {
58
- isVisible: N,
59
- hasInvalid: w,
60
- hasValid: b,
61
- hintContent: R
118
+ isVisible,
119
+ hasInvalid,
120
+ hasValid,
121
+ hintContent
62
122
  };
63
123
  },
64
124
  render() {
65
- if (this.isVisible)
125
+ if (this.isVisible) {
66
126
  return h(
67
127
  "small",
68
128
  {
@@ -70,11 +130,12 @@ function Oe(t, n) {
70
130
  },
71
131
  this.hintContent
72
132
  );
133
+ }
73
134
  }
74
135
  }
75
136
  };
76
137
  }
77
- const He = {
138
+ const VvIconProps = {
78
139
  /**
79
140
  * Color
80
141
  */
@@ -98,7 +159,7 @@ const He = {
98
159
  */
99
160
  name: {
100
161
  type: String,
101
- required: !0
162
+ required: true
102
163
  },
103
164
  /**
104
165
  * By default 'vv'
@@ -167,102 +228,276 @@ const He = {
167
228
  modifiers: {
168
229
  type: [String, Array]
169
230
  }
170
- }, Re = {
231
+ };
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);
271
+ }
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;
293
+ });
294
+ }
295
+ const __default__$1 = {
171
296
  name: "VvIcon"
172
- }, A = /* @__PURE__ */ ie({
173
- ...Re,
174
- props: He,
175
- setup(t) {
176
- const n = t, e = ref(!0), l = useVolver(), { modifiers: d } = toRefs(n), v = useBemModifiers("vv-icon", d), u = computed(() => n.provider || (l == null ? void 0 : l.provider)), T = computed(() => {
177
- const s = n.name ?? "", a = `@${u.value}:${n.prefix}:${n.name}`;
178
- return x(s) ? s : x(a) ? a : (l == null ? void 0 : l.iconsCollections.find(
179
- (S) => {
180
- const c = `@${u.value}:${S.prefix}:${s}`;
181
- if (x(c))
182
- return c;
183
- }
184
- )) || s;
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);
185
309
  });
186
- function y(s) {
187
- let a = null;
188
- if (typeof window > "u") {
189
- const { JSDOM: w } = require("jsdom");
190
- a = new w().window;
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;
191
326
  }
192
- return (a ? new a.DOMParser() : new window.DOMParser()).parseFromString(s, "text/html").querySelector("svg");
327
+ });
328
+ function getSvgContent(svg) {
329
+ let dom = null;
330
+ if (typeof window === "undefined") {
331
+ const { JSDOM } = require("jsdom");
332
+ dom = new JSDOM().window;
333
+ }
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;
193
338
  }
194
- function f(s) {
195
- const a = y(s), S = (a == null ? void 0 : a.innerHTML.trim()) || "";
196
- a && S && Pe(`@${u.value}:${n.prefix}:${n.name}`, {
197
- body: S,
198
- // Set height and width from svg content
199
- height: a.viewBox.baseVal.height,
200
- width: a.viewBox.baseVal.width
201
- });
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
+ }
202
365
  }
203
- return l && (n.src && !x(`@${u.value}:${n.prefix}:${n.name}`) ? (e.value = !1, l.fetchIcon(n.src).then((s) => {
204
- s && (f(s), e.value = !0);
205
- }).catch((s) => {
206
- throw new Error(`During fetch icon: ${s == null ? void 0 : s.message}`);
207
- })) : n.svg && f(n.svg)), (s, a) => i(e) ? (g(), C(i(Te), V({
208
- key: 0,
209
- class: i(v)
210
- }, {
211
- inline: s.inline,
212
- width: s.width,
213
- height: s.height,
214
- horizontalFlip: s.horizontalFlip,
215
- verticalFlip: s.verticalFlip,
216
- flip: s.flip,
217
- rotate: s.rotate,
218
- color: s.color,
219
- onLoad: s.onLoad,
220
- icon: i(T)
221
- }), null, 16, ["class"])) : _("", !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
+ };
222
383
  }
223
384
  });
224
- var K = /* @__PURE__ */ ((t) => (t.left = "left", t.right = "right", t.top = "top", t.bottom = "bottom", t))(K || {}), le = /* @__PURE__ */ ((t) => (t.topStart = "top-start", t.topEnd = "top-end", t.bottomStart = "bottom-start", t.bottomEnd = "bottom-end", t.leftStart = "left-start", t.leftEnd = "left-end", t.rightStart = "right-start", t.rightEnd = "right-end", t))(le || {}), Y = /* @__PURE__ */ ((t) => (t.before = "before", t.after = "after", t))(Y || {});
225
- const xe = {
385
+ const LinkProps = {
386
+ /**
387
+ * The router-link/nuxt-link property, if it is defined the button is rendered as a ruouter-link or nuxt-link.
388
+ * @see Documentation of [router-link](https://router.vuejs.org/api/#router-link) and [nuxt-link](https://nuxtjs.org/api/components-nuxt-link/)
389
+ */
390
+ to: {
391
+ type: [String, Object]
392
+ },
393
+ /**
394
+ * Anchor href
395
+ */
396
+ href: String,
397
+ /**
398
+ * Anchor target
399
+ */
400
+ target: {
401
+ type: String,
402
+ validator: (value) => Object.values(AnchorTarget).includes(value)
403
+ },
404
+ /**
405
+ * Anchor rel
406
+ */
407
+ rel: {
408
+ type: String,
409
+ default: "noopener noreferrer"
410
+ }
411
+ };
412
+ const ValidProps = {
413
+ /**
414
+ * Valid status
415
+ */
226
416
  valid: Boolean,
417
+ /**
418
+ * Valid label
419
+ */
227
420
  validLabel: [String, Array]
228
- }, Be = {
421
+ };
422
+ const InvalidProps = {
423
+ /**
424
+ * Invalid status
425
+ */
229
426
  invalid: Boolean,
427
+ /**
428
+ * Invalid label
429
+ */
230
430
  invalidLabel: [String, Array]
231
- }, Ve = {
431
+ };
432
+ const LoadingProps = {
433
+ /**
434
+ * Loading status
435
+ */
232
436
  loading: Boolean,
233
- loadingLabel: String
234
- }, Ne = {
437
+ /**
438
+ * Loading label
439
+ */
440
+ loadingLabel: {
441
+ type: String,
442
+ default: "Loading..."
443
+ }
444
+ };
445
+ const DisabledProps = {
235
446
  /**
236
447
  * Whether the form control is disabled
237
448
  */
238
449
  disabled: Boolean
239
- }, Me = {
450
+ };
451
+ const ActiveProps = {
452
+ /**
453
+ * Whether the item is active
454
+ */
455
+ active: Boolean
456
+ };
457
+ const PressedProps = {
458
+ /**
459
+ * Whether the item is pressed
460
+ */
461
+ pressed: Boolean
462
+ };
463
+ const LabelProps = {
464
+ /**
465
+ * The item label
466
+ */
467
+ label: [String, Number]
468
+ };
469
+ const ReadonlyProps = {
240
470
  /**
241
471
  * The value is not editable
242
472
  */
243
473
  readonly: Boolean
244
- }, ke = {
474
+ };
475
+ const ModifiersProps = {
245
476
  /**
246
477
  * Component BEM modifiers
247
478
  */
248
479
  modifiers: [String, Array]
249
- }, $e = {
480
+ };
481
+ const HintProps = {
250
482
  hintLabel: { type: String, default: "" }
251
- }, Le = {
483
+ };
484
+ const CountProps = {
252
485
  /**
253
486
  * Show character limit
254
487
  */
255
488
  count: {
256
489
  type: [Boolean, String],
257
- default: !1,
258
- validator: (t) => [!0, !1, "limit", "countdown"].includes(t)
490
+ default: false,
491
+ validator: (value) => [true, false, "limit", "countdown"].includes(value)
259
492
  }
260
- }, Ue = {
493
+ };
494
+ const DebounceProps = {
261
495
  /**
262
496
  * Milliseconds to wait before emitting the input event
263
497
  */
264
498
  debounce: [Number, String]
265
- }, We = {
499
+ };
500
+ const IconProps = {
266
501
  /**
267
502
  * VvIcon name or props
268
503
  * @see VVIcon
@@ -273,64 +508,156 @@ const xe = {
273
508
  */
274
509
  iconPosition: {
275
510
  type: String,
276
- default: Y.before,
277
- validation: (t) => Object.values(Y).includes(t)
511
+ default: Position.before,
512
+ validation: (value) => Object.values(Position).includes(value)
278
513
  }
279
- }, Fe = {
514
+ };
515
+ const TabindexProps = {
280
516
  /**
281
517
  * Global attribute tabindex
282
518
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex
283
519
  */
284
520
  tabindex: { type: [String, Number], default: 0 }
285
- }, je = {
521
+ };
522
+ const FloatingLabelProps = {
286
523
  /**
287
524
  * If true the label will be floating
288
525
  */
289
526
  floating: Boolean
290
- }, qe = {
527
+ };
528
+ const IdProps = {
291
529
  /**
292
530
  * Global attribute id
293
531
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id
294
532
  */
295
533
  id: [String, Number]
296
534
  };
297
- K.bottom;
298
- const ze = {
299
- ...qe,
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,
300
623
  /**
301
624
  * Input / Textarea name
302
625
  * Name of the form control. Submitted with the form as part of a name/value pair
303
626
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#name
304
627
  */
305
- name: { type: String, required: !0 }
306
- }, Xe = {
628
+ name: { type: String, required: true }
629
+ };
630
+ const AutofocusProps = {
307
631
  /**
308
632
  * Global attribute autofocus
309
633
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus
310
634
  */
311
635
  autofocus: Boolean
312
- }, Ke = {
636
+ };
637
+ const AutocompleteProps = {
313
638
  /**
314
639
  * Global attribute autocomplete
315
640
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete
316
641
  */
317
642
  autocomplete: { type: String, default: "off" }
318
- }, Ye = {
319
- ...ze,
320
- ...Xe,
321
- ...Ke,
322
- ...Fe,
323
- ...Ne,
324
- ...Me,
325
- ...xe,
326
- ...Be,
327
- ...$e,
328
- ...Ve,
329
- ...ke,
330
- ...Le,
331
- ...Ue,
332
- ...We,
333
- ...je,
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,
334
661
  /**
335
662
  * Input / Textarea minlength
336
663
  * Minimum length (number of characters) of value
@@ -358,12 +685,24 @@ const ze = {
358
685
  * Available for all input types except color
359
686
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#required
360
687
  */
361
- required: Boolean,
688
+ required: Boolean
689
+ };
690
+ ({
691
+ ...DisabledProps,
692
+ ...LabelProps,
693
+ ...PressedProps,
694
+ ...ActiveProps,
695
+ ...LinkProps,
362
696
  /**
363
- * <label> value for the Input / Textarea
697
+ * Button type
364
698
  */
365
- label: String
366
- }, o = {
699
+ type: {
700
+ type: String,
701
+ default: ButtonType.button,
702
+ validator: (value) => Object.values(ButtonType).includes(value)
703
+ }
704
+ });
705
+ const INPUT_TYPES = {
367
706
  TEXT: "text",
368
707
  PASSWORD: "password",
369
708
  NUMBER: "number",
@@ -377,15 +716,18 @@ const ze = {
377
716
  DATETIME_LOCAL: "datetime-local",
378
717
  MONTH: "month",
379
718
  WEEK: "week"
380
- }, E = {
719
+ };
720
+ const TYPES_ICON = {
381
721
  PASSWORD_SHOW: "eye-on",
382
722
  PASSWORD_HIDE: "eye-off",
383
723
  DATE: "calendar",
384
724
  TIME: "time",
385
725
  COLOR: "color",
386
726
  SEARCH: "close"
387
- }, Je = ["update:modelValue", "focus", "blur", "keyup"], Ge = {
388
- ...Ye,
727
+ };
728
+ const VvInputTextEvents = ["update:modelValue", "focus", "blur", "keyup"];
729
+ const VvInputTextProps = {
730
+ ...InputTextareaProps,
389
731
  /**
390
732
  * Input value
391
733
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#value
@@ -397,8 +739,8 @@ const ze = {
397
739
  */
398
740
  type: {
399
741
  type: String,
400
- default: o.TEXT,
401
- validator: (t) => Object.values(o).includes(t)
742
+ default: INPUT_TYPES.TEXT,
743
+ validator: (value) => Object.values(INPUT_TYPES).includes(value)
402
744
  },
403
745
  /**
404
746
  * Minimum value
@@ -436,7 +778,7 @@ const ze = {
436
778
  */
437
779
  iconShowPassword: {
438
780
  type: String,
439
- default: E.PASSWORD_SHOW
781
+ default: TYPES_ICON.PASSWORD_SHOW
440
782
  },
441
783
  /**
442
784
  * VvIcon name for hide password button
@@ -444,7 +786,7 @@ const ze = {
444
786
  */
445
787
  iconHidePassword: {
446
788
  type: String,
447
- default: E.PASSWORD_HIDE
789
+ default: TYPES_ICON.PASSWORD_HIDE
448
790
  },
449
791
  /**
450
792
  * VvIcon name for clear button
@@ -452,7 +794,7 @@ const ze = {
452
794
  */
453
795
  iconClear: {
454
796
  type: String,
455
- default: E.SEARCH
797
+ default: TYPES_ICON.SEARCH
456
798
  },
457
799
  /**
458
800
  * Label for step up button
@@ -488,15 +830,76 @@ const ze = {
488
830
  labelClear: {
489
831
  type: String,
490
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
491
893
  }
492
- }, se = defineComponent({
894
+ };
895
+ const VvInputPasswordAction = defineComponent({
493
896
  components: {
494
- VvIcon: A
897
+ VvIcon: _sfc_main$1
495
898
  },
496
899
  props: {
497
900
  disabled: {
498
901
  type: Boolean,
499
- default: !1
902
+ default: false
500
903
  },
501
904
  labelShow: {
502
905
  type: String,
@@ -508,31 +911,36 @@ const ze = {
508
911
  },
509
912
  iconShow: {
510
913
  type: String,
511
- default: E.PASSWORD_SHOW
914
+ default: TYPES_ICON.PASSWORD_SHOW
512
915
  },
513
916
  iconHide: {
514
917
  type: String,
515
- default: E.PASSWORD_HIDE
918
+ default: TYPES_ICON.PASSWORD_HIDE
516
919
  }
517
920
  },
518
921
  emits: ["toggle-password"],
519
- setup(t, { emit: n }) {
520
- const e = ref(!1), l = computed(
521
- () => e.value ? t.iconHide : t.iconShow
922
+ setup(props, { emit }) {
923
+ const active = ref(false);
924
+ const activeIcon = computed(
925
+ () => active.value ? props.iconHide : props.iconShow
522
926
  );
523
- function d(v) {
524
- v == null || v.stopPropagation(), t.disabled || (e.value = !e.value, n("toggle-password", e.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
+ }
525
933
  }
526
934
  return {
527
- active: e,
528
- activeIcon: l,
529
- onClick: d
935
+ active,
936
+ activeIcon,
937
+ onClick
530
938
  };
531
939
  },
532
940
  render() {
533
- const t = h(A, {
941
+ const icon = h(_sfc_main$1, {
534
942
  name: this.activeIcon,
535
- class: "vv-input-text__action-icon"
943
+ class: "vv-input-text__icon"
536
944
  });
537
945
  return h(
538
946
  "button",
@@ -543,56 +951,63 @@ const ze = {
543
951
  type: "button",
544
952
  onClick: this.onClick
545
953
  },
546
- t
954
+ icon
547
955
  );
548
956
  }
549
- }), z = defineComponent({
957
+ });
958
+ const VvInputStepAction = defineComponent({
550
959
  components: {
551
- VvIcon: A
960
+ VvIcon: _sfc_main$1
552
961
  },
553
962
  props: {
554
963
  disabled: {
555
964
  type: Boolean,
556
- default: !1
965
+ default: false
557
966
  },
558
967
  label: {
559
968
  type: String
560
969
  },
561
970
  mode: {
562
971
  type: String,
563
- validator: (t) => ["up", "down"].includes(t),
972
+ validator: (v) => ["up", "down"].includes(v),
564
973
  default: "up"
565
974
  }
566
975
  },
567
976
  emits: ["step-up", "step-down"],
568
- setup(t, { emit: n }) {
569
- const e = computed(() => t.mode === "up");
570
- return {
571
- isUp: e,
572
- onClick: (d) => {
573
- d == null || d.stopPropagation(), t.disabled || n(e.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");
574
983
  }
575
984
  };
985
+ return {
986
+ isUp,
987
+ onClick
988
+ };
576
989
  },
577
990
  render() {
578
991
  return h("button", {
579
992
  class: [
580
- "vv-input-text__action-chevron",
993
+ "vv-input-text__action vv-input-text__action-chevron",
581
994
  this.isUp && "vv-input-text__action-chevron-up"
582
995
  ],
583
996
  disabled: this.disabled,
584
997
  ariaLabel: this.label,
998
+ type: "button",
585
999
  onClick: this.onClick
586
1000
  });
587
1001
  }
588
- }), ae = defineComponent({
1002
+ });
1003
+ const VvInputClearAction = defineComponent({
589
1004
  components: {
590
- VvIcon: A
1005
+ VvIcon: _sfc_main$1
591
1006
  },
592
1007
  props: {
593
1008
  disabled: {
594
1009
  type: Boolean,
595
- default: !1
1010
+ default: false
596
1011
  },
597
1012
  label: {
598
1013
  type: String,
@@ -604,18 +1019,21 @@ const ze = {
604
1019
  }
605
1020
  },
606
1021
  emits: ["clear"],
607
- setup(t, { emit: n }) {
608
- function e(l) {
609
- l == null || l.stopPropagation(), t.disabled || n("clear");
1022
+ setup(props, { emit }) {
1023
+ function onClick(e) {
1024
+ e == null ? void 0 : e.stopPropagation();
1025
+ if (!props.disabled) {
1026
+ emit("clear");
1027
+ }
610
1028
  }
611
1029
  return {
612
- onClick: e
1030
+ onClick
613
1031
  };
614
1032
  },
615
1033
  render() {
616
- const t = h(A, {
1034
+ const icon = h(_sfc_main$1, {
617
1035
  name: this.icon,
618
- class: "vv-input-text__action-icon"
1036
+ class: "vv-input-text__icon"
619
1037
  });
620
1038
  return h(
621
1039
  "button",
@@ -626,51 +1044,54 @@ const ze = {
626
1044
  type: "button",
627
1045
  onClick: this.onClick
628
1046
  },
629
- t
1047
+ icon
630
1048
  );
631
1049
  }
632
1050
  });
633
- function X(t, n) {
1051
+ function VvInputTextActionsFactory(type, parentProps) {
634
1052
  return {
635
1053
  name: "VvInputTextActions",
636
1054
  components: {
637
- VvIcon: A,
638
- VvInputPasswordAction: se,
639
- VvInputStepAction: z,
640
- VvInputClearAction: ae
1055
+ VvIcon: _sfc_main$1,
1056
+ VvInputPasswordAction,
1057
+ VvInputStepAction,
1058
+ VvInputClearAction
641
1059
  },
642
1060
  setup() {
1061
+ const isDisabled = computed(() => {
1062
+ return parentProps.disabled || parentProps.readonly;
1063
+ });
643
1064
  return {
644
- isDisabled: computed(() => n.disabled || n.readonly),
645
- labelStepUp: n.labelStepUp,
646
- labelStepDown: n.labelStepDown,
647
- labelShowPassword: n.labelShowPassword,
648
- labelHidePassword: n.labelHidePassword,
649
- labelClear: n.labelClear,
650
- iconShowPassword: n.iconShowPassword,
651
- iconHidePassword: n.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
652
1073
  };
653
1074
  },
654
1075
  render() {
655
- let e = null;
656
- switch (t) {
657
- case o.SEARCH: {
658
- const { onClear: l } = this.$attrs;
659
- e = [
660
- h(ae, {
1076
+ let actions = null;
1077
+ switch (type) {
1078
+ case INPUT_TYPES.SEARCH: {
1079
+ const { onClear } = this.$attrs;
1080
+ actions = [
1081
+ h(VvInputClearAction, {
661
1082
  disabled: this.isDisabled,
662
1083
  label: this.labelShowPassword,
663
- onClear: l
1084
+ onClear
664
1085
  })
665
1086
  ];
666
1087
  break;
667
1088
  }
668
- case o.PASSWORD: {
669
- const { onTogglePassword: l } = this.$attrs;
670
- e = [
671
- h(se, {
1089
+ case INPUT_TYPES.PASSWORD: {
1090
+ const { onTogglePassword } = this.$attrs;
1091
+ actions = [
1092
+ h(VvInputPasswordAction, {
672
1093
  disabled: this.isDisabled,
673
- onTogglePassword: l,
1094
+ onTogglePassword,
674
1095
  labelShow: this.labelShowPassword,
675
1096
  labelHide: this.labelHidePassword,
676
1097
  iconShow: this.iconShowPassword,
@@ -679,206 +1100,463 @@ function X(t, n) {
679
1100
  ];
680
1101
  break;
681
1102
  }
682
- case o.NUMBER: {
683
- const { onStepUp: l, onStepDown: d } = this.$attrs;
684
- e = [
685
- h(z, {
1103
+ case INPUT_TYPES.NUMBER: {
1104
+ const { onStepUp, onStepDown } = this.$attrs;
1105
+ actions = [
1106
+ h(VvInputStepAction, {
686
1107
  mode: "up",
687
- disabled: this.isDisabled || n.max !== void 0 && n.modelValue === n.max,
1108
+ disabled: this.isDisabled || parentProps.max !== void 0 && parentProps.modelValue === parentProps.max,
688
1109
  label: this.labelStepUp,
689
- onStepUp: l,
690
- onStepDown: d
1110
+ onStepUp,
1111
+ onStepDown
691
1112
  }),
692
- h(z, {
1113
+ h(VvInputStepAction, {
693
1114
  mode: "down",
694
- disabled: this.isDisabled || n.min !== void 0 && n.modelValue === n.min,
1115
+ disabled: this.isDisabled || parentProps.min !== void 0 && parentProps.modelValue === parentProps.min,
695
1116
  label: this.labelStepDown,
696
- onStepUp: l,
697
- onStepDown: d
1117
+ onStepUp,
1118
+ onStepDown
698
1119
  })
699
1120
  ];
700
1121
  break;
701
1122
  }
702
1123
  }
703
- return Array.isArray(e) ? h("div", { class: "vv-input-text__actions-group" }, e) : e;
1124
+ return Array.isArray(actions) ? h("div", { class: "vv-input-text__actions-group" }, actions) : actions;
1125
+ }
1126
+ };
1127
+ }
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);
1146
+ }
1147
+ });
1148
+ }
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
1156
+ };
1157
+ }
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)
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
+ });
1183
+ return {
1184
+ hasIcon,
1185
+ hasIconLeft,
1186
+ hasIconRight,
1187
+ hasIconTop,
1188
+ hasIconBottom,
1189
+ hasIconBefore,
1190
+ hasIconAfter
1191
+ };
1192
+ }
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;
704
1218
  }
1219
+ return length.value;
1220
+ });
1221
+ return {
1222
+ length,
1223
+ gap,
1224
+ formatted
705
1225
  };
706
1226
  }
707
- const Qe = ["for"], Ze = { class: "vv-input-text__wrapper" }, et = {
1227
+ const _hoisted_1 = ["for"];
1228
+ const _hoisted_2 = { class: "vv-input-text__wrapper" };
1229
+ const _hoisted_3 = {
708
1230
  key: 0,
709
1231
  class: "vv-input-text__input-before"
710
- }, tt = { class: "vv-input-text__inner" }, ot = ["id"], nt = {
1232
+ };
1233
+ const _hoisted_4 = ["onClick"];
1234
+ const _hoisted_5 = ["id"];
1235
+ const _hoisted_6 = {
711
1236
  key: 1,
1237
+ class: "vv-input-text__unit"
1238
+ };
1239
+ const _hoisted_7 = {
1240
+ key: 5,
712
1241
  class: "vv-input-text__input-after"
713
- }, st = {
714
- key: 2,
1242
+ };
1243
+ const _hoisted_8 = {
1244
+ key: 6,
715
1245
  class: "vv-input-text__limit"
716
- }, at = {
1246
+ };
1247
+ const __default__ = {
717
1248
  name: "VvInputText"
718
- }, rt = /* @__PURE__ */ ie({
719
- ...at,
720
- props: Ge,
721
- emits: Je,
722
- setup(t, { emit: n }) {
723
- const e = t, l = useSlots(), d = ref(), {
724
- id: v,
725
- icon: u,
726
- iconPosition: T,
727
- label: y,
728
- modelValue: f,
729
- count: s,
730
- valid: a,
731
- invalid: S,
732
- loading: c
733
- } = toRefs(e), m = useUniqueId(v), w = computed(() => `${m.value}-hint`), H = computed(
734
- () => e.floating && isEmpty(e.placeholder) ? " " : e.placeholder
735
- ), b = useDebouncedInput(f, n, e.debounce), { focused: D } = useComponentFocus(d, n), N = useElementVisibility(d);
736
- watch(N, (r) => {
737
- r && e.autofocus && (D.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
+ }
738
1307
  });
739
- const P = ref(!1), R = computed(() => e.type === o.PASSWORD), I = () => {
740
- P.value = !P.value;
741
- }, re = computed(
742
- () => e.type === o.TIME || e.type === o.DATETIME_LOCAL || e.type === o.DATE || e.type === o.WEEK || e.type === o.MONTH
743
- ), ue = computed(() => e.type === o.NUMBER), J = () => {
744
- $.value && (d.value.stepUp(), b.value = unref(d).value);
745
- }, G = () => {
746
- $.value && (d.value.stepDown(), b.value = unref(d).value);
747
- }, de = computed(() => e.type === o.SEARCH), Q = () => {
748
- b.value = void 0;
749
- }, { hasIcon: Z, hasIconBefore: ee, hasIconAfter: M } = useComponentIcon(
750
- u,
751
- T
752
- ), k = computed(() => {
753
- switch (e.type) {
754
- case o.COLOR:
755
- return { name: E.COLOR };
756
- case o.DATE:
757
- case o.DATETIME_LOCAL:
758
- case o.WEEK:
759
- case o.MONTH:
760
- return { name: E.DATE };
761
- case o.TIME:
762
- return { name: E.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 };
763
1348
  default:
764
1349
  return "";
765
1350
  }
766
- }), { formatted: ce } = useTextCount(b, {
767
- mode: e.count,
768
- upperLimit: e.maxlength,
769
- lowerLimit: e.minlength
770
- }), $ = computed(() => !e.disabled && !e.readonly), pe = computed(
771
- () => $.value ? e.tabindex : -1
772
- ), te = computed(() => !isEmpty(f)), ve = computed(() => {
773
- if (S.value === !0)
774
- return !0;
775
- if (a.value === !0)
776
- return !1;
777
- }), { modifiers: fe } = toRefs(e), me = useBemModifiers(
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(
778
1373
  "vv-input-text",
779
- fe,
1374
+ modifiers,
780
1375
  computed(() => ({
781
- valid: a.value,
782
- invalid: S.value,
783
- loading: c.value,
784
- disabled: e.disabled,
785
- readonly: e.readonly,
786
- "icon-before": ee.value,
787
- "icon-after": M.value || !isEmpty(k),
788
- floating: e.floating && !isEmpty(e.label),
789
- dirty: te.value,
790
- focus: D.value
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
791
1387
  }))
792
- ), he = computed(() => {
793
- const r = (() => R.value && P.value || re.value && !te.value && !D.value ? o.TEXT : e.type)(), p = {
794
- type: r,
795
- name: e.name,
796
- tabindex: pe.value,
797
- disabled: e.disabled,
798
- readonly: e.readonly,
799
- required: e.required,
800
- autocomplete: e.autocomplete,
801
- "aria-invalid": ve.value,
802
- "aria-describedby": !oe.value && be.value ? w.value : void 0,
803
- "aria-errormessage": oe.value ? w.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
804
1410
  };
805
- return (r === o.DATE || r === o.MONTH || r === o.WEEK || r === o.TIME || r === o.DATETIME_LOCAL || r === o.NUMBER) && (p.step = e.step, p.max = String(e.max), p.min = String(e.min)), (r === o.TEXT || r === o.SEARCH || r === o.URL || r === o.TEL || r === o.EMAIL || r === o.PASSWORD || r === o.NUMBER) && (p.placeholder = H.value), (r === o.TEXT || r === o.SEARCH || r === o.URL || r === o.TEL || r === o.EMAIL || r === o.PASSWORD) && (p.minlength = e.minlength, p.maxlength = e.maxlength, p.pattern = e.pattern), r === o.EMAIL && (p.multiple = e.multiple), p;
806
- }), L = computed(() => ({
807
- valid: e.valid,
808
- invalid: e.invalid,
809
- modelValue: e.modelValue,
810
- togglePassword: I,
811
- stepUp: J,
812
- stepDown: G,
813
- clear: Q
814
- })), { HintSlot: Se, hasHint: be, hasInvalid: oe } = Oe(e, l), ge = X(
815
- o.PASSWORD,
816
- e
817
- ), ye = X(
818
- o.NUMBER,
819
- e
820
- ), we = X(
821
- o.SEARCH,
822
- e
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
823
1442
  );
824
- return (r, p) => (g(), O("div", {
825
- class: Ee(i(me))
826
- }, [
827
- i(y) ? (g(), O("label", {
828
- key: 0,
829
- for: i(m),
830
- class: "vv-input-text__label"
831
- }, ne(i(y)), 9, Qe)) : _("", !0),
832
- W("div", Ze, [
833
- r.$slots.before ? (g(), O("div", et, [
834
- F(r.$slots, "before", j(q(i(L))))
835
- ])) : _("", !0),
836
- W("div", tt, [
837
- i(ee) ? (g(), C(A, V({
838
- key: 0,
839
- class: "vv-input-text__icon"
840
- }, i(Z)), null, 16)) : _("", !0),
841
- Ae(W("input", V({
842
- id: i(m),
843
- ref_key: "input",
844
- ref: d,
845
- "onUpdate:modelValue": p[0] || (p[0] = (U) => Ie(b) ? b.value = U : null)
846
- }, i(he), {
847
- onKeyup: p[1] || (p[1] = (U) => n("keyup", U))
848
- }), null, 16, ot), [
849
- [_e, i(b)]
850
- ]),
851
- i(M) || i(k) ? (g(), C(A, V({
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({
852
1530
  key: 1,
853
1531
  class: "vv-input-text__icon vv-input-text__icon-after"
854
- }, i(M) ? i(Z) : i(k)), null, 16)) : i(R) ? (g(), C(i(ge), {
1532
+ }, unref(hasIconAfter) ? unref(hasIcon) : unref(defaultAfterIcon)), null, 16)) : unref(isPassword) && !_ctx.hideActions && unref(isClickable) ? (openBlock(), createBlock(unref(PasswordInputActions), {
855
1533
  key: 2,
856
- onTogglePassword: I
857
- })) : i(ue) ? (g(), C(i(ye), {
1534
+ onTogglePassword
1535
+ })) : unref(isNumber) && !_ctx.hideActions && unref(isClickable) ? (openBlock(), createBlock(unref(NumberInputActions), {
858
1536
  key: 3,
859
- onStepUp: J,
860
- onStepDown: G
861
- })) : i(de) ? (g(), C(i(we), {
1537
+ onStepUp,
1538
+ onStepDown
1539
+ })) : unref(isSearch) && !_ctx.hideActions && unref(isClickable) ? (openBlock(), createBlock(unref(SearchInputActions), {
862
1540
  key: 4,
863
- onClear: Q
864
- })) : _("", !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)
865
1551
  ]),
866
- r.$slots.after ? (g(), O("div", nt, [
867
- F(r.$slots, "after", j(q(i(L))))
868
- ])) : _("", !0),
869
- i(s) ? (g(), O("span", st, [
870
- F(r.$slots, "count", j(q(i(L))), () => [
871
- De(ne(i(ce)), 1)
872
- ])
873
- ])) : _("", !0)
874
- ]),
875
- Ce(i(Se), {
876
- id: i(w),
877
- class: "vv-input-text__hint"
878
- }, null, 8, ["id"])
879
- ], 2));
1552
+ createVNode(unref(HintSlot), {
1553
+ id: unref(hasDescribedBy),
1554
+ class: "vv-input-text__hint"
1555
+ }, null, 8, ["id"])
1556
+ ], 2);
1557
+ };
880
1558
  }
881
1559
  });
882
1560
  export {
883
- rt as default
1561
+ _sfc_main as default
884
1562
  };