UNPKG

casc-cesium

Version:

Vue 3.x components for CesiumJS.

1 lines 15.8 kB
{"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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"}