tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 11.9 kB
Source Map (JSON)
{"version":3,"file":"popup.mjs","sources":["../../src/popup/popup.tsx"],"sourcesContent":["import { computed, watch, defineComponent, h, ref, toRefs, nextTick, Teleport, Transition } from 'vue';\nimport { CloseIcon } from 'tdesign-icons-vue-next';\n\nimport popupProps from './props';\nimport TOverlay from '../overlay';\nimport config from '../config';\nimport { TdPopupProps } from './type';\nimport { TNode } from '../shared';\nimport useVModel from '../hooks/useVModel';\nimport { usePrefixClass } from '../hooks/useClass';\nimport { useLockScroll } from '../hooks/useLockScroll';\nimport { useContent, useTNodeJSX } from '../hooks/tnode';\nimport useTeleport from '../hooks/useTeleport';\n\nconst { prefix } = config;\n\nexport default defineComponent({\n name: `${prefix}-popup`,\n components: { TNode, TOverlay },\n inheritAttrs: false,\n props: popupProps,\n emits: ['open', 'close', 'opened', 'closed', 'visible-change', 'update:visible', 'update:modelValue'],\n setup(props, context) {\n const popupClass = usePrefixClass('popup');\n\n const popupRef = ref<HTMLElement>();\n\n const renderTNodeContent = useContent();\n\n const renderTNodeJSX = useTNodeJSX();\n\n const { visible, modelValue } = toRefs(props);\n const [currentVisible, setCurrentVisible] = useVModel(\n visible,\n modelValue,\n props.defaultVisible,\n props.onVisibleChange,\n 'visible',\n );\n\n const wrapperVisible = ref(currentVisible.value);\n const innerVisible = ref(currentVisible.value);\n\n // 因为开启 destroyOnClose,会影响 transition 的动画,因此需要前后设置 visible\n watch(currentVisible, (v) => {\n if (v) {\n wrapperVisible.value = v;\n if (props.destroyOnClose) {\n nextTick(() => {\n innerVisible.value = v;\n });\n } else {\n innerVisible.value = v;\n }\n } else {\n innerVisible.value = v;\n }\n });\n\n const rootStyles = computed(() => {\n const styles: Record<string, any> = {};\n\n if (props.zIndex) {\n styles.zIndex = `${props.zIndex}`;\n }\n return { ...(context.attrs.style as Object), ...styles };\n });\n\n const contentClasses = computed(() => ({\n [`${popupClass.value}--${props.placement}`]: true,\n }));\n\n const contentTransitionName = computed(() => {\n const { transitionName, placement } = props;\n\n if (transitionName) return transitionName;\n if (placement === 'center') return 'fade-zoom';\n return `slide-${placement}`;\n });\n\n const closeBtnNode = computed(() => renderTNodeJSX('closeBtn', h(CloseIcon, { size: '24px' })));\n\n const handleCloseClick = (e: MouseEvent) => {\n props.onClose?.({ e });\n setCurrentVisible(false, { trigger: 'close-btn' });\n };\n\n const handleOverlayClick = (args: { e: MouseEvent }) => {\n const { e } = args;\n if (!props.closeOnOverlayClick) {\n return;\n }\n props.onClose?.({ e });\n setCurrentVisible(false, { trigger: 'overlay' });\n };\n\n const afterLeave = () => {\n wrapperVisible.value = false;\n props.onClosed?.();\n };\n\n const afterEnter = () => props.onOpened?.();\n\n const teleportElement = useTeleport(() => props.attach);\n\n watch(\n () => currentVisible.value,\n (val) => {\n if (val) {\n props.onOpen?.();\n }\n },\n );\n\n useLockScroll(popupRef, () => wrapperVisible.value && props.preventScrollThrough, popupClass.value);\n\n return () => {\n const renderOverlayContent = (\n <TOverlay\n {...props.overlayProps}\n visible={innerVisible.value && props.showOverlay}\n onClick={handleOverlayClick}\n />\n );\n\n const renderCloseBtn = closeBtnNode.value && (\n <div class={`${popupClass.value}__close`} onClick={handleCloseClick}>\n {closeBtnNode.value}\n </div>\n );\n\n const renderContent = (\n <Transition\n name={contentTransitionName.value}\n duration={props.duration}\n onAfterEnter={afterEnter}\n onAfterLeave={afterLeave}\n >\n <div\n v-show={innerVisible.value}\n ref={popupRef}\n {...context.attrs}\n class={[popupClass.value, context.attrs.class, contentClasses.value]}\n style={rootStyles.value}\n >\n {renderCloseBtn}\n\n {renderTNodeContent('default', 'content')}\n </div>\n </Transition>\n );\n\n const renderPopupContent = (\n <Teleport to={teleportElement.value} disabled={!teleportElement.value}>\n {renderOverlayContent}\n {renderContent}\n </Teleport>\n );\n\n return (!props.destroyOnClose || wrapperVisible.value) && renderPopupContent;\n };\n },\n});\n"],"names":["prefix","config","defineComponent","name","components","TNode","TOverlay","inheritAttrs","props","popupProps","emits","setup","context","popupClass","usePrefixClass","popupRef","ref","renderTNodeContent","useContent","renderTNodeJSX","useTNodeJSX","_toRefs","toRefs","visible","modelValue","_useVModel","useVModel","defaultVisible","onVisibleChange","_useVModel2","_slicedToArray","currentVisible","setCurrentVisible","wrapperVisible","value","innerVisible","watch","v","destroyOnClose","nextTick","rootStyles","computed","styles","zIndex","concat","_objectSpread","attrs","style","contentClasses","_defineProperty","placement","contentTransitionName","transitionName","closeBtnNode","h","CloseIcon","size","handleCloseClick","e","_props$onClose","onClose","call","trigger","handleOverlayClick","args","_props$onClose2","closeOnOverlayClick","afterLeave","_props$onClosed","onClosed","afterEnter","_props$onOpened","onOpened","teleportElement","useTeleport","attach","val","_props$onOpen","onOpen","useLockScroll","preventScrollThrough","renderOverlayContent","_createVNode","_mergeProps","overlayProps","showOverlay","renderCloseBtn","renderContent","Transition","duration","default","_default","_withDirectives","class","_vShow","renderPopupContent","Teleport"],"mappings":"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"}