@volverjs/ui-vue 0.0.10-beta.3 → 0.0.10-beta.31

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 (294) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +106 -10
  3. package/auto-imports.d.ts +7 -2
  4. package/bin/icons.cjs +1 -1
  5. package/bin/icons.js +22 -15
  6. package/dist/Volver.d.ts +1 -1
  7. package/dist/components/VvAccordion/VvAccordion.es.js +192 -103
  8. package/dist/components/VvAccordion/VvAccordion.umd.js +1 -1
  9. package/dist/components/VvAccordion/VvAccordion.vue.d.ts +160 -8
  10. package/dist/components/VvAccordion/index.d.ts +8 -9
  11. package/dist/components/VvAccordionGroup/VvAccordionGroup.es.js +451 -172
  12. package/dist/components/VvAccordionGroup/VvAccordionGroup.umd.js +1 -1
  13. package/dist/components/VvAccordionGroup/VvAccordionGroup.vue.d.ts +58 -13
  14. package/dist/components/VvAccordionGroup/index.d.ts +14 -6
  15. package/dist/components/VvAction/VvAction.es.js +78 -27
  16. package/dist/components/VvAction/VvAction.umd.js +1 -1
  17. package/dist/components/VvAction/VvAction.vue.d.ts +57 -22
  18. package/dist/components/VvAction/index.d.ts +25 -9
  19. package/dist/components/VvAlert/VvAlert.es.js +204 -171
  20. package/dist/components/VvAlert/VvAlert.umd.js +1 -1
  21. package/dist/components/VvAlert/VvAlert.vue.d.ts +24 -14
  22. package/dist/components/VvAlert/index.d.ts +17 -9
  23. package/dist/components/VvAlertGroup/VvAlertGroup.es.js +250 -188
  24. package/dist/components/VvAlertGroup/VvAlertGroup.umd.js +1 -1
  25. package/dist/components/VvAlertGroup/VvAlertGroup.vue.d.ts +16 -9
  26. package/dist/components/VvAlertGroup/index.d.ts +6 -14
  27. package/dist/components/VvAvatar/VvAvatar.es.js +61 -21
  28. package/dist/components/VvAvatar/VvAvatar.umd.js +1 -1
  29. package/dist/components/VvAvatar/VvAvatar.vue.d.ts +12 -4
  30. package/dist/components/VvAvatar/index.d.ts +4 -1
  31. package/dist/components/VvAvatarGroup/VvAvatarGroup.es.js +118 -48
  32. package/dist/components/VvAvatarGroup/VvAvatarGroup.umd.js +1 -1
  33. package/dist/components/VvAvatarGroup/VvAvatarGroup.vue.d.ts +10 -3
  34. package/dist/components/VvAvatarGroup/index.d.ts +4 -1
  35. package/dist/components/VvBadge/VvBadge.es.js +78 -28
  36. package/dist/components/VvBadge/VvBadge.umd.js +1 -1
  37. package/dist/components/VvBadge/VvBadge.vue.d.ts +12 -4
  38. package/dist/components/VvBadge/index.d.ts +4 -1
  39. package/dist/components/VvBreadcrumb/VvBreadcrumb.es.js +276 -60
  40. package/dist/components/VvBreadcrumb/VvBreadcrumb.umd.js +1 -1
  41. package/dist/components/VvBreadcrumb/VvBreadcrumb.vue.d.ts +27 -7
  42. package/dist/components/VvBreadcrumb/index.d.ts +6 -10
  43. package/dist/components/VvButton/VvButton.es.js +291 -252
  44. package/dist/components/VvButton/VvButton.umd.js +1 -1
  45. package/dist/components/VvButton/VvButton.vue.d.ts +94 -40
  46. package/dist/components/VvButton/index.d.ts +51 -29
  47. package/dist/components/VvButtonGroup/VvButtonGroup.es.js +81 -40
  48. package/dist/components/VvButtonGroup/VvButtonGroup.umd.js +1 -1
  49. package/dist/components/VvButtonGroup/VvButtonGroup.vue.d.ts +24 -11
  50. package/dist/components/VvButtonGroup/index.d.ts +8 -2
  51. package/dist/components/VvCard/VvCard.es.js +86 -36
  52. package/dist/components/VvCard/VvCard.umd.js +1 -1
  53. package/dist/components/VvCard/VvCard.vue.d.ts +12 -4
  54. package/dist/components/VvCard/index.d.ts +4 -1
  55. package/dist/components/VvCheckbox/VvCheckbox.es.js +177 -120
  56. package/dist/components/VvCheckbox/VvCheckbox.umd.js +1 -1
  57. package/dist/components/VvCheckbox/VvCheckbox.vue.d.ts +105 -33
  58. package/dist/components/VvCheckbox/index.d.ts +47 -14
  59. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js +190 -107
  60. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.umd.js +1 -1
  61. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.vue.d.ts +101 -30
  62. package/dist/components/VvCheckboxGroup/index.d.ts +45 -12
  63. package/dist/components/VvCombobox/VvCombobox.es.js +806 -581
  64. package/dist/components/VvCombobox/VvCombobox.umd.js +1 -1
  65. package/dist/components/VvCombobox/VvCombobox.vue.d.ts +171 -104
  66. package/dist/components/VvCombobox/index.d.ts +62 -26
  67. package/dist/components/VvDialog/VvDialog.es.js +140 -153
  68. package/dist/components/VvDialog/VvDialog.umd.js +1 -1
  69. package/dist/components/VvDialog/VvDialog.vue.d.ts +4 -4
  70. package/dist/components/VvDropdown/VvDropdown.es.js +138 -71
  71. package/dist/components/VvDropdown/VvDropdown.umd.js +1 -1
  72. package/dist/components/VvDropdown/VvDropdown.vue.d.ts +101 -75
  73. package/dist/components/VvDropdown/VvDropdownAction.vue.d.ts +66 -25
  74. package/dist/components/VvDropdown/VvDropdownItem.vue.d.ts +13 -1
  75. package/dist/components/VvDropdown/VvDropdownOptgroup.vue.d.ts +12 -4
  76. package/dist/components/VvDropdown/VvDropdownOption.vue.d.ts +35 -7
  77. package/dist/components/VvDropdown/index.d.ts +52 -10
  78. package/dist/components/VvDropdownAction/VvDropdownAction.es.js +152 -39
  79. package/dist/components/VvDropdownAction/VvDropdownAction.umd.js +1 -1
  80. package/dist/components/VvDropdownItem/VvDropdownItem.es.js +335 -8
  81. package/dist/components/VvDropdownItem/VvDropdownItem.umd.js +1 -1
  82. package/dist/components/VvDropdownOptgroup/VvDropdownOptgroup.es.js +63 -20
  83. package/dist/components/VvDropdownOptgroup/VvDropdownOptgroup.umd.js +1 -1
  84. package/dist/components/VvDropdownOption/VvDropdownOption.es.js +188 -80
  85. package/dist/components/VvDropdownOption/VvDropdownOption.umd.js +1 -1
  86. package/dist/components/VvIcon/VvIcon.es.js +23 -96
  87. package/dist/components/VvIcon/VvIcon.umd.js +1 -1
  88. package/dist/components/VvIcon/VvIcon.vue.d.ts +23 -66
  89. package/dist/components/VvIcon/index.d.ts +33 -48
  90. package/dist/components/VvInputFile/VvInputFile.es.js +1777 -0
  91. package/dist/components/VvInputFile/VvInputFile.umd.js +1 -0
  92. package/dist/components/VvInputFile/VvInputFile.vue.d.ts +359 -0
  93. package/dist/components/VvInputFile/index.d.ts +200 -0
  94. package/dist/components/VvInputText/VvInputClearAction.d.ts +7 -5
  95. package/dist/components/VvInputText/VvInputPasswordAction.d.ts +10 -8
  96. package/dist/components/VvInputText/VvInputStepAction.d.ts +2 -2
  97. package/dist/components/VvInputText/VvInputText.es.js +1237 -324
  98. package/dist/components/VvInputText/VvInputText.umd.js +1 -1
  99. package/dist/components/VvInputText/VvInputText.vue.d.ts +207 -57
  100. package/dist/components/VvInputText/index.d.ts +99 -29
  101. package/dist/components/VvNav/VvNav.es.js +135 -56
  102. package/dist/components/VvNav/VvNav.umd.js +1 -1
  103. package/dist/components/VvNav/VvNav.vue.d.ts +32 -9
  104. package/dist/components/VvNav/VvNavItem.vue.d.ts +1 -1
  105. package/dist/components/VvNav/VvNavSeparator.vue.d.ts +1 -1
  106. package/dist/components/VvNav/index.d.ts +5 -2
  107. package/dist/components/VvNavItem/VvNavItem.es.js +91 -33
  108. package/dist/components/VvNavItem/VvNavItem.umd.js +1 -1
  109. package/dist/components/VvProgress/VvProgress.es.js +72 -26
  110. package/dist/components/VvProgress/VvProgress.umd.js +1 -1
  111. package/dist/components/VvProgress/VvProgress.vue.d.ts +10 -3
  112. package/dist/components/VvProgress/index.d.ts +4 -1
  113. package/dist/components/VvRadio/VvRadio.es.js +160 -103
  114. package/dist/components/VvRadio/VvRadio.umd.js +1 -1
  115. package/dist/components/VvRadio/VvRadio.vue.d.ts +103 -31
  116. package/dist/components/VvRadio/index.d.ts +50 -17
  117. package/dist/components/VvRadioGroup/VvRadioGroup.es.js +190 -107
  118. package/dist/components/VvRadioGroup/VvRadioGroup.umd.js +1 -1
  119. package/dist/components/VvRadioGroup/VvRadioGroup.vue.d.ts +101 -30
  120. package/dist/components/VvRadioGroup/index.d.ts +45 -12
  121. package/dist/components/VvSelect/VvSelect.es.js +251 -238
  122. package/dist/components/VvSelect/VvSelect.umd.js +1 -1
  123. package/dist/components/VvSelect/VvSelect.vue.d.ts +117 -44
  124. package/dist/components/VvSelect/index.d.ts +48 -14
  125. package/dist/components/VvTab/VvTab.es.js +191 -75
  126. package/dist/components/VvTab/VvTab.umd.js +1 -1
  127. package/dist/components/VvTab/VvTab.vue.d.ts +31 -7
  128. package/dist/components/VvTab/index.d.ts +4 -1
  129. package/dist/components/VvTextarea/VvTextarea.es.js +232 -224
  130. package/dist/components/VvTextarea/VvTextarea.umd.js +1 -1
  131. package/dist/components/VvTextarea/VvTextarea.vue.d.ts +156 -49
  132. package/dist/components/VvTextarea/index.d.ts +68 -19
  133. package/dist/components/VvTooltip/VvTooltip.es.js +79 -29
  134. package/dist/components/VvTooltip/VvTooltip.umd.js +1 -1
  135. package/dist/components/VvTooltip/VvTooltip.vue.d.ts +13 -6
  136. package/dist/components/VvTooltip/index.d.ts +5 -2
  137. package/dist/components/common/HintSlot.d.ts +1 -1
  138. package/dist/components/index.d.ts +10 -0
  139. package/dist/components/index.es.js +3534 -1650
  140. package/dist/components/index.umd.js +1 -1
  141. package/dist/composables/alert/useAlert.d.ts +99 -4
  142. package/dist/composables/alert/useInjectAlert.d.ts +1 -6
  143. package/dist/composables/dropdown/useInjectDropdown.d.ts +3 -23
  144. package/dist/composables/dropdown/useProvideDropdown.d.ts +3 -4
  145. package/dist/composables/group/useInjectedGroupState.d.ts +4 -5
  146. package/dist/composables/group/useProvideGroupState.d.ts +3 -3
  147. package/dist/composables/index.d.ts +1 -0
  148. package/dist/composables/index.es.js +92 -3
  149. package/dist/composables/index.umd.js +1 -1
  150. package/dist/composables/useBlurhash.d.ts +7 -0
  151. package/dist/composables/useComponentIcon.d.ts +9 -8
  152. package/dist/composables/usePersistence.d.ts +2 -0
  153. package/dist/composables/useVolver.d.ts +1 -1
  154. package/dist/constants.d.ts +34 -32
  155. package/dist/directives/index.d.ts +3 -5
  156. package/dist/directives/index.es.js +99 -43
  157. package/dist/directives/index.umd.js +1 -1
  158. package/dist/directives/v-tooltip.es.js +97 -38
  159. package/dist/directives/v-tooltip.umd.js +1 -1
  160. package/dist/icons.es.js +267 -267
  161. package/dist/icons.umd.js +1 -1
  162. package/dist/index.d.ts +3 -1
  163. package/dist/index.es.js +90 -16
  164. package/dist/index.umd.js +1 -1
  165. package/dist/props/index.d.ts +272 -81
  166. package/dist/resolvers/unplugin.d.ts +6 -1
  167. package/dist/resolvers/unplugin.es.js +87 -10
  168. package/dist/resolvers/unplugin.umd.js +1 -1
  169. package/dist/stories/AccordionGroup/AccordionGroup.stories.d.ts +143 -89
  170. package/dist/stories/AccordionGroup/AccordionGroupSlots.stories.d.ts +1075 -492
  171. package/dist/stories/AlertGroup/AlertGroupWithComposable.stories.d.ts +1 -1
  172. package/dist/stories/Blurhash/BlurhashComposable.stories.d.ts +4 -0
  173. package/dist/stories/Button/Button.settings.d.ts +0 -1
  174. package/dist/stories/Combobox/Combobox.settings.d.ts +8 -0
  175. package/dist/stories/Icon/Icon.settings.d.ts +1 -0
  176. package/dist/stories/InputFile/InputFile.settings.d.ts +56 -0
  177. package/dist/stories/InputFile/InputFile.stories.d.ts +12 -0
  178. package/dist/stories/InputFile/InputFileDropArea.stories.d.ts +9 -0
  179. package/dist/stories/InputFile/InputFileIconPosition.stories.d.ts +8 -0
  180. package/dist/stories/InputFile/InputFileSlots.stories.d.ts +7 -0
  181. package/dist/stories/Tab/Tab.settings.d.ts +2 -15
  182. package/dist/test/expect.d.ts +1 -1
  183. package/dist/types/alert.d.ts +9 -7
  184. package/dist/types/blurhash.d.ts +12 -0
  185. package/dist/types/generic.d.ts +1 -2
  186. package/dist/types/group.d.ts +37 -15
  187. package/dist/types/index.d.ts +7 -0
  188. package/dist/types/input-file.d.ts +16 -0
  189. package/dist/types/nav.d.ts +2 -2
  190. package/dist/utils/ObjectUtilities.d.ts +0 -1
  191. package/dist/workers/blurhash.d.ts +1 -0
  192. package/package.json +78 -78
  193. package/src/Volver.ts +31 -20
  194. package/src/assets/icons/detailed.json +1 -1
  195. package/src/assets/icons/normal.json +1 -1
  196. package/src/assets/icons/simple.json +1 -1
  197. package/src/components/VvAccordion/VvAccordion.vue +121 -58
  198. package/src/components/VvAccordion/index.ts +8 -23
  199. package/src/components/VvAccordionGroup/VvAccordionGroup.vue +164 -47
  200. package/src/components/VvAccordionGroup/index.ts +6 -6
  201. package/src/components/VvAction/VvAction.vue +17 -5
  202. package/src/components/VvAlert/index.ts +14 -9
  203. package/src/components/VvAlertGroup/index.ts +3 -15
  204. package/src/components/VvBreadcrumb/VvBreadcrumb.vue +20 -19
  205. package/src/components/VvBreadcrumb/index.ts +2 -8
  206. package/src/components/VvButton/VvButton.vue +17 -7
  207. package/src/components/VvButton/index.ts +9 -16
  208. package/src/components/VvButtonGroup/VvButtonGroup.vue +1 -2
  209. package/src/components/VvCheckbox/index.ts +2 -2
  210. package/src/components/VvCheckboxGroup/VvCheckboxGroup.vue +1 -2
  211. package/src/components/VvCombobox/VvCombobox.vue +15 -12
  212. package/src/components/VvCombobox/index.ts +4 -0
  213. package/src/components/VvDropdown/VvDropdown.vue +11 -2
  214. package/src/components/VvDropdown/VvDropdownItem.vue +4 -1
  215. package/src/components/VvDropdown/VvDropdownOption.vue +4 -21
  216. package/src/components/VvDropdown/index.ts +35 -1
  217. package/src/components/VvIcon/VvIcon.vue +2 -2
  218. package/src/components/VvIcon/index.ts +35 -48
  219. package/src/components/VvInputFile/VvInputFile.vue +395 -0
  220. package/src/components/VvInputFile/index.ts +135 -0
  221. package/src/components/VvInputText/VvInputClearAction.ts +10 -6
  222. package/src/components/VvInputText/VvInputPasswordAction.ts +13 -9
  223. package/src/components/VvInputText/VvInputText.vue +141 -33
  224. package/src/components/VvInputText/index.ts +31 -16
  225. package/src/components/VvNav/VvNav.vue +4 -2
  226. package/src/components/VvRadio/index.ts +5 -5
  227. package/src/components/VvRadioGroup/VvRadioGroup.vue +1 -2
  228. package/src/components/VvSelect/VvSelect.vue +5 -8
  229. package/src/components/VvTab/VvTab.vue +5 -1
  230. package/src/components/VvTextarea/VvTextarea.vue +6 -9
  231. package/src/components/index.ts +10 -0
  232. package/src/composables/alert/useAlert.ts +12 -9
  233. package/src/composables/dropdown/useProvideDropdown.ts +4 -4
  234. package/src/composables/group/useInjectedGroupState.ts +20 -16
  235. package/src/composables/group/useProvideGroupState.ts +10 -15
  236. package/src/composables/index.ts +1 -0
  237. package/src/composables/useBlurhash.ts +76 -0
  238. package/src/composables/useComponentIcon.ts +15 -14
  239. package/src/composables/usePersistence.ts +76 -0
  240. package/src/composables/useUniqueId.ts +2 -2
  241. package/src/constants.ts +47 -32
  242. package/src/directives/index.ts +3 -6
  243. package/src/directives/v-tooltip.ts +19 -10
  244. package/src/index.ts +3 -1
  245. package/src/props/index.ts +108 -31
  246. package/src/resolvers/unplugin.ts +24 -14
  247. package/src/stories/Accordion/Accordion.test.ts +1 -1
  248. package/src/stories/AccordionGroup/AccordionGroup.settings.ts +2 -2
  249. package/src/stories/AccordionGroup/AccordionGroup.test.ts +17 -11
  250. package/src/stories/AccordionGroup/AccordionGroupSlots.stories.ts +1 -1
  251. package/src/stories/Alert/Alert.test.ts +1 -1
  252. package/src/stories/AlertGroup/AlertGroup.test.ts +1 -1
  253. package/src/stories/AlertGroup/AlertGroupWithComposable.stories.ts +2 -2
  254. package/src/stories/Avatar/Avatar.test.ts +1 -1
  255. package/src/stories/AvatarGroup/AvatarGroup.test.ts +1 -1
  256. package/src/stories/Badge/Badge.test.ts +1 -1
  257. package/src/stories/Blurhash/BlurhashComposable.stories.ts +195 -0
  258. package/src/stories/Button/Button.settings.ts +1 -4
  259. package/src/stories/Button/Button.test.ts +1 -1
  260. package/src/stories/ButtonGroup/ButtonGroup.test.ts +1 -1
  261. package/src/stories/Card/Card.test.ts +1 -1
  262. package/src/stories/Checkbox/Checkbox.test.ts +1 -1
  263. package/src/stories/CheckboxGroup/CheckboxGroup.test.ts +1 -1
  264. package/src/stories/Combobox/Combobox.settings.ts +8 -0
  265. package/src/stories/Combobox/Combobox.test.ts +1 -1
  266. package/src/stories/Dialog/Dialog.test.ts +2 -2
  267. package/src/stories/Dropdown/Dropdown.test.ts +1 -1
  268. package/src/stories/Icon/Icon.settings.ts +3 -3
  269. package/src/stories/InputFile/InputFile.settings.ts +36 -0
  270. package/src/stories/InputFile/InputFile.stories.ts +89 -0
  271. package/src/stories/InputFile/InputFileDropArea.stories.ts +56 -0
  272. package/src/stories/InputFile/InputFileIconPosition.stories.ts +43 -0
  273. package/src/stories/InputFile/InputFileSlots.stories.ts +33 -0
  274. package/src/stories/InputText/InputText.test.ts +1 -1
  275. package/src/stories/Nav/Nav.test.ts +1 -1
  276. package/src/stories/Progress/Progress.test.ts +1 -1
  277. package/src/stories/Radio/Radio.test.ts +1 -1
  278. package/src/stories/RadioGroup/RadioGroup.test.ts +1 -1
  279. package/src/stories/Select/Select.test.ts +1 -1
  280. package/src/stories/Tab/Tab.settings.ts +2 -2
  281. package/src/stories/Tab/Tab.test.ts +1 -1
  282. package/src/stories/Textarea/Textarea.test.ts +1 -1
  283. package/src/stories/Tooltip/Tooltip.test.ts +1 -1
  284. package/src/stories/argTypes.ts +1 -1
  285. package/src/test/expect.ts +2 -4
  286. package/src/types/alert.ts +11 -7
  287. package/src/types/blurhash.ts +21 -0
  288. package/src/types/generic.ts +3 -3
  289. package/src/types/group.ts +22 -14
  290. package/src/types/index.ts +7 -0
  291. package/src/types/input-file.ts +18 -0
  292. package/src/types/nav.ts +2 -3
  293. package/src/utils/ObjectUtilities.ts +0 -11
  294. package/src/workers/blurhash.ts +9 -0
@@ -0,0 +1,195 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import { ref } from 'vue'
3
+ import VvInputFile from '@/components/VvInputFile/VvInputFile.vue'
4
+ import { useBlurhash } from '@/composables/useBlurhash'
5
+
6
+ const meta: Meta = {
7
+ title: 'Composables/useBlurhash',
8
+ tags: ['autodocs'],
9
+ }
10
+
11
+ export default meta
12
+
13
+ export const Default: StoryObj = {
14
+ render: (args) => ({
15
+ components: { VvInputFile },
16
+ setup() {
17
+ const isLoading = ref(false)
18
+ const { encode, decode, loadImage } = useBlurhash()
19
+ const file = ref({})
20
+ const canvas = ref()
21
+ const isImgLoaded = ref(false)
22
+ const blurhash = ref('')
23
+ const imageUrl = ref('')
24
+ const image = ref()
25
+
26
+ return {
27
+ args,
28
+ isLoading,
29
+ canvas,
30
+ encode,
31
+ decode,
32
+ file,
33
+ blurhash,
34
+ isImgLoaded,
35
+ loadImage,
36
+ image,
37
+ imageUrl,
38
+ }
39
+ },
40
+ watch: {
41
+ file: {
42
+ immediate: true,
43
+ async handler(newValue) {
44
+ if (newValue?.size) {
45
+ this.imageUrl = URL.createObjectURL(newValue)
46
+ this.image = await this.loadImage(this.imageUrl)
47
+ this.blurhash = await this.encode(newValue)
48
+ } else {
49
+ this.image = null
50
+ this.imageUrl = ''
51
+ this.blurhash = ''
52
+ }
53
+ },
54
+ },
55
+ blurhash: {
56
+ async handler(newValue) {
57
+ if (this.image) {
58
+ const blurhashDecoded = await this.decode(
59
+ newValue,
60
+ this.image.width,
61
+ this.image.height,
62
+ )
63
+
64
+ if (this.canvas) {
65
+ this.canvas.width = this.image.width
66
+ this.canvas.height = this.image.height
67
+ const ctx = this.canvas.getContext('2d')
68
+ const imageData = ctx.createImageData(
69
+ this.canvas.width,
70
+ this.canvas.height,
71
+ )
72
+ imageData.data.set(blurhashDecoded)
73
+ ctx.putImageData(imageData, 0, 0)
74
+ }
75
+ }
76
+ },
77
+ },
78
+ },
79
+ template: /* html */ `
80
+ <div class="w-full grid gap-md grid-cols-3 h-150" :class="{ 'vv-skeleton': isLoading }">
81
+ <div class="w-150 h-150 col-span-1">
82
+ <div class="text-20 font-semibold mb-md">Upload image</div>
83
+ <vv-input-file v-model="file" name="input-file" modifiers="drop-area square hidden" accept=".gif,.jpg,.jpeg,.png,image/gif,image/jpeg,image/png" />
84
+ </div>
85
+ <div v-show="blurhash" class="h-150 col-span-2">
86
+ <picture class="flex gap-md justify-center">
87
+ <div>
88
+ <div class="text-20 font-semibold mb-md">Blurhash</div>
89
+ <canvas
90
+ ref="canvas"
91
+ class="w-150 h-150 block object-cover" />
92
+ </div>
93
+ <div>
94
+ <div class="text-20 font-semibold mb-md">Image</div>
95
+ <img
96
+ v-if="image"
97
+ class="w-150 h-150 block object-cover"
98
+ :class="{ 'vv-skeleton__item': isLoading }"
99
+ :src="imageUrl"
100
+ alt="image"
101
+ :width="image.width"
102
+ :height="image.height" />
103
+ </div>
104
+ </picture>
105
+ </div>
106
+ </div>
107
+ `,
108
+ }),
109
+
110
+ parameters: {
111
+ docs: {
112
+ source: {
113
+ type: 'code',
114
+ language: 'html',
115
+ code: /* html */ `
116
+ <div class="w-full grid gap-md grid-cols-3 h-150" :class="{ 'vv-skeleton': isLoading }">
117
+ <div class="w-150 h-150 col-span-1">
118
+ <div class="text-20 font-semibold mb-md">Upload image</div>
119
+ <vv-input-file v-model="file" name="input-file" modifiers="drop-area square hidden" accept=".gif,.jpg,.jpeg,.png,image/gif,image/jpeg,image/png" />
120
+ </div>
121
+ <div v-show="blurhash" class="h-150 col-span-2">
122
+ <picture class="flex gap-md justify-center">
123
+ <div>
124
+ <div class="text-20 font-semibold mb-md">Blurhash</div>
125
+ <canvas
126
+ ref="canvas"
127
+ class="w-150 h-150 block object-cover" />
128
+ </div>
129
+ <div>
130
+ <div class="text-20 font-semibold mb-md">Image</div>
131
+ <img
132
+ v-if="image"
133
+ class="w-150 h-150 block object-cover"
134
+ :class="{ 'vv-skeleton__item': isLoading }"
135
+ :src="imageUrl"
136
+ alt="image"
137
+ :width="image.width"
138
+ :height="image.height" />
139
+ </div>
140
+ </picture>
141
+ </div>
142
+ </div>
143
+
144
+ <script setup lang='ts'>
145
+ import { useBlurhash } from '@volverjs/ui-vue/composables'
146
+
147
+ const { encode, decode, loadImage } = useBlurhash()
148
+
149
+ const isLoading = ref(false)
150
+ const file = ref({})
151
+ const canvas = ref()
152
+ const isImgLoaded = ref(false)
153
+ const blurhash = ref('')
154
+ const imageUrl = ref('')
155
+ const image = ref()
156
+
157
+ watch(file, async (newValue) => {
158
+ if (newValue?.size) {
159
+ this.imageUrl = URL.createObjectURL(newValue)
160
+ this.image = await this.loadImage(this.imageUrl)
161
+ this.blurhash = await this.encode(newValue)
162
+ } else {
163
+ this.image = null
164
+ this.imageUrl = ''
165
+ this.blurhash = ''
166
+ }
167
+ }, { immediate: true })
168
+
169
+ watch(blurhash, async (newValue) => {
170
+ if (this.image) {
171
+ const blurhashDecoded = await this.decode(
172
+ newValue,
173
+ this.image.width,
174
+ this.image.height,
175
+ )
176
+
177
+ if (this.canvas) {
178
+ this.canvas.width = this.image.width
179
+ this.canvas.height = this.image.height
180
+ const ctx = this.canvas.getContext('2d')
181
+ const imageData = ctx.createImageData(
182
+ this.canvas.width,
183
+ this.canvas.height,
184
+ )
185
+ imageData.data.set(blurhashDecoded)
186
+ ctx.putImageData(imageData, 0, 0)
187
+ }
188
+ }
189
+ })
190
+ </script>
191
+ `,
192
+ },
193
+ },
194
+ },
195
+ }
@@ -121,11 +121,8 @@ export const argTypes = {
121
121
  control: { type: 'text' },
122
122
  },
123
123
  target: {
124
- options: ['', '_blank', '_self', '_parent', '_top'],
125
124
  description: 'The target attribute',
126
- control: {
127
- type: 'select',
128
- },
125
+ control: { type: 'text' },
129
126
  },
130
127
  to: {
131
128
  description: 'The router link / nuxt link settings',
@@ -1,5 +1,5 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
- import { within } from '@storybook/testing-library'
2
+ import { within } from '@storybook/test'
3
3
  import { expect } from '@/test/expect'
4
4
 
5
5
  export async function defaultTest(
@@ -1,6 +1,6 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
- import { within } from '@storybook/testing-library'
3
+ import { within } from '@storybook/test'
4
4
 
5
5
  export async function defaultTest(
6
6
  { canvasElement, args }: PlayAttributes = {} as PlayAttributes,
@@ -1,6 +1,6 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
- import { within } from '@storybook/testing-library'
3
+ import { within } from '@storybook/test'
4
4
 
5
5
  export async function defaulTest({ canvasElement, args }: PlayAttributes) {
6
6
  const element = (await within(canvasElement).findByTestId(
@@ -1,7 +1,7 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
3
  import { sleep } from '@/test/sleep'
4
- import { within } from '@storybook/testing-library'
4
+ import { within } from '@storybook/test'
5
5
 
6
6
  export async function defaultTest({ canvasElement, args }: PlayAttributes) {
7
7
  const element = (await within(canvasElement).findByTestId(
@@ -1,7 +1,7 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
3
  import { sleep } from '@/test/sleep'
4
- import { within } from '@storybook/testing-library'
4
+ import { within } from '@storybook/test'
5
5
  import { getOptionValue } from '@/test/options'
6
6
 
7
7
  export async function defaultTest({ canvasElement, args }: PlayAttributes) {
@@ -392,4 +392,12 @@ export const argTypes = {
392
392
  },
393
393
  },
394
394
  },
395
+ 'update:search': {
396
+ table: {
397
+ category: 'Events',
398
+ type: {
399
+ summary: 'string',
400
+ },
401
+ },
402
+ },
395
403
  }
@@ -1,6 +1,6 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
- import { within } from '@storybook/testing-library'
3
+ import { within } from '@storybook/test'
4
4
  import { sleep } from '@/test/sleep'
5
5
  import { defaultTest as selectDefaultTest } from '@/stories/Select/Select.test'
6
6
 
@@ -1,7 +1,7 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
- import { userEvent } from '@storybook/testing-library'
4
- import { within } from '@storybook/testing-library'
3
+ import { userEvent } from '@storybook/test'
4
+ import { within } from '@storybook/test'
5
5
  import { sleep } from '@/test/sleep'
6
6
 
7
7
  export async function defaultTest(
@@ -1,7 +1,7 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
3
  import { sleep } from '@/test/sleep'
4
- import { within } from '@storybook/testing-library'
4
+ import { within } from '@storybook/test'
5
5
 
6
6
  export async function defaultTest({ canvasElement }: PlayAttributes) {
7
7
  const wrapper = (await within(canvasElement).findByTestId(
@@ -1,11 +1,11 @@
1
- import { VvIconProps } from '@/components/VvIcon'
1
+ import { VvIconPropsDefaults } from '@/components/VvIcon'
2
2
  import normal from '@/assets/icons/normal.json'
3
3
  import { ModifiersArgTypes } from '@/stories/argTypes'
4
4
 
5
5
  export const defaultArgs = {
6
- ...propsToObject(VvIconProps),
6
+ ...VvIconPropsDefaults,
7
7
  name: 'add-circle',
8
- width: 48
8
+ width: 48,
9
9
  }
10
10
 
11
11
  export const argTypes = {
@@ -0,0 +1,36 @@
1
+ import { HintArgTypes, ModifiersArgTypes } from '@/stories/argTypes'
2
+ import { VvInputFileProps } from '@/components/VvInputFile'
3
+
4
+ export const defaultArgs = {
5
+ ...propsToObject(VvInputFileProps),
6
+ name: 'vv-input-file',
7
+ label: 'Upload file',
8
+ }
9
+
10
+ export const argTypes = {
11
+ ...HintArgTypes,
12
+ modifiers: {
13
+ ...ModifiersArgTypes.modifiers,
14
+ options: ['hidden', 'square', 'circle'],
15
+ },
16
+ 'drop-area': {
17
+ description: 'Drop area slot',
18
+ control: {
19
+ type: 'text',
20
+ },
21
+ table: {
22
+ category: 'Slots',
23
+ type: {
24
+ summary: 'html',
25
+ },
26
+ },
27
+ },
28
+ 'update:model-value': {
29
+ table: {
30
+ category: 'Events',
31
+ type: {
32
+ summary: 'File | File[]',
33
+ },
34
+ },
35
+ },
36
+ }
@@ -0,0 +1,89 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import VvInputFile from '@/components/VvInputFile/VvInputFile.vue'
3
+ import { defaultArgs, argTypes } from './InputFile.settings'
4
+
5
+ const meta: Meta = {
6
+ title: 'Components/InputFile',
7
+ component: VvInputFile,
8
+ args: defaultArgs,
9
+ argTypes,
10
+ tags: ['autodocs'],
11
+ }
12
+
13
+ export default meta
14
+
15
+ type Story = StoryObj<typeof VvInputFile>
16
+
17
+ export const Default: Story = {
18
+ args: {
19
+ ...defaultArgs,
20
+ },
21
+ render: (args) => ({
22
+ components: { VvInputFile },
23
+ setup() {
24
+ const files = ref([])
25
+ return {
26
+ args,
27
+ files,
28
+ }
29
+ },
30
+ template: /* html */ `
31
+ <vv-input-file v-bind="args" v-model="files">
32
+ <template #drop-area v-if="args['drop-area']"><div v-html="args['drop-area']"></div></template>
33
+ <template #hint v-if="args['hint']"><div v-html="args['hint']"></div></template>
34
+ </vv-input-file>
35
+ `,
36
+ }),
37
+ }
38
+
39
+ export const Readonly: Story = {
40
+ ...Default,
41
+ args: {
42
+ ...defaultArgs,
43
+ readonly: true,
44
+ },
45
+ }
46
+
47
+ export const Valid: Story = {
48
+ ...Default,
49
+ args: {
50
+ ...defaultArgs,
51
+ valid: true,
52
+ validLabel: 'The field is valid.',
53
+ },
54
+ }
55
+
56
+ export const Invalid: Story = {
57
+ ...Default,
58
+ args: {
59
+ ...defaultArgs,
60
+ invalid: true,
61
+ invalidLabel: 'The field is required.',
62
+ },
63
+ }
64
+
65
+ export const Hint: Story = {
66
+ ...Default,
67
+ args: {
68
+ ...defaultArgs,
69
+ hintLabel: 'Please upload a file.',
70
+ },
71
+ }
72
+
73
+ export const Loading: Story = {
74
+ ...Default,
75
+ args: {
76
+ ...defaultArgs,
77
+ loading: true,
78
+ loadingLabel: 'Loading...',
79
+ },
80
+ }
81
+
82
+ export const Progress: Story = {
83
+ ...Default,
84
+ args: {
85
+ ...defaultArgs,
86
+ progress: 30,
87
+ hintLabel: '30%',
88
+ },
89
+ }
@@ -0,0 +1,56 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import VvInputFile from '@/components/VvInputFile/VvInputFile.vue'
3
+ import { Default as DefaultStory } from './InputFile.stories'
4
+ import { argTypes, defaultArgs } from './InputFile.settings'
5
+
6
+ const meta: Meta<typeof VvInputFile> = {
7
+ title: 'Components/InputFile/DropArea',
8
+ component: VvInputFile,
9
+ args: defaultArgs,
10
+ argTypes,
11
+ }
12
+
13
+ export default meta
14
+
15
+ type Story = StoryObj<typeof VvInputFile>
16
+
17
+ export const Default: Story = {
18
+ ...DefaultStory,
19
+ args: {
20
+ ...DefaultStory.args,
21
+ label: 'Drop area',
22
+ dropArea: true,
23
+ },
24
+ }
25
+
26
+ export const InputHidden: Story = {
27
+ ...Default,
28
+ args: {
29
+ ...Default.args,
30
+ label: 'Drop area hidden input',
31
+ dropArea: true,
32
+ modifiers: 'hidden',
33
+ },
34
+ }
35
+
36
+ export const Square: Story = {
37
+ ...Default,
38
+ args: {
39
+ ...Default.args,
40
+ class: 'max-w-192',
41
+ label: 'Drop area square',
42
+ dropArea: true,
43
+ modifiers: 'square hidden',
44
+ },
45
+ }
46
+
47
+ export const Circle: Story = {
48
+ ...Default,
49
+ args: {
50
+ ...Default.args,
51
+ class: 'max-w-192',
52
+ label: 'Drop area circle',
53
+ dropArea: true,
54
+ modifiers: 'circle hidden',
55
+ },
56
+ }
@@ -0,0 +1,43 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import VvInputFile from '@/components/VvInputFile/VvInputFile.vue'
3
+ import { Default } from './InputFile.stories'
4
+ import { defaultArgs, argTypes } from './InputFile.settings'
5
+
6
+ const meta: Meta<typeof VvInputFile> = {
7
+ title: 'Components/InputFile/Icon',
8
+ component: VvInputFile,
9
+ args: defaultArgs,
10
+ argTypes,
11
+ }
12
+
13
+ export default meta
14
+
15
+ type Story = StoryObj<typeof VvInputFile>
16
+
17
+ export const DefaultPosition: Story = {
18
+ ...Default,
19
+ args: {
20
+ ...Default.args,
21
+ icon: 'heart',
22
+ },
23
+ }
24
+
25
+ export const After: Story = {
26
+ ...Default,
27
+ args: {
28
+ ...Default.args,
29
+ icon: 'heart',
30
+ iconPosition: 'after',
31
+ },
32
+ }
33
+
34
+ export const Src: Story = {
35
+ ...Default,
36
+ args: {
37
+ ...Default.args,
38
+ icon: {
39
+ name: 'engineering',
40
+ src: 'https://raw.githubusercontent.com/google/material-design-icons/master/src/social/engineering/materialicons/24px.svg',
41
+ },
42
+ },
43
+ }
@@ -0,0 +1,33 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import VvInputFile from '@/components/VvInputFile/VvInputFile.vue'
3
+ import { Default as DefaultStory } from './InputFile.stories'
4
+ import { argTypes, defaultArgs } from './InputFile.settings'
5
+
6
+ const meta: Meta<typeof VvInputFile> = {
7
+ title: 'Components/InputFile/Slots',
8
+ component: VvInputFile,
9
+ args: defaultArgs,
10
+ argTypes,
11
+ }
12
+
13
+ export default meta
14
+
15
+ type Story = StoryObj<typeof VvInputFile>
16
+
17
+ export const DropArea: Story = {
18
+ ...DefaultStory,
19
+ args: {
20
+ ...DefaultStory.args,
21
+ class: 'max-w-320',
22
+ 'drop-area': 'Drag one or more files to this drop zone.',
23
+ dropArea: true,
24
+ },
25
+ }
26
+
27
+ export const Hint: Story = {
28
+ ...DefaultStory,
29
+ args: {
30
+ ...DefaultStory.args,
31
+ hint: 'Hint <em class="italic">slot!</em>',
32
+ },
33
+ }
@@ -1,7 +1,7 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
3
  import { sleep } from '@/test/sleep'
4
- import { within, userEvent } from '@storybook/testing-library'
4
+ import { within, userEvent } from '@storybook/test'
5
5
  import { INPUT_TYPES, type InputType } from '@/components/VvInputText'
6
6
 
7
7
  const valueByType = (type: InputType, mask?: string, id?: string) => {
@@ -1,6 +1,6 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
- import { within } from '@storybook/testing-library'
3
+ import { within } from '@storybook/test'
4
4
 
5
5
  export async function defaultTest({ canvasElement, args }: PlayAttributes) {
6
6
  const element = (await within(canvasElement).findByTestId(
@@ -1,6 +1,6 @@
1
1
  import { expect } from '@/test/expect'
2
2
  import type { PlayAttributes } from '@/test/types'
3
- import { within } from '@storybook/testing-library'
3
+ import { within } from '@storybook/test'
4
4
 
5
5
  export async function defaultTest({ canvasElement }: PlayAttributes) {
6
6
  const progress = await within(canvasElement).findByRole('progressbar')
@@ -1,7 +1,7 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
3
  import { sleep } from '@/test/sleep'
4
- import { within } from '@storybook/testing-library'
4
+ import { within } from '@storybook/test'
5
5
 
6
6
  export async function defaultTest({ canvasElement, args }: PlayAttributes) {
7
7
  const element = (await within(canvasElement).findByTestId(
@@ -1,7 +1,7 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
3
  import { sleep } from '@/test/sleep'
4
- import { within } from '@storybook/testing-library'
4
+ import { within } from '@storybook/test'
5
5
  import { getOptionValue } from '@/test/options'
6
6
 
7
7
  export async function defaultTest({ canvasElement, args }: PlayAttributes) {
@@ -1,5 +1,5 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
- import { within } from '@storybook/testing-library'
2
+ import { within } from '@storybook/test'
3
3
  import { expect } from '@/test/expect'
4
4
  import { sleep } from '@/test/sleep'
5
5
 
@@ -1,4 +1,4 @@
1
- import type { Meta } from '@storybook/vue3'
1
+ import type { ArgTypes, Meta } from '@storybook/vue3'
2
2
  import type { VvTab } from '@/components'
3
3
  import { VvTabProps } from '@/components/VvTab'
4
4
 
@@ -25,7 +25,7 @@ export const defaultArgs: Meta<typeof VvTab>['args'] = {
25
25
  ],
26
26
  }
27
27
 
28
- export const defaultArgTypes = {
28
+ export const defaultArgTypes: ArgTypes = {
29
29
  tabId: {
30
30
  description: 'Slot by tab-id',
31
31
  control: {
@@ -1,6 +1,6 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
- import { within } from '@storybook/testing-library'
3
+ import { within } from '@storybook/test'
4
4
 
5
5
  export async function defaultTest({ canvasElement, args }: PlayAttributes) {
6
6
  const element = (await within(canvasElement).findByTestId(
@@ -1,7 +1,7 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
3
  import { sleep } from '@/test/sleep'
4
- import { within, userEvent } from '@storybook/testing-library'
4
+ import { within, userEvent } from '@storybook/test'
5
5
 
6
6
  export async function defaultTest({ canvasElement, args }: PlayAttributes) {
7
7
  const element = (await within(canvasElement).findByTestId(
@@ -1,7 +1,7 @@
1
1
  import type { PlayAttributes } from '@/test/types'
2
2
  import { expect } from '@/test/expect'
3
3
  import { sleep } from '@/test/sleep'
4
- import { within } from '@storybook/testing-library'
4
+ import { within } from '@storybook/test'
5
5
 
6
6
  export async function defaultTest({ canvasElement, args }: PlayAttributes) {
7
7
  const parentElement = (await within(canvasElement).findByTestId(