vue-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 15.4 kB
Source Map (JSON)
{"version":3,"file":"position-engine.mjs","sources":["../../../../../packages/utils/private/position-engine.ts"],"sourcesContent":["import { getScrollbarWidth } from './scroll'\nimport { platform } from '../platform'\nimport { CSSProperties } from 'vue'\n\nlet vpLeft, vpTop\n\nexport function validatePosition(pos) {\n const parts = pos.split(' ')\n if (parts.length !== 2) {\n return false\n }\n if (['top', 'center', 'bottom'].includes(parts[0]) !== true) {\n console.error('Anchor/Self position must start with one of top/center/bottom')\n return false\n }\n if (['left', 'middle', 'right', 'start', 'end'].includes(parts[1]) !== true) {\n console.error('Anchor/Self position must end with one of left/middle/right/start/end')\n return false\n }\n return true\n}\n\nexport function validateOffset(val) {\n if (!val) {\n return true\n }\n if (val.length !== 2) {\n return false\n }\n if (typeof val[0] !== 'number' || typeof val[1] !== 'number') {\n return false\n }\n return true\n}\n\nconst horizontalPos = {\n 'start#ltr': 'left',\n 'start#rtl': 'right',\n 'end#ltr': 'right',\n 'end#rtl': 'left'\n}\n;['left', 'middle', 'right'].forEach(pos => {\n horizontalPos[`${pos}#ltr`] = pos\n horizontalPos[`${pos}#rtl`] = pos\n})\n\nexport function parsePosition(pos, rtl) {\n const parts = pos.split(' ')\n return {\n vertical: parts[0],\n horizontal: horizontalPos[`${parts[1]}#${rtl === true ? 'rtl' : 'ltr'}`]\n }\n}\n\nexport function validateCover(val) {\n if (val === true || val === false) {\n return true\n }\n return validatePosition(val)\n}\n\nexport function getAnchorProps(el, offset) {\n let { top, left, right, bottom, width, height } = el.getBoundingClientRect()\n\n if (offset !== void 0) {\n top -= offset[1]\n left -= offset[0]\n bottom += offset[1]\n right += offset[0]\n\n width += offset[0]\n height += offset[1]\n }\n\n return {\n top,\n left,\n right,\n bottom,\n width,\n height,\n middle: left + (right - left) / 2,\n center: top + (bottom - top) / 2\n }\n}\n\nexport function getTargetProps(el) {\n return {\n top: 0,\n center: el.offsetHeight / 2,\n bottom: el.offsetHeight,\n left: 0,\n middle: el.offsetWidth / 2,\n right: el.offsetWidth\n }\n}\n\n// cfg: { el, anchorEl, anchorOrigin, selfOrigin, offset, absoluteOffset, cover, fit, maxHeight, maxWidth }\nexport function setPosition(cfg) {\n if (platform().isIOS === true && window.visualViewport !== void 0) {\n // uses the vc-position-engine CSS class\n\n const el = document.body.style\n const { offsetLeft: left, offsetTop: top } = window.visualViewport\n\n if (left !== vpLeft) {\n el.setProperty('--vc-pe-left', left + 'px')\n vpLeft = left\n }\n if (top !== vpTop) {\n el.setProperty('--vc-pe-top', top + 'px')\n vpTop = top\n }\n }\n\n let anchorProps: any = {}\n\n // scroll position might change\n // if max-height/-width changes, so we\n // need to restore it after we calculate\n // the new positioning\n const { scrollLeft, scrollTop } = cfg.el\n\n if (cfg.absoluteOffset === void 0) {\n anchorProps = getAnchorProps(cfg.anchorEl, cfg.cover === true ? [0, 0] : cfg.offset)\n } else {\n const { top: anchorTop, left: anchorLeft } = cfg.anchorEl.getBoundingClientRect(),\n top = anchorTop + cfg.absoluteOffset.top,\n left = anchorLeft + cfg.absoluteOffset.left\n\n anchorProps = { top, left, width: 1, height: 1, right: left + 1, center: top, middle: left, bottom: top + 1 }\n }\n\n let elStyle: CSSProperties = {\n maxHeight: cfg.maxHeight,\n maxWidth: cfg.maxWidth,\n visibility: 'visible'\n }\n\n if (cfg.fit === true || cfg.cover === true) {\n elStyle.minWidth = anchorProps.width + 'px'\n if (cfg.cover === true) {\n elStyle.minHeight = anchorProps.height + 'px'\n }\n }\n\n Object.assign(cfg.el.style, elStyle)\n\n const targetProps = getTargetProps(cfg.el),\n props: any = {\n top: anchorProps[cfg.anchorOrigin.vertical] - targetProps[cfg.selfOrigin.vertical],\n left: anchorProps[cfg.anchorOrigin.horizontal] - targetProps[cfg.selfOrigin.horizontal]\n }\n\n applyBoundaries(props, anchorProps, targetProps, cfg.anchorOrigin, cfg.selfOrigin)\n\n elStyle = {\n top: props.top + 'px',\n left: props.left + 'px'\n }\n\n if (props.maxHeight !== void 0) {\n elStyle.maxHeight = props.maxHeight + 'px'\n\n if (anchorProps.height > props.maxHeight) {\n elStyle.minHeight = elStyle.maxHeight\n }\n }\n if (props.maxWidth !== void 0) {\n elStyle.maxWidth = props.maxWidth + 'px'\n\n if (anchorProps.width > props.maxWidth) {\n elStyle.minWidth = elStyle.maxWidth\n }\n }\n\n Object.assign(cfg.el.style, elStyle)\n\n // restore scroll position\n if (cfg.el.scrollTop !== scrollTop) {\n cfg.el.scrollTop = scrollTop\n }\n if (cfg.el.scrollLeft !== scrollLeft) {\n cfg.el.scrollLeft = scrollLeft\n }\n}\n\nfunction applyBoundaries(props, anchorProps, targetProps, anchorOrigin, selfOrigin) {\n const currentHeight = targetProps.bottom,\n currentWidth = targetProps.right,\n margin = getScrollbarWidth(),\n innerHeight = window.innerHeight - margin,\n innerWidth = document.body.clientWidth\n\n if (props.top < 0 || props.top + currentHeight > innerHeight) {\n if (selfOrigin.vertical === 'center') {\n props.top = anchorProps[anchorOrigin.vertical] > innerHeight / 2 ? Math.max(0, innerHeight - currentHeight) : 0\n props.maxHeight = Math.min(currentHeight, innerHeight)\n } else if (anchorProps[anchorOrigin.vertical] > innerHeight / 2) {\n const anchorY = Math.min(\n innerHeight,\n anchorOrigin.vertical === 'center' ? anchorProps.center : anchorOrigin.vertical === selfOrigin.vertical ? anchorProps.bottom : anchorProps.top\n )\n props.maxHeight = Math.min(currentHeight, anchorY)\n props.top = Math.max(0, anchorY - currentHeight)\n } else {\n props.top = Math.max(\n 0,\n anchorOrigin.vertical === 'center' ? anchorProps.center : anchorOrigin.vertical === selfOrigin.vertical ? anchorProps.top : anchorProps.bottom\n )\n props.maxHeight = Math.min(currentHeight, innerHeight - props.top)\n }\n }\n\n if (props.left < 0 || props.left + currentWidth > innerWidth) {\n props.maxWidth = Math.min(currentWidth, innerWidth)\n if (selfOrigin.horizontal === 'middle') {\n props.left = anchorProps[anchorOrigin.horizontal] > innerWidth / 2 ? Math.max(0, innerWidth - currentWidth) : 0\n } else if (anchorProps[anchorOrigin.horizontal] > innerWidth / 2) {\n const anchorX = Math.min(\n innerWidth,\n anchorOrigin.horizontal === 'middle'\n ? anchorProps.middle\n : anchorOrigin.horizontal === selfOrigin.horizontal\n ? anchorProps.right\n : anchorProps.left\n )\n props.maxWidth = Math.min(currentWidth, anchorX)\n props.left = Math.max(0, anchorX - props.maxWidth)\n } else {\n props.left = Math.max(\n 0,\n anchorOrigin.horizontal === 'middle'\n ? anchorProps.middle\n : anchorOrigin.horizontal === selfOrigin.horizontal\n ? anchorProps.left\n : anchorProps.right\n )\n props.maxWidth = Math.min(currentWidth, innerWidth - props.left)\n }\n }\n}\n"],"names":[],"mappings":"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"}