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