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

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 +1963 -1639
  64. package/dist/components/VvCombobox/VvCombobox.umd.js +1 -1
  65. package/dist/components/VvCombobox/VvCombobox.vue.d.ts +260 -672
  66. package/dist/components/VvCombobox/index.d.ts +385 -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 +1495 -548
  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 +278 -255
  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 +4303 -2228
  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 +288 -198
  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 +657 -619
  265. package/src/components/VvCombobox/index.ts +212 -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 +653 -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 +467 -383
  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,17 +1,19 @@
1
+ import type { Alert } from '@/types/alert'
1
2
  import {
2
- DEFAULT_ALERT_AUTO_CLOSE,
3
- DEFAULT_ALERT_DISMISSABLE,
4
- DEFAULT_ALERT_GROUP,
5
- DEFAULT_ALERT_MODIFIERS,
6
- DEFAULT_ALERT_INFO_ICON,
7
- DefaultAlertIconMap,
3
+ DEFAULT_ALERT_AUTO_CLOSE,
4
+ DEFAULT_ALERT_DISMISSABLE,
5
+ DEFAULT_ALERT_GROUP,
6
+ DEFAULT_ALERT_INFO_ICON,
7
+ DEFAULT_ALERT_MODIFIERS,
8
+ DefaultAlertIconMap,
8
9
  } from '@/constants'
9
- import type { Alert, AlertModifiers } from '@/types/alert'
10
+
11
+ type AlertInGroup = Alert & { timestamp: number, group: string }
10
12
 
11
13
  const groups = reactive(
12
- new Map<string, Map<string, Alert>>([
13
- [DEFAULT_ALERT_GROUP, new Map<string, Alert>()],
14
- ]),
14
+ new Map<string, Map<string, AlertInGroup>>([
15
+ [DEFAULT_ALERT_GROUP, new Map<string, AlertInGroup>()],
16
+ ]),
15
17
  )
16
18
 
17
19
  /**
@@ -31,73 +33,74 @@ const groups = reactive(
31
33
  * addAlert: Function to add alert,
32
34
  * removeAlert: Function to remove alert,
33
35
  * getAlerts: Function to get alerts by group
34
- * }
36
+ * } the reactive list of alerts, groups, addAlert, removeAlert and getAlerts functions
35
37
  */
36
- export const useAlert = () => {
37
- const addAlert = (
38
- {
39
- id = crypto.randomUUID(),
40
- group = DEFAULT_ALERT_GROUP,
41
- title,
42
- icon = DEFAULT_ALERT_INFO_ICON,
43
- content,
44
- footer,
45
- modifiers = DEFAULT_ALERT_MODIFIERS,
46
- dismissable = DEFAULT_ALERT_DISMISSABLE,
47
- autoClose = DEFAULT_ALERT_AUTO_CLOSE,
48
- } = {} as Partial<Alert>,
49
- ) => {
50
- if (!groups.has(group)) {
51
- groups.set(group, new Map<string, Alert>())
52
- }
53
- const groupMap = groups.get(group)
54
- const normalizedModifiers =
55
- typeof modifiers === 'string' ? modifiers.split(' ') : modifiers
38
+ export function useAlert() {
39
+ const addAlert = (
40
+ {
41
+ id = crypto.randomUUID(),
42
+ group = DEFAULT_ALERT_GROUP,
43
+ title,
44
+ icon = DEFAULT_ALERT_INFO_ICON,
45
+ content,
46
+ footer,
47
+ modifiers = DEFAULT_ALERT_MODIFIERS,
48
+ dismissable = DEFAULT_ALERT_DISMISSABLE,
49
+ autoClose = DEFAULT_ALERT_AUTO_CLOSE,
50
+ timestamp = Date.now(),
51
+ } = {} as Partial<AlertInGroup>,
52
+ ) => {
53
+ if (!groups.has(group)) {
54
+ groups.set(group, new Map<string, AlertInGroup>())
55
+ }
56
+ const groupMap = groups.get(group)
57
+ const normalizedModifiers
58
+ = typeof modifiers === 'string' ? modifiers.split(' ') : modifiers
56
59
 
57
- if (!icon) {
58
- const alertModifier = normalizedModifiers.find((modifier) =>
59
- DefaultAlertIconMap.has(modifier as AlertModifiers),
60
- ) as AlertModifiers | undefined
60
+ if (!icon) {
61
+ const alertModifier = normalizedModifiers.find(modifier =>
62
+ DefaultAlertIconMap.has(modifier),
63
+ )
61
64
 
62
- if (alertModifier) {
63
- icon = DefaultAlertIconMap.get(alertModifier) as string
64
- }
65
- }
66
- groupMap?.set(id.toString(), {
67
- id,
68
- group,
69
- title,
70
- icon,
71
- content,
72
- footer,
73
- modifiers,
74
- dismissable,
75
- autoClose,
76
- timestamp: Date.now(),
77
- })
78
- }
65
+ if (alertModifier) {
66
+ icon = DefaultAlertIconMap.get(alertModifier) as string
67
+ }
68
+ }
69
+ groupMap?.set(id.toString(), {
70
+ id,
71
+ group,
72
+ title,
73
+ icon,
74
+ content,
75
+ footer,
76
+ modifiers,
77
+ dismissable,
78
+ autoClose,
79
+ timestamp,
80
+ })
81
+ }
79
82
 
80
- const removeAlert = (id: string | number, group = DEFAULT_ALERT_GROUP) => {
81
- const groupMap = groups.get(group)
82
- groupMap?.delete(id.toString())
83
- }
83
+ const removeAlert = (id: string | number, group = DEFAULT_ALERT_GROUP) => {
84
+ const groupMap = groups.get(group)
85
+ groupMap?.delete(id.toString())
86
+ }
84
87
 
85
- const getAlerts = (group = DEFAULT_ALERT_GROUP) => {
86
- return computed(() => {
87
- const groupMap = groups.get(group)
88
- return groupMap && groupMap instanceof Map
89
- ? Array.from(groupMap?.values()).sort(
90
- (a, b) => a.timestamp - b.timestamp,
91
- )
92
- : []
93
- })
94
- }
88
+ const getAlerts = (group = DEFAULT_ALERT_GROUP) => {
89
+ return computed(() => {
90
+ const groupMap = groups.get(group)
91
+ return groupMap && groupMap instanceof Map
92
+ ? Array.from(groupMap?.values()).sort(
93
+ (a, b) => a.timestamp - b.timestamp,
94
+ )
95
+ : []
96
+ })
97
+ }
95
98
 
96
- return {
97
- groups,
98
- alerts: getAlerts(),
99
- addAlert,
100
- removeAlert,
101
- getAlerts,
102
- }
99
+ return {
100
+ groups,
101
+ alerts: getAlerts(),
102
+ addAlert,
103
+ removeAlert,
104
+ getAlerts,
105
+ }
103
106
  }
@@ -1,23 +1,23 @@
1
1
  import type { Ref } from 'vue'
2
- import mitt from 'mitt'
3
2
  import { INJECTION_KEY_ALERT_GROUP } from '@/constants'
3
+ import mitt from 'mitt'
4
4
 
5
5
  /**
6
6
  * Share the alert group name with all its children.
7
7
  * @param {Ref<string | undefined>} name the alert group name
8
8
  */
9
- export function useProvideAlertGroup({
10
- name,
9
+ export function useAlertProvideGroup({
10
+ name,
11
11
  }: {
12
- name: Ref<string | undefined>
12
+ name: Ref<string | undefined>
13
13
  }) {
14
- const bus = mitt<{
15
- close: string
16
- }>()
17
- provide(INJECTION_KEY_ALERT_GROUP, {
18
- name,
19
- bus,
20
- })
14
+ const bus = mitt<{
15
+ close: string
16
+ }>()
17
+ provide(INJECTION_KEY_ALERT_GROUP, {
18
+ name,
19
+ bus,
20
+ })
21
21
 
22
- return bus
22
+ return bus
23
23
  }
@@ -0,0 +1,22 @@
1
+ import type VvDropdown from '@/components/VvDropdown/VvDropdown.vue'
2
+ import { computed, getCurrentInstance, onMounted, onUnmounted, type Ref, unref } from 'vue'
3
+
4
+ export function useDropdownContextmenu(dropdownEl: Ref<typeof VvDropdown>, targetEl?: Ref<HTMLElement> | HTMLElement) {
5
+ const { x, y, getBoundingClientRect, onScroll } = useDropdownVirtualElement(dropdownEl)
6
+ const onContextmenu = (event: MouseEvent) => {
7
+ x.value = event.clientX
8
+ y.value = event.clientY
9
+ event.preventDefault()
10
+ dropdownEl.value.show()
11
+ }
12
+ const target = computed(() => unref(targetEl))
13
+ if (target && getCurrentInstance()) {
14
+ onMounted(() => {
15
+ target.value?.addEventListener('contextmenu', onContextmenu, false)
16
+ })
17
+ onUnmounted(() => {
18
+ target.value?.removeEventListener('contextmenu', onContextmenu)
19
+ })
20
+ }
21
+ return { x, y, getBoundingClientRect, onContextmenu, onScroll }
22
+ }
@@ -1,26 +1,26 @@
1
1
  import {
2
- INJECTION_KEY_DROPDOWN_TRIGGER,
3
- INJECTION_KEY_DROPDOWN_ACTION,
4
- INJECTION_KEY_DROPDOWN_ITEM,
2
+ INJECTION_KEY_DROPDOWN_ACTION,
3
+ INJECTION_KEY_DROPDOWN_ITEM,
4
+ INJECTION_KEY_DROPDOWN_TRIGGER,
5
5
  } from '../../constants'
6
6
 
7
7
  /**
8
8
  * Injects dropdown reference and the event bus
9
9
  */
10
10
  export function useInjectedDropdownTrigger() {
11
- return inject(INJECTION_KEY_DROPDOWN_TRIGGER, {})
11
+ return inject(INJECTION_KEY_DROPDOWN_TRIGGER, {})
12
12
  }
13
13
 
14
14
  /**
15
15
  * Injects dropdown item role
16
16
  */
17
17
  export function useInjectedDropdownItem() {
18
- return inject(INJECTION_KEY_DROPDOWN_ITEM, {})
18
+ return inject(INJECTION_KEY_DROPDOWN_ITEM, {})
19
19
  }
20
20
 
21
21
  /**
22
22
  * Injects dropdown action role
23
23
  */
24
24
  export function useInjectedDropdownAction() {
25
- return inject(INJECTION_KEY_DROPDOWN_ACTION, {})
25
+ return inject(INJECTION_KEY_DROPDOWN_ACTION, {})
26
26
  }
@@ -0,0 +1,94 @@
1
+ import mitt from 'mitt'
2
+ import { Fragment, type Ref } from 'vue'
3
+ import {
4
+ ActionRoles,
5
+ DropdownItemRole,
6
+ type DropdownItemState,
7
+ DropdownRole,
8
+ INJECTION_KEY_DROPDOWN_ACTION,
9
+ INJECTION_KEY_DROPDOWN_ITEM,
10
+ INJECTION_KEY_DROPDOWN_TRIGGER,
11
+ } from '../../constants'
12
+
13
+ /**
14
+ * Share the dropdown reference and the event bus with all its children.
15
+ * @param {Ref<HTMLElement | null>} reference the dropdown reference
16
+ */
17
+ export function useDropdownProvideTrigger({
18
+ reference,
19
+ id,
20
+ expanded,
21
+ aria,
22
+ }: {
23
+ reference: Ref<HTMLElement | null | undefined>
24
+ id: Ref<string | number>
25
+ expanded: Ref<boolean>
26
+ aria: Ref<{
27
+ 'aria-controls': string
28
+ 'aria-haspopup': boolean
29
+ 'aria-expanded': boolean
30
+ }>
31
+ }) {
32
+ const bus = mitt<{
33
+ click: Event
34
+ mouseover: Event
35
+ mouseleave: Event
36
+ }>()
37
+ const component = defineComponent({
38
+ name: 'VvDropdownTriggerProvider',
39
+ setup() {
40
+ provide(INJECTION_KEY_DROPDOWN_TRIGGER, {
41
+ reference,
42
+ id,
43
+ expanded,
44
+ aria,
45
+ bus,
46
+ })
47
+ },
48
+ render() {
49
+ return h(Fragment, {}, this.$slots.default?.())
50
+ },
51
+ })
52
+
53
+ return {
54
+ bus,
55
+ component,
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Share the dropdown item role with all its children.
61
+ * @param {Ref<string>} role the dropdown item role
62
+ */
63
+ export function useDropdownProvideItem({
64
+ role,
65
+ ...others
66
+ }: Omit<DropdownItemState, 'role'> & {
67
+ role: Ref<`${DropdownRole}`>
68
+ }) {
69
+ const itemRole = computed(() =>
70
+ role.value === DropdownRole.listbox
71
+ ? DropdownItemRole.option
72
+ : DropdownItemRole.presentation,
73
+ )
74
+ provide(INJECTION_KEY_DROPDOWN_ITEM, {
75
+ role: itemRole,
76
+ ...others,
77
+ })
78
+ return { itemRole }
79
+ }
80
+
81
+ /**
82
+ * Share the dropdown item role with all its children.
83
+ * @param {Ref<string>} role the dropdown item role
84
+ */
85
+ export function useDropdownProvideAction({
86
+ expanded,
87
+ }: {
88
+ expanded?: Ref<boolean>
89
+ }) {
90
+ provide(INJECTION_KEY_DROPDOWN_ACTION, {
91
+ role: ref(ActionRoles.menuitem),
92
+ expanded,
93
+ })
94
+ }
@@ -0,0 +1,53 @@
1
+ import type VvDropdown from '@/components/VvDropdown/VvDropdown.vue'
2
+ import { onMounted, type Ref, ref } from 'vue'
3
+
4
+ export function useDropdownVirtualElement(dropdownEl: Ref<typeof VvDropdown>) {
5
+ const x = ref(0)
6
+ const y = ref(0)
7
+
8
+ const scrollContainerEl = ref<HTMLElement>()
9
+ let scrollXDelta = 0
10
+ let scrollYDelta = 0
11
+ let lastScrollTop = 0
12
+ let lastScrollLeft = 0
13
+ const onScroll = (event: HTMLElementEventMap['scroll']) => {
14
+ const scrollEl = event.target as HTMLElement
15
+ scrollXDelta = scrollEl.scrollLeft - lastScrollLeft
16
+ scrollYDelta = scrollEl.scrollTop - lastScrollTop
17
+ y.value = y.value - scrollYDelta
18
+ x.value = x.value - scrollXDelta
19
+ lastScrollLeft = scrollEl.scrollLeft
20
+ lastScrollTop = scrollEl.scrollTop
21
+ }
22
+ const getBoundingClientRect = () => ({
23
+ width: 0,
24
+ height: 0,
25
+ x: x.value,
26
+ y: y.value,
27
+ top: y.value,
28
+ left: x.value,
29
+ right: x.value,
30
+ bottom: y.value,
31
+ })
32
+
33
+ if (getCurrentInstance()) {
34
+ onMounted(() => {
35
+ if (dropdownEl.value) {
36
+ dropdownEl.value.init({
37
+ getBoundingClientRect,
38
+ })
39
+ scrollContainerEl.value = findScrollContainer(dropdownEl.value.$el)
40
+ if (scrollContainerEl.value) {
41
+ scrollContainerEl.value.addEventListener('scroll', onScroll)
42
+ }
43
+ }
44
+ })
45
+
46
+ onUnmounted(() => {
47
+ if (scrollContainerEl.value) {
48
+ scrollContainerEl.value.removeEventListener('scroll', onScroll)
49
+ }
50
+ })
51
+ }
52
+ return { x, y, getBoundingClientRect, onScroll }
53
+ }
@@ -0,0 +1,55 @@
1
+ import type { InjectionKey, Ref } from 'vue'
2
+
3
+ /**
4
+ * Injects a group state
5
+ */
6
+ export function useGroupStateInject<GroupStateType>(
7
+ groupKey: InjectionKey<GroupStateType>,
8
+ ) {
9
+ // Get group state
10
+ const group = inject<GroupStateType | undefined>(groupKey, undefined)
11
+
12
+ // Check if component is in group
13
+ const isInGroup = computed(() => group !== undefined)
14
+
15
+ /**
16
+ * Get a group or local property
17
+ */
18
+ function getGroupOrLocalRef<
19
+ TProps extends object,
20
+ TName extends keyof GroupStateType,
21
+ >(
22
+ propName: TName,
23
+ props: TProps,
24
+ emit?: (event: string, ...args: unknown[]) => void,
25
+ ) {
26
+ const groupPropValue = group?.[propName] as Ref | undefined
27
+ if (groupPropValue) {
28
+ return computed({
29
+ get() {
30
+ return groupPropValue.value
31
+ },
32
+ set(value: unknown) {
33
+ groupPropValue.value = value
34
+ },
35
+ }) as GroupStateType[TName]
36
+ }
37
+ const propRef = toRef(props, propName as unknown as keyof TProps)
38
+ return computed({
39
+ get() {
40
+ return propRef.value
41
+ },
42
+ set(value: unknown) {
43
+ if (emit) {
44
+ emit(`update:${propName as string}`, value)
45
+ }
46
+ },
47
+ }) as GroupStateType[TName]
48
+ }
49
+
50
+ return {
51
+ group,
52
+ isInGroup,
53
+ getGroupOrLocalRef,
54
+ }
55
+ }
@@ -0,0 +1,14 @@
1
+ import type { Emitter } from 'mitt'
2
+ import type { InjectionKey, Ref } from 'vue'
3
+
4
+ /**
5
+ * Share part of the state of the component with all its children.
6
+ */
7
+ export function useGroupStateProvide<
8
+ TGroupState extends Record<
9
+ string,
10
+ Ref<unknown> | Emitter<any>
11
+ >,
12
+ >(key: InjectionKey<TGroupState>, groupState: TGroupState) {
13
+ provide(key, groupState)
14
+ }
@@ -1 +1,4 @@
1
1
  export { useAlert } from './alert/useAlert'
2
+ export { useDropdownContextmenu } from './dropdown/useDropdownContextmenu'
3
+ export { useDropdownVirtualElement } from './dropdown/useDropdownVirtualElement'
4
+ export { useBlurhash } from './useBlurhash'
@@ -0,0 +1,68 @@
1
+ import type { BlurhashWorkerType } from '@/types/blurhash'
2
+ import BlurhashWorker from '@/workers/blurhash?worker&inline'
3
+ import { wrap } from 'comlink'
4
+ import Pica from 'pica'
5
+
6
+ const remoteFunction = wrap<BlurhashWorkerType>(new BlurhashWorker())
7
+
8
+ function loadImage(src: string): Promise<CanvasImageSource> {
9
+ return new Promise((resolve, reject) => {
10
+ const img = new Image()
11
+ img.onload = () => resolve(img)
12
+ img.onerror = (...args) => reject(args)
13
+ img.src = src
14
+ })
15
+ }
16
+
17
+ function getWidthHeightFromMaxSize(width: number, height: number, maxSize: number) {
18
+ if (width > height) {
19
+ return {
20
+ width: maxSize,
21
+ height: Math.round(maxSize * (height / width)),
22
+ }
23
+ }
24
+ return {
25
+ width: Math.round(maxSize * (width / height)),
26
+ height: maxSize,
27
+ }
28
+ }
29
+
30
+ async function resizeImage(image: ImageBitmap | HTMLImageElement | HTMLCanvasElement | File | Blob, width: number, height: number) {
31
+ const resizer = new Pica()
32
+ const canvas = document.createElement('canvas')
33
+ canvas.width = width
34
+ canvas.height = height
35
+ const result = await resizer.resize(image, canvas)
36
+ return result.getContext('2d')?.getImageData(0, 0, width, height).data
37
+ }
38
+
39
+ export function useBlurhash() {
40
+ async function encode(file: File) {
41
+ const imageUrl = URL.createObjectURL(file)
42
+ const image = await loadImage(imageUrl)
43
+ if ('width' in image && 'height' in image) {
44
+ const { width: newWidth, height: newHeight }
45
+ = getWidthHeightFromMaxSize(
46
+ image.width as number,
47
+ image.height as number,
48
+ 32,
49
+ )
50
+ const imageData = await resizeImage(
51
+ image as ImageBitmap,
52
+ newWidth,
53
+ newHeight,
54
+ )
55
+ if (imageData) {
56
+ return remoteFunction.encode(
57
+ imageData,
58
+ newWidth,
59
+ newHeight,
60
+ 4,
61
+ 4,
62
+ )
63
+ }
64
+ }
65
+ }
66
+
67
+ return { encode, decode: remoteFunction.decode, loadImage }
68
+ }
@@ -1,16 +1,16 @@
1
1
  import type { MaybeElement, MaybeElementRef } from '@vueuse/core'
2
2
 
3
3
  export function useComponentFocus(
4
- inputTemplateRef: MaybeElementRef<MaybeElement>,
5
- emit: (event: 'focus' | 'blur', value: unknown) => void,
4
+ inputTemplateRef: MaybeElementRef<MaybeElement>,
5
+ emit: ((name: 'blur', ...args: any[]) => void) & ((name: 'focus', ...args: any[]) => void) & ((name: any, ...args: any[]) => void),
6
6
  ) {
7
- const { focused } = useFocus(inputTemplateRef)
7
+ const { focused } = useFocus(inputTemplateRef)
8
8
 
9
- watch(focused, (newValue) => {
10
- emit(newValue ? 'focus' : 'blur', unref(inputTemplateRef))
11
- })
9
+ watch(focused, (newValue) => {
10
+ emit(newValue ? 'focus' : 'blur', unref(inputTemplateRef))
11
+ })
12
12
 
13
- return {
14
- focused,
15
- }
13
+ return {
14
+ focused,
15
+ }
16
16
  }
@@ -1,41 +1,42 @@
1
1
  import type { Ref } from 'vue'
2
+ import type { VvIconProps } from '../components/VvIcon'
2
3
  import { Position, Side } from '../constants'
3
4
 
4
5
  export function useComponentIcon(
5
- icon: Ref<string | object | undefined> | undefined,
6
- iconPosition: Ref<string>,
6
+ icon?: Ref<string | VvIconProps | undefined>,
7
+ iconPosition?: Ref<string | undefined>,
7
8
  ) {
8
- const hasIconBefore = computed(() =>
9
- Boolean(icon?.value && iconPosition.value === Position.before),
10
- )
11
- const hasIconAfter = computed(() =>
12
- Boolean(icon?.value && iconPosition.value === Position.after),
13
- )
14
- const hasIconLeft = computed(() =>
15
- Boolean(icon?.value && iconPosition.value === Side.left),
16
- )
17
- const hasIconRight = computed(() =>
18
- Boolean(icon?.value && iconPosition.value === Side.right),
19
- )
20
- const hasIconTop = computed(() =>
21
- Boolean(icon?.value && iconPosition.value === Side.top),
22
- )
23
- const hasIconBottom = computed(() =>
24
- Boolean(icon?.value && iconPosition.value === Side.bottom),
25
- )
26
- const hasIcon = computed(() => {
27
- if (typeof icon?.value === 'string') {
28
- return { name: icon?.value }
29
- }
30
- return icon?.value
31
- })
32
- return {
33
- hasIcon,
34
- hasIconLeft,
35
- hasIconRight,
36
- hasIconTop,
37
- hasIconBottom,
38
- hasIconBefore,
39
- hasIconAfter,
40
- }
9
+ const hasIcon = computed(() => {
10
+ if (typeof icon?.value === 'string') {
11
+ return { name: icon?.value }
12
+ }
13
+ return icon?.value
14
+ })
15
+ const hasIconBefore = computed(() =>
16
+ iconPosition?.value === Position.before ? hasIcon.value : undefined,
17
+ )
18
+ const hasIconAfter = computed(() =>
19
+ iconPosition?.value === Position.after ? hasIcon.value : undefined,
20
+ )
21
+ const hasIconLeft = computed(() =>
22
+ iconPosition?.value === Side.left ? hasIcon.value : undefined,
23
+ )
24
+ const hasIconRight = computed(() =>
25
+ iconPosition?.value === Side.right ? hasIcon.value : undefined,
26
+ )
27
+ const hasIconTop = computed(() =>
28
+ iconPosition?.value === Side.top ? hasIcon.value : undefined,
29
+ )
30
+ const hasIconBottom = computed(() =>
31
+ iconPosition?.value === Side.bottom ? hasIcon.value : undefined,
32
+ )
33
+ return {
34
+ hasIcon,
35
+ hasIconLeft,
36
+ hasIconRight,
37
+ hasIconTop,
38
+ hasIconBottom,
39
+ hasIconBefore,
40
+ hasIconAfter,
41
+ }
41
42
  }