@volverjs/ui-vue 0.0.10-beta.2 → 0.0.10-beta.20

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 (251) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +98 -3
  3. package/auto-imports.d.ts +6 -2
  4. package/bin/icons.cjs +1 -1
  5. package/bin/icons.js +23 -16
  6. package/dist/Volver.d.ts +1 -1
  7. package/dist/components/VvAccordion/VvAccordion.es.js +67 -13
  8. package/dist/components/VvAccordion/VvAccordion.umd.js +1 -1
  9. package/dist/components/VvAccordion/VvAccordion.vue.d.ts +13 -6
  10. package/dist/components/VvAccordion/index.d.ts +4 -1
  11. package/dist/components/VvAccordionGroup/VvAccordionGroup.es.js +111 -37
  12. package/dist/components/VvAccordionGroup/VvAccordionGroup.umd.js +1 -1
  13. package/dist/components/VvAccordionGroup/VvAccordionGroup.vue.d.ts +15 -8
  14. package/dist/components/VvAccordionGroup/index.d.ts +4 -1
  15. package/dist/components/VvAction/VvAction.es.js +56 -12
  16. package/dist/components/VvAction/VvAction.umd.js +1 -1
  17. package/dist/components/VvAction/VvAction.vue.d.ts +59 -12
  18. package/dist/components/VvAction/index.d.ts +25 -4
  19. package/dist/components/VvAlert/VvAlert.es.js +188 -152
  20. package/dist/components/VvAlert/VvAlert.umd.js +1 -1
  21. package/dist/components/VvAlert/VvAlert.vue.d.ts +18 -8
  22. package/dist/components/VvAlert/index.d.ts +9 -5
  23. package/dist/components/VvAlertGroup/VvAlertGroup.es.js +230 -174
  24. package/dist/components/VvAlertGroup/VvAlertGroup.umd.js +1 -1
  25. package/dist/components/VvAlertGroup/VvAlertGroup.vue.d.ts +13 -6
  26. package/dist/components/VvAlertGroup/index.d.ts +6 -2
  27. package/dist/components/VvAvatar/VvAvatar.es.js +54 -9
  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 +111 -36
  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 +71 -16
  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 +257 -49
  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 +165 -137
  44. package/dist/components/VvButton/VvButton.umd.js +1 -1
  45. package/dist/components/VvButton/VvButton.vue.d.ts +101 -27
  46. package/dist/components/VvButton/index.d.ts +41 -14
  47. package/dist/components/VvButtonGroup/VvButtonGroup.es.js +67 -15
  48. package/dist/components/VvButtonGroup/VvButtonGroup.umd.js +1 -1
  49. package/dist/components/VvButtonGroup/VvButtonGroup.vue.d.ts +23 -10
  50. package/dist/components/VvButtonGroup/index.d.ts +8 -2
  51. package/dist/components/VvCard/VvCard.es.js +79 -24
  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 +89 -21
  56. package/dist/components/VvCheckbox/VvCheckbox.umd.js +1 -1
  57. package/dist/components/VvCheckbox/VvCheckbox.vue.d.ts +104 -32
  58. package/dist/components/VvCheckbox/index.d.ts +45 -12
  59. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js +168 -66
  60. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.umd.js +1 -1
  61. package/dist/components/VvCheckboxGroup/VvCheckboxGroup.vue.d.ts +100 -29
  62. package/dist/components/VvCheckboxGroup/index.d.ts +45 -12
  63. package/dist/components/VvCombobox/VvCombobox.es.js +721 -527
  64. package/dist/components/VvCombobox/VvCombobox.umd.js +1 -1
  65. package/dist/components/VvCombobox/VvCombobox.vue.d.ts +145 -72
  66. package/dist/components/VvCombobox/index.d.ts +53 -22
  67. package/dist/components/VvDialog/VvDialog.es.js +133 -141
  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 +121 -55
  71. package/dist/components/VvDropdown/VvDropdown.umd.js +1 -1
  72. package/dist/components/VvDropdown/VvDropdown.vue.d.ts +61 -35
  73. package/dist/components/VvDropdown/VvDropdownAction.vue.d.ts +72 -11
  74. package/dist/components/VvDropdown/VvDropdownItem.vue.d.ts +1 -1
  75. package/dist/components/VvDropdown/VvDropdownOptgroup.vue.d.ts +12 -4
  76. package/dist/components/VvDropdown/VvDropdownOption.vue.d.ts +26 -7
  77. package/dist/components/VvDropdown/index.d.ts +16 -11
  78. package/dist/components/VvDropdownAction/VvDropdownAction.es.js +80 -21
  79. package/dist/components/VvDropdownAction/VvDropdownAction.umd.js +1 -1
  80. package/dist/components/VvDropdownItem/VvDropdownItem.es.js +13 -7
  81. package/dist/components/VvDropdownOptgroup/VvDropdownOptgroup.es.js +56 -8
  82. package/dist/components/VvDropdownOptgroup/VvDropdownOptgroup.umd.js +1 -1
  83. package/dist/components/VvDropdownOption/VvDropdownOption.es.js +76 -17
  84. package/dist/components/VvDropdownOption/VvDropdownOption.umd.js +1 -1
  85. package/dist/components/VvIcon/VvIcon.es.js +23 -96
  86. package/dist/components/VvIcon/VvIcon.umd.js +1 -1
  87. package/dist/components/VvIcon/VvIcon.vue.d.ts +23 -66
  88. package/dist/components/VvIcon/index.d.ts +21 -48
  89. package/dist/components/VvInputFile/VvInputFile.es.js +1558 -0
  90. package/dist/components/VvInputFile/VvInputFile.umd.js +1 -0
  91. package/dist/components/VvInputFile/VvInputFile.vue.d.ts +190 -0
  92. package/dist/components/VvInputFile/index.d.ts +74 -0
  93. package/dist/components/VvInputText/VvInputClearAction.d.ts +2 -2
  94. package/dist/components/VvInputText/VvInputPasswordAction.d.ts +1 -1
  95. package/dist/components/VvInputText/VvInputStepAction.d.ts +1 -1
  96. package/dist/components/VvInputText/VvInputText.es.js +266 -242
  97. package/dist/components/VvInputText/VvInputText.umd.js +1 -1
  98. package/dist/components/VvInputText/VvInputText.vue.d.ts +153 -46
  99. package/dist/components/VvInputText/index.d.ts +69 -18
  100. package/dist/components/VvNav/VvNav.es.js +150 -73
  101. package/dist/components/VvNav/VvNav.umd.js +1 -1
  102. package/dist/components/VvNav/VvNav.vue.d.ts +41 -14
  103. package/dist/components/VvNav/VvNavItem.vue.d.ts +9 -0
  104. package/dist/components/VvNav/{VvNavSeparator.d.ts → VvNavSeparator.vue.d.ts} +1 -1
  105. package/dist/components/VvNav/index.d.ts +5 -13
  106. package/dist/components/VvNavItem/VvNavItem.es.js +435 -0
  107. package/dist/components/VvNavItem/VvNavItem.umd.js +1 -0
  108. package/dist/components/VvNavSeparator/VvNavSeparator.es.js +24 -0
  109. package/dist/components/VvNavSeparator/VvNavSeparator.umd.js +1 -0
  110. package/dist/components/VvProgress/VvProgress.es.js +65 -14
  111. package/dist/components/VvProgress/VvProgress.umd.js +1 -1
  112. package/dist/components/VvProgress/VvProgress.vue.d.ts +10 -3
  113. package/dist/components/VvProgress/index.d.ts +4 -1
  114. package/dist/components/VvRadio/VvRadio.es.js +89 -21
  115. package/dist/components/VvRadio/VvRadio.umd.js +1 -1
  116. package/dist/components/VvRadio/VvRadio.vue.d.ts +102 -30
  117. package/dist/components/VvRadio/index.d.ts +44 -11
  118. package/dist/components/VvRadioGroup/VvRadioGroup.es.js +168 -66
  119. package/dist/components/VvRadioGroup/VvRadioGroup.umd.js +1 -1
  120. package/dist/components/VvRadioGroup/VvRadioGroup.vue.d.ts +100 -29
  121. package/dist/components/VvRadioGroup/index.d.ts +45 -12
  122. package/dist/components/VvSelect/VvSelect.es.js +244 -226
  123. package/dist/components/VvSelect/VvSelect.umd.js +1 -1
  124. package/dist/components/VvSelect/VvSelect.vue.d.ts +112 -39
  125. package/dist/components/VvSelect/index.d.ts +48 -14
  126. package/dist/components/VvTab/VvTab.es.js +251 -110
  127. package/dist/components/VvTab/VvTab.umd.js +1 -1
  128. package/dist/components/VvTab/VvTab.vue.d.ts +50 -13
  129. package/dist/components/VvTab/index.d.ts +13 -4
  130. package/dist/components/VvTextarea/VvTextarea.es.js +225 -212
  131. package/dist/components/VvTextarea/VvTextarea.umd.js +1 -1
  132. package/dist/components/VvTextarea/VvTextarea.vue.d.ts +155 -48
  133. package/dist/components/VvTextarea/index.d.ts +68 -19
  134. package/dist/components/VvTooltip/VvTooltip.es.js +72 -17
  135. package/dist/components/VvTooltip/VvTooltip.umd.js +1 -1
  136. package/dist/components/VvTooltip/VvTooltip.vue.d.ts +10 -3
  137. package/dist/components/VvTooltip/index.d.ts +4 -1
  138. package/dist/components/index.d.ts +10 -0
  139. package/dist/components/index.es.js +2635 -1301
  140. package/dist/components/index.umd.js +1 -1
  141. package/dist/composables/alert/useAlert.d.ts +37 -4
  142. package/dist/composables/dropdown/useProvideDropdown.d.ts +1 -1
  143. package/dist/composables/index.d.ts +1 -0
  144. package/dist/composables/index.es.js +88 -1
  145. package/dist/composables/index.umd.js +1 -1
  146. package/dist/composables/useBlurhash.d.ts +7 -0
  147. package/dist/composables/useComponentIcon.d.ts +9 -8
  148. package/dist/composables/useVolver.d.ts +1 -1
  149. package/dist/directives/index.d.ts +3 -5
  150. package/dist/directives/index.es.js +92 -31
  151. package/dist/directives/index.umd.js +1 -1
  152. package/dist/directives/v-tooltip.es.js +90 -26
  153. package/dist/directives/v-tooltip.umd.js +1 -1
  154. package/dist/icons.es.js +6 -6
  155. package/dist/icons.umd.js +1 -1
  156. package/dist/index.d.ts +3 -1
  157. package/dist/index.es.js +81 -16
  158. package/dist/index.umd.js +1 -1
  159. package/dist/props/index.d.ts +287 -73
  160. package/dist/resolvers/unplugin.d.ts +6 -1
  161. package/dist/resolvers/unplugin.es.js +78 -10
  162. package/dist/resolvers/unplugin.umd.js +1 -1
  163. package/dist/stories/AccordionGroup/AccordionGroup.stories.d.ts +72 -84
  164. package/dist/stories/AccordionGroup/AccordionGroupSlots.stories.d.ts +623 -461
  165. package/dist/stories/AlertGroup/AlertGroupWithComposable.stories.d.ts +1 -1
  166. package/dist/stories/Blurhash/BlurhashComposable.stories.d.ts +4 -0
  167. package/dist/stories/Combobox/Combobox.settings.d.ts +8 -0
  168. package/dist/stories/Icon/Icon.settings.d.ts +1 -0
  169. package/dist/stories/InputFile/InputFile.settings.d.ts +56 -0
  170. package/dist/stories/InputFile/InputFile.stories.d.ts +13 -0
  171. package/dist/stories/InputFile/InputFileModifiers.stories.d.ts +9 -0
  172. package/dist/stories/InputFile/InputFileSlots.stories.d.ts +6 -0
  173. package/dist/stories/Tab/Tab.settings.d.ts +4 -37
  174. package/dist/types/alert.d.ts +13 -0
  175. package/dist/types/blurhash.d.ts +12 -0
  176. package/dist/types/floating-ui.d.ts +6 -0
  177. package/dist/types/generic.d.ts +4 -0
  178. package/dist/types/group.d.ts +37 -0
  179. package/dist/types/index.d.ts +7 -0
  180. package/dist/types/input-file.d.ts +14 -0
  181. package/dist/types/nav.d.ts +18 -0
  182. package/dist/utils/ObjectUtilities.d.ts +0 -1
  183. package/dist/workers/blurhash.d.ts +1 -0
  184. package/package.json +91 -74
  185. package/src/Volver.ts +31 -20
  186. package/src/assets/icons/detailed.json +1 -1
  187. package/src/assets/icons/normal.json +1 -1
  188. package/src/assets/icons/simple.json +1 -1
  189. package/src/components/VvAccordion/VvAccordion.vue +2 -2
  190. package/src/components/VvAction/VvAction.vue +5 -2
  191. package/src/components/VvAlert/index.ts +1 -3
  192. package/src/components/VvAlertGroup/index.ts +2 -1
  193. package/src/components/VvBreadcrumb/VvBreadcrumb.vue +20 -19
  194. package/src/components/VvBreadcrumb/index.ts +2 -8
  195. package/src/components/VvButton/VvButton.vue +6 -6
  196. package/src/components/VvButton/index.ts +2 -4
  197. package/src/components/VvCombobox/VvCombobox.vue +24 -16
  198. package/src/components/VvCombobox/index.ts +4 -0
  199. package/src/components/VvIcon/VvIcon.vue +2 -2
  200. package/src/components/VvIcon/index.ts +22 -48
  201. package/src/components/VvInputFile/VvInputFile.vue +302 -0
  202. package/src/components/VvInputFile/index.ts +38 -0
  203. package/src/components/VvInputText/VvInputText.vue +13 -14
  204. package/src/components/VvNav/VvNav.vue +30 -50
  205. package/src/components/VvNav/VvNavItem.vue +18 -0
  206. package/src/components/VvNav/VvNavSeparator.vue +11 -0
  207. package/src/components/VvNav/index.ts +2 -15
  208. package/src/components/VvSelect/VvSelect.vue +5 -8
  209. package/src/components/VvTab/VvTab.vue +63 -35
  210. package/src/components/VvTab/index.ts +10 -4
  211. package/src/components/VvTextarea/VvTextarea.vue +6 -9
  212. package/src/components/index.ts +10 -0
  213. package/src/composables/index.ts +1 -0
  214. package/src/composables/useBlurhash.ts +76 -0
  215. package/src/composables/useComponentIcon.ts +15 -14
  216. package/src/composables/useUniqueId.ts +2 -2
  217. package/src/directives/index.ts +3 -6
  218. package/src/directives/v-tooltip.ts +19 -10
  219. package/src/index.ts +3 -1
  220. package/src/props/index.ts +115 -27
  221. package/src/resolvers/unplugin.ts +24 -14
  222. package/src/stories/AlertGroup/AlertGroupWithComposable.stories.ts +2 -2
  223. package/src/stories/Blurhash/BlurhashComposable.stories.ts +195 -0
  224. package/src/stories/Combobox/Combobox.settings.ts +8 -0
  225. package/src/stories/Icon/Icon.settings.ts +3 -3
  226. package/src/stories/InputFile/InputFile.settings.ts +36 -0
  227. package/src/stories/InputFile/InputFile.stories.ts +98 -0
  228. package/src/stories/InputFile/InputFileModifiers.stories.ts +51 -0
  229. package/src/stories/InputFile/InputFileSlots.stories.ts +25 -0
  230. package/src/stories/Nav/Nav.settings.ts +3 -4
  231. package/src/stories/Nav/Nav.test.ts +4 -15
  232. package/src/stories/Tab/Tab.settings.ts +9 -9
  233. package/src/stories/Tab/Tab.stories.ts +2 -2
  234. package/src/stories/Tab/Tab.test.ts +6 -14
  235. package/src/stories/argTypes.ts +1 -1
  236. package/src/types/blurhash.ts +21 -0
  237. package/src/types/generic.ts +6 -0
  238. package/src/types/index.ts +7 -0
  239. package/src/types/input-file.ts +16 -0
  240. package/src/types/nav.ts +20 -0
  241. package/src/utils/ObjectUtilities.ts +0 -11
  242. package/src/workers/blurhash.ts +9 -0
  243. package/dist/components/VvNav/VvNavItemTitle.vue.d.ts +0 -6
  244. package/dist/components/VvNavItemTitle/VvNavItemTitle.es.js +0 -19
  245. package/dist/components/VvNavItemTitle/VvNavItemTitle.umd.js +0 -1
  246. package/src/components/VvNav/VvNavItemTitle.vue +0 -11
  247. package/src/components/VvNav/VvNavSeparator.ts +0 -8
  248. package/src/types/generic.d.ts +0 -6
  249. /package/src/types/{alert.d.ts → alert.ts} +0 -0
  250. /package/src/types/{floating-ui.d.ts → floating-ui.ts} +0 -0
  251. /package/src/types/{group.d.ts → group.ts} +0 -0
@@ -1,53 +1,81 @@
1
1
  <script setup lang="ts">
2
2
  import { VvTabProps, VvTabEvents } from '@/components/VvTab'
3
- import type { NavItem } from '@/components/VvNav'
4
3
  import VvNav from '@/components/VvNav/VvNav.vue'
4
+ import type { NavItemTab } from '@/types/nav'
5
5
 
6
6
  const props = defineProps(VvTabProps)
7
7
  const emit = defineEmits(VvTabEvents)
8
8
  const { modifiers, items } = toRefs(props)
9
- const activeTab: Ref<string | null> = ref(null)
10
-
11
- // bem css classes
12
- const bemCssClasses = useModifiers('vv-tab', modifiers)
13
-
14
- const localItems = computed(() => {
15
- return items.value.map((item, index) => {
16
- return {
17
- ...item,
18
- id: item.id || `tab-item_${index}`,
9
+ const tabKeys = computed(() => {
10
+ return items.value.reduce<string[]>((acc, item) => {
11
+ if (item.tab) {
12
+ acc.push(item.tab)
19
13
  }
20
- })
14
+ return acc
15
+ }, [])
21
16
  })
22
-
23
- /**
24
- * Triggers when the item is clicked.
25
- * @private
26
- * @event click
27
- * @param [NavItem, string] item - the clicked item
28
- */
29
- function onClick(item: NavItem) {
30
- if (!item.disabled) {
31
- emit('click', item)
32
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
33
- activeTab.value = item.id!
17
+ const localModelValue = ref<string | undefined>()
18
+ const activeTabKey = computed({
19
+ get: () => {
20
+ return (
21
+ props.modelValue || localModelValue.value || tabKeys.value?.[0]
22
+ )
23
+ },
24
+ set: (newValue) => {
25
+ localModelValue.value = newValue
26
+ emit('update:modelValue', newValue)
27
+ },
28
+ })
29
+ const hasNavModifiers = computed(() => {
30
+ return [
31
+ 'tabs',
32
+ ...(Array.isArray(props.navModifiers)
33
+ ? props.navModifiers
34
+ : props.navModifiers?.split(' ') ?? []),
35
+ ]
36
+ })
37
+ const onNavClick = (item: NavItemTab) => {
38
+ if (item.tab) {
39
+ activeTabKey.value = item.tab
34
40
  }
35
41
  }
42
+ const navItems = computed(() =>
43
+ props.items.map((item) => ({
44
+ current: item.tab === activeTabKey.value,
45
+ ...item,
46
+ })),
47
+ )
48
+
49
+ // bem css classes
50
+ const bemCssClasses = useModifiers('vv-tab', modifiers)
36
51
  </script>
37
52
 
38
53
  <template>
39
54
  <div :class="bemCssClasses">
40
- <VvNav :items="localItems" modifiers="tabs full" @click="onClick" />
41
- <!-- #region tab content -->
42
- <article
43
- v-for="item in localItems"
44
- :id="item.id"
45
- :key="item.id"
46
- :class="{ target: activeTab === item.id }"
47
- class="vv-tab__panel"
55
+ <!-- #region nav -->
56
+ <VvNav
57
+ v-bind="{
58
+ items: navItems,
59
+ modifiers: hasNavModifiers,
60
+ }"
61
+ @click="onNavClick"
48
62
  >
49
- <slot :name="`${item.id}`" />
50
- </article>
51
- <!-- #endregion tab content -->
63
+ <template #item="{ item, data, index }">
64
+ <slot name="nav-item" v-bind="{ item, data, index }" />
65
+ </template>
66
+ </VvNav>
67
+ <!-- #endregion -->
68
+
69
+ <!-- #region panels -->
70
+ <template v-for="(item, index) in items" :key="index">
71
+ <article
72
+ v-if="item.tab"
73
+ :class="{ target: activeTabKey === item.tab }"
74
+ class="vv-tab__panel"
75
+ >
76
+ <slot :name="`panel::${item.tab}`" />
77
+ </article>
78
+ </template>
79
+ <!-- #endregion -->
52
80
  </div>
53
81
  </template>
@@ -1,13 +1,19 @@
1
1
  import { ModifiersProps } from '@/props'
2
- import type { NavItem } from '../VvNav'
2
+ import type { NavItemTab } from '@/types/nav'
3
3
 
4
4
  export const VvTabProps = {
5
5
  ...ModifiersProps,
6
+ navModifiers: {
7
+ type: [String, Array] as PropType<string | string[]>,
8
+ },
9
+ modelValue: {
10
+ type: String,
11
+ default: '',
12
+ },
6
13
  items: {
7
- type: Array as PropType<NavItem[]>,
8
- required: true,
14
+ type: Array as PropType<NavItemTab[]>,
9
15
  default: () => [],
10
16
  },
11
17
  }
12
18
 
13
- export const VvTabEvents = ['click']
19
+ export const VvTabEvents = ['update:modelValue']
@@ -52,10 +52,7 @@
52
52
  const localModelValue = useDebouncedInput(modelValue, emit, debounce?.value)
53
53
 
54
54
  // icons
55
- const { hasIcon, hasIconBefore, hasIconAfter } = useComponentIcon(
56
- icon,
57
- iconPosition,
58
- )
55
+ const { hasIconBefore, hasIconAfter } = useComponentIcon(icon, iconPosition)
59
56
 
60
57
  // focus
61
58
  const { focused } = useComponentFocus(textarea, emit)
@@ -113,11 +110,11 @@
113
110
  loading: loading.value,
114
111
  disabled: props.disabled,
115
112
  readonly: props.readonly,
116
- 'icon-before': hasIconBefore.value,
117
- 'icon-after': hasIconAfter.value,
113
+ 'icon-before': hasIconBefore.value !== undefined,
114
+ 'icon-after': hasIconAfter.value !== undefined,
118
115
  floating: props.floating && !isEmpty(props.label),
119
116
  dirty: isDirty.value,
120
- focused: focused.value,
117
+ focus: focused.value,
121
118
  resizable: props.resizable,
122
119
  })),
123
120
  )
@@ -180,8 +177,8 @@
180
177
  <div class="vv-textarea__inner">
181
178
  <VvIcon
182
179
  v-if="hasIconBefore"
180
+ v-bind="hasIconBefore"
183
181
  class="vv-textarea__icon"
184
- v-bind="hasIcon"
185
182
  />
186
183
  <textarea
187
184
  :id="hasId"
@@ -192,8 +189,8 @@
192
189
  />
193
190
  <VvIcon
194
191
  v-if="hasIconAfter"
192
+ v-bind="hasIconAfter"
195
193
  class="vv-textarea__icon vv-textarea__icon-after"
196
- v-bind="hasIcon"
197
194
  />
198
195
  </div>
199
196
  <div v-if="$slots.after" class="vv-textarea__input-after">
@@ -2,6 +2,9 @@ export { default as VvAccordion } from './VvAccordion/VvAccordion.vue'
2
2
  export { default as VvAccordionGroup } from './VvAccordionGroup/VvAccordionGroup.vue'
3
3
  export { default as VvAction } from './VvAction/VvAction.vue'
4
4
  export { default as VvAlert } from './VvAlert/VvAlert.vue'
5
+ export { default as VvAlertGroup } from './VvAlertGroup/VvAlertGroup.vue'
6
+ export { default as VvAvatar } from './VvAvatar/VvAvatar.vue'
7
+ export { default as VvAvatarGroup } from './VvAvatarGroup/VvAvatarGroup.vue'
5
8
  export { default as VvBadge } from './VvBadge/VvBadge.vue'
6
9
  export { default as VvBreadcrumb } from './VvBreadcrumb/VvBreadcrumb.vue'
7
10
  export { default as VvButton } from './VvButton/VvButton.vue'
@@ -12,9 +15,15 @@ export { default as VvCheckboxGroup } from './VvCheckboxGroup/VvCheckboxGroup.vu
12
15
  export { default as VvCombobox } from './VvCombobox/VvCombobox.vue'
13
16
  export { default as VvDialog } from './VvDialog/VvDialog.vue'
14
17
  export { default as VvDropdown } from './VvDropdown/VvDropdown.vue'
18
+ export { default as VvDropdownAction } from './VvDropdown/VvDropdownAction.vue'
19
+ export { default as VvDropdownItem } from './VvDropdown/VvDropdownItem.vue'
20
+ export { default as VvDropdownOptgroup } from './VvDropdown/VvDropdownOptgroup.vue'
21
+ export { default as VvDropdownOption } from './VvDropdown/VvDropdownOption.vue'
15
22
  export { default as VvIcon } from './VvIcon/VvIcon.vue'
16
23
  export { default as VvInputText } from './VvInputText/VvInputText.vue'
17
24
  export { default as VvNav } from './VvNav/VvNav.vue'
25
+ export { default as VvNavItem } from './VvNav/VvNavItem.vue'
26
+ export { default as VvNavSeparator } from './VvNav/VvNavSeparator.vue'
18
27
  export { default as VvProgress } from './VvProgress/VvProgress.vue'
19
28
  export { default as VvRadio } from './VvRadio/VvRadio.vue'
20
29
  export { default as VvRadioGroup } from './VvRadioGroup/VvRadioGroup.vue'
@@ -22,3 +31,4 @@ export { default as VvSelect } from './VvSelect/VvSelect.vue'
22
31
  export { default as VvTab } from './VvTab/VvTab.vue'
23
32
  export { default as VvTextarea } from './VvTextarea/VvTextarea.vue'
24
33
  export { default as VvTooltip } from './VvTooltip/VvTooltip.vue'
34
+ export { default as VvInputFile } from './VvInputFile/VvInputFile.vue'
@@ -1 +1,2 @@
1
1
  export { useAlert } from './alert/useAlert'
2
+ export { useBlurhash } from './useBlurhash'
@@ -0,0 +1,76 @@
1
+ import { wrap } from 'comlink'
2
+ import pica from 'pica'
3
+ import type { BlurhashWorkerType } from '@/types/blurhash'
4
+ import BlurhashWorker from '@/workers/blurhash?worker&inline'
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
+ const getWidthHeightFromMaxSize = (
18
+ width: number,
19
+ height: number,
20
+ maxSize: number,
21
+ ) => {
22
+ if (width > height) {
23
+ return {
24
+ width: maxSize,
25
+ height: Math.round(maxSize * (height / width)),
26
+ }
27
+ }
28
+ return {
29
+ width: Math.round(maxSize * (width / height)),
30
+ height: maxSize,
31
+ }
32
+ }
33
+
34
+ const resizeImage = async (
35
+ image: ImageBitmap | HTMLImageElement | HTMLCanvasElement | File | Blob,
36
+ width: number,
37
+ height: number,
38
+ ) => {
39
+ const resizer = new pica()
40
+ const canvas = document.createElement('canvas')
41
+ canvas.width = width
42
+ canvas.height = height
43
+ const result = await resizer.resize(image, canvas)
44
+ return result.getContext('2d')?.getImageData(0, 0, width, height).data
45
+ }
46
+
47
+ export const useBlurhash = () => {
48
+ async function encode(file: File) {
49
+ const imageUrl = URL.createObjectURL(file)
50
+ const image = await loadImage(imageUrl)
51
+ if ('width' in image && 'height' in image) {
52
+ const { width: newWidth, height: newHeight } =
53
+ getWidthHeightFromMaxSize(
54
+ image.width as number,
55
+ image.height as number,
56
+ 32,
57
+ )
58
+ const imageData = await resizeImage(
59
+ image as ImageBitmap,
60
+ newWidth,
61
+ newHeight,
62
+ )
63
+ if (imageData) {
64
+ return remoteFunction.encode(
65
+ imageData,
66
+ newWidth,
67
+ newHeight,
68
+ 4,
69
+ 4,
70
+ )
71
+ }
72
+ }
73
+ }
74
+
75
+ return { encode, decode: remoteFunction.decode, loadImage }
76
+ }
@@ -1,34 +1,35 @@
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
  ) {
9
+ const hasIcon = computed(() => {
10
+ if (typeof icon?.value === 'string') {
11
+ return { name: icon?.value }
12
+ }
13
+ return icon?.value
14
+ })
8
15
  const hasIconBefore = computed(() =>
9
- Boolean(icon?.value && iconPosition.value === Position.before),
16
+ iconPosition?.value === Position.before ? hasIcon.value : undefined,
10
17
  )
11
18
  const hasIconAfter = computed(() =>
12
- Boolean(icon?.value && iconPosition.value === Position.after),
19
+ iconPosition?.value === Position.after ? hasIcon.value : undefined,
13
20
  )
14
21
  const hasIconLeft = computed(() =>
15
- Boolean(icon?.value && iconPosition.value === Side.left),
22
+ iconPosition?.value === Side.left ? hasIcon.value : undefined,
16
23
  )
17
24
  const hasIconRight = computed(() =>
18
- Boolean(icon?.value && iconPosition.value === Side.right),
25
+ iconPosition?.value === Side.right ? hasIcon.value : undefined,
19
26
  )
20
27
  const hasIconTop = computed(() =>
21
- Boolean(icon?.value && iconPosition.value === Side.top),
28
+ iconPosition?.value === Side.top ? hasIcon.value : undefined,
22
29
  )
23
30
  const hasIconBottom = computed(() =>
24
- Boolean(icon?.value && iconPosition.value === Side.bottom),
31
+ iconPosition?.value === Side.bottom ? hasIcon.value : undefined,
25
32
  )
26
- const hasIcon = computed(() => {
27
- if (typeof icon?.value === 'string') {
28
- return { name: icon?.value }
29
- }
30
- return icon?.value
31
- })
32
33
  return {
33
34
  hasIcon,
34
35
  hasIconLeft,
@@ -1,5 +1,5 @@
1
- import { nanoid } from 'nanoid'
1
+ import { uid } from 'uid'
2
2
  import type { Ref } from 'vue'
3
3
 
4
4
  export const useUniqueId = (id?: Ref<string | number | undefined>) =>
5
- computed(() => String(id?.value || nanoid()))
5
+ computed(() => String(id?.value || uid()))
@@ -1,7 +1,4 @@
1
- import tooltip from '../directives/v-tooltip'
2
- import contextmenu from '../directives/v-contextmenu'
1
+ import vTooltip from '../directives/v-tooltip'
2
+ import vContextmenu from '../directives/v-contextmenu'
3
3
 
4
- export default {
5
- tooltip,
6
- contextmenu,
7
- }
4
+ export { vTooltip, vContextmenu }
@@ -1,15 +1,24 @@
1
1
  import { render, type Directive, type DirectiveBinding } from 'vue'
2
2
  import VvTooltip from '../components/VvTooltip/VvTooltip.vue'
3
- import type { Side } from '../constants'
3
+ import { Side } from '../constants'
4
4
 
5
- const tooltip: Directive = {
6
- beforeMount(el: HTMLElement, binding: DirectiveBinding) {
7
- const tooltip = h(VvTooltip, {
8
- value: binding.value,
9
- position: binding.arg as Side,
10
- })
11
- render(tooltip, el)
12
- },
13
- }
5
+ const tooltip: Directive = (() => {
6
+ return {
7
+ beforeMount(el: HTMLElement, binding: DirectiveBinding) {
8
+ const tooltip = h(VvTooltip, {
9
+ value: binding.value,
10
+ position: binding.arg as Side,
11
+ })
12
+ render(tooltip, el)
13
+ },
14
+ updated(el: HTMLElement, binding: DirectiveBinding) {
15
+ const tooltip = h(VvTooltip, {
16
+ value: binding.value,
17
+ position: binding.arg as Side,
18
+ })
19
+ render(tooltip, el)
20
+ },
21
+ }
22
+ })()
14
23
 
15
24
  export default tooltip
package/src/index.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import VolverPlugin from './Volver'
2
- import type { Volver } from './Volver'
2
+ import type { Volver, VolverOptions } from './Volver'
3
3
 
4
4
  export { VolverPlugin }
5
+ export * from './types'
6
+ export type { Volver, VolverOptions }
5
7
 
6
8
  // https://vuejs.org/guide/typescript/options-api.html#augmenting-global-properties
7
9
  // Add custom property and extend vue type definition