xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 7.46 kB
Source Map (JSON)
{"version":3,"file":"tooltip.mjs","sources":["../../src/tooltip/tooltip.tsx"],"sourcesContent":["import { computed, defineComponent, onMounted, ref, toRefs, watch, getCurrentInstance } from 'vue';\nimport isFunction from 'lodash/isFunction';\nimport omit from 'lodash/omit';\nimport props from './props';\nimport popupProps from '../popup/props';\nimport Popup, { PopupVisibleChangeContext } from '../popup';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport { useTNodeJSX, useContent } from '../hooks/tnode';\nimport { useMouse } from './util';\nimport useVModel from '../hooks/useVModel';\n\nexport default defineComponent({\n name: 'XTooltip',\n props: {\n ...popupProps,\n ...props,\n },\n setup(props, ctx) {\n const timer = ref(null);\n const popupRef = ref(null);\n\n const { visible, modelValue } = toRefs(props);\n const [innerVisible, setInnerVisible] = useVModel(\n visible,\n modelValue,\n props.defaultVisible,\n props.onVisibleChange,\n 'visible',\n );\n const vm = getCurrentInstance();\n const innerTooltipVisible = ref(props.visible || props.defaultVisible);\n const classPrefix = usePrefixClass();\n const renderTNodeJSX = useTNodeJSX();\n const renderContent = useContent();\n const { x } = useMouse();\n const offsetX = ref(x.value);\n\n onMounted(() => {\n if (props.duration && innerTooltipVisible.value) {\n timer.value = setTimeout(() => {\n setInnerVisible(false, {});\n clearTimeout(timer.value);\n timer.value = null;\n }, props.duration);\n }\n });\n\n const onTipVisibleChange = (val: boolean, ctx?: PopupVisibleChangeContext) => {\n // 因 props={this.getPopupProps()} 已经透传 onVisibleChange props,此处不再需要使用 emitEvent\n if (timer.value && ctx?.trigger !== 'document') return;\n if (val) {\n offsetX.value = x.value;\n }\n setInnerVisible(val, ctx);\n };\n\n const tooltipOverlayClassName = computed(() => {\n return [\n `${classPrefix.value}-tooltip`,\n { [`${classPrefix.value}-tooltip--${props.theme}`]: props.theme },\n props.overlayClassName,\n ];\n });\n\n const popupProps = computed(() => ({\n ...(vm?.vnode.props || {}),\n placement: props.placement === 'mouse' ? 'bottom-left' : props.placement,\n showArrow: props.placement === 'mouse' ? false : props.showArrow,\n overlayClassName: tooltipOverlayClassName.value,\n onVisibleChange: onTipVisibleChange,\n disabled: props.disabled,\n }));\n\n const overlayInnerStyle = computed(() => {\n if (props.placement !== 'mouse' || offsetX.value === 0) {\n return props.overlayInnerStyle;\n }\n const offsetStyle = (triggerEl: HTMLElement) => ({\n transform: `translateX(${offsetX.value - triggerEl.getBoundingClientRect().left}px)`,\n });\n if (props.overlayInnerStyle) {\n return (triggerEl: HTMLElement, popupEl: HTMLElement) => ({\n ...offsetStyle(triggerEl),\n ...(isFunction(props.overlayInnerStyle)\n ? props.overlayInnerStyle(triggerEl, popupEl)\n : props.overlayInnerStyle),\n });\n }\n return offsetStyle;\n });\n\n watch(\n () => innerTooltipVisible.value,\n () => {\n if (timer.value && !innerTooltipVisible.value) {\n clearTimeout(timer.value);\n timer.value = null;\n }\n },\n );\n\n const onPopupUpdate = () => {\n popupRef.value?.update?.();\n };\n\n /**\n * 透传更新popup实例方法,供外部调用\n */\n ctx.expose({\n updatePopper: onPopupUpdate,\n });\n return () => {\n const content = renderTNodeJSX('content');\n if (!content && !props.content) {\n return renderContent('default', 'triggerElement');\n }\n return (\n <Popup\n {...omit(popupProps.value, ['content', 'default'])}\n ref={popupRef}\n overlayInnerStyle={overlayInnerStyle.value}\n visible={innerVisible.value}\n v-slots={{\n content: () => content,\n }}\n >\n {renderContent('default', 'triggerElement')}\n </Popup>\n );\n };\n },\n});\n"],"names":["name","setup","innerVisible","setInnerVisible","onMounted","props","timer","clearTimeout","offsetX","onVisibleChange","transform","watch","updatePopper","_createVNode","_mergeProps","omit"],"mappings":"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"}