UNPKG

vexip-ui

Version:

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

1 lines 30.4 kB
{"version":3,"file":"modal.vue2.cjs","sources":["../../../components/modal/modal.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Masker } from '@/components/masker'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, nextTick, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\n\nimport {\n createSizeProp,\n emitEvent,\n useIcons,\n useId,\n useLocale,\n useNameHelper,\n useProps,\n} from '@vexip-ui/config'\nimport { useMoving } from '@vexip-ui/hooks'\nimport { isNull, isPromise, isValidNumber, toNumber } from '@vexip-ui/utils'\nimport { modalProps, positionProp } from './props'\n\nimport type { MaskerExposed } from '@/components/masker'\nimport type { ModalSlots } from './symbol'\n\ndefineOptions({ name: 'Modal' })\n\nconst nh = useNameHelper('modal')\n\nconst _props = defineProps(modalProps)\nconst props = useProps('modal', _props, {\n locale: null,\n transfer: false,\n active: {\n default: false,\n static: true,\n },\n width: positionProp,\n height: positionProp,\n top: positionProp,\n left: positionProp,\n right: positionProp,\n bottom: positionProp,\n title: '',\n closable: true,\n inner: false,\n maskClose: true,\n modalClass: null,\n modalStyle: null,\n noFooter: false,\n hideMask: false,\n draggable: false,\n resizable: false,\n onBeforeClose: {\n default: null,\n isFunc: true,\n },\n loading: false,\n minWidth: 150,\n minHeight: 120,\n transitionName: () => nh.ns('ease'),\n confirmText: null,\n cancelText: null,\n autoRemove: false,\n confirmType: 'primary',\n confirmProps: null,\n cancelType: 'default',\n cancelProps: null,\n actionSize: createSizeProp('small'),\n undivided: false,\n xOffset: 0,\n yOffset: 0,\n disableEsc: false,\n slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:active'])\n\nconst slots = defineSlots<ModalSlots>()\n\nconst locale = useLocale('modal', toRef(props, 'locale'))\nconst icons = useIcons()\n\nfunction isSpecified(value?: string | number) {\n return !isNull(value) && value !== 'auto'\n}\n\nfunction normalizeStyle(value?: string | number) {\n return isValidNumber(value, true)\n ? `${toNumber(value)}px`\n : isNull(value)\n ? 'auto'\n : String(value)\n}\n\nconst currentActive = ref(props.active)\nconst rect = reactive({\n top: normalizeStyle(props.top),\n right: normalizeStyle(props.right),\n bottom: normalizeStyle(props.bottom),\n left: normalizeStyle(props.left),\n width: normalizeStyle(props.width),\n height: normalizeStyle(props.height),\n})\nconst maskerRect = reactive({ width: 0, height: 0 })\nconst modalRect = reactive({ width: 0, height: 0 })\n\nconst transformed = ref(false)\n\nconst masker = ref<MaskerExposed>()\nconst wrapper = ref<HTMLElement>()\nconst footer = ref<HTMLElement>()\n\nconst uselessTop = computed(() => {\n return props.top === 'auto' && isSpecified(props.bottom) && isSpecified(props.height)\n})\nconst uselessLeft = computed(() => {\n return props.left === 'auto' && isSpecified(props.right) && isSpecified(props.width)\n})\n\nconst { target: header, moving: dragging } = useMoving({\n capture: false,\n onStart: (state, event) => {\n if (!wrapper.value || !props.draggable || event.button > 0) {\n return false\n }\n\n transferRect(false)\n\n transformed.value = true\n state.xStart = parseFloat(rect.left)\n state.yStart = parseFloat(rect.top)\n\n emitEvent(props.onDragStart, {\n top: state.yStart,\n left: state.xStart,\n })\n },\n onMove: state => {\n rect.left = `${state.xEnd}px`\n rect.top = `${state.yEnd}px`\n\n emitEvent(props.onDragMove, {\n top: state.yEnd,\n left: state.xEnd,\n })\n },\n onEnd: state => {\n emitEvent(props.onDragEnd, {\n top: state.yEnd,\n left: state.xEnd,\n })\n },\n})\n\nconst { target: resizer, moving: resizing } = useMoving({\n onStart: (state, event) => {\n if (!wrapper.value || !props.resizable || event.button > 0) {\n return false\n }\n\n transferRect()\n\n let minHeight = 32\n\n if (header.value) {\n minHeight += header.value.offsetHeight\n }\n\n if (footer.value) {\n minHeight += footer.value.offsetHeight\n }\n\n transformed.value = true\n state.xStart = parseFloat(rect.width)\n state.yStart = parseFloat(rect.height)\n state.minHeight = Math.max(minHeight, props.minHeight)\n\n emitEvent(props.onResizeStart, {\n width: state.xStart,\n height: state.yStart,\n })\n },\n onMove: state => {\n const width = Math.max(props.minWidth, state.xEnd, 32)\n const height = Math.max(state.minHeight as number, state.yEnd)\n\n rect.width = `${width}px`\n rect.height = `${height}px`\n\n emitEvent(props.onResizeMove, { width, height })\n },\n onEnd: state => {\n const width = Math.max(props.minWidth, state.xEnd, 32)\n const height = Math.max(state.minHeight as number, state.yEnd)\n\n emitEvent(props.onResizeEnd, { width, height })\n },\n})\n\n// const shouldParse = computed(() => !props.draggable && !props.resizable)\nconst className = computed(() => {\n return [\n nh.b(),\n nh.bs('vars'),\n {\n [nh.bm('inherit')]: props.inherit,\n [nh.bm('inner')]: props.inner,\n [nh.bm('draggable')]: props.draggable,\n [nh.bm('resizable')]: props.resizable,\n [nh.bm('undivided')]: props.undivided,\n },\n ]\n})\nconst wrapperClass = computed(() => {\n return [\n nh.be('wrapper'),\n {\n [nh.bem('wrapper', 'closable')]: props.closable,\n [nh.bem('wrapper', 'dragging')]: dragging.value,\n [nh.bem('wrapper', 'resizing')]: resizing.value,\n },\n props.modalClass,\n ]\n})\nconst transform = computed(() => {\n const transforms: string[] = []\n\n if (props.xOffset) {\n transforms.push(`translateX(${normalizeStyle(props.xOffset)})`)\n }\n\n if (props.yOffset) {\n transforms.push(`translateY(${normalizeStyle(props.yOffset)})`)\n }\n\n if (transforms.length) {\n transforms.push('translateZ(0)')\n }\n\n return transforms.length ? transforms.join(' ') : undefined\n})\nconst wrapperStyle = computed(() => {\n return [\n props.modalStyle,\n {\n ...rect,\n height: rect.height !== 'auto' ? rect.height : undefined,\n transform: transform.value,\n },\n ]\n})\nconst transformOrigin = computed(() => {\n const origin = { x: '50%', y: '50%' }\n\n if (transformed.value) {\n origin.x = `${parseFloat(rect.left) + 0.5 * modalRect.width}px`\n origin.y = `${parseFloat(rect.top) + 0.5 * modalRect.height}px`\n } else {\n if (uselessTop.value) {\n origin.y = `calc(100% - ${parseFloat(rect.bottom) + 0.5 * parseFloat(rect.height)}px)`\n } else if (isSpecified(props.top)) {\n const top = parseFloat(rect.top)\n\n if (isSpecified(props.height)) {\n origin.y = `${top + 0.5 * parseFloat(rect.height)}px`\n } else if (isSpecified(props.bottom)) {\n const bottom = parseFloat(rect.bottom)\n const height = maskerRect.height - top - bottom\n\n origin.y = `${top + 0.5 * height}px`\n } else {\n origin.y = `${parseFloat(rect.top) + 0.5 * modalRect.height}px`\n }\n }\n\n if (uselessLeft.value) {\n origin.x = `calc(100% - ${parseFloat(rect.right) + 0.5 * parseFloat(rect.width)}px)`\n } else if (isSpecified(props.left)) {\n const left = parseFloat(rect.left)\n\n if (isSpecified(props.width)) {\n origin.x = `${left + 0.5 * parseFloat(rect.width)}px`\n } else if (isSpecified(props.right)) {\n const right = parseFloat(rect.right)\n const width = maskerRect.width - left - right\n\n origin.x = `${left + 0.5 * width}px`\n } else {\n origin.x = `${parseFloat(rect.left) + 0.5 * modalRect.width}px`\n }\n }\n }\n\n return `${origin.x} ${origin.y}`\n})\nconst hasHeader = computed(() => {\n return !!(slots.header || slots.title || props.title || props.slots.header || props.slots.title)\n})\nconst titleId = useId()\nconst bodyId = useId()\n\nfor (const style of Object.keys(rect) as Array<keyof typeof rect>) {\n watch(\n () => props[style],\n value => {\n rect[style] = normalizeStyle(value)\n },\n )\n}\n\nwatch(\n () => props.active,\n value => {\n currentActive.value = value\n },\n)\nwatch(currentActive, value => {\n props.hideMask && value && handleResize()\n})\nwatch([() => props.top, () => props.bottom, () => props.height], () => {\n currentActive.value && nextTick(computeTop)\n})\nwatch([() => props.left, () => props.right, () => props.width], () => {\n currentActive.value && nextTick(computeLeft)\n})\n\nconst handleResize = () => {\n if (currentActive.value && !transformed.value) {\n nextTick(() => {\n computeTop()\n computeLeft()\n })\n }\n\n if (masker.value?.wrapper) {\n maskerRect.width = masker.value.wrapper.offsetWidth\n maskerRect.height = masker.value.wrapper.offsetHeight\n }\n}\n\ndefineExpose({\n dragging,\n resizing,\n titleId,\n bodyId,\n wrapper,\n header,\n footer,\n resizer,\n handleResize,\n handleConfirm,\n handleCancel,\n handleClose,\n})\n\nconst slotParams = shallowReadonly(\n reactive({\n dragging,\n resizing,\n handleResize,\n handleConfirm,\n handleCancel,\n handleClose,\n }),\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 findPositionalParent() {\n if (!wrapper.value) return document.body\n\n let parentElement = wrapper.value.parentElement as HTMLElement\n\n while (parentElement && parentElement !== document.body) {\n if (getComputedStyle(parentElement).position !== 'static') {\n return parentElement\n }\n\n parentElement = parentElement.parentElement as HTMLElement\n }\n\n return parentElement\n}\n\nfunction computeTop() {\n if (!wrapper.value || props.top !== 'auto' || uselessTop.value) return\n\n const currentHeight = wrapper.value.offsetHeight\n\n if (props.inner) {\n rect.top = `${(findPositionalParent().offsetHeight - currentHeight) / 2}px`\n } else {\n rect.top = `${(window.innerHeight - currentHeight) / 2 - 20}px`\n }\n}\n\nfunction computeLeft() {\n if (!wrapper.value || props.left !== 'auto' || uselessLeft.value) return\n\n const currentWidth = wrapper.value.offsetWidth\n\n if (props.inner) {\n rect.left = `${(findPositionalParent().offsetWidth - currentWidth) / 2}px`\n } else {\n rect.left = `${(window.innerWidth - currentWidth) / 2}px`\n }\n}\n\nfunction transferRect(withSize = true) {\n if (!wrapper.value) return\n\n const { offsetWidth, offsetHeight, offsetTop, offsetLeft } = wrapper.value\n\n // If user is using top/bottom or right/left to specify size,\n // here need to force transfer to use offset size\n if (\n !withSize &&\n ((!uselessTop.value && props.bottom !== 'auto') ||\n (!uselessLeft.value && props.right !== 'auto'))\n ) {\n withSize = true\n }\n\n Object.assign(\n rect,\n {\n top: `${offsetTop}px`,\n right: 'auto',\n bottom: 'auto',\n left: `${offsetLeft}px`,\n },\n withSize\n ? {\n width: `${offsetWidth}px`,\n height: `${offsetHeight}px`,\n }\n : {},\n )\n}\n\nfunction handleConfirm() {\n handleClose(true)\n emitEvent(props.onConfirm)\n}\n\nfunction handleCancel() {\n handleClose(false)\n emitEvent(props.onCancel)\n}\n\nasync function handleClose(isConfirm = false) {\n let result: unknown = true\n\n if (typeof props.onBeforeClose === 'function') {\n result = props.onBeforeClose(isConfirm)\n\n if (isPromise(result)) {\n result = await result\n }\n }\n\n if (result !== false) {\n await nextTick(() => {\n setActive(false)\n emitEvent(props.onClose)\n })\n }\n\n return result\n}\n\nfunction handleShow() {\n emitEvent(props.onShow)\n}\n\nfunction handleHide() {\n emitEvent(props.onHide)\n}\n\nfunction handleMaskClose() {\n if (props.maskClose) {\n return handleClose(false)\n }\n}\n\nfunction handleModalResize(entry: ResizeObserverEntry) {\n const box = entry.borderBoxSize?.[0]\n\n if (box) {\n modalRect.width = box.inlineSize\n modalRect.height = box.blockSize\n } else {\n modalRect.width = entry.contentRect.width\n modalRect.height = entry.contentRect.height\n }\n}\n</script>\n\n<template>\n <Masker\n ref=\"masker\"\n v-model:active=\"currentActive\"\n :inherit=\"props.inherit\"\n :class=\"className\"\n :inner=\"props.inner\"\n :transition-name=\"props.transitionName\"\n :closable=\"props.maskClose\"\n :disabled=\"props.hideMask\"\n :on-before-close=\"handleMaskClose\"\n :transfer=\"props.transfer\"\n :auto-remove=\"props.autoRemove\"\n :disable-esc=\"props.disableEsc\"\n @show=\"handleShow\"\n @hide=\"handleHide\"\n @resize=\"handleResize\"\n >\n <template #default=\"{ show }\">\n <section v-show=\"show\" :class=\"nh.be('transform')\" :style=\"{ transformOrigin }\">\n <ResizeObserver @resize=\"handleModalResize\">\n <div\n ref=\"wrapper\"\n :class=\"wrapperClass\"\n role=\"dialog\"\n :style=\"wrapperStyle\"\n :aria-modal=\"show ? 'true' : undefined\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"bodyId\"\n >\n <div v-if=\"hasHeader\" ref=\"header\" :class=\"nh.be('header')\">\n <slot name=\"header\" v-bind=\"slotParams\">\n <Renderer :renderer=\"props.slots.header\" :data=\"slotParams\">\n <div :id=\"titleId\" :class=\"nh.be('title')\">\n <slot name=\"title\" v-bind=\"slotParams\">\n <Renderer :renderer=\"props.slots.title\" :data=\"slotParams\">\n {{ props.title }}\n </Renderer>\n </slot>\n </div>\n <button\n v-if=\"props.closable\"\n type=\"button\"\n :class=\"nh.be('close')\"\n @pointerdown.stop\n @mousedown.stop\n @touchstart.stop\n @click=\"handleClose(false)\"\n >\n <slot name=\"close\" v-bind=\"slotParams\">\n <Renderer :renderer=\"props.slots.close\" :data=\"slotParams\">\n <Icon\n v-bind=\"icons.close\"\n :scale=\"+(icons.close.scale || 1) * 1.2\"\n label=\"close\"\n ></Icon>\n </Renderer>\n </slot>\n </button>\n </Renderer>\n </slot>\n </div>\n <div\n :id=\"bodyId\"\n :class=\"nh.be('content')\"\n :style=\"{\n overflow: resizing ? 'hidden' : undefined\n }\"\n >\n <slot v-bind=\"slotParams\">\n <Renderer :renderer=\"props.slots.default\" :data=\"slotParams\"></Renderer>\n </slot>\n </div>\n <div v-if=\"!props.noFooter\" ref=\"footer\" :class=\"nh.be('footer')\">\n <slot name=\"footer\" v-bind=\"slotParams\">\n <Renderer :renderer=\"props.slots.footer\" :data=\"slotParams\">\n <Button\n :class=\"[nh.be('button'), nh.bem('button', 'cancel')]\"\n inherit\n text\n :type=\"props.cancelType\"\n :size=\"props.actionSize\"\n v-bind=\"props.cancelProps\"\n @click=\"handleCancel\"\n >\n {{ props.cancelText || locale.cancel }}\n </Button>\n <Button\n :class=\"[nh.be('button'), nh.bem('button', 'confirm')]\"\n inherit\n :type=\"props.confirmType\"\n :size=\"props.actionSize\"\n :loading=\"props.loading\"\n v-bind=\"props.confirmProps\"\n @click=\"handleConfirm\"\n >\n {{ props.confirmText || locale.confirm }}\n </Button>\n </Renderer>\n </slot>\n </div>\n <div v-if=\"props.resizable\" ref=\"resizer\" :class=\"nh.be('resizer')\"></div>\n </div>\n </ResizeObserver>\n </section>\n </template>\n </Masker>\n</template>\n"],"names":["nh","useNameHelper","_props","__props","props","useProps","positionProp","createSizeProp","emit","__emit","slots","_useSlots","locale","useLocale","toRef","icons","useIcons","isSpecified","value","isNull","normalizeStyle","isValidNumber","toNumber","currentActive","ref","rect","reactive","maskerRect","modalRect","transformed","masker","wrapper","footer","uselessTop","computed","uselessLeft","header","dragging","useMoving","state","event","transferRect","emitEvent","resizer","resizing","minHeight","width","height","className","wrapperClass","transform","transforms","wrapperStyle","transformOrigin","origin","top","bottom","left","right","hasHeader","titleId","useId","bodyId","style","watch","handleResize","nextTick","computeTop","computeLeft","_a","__expose","handleConfirm","handleCancel","handleClose","slotParams","shallowReadonly","setActive","active","findPositionalParent","parentElement","currentHeight","currentWidth","withSize","offsetWidth","offsetHeight","offsetTop","offsetLeft","isConfirm","result","isPromise","handleShow","handleHide","handleMaskClose","handleModalResize","entry","box","_createBlock","_unref","Masker","$event","_withCtx","show","_createElementVNode","_normalizeClass","_createVNode","ResizeObserver","_createElementBlock","_renderSlot","_ctx","_normalizeProps","_guardReactiveProps","Renderer","_createTextVNode","_toDisplayString","Icon","_mergeProps","_normalizeStyle"],"mappings":"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"}