"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[6752],{69920:(e,t,a)=>{a.d(t,{E:()=>c,Q:()=>o});var n=a(11504),l=a(91100);const r=n.createContext(null);function o(e){let{children:t,version:a}=e;return n.createElement(r.Provider,{value:a},t)}function c(){const e=(0,n.useContext)(r);if(null===e)throw new l.AH("DocsVersionProvider");return e}},84352:(e,t,a)=>{a.r(t),a.d(t,{default:()=>ge});var n=a(11504),l=a(98464),r=a(85008),o=a(91100);const c=n.createContext(null);function s(e){let{children:t,content:a}=e;const l=function(e){return(0,n.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(a);return n.createElement(c.Provider,{value:l},t)}function i(){const e=(0,n.useContext)(c);if(null===e)throw new o.AH("DocProvider");return e}function d(){const{metadata:e,frontMatter:t,assets:a}=i();return n.createElement(r.U7,{title:e.title,description:e.description,keywords:t.keywords,image:a.image??t.image})}var m=a(48080),u=a(11432),b=a(45072),p=a(84357),h=a(76016);function E(e){const{permalink:t,title:a,subLabel:l,isNext:r}=e;return n.createElement(h.c,{className:(0,m.c)("pagination-nav__link",r?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},l&&n.createElement("div",{className:"pagination-nav__sublabel"},l),n.createElement("div",{className:"pagination-nav__label"},a))}function g(e){const{previous:t,next:a}=e;return n.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,p.G)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&n.createElement(E,(0,b.c)({},t,{subLabel:n.createElement(p.c,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),a&&n.createElement(E,(0,b.c)({},a,{subLabel:n.createElement(p.c,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}function v(){const{metadata:e}=i();return n.createElement(g,{previous:e.previous,next:e.next})}var f=a(28264),_=a(62840),N=a(45864),C=a(94592),L=a(69920);const k={unreleased:function(e){let{siteTitle:t,versionMetadata:a}=e;return n.createElement(p.c,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:n.createElement("b",null,a.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:a}=e;return n.createElement(p.c,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:n.createElement("b",null,a.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function T(e){const t=k[e.versionMetadata.banner];return n.createElement(t,e)}function U(e){let{versionLabel:t,to:a,onClick:l}=e;return n.createElement(p.c,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:n.createElement("b",null,n.createElement(h.c,{to:a,onClick:l},n.createElement(p.c,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function x(e){let{className:t,versionMetadata:a}=e;const{siteConfig:{title:l}}=(0,f.c)(),{pluginId:r}=(0,_.UF)({failfast:!0}),{savePreferredVersionName:o}=(0,C.iy)(r),{latestDocSuggestion:c,latestVersionSuggestion:s}=(0,_.i8)(r),i=c??(d=s).docs.find((e=>e.id===d.mainDocId));var d;return n.createElement("div",{className:(0,m.c)(t,N.W.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},n.createElement("div",null,n.createElement(T,{siteTitle:l,versionMetadata:a})),n.createElement("div",{className:"margin-top--md"},n.createElement(U,{versionLabel:s.label,to:i.path,onClick:()=>o(s.name)})))}function w(e){let{className:t}=e;const a=(0,L.E)();return a.banner?n.createElement(x,{className:t,versionMetadata:a}):null}function y(e){let{className:t}=e;const a=(0,L.E)();return a.badge?n.createElement("span",{className:(0,m.c)(t,N.W.docs.docVersionBadge,"badge badge--secondary")},n.createElement(p.c,{id:"theme.docs.versionBadge.label",values:{versionLabel:a.label}},"Version: {versionLabel}")):null}function A(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:a}=e;return n.createElement(p.c,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:n.createElement("b",null,n.createElement("time",{dateTime:new Date(1e3*t).toISOString()},a))}}," on {date}")}function M(e){let{lastUpdatedBy:t}=e;return n.createElement(p.c,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:n.createElement("b",null,t)}}," by {user}")}function B(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:a,lastUpdatedBy:l}=e;return n.createElement("span",{className:N.W.common.lastUpdated},n.createElement(p.c,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&a?n.createElement(A,{lastUpdatedAt:t,formattedLastUpdatedAt:a}):"",byUser:l?n.createElement(M,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)}const I={iconEdit:"iconEdit_Z9Sw"};function H(e){let{className:t,...a}=e;return n.createElement("svg",(0,b.c)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,m.c)(I.iconEdit,t),"aria-hidden":"true"},a),n.createElement("g",null,n.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function V(e){let{editUrl:t}=e;return n.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:N.W.common.editThisPage},n.createElement(H,null),n.createElement(p.c,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}const P={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function W(e){let{permalink:t,label:a,count:l}=e;return n.createElement(h.c,{href:t,className:(0,m.c)(P.tag,l?P.tagWithCount:P.tagRegular)},a,l&&n.createElement("span",null,l))}const S={tags:"tags_jXut",tag:"tag_QGVx"};function D(e){let{tags:t}=e;return n.createElement(n.Fragment,null,n.createElement("b",null,n.createElement(p.c,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),n.createElement("ul",{className:(0,m.c)(S.tags,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:a}=e;return n.createElement("li",{key:a,className:S.tag},n.createElement(W,{label:t,permalink:a}))}))))}const F={lastUpdated:"lastUpdated_vwxv"};function R(e){return n.createElement("div",{className:(0,m.c)(N.W.docs.docFooterTagsRow,"row margin-bottom--sm")},n.createElement("div",{className:"col"},n.createElement(D,e)))}function z(e){let{editUrl:t,lastUpdatedAt:a,lastUpdatedBy:l,formattedLastUpdatedAt:r}=e;return n.createElement("div",{className:(0,m.c)(N.W.docs.docFooterEditMetaRow,"row")},n.createElement("div",{className:"col"},t&&n.createElement(V,{editUrl:t})),n.createElement("div",{className:(0,m.c)("col",F.lastUpdated)},(a||l)&&n.createElement(B,{lastUpdatedAt:a,formattedLastUpdatedAt:r,lastUpdatedBy:l})))}function G(){const{metadata:e}=i(),{editUrl:t,lastUpdatedAt:a,formattedLastUpdatedAt:l,lastUpdatedBy:r,tags:o}=e,c=o.length>0,s=!!(t||a||r);return c||s?n.createElement("footer",{className:(0,m.c)(N.W.docs.docFooter,"docusaurus-mt-lg")},c&&n.createElement(R,{tags:o}),s&&n.createElement(z,{editUrl:t,lastUpdatedAt:a,lastUpdatedBy:r,formattedLastUpdatedAt:l})):null}var O=a(58448),j=a(43088);const q={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function Q(e){let{collapsed:t,...a}=e;return n.createElement("button",(0,b.c)({type:"button"},a,{className:(0,m.c)("clean-btn",q.tocCollapsibleButton,!t&&q.tocCollapsibleButtonExpanded,a.className)}),n.createElement(p.c,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const Y={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function Z(e){let{toc:t,className:a,minHeadingLevel:l,maxHeadingLevel:r}=e;const{collapsed:o,toggleCollapsed:c}=(0,O.a)({initialState:!0});return n.createElement("div",{className:(0,m.c)(Y.tocCollapsible,!o&&Y.tocCollapsibleExpanded,a)},n.createElement(Q,{collapsed:o,onClick:c}),n.createElement(O.U,{lazy:!0,className:Y.tocCollapsibleContent,collapsed:o},n.createElement(j.c,{toc:t,minHeadingLevel:l,maxHeadingLevel:r})))}const X={tocMobile:"tocMobile_ITEo"};function $(){const{toc:e,frontMatter:t}=i();return n.createElement(Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,m.c)(N.W.docs.docTocMobile,X.tocMobile)})}var J=a(75124);function K(){const{toc:e,frontMatter:t}=i();return n.createElement(J.c,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:N.W.docs.docTocDesktop})}var ee=a(56448),te=a(90330);function ae(e){let{children:t}=e;const a=function(){const{metadata:e,frontMatter:t,contentTitle:a}=i();return t.hide_title||void 0!==a?null:e.title}();return n.createElement("div",{className:(0,m.c)(N.W.docs.docMarkdown,"markdown")},a&&n.createElement("header",null,n.createElement(ee.c,{as:"h1"},a)),n.createElement(te.c,null,t))}var ne=a(79940),le=a(13376),re=a(70964);function oe(e){return n.createElement("svg",(0,b.c)({viewBox:"0 0 24 24"},e),n.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const ce={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function se(){const e=(0,re.c)("/");return n.createElement("li",{className:"breadcrumbs__item"},n.createElement(h.c,{"aria-label":(0,p.G)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},n.createElement(oe,{className:ce.breadcrumbHomeIcon})))}const ie={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function de(e){let{children:t,href:a,isLast:l}=e;const r="breadcrumbs__link";return l?n.createElement("span",{className:r,itemProp:"name"},t):a?n.createElement(h.c,{className:r,href:a,itemProp:"item"},n.createElement("span",{itemProp:"name"},t)):n.createElement("span",{className:r},t)}function me(e){let{children:t,active:a,index:l,addMicrodata:r}=e;return n.createElement("li",(0,b.c)({},r&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,m.c)("breadcrumbs__item",{"breadcrumbs__item--active":a})}),t,n.createElement("meta",{itemProp:"position",content:String(l+1)}))}function ue(){const e=(0,ne.js)(),t=(0,le.Y5)();return e?n.createElement("nav",{className:(0,m.c)(N.W.docs.docBreadcrumbs,ie.breadcrumbsContainer),"aria-label":(0,p.G)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},n.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&n.createElement(se,null),e.map(((t,a)=>{const l=a===e.length-1;return n.createElement(me,{key:a,active:l,index:a,addMicrodata:!!t.href},n.createElement(de,{href:t.href,isLast:l},t.label))})))):null}const be={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function pe(e){let{children:t}=e;const a=function(){const{frontMatter:e,toc:t}=i(),a=(0,u.U)(),l=e.hide_table_of_contents,r=!l&&t.length>0;return{hidden:l,mobile:r?n.createElement($,null):void 0,desktop:!r||"desktop"!==a&&"ssr"!==a?void 0:n.createElement(K,null)}}();return n.createElement("div",{className:"row"},n.createElement("div",{className:(0,m.c)("col",!a.hidden&&be.docItemCol)},n.createElement(w,null),n.createElement("div",{className:be.docItemContainer},n.createElement("article",null,n.createElement(ue,null),n.createElement(y,null),a.mobile,n.createElement(ae,null,t),n.createElement(G,null)),n.createElement(v,null))),a.desktop&&n.createElement("div",{className:"col col--3"},a.desktop))}function he(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,a=e.content;return n.createElement(s,{content:e.content},n.createElement(r.cr,{className:t},n.createElement(d,null),n.createElement(pe,null,n.createElement(a,null))))}const Ee=(0,l.c)("a")`
  position: fixed;
  bottom: 20px;
  right: 20px;
  padding: 1rem;
  padding-left: 4rem;
  background-color: #444;
  border-radius: 10px;
  z-index: 9999;
  background-image: url('/img/github-dark.png');
  background-size: 2rem;
  background-position: 1rem center;
  background-repeat: no-repeat;
  transition: background-color 0.3s; /* Smooth transition for hover effect */
  bpx-shadow: 0 0 0 0 rgba(0,0,0,0); /* Smooth transition for hover effect */
  scale: .9;
  transition: all 0.3s;

  &:hover {
    background-color: #333;
    box-shadow: 5px 5px 10px 0 rgba(0,0,0,0.3);
    scale: 1;
  }
`;function ge(e){return n.createElement(n.Fragment,null,n.createElement(Ee,{href:e.content.metadata.editUrl,target:"_blank",rel:"noopener noreferrer"},"Edit this page on GitHub"),n.createElement(he,e))}}}]);