UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 10.6 kB
{"version":3,"file":"image-viewer.vue2.cjs","sources":["../../../components/image/image-viewer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Masker } from '@/components/masker'\nimport { Renderer } from '@/components/renderer'\nimport { Viewer } from '@/components/viewer'\n\nimport { computed, ref, watch } from 'vue'\n\nimport { emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { boundRange, ensureArray, isDefined } from '@vexip-ui/utils'\nimport { imageViewerProps } from './props'\n\nimport type { ImageViewerSlots } from './symbol'\n\ndefineOptions({ name: 'ImageViewer' })\n\nconst _props = defineProps(imageViewerProps)\nconst props = useProps('imageViewer', _props, {\n active: false,\n index: 0,\n srcList: {\n default: '',\n static: true,\n },\n transfer: false,\n viewerProps: () => ({}),\n slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:active', 'update:index'])\n\ndefineSlots<ImageViewerSlots>()\n\nconst nh = useNameHelper('image-viewer')\nconst icons = useIcons()\n\nconst currentActive = ref(props.active)\nconst currentIndex = ref(props.index)\n\nconst viewer = ref<InstanceType<typeof Viewer>>()\n\nconst className = computed(() => {\n return [nh.b(), nh.ns('image-vars'), props.inherit && nh.bm('inherit')]\n})\nconst srcArray = computed(() => ensureArray(isDefined(props.srcList) ? props.srcList : ''))\nconst prevDisabled = computed(() => currentIndex.value <= 0)\nconst nextDisabled = computed(() => currentIndex.value >= srcArray.value.length - 1)\n\nwatch(\n () => props.active,\n value => {\n currentActive.value = value\n },\n)\nwatch(\n () => props.index,\n value => {\n currentIndex.value = value\n },\n)\nwatch(() => srcArray.value.length, verifyIndex)\n\ndefineExpose({\n currentActive,\n currentIndex,\n prevDisabled,\n nextDisabled,\n viewer,\n})\n\nfunction setActive(active: boolean) {\n if (currentActive.value === active) return\n\n currentActive.value = active\n\n emit('update:active', active)\n emitEvent(props.onToggle, active)\n}\n\nfunction verifyIndex() {\n currentIndex.value = boundRange(currentIndex.value, 0, srcArray.value.length - 1)\n}\n\nfunction handleChange() {\n const value = currentIndex.value\n\n viewer.value?.handleReset()\n emit('update:index', value)\n emitEvent(props.onChange, value, srcArray.value[value])\n}\n\nfunction handlePrev() {\n if (prevDisabled.value) return\n\n const prev = currentIndex.value\n\n currentIndex.value--\n verifyIndex()\n currentIndex.value !== prev && handleChange()\n emitEvent(props.onPrev, currentIndex.value, srcArray.value[currentIndex.value])\n}\n\nfunction handleNext() {\n if (nextDisabled.value) return\n\n const prev = currentIndex.value\n\n currentIndex.value++\n verifyIndex()\n currentIndex.value !== prev && handleChange()\n emitEvent(props.onNext, currentIndex.value, srcArray.value[currentIndex.value])\n}\n\nfunction handleClose() {\n setActive(false)\n emitEvent(props.onClose)\n}\n\nfunction handleShow() {\n emitEvent(props.onShow)\n}\n\nfunction handleHide() {\n emitEvent(props.onHide)\n}\n</script>\n\n<template>\n <Masker\n v-slot=\"{ show }\"\n :active=\"currentActive\"\n :inherit=\"props.inherit\"\n :class=\"className\"\n closable\n auto-remove\n :transfer=\"props.transfer\"\n @show=\"handleShow\"\n @hide=\"handleHide\"\n @toggle=\"setActive\"\n >\n <div v-show=\"show\" :class=\"nh.be('wrapper')\">\n <Viewer v-bind=\"props.viewerProps\" ref=\"viewer\">\n <slot :src=\"srcArray[currentIndex]\">\n <Renderer :renderer=\"props.slots.default\" :data=\"{ src: srcArray[currentIndex] }\">\n <img :src=\"srcArray[currentIndex]\" />\n </Renderer>\n </slot>\n </Viewer>\n <template v-if=\"srcArray.length > 1\">\n <button\n type=\"button\"\n :class=\"[nh.be('prev'), prevDisabled && nh.bem('prev', 'disabled')]\"\n @click.stop=\"handlePrev\"\n >\n <slot name=\"prev\" :disabled=\"prevDisabled\">\n <Renderer :renderer=\"props.slots.prev\" :data=\"{ disabled: prevDisabled }\">\n <div :class=\"nh.be('prev-handler')\">\n <Icon\n v-bind=\"icons.angleLeft\"\n :scale=\"+(icons.angleLeft.scale || 1) * 1.4\"\n label=\"prev\"\n ></Icon>\n </div>\n </Renderer>\n </slot>\n </button>\n <button\n type=\"button\"\n :class=\"[nh.be('next'), nextDisabled && nh.bem('next', 'disabled')]\"\n @click.stop=\"handleNext\"\n >\n <slot name=\"next\" :disabled=\"nextDisabled\">\n <Renderer :renderer=\"props.slots.next\" :data=\"{ disabled: nextDisabled }\">\n <div :class=\"nh.be('next-handler')\">\n <Icon\n v-bind=\"icons.angleRight\"\n :scale=\"+(icons.angleRight.scale || 1) * 1.4\"\n label=\"next\"\n ></Icon>\n </div>\n </Renderer>\n </slot>\n </button>\n </template>\n <button type=\"button\" :class=\"nh.be('close')\" @click.stop=\"handleClose\">\n <slot name=\"close\">\n <Renderer :renderer=\"props.slots.close\">\n <div :class=\"nh.be('close-handler')\">\n <Icon\n v-bind=\"icons.close\"\n :scale=\"+(icons.close.scale || 1) * 1.4\"\n label=\"close\"\n ></Icon>\n </div>\n </Renderer>\n </slot>\n </button>\n </div>\n </Masker>\n</template>\n"],"names":["_props","__props","props","useProps","emit","__emit","nh","useNameHelper","icons","useIcons","currentActive","ref","currentIndex","viewer","className","computed","srcArray","ensureArray","isDefined","prevDisabled","nextDisabled","watch","value","verifyIndex","__expose","setActive","active","emitEvent","boundRange","handleChange","_a","handlePrev","prev","handleNext","handleClose","handleShow","handleHide","_createBlock","_unref","Masker","_withCtx","show","_createElementVNode","_normalizeClass","_createVNode","Viewer","_mergeProps","_renderSlot","_ctx","Renderer","_createElementBlock","_Fragment","Icon"],"mappings":"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"}