{"version":3,"sources":["webpack:///./node_modules/lodash/matchesProperty.js","webpack:///./node_modules/lodash/fp/propEq.js","webpack:///./node_modules/antd/node_modules/rc-util/es/Dom/addEventListener.js","webpack:///./node_modules/rc-util/es/ref.js","webpack:///./node_modules/gatsby-theme-docz/node_modules/@mdx-js/react/dist/esm.js","webpack:///./node_modules/gatsby-theme-docz/src/hooks/useDbQuery.js","webpack:///./node_modules/gatsby-theme-docz/src/wrapper.js","webpack:///./node_modules/antd/es/_util/throttleByAnimationFrame.js","webpack:///./node_modules/antd/es/affix/utils.js","webpack:///./node_modules/antd/es/affix/index.js","webpack:///./node_modules/antd/es/_util/getScroll.js","webpack:///./node_modules/antd/es/_util/easings.js","webpack:///./node_modules/antd/es/_util/scrollTo.js","webpack:///./node_modules/antd/es/anchor/context.js","webpack:///./node_modules/antd/es/anchor/Anchor.js","webpack:///./node_modules/antd/es/anchor/AnchorLink.js","webpack:///./node_modules/antd/es/anchor/index.js","webpack:///./src/components/AnchorNavigator.tsx","webpack:///./src/components/next.tsx","webpack:///./src/gatsby-theme-docz/index.tsx","webpack:///./node_modules/gatsby-theme-docz/src/base/Seo.js","webpack:///./node_modules/gatsby-theme-docz/src/base/Layout.js","webpack:///./node_modules/lodash/fp/matchesProperty.js","webpack:///./node_modules/rc-resize-observer/es/index.js","webpack:///./node_modules/rc-util/es/Dom/findDOMNode.js"],"names":["baseClone","baseMatchesProperty","module","exports","path","srcValue","addEventListenerWrap","target","eventType","cb","option","callback","unstable_batchedUpdates","e","addEventListener","remove","removeEventListener","_typeof","obj","Symbol","iterator","constructor","prototype","fillRef","ref","node","current","composeRef","_len","arguments","length","refs","Array","_key","forEach","supportRef","nodeOrComponent","_type$prototype","_nodeOrComponent$prot","type","render","_defineProperty","key","Object","value","enumerable","configurable","writable","_extends","i","source","ownKeys","object","keys","symbols","_objectSpread2","_objectWithoutProperties","sourceKeys","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","MDXContext","React","withMDXComponents","Component","allComponents","useMDXComponents","props","components","contextComponents","isFunction","MDXProvider","DEFAULTS","inlineCode","wrapper","_ref","children","MDXCreateElement","propComponents","mdxType","originalType","parentName","etc","concat","createElement","args","argsLength","createElementArgArray","newProps","hasOwnProperty","useDbQuery","data","useStaticQuery","JSON","console","Wrapper","throttleByAnimationFrameDecorator","descriptor","fn","definingProperty","get","this","boundFn","requestId","later","apply","throttled","cancel","throttleByAnimationFrame","bind","defineProperty","getTargetRect","window","getBoundingClientRect","top","bottom","innerHeight","getFixedTop","placeholderReact","targetRect","offsetTop","undefined","getFixedBottom","offsetBottom","TRIGGER_EVENTS","observerEntities","addObserveTarget","affix","entity","find","item","affixList","push","eventHandlers","eventName","targetAffix","lazyUpdatePosition","removeObserveTarget","observerEntity","oriObserverEntity","hasAffix","some","filter","handler","AffixStatus","__decorate","decorators","desc","d","c","r","getOwnPropertyDescriptor","Reflect","decorate","getDefaultTarget","_React$Component","Affix","_super","_this","state","status","None","lastAffix","prevTarget","getOffsetTop","getOffsetBottom","savePlaceholderNode","placeholderNode","saveFixedNode","fixedNode","measure","_this$state","onChange","targetFunc","getTargetFunc","Prepare","targetNode","newState","fixedTop","fixedBottom","affixStyle","position","width","height","placeholderStyle","setState","prepareMeasure","getPrefixCls","context","_this$state2","_this$props","prefixCls","className","onResize","updatePosition","style","getTargetContainer","_this2","timeout","setTimeout","prevProps","newTarget","clearTimeout","contextType","isWindow","getScroll","method","result","Document","documentElement","ownerDocument","easeInOutCubic","t","b","cc","scrollTo","y","options","_options$getContainer","getContainer","_options$duration","duration","container","scrollTop","startTime","Date","now","frameFunc","time","nextScrollTop","pageXOffset","HTMLDocument","name","getDefaultContainer","element","getClientRects","rect","clientTop","sharpMatcherRegx","Anchor","activeLink","links","registerLink","link","includes","unregisterLink","index","indexOf","splice","handleScrollTo","targetOffset","setCurrentActiveLink","sharpLinkMatch","exec","targetElement","document","getElementById","animating","saveInkNode","inkNode","handleScroll","_this$props2","bounds","currentActiveLink","getCurrentAnchor","updateInk","linkNode","getElementsByClassName","clientHeight","_this$context","direction","_this$props3","customizePrefixCls","_this$props3$classNam","showInkInFixed","inkClass","visible","wrapperClass","anchorClass","fixed","wrapperStyle","maxHeight","anchorContent","Provider","onClick","scrollContainer","scrollEvent","currentContainer","linkSections","toString","maxSection","reduce","prev","curr","defaultProps","AnchorLink","handleClick","href","title","renderAnchorLink","active","wrapperClassName","titleClassName","_ref2","prevHref","Link","anchorNavStyle","css","mq","HeaderNav","menus","useMenus","headings","getActiveMenuItem","map","slug","nextButtons","getPreviousAndNextUrls","prevUrl","nextUrl","docLayout","theme","config","useConfig","AnchorNavigator","SEO","description","lang","meta","keywords","initialTitle","db","metaDescription","titleTemplate","htmlAttributes","content","property","Route","entry","isTransclusion","useComponents","NotFound","Layout","doc","ctx","isIndex","eqIndex","filepath","findEntry","entries","includesTransclusion","currentEntry","func","convert","placeholder","ReactResizeObserver","resizeObserver","childNode","currentElement","offsetHeight","offsetWidth","_target$getBoundingCl","fixedWidth","Math","floor","fixedHeight","size","Promise","resolve","then","setChildNode","onComponentUpdated","destroyObserver","disabled","HTMLElement","findDOMNode","observe","disconnect","childNodes","toArray","warning","displayName"],"mappings":"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","file":"804f16158a7ef42a7bad4c7877b41224126ae8d1-16143f597378037bb2e6.js","sourcesContent":["var baseClone = require('./_baseClone'),\n    baseMatchesProperty = require('./_baseMatchesProperty');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1;\n\n/**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n *   { 'a': 1, 'b': 2, 'c': 3 },\n *   { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n */\nfunction matchesProperty(path, srcValue) {\n  return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n}\n\nmodule.exports = matchesProperty;\n","module.exports = require('./matchesProperty');\n","import ReactDOM from 'react-dom';\nexport default function addEventListenerWrap(target, eventType, cb, option) {\n  /* eslint camelcase: 2 */\n  var callback = ReactDOM.unstable_batchedUpdates ? function run(e) {\n    ReactDOM.unstable_batchedUpdates(cb, e);\n  } : cb;\n\n  if (target.addEventListener) {\n    target.addEventListener(eventType, callback, option);\n  }\n\n  return {\n    remove: function remove() {\n      if (target.removeEventListener) {\n        target.removeEventListener(eventType, callback);\n      }\n    }\n  };\n}","function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function _typeof(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\nimport { isMemo } from 'react-is';\nexport function fillRef(ref, node) {\n  if (typeof ref === 'function') {\n    ref(node);\n  } else if (_typeof(ref) === 'object' && ref && 'current' in ref) {\n    ref.current = node;\n  }\n}\n/**\n * Merge refs into one ref function to support ref passing.\n */\n\nexport function composeRef() {\n  for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n    refs[_key] = arguments[_key];\n  }\n\n  return function (node) {\n    refs.forEach(function (ref) {\n      fillRef(ref, node);\n    });\n  };\n}\nexport function supportRef(nodeOrComponent) {\n  var _type$prototype, _nodeOrComponent$prot;\n\n  var type = isMemo(nodeOrComponent) ? nodeOrComponent.type.type : nodeOrComponent.type; // Function component node\n\n  if (typeof type === 'function' && !((_type$prototype = type.prototype) === null || _type$prototype === void 0 ? void 0 : _type$prototype.render)) {\n    return false;\n  } // Class component\n\n\n  if (typeof nodeOrComponent === 'function' && !((_nodeOrComponent$prot = nodeOrComponent.prototype) === null || _nodeOrComponent$prot === void 0 ? void 0 : _nodeOrComponent$prot.render)) {\n    return false;\n  }\n\n  return true;\n}\n/* eslint-enable */","import React from 'react';\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 _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\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(Object(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(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n\n  var target = _objectWithoutPropertiesLoose(source, excluded);\n\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nvar isFunction = function isFunction(obj) {\n  return typeof obj === 'function';\n};\n\nvar MDXContext = /*#__PURE__*/React.createContext({});\nvar withMDXComponents = function withMDXComponents(Component) {\n  return function (props) {\n    var allComponents = useMDXComponents(props.components);\n    return /*#__PURE__*/React.createElement(Component, _extends({}, props, {\n      components: allComponents\n    }));\n  };\n};\nvar useMDXComponents = function useMDXComponents(components) {\n  var contextComponents = React.useContext(MDXContext);\n  var allComponents = contextComponents;\n\n  if (components) {\n    allComponents = isFunction(components) ? components(contextComponents) : _objectSpread2(_objectSpread2({}, contextComponents), components);\n  }\n\n  return allComponents;\n};\nvar MDXProvider = function MDXProvider(props) {\n  var allComponents = useMDXComponents(props.components);\n  return /*#__PURE__*/React.createElement(MDXContext.Provider, {\n    value: allComponents\n  }, props.children);\n};\n\nvar TYPE_PROP_NAME = 'mdxType';\nvar DEFAULTS = {\n  inlineCode: 'code',\n  wrapper: function wrapper(_ref) {\n    var children = _ref.children;\n    return /*#__PURE__*/React.createElement(React.Fragment, {}, children);\n  }\n};\nvar MDXCreateElement = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  var propComponents = props.components,\n      mdxType = props.mdxType,\n      originalType = props.originalType,\n      parentName = props.parentName,\n      etc = _objectWithoutProperties(props, [\"components\", \"mdxType\", \"originalType\", \"parentName\"]);\n\n  var components = useMDXComponents(propComponents);\n  var type = mdxType;\n  var Component = components[\"\".concat(parentName, \".\").concat(type)] || components[type] || DEFAULTS[type] || originalType;\n\n  if (propComponents) {\n    return /*#__PURE__*/React.createElement(Component, _objectSpread2(_objectSpread2({\n      ref: ref\n    }, etc), {}, {\n      components: propComponents\n    }));\n  }\n\n  return /*#__PURE__*/React.createElement(Component, _objectSpread2({\n    ref: ref\n  }, etc));\n});\nMDXCreateElement.displayName = 'MDXCreateElement';\nfunction createElement (type, props) {\n  var args = arguments;\n  var mdxType = props && props.mdxType;\n\n  if (typeof type === 'string' || mdxType) {\n    var argsLength = args.length;\n    var createElementArgArray = new Array(argsLength);\n    createElementArgArray[0] = MDXCreateElement;\n    var newProps = {};\n\n    for (var key in props) {\n      if (hasOwnProperty.call(props, key)) {\n        newProps[key] = props[key];\n      }\n    }\n\n    newProps.originalType = type;\n    newProps[TYPE_PROP_NAME] = typeof type === 'string' ? type : mdxType;\n    createElementArgArray[1] = newProps;\n\n    for (var i = 2; i < argsLength; i++) {\n      createElementArgArray[i] = args[i];\n    }\n\n    return React.createElement.apply(null, createElementArgArray);\n  }\n\n  return React.createElement.apply(null, args);\n}\n\nexport { MDXContext, MDXProvider, createElement as mdx, useMDXComponents, withMDXComponents };\n","import { useStaticQuery, graphql } from 'gatsby'\n\nexport const useDbQuery = () => {\n  try {\n    const data = useStaticQuery(graphql`\n      query {\n        doczDb {\n          id\n          db\n        }\n      }\n    `)\n\n    return JSON.parse(data.doczDb.db)\n  } catch (err) {\n    console.error(err)\n    console.error('Error when parsing docz database')\n    return {}\n  }\n}\n","import * as React from 'react'\n\nconst Wrapper = ({ children }) => <React.Fragment>{children}</React.Fragment>\nexport default Wrapper\n","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport raf from 'raf';\nexport function throttleByAnimationFrame(fn) {\n  var requestId;\n\n  var later = function later(args) {\n    return function () {\n      requestId = null;\n      fn.apply(void 0, _toConsumableArray(args));\n    };\n  };\n\n  var throttled = function throttled() {\n    if (requestId == null) {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      requestId = raf(later(args));\n    }\n  };\n\n  throttled.cancel = function () {\n    return raf.cancel(requestId);\n  };\n\n  return throttled;\n}\nexport function throttleByAnimationFrameDecorator() {\n  return function throttle(target, key, descriptor) {\n    var fn = descriptor.value;\n    var definingProperty = false;\n    return {\n      configurable: true,\n      get: function get() {\n        // In IE11 calling Object.defineProperty has a side-effect of evaluating the\n        // getter for the property which is being replaced. This causes infinite\n        // recursion and an \"Out of stack space\" error.\n        // eslint-disable-next-line no-prototype-builtins\n        if (definingProperty || this === target.prototype || this.hasOwnProperty(key)) {\n          /* istanbul ignore next */\n          return fn;\n        }\n\n        var boundFn = throttleByAnimationFrame(fn.bind(this));\n        definingProperty = true;\n        Object.defineProperty(this, key, {\n          value: boundFn,\n          configurable: true,\n          writable: true\n        });\n        definingProperty = false;\n        return boundFn;\n      }\n    };\n  };\n}","import addEventListener from \"rc-util/es/Dom/addEventListener\";\nexport function getTargetRect(target) {\n  return target !== window ? target.getBoundingClientRect() : {\n    top: 0,\n    bottom: window.innerHeight\n  };\n}\nexport function getFixedTop(placeholderReact, targetRect, offsetTop) {\n  if (offsetTop !== undefined && targetRect.top > placeholderReact.top - offsetTop) {\n    return offsetTop + targetRect.top;\n  }\n\n  return undefined;\n}\nexport function getFixedBottom(placeholderReact, targetRect, offsetBottom) {\n  if (offsetBottom !== undefined && targetRect.bottom < placeholderReact.bottom + offsetBottom) {\n    var targetBottomOffset = window.innerHeight - targetRect.bottom;\n    return offsetBottom + targetBottomOffset;\n  }\n\n  return undefined;\n} // ======================== Observer ========================\n\nvar TRIGGER_EVENTS = ['resize', 'scroll', 'touchstart', 'touchmove', 'touchend', 'pageshow', 'load'];\nvar observerEntities = [];\nexport function getObserverEntities() {\n  // Only used in test env. Can be removed if refactor.\n  return observerEntities;\n}\nexport function addObserveTarget(target, affix) {\n  if (!target) return;\n  var entity = observerEntities.find(function (item) {\n    return item.target === target;\n  });\n\n  if (entity) {\n    entity.affixList.push(affix);\n  } else {\n    entity = {\n      target: target,\n      affixList: [affix],\n      eventHandlers: {}\n    };\n    observerEntities.push(entity); // Add listener\n\n    TRIGGER_EVENTS.forEach(function (eventName) {\n      entity.eventHandlers[eventName] = addEventListener(target, eventName, function () {\n        entity.affixList.forEach(function (targetAffix) {\n          targetAffix.lazyUpdatePosition();\n        });\n      });\n    });\n  }\n}\nexport function removeObserveTarget(affix) {\n  var observerEntity = observerEntities.find(function (oriObserverEntity) {\n    var hasAffix = oriObserverEntity.affixList.some(function (item) {\n      return item === affix;\n    });\n\n    if (hasAffix) {\n      oriObserverEntity.affixList = oriObserverEntity.affixList.filter(function (item) {\n        return item !== affix;\n      });\n    }\n\n    return hasAffix;\n  });\n\n  if (observerEntity && observerEntity.affixList.length === 0) {\n    observerEntities = observerEntities.filter(function (item) {\n      return item !== observerEntity;\n    }); // Remove listener\n\n    TRIGGER_EVENTS.forEach(function (eventName) {\n      var handler = observerEntity.eventHandlers[eventName];\n\n      if (handler && handler.remove) {\n        handler.remove();\n      }\n    });\n  }\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/createSuper\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if ((typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport omit from 'omit.js';\nimport ResizeObserver from 'rc-resize-observer';\nimport { ConfigContext } from '../config-provider';\nimport { throttleByAnimationFrameDecorator } from '../_util/throttleByAnimationFrame';\nimport { addObserveTarget, removeObserveTarget, getTargetRect, getFixedTop, getFixedBottom } from './utils';\n\nfunction getDefaultTarget() {\n  return typeof window !== 'undefined' ? window : null;\n}\n\nvar AffixStatus;\n\n(function (AffixStatus) {\n  AffixStatus[AffixStatus[\"None\"] = 0] = \"None\";\n  AffixStatus[AffixStatus[\"Prepare\"] = 1] = \"Prepare\";\n})(AffixStatus || (AffixStatus = {}));\n\nvar Affix = /*#__PURE__*/function (_React$Component) {\n  _inherits(Affix, _React$Component);\n\n  var _super = _createSuper(Affix);\n\n  function Affix() {\n    var _this;\n\n    _classCallCheck(this, Affix);\n\n    _this = _super.apply(this, arguments);\n    _this.state = {\n      status: AffixStatus.None,\n      lastAffix: false,\n      prevTarget: null\n    };\n\n    _this.getOffsetTop = function () {\n      var offsetBottom = _this.props.offsetBottom;\n      var offsetTop = _this.props.offsetTop;\n\n      if (offsetBottom === undefined && offsetTop === undefined) {\n        offsetTop = 0;\n      }\n\n      return offsetTop;\n    };\n\n    _this.getOffsetBottom = function () {\n      return _this.props.offsetBottom;\n    };\n\n    _this.savePlaceholderNode = function (node) {\n      _this.placeholderNode = node;\n    };\n\n    _this.saveFixedNode = function (node) {\n      _this.fixedNode = node;\n    }; // =================== Measure ===================\n\n\n    _this.measure = function () {\n      var _this$state = _this.state,\n          status = _this$state.status,\n          lastAffix = _this$state.lastAffix;\n      var onChange = _this.props.onChange;\n\n      var targetFunc = _this.getTargetFunc();\n\n      if (status !== AffixStatus.Prepare || !_this.fixedNode || !_this.placeholderNode || !targetFunc) {\n        return;\n      }\n\n      var offsetTop = _this.getOffsetTop();\n\n      var offsetBottom = _this.getOffsetBottom();\n\n      var targetNode = targetFunc();\n\n      if (!targetNode) {\n        return;\n      }\n\n      var newState = {\n        status: AffixStatus.None\n      };\n      var targetRect = getTargetRect(targetNode);\n      var placeholderReact = getTargetRect(_this.placeholderNode);\n      var fixedTop = getFixedTop(placeholderReact, targetRect, offsetTop);\n      var fixedBottom = getFixedBottom(placeholderReact, targetRect, offsetBottom);\n\n      if (fixedTop !== undefined) {\n        newState.affixStyle = {\n          position: 'fixed',\n          top: fixedTop,\n          width: placeholderReact.width,\n          height: placeholderReact.height\n        };\n        newState.placeholderStyle = {\n          width: placeholderReact.width,\n          height: placeholderReact.height\n        };\n      } else if (fixedBottom !== undefined) {\n        newState.affixStyle = {\n          position: 'fixed',\n          bottom: fixedBottom,\n          width: placeholderReact.width,\n          height: placeholderReact.height\n        };\n        newState.placeholderStyle = {\n          width: placeholderReact.width,\n          height: placeholderReact.height\n        };\n      }\n\n      newState.lastAffix = !!newState.affixStyle;\n\n      if (onChange && lastAffix !== newState.lastAffix) {\n        onChange(newState.lastAffix);\n      }\n\n      _this.setState(newState);\n    }; // @ts-ignore TS6133\n\n\n    _this.prepareMeasure = function () {\n      // event param is used before. Keep compatible ts define here.\n      _this.setState({\n        status: AffixStatus.Prepare,\n        affixStyle: undefined,\n        placeholderStyle: undefined\n      }); // Test if `updatePosition` called\n\n\n      if (process.env.NODE_ENV === 'test') {\n        var onTestUpdatePosition = _this.props.onTestUpdatePosition;\n\n        if (onTestUpdatePosition) {\n          onTestUpdatePosition();\n        }\n      }\n    }; // =================== Render ===================\n\n\n    _this.render = function () {\n      var getPrefixCls = _this.context.getPrefixCls;\n      var _this$state2 = _this.state,\n          affixStyle = _this$state2.affixStyle,\n          placeholderStyle = _this$state2.placeholderStyle;\n      var _this$props = _this.props,\n          prefixCls = _this$props.prefixCls,\n          children = _this$props.children;\n      var className = classNames(_defineProperty({}, getPrefixCls('affix', prefixCls), affixStyle));\n      var props = omit(_this.props, ['prefixCls', 'offsetTop', 'offsetBottom', 'target', 'onChange']); // Omit this since `onTestUpdatePosition` only works on test.\n\n      if (process.env.NODE_ENV === 'test') {\n        props = omit(props, ['onTestUpdatePosition']);\n      }\n\n      return /*#__PURE__*/React.createElement(ResizeObserver, {\n        onResize: function onResize() {\n          _this.updatePosition();\n        }\n      }, /*#__PURE__*/React.createElement(\"div\", _extends({}, props, {\n        ref: _this.savePlaceholderNode\n      }), affixStyle && /*#__PURE__*/React.createElement(\"div\", {\n        style: placeholderStyle,\n        \"aria-hidden\": \"true\"\n      }), /*#__PURE__*/React.createElement(\"div\", {\n        className: className,\n        ref: _this.saveFixedNode,\n        style: affixStyle\n      }, /*#__PURE__*/React.createElement(ResizeObserver, {\n        onResize: function onResize() {\n          _this.updatePosition();\n        }\n      }, children))));\n    };\n\n    return _this;\n  }\n\n  _createClass(Affix, [{\n    key: \"getTargetFunc\",\n    value: function getTargetFunc() {\n      var getTargetContainer = this.context.getTargetContainer;\n      var target = this.props.target;\n\n      if (target !== undefined) {\n        return target;\n      }\n\n      return getTargetContainer || getDefaultTarget;\n    } // Event handler\n\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      var targetFunc = this.getTargetFunc();\n\n      if (targetFunc) {\n        // [Legacy] Wait for parent component ref has its value.\n        // We should use target as directly element instead of function which makes element check hard.\n        this.timeout = setTimeout(function () {\n          addObserveTarget(targetFunc(), _this2); // Mock Event object.\n\n          _this2.updatePosition();\n        });\n      }\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var prevTarget = this.state.prevTarget;\n      var targetFunc = this.getTargetFunc();\n      var newTarget = null;\n\n      if (targetFunc) {\n        newTarget = targetFunc() || null;\n      }\n\n      if (prevTarget !== newTarget) {\n        removeObserveTarget(this);\n\n        if (newTarget) {\n          addObserveTarget(newTarget, this); // Mock Event object.\n\n          this.updatePosition();\n        } // eslint-disable-next-line react/no-did-update-set-state\n\n\n        this.setState({\n          prevTarget: newTarget\n        });\n      }\n\n      if (prevProps.offsetTop !== this.props.offsetTop || prevProps.offsetBottom !== this.props.offsetBottom) {\n        this.updatePosition();\n      }\n\n      this.measure();\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      clearTimeout(this.timeout);\n      removeObserveTarget(this);\n      this.updatePosition.cancel(); // https://github.com/ant-design/ant-design/issues/22683\n\n      this.lazyUpdatePosition.cancel();\n    } // Handle realign logic\n\n  }, {\n    key: \"updatePosition\",\n    value: function updatePosition() {\n      this.prepareMeasure();\n    }\n  }, {\n    key: \"lazyUpdatePosition\",\n    value: function lazyUpdatePosition() {\n      var targetFunc = this.getTargetFunc();\n      var affixStyle = this.state.affixStyle; // Check position change before measure to make Safari smooth\n\n      if (targetFunc && affixStyle) {\n        var offsetTop = this.getOffsetTop();\n        var offsetBottom = this.getOffsetBottom();\n        var targetNode = targetFunc();\n\n        if (targetNode && this.placeholderNode) {\n          var targetRect = getTargetRect(targetNode);\n          var placeholderReact = getTargetRect(this.placeholderNode);\n          var fixedTop = getFixedTop(placeholderReact, targetRect, offsetTop);\n          var fixedBottom = getFixedBottom(placeholderReact, targetRect, offsetBottom);\n\n          if (fixedTop !== undefined && affixStyle.top === fixedTop || fixedBottom !== undefined && affixStyle.bottom === fixedBottom) {\n            return;\n          }\n        }\n      } // Directly call prepare measure since it's already throttled.\n\n\n      this.prepareMeasure();\n    }\n  }]);\n\n  return Affix;\n}(React.Component);\n\nAffix.contextType = ConfigContext;\n\n__decorate([throttleByAnimationFrameDecorator()], Affix.prototype, \"updatePosition\", null);\n\n__decorate([throttleByAnimationFrameDecorator()], Affix.prototype, \"lazyUpdatePosition\", null);\n\nexport default Affix;","export function isWindow(obj) {\n  return obj !== null && obj !== undefined && obj === obj.window;\n}\nexport default function getScroll(target, top) {\n  if (typeof window === 'undefined') {\n    return 0;\n  }\n\n  var method = top ? 'scrollTop' : 'scrollLeft';\n  var result = 0;\n\n  if (isWindow(target)) {\n    result = target[top ? 'pageYOffset' : 'pageXOffset'];\n  } else if (target instanceof Document) {\n    result = target.documentElement[method];\n  } else if (target) {\n    result = target[method];\n  }\n\n  if (target && !isWindow(target) && typeof result !== 'number') {\n    result = (target.ownerDocument || target).documentElement[method];\n  }\n\n  return result;\n}","// eslint-disable-next-line import/prefer-default-export\nexport function easeInOutCubic(t, b, c, d) {\n  var cc = c - b;\n  t /= d / 2;\n\n  if (t < 1) {\n    return cc / 2 * t * t * t + b;\n  } // eslint-disable-next-line no-return-assign\n\n\n  return cc / 2 * ((t -= 2) * t * t + 2) + b;\n}","import raf from 'raf';\nimport getScroll, { isWindow } from './getScroll';\nimport { easeInOutCubic } from './easings';\nexport default function scrollTo(y) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _options$getContainer = options.getContainer,\n      getContainer = _options$getContainer === void 0 ? function () {\n    return window;\n  } : _options$getContainer,\n      callback = options.callback,\n      _options$duration = options.duration,\n      duration = _options$duration === void 0 ? 450 : _options$duration;\n  var container = getContainer();\n  var scrollTop = getScroll(container, true);\n  var startTime = Date.now();\n\n  var frameFunc = function frameFunc() {\n    var timestamp = Date.now();\n    var time = timestamp - startTime;\n    var nextScrollTop = easeInOutCubic(time > duration ? duration : time, scrollTop, y, duration);\n\n    if (isWindow(container)) {\n      container.scrollTo(window.pageXOffset, nextScrollTop);\n    } else if (container instanceof HTMLDocument || container.constructor.name === 'HTMLDocument') {\n      container.documentElement.scrollTop = nextScrollTop;\n    } else {\n      container.scrollTop = nextScrollTop;\n    }\n\n    if (time < duration) {\n      raf(frameFunc);\n    } else if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  raf(frameFunc);\n}","import * as React from 'react';\nvar AnchorContext = /*#__PURE__*/React.createContext(null);\nexport default AnchorContext;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/createSuper\";\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport Affix from '../affix';\nimport { ConfigContext } from '../config-provider';\nimport scrollTo from '../_util/scrollTo';\nimport getScroll from '../_util/getScroll';\nimport AnchorContext from './context';\n\nfunction getDefaultContainer() {\n  return window;\n}\n\nfunction getOffsetTop(element, container) {\n  if (!element.getClientRects().length) {\n    return 0;\n  }\n\n  var rect = element.getBoundingClientRect();\n\n  if (rect.width || rect.height) {\n    if (container === window) {\n      container = element.ownerDocument.documentElement;\n      return rect.top - container.clientTop;\n    }\n\n    return rect.top - container.getBoundingClientRect().top;\n  }\n\n  return rect.top;\n}\n\nvar sharpMatcherRegx = /#(\\S+)$/;\n\nvar Anchor = /*#__PURE__*/function (_React$Component) {\n  _inherits(Anchor, _React$Component);\n\n  var _super = _createSuper(Anchor);\n\n  function Anchor() {\n    var _this;\n\n    _classCallCheck(this, Anchor);\n\n    _this = _super.apply(this, arguments);\n    _this.state = {\n      activeLink: null\n    };\n    _this.links = []; // Context\n\n    _this.registerLink = function (link) {\n      if (!_this.links.includes(link)) {\n        _this.links.push(link);\n      }\n    };\n\n    _this.unregisterLink = function (link) {\n      var index = _this.links.indexOf(link);\n\n      if (index !== -1) {\n        _this.links.splice(index, 1);\n      }\n    };\n\n    _this.getContainer = function () {\n      var getTargetContainer = _this.context.getTargetContainer;\n      var getContainer = _this.props.getContainer;\n      var getFunc = getContainer || getTargetContainer || getDefaultContainer;\n      return getFunc();\n    };\n\n    _this.handleScrollTo = function (link) {\n      var _this$props = _this.props,\n          offsetTop = _this$props.offsetTop,\n          targetOffset = _this$props.targetOffset;\n\n      _this.setCurrentActiveLink(link);\n\n      var container = _this.getContainer();\n\n      var scrollTop = getScroll(container, true);\n      var sharpLinkMatch = sharpMatcherRegx.exec(link);\n\n      if (!sharpLinkMatch) {\n        return;\n      }\n\n      var targetElement = document.getElementById(sharpLinkMatch[1]);\n\n      if (!targetElement) {\n        return;\n      }\n\n      var eleOffsetTop = getOffsetTop(targetElement, container);\n      var y = scrollTop + eleOffsetTop;\n      y -= targetOffset !== undefined ? targetOffset : offsetTop || 0;\n      _this.animating = true;\n      scrollTo(y, {\n        callback: function callback() {\n          _this.animating = false;\n        },\n        getContainer: _this.getContainer\n      });\n    };\n\n    _this.saveInkNode = function (node) {\n      _this.inkNode = node;\n    };\n\n    _this.setCurrentActiveLink = function (link) {\n      var activeLink = _this.state.activeLink;\n      var onChange = _this.props.onChange;\n\n      if (activeLink !== link) {\n        _this.setState({\n          activeLink: link\n        });\n\n        if (onChange) {\n          onChange(link);\n        }\n      }\n    };\n\n    _this.handleScroll = function () {\n      if (_this.animating) {\n        return;\n      }\n\n      var _this$props2 = _this.props,\n          offsetTop = _this$props2.offsetTop,\n          bounds = _this$props2.bounds,\n          targetOffset = _this$props2.targetOffset;\n\n      var currentActiveLink = _this.getCurrentAnchor(targetOffset !== undefined ? targetOffset : offsetTop || 0, bounds);\n\n      _this.setCurrentActiveLink(currentActiveLink);\n    };\n\n    _this.updateInk = function () {\n      var _assertThisInitialize = _assertThisInitialized(_this),\n          prefixCls = _assertThisInitialize.prefixCls;\n\n      var anchorNode = ReactDOM.findDOMNode(_assertThisInitialized(_this));\n      var linkNode = anchorNode.getElementsByClassName(\"\".concat(prefixCls, \"-link-title-active\"))[0];\n\n      if (linkNode) {\n        _this.inkNode.style.top = \"\".concat(linkNode.offsetTop + linkNode.clientHeight / 2 - 4.5, \"px\");\n      }\n    };\n\n    _this.render = function () {\n      var _this$context = _this.context,\n          getPrefixCls = _this$context.getPrefixCls,\n          direction = _this$context.direction;\n      var _this$props3 = _this.props,\n          customizePrefixCls = _this$props3.prefixCls,\n          _this$props3$classNam = _this$props3.className,\n          className = _this$props3$classNam === void 0 ? '' : _this$props3$classNam,\n          style = _this$props3.style,\n          offsetTop = _this$props3.offsetTop,\n          affix = _this$props3.affix,\n          showInkInFixed = _this$props3.showInkInFixed,\n          children = _this$props3.children;\n      var activeLink = _this.state.activeLink;\n      var prefixCls = getPrefixCls('anchor', customizePrefixCls); // To support old version react.\n      // Have to add prefixCls on the instance.\n      // https://github.com/facebook/react/issues/12397\n\n      _this.prefixCls = prefixCls;\n      var inkClass = classNames(\"\".concat(prefixCls, \"-ink-ball\"), {\n        visible: activeLink\n      });\n      var wrapperClass = classNames(\"\".concat(prefixCls, \"-wrapper\"), _defineProperty({}, \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'), className);\n      var anchorClass = classNames(prefixCls, {\n        fixed: !affix && !showInkInFixed\n      });\n\n      var wrapperStyle = _extends({\n        maxHeight: offsetTop ? \"calc(100vh - \".concat(offsetTop, \"px)\") : '100vh'\n      }, style);\n\n      var anchorContent = /*#__PURE__*/React.createElement(\"div\", {\n        className: wrapperClass,\n        style: wrapperStyle\n      }, /*#__PURE__*/React.createElement(\"div\", {\n        className: anchorClass\n      }, /*#__PURE__*/React.createElement(\"div\", {\n        className: \"\".concat(prefixCls, \"-ink\")\n      }, /*#__PURE__*/React.createElement(\"span\", {\n        className: inkClass,\n        ref: _this.saveInkNode\n      })), children));\n      return /*#__PURE__*/React.createElement(AnchorContext.Provider, {\n        value: {\n          registerLink: _this.registerLink,\n          unregisterLink: _this.unregisterLink,\n          activeLink: _this.state.activeLink,\n          scrollTo: _this.handleScrollTo,\n          onClick: _this.props.onClick\n        }\n      }, !affix ? anchorContent : /*#__PURE__*/React.createElement(Affix, {\n        offsetTop: offsetTop,\n        target: _this.getContainer\n      }, anchorContent));\n    };\n\n    return _this;\n  }\n\n  _createClass(Anchor, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.scrollContainer = this.getContainer();\n      this.scrollEvent = addEventListener(this.scrollContainer, 'scroll', this.handleScroll);\n      this.handleScroll();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      if (this.scrollEvent) {\n        var currentContainer = this.getContainer();\n\n        if (this.scrollContainer !== currentContainer) {\n          this.scrollContainer = currentContainer;\n          this.scrollEvent.remove();\n          this.scrollEvent = addEventListener(this.scrollContainer, 'scroll', this.handleScroll);\n          this.handleScroll();\n        }\n      }\n\n      this.updateInk();\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.scrollEvent) {\n        this.scrollEvent.remove();\n      }\n    }\n  }, {\n    key: \"getCurrentAnchor\",\n    value: function getCurrentAnchor() {\n      var offsetTop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var bounds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5;\n      var getCurrentAnchor = this.props.getCurrentAnchor;\n\n      if (typeof getCurrentAnchor === 'function') {\n        return getCurrentAnchor();\n      }\n\n      var linkSections = [];\n      var container = this.getContainer();\n      this.links.forEach(function (link) {\n        var sharpLinkMatch = sharpMatcherRegx.exec(link.toString());\n\n        if (!sharpLinkMatch) {\n          return;\n        }\n\n        var target = document.getElementById(sharpLinkMatch[1]);\n\n        if (target) {\n          var top = getOffsetTop(target, container);\n\n          if (top < offsetTop + bounds) {\n            linkSections.push({\n              link: link,\n              top: top\n            });\n          }\n        }\n      });\n\n      if (linkSections.length) {\n        var maxSection = linkSections.reduce(function (prev, curr) {\n          return curr.top > prev.top ? curr : prev;\n        });\n        return maxSection.link;\n      }\n\n      return '';\n    }\n  }]);\n\n  return Anchor;\n}(React.Component);\n\nexport { Anchor as default };\nAnchor.defaultProps = {\n  affix: true,\n  showInkInFixed: false\n};\nAnchor.contextType = ConfigContext;","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/createSuper\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ConfigConsumer } from '../config-provider';\nimport AnchorContext from './context';\n\nvar AnchorLink = /*#__PURE__*/function (_React$Component) {\n  _inherits(AnchorLink, _React$Component);\n\n  var _super = _createSuper(AnchorLink);\n\n  function AnchorLink() {\n    var _this;\n\n    _classCallCheck(this, AnchorLink);\n\n    _this = _super.apply(this, arguments);\n\n    _this.handleClick = function (e) {\n      var _this$context = _this.context,\n          scrollTo = _this$context.scrollTo,\n          onClick = _this$context.onClick;\n      var _this$props = _this.props,\n          href = _this$props.href,\n          title = _this$props.title;\n\n      if (onClick) {\n        onClick(e, {\n          title: title,\n          href: href\n        });\n      }\n\n      scrollTo(href);\n    };\n\n    _this.renderAnchorLink = function (_ref) {\n      var getPrefixCls = _ref.getPrefixCls;\n      var _this$props2 = _this.props,\n          customizePrefixCls = _this$props2.prefixCls,\n          href = _this$props2.href,\n          title = _this$props2.title,\n          children = _this$props2.children,\n          className = _this$props2.className,\n          target = _this$props2.target;\n      var prefixCls = getPrefixCls('anchor', customizePrefixCls);\n      var active = _this.context.activeLink === href;\n      var wrapperClassName = classNames(\"\".concat(prefixCls, \"-link\"), _defineProperty({}, \"\".concat(prefixCls, \"-link-active\"), active), className);\n      var titleClassName = classNames(\"\".concat(prefixCls, \"-link-title\"), _defineProperty({}, \"\".concat(prefixCls, \"-link-title-active\"), active));\n      return /*#__PURE__*/React.createElement(\"div\", {\n        className: wrapperClassName\n      }, /*#__PURE__*/React.createElement(\"a\", {\n        className: titleClassName,\n        href: href,\n        title: typeof title === 'string' ? title : '',\n        target: target,\n        onClick: _this.handleClick\n      }, title), children);\n    };\n\n    return _this;\n  }\n\n  _createClass(AnchorLink, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.context.registerLink(this.props.href);\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(_ref2) {\n      var prevHref = _ref2.href;\n      var href = this.props.href;\n\n      if (prevHref !== href) {\n        this.context.unregisterLink(prevHref);\n        this.context.registerLink(href);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.context.unregisterLink(this.props.href);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return /*#__PURE__*/React.createElement(ConfigConsumer, null, this.renderAnchorLink);\n    }\n  }]);\n\n  return AnchorLink;\n}(React.Component);\n\nAnchorLink.defaultProps = {\n  href: '#'\n};\nAnchorLink.contextType = AnchorContext;\nexport default AnchorLink;","import Anchor from './Anchor';\nimport AnchorLink from './AnchorLink';\nAnchor.Link = AnchorLink;\nexport default Anchor;","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport React from 'react';\nimport { Anchor } from 'antd';\nimport { useMenus } from 'docz';\nimport { css } from '@emotion/core';\nimport { getActiveMenuItem, mq } from '../utils';\n\nconst { Link } = Anchor;\nconst anchorNavStyle = css`\n\n    ${[mq[3]]} {\n      display: none;\n    }\n    position: fixed;\n    top: 64px;\n    right: 0;\n    width: 250px;\n    padding: 16px;\n    height: 605px;\n    overflow: auto;\n    ul {\n      font-size: 12px;\n      li {\n        height: 25px;\n        line-height: 25px;\n        word-wrap: break-word;\n      }\n    }\n`;\n\nconst HeaderNav = () => {\n  const menus = useMenus();\n  const { headings } = getActiveMenuItem(menus);\n  return (\n    <div css={anchorNavStyle}>\n      <Anchor>\n        {headings.map((e) => (\n          <Link key={e.slug} href={`#${e.slug}`} title={e.value} />\n        ))}\n      </Anchor>\n    </div>\n  );\n};\n\nexport default HeaderNav;\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport React from 'react';\nimport { useMenus } from 'docz';\nimport { getPreviousAndNextUrls } from '../utils';\n\nconst nextButtons = () => {\n  const menus = useMenus();\n  const [prevUrl, nextUrl] = getPreviousAndNextUrls(menus);\n  return (\n    <>\n      {prevUrl && (\n        <a href={prevUrl} className=\"ant-btn\">\n          Prev\n        </a>\n      )}\n      {nextUrl && (\n        <a href={nextUrl} className=\"ant-btn\">\n          Next\n        </a>\n      )}\n    </>\n  );\n};\n\nexport default nextButtons;\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport React from 'react';\nimport { theme, useConfig } from 'docz';\nimport { ThemeProvider } from 'theme-ui';\nimport { css } from '@emotion/core';\nimport SEO from '../components/seo';\nimport Layout from '../components/layout';\nimport AnchorNavigator from '../components/AnchorNavigator';\nimport NextLinks from '../components/next';\n\nimport 'antd/dist/antd.css';\n\ninterface Props {\n  children: React.ReactNode;\n}\n\nconst docLayout = css`\n  display: flex;\n  flex-direction: row;\n  .docSearch-content {\n    word-wrap: break-all;\n    width: 100%;\n  }\n\n  // Hacks to disable Swagger UI's \"try it out\" interactive mode\n  .try-out, .auth-wrapper, .information-container {\n    display: none;\n  }\n`;\n\nconst Theme = ({ children }: Props) => {\n  const config = useConfig();\n  return (\n    <ThemeProvider theme={config}>\n      <Layout>\n        <SEO title=\"Documentation\" />\n        <div css={docLayout}>\n          <div className=\"docSearch-content\">\n            {children}\n          </div>\n          <AnchorNavigator />\n        </div>\n        <div>\n          <NextLinks />\n        </div>\n      </Layout>\n    </ThemeProvider>\n  );\n};\n\n// @ts-ignore\nexport default theme()(Theme);\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Helmet } from 'react-helmet-async'\n\nimport { useDbQuery } from '../hooks/useDbQuery'\n\nconst SEO = ({ description, lang, meta, keywords, title: initialTitle }) => {\n  const db = useDbQuery()\n  const title = initialTitle || db.config.title\n  const metaDescription = description || db.config.description\n\n  return (\n    <Helmet\n      title={title}\n      titleTemplate={`%s | ${db.config.title}`}\n      htmlAttributes={{ lang }}\n      meta={[\n        {\n          name: `description`,\n          content: metaDescription,\n        },\n        {\n          property: `og:title`,\n          content: title,\n        },\n        {\n          property: `og:description`,\n          content: metaDescription,\n        },\n        {\n          property: `og:type`,\n          content: `website`,\n        },\n        {\n          name: `twitter:card`,\n          content: `summary`,\n        },\n        {\n          name: `twitter:title`,\n          content: title,\n        },\n        {\n          name: `twitter:description`,\n          content: metaDescription,\n        },\n      ]\n        .concat(\n          keywords.length > 0\n            ? {\n                name: `keywords`,\n                content: keywords.join(`, `),\n              }\n            : []\n        )\n        .concat(meta)}\n    />\n  )\n}\n\nSEO.defaultProps = {\n  lang: `en`,\n  meta: [],\n  keywords: [],\n}\n\nSEO.propTypes = {\n  description: PropTypes.string,\n  lang: PropTypes.string,\n  meta: PropTypes.array,\n  keywords: PropTypes.arrayOf(PropTypes.string),\n  title: PropTypes.string.isRequired,\n}\n\nexport default SEO\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { useComponents } from 'docz'\nimport { propEq, get } from 'lodash/fp'\nimport { MDXProvider } from '@mdx-js/react'\n\nimport { useDbQuery } from '../hooks/useDbQuery'\nimport Wrapper from '../wrapper'\nimport Theme from '../index'\nimport SEO from './Seo'\n\nconst Route = ({ children, entry, isTransclusion, ...defaultProps }) => {\n  const components = useComponents()\n  const NotFound = components.notFound\n  const Layout = components.layout\n  const props = { ...defaultProps, doc: entry }\n  if (!entry && !isTransclusion) return <NotFound />\n  return isTransclusion ? (\n    children\n  ) : (\n    <MDXProvider components={components}>\n      <Wrapper>\n        <Layout {...props}>{children}</Layout>\n      </Wrapper>\n    </MDXProvider>\n  )\n}\n\nconst findEntry = (db, ctx) => {\n  const isIndex = ctx && ctx.frontmatter && ctx.frontmatter.route === '/'\n  const eqIndex = propEq('value.route', '/')\n  if (ctx && !ctx.entry && isIndex) return db.entries.find(eqIndex)\n  const filepath = get('entry.filepath', ctx)\n  return db.entries.find(propEq('value.filepath', filepath))\n}\n\nconst includesTransclusion = (db, props) => {\n  const { entries } = db\n  const filepath = get('_frontmatter.__filemeta.filename', props)\n  return (\n    !props.pageContext &&\n    entries.includes(entries.find(propEq('value.filepath', filepath)))\n  )\n}\n\nconst Layout = ({ children, ...defaultProps }) => {\n  const { pageContext: ctx } = defaultProps\n  const db = useDbQuery()\n  const entry = findEntry(db, ctx)\n  const isTransclusion = includesTransclusion(db, defaultProps)\n  return (\n    <Fragment>\n      {entry && <SEO title={entry.value.name} />}\n      <Theme db={db} currentEntry={entry}>\n        <Route {...defaultProps} entry={entry} isTransclusion={isTransclusion}>\n          {children}\n        </Route>\n      </Theme>\n    </Fragment>\n  )\n}\n\nLayout.propTypes = {\n  color: PropTypes.string,\n  children: PropTypes.node.isRequired,\n}\n\nexport default Layout\n","var convert = require('./convert'),\n    func = convert('matchesProperty', require('../matchesProperty'));\n\nfunc.placeholder = require('./placeholder');\nmodule.exports = func;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nimport findDOMNode from \"rc-util/es/Dom/findDOMNode\";\nimport toArray from \"rc-util/es/Children/toArray\";\nimport warning from \"rc-util/es/warning\";\nimport { composeRef, supportRef } from \"rc-util/es/ref\";\nimport ResizeObserver from 'resize-observer-polyfill';\nvar INTERNAL_PREFIX_KEY = 'rc-observer-key'; // Still need to be compatible with React 15, we use class component here\n\nvar ReactResizeObserver = /*#__PURE__*/function (_React$Component) {\n  _inherits(ReactResizeObserver, _React$Component);\n\n  var _super = _createSuper(ReactResizeObserver);\n\n  function ReactResizeObserver() {\n    var _this;\n\n    _classCallCheck(this, ReactResizeObserver);\n\n    _this = _super.apply(this, arguments);\n    _this.resizeObserver = null;\n    _this.childNode = null;\n    _this.currentElement = null;\n    _this.state = {\n      width: 0,\n      height: 0,\n      offsetHeight: 0,\n      offsetWidth: 0\n    };\n\n    _this.onResize = function (entries) {\n      var onResize = _this.props.onResize;\n      var target = entries[0].target;\n\n      var _target$getBoundingCl = target.getBoundingClientRect(),\n          width = _target$getBoundingCl.width,\n          height = _target$getBoundingCl.height;\n\n      var offsetWidth = target.offsetWidth,\n          offsetHeight = target.offsetHeight;\n      /**\n       * Resize observer trigger when content size changed.\n       * In most case we just care about element size,\n       * let's use `boundary` instead of `contentRect` here to avoid shaking.\n       */\n\n      var fixedWidth = Math.floor(width);\n      var fixedHeight = Math.floor(height);\n\n      if (_this.state.width !== fixedWidth || _this.state.height !== fixedHeight || _this.state.offsetWidth !== offsetWidth || _this.state.offsetHeight !== offsetHeight) {\n        var size = {\n          width: fixedWidth,\n          height: fixedHeight,\n          offsetWidth: offsetWidth,\n          offsetHeight: offsetHeight\n        };\n\n        _this.setState(size);\n\n        if (onResize) {\n          // defer the callback but not defer to next frame\n          Promise.resolve().then(function () {\n            onResize(_objectSpread(_objectSpread({}, size), {}, {\n              offsetWidth: offsetWidth,\n              offsetHeight: offsetHeight\n            }));\n          });\n        }\n      }\n    };\n\n    _this.setChildNode = function (node) {\n      _this.childNode = node;\n    };\n\n    return _this;\n  }\n\n  _createClass(ReactResizeObserver, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.onComponentUpdated();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      this.onComponentUpdated();\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.destroyObserver();\n    }\n  }, {\n    key: \"onComponentUpdated\",\n    value: function onComponentUpdated() {\n      var disabled = this.props.disabled; // Unregister if disabled\n\n      if (disabled) {\n        this.destroyObserver();\n        return;\n      } // Unregister if element changed\n\n\n      var element = findDOMNode(this.childNode || this);\n      var elementChanged = element !== this.currentElement;\n\n      if (elementChanged) {\n        this.destroyObserver();\n        this.currentElement = element;\n      }\n\n      if (!this.resizeObserver && element) {\n        this.resizeObserver = new ResizeObserver(this.onResize);\n        this.resizeObserver.observe(element);\n      }\n    }\n  }, {\n    key: \"destroyObserver\",\n    value: function destroyObserver() {\n      if (this.resizeObserver) {\n        this.resizeObserver.disconnect();\n        this.resizeObserver = null;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var childNodes = toArray(children);\n\n      if (childNodes.length > 1) {\n        warning(false, 'Find more than one child node with `children` in ResizeObserver. Will only observe first one.');\n      } else if (childNodes.length === 0) {\n        warning(false, '`children` of ResizeObserver is empty. Nothing is in observe.');\n        return null;\n      }\n\n      var childNode = childNodes[0];\n\n      if (React.isValidElement(childNode) && supportRef(childNode)) {\n        var ref = childNode.ref;\n        childNodes[0] = React.cloneElement(childNode, {\n          ref: composeRef(ref, this.setChildNode)\n        });\n      }\n\n      return childNodes.length === 1 ? childNodes[0] : childNodes.map(function (node, index) {\n        if (!React.isValidElement(node) || 'key' in node && node.key !== null) {\n          return node;\n        }\n\n        return React.cloneElement(node, {\n          key: \"\".concat(INTERNAL_PREFIX_KEY, \"-\").concat(index)\n        });\n      });\n    }\n  }]);\n\n  return ReactResizeObserver;\n}(React.Component);\n\nReactResizeObserver.displayName = 'ResizeObserver';\nexport default ReactResizeObserver;","import ReactDOM from 'react-dom';\n/**\n * Return if a node is a DOM node. Else will return by `findDOMNode`\n */\n\nexport default function findDOMNode(node) {\n  if (node instanceof HTMLElement) {\n    return node;\n  }\n\n  return ReactDOM.findDOMNode(node);\n}"],"sourceRoot":""}