@volverjs/ui-vue 0.0.10-beta.5 → 0.0.10-beta.50

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 (496) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +148 -51
  3. package/auto-imports.d.ts +25 -12
  4. package/bin/icons.cjs +1 -1
  5. package/bin/icons.js +28 -20
  6. package/dist/Volver.d.ts +11 -11
  7. package/dist/components/VvAccordion/VvAccordion.es.js +192 -104
  8. package/dist/components/VvAccordion/VvAccordion.umd.js +1 -1
  9. package/dist/components/VvAccordion/VvAccordion.vue.d.ts +29 -10
  10. package/dist/components/VvAccordion/index.d.ts +8 -9
  11. package/dist/components/VvAccordionGroup/VvAccordionGroup.es.js +485 -206
  12. package/dist/components/VvAccordionGroup/VvAccordionGroup.umd.js +1 -1
  13. package/dist/components/VvAccordionGroup/VvAccordionGroup.vue.d.ts +61 -18
  14. package/dist/components/VvAccordionGroup/index.d.ts +16 -8
  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 +61 -28
  18. package/dist/components/VvAction/index.d.ts +26 -10
  19. package/dist/components/VvAlert/VvAlert.es.js +350 -318
  20. package/dist/components/VvAlert/VvAlert.umd.js +1 -1
  21. package/dist/components/VvAlert/VvAlert.vue.d.ts +25 -17
  22. package/dist/components/VvAlert/index.d.ts +20 -11
  23. package/dist/components/VvAlertGroup/VvAlertGroup.es.js +388 -327
  24. package/dist/components/VvAlertGroup/VvAlertGroup.umd.js +1 -1
  25. package/dist/components/VvAlertGroup/VvAlertGroup.vue.d.ts +22 -17
  26. package/dist/components/VvAlertGroup/index.d.ts +10 -18
  27. package/dist/components/VvAvatar/VvAvatar.es.js +66 -28
  28. package/dist/components/VvAvatar/VvAvatar.umd.js +1 -1
  29. package/dist/components/VvAvatar/VvAvatar.vue.d.ts +13 -5
  30. package/dist/components/VvAvatar/index.d.ts +4 -1
  31. package/dist/components/VvAvatarGroup/VvAvatarGroup.es.js +147 -74
  32. package/dist/components/VvAvatarGroup/VvAvatarGroup.umd.js +1 -1
  33. package/dist/components/VvAvatarGroup/VvAvatarGroup.vue.d.ts +17 -10
  34. package/dist/components/VvAvatarGroup/index.d.ts +6 -3
  35. package/dist/components/VvBadge/VvBadge.es.js +78 -34
  36. package/dist/components/VvBadge/VvBadge.umd.js +1 -1
  37. package/dist/components/VvBadge/VvBadge.vue.d.ts +13 -5
  38. package/dist/components/VvBadge/index.d.ts +4 -1
  39. package/dist/components/VvBreadcrumb/VvBreadcrumb.es.js +294 -83
  40. package/dist/components/VvBreadcrumb/VvBreadcrumb.umd.js +1 -1
  41. package/dist/components/VvBreadcrumb/VvBreadcrumb.vue.d.ts +28 -8
  42. package/dist/components/VvBreadcrumb/index.d.ts +6 -10
  43. package/dist/components/VvButton/VvButton.es.js +510 -488
  44. package/dist/components/VvButton/VvButton.umd.js +1 -1
  45. package/dist/components/VvButton/VvButton.vue.d.ts +97 -45
  46. package/dist/components/VvButton/index.d.ts +52 -30
  47. package/dist/components/VvButtonGroup/VvButtonGroup.es.js +95 -45
  48. package/dist/components/VvButtonGroup/VvButtonGroup.umd.js +1 -1
  49. package/dist/components/VvButtonGroup/VvButtonGroup.vue.d.ts +35 -17
  50. package/dist/components/VvButtonGroup/index.d.ts +13 -4
  51. package/dist/components/VvCard/VvCard.es.js +87 -42
  52. package/dist/components/VvCard/VvCard.umd.js +1 -1
  53. package/dist/components/VvCard/VvCard.vue.d.ts +13 -5
  54. package/dist/components/VvCard/index.d.ts +4 -1
  55. package/dist/components/VvCheckbox/VvCheckbox.es.js +177 -136
  56. package/dist/components/VvCheckbox/VvCheckbox.umd.js +1 -1
  57. package/dist/components/VvCheckbox/VvCheckbox.vue.d.ts +105 -35
  58. package/dist/components/VvCheckbox/index.d.ts +52 -19
  59. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js +408 -322
  60. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.umd.js +1 -1
  61. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.vue.d.ts +103 -34
  62. package/dist/components/VvCheckboxGroup/index.d.ts +45 -12
  63. package/dist/components/VvCombobox/VvCombobox.es.js +2304 -1992
  64. package/dist/components/VvCombobox/VvCombobox.umd.js +1 -1
  65. package/dist/components/VvCombobox/VvCombobox.vue.d.ts +258 -672
  66. package/dist/components/VvCombobox/index.d.ts +377 -135
  67. package/dist/components/VvDialog/VvDialog.es.js +177 -297
  68. package/dist/components/VvDialog/VvDialog.umd.js +1 -1
  69. package/dist/components/VvDialog/VvDialog.vue.d.ts +23 -7
  70. package/dist/components/VvDialog/index.d.ts +12 -0
  71. package/dist/components/VvDropdown/VvDropdown.es.js +172 -102
  72. package/dist/components/VvDropdown/VvDropdown.umd.js +1 -1
  73. package/dist/components/VvDropdown/VvDropdown.vue.d.ts +110 -315
  74. package/dist/components/VvDropdown/VvDropdownAction.vue.d.ts +77 -28
  75. package/dist/components/VvDropdown/VvDropdownItem.vue.d.ts +13 -1
  76. package/dist/components/VvDropdown/VvDropdownOptgroup.vue.d.ts +13 -5
  77. package/dist/components/VvDropdown/VvDropdownOption.vue.d.ts +38 -10
  78. package/dist/components/VvDropdown/index.d.ts +52 -118
  79. package/dist/components/VvDropdownAction/VvDropdownAction.es.js +165 -60
  80. package/dist/components/VvDropdownAction/VvDropdownAction.umd.js +1 -1
  81. package/dist/components/VvDropdownItem/VvDropdownItem.es.js +337 -10
  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 -102
  88. package/dist/components/VvIcon/VvIcon.umd.js +1 -1
  89. package/dist/components/VvIcon/VvIcon.vue.d.ts +4 -68
  90. package/dist/components/VvIcon/index.d.ts +33 -48
  91. package/dist/components/VvInputFile/VvInputFile.es.js +1777 -0
  92. package/dist/components/VvInputFile/VvInputFile.umd.js +1 -0
  93. package/dist/components/VvInputFile/VvInputFile.vue.d.ts +317 -0
  94. package/dist/components/VvInputFile/index.d.ts +193 -0
  95. package/dist/components/VvInputText/VvInputClearAction.d.ts +16 -10
  96. package/dist/components/VvInputText/VvInputPasswordAction.d.ts +20 -14
  97. package/dist/components/VvInputText/VvInputStepAction.d.ts +11 -7
  98. package/dist/components/VvInputText/VvInputText.es.js +1491 -551
  99. package/dist/components/VvInputText/VvInputText.umd.js +1 -1
  100. package/dist/components/VvInputText/VvInputText.vue.d.ts +216 -68
  101. package/dist/components/VvInputText/index.d.ts +101 -31
  102. package/dist/components/VvNav/VvNav.es.js +155 -75
  103. package/dist/components/VvNav/VvNav.umd.js +1 -1
  104. package/dist/components/VvNav/VvNav.vue.d.ts +32 -11
  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 +13 -6
  113. package/dist/components/VvProgress/index.d.ts +4 -1
  114. package/dist/components/VvRadio/VvRadio.es.js +175 -135
  115. package/dist/components/VvRadio/VvRadio.umd.js +1 -1
  116. package/dist/components/VvRadio/VvRadio.vue.d.ts +103 -33
  117. package/dist/components/VvRadio/index.d.ts +50 -17
  118. package/dist/components/VvRadioGroup/VvRadioGroup.es.js +406 -321
  119. package/dist/components/VvRadioGroup/VvRadioGroup.umd.js +1 -1
  120. package/dist/components/VvRadioGroup/VvRadioGroup.vue.d.ts +103 -34
  121. package/dist/components/VvRadioGroup/index.d.ts +45 -12
  122. package/dist/components/VvSelect/VvSelect.es.js +677 -611
  123. package/dist/components/VvSelect/VvSelect.umd.js +1 -1
  124. package/dist/components/VvSelect/VvSelect.vue.d.ts +107 -199
  125. package/dist/components/VvSelect/index.d.ts +196 -16
  126. package/dist/components/VvTab/VvTab.es.js +230 -110
  127. package/dist/components/VvTab/VvTab.umd.js +1 -1
  128. package/dist/components/VvTab/VvTab.vue.d.ts +34 -12
  129. package/dist/components/VvTab/index.d.ts +6 -3
  130. package/dist/components/VvTextarea/VvTextarea.es.js +606 -597
  131. package/dist/components/VvTextarea/VvTextarea.umd.js +1 -1
  132. package/dist/components/VvTextarea/VvTextarea.vue.d.ts +159 -54
  133. package/dist/components/VvTextarea/index.d.ts +69 -20
  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 +16 -9
  137. package/dist/components/VvTooltip/index.d.ts +5 -2
  138. package/dist/components/common/HintSlot.d.ts +8 -9
  139. package/dist/components/index.d.ts +10 -0
  140. package/dist/components/index.es.js +4086 -2029
  141. package/dist/components/index.umd.js +1 -1
  142. package/dist/composables/alert/useAlerInject.d.ts +4 -0
  143. package/dist/composables/alert/useAlert.d.ts +71 -6
  144. package/dist/composables/alert/{useProvideAlert.d.ts → useAlertProvide.d.ts} +1 -1
  145. package/dist/composables/dropdown/useDropdownContextmenu.d.ts +18 -0
  146. package/dist/composables/dropdown/useDropdownInject.d.ts +12 -0
  147. package/dist/composables/dropdown/{useProvideDropdown.d.ts → useDropdownProvide.d.ts} +6 -7
  148. package/dist/composables/dropdown/useDropdownVirtualElement.d.ts +17 -0
  149. package/dist/composables/group/useGroupStateInject.d.ts +9 -0
  150. package/dist/composables/group/useGroupStateProvide.d.ts +6 -0
  151. package/dist/composables/index.d.ts +3 -0
  152. package/dist/composables/index.es.js +178 -6
  153. package/dist/composables/index.umd.js +1 -1
  154. package/dist/composables/useBlurhash.d.ts +7 -0
  155. package/dist/composables/useComponentFocus.d.ts +2 -2
  156. package/dist/composables/useComponentIcon.d.ts +9 -8
  157. package/dist/composables/useOptions.d.ts +5 -5
  158. package/dist/composables/usePersistence.d.ts +3 -0
  159. package/dist/composables/useUniqueId.d.ts +2 -2
  160. package/dist/composables/useVolver.d.ts +1 -1
  161. package/dist/constants.d.ts +35 -33
  162. package/dist/directives/index.d.ts +3 -5
  163. package/dist/directives/index.es.js +247 -82
  164. package/dist/directives/index.umd.js +1 -1
  165. package/dist/directives/v-contextmenu.es.js +137 -31
  166. package/dist/directives/v-contextmenu.umd.js +1 -1
  167. package/dist/directives/v-tooltip.es.js +101 -39
  168. package/dist/directives/v-tooltip.umd.js +1 -1
  169. package/dist/icons.d.ts +17 -17
  170. package/dist/icons.es.js +516 -516
  171. package/dist/icons.umd.js +1 -1
  172. package/dist/index.d.ts +3 -1
  173. package/dist/index.es.js +74 -6
  174. package/dist/index.umd.js +1 -1
  175. package/dist/props/index.d.ts +277 -193
  176. package/dist/resolvers/unplugin.d.ts +6 -1
  177. package/dist/resolvers/unplugin.es.js +87 -10
  178. package/dist/resolvers/unplugin.umd.js +1 -1
  179. package/dist/stories/Accordion/Accordion.settings.d.ts +2 -57
  180. package/dist/stories/AccordionGroup/AccordionGroup.settings.d.ts +2 -66
  181. package/dist/stories/AccordionGroup/AccordionGroup.stories.d.ts +2 -127
  182. package/dist/stories/AccordionGroup/AccordionGroupSlots.stories.d.ts +1304 -538
  183. package/dist/stories/Alert/Alert.settings.d.ts +2 -109
  184. package/dist/stories/AlertGroup/AlertGroup.settings.d.ts +2 -85
  185. package/dist/stories/AlertGroup/AlertGroupWithComposable.stories.d.ts +1 -1
  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 +13 -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 -2
  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/floating-ui.d.ts +1 -1
  225. package/dist/types/generic.d.ts +1 -2
  226. package/dist/types/group.d.ts +37 -15
  227. package/dist/types/index.d.ts +7 -0
  228. package/dist/types/input-file.d.ts +9 -0
  229. package/dist/types/nav.d.ts +2 -2
  230. package/dist/utils/DomUtilities.d.ts +1 -0
  231. package/dist/utils/ObjectUtilities.d.ts +8 -9
  232. package/dist/workers/blurhash.d.ts +1 -0
  233. package/package.json +238 -246
  234. package/src/Volver.ts +251 -246
  235. package/src/assets/icons/detailed.json +1 -1
  236. package/src/assets/icons/normal.json +1 -1
  237. package/src/assets/icons/simple.json +1 -1
  238. package/src/components/VvAccordion/VvAccordion.vue +163 -100
  239. package/src/components/VvAccordion/index.ts +65 -80
  240. package/src/components/VvAccordionGroup/VvAccordionGroup.vue +224 -106
  241. package/src/components/VvAccordionGroup/index.ts +42 -42
  242. package/src/components/VvAction/VvAction.vue +144 -130
  243. package/src/components/VvAlert/VvAlert.vue +72 -70
  244. package/src/components/VvAlert/index.ts +149 -147
  245. package/src/components/VvAlertGroup/VvAlertGroup.vue +57 -56
  246. package/src/components/VvAlertGroup/index.ts +102 -118
  247. package/src/components/VvAvatar/VvAvatar.vue +20 -14
  248. package/src/components/VvAvatar/index.ts +5 -5
  249. package/src/components/VvAvatarGroup/VvAvatarGroup.vue +58 -53
  250. package/src/components/VvAvatarGroup/index.ts +21 -21
  251. package/src/components/VvBadge/VvBadge.vue +15 -14
  252. package/src/components/VvBadge/index.ts +2 -2
  253. package/src/components/VvBreadcrumb/VvBreadcrumb.vue +50 -48
  254. package/src/components/VvBreadcrumb/index.ts +3 -9
  255. package/src/components/VvButton/VvButton.vue +163 -152
  256. package/src/components/VvButton/index.ts +104 -111
  257. package/src/components/VvButtonGroup/VvButtonGroup.vue +73 -65
  258. package/src/components/VvButtonGroup/index.ts +23 -22
  259. package/src/components/VvCard/VvCard.vue +30 -30
  260. package/src/components/VvCard/index.ts +2 -2
  261. package/src/components/VvCheckbox/VvCheckbox.vue +186 -184
  262. package/src/components/VvCheckbox/index.ts +45 -45
  263. package/src/components/VvCheckboxGroup/VvCheckboxGroup.vue +88 -87
  264. package/src/components/VvCombobox/VvCombobox.vue +655 -619
  265. package/src/components/VvCombobox/index.ts +210 -168
  266. package/src/components/VvDialog/VvDialog.vue +139 -129
  267. package/src/components/VvDialog/index.ts +42 -36
  268. package/src/components/VvDropdown/VvDropdown.vue +466 -445
  269. package/src/components/VvDropdown/VvDropdownAction.vue +37 -39
  270. package/src/components/VvDropdown/VvDropdownItem.vue +30 -26
  271. package/src/components/VvDropdown/VvDropdownOptgroup.vue +13 -12
  272. package/src/components/VvDropdown/VvDropdownOption.vue +47 -64
  273. package/src/components/VvDropdown/index.ts +61 -27
  274. package/src/components/VvIcon/README.md +1 -1
  275. package/src/components/VvIcon/VvIcon.vue +133 -133
  276. package/src/components/VvIcon/index.ts +84 -97
  277. package/src/components/VvInputFile/VvInputFile.vue +413 -0
  278. package/src/components/VvInputFile/index.ts +143 -0
  279. package/src/components/VvInputText/VvInputClearAction.ts +51 -47
  280. package/src/components/VvInputText/VvInputPasswordAction.ts +66 -62
  281. package/src/components/VvInputText/VvInputStepAction.ts +43 -43
  282. package/src/components/VvInputText/VvInputText.vue +652 -516
  283. package/src/components/VvInputText/VvInputTextActions.ts +87 -87
  284. package/src/components/VvInputText/index.ts +201 -186
  285. package/src/components/VvNav/VvNav.vue +40 -36
  286. package/src/components/VvNav/VvNavItem.vue +12 -12
  287. package/src/components/VvNav/VvNavSeparator.vue +6 -6
  288. package/src/components/VvNav/index.ts +2 -2
  289. package/src/components/VvProgress/VvProgress.vue +27 -27
  290. package/src/components/VvProgress/index.ts +28 -28
  291. package/src/components/VvRadio/VvRadio.vue +115 -112
  292. package/src/components/VvRadio/index.ts +29 -29
  293. package/src/components/VvRadioGroup/VvRadioGroup.vue +91 -90
  294. package/src/components/VvSelect/VvSelect.vue +262 -241
  295. package/src/components/VvSelect/index.ts +88 -63
  296. package/src/components/VvTab/VvTab.vue +79 -69
  297. package/src/components/VvTab/index.ts +13 -13
  298. package/src/components/VvTextarea/VvTextarea.vue +218 -219
  299. package/src/components/VvTextarea/index.ts +35 -35
  300. package/src/components/VvTooltip/VvTooltip.vue +22 -16
  301. package/src/components/VvTooltip/index.ts +12 -12
  302. package/src/components/common/HintSlot.ts +151 -152
  303. package/src/components/index.ts +10 -0
  304. package/src/composables/alert/{useInjectAlert.ts → useAlerInject.ts} +1 -1
  305. package/src/composables/alert/useAlert.ts +76 -73
  306. package/src/composables/alert/{useProvideAlert.ts → useAlertProvide.ts} +12 -12
  307. package/src/composables/dropdown/useDropdownContextmenu.ts +22 -0
  308. package/src/composables/dropdown/{useInjectDropdown.ts → useDropdownInject.ts} +6 -6
  309. package/src/composables/dropdown/useDropdownProvide.ts +94 -0
  310. package/src/composables/dropdown/useDropdownVirtualElement.ts +53 -0
  311. package/src/composables/group/useGroupStateInject.ts +55 -0
  312. package/src/composables/group/useGroupStateProvide.ts +14 -0
  313. package/src/composables/index.ts +3 -0
  314. package/src/composables/useBlurhash.ts +68 -0
  315. package/src/composables/useComponentFocus.ts +9 -9
  316. package/src/composables/useComponentIcon.ts +36 -35
  317. package/src/composables/useDebouncedInput.ts +25 -25
  318. package/src/composables/useDefaults.ts +81 -80
  319. package/src/composables/useModifiers.ts +29 -29
  320. package/src/composables/useOptions.ts +51 -42
  321. package/src/composables/usePersistence.ts +74 -0
  322. package/src/composables/useTextCount.ts +46 -46
  323. package/src/composables/useUniqueId.ts +4 -4
  324. package/src/composables/useVolver.ts +1 -1
  325. package/src/constants.ts +98 -83
  326. package/src/directives/index.ts +3 -6
  327. package/src/directives/v-contextmenu.ts +26 -34
  328. package/src/directives/v-tooltip.ts +20 -11
  329. package/src/icons.ts +2 -2
  330. package/src/index.ts +6 -4
  331. package/src/props/index.ts +461 -384
  332. package/src/resolvers/unplugin.ts +154 -144
  333. package/src/shims.d.ts +4 -5
  334. package/src/stories/Accordion/Accordion.settings.ts +51 -50
  335. package/src/stories/Accordion/Accordion.stories.ts +21 -21
  336. package/src/stories/Accordion/Accordion.test.ts +56 -54
  337. package/src/stories/Accordion/AccordionSlots.stories.ts +13 -13
  338. package/src/stories/AccordionGroup/AccordionGroup.settings.ts +70 -67
  339. package/src/stories/AccordionGroup/AccordionGroup.stories.ts +41 -39
  340. package/src/stories/AccordionGroup/AccordionGroup.test.ts +49 -45
  341. package/src/stories/AccordionGroup/AccordionGroupSlots.stories.ts +36 -36
  342. package/src/stories/Alert/Alert.settings.ts +117 -116
  343. package/src/stories/Alert/Alert.stories.ts +30 -30
  344. package/src/stories/Alert/Alert.test.ts +78 -80
  345. package/src/stories/Alert/AlertModifiers.stories.ts +45 -45
  346. package/src/stories/Alert/AlertSlots.stories.ts +35 -35
  347. package/src/stories/AlertGroup/AlertGroup.settings.ts +107 -105
  348. package/src/stories/AlertGroup/AlertGroup.stories.ts +25 -25
  349. package/src/stories/AlertGroup/AlertGroup.test.ts +69 -71
  350. package/src/stories/AlertGroup/AlertGroupPosition.stories.ts +68 -68
  351. package/src/stories/AlertGroup/AlertGroupSlots.stories.ts +23 -23
  352. package/src/stories/AlertGroup/AlertGroupWithComposable.stories.ts +58 -58
  353. package/src/stories/Avatar/Avatar.settings.ts +29 -29
  354. package/src/stories/Avatar/Avatar.stories.ts +22 -22
  355. package/src/stories/Avatar/Avatar.test.ts +22 -24
  356. package/src/stories/Avatar/AvatarBadge.stories.ts +15 -15
  357. package/src/stories/Avatar/AvatarModifiers.stories.ts +60 -60
  358. package/src/stories/Avatar/AvatarSlots.stories.ts +17 -17
  359. package/src/stories/AvatarGroup/AvatarGroup.settings.ts +54 -53
  360. package/src/stories/AvatarGroup/AvatarGroup.stories.ts +17 -17
  361. package/src/stories/AvatarGroup/AvatarGroup.test.ts +24 -26
  362. package/src/stories/AvatarGroup/AvatarGroupModifiers.stories.ts +15 -15
  363. package/src/stories/AvatarGroup/AvatarGroupSlotDefault.stories.ts +17 -17
  364. package/src/stories/Badge/Badge.settings.ts +21 -20
  365. package/src/stories/Badge/Badge.stories.ts +24 -24
  366. package/src/stories/Badge/Badge.test.ts +8 -8
  367. package/src/stories/Badge/BadgeSlots.stories.ts +10 -10
  368. package/src/stories/Blurhash/BlurhashComposable.stories.ts +116 -0
  369. package/src/stories/Breadcrumb/Breadcrumb.settings.ts +35 -34
  370. package/src/stories/Breadcrumb/Breadcrumb.stories.ts +23 -23
  371. package/src/stories/Breadcrumb/Breadcrumb.test.ts +44 -43
  372. package/src/stories/Breadcrumb/BreadcrumbSlots.stories.ts +19 -19
  373. package/src/stories/Button/Button.settings.ts +147 -151
  374. package/src/stories/Button/Button.stories.ts +19 -19
  375. package/src/stories/Button/Button.test.ts +41 -42
  376. package/src/stories/Button/ButtonIcon.stories.ts +42 -42
  377. package/src/stories/Button/ButtonLink.stories.ts +24 -24
  378. package/src/stories/Button/ButtonLoading.stories.ts +22 -22
  379. package/src/stories/Button/ButtonModifiers.stories.ts +91 -91
  380. package/src/stories/Button/ButtonSlots.stories.ts +47 -47
  381. package/src/stories/Button/ButtonState.stories.ts +23 -23
  382. package/src/stories/Button/ButtonToggle.stories.ts +30 -30
  383. package/src/stories/ButtonGroup/ButtonGroup.settings.ts +33 -24
  384. package/src/stories/ButtonGroup/ButtonGroup.stories.ts +19 -19
  385. package/src/stories/ButtonGroup/ButtonGroup.test.ts +23 -26
  386. package/src/stories/ButtonGroup/ButtonGroupModifiers.stories.ts +20 -20
  387. package/src/stories/ButtonGroup/ButtonGroupSlots.stories.ts +17 -17
  388. package/src/stories/ButtonGroup/ButtonGroupToggle.stories.ts +22 -22
  389. package/src/stories/Card/Card.settings.ts +49 -48
  390. package/src/stories/Card/Card.stories.ts +22 -22
  391. package/src/stories/Card/Card.test.ts +14 -16
  392. package/src/stories/Card/CardSlots.stories.ts +42 -42
  393. package/src/stories/Checkbox/Checkbox.settings.ts +36 -35
  394. package/src/stories/Checkbox/Checkbox.stories.ts +57 -57
  395. package/src/stories/Checkbox/Checkbox.test.ts +63 -66
  396. package/src/stories/Checkbox/CheckboxBinary.stories.ts +18 -18
  397. package/src/stories/Checkbox/CheckboxSlots.stories.ts +15 -15
  398. package/src/stories/CheckboxGroup/CheckboxGroup.settings.ts +9 -9
  399. package/src/stories/CheckboxGroup/CheckboxGroup.stories.ts +50 -50
  400. package/src/stories/CheckboxGroup/CheckboxGroup.test.ts +64 -68
  401. package/src/stories/CheckboxGroup/CheckboxGroupOptions.stories.ts +34 -34
  402. package/src/stories/CheckboxGroup/CheckboxGroupSlots.stories.ts +23 -23
  403. package/src/stories/Combobox/Combobox.settings.ts +408 -385
  404. package/src/stories/Combobox/Combobox.stories.ts +116 -107
  405. package/src/stories/Combobox/Combobox.test.ts +92 -92
  406. package/src/stories/Combobox/ComboboxIconPosition.stories.ts +25 -24
  407. package/src/stories/Combobox/ComboboxMultiple.stories.ts +32 -22
  408. package/src/stories/Combobox/ComboboxOptions.stories.ts +81 -84
  409. package/src/stories/Combobox/ComboboxSlots.stories.ts +55 -54
  410. package/src/stories/Dialog/Dialog.settings.ts +49 -40
  411. package/src/stories/Dialog/Dialog.stories.ts +28 -28
  412. package/src/stories/Dialog/Dialog.test.ts +49 -54
  413. package/src/stories/Dialog/DialogModifiers.stories.ts +42 -0
  414. package/src/stories/Dialog/DialogSlots.stories.ts +20 -20
  415. package/src/stories/Dropdown/Dropdown.settings.ts +62 -61
  416. package/src/stories/Dropdown/Dropdown.stories.ts +60 -60
  417. package/src/stories/Dropdown/Dropdown.test.ts +9 -13
  418. package/src/stories/Dropdown/DropdownContextmenuDirective.stories.ts +18 -19
  419. package/src/stories/Dropdown/DropdownMultilevel.stories.ts +19 -19
  420. package/src/stories/Dropdown/DropdownSlots.stories.ts +51 -51
  421. package/src/stories/Icon/Icon.settings.ts +66 -65
  422. package/src/stories/Icon/Icon.stories.ts +29 -30
  423. package/src/stories/Icon/IconsCollection.stories.ts +24 -24
  424. package/src/stories/InputFile/InputFile.settings.ts +37 -0
  425. package/src/stories/InputFile/InputFile.stories.ts +97 -0
  426. package/src/stories/InputFile/InputFileDropArea.stories.ts +56 -0
  427. package/src/stories/InputFile/InputFileIconPosition.stories.ts +43 -0
  428. package/src/stories/InputFile/InputFileSlots.stories.ts +33 -0
  429. package/src/stories/InputText/InputText.settings.ts +248 -246
  430. package/src/stories/InputText/InputText.stories.ts +68 -68
  431. package/src/stories/InputText/InputText.test.ts +119 -122
  432. package/src/stories/InputText/InputTextIconPosition.stories.ts +24 -24
  433. package/src/stories/InputText/InputTextLength.stories.ts +33 -33
  434. package/src/stories/InputText/InputTextMask.stories.ts +91 -91
  435. package/src/stories/InputText/InputTextMinMax.stories.ts +30 -30
  436. package/src/stories/InputText/InputTextSlots.stories.ts +20 -20
  437. package/src/stories/InputText/InputTextType.stories.ts +70 -70
  438. package/src/stories/Nav/Nav.settings.ts +27 -27
  439. package/src/stories/Nav/Nav.stories.ts +18 -18
  440. package/src/stories/Nav/Nav.test.ts +10 -12
  441. package/src/stories/Nav/NavModifiers.stories.ts +25 -25
  442. package/src/stories/Progress/Progress.settings.ts +24 -23
  443. package/src/stories/Progress/Progress.stories.ts +23 -23
  444. package/src/stories/Progress/Progress.test.ts +5 -5
  445. package/src/stories/Radio/Radio.settings.ts +9 -9
  446. package/src/stories/Radio/Radio.stories.ts +47 -47
  447. package/src/stories/Radio/Radio.test.ts +54 -57
  448. package/src/stories/Radio/RadioSlots.stories.ts +15 -15
  449. package/src/stories/RadioGroup/RadioGroup.settings.ts +9 -9
  450. package/src/stories/RadioGroup/RadioGroup.stories.ts +51 -52
  451. package/src/stories/RadioGroup/RadioGroup.test.ts +64 -68
  452. package/src/stories/RadioGroup/RadioGroupOptions.stories.ts +35 -35
  453. package/src/stories/RadioGroup/RadioGroupSlots.stories.ts +23 -23
  454. package/src/stories/Select/Select.settings.ts +72 -71
  455. package/src/stories/Select/Select.stories.ts +75 -66
  456. package/src/stories/Select/Select.test.ts +67 -70
  457. package/src/stories/Select/SelectIconPosition.stories.ts +27 -26
  458. package/src/stories/Select/SelectOptions.stories.ts +55 -55
  459. package/src/stories/Select/SelectSlots.stories.ts +21 -20
  460. package/src/stories/Tab/Tab.settings.ts +34 -34
  461. package/src/stories/Tab/Tab.stories.ts +16 -16
  462. package/src/stories/Tab/Tab.test.ts +17 -19
  463. package/src/stories/Textarea/Textarea.settings.ts +80 -78
  464. package/src/stories/Textarea/Textarea.stories.ts +63 -63
  465. package/src/stories/Textarea/Textarea.test.ts +70 -73
  466. package/src/stories/Textarea/TextareaLength.stories.ts +33 -33
  467. package/src/stories/Textarea/TextareaSlots.stories.ts +20 -20
  468. package/src/stories/Textarea/TextareatIconPosition.stories.ts +24 -24
  469. package/src/stories/Tooltip/Tooltip.settings.ts +16 -17
  470. package/src/stories/Tooltip/Tooltip.stories.ts +18 -18
  471. package/src/stories/Tooltip/Tooltip.test.ts +53 -54
  472. package/src/stories/Tooltip/TooltipDirective.stories.ts +37 -37
  473. package/src/stories/argTypes.ts +506 -505
  474. package/src/test/expect.ts +74 -79
  475. package/src/test/options.ts +17 -16
  476. package/src/test/sleep.ts +3 -2
  477. package/src/test/types.d.ts +12 -12
  478. package/src/types/alert.ts +21 -17
  479. package/src/types/blurhash.ts +21 -0
  480. package/src/types/floating-ui.ts +1 -1
  481. package/src/types/generic.ts +2 -3
  482. package/src/types/group.ts +35 -27
  483. package/src/types/index.ts +7 -0
  484. package/src/types/input-file.ts +10 -0
  485. package/src/types/nav.ts +13 -14
  486. package/src/utils/DomUtilities.ts +15 -0
  487. package/src/utils/ObjectUtilities.ts +192 -188
  488. package/src/workers/blurhash.ts +9 -0
  489. package/dist/composables/alert/useInjectAlert.d.ts +0 -9
  490. package/dist/composables/dropdown/useInjectDropdown.d.ts +0 -32
  491. package/dist/composables/group/useInjectedGroupState.d.ts +0 -10
  492. package/dist/composables/group/useProvideGroupState.d.ts +0 -6
  493. package/src/composables/dropdown/useProvideDropdown.ts +0 -94
  494. package/src/composables/group/useInjectedGroupState.ts +0 -51
  495. package/src/composables/group/useProvideGroupState.ts +0 -20
  496. /package/src/assets/icons/normal/{dulicate.svg → duplicate.svg} +0 -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 type { Option } from '../../types/generic'
4
+ import { useVvSelectProps, type VvSelectEmits } from '.'
5
+ import HintSlotFactory from '../common/HintSlot'
6
+ import VvIcon from '../VvIcon/VvIcon.vue'
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<HTMLSelectElement>()
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 && selectEl.value) {
76
+ selectEl.value.value = String(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'
2
+ import type { Option } from '../../types/generic'
1
3
  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,
4
+ AutocompleteProps,
5
+ AutofocusProps,
6
+ DisabledProps,
7
+ FloatingLabelProps,
8
+ HintProps,
9
+ IconProps,
10
+ IdNameProps,
11
+ InvalidProps,
12
+ LabelProps,
13
+ LoadingProps,
14
+ ModifiersProps,
15
+ OptionsProps,
16
+ ReadonlyProps,
17
+ TabindexProps,
18
+ UnselectableProps,
19
+ ValidProps,
18
20
  } from '../../props'
19
21
 
22
+ export type VvSelectEmits = {
23
+ 'update:modelValue': [any]
24
+ 'focus': [MaybeElement]
25
+ 'blur': [MaybeElement]
26
+ }
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
+ }