b1c48b652dca53b5921cac1c8628293a.json 114 KB
{"ast":null,"code":"function _typeof(obj) {\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\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\n  return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(source, true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(source).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\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};\n\nfunction getVendorPrefix() {\n  if (vendorPrefix !== undefined) {\n    return vendorPrefix;\n  }\n\n  vendorPrefix = '';\n  var style = document.createElement('p').style;\n  var testProp = 'Transform';\n\n  for (var key in jsCssMap) {\n    if (key + testProp in style) {\n      vendorPrefix = key;\n    }\n  }\n\n  return vendorPrefix;\n}\n\nfunction getTransitionName() {\n  return getVendorPrefix() ? \"\".concat(getVendorPrefix(), \"TransitionProperty\") : 'transitionProperty';\n}\n\nfunction getTransformName() {\n  return getVendorPrefix() ? \"\".concat(getVendorPrefix(), \"Transform\") : 'transform';\n}\n\nfunction setTransitionProperty(node, value) {\n  var name = getTransitionName();\n\n  if (name) {\n    node.style[name] = value;\n\n    if (name !== 'transitionProperty') {\n      node.style.transitionProperty = value;\n    }\n  }\n}\n\nfunction setTransform(node, value) {\n  var name = getTransformName();\n\n  if (name) {\n    node.style[name] = value;\n\n    if (name !== 'transform') {\n      node.style.transform = value;\n    }\n  }\n}\n\nfunction getTransitionProperty(node) {\n  return node.style.transitionProperty || node.style[getTransitionName()];\n}\n\nfunction getTransformXY(node) {\n  var style = window.getComputedStyle(node, null);\n  var transform = style.getPropertyValue('transform') || style.getPropertyValue(getTransformName());\n\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\n  return {\n    x: 0,\n    y: 0\n  };\n}\n\nvar matrix2d = /matrix\\((.*)\\)/;\nvar matrix3d = /matrix3d\\((.*)\\)/;\n\nfunction setTransformXY(node, xy) {\n  var style = window.getComputedStyle(node, null);\n  var transform = style.getPropertyValue('transform') || style.getPropertyValue(getTransformName());\n\n  if (transform && transform !== 'none') {\n    var arr;\n    var match2d = transform.match(matrix2d);\n\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; // https://stackoverflow.com/a/3485654/3040605\n\nfunction forceRelayout(elem) {\n  var originalStyle = elem.style.display;\n  elem.style.display = 'none';\n  elem.offsetHeight; // eslint-disable-line\n\n  elem.style.display = originalStyle;\n}\n\nfunction css(el, name, v) {\n  var value = v;\n\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\n    return undefined;\n  }\n\n  if (typeof value !== 'undefined') {\n    if (typeof value === 'number') {\n      value = \"\".concat(value, \"px\");\n    }\n\n    el.style[name] = value;\n    return undefined;\n  }\n\n  return getComputedStyleX(el, name);\n}\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; // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式\n\n  box = elem.getBoundingClientRect(); // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop\n  // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确\n  // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin\n\n  x = box.left;\n  y = box.top; // 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  // 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  // 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}\n\nfunction getScroll(w, top) {\n  var ret = w[\"page\".concat(top ? 'Y' : 'X', \"Offset\")];\n  var method = \"scroll\".concat(top ? 'Top' : 'Left');\n\n  if (typeof ret !== 'number') {\n    var d = w.document; // ie6,7,8 standard mode\n\n    ret = d.documentElement[method];\n\n    if (typeof ret !== 'number') {\n      // quirks mode\n      ret = d.body[method];\n    }\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  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 * A crude way of determining if an object is a window\n * @member util\n */\n\n\nfunction isWindow(obj) {\n  // must use == for ie8\n\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\n  if (node.nodeType === 9) {\n    return node;\n  }\n\n  return node.ownerDocument;\n}\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); // https://github.com/kissyteam/kissy/issues/61\n\n  if (computedStyle) {\n    val = computedStyle.getPropertyValue(name) || computedStyle[name];\n  }\n\n  return val;\n}\n\nvar _RE_NUM_NO_PX = new RegExp(\"^(\".concat(RE_NUM, \")(?!px)[a-z%]+$\"), 'i');\n\nvar RE_POS = /^(top|right|bottom|left)$/;\nvar CURRENT_STYLE = 'currentStyle';\nvar RUNTIME_STYLE = 'runtimeStyle';\nvar LEFT = 'left';\nvar PX = 'px';\n\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]; // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值\n  // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n  // 在 ie 下不对,需要直接用 offset 方式\n  // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了\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\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]; // prevent flashing of content\n\n    elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT]; // Put in the new values to get a computed value out\n\n    style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n    ret = style.pixelLeft + PX; // Revert the changed values\n\n    style[LEFT] = left;\n    elem[RUNTIME_STYLE][LEFT] = rsLeft;\n  }\n\n  return ret === '' ? 'auto' : ret;\n}\n\nif (typeof window !== 'undefined') {\n  getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE;\n}\n\nfunction getOffsetDirection(dir, option) {\n  if (dir === 'left') {\n    return option.useCssRight ? 'right' : dir;\n  }\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} // 设置 elem 相对 elem.ownerDocument 的坐标\n\n\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\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\n  if (horizontalProperty !== 'left') {\n    presetH = 999;\n  }\n\n  if (verticalProperty !== 'top') {\n    presetV = 999;\n  }\n\n  var originalTransition = '';\n  var originalOffset = getOffset(elem);\n\n  if ('left' in offset || 'top' in offset) {\n    originalTransition = getTransitionProperty(elem) || '';\n    setTransitionProperty(elem, 'none');\n  }\n\n  if ('left' in offset) {\n    elem.style[oppositeHorizontalProperty] = '';\n    elem.style[horizontalProperty] = \"\".concat(presetH, \"px\");\n  }\n\n  if ('top' in offset) {\n    elem.style[oppositeVerticalProperty] = '';\n    elem.style[verticalProperty] = \"\".concat(presetV, \"px\");\n  } // force relayout\n\n\n  forceRelayout(elem);\n  var old = getOffset(elem);\n  var originalStyle = {};\n\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\n      if (dir === key) {\n        originalStyle[dir] = preset + off;\n      } else {\n        originalStyle[dir] = preset - off;\n      }\n    }\n  }\n\n  css(elem, originalStyle); // force relayout\n\n  forceRelayout(elem);\n\n  if ('left' in offset || 'top' in offset) {\n    setTransitionProperty(elem, originalTransition);\n  }\n\n  var ret = {};\n\n  for (var _key in offset) {\n    if (offset.hasOwnProperty(_key)) {\n      var _dir = getOffsetDirection(_key, option);\n\n      var _off = offset[_key] - originalOffset[_key];\n\n      if (_key === _dir) {\n        ret[_dir] = originalStyle[_dir] + _off;\n      } else {\n        ret[_dir] = originalStyle[_dir] - _off;\n      }\n    }\n  }\n\n  css(elem, ret);\n}\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\n  if ('left' in offset) {\n    resultXY.x = originalXY.x + offset.left - originalOffset.left;\n  }\n\n  if ('top' in offset) {\n    resultXY.y = originalXY.y + offset.top - originalOffset.top;\n  }\n\n  setTransformXY(elem, resultXY);\n}\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\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 (option.useCssTransform && getTransformName() in document.body.style) {\n    setTransform$1(elem, offset);\n  } else {\n    setLeftTop(elem, offset, option);\n  }\n}\n\nfunction each(arr, fn) {\n  for (var 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\nvar BOX_MODELS = ['margin', 'border', 'padding'];\nvar CONTENT_INDEX = -1;\nvar PADDING_INDEX = 2;\nvar BORDER_INDEX = 1;\nvar MARGIN_INDEX = 0;\n\nfunction swap(elem, options, callback) {\n  var old = {};\n  var style = elem.style;\n  var name; // Remember the old values, and insert the new ones\n\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); // Revert the old values\n\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  var value = 0;\n  var prop;\n  var j;\n  var i;\n\n  for (j = 0; j < props.length; j++) {\n    prop = props[j];\n\n    if (prop) {\n      for (i = 0; i < which.length; i++) {\n        var cssProp = void 0;\n\n        if (prop === 'border') {\n          cssProp = \"\".concat(prop).concat(which[i], \"Width\");\n        } else {\n          cssProp = prop + which[i];\n        }\n\n        value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n      }\n    }\n  }\n\n  return value;\n}\n\nvar domUtils = {\n  getParent: function getParent(element) {\n    var parent = element;\n\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\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( // firefox chrome documentElement.scrollHeight< body.scrollHeight\n    // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n    d.documentElement[\"scroll\".concat(name)], // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n    d.body[\"scroll\".concat(name)], domUtils[\"viewport\".concat(name)](d));\n  };\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]; // 标准模式取 documentElement\n    // backcompat 取 body\n\n    return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp;\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 */\n\nfunction getWH(elem, name, ex) {\n  var extra = ex;\n\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\n  var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n  var borderBoxValue = name === 'width' ? elem.getBoundingClientRect().width : elem.getBoundingClientRect().height;\n  var computedStyle = getComputedStyleX(elem);\n  var isBorderBox = isBorderBoxFn(elem);\n  var cssBoxValue = 0;\n\n  if (borderBoxValue === null || borderBoxValue === undefined || borderBoxValue <= 0) {\n    borderBoxValue = undefined; // Fall back to computed then un computed css if necessary\n\n    cssBoxValue = getComputedStyleX(elem, name);\n\n    if (cssBoxValue === null || cssBoxValue === undefined || Number(cssBoxValue) < 0) {\n      cssBoxValue = elem.style[name] || 0;\n    } // Normalize '', auto, and prepare for extra\n\n\n    cssBoxValue = parseFloat(cssBoxValue) || 0;\n  }\n\n  if (extra === undefined) {\n    extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n  }\n\n  var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;\n  var val = borderBoxValue || cssBoxValue;\n\n  if (extra === CONTENT_INDEX) {\n    if (borderBoxValueOrIsBorderBox) {\n      return 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\n    return val + (extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which) : getPBMWidth(elem, ['margin'], which));\n  }\n\n  return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which);\n}\n\nvar cssShow = {\n  position: 'absolute',\n  visibility: 'hidden',\n  display: 'block'\n}; // fix #119 : https://github.com/kissyteam/kissy/issues/119\n\nfunction getWHIgnoreDisplay() {\n  for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n\n  var val;\n  var elem = args[0]; // in case elem is window\n  // elem.offsetWidth === undefined\n\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\n  return val;\n}\n\neach(['width', 'height'], function (name) {\n  var first = name.charAt(0).toUpperCase() + name.slice(1);\n\n  domUtils[\"outer\".concat(first)] = function (el, includeMargin) {\n    return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);\n  };\n\n  var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n  domUtils[name] = function (elem, v) {\n    var val = v;\n\n    if (val !== undefined) {\n      if (elem) {\n        var computedStyle = getComputedStyleX(elem);\n        var isBorderBox = isBorderBoxFn(elem);\n\n        if (isBorderBox) {\n          val += getPBMWidth(elem, ['padding', 'border'], which);\n        }\n\n        return css(elem, name, val);\n      }\n\n      return undefined;\n    }\n\n    return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n  };\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\n  return to;\n}\n\nvar utils = {\n  getWindow: function getWindow(node) {\n    if (node && node.document && node.setTimeout) {\n      return node;\n    }\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\n    for (i in obj) {\n      if (obj.hasOwnProperty(i)) {\n        ret[i] = obj[i];\n      }\n    }\n\n    var overflow = obj.overflow;\n\n    if (overflow) {\n      for (i in obj) {\n        if (obj.hasOwnProperty(i)) {\n          ret.overflow[i] = obj.overflow[i];\n        }\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\n    for (var i = 0; i < arguments.length; i++) {\n      utils.mix(ret, i < 0 || arguments.length <= i ? undefined : arguments[i]);\n    }\n\n    return ret;\n  },\n  viewportWidth: 0,\n  viewportHeight: 0\n};\nmix(utils, domUtils);\n/**\n * 得到会导致元素显示不全的祖先元素\n */\n\nvar getParent = utils.getParent;\n\nfunction getOffsetParent(element) {\n  if (utils.isWindow(element) || element.nodeType === 9) {\n    return null;\n  } // ie 这个也不是完全可行\n\n  /*\n   <div style=\"width: 50px;height: 100px;overflow: hidden\">\n   <div style=\"width: 50px;height: 100px;position: relative;\" id=\"d6\">\n   元素 6 高 100px 宽 50px<br/>\n   </div>\n   </div>\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\n\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\n  if (!skipStatic) {\n    return element.nodeName.toLowerCase() === 'html' ? null : getParent(element);\n  }\n\n  for (parent = getParent(element); parent && parent !== body && parent.nodeType !== 9; parent = getParent(parent)) {\n    positionStyle = utils.css(parent, 'position');\n\n    if (positionStyle !== 'static') {\n      return parent;\n    }\n  }\n\n  return null;\n}\n\nvar getParent$1 = utils.getParent;\n\nfunction isAncestorFixed(element) {\n  if (utils.isWindow(element) || element.nodeType === 9) {\n    return false;\n  }\n\n  var doc = utils.getDocument(element);\n  var body = doc.body;\n  var parent = null;\n\n  for (parent = getParent$1(element); parent && parent !== body; parent = getParent$1(parent)) {\n    var positionStyle = utils.css(parent, 'position');\n\n    if (positionStyle === 'fixed') {\n      return true;\n    }\n  }\n\n  return false;\n}\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; // Determine the size of the visible rect by climbing the dom accounting for\n  // all scrollable containers.\n\n  while (el) {\n    // clientWidth is zero for inline block elements in ie.\n    if ((navigator.userAgent.indexOf('MSIE') === -1 || el.clientWidth !== 0) && // 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); // add border\n\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, // 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\n    el = getOffsetParent(el);\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\n\n  var originalPosition = null;\n\n  if (!utils.isWindow(element) && element.nodeType !== 9) {\n    originalPosition = element.style.position;\n    var position = utils.css(element, 'position');\n\n    if (position === 'absolute') {\n      element.style.position = 'fixed';\n    }\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; // scrollXXX on html is sync with body which means overflow: hidden on body gets wrong scrollXXX.\n  // We should cut this ourself.\n\n  var bodyStyle = window.getComputedStyle(body);\n\n  if (bodyStyle.overflowX === 'hidden') {\n    documentWidth = win.innerWidth;\n  }\n\n  if (bodyStyle.overflowY === 'hidden') {\n    documentHeight = win.innerHeight;\n  } // Reset element position after calculate the visible area\n\n\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    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\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\n  if (overflow.adjustX && pos.left < visibleRect.left) {\n    pos.left = visibleRect.left;\n  } // Left edge inside and right edge outside viewport, try to resize it.\n\n\n  if (overflow.resizeWidth && pos.left >= visibleRect.left && pos.left + size.width > visibleRect.right) {\n    size.width -= pos.left + size.width - visibleRect.right;\n  } // Right edge outside viewport, try to move it.\n\n\n  if (overflow.adjustX && pos.left + size.width > visibleRect.right) {\n    // 保证左边界和可视区域左边界对齐\n    pos.left = Math.max(visibleRect.right - size.width, visibleRect.left);\n  } // Top edge outside viewport, try to move it.\n\n\n  if (overflow.adjustY && pos.top < visibleRect.top) {\n    pos.top = visibleRect.top;\n  } // Top edge inside and bottom edge outside viewport, try to resize it.\n\n\n  if (overflow.resizeHeight && pos.top >= visibleRect.top && pos.top + size.height > visibleRect.bottom) {\n    size.height -= pos.top + size.height - visibleRect.bottom;\n  } // Bottom edge outside viewport, try to move it.\n\n\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\nfunction getRegion(node) {\n  var offset;\n  var w;\n  var h;\n\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\n  offset.width = w;\n  offset.height = h;\n  return offset;\n}\n/**\n * 获取 node 上的 align 对齐点 相对于页面的坐标\n */\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\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\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 * align dom node flexibly\n * @author yiminghe@gmail.com\n */\n\n\nfunction isFailX(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.left < visibleRect.left || elFuturePos.left + elRegion.width > visibleRect.right;\n}\n\nfunction isFailY(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.top < visibleRect.top || elFuturePos.top + elRegion.height > visibleRect.bottom;\n}\n\nfunction isCompleteFailX(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.left > visibleRect.right || elFuturePos.left + elRegion.width < visibleRect.left;\n}\n\nfunction isCompleteFailY(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.top > visibleRect.bottom || elFuturePos.top + elRegion.height < visibleRect.top;\n}\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}\n\nfunction flipOffset(offset, index) {\n  offset[index] = -offset[index];\n  return offset;\n}\n\nfunction convertOffset(str, offsetLen) {\n  var n;\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\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 * @param el\n * @param tgtRegion 参照节点所占的区域: { left, top, width, height }\n * @param align\n */\n\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); // 当前节点所占的区域, left/top/width/height\n\n  var elRegion = getRegion(source); // 将 offset 转换成数值,支持百分比\n\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  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\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        var _newPoints = flip(points, /[tb]/gi, {\n          t: 'b',\n          b: 't'\n        }); // 偏移量也反下\n\n\n        var _newOffset = flipOffset(offset, 1);\n\n        var _newTargetOffset = flipOffset(targetOffset, 1);\n\n        var _newElFuturePos = getElFuturePos(elRegion, tgtRegion, _newPoints, _newOffset, _newTargetOffset);\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(elRegion, tgtRegion, points, offset, targetOffset);\n      utils.mix(newElRegion, elFuturePos);\n    }\n\n    var isStillFailX = isFailX(elFuturePos, elRegion, visibleRect);\n    var isStillFailY = isFailY(elFuturePos, elRegion, visibleRect); // 检查反下后的位置是否可以放下了,如果仍然放不下:\n    // 1. 复原修改过的定位参数\n\n    if (isStillFailX || isStillFailY) {\n      var _newPoints2 = points; // 重置对应部分的翻转逻辑\n\n      if (isStillFailX) {\n        _newPoints2 = flip(points, /[lr]/gi, {\n          l: 'r',\n          r: 'l'\n        });\n      }\n\n      if (isStillFailY) {\n        _newPoints2 = flip(points, /[tb]/gi, {\n          t: 'b',\n          b: 't'\n        });\n      }\n\n      points = _newPoints2;\n      offset = align.offset || [0, 0];\n      targetOffset = align.targetOffset || [0, 0];\n    } // 2. 只有指定了可以调整当前方向才调整\n\n\n    newOverflowCfg.adjustX = overflow.adjustX && isStillFailX;\n    newOverflowCfg.adjustY = overflow.adjustY && isStillFailY; // 确实要调整,甚至可能会调整高度宽度\n\n    if (newOverflowCfg.adjustX || newOverflowCfg.adjustY) {\n      newElRegion = adjustForViewport(elFuturePos, elRegion, visibleRect, newOverflowCfg);\n    }\n  } // need judge to in case set fixed with in css on height auto element\n\n\n  if (newElRegion.width !== elRegion.width) {\n    utils.css(source, 'width', utils.width(source) + newElRegion.width - elRegion.width);\n  }\n\n  if (newElRegion.height !== elRegion.height) {\n    utils.css(source, 'height', utils.height(source) + newElRegion.height - elRegion.height);\n  } // https://github.com/kissyteam/kissy/issues/190\n  // 相对于屏幕位置没变,而 left/top 变了\n  // 例如 <div 'relative'><el absolute></div>\n\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\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}\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}\n\nalignElement.__getOffsetParent = getOffsetParent;\nalignElement.__getVisibleRectForElement = getVisibleRectForElement;\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\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  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; // Provide default target point\n\n  var points = [align.points[0], 'cc'];\n  return doAlign(el, tgtRegion, _objectSpread2({}, align, {\n    points: points\n  }), pointInView);\n}\n\nexport default alignElement;\nexport { alignElement, alignPoint };","map":{"version":3,"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"],"names":["jsCssMap","Webkit","Moz","ms","O","vendorPrefix","style","document","testProp","key","getVendorPrefix","name","getTransitionName","node","getTransformName","window","transform","matrix","x","parseFloat","y","matrix2d","matrix3d","match2d","arr","xy","setTransform","match3d","RE_NUM","originalStyle","elem","value","css","el","getComputedStyleX","doc","body","docElem","box","left","top","ret","w","method","d","getScroll","pos","getClientPosition","getScrollLeft","getScrollTop","obj","isWindow","computedStyle","val","getDocument","_RE_NUM_NO_PX","RE_POS","CURRENT_STYLE","RUNTIME_STYLE","LEFT","PX","rsLeft","dir","option","presetH","presetV","horizontalProperty","getOffsetDirection","verticalProperty","oppositeHorizontalProperty","oppositeOffsetDirection","oppositeVerticalProperty","originalTransition","originalOffset","getOffset","getTransitionProperty","setTransitionProperty","forceRelayout","old","offset","preset","off","originalXY","getTransformXY","resultXY","setTransformXY","oriOffset","oLeft","oTop","tLeft","tTop","setLeftTop","i","fn","BOX_MODELS","CONTENT_INDEX","PADDING_INDEX","BORDER_INDEX","MARGIN_INDEX","options","callback","j","props","prop","which","cssProp","domUtils","getParent","parent","each","refWin","Math","win","documentElement","documentElementProp","extra","borderBoxValue","isBorderBox","isBorderBoxFn","cssBoxValue","Number","borderBoxValueOrIsBorderBox","getPBMWidth","cssShow","position","visibility","display","args","getWH","swap","first","getWHIgnoreDisplay","includeMargin","from","to","utils","getWindow","setOffset","clone","overflow","mix","getWindowScrollLeft","getWindowScrollTop","merge","viewportWidth","viewportHeight","element","positionStyle","skipStatic","visibleRect","right","bottom","Infinity","getOffsetParent","navigator","originalPosition","scrollX","scrollY","documentWidth","documentHeight","bodyStyle","alwaysByViewport","isAncestorFixed","maxVisibleWidth","maxVisibleHeight","size","width","elRegion","height","h","V","align","H","region","p1","getAlignOffset","points","p2","diff","targetOffset","elFuturePos","map","n","parseInt","str","convertOffset","source","newOverflowCfg","fail","getVisibleRectForElement","getRegion","normalizeOffset","getElFuturePos","newElRegion","isFailX","newPoints","flip","l","r","newOffset","flipOffset","newTargetOffset","newElFuturePos","isCompleteFailX","isFailY","t","b","isCompleteFailY","isStillFailX","isStillFailY","adjustForViewport","useCssRight","useCssBottom","useCssTransform","ignoreShake","targetRegion","target","refNodeRegion","isTargetNotOutOfVisible","isOutOfVisibleRect","doAlign","alignElement","pageX","tgtPoint","pageY","tgtRegion","pointInView"],"mappings":"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","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 computedStyle = getComputedStyleX(elem);\n  const isBorderBox = isBorderBoxFn(elem, computedStyle);\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, computedStyle)\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, computedStyle)\n        : getPBMWidth(elem, ['margin'], which, computedStyle))\n    );\n  }\n  return (\n    cssBoxValue +\n    getPBMWidth(elem, BOX_MODELS.slice(extra), which, computedStyle)\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 computedStyle = getComputedStyleX(elem);\n        const isBorderBox = isBorderBoxFn(elem);\n        if (isBorderBox) {\n          val += getPBMWidth(elem, ['padding', 'border'], which, computedStyle);\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   <div style=\"width: 50px;height: 100px;overflow: hidden\">\n   <div style=\"width: 50px;height: 100px;position: relative;\" id=\"d6\">\n   元素 6 高 100px 宽 50px<br/>\n   </div>\n   </div>\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    parent && parent !== body;\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  // 例如 <div 'relative'><el absolute></div>\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"]},"metadata":{},"sourceType":"module"}