"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9514,9793,0],{4137:function(e,t,n){n.d(t,{Zo:function(){return m},kt:function(){return p}});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},l=Object.keys(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=r.createContext({}),s=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},m=function(e){var t=s(e.components);return r.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,i=e.parentName,m=c(e,["components","mdxType","originalType","parentName"]),d=s(n),p=a,f=d["".concat(i,".").concat(p)]||d[p]||u[p]||l;return n?r.createElement(f,o(o({ref:t},m),{},{components:n})):r.createElement(f,o({ref:t},m))}));function p(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,o=new Array(l);o[0]=d;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:a,o[1]=c;for(var s=2;s<l;s++)o[s]=n[s];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},3530:function(e,t,n){n.r(t),n.d(t,{default:function(){return ee}});var r=n(7294),a=n(4137),l=n(9962),o=n(7401),c=n(2051),i=n(6010),s=n(8626),m=n(3301),u=n(5717),d=n(2827),p=n(7462),f=function(e){return r.createElement("svg",(0,p.Z)({width:"20",height:"20","aria-hidden":"true"},e),r.createElement("g",{fill:"#7a7a7a"},r.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),r.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))},h=n(7130),b=n(3366),v=n(2511),E=n(2735),g=n(6681),_="menuLinkText_1J2g",y=["items"],Z=["item"],k=["item","onItemClick","activePath"],N=["item","onItemClick","activePath"],C=function e(t,n){return"link"===t.type?(0,s.Mg)(t.href,n):"category"===t.type&&t.items.some((function(t){return e(t,n)}))},T=(0,r.memo)((function(e){var t=e.items,n=(0,b.Z)(e,y);return r.createElement(r.Fragment,null,t.map((function(e,t){return r.createElement(S,(0,p.Z)({key:t,item:e},n))})))}));function S(e){var t=e.item,n=(0,b.Z)(e,Z);switch(t.type){case"category":return 0===t.items.length?null:r.createElement(w,(0,p.Z)({item:t},n));case"link":default:return r.createElement(O,(0,p.Z)({item:t},n))}}function w(e){var t,n=e.item,a=e.onItemClick,l=e.activePath,o=(0,b.Z)(e,k),c=n.items,m=n.label,u=n.collapsible,d=C(n,l),f=(0,s.uR)({initialState:function(){return!!u&&(!d&&n.collapsed)}}),h=f.collapsed,v=f.setCollapsed,E=f.toggleCollapsed;return function(e){var t=e.isActive,n=e.collapsed,a=e.setCollapsed,l=(0,s.D9)(t);(0,r.useEffect)((function(){t&&!l&&n&&a(!1)}),[t,l,n])}({isActive:d,collapsed:h,setCollapsed:v}),r.createElement("li",{className:(0,i.Z)("menu__list-item",{"menu__list-item--collapsed":h})},r.createElement("a",(0,p.Z)({className:(0,i.Z)("menu__link",(t={"menu__link--sublist":u,"menu__link--active":u&&d},t[_]=!u,t)),onClick:u?function(e){e.preventDefault(),E()}:void 0,href:u?"#":void 0},o),m),r.createElement(s.zF,{lazy:!0,as:"ul",className:"menu__list",collapsed:h},r.createElement(T,{items:c,tabIndex:h?-1:0,onItemClick:a,activePath:l})))}function O(e){var t=e.item,n=e.onItemClick,a=e.activePath,l=(0,b.Z)(e,N),o=t.href,c=t.label,s=C(t,a);return r.createElement("li",{className:"menu__list-item",key:c},r.createElement(v.Z,(0,p.Z)({className:(0,i.Z)("menu__link",{"menu__link--active":s}),to:o},(0,E.Z)(o)&&{isNavLink:!0,exact:!0,onClick:n},l),(0,E.Z)(o)?c:r.createElement("span",null,c,r.createElement(g.Z,null))))}var P="sidebar_15mo",I="sidebarWithHideableNavbar_267A",x="sidebarHidden_2kNb",M="sidebarLogo_3h0W",A="menu_Bmed",j="menuWithAnnouncementBar_2WvA",L="collapseSidebarButton_1CGd",B="collapseSidebarButtonIcon_3E-R";function D(e){var t=e.onClick;return r.createElement("button",{type:"button",title:(0,h.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,h.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,i.Z)("button button--secondary button--outline",L),onClick:t},r.createElement(f,{className:B}))}function H(e){var t,n,a=e.path,l=e.sidebar,o=e.onCollapse,c=e.isHidden,m=function(){var e=(0,s.nT)().isClosed,t=(0,r.useState)(!e),n=t[0],a=t[1];return(0,u.Z)((function(t){var n=t.scrollY;e||a(0===n)})),n}(),p=(0,s.LU)(),f=p.navbar.hideOnScroll,h=p.hideableSidebar,b=(0,s.nT)().isClosed;return r.createElement("div",{className:(0,i.Z)(P,(t={},t[I]=f,t[x]=c,t))},f&&r.createElement(d.Z,{tabIndex:-1,className:M}),r.createElement("nav",{className:(0,i.Z)("menu thin-scrollbar",A,(n={},n[j]=!b&&m,n))},r.createElement("ul",{className:"menu__list"},r.createElement(T,{items:l,activePath:a}))),h&&r.createElement(D,{onClick:o}))}var F=function(e){var t=e.toggleSidebar,n=e.sidebar,a=e.path;return r.createElement("ul",{className:"menu__list"},r.createElement(T,{items:n,activePath:a,onItemClick:function(){return t()}}))};function R(e){return r.createElement(s.Cv,{component:F,props:e})}var W=r.memo(H),U=r.memo(R);function z(e){var t=(0,m.Z)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return r.createElement(r.Fragment,null,n&&r.createElement(W,e),a&&r.createElement(U,e))}var V=n(3006),Y=n(8177),J="backToTopButton_35hR",q="backToTopButtonShow_18ls";function K(){var e=(0,r.useRef)(null);return{smoothScrollTop:function(){var t;e.current=(t=null,function e(){var n=document.documentElement.scrollTop;n>0&&(t=requestAnimationFrame(e),window.scrollTo(0,Math.floor(.85*n)))}(),function(){t&&cancelAnimationFrame(t)})},cancelScrollToTop:function(){return null==e.current?void 0:e.current()}}}var X=function(){var e,t=K(),n=t.smoothScrollTop,a=t.cancelScrollToTop,l=(0,r.useState)(!1),o=l[0],c=l[1];return(0,u.Z)((function(e,t){var n=e.scrollY;if(t){var r=n<t.scrollY;if(r||a(),n<300)c(!1);else if(r){var l=document.documentElement.scrollHeight;n+window.innerHeight<l&&c(!0)}else c(!1)}}),[]),r.createElement("button",{className:(0,i.Z)("clean-btn",J,(e={},e[q]=o,e)),type:"button",title:"Scroll to top",onClick:function(){return n()}},r.createElement("svg",{viewBox:"0 0 24 24",width:"28"},r.createElement("path",{d:"M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z",fill:"currentColor"})))},G=n(5977),Q={docPage:"docPage_31aa",docMainContainer:"docMainContainer_3ufF",docSidebarContainer:"docSidebarContainer_3Kbt",docMainContainerEnhanced:"docMainContainerEnhanced_3NYZ",docSidebarContainerHidden:"docSidebarContainerHidden_3pA8",collapsedDocSidebar:"collapsedDocSidebar_2JMH",expandSidebarButtonIcon:"expandSidebarButtonIcon_1naQ",docItemWrapperEnhanced:"docItemWrapperEnhanced_2vyJ"};function $(e){var t,n,o,m=e.currentDocRoute,u=e.versionMetadata,d=e.children,p=(0,l.Z)().isClient,b=u.pluginId,v=u.version,E=m.sidebar,g=E?u.docsSidebars[E]:void 0,_=(0,r.useState)(!1),y=_[0],Z=_[1],k=(0,r.useState)(!1),N=k[0],C=k[1],T=(0,r.useCallback)((function(){N&&C(!1),Z(!y)}),[N]);return r.createElement(c.Z,{key:p,wrapperClassName:s.kM.wrapper.docPages,pageClassName:s.kM.page.docPage,searchMetadatas:{version:v,tag:(0,s.os)(b,v)}},r.createElement("div",{className:Q.docPage},r.createElement(X,null),g&&r.createElement("aside",{className:(0,i.Z)(Q.docSidebarContainer,(t={},t[Q.docSidebarContainerHidden]=y,t)),onTransitionEnd:function(e){e.currentTarget.classList.contains(Q.docSidebarContainer)&&y&&C(!0)}},r.createElement(z,{key:E,sidebar:g,path:m.path,onCollapse:T,isHidden:N}),N&&r.createElement("div",{className:Q.collapsedDocSidebar,title:(0,h.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,h.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:T,onClick:T},r.createElement(f,{className:Q.expandSidebarButtonIcon}))),r.createElement("main",{className:(0,i.Z)(Q.docMainContainer,(n={},n[Q.docMainContainerEnhanced]=y||!g,n))},r.createElement("div",{className:(0,i.Z)("container padding-top--md padding-bottom--lg",Q.docItemWrapper,(o={},o[Q.docItemWrapperEnhanced]=y,o))},r.createElement(a.Zo,{components:V.Z},d)))))}var ee=function(e){var t=e.route.routes,n=e.versionMetadata,a=e.location,l=t.find((function(e){return(0,G.LX)(a.pathname,e)}));return l?r.createElement($,{currentDocRoute:l,versionMetadata:n},(0,o.Z)(t,{versionMetadata:n})):r.createElement(Y.default,e)}},3006:function(e,t,n){n.d(t,{Z:function(){return d}});var r=n(7462),a=n(7294),l=n(2511),o=n(3522),c=n(5607),i=n(6010),s=n(8626),m="details_1VDD";function u(e){var t=Object.assign({},e);return a.createElement(s.PO,(0,r.Z)({},t,{className:(0,i.Z)("alert alert--info",m,t.className)}))}var d={code:function(e){var t=e.children;return(0,a.isValidElement)(t)?t:t.includes("\n")?a.createElement(o.Z,e):a.createElement("code",e)},a:function(e){return a.createElement(l.Z,e)},pre:function(e){var t,n=e.children;return(0,a.isValidElement)(null==n||null==(t=n.props)?void 0:t.children)?null==n?void 0:n.props.children:a.createElement(o.Z,(0,a.isValidElement)(n)?null==n?void 0:n.props:Object.assign({},e))},details:function(e){var t=a.Children.toArray(e.children),n=t.find((function(e){var t;return"summary"===(null==e||null==(t=e.props)?void 0:t.mdxType)})),l=a.createElement(a.Fragment,null,t.filter((function(e){return e!==n})));return a.createElement(u,(0,r.Z)({},e,{summary:n}),l)},h1:(0,c.Z)("h1"),h2:(0,c.Z)("h2"),h3:(0,c.Z)("h3"),h4:(0,c.Z)("h4"),h5:(0,c.Z)("h5"),h6:(0,c.Z)("h6")}},8177:function(e,t,n){n.r(t);var r=n(7294),a=n(2051),l=n(7130);t.default=function(){return r.createElement(a.Z,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})},r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),r.createElement("p",null,r.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),r.createElement("p",null,r.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."))))))}},283:function(e,t,n){n.d(t,{Z:function(){return b}});var r=n(7462),a=n(3366),l=n(7294),o=n(6010),c=n(2511),i=n(8626),s=n(9524),m="footerLogoLink_qW4Z",u="footerCopyright_2yvt",d=n(4087),p=["to","href","label","prependBaseUrlToHref"];function f(e){var t=e.to,n=e.href,o=e.label,i=e.prependBaseUrlToHref,m=(0,a.Z)(e,p),u=(0,s.Z)(t),d=(0,s.Z)(n,{forcePrependBaseUrl:!0});return l.createElement(c.Z,(0,r.Z)({className:"footer__link-item"},n?{href:i?d:n}:{to:u},m),o)}var h=function(e){var t=e.sources,n=e.alt;return l.createElement(d.Z,{className:"footer__logo",alt:n,sources:t})};var b=function(){var e=(0,i.LU)().footer,t=e||{},n=t.copyright,r=t.links,a=void 0===r?[]:r,d=t.logo,p=void 0===d?{}:d,b={light:(0,s.Z)(p.src),dark:(0,s.Z)(p.srcDark||p.src)};return e?l.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===e.style})},l.createElement("div",{className:"container"},a&&a.length>0&&l.createElement("div",{className:"row footer__links"},a.map((function(e,t){return l.createElement("div",{key:t,className:"col footer__col"},null!=e.title?l.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?l.createElement("ul",{className:"footer__items"},e.items.map((function(e,t){return e.html?l.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):l.createElement("li",{key:e.href||e.to,className:"footer__item"},l.createElement(f,e))}))):null)}))),(p||n)&&l.createElement("div",{className:"footer__bottom text--center"},p&&(p.src||p.srcDark)&&l.createElement("div",{className:"margin-bottom--sm"},p.href?l.createElement(c.Z,{href:p.href,className:m},l.createElement(h,{alt:p.alt,sources:b})):l.createElement(h,{alt:p.alt,sources:b})),n?l.createElement("div",{className:u,dangerouslySetInnerHTML:{__html:n}}):null))):null}}}]);