From e7da050bf5d2c034e5c6c5248f7261b734e24418 Mon Sep 17 00:00:00 2001 From: Ivan Borshchov Date: Sun, 5 Jan 2025 15:36:16 +0200 Subject: [PATCH] Deploy website - based on 6c2b53931bd9c5c14fd49933356ddd02c182314a --- 404.html | 6 +- ...tyles.b64b6290.css => styles.3cff3245.css} | 2 +- assets/js/11b43341.38b686ea.js | 1 + assets/js/11b43341.79e89646.js | 1 - assets/js/186edb45.07a3809e.js | 1 + assets/js/186edb45.fecd2dba.js | 1 - ...93b7f.73ce5d1d.js => 1df93b7f.21ba430d.js} | 2 +- assets/js/5da08e7a.211dfb25.js | 1 - assets/js/5da08e7a.76652dd9.js | 1 + assets/js/8a5469a7.1043bb95.js | 1 - assets/js/8a5469a7.a06eee32.js | 1 + assets/js/d7e47a1a.d39102bc.js | 1 - assets/js/main.3a20b972.js | 2 + ...CENSE.txt => main.3a20b972.js.LICENSE.txt} | 0 assets/js/main.762eeac1.js | 2 - assets/js/runtime~main.044b268e.js | 1 + assets/js/runtime~main.fc1e1e18.js | 1 - blog/ai-blog/index.html | 6 +- blog/archive/index.html | 6 +- .../backup-database-to-aws-glacier/index.html | 6 +- blog/chatgpt-plugin/index.html | 6 +- .../index.html | 6 +- blog/compose-ec2-deployment/index.html | 6 +- blog/index.html | 6 +- blog/tags/aws/index.html | 6 +- blog/tags/chatgpt/index.html | 6 +- blog/tags/github-actions/index.html | 6 +- blog/tags/index.html | 6 +- blog/tags/nuxt/index.html | 6 +- blog/tags/plugin/index.html | 6 +- blog/tags/terraform/index.html | 6 +- docs/api/index.html | 6 +- .../api/types/Back/classes/Filters/index.html | 6 +- docs/api/types/Back/classes/Sorts/index.html | 6 +- docs/api/types/Back/index.html | 6 +- .../AdminForthBulkAction/index.html | 6 +- .../interfaces/AdminForthConfig/index.html | 6 +- .../AdminForthConfigCustomization/index.html | 6 +- .../AdminForthForeignResource/index.html | 6 +- .../AdminForthInputConfig/index.html | 6 +- .../interfaces/AdminForthResource/index.html | 6 +- .../AdminForthResourceColumn/index.html | 6 +- .../AdminForthResourceInput/index.html | 6 +- .../Back/interfaces/HttpExtra/index.html | 6 +- .../Back/interfaces/IAdminForth/index.html | 6 +- .../interfaces/IAdminForthAuth/index.html | 6 +- .../IAdminForthDataSourceConnector/index.html | 6 +- .../index.html | 6 +- .../index.html | 6 +- .../interfaces/IAdminForthFilter/index.html | 6 +- .../IAdminForthHttpResponse/index.html | 6 +- .../interfaces/IAdminForthPlugin/index.html | 6 +- .../interfaces/IAdminForthRestAPI/index.html | 6 +- .../interfaces/IAdminForthSort/index.html | 6 +- .../Back/interfaces/ICodeInjector/index.html | 6 +- .../interfaces/IConfigValidator/index.html | 6 +- .../interfaces/IExpressHttpServer/index.html | 6 +- .../Back/interfaces/IHttpServer/index.html | 6 +- .../IOperationalResource/index.html | 6 +- .../interfaces/IWebSocketBroker/index.html | 6 +- .../interfaces/IWebSocketClient/index.html | 6 +- .../interfaces/ResourceOptions/index.html | 6 +- .../ResourceOptionsInput/index.html | 6 +- .../AdminForthDataSource/index.html | 6 +- .../AfterCreateSaveFunction/index.html | 6 +- .../index.html | 6 +- .../AfterDeleteSaveFunction/index.html | 6 +- .../AfterEditSaveFunction/index.html | 6 +- .../AllowedActionValue/index.html | 6 +- .../type-aliases/AllowedActions/index.html | 6 +- .../AllowedActionsInput/index.html | 6 +- .../BeforeCreateSaveFunction/index.html | 6 +- .../index.html | 6 +- .../BeforeDeleteSaveFunction/index.html | 6 +- .../BeforeEditSaveFunction/index.html | 6 +- .../index.html | 6 +- .../Back/type-aliases/FDataFilter/index.html | 6 +- .../Back/type-aliases/FDataSort/index.html | 6 +- .../enumerations/ActionCheckSource/index.html | 6 +- .../AdminForthDataTypes/index.html | 6 +- .../AdminForthFilterOperators/index.html | 6 +- .../AdminForthMenuTypes/index.html | 6 +- .../AdminForthResourcePages/index.html | 6 +- .../AdminForthSortDirections/index.html | 6 +- .../AllowedActionsEnum/index.html | 6 +- docs/api/types/Common/index.html | 6 +- .../AdminForthBulkActionCommon/index.html | 6 +- .../AdminForthColumnEnumItem/index.html | 6 +- .../index.html | 6 +- .../AdminForthConfigForFrontend/index.html | 6 +- .../AdminForthConfigMenuItem/index.html | 6 +- .../AdminForthFieldComponents/index.html | 6 +- .../index.html | 6 +- .../AdminForthResourceColumnCommon/index.html | 6 +- .../index.html | 6 +- .../AdminForthResourceCommon/index.html | 6 +- .../AdminForthResourceInputCommon/index.html | 6 +- .../Common/interfaces/AdminUser/index.html | 6 +- .../GetBaseConfigResponse/index.html | 6 +- .../interfaces/ResourceVeryShort/index.html | 6 +- .../Common/interfaces/UserData/index.html | 6 +- .../AdminForthComponentDeclaration/index.html | 6 +- .../AllowedActionsResolved/index.html | 6 +- .../AnnouncementBadgeResponse/index.html | 6 +- .../type-aliases/ValidationObject/index.html | 6 +- .../enumerations/AlertVariant/index.html | 6 +- docs/api/types/FrontendAPI/index.html | 6 +- .../FrontendAPIInterface/index.html | 6 +- .../type-aliases/AlertParams/index.html | 6 +- .../type-aliases/ConfirmParams/index.html | 6 +- .../type-aliases/FilterParams/index.html | 6 +- .../Advanced/plugin-development/index.html | 8 +- docs/tutorial/Customization/afcl/index.html | 8 +- docs/tutorial/Customization/alert/index.html | 8 +- .../Customization/branding/index.html | 8 +- .../Customization/bulkActions/index.html | 8 +- .../customFieldRendering/index.html | 8 +- .../Customization/customPages/index.html | 8 +- .../tutorial/Customization/dataApi/index.html | 10 +- docs/tutorial/Customization/hooks/index.html | 8 +- .../Customization/limitingAccess/index.html | 8 +- .../menuConfiguration/index.html | 8 +- .../Customization/pageInjections/index.html | 8 +- .../Customization/security/index.html | 8 +- .../standardPagesTuning/index.html | 8 +- .../Customization/virtualColumns/index.html | 8 +- .../Customization/websocket/index.html | 8 +- docs/tutorial/Plugins/AuditLog/index.html | 8 +- .../Plugins/ForeignInlineList/index.html | 8 +- docs/tutorial/Plugins/RichEditor/index.html | 8 +- .../Plugins/TwoFactorsAuth/index.html | 8 +- .../Plugins/email-password-reset/index.html | 8 +- docs/tutorial/Plugins/i18n/index.html | 8 +- .../tutorial/Plugins/import-export/index.html | 8 +- docs/tutorial/Plugins/open-signup/index.html | 8 +- .../tutorial/Plugins/text-complete/index.html | 8 +- docs/tutorial/Plugins/upload/index.html | 8 +- docs/tutorial/deploy/index.html | 8 +- docs/tutorial/gettingStarted/index.html | 133 ++++++++++-------- .../tutorial/gettingStartedWithCLI/index.html | 100 ------------- docs/tutorial/glossary/index.html | 10 +- .../{helloWorld => hello-world}/index.html | 26 ++-- index.html | 8 +- search/index.html | 6 +- sitemap.xml | 2 +- 145 files changed, 505 insertions(+), 587 deletions(-) rename assets/css/{styles.b64b6290.css => styles.3cff3245.css} (51%) create mode 100644 assets/js/11b43341.38b686ea.js delete mode 100644 assets/js/11b43341.79e89646.js create mode 100644 assets/js/186edb45.07a3809e.js delete mode 100644 assets/js/186edb45.fecd2dba.js rename assets/js/{1df93b7f.73ce5d1d.js => 1df93b7f.21ba430d.js} (98%) delete mode 100644 assets/js/5da08e7a.211dfb25.js create mode 100644 assets/js/5da08e7a.76652dd9.js delete mode 100644 assets/js/8a5469a7.1043bb95.js create mode 100644 assets/js/8a5469a7.a06eee32.js delete mode 100644 assets/js/d7e47a1a.d39102bc.js create mode 100644 assets/js/main.3a20b972.js rename assets/js/{main.762eeac1.js.LICENSE.txt => main.3a20b972.js.LICENSE.txt} (100%) delete mode 100644 assets/js/main.762eeac1.js create mode 100644 assets/js/runtime~main.044b268e.js delete mode 100644 assets/js/runtime~main.fc1e1e18.js delete mode 100644 docs/tutorial/gettingStartedWithCLI/index.html rename docs/tutorial/{helloWorld => hello-world}/index.html (88%) diff --git a/404.html b/404.html index 1bf939c0b..a5e1ca2d0 100644 --- a/404.html +++ b/404.html @@ -14,9 +14,9 @@ - - - + + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/assets/css/styles.b64b6290.css b/assets/css/styles.3cff3245.css similarity index 51% rename from assets/css/styles.b64b6290.css rename to assets/css/styles.3cff3245.css index 29e16fb88..26d67aea3 100644 --- a/assets/css/styles.b64b6290.css +++ b/assets/css/styles.3cff3245.css @@ -1 +1 @@ -.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#1a56db;--ifm-color-primary-dark:#1546b3;--ifm-color-primary-darker:#123c99;--ifm-color-primary-darkest:#0d2b6e;--ifm-color-primary-light:#2468ff;--ifm-color-primary-lighter:#3c81ff;--ifm-color-primary-lightest:#5499ff;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000000d;--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:#656c85cc;--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 #ffffff80,0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px #1e235a66;--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 #1e235a66;--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 #45629b1f;--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base);--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}*{box-sizing:border-box}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{list-style:none;padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.menu__list{list-style:none;margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{opacity:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;bottom:0;top:0;visibility:hidden;left:0}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;position:fixed;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec;--docsearch-text-color:#f5f6f7;--docsearch-container-background:#090a11cc;--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 #0304094d;--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.302);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 #494c6a80,0 -4px 8px 0 #0003;--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}code .token.diff-highlight-deleted{background-color:#ff00001a}code .token.diff-highlight-inserted{background-color:#00ff801a}code .token.coord{font-weight:700}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}[data-theme=dark]{--ifm-color-primary:#2468ff;--ifm-color-primary-dark:#1f5adb;--ifm-color-primary-darker:#1b4fc2;--ifm-color-primary-darkest:#153c92;--ifm-color-primary-light:#2a78ff;--ifm-color-primary-lighter:#428fff;--ifm-color-primary-lightest:#59a7ff;--docusaurus-highlighted-code-line-bg:#ffffff1a}.code-block-diff-add-line{background-color:#00ff3c33;display:block;margin:0 -40px;padding:0 40px}.code-block-diff-add-line:before{content:"+";left:-32px;margin-right:-16px;padding-right:8px;position:relative}.code-block-diff-remove-line{background-color:#ff150033;display:block;margin:0 -40px;padding:0 40px}.code-block-diff-remove-line:before{content:"-";left:-32px;margin-right:-16px;padding-right:8px;position:relative}pre code:has(.code-block-diff-add-line){padding-left:40px!important}pre code:has(.code-block-diff-remove-line){padding-left:40px!important}.image-gallery-image{max-width:800px!important}.image-gallery-description{color:#fff;font-size:2rem}.markdown img{border-radius:8px;box-shadow:0 2px 20px #0003;margin:16px 0}.theme-code-block pre{max-height:500px;overflow-y:overlay}.theme-code-block pre::-webkit-scrollbar{width:12px}.theme-code-block pre::-webkit-scrollbar-thumb{background-color:#888;border:3px solid #f1f1f1;border-radius:10px!important}.theme-code-block pre::-webkit-scrollbar-track{background:#f1f1f1;border-radius:10px!important}.laptop{margin:auto;max-width:80vw;position:relative;width:70vw}.laptop .laptop__screen{background:#ecf1f7;background-image:linear-gradient(180deg,#333,#111);border:2px solid #ccc;border-radius:2vw;box-shadow:0 .1rem 0 #cfcfcf;padding:3%;position:relative;z-index:1}.laptop .laptop__screen img{aspect-ratio:attr(width)/attr(height);background:#000;display:block;height:auto;max-width:100%}.laptop .laptop__bottom{background:#e9eff5;background-image:linear-gradient(90deg,#d2dde9 0,#f9fcff 15%,#e5ebf2 40%,#e5ebf2 60%,#f9fcff 85%,#d2dde9);height:.7vw;margin-left:-7%;margin-right:-7%;position:relative;z-index:1}.laptop .laptop__bottom:before{background:#f6f9fc;background-image:linear-gradient(90deg,#c3cfdb 0,#f6f9fc 10%,#f6f9fc 90%,#c3cfdb);border-radius:0 0 .2rem .2rem;content:" ";display:block;height:.7vw;margin:0 auto;width:20%}.laptop .laptop__under{background:#e2e8f0;background-image:linear-gradient(180deg,#e2e8f0,#bec7d1);display:block;height:1.5vw;left:25%;position:absolute;top:100%;width:50%}.laptop .laptop__under:after,.laptop .laptop__under:before{background:inherit;border-bottom-left-radius:80%;bottom:0;content:" ";display:block;position:absolute;right:100%;top:0;width:50%}.laptop .laptop__under:after{border-bottom-left-radius:0;border-bottom-right-radius:80%;left:100%;right:auto}.laptop .laptop__shadow{background:radial-gradient(ellipse closest-side,#000,#0000);bottom:-2.5vw;height:2vw;left:-10%;opacity:.5;position:absolute;right:-10%;z-index:0}.laptop_container{margin-bottom:5rem}.fakeMenu,.fakeScreen{margin:0 auto;box-sizing:border-box}.laptop .theme_switcher{align-items:center;animation:2s infinite a;background:#555;border-radius:2vw;border-width:2px;cursor:pointer;display:flex;font-size:1.5vw;height:2vw;justify-content:center;opacity:.5;position:absolute;right:5.28vw;top:2.56vw;transition:opacity .3s;-webkit-user-select:none;user-select:none;width:2vw;z-index:2}@keyframes a{0%,to{opacity:.4;transform:scale(.8)}50%{opacity:.6;transform:scale(1.1)}}.laptop .theme_switcher:hover{opacity:.3}.fakeButtons{background-color:#ff3b47;border-radius:50%;display:inline-block;height:10px;width:10px}.fakeButtons:hover{filter:brightness(1.1)}.fakeMinimize{background-color:#ffc100;border-color:#9d802c}.fakeZoom{background-color:#00d742;border-color:#049931}.fakeMenu{align-items:center;background-color:#bbb;border-top-left-radius:5px;border-top-right-radius:5px;display:flex;gap:5px;height:25px;padding-left:10px;width:100%}html[data-theme=dark] .fakeScreen{background-color:#474747d1}.fakeScreen{background-color:#151515d1;border-bottom-left-radius:5px;border-bottom-right-radius:5px;box-shadow:5px 5px 30px #00000080;padding:20px;width:100%}.line1{color:#fff;font-family:Consolas,monospace;margin:0;text-align:left}.terminalWrapper{max-width:100vw;width:400px}.button--secondary[class]{background-color:#4db5ed;border:0;color:#fff!important}.button--primary[class]{color:#fff!important}.hero__title{font-size:2.5rem}.hero__subtitle{font-size:1.3rem}.heroRow{display:flex;flex-direction:row;gap:80px;justify-content:center;margin:28px auto 10px;max-width:80vw;width:70vw}.DocSearch-Button,.DocSearch-Button-Container{align-items:center;display:flex}.buttons_src-pages-index-module{display:flex;gap:10px}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}.DocSearch-Button{background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;font-weight:500;height:36px;justify-content:space-between;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:0}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Hit-Tree,.DocSearch-Hit-action,.DocSearch-Hit-icon,.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a,.sidebarItemLink_mo7H:hover{text-decoration:none}.DocSearch-Hit[aria-selected=true] mark,.content_knG7 a{text-decoration:underline}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{appearance:none;background:#0000;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:0;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Cancel,.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator,.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset{animation:.1s ease-in forwards b;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0}.DocSearch-Help,.DocSearch-HitsFooter,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem)}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:#0000}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}.DocSearch-Hit--deleting{opacity:0;transition:.25s linear}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:.25s linear .25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_YfHR,.navbarSearchContainer_Bca1:empty,.sidebarLogo_isFc,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j,svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon,.tocCollapsibleContent_vkbj a{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:0;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands li,.DocSearch-Commands-Key{align-items:center;display:flex}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@keyframes b{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container,.skipToContent_fXgn{z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.iconExternalLink_nPIU{margin-left:.3rem}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size);font-weight:var(--ifm-font-weight-bold)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.searchQueryInput_u2C7,.searchVersionInput_m0Ui{background:var(--docsearch-searchbox-focus-background);border:2px solid var(--ifm-toc-border-color);border-radius:var(--ifm-global-radius);color:var(--docsearch-text-color);font:var(--ifm-font-size-base) var(--ifm-font-family-base);margin-bottom:.5rem;padding:.8rem;transition:border var(--ifm-transition-fast) ease;width:100%}.searchQueryInput_u2C7:focus,.searchVersionInput_m0Ui:focus{border-color:var(--docsearch-primary-color);outline:0}.searchQueryInput_u2C7::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_JPFH{font-size:.9rem;font-weight:700}.algoliaLogo_rT1R{max-width:150px}.algoliaLogoPathFill_WdUC{fill:var(--ifm-font-color-base)}.searchResultItem_Tv2o{border-bottom:1px solid var(--ifm-toc-border-color);padding:1rem 0}.searchResultItemHeading_KbCB{font-weight:400;margin-bottom:0}.searchResultItemPath_lhe1{color:var(--ifm-color-content-secondary);font-size:.8rem;--ifm-breadcrumb-separator-size-multiplier:1}.searchResultItemSummary_AEaO{font-style:italic;margin:.5rem 0 0}.loadingSpinner_XVxU{animation:1s linear infinite c;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes c{to{transform:rotate(1turn)}}.loader_vvXV{margin-top:2rem}.search-result-match{background:#ffd78e40;color:var(--docsearch-hit-color);padding:.09em 0}.features_t9lD{align-items:center;display:flex;padding:2rem 0;width:100%}.featureSvg_GfXr{height:200px;width:200px}.heroBanner_qdFl{background:#0000;overflow:hidden;padding:4rem 0 2rem;position:relative;text-align:center}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.buttons_AeoN{align-items:center;display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.title_f1Hy{font-size:3rem}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{left:0;position:absolute;top:0;fill:currentColor;height:inherit;opacity:inherit;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;list-style:none;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.containsTaskList_mC6p{list-style:none}.img_ev3q{height:auto}.tableOfContents_bqdL{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{display:inline-block;height:1.6em;width:1.6em;fill:var(--ifm-alert-foreground-color)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media only screen and (max-width:996px){.searchQueryColumn_RTkw,.searchResultsColumn_JPFH{max-width:60%!important}.searchLogoColumn_rJIA,.searchVersionColumn_ypXd{max-width:40%!important}.searchLogoColumn_rJIA{padding-left:0!important}}@media screen and (max-width:996px){.heroBanner_qdFl{padding:1rem .2rem}.heroBannerTitle_x9Ns{font-size:2.2rem}}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder,.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%;max-height:calc(var(--docsearch-vh,1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Cancel{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:0;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}}@media screen and (max-width:600px){.heroRow,.laptop{width:80vw}.heroRow{flex-direction:column;gap:30px}.heroRow .button{width:100%}.terminalWrapper{margin-bottom:20px;max-width:100%}.theme_switcher{display:none!important}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.title_f1Hy{font-size:2rem}}@media screen and (max-width:576px){.searchQueryColumn_RTkw{max-width:100%!important}.searchVersionColumn_ypXd{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit--deleting,.DocSearch-Hit--favoriting{transition:none}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#1a56db;--ifm-color-primary-dark:#1546b3;--ifm-color-primary-darker:#123c99;--ifm-color-primary-darkest:#0d2b6e;--ifm-color-primary-light:#2468ff;--ifm-color-primary-lighter:#3c81ff;--ifm-color-primary-lightest:#5499ff;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000000d;--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:#656c85cc;--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 #ffffff80,0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px #1e235a66;--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 #1e235a66;--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 #45629b1f;--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base);--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}*{box-sizing:border-box}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{list-style:none;padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.menu__list{list-style:none;margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{opacity:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;bottom:0;top:0;visibility:hidden;left:0}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.button--primary[class]:hover,.button--secondary[class]:hover,.fakeButtons:hover{filter:brightness(1.1)}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;position:fixed;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec;--docsearch-text-color:#f5f6f7;--docsearch-container-background:#090a11cc;--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 #0304094d;--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.302);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 #494c6a80,0 -4px 8px 0 #0003;--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}code .token.diff-highlight-deleted{background-color:#ff00001a}code .token.diff-highlight-inserted{background-color:#00ff801a}code .token.coord{font-weight:700}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}[data-theme=dark]{--ifm-color-primary:#2468ff;--ifm-color-primary-dark:#1f5adb;--ifm-color-primary-darker:#1b4fc2;--ifm-color-primary-darkest:#153c92;--ifm-color-primary-light:#2a78ff;--ifm-color-primary-lighter:#428fff;--ifm-color-primary-lightest:#59a7ff;--docusaurus-highlighted-code-line-bg:#ffffff1a}.code-block-diff-add-line{background-color:#00ff3c33;display:block;margin:0 -40px;padding:0 40px}.code-block-diff-add-line:before{content:"+";left:-32px;margin-right:-16px;padding-right:8px;position:relative}.code-block-diff-remove-line{background-color:#ff150033;display:block;margin:0 -40px;padding:0 40px}.code-block-diff-remove-line:before{content:"-";left:-32px;margin-right:-16px;padding-right:8px;position:relative}pre code:has(.code-block-diff-add-line){padding-left:40px!important}pre code:has(.code-block-diff-remove-line){padding-left:40px!important}.image-gallery-image{max-width:800px!important}.image-gallery-description{color:#fff;font-size:2rem}.markdown img{border-radius:8px;box-shadow:0 2px 20px #0003;margin:16px 0}.theme-code-block pre{max-height:500px;overflow-y:overlay}.theme-code-block pre::-webkit-scrollbar{width:12px}.theme-code-block pre::-webkit-scrollbar-thumb{background-color:#888;border:3px solid #f1f1f1;border-radius:10px!important}.theme-code-block pre::-webkit-scrollbar-track{background:#f1f1f1;border-radius:10px!important}.laptop{margin:auto;max-width:80vw;position:relative;width:70vw}.laptop .laptop__screen{background:#ecf1f7;background-image:linear-gradient(180deg,#333,#111);border:2px solid #ccc;border-radius:2vw;box-shadow:0 .1rem 0 #cfcfcf;padding:3%;position:relative;z-index:1}.laptop .laptop__screen img{aspect-ratio:attr(width)/attr(height);background:#000;display:block;height:auto;max-width:100%}.laptop .laptop__bottom{background:#e9eff5;background-image:linear-gradient(90deg,#d2dde9 0,#f9fcff 15%,#e5ebf2 40%,#e5ebf2 60%,#f9fcff 85%,#d2dde9);height:.7vw;margin-left:-7%;margin-right:-7%;position:relative;z-index:1}.laptop .laptop__bottom:before{background:#f6f9fc;background-image:linear-gradient(90deg,#c3cfdb 0,#f6f9fc 10%,#f6f9fc 90%,#c3cfdb);border-radius:0 0 .2rem .2rem;content:" ";display:block;height:.7vw;margin:0 auto;width:20%}.laptop .laptop__under{background:#e2e8f0;background-image:linear-gradient(180deg,#e2e8f0,#bec7d1);display:block;height:1.5vw;left:25%;position:absolute;top:100%;width:50%}.laptop .laptop__under:after,.laptop .laptop__under:before{background:inherit;border-bottom-left-radius:80%;bottom:0;content:" ";display:block;position:absolute;right:100%;top:0;width:50%}.laptop .laptop__under:after{border-bottom-left-radius:0;border-bottom-right-radius:80%;left:100%;right:auto}.laptop .laptop__shadow{background:radial-gradient(ellipse closest-side,#000,#0000);bottom:-2.5vw;height:2vw;left:-10%;opacity:.5;position:absolute;right:-10%;z-index:0}.laptop_container{margin-bottom:5rem}.fakeMenu,.fakeScreen{margin:0 auto;box-sizing:border-box}.laptop .theme_switcher{align-items:center;animation:2s infinite a;background:#555;border-radius:2vw;border-width:2px;cursor:pointer;display:flex;font-size:1.5vw;height:2vw;justify-content:center;opacity:.5;position:absolute;right:5.28vw;top:2.56vw;transition:opacity .3s;-webkit-user-select:none;user-select:none;width:2vw;z-index:2}@keyframes a{0%,to{opacity:.4;transform:scale(.8)}50%{opacity:.6;transform:scale(1.1)}}.laptop .theme_switcher:hover{opacity:.3}.fakeButtons{background-color:#ff3b47;border-radius:50%;display:inline-block;height:10px;width:10px}.fakeMinimize{background-color:#ffc100;border-color:#9d802c}.fakeZoom{background-color:#00d742;border-color:#049931}.fakeMenu{align-items:center;background-color:#bbb;border-top-left-radius:5px;border-top-right-radius:5px;display:flex;gap:5px;height:25px;padding-left:10px;width:100%}html[data-theme=dark] .fakeScreen{background-color:#474747d1}.fakeScreen{background-color:#151515d1;border-bottom-left-radius:5px;border-bottom-right-radius:5px;box-shadow:5px 5px 30px #00000080;padding:20px;width:100%}.line1{color:#fff;font-family:Consolas,monospace;margin:0;text-align:left}.terminalWrapper{max-width:100vw;width:400px}.button--secondary[class]{background-color:#6a7b90}.button--primary[class],.button--secondary[class]{border:0;box-shadow:1px 1px 15px #0003;color:#fff!important;min-width:180px;transition:.2s}.button--primary[class]{background-color:#3a81e5}.hero__title{font-size:2.5rem}.hero__subtitle{font-size:1.3rem}.heroRow{display:flex;flex-direction:row;gap:80px;justify-content:center;margin:28px auto 10px;max-width:80vw;width:70vw}.buttons_src-pages-index-module{display:flex;gap:10px}.hidden-sidebar{display:none}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:0}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Hit-Tree,.DocSearch-Hit-action,.DocSearch-Hit-icon,.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a,.sidebarItemLink_mo7H:hover{text-decoration:none}.DocSearch-Hit[aria-selected=true] mark,.content_knG7 a{text-decoration:underline}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{appearance:none;background:#0000;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:0;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Cancel,.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator,.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset{animation:.1s ease-in forwards b;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0}.DocSearch-Help,.DocSearch-HitsFooter,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem)}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:#0000}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}.DocSearch-Hit--deleting{opacity:0;transition:.25s linear}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:.25s linear .25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_YfHR,.navbarSearchContainer_Bca1:empty,.sidebarLogo_isFc,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j,svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon,.tocCollapsibleContent_vkbj a{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:0;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands li,.DocSearch-Commands-Key{align-items:center;display:flex}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@keyframes b{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container,.skipToContent_fXgn{z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.iconExternalLink_nPIU{margin-left:.3rem}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size);font-weight:var(--ifm-font-weight-bold)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.searchQueryInput_u2C7,.searchVersionInput_m0Ui{background:var(--docsearch-searchbox-focus-background);border:2px solid var(--ifm-toc-border-color);border-radius:var(--ifm-global-radius);color:var(--docsearch-text-color);font:var(--ifm-font-size-base) var(--ifm-font-family-base);margin-bottom:.5rem;padding:.8rem;transition:border var(--ifm-transition-fast) ease;width:100%}.searchQueryInput_u2C7:focus,.searchVersionInput_m0Ui:focus{border-color:var(--docsearch-primary-color);outline:0}.searchQueryInput_u2C7::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_JPFH{font-size:.9rem;font-weight:700}.algoliaLogo_rT1R{max-width:150px}.algoliaLogoPathFill_WdUC{fill:var(--ifm-font-color-base)}.searchResultItem_Tv2o{border-bottom:1px solid var(--ifm-toc-border-color);padding:1rem 0}.searchResultItemHeading_KbCB{font-weight:400;margin-bottom:0}.searchResultItemPath_lhe1{color:var(--ifm-color-content-secondary);font-size:.8rem;--ifm-breadcrumb-separator-size-multiplier:1}.searchResultItemSummary_AEaO{font-style:italic;margin:.5rem 0 0}.loadingSpinner_XVxU{animation:1s linear infinite c;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes c{to{transform:rotate(1turn)}}.loader_vvXV{margin-top:2rem}.search-result-match{background:#ffd78e40;color:var(--docsearch-hit-color);padding:.09em 0}.features_t9lD{align-items:center;display:flex;padding:2rem 0;width:100%}.featureSvg_GfXr{height:200px;width:200px}.heroBanner_qdFl{background:#0000;overflow:hidden;padding:4rem 0 2rem;position:relative;text-align:center}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.buttons_AeoN{align-items:center;display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.title_f1Hy{font-size:3rem}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{left:0;position:absolute;top:0;fill:currentColor;height:inherit;opacity:inherit;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;list-style:none;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.containsTaskList_mC6p{list-style:none}.img_ev3q{height:auto}.tableOfContents_bqdL{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{display:inline-block;height:1.6em;width:1.6em;fill:var(--ifm-alert-foreground-color)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media only screen and (max-width:996px){.searchQueryColumn_RTkw,.searchResultsColumn_JPFH{max-width:60%!important}.searchLogoColumn_rJIA,.searchVersionColumn_ypXd{max-width:40%!important}.searchLogoColumn_rJIA{padding-left:0!important}}@media screen and (max-width:996px){.heroBanner_qdFl{padding:1rem .2rem}.heroBannerTitle_x9Ns{font-size:2.2rem}}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder,.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%;max-height:calc(var(--docsearch-vh,1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Cancel{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:0;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}}@media screen and (max-width:600px){.heroRow,.laptop{width:80vw}.heroRow{flex-direction:column;gap:30px}.heroRow .button{width:100%}.terminalWrapper{margin-bottom:20px;max-width:100%}.theme_switcher{display:none!important}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.title_f1Hy{font-size:2rem}}@media screen and (max-width:576px){.searchQueryColumn_RTkw{max-width:100%!important}.searchVersionColumn_ypXd{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit--deleting,.DocSearch-Hit--favoriting{transition:none}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/js/11b43341.38b686ea.js b/assets/js/11b43341.38b686ea.js new file mode 100644 index 000000000..99ebdbedc --- /dev/null +++ b/assets/js/11b43341.38b686ea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[2256],{7674:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Getting Started","href":"/docs/tutorial/gettingStarted","docId":"tutorial/gettingStarted","unlisted":false},{"type":"link","label":"Hello world app without CLI","href":"/docs/tutorial/hello-world","className":"hidden-sidebar","docId":"tutorial/hello-world","unlisted":false},{"type":"link","label":"Glossary","href":"/docs/tutorial/glossary","docId":"tutorial/glossary","unlisted":false},{"type":"category","label":"Customization","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Branding and Theming","href":"/docs/tutorial/Customization/branding","docId":"tutorial/Customization/branding","unlisted":false},{"type":"link","label":"Custom record field rendering","href":"/docs/tutorial/Customization/customFieldRendering","docId":"tutorial/Customization/customFieldRendering","unlisted":false},{"type":"link","label":"Virtual columns","href":"/docs/tutorial/Customization/virtualColumns","docId":"tutorial/Customization/virtualColumns","unlisted":false},{"type":"link","label":"Hooks","href":"/docs/tutorial/Customization/hooks","docId":"tutorial/Customization/hooks","unlisted":false},{"type":"link","label":"Limiting actions access","href":"/docs/tutorial/Customization/limitingAccess","docId":"tutorial/Customization/limitingAccess","unlisted":false},{"type":"link","label":"Custom pages","href":"/docs/tutorial/Customization/customPages","docId":"tutorial/Customization/customPages","unlisted":false},{"type":"link","label":"Alerts and confirmations","href":"/docs/tutorial/Customization/alert","docId":"tutorial/Customization/alert","unlisted":false},{"type":"link","label":"Page Injections","href":"/docs/tutorial/Customization/pageInjections","docId":"tutorial/Customization/pageInjections","unlisted":false},{"type":"link","label":"Custom bulk actions","href":"/docs/tutorial/Customization/bulkActions","docId":"tutorial/Customization/bulkActions","unlisted":false},{"type":"link","label":"Menu Configuration","href":"/docs/tutorial/Customization/menuConfiguration","docId":"tutorial/Customization/menuConfiguration","unlisted":false},{"type":"link","label":"Data API","href":"/docs/tutorial/Customization/dataApi","docId":"tutorial/Customization/dataApi","unlisted":false},{"type":"link","label":"Security","href":"/docs/tutorial/Customization/security","docId":"tutorial/Customization/security","unlisted":false},{"type":"link","label":"Standard pages tuning","href":"/docs/tutorial/Customization/standardPagesTuning","docId":"tutorial/Customization/standardPagesTuning","unlisted":false},{"type":"link","label":"AdminForth Components Library","href":"/docs/tutorial/Customization/afcl","docId":"tutorial/Customization/afcl","unlisted":false},{"type":"link","label":"Websocket","href":"/docs/tutorial/Customization/websocket","docId":"tutorial/Customization/websocket","unlisted":false}]},{"type":"link","label":"Deploy in Docker","href":"/docs/tutorial/deploy","docId":"tutorial/deploy","unlisted":false},{"type":"category","label":"Plugins","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"AuditLog","href":"/docs/tutorial/Plugins/AuditLog","docId":"tutorial/Plugins/AuditLog","unlisted":false},{"type":"link","label":"Two-Factor Authentication Plugin","href":"/docs/tutorial/Plugins/TwoFactorsAuth","docId":"tutorial/Plugins/TwoFactorsAuth","unlisted":false},{"type":"link","label":"ForeignInlineList","href":"/docs/tutorial/Plugins/ForeignInlineList","docId":"tutorial/Plugins/ForeignInlineList","unlisted":false},{"type":"link","label":"Rich editor","href":"/docs/tutorial/Plugins/RichEditor","docId":"tutorial/Plugins/RichEditor","unlisted":false},{"type":"link","label":"Upload","href":"/docs/tutorial/Plugins/upload","docId":"tutorial/Plugins/upload","unlisted":false},{"type":"link","label":"Text Complete","href":"/docs/tutorial/Plugins/text-complete","docId":"tutorial/Plugins/text-complete","unlisted":false},{"type":"link","label":"Email password reset","href":"/docs/tutorial/Plugins/email-password-reset","docId":"tutorial/Plugins/email-password-reset","unlisted":false},{"type":"link","label":"Import-Export","href":"/docs/tutorial/Plugins/import-export","docId":"tutorial/Plugins/import-export","unlisted":false},{"type":"link","label":"Open Signup","href":"/docs/tutorial/Plugins/open-signup","docId":"tutorial/Plugins/open-signup","unlisted":false},{"type":"link","label":"Internationalization (i18n)","href":"/docs/tutorial/Plugins/i18n","docId":"tutorial/Plugins/i18n","unlisted":false}]},{"type":"category","label":"Advanced","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Plugin development guide","href":"/docs/tutorial/Advanced/plugin-development","docId":"tutorial/Advanced/plugin-development","unlisted":false}]}],"apiSidebar":[{"type":"category","label":"API","items":[{"type":"category","label":"types","items":[{"type":"category","label":"Back","items":[{"type":"category","label":"Classes","items":[{"type":"link","label":"Filters","href":"/docs/api/types/Back/classes/Filters","docId":"api/types/Back/classes/Filters","unlisted":false},{"type":"link","label":"Sorts","href":"/docs/api/types/Back/classes/Sorts","docId":"api/types/Back/classes/Sorts","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Interfaces","items":[{"type":"link","label":"AdminForthBulkAction","href":"/docs/api/types/Back/interfaces/AdminForthBulkAction","docId":"api/types/Back/interfaces/AdminForthBulkAction","unlisted":false},{"type":"link","label":"AdminForthConfig","href":"/docs/api/types/Back/interfaces/AdminForthConfig","docId":"api/types/Back/interfaces/AdminForthConfig","unlisted":false},{"type":"link","label":"AdminForthConfigCustomization","href":"/docs/api/types/Back/interfaces/AdminForthConfigCustomization","docId":"api/types/Back/interfaces/AdminForthConfigCustomization","unlisted":false},{"type":"link","label":"AdminForthForeignResource","href":"/docs/api/types/Back/interfaces/AdminForthForeignResource","docId":"api/types/Back/interfaces/AdminForthForeignResource","unlisted":false},{"type":"link","label":"AdminForthInputConfig","href":"/docs/api/types/Back/interfaces/AdminForthInputConfig","docId":"api/types/Back/interfaces/AdminForthInputConfig","unlisted":false},{"type":"link","label":"AdminForthResource","href":"/docs/api/types/Back/interfaces/AdminForthResource","docId":"api/types/Back/interfaces/AdminForthResource","unlisted":false},{"type":"link","label":"AdminForthResourceColumn","href":"/docs/api/types/Back/interfaces/AdminForthResourceColumn","docId":"api/types/Back/interfaces/AdminForthResourceColumn","unlisted":false},{"type":"link","label":"AdminForthResourceInput","href":"/docs/api/types/Back/interfaces/AdminForthResourceInput","docId":"api/types/Back/interfaces/AdminForthResourceInput","unlisted":false},{"type":"link","label":"HttpExtra","href":"/docs/api/types/Back/interfaces/HttpExtra","docId":"api/types/Back/interfaces/HttpExtra","unlisted":false},{"type":"link","label":"IAdminForth","href":"/docs/api/types/Back/interfaces/IAdminForth","docId":"api/types/Back/interfaces/IAdminForth","unlisted":false},{"type":"link","label":"IAdminForthAuth","href":"/docs/api/types/Back/interfaces/IAdminForthAuth","docId":"api/types/Back/interfaces/IAdminForthAuth","unlisted":false},{"type":"link","label":"IAdminForthDataSourceConnector","href":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector","docId":"api/types/Back/interfaces/IAdminForthDataSourceConnector","unlisted":false},{"type":"link","label":"IAdminForthDataSourceConnectorBase","href":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","docId":"api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","unlisted":false},{"type":"link","label":"IAdminForthDataSourceConnectorConstructor","href":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","docId":"api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","unlisted":false},{"type":"link","label":"IAdminForthFilter","href":"/docs/api/types/Back/interfaces/IAdminForthFilter","docId":"api/types/Back/interfaces/IAdminForthFilter","unlisted":false},{"type":"link","label":"IAdminForthHttpResponse","href":"/docs/api/types/Back/interfaces/IAdminForthHttpResponse","docId":"api/types/Back/interfaces/IAdminForthHttpResponse","unlisted":false},{"type":"link","label":"IAdminForthPlugin","href":"/docs/api/types/Back/interfaces/IAdminForthPlugin","docId":"api/types/Back/interfaces/IAdminForthPlugin","unlisted":false},{"type":"link","label":"IAdminForthRestAPI","href":"/docs/api/types/Back/interfaces/IAdminForthRestAPI","docId":"api/types/Back/interfaces/IAdminForthRestAPI","unlisted":false},{"type":"link","label":"IAdminForthSort","href":"/docs/api/types/Back/interfaces/IAdminForthSort","docId":"api/types/Back/interfaces/IAdminForthSort","unlisted":false},{"type":"link","label":"ICodeInjector","href":"/docs/api/types/Back/interfaces/ICodeInjector","docId":"api/types/Back/interfaces/ICodeInjector","unlisted":false},{"type":"link","label":"IConfigValidator","href":"/docs/api/types/Back/interfaces/IConfigValidator","docId":"api/types/Back/interfaces/IConfigValidator","unlisted":false},{"type":"link","label":"IExpressHttpServer","href":"/docs/api/types/Back/interfaces/IExpressHttpServer","docId":"api/types/Back/interfaces/IExpressHttpServer","unlisted":false},{"type":"link","label":"IHttpServer","href":"/docs/api/types/Back/interfaces/IHttpServer","docId":"api/types/Back/interfaces/IHttpServer","unlisted":false},{"type":"link","label":"IOperationalResource","href":"/docs/api/types/Back/interfaces/IOperationalResource","docId":"api/types/Back/interfaces/IOperationalResource","unlisted":false},{"type":"link","label":"IWebSocketBroker","href":"/docs/api/types/Back/interfaces/IWebSocketBroker","docId":"api/types/Back/interfaces/IWebSocketBroker","unlisted":false},{"type":"link","label":"IWebSocketClient","href":"/docs/api/types/Back/interfaces/IWebSocketClient","docId":"api/types/Back/interfaces/IWebSocketClient","unlisted":false},{"type":"link","label":"ResourceOptions","href":"/docs/api/types/Back/interfaces/ResourceOptions","docId":"api/types/Back/interfaces/ResourceOptions","unlisted":false},{"type":"link","label":"ResourceOptionsInput","href":"/docs/api/types/Back/interfaces/ResourceOptionsInput","docId":"api/types/Back/interfaces/ResourceOptionsInput","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Type Aliases","items":[{"type":"link","label":"AdminForthDataSource","href":"/docs/api/types/Back/type-aliases/AdminForthDataSource","docId":"api/types/Back/type-aliases/AdminForthDataSource","unlisted":false},{"type":"link","label":"AfterCreateSaveFunction","href":"/docs/api/types/Back/type-aliases/AfterCreateSaveFunction","docId":"api/types/Back/type-aliases/AfterCreateSaveFunction","unlisted":false},{"type":"link","label":"AfterDataSourceResponseFunction","href":"/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction","docId":"api/types/Back/type-aliases/AfterDataSourceResponseFunction","unlisted":false},{"type":"link","label":"AfterDeleteSaveFunction","href":"/docs/api/types/Back/type-aliases/AfterDeleteSaveFunction","docId":"api/types/Back/type-aliases/AfterDeleteSaveFunction","unlisted":false},{"type":"link","label":"AfterEditSaveFunction","href":"/docs/api/types/Back/type-aliases/AfterEditSaveFunction","docId":"api/types/Back/type-aliases/AfterEditSaveFunction","unlisted":false},{"type":"link","label":"AllowedActionValue","href":"/docs/api/types/Back/type-aliases/AllowedActionValue","docId":"api/types/Back/type-aliases/AllowedActionValue","unlisted":false},{"type":"link","label":"AllowedActions","href":"/docs/api/types/Back/type-aliases/AllowedActions","docId":"api/types/Back/type-aliases/AllowedActions","unlisted":false},{"type":"link","label":"AllowedActionsInput","href":"/docs/api/types/Back/type-aliases/AllowedActionsInput","docId":"api/types/Back/type-aliases/AllowedActionsInput","unlisted":false},{"type":"link","label":"BeforeCreateSaveFunction","href":"/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction","docId":"api/types/Back/type-aliases/BeforeCreateSaveFunction","unlisted":false},{"type":"link","label":"BeforeDataSourceRequestFunction","href":"/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction","docId":"api/types/Back/type-aliases/BeforeDataSourceRequestFunction","unlisted":false},{"type":"link","label":"BeforeDeleteSaveFunction","href":"/docs/api/types/Back/type-aliases/BeforeDeleteSaveFunction","docId":"api/types/Back/type-aliases/BeforeDeleteSaveFunction","unlisted":false},{"type":"link","label":"BeforeEditSaveFunction","href":"/docs/api/types/Back/type-aliases/BeforeEditSaveFunction","docId":"api/types/Back/type-aliases/BeforeEditSaveFunction","unlisted":false},{"type":"link","label":"BeforeLoginConfirmationFunction","href":"/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction","docId":"api/types/Back/type-aliases/BeforeLoginConfirmationFunction","unlisted":false},{"type":"link","label":"FDataFilter","href":"/docs/api/types/Back/type-aliases/FDataFilter","docId":"api/types/Back/type-aliases/FDataFilter","unlisted":false},{"type":"link","label":"FDataSort","href":"/docs/api/types/Back/type-aliases/FDataSort","docId":"api/types/Back/type-aliases/FDataSort","unlisted":false}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/types/Back/"},{"type":"category","label":"Common","items":[{"type":"category","label":"Enumerations","items":[{"type":"link","label":"ActionCheckSource","href":"/docs/api/types/Common/enumerations/ActionCheckSource","docId":"api/types/Common/enumerations/ActionCheckSource","unlisted":false},{"type":"link","label":"AdminForthDataTypes","href":"/docs/api/types/Common/enumerations/AdminForthDataTypes","docId":"api/types/Common/enumerations/AdminForthDataTypes","unlisted":false},{"type":"link","label":"AdminForthFilterOperators","href":"/docs/api/types/Common/enumerations/AdminForthFilterOperators","docId":"api/types/Common/enumerations/AdminForthFilterOperators","unlisted":false},{"type":"link","label":"AdminForthMenuTypes","href":"/docs/api/types/Common/enumerations/AdminForthMenuTypes","docId":"api/types/Common/enumerations/AdminForthMenuTypes","unlisted":false},{"type":"link","label":"AdminForthResourcePages","href":"/docs/api/types/Common/enumerations/AdminForthResourcePages","docId":"api/types/Common/enumerations/AdminForthResourcePages","unlisted":false},{"type":"link","label":"AdminForthSortDirections","href":"/docs/api/types/Common/enumerations/AdminForthSortDirections","docId":"api/types/Common/enumerations/AdminForthSortDirections","unlisted":false},{"type":"link","label":"AllowedActionsEnum","href":"/docs/api/types/Common/enumerations/AllowedActionsEnum","docId":"api/types/Common/enumerations/AllowedActionsEnum","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Interfaces","items":[{"type":"link","label":"AdminForthBulkActionCommon","href":"/docs/api/types/Common/interfaces/AdminForthBulkActionCommon","docId":"api/types/Common/interfaces/AdminForthBulkActionCommon","unlisted":false},{"type":"link","label":"AdminForthColumnEnumItem","href":"/docs/api/types/Common/interfaces/AdminForthColumnEnumItem","docId":"api/types/Common/interfaces/AdminForthColumnEnumItem","unlisted":false},{"type":"link","label":"AdminForthComponentDeclarationFull","href":"/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull","docId":"api/types/Common/interfaces/AdminForthComponentDeclarationFull","unlisted":false},{"type":"link","label":"AdminForthConfigForFrontend","href":"/docs/api/types/Common/interfaces/AdminForthConfigForFrontend","docId":"api/types/Common/interfaces/AdminForthConfigForFrontend","unlisted":false},{"type":"link","label":"AdminForthConfigMenuItem","href":"/docs/api/types/Common/interfaces/AdminForthConfigMenuItem","docId":"api/types/Common/interfaces/AdminForthConfigMenuItem","unlisted":false},{"type":"link","label":"AdminForthFieldComponents","href":"/docs/api/types/Common/interfaces/AdminForthFieldComponents","docId":"api/types/Common/interfaces/AdminForthFieldComponents","unlisted":false},{"type":"link","label":"AdminForthForeignResourceCommon","href":"/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon","docId":"api/types/Common/interfaces/AdminForthForeignResourceCommon","unlisted":false},{"type":"link","label":"AdminForthResourceColumnCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon","docId":"api/types/Common/interfaces/AdminForthResourceColumnCommon","unlisted":false},{"type":"link","label":"AdminForthResourceColumnInputCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon","docId":"api/types/Common/interfaces/AdminForthResourceColumnInputCommon","unlisted":false},{"type":"link","label":"AdminForthResourceCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceCommon","docId":"api/types/Common/interfaces/AdminForthResourceCommon","unlisted":false},{"type":"link","label":"AdminForthResourceInputCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceInputCommon","docId":"api/types/Common/interfaces/AdminForthResourceInputCommon","unlisted":false},{"type":"link","label":"AdminUser","href":"/docs/api/types/Common/interfaces/AdminUser","docId":"api/types/Common/interfaces/AdminUser","unlisted":false},{"type":"link","label":"GetBaseConfigResponse","href":"/docs/api/types/Common/interfaces/GetBaseConfigResponse","docId":"api/types/Common/interfaces/GetBaseConfigResponse","unlisted":false},{"type":"link","label":"ResourceVeryShort","href":"/docs/api/types/Common/interfaces/ResourceVeryShort","docId":"api/types/Common/interfaces/ResourceVeryShort","unlisted":false},{"type":"link","label":"UserData","href":"/docs/api/types/Common/interfaces/UserData","docId":"api/types/Common/interfaces/UserData","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Type Aliases","items":[{"type":"link","label":"AdminForthComponentDeclaration","href":"/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration","docId":"api/types/Common/type-aliases/AdminForthComponentDeclaration","unlisted":false},{"type":"link","label":"AllowedActionsResolved","href":"/docs/api/types/Common/type-aliases/AllowedActionsResolved","docId":"api/types/Common/type-aliases/AllowedActionsResolved","unlisted":false},{"type":"link","label":"AnnouncementBadgeResponse","href":"/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse","docId":"api/types/Common/type-aliases/AnnouncementBadgeResponse","unlisted":false},{"type":"link","label":"ValidationObject","href":"/docs/api/types/Common/type-aliases/ValidationObject","docId":"api/types/Common/type-aliases/ValidationObject","unlisted":false}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/types/Common/"},{"type":"category","label":"FrontendAPI","items":[{"type":"category","label":"Enumerations","items":[{"type":"link","label":"AlertVariant","href":"/docs/api/types/FrontendAPI/enumerations/AlertVariant","docId":"api/types/FrontendAPI/enumerations/AlertVariant","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Interfaces","items":[{"type":"link","label":"FrontendAPIInterface","href":"/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface","docId":"api/types/FrontendAPI/interfaces/FrontendAPIInterface","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Type Aliases","items":[{"type":"link","label":"AlertParams","href":"/docs/api/types/FrontendAPI/type-aliases/AlertParams","docId":"api/types/FrontendAPI/type-aliases/AlertParams","unlisted":false},{"type":"link","label":"ConfirmParams","href":"/docs/api/types/FrontendAPI/type-aliases/ConfirmParams","docId":"api/types/FrontendAPI/type-aliases/ConfirmParams","unlisted":false},{"type":"link","label":"FilterParams","href":"/docs/api/types/FrontendAPI/type-aliases/FilterParams","docId":"api/types/FrontendAPI/type-aliases/FilterParams","unlisted":false}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/types/FrontendAPI/"}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/"}]},"docs":{"api/index":{"id":"api/index","title":"TypeDoc API","description":"Modules","sidebar":"apiSidebar"},"api/types/Back/classes/Filters":{"id":"api/types/Back/classes/Filters","title":"Filters","description":"Constructors","sidebar":"apiSidebar"},"api/types/Back/classes/Sorts":{"id":"api/types/Back/classes/Sorts","title":"Sorts","description":"Constructors","sidebar":"apiSidebar"},"api/types/Back/index":{"id":"api/types/Back/index","title":"types/Back","description":"Index","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthBulkAction":{"id":"api/types/Back/interfaces/AdminForthBulkAction","title":"AdminForthBulkAction","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthConfig":{"id":"api/types/Back/interfaces/AdminForthConfig","title":"AdminForthConfig","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthConfigCustomization":{"id":"api/types/Back/interfaces/AdminForthConfigCustomization","title":"AdminForthConfigCustomization","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthForeignResource":{"id":"api/types/Back/interfaces/AdminForthForeignResource","title":"AdminForthForeignResource","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthInputConfig":{"id":"api/types/Back/interfaces/AdminForthInputConfig","title":"AdminForthInputConfig","description":"Main configuration object for AdminForth","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthResource":{"id":"api/types/Back/interfaces/AdminForthResource","title":"AdminForthResource","description":"Resource describes one table or collection in database.","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthResourceColumn":{"id":"api/types/Back/interfaces/AdminForthResourceColumn","title":"AdminForthResourceColumn","description":"Column describes one field in the table or collection in database.","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthResourceInput":{"id":"api/types/Back/interfaces/AdminForthResourceInput","title":"AdminForthResourceInput","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/HttpExtra":{"id":"api/types/Back/interfaces/HttpExtra","title":"HttpExtra","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForth":{"id":"api/types/Back/interfaces/IAdminForth","title":"IAdminForth","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthAuth":{"id":"api/types/Back/interfaces/IAdminForthAuth","title":"IAdminForthAuth","description":"Methods","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthDataSourceConnector":{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnector","title":"IAdminForthDataSourceConnector","description":"Extended by","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthDataSourceConnectorBase":{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","title":"IAdminForthDataSourceConnectorBase","description":"Interface that exposes methods to interact with AdminForth in standard way","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor":{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","title":"IAdminForthDataSourceConnectorConstructor","description":"Constructors","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthFilter":{"id":"api/types/Back/interfaces/IAdminForthFilter","title":"IAdminForthFilter","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthHttpResponse":{"id":"api/types/Back/interfaces/IAdminForthHttpResponse","title":"IAdminForthHttpResponse","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthPlugin":{"id":"api/types/Back/interfaces/IAdminForthPlugin","title":"IAdminForthPlugin","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthRestAPI":{"id":"api/types/Back/interfaces/IAdminForthRestAPI","title":"IAdminForthRestAPI","description":"Methods","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthSort":{"id":"api/types/Back/interfaces/IAdminForthSort","title":"IAdminForthSort","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/ICodeInjector":{"id":"api/types/Back/interfaces/ICodeInjector","title":"ICodeInjector","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IConfigValidator":{"id":"api/types/Back/interfaces/IConfigValidator","title":"IConfigValidator","description":"Methods","sidebar":"apiSidebar"},"api/types/Back/interfaces/IExpressHttpServer":{"id":"api/types/Back/interfaces/IExpressHttpServer","title":"IExpressHttpServer","description":"Implement this interface to create custom HTTP server adapter for AdminForth.","sidebar":"apiSidebar"},"api/types/Back/interfaces/IHttpServer":{"id":"api/types/Back/interfaces/IHttpServer","title":"IHttpServer","description":"Implement this interface to create custom HTTP server adapter for AdminForth.","sidebar":"apiSidebar"},"api/types/Back/interfaces/IOperationalResource":{"id":"api/types/Back/interfaces/IOperationalResource","title":"IOperationalResource","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IWebSocketBroker":{"id":"api/types/Back/interfaces/IWebSocketBroker","title":"IWebSocketBroker","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IWebSocketClient":{"id":"api/types/Back/interfaces/IWebSocketClient","title":"IWebSocketClient","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/ResourceOptions":{"id":"api/types/Back/interfaces/ResourceOptions","title":"ResourceOptions","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/ResourceOptionsInput":{"id":"api/types/Back/interfaces/ResourceOptionsInput","title":"ResourceOptionsInput","description":"General options for resource.","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AdminForthDataSource":{"id":"api/types/Back/type-aliases/AdminForthDataSource","title":"AdminForthDataSource","description":"AdminForthDataSource: object","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AfterCreateSaveFunction":{"id":"api/types/Back/type-aliases/AfterCreateSaveFunction","title":"AfterCreateSaveFunction()","description":"AfterCreateSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AfterDataSourceResponseFunction":{"id":"api/types/Back/type-aliases/AfterDataSourceResponseFunction","title":"AfterDataSourceResponseFunction()","description":"AfterDataSourceResponseFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AfterDeleteSaveFunction":{"id":"api/types/Back/type-aliases/AfterDeleteSaveFunction","title":"AfterDeleteSaveFunction()","description":"AfterDeleteSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AfterEditSaveFunction":{"id":"api/types/Back/type-aliases/AfterEditSaveFunction","title":"AfterEditSaveFunction()","description":"AfterEditSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AllowedActions":{"id":"api/types/Back/type-aliases/AllowedActions","title":"AllowedActions","description":"AllowedActions AllowedActionValue }","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AllowedActionsInput":{"id":"api/types/Back/type-aliases/AllowedActionsInput","title":"AllowedActionsInput","description":"AllowedActionsInput AllowedActionValue } & object","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AllowedActionValue":{"id":"api/types/Back/type-aliases/AllowedActionValue","title":"AllowedActionValue","description":"AllowedActionValue: boolean \\\\| ({adminUser, resource, meta, source, adminforth}) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeCreateSaveFunction":{"id":"api/types/Back/type-aliases/BeforeCreateSaveFunction","title":"BeforeCreateSaveFunction()","description":"BeforeCreateSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeDataSourceRequestFunction":{"id":"api/types/Back/type-aliases/BeforeDataSourceRequestFunction","title":"BeforeDataSourceRequestFunction()","description":"BeforeDataSourceRequestFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeDeleteSaveFunction":{"id":"api/types/Back/type-aliases/BeforeDeleteSaveFunction","title":"BeforeDeleteSaveFunction()","description":"BeforeDeleteSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeEditSaveFunction":{"id":"api/types/Back/type-aliases/BeforeEditSaveFunction","title":"BeforeEditSaveFunction()","description":"BeforeEditSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeLoginConfirmationFunction":{"id":"api/types/Back/type-aliases/BeforeLoginConfirmationFunction","title":"BeforeLoginConfirmationFunction()","description":"BeforeLoginConfirmationFunction: (params?) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/FDataFilter":{"id":"api/types/Back/type-aliases/FDataFilter","title":"FDataFilter()","description":"FDataFilter: (field, value) => IAdminForthFilter","sidebar":"apiSidebar"},"api/types/Back/type-aliases/FDataSort":{"id":"api/types/Back/type-aliases/FDataSort","title":"FDataSort()","description":"FDataSort: (field, direction) => IAdminForthSort","sidebar":"apiSidebar"},"api/types/Common/enumerations/ActionCheckSource":{"id":"api/types/Common/enumerations/ActionCheckSource","title":"ActionCheckSource","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthDataTypes":{"id":"api/types/Common/enumerations/AdminForthDataTypes","title":"AdminForthDataTypes","description":"Types that are common for both frontend side (SPA) and backend side (server).","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthFilterOperators":{"id":"api/types/Common/enumerations/AdminForthFilterOperators","title":"AdminForthFilterOperators","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthMenuTypes":{"id":"api/types/Common/enumerations/AdminForthMenuTypes","title":"AdminForthMenuTypes","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthResourcePages":{"id":"api/types/Common/enumerations/AdminForthResourcePages","title":"AdminForthResourcePages","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthSortDirections":{"id":"api/types/Common/enumerations/AdminForthSortDirections","title":"AdminForthSortDirections","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AllowedActionsEnum":{"id":"api/types/Common/enumerations/AllowedActionsEnum","title":"AllowedActionsEnum","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/index":{"id":"api/types/Common/index","title":"types/Common","description":"Index","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthBulkActionCommon":{"id":"api/types/Common/interfaces/AdminForthBulkActionCommon","title":"AdminForthBulkActionCommon","description":"Extended by","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthColumnEnumItem":{"id":"api/types/Common/interfaces/AdminForthColumnEnumItem","title":"AdminForthColumnEnumItem","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthComponentDeclarationFull":{"id":"api/types/Common/interfaces/AdminForthComponentDeclarationFull","title":"AdminForthComponentDeclarationFull","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthConfigForFrontend":{"id":"api/types/Common/interfaces/AdminForthConfigForFrontend","title":"AdminForthConfigForFrontend","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthConfigMenuItem":{"id":"api/types/Common/interfaces/AdminForthConfigMenuItem","title":"AdminForthConfigMenuItem","description":"Menu item which displayed in the left sidebar of the admin panel.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthFieldComponents":{"id":"api/types/Common/interfaces/AdminForthFieldComponents","title":"AdminForthFieldComponents","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthForeignResourceCommon":{"id":"api/types/Common/interfaces/AdminForthForeignResourceCommon","title":"AdminForthForeignResourceCommon","description":"Extended by","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceColumnCommon":{"id":"api/types/Common/interfaces/AdminForthResourceColumnCommon","title":"AdminForthResourceColumnCommon","description":"Column describes one field in the table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceColumnInputCommon":{"id":"api/types/Common/interfaces/AdminForthResourceColumnInputCommon","title":"AdminForthResourceColumnInputCommon","description":"Column describes one field in the table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceCommon":{"id":"api/types/Common/interfaces/AdminForthResourceCommon","title":"AdminForthResourceCommon","description":"Resource describes one table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceInputCommon":{"id":"api/types/Common/interfaces/AdminForthResourceInputCommon","title":"AdminForthResourceInputCommon","description":"Resource describes one table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminUser":{"id":"api/types/Common/interfaces/AdminUser","title":"AdminUser","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/GetBaseConfigResponse":{"id":"api/types/Common/interfaces/GetBaseConfigResponse","title":"GetBaseConfigResponse","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/ResourceVeryShort":{"id":"api/types/Common/interfaces/ResourceVeryShort","title":"ResourceVeryShort","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/UserData":{"id":"api/types/Common/interfaces/UserData","title":"UserData","description":"Indexable","sidebar":"apiSidebar"},"api/types/Common/type-aliases/AdminForthComponentDeclaration":{"id":"api/types/Common/type-aliases/AdminForthComponentDeclaration","title":"AdminForthComponentDeclaration","description":"AdminForthComponentDeclaration: AdminForthComponentDeclarationFull \\\\| string","sidebar":"apiSidebar"},"api/types/Common/type-aliases/AllowedActionsResolved":{"id":"api/types/Common/type-aliases/AllowedActionsResolved","title":"AllowedActionsResolved","description":"AllowedActionsResolved boolean }","sidebar":"apiSidebar"},"api/types/Common/type-aliases/AnnouncementBadgeResponse":{"id":"api/types/Common/type-aliases/AnnouncementBadgeResponse","title":"AnnouncementBadgeResponse","description":"AnnouncementBadgeResponse: object","sidebar":"apiSidebar"},"api/types/Common/type-aliases/ValidationObject":{"id":"api/types/Common/type-aliases/ValidationObject","title":"ValidationObject","description":"ValidationObject: object","sidebar":"apiSidebar"},"api/types/FrontendAPI/enumerations/AlertVariant":{"id":"api/types/FrontendAPI/enumerations/AlertVariant","title":"AlertVariant","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/FrontendAPI/index":{"id":"api/types/FrontendAPI/index","title":"types/FrontendAPI","description":"Index","sidebar":"apiSidebar"},"api/types/FrontendAPI/interfaces/FrontendAPIInterface":{"id":"api/types/FrontendAPI/interfaces/FrontendAPIInterface","title":"FrontendAPIInterface","description":"Properties","sidebar":"apiSidebar"},"api/types/FrontendAPI/type-aliases/AlertParams":{"id":"api/types/FrontendAPI/type-aliases/AlertParams","title":"AlertParams","description":"AlertParams: object","sidebar":"apiSidebar"},"api/types/FrontendAPI/type-aliases/ConfirmParams":{"id":"api/types/FrontendAPI/type-aliases/ConfirmParams","title":"ConfirmParams","description":"ConfirmParams: object","sidebar":"apiSidebar"},"api/types/FrontendAPI/type-aliases/FilterParams":{"id":"api/types/FrontendAPI/type-aliases/FilterParams","title":"FilterParams","description":"FilterParams: object","sidebar":"apiSidebar"},"tutorial/Advanced/plugin-development":{"id":"tutorial/Advanced/plugin-development","title":"Plugin development guide","description":"Creating a plugin is a powerful way to extend AdminForth functionality.","sidebar":"tutorialSidebar"},"tutorial/Customization/afcl":{"id":"tutorial/Customization/afcl","title":"AdminForth Components Library","description":"ACL is a new set of components which you can use as build blocks.","sidebar":"tutorialSidebar"},"tutorial/Customization/alert":{"id":"tutorial/Customization/alert","title":"Alerts and confirmations","description":"When you are writing custom components or pages you might need to show alerts or confirmations to the user.","sidebar":"tutorialSidebar"},"tutorial/Customization/branding":{"id":"tutorial/Customization/branding","title":"Branding and Theming","description":"The first things you would probably like to change are the logo, favicon and the name of the application.","sidebar":"tutorialSidebar"},"tutorial/Customization/bulkActions":{"id":"tutorial/Customization/bulkActions","title":"Custom bulk actions","description":"You might need to give admin users a feature to perform same action on multiple records at once.","sidebar":"tutorialSidebar"},"tutorial/Customization/customFieldRendering":{"id":"tutorial/Customization/customFieldRendering","title":"Custom record field rendering","description":"Customizing how AdminForth renders the cells with record values","sidebar":"tutorialSidebar"},"tutorial/Customization/customPages":{"id":"tutorial/Customization/customPages","title":"Custom pages","description":"Most Admin Panels should have some Dashboards or custom pages.","sidebar":"tutorialSidebar"},"tutorial/Customization/dataApi":{"id":"tutorial/Customization/dataApi","title":"Data API","description":"AdminForth Data API is a minimal set of methods to manipulate the data in the database.","sidebar":"tutorialSidebar"},"tutorial/Customization/hooks":{"id":"tutorial/Customization/hooks","title":"Hooks","description":"Hooks are used to:","sidebar":"tutorialSidebar"},"tutorial/Customization/limitingAccess":{"id":"tutorial/Customization/limitingAccess","title":"Limiting actions access","description":"As you might have noticed in diagrams from adminforth hooks section of this tutorial, AdminForth checks options.allowedActions before executing any action. In this section we will show real-code examples of how to limit access to actions based on user role or record values.","sidebar":"tutorialSidebar"},"tutorial/Customization/menuConfiguration":{"id":"tutorial/Customization/menuConfiguration","title":"Menu Configuration","description":"Icons","sidebar":"tutorialSidebar"},"tutorial/Customization/pageInjections":{"id":"tutorial/Customization/pageInjections","title":"Page Injections","description":"In addition to ability to create custom pages and overwrite how fields are rendered, you can also inject custom components in standard AdminForth page.","sidebar":"tutorialSidebar"},"tutorial/Customization/security":{"id":"tutorial/Customization/security","title":"Security","description":"Security and privacy if adminforth users is one of the most important aspects of AdminForth.","sidebar":"tutorialSidebar"},"tutorial/Customization/standardPagesTuning":{"id":"tutorial/Customization/standardPagesTuning","title":"Standard pages tuning","description":"Fields Grouping","sidebar":"tutorialSidebar"},"tutorial/Customization/virtualColumns":{"id":"tutorial/Customization/virtualColumns","title":"Virtual columns","description":"Virtual column for show and list","sidebar":"tutorialSidebar"},"tutorial/Customization/websocket":{"id":"tutorial/Customization/websocket","title":"Websocket","description":"AdminForth provide own build-in websocket interface which allows to stream some data to frontend from backend.","sidebar":"tutorialSidebar"},"tutorial/deploy":{"id":"tutorial/deploy","title":"Deploy in Docker","description":"In general you can already run your index.ts file which we created in Getting Started","sidebar":"tutorialSidebar"},"tutorial/gettingStarted":{"id":"tutorial/gettingStarted","title":"Getting Started","description":"This page provides a step-by-step guide to quickly get started with AdminForth using the adminforth CLI.","sidebar":"tutorialSidebar"},"tutorial/glossary":{"id":"tutorial/glossary","title":"Glossary","description":"dataSource","sidebar":"tutorialSidebar"},"tutorial/hello-world":{"id":"tutorial/hello-world","title":"Hello world app without CLI","description":"No water. Pure code to get started ASAP.","sidebar":"tutorialSidebar"},"tutorial/Plugins/AuditLog":{"id":"tutorial/Plugins/AuditLog","title":"AuditLog","description":"AuditLog plugin allows to log all changes in the resources done from the admin panel.","sidebar":"tutorialSidebar"},"tutorial/Plugins/email-password-reset":{"id":"tutorial/Plugins/email-password-reset","title":"Email password reset","description":"Plugin allows to reset password for admin users who forgot their password by sending email with reset link signed with secured JWT token.","sidebar":"tutorialSidebar"},"tutorial/Plugins/ForeignInlineList":{"id":"tutorial/Plugins/ForeignInlineList","title":"ForeignInlineList","description":"Foreign inline list plugin allows to display a list (table) of items from a foreign table in the show view.","sidebar":"tutorialSidebar"},"tutorial/Plugins/i18n":{"id":"tutorial/Plugins/i18n","title":"Internationalization (i18n)","description":"This plugin allows you translate your AdminForth application to multiple languages.","sidebar":"tutorialSidebar"},"tutorial/Plugins/import-export":{"id":"tutorial/Plugins/import-export","title":"Import-Export","description":"Import-Export is a plugin that allows you to import and export data from and to a CSV file.","sidebar":"tutorialSidebar"},"tutorial/Plugins/open-signup":{"id":"tutorial/Plugins/open-signup","title":"Open Signup","description":"Open Signup plugin allows users to register in adminforth by them-selfs without admin.","sidebar":"tutorialSidebar"},"tutorial/Plugins/RichEditor":{"id":"tutorial/Plugins/RichEditor","title":"Rich editor","description":"Under the hood this plugin uses Quill. Quill is a free, open source WYSIWYG editor built for the modern web.","sidebar":"tutorialSidebar"},"tutorial/Plugins/text-complete":{"id":"tutorial/Plugins/text-complete","title":"Text Complete","description":"This plugin allows you to auto-complete text and string fields using OpenAI Chat GPT models.","sidebar":"tutorialSidebar"},"tutorial/Plugins/TwoFactorsAuth":{"id":"tutorial/Plugins/TwoFactorsAuth","title":"Two-Factor Authentication Plugin","description":"The Two-Factor Authentication Plugin provides an additional layer of security to the application by requiring users to provide a second form of authentication in addition to their password. This plugin supports authenticator apps.","sidebar":"tutorialSidebar"},"tutorial/Plugins/upload":{"id":"tutorial/Plugins/upload","title":"Upload","description":"This plugin allows you to upload files to Amazon S3 bucket.","sidebar":"tutorialSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/11b43341.79e89646.js b/assets/js/11b43341.79e89646.js deleted file mode 100644 index e6be2bf06..000000000 --- a/assets/js/11b43341.79e89646.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[2256],{7674:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Getting Started","href":"/docs/tutorial/gettingStarted","docId":"tutorial/gettingStarted","unlisted":false},{"type":"link","label":"Getting Started with CLI","href":"/docs/tutorial/gettingStartedWithCLI","docId":"tutorial/gettingStartedWithCLI","unlisted":false},{"type":"link","label":"Hello world app","href":"/docs/tutorial/helloWorld","docId":"tutorial/helloWorld","unlisted":false},{"type":"link","label":"Glossary","href":"/docs/tutorial/glossary","docId":"tutorial/glossary","unlisted":false},{"type":"category","label":"Customization","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Branding and Theming","href":"/docs/tutorial/Customization/branding","docId":"tutorial/Customization/branding","unlisted":false},{"type":"link","label":"Custom record field rendering","href":"/docs/tutorial/Customization/customFieldRendering","docId":"tutorial/Customization/customFieldRendering","unlisted":false},{"type":"link","label":"Virtual columns","href":"/docs/tutorial/Customization/virtualColumns","docId":"tutorial/Customization/virtualColumns","unlisted":false},{"type":"link","label":"Hooks","href":"/docs/tutorial/Customization/hooks","docId":"tutorial/Customization/hooks","unlisted":false},{"type":"link","label":"Limiting actions access","href":"/docs/tutorial/Customization/limitingAccess","docId":"tutorial/Customization/limitingAccess","unlisted":false},{"type":"link","label":"Custom pages","href":"/docs/tutorial/Customization/customPages","docId":"tutorial/Customization/customPages","unlisted":false},{"type":"link","label":"Alerts and confirmations","href":"/docs/tutorial/Customization/alert","docId":"tutorial/Customization/alert","unlisted":false},{"type":"link","label":"Page Injections","href":"/docs/tutorial/Customization/pageInjections","docId":"tutorial/Customization/pageInjections","unlisted":false},{"type":"link","label":"Custom bulk actions","href":"/docs/tutorial/Customization/bulkActions","docId":"tutorial/Customization/bulkActions","unlisted":false},{"type":"link","label":"Menu Configuration","href":"/docs/tutorial/Customization/menuConfiguration","docId":"tutorial/Customization/menuConfiguration","unlisted":false},{"type":"link","label":"Data API","href":"/docs/tutorial/Customization/dataApi","docId":"tutorial/Customization/dataApi","unlisted":false},{"type":"link","label":"Security","href":"/docs/tutorial/Customization/security","docId":"tutorial/Customization/security","unlisted":false},{"type":"link","label":"Standard pages tuning","href":"/docs/tutorial/Customization/standardPagesTuning","docId":"tutorial/Customization/standardPagesTuning","unlisted":false},{"type":"link","label":"AdminForth Components Library","href":"/docs/tutorial/Customization/afcl","docId":"tutorial/Customization/afcl","unlisted":false},{"type":"link","label":"Websocket","href":"/docs/tutorial/Customization/websocket","docId":"tutorial/Customization/websocket","unlisted":false}]},{"type":"link","label":"Deploy in Docker","href":"/docs/tutorial/deploy","docId":"tutorial/deploy","unlisted":false},{"type":"category","label":"Plugins","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"AuditLog","href":"/docs/tutorial/Plugins/AuditLog","docId":"tutorial/Plugins/AuditLog","unlisted":false},{"type":"link","label":"Two-Factor Authentication Plugin","href":"/docs/tutorial/Plugins/TwoFactorsAuth","docId":"tutorial/Plugins/TwoFactorsAuth","unlisted":false},{"type":"link","label":"ForeignInlineList","href":"/docs/tutorial/Plugins/ForeignInlineList","docId":"tutorial/Plugins/ForeignInlineList","unlisted":false},{"type":"link","label":"Rich editor","href":"/docs/tutorial/Plugins/RichEditor","docId":"tutorial/Plugins/RichEditor","unlisted":false},{"type":"link","label":"Upload","href":"/docs/tutorial/Plugins/upload","docId":"tutorial/Plugins/upload","unlisted":false},{"type":"link","label":"Text Complete","href":"/docs/tutorial/Plugins/text-complete","docId":"tutorial/Plugins/text-complete","unlisted":false},{"type":"link","label":"Email password reset","href":"/docs/tutorial/Plugins/email-password-reset","docId":"tutorial/Plugins/email-password-reset","unlisted":false},{"type":"link","label":"Import-Export","href":"/docs/tutorial/Plugins/import-export","docId":"tutorial/Plugins/import-export","unlisted":false},{"type":"link","label":"Open Signup","href":"/docs/tutorial/Plugins/open-signup","docId":"tutorial/Plugins/open-signup","unlisted":false},{"type":"link","label":"Internationalization (i18n)","href":"/docs/tutorial/Plugins/i18n","docId":"tutorial/Plugins/i18n","unlisted":false}]},{"type":"category","label":"Advanced","collapsible":false,"collapsed":false,"items":[{"type":"link","label":"Plugin development guide","href":"/docs/tutorial/Advanced/plugin-development","docId":"tutorial/Advanced/plugin-development","unlisted":false}]}],"apiSidebar":[{"type":"category","label":"API","items":[{"type":"category","label":"types","items":[{"type":"category","label":"Back","items":[{"type":"category","label":"Classes","items":[{"type":"link","label":"Filters","href":"/docs/api/types/Back/classes/Filters","docId":"api/types/Back/classes/Filters","unlisted":false},{"type":"link","label":"Sorts","href":"/docs/api/types/Back/classes/Sorts","docId":"api/types/Back/classes/Sorts","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Interfaces","items":[{"type":"link","label":"AdminForthBulkAction","href":"/docs/api/types/Back/interfaces/AdminForthBulkAction","docId":"api/types/Back/interfaces/AdminForthBulkAction","unlisted":false},{"type":"link","label":"AdminForthConfig","href":"/docs/api/types/Back/interfaces/AdminForthConfig","docId":"api/types/Back/interfaces/AdminForthConfig","unlisted":false},{"type":"link","label":"AdminForthConfigCustomization","href":"/docs/api/types/Back/interfaces/AdminForthConfigCustomization","docId":"api/types/Back/interfaces/AdminForthConfigCustomization","unlisted":false},{"type":"link","label":"AdminForthForeignResource","href":"/docs/api/types/Back/interfaces/AdminForthForeignResource","docId":"api/types/Back/interfaces/AdminForthForeignResource","unlisted":false},{"type":"link","label":"AdminForthInputConfig","href":"/docs/api/types/Back/interfaces/AdminForthInputConfig","docId":"api/types/Back/interfaces/AdminForthInputConfig","unlisted":false},{"type":"link","label":"AdminForthResource","href":"/docs/api/types/Back/interfaces/AdminForthResource","docId":"api/types/Back/interfaces/AdminForthResource","unlisted":false},{"type":"link","label":"AdminForthResourceColumn","href":"/docs/api/types/Back/interfaces/AdminForthResourceColumn","docId":"api/types/Back/interfaces/AdminForthResourceColumn","unlisted":false},{"type":"link","label":"AdminForthResourceInput","href":"/docs/api/types/Back/interfaces/AdminForthResourceInput","docId":"api/types/Back/interfaces/AdminForthResourceInput","unlisted":false},{"type":"link","label":"HttpExtra","href":"/docs/api/types/Back/interfaces/HttpExtra","docId":"api/types/Back/interfaces/HttpExtra","unlisted":false},{"type":"link","label":"IAdminForth","href":"/docs/api/types/Back/interfaces/IAdminForth","docId":"api/types/Back/interfaces/IAdminForth","unlisted":false},{"type":"link","label":"IAdminForthAuth","href":"/docs/api/types/Back/interfaces/IAdminForthAuth","docId":"api/types/Back/interfaces/IAdminForthAuth","unlisted":false},{"type":"link","label":"IAdminForthDataSourceConnector","href":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector","docId":"api/types/Back/interfaces/IAdminForthDataSourceConnector","unlisted":false},{"type":"link","label":"IAdminForthDataSourceConnectorBase","href":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","docId":"api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","unlisted":false},{"type":"link","label":"IAdminForthDataSourceConnectorConstructor","href":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","docId":"api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","unlisted":false},{"type":"link","label":"IAdminForthFilter","href":"/docs/api/types/Back/interfaces/IAdminForthFilter","docId":"api/types/Back/interfaces/IAdminForthFilter","unlisted":false},{"type":"link","label":"IAdminForthHttpResponse","href":"/docs/api/types/Back/interfaces/IAdminForthHttpResponse","docId":"api/types/Back/interfaces/IAdminForthHttpResponse","unlisted":false},{"type":"link","label":"IAdminForthPlugin","href":"/docs/api/types/Back/interfaces/IAdminForthPlugin","docId":"api/types/Back/interfaces/IAdminForthPlugin","unlisted":false},{"type":"link","label":"IAdminForthRestAPI","href":"/docs/api/types/Back/interfaces/IAdminForthRestAPI","docId":"api/types/Back/interfaces/IAdminForthRestAPI","unlisted":false},{"type":"link","label":"IAdminForthSort","href":"/docs/api/types/Back/interfaces/IAdminForthSort","docId":"api/types/Back/interfaces/IAdminForthSort","unlisted":false},{"type":"link","label":"ICodeInjector","href":"/docs/api/types/Back/interfaces/ICodeInjector","docId":"api/types/Back/interfaces/ICodeInjector","unlisted":false},{"type":"link","label":"IConfigValidator","href":"/docs/api/types/Back/interfaces/IConfigValidator","docId":"api/types/Back/interfaces/IConfigValidator","unlisted":false},{"type":"link","label":"IExpressHttpServer","href":"/docs/api/types/Back/interfaces/IExpressHttpServer","docId":"api/types/Back/interfaces/IExpressHttpServer","unlisted":false},{"type":"link","label":"IHttpServer","href":"/docs/api/types/Back/interfaces/IHttpServer","docId":"api/types/Back/interfaces/IHttpServer","unlisted":false},{"type":"link","label":"IOperationalResource","href":"/docs/api/types/Back/interfaces/IOperationalResource","docId":"api/types/Back/interfaces/IOperationalResource","unlisted":false},{"type":"link","label":"IWebSocketBroker","href":"/docs/api/types/Back/interfaces/IWebSocketBroker","docId":"api/types/Back/interfaces/IWebSocketBroker","unlisted":false},{"type":"link","label":"IWebSocketClient","href":"/docs/api/types/Back/interfaces/IWebSocketClient","docId":"api/types/Back/interfaces/IWebSocketClient","unlisted":false},{"type":"link","label":"ResourceOptions","href":"/docs/api/types/Back/interfaces/ResourceOptions","docId":"api/types/Back/interfaces/ResourceOptions","unlisted":false},{"type":"link","label":"ResourceOptionsInput","href":"/docs/api/types/Back/interfaces/ResourceOptionsInput","docId":"api/types/Back/interfaces/ResourceOptionsInput","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Type Aliases","items":[{"type":"link","label":"AdminForthDataSource","href":"/docs/api/types/Back/type-aliases/AdminForthDataSource","docId":"api/types/Back/type-aliases/AdminForthDataSource","unlisted":false},{"type":"link","label":"AfterCreateSaveFunction","href":"/docs/api/types/Back/type-aliases/AfterCreateSaveFunction","docId":"api/types/Back/type-aliases/AfterCreateSaveFunction","unlisted":false},{"type":"link","label":"AfterDataSourceResponseFunction","href":"/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction","docId":"api/types/Back/type-aliases/AfterDataSourceResponseFunction","unlisted":false},{"type":"link","label":"AfterDeleteSaveFunction","href":"/docs/api/types/Back/type-aliases/AfterDeleteSaveFunction","docId":"api/types/Back/type-aliases/AfterDeleteSaveFunction","unlisted":false},{"type":"link","label":"AfterEditSaveFunction","href":"/docs/api/types/Back/type-aliases/AfterEditSaveFunction","docId":"api/types/Back/type-aliases/AfterEditSaveFunction","unlisted":false},{"type":"link","label":"AllowedActionValue","href":"/docs/api/types/Back/type-aliases/AllowedActionValue","docId":"api/types/Back/type-aliases/AllowedActionValue","unlisted":false},{"type":"link","label":"AllowedActions","href":"/docs/api/types/Back/type-aliases/AllowedActions","docId":"api/types/Back/type-aliases/AllowedActions","unlisted":false},{"type":"link","label":"AllowedActionsInput","href":"/docs/api/types/Back/type-aliases/AllowedActionsInput","docId":"api/types/Back/type-aliases/AllowedActionsInput","unlisted":false},{"type":"link","label":"BeforeCreateSaveFunction","href":"/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction","docId":"api/types/Back/type-aliases/BeforeCreateSaveFunction","unlisted":false},{"type":"link","label":"BeforeDataSourceRequestFunction","href":"/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction","docId":"api/types/Back/type-aliases/BeforeDataSourceRequestFunction","unlisted":false},{"type":"link","label":"BeforeDeleteSaveFunction","href":"/docs/api/types/Back/type-aliases/BeforeDeleteSaveFunction","docId":"api/types/Back/type-aliases/BeforeDeleteSaveFunction","unlisted":false},{"type":"link","label":"BeforeEditSaveFunction","href":"/docs/api/types/Back/type-aliases/BeforeEditSaveFunction","docId":"api/types/Back/type-aliases/BeforeEditSaveFunction","unlisted":false},{"type":"link","label":"BeforeLoginConfirmationFunction","href":"/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction","docId":"api/types/Back/type-aliases/BeforeLoginConfirmationFunction","unlisted":false},{"type":"link","label":"FDataFilter","href":"/docs/api/types/Back/type-aliases/FDataFilter","docId":"api/types/Back/type-aliases/FDataFilter","unlisted":false},{"type":"link","label":"FDataSort","href":"/docs/api/types/Back/type-aliases/FDataSort","docId":"api/types/Back/type-aliases/FDataSort","unlisted":false}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/types/Back/"},{"type":"category","label":"Common","items":[{"type":"category","label":"Enumerations","items":[{"type":"link","label":"ActionCheckSource","href":"/docs/api/types/Common/enumerations/ActionCheckSource","docId":"api/types/Common/enumerations/ActionCheckSource","unlisted":false},{"type":"link","label":"AdminForthDataTypes","href":"/docs/api/types/Common/enumerations/AdminForthDataTypes","docId":"api/types/Common/enumerations/AdminForthDataTypes","unlisted":false},{"type":"link","label":"AdminForthFilterOperators","href":"/docs/api/types/Common/enumerations/AdminForthFilterOperators","docId":"api/types/Common/enumerations/AdminForthFilterOperators","unlisted":false},{"type":"link","label":"AdminForthMenuTypes","href":"/docs/api/types/Common/enumerations/AdminForthMenuTypes","docId":"api/types/Common/enumerations/AdminForthMenuTypes","unlisted":false},{"type":"link","label":"AdminForthResourcePages","href":"/docs/api/types/Common/enumerations/AdminForthResourcePages","docId":"api/types/Common/enumerations/AdminForthResourcePages","unlisted":false},{"type":"link","label":"AdminForthSortDirections","href":"/docs/api/types/Common/enumerations/AdminForthSortDirections","docId":"api/types/Common/enumerations/AdminForthSortDirections","unlisted":false},{"type":"link","label":"AllowedActionsEnum","href":"/docs/api/types/Common/enumerations/AllowedActionsEnum","docId":"api/types/Common/enumerations/AllowedActionsEnum","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Interfaces","items":[{"type":"link","label":"AdminForthBulkActionCommon","href":"/docs/api/types/Common/interfaces/AdminForthBulkActionCommon","docId":"api/types/Common/interfaces/AdminForthBulkActionCommon","unlisted":false},{"type":"link","label":"AdminForthColumnEnumItem","href":"/docs/api/types/Common/interfaces/AdminForthColumnEnumItem","docId":"api/types/Common/interfaces/AdminForthColumnEnumItem","unlisted":false},{"type":"link","label":"AdminForthComponentDeclarationFull","href":"/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull","docId":"api/types/Common/interfaces/AdminForthComponentDeclarationFull","unlisted":false},{"type":"link","label":"AdminForthConfigForFrontend","href":"/docs/api/types/Common/interfaces/AdminForthConfigForFrontend","docId":"api/types/Common/interfaces/AdminForthConfigForFrontend","unlisted":false},{"type":"link","label":"AdminForthConfigMenuItem","href":"/docs/api/types/Common/interfaces/AdminForthConfigMenuItem","docId":"api/types/Common/interfaces/AdminForthConfigMenuItem","unlisted":false},{"type":"link","label":"AdminForthFieldComponents","href":"/docs/api/types/Common/interfaces/AdminForthFieldComponents","docId":"api/types/Common/interfaces/AdminForthFieldComponents","unlisted":false},{"type":"link","label":"AdminForthForeignResourceCommon","href":"/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon","docId":"api/types/Common/interfaces/AdminForthForeignResourceCommon","unlisted":false},{"type":"link","label":"AdminForthResourceColumnCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon","docId":"api/types/Common/interfaces/AdminForthResourceColumnCommon","unlisted":false},{"type":"link","label":"AdminForthResourceColumnInputCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon","docId":"api/types/Common/interfaces/AdminForthResourceColumnInputCommon","unlisted":false},{"type":"link","label":"AdminForthResourceCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceCommon","docId":"api/types/Common/interfaces/AdminForthResourceCommon","unlisted":false},{"type":"link","label":"AdminForthResourceInputCommon","href":"/docs/api/types/Common/interfaces/AdminForthResourceInputCommon","docId":"api/types/Common/interfaces/AdminForthResourceInputCommon","unlisted":false},{"type":"link","label":"AdminUser","href":"/docs/api/types/Common/interfaces/AdminUser","docId":"api/types/Common/interfaces/AdminUser","unlisted":false},{"type":"link","label":"GetBaseConfigResponse","href":"/docs/api/types/Common/interfaces/GetBaseConfigResponse","docId":"api/types/Common/interfaces/GetBaseConfigResponse","unlisted":false},{"type":"link","label":"ResourceVeryShort","href":"/docs/api/types/Common/interfaces/ResourceVeryShort","docId":"api/types/Common/interfaces/ResourceVeryShort","unlisted":false},{"type":"link","label":"UserData","href":"/docs/api/types/Common/interfaces/UserData","docId":"api/types/Common/interfaces/UserData","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Type Aliases","items":[{"type":"link","label":"AdminForthComponentDeclaration","href":"/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration","docId":"api/types/Common/type-aliases/AdminForthComponentDeclaration","unlisted":false},{"type":"link","label":"AllowedActionsResolved","href":"/docs/api/types/Common/type-aliases/AllowedActionsResolved","docId":"api/types/Common/type-aliases/AllowedActionsResolved","unlisted":false},{"type":"link","label":"AnnouncementBadgeResponse","href":"/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse","docId":"api/types/Common/type-aliases/AnnouncementBadgeResponse","unlisted":false},{"type":"link","label":"ValidationObject","href":"/docs/api/types/Common/type-aliases/ValidationObject","docId":"api/types/Common/type-aliases/ValidationObject","unlisted":false}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/types/Common/"},{"type":"category","label":"FrontendAPI","items":[{"type":"category","label":"Enumerations","items":[{"type":"link","label":"AlertVariant","href":"/docs/api/types/FrontendAPI/enumerations/AlertVariant","docId":"api/types/FrontendAPI/enumerations/AlertVariant","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Interfaces","items":[{"type":"link","label":"FrontendAPIInterface","href":"/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface","docId":"api/types/FrontendAPI/interfaces/FrontendAPIInterface","unlisted":false}],"collapsed":false,"collapsible":false},{"type":"category","label":"Type Aliases","items":[{"type":"link","label":"AlertParams","href":"/docs/api/types/FrontendAPI/type-aliases/AlertParams","docId":"api/types/FrontendAPI/type-aliases/AlertParams","unlisted":false},{"type":"link","label":"ConfirmParams","href":"/docs/api/types/FrontendAPI/type-aliases/ConfirmParams","docId":"api/types/FrontendAPI/type-aliases/ConfirmParams","unlisted":false},{"type":"link","label":"FilterParams","href":"/docs/api/types/FrontendAPI/type-aliases/FilterParams","docId":"api/types/FrontendAPI/type-aliases/FilterParams","unlisted":false}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/types/FrontendAPI/"}],"collapsed":false,"collapsible":false}],"collapsed":false,"collapsible":false,"href":"/docs/api/"}]},"docs":{"api/index":{"id":"api/index","title":"TypeDoc API","description":"Modules","sidebar":"apiSidebar"},"api/types/Back/classes/Filters":{"id":"api/types/Back/classes/Filters","title":"Filters","description":"Constructors","sidebar":"apiSidebar"},"api/types/Back/classes/Sorts":{"id":"api/types/Back/classes/Sorts","title":"Sorts","description":"Constructors","sidebar":"apiSidebar"},"api/types/Back/index":{"id":"api/types/Back/index","title":"types/Back","description":"Index","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthBulkAction":{"id":"api/types/Back/interfaces/AdminForthBulkAction","title":"AdminForthBulkAction","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthConfig":{"id":"api/types/Back/interfaces/AdminForthConfig","title":"AdminForthConfig","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthConfigCustomization":{"id":"api/types/Back/interfaces/AdminForthConfigCustomization","title":"AdminForthConfigCustomization","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthForeignResource":{"id":"api/types/Back/interfaces/AdminForthForeignResource","title":"AdminForthForeignResource","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthInputConfig":{"id":"api/types/Back/interfaces/AdminForthInputConfig","title":"AdminForthInputConfig","description":"Main configuration object for AdminForth","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthResource":{"id":"api/types/Back/interfaces/AdminForthResource","title":"AdminForthResource","description":"Resource describes one table or collection in database.","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthResourceColumn":{"id":"api/types/Back/interfaces/AdminForthResourceColumn","title":"AdminForthResourceColumn","description":"Column describes one field in the table or collection in database.","sidebar":"apiSidebar"},"api/types/Back/interfaces/AdminForthResourceInput":{"id":"api/types/Back/interfaces/AdminForthResourceInput","title":"AdminForthResourceInput","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/HttpExtra":{"id":"api/types/Back/interfaces/HttpExtra","title":"HttpExtra","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForth":{"id":"api/types/Back/interfaces/IAdminForth","title":"IAdminForth","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthAuth":{"id":"api/types/Back/interfaces/IAdminForthAuth","title":"IAdminForthAuth","description":"Methods","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthDataSourceConnector":{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnector","title":"IAdminForthDataSourceConnector","description":"Extended by","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthDataSourceConnectorBase":{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","title":"IAdminForthDataSourceConnectorBase","description":"Interface that exposes methods to interact with AdminForth in standard way","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor":{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","title":"IAdminForthDataSourceConnectorConstructor","description":"Constructors","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthFilter":{"id":"api/types/Back/interfaces/IAdminForthFilter","title":"IAdminForthFilter","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthHttpResponse":{"id":"api/types/Back/interfaces/IAdminForthHttpResponse","title":"IAdminForthHttpResponse","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthPlugin":{"id":"api/types/Back/interfaces/IAdminForthPlugin","title":"IAdminForthPlugin","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthRestAPI":{"id":"api/types/Back/interfaces/IAdminForthRestAPI","title":"IAdminForthRestAPI","description":"Methods","sidebar":"apiSidebar"},"api/types/Back/interfaces/IAdminForthSort":{"id":"api/types/Back/interfaces/IAdminForthSort","title":"IAdminForthSort","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/ICodeInjector":{"id":"api/types/Back/interfaces/ICodeInjector","title":"ICodeInjector","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IConfigValidator":{"id":"api/types/Back/interfaces/IConfigValidator","title":"IConfigValidator","description":"Methods","sidebar":"apiSidebar"},"api/types/Back/interfaces/IExpressHttpServer":{"id":"api/types/Back/interfaces/IExpressHttpServer","title":"IExpressHttpServer","description":"Implement this interface to create custom HTTP server adapter for AdminForth.","sidebar":"apiSidebar"},"api/types/Back/interfaces/IHttpServer":{"id":"api/types/Back/interfaces/IHttpServer","title":"IHttpServer","description":"Implement this interface to create custom HTTP server adapter for AdminForth.","sidebar":"apiSidebar"},"api/types/Back/interfaces/IOperationalResource":{"id":"api/types/Back/interfaces/IOperationalResource","title":"IOperationalResource","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IWebSocketBroker":{"id":"api/types/Back/interfaces/IWebSocketBroker","title":"IWebSocketBroker","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/IWebSocketClient":{"id":"api/types/Back/interfaces/IWebSocketClient","title":"IWebSocketClient","description":"Properties","sidebar":"apiSidebar"},"api/types/Back/interfaces/ResourceOptions":{"id":"api/types/Back/interfaces/ResourceOptions","title":"ResourceOptions","description":"Extends","sidebar":"apiSidebar"},"api/types/Back/interfaces/ResourceOptionsInput":{"id":"api/types/Back/interfaces/ResourceOptionsInput","title":"ResourceOptionsInput","description":"General options for resource.","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AdminForthDataSource":{"id":"api/types/Back/type-aliases/AdminForthDataSource","title":"AdminForthDataSource","description":"AdminForthDataSource: object","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AfterCreateSaveFunction":{"id":"api/types/Back/type-aliases/AfterCreateSaveFunction","title":"AfterCreateSaveFunction()","description":"AfterCreateSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AfterDataSourceResponseFunction":{"id":"api/types/Back/type-aliases/AfterDataSourceResponseFunction","title":"AfterDataSourceResponseFunction()","description":"AfterDataSourceResponseFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AfterDeleteSaveFunction":{"id":"api/types/Back/type-aliases/AfterDeleteSaveFunction","title":"AfterDeleteSaveFunction()","description":"AfterDeleteSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AfterEditSaveFunction":{"id":"api/types/Back/type-aliases/AfterEditSaveFunction","title":"AfterEditSaveFunction()","description":"AfterEditSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AllowedActions":{"id":"api/types/Back/type-aliases/AllowedActions","title":"AllowedActions","description":"AllowedActions AllowedActionValue }","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AllowedActionsInput":{"id":"api/types/Back/type-aliases/AllowedActionsInput","title":"AllowedActionsInput","description":"AllowedActionsInput AllowedActionValue } & object","sidebar":"apiSidebar"},"api/types/Back/type-aliases/AllowedActionValue":{"id":"api/types/Back/type-aliases/AllowedActionValue","title":"AllowedActionValue","description":"AllowedActionValue: boolean \\\\| ({adminUser, resource, meta, source, adminforth}) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeCreateSaveFunction":{"id":"api/types/Back/type-aliases/BeforeCreateSaveFunction","title":"BeforeCreateSaveFunction()","description":"BeforeCreateSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeDataSourceRequestFunction":{"id":"api/types/Back/type-aliases/BeforeDataSourceRequestFunction","title":"BeforeDataSourceRequestFunction()","description":"BeforeDataSourceRequestFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeDeleteSaveFunction":{"id":"api/types/Back/type-aliases/BeforeDeleteSaveFunction","title":"BeforeDeleteSaveFunction()","description":"BeforeDeleteSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeEditSaveFunction":{"id":"api/types/Back/type-aliases/BeforeEditSaveFunction","title":"BeforeEditSaveFunction()","description":"BeforeEditSaveFunction: (params) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/BeforeLoginConfirmationFunction":{"id":"api/types/Back/type-aliases/BeforeLoginConfirmationFunction","title":"BeforeLoginConfirmationFunction()","description":"BeforeLoginConfirmationFunction: (params?) => Promise\\\\","sidebar":"apiSidebar"},"api/types/Back/type-aliases/FDataFilter":{"id":"api/types/Back/type-aliases/FDataFilter","title":"FDataFilter()","description":"FDataFilter: (field, value) => IAdminForthFilter","sidebar":"apiSidebar"},"api/types/Back/type-aliases/FDataSort":{"id":"api/types/Back/type-aliases/FDataSort","title":"FDataSort()","description":"FDataSort: (field, direction) => IAdminForthSort","sidebar":"apiSidebar"},"api/types/Common/enumerations/ActionCheckSource":{"id":"api/types/Common/enumerations/ActionCheckSource","title":"ActionCheckSource","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthDataTypes":{"id":"api/types/Common/enumerations/AdminForthDataTypes","title":"AdminForthDataTypes","description":"Types that are common for both frontend side (SPA) and backend side (server).","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthFilterOperators":{"id":"api/types/Common/enumerations/AdminForthFilterOperators","title":"AdminForthFilterOperators","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthMenuTypes":{"id":"api/types/Common/enumerations/AdminForthMenuTypes","title":"AdminForthMenuTypes","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthResourcePages":{"id":"api/types/Common/enumerations/AdminForthResourcePages","title":"AdminForthResourcePages","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AdminForthSortDirections":{"id":"api/types/Common/enumerations/AdminForthSortDirections","title":"AdminForthSortDirections","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/enumerations/AllowedActionsEnum":{"id":"api/types/Common/enumerations/AllowedActionsEnum","title":"AllowedActionsEnum","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/Common/index":{"id":"api/types/Common/index","title":"types/Common","description":"Index","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthBulkActionCommon":{"id":"api/types/Common/interfaces/AdminForthBulkActionCommon","title":"AdminForthBulkActionCommon","description":"Extended by","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthColumnEnumItem":{"id":"api/types/Common/interfaces/AdminForthColumnEnumItem","title":"AdminForthColumnEnumItem","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthComponentDeclarationFull":{"id":"api/types/Common/interfaces/AdminForthComponentDeclarationFull","title":"AdminForthComponentDeclarationFull","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthConfigForFrontend":{"id":"api/types/Common/interfaces/AdminForthConfigForFrontend","title":"AdminForthConfigForFrontend","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthConfigMenuItem":{"id":"api/types/Common/interfaces/AdminForthConfigMenuItem","title":"AdminForthConfigMenuItem","description":"Menu item which displayed in the left sidebar of the admin panel.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthFieldComponents":{"id":"api/types/Common/interfaces/AdminForthFieldComponents","title":"AdminForthFieldComponents","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthForeignResourceCommon":{"id":"api/types/Common/interfaces/AdminForthForeignResourceCommon","title":"AdminForthForeignResourceCommon","description":"Extended by","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceColumnCommon":{"id":"api/types/Common/interfaces/AdminForthResourceColumnCommon","title":"AdminForthResourceColumnCommon","description":"Column describes one field in the table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceColumnInputCommon":{"id":"api/types/Common/interfaces/AdminForthResourceColumnInputCommon","title":"AdminForthResourceColumnInputCommon","description":"Column describes one field in the table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceCommon":{"id":"api/types/Common/interfaces/AdminForthResourceCommon","title":"AdminForthResourceCommon","description":"Resource describes one table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminForthResourceInputCommon":{"id":"api/types/Common/interfaces/AdminForthResourceInputCommon","title":"AdminForthResourceInputCommon","description":"Resource describes one table or collection in database.","sidebar":"apiSidebar"},"api/types/Common/interfaces/AdminUser":{"id":"api/types/Common/interfaces/AdminUser","title":"AdminUser","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/GetBaseConfigResponse":{"id":"api/types/Common/interfaces/GetBaseConfigResponse","title":"GetBaseConfigResponse","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/ResourceVeryShort":{"id":"api/types/Common/interfaces/ResourceVeryShort","title":"ResourceVeryShort","description":"Properties","sidebar":"apiSidebar"},"api/types/Common/interfaces/UserData":{"id":"api/types/Common/interfaces/UserData","title":"UserData","description":"Indexable","sidebar":"apiSidebar"},"api/types/Common/type-aliases/AdminForthComponentDeclaration":{"id":"api/types/Common/type-aliases/AdminForthComponentDeclaration","title":"AdminForthComponentDeclaration","description":"AdminForthComponentDeclaration: AdminForthComponentDeclarationFull \\\\| string","sidebar":"apiSidebar"},"api/types/Common/type-aliases/AllowedActionsResolved":{"id":"api/types/Common/type-aliases/AllowedActionsResolved","title":"AllowedActionsResolved","description":"AllowedActionsResolved boolean }","sidebar":"apiSidebar"},"api/types/Common/type-aliases/AnnouncementBadgeResponse":{"id":"api/types/Common/type-aliases/AnnouncementBadgeResponse","title":"AnnouncementBadgeResponse","description":"AnnouncementBadgeResponse: object","sidebar":"apiSidebar"},"api/types/Common/type-aliases/ValidationObject":{"id":"api/types/Common/type-aliases/ValidationObject","title":"ValidationObject","description":"ValidationObject: object","sidebar":"apiSidebar"},"api/types/FrontendAPI/enumerations/AlertVariant":{"id":"api/types/FrontendAPI/enumerations/AlertVariant","title":"AlertVariant","description":"Enumeration Members","sidebar":"apiSidebar"},"api/types/FrontendAPI/index":{"id":"api/types/FrontendAPI/index","title":"types/FrontendAPI","description":"Index","sidebar":"apiSidebar"},"api/types/FrontendAPI/interfaces/FrontendAPIInterface":{"id":"api/types/FrontendAPI/interfaces/FrontendAPIInterface","title":"FrontendAPIInterface","description":"Properties","sidebar":"apiSidebar"},"api/types/FrontendAPI/type-aliases/AlertParams":{"id":"api/types/FrontendAPI/type-aliases/AlertParams","title":"AlertParams","description":"AlertParams: object","sidebar":"apiSidebar"},"api/types/FrontendAPI/type-aliases/ConfirmParams":{"id":"api/types/FrontendAPI/type-aliases/ConfirmParams","title":"ConfirmParams","description":"ConfirmParams: object","sidebar":"apiSidebar"},"api/types/FrontendAPI/type-aliases/FilterParams":{"id":"api/types/FrontendAPI/type-aliases/FilterParams","title":"FilterParams","description":"FilterParams: object","sidebar":"apiSidebar"},"tutorial/Advanced/plugin-development":{"id":"tutorial/Advanced/plugin-development","title":"Plugin development guide","description":"Creating a plugin is a powerful way to extend AdminForth functionality.","sidebar":"tutorialSidebar"},"tutorial/Customization/afcl":{"id":"tutorial/Customization/afcl","title":"AdminForth Components Library","description":"ACL is a new set of components which you can use as build blocks.","sidebar":"tutorialSidebar"},"tutorial/Customization/alert":{"id":"tutorial/Customization/alert","title":"Alerts and confirmations","description":"When you are writing custom components or pages you might need to show alerts or confirmations to the user.","sidebar":"tutorialSidebar"},"tutorial/Customization/branding":{"id":"tutorial/Customization/branding","title":"Branding and Theming","description":"The first things you would probably like to change are the logo, favicon and the name of the application.","sidebar":"tutorialSidebar"},"tutorial/Customization/bulkActions":{"id":"tutorial/Customization/bulkActions","title":"Custom bulk actions","description":"You might need to give admin users a feature to perform same action on multiple records at once.","sidebar":"tutorialSidebar"},"tutorial/Customization/customFieldRendering":{"id":"tutorial/Customization/customFieldRendering","title":"Custom record field rendering","description":"Customizing how AdminForth renders the cells with record values","sidebar":"tutorialSidebar"},"tutorial/Customization/customPages":{"id":"tutorial/Customization/customPages","title":"Custom pages","description":"Most Admin Panels should have some Dashboards or custom pages.","sidebar":"tutorialSidebar"},"tutorial/Customization/dataApi":{"id":"tutorial/Customization/dataApi","title":"Data API","description":"AdminForth Data API is a minimal set of methods to manipulate the data in the database.","sidebar":"tutorialSidebar"},"tutorial/Customization/hooks":{"id":"tutorial/Customization/hooks","title":"Hooks","description":"Hooks are used to:","sidebar":"tutorialSidebar"},"tutorial/Customization/limitingAccess":{"id":"tutorial/Customization/limitingAccess","title":"Limiting actions access","description":"As you might have noticed in diagrams from adminforth hooks section of this tutorial, AdminForth checks options.allowedActions before executing any action. In this section we will show real-code examples of how to limit access to actions based on user role or record values.","sidebar":"tutorialSidebar"},"tutorial/Customization/menuConfiguration":{"id":"tutorial/Customization/menuConfiguration","title":"Menu Configuration","description":"Icons","sidebar":"tutorialSidebar"},"tutorial/Customization/pageInjections":{"id":"tutorial/Customization/pageInjections","title":"Page Injections","description":"In addition to ability to create custom pages and overwrite how fields are rendered, you can also inject custom components in standard AdminForth page.","sidebar":"tutorialSidebar"},"tutorial/Customization/security":{"id":"tutorial/Customization/security","title":"Security","description":"Security and privacy if adminforth users is one of the most important aspects of AdminForth.","sidebar":"tutorialSidebar"},"tutorial/Customization/standardPagesTuning":{"id":"tutorial/Customization/standardPagesTuning","title":"Standard pages tuning","description":"Fields Grouping","sidebar":"tutorialSidebar"},"tutorial/Customization/virtualColumns":{"id":"tutorial/Customization/virtualColumns","title":"Virtual columns","description":"Virtual column for show and list","sidebar":"tutorialSidebar"},"tutorial/Customization/websocket":{"id":"tutorial/Customization/websocket","title":"Websocket","description":"AdminForth provide own build-in websocket interface which allows to stream some data to frontend from backend.","sidebar":"tutorialSidebar"},"tutorial/deploy":{"id":"tutorial/deploy","title":"Deploy in Docker","description":"In general you can already run your index.ts file which we created in Getting Started","sidebar":"tutorialSidebar"},"tutorial/gettingStarted":{"id":"tutorial/gettingStarted","title":"Getting Started","description":"This Getting Started Page has some explanations and tables with various field types.","sidebar":"tutorialSidebar"},"tutorial/gettingStartedWithCLI":{"id":"tutorial/gettingStartedWithCLI","title":"Getting Started with CLI","description":"This page provides a step-by-step guide to quickly get started with AdminForth using the handy create-app CLI. If you\u2019re looking for a short and simple tutorial, check out our Hello World page first. Otherwise, read on to learn how to set up a new project using the create-app starter and explore AdminForth\u2019s fundamentals.","sidebar":"tutorialSidebar"},"tutorial/glossary":{"id":"tutorial/glossary","title":"Glossary","description":"dataSource","sidebar":"tutorialSidebar"},"tutorial/helloWorld":{"id":"tutorial/helloWorld","title":"Hello world app","description":"No water. Pure code to get started ASAP.","sidebar":"tutorialSidebar"},"tutorial/Plugins/AuditLog":{"id":"tutorial/Plugins/AuditLog","title":"AuditLog","description":"AuditLog plugin allows to log all changes in the resources done from the admin panel.","sidebar":"tutorialSidebar"},"tutorial/Plugins/email-password-reset":{"id":"tutorial/Plugins/email-password-reset","title":"Email password reset","description":"Plugin allows to reset password for admin users who forgot their password by sending email with reset link signed with secured JWT token.","sidebar":"tutorialSidebar"},"tutorial/Plugins/ForeignInlineList":{"id":"tutorial/Plugins/ForeignInlineList","title":"ForeignInlineList","description":"Foreign inline list plugin allows to display a list (table) of items from a foreign table in the show view.","sidebar":"tutorialSidebar"},"tutorial/Plugins/i18n":{"id":"tutorial/Plugins/i18n","title":"Internationalization (i18n)","description":"This plugin allows you translate your AdminForth application to multiple languages.","sidebar":"tutorialSidebar"},"tutorial/Plugins/import-export":{"id":"tutorial/Plugins/import-export","title":"Import-Export","description":"Import-Export is a plugin that allows you to import and export data from and to a CSV file.","sidebar":"tutorialSidebar"},"tutorial/Plugins/open-signup":{"id":"tutorial/Plugins/open-signup","title":"Open Signup","description":"Open Signup plugin allows users to register in adminforth by them-selfs without admin.","sidebar":"tutorialSidebar"},"tutorial/Plugins/RichEditor":{"id":"tutorial/Plugins/RichEditor","title":"Rich editor","description":"Under the hood this plugin uses Quill. Quill is a free, open source WYSIWYG editor built for the modern web.","sidebar":"tutorialSidebar"},"tutorial/Plugins/text-complete":{"id":"tutorial/Plugins/text-complete","title":"Text Complete","description":"This plugin allows you to auto-complete text and string fields using OpenAI Chat GPT models.","sidebar":"tutorialSidebar"},"tutorial/Plugins/TwoFactorsAuth":{"id":"tutorial/Plugins/TwoFactorsAuth","title":"Two-Factor Authentication Plugin","description":"The Two-Factor Authentication Plugin provides an additional layer of security to the application by requiring users to provide a second form of authentication in addition to their password. This plugin supports authenticator apps.","sidebar":"tutorialSidebar"},"tutorial/Plugins/upload":{"id":"tutorial/Plugins/upload","title":"Upload","description":"This plugin allows you to upload files to Amazon S3 bucket.","sidebar":"tutorialSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/186edb45.07a3809e.js b/assets/js/186edb45.07a3809e.js new file mode 100644 index 000000000..a378cdf1b --- /dev/null +++ b/assets/js/186edb45.07a3809e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[1980],{6777:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var t=a(4848),r=a(8453);const i={},s="Getting Started",d={id:"tutorial/gettingStarted",title:"Getting Started",description:"This page provides a step-by-step guide to quickly get started with AdminForth using the adminforth CLI.",source:"@site/docs/tutorial/001-gettingStarted.md",sourceDirName:"tutorial",slug:"/tutorial/gettingStarted",permalink:"/docs/tutorial/gettingStarted",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",next:{title:"Hello world app without CLI",permalink:"/docs/tutorial/hello-world"}},o={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Creating an AdminForth Project",id:"creating-an-adminforth-project",level:2},{value:"Create a fresh directory",id:"create-a-fresh-directory",level:3},{value:"Run the CLI",id:"run-the-cli",level:3},{value:"Understand the generated Project Structure",id:"understand-the-generated-project-structure",level:3},{value:"Initial Migration & Future Migrations",id:"initial-migration--future-migrations",level:3},{value:"AdminForth Basic Philosophy",id:"adminforth-basic-philosophy",level:2},{value:"Adding an apartments Model",id:"adding-an-apartments-model",level:2},{value:"Step 1. Define the apartments Model in schema.prisma",id:"step-1-define-the-apartments-model-in-schemaprisma",level:3},{value:"Step 2. Create and Apply the Migration",id:"step-2-create-and-apply-the-migration",level:3},{value:"Step3. Create the apartments resource",id:"step3-create-the-apartments-resource",level:3},{value:"Step 4. Register the apartments Resource",id:"step-4-register-the-apartments-resource",level:3},{value:"Run the Server",id:"run-the-server",level:2},{value:"Generating fake records",id:"generating-fake-records",level:2},{value:"Possible configuration options",id:"possible-configuration-options",level:2}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsxs)(n.p,{children:["This page provides a step-by-step guide to quickly get started with AdminForth using the ",(0,t.jsx)(n.code,{children:"adminforth"})," CLI.\nYou will learn how to set up a new project using the ",(0,t.jsx)(n.code,{children:"adminforth create-app"})," command and explore AdminForth\u2019s fundamentals."]}),"\n",(0,t.jsxs)(n.blockquote,{children:["\n",(0,t.jsxs)(n.p,{children:["\ud83d\udc46 For Hello world example without CLI check out ",(0,t.jsx)(n.a,{href:"/docs/tutorial/hello-world",children:"Hello World without CLI"})]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.p,{children:["AdminForth requires ",(0,t.jsx)(n.strong,{children:"Node v20"})," or higher. If you\u2019re on a different version, you can switch or install using:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"nvm install 20\nnvm alias default 20\nnvm use 20\n"})}),"\n",(0,t.jsx)(n.h2,{id:"creating-an-adminforth-project",children:"Creating an AdminForth Project"}),"\n",(0,t.jsxs)(n.p,{children:["The recommended way to get started with AdminForth is via the ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"create-app"})})," CLI, which scaffolds a basic fully functional back-office application. Apart boilerplate it creates one resource for users management."]}),"\n",(0,t.jsx)(n.h3,{id:"create-a-fresh-directory",children:"Create a fresh directory"}),"\n",(0,t.jsx)(n.p,{children:"First, create and enter a directory where you want your AdminForth project to live. For instance:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"mkdir myadmin\ncd myadmin\n"})}),"\n",(0,t.jsx)(n.h3,{id:"run-the-cli",children:"Run the CLI"}),"\n",(0,t.jsx)(n.p,{children:"You can provide options directorly:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npx adminforth create-app --app-name myadmin --db sqlite://.db.sqlite\n"})}),"\n",(0,t.jsx)(n.p,{children:"Or omit them to be prompted interactively:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npx adminforth create-app\n"})}),"\n",(0,t.jsx)(n.p,{children:"CLI options:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"--app-name"})})," - name for your project. Used in ",(0,t.jsx)(n.code,{children:"package.json"}),", ",(0,t.jsx)(n.code,{children:"index.ts"})," branding, etc. Default value: ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"adminforth-app"})}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"--db"})})," - database connection string. Currently PostgreSQL, MongoDB and SQLite are supported. Default value: ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"sqlite://.db.sqlite"})})]}),"\n"]}),"\n",(0,t.jsxs)(n.blockquote,{children:["\n",(0,t.jsx)(n.p,{children:"\u261d\ufe0f Database Connection String format:"}),"\n",(0,t.jsxs)(n.p,{children:["Format is ",(0,t.jsx)(n.code,{children:"://:@:/"})]}),"\n",(0,t.jsxs)(n.p,{children:["For SQLite, you can use ",(0,t.jsx)(n.code,{children:"sqlite://.db.sqlite"}),". If database not yet exists it will be created.\nFor PostgreSQL \u2014 ",(0,t.jsx)(n.code,{children:"postgres://user:password@localhost:5432/dbname"}),".\nFor MongoDB \u2014 ",(0,t.jsx)(n.code,{children:"mongodb://localhost:27017/dbname"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"understand-the-generated-project-structure",children:"Understand the generated Project Structure"}),"\n",(0,t.jsx)(n.p,{children:"The CLI will create boilerplate files and folders in your current directory and install dependencies. A typical layout looks like this:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"myadmin/\n\u251c\u2500\u2500 custom\n\u2502 \u251c\u2500\u2500 assets/ # Static assets like images, fonts, etc.\n\u2502 \u251c\u2500\u2500 package.json # For any custom npm packages you will use in Vue files\n\u2502 \u2514\u2500\u2500 tsconfig.json # Tsconfig for Vue project (adds completion for AdminForth core components)\n\u251c\u2500\u2500 resources\n\u2502 \u2514\u2500\u2500 users.ts # Example resource file for users management\n\u251c\u2500\u2500 schema.prisma # Prisma schema file for database schema\n\u251c\u2500\u2500 index.ts # Main entry point: configures AdminForth & starts the server\n\u251c\u2500\u2500 package.json # Project dependencies\n\u251c\u2500\u2500 tsconfig.json # TypeScript configuration\n\u251c\u2500\u2500 .env # Environment variables (e.g. database connection string)\n\u251c\u2500\u2500 .env.sample # Sample env file (for distribution to teammates)\n\u2514\u2500\u2500 .gitignore \n\n"})}),"\n",(0,t.jsx)(n.h3,{id:"initial-migration--future-migrations",children:"Initial Migration & Future Migrations"}),"\n",(0,t.jsxs)(n.blockquote,{children:["\n",(0,t.jsxs)(n.p,{children:["\u261d\ufe0f CLI creates Prisma schema file for managing migrations in relational databases, however you are not forced to use it. Instead you are free to use your favourite or existing migration tool. In this case just ignore generated prisma file, and don't run migration command which will be suggested by CLI. However you have to ensure that your migration tool will generate required table ",(0,t.jsx)(n.code,{children:"adminuser"})," with same fields and types for Users resource."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"CLI will suggest you a command to initialize the database with Prisma:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run makemigration -- --name init\n"})}),"\n",(0,t.jsxs)(n.p,{children:["This will create a migration file in ",(0,t.jsx)(n.code,{children:"migrations"})," and apply it to the database."]}),"\n",(0,t.jsxs)(n.p,{children:["In future, when you need to add new resources, you need to modify ",(0,t.jsx)(n.code,{children:"schema.prisma"})," (add models, change fields, etc.). After doing any modification you need to create a new migration using next command:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run makemigration -- --name \n"})}),"\n",(0,t.jsxs)(n.p,{children:["Other developers need to pull migration and run ",(0,t.jsx)(n.code,{children:"npm run migrate"})," to apply any unapplied migrations."]}),"\n",(0,t.jsx)(n.h2,{id:"adminforth-basic-philosophy",children:"AdminForth Basic Philosophy"}),"\n",(0,t.jsx)(n.p,{children:"AdminForth connects to existing databases and provides a back-office for managing data including CRUD operations, filtering, sorting, and more."}),"\n",(0,t.jsx)(n.p,{children:"Database can be already created by using any database management tool, ORM or migrator."}),"\n",(0,t.jsx)(n.p,{children:"AdminForth itself never modifies database schema, does not add columns or new tables. However for those who have no own migration managment AdminForth CLI suggests using Prisma. This allows to provide simple and reliable schema management for standalone projects which have no DB yet."}),"\n",(0,t.jsx)(n.p,{children:'If you already have a database, you pass a connection string to AdminForth and define resources(tables) and describe columns you would like to see in back-office. For most DBs AdminForth can "discover" column types and constraints (e.g. max-length) by connecting to DB. However you can redefine them in AdminForth configuration. Type and constraints definition in AdminForth resource are take precedence over DB schema.'}),"\n",(0,t.jsx)(n.p,{children:'Also in AdminForth you can define in "Vue" way:'}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"how each field will be rendered"}),"\n",(0,t.jsx)(n.li,{children:"create own pages e.g. Dashboard using AdminForth Components Library (AFCL) or any other Vue componetns."}),"\n",(0,t.jsx)(n.li,{children:"insert injections into standard pages (e.g. add diagram to list view)"}),"\n"]}),"\n",(0,t.jsxs)(n.h2,{id:"adding-an-apartments-model",children:["Adding an ",(0,t.jsx)(n.code,{children:"apartments"})," Model"]}),"\n",(0,t.jsxs)(n.p,{children:["So far, our freshly generated AdminForth project includes a default ",(0,t.jsx)(n.code,{children:"adminuser"})," model and a corresponding ",(0,t.jsx)(n.code,{children:"users"})," resource."]}),"\n",(0,t.jsxs)(n.p,{children:["Let\u2019s expand our app to suport managment of ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"apartments"})})," model. Adding new resource will involve next steps:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Add a new Prisma model"})," to your ",(0,t.jsx)(n.code,{children:"schema.prisma"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Run a Prisma migration"})," to update your database schema."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Create a corresponding resource"})," in the ",(0,t.jsx)(n.code,{children:"resources/"})," folder."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Register the new resource"})," in ",(0,t.jsx)(n.code,{children:"index.ts"})," and see it in your AdminForth back-office."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Please note that steps 1 and 2 are compleatly independent from 3 and 4, so you can make them with any other way then Prisma."}),"\n",(0,t.jsxs)(n.h3,{id:"step-1-define-the-apartments-model-in-schemaprisma",children:["Step 1. Define the ",(0,t.jsx)(n.code,{children:"apartments"})," Model in ",(0,t.jsx)(n.code,{children:"schema.prisma"})]}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.code,{children:"schema.prisma"})," in your project root and add a new model for ",(0,t.jsx)(n.code,{children:"apartments"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-prisma",metastring:'title="./schema.prisma"',children:"...\n//diff-add\nmodel apartments {\n//diff-add\n id String @id\n//diff-add\n created_at DateTime?\n//diff-add\n title String\n//diff-add\n square_meter Float?\n//diff-add\n price Decimal\n//diff-add\n number_of_rooms Int?\n//diff-add\n description String?\n//diff-add\n country String?\n//diff-add\n listed Boolean\n//diff-add\n realtor_id String?\n//diff-add\n}\n\n"})}),"\n",(0,t.jsx)(n.h3,{id:"step-2-create-and-apply-the-migration",children:"Step 2. Create and Apply the Migration"}),"\n",(0,t.jsx)(n.p,{children:"Run the following command to create a new migration:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run makemigration -- --name add-apartments\n"})}),"\n",(0,t.jsxs)(n.h3,{id:"step3-create-the-apartments-resource",children:["Step3. Create the ",(0,t.jsx)(n.code,{children:"apartments"})," resource"]}),"\n",(0,t.jsxs)(n.p,{children:["Create a new file ",(0,t.jsx)(n.code,{children:"apartments.ts"})," in the ",(0,t.jsx)(n.code,{children:"resources/"})," folder:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",metastring:'title="./resources/apartments.ts"',children:"import { AdminForthDataTypes, AdminForthResourceInput } from 'adminforth';\n\nexport default {\n dataSource: 'maindb',\n table: 'apartments',\n resourceId: 'aparts', // resourceId is defaulted to table name but you can redefine it like this e.g. \n // in case of same table names from different data sources\n label: 'Apartments', // label is defaulted to table name but you can change it\n recordLabel: (r) => `\ud83c\udfe1 ${r.title}`,\n columns: [\n {\n name: 'id',\n type: AdminForthDataTypes.STRING,\n label: 'Identifier', // if you wish you can redefine label, defaulted to uppercased name\n showIn: ['filter', 'show'], // show column in filter and in show page\n primaryKey: true,\n fillOnCreate: ({ initialRecord, adminUser }) => Math.random().toString(36).substring(7), // called during creation to generate content of field, initialRecord is values user entered, adminUser object of user who creates record\n },\n {\n name: 'title',\n required: true,\n showIn: ['list', 'create', 'edit', 'filter', 'show'], // all available options\n type: AdminForthDataTypes.STRING,\n maxLength: 255, // you can set max length for string fields\n minLength: 3, // you can set min length for string fields\n },\n {\n name: 'created_at',\n type: AdminForthDataTypes.DATETIME,\n allowMinMaxQuery: true,\n showIn: ['list', 'filter', 'show', 'edit'],\n fillOnCreate: ({ initialRecord, adminUser }) => (new Date()).toISOString(),\n },\n {\n name: 'price',\n allowMinMaxQuery: true, // use better experience for filtering e.g. date range, set it only if you have index on this column or if you sure there will be low number of rows\n editingNote: 'Price is in USD', // you can put a note near field on editing or creating page\n },\n {\n name: 'square_meter',\n label: 'Square',\n allowMinMaxQuery: true,\n minValue: 1, // you can set min /max value for number columns so users will not be able to enter more/less\n maxValue: 1000,\n },\n {\n name: 'number_of_rooms',\n allowMinMaxQuery: true,\n enum: [\n { value: 1, label: '1 room' },\n { value: 2, label: '2 rooms' },\n { value: 3, label: '3 rooms' },\n { value: 4, label: '4 rooms' },\n { value: 5, label: '5 rooms' },\n ],\n },\n {\n name: 'description',\n sortable: false,\n showIn: ['show', 'edit', 'create', 'filter'],\n },\n {\n name: 'country',\n enum: [{\n value: 'US',\n label: 'United States'\n }, {\n value: 'DE',\n label: 'Germany'\n }, {\n value: 'FR',\n label: 'France'\n }, {\n value: 'GB',\n label: 'United Kingdom'\n }, {\n value: 'NL',\n label: 'Netherlands'\n }, {\n value: 'IT',\n label: 'Italy'\n }, {\n value: 'ES',\n label: 'Spain'\n }, {\n value: 'DK',\n label: 'Denmark'\n }, {\n value: 'PL',\n label: 'Poland'\n }, {\n value: 'UA',\n label: 'Ukraine'\n }, {\n value: null,\n label: 'Not defined'\n }],\n },\n {\n name: 'listed',\n required: true, // will be required on create/edit\n },\n {\n name: 'realtor_id',\n foreignResource: {\n resourceId: 'users',\n }\n }\n ],\n options: {\n listPageSize: 12,\n allowedActions: {\n edit: true,\n delete: true,\n show: true,\n filter: true,\n },\n },\n} as AdminForthResourceInput;\n"})}),"\n",(0,t.jsxs)(n.h3,{id:"step-4-register-the-apartments-resource",children:["Step 4. Register the ",(0,t.jsx)(n.code,{children:"apartments"})," Resource"]}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.code,{children:"index.ts"})," in your project root and import the new resource:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",metastring:'title="./index.ts"',children:"...\n//diff-add\nimport apartmentsResource from \"./resources/apartments\";\n\n...\nexport const admin = new AdminForth({\n ...\n resources: [\n usersResource,\n //diff-add\n apartmentsResource,\n ],\n menu: [\n//diff-add\n {\n//diff-add\n label: 'Core',\n//diff-add\n icon: 'flowbite:brain-solid',\n//diff-add\n open: true,\n//diff-add\n children: [\n//diff-add\n {\n//diff-add\n homepage: true,\n//diff-add\n label: 'Apartments',\n//diff-add\n icon: 'flowbite:home-solid',\n//diff-add\n resourceId: 'aparts',\n//diff-add\n },\n//diff-add\n ]\n//diff-add\n },\n//diff-add\n { type: 'gap' },\n//diff-add\n { type: 'divider' },\n {\n type: 'heading',\n label: 'SYSTEM'\n },\n {\n label: 'Users',\n ...\n }\n ],\n ...\n});\n\n"})}),"\n",(0,t.jsx)(n.h2,{id:"run-the-server",children:"Run the Server"}),"\n",(0,t.jsx)(n.p,{children:"Now you can run your app:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm start\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.a,{href:"http://localhost:3500",children:"http://localhost:3500"})," in your browser and (default credentials are ",(0,t.jsx)(n.code,{children:"adminforth"}),"/",(0,t.jsx)(n.code,{children:"adminforth"})," if you haven\u2019t changed them)."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"alt text",src:a(8332).A+"",width:"2428",height:"1932"})}),"\n",(0,t.jsx)(n.h2,{id:"generating-fake-records",children:"Generating fake records"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",metastring:'title="./index.ts"',children:"//diff-add\nasync function seedDatabase() {\n//diff-add\n if (await admin.resource('aparts').count() > 0) {\n//diff-add\n return\n//diff-add\n }\n//diff-add\n for (let i = 0; i < 100; i++) {\n//diff-add\n await admin.resource('aparts').create({\n//diff-add\n id: `${i}`,\n//diff-add\n title: `Apartment ${i}`,\n//diff-add\n square_meter: (Math.random() * 100).toFixed(1),\n//diff-add\n price: (Math.random() * 10000).toFixed(2),\n//diff-add\n number_of_rooms: Math.floor(Math.random() * 4) + 1,\n//diff-add\n description: 'Next gen apartments',\n//diff-add\n created_at: (new Date(Date.now() - Math.random() * 60 * 60 * 24 * 14 * 1000)).toISOString(),\n//diff-add\n listed: i % 2 == 0,\n//diff-add\n country: `${['US', 'DE', 'FR', 'GB', 'NL', 'IT', 'ES', 'DK', 'PL', 'UA'][Math.floor(Math.random() * 10)]}`\n//diff-add\n });\n//diff-add\n };\n//diff-add\n};\n\nif (import.meta.url === `file://${process.argv[1]}`) {\n\n ...\n\n admin.discoverDatabases().then(async () => {\n if (!await admin.resource('users').get([Filters.EQ('email', 'adminforth')])) {\n await admin.resource('users').create({\n email: 'adminforth',\n password_hash: await AdminForth.Utils.generatePasswordHash('adminforth'),\n role: 'superadmin',\n });\n }\n//diff-add\n await seedDatabase();\n });\n\n"})}),"\n",(0,t.jsxs)(n.p,{children:["This will create records during first launch. Now you should see:\n",(0,t.jsx)(n.img,{alt:"alt text",src:a(4973).A+"",width:"3700",height:"1932"})]}),"\n",(0,t.jsx)(n.p,{children:"Feel free to play with the data, add more fields, and customize the UI to your liking."}),"\n",(0,t.jsx)(n.h2,{id:"possible-configuration-options",children:"Possible configuration options"}),"\n",(0,t.jsxs)(n.p,{children:["Check ",(0,t.jsx)(n.a,{href:"/docs/api/types/Back/interfaces/AdminForthConfig",children:"AdminForthConfig"})," for all possible options."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8332:(e,n,a)=>{a.d(n,{A:()=>t});const t=a.p+"assets/images/localhost_3500_login-22b59511349c51948267c9a4080e4d87.png"},4973:(e,n,a)=>{a.d(n,{A:()=>t});const t=a.p+"assets/images/localhost_3500_resource_aparts-dddac951816a2a7b58c84b6348828ecb.png"},8453:(e,n,a)=>{a.d(n,{R:()=>s,x:()=>d});var t=a(6540);const r={},i=t.createContext(r);function s(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/186edb45.fecd2dba.js b/assets/js/186edb45.fecd2dba.js deleted file mode 100644 index 89b952047..000000000 --- a/assets/js/186edb45.fecd2dba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[1980],{6777:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var r=t(4848),a=t(8453);const i={},s="Getting Started",o={id:"tutorial/gettingStarted",title:"Getting Started",description:"This Getting Started Page has some explanations and tables with various field types.",source:"@site/docs/tutorial/001-gettingStarted.md",sourceDirName:"tutorial",slug:"/tutorial/gettingStarted",permalink:"/docs/tutorial/gettingStarted",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",next:{title:"Getting Started with CLI",permalink:"/docs/tutorial/gettingStartedWithCLI"}},d={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installation",id:"installation",level:2},{value:"Basic Philosophy",id:"basic-philosophy",level:2},{value:"Setting up a first demo",id:"setting-up-a-first-demo",level:2},{value:"Database creation",id:"database-creation",level:2},{value:"Generating fake records",id:"generating-fake-records",level:2},{value:"Possible configuration options",id:"possible-configuration-options",level:2}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"getting-started",children:"Getting Started"}),"\n",(0,r.jsxs)(n.p,{children:["This Getting Started Page has some explanations and tables with various field types.\nFor faster and shorter hello world example check out ",(0,r.jsx)(n.a,{href:"/docs/tutorial/helloWorld",children:"Hello World"})]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:"AdminForth requires Node v18 or higher:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"nvm install 20\nnvm alias default 20\nnvm use 20\n"})}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"mkdir myadmin\ncd myadmin\nnpm init -y\nnpm install adminforth\n"})}),"\n",(0,r.jsxs)(n.p,{children:["AdminForth does not provide own HTTP server, but can add own listeners over exisitng ",(0,r.jsx)(n.a,{href:"https://expressjs.com/",children:"Express"})," server (Fastify support is planned in future). This allows to create custom APIs for backoffice in a way you know."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm i express\n"})}),"\n",(0,r.jsx)(n.p,{children:"You can use AdminForth in pure Node, but we recommend using TypeScript for better development experience:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'npm i typescript@5.4.5 tsx@4.11.2 @types/express @types/node -D\necho \'{\n "compilerOptions": {\n "target": "esnext",\n "module": "nodenext",\n "esModuleInterop": true,\n "forceConsistentCasingInFileNames": true,\n "strict": true\n },\n "exclude": ["node_modules", "dist"]\n}\' > tsconfig.json\n'})}),"\n",(0,r.jsx)(n.h2,{id:"basic-philosophy",children:"Basic Philosophy"}),"\n",(0,r.jsx)(n.p,{children:"AdminForth connects to existing databases and provides a back-office for managing data including CRUD operations, filtering, sorting, and more."}),"\n",(0,r.jsx)(n.p,{children:"Database should be already created by using any database management tool, ORM or migrator. AdminForth does not provide a way to create tables or columns in the database."}),"\n",(0,r.jsx)(n.p,{children:'Once you have a database, you pass a connection string to AdminForth and define resources(tables) and columns you would like to see in back-office. For most DBs AdminForth can "discover" column types and constraints (e.g. max-length) by connecting to DB. However you can redefine them in AdminForth configuration. Type and constraints definition are take precedence over DB schema.'}),"\n",(0,r.jsx)(n.p,{children:'Also in AdminForth you can define in "Vue" way:'}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"how each field will be rendered"}),"\n",(0,r.jsx)(n.li,{children:"create own pages e.g. Dashboards"}),"\n",(0,r.jsx)(n.li,{children:"insert injections into standard pages (e.g. add diagram to list view)"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"setting-up-a-first-demo",children:"Setting up a first demo"}),"\n",(0,r.jsxs)(n.p,{children:["In the demo we will create a simple database with 2 tables: ",(0,r.jsx)(n.code,{children:"apartments"})," and ",(0,r.jsx)(n.code,{children:"users"}),". We will just use plain SQL to create tables and insert some fake data."]}),"\n",(0,r.jsx)(n.p,{children:"Users table will be used to store a credentials for login into backoffice itself."}),"\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.code,{children:"package.json"}),", set ",(0,r.jsx)(n.code,{children:"type"})," to ",(0,r.jsx)(n.code,{children:"module"})," and add ",(0,r.jsx)(n.code,{children:"start"})," script:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="./package.json"',children:'{\n ...\n//diff-add\n "type": "module",\n "scripts": {\n ...\n//diff-add\n "start": "tsx watch --env-file=.env index.ts"\n },\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Create ",(0,r.jsx)(n.code,{children:".env"})," file in root directory with following content:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",metastring:'title="./.env"',children:"DATABASE_FILE=./db.sqlite\nDATABASE_FILE_URL=file:${DATABASE_FILE}\nADMINFORTH_SECRET=123\nNODE_ENV=development\n"})}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsx)(n.p,{children:"\u261d\ufe0f In production:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["you should set ",(0,r.jsx)(n.code,{children:"NODE_ENV"})," to ",(0,r.jsx)(n.code,{children:"production"})," so it will not waste extra resources on hot reload."]}),"\n",(0,r.jsxs)(n.li,{children:["You should autogenerate ",(0,r.jsx)(n.code,{children:"ADMINFORTH_SECRET"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["\u261d\ufe0f If you are using Git, obviously you should make sure you will never commit ",(0,r.jsx)(n.code,{children:".env"})," file to the repository, because\nit might contain your own sensitive secrets. So to follow best practices, we recommend to add ",(0,r.jsx)(n.code,{children:".env"})," into ",(0,r.jsx)(n.code,{children:".gitignore"})," and create ",(0,r.jsx)(n.code,{children:".env.sample"})," as template for other repository users.\nDuring deployment you should set ",(0,r.jsx)(n.code,{children:"ADMINFORTH_SECRET"})," in environment variables of Docker image or in other way without using ",(0,r.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"database-creation",children:"Database creation"}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsx)(n.p,{children:"\u261d\ufe0f For demo purposes we will create a database using Prisma and SQLite.\nYou can also create it using any other favorite tool or ORM and skip this step."}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Create ",(0,r.jsx)(n.code,{children:"./schema.prisma"})," and put next content there:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="./schema.prisma"',children:'generator client {\n provider = "prisma-client-js"\n}\n\ndatasource db {\n provider = "sqlite"\n url = env("DATABASE_FILE_URL")\n}\n\nmodel users {\n id String @id\n created_at DateTime \n email String @unique\n role String \n password_hash String\n}\n\nmodel apartments {\n id String @id\n created_at DateTime? \n title String \n square_meter Float?\n price Decimal\n number_of_rooms Int?\n description String?\n country String?\n listed Boolean\n realtor_id String?\n}\n\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Create database using ",(0,r.jsx)(n.code,{children:"prisma migrate"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npx --yes prisma migrate dev --name init\n"})}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["\u261d\ufe0f In future, if you will need to change schema, you can create new migration with ",(0,r.jsx)(n.code,{children:"npx prisma migrate dev --name "})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Create ",(0,r.jsx)(n.code,{children:"index.ts"})," file in root directory with following content:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="./index.ts"',children:"import express from 'express';\nimport AdminForth, { Filters } from 'adminforth';\nimport usersResource from \"./resources/users\";\nimport apartmentsResource from \"./resources/apartments\";\n\n\nconst ADMIN_BASE_URL = '';\n\nexport const admin = new AdminForth({\n baseUrl : ADMIN_BASE_URL,\n auth: {\n usersResourceId: 'users', // resource to get user during login\n usernameField: 'email', // field where username is stored, should exist in resource\n passwordHashField: 'password_hash',\n rememberMeDays: 30, // users who will check \"remember me\" will stay logged in for 30 days\n },\n customization: {\n brandName: 'My Admin',\n datesFormat: 'D MMM YY',\n timeFormat: 'HH:mm:ss',\n emptyFieldPlaceholder: '-',\n },\n dataSources: [\n {\n id: 'maindb',\n url: `sqlite://${process.env.DATABASE_FILE}`\n },\n ],\n resources: [\n apartmentsResource,\n usersResource,\n ],\n menu: [\n {\n label: 'Core',\n icon: 'flowbite:brain-solid', // any icon from iconify supported in format :, e.g. from here https://icon-sets.iconify.design/flowbite/\n open: true,\n children: [\n {\n homepage: true,\n label: 'Apartments',\n icon: 'flowbite:home-solid',\n resourceId: 'aparts',\n },\n ]\n },\n {\n type: 'gap'\n },\n {\n type: 'divider'\n },\n {\n type: 'heading',\n label: 'SYSTEM',\n },\n {\n label: 'Users',\n icon: 'flowbite:user-solid',\n resourceId: 'users',\n }\n ],\n});\n\nif (import.meta.url === `file://${process.argv[1]}`) {\n // if script is executed directly e.g. node index.ts or npm start\n\n\n const app = express()\n app.use(express.json());\n const port = 3500;\n\n // needed to compile SPA. Call it here or from a build script e.g. in Docker build time to reduce downtime\n await admin.bundleNow({ hotReload: process.env.NODE_ENV === 'development'});\n console.log('Bundling AdminForth done. For faster serving consider calling bundleNow() from a build script.');\n\n\n // serve after you added all api\n admin.express.serve(app)\n\n admin.discoverDatabases().then(async () => {\n if (!await admin.resource('users').get([Filters.EQ('email', 'adminforth')])) {\n await admin.resource('users').create({\n email: 'adminforth',\n password_hash: await AdminForth.Utils.generatePasswordHash('adminforth'),\n role: 'superadmin',\n });\n }\n });\n\n admin.express.listen(port, () => {\n console.log(`Example app listening at http://localhost:${port}`)\n console.log(`\\n\u26a1 AdminForth is available at http://localhost:${port}${ADMIN_BASE_URL}\\n`)\n });\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Next step you need to create ",(0,r.jsx)(n.code,{children:"resources"})," folder."]}),"\n",(0,r.jsxs)(n.p,{children:["Create ",(0,r.jsx)(n.code,{children:"apartments.ts"})," in ",(0,r.jsx)(n.code,{children:"resources"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="/apartments.ts"',children:"import { AdminForthDataTypes, AdminForthResourceInput } from 'adminforth';\n\nexport default {\n dataSource: 'maindb',\n table: 'apartments',\n resourceId: 'aparts', // resourceId is defaulted to table name but you can redefine it like this e.g. \n // in case of same table names from different data sources\n label: 'Apartments', // label is defaulted to table name but you can change it\n recordLabel: (r) => `\ud83c\udfe1 ${r.title}`,\n columns: [\n {\n name: 'id',\n label: 'Identifier', // if you wish you can redefine label, defaulted to uppercased name\n showIn: ['filter', 'show'], // show column in filter and in show page\n primaryKey: true,\n fillOnCreate: ({ initialRecord, adminUser }) => Math.random().toString(36).substring(7), // called during creation to generate content of field, initialRecord is values user entered, adminUser object of user who creates record\n },\n {\n name: 'title',\n required: true,\n showIn: ['list', 'create', 'edit', 'filter', 'show'], // all available options\n type: AdminForthDataTypes.STRING,\n maxLength: 255, // you can set max length for string fields\n minLength: 3, // you can set min length for string fields\n },\n {\n name: 'created_at',\n type: AdminForthDataTypes.DATETIME,\n allowMinMaxQuery: true,\n showIn: ['list', 'filter', 'show', 'edit'],\n fillOnCreate: ({ initialRecord, adminUser }) => (new Date()).toISOString(),\n },\n {\n name: 'price',\n allowMinMaxQuery: true, // use better experience for filtering e.g. date range, set it only if you have index on this column or if you sure there will be low number of rows\n editingNote: 'Price is in USD', // you can put a note near field on editing or creating page\n },\n {\n name: 'square_meter',\n label: 'Square',\n allowMinMaxQuery: true,\n minValue: 1, // you can set min /max value for number columns so users will not be able to enter more/less\n maxValue: 1000,\n },\n {\n name: 'number_of_rooms',\n allowMinMaxQuery: true,\n enum: [\n { value: 1, label: '1 room' },\n { value: 2, label: '2 rooms' },\n { value: 3, label: '3 rooms' },\n { value: 4, label: '4 rooms' },\n { value: 5, label: '5 rooms' },\n ],\n },\n {\n name: 'description',\n sortable: false,\n showIn: ['show', 'edit', 'create', 'filter'],\n },\n {\n name: 'country',\n enum: [{\n value: 'US',\n label: 'United States'\n }, {\n value: 'DE',\n label: 'Germany'\n }, {\n value: 'FR',\n label: 'France'\n }, {\n value: 'GB',\n label: 'United Kingdom'\n }, {\n value: 'NL',\n label: 'Netherlands'\n }, {\n value: 'IT',\n label: 'Italy'\n }, {\n value: 'ES',\n label: 'Spain'\n }, {\n value: 'DK',\n label: 'Denmark'\n }, {\n value: 'PL',\n label: 'Poland'\n }, {\n value: 'UA',\n label: 'Ukraine'\n }, {\n value: null,\n label: 'Not defined'\n }],\n },\n {\n name: 'listed',\n required: true, // will be required on create/edit\n },\n {\n name: 'realtor_id',\n foreignResource: {\n resourceId: 'users',\n }\n }\n ],\n options: {\n listPageSize: 12,\n allowedActions: {\n edit: true,\n delete: true,\n show: true,\n filter: true,\n },\n },\n} as AdminForthResourceInput;\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Create ",(0,r.jsx)(n.code,{children:"users.ts"})," in ",(0,r.jsx)(n.code,{children:"resources"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="/users.ts"',children:"import AdminForth, { AdminForthDataTypes, AdminForthResourceInput } from 'adminforth';\nexport default {\n dataSource: 'maindb',\n table: 'users',\n resourceId: 'users',\n label: 'Users',\n recordLabel: (r) => `\ud83d\udc64 ${r.email}`,\n columns: [\n {\n name: 'id',\n primaryKey: true,\n fillOnCreate: ({ initialRecord, adminUser }) => Math.random().toString(36).substring(7),\n showIn: ['list', 'filter', 'show'],\n },\n {\n name: 'email',\n required: true,\n isUnique: true,\n type: AdminForthDataTypes.STRING,\n validation: [\n // you can also use AdminForth.Utils.EMAIL_VALIDATOR which is alias to this object \n {\n regExp: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$',\n message: 'Email is not valid, must be in format example@test.com'\n },\n ]\n },\n {\n name: 'created_at',\n type: AdminForthDataTypes.DATETIME,\n showIn: ['list', 'filter', 'show'],\n fillOnCreate: ({ initialRecord, adminUser }) => (new Date()).toISOString(),\n },\n {\n name: 'role',\n enum: [\n { value: 'superadmin', label: 'Super Admin' },\n { value: 'user', label: 'User' },\n ]\n },\n {\n name: 'password',\n virtual: true, // field will not be persisted into db\n required: { create: true }, // make required only on create page\n editingNote: { edit: 'Leave empty to keep password unchanged' },\n type: AdminForthDataTypes.STRING,\n showIn: ['create', 'edit'], // to show field only on create and edit pages\n masked: true, // to show stars in input field\n\n minLength: 8,\n validation: [\n // request to have at least 1 digit, 1 upper case, 1 lower case\n AdminForth.Utils.PASSWORD_VALIDATORS.UP_LOW_NUM,\n ],\n },\n { name: 'password_hash', backendOnly: true, showIn: [] }\n ],\n hooks: {\n create: {\n beforeSave: async ({ record, adminUser, resource }) => {\n record.password_hash = await AdminForth.Utils.generatePasswordHash(record.password);\n return { ok: true };\n }\n },\n edit: {\n beforeSave: async ({ record, adminUser, resource }) => {\n if (record.password) {\n record.password_hash = await AdminForth.Utils.generatePasswordHash(record.password);\n }\n return { ok: true }\n },\n },\n }\n} as AdminForthResourceInput;\n"})}),"\n",(0,r.jsx)(n.p,{children:"Now you can run your app:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm start\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.a,{href:"http://localhost:3500",children:"http://localhost:3500"})," in your browser and login with credentials ",(0,r.jsx)(n.code,{children:"adminforth"})," / ",(0,r.jsx)(n.code,{children:"adminforth"}),"."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"alt text",src:t(8332).A+"",width:"2428",height:"1932"})}),"\n",(0,r.jsx)(n.h2,{id:"generating-fake-records",children:"Generating fake records"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="./index.ts"',children:"//diff-add\nasync function seedDatabase() {\n//diff-add\n if (await admin.resource('aparts').count() > 0) {\n//diff-add\n return\n//diff-add \n }\n//diff-add \n for (let i = 0; i <= 100; i++) {\n//diff-add \n await admin.resource('aparts').create({\n//diff-add \n id: `${i}`,\n//diff-add \n title: `Apartment ${i}`,\n//diff-add \n square_meter: (Math.random() * 100).toFixed(1),\n//diff-add \n price: (Math.random() * 10000).toFixed(2),\n//diff-add \n number_of_rooms: Math.floor(Math.random() * 4) + 1,\n//diff-add \n description: 'Next gen apartments',\n//diff-add \n created_at: (new Date(Date.now() - Math.random() * 60 * 60 * 24 * 14 * 1000)).toISOString(),\n//diff-add \n listed: i % 2 == 0,\n//diff-add \n country: `${['US', 'DE', 'FR', 'GB', 'NL', 'IT', 'ES', 'DK', 'PL', 'UA'][Math.floor(Math.random() * 10)]}`\n//diff-add \n });\n//diff-add \n };\n//diff-add \n};\n\nif (import.meta.url === `file://${process.argv[1]}`) {\n\n ...\n\n admin.discoverDatabases().then(async () => {\n if (!await admin.resource('users').get([Filters.EQ('email', 'adminforth')])) {\n await admin.resource('users').create({\n email: 'adminforth',\n password_hash: await AdminForth.Utils.generatePasswordHash('adminforth'),\n role: 'superadmin',\n });\n }\n//diff-add\n await seedDatabase();\n });\n\n"})}),"\n",(0,r.jsxs)(n.p,{children:["This will create records during first launch. Now you should see:\n",(0,r.jsx)(n.img,{alt:"alt text",src:t(4973).A+"",width:"3700",height:"1932"})]}),"\n",(0,r.jsx)(n.h2,{id:"possible-configuration-options",children:"Possible configuration options"}),"\n",(0,r.jsxs)(n.p,{children:["Check ",(0,r.jsx)(n.a,{href:"/docs/api/types/Back/interfaces/AdminForthConfig",children:"AdminForthConfig"})," for all possible options."]})]})}function u(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8332:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/localhost_3500_login-22b59511349c51948267c9a4080e4d87.png"},4973:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/localhost_3500_resource_aparts-dddac951816a2a7b58c84b6348828ecb.png"},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>o});var r=t(6540);const a={},i=r.createContext(a);function s(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.73ce5d1d.js b/assets/js/1df93b7f.21ba430d.js similarity index 98% rename from assets/js/1df93b7f.73ce5d1d.js rename to assets/js/1df93b7f.21ba430d.js index 0a75b9d32..257d6b627 100644 --- a/assets/js/1df93b7f.73ce5d1d.js +++ b/assets/js/1df93b7f.21ba430d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[4583],{5579:(e,t,a)=>{a.r(t),a.d(t,{default:()=>b});var i=a(4164),s=a(8774),n=a(4586),d=a(9201),o=a(1107);const l={features:"features_t9lD",featureSvg:"featureSvg_GfXr"};var r=a(4848);const c=[{title:"CRUD Out of the Box",img:a(8074).A,description:(0,r.jsx)(r.Fragment,{children:"Initialize AdminForth with your database URL and get a full-fledged admin panel."})},{title:"Vue3 Driven",img:a(3642).A,description:(0,r.jsx)(r.Fragment,{children:"Extend easily by creating own Vue3 components and pages"})},{title:"Tailwind Look",img:a(74).A,description:(0,r.jsx)(r.Fragment,{children:"Look is based on TailwindCSS, with a themes customization and dark mode available"})}];function p(e){let{title:t,img:a,description:s}=e;return(0,r.jsxs)("div",{className:(0,i.A)("col col--4"),children:[(0,r.jsx)("div",{className:"text--center",children:(0,r.jsx)("img",{src:a,alt:t,style:{borderRadius:"50px",width:250}})}),(0,r.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,r.jsx)(o.A,{as:"h3",children:t}),(0,r.jsx)("p",{children:s})]})]})}function m(){return(0,r.jsx)("section",{className:l.features,children:(0,r.jsx)("div",{className:"container",children:(0,r.jsx)("div",{className:"row",children:c.map(((e,t)=>(0,r.jsx)(p,{...e},t)))})})})}var g=a(6540),u=a(8193);const h={heroBanner:"heroBanner_qdFl",heroBannerTitle:"heroBannerTitle_x9Ns",buttons:"buttons_AeoN"},f=[{original:a(7488).A,title:"Sign in form",link:"/docs/tutorial/gettingStarted",description:"OWASP-Compliant Sign-In and JWT-SSO already there"},{original:a(58).A,title:"Users management",link:"/docs/tutorial/gettingStarted",description:"Manage users and roles with ease, extend as you like"},{original:a(8306).A,title:"AI autocomplete Plugin - write with ChatGPT",link:"/docs/tutorial/Plugins/text-complete/",description:"Provide your OpenAI API key to autocomplete plugin and AI will help you to write your content using record context"},{original:a(5353).A,title:"Audit log Plugin - know who did what",link:"/docs/tutorial/Plugins/AuditLog/",description:"Attach Audit log plugin with couple of lines, create table for logs and track your users actions"},{original:a(6345).A,title:"2FA Plugin - secure your admin panel",link:"/docs/tutorial/Plugins/TwoFactorsAuth/",description:"RFC 6238-Compliant TOTP-Based 2FA will add additional security layer to your admin panel"},{original:a(5896).A,title:"Dark mode out of the box",link:"/docs/tutorial/gettingStarted",description:"Dark mode is enabled by default, create your own components in Tailwind-way and it will work with no additional friction"},{original:a(1811).A,title:"Upload Plugin - upload files",link:"/docs/tutorial/Plugins/Upload/",description:"Upload files to Amazon S3 with instantiating plugin and providing your S3 credentials"},{original:a(6086).A,title:"Custom Pages and Dashboards",link:"/docs/tutorial/Customization/customPages/",description:"Create your own pages and dashboards with Vue3 components. Add any additional npm packages and extend your admin panel as you like"},{original:a(6329).A,title:"Branding and theming",link:"/docs/tutorial/Customization/branding/",description:"Upload your logo, change colors, update titles, make the look to match your brand"},{original:a(2745).A,title:"Rich Editor Plugin - WYSIWYG",link:"/docs/tutorial/Plugins/RichEditor/",description:"Attach Rich Editor plugin to your text fields and get WYSIWYG editor for your content"}];function x(){const{siteConfig:e}=(0,n.A)(),[t,d]=(0,g.useState)("light");return u.A.canUseDOM,(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("header",{className:(0,i.A)("hero",h.heroBanner),children:(0,r.jsxs)("div",{className:"container",children:[(0,r.jsx)(o.A,{as:"h1",className:(0,i.A)("hero__title",h.heroBannerTitle),children:"Create Admin Panels faster on Node and Vue with AdminForth Framework"}),(0,r.jsx)("p",{className:"hero__subtitle",children:e.tagline}),(0,r.jsxs)("div",{class:"heroRow",children:[(0,r.jsxs)("div",{className:h.buttons,children:[(0,r.jsx)(s.A,{className:"button button--secondary button--outline button--lg",to:"/docs/tutorial/gettingStarted",children:"Get started"}),(0,r.jsx)(s.A,{className:"button button--primary button--lg",to:"https://demo.adminforth.dev/",children:"Live Demo"})]}),(0,r.jsxs)("div",{className:"terminalWrapper",children:[(0,r.jsxs)("div",{className:"fakeMenu",children:[(0,r.jsx)("div",{className:"fakeButtons fakeClose"}),(0,r.jsx)("div",{className:"fakeButtons fakeMinimize"}),(0,r.jsx)("div",{className:"fakeButtons fakeZoom"})]}),(0,r.jsx)("div",{className:"fakeScreen",children:(0,r.jsxs)("p",{className:"line1",children:[(0,r.jsx)("span",{style:{userSelect:"none"},children:"$\xa0"}),(0,r.jsx)("span",{style:{opacity:.6},children:"npx adminforth create-app"})]})})]})]})]})}),(0,r.jsx)("div",{className:"laptop_container",children:(0,r.jsxs)("div",{className:"laptop",children:[(0,r.jsxs)("div",{className:"laptop__screen",children:[(0,r.jsx)("img",{src:{light:a(1959).A,dark:a(3431).A}[t],alt:"Screen"}),(0,r.jsx)("div",{className:"theme_switcher",onClick:()=>d("light"===t?"dark":"light")})]}),(0,r.jsx)("div",{className:"laptop__bottom",children:(0,r.jsx)("div",{className:"laptop__under"})}),(0,r.jsx)("div",{className:"laptop__shadow"})]})})]})}function b(){const{siteConfig:e}=(0,n.A)();return(0,r.jsxs)(d.A,{title:`${e.title}`,description:"OpenSource Tailwind Admin Panel extendable with Vue3 and typescript!",children:[(0,r.jsx)(x,{}),(0,r.jsxs)("main",{children:[(0,r.jsx)(o.A,{as:"h2",className:"hero__title text--center",children:"What it can do for you"}),(0,r.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"4rem",justifyContent:"center",padding:"1rem"},children:f.map(((e,t)=>(0,r.jsx)("div",{className:"card-demo",children:(0,r.jsxs)("div",{className:"card shadow--md",style:{maxWidth:"500px"},children:[(0,r.jsx)("div",{className:"card__image",children:(0,r.jsx)("img",{src:e.original,alt:e.title,title:e.title})}),(0,r.jsxs)("div",{className:"card__body",children:[(0,r.jsx)("h3",{children:e.title}),e.description?(0,r.jsx)("small",{children:e.description}):(0,r.jsx)("small",{})]}),(0,r.jsx)("div",{className:"card__footer",children:(0,r.jsx)("a",{className:"button button--primary button--block",href:e.link,children:"Learn how"})})]})},`feature${t}`)))}),(0,r.jsx)(m,{})]})]})}},8074:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/db2-92b2a57f518e99578c66c8ecbb88bb02.png"},3431:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/preview_dark-d8df956a19f350cf463d30c78e02d185.png"},1959:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/preview_light-915157571809e4c190176ef218d002ee.png"},6345:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/2fa_plugin-b99b1bc08f2fe162b135ffe8f5f46dba.png"},8306:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/ai_complete-a896f586381f2cf86ae54958ba2a3c3e.png"},5353:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/auditlog-a45132e0520cb6d573e31795863ad513.png"},6329:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/branding-0aad53349f471dbc80d6b27dc61dcd91.png"},5896:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/dark-ac2c92d6131e5f51f3961d3c0c1e552f.png"},6086:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/dashboard-831b4024390d5a23264144fef4469348.png"},7488:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/login_form-e39e8b344176092f67e67a90816672db.png"},2745:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/richeditor-b8d189773049b4e70b2d7b01868199b3.png"},1811:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/upload-737425889e5f73534566facca45f107a.png"},58:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/users_management-ae1326386515d8759821ff97638ac049.png"},74:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/tail-0390a94aad96c0ce57406944abef6b95.png"},3642:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/vue-aa2fe012dc252cfa64c7bdb9d47161d8.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[4583],{5579:(e,t,a)=>{a.r(t),a.d(t,{default:()=>b});var i=a(4164),s=a(8774),n=a(4586),d=a(9201),o=a(1107);const l={features:"features_t9lD",featureSvg:"featureSvg_GfXr"};var r=a(4848);const c=[{title:"CRUD Out of the Box",img:a(8074).A,description:(0,r.jsx)(r.Fragment,{children:"Initialize AdminForth with your database URL and get a full-fledged admin panel."})},{title:"Vue3 Driven",img:a(3642).A,description:(0,r.jsx)(r.Fragment,{children:"Extend easily by creating own Vue3 components and pages"})},{title:"Tailwind Look",img:a(74).A,description:(0,r.jsx)(r.Fragment,{children:"Look is based on TailwindCSS, with a themes customization and dark mode available"})}];function p(e){let{title:t,img:a,description:s}=e;return(0,r.jsxs)("div",{className:(0,i.A)("col col--4"),children:[(0,r.jsx)("div",{className:"text--center",children:(0,r.jsx)("img",{src:a,alt:t,style:{borderRadius:"50px",width:250}})}),(0,r.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,r.jsx)(o.A,{as:"h3",children:t}),(0,r.jsx)("p",{children:s})]})]})}function m(){return(0,r.jsx)("section",{className:l.features,children:(0,r.jsx)("div",{className:"container",children:(0,r.jsx)("div",{className:"row",children:c.map(((e,t)=>(0,r.jsx)(p,{...e},t)))})})})}var g=a(6540),u=a(8193);const h={heroBanner:"heroBanner_qdFl",heroBannerTitle:"heroBannerTitle_x9Ns",buttons:"buttons_AeoN"},f=[{original:a(7488).A,title:"Sign in form",link:"/docs/tutorial/gettingStarted",description:"OWASP-Compliant Sign-In and JWT-SSO already there"},{original:a(58).A,title:"Users management",link:"/docs/tutorial/gettingStarted",description:"Manage users and roles with ease, extend as you like"},{original:a(8306).A,title:"AI autocomplete Plugin - write with ChatGPT",link:"/docs/tutorial/Plugins/text-complete/",description:"Provide your OpenAI API key to autocomplete plugin and AI will help you to write your content using record context"},{original:a(5353).A,title:"Audit log Plugin - know who did what",link:"/docs/tutorial/Plugins/AuditLog/",description:"Attach Audit log plugin with couple of lines, create table for logs and track your users actions"},{original:a(6345).A,title:"2FA Plugin - secure your admin panel",link:"/docs/tutorial/Plugins/TwoFactorsAuth/",description:"RFC 6238-Compliant TOTP-Based 2FA will add additional security layer to your admin panel"},{original:a(5896).A,title:"Dark mode out of the box",link:"/docs/tutorial/gettingStarted",description:"Dark mode is enabled by default, create your own components in Tailwind-way and it will work with no additional friction"},{original:a(1811).A,title:"Upload Plugin - upload files",link:"/docs/tutorial/Plugins/Upload/",description:"Upload files to Amazon S3 with instantiating plugin and providing your S3 credentials"},{original:a(6086).A,title:"Custom Pages and Dashboards",link:"/docs/tutorial/Customization/customPages/",description:"Create your own pages and dashboards with Vue3 components. Add any additional npm packages and extend your admin panel as you like"},{original:a(6329).A,title:"Branding and theming",link:"/docs/tutorial/Customization/branding/",description:"Upload your logo, change colors, update titles, make the look to match your brand"},{original:a(2745).A,title:"Rich Editor Plugin - WYSIWYG",link:"/docs/tutorial/Plugins/RichEditor/",description:"Attach Rich Editor plugin to your text fields and get WYSIWYG editor for your content"}];function x(){const{siteConfig:e}=(0,n.A)(),[t,d]=(0,g.useState)("light");return u.A.canUseDOM,(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("header",{className:(0,i.A)("hero",h.heroBanner),children:(0,r.jsxs)("div",{className:"container",children:[(0,r.jsx)(o.A,{as:"h1",className:(0,i.A)("hero__title",h.heroBannerTitle),children:"Create admin panels faster on Node and Vue with AdminForth framework"}),(0,r.jsx)("p",{className:"hero__subtitle",children:e.tagline}),(0,r.jsxs)("div",{class:"heroRow",children:[(0,r.jsxs)("div",{className:h.buttons,children:[(0,r.jsx)(s.A,{className:"button button--secondary button--outline button--lg",to:"/docs/tutorial/gettingStarted",children:"Get started"}),(0,r.jsx)(s.A,{className:"button button--primary button--lg",to:"https://demo.adminforth.dev/",children:"Live Demo"})]}),(0,r.jsxs)("div",{className:"terminalWrapper",children:[(0,r.jsxs)("div",{className:"fakeMenu",children:[(0,r.jsx)("div",{className:"fakeButtons fakeClose"}),(0,r.jsx)("div",{className:"fakeButtons fakeMinimize"}),(0,r.jsx)("div",{className:"fakeButtons fakeZoom"})]}),(0,r.jsx)("div",{className:"fakeScreen",children:(0,r.jsxs)("p",{className:"line1",children:[(0,r.jsx)("span",{style:{userSelect:"none"},children:"$\xa0"}),(0,r.jsx)("span",{style:{opacity:.6},children:"npx adminforth create-app"})]})})]})]})]})}),(0,r.jsx)("div",{className:"laptop_container",children:(0,r.jsxs)("div",{className:"laptop",children:[(0,r.jsxs)("div",{className:"laptop__screen",children:[(0,r.jsx)("img",{src:{light:a(1959).A,dark:a(3431).A}[t],alt:"Screen"}),(0,r.jsx)("div",{className:"theme_switcher",onClick:()=>d("light"===t?"dark":"light")})]}),(0,r.jsx)("div",{className:"laptop__bottom",children:(0,r.jsx)("div",{className:"laptop__under"})}),(0,r.jsx)("div",{className:"laptop__shadow"})]})})]})}function b(){const{siteConfig:e}=(0,n.A)();return(0,r.jsxs)(d.A,{title:`${e.title}`,description:"OpenSource Tailwind Admin Panel extendable with Vue3 and typescript!",children:[(0,r.jsx)(x,{}),(0,r.jsxs)("main",{children:[(0,r.jsx)(o.A,{as:"h2",className:"hero__title text--center",children:"What it can do for you"}),(0,r.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"4rem",justifyContent:"center",padding:"1rem"},children:f.map(((e,t)=>(0,r.jsx)("div",{className:"card-demo",children:(0,r.jsxs)("div",{className:"card shadow--md",style:{maxWidth:"500px"},children:[(0,r.jsx)("div",{className:"card__image",children:(0,r.jsx)("img",{src:e.original,alt:e.title,title:e.title})}),(0,r.jsxs)("div",{className:"card__body",children:[(0,r.jsx)("h3",{children:e.title}),e.description?(0,r.jsx)("small",{children:e.description}):(0,r.jsx)("small",{})]}),(0,r.jsx)("div",{className:"card__footer",children:(0,r.jsx)("a",{className:"button button--primary button--block",href:e.link,children:"Learn how"})})]})},`feature${t}`)))}),(0,r.jsx)(m,{})]})]})}},8074:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/db2-92b2a57f518e99578c66c8ecbb88bb02.png"},3431:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/preview_dark-d8df956a19f350cf463d30c78e02d185.png"},1959:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/preview_light-915157571809e4c190176ef218d002ee.png"},6345:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/2fa_plugin-b99b1bc08f2fe162b135ffe8f5f46dba.png"},8306:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/ai_complete-a896f586381f2cf86ae54958ba2a3c3e.png"},5353:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/auditlog-a45132e0520cb6d573e31795863ad513.png"},6329:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/branding-0aad53349f471dbc80d6b27dc61dcd91.png"},5896:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/dark-ac2c92d6131e5f51f3961d3c0c1e552f.png"},6086:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/dashboard-831b4024390d5a23264144fef4469348.png"},7488:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/login_form-e39e8b344176092f67e67a90816672db.png"},2745:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/richeditor-b8d189773049b4e70b2d7b01868199b3.png"},1811:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/upload-737425889e5f73534566facca45f107a.png"},58:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/users_management-ae1326386515d8759821ff97638ac049.png"},74:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/tail-0390a94aad96c0ce57406944abef6b95.png"},3642:(e,t,a)=>{a.d(t,{A:()=>i});const i=a.p+"assets/images/vue-aa2fe012dc252cfa64c7bdb9d47161d8.png"}}]); \ No newline at end of file diff --git a/assets/js/5da08e7a.211dfb25.js b/assets/js/5da08e7a.211dfb25.js deleted file mode 100644 index 018285cc0..000000000 --- a/assets/js/5da08e7a.211dfb25.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[6914],{1906:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var r=t(4848),s=t(8453);const i={},o="Hello world app",a={id:"tutorial/helloWorld",title:"Hello world app",description:"No water. Pure code to get started ASAP.",source:"@site/docs/tutorial/01-helloWorld.md",sourceDirName:"tutorial",slug:"/tutorial/helloWorld",permalink:"/docs/tutorial/helloWorld",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Getting Started with CLI",permalink:"/docs/tutorial/gettingStartedWithCLI"},next:{title:"Glossary",permalink:"/docs/tutorial/glossary"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installation",id:"installation",level:2},{value:"Env variables",id:"env-variables",level:2},{value:"Database creation",id:"database-creation",level:2},{value:"Setting up adminforth",id:"setting-up-adminforth",level:2},{value:"Possible configuration options",id:"possible-configuration-options",level:2}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"hello-world-app",children:"Hello world app"}),"\n",(0,r.jsx)(n.p,{children:"No water. Pure code to get started ASAP."}),"\n",(0,r.jsx)(n.p,{children:"Here we create database with users and posts tables and admin panel for it."}),"\n",(0,r.jsx)(n.p,{children:"Users table will be used to store a credentials for login into admin panel itself."}),"\n",(0,r.jsxs)(n.p,{children:["When back-office user creates a new post it will be automatically assigned using ",(0,r.jsx)(n.code,{children:"authorId"})," to the user who created it."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.p,{children:["We will use Node v20 for this demo. If you have other Node versions, we recommend using ",(0,r.jsx)(n.a,{href:"https://github.com/nvm-sh/nvm?tab=readme-ov-file#install--update-script",children:"NVM"})," to switch them easily:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"nvm install 20\nnvm alias default 20\nnvm use 20\n"})}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"mkdir af-hello\ncd af-hello\nnpm init -y\nnpm i adminforth express @types/express typescript tsx @types/node -D\nnpx --yes tsc --init --module NodeNext --target ESNext\n"})}),"\n",(0,r.jsx)(n.h2,{id:"env-variables",children:"Env variables"}),"\n",(0,r.jsxs)(n.p,{children:["Create ",(0,r.jsx)(n.code,{children:".env"})," file in root directory and put following content:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",metastring:'title="./.env"',children:"DATABASE_FILE=../db.sqlite\nDATABASE_FILE_URL=file:${DATABASE_FILE}\nADMINFORTH_SECRET=123\n"})}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsx)(n.p,{children:"\u261d\ufe0f Production best practices:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Most likely you not need ",(0,r.jsx)(n.code,{children:".env"})," file at all, instead you should use environment variables (from Docker, Kubernetes, Operating System, etc.)"]}),"\n",(0,r.jsxs)(n.li,{children:["You should set ",(0,r.jsx)(n.code,{children:"NODE_ENV"})," to ",(0,r.jsx)(n.code,{children:"production"})," so it will not waste extra resources on hot reload."]}),"\n",(0,r.jsxs)(n.li,{children:["You should generate very unique value ",(0,r.jsx)(n.code,{children:"ADMINFORTH_SECRET"})," and store it in Vault or other secure place."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["\u261d\ufe0f If you are using Git, obviously you should make sure you will never commit ",(0,r.jsx)(n.code,{children:".env"})," file to the repository, because\nit might contain your own sensitive secrets. So to follow best practices, we recommend to add ",(0,r.jsx)(n.code,{children:".env"})," into ",(0,r.jsx)(n.code,{children:".gitignore"})," and create ",(0,r.jsx)(n.code,{children:".env.sample"})," as template for other repository users with demo data."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"database-creation",children:"Database creation"}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsx)(n.p,{children:"\u261d\ufe0f For demo purposes we will create a database using Prisma and SQLite.\nYou can also create it using any other favorite tool or ORM and skip this step."}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Create ",(0,r.jsx)(n.code,{children:"./schema.prisma"})," and put next content there:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="./schema.prisma"',children:'generator client {\n provider = "prisma-client-js"\n}\n\ndatasource db {\n provider = "sqlite"\n url = env("DATABASE_FILE_URL")\n}\n\nmodel User {\n id String @id\n createdAt DateTime \n email String @unique\n role String \n passwordHash String\n posts Post[]\n}\n\nmodel Post {\n id String @id\n createdAt DateTime \n title String\n content String?\n published Boolean \n author User? @relation(fields: [authorId], references: [id])\n authorId String?\n}\n\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Create database using ",(0,r.jsx)(n.code,{children:"prisma migrate"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npx --yes prisma migrate dev --name init\n"})}),"\n",(0,r.jsx)(n.h2,{id:"setting-up-adminforth",children:"Setting up adminforth"}),"\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.code,{children:"package.json"}),", set ",(0,r.jsx)(n.code,{children:"type"})," to ",(0,r.jsx)(n.code,{children:"module"})," and add ",(0,r.jsx)(n.code,{children:"start"})," script:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="./package.json"',children:'{\n ...\n//diff-add\n "type": "module",\n "scripts": {\n ...\n//diff-add\n "start": "NODE_ENV=development tsx watch --env-file=.env index.ts",\n },\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Create ",(0,r.jsx)(n.code,{children:"index.ts"})," file in root directory with following content:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="./index.ts"',children:"import express from 'express';\nimport AdminForth, { AdminForthDataTypes, AdminUser, Filters } from 'adminforth';\n\nexport const admin = new AdminForth({\n baseUrl: '',\n auth: {\n usersResourceId: 'users', // resource to get user during login\n usernameField: 'email', // field where username is stored, should exist in resource\n passwordHashField: 'passwordHash',\n },\n customization: {\n brandName: 'My Admin',\n datesFormat: 'D MMM YY',\n timeFormat: 'HH:mm:ss',\n emptyFieldPlaceholder: '-',\n },\n dataSources: [{\n id: 'maindb',\n url: `sqlite://${process.env.DATABASE_FILE}`,\n }],\n resources: [\n {\n dataSource: 'maindb',\n table: 'user',\n resourceId: 'users',\n label: 'Users',\n recordLabel: (r: any) => `\ud83d\udc64 ${r.email}`,\n columns: [\n {\n name: 'id',\n primaryKey: true,\n fillOnCreate: () => Math.random().toString(36).substring(7),\n showIn: ['list', 'filter', 'show'],\n },\n {\n name: 'email',\n required: true,\n isUnique: true,\n enforceLowerCase: true,\n validation: [\n AdminForth.Utils.EMAIL_VALIDATOR,\n ]\n },\n {\n name: 'createdAt',\n type: AdminForthDataTypes.DATETIME,\n showIn: ['list', 'filter', 'show'],\n fillOnCreate: () => (new Date()).toISOString(),\n },\n {\n name: 'role',\n enum: [\n { value: 'superadmin', label: 'Super Admin' },\n { value: 'user', label: 'User' },\n ]\n },\n {\n name: 'password',\n virtual: true,\n required: { create: true },\n editingNote: { edit: 'Leave empty to keep password unchanged' },\n minLength: 8,\n type: AdminForthDataTypes.STRING,\n showIn: ['create', 'edit'],\n masked: true,\n },\n { name: 'passwordHash', backendOnly: true, showIn: [] }\n ],\n },\n {\n table: 'post',\n resourceId: 'posts',\n dataSource: 'maindb',\n label: 'Posts',\n recordLabel: (r: any) => `\ud83d\udcdd ${r.title}`,\n columns: [\n {\n name: 'id',\n primaryKey: true,\n fillOnCreate: () => Math.random().toString(36).substring(7),\n showIn: ['list', 'filter', 'show'],\n },\n {\n name: 'title',\n type: AdminForthDataTypes.STRING,\n required: true,\n showIn: ['list', 'create', 'edit', 'filter', 'show'],\n maxLength: 255,\n minLength: 3,\n },\n {\n name: 'content',\n showIn: ['list', 'create', 'edit', 'filter', 'show'],\n },\n {\n name: 'createdAt',\n showIn: ['list', 'filter', 'show',],\n fillOnCreate: () => (new Date()).toISOString(),\n },\n {\n name: 'published',\n required: true,\n },\n {\n name: 'authorId',\n foreignResource: {\n resourceId: 'users',\n },\n showIn: ['list', 'filter', 'show'],\n fillOnCreate: ({ adminUser }: { adminUser: AdminUser }) => {\n return adminUser.dbUser.id;\n }\n }\n ],\n }\n ],\n menu: [\n {\n label: 'Core',\n icon: 'flowbite:brain-solid', // any icon from iconify supported in format :, e.g. from here https://icon-sets.iconify.design/flowbite/\n open: true,\n children: [\n {\n homepage: true,\n label: 'Posts',\n icon: 'flowbite:home-solid',\n resourceId: 'posts',\n },\n ]\n },\n { type: 'gap' },\n { type: 'divider' },\n { type: 'heading', label: 'SYSTEM' },\n {\n label: 'Users',\n icon: 'flowbite:user-solid',\n resourceId: 'users',\n }\n ],\n});\n\n\nif (import.meta.url === `file://${process.argv[1]}`) {\n // if script is executed directly e.g. node index.ts or npm start\n\n const app = express()\n app.use(express.json());\n const port = 3500;\n\n // needed to compile SPA. Call it here or from a build script e.g. in Docker build time to reduce downtime\n await admin.bundleNow({ hotReload: process.env.NODE_ENV === 'development' });\n console.log('Bundling AdminForth done. For faster serving consider calling bundleNow() from a build script.');\n\n // serve after you added all api\n admin.express.serve(app)\n\n admin.discoverDatabases().then(async () => {\n if (!await admin.resource('users').get([Filters.EQ('email', 'adminforth')])) {\n await admin.resource('users').create({\n email: 'adminforth',\n passwordHash: await AdminForth.Utils.generatePasswordHash('adminforth'),\n role: 'superadmin',\n });\n }\n });\n\n admin.express.listen(port, () => {\n console.log(`\\n\u26a1 AdminForth is available at http://localhost:${port}\\n`)\n });\n}\n"})}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["\u261d\ufe0f For simplicity we defined whole configuration in one file. Normally once configuration grows you should\nmove each resource configuration to separate file and organize them to folder and import them in ",(0,r.jsx)(n.code,{children:"index.ts"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Now you can run your app:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm start\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.a,{href:"http://localhost:3500",children:"http://localhost:3500"})," in your browser and login with credentials ",(0,r.jsx)(n.code,{children:"adminforth"})," / ",(0,r.jsx)(n.code,{children:"adminforth"}),"."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"alt text",src:t(8332).A+"",width:"2428",height:"1932"})}),"\n",(0,r.jsx)(n.h2,{id:"possible-configuration-options",children:"Possible configuration options"}),"\n",(0,r.jsxs)(n.p,{children:["Check ",(0,r.jsx)(n.a,{href:"/docs/api/types/Back/interfaces/AdminForthConfig",children:"AdminForthConfig"})," for all possible options."]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8332:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/localhost_3500_login-22b59511349c51948267c9a4080e4d87.png"},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var r=t(6540);const s={},i=r.createContext(s);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5da08e7a.76652dd9.js b/assets/js/5da08e7a.76652dd9.js new file mode 100644 index 000000000..46c9cc2a6 --- /dev/null +++ b/assets/js/5da08e7a.76652dd9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[6914],{1906:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var i=t(4848),r=t(8453);const s={id:"hello-world",title:"Hello world app without CLI",sidebar_class_name:"hidden-sidebar"},o="Hello world app without CLI",a={id:"tutorial/hello-world",title:"Hello world app without CLI",description:"No water. Pure code to get started ASAP.",source:"@site/docs/tutorial/01-helloWorld.md",sourceDirName:"tutorial",slug:"/tutorial/hello-world",permalink:"/docs/tutorial/hello-world",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{id:"hello-world",title:"Hello world app without CLI",sidebar_class_name:"hidden-sidebar"},sidebar:"tutorialSidebar",previous:{title:"Getting Started",permalink:"/docs/tutorial/gettingStarted"},next:{title:"Glossary",permalink:"/docs/tutorial/glossary"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installation",id:"installation",level:2},{value:"Env variables",id:"env-variables",level:2},{value:"Database creation",id:"database-creation",level:2},{value:"Setting up adminforth",id:"setting-up-adminforth",level:2},{value:"Possible configuration options",id:"possible-configuration-options",level:2}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"hello-world-app-without-cli",children:"Hello world app without CLI"}),"\n",(0,i.jsx)(n.p,{children:"No water. Pure code to get started ASAP."}),"\n",(0,i.jsx)(n.p,{children:"Here we create database with users and posts tables and admin panel for it."}),"\n",(0,i.jsx)(n.p,{children:"Users table will be used to store a credentials for login into admin panel itself."}),"\n",(0,i.jsxs)(n.p,{children:["When back-office user creates a new post it will be automatically assigned using ",(0,i.jsx)(n.code,{children:"authorId"})," to the user who created it."]}),"\n",(0,i.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(n.p,{children:["We will use Node v20 for this demo. If you have other Node versions, we recommend using ",(0,i.jsx)(n.a,{href:"https://github.com/nvm-sh/nvm?tab=readme-ov-file#install--update-script",children:"NVM"})," to switch them easily:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"nvm install 20\nnvm alias default 20\nnvm use 20\n"})}),"\n",(0,i.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"mkdir af-hello\ncd af-hello\nnpm init -y\nnpm i adminforth express @types/express typescript tsx @types/node -D\nnpx --yes tsc --init --module NodeNext --target ESNext\n"})}),"\n",(0,i.jsx)(n.h2,{id:"env-variables",children:"Env variables"}),"\n",(0,i.jsxs)(n.p,{children:["Create ",(0,i.jsx)(n.code,{children:".env"})," file in root directory and put following content:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",metastring:'title="./.env"',children:"DATABASE_FILE=../db.sqlite\nDATABASE_FILE_URL=file:${DATABASE_FILE}\nADMINFORTH_SECRET=123\n"})}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"\u261d\ufe0f Production best practices:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Most likely you not need ",(0,i.jsx)(n.code,{children:".env"})," file at all, instead you should use environment variables (from Docker, Kubernetes, Operating System, etc.)"]}),"\n",(0,i.jsxs)(n.li,{children:["You should set ",(0,i.jsx)(n.code,{children:"NODE_ENV"})," to ",(0,i.jsx)(n.code,{children:"production"})," so it will not waste extra resources on hot reload."]}),"\n",(0,i.jsxs)(n.li,{children:["You should generate very unique value ",(0,i.jsx)(n.code,{children:"ADMINFORTH_SECRET"})," and store it in Vault or other secure place."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["\u261d\ufe0f If you are using Git, obviously you should make sure you will never commit ",(0,i.jsx)(n.code,{children:".env"})," file to the repository, because\nit might contain your own sensitive secrets. So to follow best practices, we recommend to add ",(0,i.jsx)(n.code,{children:".env"})," into ",(0,i.jsx)(n.code,{children:".gitignore"})," and create ",(0,i.jsx)(n.code,{children:".env.sample"})," as template for other repository users with demo data."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"database-creation",children:"Database creation"}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"\u261d\ufe0f For demo purposes we will create a database using Prisma and SQLite.\nYou can also create it using any other favorite tool or ORM and skip this step."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Create ",(0,i.jsx)(n.code,{children:"./schema.prisma"})," and put next content there:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",metastring:'title="./schema.prisma"',children:'generator client {\n provider = "prisma-client-js"\n}\n\ndatasource db {\n provider = "sqlite"\n url = env("DATABASE_FILE_URL")\n}\n\nmodel User {\n id String @id\n createdAt DateTime \n email String @unique\n role String \n passwordHash String\n posts Post[]\n}\n\nmodel Post {\n id String @id\n createdAt DateTime \n title String\n content String?\n published Boolean \n author User? @relation(fields: [authorId], references: [id])\n authorId String?\n}\n\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Create database using ",(0,i.jsx)(n.code,{children:"prisma migrate"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npx --yes prisma migrate dev --name init\n"})}),"\n",(0,i.jsx)(n.h2,{id:"setting-up-adminforth",children:"Setting up adminforth"}),"\n",(0,i.jsxs)(n.p,{children:["Open ",(0,i.jsx)(n.code,{children:"package.json"}),", set ",(0,i.jsx)(n.code,{children:"type"})," to ",(0,i.jsx)(n.code,{children:"module"})," and add ",(0,i.jsx)(n.code,{children:"start"})," script:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",metastring:'title="./package.json"',children:'{\n ...\n//diff-add\n "type": "module",\n "scripts": {\n ...\n//diff-add\n "start": "NODE_ENV=development tsx watch --env-file=.env index.ts",\n },\n}\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Create ",(0,i.jsx)(n.code,{children:"index.ts"})," file in root directory with following content:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ts",metastring:'title="./index.ts"',children:"import express from 'express';\nimport AdminForth, { AdminForthDataTypes, AdminUser, Filters } from 'adminforth';\n\nexport const admin = new AdminForth({\n baseUrl: '',\n auth: {\n usersResourceId: 'users', // resource to get user during login\n usernameField: 'email', // field where username is stored, should exist in resource\n passwordHashField: 'passwordHash',\n },\n customization: {\n brandName: 'My Admin',\n datesFormat: 'D MMM YY',\n timeFormat: 'HH:mm:ss',\n emptyFieldPlaceholder: '-',\n },\n dataSources: [{\n id: 'maindb',\n url: `sqlite://${process.env.DATABASE_FILE}`,\n }],\n resources: [\n {\n dataSource: 'maindb',\n table: 'user',\n resourceId: 'users',\n label: 'Users',\n recordLabel: (r: any) => `\ud83d\udc64 ${r.email}`,\n columns: [\n {\n name: 'id',\n primaryKey: true,\n fillOnCreate: () => Math.random().toString(36).substring(7),\n showIn: ['list', 'filter', 'show'],\n },\n {\n name: 'email',\n required: true,\n isUnique: true,\n enforceLowerCase: true,\n validation: [\n AdminForth.Utils.EMAIL_VALIDATOR,\n ]\n },\n {\n name: 'createdAt',\n type: AdminForthDataTypes.DATETIME,\n showIn: ['list', 'filter', 'show'],\n fillOnCreate: () => (new Date()).toISOString(),\n },\n {\n name: 'role',\n enum: [\n { value: 'superadmin', label: 'Super Admin' },\n { value: 'user', label: 'User' },\n ]\n },\n {\n name: 'password',\n virtual: true,\n required: { create: true },\n editingNote: { edit: 'Leave empty to keep password unchanged' },\n minLength: 8,\n type: AdminForthDataTypes.STRING,\n showIn: ['create', 'edit'],\n masked: true,\n },\n { name: 'passwordHash', backendOnly: true, showIn: [] }\n ],\n },\n {\n table: 'post',\n resourceId: 'posts',\n dataSource: 'maindb',\n label: 'Posts',\n recordLabel: (r: any) => `\ud83d\udcdd ${r.title}`,\n columns: [\n {\n name: 'id',\n primaryKey: true,\n fillOnCreate: () => Math.random().toString(36).substring(7),\n showIn: ['list', 'filter', 'show'],\n },\n {\n name: 'title',\n type: AdminForthDataTypes.STRING,\n required: true,\n showIn: ['list', 'create', 'edit', 'filter', 'show'],\n maxLength: 255,\n minLength: 3,\n },\n {\n name: 'content',\n showIn: ['list', 'create', 'edit', 'filter', 'show'],\n },\n {\n name: 'createdAt',\n showIn: ['list', 'filter', 'show',],\n fillOnCreate: () => (new Date()).toISOString(),\n },\n {\n name: 'published',\n required: true,\n },\n {\n name: 'authorId',\n foreignResource: {\n resourceId: 'users',\n },\n showIn: ['list', 'filter', 'show'],\n fillOnCreate: ({ adminUser }: { adminUser: AdminUser }) => {\n return adminUser.dbUser.id;\n }\n }\n ],\n }\n ],\n menu: [\n {\n label: 'Core',\n icon: 'flowbite:brain-solid', // any icon from iconify supported in format :, e.g. from here https://icon-sets.iconify.design/flowbite/\n open: true,\n children: [\n {\n homepage: true,\n label: 'Posts',\n icon: 'flowbite:home-solid',\n resourceId: 'posts',\n },\n ]\n },\n { type: 'gap' },\n { type: 'divider' },\n { type: 'heading', label: 'SYSTEM' },\n {\n label: 'Users',\n icon: 'flowbite:user-solid',\n resourceId: 'users',\n }\n ],\n});\n\n\nif (import.meta.url === `file://${process.argv[1]}`) {\n // if script is executed directly e.g. node index.ts or npm start\n\n const app = express()\n app.use(express.json());\n const port = 3500;\n\n // needed to compile SPA. Call it here or from a build script e.g. in Docker build time to reduce downtime\n await admin.bundleNow({ hotReload: process.env.NODE_ENV === 'development' });\n console.log('Bundling AdminForth done. For faster serving consider calling bundleNow() from a build script.');\n\n // serve after you added all api\n admin.express.serve(app)\n\n admin.discoverDatabases().then(async () => {\n if (!await admin.resource('users').get([Filters.EQ('email', 'adminforth')])) {\n await admin.resource('users').create({\n email: 'adminforth',\n passwordHash: await AdminForth.Utils.generatePasswordHash('adminforth'),\n role: 'superadmin',\n });\n }\n });\n\n admin.express.listen(port, () => {\n console.log(`\\n\u26a1 AdminForth is available at http://localhost:${port}\\n`)\n });\n}\n"})}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["\u261d\ufe0f For simplicity we defined whole configuration in one file. Normally once configuration grows you should\nmove each resource configuration to separate file and organize them to folder and import them in ",(0,i.jsx)(n.code,{children:"index.ts"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Now you can run your app:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npm start\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Open ",(0,i.jsx)(n.a,{href:"http://localhost:3500",children:"http://localhost:3500"})," in your browser and login with credentials ",(0,i.jsx)(n.code,{children:"adminforth"})," / ",(0,i.jsx)(n.code,{children:"adminforth"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"alt text",src:t(8332).A+"",width:"2428",height:"1932"})}),"\n",(0,i.jsx)(n.h2,{id:"possible-configuration-options",children:"Possible configuration options"}),"\n",(0,i.jsxs)(n.p,{children:["Check ",(0,i.jsx)(n.a,{href:"/docs/api/types/Back/interfaces/AdminForthConfig",children:"AdminForthConfig"})," for all possible options."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8332:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/localhost_3500_login-22b59511349c51948267c9a4080e4d87.png"},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var i=t(6540);const r={},s=i.createContext(r);function o(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8a5469a7.1043bb95.js b/assets/js/8a5469a7.1043bb95.js deleted file mode 100644 index 579e72606..000000000 --- a/assets/js/8a5469a7.1043bb95.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[8910],{6325:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var i=o(4848),t=o(8453);const a={},r="Glossary",s={id:"tutorial/glossary",title:"Glossary",description:"dataSource",source:"@site/docs/tutorial/02-glossary.md",sourceDirName:"tutorial",slug:"/tutorial/glossary",permalink:"/docs/tutorial/glossary",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Hello world app",permalink:"/docs/tutorial/helloWorld"},next:{title:"Branding and Theming",permalink:"/docs/tutorial/Customization/branding"}},l={},c=[{value:"dataSource",id:"datasource",level:2},{value:"resource",id:"resource",level:2},{value:"column",id:"column",level:2},{value:"record",id:"record",level:2},{value:"action",id:"action",level:2},{value:"adminUser",id:"adminuser",level:2},{value:"hook",id:"hook",level:2},{value:"allowedAction",id:"allowedaction",level:2},{value:"component",id:"component",level:2},{value:"field",id:"field",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"glossary",children:"Glossary"}),"\n",(0,i.jsx)(n.h2,{id:"datasource",children:"dataSource"}),"\n",(0,i.jsxs)(n.p,{children:["A DataSource is a connection to one database. Datasources have id for references from resources and URL which follows the standard URI format. For example ",(0,i.jsx)(n.code,{children:"mysql://user:password@localhost:3306/database"}),".\nIt used to:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Discover the columns in the database"}),"\n",(0,i.jsx)(n.li,{children:"Make queries to get the list and show records"}),"\n",(0,i.jsx)(n.li,{children:"Make queries to modify data"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"There might be several datasources in the system for various databases e.g. One 2 Mongo DBs and 1 Postgres DB."}),"\n",(0,i.jsx)(n.h2,{id:"resource",children:"resource"}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.a,{href:"/docs/api/types/Back/interfaces/AdminForthResource",children:"Resource"})," is a representation of a table or collection in AdminForth. One resource is one table in the database.\nIt has a ",(0,i.jsx)(n.code,{children:"name"})," which should match name in database, a datasource id, and a list of columns.\nAlso it has various customization options."]}),"\n",(0,i.jsx)(n.h2,{id:"column",children:"column"}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.a,{href:"/docs/api/types/Back/interfaces/AdminForthResourceColumn",children:"Column"})," is a representation of a column in a table. It has a ",(0,i.jsx)(n.code,{children:"name"})," which should be equal to name in database and various configuration options."]}),"\n",(0,i.jsx)(n.h2,{id:"record",children:"record"}),"\n",(0,i.jsx)(n.p,{children:"A record is a row in a relational database table. Or Document in document database table."}),"\n",(0,i.jsx)(n.h2,{id:"action",children:"action"}),"\n",(0,i.jsx)(n.p,{children:"Action is one of operations which can be performed on the resource or it's records."}),"\n",(0,i.jsxs)(n.p,{children:["There are next ",(0,i.jsx)(n.a,{href:"/docs/api/types/Common/enumerations/AllowedActionsEnum",children:"actions"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"create"}),"\n",(0,i.jsx)(n.li,{children:"edit"}),"\n",(0,i.jsx)(n.li,{children:"delete"}),"\n",(0,i.jsx)(n.li,{children:"list"}),"\n",(0,i.jsx)(n.li,{children:"show"}),"\n",(0,i.jsx)(n.li,{children:"filter"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"adminuser",children:"adminUser"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/docs/api/types/Common/interfaces/AdminUser",children:"Object"})," which represents a user who logged in to the AdminForth."]}),"\n",(0,i.jsx)(n.h2,{id:"hook",children:"hook"}),"\n",(0,i.jsx)(n.p,{children:"Hook is a optional async function which allows to inject in backend logic before executing the datasource query or after it.\nHooks exist for all database queries including data read queries like list, show, and data write queries like create, edit, delete."}),"\n",(0,i.jsx)(n.h2,{id:"allowedaction",children:"allowedAction"}),"\n",(0,i.jsx)(n.p,{children:"Static boolean value or async function which returns boolean and defines whether the action is allowed for the user.\nallowedAction checked before any hooks or datasource queries: this means that if your allowed action function\nreturned false you can be sure that user attempt to perform the action or get the data will be strictly prohibited on backend side."}),"\n",(0,i.jsx)(n.h2,{id:"component",children:"component"}),"\n",(0,i.jsx)(n.p,{children:"Component is a Vue component which is used to add or modify UI elements in AdminForth. It can be used as a full custom page with a link in menu or as a part of the existing AdminForth page"}),"\n",(0,i.jsx)(n.h2,{id:"field",children:"field"}),"\n",(0,i.jsx)(n.p,{children:"The column in the record."})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>s});var i=o(6540);const t={},a=i.createContext(t);function r(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8a5469a7.a06eee32.js b/assets/js/8a5469a7.a06eee32.js new file mode 100644 index 000000000..f6553119a --- /dev/null +++ b/assets/js/8a5469a7.a06eee32.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[8910],{6325:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var i=o(4848),t=o(8453);const a={},r="Glossary",s={id:"tutorial/glossary",title:"Glossary",description:"dataSource",source:"@site/docs/tutorial/02-glossary.md",sourceDirName:"tutorial",slug:"/tutorial/glossary",permalink:"/docs/tutorial/glossary",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Hello world app without CLI",permalink:"/docs/tutorial/hello-world"},next:{title:"Branding and Theming",permalink:"/docs/tutorial/Customization/branding"}},l={},c=[{value:"dataSource",id:"datasource",level:2},{value:"resource",id:"resource",level:2},{value:"column",id:"column",level:2},{value:"record",id:"record",level:2},{value:"action",id:"action",level:2},{value:"adminUser",id:"adminuser",level:2},{value:"hook",id:"hook",level:2},{value:"allowedAction",id:"allowedaction",level:2},{value:"component",id:"component",level:2},{value:"field",id:"field",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"glossary",children:"Glossary"}),"\n",(0,i.jsx)(n.h2,{id:"datasource",children:"dataSource"}),"\n",(0,i.jsxs)(n.p,{children:["A DataSource is a connection to one database. Datasources have id for references from resources and URL which follows the standard URI format. For example ",(0,i.jsx)(n.code,{children:"mysql://user:password@localhost:3306/database"}),".\nIt used to:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Discover the columns in the database"}),"\n",(0,i.jsx)(n.li,{children:"Make queries to get the list and show records"}),"\n",(0,i.jsx)(n.li,{children:"Make queries to modify data"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"There might be several datasources in the system for various databases e.g. One 2 Mongo DBs and 1 Postgres DB."}),"\n",(0,i.jsx)(n.h2,{id:"resource",children:"resource"}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.a,{href:"/docs/api/types/Back/interfaces/AdminForthResource",children:"Resource"})," is a representation of a table or collection in AdminForth. One resource is one table in the database.\nIt has a ",(0,i.jsx)(n.code,{children:"name"})," which should match name in database, a datasource id, and a list of columns.\nAlso it has various customization options."]}),"\n",(0,i.jsx)(n.h2,{id:"column",children:"column"}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.a,{href:"/docs/api/types/Back/interfaces/AdminForthResourceColumn",children:"Column"})," is a representation of a column in a table. It has a ",(0,i.jsx)(n.code,{children:"name"})," which should be equal to name in database and various configuration options."]}),"\n",(0,i.jsx)(n.h2,{id:"record",children:"record"}),"\n",(0,i.jsx)(n.p,{children:"A record is a row in a relational database table. Or Document in document database table."}),"\n",(0,i.jsx)(n.h2,{id:"action",children:"action"}),"\n",(0,i.jsx)(n.p,{children:"Action is one of operations which can be performed on the resource or it's records."}),"\n",(0,i.jsxs)(n.p,{children:["There are next ",(0,i.jsx)(n.a,{href:"/docs/api/types/Common/enumerations/AllowedActionsEnum",children:"actions"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"create"}),"\n",(0,i.jsx)(n.li,{children:"edit"}),"\n",(0,i.jsx)(n.li,{children:"delete"}),"\n",(0,i.jsx)(n.li,{children:"list"}),"\n",(0,i.jsx)(n.li,{children:"show"}),"\n",(0,i.jsx)(n.li,{children:"filter"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"adminuser",children:"adminUser"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/docs/api/types/Common/interfaces/AdminUser",children:"Object"})," which represents a user who logged in to the AdminForth."]}),"\n",(0,i.jsx)(n.h2,{id:"hook",children:"hook"}),"\n",(0,i.jsx)(n.p,{children:"Hook is a optional async function which allows to inject in backend logic before executing the datasource query or after it.\nHooks exist for all database queries including data read queries like list, show, and data write queries like create, edit, delete."}),"\n",(0,i.jsx)(n.h2,{id:"allowedaction",children:"allowedAction"}),"\n",(0,i.jsx)(n.p,{children:"Static boolean value or async function which returns boolean and defines whether the action is allowed for the user.\nallowedAction checked before any hooks or datasource queries: this means that if your allowed action function\nreturned false you can be sure that user attempt to perform the action or get the data will be strictly prohibited on backend side."}),"\n",(0,i.jsx)(n.h2,{id:"component",children:"component"}),"\n",(0,i.jsx)(n.p,{children:"Component is a Vue component which is used to add or modify UI elements in AdminForth. It can be used as a full custom page with a link in menu or as a part of the existing AdminForth page"}),"\n",(0,i.jsx)(n.h2,{id:"field",children:"field"}),"\n",(0,i.jsx)(n.p,{children:"The column in the record."})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>s});var i=o(6540);const t={},a=i.createContext(t);function r(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d7e47a1a.d39102bc.js b/assets/js/d7e47a1a.d39102bc.js deleted file mode 100644 index 1ebb522a5..000000000 --- a/assets/js/d7e47a1a.d39102bc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[9293],{1567:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var t=a(4848),r=a(8453);const i={},s="Getting Started with CLI",d={id:"tutorial/gettingStartedWithCLI",title:"Getting Started with CLI",description:"This page provides a step-by-step guide to quickly get started with AdminForth using the handy create-app CLI. If you\u2019re looking for a short and simple tutorial, check out our Hello World page first. Otherwise, read on to learn how to set up a new project using the create-app starter and explore AdminForth\u2019s fundamentals.",source:"@site/docs/tutorial/001-gettingStartedWithCLI.md",sourceDirName:"tutorial",slug:"/tutorial/gettingStartedWithCLI",permalink:"/docs/tutorial/gettingStartedWithCLI",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Getting Started",permalink:"/docs/tutorial/gettingStarted"},next:{title:"Hello world app",permalink:"/docs/tutorial/helloWorld"}},o={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Creating an AdminForth Project",id:"creating-an-adminforth-project",level:2},{value:"Create a fresh directory",id:"create-a-fresh-directory",level:3},{value:"Run the CLI",id:"run-the-cli",level:3},{value:"Understand the generated Project Structure",id:"understand-the-generated-project-structure",level:3},{value:"Initial Migration & Future Migrations",id:"initial-migration--future-migrations",level:3},{value:"Basic Philosophy",id:"basic-philosophy",level:2},{value:"Adding an apartments Model",id:"adding-an-apartments-model",level:2},{value:"Define the apartments Model in schema.prisma",id:"define-the-apartments-model-in-schemaprisma",level:3},{value:"Create and Apply the Migration",id:"create-and-apply-the-migration",level:3},{value:"Create the apartments Resource",id:"create-the-apartments-resource",level:3},{value:"Register the apartments Resource",id:"register-the-apartments-resource",level:3},{value:"Run the Server",id:"run-the-server",level:3},{value:"Generating fake records",id:"generating-fake-records",level:2},{value:"Possible configuration options",id:"possible-configuration-options",level:2}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"getting-started-with-cli",children:"Getting Started with CLI"}),"\n",(0,t.jsxs)(n.p,{children:["This page provides a step-by-step guide to quickly get started with AdminForth using the handy ",(0,t.jsx)(n.code,{children:"create-app"})," CLI. If you\u2019re looking for a ",(0,t.jsx)(n.strong,{children:"short and simple"})," tutorial, check out our ",(0,t.jsx)(n.a,{href:"/docs/tutorial/helloWorld",children:"Hello World"})," page first. Otherwise, read on to learn how to set up a new project using the ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"create-app"})})," starter and explore AdminForth\u2019s fundamentals."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.p,{children:["AdminForth requires ",(0,t.jsx)(n.strong,{children:"Node v20"})," or higher. If you\u2019re on a different version, you can switch or install using:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"nvm install 20\nnvm alias default 20\nnvm use 20\n"})}),"\n",(0,t.jsx)(n.h2,{id:"creating-an-adminforth-project",children:"Creating an AdminForth Project"}),"\n",(0,t.jsxs)(n.p,{children:["The recommended way to get started with AdminForth is via the ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"create-app"})})," CLI, which scaffolds a basic fully functional back-office application."]}),"\n",(0,t.jsx)(n.h3,{id:"create-a-fresh-directory",children:"Create a fresh directory"}),"\n",(0,t.jsx)(n.p,{children:"First, create and enter a directory where you want your AdminForth project to live. For instance:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"mkdir myadmin\ncd myadmin\n"})}),"\n",(0,t.jsx)(n.h3,{id:"run-the-cli",children:"Run the CLI"}),"\n",(0,t.jsx)(n.p,{children:"You can provide options directorly:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npx adminforth create-app --app-name myadmin --db sqlite://.db.sqlite\n"})}),"\n",(0,t.jsx)(n.p,{children:"Or omit them to be prompted interactively:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npx adminforth create-app\n"})}),"\n",(0,t.jsx)(n.p,{children:"CLI options:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"--app-name"})})," - name for your new project. Used in ",(0,t.jsx)(n.code,{children:"package.json"}),", ",(0,t.jsx)(n.code,{children:"index.ts"})," branding, etc. Default value: ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"adminforth-app"})}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"--db"})})," - database connection string. Currently PostgreSQL, MongoDB and SQLite are supported. Default value: ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"sqlite://.db.sqlite"})})]}),"\n"]}),"\n",(0,t.jsxs)(n.blockquote,{children:["\n",(0,t.jsx)(n.p,{children:"\u261d\ufe0f Database Connection String format:"}),"\n",(0,t.jsxs)(n.p,{children:["Basic format is ",(0,t.jsx)(n.code,{children:"://:@:/"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["For SQLite, you can use ",(0,t.jsx)(n.code,{children:"sqlite://.db.sqlite"})," to create a local SQLite database.\nFor PostgreSQL \u2014",(0,t.jsx)(n.code,{children:"postgres://user:password@localhost:5432/dbname"}),".\nFor MongoDB \u2014 ",(0,t.jsx)(n.code,{children:"mongodb://localhost:27017/dbname"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"understand-the-generated-project-structure",children:"Understand the generated Project Structure"}),"\n",(0,t.jsx)(n.p,{children:"After you confirm inputs, the CLI will create files and folders in your current directory and install dependencies. A typical layout looks like this:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"myadmin/\n\u251c\u2500\u2500 custom\n\u2502 \u251c\u2500\u2500 assets/ # Static assets like images, fonts, etc.\n\u2502 \u251c\u2500\u2500 package.json # For any custom npm packages you want to add\n\u2502 \u2514\u2500\u2500 tsconfig.json # Custom TS configuration\n\u251c\u2500\u2500 resources\n\u2502 \u2514\u2500\u2500 users.ts # Example resource file for users management\n\u251c\u2500\u2500 schema.prisma # Prisma schema file for database schema\n\u251c\u2500\u2500 index.ts # Main entry point: configures AdminForth & starts the server\n\u251c\u2500\u2500 package.json # Project metadata and dependencies\n\u251c\u2500\u2500 tsconfig.json # TypeScript configuration\n\u251c\u2500\u2500 .env # Environment variables (e.g. database connection string)\n\u251c\u2500\u2500 .env.sample # Sample env file (for distribution to teammates)\n\u2514\u2500\u2500 .gitignore # Default gitignore file\n\n"})}),"\n",(0,t.jsx)(n.h3,{id:"initial-migration--future-migrations",children:"Initial Migration & Future Migrations"}),"\n",(0,t.jsxs)(n.p,{children:["If your database is ",(0,t.jsx)(n.strong,{children:"SQLite"})," or ",(0,t.jsx)(n.strong,{children:"PostgreSQL"}),", the CLI created a ",(0,t.jsx)(n.code,{children:"schema.prisma"})," file and references ",(0,t.jsx)(n.code,{children:"PRISMA_DATABASE_URL"})," in ",(0,t.jsx)(n.code,{children:".env"}),". To initialize the database:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run makemigration -- --name init\n"})}),"\n",(0,t.jsxs)(n.p,{children:["This will create a migration file in ",(0,t.jsx)(n.code,{children:"migrations"})," and apply it to the database. Whenever you modify ",(0,t.jsx)(n.code,{children:"schema.prisma"})," (adding models, changing fields, etc.), create a new migration using next command:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run makemigration -- --name \n"})}),"\n",(0,t.jsx)(n.h2,{id:"basic-philosophy",children:"Basic Philosophy"}),"\n",(0,t.jsx)(n.p,{children:"AdminForth connects to existing databases and provides a back-office for managing data including CRUD operations, filtering, sorting, and more."}),"\n",(0,t.jsx)(n.p,{children:"Database should be already created by using any database management tool, ORM or migrator. AdminForth does not provide a way to create tables or columns in the database."}),"\n",(0,t.jsx)(n.p,{children:'Once you have a database, you pass a connection string to AdminForth and define resources(tables) and columns you would like to see in back-office. For most DBs AdminForth can "discover" column types and constraints (e.g. max-length) by connecting to DB. However you can redefine them in AdminForth configuration. Type and constraints definition are take precedence over DB schema.'}),"\n",(0,t.jsx)(n.p,{children:'Also in AdminForth you can define in "Vue" way:'}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"how each field will be rendered"}),"\n",(0,t.jsx)(n.li,{children:"create own pages e.g. Dashboards"}),"\n",(0,t.jsx)(n.li,{children:"insert injections into standard pages (e.g. add diagram to list view)"}),"\n"]}),"\n",(0,t.jsxs)(n.h2,{id:"adding-an-apartments-model",children:["Adding an ",(0,t.jsx)(n.code,{children:"apartments"})," Model"]}),"\n",(0,t.jsxs)(n.p,{children:["So far, your freshly generated AdminForth project includes a default ",(0,t.jsx)(n.code,{children:"adminuser"})," model and a corresponding ",(0,t.jsx)(n.code,{children:"users"})," resource. Let\u2019s expand your schema by introducing an ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"apartments"})})," model. You\u2019ll see how to:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Add a new Prisma model"})," to your ",(0,t.jsx)(n.code,{children:"schema.prisma"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Create a corresponding resource"})," in the ",(0,t.jsx)(n.code,{children:"resources/"})," folder."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Run a new migration"})," to update your database schema."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Register the new resource"})," in ",(0,t.jsx)(n.code,{children:"index.ts"})," and see it in your AdminForth back-office."]}),"\n"]}),"\n",(0,t.jsxs)(n.h3,{id:"define-the-apartments-model-in-schemaprisma",children:["Define the ",(0,t.jsx)(n.code,{children:"apartments"})," Model in ",(0,t.jsx)(n.code,{children:"schema.prisma"})]}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.code,{children:"schema.prisma"})," in your project root and add a new model for ",(0,t.jsx)(n.code,{children:"apartments"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-prisma",metastring:'title="./schema.prisma"',children:"...\n//diff-add\nmodel apartments {\n//diff-add\n id String @id\n//diff-add\n created_at DateTime?\n//diff-add\n title String\n//diff-add\n square_meter Float?\n//diff-add\n price Decimal\n//diff-add\n number_of_rooms Int?\n//diff-add\n description String?\n//diff-add\n country String?\n//diff-add\n listed Boolean\n//diff-add\n realtor_id String?\n//diff-add\n}\n\n"})}),"\n",(0,t.jsx)(n.h3,{id:"create-and-apply-the-migration",children:"Create and Apply the Migration"}),"\n",(0,t.jsx)(n.p,{children:"Run the following command to create a new migration:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run makemigration -- --name add-apartments\n"})}),"\n",(0,t.jsxs)(n.h3,{id:"create-the-apartments-resource",children:["Create the ",(0,t.jsx)(n.code,{children:"apartments"})," Resource"]}),"\n",(0,t.jsxs)(n.p,{children:["Create a new file ",(0,t.jsx)(n.code,{children:"apartments.ts"})," in the ",(0,t.jsx)(n.code,{children:"resources/"})," folder:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",metastring:'title="./resources/apartments.ts"',children:"import { AdminForthDataTypes, AdminForthResourceInput } from 'adminforth';\n\nexport default {\n dataSource: 'maindb',\n table: 'apartments',\n resourceId: 'aparts', // resourceId is defaulted to table name but you can redefine it like this e.g. \n // in case of same table names from different data sources\n label: 'Apartments', // label is defaulted to table name but you can change it\n recordLabel: (r) => `\ud83c\udfe1 ${r.title}`,\n columns: [\n {\n name: 'id',\n type: AdminForthDataTypes.STRING,\n label: 'Identifier', // if you wish you can redefine label, defaulted to uppercased name\n showIn: ['filter', 'show'], // show column in filter and in show page\n primaryKey: true,\n fillOnCreate: ({ initialRecord, adminUser }) => Math.random().toString(36).substring(7), // called during creation to generate content of field, initialRecord is values user entered, adminUser object of user who creates record\n },\n {\n name: 'title',\n required: true,\n showIn: ['list', 'create', 'edit', 'filter', 'show'], // all available options\n type: AdminForthDataTypes.STRING,\n maxLength: 255, // you can set max length for string fields\n minLength: 3, // you can set min length for string fields\n },\n {\n name: 'created_at',\n type: AdminForthDataTypes.DATETIME,\n allowMinMaxQuery: true,\n showIn: ['list', 'filter', 'show', 'edit'],\n fillOnCreate: ({ initialRecord, adminUser }) => (new Date()).toISOString(),\n },\n {\n name: 'price',\n allowMinMaxQuery: true, // use better experience for filtering e.g. date range, set it only if you have index on this column or if you sure there will be low number of rows\n editingNote: 'Price is in USD', // you can put a note near field on editing or creating page\n },\n {\n name: 'square_meter',\n label: 'Square',\n allowMinMaxQuery: true,\n minValue: 1, // you can set min /max value for number columns so users will not be able to enter more/less\n maxValue: 1000,\n },\n {\n name: 'number_of_rooms',\n allowMinMaxQuery: true,\n enum: [\n { value: 1, label: '1 room' },\n { value: 2, label: '2 rooms' },\n { value: 3, label: '3 rooms' },\n { value: 4, label: '4 rooms' },\n { value: 5, label: '5 rooms' },\n ],\n },\n {\n name: 'description',\n sortable: false,\n showIn: ['show', 'edit', 'create', 'filter'],\n },\n {\n name: 'country',\n enum: [{\n value: 'US',\n label: 'United States'\n }, {\n value: 'DE',\n label: 'Germany'\n }, {\n value: 'FR',\n label: 'France'\n }, {\n value: 'GB',\n label: 'United Kingdom'\n }, {\n value: 'NL',\n label: 'Netherlands'\n }, {\n value: 'IT',\n label: 'Italy'\n }, {\n value: 'ES',\n label: 'Spain'\n }, {\n value: 'DK',\n label: 'Denmark'\n }, {\n value: 'PL',\n label: 'Poland'\n }, {\n value: 'UA',\n label: 'Ukraine'\n }, {\n value: null,\n label: 'Not defined'\n }],\n },\n {\n name: 'listed',\n required: true, // will be required on create/edit\n },\n {\n name: 'realtor_id',\n foreignResource: {\n resourceId: 'users',\n }\n }\n ],\n options: {\n listPageSize: 12,\n allowedActions: {\n edit: true,\n delete: true,\n show: true,\n filter: true,\n },\n },\n} as AdminForthResourceInput;\n"})}),"\n",(0,t.jsxs)(n.h3,{id:"register-the-apartments-resource",children:["Register the ",(0,t.jsx)(n.code,{children:"apartments"})," Resource"]}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.code,{children:"index.ts"})," in your project root and import the new resource:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",metastring:'title="./index.ts"',children:"...\n//diff-add\nimport apartmentsResource from \"./resources/apartments\";\n\n...\nexport const admin = new AdminForth({\n ...\n resources: [\n usersResource,\n //diff-add\n apartmentsResource,\n ],\n menu: [\n//diff-add\n {\n//diff-add\n label: 'Core',\n//diff-add\n icon: 'flowbite:brain-solid',\n//diff-add\n open: true,\n//diff-add\n children: [\n//diff-add\n {\n//diff-add\n homepage: true,\n//diff-add\n label: 'Apartments',\n//diff-add\n icon: 'flowbite:home-solid',\n//diff-add\n resourceId: 'aparts',\n//diff-add\n },\n//diff-add\n ]\n//diff-add\n },\n//diff-add\n { type: 'gap' },\n//diff-add\n { type: 'divider' },\n {\n type: 'heading',\n label: 'SYSTEM'\n },\n {\n label: 'Users',\n ...\n }\n ],\n ...\n});\n\n"})}),"\n",(0,t.jsx)(n.h3,{id:"run-the-server",children:"Run the Server"}),"\n",(0,t.jsx)(n.p,{children:"Now you can run your app:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm start\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Open ",(0,t.jsx)(n.a,{href:"http://localhost:3500",children:"http://localhost:3500"})," in your browser and (default credentials are ",(0,t.jsx)(n.code,{children:"adminforth"}),"/",(0,t.jsx)(n.code,{children:"adminforth"})," if you haven\u2019t changed them)."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"alt text",src:a(8332).A+"",width:"2428",height:"1932"})}),"\n",(0,t.jsx)(n.h2,{id:"generating-fake-records",children:"Generating fake records"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",metastring:'title="./index.ts"',children:"//diff-add\nasync function seedDatabase() {\n//diff-add\n if (await admin.resource('aparts').count() > 0) {\n//diff-add\n return\n//diff-add\n }\n//diff-add\n for (let i = 0; i < 100; i++) {\n//diff-add\n await admin.resource('aparts').create({\n//diff-add\n id: `${i}`,\n//diff-add\n title: `Apartment ${i}`,\n//diff-add\n square_meter: (Math.random() * 100).toFixed(1),\n//diff-add\n price: (Math.random() * 10000).toFixed(2),\n//diff-add\n number_of_rooms: Math.floor(Math.random() * 4) + 1,\n//diff-add\n description: 'Next gen apartments',\n//diff-add\n created_at: (new Date(Date.now() - Math.random() * 60 * 60 * 24 * 14 * 1000)).toISOString(),\n//diff-add\n listed: i % 2 == 0,\n//diff-add\n country: `${['US', 'DE', 'FR', 'GB', 'NL', 'IT', 'ES', 'DK', 'PL', 'UA'][Math.floor(Math.random() * 10)]}`\n//diff-add\n });\n//diff-add\n };\n//diff-add\n};\n\nif (import.meta.url === `file://${process.argv[1]}`) {\n\n ...\n\n admin.discoverDatabases().then(async () => {\n if (!await admin.resource('users').get([Filters.EQ('email', 'adminforth')])) {\n await admin.resource('users').create({\n email: 'adminforth',\n password_hash: await AdminForth.Utils.generatePasswordHash('adminforth'),\n role: 'superadmin',\n });\n }\n//diff-add\n await seedDatabase();\n });\n\n"})}),"\n",(0,t.jsxs)(n.p,{children:["This will create records during first launch. Now you should see:\n",(0,t.jsx)(n.img,{alt:"alt text",src:a(4973).A+"",width:"3700",height:"1932"})]}),"\n",(0,t.jsx)(n.p,{children:"Feel free to play with the data, add more fields, and customize the UI to your liking."}),"\n",(0,t.jsx)(n.h2,{id:"possible-configuration-options",children:"Possible configuration options"}),"\n",(0,t.jsxs)(n.p,{children:["Check ",(0,t.jsx)(n.a,{href:"/docs/api/types/Back/interfaces/AdminForthConfig",children:"AdminForthConfig"})," for all possible options."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8332:(e,n,a)=>{a.d(n,{A:()=>t});const t=a.p+"assets/images/localhost_3500_login-22b59511349c51948267c9a4080e4d87.png"},4973:(e,n,a)=>{a.d(n,{A:()=>t});const t=a.p+"assets/images/localhost_3500_resource_aparts-dddac951816a2a7b58c84b6348828ecb.png"},8453:(e,n,a)=>{a.d(n,{R:()=>s,x:()=>d});var t=a(6540);const r={},i=t.createContext(r);function s(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.3a20b972.js b/assets/js/main.3a20b972.js new file mode 100644 index 000000000..23ed97e9f --- /dev/null +++ b/assets/js/main.3a20b972.js @@ -0,0 +1,2 @@ +/*! For license information please see main.3a20b972.js.LICENSE.txt */ +(self.webpackChunkadminforth=self.webpackChunkadminforth||[]).push([[8792],{9188:(e,t,n)=>{"use strict";n.d(t,{W:()=>a});var r=n(6540);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20","aria-hidden":"true"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(6540);var r=n(3259),a=n.n(r),o=n(4054);const i={"01a85c17":[()=>Promise.all([n.e(1869),n.e(8209)]).then(n.bind(n,9158)),"@theme/BlogTagsListPage",9158],"021e5105":[()=>n.e(7068).then(n.bind(n,4187)),"@site/docs/api/types/Common/enumerations/AllowedActionsEnum.md",4187],"024de627":[()=>n.e(7865).then(n.bind(n,5191)),"@site/docs/tutorial/03-Customization/04-hooks.md",5191],"033a99ac":[()=>n.e(2634).then(n.bind(n,8504)),"@site/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon.md",8504],"053eedc9":[()=>n.e(4477).then(n.t.bind(n,3711,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-chatgpt-828.json",3711],"0864833f":[()=>n.e(2389).then(n.bind(n,7995)),"@site/docs/tutorial/05-Plugins/04-RichEditor.md",7995],"08af526d":[()=>n.e(529).then(n.t.bind(n,1344,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-3ce.json",1344],"0963d772":[()=>n.e(2467).then(n.bind(n,9045)),"@site/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface.md",9045],"0b1aedcb":[()=>n.e(7987).then(n.bind(n,15)),"@site/docs/api/types/Common/interfaces/AdminForthColumnEnumItem.md",15],"0f184050":[()=>n.e(5857).then(n.bind(n,4989)),"@site/docs/tutorial/05-Plugins/06-text-complete.md",4989],"0f528969":[()=>n.e(430).then(n.bind(n,999)),"@site/blog/2024-10-01-ai-blog/index.md?truncated=true",999],"0f6f7c87":[()=>n.e(1768).then(n.bind(n,9706)),"@site/docs/tutorial/03-Customization/08-pageInjections.md",9706],"113d761d":[()=>n.e(3748).then(n.bind(n,7693)),"@site/docs/api/types/Back/interfaces/AdminForthResourceInput.md",7693],"11b43341":[()=>n.e(2256).then(n.t.bind(n,7674,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-7fc.json",7674],"13e752a3":[()=>n.e(8094).then(n.bind(n,2973)),"@site/docs/api/types/Common/enumerations/AdminForthSortDirections.md",2973],"1590cc1f":[()=>n.e(2621).then(n.bind(n,1186)),"@site/docs/api/types/Common/enumerations/ActionCheckSource.md",1186],"16012b17":[()=>n.e(3871).then(n.bind(n,2526)),"@site/docs/api/types/Common/type-aliases/ValidationObject.md",2526],17896441:[()=>Promise.all([n.e(1869),n.e(9113),n.e(8401)]).then(n.bind(n,2447)),"@theme/DocItem",2447],"186edb45":[()=>n.e(1980).then(n.bind(n,6777)),"@site/docs/tutorial/001-gettingStarted.md",6777],"1a4e3797":[()=>Promise.all([n.e(1869),n.e(2138)]).then(n.bind(n,4604)),"@theme/SearchPage",4604],"1bb47565":[()=>n.e(6507).then(n.bind(n,785)),"@site/docs/api/types/FrontendAPI/type-aliases/AlertParams.md",785],"1df93b7f":[()=>Promise.all([n.e(1869),n.e(4583)]).then(n.bind(n,5579)),"@site/src/pages/index.tsx",5579],"1e563bf9":[()=>n.e(7184).then(n.bind(n,1168)),"@site/docs/tutorial/04-deploy.md",1168],"2063472f":[()=>n.e(3215).then(n.t.bind(n,7646,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-18b.json",7646],"26e05296":[()=>n.e(4256).then(n.bind(n,5237)),"@site/blog/2024-12-11-backup/index.md?truncated=true",5237],"2819bec8":[()=>n.e(4853).then(n.bind(n,773)),"@site/docs/api/types/Back/interfaces/IExpressHttpServer.md",773],"29a082d0":[()=>n.e(4753).then(n.bind(n,8249)),"@site/docs/tutorial/03-Customization/13-standardPagesTuning.md",8249],"2c9d4603":[()=>n.e(60).then(n.bind(n,4876)),"@site/docs/api/types/Back/interfaces/IAdminForthFilter.md",4876],"31091af1":[()=>n.e(103).then(n.bind(n,2862)),"@site/docs/tutorial/05-Plugins/09-open-signup.md",2862],"336a6cb7":[()=>n.e(8066).then(n.bind(n,9810)),"@site/docs/api/types/Common/interfaces/AdminForthConfigForFrontend.md",9810],35105669:[()=>n.e(6594).then(n.bind(n,1070)),"@site/docs/tutorial/03-Customization/03-virtualColumns.md",1070],"35aacbf2":[()=>n.e(1430).then(n.bind(n,4814)),"@site/docs/api/types/Back/interfaces/IAdminForth.md",4814],"35b001da":[()=>n.e(9417).then(n.bind(n,7219)),"@site/blog/2024-12-11-backup/index.md",7219],"35f18acc":[()=>n.e(6379).then(n.bind(n,7727)),"@site/docs/api/types/Back/type-aliases/AllowedActions.md",7727],"36994c47":[()=>n.e(9858).then(n.t.bind(n,5516,19)),"@generated/docusaurus-plugin-content-blog/default/__plugin.json",5516],"36feba40":[()=>n.e(4980).then(n.bind(n,6521)),"@site/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction.md",6521],38583323:[()=>n.e(1002).then(n.bind(n,9788)),"@site/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon.md",9788],"3b75fb7b":[()=>n.e(5983).then(n.bind(n,2676)),"@site/docs/api/types/Back/type-aliases/FDataSort.md",2676],"3bc0de7a":[()=>n.e(4412).then(n.bind(n,8865)),"@site/docs/api/types/Common/type-aliases/AllowedActionsResolved.md",8865],"3c1f5611":[()=>n.e(663).then(n.bind(n,6162)),"@site/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction.md",6162],"3c6ce547":[()=>n.e(2525).then(n.bind(n,4805)),"@site/docs/api/types/Back/interfaces/ICodeInjector.md",4805],"41b6af93":[()=>n.e(8867).then(n.bind(n,2899)),"@site/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction.md",2899],"47a44e8d":[()=>n.e(7934).then(n.bind(n,4083)),"@site/docs/api/types/Common/enumerations/AdminForthResourcePages.md",4083],"485ec31e":[()=>n.e(381).then(n.bind(n,168)),"@site/docs/tutorial/03-Customization/06-customPages.md",168],"4a260936":[()=>n.e(2728).then(n.bind(n,4101)),"@site/blog/2024-10-01-ai-blog/index.md",4101],"4caee09b":[()=>n.e(4592).then(n.bind(n,7052)),"@site/docs/api/types/Back/interfaces/IAdminForthAuth.md",7052],"5da08e7a":[()=>n.e(6914).then(n.bind(n,1906)),"@site/docs/tutorial/01-helloWorld.md",1906],"5dd1e9f0":[()=>n.e(5653).then(n.bind(n,7519)),"@site/docs/tutorial/05-Plugins/10-i18n.md",7519],"5e8c322a":[()=>n.e(594).then(n.bind(n,3478)),"@site/docs/api/index.md",3478],"5e95c892":[()=>n.e(9647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"5fb60759":[()=>n.e(5859).then(n.bind(n,5700)),"@site/docs/tutorial/03-Customization/12-security.md",5700],"5ffa2238":[()=>n.e(2916).then(n.bind(n,3702)),"@site/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon.md",3702],"60ba32f6":[()=>n.e(4149).then(n.bind(n,9197)),"@site/docs/tutorial/03-Customization/10-menuConfiguration.md",9197],"61df9d78":[()=>n.e(1500).then(n.bind(n,6050)),"@site/docs/api/types/Back/interfaces/IConfigValidator.md",6050],"62fb5867":[()=>n.e(2133).then(n.bind(n,796)),"@site/docs/tutorial/05-Plugins/08-import-export.md",796],"6377c488":[()=>n.e(1473).then(n.bind(n,6725)),"@site/docs/api/types/Common/interfaces/AdminUser.md",6725],"6480425b":[()=>n.e(6190).then(n.bind(n,3627)),"@site/docs/tutorial/03-Customization/09-bulkActions.md",3627],"65a28b94":[()=>n.e(3176).then(n.bind(n,289)),"@site/docs/api/types/Back/interfaces/AdminForthResource.md",289],"65d8d000":[()=>n.e(6228).then(n.bind(n,104)),"@site/blog/2024-08-05-chatgpt/index.md",104],"665b0fc5":[()=>n.e(3248).then(n.bind(n,7050)),"@site/docs/api/types/Back/type-aliases/BeforeEditSaveFunction.md",7050],"6745c6da":[()=>n.e(713).then(n.bind(n,3319)),"@site/blog/2024-08-05-chatgpt/index.md?truncated=true",3319],67928896:[()=>n.e(3302).then(n.bind(n,3069)),"@site/docs/api/types/Back/interfaces/HttpExtra.md",3069],"67d18bf6":[()=>n.e(137).then(n.bind(n,5053)),"@site/docs/api/types/Back/interfaces/IAdminForthHttpResponse.md",5053],"6875c492":[()=>Promise.all([n.e(1869),n.e(9113),n.e(5309),n.e(4813)]).then(n.bind(n,5450)),"@theme/BlogTagsPostsPage",5450],"6bea9211":[()=>n.e(4410).then(n.bind(n,208)),"@site/blog/2024-10-31-compose-ec2-deployment/index.md",208],"6d0c0fe0":[()=>n.e(3495).then(n.bind(n,7286)),"@site/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor.md",7286],"6da4d60b":[()=>n.e(7942).then(n.bind(n,1504)),"@site/docs/tutorial/05-Plugins/05-upload.md",1504],"6de80e9b":[()=>n.e(2010).then(n.bind(n,5512)),"@site/docs/api/types/Common/index.md",5512],"729fb566":[()=>n.e(6498).then(n.bind(n,7185)),"@site/docs/api/types/Back/type-aliases/AfterCreateSaveFunction.md",7185],"736e9669":[()=>n.e(5880).then(n.t.bind(n,300,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-plugin-e97.json",300],"7429c523":[()=>n.e(6432).then(n.bind(n,6238)),"@site/docs/api/types/Back/classes/Filters.md",6238],"75a9a257":[()=>n.e(1964).then(n.t.bind(n,6880,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-nuxt-906.json",6880],"7b1edb8e":[()=>n.e(6961).then(n.bind(n,8221)),"@site/blog/2024-11-14-compose-ec2-deployment-ci/index.md?truncated=true",8221],"7bbf514f":[()=>n.e(6352).then(n.bind(n,4519)),"@site/docs/api/types/FrontendAPI/type-aliases/ConfirmParams.md",4519],"7ddc5fd3":[()=>n.e(4335).then(n.bind(n,9821)),"@site/docs/api/types/Back/interfaces/ResourceOptionsInput.md",9821],"7fc3ff8b":[()=>n.e(1508).then(n.bind(n,3537)),"@site/docs/api/types/Back/interfaces/ResourceOptions.md",3537],"814f3328":[()=>n.e(7472).then(n.t.bind(n,5513,19)),"~blog/default/blog-post-list-prop-default.json",5513],"828f7c0a":[()=>n.e(5696).then(n.bind(n,4738)),"@site/docs/api/types/Common/interfaces/UserData.md",4738],"833c0e4c":[()=>n.e(7356).then(n.t.bind(n,6746,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-aws-36b.json",6746],"83725ffe":[()=>n.e(6237).then(n.t.bind(n,4018,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-github-actions-2f5.json",4018],"83d3f702":[()=>n.e(3552).then(n.bind(n,302)),"@site/docs/api/types/Back/interfaces/IWebSocketClient.md",302],"84925c82":[()=>n.e(6368).then(n.t.bind(n,5873,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-terraform-485.json",5873],"8705ed14":[()=>n.e(2977).then(n.bind(n,9574)),"@site/docs/api/types/Back/type-aliases/FDataFilter.md",9574],"872824b5":[()=>n.e(4687).then(n.bind(n,6858)),"@site/docs/api/types/Common/enumerations/AdminForthDataTypes.md",6858],"891bcc9c":[()=>n.e(8513).then(n.bind(n,846)),"@site/docs/tutorial/03-Customization/15-websocket.md",846],"8a5469a7":[()=>n.e(8910).then(n.bind(n,6325)),"@site/docs/tutorial/02-glossary.md",6325],"930bc1c5":[()=>n.e(5585).then(n.bind(n,3571)),"@site/docs/api/types/Back/type-aliases/AdminForthDataSource.md",3571],93961630:[()=>n.e(4062).then(n.bind(n,7916)),"@site/docs/api/types/Back/classes/Sorts.md",7916],"93fdbfd0":[()=>n.e(6469).then(n.bind(n,7767)),"@site/docs/api/types/Back/type-aliases/AllowedActionValue.md",7767],"95d36c9b":[()=>n.e(8206).then(n.bind(n,4758)),"@site/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction.md",4758],"95e6ba62":[()=>n.e(3823).then(n.bind(n,4397)),"@site/docs/api/types/Back/type-aliases/AfterEditSaveFunction.md",4397],"9e4087bc":[()=>n.e(2711).then(n.bind(n,9331)),"@theme/BlogArchivePage",9331],"9ff66148":[()=>n.e(7449).then(n.bind(n,4859)),"@site/blog/2024-11-14-compose-ec2-deployment-ci/index.md",4859],a3b62a48:[()=>n.e(2812).then(n.bind(n,5270)),"@site/docs/api/types/Common/interfaces/AdminForthResourceCommon.md",5270],a6aa9e1f:[()=>Promise.all([n.e(1869),n.e(9113),n.e(5309),n.e(7643)]).then(n.bind(n,5124)),"@theme/BlogListPage",5124],a6fc25b5:[()=>n.e(6623).then(n.bind(n,6822)),"@site/docs/api/types/Back/interfaces/IOperationalResource.md",6822],a7456010:[()=>n.e(1235).then(n.t.bind(n,8552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",8552],a7a9f2c0:[()=>n.e(6820).then(n.bind(n,9359)),"@site/docs/api/types/Common/enumerations/AdminForthMenuTypes.md",9359],a7bd4aaa:[()=>n.e(7098).then(n.bind(n,4532)),"@theme/DocVersionRoot",4532],a8944d74:[()=>n.e(9782).then(n.bind(n,744)),"@site/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector.md",744],a923e72f:[()=>n.e(1316).then(n.bind(n,4663)),"@site/docs/api/types/Back/interfaces/IHttpServer.md",4663],a94703ab:[()=>Promise.all([n.e(1869),n.e(9048)]).then(n.bind(n,2559)),"@theme/DocRoot",2559],a9548b52:[()=>n.e(4485).then(n.bind(n,2679)),"@site/docs/api/types/Back/interfaces/AdminForthResourceColumn.md",2679],aaa78e0a:[()=>n.e(2889).then(n.bind(n,9086)),"@site/docs/tutorial/05-Plugins/01-AuditLog.md",9086],aba21aa0:[()=>n.e(5742).then(n.t.bind(n,7093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",7093],acecf23e:[()=>n.e(1903).then(n.t.bind(n,1912,19)),"~blog/default/blogMetadata-default.json",1912],aea05a85:[()=>n.e(5401).then(n.bind(n,3171)),"@site/docs/api/types/Back/interfaces/AdminForthInputConfig.md",3171],afbee910:[()=>n.e(8016).then(n.bind(n,2202)),"@site/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse.md",2202],b0e83d53:[()=>n.e(2955).then(n.bind(n,3930)),"@site/docs/api/types/Common/interfaces/AdminForthResourceInputCommon.md",3930],b3491139:[()=>n.e(2641).then(n.bind(n,7388)),"@site/docs/tutorial/03-Customization/14-afcl.md",7388],b36f7c5a:[()=>n.e(6006).then(n.bind(n,1919)),"@site/docs/api/types/Common/interfaces/ResourceVeryShort.md",1919],b44397f2:[()=>n.e(8974).then(n.bind(n,8085)),"@site/docs/tutorial/06-Advanced/01-plugin-development.md",8085],babbf919:[()=>n.e(9529).then(n.bind(n,733)),"@site/docs/tutorial/03-Customization/11-dataApi.md",733],bb2bc82d:[()=>n.e(8240).then(n.bind(n,7811)),"@site/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull.md",7811],bc9764a9:[()=>n.e(9090).then(n.bind(n,5340)),"@site/docs/api/types/Common/interfaces/AdminForthBulkActionCommon.md",5340],be90b059:[()=>n.e(811).then(n.bind(n,1237)),"@site/docs/api/types/FrontendAPI/type-aliases/FilterParams.md",1237],bee98664:[()=>n.e(7262).then(n.bind(n,4402)),"@site/docs/api/types/Back/interfaces/IAdminForthRestAPI.md",4402],c0834827:[()=>n.e(4720).then(n.bind(n,9313)),"@site/docs/api/types/Common/interfaces/AdminForthConfigMenuItem.md",9313],c141421f:[()=>n.e(957).then(n.t.bind(n,936,19)),"@generated/docusaurus-theme-search-algolia/default/__plugin.json",936],c36f7a01:[()=>n.e(6748).then(n.bind(n,5223)),"@site/docs/api/types/Back/interfaces/AdminForthConfig.md",5223],c4c3d6ff:[()=>n.e(4830).then(n.bind(n,7886)),"@site/docs/api/types/Back/interfaces/AdminForthConfigCustomization.md",7886],c72b249f:[()=>n.e(8870).then(n.bind(n,7580)),"@site/blog/2024-10-31-compose-ec2-deployment/index.md?truncated=true",7580],c7390d9a:[()=>n.e(295).then(n.bind(n,6568)),"@site/docs/api/types/Common/enumerations/AdminForthFilterOperators.md",6568],c7db71d4:[()=>n.e(227).then(n.bind(n,1631)),"@site/docs/api/types/Back/interfaces/AdminForthBulkAction.md",1631],c85c08be:[()=>n.e(9).then(n.bind(n,612)),"@site/docs/api/types/Back/interfaces/IWebSocketBroker.md",612],ca0415ef:[()=>n.e(6068).then(n.bind(n,7547)),"@site/docs/api/types/Back/type-aliases/AllowedActionsInput.md",7547],ca1b7bc1:[()=>n.e(9873).then(n.bind(n,5303)),"@site/docs/api/types/FrontendAPI/index.md",5303],ccc49370:[()=>Promise.all([n.e(1869),n.e(9113),n.e(5309),n.e(3249)]).then(n.bind(n,3858)),"@theme/BlogPostPage",3858],d40d766e:[()=>n.e(8643).then(n.bind(n,2166)),"@site/docs/tutorial/05-Plugins/02-TwoFactorsAuth.md",2166],d5bfda0a:[()=>n.e(9082).then(n.bind(n,7897)),"@site/docs/api/types/Back/type-aliases/BeforeDeleteSaveFunction.md",7897],d69a358d:[()=>n.e(6759).then(n.bind(n,1691)),"@site/docs/api/types/Common/interfaces/AdminForthFieldComponents.md",1691],dbfc4782:[()=>n.e(8749).then(n.t.bind(n,1895,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-archive-61f.json",1895],dd30c1b8:[()=>n.e(5552).then(n.bind(n,8671)),"@site/docs/tutorial/05-Plugins/07-email-password-reset.md",8671],de731551:[()=>n.e(5184).then(n.bind(n,41)),"@site/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase.md",41],e401bd4d:[()=>n.e(1339).then(n.bind(n,5376)),"@site/docs/tutorial/03-Customization/07-alert.md",5376],e660cd3b:[()=>n.e(3250).then(n.bind(n,8537)),"@site/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration.md",8537],e6fecdbd:[()=>n.e(2262).then(n.bind(n,9333)),"@site/docs/tutorial/03-Customization/01-branding.md",9333],e9622a43:[()=>n.e(8825).then(n.bind(n,2294)),"@site/docs/api/types/Back/type-aliases/AfterDeleteSaveFunction.md",2294],ecd9535a:[()=>n.e(5292).then(n.bind(n,9354)),"@site/docs/tutorial/05-Plugins/03-ForeignInlineList.md",9354],ed5bf3ae:[()=>n.e(1122).then(n.bind(n,7937)),"@site/docs/tutorial/03-Customization/05-limitingAccess.md",7937],f0e2a540:[()=>n.e(7850).then(n.bind(n,5201)),"@site/docs/api/types/Common/interfaces/GetBaseConfigResponse.md",5201],f761c02b:[()=>n.e(347).then(n.bind(n,709)),"@site/docs/api/types/Back/interfaces/IAdminForthPlugin.md",709],f87004a0:[()=>n.e(723).then(n.bind(n,3630)),"@site/docs/api/types/Back/index.md",3630],f87cbaa6:[()=>n.e(9729).then(n.bind(n,249)),"@site/docs/api/types/FrontendAPI/enumerations/AlertVariant.md",249],f95c4425:[()=>n.e(4167).then(n.bind(n,7222)),"@site/docs/api/types/Back/interfaces/IAdminForthSort.md",7222],f995d61e:[()=>n.e(4346).then(n.bind(n,6914)),"@site/docs/tutorial/03-Customization/02-customFieldRendering.md",6914],fa358aed:[()=>n.e(4770).then(n.bind(n,5545)),"@site/docs/api/types/Back/interfaces/AdminForthForeignResource.md",5545]};var s=n(4848);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(6921),u=n(3102);function d(e,t){if("*"===e)return a()({loading:l,loader:()=>n.e(2237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,s.jsx)(u.W,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},p=[],f=[],m=(0,c.A)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),a().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;delete a.__context;const l=a.__props;return delete a.__props,(0,s.jsx)(u.W,{value:i,children:(0,s.jsx)(o,{...a,...l,...n})})}})}const p=[{path:"/blog/",component:d("/blog/","5ea"),exact:!0},{path:"/blog/ai-blog/",component:d("/blog/ai-blog/","186"),exact:!0},{path:"/blog/archive/",component:d("/blog/archive/","1d9"),exact:!0},{path:"/blog/backup-database-to-aws-glacier/",component:d("/blog/backup-database-to-aws-glacier/","790"),exact:!0},{path:"/blog/chatgpt-plugin/",component:d("/blog/chatgpt-plugin/","30c"),exact:!0},{path:"/blog/compose-ec2-deployment-github-actions/",component:d("/blog/compose-ec2-deployment-github-actions/","b5a"),exact:!0},{path:"/blog/compose-ec2-deployment/",component:d("/blog/compose-ec2-deployment/","091"),exact:!0},{path:"/blog/tags/",component:d("/blog/tags/","e17"),exact:!0},{path:"/blog/tags/aws/",component:d("/blog/tags/aws/","136"),exact:!0},{path:"/blog/tags/chatgpt/",component:d("/blog/tags/chatgpt/","f6e"),exact:!0},{path:"/blog/tags/github-actions/",component:d("/blog/tags/github-actions/","bab"),exact:!0},{path:"/blog/tags/nuxt/",component:d("/blog/tags/nuxt/","fca"),exact:!0},{path:"/blog/tags/plugin/",component:d("/blog/tags/plugin/","a8c"),exact:!0},{path:"/blog/tags/terraform/",component:d("/blog/tags/terraform/","429"),exact:!0},{path:"/search/",component:d("/search/","21e"),exact:!0},{path:"/docs/",component:d("/docs/","d35"),routes:[{path:"/docs/",component:d("/docs/","202"),routes:[{path:"/docs/",component:d("/docs/","116"),routes:[{path:"/docs/api/",component:d("/docs/api/","b2d"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/",component:d("/docs/api/types/Back/","4da"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/classes/Filters/",component:d("/docs/api/types/Back/classes/Filters/","c0a"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/classes/Sorts/",component:d("/docs/api/types/Back/classes/Sorts/","ff9"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/AdminForthBulkAction/",component:d("/docs/api/types/Back/interfaces/AdminForthBulkAction/","0a9"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/AdminForthConfig/",component:d("/docs/api/types/Back/interfaces/AdminForthConfig/","f29"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/AdminForthConfigCustomization/",component:d("/docs/api/types/Back/interfaces/AdminForthConfigCustomization/","76c"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/AdminForthForeignResource/",component:d("/docs/api/types/Back/interfaces/AdminForthForeignResource/","180"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/AdminForthInputConfig/",component:d("/docs/api/types/Back/interfaces/AdminForthInputConfig/","04e"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/AdminForthResource/",component:d("/docs/api/types/Back/interfaces/AdminForthResource/","710"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/AdminForthResourceColumn/",component:d("/docs/api/types/Back/interfaces/AdminForthResourceColumn/","220"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/AdminForthResourceInput/",component:d("/docs/api/types/Back/interfaces/AdminForthResourceInput/","405"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/HttpExtra/",component:d("/docs/api/types/Back/interfaces/HttpExtra/","7c5"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IAdminForth/",component:d("/docs/api/types/Back/interfaces/IAdminForth/","143"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IAdminForthAuth/",component:d("/docs/api/types/Back/interfaces/IAdminForthAuth/","278"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector/",component:d("/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector/","e48"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase/",component:d("/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase/","a07"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor/",component:d("/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor/","491"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IAdminForthFilter/",component:d("/docs/api/types/Back/interfaces/IAdminForthFilter/","4da"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IAdminForthHttpResponse/",component:d("/docs/api/types/Back/interfaces/IAdminForthHttpResponse/","1f9"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IAdminForthPlugin/",component:d("/docs/api/types/Back/interfaces/IAdminForthPlugin/","52c"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IAdminForthRestAPI/",component:d("/docs/api/types/Back/interfaces/IAdminForthRestAPI/","235"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IAdminForthSort/",component:d("/docs/api/types/Back/interfaces/IAdminForthSort/","0fa"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/ICodeInjector/",component:d("/docs/api/types/Back/interfaces/ICodeInjector/","86b"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IConfigValidator/",component:d("/docs/api/types/Back/interfaces/IConfigValidator/","1f8"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IExpressHttpServer/",component:d("/docs/api/types/Back/interfaces/IExpressHttpServer/","83c"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IHttpServer/",component:d("/docs/api/types/Back/interfaces/IHttpServer/","622"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IOperationalResource/",component:d("/docs/api/types/Back/interfaces/IOperationalResource/","dfc"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IWebSocketBroker/",component:d("/docs/api/types/Back/interfaces/IWebSocketBroker/","54d"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/IWebSocketClient/",component:d("/docs/api/types/Back/interfaces/IWebSocketClient/","6c5"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/ResourceOptions/",component:d("/docs/api/types/Back/interfaces/ResourceOptions/","260"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/interfaces/ResourceOptionsInput/",component:d("/docs/api/types/Back/interfaces/ResourceOptionsInput/","80e"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/AdminForthDataSource/",component:d("/docs/api/types/Back/type-aliases/AdminForthDataSource/","7a5"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/AfterCreateSaveFunction/",component:d("/docs/api/types/Back/type-aliases/AfterCreateSaveFunction/","f6b"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction/",component:d("/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction/","bfb"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/AfterDeleteSaveFunction/",component:d("/docs/api/types/Back/type-aliases/AfterDeleteSaveFunction/","d1b"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/AfterEditSaveFunction/",component:d("/docs/api/types/Back/type-aliases/AfterEditSaveFunction/","68a"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/AllowedActions/",component:d("/docs/api/types/Back/type-aliases/AllowedActions/","604"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/AllowedActionsInput/",component:d("/docs/api/types/Back/type-aliases/AllowedActionsInput/","b8e"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/AllowedActionValue/",component:d("/docs/api/types/Back/type-aliases/AllowedActionValue/","00e"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction/",component:d("/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction/","5db"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction/",component:d("/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction/","5d5"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/BeforeDeleteSaveFunction/",component:d("/docs/api/types/Back/type-aliases/BeforeDeleteSaveFunction/","2d4"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/BeforeEditSaveFunction/",component:d("/docs/api/types/Back/type-aliases/BeforeEditSaveFunction/","5a1"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction/",component:d("/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction/","2fe"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/FDataFilter/",component:d("/docs/api/types/Back/type-aliases/FDataFilter/","4e3"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Back/type-aliases/FDataSort/",component:d("/docs/api/types/Back/type-aliases/FDataSort/","9c4"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/",component:d("/docs/api/types/Common/","7a4"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/enumerations/ActionCheckSource/",component:d("/docs/api/types/Common/enumerations/ActionCheckSource/","0fe"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/enumerations/AdminForthDataTypes/",component:d("/docs/api/types/Common/enumerations/AdminForthDataTypes/","c52"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/enumerations/AdminForthFilterOperators/",component:d("/docs/api/types/Common/enumerations/AdminForthFilterOperators/","a23"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/enumerations/AdminForthMenuTypes/",component:d("/docs/api/types/Common/enumerations/AdminForthMenuTypes/","e39"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/enumerations/AdminForthResourcePages/",component:d("/docs/api/types/Common/enumerations/AdminForthResourcePages/","e06"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/enumerations/AdminForthSortDirections/",component:d("/docs/api/types/Common/enumerations/AdminForthSortDirections/","505"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/enumerations/AllowedActionsEnum/",component:d("/docs/api/types/Common/enumerations/AllowedActionsEnum/","48f"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/AdminForthBulkActionCommon/",component:d("/docs/api/types/Common/interfaces/AdminForthBulkActionCommon/","897"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/AdminForthColumnEnumItem/",component:d("/docs/api/types/Common/interfaces/AdminForthColumnEnumItem/","6f2"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull/",component:d("/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull/","70c"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/AdminForthConfigForFrontend/",component:d("/docs/api/types/Common/interfaces/AdminForthConfigForFrontend/","c9b"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/AdminForthConfigMenuItem/",component:d("/docs/api/types/Common/interfaces/AdminForthConfigMenuItem/","60a"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/AdminForthFieldComponents/",component:d("/docs/api/types/Common/interfaces/AdminForthFieldComponents/","3f2"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon/",component:d("/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon/","e53"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon/",component:d("/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon/","232"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon/",component:d("/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon/","23f"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/AdminForthResourceCommon/",component:d("/docs/api/types/Common/interfaces/AdminForthResourceCommon/","db7"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/AdminForthResourceInputCommon/",component:d("/docs/api/types/Common/interfaces/AdminForthResourceInputCommon/","8e4"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/AdminUser/",component:d("/docs/api/types/Common/interfaces/AdminUser/","8fc"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/GetBaseConfigResponse/",component:d("/docs/api/types/Common/interfaces/GetBaseConfigResponse/","446"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/ResourceVeryShort/",component:d("/docs/api/types/Common/interfaces/ResourceVeryShort/","71a"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/interfaces/UserData/",component:d("/docs/api/types/Common/interfaces/UserData/","750"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration/",component:d("/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration/","413"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/type-aliases/AllowedActionsResolved/",component:d("/docs/api/types/Common/type-aliases/AllowedActionsResolved/","670"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse/",component:d("/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse/","5b8"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/Common/type-aliases/ValidationObject/",component:d("/docs/api/types/Common/type-aliases/ValidationObject/","39a"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/FrontendAPI/",component:d("/docs/api/types/FrontendAPI/","a6f"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/FrontendAPI/enumerations/AlertVariant/",component:d("/docs/api/types/FrontendAPI/enumerations/AlertVariant/","523"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/",component:d("/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface/","d2d"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/FrontendAPI/type-aliases/AlertParams/",component:d("/docs/api/types/FrontendAPI/type-aliases/AlertParams/","5a7"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/",component:d("/docs/api/types/FrontendAPI/type-aliases/ConfirmParams/","d21"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/types/FrontendAPI/type-aliases/FilterParams/",component:d("/docs/api/types/FrontendAPI/type-aliases/FilterParams/","326"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/tutorial/Advanced/plugin-development/",component:d("/docs/tutorial/Advanced/plugin-development/","aa4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/afcl/",component:d("/docs/tutorial/Customization/afcl/","63b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/alert/",component:d("/docs/tutorial/Customization/alert/","47f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/branding/",component:d("/docs/tutorial/Customization/branding/","e76"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/bulkActions/",component:d("/docs/tutorial/Customization/bulkActions/","0ff"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/customFieldRendering/",component:d("/docs/tutorial/Customization/customFieldRendering/","12d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/customPages/",component:d("/docs/tutorial/Customization/customPages/","a8c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/dataApi/",component:d("/docs/tutorial/Customization/dataApi/","f81"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/hooks/",component:d("/docs/tutorial/Customization/hooks/","002"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/limitingAccess/",component:d("/docs/tutorial/Customization/limitingAccess/","deb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/menuConfiguration/",component:d("/docs/tutorial/Customization/menuConfiguration/","90a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/pageInjections/",component:d("/docs/tutorial/Customization/pageInjections/","62b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/security/",component:d("/docs/tutorial/Customization/security/","a77"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/standardPagesTuning/",component:d("/docs/tutorial/Customization/standardPagesTuning/","285"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/virtualColumns/",component:d("/docs/tutorial/Customization/virtualColumns/","882"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Customization/websocket/",component:d("/docs/tutorial/Customization/websocket/","e04"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/deploy/",component:d("/docs/tutorial/deploy/","994"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/gettingStarted/",component:d("/docs/tutorial/gettingStarted/","fd3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/glossary/",component:d("/docs/tutorial/glossary/","f75"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/hello-world/",component:d("/docs/tutorial/hello-world/","064"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Plugins/AuditLog/",component:d("/docs/tutorial/Plugins/AuditLog/","18c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Plugins/email-password-reset/",component:d("/docs/tutorial/Plugins/email-password-reset/","528"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Plugins/ForeignInlineList/",component:d("/docs/tutorial/Plugins/ForeignInlineList/","916"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Plugins/i18n/",component:d("/docs/tutorial/Plugins/i18n/","fd1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Plugins/import-export/",component:d("/docs/tutorial/Plugins/import-export/","1fd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Plugins/open-signup/",component:d("/docs/tutorial/Plugins/open-signup/","cb1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Plugins/RichEditor/",component:d("/docs/tutorial/Plugins/RichEditor/","c89"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Plugins/text-complete/",component:d("/docs/tutorial/Plugins/text-complete/","ec3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Plugins/TwoFactorsAuth/",component:d("/docs/tutorial/Plugins/TwoFactorsAuth/","ee4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorial/Plugins/upload/",component:d("/docs/tutorial/Plugins/upload/","4e1"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/",component:d("/","e5f"),exact:!0},{path:"*",component:d("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>o,x:()=>i});var r=n(6540),a=n(4848);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},8536:(e,t,n)=>{"use strict";var r=n(6540),a=n(5338),o=n(545),i=n(4625),s=n(4784),l=n(8193);const c=[n(1911),n(119),n(2649),n(6294),n(1043)];var u=n(8328),d=n(6347),p=n(2831),f=n(4848);function m(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var h=n(5260),g=n(4586),y=n(6025),b=n(6342),v=n(5500),k=n(2131),S=n(4090),w=n(2967),x=n(440),C=n(1463);function A(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.A)(),r=(0,k.o)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,f.jsxs)(h.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.A)(),{pathname:r}=(0,d.zy)();return e+(0,x.applyTrailingSlash)((0,y.Ay)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,f.jsxs)(h.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:a}),(0,f.jsx)("link",{rel:"canonical",href:a})]})}function E(){const{i18n:{currentLocale:e}}=(0,g.A)(),{metadata:t,image:n}=(0,b.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(h.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:S.w})]}),n&&(0,f.jsx)(v.be,{image:n}),(0,f.jsx)(_,{}),(0,f.jsx)(A,{}),(0,f.jsx)(C.A,{tag:w.Cy,locale:e}),(0,f.jsx)(h.A,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const T=new Map;var F=n(6125),P=n(6988),I=n(205);function R(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const B=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,I.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),R("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?R("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=R("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(B,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.qh,{location:t,render:()=>e})})}}const L=O,j="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",M="__docusaurus-base-url-issue-banner-suggestion-container";function z(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${j}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,f.jsx)(L,{location:e,children:q})}function Y(){return(0,f.jsx)(V.A,{children:(0,f.jsx)(P.l,{children:(0,f.jsxs)(F.x,{children:[(0,f.jsxs)(m,{children:[(0,f.jsx)(H,{}),(0,f.jsx)(E,{}),(0,f.jsx)(U,{}),(0,f.jsx)(K,{})]}),(0,f.jsx)(G,{})]})})})}var Q=n(4054);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var X=n(6921);const J=new Set,ee=new Set,te=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ne={prefetch:e=>{if(!(e=>!te()&&!ee.has(e)&&!J.has(e))(e))return!1;J.add(e);const t=(0,p.u)(u.A,e).flatMap((e=>{return t=e.route.path,Object.entries(Q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,X.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!te()&&!ee.has(e))(e)&&(ee.add(e),N(e))},re=Object.freeze(ne);function ae(e){let{children:t}=e;return"hash"===s.default.future.experimental_router?(0,f.jsx)(i.I9,{children:t}):(0,f.jsx)(i.Kd,{children:t})}const oe=Boolean(!0);if(l.A.canUseDOM){window.docusaurus=re;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(o.vd,{children:(0,f.jsx)(ae,{children:(0,f.jsx)(Y,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(oe)window.docusaurusRoot=a.hydrateRoot(e,t,{onRecoverableError:n});else{const r=a.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};N(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(6540),a=n(4784);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"tutorial/gettingStarted","docs":[{"id":"api/index","path":"/docs/api/","sidebar":"apiSidebar"},{"id":"api/types/Back/classes/Filters","path":"/docs/api/types/Back/classes/Filters","sidebar":"apiSidebar"},{"id":"api/types/Back/classes/Sorts","path":"/docs/api/types/Back/classes/Sorts","sidebar":"apiSidebar"},{"id":"api/types/Back/index","path":"/docs/api/types/Back/","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/AdminForthBulkAction","path":"/docs/api/types/Back/interfaces/AdminForthBulkAction","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/AdminForthConfig","path":"/docs/api/types/Back/interfaces/AdminForthConfig","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/AdminForthConfigCustomization","path":"/docs/api/types/Back/interfaces/AdminForthConfigCustomization","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/AdminForthForeignResource","path":"/docs/api/types/Back/interfaces/AdminForthForeignResource","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/AdminForthInputConfig","path":"/docs/api/types/Back/interfaces/AdminForthInputConfig","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/AdminForthResource","path":"/docs/api/types/Back/interfaces/AdminForthResource","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/AdminForthResourceColumn","path":"/docs/api/types/Back/interfaces/AdminForthResourceColumn","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/AdminForthResourceInput","path":"/docs/api/types/Back/interfaces/AdminForthResourceInput","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/HttpExtra","path":"/docs/api/types/Back/interfaces/HttpExtra","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IAdminForth","path":"/docs/api/types/Back/interfaces/IAdminForth","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IAdminForthAuth","path":"/docs/api/types/Back/interfaces/IAdminForthAuth","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnector","path":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnector","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","path":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorBase","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","path":"/docs/api/types/Back/interfaces/IAdminForthDataSourceConnectorConstructor","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IAdminForthFilter","path":"/docs/api/types/Back/interfaces/IAdminForthFilter","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IAdminForthHttpResponse","path":"/docs/api/types/Back/interfaces/IAdminForthHttpResponse","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IAdminForthPlugin","path":"/docs/api/types/Back/interfaces/IAdminForthPlugin","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IAdminForthRestAPI","path":"/docs/api/types/Back/interfaces/IAdminForthRestAPI","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IAdminForthSort","path":"/docs/api/types/Back/interfaces/IAdminForthSort","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/ICodeInjector","path":"/docs/api/types/Back/interfaces/ICodeInjector","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IConfigValidator","path":"/docs/api/types/Back/interfaces/IConfigValidator","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IExpressHttpServer","path":"/docs/api/types/Back/interfaces/IExpressHttpServer","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IHttpServer","path":"/docs/api/types/Back/interfaces/IHttpServer","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IOperationalResource","path":"/docs/api/types/Back/interfaces/IOperationalResource","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IWebSocketBroker","path":"/docs/api/types/Back/interfaces/IWebSocketBroker","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/IWebSocketClient","path":"/docs/api/types/Back/interfaces/IWebSocketClient","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/ResourceOptions","path":"/docs/api/types/Back/interfaces/ResourceOptions","sidebar":"apiSidebar"},{"id":"api/types/Back/interfaces/ResourceOptionsInput","path":"/docs/api/types/Back/interfaces/ResourceOptionsInput","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/AdminForthDataSource","path":"/docs/api/types/Back/type-aliases/AdminForthDataSource","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/AfterCreateSaveFunction","path":"/docs/api/types/Back/type-aliases/AfterCreateSaveFunction","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/AfterDataSourceResponseFunction","path":"/docs/api/types/Back/type-aliases/AfterDataSourceResponseFunction","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/AfterDeleteSaveFunction","path":"/docs/api/types/Back/type-aliases/AfterDeleteSaveFunction","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/AfterEditSaveFunction","path":"/docs/api/types/Back/type-aliases/AfterEditSaveFunction","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/AllowedActions","path":"/docs/api/types/Back/type-aliases/AllowedActions","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/AllowedActionsInput","path":"/docs/api/types/Back/type-aliases/AllowedActionsInput","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/AllowedActionValue","path":"/docs/api/types/Back/type-aliases/AllowedActionValue","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/BeforeCreateSaveFunction","path":"/docs/api/types/Back/type-aliases/BeforeCreateSaveFunction","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/BeforeDataSourceRequestFunction","path":"/docs/api/types/Back/type-aliases/BeforeDataSourceRequestFunction","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/BeforeDeleteSaveFunction","path":"/docs/api/types/Back/type-aliases/BeforeDeleteSaveFunction","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/BeforeEditSaveFunction","path":"/docs/api/types/Back/type-aliases/BeforeEditSaveFunction","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/BeforeLoginConfirmationFunction","path":"/docs/api/types/Back/type-aliases/BeforeLoginConfirmationFunction","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/FDataFilter","path":"/docs/api/types/Back/type-aliases/FDataFilter","sidebar":"apiSidebar"},{"id":"api/types/Back/type-aliases/FDataSort","path":"/docs/api/types/Back/type-aliases/FDataSort","sidebar":"apiSidebar"},{"id":"api/types/Common/enumerations/ActionCheckSource","path":"/docs/api/types/Common/enumerations/ActionCheckSource","sidebar":"apiSidebar"},{"id":"api/types/Common/enumerations/AdminForthDataTypes","path":"/docs/api/types/Common/enumerations/AdminForthDataTypes","sidebar":"apiSidebar"},{"id":"api/types/Common/enumerations/AdminForthFilterOperators","path":"/docs/api/types/Common/enumerations/AdminForthFilterOperators","sidebar":"apiSidebar"},{"id":"api/types/Common/enumerations/AdminForthMenuTypes","path":"/docs/api/types/Common/enumerations/AdminForthMenuTypes","sidebar":"apiSidebar"},{"id":"api/types/Common/enumerations/AdminForthResourcePages","path":"/docs/api/types/Common/enumerations/AdminForthResourcePages","sidebar":"apiSidebar"},{"id":"api/types/Common/enumerations/AdminForthSortDirections","path":"/docs/api/types/Common/enumerations/AdminForthSortDirections","sidebar":"apiSidebar"},{"id":"api/types/Common/enumerations/AllowedActionsEnum","path":"/docs/api/types/Common/enumerations/AllowedActionsEnum","sidebar":"apiSidebar"},{"id":"api/types/Common/index","path":"/docs/api/types/Common/","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/AdminForthBulkActionCommon","path":"/docs/api/types/Common/interfaces/AdminForthBulkActionCommon","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/AdminForthColumnEnumItem","path":"/docs/api/types/Common/interfaces/AdminForthColumnEnumItem","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/AdminForthComponentDeclarationFull","path":"/docs/api/types/Common/interfaces/AdminForthComponentDeclarationFull","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/AdminForthConfigForFrontend","path":"/docs/api/types/Common/interfaces/AdminForthConfigForFrontend","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/AdminForthConfigMenuItem","path":"/docs/api/types/Common/interfaces/AdminForthConfigMenuItem","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/AdminForthFieldComponents","path":"/docs/api/types/Common/interfaces/AdminForthFieldComponents","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/AdminForthForeignResourceCommon","path":"/docs/api/types/Common/interfaces/AdminForthForeignResourceCommon","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/AdminForthResourceColumnCommon","path":"/docs/api/types/Common/interfaces/AdminForthResourceColumnCommon","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/AdminForthResourceColumnInputCommon","path":"/docs/api/types/Common/interfaces/AdminForthResourceColumnInputCommon","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/AdminForthResourceCommon","path":"/docs/api/types/Common/interfaces/AdminForthResourceCommon","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/AdminForthResourceInputCommon","path":"/docs/api/types/Common/interfaces/AdminForthResourceInputCommon","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/AdminUser","path":"/docs/api/types/Common/interfaces/AdminUser","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/GetBaseConfigResponse","path":"/docs/api/types/Common/interfaces/GetBaseConfigResponse","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/ResourceVeryShort","path":"/docs/api/types/Common/interfaces/ResourceVeryShort","sidebar":"apiSidebar"},{"id":"api/types/Common/interfaces/UserData","path":"/docs/api/types/Common/interfaces/UserData","sidebar":"apiSidebar"},{"id":"api/types/Common/type-aliases/AdminForthComponentDeclaration","path":"/docs/api/types/Common/type-aliases/AdminForthComponentDeclaration","sidebar":"apiSidebar"},{"id":"api/types/Common/type-aliases/AllowedActionsResolved","path":"/docs/api/types/Common/type-aliases/AllowedActionsResolved","sidebar":"apiSidebar"},{"id":"api/types/Common/type-aliases/AnnouncementBadgeResponse","path":"/docs/api/types/Common/type-aliases/AnnouncementBadgeResponse","sidebar":"apiSidebar"},{"id":"api/types/Common/type-aliases/ValidationObject","path":"/docs/api/types/Common/type-aliases/ValidationObject","sidebar":"apiSidebar"},{"id":"api/types/FrontendAPI/enumerations/AlertVariant","path":"/docs/api/types/FrontendAPI/enumerations/AlertVariant","sidebar":"apiSidebar"},{"id":"api/types/FrontendAPI/index","path":"/docs/api/types/FrontendAPI/","sidebar":"apiSidebar"},{"id":"api/types/FrontendAPI/interfaces/FrontendAPIInterface","path":"/docs/api/types/FrontendAPI/interfaces/FrontendAPIInterface","sidebar":"apiSidebar"},{"id":"api/types/FrontendAPI/type-aliases/AlertParams","path":"/docs/api/types/FrontendAPI/type-aliases/AlertParams","sidebar":"apiSidebar"},{"id":"api/types/FrontendAPI/type-aliases/ConfirmParams","path":"/docs/api/types/FrontendAPI/type-aliases/ConfirmParams","sidebar":"apiSidebar"},{"id":"api/types/FrontendAPI/type-aliases/FilterParams","path":"/docs/api/types/FrontendAPI/type-aliases/FilterParams","sidebar":"apiSidebar"},{"id":"tutorial/Advanced/plugin-development","path":"/docs/tutorial/Advanced/plugin-development","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/afcl","path":"/docs/tutorial/Customization/afcl","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/alert","path":"/docs/tutorial/Customization/alert","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/branding","path":"/docs/tutorial/Customization/branding","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/bulkActions","path":"/docs/tutorial/Customization/bulkActions","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/customFieldRendering","path":"/docs/tutorial/Customization/customFieldRendering","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/customPages","path":"/docs/tutorial/Customization/customPages","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/dataApi","path":"/docs/tutorial/Customization/dataApi","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/hooks","path":"/docs/tutorial/Customization/hooks","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/limitingAccess","path":"/docs/tutorial/Customization/limitingAccess","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/menuConfiguration","path":"/docs/tutorial/Customization/menuConfiguration","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/pageInjections","path":"/docs/tutorial/Customization/pageInjections","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/security","path":"/docs/tutorial/Customization/security","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/standardPagesTuning","path":"/docs/tutorial/Customization/standardPagesTuning","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/virtualColumns","path":"/docs/tutorial/Customization/virtualColumns","sidebar":"tutorialSidebar"},{"id":"tutorial/Customization/websocket","path":"/docs/tutorial/Customization/websocket","sidebar":"tutorialSidebar"},{"id":"tutorial/deploy","path":"/docs/tutorial/deploy","sidebar":"tutorialSidebar"},{"id":"tutorial/gettingStarted","path":"/docs/tutorial/gettingStarted","sidebar":"tutorialSidebar"},{"id":"tutorial/glossary","path":"/docs/tutorial/glossary","sidebar":"tutorialSidebar"},{"id":"tutorial/hello-world","path":"/docs/tutorial/hello-world","sidebar":"tutorialSidebar"},{"id":"tutorial/Plugins/AuditLog","path":"/docs/tutorial/Plugins/AuditLog","sidebar":"tutorialSidebar"},{"id":"tutorial/Plugins/email-password-reset","path":"/docs/tutorial/Plugins/email-password-reset","sidebar":"tutorialSidebar"},{"id":"tutorial/Plugins/ForeignInlineList","path":"/docs/tutorial/Plugins/ForeignInlineList","sidebar":"tutorialSidebar"},{"id":"tutorial/Plugins/i18n","path":"/docs/tutorial/Plugins/i18n","sidebar":"tutorialSidebar"},{"id":"tutorial/Plugins/import-export","path":"/docs/tutorial/Plugins/import-export","sidebar":"tutorialSidebar"},{"id":"tutorial/Plugins/open-signup","path":"/docs/tutorial/Plugins/open-signup","sidebar":"tutorialSidebar"},{"id":"tutorial/Plugins/RichEditor","path":"/docs/tutorial/Plugins/RichEditor","sidebar":"tutorialSidebar"},{"id":"tutorial/Plugins/text-complete","path":"/docs/tutorial/Plugins/text-complete","sidebar":"tutorialSidebar"},{"id":"tutorial/Plugins/TwoFactorsAuth","path":"/docs/tutorial/Plugins/TwoFactorsAuth","sidebar":"tutorialSidebar"},{"id":"tutorial/Plugins/upload","path":"/docs/tutorial/Plugins/upload","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/tutorial/gettingStarted","label":"tutorial/gettingStarted"}},"apiSidebar":{"link":{"path":"/docs/api/","label":"API"}}}}],"breadcrumbs":true}},"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-7K99Q2BH04"],"anonymizeIP":true,"id":"default"}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(2654);const l=JSON.parse('{"docusaurusVersion":"3.4.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.4.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.4.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.4.0"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"3.4.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.4.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.4.0"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"3.4.0"},"docusaurus-plugin-typedoc":{"type":"package","name":"docusaurus-plugin-typedoc","version":"1.0.1"}}}');var c=n(4848);const u={siteConfig:a.default,siteMetadata:l,globalData:o,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>h});var r=n(6540),a=n(8193),o=n(5260),i=n(440),s=n(9201),l=n(3102),c=n(4848);function u(e){let{error:t,tryAgain:n}=e;return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,c.jsx)(l.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)(p,{children:(0,c.jsxs)(h,{fallback:()=>(0,c.jsx)(u,{error:t,tryAgain:n}),children:[(0,c.jsx)(o.A,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.A,{children:(0,c.jsx)(u,{error:t,tryAgain:n})})]})})}const m=e=>(0,c.jsx)(f,{...e});class h extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??m)(e)}return e??null}}},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(545),a=n(4848);function o(e){return(0,a.jsx)(r.mg,{...e})}},8774:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(6540),a=n(4625),o=n(440),i=n(4586),s=n(6654),l=n(8193),c=n(3427),u=n(6025),d=n(4848);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:v}=(0,i.A)(),{trailingSlash:k,baseUrl:S}=v,w=v.future.experimental_router,{withBaseUrl:x}=(0,u.hH)(),C=(0,c.A)(),A=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>A.current));const _=p||f;const E=(0,s.A)(_),T=_?.replace("pathname://","");let F=void 0!==T?(P=T,y&&(e=>e.startsWith("/"))(P)?x(P):P):void 0;var P;"hash"===w&&F?.startsWith("./")&&(F=F?.slice(1)),F&&E&&(F=(0,o.applyTrailingSlash)(F,{trailingSlash:k,baseUrl:S}));const I=(0,r.useRef)(!1),R=n?a.k2:a.N_,B=l.A.canUseIntersectionObserver,N=(0,r.useRef)(),O=()=>{I.current||null==F||(window.docusaurus.preload(F),I.current=!0)};(0,r.useEffect)((()=>(!B&&E&&null!=F&&window.docusaurus.prefetch(F),()=>{B&&N.current&&N.current.disconnect()})),[N,F,B,E]);const L=F?.startsWith("#")??!1,j=!b.target||"_self"===b.target,D=!F||!E||!j;return g||!L&&D||C.collectLink(F),b.id&&C.collectAnchor(b.id),D?(0,d.jsx)("a",{ref:A,href:F,..._&&!E&&{target:"_blank",rel:"noopener noreferrer"},...b}):(0,d.jsx)(R,{...b,onMouseEnter:O,onTouchStart:O,innerRef:e=>{A.current=e,B&&e&&E&&(N.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(N.current.unobserve(e),N.current.disconnect(),null!=F&&window.docusaurus.prefetch(F))}))})),N.current.observe(e))},to:F,...n&&{isActive:h,activeClassName:m}})}const f=r.forwardRef(p)},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>c,T:()=>l});var r=n(6540),a=n(4848);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(2654);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>a,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s,hH:()=>i});var r=n(6540),a=n(4586),o=n(6654);function i(){const{siteConfig:e}=(0,a.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,s=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:a=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,o.z)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(a)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:s}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},3427:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540);n(4848);const a=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),o=()=>(0,r.useContext)(a);function i(){return o()}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6988);function o(){return(0,r.useContext)(a.o)}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6125);function o(){return(0,r.useContext)(a.o)}},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540);const a=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect},6803:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(3102);function o(){const e=r.useContext(a.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const s=a?`${a}.${o}`:o;r(i)?e(i,s):t[s]=i}))}(e),t}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>o});var r=n(6540),a=n(4848);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:s,children:t})}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>y,vT:()=>f,gk:()=>m,Gy:()=>d,HW:()=>b,ht:()=>p,r7:()=>g,jh:()=>h});var r=n(6347),a=n(4586),o=n(7065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}function c(e,t){const n=l(e,t),a=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},d=()=>i("docusaurus-plugin-content-docs")??u,p=e=>{try{return function(e,t,n){void 0===t&&(t=o.W),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function f(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function m(e){void 0===e&&(e={});const t=f(e),{pathname:n}=(0,r.zy)();if(!t)return;return{activePlugin:t,activeVersion:l(t.pluginData,n)}}function h(e){return p(e).versions}function g(e){const t=p(e);return s(t)}function y(e){const t=p(e),{pathname:n}=(0,r.zy)();return c(t,n)}function b(e){const t=p(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=s(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},1911:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("set","page_path",t.pathname+t.search+t.hash),window.gtag("event","page_view")}))}}},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(5947),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},2649:(e,t,n)=>{"use strict";n.r(t);var r=n(1765),a=n(4784);const o=/^diff-([\w-]+)/i,i=e=>{const t=[],n=[e];for(;n.length>0;){const e=n.pop();if("string"==typeof e)t.push(e);else if(Array.isArray(e))for(let t=e.length-1;t>=0;t--)n.push(e[t]);else n.push(e.content)}return t.join("")};const s=/^diff-([\w-]+)/i;!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((t=>{s.exec(t)?(e.languages.diff||console.error("prism-include-languages:","You need to import 'diff' language first to use 'diff-xxxx' languages"),e.languages[t]=e.languages.diff):n(1279)(`./prism-${t}`)})),function(e){e.hooks.add("after-tokenize",(function(t){let n,r;const a=t.language;if("diff"===a)return;{const t=o.exec(a);if(!t)return;if(n=t[1],r=e.languages[n],!r)return void console.error("prism-diff-highlight:",`You need to add language '${n}' to use '${a}'`)}const s=[];t.tokens.forEach((t=>{if("string"==typeof t)s.push(...e.tokenize(t,r));else if("unchanged"===t.type)s.push(...e.tokenize(i(t),r));else if(["deleted-sign","inserted-sign"].includes(t.type)){if(t.alias=["deleted-sign"===t.type?"diff-highlight-deleted":"diff-highlight-inserted"],t.content.length>1){const n=[];t.content.forEach((t=>{"prefix"===t.type?n.push(t):n.push(...e.tokenize(i(t),r))})),t.content=n}s.push(t)}else"coord"===t.type&&s.push(t)})),console.log(s),t.tokens=s}))}(e),delete globalThis.Prism}(r.My)},1107:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(6540);var r=n(4164),a=n(1312),o=n(6342),i=n(8774),s=n(3427);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(4848);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.A)(),{navbar:{hideOnScroll:p}}=(0,o.p)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,a.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.A)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(4848);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},9201:(e,t,n)=>{"use strict";n.d(t,{A:()=>Bt});var r=n(6540),a=n(4164),o=n(7489),i=n(5500),s=n(6347),l=n(1312),c=n(5062),u=n(4848);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,l.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var g=n(7559),y=n(4090);const b={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(h,{className:b.skipToContent})}var k=n(6342),S=n(5041);function w(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:a,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const x={closeButton:"closeButton_CVFx"};function C(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.A)("clean-btn close",x.closeButton,e.className),children:(0,u.jsx)(w,{width:14,height:14,strokeWidth:3.1})})}const A={content:"content_knG7"};function _(e){const{announcementBar:t}=(0,k.p)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,a.A)(A.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const E={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,k.p)(),{isActive:t,close:n}=(0,S.M)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,u.jsxs)("div",{className:E.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,u.jsx)("div",{className:E.announcementBarPlaceholder}),(0,u.jsx)(_,{className:E.announcementBarContent}),o&&(0,u.jsx)(C,{onClick:n,className:E.announcementBarClose})]})}var F=n(2069),P=n(3104);var I=n(9532),R=n(5600);const B=r.createContext(null);function N(e){let{children:t}=e;const n=function(){const e=(0,F.M)(),t=(0,R.YL)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,I.ZC)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,u.jsx)(B.Provider,{value:n,children:t})}function O(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function L(){const e=(0,r.useContext)(B);if(!e)throw new I.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,R.YL)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:O(o)})),[a,o,t])}function j(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=L();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,a.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var D=n(5293),M=n(2303);function z(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,M.A)(),s=(0,l.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,a.A)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,a.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(z,{className:(0,a.A)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,a.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const V=r.memo(H),W={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function G(e){let{className:t}=e;const n=(0,k.p)().navbar.style,r=(0,k.p)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,D.G)();return r?null:(0,u.jsx)(V,{className:t,buttonClassName:"dark"===n?W.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var q=n(3465);function K(){return(0,u.jsx)(q.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,F.M)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(w,{color:"var(--ifm-color-emphasis-600)"})})}function Q(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(K,{}),(0,u.jsx)(G,{className:"margin-right--md"}),(0,u.jsx)(Y,{})]})}var Z=n(8774),X=n(6025),J=n(6654),ee=n(1252),te=n(3186);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Ay)(r),p=(0,X.Ay)(t),f=(0,X.Ay)(a,{forcePrependBaseUrl:!0}),m=o&&a&&!(0,J.A)(a),h=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[o,m&&(0,u.jsx)(te.A,{...s&&{width:12,height:12}})]})};return a?(0,u.jsx)(Z.A,{href:l?f:a,...c,...h}):(0,u.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?(0,ee.G)(n,t.pathname):t.pathname.startsWith(p)},...c,...h})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,u.jsx)(ne,{className:(0,a.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,a.A)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,u.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(1422),se=n(9169),le=n(4586);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.ys)(e.to,t)||!!(0,ee.G)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,a.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.A)("navbar__link",o),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(We,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:o,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),(0,u.jsxs)("li",{className:(0,a.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,a.A)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(We,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var me=n(2131);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const ge="iconLanguage_nlXk";var ye=n(961);function be(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var ve=n(9188),ke=["translations"];function Se(){return Se=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Ae="Ctrl";var _e=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=Ce(e,ke),i=a.buttonText,s=void 0===i?"Search":i,l=a.buttonAriaLabel,c=void 0===l?"Search":l,u=we((0,r.useState)(null),2),d=u[0],p=u[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?p("\u2318"):p(Ae))}),[]),r.createElement("button",Se({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(ve.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement(Ee,{reactsToKey:d===Ae?Ae:"Meta"},d===Ae?r.createElement(be,null):d),r.createElement(Ee,{reactsToKey:"k"},"K"))))}));function Ee(e){var t=e.reactsToKey,n=e.children,a=we((0,r.useState)(!1),2),o=a[0],i=a[1];return(0,r.useEffect)((function(){if(t)return window.addEventListener("keydown",e),window.addEventListener("keyup",n),function(){window.removeEventListener("keydown",e),window.removeEventListener("keyup",n)};function e(e){e.key===t&&i(!0)}function n(e){e.key!==t&&"Meta"!==e.key||i(!1)}}),[t]),r.createElement("kbd",{className:o?"DocSearch-Button-Key DocSearch-Button-Key--pressed":"DocSearch-Button-Key"},n)}var Te=n(5260),Fe=n(4255),Pe=n(1062),Ie=n(2967);const Re={button:{buttonText:(0,l.T)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,l.T)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,l.T)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,l.T)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,l.T)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,l.T)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,l.T)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,l.T)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,l.T)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,l.T)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,l.T)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,l.T)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,l.T)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,l.T)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,l.T)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,l.T)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,l.T)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,l.T)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,l.T)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,l.T)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,l.T)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,l.T)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,l.T)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,l.T)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,l.T)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,l.T)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,l.T)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let Be=null;function Ne(e){let{hit:t,children:n}=e;return(0,u.jsx)(Z.A,{to:t.url,children:n})}function Oe(e){let{state:t,onClose:n}=e;const r=(0,Fe.w)();return(0,u.jsx)(Z.A,{to:r(t.query),onClick:n,children:(0,u.jsx)(l.A,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits},children:"See all {count} results"})})}function Le(e){let{contextualSearch:t,externalUrlRegex:a,...o}=e;const{siteMetadata:i}=(0,le.A)(),l=(0,Pe.C)(),c=function(){const{locale:e,tags:t}=(0,Ie.af)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),d=o.searchParameters?.facetFilters??[],p=t?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(c,d):d,f={...o.searchParameters,facetFilters:p},m=(0,s.W6)(),h=(0,r.useRef)(null),g=(0,r.useRef)(null),[y,b]=(0,r.useState)(!1),[v,k]=(0,r.useState)(void 0),S=(0,r.useCallback)((()=>Be?Promise.resolve():Promise.all([n.e(9462).then(n.bind(n,9462)),Promise.all([n.e(1869),n.e(8913)]).then(n.bind(n,8913)),Promise.all([n.e(1869),n.e(416)]).then(n.bind(n,416))]).then((e=>{let[{DocSearchModal:t}]=e;Be=t}))),[]),w=(0,r.useCallback)((()=>{if(!h.current){const e=document.createElement("div");h.current=e,document.body.insertBefore(e,document.body.firstChild)}}),[]),x=(0,r.useCallback)((()=>{w(),S().then((()=>b(!0)))}),[S,w]),C=(0,r.useCallback)((()=>{b(!1),g.current?.focus()}),[]),A=(0,r.useCallback)((e=>{e.preventDefault(),k(e.key),x()}),[x]),_=(0,r.useRef)({navigate(e){let{itemUrl:t}=e;(0,ee.G)(a,t)?window.location.href=t:m.push(t)}}).current,E=(0,r.useRef)((e=>o.transformItems?o.transformItems(e):e.map((e=>({...e,url:l(e.url)}))))).current,T=(0,r.useMemo)((()=>e=>(0,u.jsx)(Oe,{...e,onClose:C})),[C]),F=(0,r.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",i.docusaurusVersion),e)),[i.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&t||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,i])}({isOpen:y,onOpen:x,onClose:C,onInput:A,searchButtonRef:g}),(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Te.A,{children:(0,u.jsx)("link",{rel:"preconnect",href:`https://${o.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})}),(0,u.jsx)(_e,{onTouchStart:S,onFocus:S,onMouseOver:S,onClick:x,ref:g,translations:Re.button}),y&&Be&&h.current&&(0,ye.createPortal)((0,u.jsx)(Be,{onClose:C,initialScrollY:window.scrollY,initialQuery:v,navigator:_,transformItems:E,hitComponent:Ne,transformSearchClient:F,...o.searchPagePath&&{resultsFooterComponent:T},...o,searchParameters:f,placeholder:Re.placeholder,translations:Re.modal}),h.current)]})}function je(){const{siteConfig:e}=(0,le.A)();return(0,u.jsx)(Le,{...e.themeConfig.algolia})}const De={navbarSearchContainer:"navbarSearchContainer_Bca1"};function Me(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,a.A)(n,De.navbarSearchContainer),children:t})}var ze=n(4070),$e=n(1754);var Ue=n(5597);const He=e=>e.docs.find((t=>t.id===e.mainDocId));const Ve={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.A)(),p=(0,me.o)(),{search:f,hash:m}=(0,s.zy)(),h=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],g=t?(0,l.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(fe,{...o,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(he,{className:ge}),g]}),items:h})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(Me,{className:n,children:(0,u.jsx)(je,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,u.jsx)(i,{className:(0,a.A)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,ze.zK)(r),i=(0,$e.QB)(t,r),s=o?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>s||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,ze.zK)(r),i=(0,$e.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,$e.Vd)(r)[0],i=t??o.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,u.jsx)(oe,{...a,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:c,hash:d}=(0,s.zy)(),p=(0,ze.zK)(n),f=(0,ze.jh)(n),{savePreferredVersionName:m}=(0,Ue.g1)(n),h=[...a,...f.map((e=>{const t=p.alternateDocVersions[e.name]??He(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...o],g=(0,$e.Vd)(n)[0],y=t&&h.length>1?(0,l.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,b=t&&h.length>1?void 0:He(g).path;return h.length<=1?(0,u.jsx)(oe,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...i,mobile:t,label:y,to:b,items:h,isActive:r?()=>!1:void 0})}};function We(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Ve[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(a,{...n})}function Ge(){const e=(0,F.M)(),t=(0,k.p)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(We,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function qe(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ke(){const e=0===(0,k.p)().navbar.items.length,t=L();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(qe,{onClick:()=>t.hide()}),t.content]})}function Ye(){const e=(0,F.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(j,{header:(0,u.jsx)(Q,{}),primaryMenu:(0,u.jsx)(Ge,{}),secondaryMenu:(0,u.jsx)(Ke,{})}):null}const Qe={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ze(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,a.A)("navbar-sidebar__backdrop",e.className)})}function Xe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,k.p)(),i=(0,F.M)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,P.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.A)("navbar","navbar--fixed-top",n&&[Qe.navbarHideable,!d&&Qe.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Ze,{onClick:i.toggle}),(0,u.jsx)(Ye,{})]})}var Je=n(440);const et={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function tt(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function nt(e){let{error:t}=e;const n=(0,Je.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:et.errorBoundaryError,children:n})}class rt extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const at="right";function ot(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function it(){const{toggle:e,shown:t}=(0,F.M)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(ot,{})})}const st={colorModeToggle:"colorModeToggle_DEke"};function lt(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(rt,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(We,{...e})},t)))})}function ct(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function ut(){const e=(0,F.M)(),t=(0,k.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??at)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,u.jsx)(ct,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(it,{}),(0,u.jsx)(K,{}),(0,u.jsx)(lt,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(lt,{items:r}),(0,u.jsx)(G,{className:st.colorModeToggle}),!a&&(0,u.jsx)(Me,{children:(0,u.jsx)(je,{})})]})})}function dt(){return(0,u.jsx)(Xe,{children:(0,u.jsx)(ut,{})})}function pt(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,s=(0,X.Ay)(n),l=(0,X.Ay)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Z.A,{className:"footer__link-item",...r?{href:o?l:r}:{to:s},...i,children:[a,r&&!(0,J.A)(r)&&(0,u.jsx)(te.A,{})]})}function ft(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(pt,{item:t})},t.href??t.to)}function mt(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(ft,{item:e},t)))})]})}function ht(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(mt,{column:e},t)))})}function gt(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function yt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(pt,{item:t})}function bt(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(yt,{item:e}),t.length!==n+1&&(0,u.jsx)(gt,{})]},n)))})})}function vt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(ht,{columns:t}):(0,u.jsx)(bt,{links:t})}var kt=n(1122);const St={footerLogoLink:"footerLogoLink_BH7S"};function wt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.hH)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(kt.A,{className:(0,a.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function xt(e){let{logo:t}=e;return t.href?(0,u.jsx)(Z.A,{href:t.href,className:St.footerLogoLink,target:t.target,children:(0,u.jsx)(wt,{logo:t})}):(0,u.jsx)(wt,{logo:t})}function Ct(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function At(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,u.jsx)("footer",{className:(0,a.A)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function _t(){const{footer:e}=(0,k.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,u.jsx)(At,{style:a,links:n&&n.length>0&&(0,u.jsx)(vt,{links:n}),logo:r&&(0,u.jsx)(xt,{logo:r}),copyright:t&&(0,u.jsx)(Ct,{copyright:t})})}const Et=r.memo(_t),Tt=(0,I.fM)([D.a,S.o,P.Tv,Ue.VQ,i.Jx,function(e){let{children:t}=e;return(0,u.jsx)(R.y_,{children:(0,u.jsx)(F.e,{children:(0,u.jsx)(N,{children:t})})})}]);function Ft(e){let{children:t}=e;return(0,u.jsx)(Tt,{children:t})}var Pt=n(1107);function It(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Pt.A,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(tt,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(nt,{error:t})})]})})})}const Rt={mainWrapper:"mainWrapper_z2l0"};function Bt(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,y.J)(),(0,u.jsxs)(Ft,{children:[(0,u.jsx)(i.be,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(T,{}),(0,u.jsx)(dt,{}),(0,u.jsx)("div",{id:d,className:(0,a.A)(g.G.wrapper.main,Rt.mainWrapper,r),children:(0,u.jsx)(o.A,{fallback:e=>(0,u.jsx)(It,{...e}),children:t})}),!n&&(0,u.jsx)(Et,{})]})}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(6540);var r=n(8774),a=n(6025),o=n(4586),i=n(6342),s=n(1122),l=n(4848);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.Ay)(t.src),dark:(0,a.Ay)(t.srcDark||t.src)},i=(0,l.jsx)(s.A,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,o.A)(),{navbar:{title:n,logo:s}}=(0,i.p)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,a.Ay)(s?.href||"/"),m=n?"":t,h=s?.alt??m;return(0,l.jsxs)(r.A,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:h,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(5260),a=n(4848);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.A,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},1122:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});var r=n(6540),a=n(4164),o=n(2303),i=n(5293);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(4848);function c(e){let{className:t,children:n}=e;const c=(0,o.A)(),{colorMode:u}=(0,i.G)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.A)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:o},e)}))})}function u(e){const{sources:t,className:n,alt:r,...a}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>y,u:()=>c});var r=n(6540),a=n(8193),o=n(205),i=n(3109),s=n(4848);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return p(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function m(e){if(!a.A.canUseDOM)return e?u:d}function h(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:o}),(0,s.jsx)(t,{ref:u,style:c?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),i?.(n))},className:l,children:a})}function g(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,o.A)((()=>{t||i(!0)}),[t]),(0,o.A)((()=>{a&&c(t)}),[a,t]),a?(0,s.jsx)(h,{...n,collapsed:l}):null}function y(e){let{lazy:t,...n}=e;const r=t?g:h;return(0,s.jsx)(r,{...n})}},5041:(e,t,n)=>{"use strict";n.d(t,{M:()=>h,o:()=>m});var r=n(6540),a=n(2303),o=n(679),i=n(9532),s=n(6342),l=n(4848);const c=(0,o.Wf)("docusaurus.announcement.dismiss"),u=(0,o.Wf)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.p)(),t=(0,a.A)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>y,a:()=>g});var r=n(6540),a=n(8193),o=n(9532),i=n(679),s=n(6342),l=n(4848);const c=r.createContext(void 0),u="theme",d=(0,i.Wf)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>a.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),h=e=>{d.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.p)(),[a,o]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&h(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[a,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(c);if(null==e)throw new o.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},5597:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>y,XK:()=>k,g1:()=>v});var r=n(6540),a=n(4070),o=n(7065),i=n(6342),s=n(1754),l=n(9532),c=n(679),u=n(4848);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,c.Wf)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.Wf)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.Wf)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function h(){const e=(0,a.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=h();return(0,u.jsx)(m.Provider,{value:n,children:t})}function y(e){let{children:t}=e;return s.C5?(0,u.jsx)(g,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function b(){const e=(0,r.useContext)(m);if(!e)throw new l.dV("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.W);const t=(0,a.ht)(e),[n,i]=b(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function k(){const e=(0,a.Gy)(),[t]=b();function n(n){const r=e[n],{preferredVersionName:a}=t[n];return r.versions.find((e=>e.name===a))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},6588:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,t:()=>c});var r=n(6540),a=n(9532),o=n(4848);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new a.dV("DocsSidebarProvider");return e}},2252:(e,t,n)=>{"use strict";n.d(t,{n:()=>s,r:()=>l});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new a.dV("DocsVersionProvider");return e}},2069:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(6540),a=n(5600),o=n(4581),i=n(7485),s=n(6342),l=n(9532),c=n(4848);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,a.YL)(),{items:t}=(0,s.p)().navbar;return 0===t.length&&!e.component}(),t=(0,o.l)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,i.$Z)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function p(e){let{children:t}=e;const n=d();return(0,c.jsx)(u.Provider,{value:n,children:t})}function f(){const e=r.useContext(u);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>c,YL:()=>l,y_:()=>s});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new a.dV("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.dV("NavbarSecondaryMenuContentProvider");const[,s]=o,l=(0,a.Be)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>a,J:()=>o});var r=n(6540);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},4255:(e,t,n)=>{"use strict";n.d(t,{b:()=>s,w:()=>l});var r=n(6540),a=n(4586),o=n(7485);const i="q";function s(){return(0,o.l)(i)}function l(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,a.A)(),{algolia:{searchPagePath:n}}=t;return(0,r.useCallback)((t=>`${e}${n}?${i}=${encodeURIComponent(t)}`),[e,n])}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(6540),a=n(8193);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!a.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?o.desktop:o.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},1754:(e,t,n)=>{"use strict";n.d(t,{Nr:()=>f,w8:()=>g,C5:()=>p,B5:()=>C,Vd:()=>S,QB:()=>x,fW:()=>w,OF:()=>k,Y:()=>b});var r=n(6540),a=n(6347),o=n(2831),i=n(4070),s=n(5597),l=n(2252),c=n(6588);function u(e){return Array.from(new Set(e))}var d=n(9169);const p=!!i.Gy;function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}const m=(e,t)=>void 0!==e&&(0,d.ys)(e,t),h=(e,t)=>e.some((e=>g(e,t)));function g(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||h(e.items,t))}function y(e,t){switch(e.type){case"category":return g(e,t)||e.items.some((e=>y(e,t)));case"link":return!e.unlisted||g(e,t);default:return!0}}function b(e,t){return(0,r.useMemo)((()=>e.filter((e=>y(e,t)))),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.ys)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.ys)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function k(){const e=(0,c.t)(),{pathname:t}=(0,a.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,s.g1)(e),a=(0,i.r7)(e);return(0,r.useMemo)((()=>u([t,n,a].filter(Boolean))),[t,n,a])}function w(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function x(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function C(e){let{route:t}=e;const n=(0,a.zy)(),r=(0,l.r)(),i=t.routes,s=i.find((e=>(0,a.B6)(n.pathname,e)));if(!s)return null;const c=s.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,o.v)(i),sidebarName:c,sidebarItems:u}}},481:(e,t,n)=>{"use strict";n.d(t,{s:()=>a});var r=n(4586);function a(e){const{siteConfig:t}=(0,r.A)(),{title:n,titleDelimiter:a}=t;return e?.trim().length?`${e.trim()} ${a} ${n}`:n}},7485:(e,t,n)=>{"use strict";n.d(t,{$Z:()=>i,l:()=>l});var r=n(6540),a=n(6347),o=n(9532);function i(e){!function(e){const t=(0,a.W6)(),n=(0,o._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){const t=(0,a.W6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function l(e){const t=function(e){return s((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}(e)??"",n=function(e){const t=(0,a.W6)();return(0,r.useCallback)(((n,r)=>{const a=new URLSearchParams(t.location.search);n?a.set(e,n):a.delete(e),(r?.push?t.push:t.replace)({search:a.toString()})}),[e,t])}(e);return[t,n]}},5500:(e,t,n)=>{"use strict";n.d(t,{Jx:()=>f,be:()=>u,e3:()=>p});var r=n(6540),a=n(4164),o=n(5260),i=n(6803),s=n(6025),l=n(481),c=n(4848);function u(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const u=(0,l.s)(t),{withBaseUrl:d}=(0,s.hH)(),p=a?d(a,{absolute:!0}):void 0;return(0,c.jsxs)(o.A,{children:[t&&(0,c.jsx)("title",{children:u}),t&&(0,c.jsx)("meta",{property:"og:title",content:u}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,c.jsx)("meta",{property:"og:image",content:p}),p&&(0,c.jsx)("meta",{name:"twitter:image",content:p}),i]})}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),s=(0,a.A)(i,t);return(0,c.jsxs)(d.Provider,{value:s,children:[(0,c.jsx)(o.A,{children:(0,c.jsx)("html",{className:s})}),n]})}function f(e){let{children:t}=e;const n=(0,i.A)(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(p,{className:(0,a.A)(r,o),children:t})}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>c,ZC:()=>s,_q:()=>i,dV:()=>l,fM:()=>u});var r=n(6540),a=n(205),o=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,a.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,a.A)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},1252:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{G:()=>r})},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>s,ys:()=>i});var r=n(6540),a=n(8328),o=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,o.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>p,Tv:()=>c,gk:()=>f});var r=n(6540),a=n(8193),o=n(2303),i=(n(205),n(9532)),s=n(4848);const l=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,s.jsx)(l.Provider,{value:n,children:t})}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const d=()=>a.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(d()),o=(0,i._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,o.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},2967:(e,t,n)=>{"use strict";n.d(t,{Cy:()=>i,af:()=>l,tU:()=>s});var r=n(4070),a=n(4586),o=n(5597);const i="default";function s(e,t){return`docs-${e}-${t}`}function l(){const{i18n:e}=(0,a.A)(),t=(0,r.Gy)(),n=(0,r.gk)(),l=(0,o.XK)();const c=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,a=l[e],o=t[e].versions.find((e=>e.isLast));return s(e,(r??a??o).name)}))];return{locale:e.currentLocale,tags:c}}},679:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>c});n(6540);const r=JSON.parse('{"N":"localStorage","M":""}'),a=r.N;function o(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function i(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){const n=`${e}${r.M}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(n);const a=i(t?.persistence);return null===a?l:{get:()=>{try{return a.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=a.getItem(n);a.setItem(n,e),o({key:n,oldValue:t,newValue:e,storage:a})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=a.getItem(n);a.removeItem(n),o({key:n,oldValue:e,newValue:null,storage:a})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===a&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),a=n(6347),o=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.A)(),{pathname:l}=(0,a.zy)(),c=(0,o.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),a=n(6347),o=n(9532);function i(e){const t=(0,a.zy)(),n=(0,o.ZC)(t),i=(0,o._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(4586);function a(){return(0,r.A)().siteConfig.themeConfig}},8126:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(4586);function a(){const{siteConfig:{themeConfig:e}}=(0,r.A)();return e}},1062:(e,t,n)=>{"use strict";n.d(t,{C:()=>s});var r=n(6540),a=n(1252),o=n(6025),i=n(8126);function s(){const{withBaseUrl:e}=(0,o.hH)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:n}}=(0,i.c)();return(0,r.useCallback)((r=>{const o=new URL(r);if((0,a.G)(t,o.href))return r;const i=`${o.pathname+o.hash}`;return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(i,n))}),[e,t,n])}},2983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=void 0;const r=n(2566);function a(e){return e.endsWith("/")?e:`${e}/`}function o(e){return(0,r.removeSuffix)(e,"/")}t.addTrailingSlash=a,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,n?a(l):o(l));var l;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=o},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},440:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(2983);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return a.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return a.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return a.removeTrailingSlash}});var o=n(2566);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return o.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return o.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return o.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return o.removePrefix}});var i=n(253);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},2566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=void 0,t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>k,TM:()=>_,yJ:()=>f,sC:()=>T,AO:()=>p});var r=n(8168);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(1561);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.A)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,h(),k.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(k.entries[k.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=k.index+e;return t>=0&&t{"use strict";var r=n(4363),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),h=l(n),g=0;g{"use strict";e.exports=function(e,t,n,r,a,o,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},119:(e,t,n)=>{"use strict";n.r(t)},1043:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){l(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},5302:(e,t,n)=>{var r=n(4634);e.exports=f,e.exports.parse=o,e.exports.compile=function(e,t){return s(o(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var m=e[i],h=n[2],g=n[3],y=n[4],b=n[5],v=n[6],k=n[7];s&&(r.push(s),s="");var S=null!=h&&null!=m&&m!==h,w="+"===v||"*"===v,x="?"===v||"*"===v,C=n[2]||u,A=y||b;r.push({name:g||o++,prefix:h||"",delimiter:C,optional:x,repeat:w,partial:S,asterisk:!!k,pattern:A?c(A):k?".*":"[^"+l(C)+"]+?"})}}return i{!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i{!function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(Prism)},568:()=>{!function(e){var t=/\\[\r\n](?:\s|\\[\r\n]|#.*(?!.))*(?![\s#]|\\[\r\n])/.source,n=/(?:[ \t]+(?![ \t])(?:)?|)/.source.replace(//g,(function(){return t})),r=/"(?:[^"\\\r\n]|\\(?:\r\n|[\s\S]))*"|'(?:[^'\\\r\n]|\\(?:\r\n|[\s\S]))*'/.source,a=/--[\w-]+=(?:|(?!["'])(?:[^\s\\]|\\.)+)/.source.replace(//g,(function(){return r})),o={pattern:RegExp(r),greedy:!0},i={pattern:/(^[ \t]*)#.*/m,lookbehind:!0,greedy:!0};function s(e,t){return e=e.replace(//g,(function(){return a})).replace(//g,(function(){return n})),RegExp(e,t)}e.languages.docker={instruction:{pattern:/(^[ \t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\s)(?:\\.|[^\r\n\\])*(?:\\$(?:\s|#.*$)*(?![\s#])(?:\\.|[^\r\n\\])*)*/im,lookbehind:!0,greedy:!0,inside:{options:{pattern:s(/(^(?:ONBUILD)?\w+)(?:)*/.source,"i"),lookbehind:!0,greedy:!0,inside:{property:{pattern:/(^|\s)--[\w-]+/,lookbehind:!0},string:[o,{pattern:/(=)(?!["'])(?:[^\s\\]|\\.)+/,lookbehind:!0}],operator:/\\$/m,punctuation:/=/}},keyword:[{pattern:s(/(^(?:ONBUILD)?HEALTHCHECK(?:)*)(?:CMD|NONE)\b/.source,"i"),lookbehind:!0,greedy:!0},{pattern:s(/(^(?:ONBUILD)?FROM(?:)*(?!--)[^ \t\\]+)AS/.source,"i"),lookbehind:!0,greedy:!0},{pattern:s(/(^ONBUILD)\w+/.source,"i"),lookbehind:!0,greedy:!0},{pattern:/^\w+/,greedy:!0}],comment:i,string:o,variable:/\$(?:\w+|\{[^{}"'\\]*\})/,operator:/\\$/m}},comment:i},e.languages.dockerfile=e.languages.docker}(Prism)},1279:(e,t,n)=>{var r={"./prism-bash":7022,"./prism-diff":7839,"./prism-docker":568};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=1279},2694:(e,t,n)=>{"use strict";var r=n(6925);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),a=n(9982);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n