{"version":3,"file":"c_dom-align_ecb06dd6.1695271849080.js","sources":["../../node_modules/dom-align/dist-web/index.js"],"sourcesContent":["function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n\nvar vendorPrefix;\nvar jsCssMap = {\n Webkit: '-webkit-',\n Moz: '-moz-',\n // IE did it wrong again ...\n ms: '-ms-',\n O: '-o-'\n};\nfunction getVendorPrefix() {\n if (vendorPrefix !== undefined) {\n return vendorPrefix;\n }\n vendorPrefix = '';\n var style = document.createElement('p').style;\n var testProp = 'Transform';\n for (var key in jsCssMap) {\n if (key + testProp in style) {\n vendorPrefix = key;\n }\n }\n return vendorPrefix;\n}\nfunction getTransitionName() {\n return getVendorPrefix() ? \"\".concat(getVendorPrefix(), \"TransitionProperty\") : 'transitionProperty';\n}\nfunction getTransformName() {\n return getVendorPrefix() ? \"\".concat(getVendorPrefix(), \"Transform\") : 'transform';\n}\nfunction setTransitionProperty(node, value) {\n var name = getTransitionName();\n if (name) {\n node.style[name] = value;\n if (name !== 'transitionProperty') {\n node.style.transitionProperty = value;\n }\n }\n}\nfunction setTransform(node, value) {\n var name = getTransformName();\n if (name) {\n node.style[name] = value;\n if (name !== 'transform') {\n node.style.transform = value;\n }\n }\n}\nfunction getTransitionProperty(node) {\n return node.style.transitionProperty || node.style[getTransitionName()];\n}\nfunction getTransformXY(node) {\n var style = window.getComputedStyle(node, null);\n var transform = style.getPropertyValue('transform') || style.getPropertyValue(getTransformName());\n if (transform && transform !== 'none') {\n var 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}\nvar matrix2d = /matrix\\((.*)\\)/;\nvar matrix3d = /matrix3d\\((.*)\\)/;\nfunction setTransformXY(node, xy) {\n var style = window.getComputedStyle(node, null);\n var transform = style.getPropertyValue('transform') || style.getPropertyValue(getTransformName());\n if (transform && transform !== 'none') {\n var arr;\n var match2d = transform.match(matrix2d);\n if (match2d) {\n match2d = match2d[1];\n arr = match2d.split(',').map(function (item) {\n return parseFloat(item, 10);\n });\n arr[4] = xy.x;\n arr[5] = xy.y;\n setTransform(node, \"matrix(\".concat(arr.join(','), \")\"));\n } else {\n var match3d = transform.match(matrix3d)[1];\n arr = match3d.split(',').map(function (item) {\n return parseFloat(item, 10);\n });\n arr[12] = xy.x;\n arr[13] = xy.y;\n setTransform(node, \"matrix3d(\".concat(arr.join(','), \")\"));\n }\n } else {\n setTransform(node, \"translateX(\".concat(xy.x, \"px) translateY(\").concat(xy.y, \"px) translateZ(0)\"));\n }\n}\n\nvar RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\nvar getComputedStyleX;\n\n// https://stackoverflow.com/a/3485654/3040605\nfunction forceRelayout(elem) {\n var originalStyle = elem.style.display;\n elem.style.display = 'none';\n elem.offsetHeight; // eslint-disable-line\n elem.style.display = originalStyle;\n}\nfunction css(el, name, v) {\n var value = v;\n if (_typeof(name) === 'object') {\n for (var 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 = \"\".concat(value, \"px\");\n }\n el.style[name] = value;\n return undefined;\n }\n return getComputedStyleX(el, name);\n}\nfunction getClientPosition(elem) {\n var box;\n var x;\n var y;\n var doc = elem.ownerDocument;\n var body = doc.body;\n var 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 = Math.floor(box.left);\n y = Math.floor(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 return {\n left: x,\n top: y\n };\n}\nfunction getScroll(w, top) {\n var ret = w[\"page\".concat(top ? 'Y' : 'X', \"Offset\")];\n var method = \"scroll\".concat(top ? 'Top' : 'Left');\n if (typeof ret !== 'number') {\n var 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}\nfunction getScrollLeft(w) {\n return getScroll(w);\n}\nfunction getScrollTop(w) {\n return getScroll(w, true);\n}\nfunction getOffset(el) {\n var pos = getClientPosition(el);\n var doc = el.ownerDocument;\n var 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}\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}\nfunction _getComputedStyle(elem, name, cs) {\n var computedStyle = cs;\n var val = '';\n var 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 return val;\n}\nvar _RE_NUM_NO_PX = new RegExp(\"^(\".concat(RE_NUM, \")(?!px)[a-z%]+$\"), 'i');\nvar RE_POS = /^(top|right|bottom|left)$/;\nvar CURRENT_STYLE = 'currentStyle';\nvar RUNTIME_STYLE = 'runtimeStyle';\nvar LEFT = 'left';\nvar PX = 'px';\nfunction _getComputedStyleIE(elem, name) {\n // currentStyle maybe null\n // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n var 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 var style = elem.style;\n var left = style[LEFT];\n var 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 elem[RUNTIME_STYLE][LEFT] = rsLeft;\n }\n return ret === '' ? 'auto' : ret;\n}\nif (typeof window !== 'undefined') {\n getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE;\n}\nfunction getOffsetDirection(dir, option) {\n if (dir === 'left') {\n return option.useCssRight ? 'right' : dir;\n }\n return option.useCssBottom ? 'bottom' : dir;\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 var presetH = -999;\n var presetV = -999;\n var horizontalProperty = getOffsetDirection('left', option);\n var verticalProperty = getOffsetDirection('top', option);\n var oppositeHorizontalProperty = oppositeOffsetDirection(horizontalProperty);\n var oppositeVerticalProperty = oppositeOffsetDirection(verticalProperty);\n if (horizontalProperty !== 'left') {\n presetH = 999;\n }\n if (verticalProperty !== 'top') {\n presetV = 999;\n }\n var originalTransition = '';\n var 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] = \"\".concat(presetH, \"px\");\n }\n if ('top' in offset) {\n elem.style[oppositeVerticalProperty] = '';\n elem.style[verticalProperty] = \"\".concat(presetV, \"px\");\n }\n // force relayout\n forceRelayout(elem);\n var old = getOffset(elem);\n var originalStyle = {};\n for (var key in offset) {\n if (offset.hasOwnProperty(key)) {\n var dir = getOffsetDirection(key, option);\n var preset = key === 'left' ? presetH : presetV;\n var 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 var ret = {};\n for (var _key in offset) {\n if (offset.hasOwnProperty(_key)) {\n var _dir = getOffsetDirection(_key, option);\n var _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}\nfunction setTransform$1(elem, offset) {\n var originalOffset = getOffset(elem);\n var originalXY = getTransformXY(elem);\n var resultXY = {\n x: originalXY.x,\n y: originalXY.y\n };\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}\nfunction setOffset(elem, offset, option) {\n if (option.ignoreShake) {\n var oriOffset = getOffset(elem);\n var oLeft = oriOffset.left.toFixed(0);\n var oTop = oriOffset.top.toFixed(0);\n var tLeft = offset.left.toFixed(0);\n var tTop = offset.top.toFixed(0);\n if (oLeft === tLeft && oTop === tTop) {\n return;\n }\n }\n if (option.useCssRight || option.useCssBottom) {\n setLeftTop(elem, offset, option);\n } else if (option.useCssTransform && getTransformName() in document.body.style) {\n setTransform$1(elem, offset);\n } else {\n setLeftTop(elem, offset, option);\n }\n}\nfunction each(arr, fn) {\n for (var i = 0; i < arr.length; i++) {\n fn(arr[i]);\n }\n}\nfunction isBorderBoxFn(elem) {\n return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\nvar BOX_MODELS = ['margin', 'border', 'padding'];\nvar CONTENT_INDEX = -1;\nvar PADDING_INDEX = 2;\nvar BORDER_INDEX = 1;\nvar MARGIN_INDEX = 0;\nfunction swap(elem, options, callback) {\n var old = {};\n var style = elem.style;\n var 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 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}\nfunction getPBMWidth(elem, props, which) {\n var value = 0;\n var prop;\n var j;\n var 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 var cssProp = void 0;\n if (prop === 'border') {\n cssProp = \"\".concat(prop).concat(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}\nvar domUtils = {\n getParent: function getParent(element) {\n var 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};\neach(['Width', 'Height'], function (name) {\n domUtils[\"doc\".concat(name)] = function (refWin) {\n var 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\".concat(name)],\n // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n d.body[\"scroll\".concat(name)], domUtils[\"viewport\".concat(name)](d));\n };\n domUtils[\"viewport\".concat(name)] = function (win) {\n // pc browser includes scrollbar in window.innerWidth\n var prop = \"client\".concat(name);\n var doc = win.document;\n var body = doc.body;\n var documentElement = doc.documentElement;\n var documentElementProp = documentElement[prop];\n // 标准模式取 documentElement\n // backcompat 取 body\n return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp;\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 var extra = ex;\n if (isWindow(elem)) {\n return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem);\n } else if (elem.nodeType === 9) {\n return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem);\n }\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n var borderBoxValue = name === 'width' ? Math.floor(elem.getBoundingClientRect().width) : Math.floor(elem.getBoundingClientRect().height);\n var isBorderBox = isBorderBoxFn(elem);\n var cssBoxValue = 0;\n if (borderBoxValue === null || borderBoxValue === undefined || borderBoxValue <= 0) {\n borderBoxValue = undefined;\n // Fall back to computed then un computed css if necessary\n cssBoxValue = getComputedStyleX(elem, name);\n if (cssBoxValue === null || cssBoxValue === undefined || Number(cssBoxValue) < 0) {\n cssBoxValue = elem.style[name] || 0;\n }\n // Normalize '', auto, and prepare for extra\n cssBoxValue = Math.floor(parseFloat(cssBoxValue)) || 0;\n }\n if (extra === undefined) {\n extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n }\n var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;\n var val = borderBoxValue || cssBoxValue;\n if (extra === CONTENT_INDEX) {\n if (borderBoxValueOrIsBorderBox) {\n return val - getPBMWidth(elem, ['border', 'padding'], which);\n }\n return cssBoxValue;\n } else if (borderBoxValueOrIsBorderBox) {\n if (extra === BORDER_INDEX) {\n return val;\n }\n return val + (extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which) : getPBMWidth(elem, ['margin'], which));\n }\n return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which);\n}\nvar cssShow = {\n position: 'absolute',\n visibility: 'hidden',\n display: 'block'\n};\n\n// fix #119 : https://github.com/kissyteam/kissy/issues/119\nfunction getWHIgnoreDisplay() {\n for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n args[_key2] = arguments[_key2];\n }\n var val;\n var 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, function () {\n val = getWH.apply(undefined, args);\n });\n }\n return val;\n}\neach(['width', 'height'], function (name) {\n var first = name.charAt(0).toUpperCase() + name.slice(1);\n domUtils[\"outer\".concat(first)] = function (el, includeMargin) {\n return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);\n };\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n domUtils[name] = function (elem, v) {\n var val = v;\n if (val !== undefined) {\n if (elem) {\n var 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});\nfunction mix(to, from) {\n for (var i in from) {\n if (from.hasOwnProperty(i)) {\n to[i] = from[i];\n }\n }\n return to;\n}\nvar utils = {\n getWindow: function getWindow(node) {\n if (node && node.document && node.setTimeout) {\n return node;\n }\n var doc = node.ownerDocument || node;\n return doc.defaultView || doc.parentWindow;\n },\n getDocument: getDocument,\n offset: function offset(el, value, option) {\n if (typeof value !== 'undefined') {\n setOffset(el, value, option || {});\n } else {\n return getOffset(el);\n }\n },\n isWindow: isWindow,\n each: each,\n css: css,\n clone: function clone(obj) {\n var i;\n var ret = {};\n for (i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret[i] = obj[i];\n }\n }\n var 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: mix,\n getWindowScrollLeft: function getWindowScrollLeft(w) {\n return getScrollLeft(w);\n },\n getWindowScrollTop: function getWindowScrollTop(w) {\n return getScrollTop(w);\n },\n merge: function merge() {\n var ret = {};\n for (var i = 0; i < arguments.length; i++) {\n utils.mix(ret, i < 0 || arguments.length <= i ? undefined : arguments[i]);\n }\n return ret;\n },\n viewportWidth: 0,\n viewportHeight: 0\n};\nmix(utils, domUtils);\n\n/**\n * 得到会导致元素显示不全的祖先元素\n */\nvar getParent = utils.getParent;\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 var doc = utils.getDocument(element);\n var body = doc.body;\n var parent;\n var positionStyle = utils.css(element, 'position');\n var skipStatic = positionStyle === 'fixed' || positionStyle === 'absolute';\n if (!skipStatic) {\n return element.nodeName.toLowerCase() === 'html' ? null : getParent(element);\n }\n for (parent = getParent(element); parent && parent !== body && parent.nodeType !== 9; parent = getParent(parent)) {\n positionStyle = utils.css(parent, 'position');\n if (positionStyle !== 'static') {\n return parent;\n }\n }\n return null;\n}\n\nvar getParent$1 = utils.getParent;\nfunction isAncestorFixed(element) {\n if (utils.isWindow(element) || element.nodeType === 9) {\n return false;\n }\n var doc = utils.getDocument(element);\n var body = doc.body;\n var parent = null;\n for (parent = getParent$1(element);\n // 修复元素位于 document.documentElement 下导致崩溃问题\n parent && parent !== body && parent !== doc; parent = getParent$1(parent)) {\n var positionStyle = utils.css(parent, 'position');\n if (positionStyle === 'fixed') {\n return true;\n }\n }\n return false;\n}\n\n/**\n * 获得元素的显示部分的区域\n */\nfunction getVisibleRectForElement(element, alwaysByViewport) {\n var visibleRect = {\n left: 0,\n right: Infinity,\n top: 0,\n bottom: Infinity\n };\n var el = getOffsetParent(element);\n var doc = utils.getDocument(element);\n var win = doc.defaultView || doc.parentWindow;\n var body = doc.body;\n var 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 ((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 && el !== documentElement && utils.css(el, 'overflow') !== 'visible') {\n var 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(visibleRect.right,\n // consider area without scrollBar\n pos.left + el.clientWidth);\n visibleRect.bottom = Math.min(visibleRect.bottom, pos.top + el.clientHeight);\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 var originalPosition = null;\n if (!utils.isWindow(element) && element.nodeType !== 9) {\n originalPosition = element.style.position;\n var position = utils.css(element, 'position');\n if (position === 'absolute') {\n element.style.position = 'fixed';\n }\n }\n var scrollX = utils.getWindowScrollLeft(win);\n var scrollY = utils.getWindowScrollTop(win);\n var viewportWidth = utils.viewportWidth(win);\n var viewportHeight = utils.viewportHeight(win);\n var documentWidth = documentElement.scrollWidth;\n var 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 var 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 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 var maxVisibleWidth = Math.max(documentWidth, scrollX + viewportWidth);\n visibleRect.right = Math.min(visibleRect.right, maxVisibleWidth);\n var maxVisibleHeight = Math.max(documentHeight, scrollY + viewportHeight);\n visibleRect.bottom = Math.min(visibleRect.bottom, maxVisibleHeight);\n }\n return visibleRect.top >= 0 && visibleRect.left >= 0 && visibleRect.bottom > visibleRect.top && visibleRect.right > visibleRect.left ? visibleRect : null;\n}\n\nfunction adjustForViewport(elFuturePos, elRegion, visibleRect, overflow) {\n var pos = utils.clone(elFuturePos);\n var size = {\n width: elRegion.width,\n height: elRegion.height\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 (overflow.resizeWidth && pos.left >= visibleRect.left && pos.left + size.width > visibleRect.right) {\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 (overflow.resizeHeight && pos.top >= visibleRect.top && pos.top + size.height > visibleRect.bottom) {\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 return utils.mix(pos, size);\n}\n\nfunction getRegion(node) {\n var offset;\n var w;\n var 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 var 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\n/**\n * 获取 node 上的 align 对齐点 相对于页面的坐标\n */\n\nfunction getAlignOffset(region, align) {\n var V = align.charAt(0);\n var H = align.charAt(1);\n var w = region.width;\n var h = region.height;\n var x = region.left;\n var y = region.top;\n if (V === 'c') {\n y += h / 2;\n } else if (V === 'b') {\n y += h;\n }\n if (H === 'c') {\n x += w / 2;\n } else if (H === 'r') {\n x += w;\n }\n return {\n left: x,\n top: y\n };\n}\n\nfunction getElFuturePos(elRegion, refNodeRegion, points, offset, targetOffset) {\n var p1 = getAlignOffset(refNodeRegion, points[1]);\n var p2 = getAlignOffset(elRegion, points[0]);\n var diff = [p2.left - p1.left, p2.top - p1.top];\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\n/**\n * align dom node flexibly\n * @author yiminghe@gmail.com\n */\n\n// http://yiminghe.iteye.com/blog/1124720\n\nfunction isFailX(elFuturePos, elRegion, visibleRect) {\n return elFuturePos.left < visibleRect.left || elFuturePos.left + elRegion.width > visibleRect.right;\n}\nfunction isFailY(elFuturePos, elRegion, visibleRect) {\n return elFuturePos.top < visibleRect.top || elFuturePos.top + elRegion.height > visibleRect.bottom;\n}\nfunction isCompleteFailX(elFuturePos, elRegion, visibleRect) {\n return elFuturePos.left > visibleRect.right || elFuturePos.left + elRegion.width < visibleRect.left;\n}\nfunction isCompleteFailY(elFuturePos, elRegion, visibleRect) {\n return elFuturePos.top > visibleRect.bottom || elFuturePos.top + elRegion.height < visibleRect.top;\n}\nfunction flip(points, reg, map) {\n var ret = [];\n utils.each(points, function (p) {\n ret.push(p.replace(reg, function (m) {\n return map[m];\n }));\n });\n return ret;\n}\nfunction flipOffset(offset, index) {\n offset[index] = -offset[index];\n return offset;\n}\nfunction convertOffset(str, offsetLen) {\n var 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}\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 var points = align.points;\n var offset = align.offset || [0, 0];\n var targetOffset = align.targetOffset || [0, 0];\n var overflow = align.overflow;\n var source = align.source || el;\n offset = [].concat(offset);\n targetOffset = [].concat(targetOffset);\n overflow = overflow || {};\n var newOverflowCfg = {};\n var fail = 0;\n var alwaysByViewport = !!(overflow && overflow.alwaysByViewport);\n // 当前节点可以被放置的显示区域\n var visibleRect = getVisibleRectForElement(source, alwaysByViewport);\n // 当前节点所占的区域, left/top/width/height\n var elRegion = getRegion(source);\n // 将 offset 转换成数值,支持百分比\n normalizeOffset(offset, elRegion);\n normalizeOffset(targetOffset, tgtRegion);\n // 当前节点将要被放置的位置\n var elFuturePos = getElFuturePos(elRegion, tgtRegion, points, offset, targetOffset);\n // 当前节点将要所处的区域\n var newElRegion = utils.merge(elRegion, elFuturePos);\n\n // 如果可视区域不能完全放置当前节点时允许调整\n if (visibleRect && (overflow.adjustX || overflow.adjustY) && isTgtRegionVisible) {\n if (overflow.adjustX) {\n // 如果横向不能放下\n if (isFailX(elFuturePos, elRegion, visibleRect)) {\n // 对齐位置反下\n var newPoints = flip(points, /[lr]/gi, {\n l: 'r',\n r: 'l'\n });\n // 偏移量也反下\n var newOffset = flipOffset(offset, 0);\n var newTargetOffset = flipOffset(targetOffset, 0);\n var newElFuturePos = getElFuturePos(elRegion, tgtRegion, newPoints, newOffset, newTargetOffset);\n if (!isCompleteFailX(newElFuturePos, elRegion, visibleRect)) {\n fail = 1;\n points = newPoints;\n offset = newOffset;\n targetOffset = newTargetOffset;\n }\n }\n }\n if (overflow.adjustY) {\n // 如果纵向不能放下\n if (isFailY(elFuturePos, elRegion, visibleRect)) {\n // 对齐位置反下\n var _newPoints = flip(points, /[tb]/gi, {\n t: 'b',\n b: 't'\n });\n // 偏移量也反下\n var _newOffset = flipOffset(offset, 1);\n var _newTargetOffset = flipOffset(targetOffset, 1);\n var _newElFuturePos = getElFuturePos(elRegion, tgtRegion, _newPoints, _newOffset, _newTargetOffset);\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(elRegion, tgtRegion, points, offset, targetOffset);\n utils.mix(newElRegion, elFuturePos);\n }\n var isStillFailX = isFailX(elFuturePos, elRegion, visibleRect);\n var isStillFailY = isFailY(elFuturePos, elRegion, visibleRect);\n // 检查反下后的位置是否可以放下了,如果仍然放不下:\n // 1. 复原修改过的定位参数\n if (isStillFailX || isStillFailY) {\n var _newPoints2 = points;\n\n // 重置对应部分的翻转逻辑\n if (isStillFailX) {\n _newPoints2 = flip(points, /[lr]/gi, {\n l: 'r',\n r: 'l'\n });\n }\n if (isStillFailY) {\n _newPoints2 = flip(points, /[tb]/gi, {\n t: 'b',\n b: 't'\n });\n }\n points = _newPoints2;\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(elFuturePos, elRegion, visibleRect, newOverflowCfg);\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(source, 'width', utils.width(source) + newElRegion.width - elRegion.width);\n }\n if (newElRegion.height !== elRegion.height) {\n utils.css(source, 'height', utils.height(source) + newElRegion.height - elRegion.height);\n }\n\n // https://github.com/kissyteam/kissy/issues/190\n // 相对于屏幕位置没变,而 left/top 变了\n // 例如
\n utils.offset(source, {\n left: newElRegion.left,\n top: newElRegion.top\n }, {\n useCssRight: align.useCssRight,\n useCssBottom: align.useCssBottom,\n useCssTransform: align.useCssTransform,\n ignoreShake: align.ignoreShake\n });\n return {\n points: points,\n offset: offset,\n targetOffset: targetOffset,\n overflow: newOverflowCfg\n };\n}\n/**\n * 2012-04-26 yiminghe@gmail.com\n * - 优化智能对齐算法\n * - 慎用 resizeXX\n *\n * 2011-07-13 yiminghe@gmail.com note:\n * - 增加智能对齐,以及大小调整选项\n **/\n\nfunction isOutOfVisibleRect(target, alwaysByViewport) {\n var visibleRect = getVisibleRectForElement(target, alwaysByViewport);\n var targetRegion = getRegion(target);\n return !visibleRect || targetRegion.left + targetRegion.width <= visibleRect.left || targetRegion.top + targetRegion.height <= visibleRect.top || targetRegion.left >= visibleRect.right || targetRegion.top >= visibleRect.bottom;\n}\nfunction alignElement(el, refNode, align) {\n var target = align.target || refNode;\n var refNodeRegion = getRegion(target);\n var isTargetNotOutOfVisible = !isOutOfVisibleRect(target, align.overflow && align.overflow.alwaysByViewport);\n return doAlign(el, refNodeRegion, align, isTargetNotOutOfVisible);\n}\nalignElement.__getOffsetParent = getOffsetParent;\nalignElement.__getVisibleRectForElement = getVisibleRectForElement;\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 var pageX;\n var pageY;\n var doc = utils.getDocument(el);\n var win = doc.defaultView || doc.parentWindow;\n var scrollX = utils.getWindowScrollLeft(win);\n var scrollY = utils.getWindowScrollTop(win);\n var viewportWidth = utils.viewportWidth(win);\n var viewportHeight = utils.viewportHeight(win);\n if ('pageX' in tgtPoint) {\n pageX = tgtPoint.pageX;\n } else {\n pageX = scrollX + tgtPoint.clientX;\n }\n if ('pageY' in tgtPoint) {\n pageY = tgtPoint.pageY;\n } else {\n pageY = scrollY + tgtPoint.clientY;\n }\n var tgtRegion = {\n left: pageX,\n top: pageY,\n width: 0,\n height: 0\n };\n var pointInView = pageX >= 0 && pageX <= scrollX + viewportWidth && pageY >= 0 && pageY <= scrollY + viewportHeight;\n\n // Provide default target point\n var points = [align.points[0], 'cc'];\n return doAlign(el, tgtRegion, _objectSpread2(_objectSpread2({}, align), {}, {\n points: points\n }), pointInView);\n}\n\nexport default alignElement;\nexport { alignElement, alignPoint };\n//# sourceMappingURL=index.js.map\n"],"names":["ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","target","i","source","key","_defineProperty","_typeof","obj","value","vendorPrefix","jsCssMap","getVendorPrefix","style","testProp","getTransitionName","getTransformName","setTransitionProperty","node","name","setTransform","getTransitionProperty","getTransformXY","transform","matrix","matrix2d","matrix3d","setTransformXY","xy","arr","match2d","item","match3d","RE_NUM","getComputedStyleX","forceRelayout","elem","originalStyle","css","el","v","getClientPosition","box","x","y","doc","body","docElem","getScroll","w","top","ret","method","d","getScrollLeft","getScrollTop","getOffset","pos","isWindow","getDocument","_getComputedStyle","cs","computedStyle","val","_RE_NUM_NO_PX","RE_POS","CURRENT_STYLE","RUNTIME_STYLE","LEFT","PX","_getComputedStyleIE","left","rsLeft","getOffsetDirection","dir","option","oppositeOffsetDirection","setLeftTop","offset","presetH","presetV","horizontalProperty","verticalProperty","oppositeHorizontalProperty","oppositeVerticalProperty","originalTransition","originalOffset","old","preset","off","_key","_dir","_off","setTransform$1","originalXY","resultXY","setOffset","oriOffset","oLeft","oTop","tLeft","tTop","each","fn","isBorderBoxFn","BOX_MODELS","CONTENT_INDEX","PADDING_INDEX","BORDER_INDEX","MARGIN_INDEX","swap","options","callback","getPBMWidth","props","which","prop","j","cssProp","domUtils","element","parent","refWin","win","documentElement","documentElementProp","getWH","ex","extra","borderBoxValue","isBorderBox","cssBoxValue","borderBoxValueOrIsBorderBox","cssShow","getWHIgnoreDisplay","_len","args","_key2","first","includeMargin","mix","to","from","utils","overflow","getParent","getOffsetParent","positionStyle","skipStatic","getParent$1","isAncestorFixed","getVisibleRectForElement","alwaysByViewport","visibleRect","originalPosition","position","scrollX","scrollY","viewportWidth","viewportHeight","documentWidth","documentHeight","bodyStyle","maxVisibleWidth","maxVisibleHeight","adjustForViewport","elFuturePos","elRegion","size","getRegion","h","getAlignOffset","region","align","V","H","getElFuturePos","refNodeRegion","points","targetOffset","p1","p2","diff","isFailX","isFailY","isCompleteFailX","isCompleteFailY","flip","reg","map","p","m","flipOffset","index","convertOffset","str","offsetLen","n","normalizeOffset","doAlign","tgtRegion","isTgtRegionVisible","newOverflowCfg","fail","newElRegion","newPoints","newOffset","newTargetOffset","newElFuturePos","_newPoints","_newOffset","_newTargetOffset","_newElFuturePos","isStillFailX","isStillFailY","_newPoints2","isOutOfVisibleRect","targetRegion","alignElement","refNode","isTargetNotOutOfVisible","alignPoint","tgtPoint","pageX","pageY","pointInView"],"mappings":"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","x_google_ignoreList":[0]}