UNPKG

vue-cesium-jyt

Version:
1 lines 19.3 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/ui/tooltip/index.ts"],"sourcesContent":["import type { ExtractPropTypes, PropType } from 'vue'\nimport { h, defineComponent, ref, computed, watch, onBeforeUnmount, Transition, getCurrentInstance } from 'vue'\n\nimport useAnchor, { useAnchorProps } from '@vue-cesium/composables/private/use-anchor'\nimport useScrollTarget from '@vue-cesium/composables/private/use-scroll-target'\nimport useModelToggle, { useModelToggleProps, useModelToggleEmits } from '@vue-cesium/composables/private/use-model-toggle'\nimport usePortal from '@vue-cesium/composables/private/use-portal'\nimport useTransition, { useTransitionProps } from '@vue-cesium/composables/private/use-transition'\nimport useTick from '@vue-cesium/composables/private/use-tick'\nimport useTimeout from '@vue-cesium/composables/private/use-timeout'\n\nimport { getScrollTarget } from '@vue-cesium/utils/private/scroll'\nimport { getTouchTarget } from '@vue-cesium/utils/private/touch'\nimport { addEvt, cleanEvt } from '@vue-cesium/utils/private/event'\nimport { clearSelection } from '@vue-cesium/utils/private/selection'\nimport { hSlot } from '@vue-cesium/utils/private/render'\nimport { validatePosition, validateOffset, setPosition, parsePosition } from '@vue-cesium/utils/private/position-engine'\nimport { platform } from '@vue-cesium/utils/platform'\n\nexport const tooltipProps = {\n ...useAnchorProps,\n ...useModelToggleProps,\n ...useTransitionProps,\n\n maxHeight: {\n type: String,\n default: null\n },\n maxWidth: {\n type: String,\n default: null\n },\n\n transitionShow: {\n type: String,\n default: 'jump-down'\n },\n transitionHide: {\n type: String,\n default: 'jump-up'\n },\n\n anchor: {\n type: String as PropType<\n | 'top left'\n | 'top middle'\n | 'top right'\n | 'top start'\n | 'top end'\n | 'center left'\n | 'center middle'\n | 'center right'\n | 'center start'\n | 'center end'\n | 'bottom left'\n | 'bottom middle'\n | 'bottom right'\n | 'bottom start'\n | 'bottom end'\n >,\n default: 'bottom middle',\n validator: validatePosition\n },\n self: {\n type: String as PropType<\n | 'top left'\n | 'top middle'\n | 'top right'\n | 'top start'\n | 'top end'\n | 'center left'\n | 'center middle'\n | 'center right'\n | 'center start'\n | 'center end'\n | 'bottom left'\n | 'bottom middle'\n | 'bottom right'\n | 'bottom start'\n | 'bottom end'\n >,\n default: 'top middle',\n validator: validatePosition\n },\n offset: {\n type: Array,\n default: () => [14, 14],\n validator: validateOffset\n },\n\n scrollTarget: String,\n\n delay: {\n type: Number,\n default: 0\n },\n\n hideDelay: {\n type: Number,\n default: 0\n },\n\n persistent: {\n type: Boolean\n }\n}\n\nexport default defineComponent({\n name: 'VcTooltip',\n\n inheritAttrs: false,\n\n props: tooltipProps,\n\n emits: [...useModelToggleEmits],\n\n setup(props, { slots, emit, attrs }) {\n let unwatchPosition, observer\n const vm = getCurrentInstance()\n\n const innerRef = ref(null)\n const showing = ref(false)\n\n const anchorOrigin = computed(() => parsePosition(props.anchor, true))\n const selfOrigin = computed(() => parsePosition(props.self, true))\n const hideOnRouteChange = computed(() => props.persistent !== true)\n\n const { registerTick, removeTick, prepareTick } = useTick()\n const { registerTimeout, removeTimeout } = useTimeout()\n const { transition, transitionStyle } = useTransition(props, showing)\n const { localScrollTarget, changeScrollEvent, unconfigureScrollTarget } = useScrollTarget(props, configureScrollTarget)\n\n const { anchorEl, canShow, anchorEvents } = useAnchor({ showing, configureAnchorEl, avoidEmit: undefined })\n\n const { show, hide } = useModelToggle({\n showing,\n canShow,\n handleShow,\n handleHide,\n hideOnRouteChange,\n processOnMount: true\n })\n\n Object.assign(anchorEvents, { delayShow, delayHide })\n\n const { showPortal, hidePortal, renderPortal } = usePortal(vm, innerRef, renderPortalContent)\n\n function handleShow(evt) {\n removeTick()\n removeTimeout()\n\n showPortal()\n\n registerTick(() => {\n observer = new MutationObserver(() => updatePosition())\n observer.observe(innerRef.value, { attributes: false, childList: true, characterData: true, subtree: true })\n updatePosition()\n configureScrollTarget()\n })\n prepareTick()\n\n if (unwatchPosition === void 0) {\n unwatchPosition = watch(() => props.self + '|' + props.anchor, updatePosition)\n }\n\n registerTimeout(() => {\n // eslint-disable-next-line vue/require-explicit-emits\n emit('show', evt)\n }, props.transitionDuration)\n }\n\n function handleHide(evt) {\n removeTick()\n removeTimeout()\n\n anchorCleanup()\n\n registerTimeout(() => {\n hidePortal()\n // eslint-disable-next-line vue/require-explicit-emits\n emit('hide', evt)\n }, props.transitionDuration)\n }\n\n function anchorCleanup() {\n if (observer !== void 0) {\n observer.disconnect()\n observer = void 0\n }\n\n if (unwatchPosition !== void 0) {\n unwatchPosition()\n unwatchPosition = void 0\n }\n\n unconfigureScrollTarget()\n cleanEvt(anchorEvents, 'tooltipTemp')\n }\n\n function updatePosition() {\n const el = innerRef.value\n\n if (anchorEl.value === void 0 || !el) {\n return\n }\n\n setPosition({\n el,\n offset: props.offset,\n anchorEl: anchorEl.value,\n anchorOrigin: anchorOrigin.value,\n selfOrigin: selfOrigin.value,\n maxHeight: props.maxHeight,\n maxWidth: props.maxWidth\n })\n }\n\n function delayShow(evt) {\n if (platform().isPhone === true) {\n clearSelection()\n document.body.classList.add('non-selectable')\n\n const target = getTouchTarget(anchorEl.value)\n const evts = ['touchmove', 'touchcancel', 'touchend', 'click'].map(e => [target, e, '__delayHide', 'passiveCapture'])\n\n addEvt(anchorEvents, 'tooltipTemp', evts)\n }\n\n registerTimeout(() => {\n show(evt)\n }, props.delay)\n }\n\n function delayHide(evt) {\n removeTimeout()\n\n if (platform().isPhone === true) {\n cleanEvt(anchorEvents, 'tooltipTemp')\n clearSelection()\n // delay needed otherwise selection still occurs\n setTimeout(() => {\n document.body.classList.remove('non-selectable')\n }, 10)\n }\n\n registerTimeout(() => {\n hide(evt)\n }, props.hideDelay)\n }\n\n function configureAnchorEl() {\n if (props.noParentEvent === true || anchorEl.value === void 0) {\n return\n }\n\n const evts =\n platform().isPhone === true\n ? [[anchorEl.value, 'touchstart', 'delayShow', 'passive']]\n : [\n [anchorEl.value, 'mouseenter', 'delayShow', 'passive'],\n [anchorEl.value, 'mouseleave', 'delayHide', 'passive']\n ]\n\n addEvt(anchorEvents, 'anchor', evts)\n }\n\n function configureScrollTarget() {\n if (anchorEl.value !== void 0 || props.scrollTarget !== void 0) {\n localScrollTarget.value = getScrollTarget(anchorEl.value, props.scrollTarget)\n const fn = props.noParentEvent === true ? updatePosition : hide\n\n changeScrollEvent(localScrollTarget.value, fn)\n }\n }\n\n function getTooltipContent() {\n return showing.value === true\n ? h(\n 'div',\n {\n ...attrs,\n ref: innerRef,\n class: ['vc-tooltip vc-tooltip--style vc-position-engine no-pointer-events', attrs.class],\n style: transitionStyle.value,\n role: 'complementary'\n },\n hSlot(slots.default)\n )\n : null\n }\n\n function renderPortalContent() {\n return h(\n Transition,\n {\n name: transition.value,\n appear: true\n },\n getTooltipContent\n )\n }\n\n onBeforeUnmount(anchorCleanup)\n\n // expose public methods\n Object.assign(vm?.proxy, { updatePosition })\n\n return renderPortal\n }\n})\n\n// export type VcTooltipProps = ExtractPropTypes<typeof tooltipProps>\n\nexport interface VcTooltipProps {\n /**\n * One of VueCesium's embedded transitions.\n * Default value: jump-down\n */\n transitionShow?: string | undefined\n /**\n * One of VueCesium's embedded transitions.\n * Default value: jump-up\n */\n transitionHide?: string | undefined\n /**\n * Transition duration (in milliseconds, without unit).\n * Default value: 300\n */\n transitionDuration?: string | number | undefined\n /**\n * Model of the component defining shown/hidden state; Either use this property (along with a listener for 'update:model-value' event) OR use v-model directive.\n */\n modelValue?: boolean\n /**\n * The maximum height of the Tooltip; Size in CSS units, including unit name.\n */\n maxHeight?: string | undefined\n /**\n * The maximum width of the Tooltip; Size in CSS units, including unit name.\n */\n maxWidth?: string | undefined\n /**\n * Two values setting the starting position or anchor point of the Tooltip relative to its target.\n * Default value: bottom middle\n */\n anchor?:\n | 'top left'\n | 'top middle'\n | 'top right'\n | 'top start'\n | 'top end'\n | 'center left'\n | 'center middle'\n | 'center right'\n | 'center start'\n | 'center end'\n | 'bottom left'\n | 'bottom middle'\n | 'bottom right'\n | 'bottom start'\n | 'bottom end'\n | undefined\n /**\n * Two values setting the Tooltip's own position relative to its target.\n * Default value: top middle\n */\n self?:\n | 'top left'\n | 'top middle'\n | 'top right'\n | 'top start'\n | 'top end'\n | 'center left'\n | 'center middle'\n | 'center right'\n | 'center start'\n | 'center end'\n | 'bottom left'\n | 'bottom middle'\n | 'bottom right'\n | 'bottom start'\n | 'bottom end'\n | undefined\n /**\n * An array of two numbers to offset the Tooltip horizontally and vertically in pixels.\n * Default value: [14, 14]\n */\n offset?: any[] | undefined\n /**\n * CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one.\n */\n scrollTarget?: string | undefined\n /**\n * Configure a target element to trigger Tooltip toggle; 'true' means it enables the parent DOM element, 'false' means it disables attaching events to any DOM elements; By using a String (CSS selector) it attaches the events to the specified DOM element (if it exists).\n * Default value: true\n */\n target?: boolean | string | undefined\n /**\n * Skips attaching events to the target DOM element (that trigger the element to get shown).\n */\n noParentEvent?: boolean | undefined\n /**\n * Configure Tooltip to appear with delay.\n */\n delay?: number | undefined\n /**\n * Configure Tooltip to disappear with delay.\n */\n hideDelay?: number | undefined\n tip?: string | undefined\n persistent?: boolean\n contextMenu?: boolean\n /**\n * Emitted when showing/hidden state changes; Is also used by v-model.\n * @param value New state (showing/hidden)\n */\n 'onUpdate:modelValue'?: (value: boolean) => void\n /**\n * Emitted after component has triggered show().\n * @param evt JS event object\n */\n onShow?: (evt: any) => void\n /**\n * Emitted when component triggers show() but before it finishes doing it.\n * @param evt JS event object\n */\n onBeforeShow?: (evt: any) => void\n /**\n * Emitted after component has triggered hide().\n * @param evt JS event object\n */\n onHide?: (evt: any) => void\n /**\n * Emitted when component triggers hide() but before it finishes doing it.\n * @param evt JS event object\n */\n onBeforeHide?: (evt: any) => void\n}\n"],"names":[],"mappings":"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"}