@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.
- package/LICENSE +1 -1
- package/README.md +98 -3
- package/auto-imports.d.ts +6 -2
- package/bin/icons.cjs +1 -1
- package/bin/icons.js +23 -16
- package/dist/Volver.d.ts +1 -1
- package/dist/components/VvAccordion/VvAccordion.es.js +67 -13
- package/dist/components/VvAccordion/VvAccordion.umd.js +1 -1
- package/dist/components/VvAccordion/VvAccordion.vue.d.ts +13 -6
- package/dist/components/VvAccordion/index.d.ts +4 -1
- package/dist/components/VvAccordionGroup/VvAccordionGroup.es.js +111 -37
- package/dist/components/VvAccordionGroup/VvAccordionGroup.umd.js +1 -1
- package/dist/components/VvAccordionGroup/VvAccordionGroup.vue.d.ts +15 -8
- package/dist/components/VvAccordionGroup/index.d.ts +4 -1
- package/dist/components/VvAction/VvAction.es.js +56 -12
- package/dist/components/VvAction/VvAction.umd.js +1 -1
- package/dist/components/VvAction/VvAction.vue.d.ts +59 -12
- package/dist/components/VvAction/index.d.ts +25 -4
- package/dist/components/VvAlert/VvAlert.es.js +188 -152
- package/dist/components/VvAlert/VvAlert.umd.js +1 -1
- package/dist/components/VvAlert/VvAlert.vue.d.ts +18 -8
- package/dist/components/VvAlert/index.d.ts +9 -5
- package/dist/components/VvAlertGroup/VvAlertGroup.es.js +230 -174
- package/dist/components/VvAlertGroup/VvAlertGroup.umd.js +1 -1
- package/dist/components/VvAlertGroup/VvAlertGroup.vue.d.ts +13 -6
- package/dist/components/VvAlertGroup/index.d.ts +6 -2
- package/dist/components/VvAvatar/VvAvatar.es.js +54 -9
- package/dist/components/VvAvatar/VvAvatar.umd.js +1 -1
- package/dist/components/VvAvatar/VvAvatar.vue.d.ts +12 -4
- package/dist/components/VvAvatar/index.d.ts +4 -1
- package/dist/components/VvAvatarGroup/VvAvatarGroup.es.js +111 -36
- package/dist/components/VvAvatarGroup/VvAvatarGroup.umd.js +1 -1
- package/dist/components/VvAvatarGroup/VvAvatarGroup.vue.d.ts +10 -3
- package/dist/components/VvAvatarGroup/index.d.ts +4 -1
- package/dist/components/VvBadge/VvBadge.es.js +71 -16
- package/dist/components/VvBadge/VvBadge.umd.js +1 -1
- package/dist/components/VvBadge/VvBadge.vue.d.ts +12 -4
- package/dist/components/VvBadge/index.d.ts +4 -1
- package/dist/components/VvBreadcrumb/VvBreadcrumb.es.js +257 -49
- package/dist/components/VvBreadcrumb/VvBreadcrumb.umd.js +1 -1
- package/dist/components/VvBreadcrumb/VvBreadcrumb.vue.d.ts +27 -7
- package/dist/components/VvBreadcrumb/index.d.ts +6 -10
- package/dist/components/VvButton/VvButton.es.js +165 -137
- package/dist/components/VvButton/VvButton.umd.js +1 -1
- package/dist/components/VvButton/VvButton.vue.d.ts +101 -27
- package/dist/components/VvButton/index.d.ts +41 -14
- package/dist/components/VvButtonGroup/VvButtonGroup.es.js +67 -15
- package/dist/components/VvButtonGroup/VvButtonGroup.umd.js +1 -1
- package/dist/components/VvButtonGroup/VvButtonGroup.vue.d.ts +23 -10
- package/dist/components/VvButtonGroup/index.d.ts +8 -2
- package/dist/components/VvCard/VvCard.es.js +79 -24
- package/dist/components/VvCard/VvCard.umd.js +1 -1
- package/dist/components/VvCard/VvCard.vue.d.ts +12 -4
- package/dist/components/VvCard/index.d.ts +4 -1
- package/dist/components/VvCheckbox/VvCheckbox.es.js +89 -21
- package/dist/components/VvCheckbox/VvCheckbox.umd.js +1 -1
- package/dist/components/VvCheckbox/VvCheckbox.vue.d.ts +104 -32
- package/dist/components/VvCheckbox/index.d.ts +45 -12
- package/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js +168 -66
- package/dist/components/VvCheckboxGroup/VvCheckboxGroup.umd.js +1 -1
- package/dist/components/VvCheckboxGroup/VvCheckboxGroup.vue.d.ts +100 -29
- package/dist/components/VvCheckboxGroup/index.d.ts +45 -12
- package/dist/components/VvCombobox/VvCombobox.es.js +721 -527
- package/dist/components/VvCombobox/VvCombobox.umd.js +1 -1
- package/dist/components/VvCombobox/VvCombobox.vue.d.ts +145 -72
- package/dist/components/VvCombobox/index.d.ts +53 -22
- package/dist/components/VvDialog/VvDialog.es.js +133 -141
- package/dist/components/VvDialog/VvDialog.umd.js +1 -1
- package/dist/components/VvDialog/VvDialog.vue.d.ts +4 -4
- package/dist/components/VvDropdown/VvDropdown.es.js +121 -55
- package/dist/components/VvDropdown/VvDropdown.umd.js +1 -1
- package/dist/components/VvDropdown/VvDropdown.vue.d.ts +61 -35
- package/dist/components/VvDropdown/VvDropdownAction.vue.d.ts +72 -11
- package/dist/components/VvDropdown/VvDropdownItem.vue.d.ts +1 -1
- package/dist/components/VvDropdown/VvDropdownOptgroup.vue.d.ts +12 -4
- package/dist/components/VvDropdown/VvDropdownOption.vue.d.ts +26 -7
- package/dist/components/VvDropdown/index.d.ts +16 -11
- package/dist/components/VvDropdownAction/VvDropdownAction.es.js +80 -21
- package/dist/components/VvDropdownAction/VvDropdownAction.umd.js +1 -1
- package/dist/components/VvDropdownItem/VvDropdownItem.es.js +13 -7
- package/dist/components/VvDropdownOptgroup/VvDropdownOptgroup.es.js +56 -8
- package/dist/components/VvDropdownOptgroup/VvDropdownOptgroup.umd.js +1 -1
- package/dist/components/VvDropdownOption/VvDropdownOption.es.js +76 -17
- package/dist/components/VvDropdownOption/VvDropdownOption.umd.js +1 -1
- package/dist/components/VvIcon/VvIcon.es.js +23 -96
- package/dist/components/VvIcon/VvIcon.umd.js +1 -1
- package/dist/components/VvIcon/VvIcon.vue.d.ts +23 -66
- package/dist/components/VvIcon/index.d.ts +21 -48
- package/dist/components/VvInputFile/VvInputFile.es.js +1558 -0
- package/dist/components/VvInputFile/VvInputFile.umd.js +1 -0
- package/dist/components/VvInputFile/VvInputFile.vue.d.ts +190 -0
- package/dist/components/VvInputFile/index.d.ts +74 -0
- package/dist/components/VvInputText/VvInputClearAction.d.ts +2 -2
- package/dist/components/VvInputText/VvInputPasswordAction.d.ts +1 -1
- package/dist/components/VvInputText/VvInputStepAction.d.ts +1 -1
- package/dist/components/VvInputText/VvInputText.es.js +266 -242
- package/dist/components/VvInputText/VvInputText.umd.js +1 -1
- package/dist/components/VvInputText/VvInputText.vue.d.ts +153 -46
- package/dist/components/VvInputText/index.d.ts +69 -18
- package/dist/components/VvNav/VvNav.es.js +150 -73
- package/dist/components/VvNav/VvNav.umd.js +1 -1
- package/dist/components/VvNav/VvNav.vue.d.ts +41 -14
- package/dist/components/VvNav/VvNavItem.vue.d.ts +9 -0
- package/dist/components/VvNav/{VvNavSeparator.d.ts → VvNavSeparator.vue.d.ts} +1 -1
- package/dist/components/VvNav/index.d.ts +5 -13
- package/dist/components/VvNavItem/VvNavItem.es.js +435 -0
- package/dist/components/VvNavItem/VvNavItem.umd.js +1 -0
- package/dist/components/VvNavSeparator/VvNavSeparator.es.js +24 -0
- package/dist/components/VvNavSeparator/VvNavSeparator.umd.js +1 -0
- package/dist/components/VvProgress/VvProgress.es.js +65 -14
- package/dist/components/VvProgress/VvProgress.umd.js +1 -1
- package/dist/components/VvProgress/VvProgress.vue.d.ts +10 -3
- package/dist/components/VvProgress/index.d.ts +4 -1
- package/dist/components/VvRadio/VvRadio.es.js +89 -21
- package/dist/components/VvRadio/VvRadio.umd.js +1 -1
- package/dist/components/VvRadio/VvRadio.vue.d.ts +102 -30
- package/dist/components/VvRadio/index.d.ts +44 -11
- package/dist/components/VvRadioGroup/VvRadioGroup.es.js +168 -66
- package/dist/components/VvRadioGroup/VvRadioGroup.umd.js +1 -1
- package/dist/components/VvRadioGroup/VvRadioGroup.vue.d.ts +100 -29
- package/dist/components/VvRadioGroup/index.d.ts +45 -12
- package/dist/components/VvSelect/VvSelect.es.js +244 -226
- package/dist/components/VvSelect/VvSelect.umd.js +1 -1
- package/dist/components/VvSelect/VvSelect.vue.d.ts +112 -39
- package/dist/components/VvSelect/index.d.ts +48 -14
- package/dist/components/VvTab/VvTab.es.js +251 -110
- package/dist/components/VvTab/VvTab.umd.js +1 -1
- package/dist/components/VvTab/VvTab.vue.d.ts +50 -13
- package/dist/components/VvTab/index.d.ts +13 -4
- package/dist/components/VvTextarea/VvTextarea.es.js +225 -212
- package/dist/components/VvTextarea/VvTextarea.umd.js +1 -1
- package/dist/components/VvTextarea/VvTextarea.vue.d.ts +155 -48
- package/dist/components/VvTextarea/index.d.ts +68 -19
- package/dist/components/VvTooltip/VvTooltip.es.js +72 -17
- package/dist/components/VvTooltip/VvTooltip.umd.js +1 -1
- package/dist/components/VvTooltip/VvTooltip.vue.d.ts +10 -3
- package/dist/components/VvTooltip/index.d.ts +4 -1
- package/dist/components/index.d.ts +10 -0
- package/dist/components/index.es.js +2635 -1301
- package/dist/components/index.umd.js +1 -1
- package/dist/composables/alert/useAlert.d.ts +37 -4
- package/dist/composables/dropdown/useProvideDropdown.d.ts +1 -1
- package/dist/composables/index.d.ts +1 -0
- package/dist/composables/index.es.js +88 -1
- package/dist/composables/index.umd.js +1 -1
- package/dist/composables/useBlurhash.d.ts +7 -0
- package/dist/composables/useComponentIcon.d.ts +9 -8
- package/dist/composables/useVolver.d.ts +1 -1
- package/dist/directives/index.d.ts +3 -5
- package/dist/directives/index.es.js +92 -31
- package/dist/directives/index.umd.js +1 -1
- package/dist/directives/v-tooltip.es.js +90 -26
- package/dist/directives/v-tooltip.umd.js +1 -1
- package/dist/icons.es.js +6 -6
- package/dist/icons.umd.js +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.es.js +81 -16
- package/dist/index.umd.js +1 -1
- package/dist/props/index.d.ts +287 -73
- package/dist/resolvers/unplugin.d.ts +6 -1
- package/dist/resolvers/unplugin.es.js +78 -10
- package/dist/resolvers/unplugin.umd.js +1 -1
- package/dist/stories/AccordionGroup/AccordionGroup.stories.d.ts +72 -84
- package/dist/stories/AccordionGroup/AccordionGroupSlots.stories.d.ts +623 -461
- package/dist/stories/AlertGroup/AlertGroupWithComposable.stories.d.ts +1 -1
- package/dist/stories/Blurhash/BlurhashComposable.stories.d.ts +4 -0
- package/dist/stories/Combobox/Combobox.settings.d.ts +8 -0
- package/dist/stories/Icon/Icon.settings.d.ts +1 -0
- package/dist/stories/InputFile/InputFile.settings.d.ts +56 -0
- package/dist/stories/InputFile/InputFile.stories.d.ts +13 -0
- package/dist/stories/InputFile/InputFileModifiers.stories.d.ts +9 -0
- package/dist/stories/InputFile/InputFileSlots.stories.d.ts +6 -0
- package/dist/stories/Tab/Tab.settings.d.ts +4 -37
- package/dist/types/alert.d.ts +13 -0
- package/dist/types/blurhash.d.ts +12 -0
- package/dist/types/floating-ui.d.ts +6 -0
- package/dist/types/generic.d.ts +4 -0
- package/dist/types/group.d.ts +37 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/input-file.d.ts +14 -0
- package/dist/types/nav.d.ts +18 -0
- package/dist/utils/ObjectUtilities.d.ts +0 -1
- package/dist/workers/blurhash.d.ts +1 -0
- package/package.json +91 -74
- package/src/Volver.ts +31 -20
- package/src/assets/icons/detailed.json +1 -1
- package/src/assets/icons/normal.json +1 -1
- package/src/assets/icons/simple.json +1 -1
- package/src/components/VvAccordion/VvAccordion.vue +2 -2
- package/src/components/VvAction/VvAction.vue +5 -2
- package/src/components/VvAlert/index.ts +1 -3
- package/src/components/VvAlertGroup/index.ts +2 -1
- package/src/components/VvBreadcrumb/VvBreadcrumb.vue +20 -19
- package/src/components/VvBreadcrumb/index.ts +2 -8
- package/src/components/VvButton/VvButton.vue +6 -6
- package/src/components/VvButton/index.ts +2 -4
- package/src/components/VvCombobox/VvCombobox.vue +24 -16
- package/src/components/VvCombobox/index.ts +4 -0
- package/src/components/VvIcon/VvIcon.vue +2 -2
- package/src/components/VvIcon/index.ts +22 -48
- package/src/components/VvInputFile/VvInputFile.vue +302 -0
- package/src/components/VvInputFile/index.ts +38 -0
- package/src/components/VvInputText/VvInputText.vue +13 -14
- package/src/components/VvNav/VvNav.vue +30 -50
- package/src/components/VvNav/VvNavItem.vue +18 -0
- package/src/components/VvNav/VvNavSeparator.vue +11 -0
- package/src/components/VvNav/index.ts +2 -15
- package/src/components/VvSelect/VvSelect.vue +5 -8
- package/src/components/VvTab/VvTab.vue +63 -35
- package/src/components/VvTab/index.ts +10 -4
- package/src/components/VvTextarea/VvTextarea.vue +6 -9
- package/src/components/index.ts +10 -0
- package/src/composables/index.ts +1 -0
- package/src/composables/useBlurhash.ts +76 -0
- package/src/composables/useComponentIcon.ts +15 -14
- package/src/composables/useUniqueId.ts +2 -2
- package/src/directives/index.ts +3 -6
- package/src/directives/v-tooltip.ts +19 -10
- package/src/index.ts +3 -1
- package/src/props/index.ts +115 -27
- package/src/resolvers/unplugin.ts +24 -14
- package/src/stories/AlertGroup/AlertGroupWithComposable.stories.ts +2 -2
- package/src/stories/Blurhash/BlurhashComposable.stories.ts +195 -0
- package/src/stories/Combobox/Combobox.settings.ts +8 -0
- package/src/stories/Icon/Icon.settings.ts +3 -3
- package/src/stories/InputFile/InputFile.settings.ts +36 -0
- package/src/stories/InputFile/InputFile.stories.ts +98 -0
- package/src/stories/InputFile/InputFileModifiers.stories.ts +51 -0
- package/src/stories/InputFile/InputFileSlots.stories.ts +25 -0
- package/src/stories/Nav/Nav.settings.ts +3 -4
- package/src/stories/Nav/Nav.test.ts +4 -15
- package/src/stories/Tab/Tab.settings.ts +9 -9
- package/src/stories/Tab/Tab.stories.ts +2 -2
- package/src/stories/Tab/Tab.test.ts +6 -14
- package/src/stories/argTypes.ts +1 -1
- package/src/types/blurhash.ts +21 -0
- package/src/types/generic.ts +6 -0
- package/src/types/index.ts +7 -0
- package/src/types/input-file.ts +16 -0
- package/src/types/nav.ts +20 -0
- package/src/utils/ObjectUtilities.ts +0 -11
- package/src/workers/blurhash.ts +9 -0
- package/dist/components/VvNav/VvNavItemTitle.vue.d.ts +0 -6
- package/dist/components/VvNavItemTitle/VvNavItemTitle.es.js +0 -19
- package/dist/components/VvNavItemTitle/VvNavItemTitle.umd.js +0 -1
- package/src/components/VvNav/VvNavItemTitle.vue +0 -11
- package/src/components/VvNav/VvNavSeparator.ts +0 -8
- package/src/types/generic.d.ts +0 -6
- /package/src/types/{alert.d.ts → alert.ts} +0 -0
- /package/src/types/{floating-ui.d.ts → floating-ui.ts} +0 -0
- /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
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
emit('
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
<
|
|
50
|
-
|
|
51
|
-
|
|
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 {
|
|
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<
|
|
8
|
-
required: true,
|
|
14
|
+
type: Array as PropType<NavItemTab[]>,
|
|
9
15
|
default: () => [],
|
|
10
16
|
},
|
|
11
17
|
}
|
|
12
18
|
|
|
13
|
-
export const VvTabEvents = ['
|
|
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 {
|
|
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
|
-
|
|
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">
|
package/src/components/index.ts
CHANGED
|
@@ -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'
|
package/src/composables/index.ts
CHANGED
|
@@ -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
|
|
6
|
-
iconPosition
|
|
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
|
-
|
|
16
|
+
iconPosition?.value === Position.before ? hasIcon.value : undefined,
|
|
10
17
|
)
|
|
11
18
|
const hasIconAfter = computed(() =>
|
|
12
|
-
|
|
19
|
+
iconPosition?.value === Position.after ? hasIcon.value : undefined,
|
|
13
20
|
)
|
|
14
21
|
const hasIconLeft = computed(() =>
|
|
15
|
-
|
|
22
|
+
iconPosition?.value === Side.left ? hasIcon.value : undefined,
|
|
16
23
|
)
|
|
17
24
|
const hasIconRight = computed(() =>
|
|
18
|
-
|
|
25
|
+
iconPosition?.value === Side.right ? hasIcon.value : undefined,
|
|
19
26
|
)
|
|
20
27
|
const hasIconTop = computed(() =>
|
|
21
|
-
|
|
28
|
+
iconPosition?.value === Side.top ? hasIcon.value : undefined,
|
|
22
29
|
)
|
|
23
30
|
const hasIconBottom = computed(() =>
|
|
24
|
-
|
|
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,
|
package/src/directives/index.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import vTooltip from '../directives/v-tooltip'
|
|
2
|
+
import vContextmenu from '../directives/v-contextmenu'
|
|
3
3
|
|
|
4
|
-
export
|
|
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
|
|
3
|
+
import { Side } from '../constants'
|
|
4
4
|
|
|
5
|
-
const tooltip: Directive = {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|