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

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 (432) hide show
  1. package/README.md +1 -1
  2. package/bin/icons.cjs +73 -0
  3. package/bin/icons.js +75 -0
  4. package/dist/Volver.d.ts +15 -2
  5. package/dist/components/VvAccordion/VvAccordion.es.js +133 -236
  6. package/dist/components/VvAccordion/VvAccordion.umd.js +1 -1
  7. package/dist/components/VvAccordion/VvAccordion.vue.d.ts +32 -97
  8. package/dist/components/VvAccordion/index.d.ts +46 -0
  9. package/dist/components/VvAccordionGroup/VvAccordionGroup.es.js +199 -277
  10. package/dist/components/VvAccordionGroup/VvAccordionGroup.umd.js +1 -1
  11. package/dist/components/VvAccordionGroup/VvAccordionGroup.vue.d.ts +44 -151
  12. package/dist/components/VvAccordionGroup/{VvAccordionGroup.d.ts → index.d.ts} +9 -13
  13. package/dist/components/VvBadge/VvBadge.es.js +42 -151
  14. package/dist/components/VvBadge/VvBadge.umd.js +1 -1
  15. package/dist/components/VvBadge/VvBadge.vue.d.ts +12 -53
  16. package/dist/components/VvBadge/{VvBadge.d.ts → index.d.ts} +0 -0
  17. package/dist/components/VvBreadcrumb/VvBreadcrumb.es.js +55 -168
  18. package/dist/components/VvBreadcrumb/VvBreadcrumb.umd.js +1 -1
  19. package/dist/components/VvBreadcrumb/VvBreadcrumb.vue.d.ts +24 -104
  20. package/dist/components/VvBreadcrumb/{VvBreadcrumb.d.ts → index.d.ts} +1 -1
  21. package/dist/components/VvButton/VvButton.es.js +298 -312
  22. package/dist/components/VvButton/VvButton.umd.js +1 -1
  23. package/dist/components/VvButton/VvButton.vue.d.ts +91 -163
  24. package/dist/components/VvButton/{VvButton.d.ts → index.d.ts} +46 -9
  25. package/dist/components/VvButtonGroup/VvButtonGroup.es.js +59 -172
  26. package/dist/components/VvButtonGroup/VvButtonGroup.umd.js +1 -1
  27. package/dist/components/VvButtonGroup/VvButtonGroup.vue.d.ts +30 -125
  28. package/dist/components/VvButtonGroup/{VvButtonGroup.d.ts → index.d.ts} +0 -0
  29. package/dist/components/VvCard/VvCard.es.js +55 -166
  30. package/dist/components/VvCard/VvCard.umd.js +1 -1
  31. package/dist/components/VvCard/VvCard.vue.d.ts +16 -61
  32. package/dist/components/VvCard/{VvCard.d.ts → index.d.ts} +1 -1
  33. package/dist/components/VvCheckbox/VvCheckbox.es.js +344 -0
  34. package/dist/components/VvCheckbox/VvCheckbox.umd.js +1 -0
  35. package/dist/components/VvCheckbox/VvCheckbox.vue.d.ts +87 -0
  36. package/dist/components/VvCheckbox/index.d.ts +86 -0
  37. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js +415 -0
  38. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.umd.js +1 -0
  39. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.vue.d.ts +113 -0
  40. package/dist/components/{VvCheckGroup/VvCheckGroup.d.ts → VvCheckboxGroup/index.d.ts} +10 -10
  41. package/dist/components/VvDialog/VvDialog.es.js +108 -230
  42. package/dist/components/VvDialog/VvDialog.umd.js +1 -1
  43. package/dist/components/VvDialog/VvDialog.vue.d.ts +28 -132
  44. package/dist/components/VvDialog/{VvDialog.d.ts → index.d.ts} +2 -6
  45. package/dist/components/VvDropdown/VvDropdown.es.js +167 -186
  46. package/dist/components/VvDropdown/VvDropdown.umd.js +1 -1
  47. package/dist/components/VvDropdown/VvDropdown.vue.d.ts +34 -136
  48. package/dist/components/VvDropdown/{VvDropdown.d.ts → index.d.ts} +7 -3
  49. package/dist/components/VvIcon/VvIcon.es.js +62 -174
  50. package/dist/components/VvIcon/VvIcon.umd.js +1 -1
  51. package/dist/components/VvIcon/VvIcon.vue.d.ts +36 -150
  52. package/dist/components/VvIcon/{VvIcon.d.ts → index.d.ts} +9 -0
  53. package/dist/components/VvInputText/VvInputClearAction.d.ts +36 -0
  54. package/dist/components/VvInputText/VvInputPasswordAction.d.ts +56 -0
  55. package/dist/components/VvInputText/VvInputStepAction.d.ts +37 -0
  56. package/dist/components/VvInputText/VvInputText.es.js +586 -577
  57. package/dist/components/VvInputText/VvInputText.umd.js +1 -2
  58. package/dist/components/VvInputText/VvInputText.vue.d.ts +187 -275
  59. package/dist/components/VvInputText/VvInputTextActions.d.ts +1 -1
  60. package/dist/components/VvInputText/index.d.ts +175 -0
  61. package/dist/components/VvNativeSelect/VvNativeSelect.es.js +299 -347
  62. package/dist/components/VvNativeSelect/VvNativeSelect.umd.js +1 -2
  63. package/dist/components/VvNativeSelect/VvNativeSelect.vue.d.ts +78 -190
  64. package/dist/components/VvNativeSelect/{VvNativeSelect.d.ts → index.d.ts} +35 -8
  65. package/dist/components/VvProgress/VvProgress.es.js +45 -162
  66. package/dist/components/VvProgress/VvProgress.umd.js +1 -1
  67. package/dist/components/VvProgress/VvProgress.vue.d.ts +17 -103
  68. package/dist/components/VvProgress/{VvProgress.d.ts → index.d.ts} +1 -7
  69. package/dist/components/VvRadio/VvRadio.es.js +292 -267
  70. package/dist/components/VvRadio/VvRadio.umd.js +1 -1
  71. package/dist/components/VvRadio/VvRadio.vue.d.ts +52 -122
  72. package/dist/components/VvRadio/index.d.ts +64 -0
  73. package/dist/components/VvRadioGroup/VvRadioGroup.es.js +342 -380
  74. package/dist/components/VvRadioGroup/VvRadioGroup.umd.js +1 -2
  75. package/dist/components/VvRadioGroup/VvRadioGroup.vue.d.ts +58 -213
  76. package/dist/components/VvRadioGroup/{VvRadioGroup.d.ts → index.d.ts} +2 -2
  77. package/dist/components/VvSelect/VvSelect.es.js +556 -510
  78. package/dist/components/VvSelect/VvSelect.umd.js +1 -2
  79. package/dist/components/VvSelect/VvSelect.vue.d.ts +75 -240
  80. package/dist/components/VvSelect/{VvSelect.d.ts → index.d.ts} +12 -5
  81. package/dist/components/VvTextarea/VvTextarea.es.js +372 -481
  82. package/dist/components/VvTextarea/VvTextarea.umd.js +1 -2
  83. package/dist/components/VvTextarea/VvTextarea.vue.d.ts +103 -299
  84. package/dist/components/VvTextarea/{VvTextarea.d.ts → index.d.ts} +36 -13
  85. package/dist/components/common/HintSlot.d.ts +10 -4
  86. package/dist/components/index.d.ts +13 -6
  87. package/dist/components/index.es.js +2070 -895
  88. package/dist/components/index.umd.js +1 -2
  89. package/dist/composables/debouncedInput/useDebouncedInput.d.ts +2 -2
  90. package/dist/composables/focus/useComponentFocus.d.ts +3 -3
  91. package/dist/composables/group/types/IAccordionGroupState.d.ts +1 -3
  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 +2113 -932
  102. package/dist/index.umd.js +1 -2
  103. package/dist/props/index.d.ts +9 -3
  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 +103 -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 +14 -10
  134. package/src/components/VvBadge/{VvBadge.ts → index.ts} +0 -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 +123 -113
  138. package/src/components/VvButton/index.ts +147 -0
  139. package/src/components/VvButtonGroup/VvButtonGroup.vue +21 -17
  140. package/src/components/VvButtonGroup/{VvButtonGroup.ts → index.ts} +0 -0
  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 +90 -69
  168. package/src/components/VvSelect/{VvSelect.ts → index.ts} +12 -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/IGroupState.ts +2 -2
  177. package/src/composables/group/useInjectedGroupState.ts +20 -30
  178. package/src/composables/group/useProvideGroupState.ts +1 -2
  179. package/src/composables/icons/useComponentIcons.ts +2 -3
  180. package/src/composables/options/useOptions.ts +3 -0
  181. package/src/composables/textLimit/useTextLimit.ts +1 -4
  182. package/src/composables/useModifiers.ts +13 -15
  183. package/src/constants.ts +5 -7
  184. package/src/directives/{.README → .gitkeep} +0 -0
  185. package/src/icons.ts +7 -0
  186. package/src/index.ts +0 -1
  187. package/src/props/index.ts +7 -1
  188. package/src/resolvers/unplugin.ts +103 -0
  189. package/src/shims.d.ts +11 -0
  190. package/src/stories/Accordion/Accordion.stories.mdx +10 -9
  191. package/src/stories/Accordion/Accordion.test.ts +37 -0
  192. package/src/stories/Accordion/AccordionSlots.stories.mdx +40 -25
  193. package/src/stories/AccordionGroup/AccordionGroup.stories.mdx +10 -16
  194. package/src/stories/AccordionGroup/{accordionGroupTest.js → AccordionGroup.test.js} +15 -17
  195. package/src/stories/AccordionGroup/AccordionGroupCollapse.stories.mdx +38 -0
  196. package/src/stories/AccordionGroup/{AccordionItems.stories.mdx → AccordionGroupItems.stories.mdx} +7 -13
  197. package/src/stories/Badge/Badge.stories.mdx +8 -8
  198. package/src/stories/Badge/Badge.test.ts +16 -0
  199. package/src/stories/Badge/BadgeColor.stories.mdx +6 -7
  200. package/src/stories/Badge/BadgeDot.stories.mdx +4 -3
  201. package/src/stories/Badge/BadgeModifiers.stories.mdx +7 -6
  202. package/src/stories/Breadcrumb/Breadcrumb.stories.mdx +15 -7
  203. package/src/stories/Breadcrumb/Breadcrumb.test.ts +49 -0
  204. package/src/stories/Breadcrumb/BreadcrumbMultiline.stories.mdx +15 -7
  205. package/src/stories/Button/Button.stories.mdx +16 -17
  206. package/src/stories/Button/Button.test.ts +8 -12
  207. package/src/stories/Button/ButtonActive.stories.mdx +2 -1
  208. package/src/stories/Button/ButtonBadge.stories.mdx +2 -2
  209. package/src/stories/Button/ButtonDisabled.stories.mdx +1 -1
  210. package/src/stories/Button/ButtonIcon.stories.mdx +6 -3
  211. package/src/stories/Button/ButtonIconPosition.stories.mdx +1 -1
  212. package/src/stories/Button/ButtonLink.stories.mdx +1 -19
  213. package/src/stories/Button/ButtonLoading.stories.mdx +4 -4
  214. package/src/stories/Button/ButtonModifiers.stories.mdx +1 -1
  215. package/src/stories/Button/ButtonPressed.stories.mdx +31 -0
  216. package/src/stories/Button/ButtonSlots.stories.mdx +1 -1
  217. package/src/stories/ButtonGroup/ButtonGroup.stories.mdx +5 -6
  218. package/src/stories/ButtonGroup/{ButtonGroupTest.js → ButtonGroup.test.js} +6 -28
  219. package/src/stories/ButtonGroup/ButtonGroupAction.stories.mdx +5 -6
  220. package/src/stories/ButtonGroup/ButtonGroupActionQuiet.stories.mdx +3 -4
  221. package/src/stories/ButtonGroup/ButtonGroupBlock.stories.mdx +3 -4
  222. package/src/stories/ButtonGroup/ButtonGroupCompact.stories.mdx +3 -4
  223. package/src/stories/ButtonGroup/ButtonGroupRounded.stories.mdx +3 -4
  224. package/src/stories/ButtonGroup/ButtonGroupToggle.stories.mdx +11 -12
  225. package/src/stories/ButtonGroup/ButtonGroupVertical.stories.mdx +3 -4
  226. package/src/stories/Card/Card.stories.mdx +7 -5
  227. package/src/stories/Card/Card.test.ts +26 -0
  228. package/src/stories/Card/CardSlots.stories.mdx +5 -5
  229. package/src/stories/Card/CardVariant.stories.mdx +5 -4
  230. package/src/stories/Checkbox/Checkbox.stories.mdx +51 -0
  231. package/src/stories/Checkbox/Checkbox.test.js +115 -0
  232. package/src/stories/Checkbox/CheckboxBinary.stories.mdx +76 -0
  233. package/src/stories/{Check/CheckDisabled.stories.mdx → Checkbox/CheckboxDisabled.stories.mdx} +7 -7
  234. package/src/stories/Checkbox/CheckboxError.stories.mdx +43 -0
  235. package/src/stories/Checkbox/CheckboxHintLabel.stories.mdx +35 -0
  236. package/src/stories/{Check/CheckReadonly.stories.mdx → Checkbox/CheckboxReadonly.stories.mdx} +6 -8
  237. package/src/stories/Checkbox/CheckboxSlots.stories.mdx +69 -0
  238. package/src/stories/{Check/CheckSwitch.stories.mdx → Checkbox/CheckboxSwitch.stories.mdx} +8 -8
  239. package/src/stories/CheckboxGroup/CheckboxGroup.stories.mdx +69 -0
  240. package/src/stories/CheckboxGroup/CheckboxGroupDisabled.stories.mdx +26 -0
  241. package/src/stories/CheckboxGroup/CheckboxGroupError.stories.mdx +28 -0
  242. package/src/stories/CheckboxGroup/CheckboxGroupHintLabel.stories.mdx +27 -0
  243. package/src/stories/CheckboxGroup/CheckboxGroupLabel.stories.mdx +26 -0
  244. package/src/stories/{CheckGroup/CheckGroupOptionLabel.stories.mdx → CheckboxGroup/CheckboxGroupOptionLabel.stories.mdx} +14 -11
  245. package/src/stories/{CheckGroup/CheckGroupOptionValue.stories.mdx → CheckboxGroup/CheckboxGroupOptionValue.stories.mdx} +13 -10
  246. package/src/stories/{CheckGroup/CheckGroupOptions.stories.mdx → CheckboxGroup/CheckboxGroupOptions.stories.mdx} +8 -8
  247. package/src/stories/CheckboxGroup/CheckboxGroupReadonly.stories.mdx +26 -0
  248. package/src/stories/CheckboxGroup/CheckboxGroupSlots.stories.mdx +152 -0
  249. package/src/stories/CheckboxGroup/CheckboxGroupValid.stories.mdx +28 -0
  250. package/src/stories/CheckboxGroup/CheckboxGroupVertical.stories.mdx +26 -0
  251. package/src/stories/Dialog/Dialog.stories.mdx +5 -5
  252. package/src/stories/Dialog/Dialog.test.ts +26 -0
  253. package/src/stories/Dialog/DialogAutoClose.stories.mdx +1 -1
  254. package/src/stories/Dialog/DialogSize.stories.mdx +1 -1
  255. package/src/stories/Dropdown/Dropdown.stories.mdx +11 -7
  256. package/src/stories/Dropdown/Dropdown.test.ts +80 -0
  257. package/src/stories/Dropdown/DropdownDisabled.stories.mdx +9 -2
  258. package/src/stories/Dropdown/DropdownLabelNoResults.stories.mdx +2 -2
  259. package/src/stories/Dropdown/DropdownMaxValues.stories.mdx +4 -2
  260. package/src/stories/Dropdown/DropdownMultiple.stories.mdx +4 -2
  261. package/src/stories/Dropdown/DropdownOptions.stories.mdx +4 -4
  262. package/src/stories/Dropdown/DropdownUseObject.stories.mdx +4 -2
  263. package/src/stories/Icon/Icon.stories.mdx +8 -8
  264. package/src/stories/Icon/{IconTest.js → Icon.test.js} +2 -5
  265. package/src/stories/Icon/IconList.vue +5 -6
  266. package/src/stories/Icon/IconPrefix.stories.mdx +2 -2
  267. package/src/stories/Icon/IconRemote.stories.mdx +2 -2
  268. package/src/stories/Icon/IconsList.stories.mdx +2 -18
  269. package/src/stories/InputText/InputText.stories.mdx +25 -19
  270. package/src/stories/InputText/InputText.test.ts +156 -0
  271. package/src/stories/InputText/InputTextAutocomplete.stories.mdx +9 -2
  272. package/src/stories/InputText/InputTextAutofocus.stories.mdx +6 -3
  273. package/src/stories/InputText/InputTextDisabled.stories.mdx +10 -2
  274. package/src/stories/InputText/InputTextError.stories.mdx +10 -2
  275. package/src/stories/InputText/InputTextFloating.stories.mdx +10 -3
  276. package/src/stories/InputText/InputTextHintLabel.stories.mdx +10 -2
  277. package/src/stories/InputText/InputTextIcon.stories.mdx +6 -2
  278. package/src/stories/InputText/InputTextIconPosition.stories.mdx +10 -3
  279. package/src/stories/InputText/InputTextLabel.stories.mdx +8 -2
  280. package/src/stories/InputText/InputTextLoading.stories.mdx +10 -2
  281. package/src/stories/InputText/InputTextMax.stories.mdx +10 -3
  282. package/src/stories/InputText/InputTextMaxLength.stories.mdx +22 -5
  283. package/src/stories/InputText/InputTextMin.stories.mdx +10 -3
  284. package/src/stories/InputText/InputTextMinLength.stories.mdx +9 -2
  285. package/src/stories/InputText/InputTextPlaceholder.stories.mdx +8 -2
  286. package/src/stories/InputText/InputTextReadonly.stories.mdx +6 -2
  287. package/src/stories/InputText/InputTextSlots.stories.mdx +4 -5
  288. package/src/stories/InputText/InputTextStep.stories.mdx +9 -3
  289. package/src/stories/InputText/InputTextType.stories.mdx +110 -13
  290. package/src/stories/InputText/InputTextValid.stories.mdx +10 -2
  291. package/src/stories/NativeSelect/NativeSelect.stories.mdx +15 -11
  292. package/src/stories/NativeSelect/NativeSelect.test.js +151 -0
  293. package/src/stories/NativeSelect/NativeSelectDisabled.stories.mdx +6 -7
  294. package/src/stories/NativeSelect/NativeSelectError.stories.mdx +7 -3
  295. package/src/stories/NativeSelect/NativeSelectHintLabel.stories.mdx +7 -3
  296. package/src/stories/NativeSelect/NativeSelectIconLeftRight.stories.mdx +14 -12
  297. package/src/stories/NativeSelect/NativeSelectLoading.stories.mdx +7 -3
  298. package/src/stories/NativeSelect/NativeSelectOptions.stories.mdx +44 -38
  299. package/src/stories/NativeSelect/NativeSelectReadonly.stories.mdx +19 -11
  300. package/src/stories/NativeSelect/NativeSelectUseObject.stories.mdx +26 -30
  301. package/src/stories/NativeSelect/NativeSelectValid.stories.mdx +7 -3
  302. package/src/stories/NativeSelect/NativeSelectValueKey.stories.mdx +30 -30
  303. package/src/stories/Progress/Progress.stories.mdx +8 -11
  304. package/src/stories/Progress/{ProgressTest.js → Progress.test.js} +4 -10
  305. package/src/stories/Progress/ProgressDeterminate.stories.mdx +3 -6
  306. package/src/stories/Radio/Radio.stories.mdx +11 -17
  307. package/src/stories/Radio/Radio.test.ts +52 -0
  308. package/src/stories/Radio/RadioDisabled.stories.mdx +4 -7
  309. package/src/stories/Radio/RadioError.stories.mdx +8 -28
  310. package/src/stories/Radio/RadioHintLabel.stories.mdx +6 -7
  311. package/src/stories/Radio/RadioSlots.stories.mdx +21 -7
  312. package/src/stories/RadioGroup/RadioGroup.stories.mdx +20 -27
  313. package/src/stories/RadioGroup/RadioGroup.test.ts +139 -0
  314. package/src/stories/RadioGroup/RadioGroupDisabled.stories.mdx +6 -8
  315. package/src/stories/RadioGroup/RadioGroupError.stories.mdx +9 -11
  316. package/src/stories/RadioGroup/RadioGroupHintLabel.stories.mdx +8 -10
  317. package/src/stories/RadioGroup/RadioGroupLabel.stories.mdx +6 -8
  318. package/src/stories/RadioGroup/RadioGroupOptionLabel.stories.mdx +11 -13
  319. package/src/stories/RadioGroup/RadioGroupOptionValue.stories.mdx +9 -11
  320. package/src/stories/RadioGroup/RadioGroupOptions.stories.mdx +7 -9
  321. package/src/stories/RadioGroup/RadioGroupReadonly.stories.mdx +6 -8
  322. package/src/stories/RadioGroup/RadioGroupSlots.stories.mdx +39 -62
  323. package/src/stories/RadioGroup/RadioGroupValid.stories.mdx +9 -11
  324. package/src/stories/RadioGroup/RadioGroupVertical.stories.mdx +6 -8
  325. package/src/stories/Select/Select.stories.mdx +32 -29
  326. package/src/stories/Select/Select.test.ts +104 -0
  327. package/src/stories/Select/SelectDisabled.stories.mdx +3 -3
  328. package/src/stories/Select/SelectMaxValues.stories.mdx +3 -3
  329. package/src/stories/Select/SelectMultiple.stories.mdx +5 -6
  330. package/src/stories/Select/SelectNative.stories.mdx +6 -8
  331. package/src/stories/Select/SelectOptions.stories.mdx +4 -4
  332. package/src/stories/Select/SelectSearchable.stories.mdx +13 -12
  333. package/src/stories/Select/SelectSeparator.stories.mdx +3 -3
  334. package/src/stories/Select/SelectUseObject.stories.mdx +3 -3
  335. package/src/stories/Textarea/Textarea.stories.mdx +6 -10
  336. package/src/stories/Textarea/Textarea.test.ts +204 -0
  337. package/src/stories/Textarea/TextareaAutoclear.stories.mdx +3 -2
  338. package/src/stories/Textarea/TextareaAutocomplete.stories.mdx +3 -2
  339. package/src/stories/Textarea/TextareaAutofocus.stories.mdx +3 -2
  340. package/src/stories/Textarea/TextareaDebounce.stories.mdx +7 -6
  341. package/src/stories/Textarea/TextareaDisabled.stories.mdx +9 -3
  342. package/src/stories/Textarea/TextareaError.stories.mdx +7 -2
  343. package/src/stories/Textarea/TextareaErrorLabel.stories.mdx +12 -2
  344. package/src/stories/Textarea/TextareaFloating.stories.mdx +7 -2
  345. package/src/stories/Textarea/TextareaHintLabel.stories.mdx +7 -2
  346. package/src/stories/Textarea/TextareaIcon.stories.mdx +3 -2
  347. package/src/stories/Textarea/TextareaIconPosition.stories.mdx +4 -2
  348. package/src/stories/Textarea/TextareaId.stories.mdx +3 -2
  349. package/src/stories/Textarea/TextareaLabel.stories.mdx +3 -2
  350. package/src/stories/Textarea/TextareaLimit.stories.mdx +5 -2
  351. package/src/stories/Textarea/TextareaLoading.stories.mdx +7 -2
  352. package/src/stories/Textarea/TextareaLoadingLabel.stories.mdx +9 -3
  353. package/src/stories/Textarea/TextareaMaxLength.stories.mdx +5 -4
  354. package/src/stories/Textarea/TextareaMinLength.stories.mdx +3 -2
  355. package/src/stories/Textarea/TextareaModifiers.stories.mdx +10 -2
  356. package/src/stories/Textarea/TextareaName.stories.mdx +3 -2
  357. package/src/stories/Textarea/TextareaPlaceholder.stories.mdx +4 -3
  358. package/src/stories/Textarea/TextareaReadonly.stories.mdx +8 -3
  359. package/src/stories/Textarea/TextareaRequired.stories.mdx +3 -2
  360. package/src/stories/Textarea/TextareaResizable.stories.mdx +7 -2
  361. package/src/stories/Textarea/TextareaRowsCols.stories.mdx +4 -2
  362. package/src/stories/Textarea/TextareaSlots.stories.mdx +7 -8
  363. package/src/stories/Textarea/TextareaValid.stories.mdx +7 -1
  364. package/src/stories/Textarea/TextareaValidLabel.stories.mdx +14 -4
  365. package/src/stories/utils.ts +1 -1
  366. package/src/stories/volver-ui-vue.stories.mdx +1 -1
  367. package/src/test/expect.ts +3 -1
  368. package/src/test/sleep.ts +2 -0
  369. package/src/test/types.d.ts +14 -1
  370. package/src/types/{.README → .gitkeep} +0 -0
  371. package/src/utils/ObjectUtilities.ts +247 -241
  372. package/dist/components/VvAccordion/VvAccordion.d.ts +0 -32
  373. package/dist/components/VvAccordion/useAccordionProps.d.ts +0 -16
  374. package/dist/components/VvButton/useButtonGroupProps.d.ts +0 -18
  375. package/dist/components/VvCheck/VvCheck.d.ts +0 -47
  376. package/dist/components/VvCheck/VvCheck.es.js +0 -318
  377. package/dist/components/VvCheck/VvCheck.umd.js +0 -1
  378. package/dist/components/VvCheck/VvCheck.vue.d.ts +0 -165
  379. package/dist/components/VvCheck/useCheckProps.d.ts +0 -16
  380. package/dist/components/VvCheckGroup/VvCheckGroup.es.js +0 -451
  381. package/dist/components/VvCheckGroup/VvCheckGroup.umd.js +0 -2
  382. package/dist/components/VvCheckGroup/VvCheckGroup.vue.d.ts +0 -272
  383. package/dist/components/VvDialog/constants.d.ts +0 -5
  384. package/dist/components/VvInputText/VvInputText.d.ts +0 -73
  385. package/dist/components/VvInputText/constants.d.ts +0 -55
  386. package/dist/components/VvRadio/VvRadio.d.ts +0 -22
  387. package/dist/components/VvRadio/useRadioProps.d.ts +0 -15
  388. package/dist/components/VvTextarea/constants.d.ts +0 -19
  389. package/dist/stories/RadioGroup/RadioOption.test.d.ts +0 -4
  390. package/dist/stories/RadioGroup/RadioProperty.test.d.ts +0 -12
  391. package/dist/stories/RadioGroup/RadioSlots.test.d.ts +0 -6
  392. package/src/assets/icons/index.js +0 -7
  393. package/src/components/VvAccordion/VvAccordion.ts +0 -34
  394. package/src/components/VvAccordion/useAccordionProps.ts +0 -45
  395. package/src/components/VvButton/VvButton.ts +0 -87
  396. package/src/components/VvButton/useButtonGroupProps.ts +0 -43
  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/ButtonSelected.stories.mdx +0 -30
  413. package/src/stories/Check/Check.stories.mdx +0 -62
  414. package/src/stories/Check/CheckBinary.stories.mdx +0 -75
  415. package/src/stories/Check/CheckError.stories.mdx +0 -64
  416. package/src/stories/Check/CheckErrorTests.js +0 -74
  417. package/src/stories/Check/CheckHintLabel.stories.mdx +0 -30
  418. package/src/stories/Check/CheckPropertyTest.js +0 -102
  419. package/src/stories/Check/CheckSlots.stories.mdx +0 -51
  420. package/src/stories/CheckGroup/CheckGroup.stories.mdx +0 -69
  421. package/src/stories/CheckGroup/CheckGroupDisabled.stories.mdx +0 -26
  422. package/src/stories/CheckGroup/CheckGroupError.stories.mdx +0 -28
  423. package/src/stories/CheckGroup/CheckGroupHintLabel.stories.mdx +0 -27
  424. package/src/stories/CheckGroup/CheckGroupLabel.stories.mdx +0 -26
  425. package/src/stories/CheckGroup/CheckGroupReadonly.stories.mdx +0 -26
  426. package/src/stories/CheckGroup/CheckGroupSlots.stories.mdx +0 -152
  427. package/src/stories/CheckGroup/CheckGroupValid.stories.mdx +0 -28
  428. package/src/stories/CheckGroup/CheckGroupVertical.stories.mdx +0 -26
  429. package/src/stories/RadioGroup/RadioOption.test.ts +0 -45
  430. package/src/stories/RadioGroup/RadioProperty.test.ts +0 -87
  431. package/src/stories/RadioGroup/RadioSlots.test.ts +0 -29
  432. package/src/stories/stories.scss +0 -13
@@ -1,73 +1,30 @@
1
- <template>
2
- <!-- #region component: "button" | "a" | "router-link" | "nuxt-link" -->
3
- <component
4
- v-bind="properties"
5
- :is="isComponent"
6
- @click.passive="onBtnClick">
7
- <!-- @slot default to replace all button content -->
8
- <slot>
9
- <!-- #region loading -->
10
- <template v-if="loading">
11
- <slot name="loading">
12
- <vv-icon
13
- v-if="loadingIcon"
14
- class="vv-button__loading-icon"
15
- :name="loadingIcon" />
16
- <span v-if="loadingLabel" class="vv-button__label">
17
- {{ loadingLabel }}
18
- </span>
19
- </slot>
20
- </template>
21
- <!-- #endregion loading -->
22
- <!-- #region button -->
23
- <template v-else>
24
- <!-- @slot before -->
25
- <slot name="before" />
26
- <!-- #region icon -->
27
- <template v-if="icon">
28
- <vv-icon class="vv-button__icon" :name="icon" />
29
- </template>
30
- <!-- #endregion icon -->
31
- <!-- #region label -->
32
- <span v-if="label" class="vv-button__label">
33
- <!-- @slot Use this slot for button label -->
34
- <slot name="label">
35
- {{ label }}
36
- </slot>
37
- </span>
38
- <!-- #endregion label -->
39
- <!-- @slot after -->
40
- <slot name="after" />
41
- </template>
42
- <!-- #endregion button -->
43
- </slot>
44
- </component>
45
- <!-- #endregion component: button | a | router-link | nuxt-link -->
46
- </template>
1
+ <script lang="ts">
2
+ export default {
3
+ name: 'VvButton'
4
+ }
5
+ </script>
47
6
 
48
7
  <script setup lang="ts">
49
- import { useAttrs, useSlots } from 'vue'
50
-
51
- import { computed } from 'vue'
52
- import { v4 as uuidv4 } from 'uuid'
53
- import { ButtonIconPosition, ButtonTag } from './VvButton'
54
- import { VvButtonProps } from './VvButton'
55
- import ObjectUtilities from '@/utils/ObjectUtilities'
56
-
57
- //Components
58
- import VvIcon from '@/components/VvIcon/VvIcon.vue'
59
-
60
- //Composables
8
+ import { inject, useAttrs, useSlots, computed } from 'vue'
9
+ import { nanoid } from 'nanoid'
10
+ import { contains, equals } from '@/utils/ObjectUtilities'
11
+ import { type IVolver, VOLVER_PREFIX } from '@/Volver'
61
12
  import { useBemModifiers } from '@/composables/useModifiers'
62
- import { toButtonRefs } from './useButtonGroupProps'
13
+ import VvIcon from '@/components/VvIcon/VvIcon.vue'
14
+ import {
15
+ ButtonIconPosition,
16
+ ButtonTag,
17
+ VvButtonProps,
18
+ useGroupProps
19
+ } from '@/components/VvButton'
63
20
 
64
- //Props, emits, attrs, slots
21
+ // props, attrs and slots
65
22
  const props = defineProps(VvButtonProps)
66
23
  const attrs = useAttrs()
67
24
  const slots = useSlots()
68
25
 
69
- //Data
70
- const btnName = attrs?.name || uuidv4()
26
+ // data
27
+ const btnName = attrs?.name || nanoid()
71
28
  const {
72
29
  modifiers,
73
30
  iconPosition,
@@ -77,18 +34,21 @@ const {
77
34
  disabled,
78
35
  toggle,
79
36
  isInGroup
80
- } = toButtonRefs(props)
37
+ } = useGroupProps(props)
38
+
39
+ // inject Volver
40
+ const ds = inject<IVolver>(VOLVER_PREFIX)
81
41
 
82
42
  /**
83
- * @description Select the tag type in based on the props before.
84
- * @returns {string} The type of component
43
+ * @description The tag defined by props.
44
+ * @returns {string} The tag.
85
45
  */
86
- const isComponent = computed(() => {
46
+ const hasTag = computed(() => {
87
47
  switch (true) {
88
48
  case disabled.value:
89
49
  return ButtonTag.button
90
50
  case props.to !== undefined:
91
- return ButtonTag.routerLink
51
+ return ds?.nuxt ? ButtonTag.nuxtLink : ButtonTag.routerLink
92
52
  case props.href !== undefined:
93
53
  return ButtonTag.a
94
54
  default:
@@ -97,34 +57,25 @@ const isComponent = computed(() => {
97
57
  })
98
58
 
99
59
  /**
100
- * Stato active del pulsante.
101
- * Se in un button group toggle, forza l'active in base al valore selezionato
60
+ * @description The component pressed state by prop or group.
61
+ * @returns {string} The component tag.
102
62
  */
103
- const active = computed(() => {
104
- if (!toggle.value) return props.active
63
+ const isPressed = computed(() => {
64
+ if (!toggle.value) return props.pressed
105
65
 
106
66
  return Array.isArray(modelValue.value)
107
- ? ObjectUtilities.contains(btnName, modelValue.value)
108
- : ObjectUtilities.equals(btnName, modelValue.value)
67
+ ? contains(btnName, modelValue.value)
68
+ : equals(btnName, modelValue.value)
109
69
  })
110
70
 
111
71
  /**
112
- * Selected button state
113
- * If on button "toggle" and "action" GROUP force the selected state
72
+ * @description Define component classes with BEM style.
73
+ * @returns {Array} The component classes.
114
74
  */
115
- const selected = computed(() => {
116
- if (!toggle.value) return props.selected
117
-
118
- return Array.isArray(modelValue.value)
119
- ? ObjectUtilities.contains(btnName, modelValue.value)
120
- : ObjectUtilities.equals(btnName, modelValue.value)
121
- })
122
-
123
- //Styles & bindings
124
- const { bemCssClasses: btnClass } = useBemModifiers('vv-button', {
75
+ const { bemCssClasses } = useBemModifiers('vv-button', {
125
76
  modifiers,
126
- active,
127
- selected,
77
+ active: props.active,
78
+ pressed: isPressed,
128
79
  disabled,
129
80
  reverse: computed(() =>
130
81
  [ButtonIconPosition.right, ButtonIconPosition.bottom].includes(
@@ -138,39 +89,54 @@ const { bemCssClasses: btnClass } = useBemModifiers('vv-button', {
138
89
  ),
139
90
  iconOnly: computed(() => icon?.value && !label?.value && !slots['default'])
140
91
  })
92
+
141
93
  /**
142
- * Compute component properties
94
+ * @description Define icon attributes.
95
+ * @returns {Object} The icon attributes.
143
96
  */
144
- const properties = computed(() => {
145
- return {
146
- ...linkProps.value,
147
- 'aria-label': props.label || attrs['aria-label'],
148
- 'aria-disabled': disabled.value,
149
- role: 'button',
150
- class: btnClass.value,
151
- to: props.to
152
- }
153
- })
97
+ const hasIconProps = computed(() =>
98
+ typeof icon?.value === 'string' ? { name: icon?.value } : icon?.value
99
+ )
100
+
154
101
  /**
155
- * Compute link props (target, href)
102
+ * @description Define component attributes.
103
+ * @returns {Object} The component attributes.
156
104
  */
157
- const linkProps = computed(() => {
158
- const isLink = isComponent.value === ButtonTag.a
159
- let toReturn = {}
160
- if (isLink) {
161
- toReturn = disabled.value
162
- ? {
163
- href: 'javascript:;'
164
- }
165
- : {
166
- target: props.target,
167
- href: props.href
168
- }
105
+ const hasProps = computed(() => {
106
+ const toReturn = {
107
+ class: bemCssClasses.value,
108
+ 'aria-label': attrs['aria-label'],
109
+ 'aria-pressed': isPressed.value ? true : undefined
110
+ }
111
+ switch (hasTag.value) {
112
+ case ButtonTag.a:
113
+ return {
114
+ ...toReturn,
115
+ role: 'button',
116
+ href: props.href,
117
+ target: props.target,
118
+ rel: props.rel
119
+ }
120
+ case ButtonTag.routerLink:
121
+ case ButtonTag.nuxtLink:
122
+ return {
123
+ ...toReturn,
124
+ role: 'button',
125
+ to: props.to,
126
+ target: props.target
127
+ }
128
+ default:
129
+ return {
130
+ ...toReturn,
131
+ type: props.type,
132
+ disabled: disabled.value
133
+ }
169
134
  }
170
- return toReturn
171
135
  })
172
136
 
173
- //Methods
137
+ /**
138
+ * @description Catch click event in a group.
139
+ */
174
140
  function onBtnClick() {
175
141
  // set group modelValue
176
142
  if (isInGroup.value) {
@@ -178,3 +144,47 @@ function onBtnClick() {
178
144
  }
179
145
  }
180
146
  </script>
147
+
148
+ <template>
149
+ <!-- #region component: "button" | "a" | "router-link" | "nuxt-link" -->
150
+ <component v-bind="hasProps" :is="hasTag" @click.passive="onBtnClick">
151
+ <!-- @slot default to replace all button content -->
152
+ <slot>
153
+ <!-- #region loading -->
154
+ <template v-if="loading">
155
+ <slot name="loading">
156
+ <VvIcon
157
+ v-if="loadingIcon"
158
+ class="vv-button__loading-icon"
159
+ :name="loadingIcon" />
160
+ <span v-if="loadingLabel" class="vv-button__label">
161
+ {{ loadingLabel }}
162
+ </span>
163
+ </slot>
164
+ </template>
165
+ <!-- #endregion loading -->
166
+ <!-- #region button -->
167
+ <template v-else>
168
+ <!-- @slot before -->
169
+ <slot name="before" />
170
+ <!-- #region icon -->
171
+ <template v-if="icon">
172
+ <VvIcon class="vv-button__icon" v-bind="hasIconProps" />
173
+ </template>
174
+ <!-- #endregion icon -->
175
+ <!-- #region label -->
176
+ <span v-if="label" class="vv-button__label">
177
+ <!-- @slot Use this slot for button label -->
178
+ <slot name="label">
179
+ {{ label }}
180
+ </slot>
181
+ </span>
182
+ <!-- #endregion label -->
183
+ <!-- @slot after -->
184
+ <slot name="after" />
185
+ </template>
186
+ <!-- #endregion button -->
187
+ </slot>
188
+ </component>
189
+ <!-- #endregion component: button | a | router-link | nuxt-link -->
190
+ </template>
@@ -0,0 +1,147 @@
1
+ import { type PropType, type ExtractPropTypes, toRefs, type Ref } from 'vue'
2
+ import { DisabledProps, ModifiersProps } from '@/props'
3
+ import type IButtonGroupState from '@/composables/group/types/IButtonGroupState'
4
+ import { useInjectedGroupState } from '@/composables/group/useInjectedGroupState'
5
+ import { VV_BUTTON_GROUP } from '@/constants'
6
+
7
+ export enum ButtonIconPosition {
8
+ left = 'left',
9
+ right = 'right',
10
+ top = 'top',
11
+ bottom = 'bottom'
12
+ }
13
+
14
+ export enum ButtonType {
15
+ button = 'button',
16
+ submit = 'submit',
17
+ reset = 'reset'
18
+ }
19
+
20
+ export enum ButtonTag {
21
+ nuxtLink = 'nuxt-link',
22
+ routerLink = 'router-link',
23
+ a = 'a',
24
+ button = 'button'
25
+ }
26
+
27
+ export enum ButtonTarget {
28
+ _blank = '_blank',
29
+ _self = '_self',
30
+ _parent = '_parent',
31
+ _top = '_top'
32
+ }
33
+
34
+ export const VvButtonEvents = ['update:modelValue']
35
+
36
+ export const VvButtonProps = {
37
+ ...ModifiersProps,
38
+ ...DisabledProps,
39
+ /**
40
+ * Button icon
41
+ */
42
+ icon: {
43
+ type: [String, Object],
44
+ default: ''
45
+ },
46
+ /**
47
+ * Button icon position
48
+ */
49
+ iconPosition: {
50
+ type: String as PropType<ButtonIconPosition>,
51
+ default: ButtonIconPosition.left,
52
+ validator: (value: string) => value in ButtonIconPosition
53
+ },
54
+ /**
55
+ * Button label
56
+ */
57
+ label: [String, Number],
58
+ /**
59
+ * Loading status
60
+ */
61
+ loading: Boolean,
62
+ /**
63
+ * Loading icon
64
+ */
65
+ loadingIcon: { type: String, default: 'eos-icons:bubble-loading' },
66
+ /**
67
+ * Loading label
68
+ */
69
+ loadingLabel: {
70
+ type: String,
71
+ default: 'Loading...'
72
+ },
73
+ /**
74
+ * The router-link/nuxt-link property, if it is defined the button is rendered as a ruouter-link or nuxt-link.
75
+ * @see Documentation of [router-link](https://router.vuejs.org/api/#router-link) and [nuxt-link](https://nuxtjs.org/api/components-nuxt-link/)
76
+ */
77
+ to: {
78
+ type: [String, Object]
79
+ },
80
+ /**
81
+ * Link href
82
+ */
83
+ href: String,
84
+ /**
85
+ * Link target
86
+ */
87
+ target: {
88
+ type: String as PropType<ButtonTarget>,
89
+ validator: (value: string) => value in ButtonTarget
90
+ },
91
+ active: Boolean,
92
+ /**
93
+ * Button pressed mode
94
+ */
95
+ pressed: Boolean,
96
+ /**
97
+ * Link rel
98
+ */
99
+ rel: {
100
+ type: String,
101
+ default: 'noopener noreferrer'
102
+ },
103
+ /**
104
+ * Button type
105
+ */
106
+ type: {
107
+ type: String,
108
+ default: ButtonType.button,
109
+ validator: (value: string) => value in ButtonType
110
+ }
111
+ }
112
+
113
+ export type VvButtonPropsTypes = ExtractPropTypes<typeof VvButtonProps>
114
+
115
+ /**
116
+ * Merges local and group props
117
+ */
118
+ export function useGroupProps(props: VvButtonPropsTypes) {
119
+ const { group, isInGroup, getGroupOrLocalRef } =
120
+ useInjectedGroupState<IButtonGroupState>(VV_BUTTON_GROUP)
121
+
122
+ // local props
123
+ const { iconPosition, icon, label, pressed } = toRefs(props)
124
+
125
+ // group props
126
+ const modelValue = getGroupOrLocalRef('modelValue', props)
127
+ const disabled = getGroupOrLocalRef('disabled', props) as Ref<boolean>
128
+ const toggle = getGroupOrLocalRef('toggle', props) as Ref<boolean>
129
+ const modifiers = getGroupOrLocalRef('modifiers', props) as Ref<
130
+ string[] | string
131
+ >
132
+
133
+ return {
134
+ // group props
135
+ modelValue,
136
+ disabled,
137
+ toggle,
138
+ isInGroup,
139
+ group,
140
+ modifiers,
141
+ // local props
142
+ pressed,
143
+ iconPosition,
144
+ icon,
145
+ label
146
+ }
147
+ }
@@ -1,37 +1,36 @@
1
- <template>
2
- <div :class="btnGroupClass" role="group">
3
- <slot />
4
- </div>
5
- </template>
1
+ <script lang="ts">
2
+ export default {
3
+ name: 'VvButtonGroup'
4
+ }
5
+ </script>
6
6
 
7
7
  <script setup lang="ts">
8
8
  import type IButtonGroupState from '@/composables/group/types/IButtonGroupState'
9
-
10
9
  import { ref, toRefs } from 'vue'
11
- import { VvButtonGroupProps, VvButtonGroupEvents } from './VvButtonGroup'
12
- import { VV_BUTTON_GROUP } from '../../constants'
13
-
14
- //Composables
10
+ import { VV_BUTTON_GROUP } from '@/constants'
15
11
  import { useVModel } from '@vueuse/core'
16
- import { useProvideGroupState } from '../../composables/group/useProvideGroupState'
12
+ import { useProvideGroupState } from '@/composables/group/useProvideGroupState'
17
13
  import { useBemModifiers } from '@/composables/useModifiers'
14
+ import {
15
+ VvButtonGroupProps,
16
+ VvButtonGroupEvents
17
+ } from '@/components/VvButtonGroup'
18
18
 
19
- //Emits, props, attrs, slots
19
+ // emit and props
20
20
  const emit = defineEmits(VvButtonGroupEvents)
21
21
  const props = defineProps(VvButtonGroupProps)
22
22
 
23
- //Data
23
+ // data
24
24
  const modelValue = useVModel(props, 'modelValue', emit)
25
25
  const { disabled, vertical, compact, toggle, modifiers } = toRefs(props)
26
26
 
27
- //Computed
28
- const { bemCssClasses: btnGroupClass } = useBemModifiers('vv-button-group', {
27
+ // style
28
+ const { bemCssClasses } = useBemModifiers('vv-button-group', {
29
29
  modifiers,
30
30
  vertical,
31
31
  compact
32
32
  })
33
33
 
34
- // #region group
35
34
  const groupState: IButtonGroupState = {
36
35
  key: VV_BUTTON_GROUP,
37
36
  modelValue,
@@ -40,5 +39,10 @@ const groupState: IButtonGroupState = {
40
39
  modifiers: modifiers?.value ? modifiers : ref([])
41
40
  }
42
41
  useProvideGroupState(groupState)
43
- // #endregion group
44
42
  </script>
43
+
44
+ <template>
45
+ <div :class="bemCssClasses" role="group">
46
+ <slot />
47
+ </div>
48
+ </template>
@@ -1,5 +1,24 @@
1
+ <script lang="ts">
2
+ export default {
3
+ name: 'VvCard'
4
+ }
5
+ </script>
6
+
7
+ <script setup lang="ts">
8
+ import { useBemModifiers } from '@/composables/useModifiers'
9
+ import { VvCardProps } from '@/components/VvCard'
10
+
11
+ // props and attrs
12
+ const props = defineProps(VvCardProps)
13
+
14
+ // styles
15
+ const { bemCssClasses } = useBemModifiers('vv-card', {
16
+ modifiers: props.modifiers
17
+ })
18
+ </script>
19
+
1
20
  <template>
2
- <article :class="cardClass" v-bind="cardAttrs">
21
+ <article :class="bemCssClasses">
3
22
  <header v-if="$slots.header || title" class="vv-card__header">
4
23
  <slot name="header">
5
24
  {{ title }}
@@ -14,24 +33,3 @@
14
33
  </footer>
15
34
  </article>
16
35
  </template>
17
-
18
- <script setup lang="ts">
19
- import { toRefs, computed, useAttrs } from 'vue'
20
- import { VvCardProps } from './VvCard'
21
-
22
- //Components
23
- import { useBemModifiers } from '../../composables/useModifiers'
24
-
25
- //Props, Emits, attrs ...
26
- const props = defineProps(VvCardProps)
27
- const attrs = useAttrs()
28
-
29
- //Styles & bindings
30
- const { modifiers } = toRefs(props)
31
- const { bemCssClasses: cardClass } = useBemModifiers('vv-card', {
32
- modifiers
33
- })
34
- const cardAttrs = computed(() => {
35
- return attrs
36
- })
37
- </script>
File without changes
@@ -0,0 +1,124 @@
1
+ <script lang="ts">
2
+ export default {
3
+ name: 'VvCheckbox'
4
+ }
5
+ </script>
6
+
7
+ <script setup lang="ts">
8
+ import { computed, ref, useSlots, watchEffect } from 'vue'
9
+ import { contains, equals, removeFromList } from '@/utils/ObjectUtilities'
10
+ import { useBemModifiers } from '@/composables/useModifiers'
11
+ import {
12
+ VvCheckboxProps,
13
+ VvCheckboxEvents,
14
+ useGroupProps
15
+ } from '@/components/VvCheckbox'
16
+ import { HintSlotFactory } from '@/components/common/HintSlot'
17
+
18
+ // props, emits and slots
19
+ const props = defineProps(VvCheckboxProps)
20
+ const emit = defineEmits(VvCheckboxEvents)
21
+ const slots = useSlots()
22
+
23
+ // data
24
+ const { disabled, readonly, valid, error, propsSwitch, modelValue } =
25
+ useGroupProps(props, emit)
26
+ // template ref
27
+ const input = ref()
28
+
29
+ // computed
30
+ const hasId = computed(() =>
31
+ props.id !== undefined ? String(props.id) : undefined
32
+ )
33
+ const isBinary = computed(
34
+ () => props.trueValue !== undefined && props.falseValue !== undefined
35
+ )
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
41
+ }
42
+ if (props.valid === true) {
43
+ return false
44
+ }
45
+ return undefined
46
+ })
47
+ const isChecked = computed(() => {
48
+ if (isBinary.value) {
49
+ return modelValue.value === props.trueValue
50
+ }
51
+ return Array.isArray(modelValue.value)
52
+ ? contains(props.value, modelValue.value)
53
+ : equals(props.value, modelValue.value)
54
+ })
55
+ const hasValue = computed(() => {
56
+ if (isBinary.value) {
57
+ return undefined
58
+ }
59
+ return ['string', 'number', 'boolean'].includes(typeof props.value)
60
+ ? props.value
61
+ : true
62
+ })
63
+ const localModelValue = computed({
64
+ get() {
65
+ return isChecked.value
66
+ },
67
+ set(newValue) {
68
+ if (isBinary.value) {
69
+ modelValue.value = newValue ? props.trueValue : props.falseValue
70
+ return
71
+ }
72
+ if (Array.isArray(modelValue.value)) {
73
+ modelValue.value = newValue
74
+ ? [...modelValue.value, props.value]
75
+ : removeFromList(props.value, modelValue.value)
76
+ return
77
+ }
78
+ modelValue.value = newValue ? props.value : null
79
+ emit('change', newValue)
80
+ }
81
+ })
82
+
83
+ // styles
84
+ const { bemCssClasses } = useBemModifiers('vv-checkbox', {
85
+ switch: propsSwitch,
86
+ valid,
87
+ invalid: error,
88
+ disabled,
89
+ readonly
90
+ })
91
+
92
+ watchEffect(() => {
93
+ if (isBinary.value && Array.isArray(modelValue.value)) {
94
+ // eslint-disable-next-line no-console
95
+ console.warn(
96
+ `[VvCheckbox] The model value is an array but the component is in binary mode.`
97
+ )
98
+ }
99
+ })
100
+
101
+ // hint
102
+ const { HintSlot } = HintSlotFactory(props, slots)
103
+ </script>
104
+
105
+ <template>
106
+ <label :class="bemCssClasses" :for="hasId">
107
+ <input
108
+ :id="hasId"
109
+ ref="input"
110
+ v-model="localModelValue"
111
+ type="checkbox"
112
+ class="vv-checkbox__input"
113
+ :name="name"
114
+ :disabled="isDisabled"
115
+ :value="hasValue"
116
+ :tabindex="hasTabindex"
117
+ :aria-invalid="isInvalid" />
118
+ <!-- @slot Use this slot for check label -->
119
+ <slot :value="modelValue">
120
+ {{ label }}
121
+ </slot>
122
+ <HintSlot class="vv-checkbox__hint" :params="{ value: modelValue }" />
123
+ </label>
124
+ </template>