{"version":3,"file":"index.js","sources":["../../src/propertyUtils.js","../../src/utils.js","../../src/getOffsetParent.js","../../src/isAncestorFixed.js","../../src/getVisibleRectForElement.js","../../src/adjustForViewport.js","../../src/getRegion.js","../../src/getAlignOffset.js","../../src/getElFuturePos.js","../../src/align/align.js","../../src/align/alignElement.js","../../src/align/alignPoint.js"],"sourcesContent":["let vendorPrefix;\n\nconst jsCssMap = {\n Webkit: '-webkit-',\n Moz: '-moz-',\n // IE did it wrong again ...\n ms: '-ms-',\n O: '-o-',\n};\n\nfunction getVendorPrefix() {\n if (vendorPrefix !== undefined) {\n return vendorPrefix;\n }\n vendorPrefix = '';\n const style = document.createElement('p').style;\n const testProp = 'Transform';\n for (const key in jsCssMap) {\n if (key + testProp in style) {\n vendorPrefix = key;\n }\n }\n return vendorPrefix;\n}\n\nfunction getTransitionName() {\n return getVendorPrefix()\n ? `${getVendorPrefix()}TransitionProperty`\n : 'transitionProperty';\n}\n\nexport function getTransformName() {\n return getVendorPrefix() ? `${getVendorPrefix()}Transform` : 'transform';\n}\n\nexport function setTransitionProperty(node, value) {\n const name = getTransitionName();\n if (name) {\n node.style[name] = value;\n if (name !== 'transitionProperty') {\n node.style.transitionProperty = value;\n }\n }\n}\n\nfunction setTransform(node, value) {\n const name = getTransformName();\n if (name) {\n node.style[name] = value;\n if (name !== 'transform') {\n node.style.transform = value;\n }\n }\n}\n\nexport function getTransitionProperty(node) {\n return node.style.transitionProperty || node.style[getTransitionName()];\n}\n\nexport function getTransformXY(node) {\n const style = window.getComputedStyle(node, null);\n const transform =\n style.getPropertyValue('transform') ||\n style.getPropertyValue(getTransformName());\n if (transform && transform !== 'none') {\n const matrix = transform.replace(/[^0-9\\-.,]/g, '').split(',');\n return {\n x: parseFloat(matrix[12] || matrix[4], 0),\n y: parseFloat(matrix[13] || matrix[5], 0),\n };\n }\n return {\n x: 0,\n y: 0,\n };\n}\n\nconst matrix2d = /matrix\\((.*)\\)/;\nconst matrix3d = /matrix3d\\((.*)\\)/;\n\nexport function setTransformXY(node, xy) {\n const style = window.getComputedStyle(node, null);\n const transform =\n style.getPropertyValue('transform') ||\n style.getPropertyValue(getTransformName());\n if (transform && transform !== 'none') {\n let arr;\n let match2d = transform.match(matrix2d);\n if (match2d) {\n match2d = match2d[1];\n arr = match2d.split(',').map(item => {\n return parseFloat(item, 10);\n });\n arr[4] = xy.x;\n arr[5] = xy.y;\n setTransform(node, `matrix(${arr.join(',')})`);\n } else {\n const match3d = transform.match(matrix3d)[1];\n arr = match3d.split(',').map(item => {\n return parseFloat(item, 10);\n });\n arr[12] = xy.x;\n arr[13] = xy.y;\n setTransform(node, `matrix3d(${arr.join(',')})`);\n }\n } else {\n setTransform(\n node,\n `translateX(${xy.x}px) translateY(${xy.y}px) translateZ(0)`,\n );\n }\n}\n","import {\n setTransitionProperty,\n getTransitionProperty,\n getTransformXY,\n setTransformXY,\n getTransformName,\n} from './propertyUtils';\n\nconst RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\n\nlet getComputedStyleX;\n\n// https://stackoverflow.com/a/3485654/3040605\nfunction forceRelayout(elem) {\n const originalStyle = elem.style.display;\n elem.style.display = 'none';\n elem.offsetHeight; // eslint-disable-line\n elem.style.display = originalStyle;\n}\n\nfunction css(el, name, v) {\n let value = v;\n if (typeof name === 'object') {\n for (const i in name) {\n if (name.hasOwnProperty(i)) {\n css(el, i, name[i]);\n }\n }\n return undefined;\n }\n if (typeof value !== 'undefined') {\n if (typeof value === 'number') {\n value = `${value}px`;\n }\n el.style[name] = value;\n return undefined;\n }\n return getComputedStyleX(el, name);\n}\n\nfunction getClientPosition(elem) {\n let box;\n let x;\n let y;\n const doc = elem.ownerDocument;\n const body = doc.body;\n const docElem = doc && doc.documentElement;\n // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式\n box = elem.getBoundingClientRect();\n\n // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop\n // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确\n // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin\n\n x = box.left;\n y = box.top;\n\n // In IE, most of the time, 2 extra pixels are added to the top and left\n // due to the implicit 2-pixel inset border. In IE6/7 quirks mode and\n // IE6 standards mode, this border can be overridden by setting the\n // document element's border to zero -- thus, we cannot rely on the\n // offset always being 2 pixels.\n\n // In quirks mode, the offset can be determined by querying the body's\n // clientLeft/clientTop, but in standards mode, it is found by querying\n // the document element's clientLeft/clientTop. Since we already called\n // getClientBoundingRect we have already forced a reflow, so it is not\n // too expensive just to query them all.\n\n // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的\n // 窗口边框标准是设 documentElement ,quirks 时设置 body\n // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去\n // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置\n // 标准 ie 下 docElem.clientTop 就是 border-top\n // ie7 html 即窗口边框改变不了。永远为 2\n // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0\n\n x -= docElem.clientLeft || body.clientLeft || 0;\n y -= docElem.clientTop || body.clientTop || 0;\n\n return {\n left: x,\n top: y,\n };\n}\n\nfunction getScroll(w, top) {\n let ret = w[`page${top ? 'Y' : 'X'}Offset`];\n const method = `scroll${top ? 'Top' : 'Left'}`;\n if (typeof ret !== 'number') {\n const d = w.document;\n // ie6,7,8 standard mode\n ret = d.documentElement[method];\n if (typeof ret !== 'number') {\n // quirks mode\n ret = d.body[method];\n }\n }\n return ret;\n}\n\nfunction getScrollLeft(w) {\n return getScroll(w);\n}\n\nfunction getScrollTop(w) {\n return getScroll(w, true);\n}\n\nfunction getOffset(el) {\n const pos = getClientPosition(el);\n const doc = el.ownerDocument;\n const w = doc.defaultView || doc.parentWindow;\n pos.left += getScrollLeft(w);\n pos.top += getScrollTop(w);\n return pos;\n}\n\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\nfunction isWindow(obj) {\n // must use == for ie8\n /* eslint eqeqeq:0 */\n return obj !== null && obj !== undefined && obj == obj.window;\n}\n\nfunction getDocument(node) {\n if (isWindow(node)) {\n return node.document;\n }\n if (node.nodeType === 9) {\n return node;\n }\n return node.ownerDocument;\n}\n\nfunction _getComputedStyle(elem, name, cs) {\n let computedStyle = cs;\n let val = '';\n const d = getDocument(elem);\n computedStyle = computedStyle || d.defaultView.getComputedStyle(elem, null);\n\n // https://github.com/kissyteam/kissy/issues/61\n if (computedStyle) {\n val = computedStyle.getPropertyValue(name) || computedStyle[name];\n }\n\n return val;\n}\n\nconst _RE_NUM_NO_PX = new RegExp(`^(${RE_NUM})(?!px)[a-z%]+$`, 'i');\nconst RE_POS = /^(top|right|bottom|left)$/;\nconst CURRENT_STYLE = 'currentStyle';\nconst RUNTIME_STYLE = 'runtimeStyle';\nconst LEFT = 'left';\nconst PX = 'px';\n\nfunction _getComputedStyleIE(elem, name) {\n // currentStyle maybe null\n // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n let ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name];\n\n // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值\n // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n // 在 ie 下不对,需要直接用 offset 方式\n // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了\n\n // From the awesome hack by Dean Edwards\n // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n // If we're not dealing with a regular pixel number\n // but a number that has a weird ending, we need to convert it to pixels\n // exclude left right for relativity\n if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {\n // Remember the original values\n const style = elem.style;\n const left = style[LEFT];\n const rsLeft = elem[RUNTIME_STYLE][LEFT];\n\n // prevent flashing of content\n elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT];\n\n // Put in the new values to get a computed value out\n style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n ret = style.pixelLeft + PX;\n\n // Revert the changed values\n style[LEFT] = left;\n\n elem[RUNTIME_STYLE][LEFT] = rsLeft;\n }\n return ret === '' ? 'auto' : ret;\n}\n\nif (typeof window !== 'undefined') {\n getComputedStyleX = window.getComputedStyle\n ? _getComputedStyle\n : _getComputedStyleIE;\n}\n\nfunction getOffsetDirection(dir, option) {\n if (dir === 'left') {\n return option.useCssRight ? 'right' : dir;\n }\n return option.useCssBottom ? 'bottom' : dir;\n}\n\nfunction oppositeOffsetDirection(dir) {\n if (dir === 'left') {\n return 'right';\n } else if (dir === 'right') {\n return 'left';\n } else if (dir === 'top') {\n return 'bottom';\n } else if (dir === 'bottom') {\n return 'top';\n }\n}\n\n// 设置 elem 相对 elem.ownerDocument 的坐标\nfunction setLeftTop(elem, offset, option) {\n // set position first, in-case top/left are set even on static elem\n if (css(elem, 'position') === 'static') {\n elem.style.position = 'relative';\n }\n let presetH = -999;\n let presetV = -999;\n const horizontalProperty = getOffsetDirection('left', option);\n const verticalProperty = getOffsetDirection('top', option);\n const oppositeHorizontalProperty = oppositeOffsetDirection(\n horizontalProperty,\n );\n const oppositeVerticalProperty = oppositeOffsetDirection(verticalProperty);\n\n if (horizontalProperty !== 'left') {\n presetH = 999;\n }\n\n if (verticalProperty !== 'top') {\n presetV = 999;\n }\n let originalTransition = '';\n const originalOffset = getOffset(elem);\n if ('left' in offset || 'top' in offset) {\n originalTransition = getTransitionProperty(elem) || '';\n setTransitionProperty(elem, 'none');\n }\n if ('left' in offset) {\n elem.style[oppositeHorizontalProperty] = '';\n elem.style[horizontalProperty] = `${presetH}px`;\n }\n if ('top' in offset) {\n elem.style[oppositeVerticalProperty] = '';\n elem.style[verticalProperty] = `${presetV}px`;\n }\n // force relayout\n forceRelayout(elem);\n const old = getOffset(elem);\n const originalStyle = {};\n for (const key in offset) {\n if (offset.hasOwnProperty(key)) {\n const dir = getOffsetDirection(key, option);\n const preset = key === 'left' ? presetH : presetV;\n const off = originalOffset[key] - old[key];\n if (dir === key) {\n originalStyle[dir] = preset + off;\n } else {\n originalStyle[dir] = preset - off;\n }\n }\n }\n css(elem, originalStyle);\n // force relayout\n forceRelayout(elem);\n if ('left' in offset || 'top' in offset) {\n setTransitionProperty(elem, originalTransition);\n }\n const ret = {};\n for (const key in offset) {\n if (offset.hasOwnProperty(key)) {\n const dir = getOffsetDirection(key, option);\n const off = offset[key] - originalOffset[key];\n if (key === dir) {\n ret[dir] = originalStyle[dir] + off;\n } else {\n ret[dir] = originalStyle[dir] - off;\n }\n }\n }\n css(elem, ret);\n}\n\nfunction setTransform(elem, offset) {\n const originalOffset = getOffset(elem);\n const originalXY = getTransformXY(elem);\n const resultXY = { x: originalXY.x, y: originalXY.y };\n if ('left' in offset) {\n resultXY.x = originalXY.x + offset.left - originalOffset.left;\n }\n if ('top' in offset) {\n resultXY.y = originalXY.y + offset.top - originalOffset.top;\n }\n setTransformXY(elem, resultXY);\n}\n\nfunction setOffset(elem, offset, option) {\n if (option.ignoreShake) {\n const oriOffset = getOffset(elem);\n\n const oLeft = oriOffset.left.toFixed(0);\n const oTop = oriOffset.top.toFixed(0);\n const tLeft = offset.left.toFixed(0);\n const tTop = offset.top.toFixed(0);\n\n if (oLeft === tLeft && oTop === tTop) {\n return;\n }\n }\n\n if (option.useCssRight || option.useCssBottom) {\n setLeftTop(elem, offset, option);\n } else if (\n option.useCssTransform &&\n getTransformName() in document.body.style\n ) {\n setTransform(elem, offset, option);\n } else {\n setLeftTop(elem, offset, option);\n }\n}\n\nfunction each(arr, fn) {\n for (let i = 0; i < arr.length; i++) {\n fn(arr[i]);\n }\n}\n\nfunction isBorderBoxFn(elem) {\n return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\n\nconst BOX_MODELS = ['margin', 'border', 'padding'];\nconst CONTENT_INDEX = -1;\nconst PADDING_INDEX = 2;\nconst BORDER_INDEX = 1;\nconst MARGIN_INDEX = 0;\n\nfunction swap(elem, options, callback) {\n const old = {};\n const style = elem.style;\n let name;\n\n // Remember the old values, and insert the new ones\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n old[name] = style[name];\n style[name] = options[name];\n }\n }\n\n callback.call(elem);\n\n // Revert the old values\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n style[name] = old[name];\n }\n }\n}\n\nfunction getPBMWidth(elem, props, which) {\n let value = 0;\n let prop;\n let j;\n let i;\n for (j = 0; j < props.length; j++) {\n prop = props[j];\n if (prop) {\n for (i = 0; i < which.length; i++) {\n let cssProp;\n if (prop === 'border') {\n cssProp = `${prop}${which[i]}Width`;\n } else {\n cssProp = prop + which[i];\n }\n value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n }\n }\n }\n return value;\n}\n\nconst domUtils = {\n getParent(element) {\n let parent = element;\n do {\n if (parent.nodeType === 11 && parent.host) {\n parent = parent.host;\n } else {\n parent = parent.parentNode;\n }\n } while (parent && parent.nodeType !== 1 && parent.nodeType !== 9);\n return parent;\n },\n};\n\neach(['Width', 'Height'], name => {\n domUtils[`doc${name}`] = refWin => {\n const d = refWin.document;\n return Math.max(\n // firefox chrome documentElement.scrollHeight< body.scrollHeight\n // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n d.documentElement[`scroll${name}`],\n // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n d.body[`scroll${name}`],\n domUtils[`viewport${name}`](d),\n );\n };\n\n domUtils[`viewport${name}`] = win => {\n // pc browser includes scrollbar in window.innerWidth\n const prop = `client${name}`;\n const doc = win.document;\n const body = doc.body;\n const documentElement = doc.documentElement;\n const documentElementProp = documentElement[prop];\n // 标准模式取 documentElement\n // backcompat 取 body\n return (\n (doc.compatMode === 'CSS1Compat' && documentElementProp) ||\n (body && body[prop]) ||\n documentElementProp\n );\n };\n});\n\n/*\n 得到元素的大小信息\n @param elem\n @param name\n @param {String} [extra] 'padding' : (css width) + padding\n 'border' : (css width) + padding + border\n 'margin' : (css width) + padding + border + margin\n */\nfunction getWH(elem, name, ex) {\n let extra = ex;\n if (isWindow(elem)) {\n return name === 'width'\n ? domUtils.viewportWidth(elem)\n : domUtils.viewportHeight(elem);\n } else if (elem.nodeType === 9) {\n return name === 'width'\n ? domUtils.docWidth(elem)\n : domUtils.docHeight(elem);\n }\n const which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n let borderBoxValue =\n name === 'width'\n ? elem.getBoundingClientRect().width\n : elem.getBoundingClientRect().height;\n const isBorderBox = isBorderBoxFn(elem);\n let cssBoxValue = 0;\n if (\n borderBoxValue === null ||\n borderBoxValue === undefined ||\n borderBoxValue <= 0\n ) {\n borderBoxValue = undefined;\n // Fall back to computed then un computed css if necessary\n cssBoxValue = getComputedStyleX(elem, name);\n if (\n cssBoxValue === null ||\n cssBoxValue === undefined ||\n Number(cssBoxValue) < 0\n ) {\n cssBoxValue = elem.style[name] || 0;\n }\n // Normalize '', auto, and prepare for extra\n cssBoxValue = parseFloat(cssBoxValue) || 0;\n }\n if (extra === undefined) {\n extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n }\n const borderBoxValueOrIsBorderBox =\n borderBoxValue !== undefined || isBorderBox;\n const val = borderBoxValue || cssBoxValue;\n if (extra === CONTENT_INDEX) {\n if (borderBoxValueOrIsBorderBox) {\n return (\n val - getPBMWidth(elem, ['border', 'padding'], which)\n );\n }\n return cssBoxValue;\n } else if (borderBoxValueOrIsBorderBox) {\n if (extra === BORDER_INDEX) {\n return val;\n }\n return (\n val +\n (extra === PADDING_INDEX\n ? -getPBMWidth(elem, ['border'], which)\n : getPBMWidth(elem, ['margin'], which))\n );\n }\n return (\n cssBoxValue +\n getPBMWidth(elem, BOX_MODELS.slice(extra), which)\n );\n}\n\nconst cssShow = {\n position: 'absolute',\n visibility: 'hidden',\n display: 'block',\n};\n\n// fix #119 : https://github.com/kissyteam/kissy/issues/119\nfunction getWHIgnoreDisplay(...args) {\n let val;\n const elem = args[0];\n // in case elem is window\n // elem.offsetWidth === undefined\n if (elem.offsetWidth !== 0) {\n val = getWH.apply(undefined, args);\n } else {\n swap(elem, cssShow, () => {\n val = getWH.apply(undefined, args);\n });\n }\n return val;\n}\n\neach(['width', 'height'], name => {\n const first = name.charAt(0).toUpperCase() + name.slice(1);\n domUtils[`outer${first}`] = (el, includeMargin) => {\n return (\n el &&\n getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX)\n );\n };\n const which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n domUtils[name] = (elem, v) => {\n let val = v;\n if (val !== undefined) {\n if (elem) {\n const isBorderBox = isBorderBoxFn(elem);\n if (isBorderBox) {\n val += getPBMWidth(elem, ['padding', 'border'], which);\n }\n return css(elem, name, val);\n }\n return undefined;\n }\n return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n };\n});\n\nfunction mix(to, from) {\n for (const i in from) {\n if (from.hasOwnProperty(i)) {\n to[i] = from[i];\n }\n }\n return to;\n}\n\nconst utils = {\n getWindow(node) {\n if (node && node.document && node.setTimeout) {\n return node;\n }\n const doc = node.ownerDocument || node;\n return doc.defaultView || doc.parentWindow;\n },\n getDocument,\n offset(el, value, option) {\n if (typeof value !== 'undefined') {\n setOffset(el, value, option || {});\n } else {\n return getOffset(el);\n }\n },\n isWindow,\n each,\n css,\n clone(obj) {\n let i;\n const ret = {};\n for (i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret[i] = obj[i];\n }\n }\n const overflow = obj.overflow;\n if (overflow) {\n for (i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret.overflow[i] = obj.overflow[i];\n }\n }\n }\n return ret;\n },\n mix,\n getWindowScrollLeft(w) {\n return getScrollLeft(w);\n },\n getWindowScrollTop(w) {\n return getScrollTop(w);\n },\n merge(...args) {\n const ret = {};\n for (let i = 0; i < args.length; i++) {\n utils.mix(ret, args[i]);\n }\n return ret;\n },\n viewportWidth: 0,\n viewportHeight: 0,\n};\n\nmix(utils, domUtils);\n\nexport default utils;\n","import utils from './utils';\n\n/**\n * 得到会导致元素显示不全的祖先元素\n */\nconst { getParent } = utils;\n\nfunction getOffsetParent(element) {\n if (utils.isWindow(element) || element.nodeType === 9) {\n return null;\n }\n // ie 这个也不是完全可行\n /*\n
\n
\n 元素 6 高 100px 宽 50px
\n
\n
\n */\n // element.offsetParent does the right thing in ie7 and below. Return parent with layout!\n // In other browsers it only includes elements with position absolute, relative or\n // fixed, not elements with overflow set to auto or scroll.\n // if (UA.ie && ieMode < 8) {\n // return element.offsetParent;\n // }\n // 统一的 offsetParent 方法\n const doc = utils.getDocument(element);\n const body = doc.body;\n let parent;\n let positionStyle = utils.css(element, 'position');\n const skipStatic = positionStyle === 'fixed' || positionStyle === 'absolute';\n\n if (!skipStatic) {\n return element.nodeName.toLowerCase() === 'html'\n ? null\n : getParent(element);\n }\n\n for (\n parent = getParent(element);\n parent && parent !== body && parent.nodeType !== 9;\n parent = getParent(parent)\n ) {\n positionStyle = utils.css(parent, 'position');\n if (positionStyle !== 'static') {\n return parent;\n }\n }\n return null;\n}\n\nexport default getOffsetParent;\n","import utils from './utils';\n\nconst { getParent } = utils;\n\nexport default function isAncestorFixed(element) {\n if (utils.isWindow(element) || element.nodeType === 9) {\n return false;\n }\n\n const doc = utils.getDocument(element);\n const body = doc.body;\n let parent = null;\n for (\n parent = getParent(element);\n // 修复元素位于 document.documentElement 下导致崩溃问题\n parent && parent !== body && parent !== doc;\n parent = getParent(parent)\n ) {\n const positionStyle = utils.css(parent, 'position');\n if (positionStyle === 'fixed') {\n return true;\n }\n }\n return false;\n}\n","import utils from './utils';\nimport getOffsetParent from './getOffsetParent';\nimport isAncestorFixed from './isAncestorFixed';\n\n/**\n * 获得元素的显示部分的区域\n */\nfunction getVisibleRectForElement(element, alwaysByViewport) {\n const visibleRect = {\n left: 0,\n right: Infinity,\n top: 0,\n bottom: Infinity,\n };\n let el = getOffsetParent(element);\n const doc = utils.getDocument(element);\n const win = doc.defaultView || doc.parentWindow;\n const body = doc.body;\n const documentElement = doc.documentElement;\n\n // Determine the size of the visible rect by climbing the dom accounting for\n // all scrollable containers.\n while (el) {\n // clientWidth is zero for inline block elements in ie.\n if (\n (navigator.userAgent.indexOf('MSIE') === -1 || el.clientWidth !== 0) &&\n // body may have overflow set on it, yet we still get the entire\n // viewport. In some browsers, el.offsetParent may be\n // document.documentElement, so check for that too.\n (el !== body &&\n el !== documentElement &&\n utils.css(el, 'overflow') !== 'visible')\n ) {\n const pos = utils.offset(el);\n // add border\n pos.left += el.clientLeft;\n pos.top += el.clientTop;\n visibleRect.top = Math.max(visibleRect.top, pos.top);\n visibleRect.right = Math.min(\n visibleRect.right,\n // consider area without scrollBar\n pos.left + el.clientWidth,\n );\n visibleRect.bottom = Math.min(\n visibleRect.bottom,\n pos.top + el.clientHeight,\n );\n visibleRect.left = Math.max(visibleRect.left, pos.left);\n } else if (el === body || el === documentElement) {\n break;\n }\n el = getOffsetParent(el);\n }\n\n // Set element position to fixed\n // make sure absolute element itself don't affect it's visible area\n // https://github.com/ant-design/ant-design/issues/7601\n let originalPosition = null;\n if (!utils.isWindow(element) && element.nodeType !== 9) {\n originalPosition = element.style.position;\n const position = utils.css(element, 'position');\n if (position === 'absolute') {\n element.style.position = 'fixed';\n }\n }\n\n const scrollX = utils.getWindowScrollLeft(win);\n const scrollY = utils.getWindowScrollTop(win);\n const viewportWidth = utils.viewportWidth(win);\n const viewportHeight = utils.viewportHeight(win);\n let documentWidth = documentElement.scrollWidth;\n let documentHeight = documentElement.scrollHeight;\n\n // scrollXXX on html is sync with body which means overflow: hidden on body gets wrong scrollXXX.\n // We should cut this ourself.\n const bodyStyle = window.getComputedStyle(body);\n if (bodyStyle.overflowX === 'hidden') {\n documentWidth = win.innerWidth;\n }\n if (bodyStyle.overflowY === 'hidden') {\n documentHeight = win.innerHeight;\n }\n\n // Reset element position after calculate the visible area\n if (element.style) {\n element.style.position = originalPosition;\n }\n\n if (alwaysByViewport || isAncestorFixed(element)) {\n // Clip by viewport's size.\n visibleRect.left = Math.max(visibleRect.left, scrollX);\n visibleRect.top = Math.max(visibleRect.top, scrollY);\n visibleRect.right = Math.min(visibleRect.right, scrollX + viewportWidth);\n visibleRect.bottom = Math.min(visibleRect.bottom, scrollY + viewportHeight);\n } else {\n // Clip by document's size.\n const maxVisibleWidth = Math.max(documentWidth, scrollX + viewportWidth);\n visibleRect.right = Math.min(visibleRect.right, maxVisibleWidth);\n\n const maxVisibleHeight = Math.max(documentHeight, scrollY + viewportHeight);\n visibleRect.bottom = Math.min(visibleRect.bottom, maxVisibleHeight);\n }\n\n return visibleRect.top >= 0 &&\n visibleRect.left >= 0 &&\n visibleRect.bottom > visibleRect.top &&\n visibleRect.right > visibleRect.left\n ? visibleRect\n : null;\n}\n\nexport default getVisibleRectForElement;\n","import utils from './utils';\n\nfunction adjustForViewport(elFuturePos, elRegion, visibleRect, overflow) {\n const pos = utils.clone(elFuturePos);\n const size = {\n width: elRegion.width,\n height: elRegion.height,\n };\n\n if (overflow.adjustX && pos.left < visibleRect.left) {\n pos.left = visibleRect.left;\n }\n\n // Left edge inside and right edge outside viewport, try to resize it.\n if (\n overflow.resizeWidth &&\n pos.left >= visibleRect.left &&\n pos.left + size.width > visibleRect.right\n ) {\n size.width -= pos.left + size.width - visibleRect.right;\n }\n\n // Right edge outside viewport, try to move it.\n if (overflow.adjustX && pos.left + size.width > visibleRect.right) {\n // 保证左边界和可视区域左边界对齐\n pos.left = Math.max(visibleRect.right - size.width, visibleRect.left);\n }\n\n // Top edge outside viewport, try to move it.\n if (overflow.adjustY && pos.top < visibleRect.top) {\n pos.top = visibleRect.top;\n }\n\n // Top edge inside and bottom edge outside viewport, try to resize it.\n if (\n overflow.resizeHeight &&\n pos.top >= visibleRect.top &&\n pos.top + size.height > visibleRect.bottom\n ) {\n size.height -= pos.top + size.height - visibleRect.bottom;\n }\n\n // Bottom edge outside viewport, try to move it.\n if (overflow.adjustY && pos.top + size.height > visibleRect.bottom) {\n // 保证上边界和可视区域上边界对齐\n pos.top = Math.max(visibleRect.bottom - size.height, visibleRect.top);\n }\n\n return utils.mix(pos, size);\n}\n\nexport default adjustForViewport;\n","import utils from './utils';\n\nfunction getRegion(node) {\n let offset;\n let w;\n let h;\n if (!utils.isWindow(node) && node.nodeType !== 9) {\n offset = utils.offset(node);\n w = utils.outerWidth(node);\n h = utils.outerHeight(node);\n } else {\n const win = utils.getWindow(node);\n offset = {\n left: utils.getWindowScrollLeft(win),\n top: utils.getWindowScrollTop(win),\n };\n w = utils.viewportWidth(win);\n h = utils.viewportHeight(win);\n }\n offset.width = w;\n offset.height = h;\n return offset;\n}\n\nexport default getRegion;\n","/**\n * 获取 node 上的 align 对齐点 相对于页面的坐标\n */\n\nfunction getAlignOffset(region, align) {\n const V = align.charAt(0);\n const H = align.charAt(1);\n const w = region.width;\n const h = region.height;\n\n let x = region.left;\n let y = region.top;\n\n if (V === 'c') {\n y += h / 2;\n } else if (V === 'b') {\n y += h;\n }\n\n if (H === 'c') {\n x += w / 2;\n } else if (H === 'r') {\n x += w;\n }\n\n return {\n left: x,\n top: y,\n };\n}\n\nexport default getAlignOffset;\n","import getAlignOffset from './getAlignOffset';\n\nfunction getElFuturePos(elRegion, refNodeRegion, points, offset, targetOffset) {\n const p1 = getAlignOffset(refNodeRegion, points[1]);\n const p2 = getAlignOffset(elRegion, points[0]);\n const diff = [p2.left - p1.left, p2.top - p1.top];\n\n return {\n left: Math.round(elRegion.left - diff[0] + offset[0] - targetOffset[0]),\n top: Math.round(elRegion.top - diff[1] + offset[1] - targetOffset[1]),\n };\n}\n\nexport default getElFuturePos;\n","/**\n * align dom node flexibly\n * @author yiminghe@gmail.com\n */\n\nimport utils from '../utils';\nimport getVisibleRectForElement from '../getVisibleRectForElement';\nimport adjustForViewport from '../adjustForViewport';\nimport getRegion from '../getRegion';\nimport getElFuturePos from '../getElFuturePos';\n\n// http://yiminghe.iteye.com/blog/1124720\n\nfunction isFailX(elFuturePos, elRegion, visibleRect) {\n return (\n elFuturePos.left < visibleRect.left ||\n elFuturePos.left + elRegion.width > visibleRect.right\n );\n}\n\nfunction isFailY(elFuturePos, elRegion, visibleRect) {\n return (\n elFuturePos.top < visibleRect.top ||\n elFuturePos.top + elRegion.height > visibleRect.bottom\n );\n}\n\nfunction isCompleteFailX(elFuturePos, elRegion, visibleRect) {\n return (\n elFuturePos.left > visibleRect.right ||\n elFuturePos.left + elRegion.width < visibleRect.left\n );\n}\n\nfunction isCompleteFailY(elFuturePos, elRegion, visibleRect) {\n return (\n elFuturePos.top > visibleRect.bottom ||\n elFuturePos.top + elRegion.height < visibleRect.top\n );\n}\n\nfunction flip(points, reg, map) {\n const ret = [];\n utils.each(points, p => {\n ret.push(\n p.replace(reg, m => {\n return map[m];\n }),\n );\n });\n return ret;\n}\n\nfunction flipOffset(offset, index) {\n offset[index] = -offset[index];\n return offset;\n}\n\nfunction convertOffset(str, offsetLen) {\n let n;\n if (/%$/.test(str)) {\n n = (parseInt(str.substring(0, str.length - 1), 10) / 100) * offsetLen;\n } else {\n n = parseInt(str, 10);\n }\n return n || 0;\n}\n\nfunction normalizeOffset(offset, el) {\n offset[0] = convertOffset(offset[0], el.width);\n offset[1] = convertOffset(offset[1], el.height);\n}\n\n/**\n * @param el\n * @param tgtRegion 参照节点所占的区域: { left, top, width, height }\n * @param align\n */\nfunction doAlign(el, tgtRegion, align, isTgtRegionVisible) {\n let points = align.points;\n let offset = align.offset || [0, 0];\n let targetOffset = align.targetOffset || [0, 0];\n let overflow = align.overflow;\n const source = align.source || el;\n offset = [].concat(offset);\n targetOffset = [].concat(targetOffset);\n overflow = overflow || {};\n const newOverflowCfg = {};\n let fail = 0;\n const alwaysByViewport = !!(overflow && overflow.alwaysByViewport);\n // 当前节点可以被放置的显示区域\n const visibleRect = getVisibleRectForElement(source, alwaysByViewport);\n // 当前节点所占的区域, left/top/width/height\n const elRegion = getRegion(source);\n // 将 offset 转换成数值,支持百分比\n normalizeOffset(offset, elRegion);\n normalizeOffset(targetOffset, tgtRegion);\n // 当前节点将要被放置的位置\n let elFuturePos = getElFuturePos(\n elRegion,\n tgtRegion,\n points,\n offset,\n targetOffset,\n );\n // 当前节点将要所处的区域\n let newElRegion = utils.merge(elRegion, elFuturePos);\n\n // 如果可视区域不能完全放置当前节点时允许调整\n if (\n visibleRect &&\n (overflow.adjustX || overflow.adjustY) &&\n isTgtRegionVisible\n ) {\n if (overflow.adjustX) {\n // 如果横向不能放下\n if (isFailX(elFuturePos, elRegion, visibleRect)) {\n // 对齐位置反下\n const newPoints = flip(points, /[lr]/gi, {\n l: 'r',\n r: 'l',\n });\n // 偏移量也反下\n const newOffset = flipOffset(offset, 0);\n const newTargetOffset = flipOffset(targetOffset, 0);\n const newElFuturePos = getElFuturePos(\n elRegion,\n tgtRegion,\n newPoints,\n newOffset,\n newTargetOffset,\n );\n\n if (!isCompleteFailX(newElFuturePos, elRegion, visibleRect)) {\n fail = 1;\n points = newPoints;\n offset = newOffset;\n targetOffset = newTargetOffset;\n }\n }\n }\n\n if (overflow.adjustY) {\n // 如果纵向不能放下\n if (isFailY(elFuturePos, elRegion, visibleRect)) {\n // 对齐位置反下\n const newPoints = flip(points, /[tb]/gi, {\n t: 'b',\n b: 't',\n });\n // 偏移量也反下\n const newOffset = flipOffset(offset, 1);\n const newTargetOffset = flipOffset(targetOffset, 1);\n const newElFuturePos = getElFuturePos(\n elRegion,\n tgtRegion,\n newPoints,\n newOffset,\n newTargetOffset,\n );\n\n if (!isCompleteFailY(newElFuturePos, elRegion, visibleRect)) {\n fail = 1;\n points = newPoints;\n offset = newOffset;\n targetOffset = newTargetOffset;\n }\n }\n }\n\n // 如果失败,重新计算当前节点将要被放置的位置\n if (fail) {\n elFuturePos = getElFuturePos(\n elRegion,\n tgtRegion,\n points,\n offset,\n targetOffset,\n );\n utils.mix(newElRegion, elFuturePos);\n }\n const isStillFailX = isFailX(elFuturePos, elRegion, visibleRect);\n const isStillFailY = isFailY(elFuturePos, elRegion, visibleRect);\n // 检查反下后的位置是否可以放下了,如果仍然放不下:\n // 1. 复原修改过的定位参数\n if (isStillFailX || isStillFailY) {\n let newPoints = points;\n\n // 重置对应部分的翻转逻辑\n if (isStillFailX) {\n newPoints = flip(points, /[lr]/gi, {\n l: 'r',\n r: 'l',\n });\n }\n if (isStillFailY) {\n newPoints = flip(points, /[tb]/gi, {\n t: 'b',\n b: 't',\n });\n }\n\n points = newPoints;\n\n offset = align.offset || [0, 0];\n targetOffset = align.targetOffset || [0, 0];\n }\n // 2. 只有指定了可以调整当前方向才调整\n newOverflowCfg.adjustX = overflow.adjustX && isStillFailX;\n newOverflowCfg.adjustY = overflow.adjustY && isStillFailY;\n\n // 确实要调整,甚至可能会调整高度宽度\n if (newOverflowCfg.adjustX || newOverflowCfg.adjustY) {\n newElRegion = adjustForViewport(\n elFuturePos,\n elRegion,\n visibleRect,\n newOverflowCfg,\n );\n }\n }\n\n // need judge to in case set fixed with in css on height auto element\n if (newElRegion.width !== elRegion.width) {\n utils.css(\n source,\n 'width',\n utils.width(source) + newElRegion.width - elRegion.width,\n );\n }\n\n if (newElRegion.height !== elRegion.height) {\n utils.css(\n source,\n 'height',\n utils.height(source) + newElRegion.height - elRegion.height,\n );\n }\n\n // https://github.com/kissyteam/kissy/issues/190\n // 相对于屏幕位置没变,而 left/top 变了\n // 例如
\n utils.offset(\n source,\n {\n left: newElRegion.left,\n top: newElRegion.top,\n },\n {\n useCssRight: align.useCssRight,\n useCssBottom: align.useCssBottom,\n useCssTransform: align.useCssTransform,\n ignoreShake: align.ignoreShake,\n },\n );\n\n return {\n points,\n offset,\n targetOffset,\n overflow: newOverflowCfg,\n };\n}\n\nexport default doAlign;\n/**\n * 2012-04-26 yiminghe@gmail.com\n * - 优化智能对齐算法\n * - 慎用 resizeXX\n *\n * 2011-07-13 yiminghe@gmail.com note:\n * - 增加智能对齐,以及大小调整选项\n **/\n","import doAlign from './align';\nimport getOffsetParent from '../getOffsetParent';\nimport getVisibleRectForElement from '../getVisibleRectForElement';\nimport getRegion from '../getRegion';\n\nfunction isOutOfVisibleRect(target, alwaysByViewport) {\n const visibleRect = getVisibleRectForElement(target, alwaysByViewport);\n const targetRegion = getRegion(target);\n\n return (\n !visibleRect ||\n targetRegion.left + targetRegion.width <= visibleRect.left ||\n targetRegion.top + targetRegion.height <= visibleRect.top ||\n targetRegion.left >= visibleRect.right ||\n targetRegion.top >= visibleRect.bottom\n );\n}\n\nfunction alignElement(el, refNode, align) {\n const target = align.target || refNode;\n const refNodeRegion = getRegion(target);\n\n const isTargetNotOutOfVisible = !isOutOfVisibleRect(\n target,\n align.overflow && align.overflow.alwaysByViewport,\n );\n\n return doAlign(el, refNodeRegion, align, isTargetNotOutOfVisible);\n}\n\nalignElement.__getOffsetParent = getOffsetParent;\n\nalignElement.__getVisibleRectForElement = getVisibleRectForElement;\n\nexport default alignElement;\n","import utils from '../utils';\nimport doAlign from './align';\n\n/**\n * `tgtPoint`: { pageX, pageY } or { clientX, clientY }.\n * If client position provided, will internal convert to page position.\n */\n\nfunction alignPoint(el, tgtPoint, align) {\n let pageX;\n let pageY;\n\n const doc = utils.getDocument(el);\n const win = doc.defaultView || doc.parentWindow;\n\n const scrollX = utils.getWindowScrollLeft(win);\n const scrollY = utils.getWindowScrollTop(win);\n const viewportWidth = utils.viewportWidth(win);\n const viewportHeight = utils.viewportHeight(win);\n\n if ('pageX' in tgtPoint) {\n pageX = tgtPoint.pageX;\n } else {\n pageX = scrollX + tgtPoint.clientX;\n }\n\n if ('pageY' in tgtPoint) {\n pageY = tgtPoint.pageY;\n } else {\n pageY = scrollY + tgtPoint.clientY;\n }\n\n const tgtRegion = {\n left: pageX,\n top: pageY,\n width: 0,\n height: 0,\n };\n\n const pointInView =\n pageX >= 0 &&\n pageX <= scrollX + viewportWidth &&\n (pageY >= 0 && pageY <= scrollY + viewportHeight);\n\n // Provide default target point\n const points = [align.points[0], 'cc'];\n\n return doAlign(el, tgtRegion, { ...align, points }, pointInView);\n}\n\nexport default alignPoint;\n"],"names":["vendorPrefix","jsCssMap","Webkit","Moz","ms","O","getVendorPrefix","undefined","style","document","createElement","testProp","key","getTransitionName","getTransformName","setTransitionProperty","node","value","name","transitionProperty","setTransform","transform","getTransitionProperty","getTransformXY","window","getComputedStyle","getPropertyValue","matrix","replace","split","x","parseFloat","y","matrix2d","matrix3d","setTransformXY","xy","arr","match2d","match","map","item","join","match3d","RE_NUM","source","getComputedStyleX","forceRelayout","elem","originalStyle","display","offsetHeight","css","el","v","i","hasOwnProperty","getClientPosition","box","doc","ownerDocument","body","docElem","documentElement","getBoundingClientRect","left","top","clientLeft","clientTop","getScroll","w","ret","method","d","getScrollLeft","getScrollTop","getOffset","pos","defaultView","parentWindow","isWindow","obj","getDocument","nodeType","_getComputedStyle","cs","computedStyle","val","_RE_NUM_NO_PX","RegExp","RE_POS","CURRENT_STYLE","RUNTIME_STYLE","LEFT","PX","_getComputedStyleIE","test","rsLeft","pixelLeft","getOffsetDirection","dir","option","useCssRight","useCssBottom","oppositeOffsetDirection","setLeftTop","offset","position","presetH","presetV","horizontalProperty","verticalProperty","oppositeHorizontalProperty","oppositeVerticalProperty","originalTransition","originalOffset","old","preset","off","originalXY","resultXY","setOffset","ignoreShake","oriOffset","oLeft","toFixed","oTop","tLeft","tTop","useCssTransform","each","fn","length","isBorderBoxFn","BOX_MODELS","CONTENT_INDEX","PADDING_INDEX","BORDER_INDEX","MARGIN_INDEX","swap","options","callback","call","getPBMWidth","props","which","prop","j","cssProp","domUtils","getParent","element","parent","host","parentNode","refWin","Math","max","win","documentElementProp","compatMode","getWH","ex","extra","viewportWidth","viewportHeight","docWidth","docHeight","borderBoxValue","width","height","isBorderBox","cssBoxValue","Number","borderBoxValueOrIsBorderBox","slice","cssShow","visibility","getWHIgnoreDisplay","args","offsetWidth","apply","first","charAt","toUpperCase","includeMargin","mix","to","from","utils","getWindow","setTimeout","clone","overflow","getWindowScrollLeft","getWindowScrollTop","merge","getOffsetParent","positionStyle","skipStatic","nodeName","toLowerCase","isAncestorFixed","getVisibleRectForElement","alwaysByViewport","visibleRect","right","Infinity","bottom","navigator","userAgent","indexOf","clientWidth","min","clientHeight","originalPosition","scrollX","scrollY","documentWidth","scrollWidth","documentHeight","scrollHeight","bodyStyle","overflowX","innerWidth","overflowY","innerHeight","maxVisibleWidth","maxVisibleHeight","adjustForViewport","elFuturePos","elRegion","size","adjustX","resizeWidth","adjustY","resizeHeight","getRegion","h","outerWidth","outerHeight","getAlignOffset","region","align","V","H","getElFuturePos","refNodeRegion","points","targetOffset","p1","p2","diff","round","isFailX","isFailY","isCompleteFailX","isCompleteFailY","flip","reg","p","push","m","flipOffset","index","convertOffset","str","offsetLen","n","parseInt","substring","normalizeOffset","doAlign","tgtRegion","isTgtRegionVisible","concat","newOverflowCfg","fail","newElRegion","newPoints","l","r","newOffset","newTargetOffset","newElFuturePos","t","b","isStillFailX","isStillFailY","isOutOfVisibleRect","target","targetRegion","alignElement","refNode","isTargetNotOutOfVisible","__getOffsetParent","__getVisibleRectForElement","alignPoint","tgtPoint","pageX","pageY","clientX","clientY","pointInView"],"mappings":"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"}