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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/bin/icons.cjs +73 -0
  2. package/bin/icons.js +75 -0
  3. package/dist/Volver.d.ts +15 -2
  4. package/dist/components/VvAccordion/VvAccordion.es.js +133 -236
  5. package/dist/components/VvAccordion/VvAccordion.umd.js +1 -1
  6. package/dist/components/VvAccordion/VvAccordion.vue.d.ts +32 -97
  7. package/dist/components/VvAccordion/index.d.ts +46 -0
  8. package/dist/components/VvAccordionGroup/VvAccordionGroup.es.js +199 -277
  9. package/dist/components/VvAccordionGroup/VvAccordionGroup.umd.js +1 -1
  10. package/dist/components/VvAccordionGroup/VvAccordionGroup.vue.d.ts +44 -151
  11. package/dist/components/VvAccordionGroup/{VvAccordionGroup.d.ts → index.d.ts} +9 -13
  12. package/dist/components/VvBadge/VvBadge.es.js +42 -151
  13. package/dist/components/VvBadge/VvBadge.umd.js +1 -1
  14. package/dist/components/VvBadge/VvBadge.vue.d.ts +12 -53
  15. package/dist/components/VvBadge/{VvBadge.d.ts → index.d.ts} +0 -0
  16. package/dist/components/VvBreadcrumb/VvBreadcrumb.es.js +55 -168
  17. package/dist/components/VvBreadcrumb/VvBreadcrumb.umd.js +1 -1
  18. package/dist/components/VvBreadcrumb/VvBreadcrumb.vue.d.ts +24 -104
  19. package/dist/components/VvBreadcrumb/{VvBreadcrumb.d.ts → index.d.ts} +1 -1
  20. package/dist/components/VvButton/VvButton.es.js +298 -312
  21. package/dist/components/VvButton/VvButton.umd.js +1 -1
  22. package/dist/components/VvButton/VvButton.vue.d.ts +91 -163
  23. package/dist/components/VvButton/{VvButton.d.ts → index.d.ts} +46 -9
  24. package/dist/components/VvButtonGroup/VvButtonGroup.es.js +59 -172
  25. package/dist/components/VvButtonGroup/VvButtonGroup.umd.js +1 -1
  26. package/dist/components/VvButtonGroup/VvButtonGroup.vue.d.ts +30 -125
  27. package/dist/components/VvButtonGroup/{VvButtonGroup.d.ts → index.d.ts} +0 -0
  28. package/dist/components/VvCard/VvCard.es.js +55 -166
  29. package/dist/components/VvCard/VvCard.umd.js +1 -1
  30. package/dist/components/VvCard/VvCard.vue.d.ts +16 -61
  31. package/dist/components/VvCard/{VvCard.d.ts → index.d.ts} +1 -1
  32. package/dist/components/VvCheckbox/VvCheckbox.es.js +344 -0
  33. package/dist/components/VvCheckbox/VvCheckbox.umd.js +1 -0
  34. package/dist/components/VvCheckbox/VvCheckbox.vue.d.ts +87 -0
  35. package/dist/components/VvCheckbox/index.d.ts +86 -0
  36. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js +415 -0
  37. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.umd.js +1 -0
  38. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.vue.d.ts +113 -0
  39. package/dist/components/{VvCheckGroup/VvCheckGroup.d.ts → VvCheckboxGroup/index.d.ts} +10 -10
  40. package/dist/components/VvDialog/VvDialog.es.js +108 -230
  41. package/dist/components/VvDialog/VvDialog.umd.js +1 -1
  42. package/dist/components/VvDialog/VvDialog.vue.d.ts +28 -132
  43. package/dist/components/VvDialog/{VvDialog.d.ts → index.d.ts} +2 -6
  44. package/dist/components/VvDropdown/VvDropdown.es.js +167 -186
  45. package/dist/components/VvDropdown/VvDropdown.umd.js +1 -1
  46. package/dist/components/VvDropdown/VvDropdown.vue.d.ts +34 -136
  47. package/dist/components/VvDropdown/{VvDropdown.d.ts → index.d.ts} +7 -3
  48. package/dist/components/VvIcon/VvIcon.es.js +62 -174
  49. package/dist/components/VvIcon/VvIcon.umd.js +1 -1
  50. package/dist/components/VvIcon/VvIcon.vue.d.ts +36 -150
  51. package/dist/components/VvIcon/{VvIcon.d.ts → index.d.ts} +9 -0
  52. package/dist/components/VvInputText/VvInputClearAction.d.ts +36 -0
  53. package/dist/components/VvInputText/VvInputPasswordAction.d.ts +56 -0
  54. package/dist/components/VvInputText/VvInputStepAction.d.ts +37 -0
  55. package/dist/components/VvInputText/VvInputText.es.js +586 -577
  56. package/dist/components/VvInputText/VvInputText.umd.js +1 -2
  57. package/dist/components/VvInputText/VvInputText.vue.d.ts +187 -275
  58. package/dist/components/VvInputText/VvInputTextActions.d.ts +1 -1
  59. package/dist/components/VvInputText/index.d.ts +175 -0
  60. package/dist/components/VvNativeSelect/VvNativeSelect.es.js +299 -347
  61. package/dist/components/VvNativeSelect/VvNativeSelect.umd.js +1 -2
  62. package/dist/components/VvNativeSelect/VvNativeSelect.vue.d.ts +78 -190
  63. package/dist/components/VvNativeSelect/{VvNativeSelect.d.ts → index.d.ts} +35 -8
  64. package/dist/components/VvProgress/VvProgress.es.js +45 -162
  65. package/dist/components/VvProgress/VvProgress.umd.js +1 -1
  66. package/dist/components/VvProgress/VvProgress.vue.d.ts +17 -103
  67. package/dist/components/VvProgress/{VvProgress.d.ts → index.d.ts} +1 -7
  68. package/dist/components/VvRadio/VvRadio.es.js +292 -267
  69. package/dist/components/VvRadio/VvRadio.umd.js +1 -1
  70. package/dist/components/VvRadio/VvRadio.vue.d.ts +52 -122
  71. package/dist/components/VvRadio/index.d.ts +64 -0
  72. package/dist/components/VvRadioGroup/VvRadioGroup.es.js +342 -380
  73. package/dist/components/VvRadioGroup/VvRadioGroup.umd.js +1 -2
  74. package/dist/components/VvRadioGroup/VvRadioGroup.vue.d.ts +58 -213
  75. package/dist/components/VvRadioGroup/{VvRadioGroup.d.ts → index.d.ts} +2 -2
  76. package/dist/components/VvSelect/VvSelect.es.js +556 -510
  77. package/dist/components/VvSelect/VvSelect.umd.js +1 -2
  78. package/dist/components/VvSelect/VvSelect.vue.d.ts +75 -240
  79. package/dist/components/VvSelect/{VvSelect.d.ts → index.d.ts} +12 -5
  80. package/dist/components/VvTextarea/VvTextarea.es.js +372 -481
  81. package/dist/components/VvTextarea/VvTextarea.umd.js +1 -2
  82. package/dist/components/VvTextarea/VvTextarea.vue.d.ts +103 -299
  83. package/dist/components/VvTextarea/{VvTextarea.d.ts → index.d.ts} +36 -13
  84. package/dist/components/common/HintSlot.d.ts +10 -4
  85. package/dist/components/index.d.ts +13 -6
  86. package/dist/components/index.es.js +2070 -895
  87. package/dist/components/index.umd.js +1 -2
  88. package/dist/composables/debouncedInput/useDebouncedInput.d.ts +2 -2
  89. package/dist/composables/focus/useComponentFocus.d.ts +3 -3
  90. package/dist/composables/group/types/IAccordionGroupState.d.ts +1 -3
  91. package/dist/composables/group/types/IGroupState.d.ts +2 -2
  92. package/dist/composables/group/useInjectedGroupState.d.ts +4 -4
  93. package/dist/composables/group/useProvideGroupState.d.ts +1 -1
  94. package/dist/composables/icons/useComponentIcons.d.ts +2 -2
  95. package/dist/composables/textLimit/useTextLimit.d.ts +0 -3
  96. package/dist/constants.d.ts +4 -4
  97. package/dist/icons.d.ts +1881 -0
  98. package/dist/icons.es.js +4 -6
  99. package/dist/icons.umd.js +1 -1
  100. package/dist/index.es.js +2113 -932
  101. package/dist/index.umd.js +1 -2
  102. package/dist/props/index.d.ts +9 -3
  103. package/dist/resolvers/unplugin.d.ts +27 -0
  104. package/dist/resolvers/unplugin.es.js +40 -0
  105. package/dist/resolvers/unplugin.umd.js +1 -0
  106. package/dist/stories/Accordion/Accordion.test.d.ts +4 -0
  107. package/dist/stories/Badge/Badge.test.d.ts +2 -0
  108. package/dist/stories/Breadcrumb/Breadcrumb.test.d.ts +2 -0
  109. package/dist/stories/Button/Button.test.d.ts +3 -8
  110. package/dist/stories/Card/Card.test.d.ts +3 -0
  111. package/dist/stories/Dialog/Dialog.test.d.ts +2 -0
  112. package/dist/stories/Dropdown/Dropdown.test.d.ts +2 -0
  113. package/dist/stories/Icon/IconList.vue.d.ts +1 -43
  114. package/dist/stories/InputText/InputText.test.d.ts +6 -0
  115. package/dist/stories/Radio/Radio.test.d.ts +3 -0
  116. package/dist/stories/RadioGroup/RadioGroup.test.d.ts +8 -0
  117. package/dist/stories/Select/Select.test.d.ts +3 -0
  118. package/dist/stories/Textarea/Textarea.test.d.ts +8 -0
  119. package/dist/stories/utils.d.ts +1 -3
  120. package/dist/test/sleep.d.ts +1 -0
  121. package/dist/utils/ObjectUtilities.d.ts +82 -95
  122. package/env.d.ts +1 -0
  123. package/package.json +102 -68
  124. package/src/Volver.ts +32 -3
  125. package/src/assets/icons/detailed.json +1 -1
  126. package/src/assets/icons/normal.json +1 -1
  127. package/src/assets/icons/simple.json +1 -1
  128. package/src/components/VvAccordion/VvAccordion.vue +80 -76
  129. package/src/components/VvAccordion/index.ts +69 -0
  130. package/src/components/VvAccordionGroup/VvAccordionGroup.vue +77 -41
  131. package/src/components/VvAccordionGroup/{VvAccordionGroup.ts → index.ts} +8 -12
  132. package/src/components/VvBadge/VvBadge.vue +14 -10
  133. package/src/components/VvBadge/{VvBadge.ts → index.ts} +0 -0
  134. package/src/components/VvBreadcrumb/VvBreadcrumb.vue +18 -19
  135. package/src/components/VvBreadcrumb/{VvBreadcrumb.ts → index.ts} +1 -1
  136. package/src/components/VvButton/VvButton.vue +123 -113
  137. package/src/components/VvButton/index.ts +147 -0
  138. package/src/components/VvButtonGroup/VvButtonGroup.vue +21 -17
  139. package/src/components/VvButtonGroup/{VvButtonGroup.ts → index.ts} +0 -0
  140. package/src/components/VvCard/VvCard.vue +20 -22
  141. package/src/components/VvCard/{VvCard.ts → index.ts} +0 -0
  142. package/src/components/VvCheckbox/VvCheckbox.vue +124 -0
  143. package/src/components/VvCheckbox/index.ts +94 -0
  144. package/src/components/{VvCheckGroup/VvCheckGroup.vue → VvCheckboxGroup/VvCheckboxGroup.vue} +49 -54
  145. package/src/components/{VvCheckGroup/VvCheckGroup.ts → VvCheckboxGroup/index.ts} +9 -9
  146. package/src/components/VvDialog/VvDialog.vue +47 -50
  147. package/src/components/VvDialog/index.ts +10 -0
  148. package/src/components/VvDropdown/VvDropdown.vue +61 -40
  149. package/src/components/VvDropdown/{VvDropdown.ts → index.ts} +8 -4
  150. package/src/components/VvIcon/VvIcon.vue +31 -25
  151. package/src/components/VvIcon/{VvIcon.ts → index.ts} +9 -0
  152. package/src/components/VvInputText/VvInputClearAction.ts +53 -0
  153. package/src/components/VvInputText/VvInputPasswordAction.ts +70 -0
  154. package/src/components/VvInputText/VvInputStepAction.ts +49 -0
  155. package/src/components/VvInputText/VvInputText.vue +168 -170
  156. package/src/components/VvInputText/VvInputTextActions.ts +54 -108
  157. package/src/components/VvInputText/index.ts +135 -0
  158. package/src/components/VvNativeSelect/VvNativeSelect.vue +130 -68
  159. package/src/components/VvNativeSelect/{VvNativeSelect.ts → index.ts} +26 -7
  160. package/src/components/VvProgress/VvProgress.vue +25 -26
  161. package/src/components/VvProgress/{VvProgress.ts → index.ts} +4 -7
  162. package/src/components/VvRadio/VvRadio.vue +81 -108
  163. package/src/components/VvRadio/index.ts +78 -0
  164. package/src/components/VvRadioGroup/VvRadioGroup.vue +45 -45
  165. package/src/components/VvRadioGroup/{VvRadioGroup.ts → index.ts} +1 -1
  166. package/src/components/VvSelect/VvSelect.vue +90 -69
  167. package/src/components/VvSelect/{VvSelect.ts → index.ts} +12 -5
  168. package/src/components/VvTextarea/VvTextarea.vue +121 -128
  169. package/src/components/VvTextarea/{VvTextarea.ts → index.ts} +31 -11
  170. package/src/components/common/HintSlot.ts +157 -136
  171. package/src/components/index.ts +13 -6
  172. package/src/composables/debouncedInput/useDebouncedInput.ts +21 -15
  173. package/src/composables/focus/useComponentFocus.ts +6 -8
  174. package/src/composables/group/types/IAccordionGroupState.ts +1 -3
  175. package/src/composables/group/types/IGroupState.ts +2 -2
  176. package/src/composables/group/useInjectedGroupState.ts +20 -30
  177. package/src/composables/group/useProvideGroupState.ts +1 -2
  178. package/src/composables/icons/useComponentIcons.ts +2 -3
  179. package/src/composables/options/useOptions.ts +3 -0
  180. package/src/composables/textLimit/useTextLimit.ts +1 -4
  181. package/src/composables/useModifiers.ts +13 -15
  182. package/src/constants.ts +5 -7
  183. package/src/directives/{.README → .gitkeep} +0 -0
  184. package/src/icons.ts +7 -0
  185. package/src/index.ts +0 -1
  186. package/src/props/index.ts +7 -1
  187. package/src/resolvers/unplugin.ts +103 -0
  188. package/src/shims.d.ts +11 -0
  189. package/src/stories/Accordion/Accordion.stories.mdx +10 -9
  190. package/src/stories/Accordion/Accordion.test.ts +37 -0
  191. package/src/stories/Accordion/AccordionSlots.stories.mdx +40 -25
  192. package/src/stories/AccordionGroup/AccordionGroup.stories.mdx +10 -16
  193. package/src/stories/AccordionGroup/{accordionGroupTest.js → AccordionGroup.test.js} +15 -17
  194. package/src/stories/AccordionGroup/AccordionGroupCollapse.stories.mdx +38 -0
  195. package/src/stories/AccordionGroup/{AccordionItems.stories.mdx → AccordionGroupItems.stories.mdx} +7 -13
  196. package/src/stories/Badge/Badge.stories.mdx +8 -8
  197. package/src/stories/Badge/Badge.test.ts +16 -0
  198. package/src/stories/Badge/BadgeColor.stories.mdx +6 -7
  199. package/src/stories/Badge/BadgeDot.stories.mdx +4 -3
  200. package/src/stories/Badge/BadgeModifiers.stories.mdx +7 -6
  201. package/src/stories/Breadcrumb/Breadcrumb.stories.mdx +15 -7
  202. package/src/stories/Breadcrumb/Breadcrumb.test.ts +49 -0
  203. package/src/stories/Breadcrumb/BreadcrumbMultiline.stories.mdx +15 -7
  204. package/src/stories/Button/Button.stories.mdx +16 -17
  205. package/src/stories/Button/Button.test.ts +8 -12
  206. package/src/stories/Button/ButtonActive.stories.mdx +2 -1
  207. package/src/stories/Button/ButtonBadge.stories.mdx +2 -2
  208. package/src/stories/Button/ButtonDisabled.stories.mdx +1 -1
  209. package/src/stories/Button/ButtonIcon.stories.mdx +6 -3
  210. package/src/stories/Button/ButtonIconPosition.stories.mdx +1 -1
  211. package/src/stories/Button/ButtonLink.stories.mdx +1 -19
  212. package/src/stories/Button/ButtonLoading.stories.mdx +4 -4
  213. package/src/stories/Button/ButtonModifiers.stories.mdx +1 -1
  214. package/src/stories/Button/ButtonPressed.stories.mdx +31 -0
  215. package/src/stories/Button/ButtonSlots.stories.mdx +1 -1
  216. package/src/stories/ButtonGroup/ButtonGroup.stories.mdx +5 -6
  217. package/src/stories/ButtonGroup/{ButtonGroupTest.js → ButtonGroup.test.js} +6 -28
  218. package/src/stories/ButtonGroup/ButtonGroupAction.stories.mdx +5 -6
  219. package/src/stories/ButtonGroup/ButtonGroupActionQuiet.stories.mdx +3 -4
  220. package/src/stories/ButtonGroup/ButtonGroupBlock.stories.mdx +3 -4
  221. package/src/stories/ButtonGroup/ButtonGroupCompact.stories.mdx +3 -4
  222. package/src/stories/ButtonGroup/ButtonGroupRounded.stories.mdx +3 -4
  223. package/src/stories/ButtonGroup/ButtonGroupToggle.stories.mdx +11 -12
  224. package/src/stories/ButtonGroup/ButtonGroupVertical.stories.mdx +3 -4
  225. package/src/stories/Card/Card.stories.mdx +7 -5
  226. package/src/stories/Card/Card.test.ts +26 -0
  227. package/src/stories/Card/CardSlots.stories.mdx +5 -5
  228. package/src/stories/Card/CardVariant.stories.mdx +5 -4
  229. package/src/stories/Checkbox/Checkbox.stories.mdx +51 -0
  230. package/src/stories/Checkbox/Checkbox.test.js +115 -0
  231. package/src/stories/Checkbox/CheckboxBinary.stories.mdx +76 -0
  232. package/src/stories/{Check/CheckDisabled.stories.mdx → Checkbox/CheckboxDisabled.stories.mdx} +7 -7
  233. package/src/stories/Checkbox/CheckboxError.stories.mdx +43 -0
  234. package/src/stories/Checkbox/CheckboxHintLabel.stories.mdx +35 -0
  235. package/src/stories/{Check/CheckReadonly.stories.mdx → Checkbox/CheckboxReadonly.stories.mdx} +6 -8
  236. package/src/stories/Checkbox/CheckboxSlots.stories.mdx +69 -0
  237. package/src/stories/{Check/CheckSwitch.stories.mdx → Checkbox/CheckboxSwitch.stories.mdx} +8 -8
  238. package/src/stories/CheckboxGroup/CheckboxGroup.stories.mdx +69 -0
  239. package/src/stories/CheckboxGroup/CheckboxGroupDisabled.stories.mdx +26 -0
  240. package/src/stories/CheckboxGroup/CheckboxGroupError.stories.mdx +28 -0
  241. package/src/stories/CheckboxGroup/CheckboxGroupHintLabel.stories.mdx +27 -0
  242. package/src/stories/CheckboxGroup/CheckboxGroupLabel.stories.mdx +26 -0
  243. package/src/stories/{CheckGroup/CheckGroupOptionLabel.stories.mdx → CheckboxGroup/CheckboxGroupOptionLabel.stories.mdx} +14 -11
  244. package/src/stories/{CheckGroup/CheckGroupOptionValue.stories.mdx → CheckboxGroup/CheckboxGroupOptionValue.stories.mdx} +13 -10
  245. package/src/stories/{CheckGroup/CheckGroupOptions.stories.mdx → CheckboxGroup/CheckboxGroupOptions.stories.mdx} +8 -8
  246. package/src/stories/CheckboxGroup/CheckboxGroupReadonly.stories.mdx +26 -0
  247. package/src/stories/CheckboxGroup/CheckboxGroupSlots.stories.mdx +152 -0
  248. package/src/stories/CheckboxGroup/CheckboxGroupValid.stories.mdx +28 -0
  249. package/src/stories/CheckboxGroup/CheckboxGroupVertical.stories.mdx +26 -0
  250. package/src/stories/Dialog/Dialog.stories.mdx +5 -5
  251. package/src/stories/Dialog/Dialog.test.ts +26 -0
  252. package/src/stories/Dialog/DialogAutoClose.stories.mdx +1 -1
  253. package/src/stories/Dialog/DialogSize.stories.mdx +1 -1
  254. package/src/stories/Dropdown/Dropdown.stories.mdx +11 -7
  255. package/src/stories/Dropdown/Dropdown.test.ts +80 -0
  256. package/src/stories/Dropdown/DropdownDisabled.stories.mdx +9 -2
  257. package/src/stories/Dropdown/DropdownLabelNoResults.stories.mdx +2 -2
  258. package/src/stories/Dropdown/DropdownMaxValues.stories.mdx +4 -2
  259. package/src/stories/Dropdown/DropdownMultiple.stories.mdx +4 -2
  260. package/src/stories/Dropdown/DropdownOptions.stories.mdx +4 -4
  261. package/src/stories/Dropdown/DropdownUseObject.stories.mdx +4 -2
  262. package/src/stories/Icon/Icon.stories.mdx +8 -8
  263. package/src/stories/Icon/{IconTest.js → Icon.test.js} +2 -5
  264. package/src/stories/Icon/IconList.vue +5 -6
  265. package/src/stories/Icon/IconPrefix.stories.mdx +2 -2
  266. package/src/stories/Icon/IconRemote.stories.mdx +2 -2
  267. package/src/stories/Icon/IconsList.stories.mdx +2 -18
  268. package/src/stories/InputText/InputText.stories.mdx +25 -19
  269. package/src/stories/InputText/InputText.test.ts +156 -0
  270. package/src/stories/InputText/InputTextAutocomplete.stories.mdx +9 -2
  271. package/src/stories/InputText/InputTextAutofocus.stories.mdx +6 -3
  272. package/src/stories/InputText/InputTextDisabled.stories.mdx +10 -2
  273. package/src/stories/InputText/InputTextError.stories.mdx +10 -2
  274. package/src/stories/InputText/InputTextFloating.stories.mdx +10 -3
  275. package/src/stories/InputText/InputTextHintLabel.stories.mdx +10 -2
  276. package/src/stories/InputText/InputTextIcon.stories.mdx +6 -2
  277. package/src/stories/InputText/InputTextIconPosition.stories.mdx +10 -3
  278. package/src/stories/InputText/InputTextLabel.stories.mdx +8 -2
  279. package/src/stories/InputText/InputTextLoading.stories.mdx +10 -2
  280. package/src/stories/InputText/InputTextMax.stories.mdx +10 -3
  281. package/src/stories/InputText/InputTextMaxLength.stories.mdx +22 -5
  282. package/src/stories/InputText/InputTextMin.stories.mdx +10 -3
  283. package/src/stories/InputText/InputTextMinLength.stories.mdx +9 -2
  284. package/src/stories/InputText/InputTextPlaceholder.stories.mdx +8 -2
  285. package/src/stories/InputText/InputTextReadonly.stories.mdx +6 -2
  286. package/src/stories/InputText/InputTextSlots.stories.mdx +4 -5
  287. package/src/stories/InputText/InputTextStep.stories.mdx +9 -3
  288. package/src/stories/InputText/InputTextType.stories.mdx +110 -13
  289. package/src/stories/InputText/InputTextValid.stories.mdx +10 -2
  290. package/src/stories/NativeSelect/NativeSelect.stories.mdx +15 -11
  291. package/src/stories/NativeSelect/NativeSelect.test.js +151 -0
  292. package/src/stories/NativeSelect/NativeSelectDisabled.stories.mdx +6 -7
  293. package/src/stories/NativeSelect/NativeSelectError.stories.mdx +7 -3
  294. package/src/stories/NativeSelect/NativeSelectHintLabel.stories.mdx +7 -3
  295. package/src/stories/NativeSelect/NativeSelectIconLeftRight.stories.mdx +14 -12
  296. package/src/stories/NativeSelect/NativeSelectLoading.stories.mdx +7 -3
  297. package/src/stories/NativeSelect/NativeSelectOptions.stories.mdx +44 -38
  298. package/src/stories/NativeSelect/NativeSelectReadonly.stories.mdx +19 -11
  299. package/src/stories/NativeSelect/NativeSelectUseObject.stories.mdx +26 -30
  300. package/src/stories/NativeSelect/NativeSelectValid.stories.mdx +7 -3
  301. package/src/stories/NativeSelect/NativeSelectValueKey.stories.mdx +30 -30
  302. package/src/stories/Progress/Progress.stories.mdx +8 -11
  303. package/src/stories/Progress/{ProgressTest.js → Progress.test.js} +4 -10
  304. package/src/stories/Progress/ProgressDeterminate.stories.mdx +3 -6
  305. package/src/stories/Radio/Radio.stories.mdx +11 -17
  306. package/src/stories/Radio/Radio.test.ts +52 -0
  307. package/src/stories/Radio/RadioDisabled.stories.mdx +4 -7
  308. package/src/stories/Radio/RadioError.stories.mdx +8 -28
  309. package/src/stories/Radio/RadioHintLabel.stories.mdx +6 -7
  310. package/src/stories/Radio/RadioSlots.stories.mdx +21 -7
  311. package/src/stories/RadioGroup/RadioGroup.stories.mdx +20 -27
  312. package/src/stories/RadioGroup/RadioGroup.test.ts +139 -0
  313. package/src/stories/RadioGroup/RadioGroupDisabled.stories.mdx +6 -8
  314. package/src/stories/RadioGroup/RadioGroupError.stories.mdx +9 -11
  315. package/src/stories/RadioGroup/RadioGroupHintLabel.stories.mdx +8 -10
  316. package/src/stories/RadioGroup/RadioGroupLabel.stories.mdx +6 -8
  317. package/src/stories/RadioGroup/RadioGroupOptionLabel.stories.mdx +11 -13
  318. package/src/stories/RadioGroup/RadioGroupOptionValue.stories.mdx +9 -11
  319. package/src/stories/RadioGroup/RadioGroupOptions.stories.mdx +7 -9
  320. package/src/stories/RadioGroup/RadioGroupReadonly.stories.mdx +6 -8
  321. package/src/stories/RadioGroup/RadioGroupSlots.stories.mdx +39 -62
  322. package/src/stories/RadioGroup/RadioGroupValid.stories.mdx +9 -11
  323. package/src/stories/RadioGroup/RadioGroupVertical.stories.mdx +6 -8
  324. package/src/stories/Select/Select.stories.mdx +32 -29
  325. package/src/stories/Select/Select.test.ts +104 -0
  326. package/src/stories/Select/SelectDisabled.stories.mdx +3 -3
  327. package/src/stories/Select/SelectMaxValues.stories.mdx +3 -3
  328. package/src/stories/Select/SelectMultiple.stories.mdx +5 -6
  329. package/src/stories/Select/SelectNative.stories.mdx +6 -8
  330. package/src/stories/Select/SelectOptions.stories.mdx +4 -4
  331. package/src/stories/Select/SelectSearchable.stories.mdx +13 -12
  332. package/src/stories/Select/SelectSeparator.stories.mdx +3 -3
  333. package/src/stories/Select/SelectUseObject.stories.mdx +3 -3
  334. package/src/stories/Textarea/Textarea.stories.mdx +6 -10
  335. package/src/stories/Textarea/Textarea.test.ts +204 -0
  336. package/src/stories/Textarea/TextareaAutoclear.stories.mdx +3 -2
  337. package/src/stories/Textarea/TextareaAutocomplete.stories.mdx +3 -2
  338. package/src/stories/Textarea/TextareaAutofocus.stories.mdx +3 -2
  339. package/src/stories/Textarea/TextareaDebounce.stories.mdx +7 -6
  340. package/src/stories/Textarea/TextareaDisabled.stories.mdx +9 -3
  341. package/src/stories/Textarea/TextareaError.stories.mdx +7 -2
  342. package/src/stories/Textarea/TextareaErrorLabel.stories.mdx +12 -2
  343. package/src/stories/Textarea/TextareaFloating.stories.mdx +7 -2
  344. package/src/stories/Textarea/TextareaHintLabel.stories.mdx +7 -2
  345. package/src/stories/Textarea/TextareaIcon.stories.mdx +3 -2
  346. package/src/stories/Textarea/TextareaIconPosition.stories.mdx +4 -2
  347. package/src/stories/Textarea/TextareaId.stories.mdx +3 -2
  348. package/src/stories/Textarea/TextareaLabel.stories.mdx +3 -2
  349. package/src/stories/Textarea/TextareaLimit.stories.mdx +5 -2
  350. package/src/stories/Textarea/TextareaLoading.stories.mdx +7 -2
  351. package/src/stories/Textarea/TextareaLoadingLabel.stories.mdx +9 -3
  352. package/src/stories/Textarea/TextareaMaxLength.stories.mdx +5 -4
  353. package/src/stories/Textarea/TextareaMinLength.stories.mdx +3 -2
  354. package/src/stories/Textarea/TextareaModifiers.stories.mdx +10 -2
  355. package/src/stories/Textarea/TextareaName.stories.mdx +3 -2
  356. package/src/stories/Textarea/TextareaPlaceholder.stories.mdx +4 -3
  357. package/src/stories/Textarea/TextareaReadonly.stories.mdx +8 -3
  358. package/src/stories/Textarea/TextareaRequired.stories.mdx +3 -2
  359. package/src/stories/Textarea/TextareaResizable.stories.mdx +7 -2
  360. package/src/stories/Textarea/TextareaRowsCols.stories.mdx +4 -2
  361. package/src/stories/Textarea/TextareaSlots.stories.mdx +7 -8
  362. package/src/stories/Textarea/TextareaValid.stories.mdx +7 -1
  363. package/src/stories/Textarea/TextareaValidLabel.stories.mdx +14 -4
  364. package/src/stories/utils.ts +1 -1
  365. package/src/stories/volver-ui-vue.stories.mdx +1 -1
  366. package/src/test/expect.ts +3 -1
  367. package/src/test/sleep.ts +2 -0
  368. package/src/test/types.d.ts +14 -1
  369. package/src/types/{.README → .gitkeep} +0 -0
  370. package/src/utils/ObjectUtilities.ts +247 -241
  371. package/dist/components/VvAccordion/VvAccordion.d.ts +0 -32
  372. package/dist/components/VvAccordion/useAccordionProps.d.ts +0 -16
  373. package/dist/components/VvButton/useButtonGroupProps.d.ts +0 -18
  374. package/dist/components/VvCheck/VvCheck.d.ts +0 -47
  375. package/dist/components/VvCheck/VvCheck.es.js +0 -318
  376. package/dist/components/VvCheck/VvCheck.umd.js +0 -1
  377. package/dist/components/VvCheck/VvCheck.vue.d.ts +0 -165
  378. package/dist/components/VvCheck/useCheckProps.d.ts +0 -16
  379. package/dist/components/VvCheckGroup/VvCheckGroup.es.js +0 -451
  380. package/dist/components/VvCheckGroup/VvCheckGroup.umd.js +0 -2
  381. package/dist/components/VvCheckGroup/VvCheckGroup.vue.d.ts +0 -272
  382. package/dist/components/VvDialog/constants.d.ts +0 -5
  383. package/dist/components/VvInputText/VvInputText.d.ts +0 -73
  384. package/dist/components/VvInputText/constants.d.ts +0 -55
  385. package/dist/components/VvRadio/VvRadio.d.ts +0 -22
  386. package/dist/components/VvRadio/useRadioProps.d.ts +0 -15
  387. package/dist/components/VvTextarea/constants.d.ts +0 -19
  388. package/dist/stories/RadioGroup/RadioOption.test.d.ts +0 -4
  389. package/dist/stories/RadioGroup/RadioProperty.test.d.ts +0 -12
  390. package/dist/stories/RadioGroup/RadioSlots.test.d.ts +0 -6
  391. package/src/assets/icons/index.js +0 -7
  392. package/src/components/VvAccordion/VvAccordion.ts +0 -34
  393. package/src/components/VvAccordion/useAccordionProps.ts +0 -45
  394. package/src/components/VvButton/VvButton.ts +0 -87
  395. package/src/components/VvButton/useButtonGroupProps.ts +0 -43
  396. package/src/components/VvCheck/VvCheck.ts +0 -48
  397. package/src/components/VvCheck/VvCheck.vue +0 -147
  398. package/src/components/VvCheck/useCheckProps.ts +0 -41
  399. package/src/components/VvDialog/VvDialog.ts +0 -17
  400. package/src/components/VvDialog/constants.ts +0 -5
  401. package/src/components/VvInputText/VvInputText.ts +0 -66
  402. package/src/components/VvInputText/constants.ts +0 -34
  403. package/src/components/VvRadio/VvRadio.ts +0 -25
  404. package/src/components/VvRadio/useRadioProps.ts +0 -40
  405. package/src/components/VvTextarea/constants.ts +0 -14
  406. package/src/stories/Accordion/AccordionBordered.stories.mdx +0 -26
  407. package/src/stories/Accordion/AccordionIconRight.stories.mdx +0 -32
  408. package/src/stories/Accordion/accordionTest.js +0 -36
  409. package/src/stories/AccordionGroup/Accordion.stories.mdx +0 -42
  410. package/src/stories/Badge/BadgeTest.js +0 -21
  411. package/src/stories/Button/ButtonSelected.stories.mdx +0 -30
  412. package/src/stories/Check/Check.stories.mdx +0 -62
  413. package/src/stories/Check/CheckBinary.stories.mdx +0 -75
  414. package/src/stories/Check/CheckError.stories.mdx +0 -64
  415. package/src/stories/Check/CheckErrorTests.js +0 -74
  416. package/src/stories/Check/CheckHintLabel.stories.mdx +0 -30
  417. package/src/stories/Check/CheckPropertyTest.js +0 -102
  418. package/src/stories/Check/CheckSlots.stories.mdx +0 -51
  419. package/src/stories/CheckGroup/CheckGroup.stories.mdx +0 -69
  420. package/src/stories/CheckGroup/CheckGroupDisabled.stories.mdx +0 -26
  421. package/src/stories/CheckGroup/CheckGroupError.stories.mdx +0 -28
  422. package/src/stories/CheckGroup/CheckGroupHintLabel.stories.mdx +0 -27
  423. package/src/stories/CheckGroup/CheckGroupLabel.stories.mdx +0 -26
  424. package/src/stories/CheckGroup/CheckGroupReadonly.stories.mdx +0 -26
  425. package/src/stories/CheckGroup/CheckGroupSlots.stories.mdx +0 -152
  426. package/src/stories/CheckGroup/CheckGroupValid.stories.mdx +0 -28
  427. package/src/stories/CheckGroup/CheckGroupVertical.stories.mdx +0 -26
  428. package/src/stories/RadioGroup/RadioOption.test.ts +0 -45
  429. package/src/stories/RadioGroup/RadioProperty.test.ts +0 -87
  430. package/src/stories/RadioGroup/RadioSlots.test.ts +0 -29
  431. package/src/stories/stories.scss +0 -13
@@ -1,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>