UNPKG

tdesign-mobile-vue

Version:
1 lines 11.6 kB
{"version":3,"file":"popup.mjs","sources":["../../src/popup/popup.tsx"],"sourcesContent":["import { computed, watch, defineComponent, h, ref, 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 { useDefault, TNode, isBrowser } from '../shared';\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 [currentVisible, setVisible] = useDefault<TdPopupProps['visible'], TdPopupProps>(\n props,\n context.emit,\n 'visible',\n 'visible-change',\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 setVisible(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 setVisible(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 setVisible(true);\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 name={contentTransitionName.value} onAfterEnter={afterEnter} onAfterLeave={afterLeave}>\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","_useDefault","useDefault","emit","_useDefault2","_slicedToArray","currentVisible","setVisible","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","default","_default","_withDirectives","class","_vShow","renderPopupContent","Teleport"],"mappings":"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"}