@volverjs/ui-vue 0.0.10-beta.4 → 0.0.10-beta.41

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 (481) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +146 -49
  3. package/auto-imports.d.ts +7 -2
  4. package/bin/icons.cjs +1 -1
  5. package/bin/icons.js +27 -20
  6. package/dist/Volver.d.ts +11 -11
  7. package/dist/components/VvAccordion/VvAccordion.es.js +190 -101
  8. package/dist/components/VvAccordion/VvAccordion.umd.js +1 -1
  9. package/dist/components/VvAccordion/VvAccordion.vue.d.ts +30 -8
  10. package/dist/components/VvAccordion/index.d.ts +8 -9
  11. package/dist/components/VvAccordionGroup/VvAccordionGroup.es.js +450 -170
  12. package/dist/components/VvAccordionGroup/VvAccordionGroup.umd.js +1 -1
  13. package/dist/components/VvAccordionGroup/VvAccordionGroup.vue.d.ts +58 -13
  14. package/dist/components/VvAccordionGroup/index.d.ts +14 -6
  15. package/dist/components/VvAction/VvAction.es.js +84 -33
  16. package/dist/components/VvAction/VvAction.umd.js +1 -1
  17. package/dist/components/VvAction/VvAction.vue.d.ts +57 -22
  18. package/dist/components/VvAction/index.d.ts +25 -9
  19. package/dist/components/VvAlert/VvAlert.es.js +228 -193
  20. package/dist/components/VvAlert/VvAlert.umd.js +1 -1
  21. package/dist/components/VvAlert/VvAlert.vue.d.ts +24 -14
  22. package/dist/components/VvAlert/index.d.ts +17 -9
  23. package/dist/components/VvAlertGroup/VvAlertGroup.es.js +549 -485
  24. package/dist/components/VvAlertGroup/VvAlertGroup.umd.js +1 -1
  25. package/dist/components/VvAlertGroup/VvAlertGroup.vue.d.ts +16 -9
  26. package/dist/components/VvAlertGroup/index.d.ts +7 -15
  27. package/dist/components/VvAvatar/VvAvatar.es.js +65 -22
  28. package/dist/components/VvAvatar/VvAvatar.umd.js +1 -1
  29. package/dist/components/VvAvatar/VvAvatar.vue.d.ts +12 -4
  30. package/dist/components/VvAvatar/index.d.ts +4 -1
  31. package/dist/components/VvAvatarGroup/VvAvatarGroup.es.js +128 -49
  32. package/dist/components/VvAvatarGroup/VvAvatarGroup.umd.js +1 -1
  33. package/dist/components/VvAvatarGroup/VvAvatarGroup.vue.d.ts +10 -3
  34. package/dist/components/VvAvatarGroup/index.d.ts +4 -1
  35. package/dist/components/VvBadge/VvBadge.es.js +77 -28
  36. package/dist/components/VvBadge/VvBadge.umd.js +1 -1
  37. package/dist/components/VvBadge/VvBadge.vue.d.ts +12 -4
  38. package/dist/components/VvBadge/index.d.ts +4 -1
  39. package/dist/components/VvBreadcrumb/VvBreadcrumb.es.js +276 -60
  40. package/dist/components/VvBreadcrumb/VvBreadcrumb.umd.js +1 -1
  41. package/dist/components/VvBreadcrumb/VvBreadcrumb.vue.d.ts +27 -7
  42. package/dist/components/VvBreadcrumb/index.d.ts +6 -10
  43. package/dist/components/VvButton/VvButton.es.js +307 -262
  44. package/dist/components/VvButton/VvButton.umd.js +1 -1
  45. package/dist/components/VvButton/VvButton.vue.d.ts +94 -40
  46. package/dist/components/VvButton/index.d.ts +51 -29
  47. package/dist/components/VvButtonGroup/VvButtonGroup.es.js +95 -40
  48. package/dist/components/VvButtonGroup/VvButtonGroup.umd.js +1 -1
  49. package/dist/components/VvButtonGroup/VvButtonGroup.vue.d.ts +31 -11
  50. package/dist/components/VvButtonGroup/index.d.ts +11 -2
  51. package/dist/components/VvCard/VvCard.es.js +86 -36
  52. package/dist/components/VvCard/VvCard.umd.js +1 -1
  53. package/dist/components/VvCard/VvCard.vue.d.ts +12 -4
  54. package/dist/components/VvCard/index.d.ts +4 -1
  55. package/dist/components/VvCheckbox/VvCheckbox.es.js +315 -251
  56. package/dist/components/VvCheckbox/VvCheckbox.umd.js +1 -1
  57. package/dist/components/VvCheckbox/VvCheckbox.vue.d.ts +106 -34
  58. package/dist/components/VvCheckbox/index.d.ts +47 -14
  59. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js +238 -129
  60. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.umd.js +1 -1
  61. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.vue.d.ts +101 -30
  62. package/dist/components/VvCheckboxGroup/index.d.ts +45 -12
  63. package/dist/components/VvCombobox/VvCombobox.es.js +1377 -1059
  64. package/dist/components/VvCombobox/VvCombobox.umd.js +1 -1
  65. package/dist/components/VvCombobox/VvCombobox.vue.d.ts +606 -680
  66. package/dist/components/VvCombobox/index.d.ts +488 -26
  67. package/dist/components/VvDialog/VvDialog.es.js +180 -176
  68. package/dist/components/VvDialog/VvDialog.umd.js +1 -1
  69. package/dist/components/VvDialog/VvDialog.vue.d.ts +13 -4
  70. package/dist/components/VvDialog/index.d.ts +5 -0
  71. package/dist/components/VvDropdown/VvDropdown.es.js +165 -94
  72. package/dist/components/VvDropdown/VvDropdown.umd.js +1 -1
  73. package/dist/components/VvDropdown/VvDropdown.vue.d.ts +111 -81
  74. package/dist/components/VvDropdown/VvDropdownAction.vue.d.ts +66 -25
  75. package/dist/components/VvDropdown/VvDropdownItem.vue.d.ts +13 -1
  76. package/dist/components/VvDropdown/VvDropdownOptgroup.vue.d.ts +12 -4
  77. package/dist/components/VvDropdown/VvDropdownOption.vue.d.ts +35 -7
  78. package/dist/components/VvDropdown/index.d.ts +52 -10
  79. package/dist/components/VvDropdownAction/VvDropdownAction.es.js +163 -53
  80. package/dist/components/VvDropdownAction/VvDropdownAction.umd.js +1 -1
  81. package/dist/components/VvDropdownItem/VvDropdownItem.es.js +335 -8
  82. package/dist/components/VvDropdownItem/VvDropdownItem.umd.js +1 -1
  83. package/dist/components/VvDropdownOptgroup/VvDropdownOptgroup.es.js +63 -20
  84. package/dist/components/VvDropdownOptgroup/VvDropdownOptgroup.umd.js +1 -1
  85. package/dist/components/VvDropdownOption/VvDropdownOption.es.js +188 -80
  86. package/dist/components/VvDropdownOption/VvDropdownOption.umd.js +1 -1
  87. package/dist/components/VvIcon/VvIcon.es.js +24 -97
  88. package/dist/components/VvIcon/VvIcon.umd.js +1 -1
  89. package/dist/components/VvIcon/VvIcon.vue.d.ts +23 -66
  90. package/dist/components/VvIcon/index.d.ts +33 -48
  91. package/dist/components/VvInputFile/VvInputFile.es.js +1789 -0
  92. package/dist/components/VvInputFile/VvInputFile.umd.js +1 -0
  93. package/dist/components/VvInputFile/VvInputFile.vue.d.ts +391 -0
  94. package/dist/components/VvInputFile/index.d.ts +210 -0
  95. package/dist/components/VvInputText/VvInputClearAction.d.ts +7 -5
  96. package/dist/components/VvInputText/VvInputPasswordAction.d.ts +10 -8
  97. package/dist/components/VvInputText/VvInputStepAction.d.ts +2 -2
  98. package/dist/components/VvInputText/VvInputText.es.js +1489 -563
  99. package/dist/components/VvInputText/VvInputText.umd.js +1 -1
  100. package/dist/components/VvInputText/VvInputText.vue.d.ts +207 -57
  101. package/dist/components/VvInputText/index.d.ts +105 -30
  102. package/dist/components/VvNav/VvNav.es.js +160 -75
  103. package/dist/components/VvNav/VvNav.umd.js +1 -1
  104. package/dist/components/VvNav/VvNav.vue.d.ts +32 -9
  105. package/dist/components/VvNav/VvNavItem.vue.d.ts +1 -1
  106. package/dist/components/VvNav/VvNavSeparator.vue.d.ts +1 -1
  107. package/dist/components/VvNav/index.d.ts +5 -2
  108. package/dist/components/VvNavItem/VvNavItem.es.js +100 -39
  109. package/dist/components/VvNavItem/VvNavItem.umd.js +1 -1
  110. package/dist/components/VvProgress/VvProgress.es.js +73 -27
  111. package/dist/components/VvProgress/VvProgress.umd.js +1 -1
  112. package/dist/components/VvProgress/VvProgress.vue.d.ts +10 -3
  113. package/dist/components/VvProgress/index.d.ts +4 -1
  114. package/dist/components/VvRadio/VvRadio.es.js +313 -250
  115. package/dist/components/VvRadio/VvRadio.umd.js +1 -1
  116. package/dist/components/VvRadio/VvRadio.vue.d.ts +103 -31
  117. package/dist/components/VvRadio/index.d.ts +50 -17
  118. package/dist/components/VvRadioGroup/VvRadioGroup.es.js +236 -128
  119. package/dist/components/VvRadioGroup/VvRadioGroup.umd.js +1 -1
  120. package/dist/components/VvRadioGroup/VvRadioGroup.vue.d.ts +101 -30
  121. package/dist/components/VvRadioGroup/index.d.ts +45 -12
  122. package/dist/components/VvSelect/VvSelect.es.js +367 -300
  123. package/dist/components/VvSelect/VvSelect.umd.js +1 -1
  124. package/dist/components/VvSelect/VvSelect.vue.d.ts +232 -203
  125. package/dist/components/VvSelect/index.d.ts +195 -15
  126. package/dist/components/VvTab/VvTab.es.js +222 -97
  127. package/dist/components/VvTab/VvTab.umd.js +1 -1
  128. package/dist/components/VvTab/VvTab.vue.d.ts +31 -7
  129. package/dist/components/VvTab/index.d.ts +4 -1
  130. package/dist/components/VvTextarea/VvTextarea.es.js +258 -248
  131. package/dist/components/VvTextarea/VvTextarea.umd.js +1 -1
  132. package/dist/components/VvTextarea/VvTextarea.vue.d.ts +156 -49
  133. package/dist/components/VvTextarea/index.d.ts +68 -19
  134. package/dist/components/VvTooltip/VvTooltip.es.js +83 -30
  135. package/dist/components/VvTooltip/VvTooltip.umd.js +1 -1
  136. package/dist/components/VvTooltip/VvTooltip.vue.d.ts +13 -6
  137. package/dist/components/VvTooltip/index.d.ts +5 -2
  138. package/dist/components/common/HintSlot.d.ts +4 -5
  139. package/dist/components/index.d.ts +10 -0
  140. package/dist/components/index.es.js +4575 -2534
  141. package/dist/components/index.umd.js +1 -1
  142. package/dist/composables/alert/useAlert.d.ts +101 -6
  143. package/dist/composables/alert/useInjectAlert.d.ts +1 -6
  144. package/dist/composables/dropdown/useInjectDropdown.d.ts +3 -23
  145. package/dist/composables/dropdown/useProvideDropdown.d.ts +3 -4
  146. package/dist/composables/group/useInjectedGroupState.d.ts +4 -5
  147. package/dist/composables/group/useProvideGroupState.d.ts +3 -3
  148. package/dist/composables/index.d.ts +1 -0
  149. package/dist/composables/index.es.js +94 -5
  150. package/dist/composables/index.umd.js +1 -1
  151. package/dist/composables/useBlurhash.d.ts +7 -0
  152. package/dist/composables/useComponentFocus.d.ts +1 -1
  153. package/dist/composables/useComponentIcon.d.ts +9 -8
  154. package/dist/composables/useOptions.d.ts +4 -4
  155. package/dist/composables/usePersistence.d.ts +3 -0
  156. package/dist/composables/useUniqueId.d.ts +1 -1
  157. package/dist/composables/useVolver.d.ts +1 -1
  158. package/dist/constants.d.ts +34 -32
  159. package/dist/directives/index.d.ts +3 -5
  160. package/dist/directives/index.es.js +104 -45
  161. package/dist/directives/index.umd.js +1 -1
  162. package/dist/directives/v-contextmenu.es.js +1 -1
  163. package/dist/directives/v-contextmenu.umd.js +1 -1
  164. package/dist/directives/v-tooltip.es.js +101 -39
  165. package/dist/directives/v-tooltip.umd.js +1 -1
  166. package/dist/icons.es.js +267 -267
  167. package/dist/icons.umd.js +1 -1
  168. package/dist/index.d.ts +3 -1
  169. package/dist/index.es.js +92 -18
  170. package/dist/index.umd.js +1 -1
  171. package/dist/props/index.d.ts +272 -81
  172. package/dist/resolvers/unplugin.d.ts +6 -1
  173. package/dist/resolvers/unplugin.es.js +87 -10
  174. package/dist/resolvers/unplugin.umd.js +1 -1
  175. package/dist/stories/Accordion/Accordion.settings.d.ts +2 -57
  176. package/dist/stories/AccordionGroup/AccordionGroup.settings.d.ts +2 -66
  177. package/dist/stories/AccordionGroup/AccordionGroup.stories.d.ts +2 -127
  178. package/dist/stories/AccordionGroup/AccordionGroupSlots.stories.d.ts +1437 -495
  179. package/dist/stories/Alert/Alert.settings.d.ts +2 -109
  180. package/dist/stories/Alert/AlertModifiers.stories.d.ts +1 -1
  181. package/dist/stories/Alert/AlertSlots.stories.d.ts +1 -1
  182. package/dist/stories/AlertGroup/AlertGroup.settings.d.ts +2 -85
  183. package/dist/stories/AlertGroup/AlertGroupPosition.stories.d.ts +1 -1
  184. package/dist/stories/AlertGroup/AlertGroupSlots.stories.d.ts +1 -1
  185. package/dist/stories/AlertGroup/AlertGroupWithComposable.stories.d.ts +2 -2
  186. package/dist/stories/AvatarGroup/AvatarGroup.settings.d.ts +2 -38
  187. package/dist/stories/Badge/Badge.settings.d.ts +2 -26
  188. package/dist/stories/Badge/Badge.test.d.ts +1 -1
  189. package/dist/stories/Blurhash/BlurhashComposable.stories.d.ts +4 -0
  190. package/dist/stories/Breadcrumb/Breadcrumb.settings.d.ts +2 -18
  191. package/dist/stories/Breadcrumb/Breadcrumb.test.d.ts +1 -1
  192. package/dist/stories/Button/Button.settings.d.ts +2 -194
  193. package/dist/stories/ButtonGroup/ButtonGroup.settings.d.ts +2 -40
  194. package/dist/stories/Card/Card.settings.d.ts +2 -63
  195. package/dist/stories/Checkbox/Checkbox.settings.d.ts +2 -132
  196. package/dist/stories/CheckboxGroup/CheckboxGroup.settings.d.ts +1 -141
  197. package/dist/stories/Combobox/Combobox.settings.d.ts +2 -609
  198. package/dist/stories/Combobox/Combobox.stories.d.ts +1 -0
  199. package/dist/stories/Combobox/ComboboxMultiple.stories.d.ts +1 -0
  200. package/dist/stories/Dialog/Dialog.settings.d.ts +2 -47
  201. package/dist/stories/Dialog/DialogModifiers.stories.d.ts +8 -0
  202. package/dist/stories/Dropdown/Dropdown.settings.d.ts +2 -205
  203. package/dist/stories/Icon/Icon.settings.d.ts +3 -68
  204. package/dist/stories/InputFile/InputFile.settings.d.ts +6 -0
  205. package/dist/stories/InputFile/InputFile.stories.d.ts +12 -0
  206. package/dist/stories/InputFile/InputFileDropArea.stories.d.ts +9 -0
  207. package/dist/stories/InputFile/InputFileIconPosition.stories.d.ts +8 -0
  208. package/dist/stories/InputFile/InputFileSlots.stories.d.ts +7 -0
  209. package/dist/stories/InputText/InputText.settings.d.ts +2 -438
  210. package/dist/stories/Nav/Nav.settings.d.ts +2 -10
  211. package/dist/stories/Progress/Progress.settings.d.ts +2 -27
  212. package/dist/stories/Radio/Radio.settings.d.ts +1 -110
  213. package/dist/stories/RadioGroup/RadioGroup.settings.d.ts +1 -141
  214. package/dist/stories/Select/Select.settings.d.ts +2 -246
  215. package/dist/stories/Select/Select.stories.d.ts +1 -0
  216. package/dist/stories/Tab/Tab.settings.d.ts +2 -15
  217. package/dist/stories/Textarea/Textarea.settings.d.ts +2 -287
  218. package/dist/stories/argTypes.d.ts +27 -866
  219. package/dist/test/expect.d.ts +1 -1
  220. package/dist/test/options.d.ts +1 -1
  221. package/dist/test/sleep.d.ts +1 -1
  222. package/dist/types/alert.d.ts +9 -7
  223. package/dist/types/blurhash.d.ts +12 -0
  224. package/dist/types/generic.d.ts +1 -2
  225. package/dist/types/group.d.ts +37 -15
  226. package/dist/types/index.d.ts +7 -0
  227. package/dist/types/input-file.d.ts +16 -0
  228. package/dist/types/nav.d.ts +2 -2
  229. package/dist/utils/ObjectUtilities.d.ts +7 -8
  230. package/dist/workers/blurhash.d.ts +1 -0
  231. package/package.json +239 -246
  232. package/src/Volver.ts +245 -234
  233. package/src/assets/icons/detailed.json +1 -1
  234. package/src/assets/icons/normal.json +1 -1
  235. package/src/assets/icons/simple.json +1 -1
  236. package/src/components/VvAccordion/VvAccordion.vue +163 -100
  237. package/src/components/VvAccordion/index.ts +64 -79
  238. package/src/components/VvAccordionGroup/VvAccordionGroup.vue +223 -105
  239. package/src/components/VvAccordionGroup/index.ts +42 -42
  240. package/src/components/VvAction/VvAction.vue +144 -130
  241. package/src/components/VvAlert/VvAlert.vue +72 -70
  242. package/src/components/VvAlert/index.ts +149 -147
  243. package/src/components/VvAlertGroup/VvAlertGroup.vue +57 -56
  244. package/src/components/VvAlertGroup/index.ts +101 -117
  245. package/src/components/VvAvatar/VvAvatar.vue +20 -14
  246. package/src/components/VvAvatar/index.ts +5 -5
  247. package/src/components/VvAvatarGroup/VvAvatarGroup.vue +58 -53
  248. package/src/components/VvAvatarGroup/index.ts +21 -21
  249. package/src/components/VvBadge/VvBadge.vue +15 -14
  250. package/src/components/VvBadge/index.ts +2 -2
  251. package/src/components/VvBreadcrumb/VvBreadcrumb.vue +50 -48
  252. package/src/components/VvBreadcrumb/index.ts +3 -9
  253. package/src/components/VvButton/VvButton.vue +163 -152
  254. package/src/components/VvButton/index.ts +103 -110
  255. package/src/components/VvButtonGroup/VvButtonGroup.vue +72 -64
  256. package/src/components/VvButtonGroup/index.ts +22 -21
  257. package/src/components/VvCard/VvCard.vue +30 -30
  258. package/src/components/VvCard/index.ts +2 -2
  259. package/src/components/VvCheckbox/VvCheckbox.vue +185 -183
  260. package/src/components/VvCheckbox/index.ts +44 -44
  261. package/src/components/VvCheckboxGroup/VvCheckboxGroup.vue +88 -87
  262. package/src/components/VvCombobox/VvCombobox.vue +639 -619
  263. package/src/components/VvCombobox/index.ts +206 -164
  264. package/src/components/VvDialog/VvDialog.vue +141 -129
  265. package/src/components/VvDialog/index.ts +38 -36
  266. package/src/components/VvDropdown/VvDropdown.vue +466 -445
  267. package/src/components/VvDropdown/VvDropdownAction.vue +37 -39
  268. package/src/components/VvDropdown/VvDropdownItem.vue +30 -26
  269. package/src/components/VvDropdown/VvDropdownOptgroup.vue +13 -12
  270. package/src/components/VvDropdown/VvDropdownOption.vue +47 -64
  271. package/src/components/VvDropdown/index.ts +61 -27
  272. package/src/components/VvIcon/README.md +1 -1
  273. package/src/components/VvIcon/VvIcon.vue +133 -133
  274. package/src/components/VvIcon/index.ts +84 -97
  275. package/src/components/VvInputFile/VvInputFile.vue +402 -0
  276. package/src/components/VvInputFile/index.ts +141 -0
  277. package/src/components/VvInputText/VvInputClearAction.ts +51 -47
  278. package/src/components/VvInputText/VvInputPasswordAction.ts +66 -62
  279. package/src/components/VvInputText/VvInputStepAction.ts +43 -43
  280. package/src/components/VvInputText/VvInputText.vue +638 -516
  281. package/src/components/VvInputText/VvInputTextActions.ts +86 -86
  282. package/src/components/VvInputText/index.ts +200 -185
  283. package/src/components/VvNav/VvNav.vue +40 -36
  284. package/src/components/VvNav/VvNavItem.vue +12 -12
  285. package/src/components/VvNav/VvNavSeparator.vue +6 -6
  286. package/src/components/VvNav/index.ts +2 -2
  287. package/src/components/VvProgress/VvProgress.vue +27 -27
  288. package/src/components/VvProgress/index.ts +28 -28
  289. package/src/components/VvRadio/VvRadio.vue +115 -112
  290. package/src/components/VvRadio/index.ts +28 -28
  291. package/src/components/VvRadioGroup/VvRadioGroup.vue +91 -90
  292. package/src/components/VvSelect/VvSelect.vue +262 -241
  293. package/src/components/VvSelect/index.ts +88 -63
  294. package/src/components/VvTab/VvTab.vue +79 -69
  295. package/src/components/VvTab/index.ts +12 -12
  296. package/src/components/VvTextarea/VvTextarea.vue +218 -219
  297. package/src/components/VvTextarea/index.ts +35 -35
  298. package/src/components/VvTooltip/VvTooltip.vue +22 -16
  299. package/src/components/VvTooltip/index.ts +12 -12
  300. package/src/components/common/HintSlot.ts +149 -150
  301. package/src/components/index.ts +10 -0
  302. package/src/composables/alert/useAlert.ts +76 -73
  303. package/src/composables/alert/useInjectAlert.ts +1 -1
  304. package/src/composables/alert/useProvideAlert.ts +10 -10
  305. package/src/composables/dropdown/useInjectDropdown.ts +6 -6
  306. package/src/composables/dropdown/useProvideDropdown.ts +63 -63
  307. package/src/composables/group/useInjectedGroupState.ts +46 -42
  308. package/src/composables/group/useProvideGroupState.ts +9 -15
  309. package/src/composables/index.ts +1 -0
  310. package/src/composables/useBlurhash.ts +68 -0
  311. package/src/composables/useComponentFocus.ts +9 -9
  312. package/src/composables/useComponentIcon.ts +36 -35
  313. package/src/composables/useDebouncedInput.ts +25 -25
  314. package/src/composables/useDefaults.ts +77 -76
  315. package/src/composables/useModifiers.ts +29 -29
  316. package/src/composables/useOptions.ts +52 -43
  317. package/src/composables/usePersistence.ts +74 -0
  318. package/src/composables/useTextCount.ts +44 -44
  319. package/src/composables/useUniqueId.ts +3 -2
  320. package/src/composables/useVolver.ts +1 -1
  321. package/src/constants.ts +97 -82
  322. package/src/directives/index.ts +3 -6
  323. package/src/directives/v-contextmenu.ts +34 -34
  324. package/src/directives/v-tooltip.ts +18 -9
  325. package/src/index.ts +6 -4
  326. package/src/props/index.ts +457 -380
  327. package/src/resolvers/unplugin.ts +146 -136
  328. package/src/shims.d.ts +4 -5
  329. package/src/stories/Accordion/Accordion.settings.ts +51 -50
  330. package/src/stories/Accordion/Accordion.stories.ts +21 -21
  331. package/src/stories/Accordion/Accordion.test.ts +56 -54
  332. package/src/stories/Accordion/AccordionSlots.stories.ts +13 -13
  333. package/src/stories/AccordionGroup/AccordionGroup.settings.ts +70 -67
  334. package/src/stories/AccordionGroup/AccordionGroup.stories.ts +41 -39
  335. package/src/stories/AccordionGroup/AccordionGroup.test.ts +49 -45
  336. package/src/stories/AccordionGroup/AccordionGroupSlots.stories.ts +35 -35
  337. package/src/stories/Alert/Alert.settings.ts +117 -116
  338. package/src/stories/Alert/Alert.stories.ts +30 -30
  339. package/src/stories/Alert/Alert.test.ts +78 -80
  340. package/src/stories/Alert/AlertModifiers.stories.ts +45 -45
  341. package/src/stories/Alert/AlertSlots.stories.ts +35 -35
  342. package/src/stories/AlertGroup/AlertGroup.settings.ts +107 -105
  343. package/src/stories/AlertGroup/AlertGroup.stories.ts +25 -25
  344. package/src/stories/AlertGroup/AlertGroup.test.ts +67 -69
  345. package/src/stories/AlertGroup/AlertGroupPosition.stories.ts +68 -68
  346. package/src/stories/AlertGroup/AlertGroupSlots.stories.ts +23 -23
  347. package/src/stories/AlertGroup/AlertGroupWithComposable.stories.ts +58 -58
  348. package/src/stories/Avatar/Avatar.settings.ts +29 -29
  349. package/src/stories/Avatar/Avatar.stories.ts +23 -23
  350. package/src/stories/Avatar/Avatar.test.ts +22 -24
  351. package/src/stories/Avatar/AvatarBadge.stories.ts +15 -15
  352. package/src/stories/Avatar/AvatarModifiers.stories.ts +61 -61
  353. package/src/stories/Avatar/AvatarSlots.stories.ts +18 -18
  354. package/src/stories/AvatarGroup/AvatarGroup.settings.ts +54 -53
  355. package/src/stories/AvatarGroup/AvatarGroup.stories.ts +17 -17
  356. package/src/stories/AvatarGroup/AvatarGroup.test.ts +24 -26
  357. package/src/stories/AvatarGroup/AvatarGroupModifiers.stories.ts +15 -15
  358. package/src/stories/AvatarGroup/AvatarGroupSlotDefault.stories.ts +17 -17
  359. package/src/stories/Badge/Badge.settings.ts +21 -20
  360. package/src/stories/Badge/Badge.stories.ts +24 -24
  361. package/src/stories/Badge/Badge.test.ts +8 -8
  362. package/src/stories/Badge/BadgeSlots.stories.ts +10 -10
  363. package/src/stories/Blurhash/BlurhashComposable.stories.ts +196 -0
  364. package/src/stories/Breadcrumb/Breadcrumb.settings.ts +35 -34
  365. package/src/stories/Breadcrumb/Breadcrumb.stories.ts +23 -23
  366. package/src/stories/Breadcrumb/Breadcrumb.test.ts +44 -43
  367. package/src/stories/Breadcrumb/BreadcrumbSlots.stories.ts +17 -17
  368. package/src/stories/Button/Button.settings.ts +146 -150
  369. package/src/stories/Button/Button.stories.ts +19 -19
  370. package/src/stories/Button/Button.test.ts +41 -42
  371. package/src/stories/Button/ButtonIcon.stories.ts +42 -42
  372. package/src/stories/Button/ButtonLink.stories.ts +24 -24
  373. package/src/stories/Button/ButtonLoading.stories.ts +22 -22
  374. package/src/stories/Button/ButtonModifiers.stories.ts +91 -91
  375. package/src/stories/Button/ButtonSlots.stories.ts +47 -47
  376. package/src/stories/Button/ButtonState.stories.ts +23 -23
  377. package/src/stories/Button/ButtonToggle.stories.ts +30 -30
  378. package/src/stories/ButtonGroup/ButtonGroup.settings.ts +33 -24
  379. package/src/stories/ButtonGroup/ButtonGroup.stories.ts +20 -20
  380. package/src/stories/ButtonGroup/ButtonGroup.test.ts +23 -26
  381. package/src/stories/ButtonGroup/ButtonGroupModifiers.stories.ts +20 -20
  382. package/src/stories/ButtonGroup/ButtonGroupSlots.stories.ts +18 -18
  383. package/src/stories/ButtonGroup/ButtonGroupToggle.stories.ts +22 -22
  384. package/src/stories/Card/Card.settings.ts +49 -48
  385. package/src/stories/Card/Card.stories.ts +22 -22
  386. package/src/stories/Card/Card.test.ts +14 -16
  387. package/src/stories/Card/CardSlots.stories.ts +42 -42
  388. package/src/stories/Checkbox/Checkbox.settings.ts +36 -35
  389. package/src/stories/Checkbox/Checkbox.stories.ts +57 -57
  390. package/src/stories/Checkbox/Checkbox.test.ts +63 -66
  391. package/src/stories/Checkbox/CheckboxBinary.stories.ts +18 -18
  392. package/src/stories/Checkbox/CheckboxSlots.stories.ts +15 -15
  393. package/src/stories/CheckboxGroup/CheckboxGroup.settings.ts +9 -9
  394. package/src/stories/CheckboxGroup/CheckboxGroup.stories.ts +50 -50
  395. package/src/stories/CheckboxGroup/CheckboxGroup.test.ts +63 -67
  396. package/src/stories/CheckboxGroup/CheckboxGroupOptions.stories.ts +34 -34
  397. package/src/stories/CheckboxGroup/CheckboxGroupSlots.stories.ts +23 -23
  398. package/src/stories/Combobox/Combobox.settings.ts +407 -384
  399. package/src/stories/Combobox/Combobox.stories.ts +116 -107
  400. package/src/stories/Combobox/Combobox.test.ts +91 -91
  401. package/src/stories/Combobox/ComboboxIconPosition.stories.ts +25 -24
  402. package/src/stories/Combobox/ComboboxMultiple.stories.ts +32 -22
  403. package/src/stories/Combobox/ComboboxOptions.stories.ts +81 -84
  404. package/src/stories/Combobox/ComboboxSlots.stories.ts +56 -55
  405. package/src/stories/Dialog/Dialog.settings.ts +49 -40
  406. package/src/stories/Dialog/Dialog.stories.ts +28 -28
  407. package/src/stories/Dialog/Dialog.test.ts +49 -54
  408. package/src/stories/Dialog/DialogModifiers.stories.ts +42 -0
  409. package/src/stories/Dialog/DialogSlots.stories.ts +20 -20
  410. package/src/stories/Dropdown/Dropdown.settings.ts +63 -62
  411. package/src/stories/Dropdown/Dropdown.stories.ts +59 -59
  412. package/src/stories/Dropdown/Dropdown.test.ts +9 -13
  413. package/src/stories/Dropdown/DropdownContextmenuDirective.stories.ts +16 -16
  414. package/src/stories/Dropdown/DropdownMultilevel.stories.ts +18 -18
  415. package/src/stories/Dropdown/DropdownSlots.stories.ts +50 -50
  416. package/src/stories/Icon/Icon.settings.ts +66 -65
  417. package/src/stories/Icon/Icon.stories.ts +28 -29
  418. package/src/stories/Icon/IconsCollection.stories.ts +22 -22
  419. package/src/stories/InputFile/InputFile.settings.ts +37 -0
  420. package/src/stories/InputFile/InputFile.stories.ts +89 -0
  421. package/src/stories/InputFile/InputFileDropArea.stories.ts +56 -0
  422. package/src/stories/InputFile/InputFileIconPosition.stories.ts +43 -0
  423. package/src/stories/InputFile/InputFileSlots.stories.ts +33 -0
  424. package/src/stories/InputText/InputText.settings.ts +246 -244
  425. package/src/stories/InputText/InputText.stories.ts +67 -67
  426. package/src/stories/InputText/InputText.test.ts +118 -121
  427. package/src/stories/InputText/InputTextIconPosition.stories.ts +24 -24
  428. package/src/stories/InputText/InputTextLength.stories.ts +33 -33
  429. package/src/stories/InputText/InputTextMask.stories.ts +91 -91
  430. package/src/stories/InputText/InputTextMinMax.stories.ts +30 -30
  431. package/src/stories/InputText/InputTextSlots.stories.ts +20 -20
  432. package/src/stories/InputText/InputTextType.stories.ts +70 -70
  433. package/src/stories/Nav/Nav.settings.ts +27 -27
  434. package/src/stories/Nav/Nav.stories.ts +18 -18
  435. package/src/stories/Nav/Nav.test.ts +10 -12
  436. package/src/stories/Nav/NavModifiers.stories.ts +25 -25
  437. package/src/stories/Progress/Progress.settings.ts +24 -23
  438. package/src/stories/Progress/Progress.stories.ts +23 -23
  439. package/src/stories/Progress/Progress.test.ts +4 -4
  440. package/src/stories/Radio/Radio.settings.ts +9 -9
  441. package/src/stories/Radio/Radio.stories.ts +47 -47
  442. package/src/stories/Radio/Radio.test.ts +54 -57
  443. package/src/stories/Radio/RadioSlots.stories.ts +15 -15
  444. package/src/stories/RadioGroup/RadioGroup.settings.ts +9 -9
  445. package/src/stories/RadioGroup/RadioGroup.stories.ts +51 -52
  446. package/src/stories/RadioGroup/RadioGroup.test.ts +63 -67
  447. package/src/stories/RadioGroup/RadioGroupOptions.stories.ts +35 -35
  448. package/src/stories/RadioGroup/RadioGroupSlots.stories.ts +23 -23
  449. package/src/stories/Select/Select.settings.ts +71 -70
  450. package/src/stories/Select/Select.stories.ts +75 -66
  451. package/src/stories/Select/Select.test.ts +67 -70
  452. package/src/stories/Select/SelectIconPosition.stories.ts +27 -26
  453. package/src/stories/Select/SelectOptions.stories.ts +55 -55
  454. package/src/stories/Select/SelectSlots.stories.ts +21 -20
  455. package/src/stories/Tab/Tab.settings.ts +34 -34
  456. package/src/stories/Tab/Tab.stories.ts +17 -17
  457. package/src/stories/Tab/Tab.test.ts +17 -19
  458. package/src/stories/Textarea/Textarea.settings.ts +79 -77
  459. package/src/stories/Textarea/Textarea.stories.ts +63 -63
  460. package/src/stories/Textarea/Textarea.test.ts +70 -73
  461. package/src/stories/Textarea/TextareaLength.stories.ts +33 -33
  462. package/src/stories/Textarea/TextareaSlots.stories.ts +20 -20
  463. package/src/stories/Textarea/TextareatIconPosition.stories.ts +24 -24
  464. package/src/stories/Tooltip/Tooltip.settings.ts +16 -17
  465. package/src/stories/Tooltip/Tooltip.stories.ts +18 -18
  466. package/src/stories/Tooltip/Tooltip.test.ts +53 -54
  467. package/src/stories/Tooltip/TooltipDirective.stories.ts +37 -37
  468. package/src/stories/argTypes.ts +506 -505
  469. package/src/test/expect.ts +72 -77
  470. package/src/test/options.ts +17 -16
  471. package/src/test/sleep.ts +3 -2
  472. package/src/test/types.d.ts +11 -11
  473. package/src/types/alert.ts +21 -17
  474. package/src/types/blurhash.ts +21 -0
  475. package/src/types/generic.ts +2 -3
  476. package/src/types/group.ts +34 -26
  477. package/src/types/index.ts +7 -0
  478. package/src/types/input-file.ts +18 -0
  479. package/src/types/nav.ts +13 -14
  480. package/src/utils/ObjectUtilities.ts +192 -188
  481. package/src/workers/blurhash.ts +9 -0
@@ -1,247 +1,268 @@
1
- <script lang="ts">
2
- export default {
3
- name: 'VvSelect',
4
- }
1
+ <script setup lang="ts" generic="T extends string | Option">
2
+ import type { SelectHTMLAttributes } from 'vue'
3
+ import VvIcon from '../VvIcon/VvIcon.vue'
4
+ import HintSlotFactory from '../common/HintSlot'
5
+ import type { Option } from '../../types/generic'
6
+ import { type VvSelectEmits, useVvSelectProps } from '.'
7
+
8
+ // props, emit and slots
9
+ // WARNING: This is a provisiaonal implementation, it may change in the future
10
+ const props = defineProps(useVvSelectProps<T>())
11
+ const emit = defineEmits<VvSelectEmits>()
12
+ const slots = useSlots()
13
+
14
+ // props merged with volver defaults (now only for labels)
15
+ const VvSelectProps = useVvSelectProps<T>()
16
+ const propsDefaults = useDefaults<typeof VvSelectProps>(
17
+ 'VvSelect',
18
+ VvSelectProps,
19
+ props,
20
+ )
21
+
22
+ // template refs
23
+ const selectEl = ref()
24
+
25
+ // hint
26
+ const {
27
+ HintSlot,
28
+ hasHintLabelOrSlot,
29
+ hasInvalidLabelOrSlot,
30
+ hintSlotScope,
31
+ } = HintSlotFactory(propsDefaults, slots)
32
+
33
+ // focus
34
+ const { focused } = useComponentFocus(selectEl, emit)
35
+
36
+ // group
37
+ function isGroup(option: T) {
38
+ if (typeof option === 'string') {
39
+ return false
40
+ }
41
+ return option.options?.length
42
+ }
43
+
44
+ // data
45
+ const {
46
+ id,
47
+ modifiers,
48
+ disabled,
49
+ readonly,
50
+ loading,
51
+ icon,
52
+ iconPosition,
53
+ invalid,
54
+ valid,
55
+ floating,
56
+ multiple,
57
+ } = toRefs(props)
58
+ const hasId = useUniqueId(id)
59
+ const hasHintId = computed(() => `${hasId.value}-hint`)
60
+
61
+ // tabindex
62
+ const isDisabledOrReadonly = computed(() => props.disabled || props.readonly)
63
+ const hasTabindex = computed(() => {
64
+ return isDisabledOrReadonly.value ? -1 : props.tabindex
65
+ })
66
+
67
+ // modelValue
68
+ const localModelValue = computed({
69
+ get: () => {
70
+ return props.modelValue
71
+ },
72
+ set: (newValue) => {
73
+ if (Array.isArray(newValue)) {
74
+ newValue = newValue.filter(item => item !== undefined)
75
+ if (newValue.length === 0 && !props.unselectable) {
76
+ selectEl.value.value = props.modelValue
77
+ return
78
+ }
79
+ }
80
+ emit('update:modelValue', newValue)
81
+ },
82
+ })
83
+ const isDirty = computed(() => {
84
+ if (Array.isArray(localModelValue.value)) {
85
+ return localModelValue.value.length > 0
86
+ }
87
+ return localModelValue.value !== undefined && localModelValue.value !== null
88
+ })
89
+
90
+ // visibility
91
+ const isVisible = useElementVisibility(selectEl)
92
+ watch(isVisible, (newValue) => {
93
+ if (newValue && props.autofocus) {
94
+ focused.value = true
95
+ }
96
+ })
97
+ // icons
98
+ const { hasIconBefore, hasIconAfter } = useComponentIcon(icon, iconPosition)
99
+
100
+ // invalid
101
+ const isInvalid = computed(() => {
102
+ if (props.invalid === true) {
103
+ return true
104
+ }
105
+ if (props.valid === true) {
106
+ return false
107
+ }
108
+ return undefined
109
+ })
110
+
111
+ // styles
112
+ const bemCssClasses = useModifiers(
113
+ 'vv-select',
114
+ modifiers,
115
+ computed(() => ({
116
+ 'valid': valid.value,
117
+ 'invalid': invalid.value,
118
+ 'loading': loading.value,
119
+ 'disabled': disabled.value,
120
+ 'readonly': readonly.value,
121
+ 'icon-before': hasIconBefore.value !== undefined,
122
+ 'icon-after': hasIconAfter.value !== undefined,
123
+ 'dirty': isDirty.value,
124
+ 'focus': focused.value,
125
+ 'floating': floating.value,
126
+ 'multiple': multiple.value,
127
+ })),
128
+ )
129
+
130
+ // options
131
+ const {
132
+ getOptionLabel,
133
+ getOptionValue,
134
+ isOptionDisabled,
135
+ getOptionGrouped,
136
+ } = useOptions(props)
137
+
138
+ /**
139
+ * Auto select the first option if autoOpen is enabled
140
+ */
141
+ watch(
142
+ () => props.options,
143
+ (newValue) => {
144
+ if (newValue?.length && props.autoselectFirst && !isDirty.value) {
145
+ const firstOptionValue = getOptionValue(newValue[0])
146
+ localModelValue.value = props.multiple ? [firstOptionValue] : firstOptionValue
147
+ }
148
+ },
149
+ { immediate: true },
150
+ )
151
+
152
+ // attrs
153
+ const hasAttrs: SelectHTMLAttributes = computed(() => {
154
+ return {
155
+ 'name': props.name,
156
+ 'tabindex': hasTabindex.value,
157
+ 'disabled': isDisabledOrReadonly.value,
158
+ 'required': props.required,
159
+ 'size': props.size,
160
+ 'autocomplete': props.autocomplete,
161
+ 'multiple': props.multiple,
162
+ 'aria-invalid': isInvalid.value,
163
+ 'aria-describedby': hasHintLabelOrSlot.value
164
+ ? hasHintId.value
165
+ : undefined,
166
+ 'aria-errormessage': hasInvalidLabelOrSlot.value
167
+ ? hasHintId.value
168
+ : undefined,
169
+ }
170
+ })
171
+
172
+ // slots
173
+ const slotProps = computed(() => ({
174
+ valid: props.valid,
175
+ invalid: props.invalid,
176
+ modelValue: props.modelValue,
177
+ }))
5
178
  </script>
6
179
 
7
- <script setup lang="ts">
8
- import type { SelectHTMLAttributes } from 'vue'
9
- import VvIcon from '../VvIcon/VvIcon.vue'
10
- import HintSlotFactory from '../common/HintSlot'
11
- import { VvSelectProps, VvSelectEmits } from '.'
12
- import type { Option } from '@/types/generic'
13
-
14
- // props, emit and slots
15
- const props = defineProps(VvSelectProps)
16
- const emit = defineEmits(VvSelectEmits)
17
- const slots = useSlots()
18
-
19
- // props merged with volver defaults (now only for labels)
20
- const propsDefaults = useDefaults<typeof VvSelectProps>(
21
- 'VvSelect',
22
- VvSelectProps,
23
- props,
24
- )
25
-
26
- // template refs
27
- const select = ref()
28
-
29
- // hint
30
- const {
31
- HintSlot,
32
- hasHintLabelOrSlot,
33
- hasInvalidLabelOrSlot,
34
- hintSlotScope,
35
- } = HintSlotFactory(propsDefaults, slots)
36
-
37
- // data
38
- const {
39
- id,
40
- modifiers,
41
- disabled,
42
- readonly,
43
- loading,
44
- icon,
45
- iconPosition,
46
- invalid,
47
- valid,
48
- floating,
49
- multiple,
50
- } = toRefs(props)
51
-
52
- // computed
53
- const hasId = useUniqueId(id)
54
- const hasHintId = computed(() => `${hasId.value}-hint`)
55
-
56
- // focus
57
- const { focused } = useComponentFocus(select, emit)
58
-
59
- // visibility
60
- const isVisible = useElementVisibility(select)
61
- watch(isVisible, (newValue) => {
62
- if (newValue && props.autofocus) {
63
- focused.value = true
64
- }
65
- })
66
-
67
- // icons
68
- const { hasIcon, hasIconBefore, hasIconAfter } = useComponentIcon(
69
- icon,
70
- iconPosition,
71
- )
72
-
73
- // dirty
74
- const isDirty = computed(() => !isEmpty(props.modelValue))
75
-
76
- // disabled
77
- const isDisabled = computed(() => props.disabled || props.readonly)
78
- const hasTabindex = computed(() => {
79
- return isDisabled.value ? -1 : props.tabindex
80
- })
81
-
82
- // invalid
83
- const isInvalid = computed(() => {
84
- if (props.invalid === true) {
85
- return true
86
- }
87
- if (props.valid === true) {
88
- return false
89
- }
90
- return undefined
91
- })
92
-
93
- // styles
94
- const bemCssClasses = useModifiers(
95
- 'vv-select',
96
- modifiers,
97
- computed(() => ({
98
- valid: valid.value,
99
- invalid: invalid.value,
100
- loading: loading.value,
101
- disabled: disabled.value,
102
- readonly: readonly.value,
103
- 'icon-before': hasIconBefore.value,
104
- 'icon-after': hasIconAfter.value,
105
- dirty: isDirty.value,
106
- focus: focused.value,
107
- floating: floating.value,
108
- multiple: multiple.value,
109
- })),
110
- )
111
-
112
- // attrs
113
- const hasAttrs: SelectHTMLAttributes = computed(() => {
114
- return {
115
- name: props.name,
116
- tabindex: hasTabindex.value,
117
- disabled: isDisabled.value,
118
- required: props.required,
119
- size: props.size,
120
- autocomplete: props.autocomplete,
121
- multiple: props.multiple,
122
- 'aria-invalid': isInvalid.value,
123
- 'aria-describedby': hasHintLabelOrSlot.value
124
- ? hasHintId.value
125
- : undefined,
126
- 'aria-errormessage': hasInvalidLabelOrSlot.value
127
- ? hasHintId.value
128
- : undefined,
129
- }
130
- })
131
-
132
- // slots
133
- const slotProps = computed(() => ({
134
- valid: props.valid,
135
- invalid: props.invalid,
136
- modelValue: props.modelValue,
137
- }))
138
-
139
- const {
140
- getOptionLabel,
141
- getOptionValue,
142
- isOptionDisabled,
143
- getOptionGrouped,
144
- } = useOptions(props)
145
-
146
- const localModelValue = computed({
147
- get: () => {
148
- return props.modelValue
149
- },
150
- set: (newValue) => {
151
- if (Array.isArray(newValue)) {
152
- newValue = newValue.filter((item) => item !== undefined)
153
- }
154
- emit('update:modelValue', newValue)
155
- },
156
- })
157
-
158
- // Grouped options
159
- const isGroup = (option: string | Option) => {
160
- if (typeof option === 'string') return false
161
- return option && option.options && option.options.length > 0
162
- }
180
+ <script lang="ts">
181
+ export default {
182
+ name: 'VvSelect',
183
+ }
163
184
  </script>
164
185
 
165
186
  <template>
166
- <div :class="bemCssClasses">
167
- <label v-if="label" :for="hasId">{{ label }}</label>
168
- <!-- #region native select -->
169
- <div class="vv-select__wrapper">
170
- <div v-if="$slots.before" class="vv-select__input-before">
171
- <!-- @slot Slot before input -->
172
- <slot name="before" v-bind="slotProps" />
173
- </div>
174
- <div class="vv-select__inner">
175
- <VvIcon
176
- v-if="hasIconBefore"
177
- class="vv-select__icon"
178
- v-bind="hasIcon"
179
- />
180
- <select
181
- :id="hasId"
182
- ref="select"
183
- v-model="localModelValue"
184
- v-bind="hasAttrs"
185
- >
186
- <option
187
- v-if="placeholder"
188
- :value="undefined"
189
- :disabled="!unselectable"
190
- :hidden="!unselectable"
191
- >
192
- {{ placeholder }}
193
- </option>
194
- <template v-for="(option, index) in options">
195
- <option
196
- v-if="!isGroup(option)"
197
- :key="index"
198
- :disabled="isOptionDisabled(option)"
199
- :value="getOptionValue(option)"
200
- >
201
- {{ getOptionLabel(option) }}
202
- </option>
203
- <optgroup
204
- v-else
205
- :key="`group-${index}`"
206
- :disabled="isOptionDisabled(option)"
207
- :label="getOptionLabel(option)"
208
- >
209
- <option
210
- v-for="(item, i) in getOptionGrouped(option)"
211
- :key="`group-${index}-item-${i}`"
212
- :disabled="isOptionDisabled(item)"
213
- :value="getOptionValue(item)"
214
- >
215
- {{ getOptionLabel(item) }}
216
- </option>
217
- </optgroup>
218
- </template>
219
- </select>
220
- <VvIcon
221
- v-if="hasIconAfter"
222
- class="vv-select__icon vv-select__icon-after"
223
- v-bind="hasIcon"
224
- />
225
- </div>
226
- <div v-if="$slots.after" class="vv-select__input-after">
227
- <!-- @slot Slot after input -->
228
- <slot name="after" v-bind="slotProps" />
229
- </div>
230
- </div>
231
- <!-- #endregion native select -->
232
- <HintSlot :id="hasHintId" class="vv-select__hint">
233
- <template v-if="$slots.hint" #hint>
234
- <slot name="hint" v-bind="hintSlotScope" />
235
- </template>
236
- <template v-if="$slots.loading" #loading>
237
- <slot name="loading" v-bind="hintSlotScope" />
238
- </template>
239
- <template v-if="$slots.valid" #valid>
240
- <slot name="valid" v-bind="hintSlotScope" />
241
- </template>
242
- <template v-if="$slots.invalid" #invalid>
243
- <slot name="invalid" v-bind="hintSlotScope" />
244
- </template>
245
- </HintSlot>
246
- </div>
187
+ <div :class="bemCssClasses">
188
+ <label v-if="label" :for="hasId">{{ label }}</label>
189
+ <!-- #region native select -->
190
+ <div class="vv-select__wrapper">
191
+ <div v-if="$slots.before" class="vv-select__input-before">
192
+ <!-- @slot Slot before input -->
193
+ <slot name="before" v-bind="slotProps" />
194
+ </div>
195
+ <div class="vv-select__inner">
196
+ <VvIcon
197
+ v-if="hasIconBefore"
198
+ v-bind="hasIconBefore"
199
+ class="vv-select__icon"
200
+ />
201
+ <select
202
+ :id="hasId"
203
+ ref="selectEl"
204
+ v-bind="hasAttrs"
205
+ v-model="localModelValue"
206
+ >
207
+ <option
208
+ v-if="placeholder"
209
+ :value="undefined"
210
+ :disabled="!unselectable"
211
+ :hidden="!unselectable"
212
+ >
213
+ {{ placeholder }}
214
+ </option>
215
+ <template v-for="(option, index) in options">
216
+ <option
217
+ v-if="!isGroup(option)"
218
+ :key="index"
219
+ :disabled="isOptionDisabled(option)"
220
+ :value="getOptionValue(option)"
221
+ >
222
+ {{ getOptionLabel(option) }}
223
+ </option>
224
+ <optgroup
225
+ v-else
226
+ :key="`group-${index}`"
227
+ :disabled="isOptionDisabled(option)"
228
+ :label="getOptionLabel(option)"
229
+ >
230
+ <option
231
+ v-for="(item, i) in getOptionGrouped(option)"
232
+ :key="`group-${index}-item-${i}`"
233
+ :disabled="isOptionDisabled(item)"
234
+ :value="getOptionValue(item)"
235
+ >
236
+ {{ getOptionLabel(item) }}
237
+ </option>
238
+ </optgroup>
239
+ </template>
240
+ </select>
241
+ <VvIcon
242
+ v-if="hasIconAfter"
243
+ v-bind="hasIconAfter"
244
+ class="vv-select__icon vv-select__icon-after"
245
+ />
246
+ </div>
247
+ <div v-if="$slots.after" class="vv-select__input-after">
248
+ <!-- @slot Slot after input -->
249
+ <slot name="after" v-bind="slotProps" />
250
+ </div>
251
+ </div>
252
+ <!-- #endregion native select -->
253
+ <HintSlot :id="hasHintId" class="vv-select__hint">
254
+ <template v-if="$slots.hint" #hint>
255
+ <slot name="hint" v-bind="hintSlotScope" />
256
+ </template>
257
+ <template v-if="$slots.loading" #loading>
258
+ <slot name="loading" v-bind="hintSlotScope" />
259
+ </template>
260
+ <template v-if="$slots.valid" #valid>
261
+ <slot name="valid" v-bind="hintSlotScope" />
262
+ </template>
263
+ <template v-if="$slots.invalid" #invalid>
264
+ <slot name="invalid" v-bind="hintSlotScope" />
265
+ </template>
266
+ </HintSlot>
267
+ </div>
247
268
  </template>
@@ -1,69 +1,94 @@
1
+ import type { MaybeElement } from '@vueuse/core'
1
2
  import {
2
- ValidProps,
3
- InvalidProps,
4
- HintProps,
5
- LoadingProps,
6
- DisabledProps,
7
- ReadonlyProps,
8
- ModifiersProps,
9
- TabindexProps,
10
- OptionsProps,
11
- IconProps,
12
- IdNameProps,
13
- FloatingLabelProps,
14
- UnselectableProps,
15
- AutofocusProps,
16
- AutocompleteProps,
17
- LabelProps,
3
+ ValidProps,
4
+ InvalidProps,
5
+ HintProps,
6
+ LoadingProps,
7
+ DisabledProps,
8
+ ReadonlyProps,
9
+ ModifiersProps,
10
+ TabindexProps,
11
+ OptionsProps,
12
+ IconProps,
13
+ IdNameProps,
14
+ FloatingLabelProps,
15
+ AutofocusProps,
16
+ AutocompleteProps,
17
+ LabelProps,
18
+ UnselectableProps,
18
19
  } from '../../props'
20
+ import type { Option } from '../../types/generic'
21
+
22
+ export type VvSelectEmits = {
23
+ 'update:modelValue': [any]
24
+ 'focus': [MaybeElement]
25
+ 'blur': [MaybeElement]
26
+ }
19
27
 
20
28
  export const VvSelectProps = {
21
- ...IdNameProps,
22
- ...AutofocusProps,
23
- ...AutocompleteProps,
24
- ...TabindexProps,
25
- ...ValidProps,
26
- ...InvalidProps,
27
- ...HintProps,
28
- ...LoadingProps,
29
- ...DisabledProps,
30
- ...ReadonlyProps,
31
- ...ModifiersProps,
32
- ...OptionsProps,
33
- ...IconProps,
34
- ...FloatingLabelProps,
35
- ...UnselectableProps,
36
- ...LabelProps,
37
- /**
38
- * This Boolean attribute indicates that multiple options can be selected in the list.
39
- * If it is not specified, then only one option can be selected at a time.
40
- * When multiple is specified, most browsers will show a scrolling list box instead of a single line dropdown.
41
- * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#attr-multiple
42
- */
43
- multiple: Boolean,
44
- /**
45
- * A Boolean attribute indicating that an option with a non-empty string value must be selected.
46
- * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#attr-required
47
- */
48
- required: Boolean,
49
- /**
50
- * If the control is presented as a scrolling list box (e.g. when multiple is specified),
51
- * this attribute represents the number of rows in the list that should be visible at one time.
52
- * Browsers are not required to present a select element as a scrolled list box. The default value is 0.
53
- * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#attr-size
54
- */
55
- size: [String, Number],
56
- /**
57
- * modelValue can be a string, number, boolean, object or array of string, number, boolean, object
58
- */
59
- modelValue: {
60
- type: [String, Number, Boolean, Object, Array],
61
- default: undefined,
62
- },
63
- /**
64
- * Select placeholder
65
- */
66
- placeholder: String,
29
+ ...IdNameProps,
30
+ ...AutofocusProps,
31
+ ...AutocompleteProps,
32
+ ...TabindexProps,
33
+ ...ValidProps,
34
+ ...InvalidProps,
35
+ ...HintProps,
36
+ ...LoadingProps,
37
+ ...DisabledProps,
38
+ ...ReadonlyProps,
39
+ ...ModifiersProps,
40
+ ...OptionsProps,
41
+ ...IconProps,
42
+ ...FloatingLabelProps,
43
+ ...UnselectableProps,
44
+ ...LabelProps,
45
+ /**
46
+ * This Boolean attribute indicates that multiple options can be selected in the list.
47
+ * If it is not specified, then only one option can be selected at a time.
48
+ * When multiple is specified, most browsers will show a scrolling list box instead of a single line dropdown.
49
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#attr-multiple
50
+ */
51
+ multiple: Boolean,
52
+ /**
53
+ * A Boolean attribute indicating that an option with a non-empty string value must be selected.
54
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#attr-required
55
+ */
56
+ required: Boolean,
57
+ /**
58
+ * If the control is presented as a scrolling list box (e.g. when multiple is specified),
59
+ * this attribute represents the number of rows in the list that should be visible at one time.
60
+ * Browsers are not required to present a select element as a scrolled list box. The default value is 0.
61
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#attr-size
62
+ */
63
+ size: [String, Number],
64
+ /**
65
+ * modelValue can be a string, number, boolean, object or array of string, number, boolean, object
66
+ */
67
+ modelValue: {
68
+ type: [String, Number, Boolean, Object, Array],
69
+ default: undefined,
70
+ },
71
+ /**
72
+ * Select first option automatically
73
+ */
74
+ autoselectFirst: {
75
+ type: Boolean,
76
+ default: false,
77
+ },
78
+ /**
79
+ * Select placeholder
80
+ */
81
+ placeholder: String,
67
82
  }
68
83
 
69
- export const VvSelectEmits = ['update:modelValue', 'focus', 'blur']
84
+ // WARNING: This is a provisiaonal implementation, it may change in the future
85
+ export function useVvSelectProps<T extends Option | string>() {
86
+ return {
87
+ ...VvSelectProps,
88
+ options: {
89
+ ...VvSelectProps.options,
90
+ type: Array as PropType<T[]>,
91
+ default: () => [],
92
+ },
93
+ }
94
+ }