@volverjs/ui-vue 0.0.1-beta.12 → 0.0.1-beta.16

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 (431) hide show
  1. package/bin/icons.cjs +73 -0
  2. package/bin/icons.js +75 -0
  3. package/dist/Volver.d.ts +15 -2
  4. package/dist/components/VvAccordion/VvAccordion.es.js +133 -236
  5. package/dist/components/VvAccordion/VvAccordion.umd.js +1 -1
  6. package/dist/components/VvAccordion/VvAccordion.vue.d.ts +32 -97
  7. package/dist/components/VvAccordion/index.d.ts +46 -0
  8. package/dist/components/VvAccordionGroup/VvAccordionGroup.es.js +199 -277
  9. package/dist/components/VvAccordionGroup/VvAccordionGroup.umd.js +1 -1
  10. package/dist/components/VvAccordionGroup/VvAccordionGroup.vue.d.ts +44 -151
  11. package/dist/components/VvAccordionGroup/{VvAccordionGroup.d.ts → index.d.ts} +9 -13
  12. package/dist/components/VvBadge/VvBadge.es.js +42 -151
  13. package/dist/components/VvBadge/VvBadge.umd.js +1 -1
  14. package/dist/components/VvBadge/VvBadge.vue.d.ts +12 -53
  15. package/dist/components/VvBadge/{VvBadge.d.ts → index.d.ts} +0 -0
  16. package/dist/components/VvBreadcrumb/VvBreadcrumb.es.js +55 -168
  17. package/dist/components/VvBreadcrumb/VvBreadcrumb.umd.js +1 -1
  18. package/dist/components/VvBreadcrumb/VvBreadcrumb.vue.d.ts +24 -104
  19. package/dist/components/VvBreadcrumb/{VvBreadcrumb.d.ts → index.d.ts} +1 -1
  20. package/dist/components/VvButton/VvButton.es.js +298 -312
  21. package/dist/components/VvButton/VvButton.umd.js +1 -1
  22. package/dist/components/VvButton/VvButton.vue.d.ts +91 -163
  23. package/dist/components/VvButton/{VvButton.d.ts → index.d.ts} +46 -9
  24. package/dist/components/VvButtonGroup/VvButtonGroup.es.js +59 -172
  25. package/dist/components/VvButtonGroup/VvButtonGroup.umd.js +1 -1
  26. package/dist/components/VvButtonGroup/VvButtonGroup.vue.d.ts +30 -125
  27. package/dist/components/VvButtonGroup/{VvButtonGroup.d.ts → index.d.ts} +0 -0
  28. package/dist/components/VvCard/VvCard.es.js +55 -166
  29. package/dist/components/VvCard/VvCard.umd.js +1 -1
  30. package/dist/components/VvCard/VvCard.vue.d.ts +16 -61
  31. package/dist/components/VvCard/{VvCard.d.ts → index.d.ts} +1 -1
  32. package/dist/components/VvCheckbox/VvCheckbox.es.js +344 -0
  33. package/dist/components/VvCheckbox/VvCheckbox.umd.js +1 -0
  34. package/dist/components/VvCheckbox/VvCheckbox.vue.d.ts +87 -0
  35. package/dist/components/VvCheckbox/index.d.ts +86 -0
  36. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js +415 -0
  37. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.umd.js +1 -0
  38. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.vue.d.ts +113 -0
  39. package/dist/components/{VvCheckGroup/VvCheckGroup.d.ts → VvCheckboxGroup/index.d.ts} +10 -10
  40. package/dist/components/VvDialog/VvDialog.es.js +108 -230
  41. package/dist/components/VvDialog/VvDialog.umd.js +1 -1
  42. package/dist/components/VvDialog/VvDialog.vue.d.ts +28 -132
  43. package/dist/components/VvDialog/{VvDialog.d.ts → index.d.ts} +2 -6
  44. package/dist/components/VvDropdown/VvDropdown.es.js +167 -186
  45. package/dist/components/VvDropdown/VvDropdown.umd.js +1 -1
  46. package/dist/components/VvDropdown/VvDropdown.vue.d.ts +34 -136
  47. package/dist/components/VvDropdown/{VvDropdown.d.ts → index.d.ts} +7 -3
  48. package/dist/components/VvIcon/VvIcon.es.js +62 -174
  49. package/dist/components/VvIcon/VvIcon.umd.js +1 -1
  50. package/dist/components/VvIcon/VvIcon.vue.d.ts +36 -150
  51. package/dist/components/VvIcon/{VvIcon.d.ts → index.d.ts} +9 -0
  52. package/dist/components/VvInputText/VvInputClearAction.d.ts +36 -0
  53. package/dist/components/VvInputText/VvInputPasswordAction.d.ts +56 -0
  54. package/dist/components/VvInputText/VvInputStepAction.d.ts +37 -0
  55. package/dist/components/VvInputText/VvInputText.es.js +586 -577
  56. package/dist/components/VvInputText/VvInputText.umd.js +1 -2
  57. package/dist/components/VvInputText/VvInputText.vue.d.ts +187 -275
  58. package/dist/components/VvInputText/VvInputTextActions.d.ts +1 -1
  59. package/dist/components/VvInputText/index.d.ts +175 -0
  60. package/dist/components/VvNativeSelect/VvNativeSelect.es.js +299 -347
  61. package/dist/components/VvNativeSelect/VvNativeSelect.umd.js +1 -2
  62. package/dist/components/VvNativeSelect/VvNativeSelect.vue.d.ts +78 -190
  63. package/dist/components/VvNativeSelect/{VvNativeSelect.d.ts → index.d.ts} +35 -8
  64. package/dist/components/VvProgress/VvProgress.es.js +45 -162
  65. package/dist/components/VvProgress/VvProgress.umd.js +1 -1
  66. package/dist/components/VvProgress/VvProgress.vue.d.ts +17 -103
  67. package/dist/components/VvProgress/{VvProgress.d.ts → index.d.ts} +1 -7
  68. package/dist/components/VvRadio/VvRadio.es.js +292 -267
  69. package/dist/components/VvRadio/VvRadio.umd.js +1 -1
  70. package/dist/components/VvRadio/VvRadio.vue.d.ts +52 -122
  71. package/dist/components/VvRadio/index.d.ts +64 -0
  72. package/dist/components/VvRadioGroup/VvRadioGroup.es.js +342 -380
  73. package/dist/components/VvRadioGroup/VvRadioGroup.umd.js +1 -2
  74. package/dist/components/VvRadioGroup/VvRadioGroup.vue.d.ts +58 -213
  75. package/dist/components/VvRadioGroup/{VvRadioGroup.d.ts → index.d.ts} +2 -2
  76. package/dist/components/VvSelect/VvSelect.es.js +556 -510
  77. package/dist/components/VvSelect/VvSelect.umd.js +1 -2
  78. package/dist/components/VvSelect/VvSelect.vue.d.ts +75 -240
  79. package/dist/components/VvSelect/{VvSelect.d.ts → index.d.ts} +12 -5
  80. package/dist/components/VvTextarea/VvTextarea.es.js +372 -481
  81. package/dist/components/VvTextarea/VvTextarea.umd.js +1 -2
  82. package/dist/components/VvTextarea/VvTextarea.vue.d.ts +103 -299
  83. package/dist/components/VvTextarea/{VvTextarea.d.ts → index.d.ts} +36 -13
  84. package/dist/components/common/HintSlot.d.ts +10 -4
  85. package/dist/components/index.d.ts +13 -6
  86. package/dist/components/index.es.js +2070 -895
  87. package/dist/components/index.umd.js +1 -2
  88. package/dist/composables/debouncedInput/useDebouncedInput.d.ts +2 -2
  89. package/dist/composables/focus/useComponentFocus.d.ts +3 -3
  90. package/dist/composables/group/types/IAccordionGroupState.d.ts +1 -3
  91. package/dist/composables/group/types/IGroupState.d.ts +2 -2
  92. package/dist/composables/group/useInjectedGroupState.d.ts +4 -4
  93. package/dist/composables/group/useProvideGroupState.d.ts +1 -1
  94. package/dist/composables/icons/useComponentIcons.d.ts +2 -2
  95. package/dist/composables/textLimit/useTextLimit.d.ts +0 -3
  96. package/dist/constants.d.ts +4 -4
  97. package/dist/icons.d.ts +1881 -0
  98. package/dist/icons.es.js +4 -6
  99. package/dist/icons.umd.js +1 -1
  100. package/dist/index.es.js +2113 -932
  101. package/dist/index.umd.js +1 -2
  102. package/dist/props/index.d.ts +9 -3
  103. package/dist/resolvers/unplugin.d.ts +27 -0
  104. package/dist/resolvers/unplugin.es.js +40 -0
  105. package/dist/resolvers/unplugin.umd.js +1 -0
  106. package/dist/stories/Accordion/Accordion.test.d.ts +4 -0
  107. package/dist/stories/Badge/Badge.test.d.ts +2 -0
  108. package/dist/stories/Breadcrumb/Breadcrumb.test.d.ts +2 -0
  109. package/dist/stories/Button/Button.test.d.ts +3 -8
  110. package/dist/stories/Card/Card.test.d.ts +3 -0
  111. package/dist/stories/Dialog/Dialog.test.d.ts +2 -0
  112. package/dist/stories/Dropdown/Dropdown.test.d.ts +2 -0
  113. package/dist/stories/Icon/IconList.vue.d.ts +1 -43
  114. package/dist/stories/InputText/InputText.test.d.ts +6 -0
  115. package/dist/stories/Radio/Radio.test.d.ts +3 -0
  116. package/dist/stories/RadioGroup/RadioGroup.test.d.ts +8 -0
  117. package/dist/stories/Select/Select.test.d.ts +3 -0
  118. package/dist/stories/Textarea/Textarea.test.d.ts +8 -0
  119. package/dist/stories/utils.d.ts +1 -3
  120. package/dist/test/sleep.d.ts +1 -0
  121. package/dist/utils/ObjectUtilities.d.ts +82 -95
  122. package/env.d.ts +1 -0
  123. package/package.json +102 -68
  124. package/src/Volver.ts +32 -3
  125. package/src/assets/icons/detailed.json +1 -1
  126. package/src/assets/icons/normal.json +1 -1
  127. package/src/assets/icons/simple.json +1 -1
  128. package/src/components/VvAccordion/VvAccordion.vue +80 -76
  129. package/src/components/VvAccordion/index.ts +69 -0
  130. package/src/components/VvAccordionGroup/VvAccordionGroup.vue +77 -41
  131. package/src/components/VvAccordionGroup/{VvAccordionGroup.ts → index.ts} +8 -12
  132. package/src/components/VvBadge/VvBadge.vue +14 -10
  133. package/src/components/VvBadge/{VvBadge.ts → index.ts} +0 -0
  134. package/src/components/VvBreadcrumb/VvBreadcrumb.vue +18 -19
  135. package/src/components/VvBreadcrumb/{VvBreadcrumb.ts → index.ts} +1 -1
  136. package/src/components/VvButton/VvButton.vue +123 -113
  137. package/src/components/VvButton/index.ts +147 -0
  138. package/src/components/VvButtonGroup/VvButtonGroup.vue +21 -17
  139. package/src/components/VvButtonGroup/{VvButtonGroup.ts → index.ts} +0 -0
  140. package/src/components/VvCard/VvCard.vue +20 -22
  141. package/src/components/VvCard/{VvCard.ts → index.ts} +0 -0
  142. package/src/components/VvCheckbox/VvCheckbox.vue +124 -0
  143. package/src/components/VvCheckbox/index.ts +94 -0
  144. package/src/components/{VvCheckGroup/VvCheckGroup.vue → VvCheckboxGroup/VvCheckboxGroup.vue} +49 -54
  145. package/src/components/{VvCheckGroup/VvCheckGroup.ts → VvCheckboxGroup/index.ts} +9 -9
  146. package/src/components/VvDialog/VvDialog.vue +47 -50
  147. package/src/components/VvDialog/index.ts +10 -0
  148. package/src/components/VvDropdown/VvDropdown.vue +61 -40
  149. package/src/components/VvDropdown/{VvDropdown.ts → index.ts} +8 -4
  150. package/src/components/VvIcon/VvIcon.vue +31 -25
  151. package/src/components/VvIcon/{VvIcon.ts → index.ts} +9 -0
  152. package/src/components/VvInputText/VvInputClearAction.ts +53 -0
  153. package/src/components/VvInputText/VvInputPasswordAction.ts +70 -0
  154. package/src/components/VvInputText/VvInputStepAction.ts +49 -0
  155. package/src/components/VvInputText/VvInputText.vue +168 -170
  156. package/src/components/VvInputText/VvInputTextActions.ts +54 -108
  157. package/src/components/VvInputText/index.ts +135 -0
  158. package/src/components/VvNativeSelect/VvNativeSelect.vue +130 -68
  159. package/src/components/VvNativeSelect/{VvNativeSelect.ts → index.ts} +26 -7
  160. package/src/components/VvProgress/VvProgress.vue +25 -26
  161. package/src/components/VvProgress/{VvProgress.ts → index.ts} +4 -7
  162. package/src/components/VvRadio/VvRadio.vue +81 -108
  163. package/src/components/VvRadio/index.ts +78 -0
  164. package/src/components/VvRadioGroup/VvRadioGroup.vue +45 -45
  165. package/src/components/VvRadioGroup/{VvRadioGroup.ts → index.ts} +1 -1
  166. package/src/components/VvSelect/VvSelect.vue +90 -69
  167. package/src/components/VvSelect/{VvSelect.ts → index.ts} +12 -5
  168. package/src/components/VvTextarea/VvTextarea.vue +121 -128
  169. package/src/components/VvTextarea/{VvTextarea.ts → index.ts} +31 -11
  170. package/src/components/common/HintSlot.ts +157 -136
  171. package/src/components/index.ts +13 -6
  172. package/src/composables/debouncedInput/useDebouncedInput.ts +21 -15
  173. package/src/composables/focus/useComponentFocus.ts +6 -8
  174. package/src/composables/group/types/IAccordionGroupState.ts +1 -3
  175. package/src/composables/group/types/IGroupState.ts +2 -2
  176. package/src/composables/group/useInjectedGroupState.ts +20 -30
  177. package/src/composables/group/useProvideGroupState.ts +1 -2
  178. package/src/composables/icons/useComponentIcons.ts +2 -3
  179. package/src/composables/options/useOptions.ts +3 -0
  180. package/src/composables/textLimit/useTextLimit.ts +1 -4
  181. package/src/composables/useModifiers.ts +13 -15
  182. package/src/constants.ts +5 -7
  183. package/src/directives/{.README → .gitkeep} +0 -0
  184. package/src/icons.ts +7 -0
  185. package/src/index.ts +0 -1
  186. package/src/props/index.ts +7 -1
  187. package/src/resolvers/unplugin.ts +103 -0
  188. package/src/shims.d.ts +11 -0
  189. package/src/stories/Accordion/Accordion.stories.mdx +10 -9
  190. package/src/stories/Accordion/Accordion.test.ts +37 -0
  191. package/src/stories/Accordion/AccordionSlots.stories.mdx +40 -25
  192. package/src/stories/AccordionGroup/AccordionGroup.stories.mdx +10 -16
  193. package/src/stories/AccordionGroup/{accordionGroupTest.js → AccordionGroup.test.js} +15 -17
  194. package/src/stories/AccordionGroup/AccordionGroupCollapse.stories.mdx +38 -0
  195. package/src/stories/AccordionGroup/{AccordionItems.stories.mdx → AccordionGroupItems.stories.mdx} +7 -13
  196. package/src/stories/Badge/Badge.stories.mdx +8 -8
  197. package/src/stories/Badge/Badge.test.ts +16 -0
  198. package/src/stories/Badge/BadgeColor.stories.mdx +6 -7
  199. package/src/stories/Badge/BadgeDot.stories.mdx +4 -3
  200. package/src/stories/Badge/BadgeModifiers.stories.mdx +7 -6
  201. package/src/stories/Breadcrumb/Breadcrumb.stories.mdx +15 -7
  202. package/src/stories/Breadcrumb/Breadcrumb.test.ts +49 -0
  203. package/src/stories/Breadcrumb/BreadcrumbMultiline.stories.mdx +15 -7
  204. package/src/stories/Button/Button.stories.mdx +16 -17
  205. package/src/stories/Button/Button.test.ts +8 -12
  206. package/src/stories/Button/ButtonActive.stories.mdx +2 -1
  207. package/src/stories/Button/ButtonBadge.stories.mdx +2 -2
  208. package/src/stories/Button/ButtonDisabled.stories.mdx +1 -1
  209. package/src/stories/Button/ButtonIcon.stories.mdx +6 -3
  210. package/src/stories/Button/ButtonIconPosition.stories.mdx +1 -1
  211. package/src/stories/Button/ButtonLink.stories.mdx +1 -19
  212. package/src/stories/Button/ButtonLoading.stories.mdx +4 -4
  213. package/src/stories/Button/ButtonModifiers.stories.mdx +1 -1
  214. package/src/stories/Button/ButtonPressed.stories.mdx +31 -0
  215. package/src/stories/Button/ButtonSlots.stories.mdx +1 -1
  216. package/src/stories/ButtonGroup/ButtonGroup.stories.mdx +5 -6
  217. package/src/stories/ButtonGroup/{ButtonGroupTest.js → ButtonGroup.test.js} +6 -28
  218. package/src/stories/ButtonGroup/ButtonGroupAction.stories.mdx +5 -6
  219. package/src/stories/ButtonGroup/ButtonGroupActionQuiet.stories.mdx +3 -4
  220. package/src/stories/ButtonGroup/ButtonGroupBlock.stories.mdx +3 -4
  221. package/src/stories/ButtonGroup/ButtonGroupCompact.stories.mdx +3 -4
  222. package/src/stories/ButtonGroup/ButtonGroupRounded.stories.mdx +3 -4
  223. package/src/stories/ButtonGroup/ButtonGroupToggle.stories.mdx +11 -12
  224. package/src/stories/ButtonGroup/ButtonGroupVertical.stories.mdx +3 -4
  225. package/src/stories/Card/Card.stories.mdx +7 -5
  226. package/src/stories/Card/Card.test.ts +26 -0
  227. package/src/stories/Card/CardSlots.stories.mdx +5 -5
  228. package/src/stories/Card/CardVariant.stories.mdx +5 -4
  229. package/src/stories/Checkbox/Checkbox.stories.mdx +51 -0
  230. package/src/stories/Checkbox/Checkbox.test.js +115 -0
  231. package/src/stories/Checkbox/CheckboxBinary.stories.mdx +76 -0
  232. package/src/stories/{Check/CheckDisabled.stories.mdx → Checkbox/CheckboxDisabled.stories.mdx} +7 -7
  233. package/src/stories/Checkbox/CheckboxError.stories.mdx +43 -0
  234. package/src/stories/Checkbox/CheckboxHintLabel.stories.mdx +35 -0
  235. package/src/stories/{Check/CheckReadonly.stories.mdx → Checkbox/CheckboxReadonly.stories.mdx} +6 -8
  236. package/src/stories/Checkbox/CheckboxSlots.stories.mdx +69 -0
  237. package/src/stories/{Check/CheckSwitch.stories.mdx → Checkbox/CheckboxSwitch.stories.mdx} +8 -8
  238. package/src/stories/CheckboxGroup/CheckboxGroup.stories.mdx +69 -0
  239. package/src/stories/CheckboxGroup/CheckboxGroupDisabled.stories.mdx +26 -0
  240. package/src/stories/CheckboxGroup/CheckboxGroupError.stories.mdx +28 -0
  241. package/src/stories/CheckboxGroup/CheckboxGroupHintLabel.stories.mdx +27 -0
  242. package/src/stories/CheckboxGroup/CheckboxGroupLabel.stories.mdx +26 -0
  243. package/src/stories/{CheckGroup/CheckGroupOptionLabel.stories.mdx → CheckboxGroup/CheckboxGroupOptionLabel.stories.mdx} +14 -11
  244. package/src/stories/{CheckGroup/CheckGroupOptionValue.stories.mdx → CheckboxGroup/CheckboxGroupOptionValue.stories.mdx} +13 -10
  245. package/src/stories/{CheckGroup/CheckGroupOptions.stories.mdx → CheckboxGroup/CheckboxGroupOptions.stories.mdx} +8 -8
  246. package/src/stories/CheckboxGroup/CheckboxGroupReadonly.stories.mdx +26 -0
  247. package/src/stories/CheckboxGroup/CheckboxGroupSlots.stories.mdx +152 -0
  248. package/src/stories/CheckboxGroup/CheckboxGroupValid.stories.mdx +28 -0
  249. package/src/stories/CheckboxGroup/CheckboxGroupVertical.stories.mdx +26 -0
  250. package/src/stories/Dialog/Dialog.stories.mdx +5 -5
  251. package/src/stories/Dialog/Dialog.test.ts +26 -0
  252. package/src/stories/Dialog/DialogAutoClose.stories.mdx +1 -1
  253. package/src/stories/Dialog/DialogSize.stories.mdx +1 -1
  254. package/src/stories/Dropdown/Dropdown.stories.mdx +11 -7
  255. package/src/stories/Dropdown/Dropdown.test.ts +80 -0
  256. package/src/stories/Dropdown/DropdownDisabled.stories.mdx +9 -2
  257. package/src/stories/Dropdown/DropdownLabelNoResults.stories.mdx +2 -2
  258. package/src/stories/Dropdown/DropdownMaxValues.stories.mdx +4 -2
  259. package/src/stories/Dropdown/DropdownMultiple.stories.mdx +4 -2
  260. package/src/stories/Dropdown/DropdownOptions.stories.mdx +4 -4
  261. package/src/stories/Dropdown/DropdownUseObject.stories.mdx +4 -2
  262. package/src/stories/Icon/Icon.stories.mdx +8 -8
  263. package/src/stories/Icon/{IconTest.js → Icon.test.js} +2 -5
  264. package/src/stories/Icon/IconList.vue +5 -6
  265. package/src/stories/Icon/IconPrefix.stories.mdx +2 -2
  266. package/src/stories/Icon/IconRemote.stories.mdx +2 -2
  267. package/src/stories/Icon/IconsList.stories.mdx +2 -18
  268. package/src/stories/InputText/InputText.stories.mdx +25 -19
  269. package/src/stories/InputText/InputText.test.ts +156 -0
  270. package/src/stories/InputText/InputTextAutocomplete.stories.mdx +9 -2
  271. package/src/stories/InputText/InputTextAutofocus.stories.mdx +6 -3
  272. package/src/stories/InputText/InputTextDisabled.stories.mdx +10 -2
  273. package/src/stories/InputText/InputTextError.stories.mdx +10 -2
  274. package/src/stories/InputText/InputTextFloating.stories.mdx +10 -3
  275. package/src/stories/InputText/InputTextHintLabel.stories.mdx +10 -2
  276. package/src/stories/InputText/InputTextIcon.stories.mdx +6 -2
  277. package/src/stories/InputText/InputTextIconPosition.stories.mdx +10 -3
  278. package/src/stories/InputText/InputTextLabel.stories.mdx +8 -2
  279. package/src/stories/InputText/InputTextLoading.stories.mdx +10 -2
  280. package/src/stories/InputText/InputTextMax.stories.mdx +10 -3
  281. package/src/stories/InputText/InputTextMaxLength.stories.mdx +22 -5
  282. package/src/stories/InputText/InputTextMin.stories.mdx +10 -3
  283. package/src/stories/InputText/InputTextMinLength.stories.mdx +9 -2
  284. package/src/stories/InputText/InputTextPlaceholder.stories.mdx +8 -2
  285. package/src/stories/InputText/InputTextReadonly.stories.mdx +6 -2
  286. package/src/stories/InputText/InputTextSlots.stories.mdx +4 -5
  287. package/src/stories/InputText/InputTextStep.stories.mdx +9 -3
  288. package/src/stories/InputText/InputTextType.stories.mdx +110 -13
  289. package/src/stories/InputText/InputTextValid.stories.mdx +10 -2
  290. package/src/stories/NativeSelect/NativeSelect.stories.mdx +15 -11
  291. package/src/stories/NativeSelect/NativeSelect.test.js +151 -0
  292. package/src/stories/NativeSelect/NativeSelectDisabled.stories.mdx +6 -7
  293. package/src/stories/NativeSelect/NativeSelectError.stories.mdx +7 -3
  294. package/src/stories/NativeSelect/NativeSelectHintLabel.stories.mdx +7 -3
  295. package/src/stories/NativeSelect/NativeSelectIconLeftRight.stories.mdx +14 -12
  296. package/src/stories/NativeSelect/NativeSelectLoading.stories.mdx +7 -3
  297. package/src/stories/NativeSelect/NativeSelectOptions.stories.mdx +44 -38
  298. package/src/stories/NativeSelect/NativeSelectReadonly.stories.mdx +19 -11
  299. package/src/stories/NativeSelect/NativeSelectUseObject.stories.mdx +26 -30
  300. package/src/stories/NativeSelect/NativeSelectValid.stories.mdx +7 -3
  301. package/src/stories/NativeSelect/NativeSelectValueKey.stories.mdx +30 -30
  302. package/src/stories/Progress/Progress.stories.mdx +8 -11
  303. package/src/stories/Progress/{ProgressTest.js → Progress.test.js} +4 -10
  304. package/src/stories/Progress/ProgressDeterminate.stories.mdx +3 -6
  305. package/src/stories/Radio/Radio.stories.mdx +11 -17
  306. package/src/stories/Radio/Radio.test.ts +52 -0
  307. package/src/stories/Radio/RadioDisabled.stories.mdx +4 -7
  308. package/src/stories/Radio/RadioError.stories.mdx +8 -28
  309. package/src/stories/Radio/RadioHintLabel.stories.mdx +6 -7
  310. package/src/stories/Radio/RadioSlots.stories.mdx +21 -7
  311. package/src/stories/RadioGroup/RadioGroup.stories.mdx +20 -27
  312. package/src/stories/RadioGroup/RadioGroup.test.ts +139 -0
  313. package/src/stories/RadioGroup/RadioGroupDisabled.stories.mdx +6 -8
  314. package/src/stories/RadioGroup/RadioGroupError.stories.mdx +9 -11
  315. package/src/stories/RadioGroup/RadioGroupHintLabel.stories.mdx +8 -10
  316. package/src/stories/RadioGroup/RadioGroupLabel.stories.mdx +6 -8
  317. package/src/stories/RadioGroup/RadioGroupOptionLabel.stories.mdx +11 -13
  318. package/src/stories/RadioGroup/RadioGroupOptionValue.stories.mdx +9 -11
  319. package/src/stories/RadioGroup/RadioGroupOptions.stories.mdx +7 -9
  320. package/src/stories/RadioGroup/RadioGroupReadonly.stories.mdx +6 -8
  321. package/src/stories/RadioGroup/RadioGroupSlots.stories.mdx +39 -62
  322. package/src/stories/RadioGroup/RadioGroupValid.stories.mdx +9 -11
  323. package/src/stories/RadioGroup/RadioGroupVertical.stories.mdx +6 -8
  324. package/src/stories/Select/Select.stories.mdx +32 -29
  325. package/src/stories/Select/Select.test.ts +104 -0
  326. package/src/stories/Select/SelectDisabled.stories.mdx +3 -3
  327. package/src/stories/Select/SelectMaxValues.stories.mdx +3 -3
  328. package/src/stories/Select/SelectMultiple.stories.mdx +5 -6
  329. package/src/stories/Select/SelectNative.stories.mdx +6 -8
  330. package/src/stories/Select/SelectOptions.stories.mdx +4 -4
  331. package/src/stories/Select/SelectSearchable.stories.mdx +13 -12
  332. package/src/stories/Select/SelectSeparator.stories.mdx +3 -3
  333. package/src/stories/Select/SelectUseObject.stories.mdx +3 -3
  334. package/src/stories/Textarea/Textarea.stories.mdx +6 -10
  335. package/src/stories/Textarea/Textarea.test.ts +204 -0
  336. package/src/stories/Textarea/TextareaAutoclear.stories.mdx +3 -2
  337. package/src/stories/Textarea/TextareaAutocomplete.stories.mdx +3 -2
  338. package/src/stories/Textarea/TextareaAutofocus.stories.mdx +3 -2
  339. package/src/stories/Textarea/TextareaDebounce.stories.mdx +7 -6
  340. package/src/stories/Textarea/TextareaDisabled.stories.mdx +9 -3
  341. package/src/stories/Textarea/TextareaError.stories.mdx +7 -2
  342. package/src/stories/Textarea/TextareaErrorLabel.stories.mdx +12 -2
  343. package/src/stories/Textarea/TextareaFloating.stories.mdx +7 -2
  344. package/src/stories/Textarea/TextareaHintLabel.stories.mdx +7 -2
  345. package/src/stories/Textarea/TextareaIcon.stories.mdx +3 -2
  346. package/src/stories/Textarea/TextareaIconPosition.stories.mdx +4 -2
  347. package/src/stories/Textarea/TextareaId.stories.mdx +3 -2
  348. package/src/stories/Textarea/TextareaLabel.stories.mdx +3 -2
  349. package/src/stories/Textarea/TextareaLimit.stories.mdx +5 -2
  350. package/src/stories/Textarea/TextareaLoading.stories.mdx +7 -2
  351. package/src/stories/Textarea/TextareaLoadingLabel.stories.mdx +9 -3
  352. package/src/stories/Textarea/TextareaMaxLength.stories.mdx +5 -4
  353. package/src/stories/Textarea/TextareaMinLength.stories.mdx +3 -2
  354. package/src/stories/Textarea/TextareaModifiers.stories.mdx +10 -2
  355. package/src/stories/Textarea/TextareaName.stories.mdx +3 -2
  356. package/src/stories/Textarea/TextareaPlaceholder.stories.mdx +4 -3
  357. package/src/stories/Textarea/TextareaReadonly.stories.mdx +8 -3
  358. package/src/stories/Textarea/TextareaRequired.stories.mdx +3 -2
  359. package/src/stories/Textarea/TextareaResizable.stories.mdx +7 -2
  360. package/src/stories/Textarea/TextareaRowsCols.stories.mdx +4 -2
  361. package/src/stories/Textarea/TextareaSlots.stories.mdx +7 -8
  362. package/src/stories/Textarea/TextareaValid.stories.mdx +7 -1
  363. package/src/stories/Textarea/TextareaValidLabel.stories.mdx +14 -4
  364. package/src/stories/utils.ts +1 -1
  365. package/src/stories/volver-ui-vue.stories.mdx +1 -1
  366. package/src/test/expect.ts +3 -1
  367. package/src/test/sleep.ts +2 -0
  368. package/src/test/types.d.ts +14 -1
  369. package/src/types/{.README → .gitkeep} +0 -0
  370. package/src/utils/ObjectUtilities.ts +247 -241
  371. package/dist/components/VvAccordion/VvAccordion.d.ts +0 -32
  372. package/dist/components/VvAccordion/useAccordionProps.d.ts +0 -16
  373. package/dist/components/VvButton/useButtonGroupProps.d.ts +0 -18
  374. package/dist/components/VvCheck/VvCheck.d.ts +0 -47
  375. package/dist/components/VvCheck/VvCheck.es.js +0 -318
  376. package/dist/components/VvCheck/VvCheck.umd.js +0 -1
  377. package/dist/components/VvCheck/VvCheck.vue.d.ts +0 -165
  378. package/dist/components/VvCheck/useCheckProps.d.ts +0 -16
  379. package/dist/components/VvCheckGroup/VvCheckGroup.es.js +0 -451
  380. package/dist/components/VvCheckGroup/VvCheckGroup.umd.js +0 -2
  381. package/dist/components/VvCheckGroup/VvCheckGroup.vue.d.ts +0 -272
  382. package/dist/components/VvDialog/constants.d.ts +0 -5
  383. package/dist/components/VvInputText/VvInputText.d.ts +0 -73
  384. package/dist/components/VvInputText/constants.d.ts +0 -55
  385. package/dist/components/VvRadio/VvRadio.d.ts +0 -22
  386. package/dist/components/VvRadio/useRadioProps.d.ts +0 -15
  387. package/dist/components/VvTextarea/constants.d.ts +0 -19
  388. package/dist/stories/RadioGroup/RadioOption.test.d.ts +0 -4
  389. package/dist/stories/RadioGroup/RadioProperty.test.d.ts +0 -12
  390. package/dist/stories/RadioGroup/RadioSlots.test.d.ts +0 -6
  391. package/src/assets/icons/index.js +0 -7
  392. package/src/components/VvAccordion/VvAccordion.ts +0 -34
  393. package/src/components/VvAccordion/useAccordionProps.ts +0 -45
  394. package/src/components/VvButton/VvButton.ts +0 -87
  395. package/src/components/VvButton/useButtonGroupProps.ts +0 -43
  396. package/src/components/VvCheck/VvCheck.ts +0 -48
  397. package/src/components/VvCheck/VvCheck.vue +0 -147
  398. package/src/components/VvCheck/useCheckProps.ts +0 -41
  399. package/src/components/VvDialog/VvDialog.ts +0 -17
  400. package/src/components/VvDialog/constants.ts +0 -5
  401. package/src/components/VvInputText/VvInputText.ts +0 -66
  402. package/src/components/VvInputText/constants.ts +0 -34
  403. package/src/components/VvRadio/VvRadio.ts +0 -25
  404. package/src/components/VvRadio/useRadioProps.ts +0 -40
  405. package/src/components/VvTextarea/constants.ts +0 -14
  406. package/src/stories/Accordion/AccordionBordered.stories.mdx +0 -26
  407. package/src/stories/Accordion/AccordionIconRight.stories.mdx +0 -32
  408. package/src/stories/Accordion/accordionTest.js +0 -36
  409. package/src/stories/AccordionGroup/Accordion.stories.mdx +0 -42
  410. package/src/stories/Badge/BadgeTest.js +0 -21
  411. package/src/stories/Button/ButtonSelected.stories.mdx +0 -30
  412. package/src/stories/Check/Check.stories.mdx +0 -62
  413. package/src/stories/Check/CheckBinary.stories.mdx +0 -75
  414. package/src/stories/Check/CheckError.stories.mdx +0 -64
  415. package/src/stories/Check/CheckErrorTests.js +0 -74
  416. package/src/stories/Check/CheckHintLabel.stories.mdx +0 -30
  417. package/src/stories/Check/CheckPropertyTest.js +0 -102
  418. package/src/stories/Check/CheckSlots.stories.mdx +0 -51
  419. package/src/stories/CheckGroup/CheckGroup.stories.mdx +0 -69
  420. package/src/stories/CheckGroup/CheckGroupDisabled.stories.mdx +0 -26
  421. package/src/stories/CheckGroup/CheckGroupError.stories.mdx +0 -28
  422. package/src/stories/CheckGroup/CheckGroupHintLabel.stories.mdx +0 -27
  423. package/src/stories/CheckGroup/CheckGroupLabel.stories.mdx +0 -26
  424. package/src/stories/CheckGroup/CheckGroupReadonly.stories.mdx +0 -26
  425. package/src/stories/CheckGroup/CheckGroupSlots.stories.mdx +0 -152
  426. package/src/stories/CheckGroup/CheckGroupValid.stories.mdx +0 -28
  427. package/src/stories/CheckGroup/CheckGroupVertical.stories.mdx +0 -26
  428. package/src/stories/RadioGroup/RadioOption.test.ts +0 -45
  429. package/src/stories/RadioGroup/RadioProperty.test.ts +0 -87
  430. package/src/stories/RadioGroup/RadioSlots.test.ts +0 -29
  431. package/src/stories/stories.scss +0 -13
@@ -1,4 +1,4 @@
1
- import { ModifiersProps } from '../../props'
1
+ import { ModifiersProps } from '@/props'
2
2
 
3
3
  export const VvProgressProps = {
4
4
  ...ModifiersProps,
@@ -6,7 +6,8 @@ export const VvProgressProps = {
6
6
  * Progress value
7
7
  */
8
8
  value: {
9
- type: [Number, String]
9
+ type: [Number, String],
10
+ default: undefined
10
11
  },
11
12
  /**
12
13
  * Progress max value
@@ -20,9 +21,5 @@ export const VvProgressProps = {
20
21
  ariaLabel: {
21
22
  type: String,
22
23
  default: 'progress-bar'
23
- },
24
- /**
25
- * determinate attribute
26
- */
27
- determinate: { type: Boolean, default: false }
24
+ }
28
25
  }
@@ -1,130 +1,103 @@
1
- <template>
2
- <label :class="radioClass" v-bind="radioAttrs" @click="onClick">
3
- <input
4
- ref="input"
5
- :class="radioInputClass"
6
- v-bind="radioInputAttrs"
7
- @input="onChange" />
8
- <slot :value="modelValue">
9
- {{ label }}
10
- </slot>
11
- </label>
12
- </template>
1
+ <script lang="ts">
2
+ export default {
3
+ name: 'VvRadio'
4
+ }
5
+ </script>
13
6
 
14
7
  <script setup lang="ts">
15
- import type { InputHTMLAttributes, LabelHTMLAttributes } from 'vue'
16
-
17
- import { computed, useAttrs, ref } from 'vue'
18
- import ObjectUtilities from '../../utils/ObjectUtilities'
19
- import { VvRadioProps, VvRadioEvents } from './VvRadio'
20
-
21
- //Composables
22
- import { toRadioInputRefs } from './useRadioProps'
23
- import { useComponentFocus } from '../../composables/focus/useComponentFocus'
8
+ import { computed, ref, useSlots } from 'vue'
9
+ import { contains, equals, removeFromList } from '@/utils/ObjectUtilities'
24
10
  import { useBemModifiers } from '@/composables/useModifiers'
11
+ import {
12
+ VvRadioProps,
13
+ VvRadioEvents,
14
+ useGroupProps
15
+ } from '@/components/VvRadio'
16
+ import { HintSlotFactory } from '@/components/common/HintSlot'
25
17
 
26
- //Props, Emits, Slots e Attrs
18
+ // props, emit and slots
27
19
  const props = defineProps(VvRadioProps)
28
20
  const emit = defineEmits(VvRadioEvents)
29
- const attrs = useAttrs()
21
+ const slots = useSlots()
30
22
 
31
- //Data
32
- const { disabled, readonly, modelValue, valid, error } = toRadioInputRefs(
23
+ // data
24
+ const { disabled, readonly, modelValue, valid, error } = useGroupProps(
33
25
  props,
34
26
  emit
35
27
  )
36
28
 
37
- //Template References
29
+ // template refs
38
30
  const input = ref()
39
31
 
40
- //Component computed
41
- const isChecked = computed(() => {
42
- return Array.isArray(modelValue.value)
43
- ? ObjectUtilities.contains(props.value, modelValue.value)
44
- : ObjectUtilities.equals(props.value, modelValue.value)
45
- })
46
-
47
- // #region FOCUS
48
- const { focused } = useComponentFocus(input, emit)
49
- // #endregion FOCUS
50
-
51
- //Styles & Bindings
52
- const { bemCssClasses: bemRadioClass } = useBemModifiers('vv-input-radio', {
53
- valid,
54
- invalid: error
55
- })
56
- const { bemCssClasses: bemInputRadioClass } = useBemModifiers(
57
- 'vv-input-radio__input',
58
- {
59
- checked: isChecked,
60
- disabled,
61
- readonly
62
- }
32
+ // computed
33
+ const hasId = computed(() =>
34
+ props.id !== undefined ? String(props.id) : undefined
63
35
  )
64
- const radioClass = computed(() => {
65
- const { class: cssClass } = attrs
66
- return {
67
- class: cssClass,
68
- ...bemRadioClass.value
36
+ const isDisabled = computed(() => disabled.value || readonly.value)
37
+ const hasTabindex = computed(() => (isDisabled.value ? -1 : props.tabindex))
38
+ const isInvalid = computed(() => {
39
+ if (props.error === true) {
40
+ return true
69
41
  }
70
- })
71
- const radioInputClass = computed(() => {
72
- return {
73
- 'focus-visible': focused.value,
74
- ...bemInputRadioClass.value
42
+ if (props.valid === true) {
43
+ return false
75
44
  }
45
+ return undefined
76
46
  })
77
- const radioAttrs = computed(() => {
78
- const { id, name, style } = attrs
79
- const dataAttrs = ObjectUtilities.pickBy(attrs, (k: string) =>
80
- k.startsWith('data-')
81
- )
82
- return {
83
- for: (id || name) as string,
84
- style,
85
- ...dataAttrs
86
- } as LabelHTMLAttributes
87
- })
88
- const radioInputAttrs = computed(() => {
89
- const { id = '', name = '' } = attrs as InputHTMLAttributes
90
- return {
91
- type: 'radio',
92
- id: id || name,
93
- name,
94
- value: props.value,
95
- disabled: disabled.value,
96
- readonly: readonly.value,
97
- checked: isChecked.value,
98
- ...radioInputAriaAttrs.value
99
- } as InputHTMLAttributes
100
- })
101
- const radioInputAriaAttrs = computed(() => {
102
- const { name } = attrs
103
- const dataAttrs = ObjectUtilities.pickBy(attrs, (k: string) =>
104
- k.startsWith('aria-')
105
- )
106
- return {
107
- 'aria-label': name,
108
- 'aria-checked': isChecked.value,
109
- ...dataAttrs
47
+ const isChecked = computed(() =>
48
+ Array.isArray(modelValue.value)
49
+ ? contains(props.value, modelValue.value)
50
+ : equals(props.value, modelValue.value)
51
+ )
52
+ const hasValue = computed(() =>
53
+ ['string', 'number', 'boolean'].includes(typeof props.value)
54
+ ? props.value
55
+ : true
56
+ )
57
+ const localModelValue = computed({
58
+ get() {
59
+ return isChecked.value ? hasValue.value : null
60
+ },
61
+ set(newValue) {
62
+ if (Array.isArray(modelValue.value)) {
63
+ modelValue.value = newValue
64
+ ? [...modelValue.value, props.value]
65
+ : removeFromList(props.value, modelValue.value)
66
+ return
67
+ }
68
+ modelValue.value = props.value
69
+ emit('change', newValue)
110
70
  }
111
71
  })
112
72
 
113
- //Methods
114
- function onChange() {
115
- if (!isChecked.value) emit('change', props.value)
116
- modelValue.value = props.value
117
- }
118
- function onClick(event: Event) {
119
- if (!disabled.value) {
120
- emit('click', event)
121
- focused.value = true
122
- }
123
- }
124
- </script>
73
+ // styles
74
+ const { bemCssClasses } = useBemModifiers('vv-radio', {
75
+ valid,
76
+ invalid: error,
77
+ disabled,
78
+ readonly
79
+ })
125
80
 
126
- <script lang="ts">
127
- export default {
128
- inheritAttrs: false
129
- }
81
+ // hint
82
+ const { HintSlot } = HintSlotFactory(props, slots)
130
83
  </script>
84
+
85
+ <template>
86
+ <label :class="bemCssClasses" :for="hasId">
87
+ <input
88
+ :id="hasId"
89
+ ref="input"
90
+ v-model="localModelValue"
91
+ type="radio"
92
+ class="vv-radio__input"
93
+ :name="name"
94
+ :disabled="isDisabled"
95
+ :value="hasValue"
96
+ :tabindex="hasTabindex"
97
+ :aria-invalid="isInvalid" />
98
+ <slot :value="modelValue">
99
+ {{ label }}
100
+ </slot>
101
+ <HintSlot class="vv-radio__hint" :params="{ value: modelValue }" />
102
+ </label>
103
+ </template>
@@ -0,0 +1,78 @@
1
+ import { type ExtractPropTypes, type Ref, toRefs } from 'vue'
2
+ import type { IInputGroupState } from '@/composables/group/types/IInputGroup'
3
+ import { ValidProps, ErrorProps, HintProps } from '@/props'
4
+ import { useInjectedGroupState } from '@/composables/group/useInjectedGroupState'
5
+ import { VV_RADIO_GROUP } from '@/constants'
6
+
7
+ export const VvRadioProps = {
8
+ ...ValidProps,
9
+ ...ErrorProps,
10
+ ...HintProps,
11
+ /**
12
+ * Input id
13
+ */
14
+ id: [String, Number],
15
+ /**
16
+ * Input name
17
+ */
18
+ name: { type: String, required: true },
19
+ /**
20
+ * Input value
21
+ */
22
+ value: [String, Number, Boolean],
23
+ /**
24
+ * Input value
25
+ */
26
+ modelValue: [Object, Number, Boolean, String],
27
+ /**
28
+ * Input name
29
+ */
30
+ label: String,
31
+ /**
32
+ * If true, the input will be disabled
33
+ */
34
+ disabled: Boolean,
35
+ /**
36
+ * If true, the input will be readonly
37
+ */
38
+ readonly: Boolean,
39
+ /**
40
+ * Sequential keyboard navigation
41
+ */
42
+ tabindex: { type: [String, Number], default: 0 }
43
+ }
44
+
45
+ export const VvRadioEvents = ['click', 'update:modelValue', 'change', 'blur']
46
+
47
+ export type VvRadioPropsType = ExtractPropTypes<typeof VvRadioProps>
48
+
49
+ /**
50
+ * Merges local and group props
51
+ */
52
+ export function useGroupProps(
53
+ props: VvRadioPropsType,
54
+ emit: (event: typeof VvRadioEvents[number], value: unknown) => void
55
+ ) {
56
+ const { group, isInGroup, getGroupOrLocalRef } =
57
+ useInjectedGroupState<IInputGroupState>(VV_RADIO_GROUP)
58
+
59
+ // local props
60
+ const { valid, error } = toRefs(props)
61
+
62
+ // global props
63
+ const modelValue = getGroupOrLocalRef('modelValue', props, emit)
64
+ const readonly = getGroupOrLocalRef('readonly', props) as Ref<boolean>
65
+ const disabled = getGroupOrLocalRef('disabled', props) as Ref<boolean>
66
+
67
+ return {
68
+ // local props
69
+ valid,
70
+ error,
71
+ // global props
72
+ group,
73
+ isInGroup,
74
+ modelValue,
75
+ readonly,
76
+ disabled
77
+ }
78
+ }
@@ -1,52 +1,36 @@
1
- <template>
2
- <fieldset :class="groupClass">
3
- <legend v-if="label" v-text="label" />
4
- <div class="vv-input-radio-group__wrapper">
5
- <!-- #region options set up -->
6
- <template v-if="options.length > 0">
7
- <vv-radio
8
- v-for="(o, oIndex) in options"
9
- :key="oIndex"
10
- v-bind="getOptionProps(o, oIndex)" />
11
- </template>
12
- <!-- #endregion options set up -->
13
- <!-- #region default -->
14
- <slot v-else />
15
- <!-- #endregion default -->
16
- </div>
17
- <!-- @slot error,valid,hint,loading vanno vanno qua -->
18
- <HintSlot class="vv-input-radio-group__hint" />
19
- </fieldset>
20
- </template>
1
+ <script lang="ts">
2
+ export default {
3
+ name: 'VvRadioGroup'
4
+ }
5
+ </script>
21
6
 
22
7
  <script setup lang="ts">
23
8
  import { useSlots, computed, toRefs } from 'vue'
24
9
  import type { IInputGroupState } from '@/composables/group/types/IInputGroup'
25
- import { VvRadioGroupProps, VvRadioGroupEvents } from './VvRadioGroup'
26
-
27
- //Composables
28
10
  import { useVModel } from '@vueuse/core'
29
- import { useProvideGroupState } from '../../composables/group/useProvideGroupState'
30
- import { useOptions } from '../../composables/options/useOptions'
11
+ import { useProvideGroupState } from '@/composables/group/useProvideGroupState'
12
+ import { useOptions } from '@/composables/options/useOptions'
31
13
  import { useBemModifiers } from '@/composables/useModifiers'
14
+ import { VV_RADIO_GROUP } from '@/constants'
15
+ import { HintSlotFactory } from '@/components/common/HintSlot'
16
+ import VvRadio from '@/components/VvRadio/VvRadio.vue'
17
+ import {
18
+ VvRadioGroupProps,
19
+ VvRadioGroupEvents
20
+ } from '@/components/VvRadioGroup'
32
21
 
33
- //Constants
34
- import { VV_RADIO_GROUP } from '../../constants'
35
-
36
- //Components
37
- import VvRadio from '../../components/VvRadio/VvRadio.vue'
38
- import { HintSlotFactory } from '../common/HintSlot'
39
-
40
- //Props, Emits, Slots e Attrs
41
- const emit = defineEmits(VvRadioGroupEvents)
22
+ // props, emit and slots
42
23
  const props = defineProps(VvRadioGroupProps)
24
+ const emit = defineEmits(VvRadioGroupEvents)
43
25
  const slots = useSlots()
44
26
 
45
- //Data
27
+ // hint
28
+ const { HintSlot } = HintSlotFactory(props, slots)
29
+
30
+ // data
46
31
  const modelValue = useVModel(props, 'modelValue', emit)
47
32
  const { disabled, readonly, vertical, valid, error } = toRefs(props)
48
33
 
49
- // #region group
50
34
  const groupState: IInputGroupState = {
51
35
  key: VV_RADIO_GROUP,
52
36
  modelValue,
@@ -54,27 +38,43 @@ const groupState: IInputGroupState = {
54
38
  readonly
55
39
  }
56
40
  useProvideGroupState(groupState)
57
- // #endregion group
58
41
 
59
- //OPTIONS
60
42
  const { getOptionLabel, getOptionValue } = useOptions(props)
61
43
 
62
- //Styles & Bindings
63
- const { bemCssClasses: groupClass } = useBemModifiers('vv-input-radio-group', {
44
+ // styles
45
+ const { bemCssClasses: groupClass } = useBemModifiers('vv-radio-group', {
64
46
  horizontal: computed(() => !vertical.value),
65
47
  valid,
66
48
  invalid: error
67
49
  })
68
50
 
69
- //Methods
70
- function getOptionProps(option: any, oIndex: number) {
51
+ // methods
52
+ const getOptionProps = (option: unknown, index: number) => {
71
53
  return {
72
- id: `${props.name}_opt${oIndex}`,
54
+ id: `${props.name}_opt${index}`,
73
55
  name: props.name,
74
56
  label: getOptionLabel(option),
75
57
  value: getOptionValue(option)
76
58
  }
77
59
  }
78
-
79
- const HintSlot = HintSlotFactory(props, slots)
80
60
  </script>
61
+
62
+ <template>
63
+ <fieldset :class="groupClass">
64
+ <legend v-if="label" v-text="label" />
65
+ <div class="vv-radio-group__wrapper">
66
+ <!-- #region options -->
67
+ <template v-if="options.length > 0">
68
+ <vv-radio
69
+ v-for="(o, oIndex) in options"
70
+ :key="oIndex"
71
+ v-bind="getOptionProps(o, oIndex)" />
72
+ </template>
73
+ <!-- #endregion -->
74
+ <!-- #region default -->
75
+ <slot v-else />
76
+ <!-- #endregion -->
77
+ </div>
78
+ <HintSlot class="vv-radio-group__hint" />
79
+ </fieldset>
80
+ </template>
@@ -1,4 +1,4 @@
1
- import { ValidProps, ErrorProps, OptionsProps, HintProps } from '../../props'
1
+ import { ValidProps, ErrorProps, OptionsProps, HintProps } from '@/props'
2
2
 
3
3
  export const VvRadioGroupEvents = ['update:modelValue']
4
4
 
@@ -1,74 +1,38 @@
1
- <template>
2
- <div v-if="!native" :id="id" :class="selectClasses">
3
- <label v-if="label" for="select">{{ label }}</label>
4
- <details
5
- ref="dropdown"
6
- role="list"
7
- class="vv-select__wrapper"
8
- @click="disabled || readonly ? $event.preventDefault() : null"
9
- @keyup.esc="dropdown.open = false"
10
- @toggle="onToggle">
11
- <summary
12
- class="vv-select__input"
13
- aria-haspopup="listbox"
14
- @keyup.space="searchable ? $event.preventDefault() : null">
15
- <!-- #region search input -->
16
- <template v-if="searchable && dropdownOpen">
17
- <input
18
- ref="inputSearch"
19
- v-model="searchText"
20
- :placeholder="searchPlaceholder" />
21
- </template>
22
- <!-- #endregion search input -->
23
- <!-- #region label of selected value/s -->
24
- <template v-else>
25
- {{ labelValue || placeholder }}
26
- </template>
27
- <!-- #endregion label of selected value/s -->
28
- </summary>
29
- <VvDropdown
30
- v-bind="{
31
- ...props,
32
- options: currentOptions
33
- }"
34
- @update:model-value="onInput" />
35
- </details>
36
- <HintSlot class="vv-select__hint" />
37
- </div>
38
- <VvNativeSelect
39
- v-else
40
- v-bind="props"
41
- @update:model-value="emit('update:modelValue', $event)" />
42
- </template>
1
+ <script lang="ts">
2
+ export default {
3
+ name: 'VvSelect'
4
+ }
5
+ </script>
43
6
 
44
7
  <script setup lang="ts">
45
- import type { Option } from '../VvDropdown/VvDropdown'
46
8
  import { computed, ref, toRefs, useSlots, watch } from 'vue'
9
+ import { nanoid } from 'nanoid'
47
10
  import { onClickOutside, refDebounced, useFocus } from '@vueuse/core'
48
- import { v4 as uuidv4 } from 'uuid'
49
- import ObjectUtilities from '../../utils/ObjectUtilities'
50
- import { VvSelectProps } from './VvSelect'
51
- import HintSlotFactory from '../common/HintSlot'
52
- import VvDropdown from '../VvDropdown/VvDropdown.vue'
53
- import { useBemModifiers } from '../../composables/useModifiers'
54
- import VvNativeSelect from '../VvNativeSelect/VvNativeSelect.vue'
11
+ import type { Option } from '@/components/VvDropdown'
12
+ import { isEmpty, filterArray } from '@/utils/ObjectUtilities'
13
+ import { useBemModifiers } from '@/composables/useModifiers'
14
+ import HintSlotFactory from '@/components/common/HintSlot'
15
+ import VvDropdown from '@/components/VvDropdown/VvDropdown.vue'
16
+ import VvNativeSelect from '@/components/VvNativeSelect/VvNativeSelect.vue'
17
+ import { VvSelectProps } from '@/components/VvSelect'
55
18
 
56
19
  const props = defineProps(VvSelectProps)
57
20
  const slots = useSlots()
58
21
 
59
22
  const emit = defineEmits(['update:modelValue', 'change:search'])
60
23
 
61
- //Hint component
62
- const HintSlot = HintSlotFactory(props, slots)
24
+ // hint slot
25
+ const { HintSlot } = HintSlotFactory(props, slots)
63
26
 
64
- // html ref
27
+ // template ref
65
28
  const dropdown = ref()
66
29
  const inputSearch = ref()
67
- // autofocus input search
30
+
31
+ // focus state
68
32
  useFocus(inputSearch, { initialValue: true })
69
33
 
70
34
  // data
71
- const id = uuidv4()
35
+ const id = nanoid()
72
36
  const searchText = ref('')
73
37
  const debouncedSearchText = refDebounced(
74
38
  searchText,
@@ -86,14 +50,21 @@ const {
86
50
  error
87
51
  } = toRefs(props)
88
52
 
89
- // watch
90
53
  // emit on change search text
91
54
  watch(debouncedSearchText, () =>
92
55
  emit('change:search', debouncedSearchText.value)
93
56
  )
94
57
 
95
- //Styles & css classes modifiers
96
- const { bemCssClasses: selectClasses } = useBemModifiers('vv-select', {
58
+ // dirty
59
+ const isDirty = computed(() => !isEmpty(props.modelValue))
60
+
61
+ // tabindex
62
+ const hasTabindex = computed(() => {
63
+ return disabled.value || readonly.value ? -1 : props.tabindex
64
+ })
65
+
66
+ // styles
67
+ const { bemCssClasses } = useBemModifiers('vv-select', {
97
68
  modifiers,
98
69
  disabled,
99
70
  loading,
@@ -102,12 +73,10 @@ const { bemCssClasses: selectClasses } = useBemModifiers('vv-select', {
102
73
  iconRight,
103
74
  valid,
104
75
  invalid: error,
105
- dirty: computed(() => ObjectUtilities.isNotEmpty(props.modelValue))
76
+ dirty: isDirty
106
77
  })
107
78
 
108
- // computed
109
-
110
- // Check if options are objects
79
+ // check if options are objects
111
80
  const isOptionsObjects = computed(() =>
112
81
  props.options?.every((option) => typeof option === 'object')
113
82
  )
@@ -125,9 +94,12 @@ const filteredOptions = computed(() => {
125
94
  .toLowerCase()
126
95
  .includes(debouncedSearchText.value.toLowerCase().trim())
127
96
  }
128
- return option[props.labelKey]
129
- .toLowerCase()
130
- .includes(debouncedSearchText.value.toLowerCase().trim())
97
+ if (typeof option[props.labelKey] === 'string') {
98
+ return (option[props.labelKey] as string)
99
+ .toLowerCase()
100
+ .includes(debouncedSearchText.value.toLowerCase().trim())
101
+ }
102
+ return false
131
103
  })
132
104
  })
133
105
 
@@ -139,12 +111,12 @@ const labelValue = computed(() => {
139
111
  // #region multiple mode
140
112
  if (
141
113
  props.multiple &&
142
- props.modelValue?.length &&
143
- Array.isArray(props.modelValue)
114
+ Array.isArray(props.modelValue) &&
115
+ props.modelValue?.length
144
116
  ) {
145
117
  if (isOptionsObjects.value) {
146
118
  // filter options by selected values
147
- return ObjectUtilities.filterArray<Option>(
119
+ return filterArray<Option>(
148
120
  props.options as Option[],
149
121
  props.modelValue,
150
122
  props.valueKey
@@ -194,7 +166,56 @@ function onInput(value: typeof props.modelValue) {
194
166
  if (dropdown.value && !props.multiple) {
195
167
  dropdown.value.open = false
196
168
  }
197
-
198
169
  emit('update:modelValue', value)
199
170
  }
200
171
  </script>
172
+
173
+ <template>
174
+ <div v-if="!native" :id="id" :class="bemCssClasses">
175
+ <label
176
+ v-if="label"
177
+ :id="`${id}-label`"
178
+ :for="searchable && dropdownOpen ? `${id}-input` : undefined"
179
+ >{{ label }}</label
180
+ >
181
+ <details
182
+ ref="dropdown"
183
+ class="vv-select__wrapper"
184
+ @click="disabled || readonly ? $event.preventDefault() : null"
185
+ @keyup.esc="dropdown.open = false"
186
+ @toggle="onToggle">
187
+ <summary
188
+ class="vv-select__input"
189
+ :tabindex="hasTabindex"
190
+ @keyup.space="searchable ? $event.preventDefault() : null">
191
+ <!-- #region search input -->
192
+ <template v-if="searchable && dropdownOpen">
193
+ <input
194
+ :id="`${id}-input`"
195
+ ref="inputSearch"
196
+ v-model="searchText"
197
+ role="combobox"
198
+ :placeholder="searchPlaceholder" />
199
+ </template>
200
+ <!-- #endregion search input -->
201
+ <!-- #region label of selected value/s -->
202
+ <template v-else>
203
+ {{ labelValue || placeholder }}
204
+ </template>
205
+ <!-- #endregion label of selected value/s -->
206
+ </summary>
207
+ <VvDropdown
208
+ :id="`${id}-dropdown`"
209
+ v-bind="{
210
+ ...props,
211
+ options: currentOptions
212
+ }"
213
+ @update:model-value="onInput" />
214
+ </details>
215
+ <HintSlot class="vv-select__hint" />
216
+ </div>
217
+ <VvNativeSelect
218
+ v-else
219
+ v-bind="props"
220
+ @update:model-value="emit('update:modelValue', $event)" />
221
+ </template>