From 46d45925757439cc6197b8290634531526067bbf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2024 20:40:27 +0000 Subject: [PATCH] deploy: f77e64143fd452ba8a14465965a3ee303c9aa59f --- 404.html | 4 +- assets/js/1fb83efa.8b0caeb2.js | 1 + assets/js/1fb83efa.b1ac8c51.js | 1 - assets/js/935f2afb.2e8f363b.js | 1 - assets/js/935f2afb.771fd470.js | 1 + assets/js/a399c97a.6af4d34f.js | 1 + assets/js/a5ab87cc.f17fd665.js | 1 - assets/js/main.0627e92f.js | 2 - assets/js/main.69fde5a2.js | 2 + ...CENSE.txt => main.69fde5a2.js.LICENSE.txt} | 0 assets/js/runtime~main.43a44e87.js | 1 - assets/js/runtime~main.dfb21791.js | 1 + docs/Developer/Integrations/index.html | 4 +- .../{Env_config => Configurations}/index.html | 12 ++-- docs/Install/Docker/index.html | 64 +++++++++++++++++-- docs/Install/Local/index.html | 6 +- docs/Install/Uninstall/index.html | 6 +- docs/User-Guides/Wildcards/index.html | 4 +- docs/User-Guides/application/index.html | 4 +- docs/User-Guides/assets/index.html | 4 +- docs/User-Guides/cluster/index.html | 4 +- docs/User-Guides/dashboards/index.html | 4 +- docs/User-Guides/github/index.html | 4 +- docs/User-Guides/monitoring/index.html | 4 +- docs/User-Guides/teams-webhook/index.html | 4 +- docs/User-Guides/user-interface/index.html | 4 +- docs/User-Guides/workflows/index.html | 4 +- docs/category/developer-resources/index.html | 4 +- .../installation--configuration/index.html | 6 +- docs/category/user-guides/index.html | 4 +- faq/index.html | 4 +- fr/404.html | 4 +- fr/assets/js/1fb83efa.184bcfc3.js | 1 + fr/assets/js/1fb83efa.1eeb6a75.js | 1 - fr/assets/js/935f2afb.193db76a.js | 1 + fr/assets/js/935f2afb.d1facd0a.js | 1 - fr/assets/js/a399c97a.658751a1.js | 1 + fr/assets/js/a5ab87cc.5a729097.js | 1 - fr/assets/js/main.5c845cd8.js | 2 - fr/assets/js/main.6ad1c1d8.js | 2 + ...CENSE.txt => main.6ad1c1d8.js.LICENSE.txt} | 0 fr/assets/js/runtime~main.4fa77e88.js | 1 - fr/assets/js/runtime~main.d833537e.js | 1 + fr/docs/Developer/Integrations/index.html | 4 +- .../{Env_config => Configurations}/index.html | 12 ++-- fr/docs/Install/Docker/index.html | 64 +++++++++++++++++-- fr/docs/Install/Local/index.html | 6 +- fr/docs/Install/Uninstall/index.html | 6 +- fr/docs/User-Guides/Wildcards/index.html | 4 +- fr/docs/User-Guides/application/index.html | 4 +- fr/docs/User-Guides/assets/index.html | 4 +- fr/docs/User-Guides/cluster/index.html | 4 +- fr/docs/User-Guides/dashboards/index.html | 4 +- fr/docs/User-Guides/github/index.html | 4 +- fr/docs/User-Guides/monitoring/index.html | 4 +- fr/docs/User-Guides/teams-webhook/index.html | 4 +- fr/docs/User-Guides/user-interface/index.html | 4 +- fr/docs/User-Guides/workflows/index.html | 4 +- .../category/developer-resources/index.html | 4 +- .../installation--configuration/index.html | 6 +- fr/docs/category/user-guides/index.html | 4 +- fr/faq/index.html | 4 +- fr/index.html | 4 +- fr/release-notes/index.html | 4 +- fr/sitemap.xml | 2 +- index.html | 4 +- release-notes/index.html | 4 +- sitemap.xml | 2 +- 68 files changed, 230 insertions(+), 122 deletions(-) create mode 100644 assets/js/1fb83efa.8b0caeb2.js delete mode 100644 assets/js/1fb83efa.b1ac8c51.js delete mode 100644 assets/js/935f2afb.2e8f363b.js create mode 100644 assets/js/935f2afb.771fd470.js create mode 100644 assets/js/a399c97a.6af4d34f.js delete mode 100644 assets/js/a5ab87cc.f17fd665.js delete mode 100644 assets/js/main.0627e92f.js create mode 100644 assets/js/main.69fde5a2.js rename assets/js/{main.0627e92f.js.LICENSE.txt => main.69fde5a2.js.LICENSE.txt} (100%) delete mode 100644 assets/js/runtime~main.43a44e87.js create mode 100644 assets/js/runtime~main.dfb21791.js rename docs/Install/{Env_config => Configurations}/index.html (84%) create mode 100644 fr/assets/js/1fb83efa.184bcfc3.js delete mode 100644 fr/assets/js/1fb83efa.1eeb6a75.js create mode 100644 fr/assets/js/935f2afb.193db76a.js delete mode 100644 fr/assets/js/935f2afb.d1facd0a.js create mode 100644 fr/assets/js/a399c97a.658751a1.js delete mode 100644 fr/assets/js/a5ab87cc.5a729097.js delete mode 100644 fr/assets/js/main.5c845cd8.js create mode 100644 fr/assets/js/main.6ad1c1d8.js rename fr/assets/js/{main.5c845cd8.js.LICENSE.txt => main.6ad1c1d8.js.LICENSE.txt} (100%) delete mode 100644 fr/assets/js/runtime~main.4fa77e88.js create mode 100644 fr/assets/js/runtime~main.d833537e.js rename fr/docs/Install/{Env_config => Configurations}/index.html (84%) diff --git a/404.html b/404.html index f9ff3b6df..1b4ade885 100644 --- a/404.html +++ b/404.html @@ -4,8 +4,8 @@ Page Not Found | Tombolo Documentation - - + +
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/js/1fb83efa.8b0caeb2.js b/assets/js/1fb83efa.8b0caeb2.js new file mode 100644 index 000000000..fadd42c63 --- /dev/null +++ b/assets/js/1fb83efa.8b0caeb2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[91],{900:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>d});var o=t(4848),i=t(8453);const s={sidebar_position:2,pagination_next:null,pagination_prev:null,title:"Docker Setup"},r="Docker Setup Instructions",l={id:"Install/Docker",title:"Docker Setup",description:"Tombolo can be deployed quickly by following a few simple steps and running a couple of Docker commands. With Docker, there are fewer prerequisites, and you don\u2019t need to worry about installing multiple applications or having a specific operating system on your machine. This makes Docker the preferred packaging method for production, as it ensures consistency across environments, enhances portability, and simplifies the deployment process.",source:"@site/docs/Install/Docker.md",sourceDirName:"Install",slug:"/Install/Docker",permalink:"/Tombolo/docs/Install/Docker",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,pagination_next:null,pagination_prev:null,title:"Docker Setup"},sidebar:"tutorialSidebar"},c={},d=[{value:"System Requirements and Prerequisites",id:"system-requirements-and-prerequisites",level:3},{value:"Step 1- Clone the Repository",id:"step-1--clone-the-repository",level:3},{value:"Step 2 - Update Configuration Files",id:"step-2---update-configuration-files",level:3},{value:"Step 3 - Configure Nginx",id:"step-3---configure-nginx",level:3},{value:"Step 4 - Whitelist Clusters",id:"step-4---whitelist-clusters",level:3},{value:"Step 5 - Set Up Docker Compose",id:"step-5---set-up-docker-compose",level:3},{value:"Step 6 - Build and Start the Application",id:"step-6---build-and-start-the-application",level:3}];function a(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"docker-setup-instructions",children:"Docker Setup Instructions"}),"\n",(0,o.jsx)(n.p,{children:"Tombolo can be deployed quickly by following a few simple steps and running a couple of Docker commands. With Docker, there are fewer prerequisites, and you don\u2019t need to worry about installing multiple applications or having a specific operating system on your machine. This makes Docker the preferred packaging method for production, as it ensures consistency across environments, enhances portability, and simplifies the deployment process."}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"system-requirements-and-prerequisites",children:"System Requirements and Prerequisites"}),"\n",(0,o.jsx)(n.p,{children:"Before setting up Tombolo with Docker, ensure your system meets the following requirements:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"CPU"}),": 2+ cores"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"RAM"}),": 4GB+ (8GB recommended for optimal performance)"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Storage"}),": At least 10GB of free disk space"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Docker"}),": Ensure Docker is installed and running on your machine, preferably the latest version. You can download the most recent version from ",(0,o.jsx)(n.a,{href:"https://www.docker.com/get-started",children:"Docker's official site"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Git"}),": Preferably latest version"]}),"\n"]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"step-1--clone-the-repository",children:"Step 1- Clone the Repository"}),"\n",(0,o.jsx)(n.p,{children:"To get started, clone the Tombolo repository using the following command:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"git clone https://github.com/hpcc-systems/Tombolo.git\n"})}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"step-2---update-configuration-files",children:"Step 2 - Update Configuration Files"}),"\n",(0,o.jsxs)(n.p,{children:["There are two configuration files that need to be modified. The one at the root of the project is for the backend service, and the one inside ",(0,o.jsx)(n.code,{children:"client-react.js"})," is for the front-end React application."]}),"\n",(0,o.jsx)("div",{class:"important_block",children:(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsxs)(n.p,{children:["Please carefully review each variable before making any changes. Detailed explanations can be found in the ",(0,o.jsx)(n.a,{href:"./Configurations",children:"Configurations"}),"."]}),"\n"]})}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Navigate to ",(0,o.jsx)(n.code,{children:"/Tombolo/Tombolo"})," and create a new ",(0,o.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,o.jsxs)(n.li,{children:["Copy all the contents from ",(0,o.jsx)(n.code,{children:"/Tombolo/Tombolo/.env.sample"})," and paste them into the newly created ",(0,o.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,o.jsxs)(n.li,{children:["Navigate to ",(0,o.jsx)(n.code,{children:"/Tombolo/Tombolo/client-reactjs"})," and create a new ",(0,o.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,o.jsxs)(n.li,{children:["Copy all the contents from ",(0,o.jsx)(n.code,{children:"/Tombolo/Tombolo/client-reactjs/.env.sample"})," and paste them into the newly created ",(0,o.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,o.jsxs)(n.li,{children:["Review both ",(0,o.jsx)(n.code,{children:".env"})," files and update variables if necessary. Use the ",(0,o.jsx)(n.a,{href:"./Configurations",children:"Configurations"})," documentation as a guide."]}),"\n"]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"step-3---configure-nginx",children:"Step 3 - Configure Nginx"}),"\n",(0,o.jsx)(n.p,{children:"Nginx is required to serve the frontend and reverse proxy requests to the backend. You can configure Nginx with or without SSL. Running without SSL is only recommended if you are configuring for testing purposes."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Create a new file named ",(0,o.jsx)(n.code,{children:"nginx.conf.template"})," inside the ",(0,o.jsx)(n.code,{children:"/client-reactjs/nginx/conf.d"})," directory."]}),"\n",(0,o.jsxs)(n.li,{children:["If you're using SSL, copy the content from ",(0,o.jsx)(n.code,{children:"nginx.conf.template-ssl"})," and paste it into ",(0,o.jsx)(n.code,{children:"nginx.conf.template"}),". If you're not using SSL, copy the content from ",(0,o.jsx)(n.code,{children:"nginx.conf.template-no-ssl"})," and paste it into ",(0,o.jsx)(n.code,{children:"nginx.conf.template"}),"."]}),"\n"]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"step-4---whitelist-clusters",children:"Step 4 - Whitelist Clusters"}),"\n",(0,o.jsx)(n.p,{children:"Clusters need to be whitelisted to allow Tombolo to communicate with them. Any clusters that will be used in Tombolo must be whitelisted for security reasons."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Inside the ",(0,o.jsx)(n.code,{children:"/server"})," directory, create a new file called ",(0,o.jsx)(n.code,{children:"cluster-whitelist.js"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Use ",(0,o.jsx)(n.code,{children:"cluster-whitelist.sample.js"})," as a template to add the clusters that you would like to whitelist."]}),"\n"]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"step-5---set-up-docker-compose",children:"Step 5 - Set Up Docker Compose"}),"\n",(0,o.jsxs)(n.p,{children:["Docker Compose is used to define and run the multi-container Docker applications required for this project. In this setup, you will create three services: ",(0,o.jsx)(n.code,{children:"web"}),", ",(0,o.jsx)(n.code,{children:"node"}),", and ",(0,o.jsx)(n.code,{children:"mysql_db"}),"."]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["In the project root directory (",(0,o.jsx)(n.code,{children:"/Tombolo/Tombolo"}),"), create a new file called ",(0,o.jsx)(n.code,{children:"docker-compose.yml"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Copy everything from ",(0,o.jsx)(n.code,{children:"docker-compose-sample"})," and paste it into the new file you just created. Update any configurations if necessary."]}),"\n"]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"step-6---build-and-start-the-application",children:"Step 6 - Build and Start the Application"}),"\n",(0,o.jsx)(n.p,{children:"To build and start the application using Docker, run the following commands. The first command builds the application image, while the second command starts the application in detached mode, allowing it to run in the background."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"docker-compose build\ndocker-compose up -d\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Once the containers have started successfully, the application will be accessible at: ",(0,o.jsx)(n.code,{children:"http://:"})]}),"\n",(0,o.jsx)(n.hr,{})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>l});var o=t(6540);const i={},s=o.createContext(i);function r(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1fb83efa.b1ac8c51.js b/assets/js/1fb83efa.b1ac8c51.js deleted file mode 100644 index ddabf2dfa..000000000 --- a/assets/js/1fb83efa.b1ac8c51.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[91],{900:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var o=n(4848),r=n(8453);const s={sidebar_position:2,pagination_prev:null,pagination_next:null},i="Docker Setup",a={id:"Install/Docker",title:"Docker Setup",description:"Step 1 - Recommended and Required Software",source:"@site/docs/Install/Docker.md",sourceDirName:"Install",slug:"/Install/Docker",permalink:"/Tombolo/docs/Install/Docker",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,pagination_prev:null,pagination_next:null},sidebar:"tutorialSidebar"},c={},d=[{value:"Step 1 - Recommended and Required Software",id:"step-1---recommended-and-required-software",level:2}];function l(e){const t={h1:"h1",h2:"h2",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"docker-setup",children:"Docker Setup"}),"\n",(0,o.jsx)(t.h2,{id:"step-1---recommended-and-required-software",children:"Step 1 - Recommended and Required Software"})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>a});var o=n(6540);const r={},s=o.createContext(r);function i(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.2e8f363b.js b/assets/js/935f2afb.2e8f363b.js deleted file mode 100644 index d995d5811..000000000 --- a/assets/js/935f2afb.2e8f363b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Installation & Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Local Setup","href":"/Tombolo/docs/Install/Local","docId":"Install/Local","unlisted":false},{"type":"link","label":"Docker Setup","href":"/Tombolo/docs/Install/Docker","docId":"Install/Docker","unlisted":false},{"type":"link","label":"Configurations","href":"/Tombolo/docs/Install/Env_config","docId":"Install/Env_config","unlisted":false},{"type":"link","label":"Uninstall Instructions","href":"/Tombolo/docs/Install/Uninstall","docId":"Install/Uninstall","unlisted":false}],"href":"/Tombolo/docs/category/installation--configuration"},{"type":"category","label":"User Guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Applications","href":"/Tombolo/docs/User-Guides/application","docId":"User-Guides/application","unlisted":false},{"type":"link","label":"Assets","href":"/Tombolo/docs/User-Guides/assets","docId":"User-Guides/assets","unlisted":false},{"type":"link","label":"Clusters","href":"/Tombolo/docs/User-Guides/cluster","docId":"User-Guides/cluster","unlisted":false},{"type":"link","label":"Dashboards","href":"/Tombolo/docs/User-Guides/dashboards","docId":"User-Guides/dashboards","unlisted":false},{"type":"link","label":"Github","href":"/Tombolo/docs/User-Guides/github","docId":"User-Guides/github","unlisted":false},{"type":"link","label":"Monitoring","href":"/Tombolo/docs/User-Guides/monitoring","docId":"User-Guides/monitoring","unlisted":false},{"type":"link","label":"MS Teams Webhooks","href":"/Tombolo/docs/User-Guides/teams-webhook","docId":"User-Guides/teams-webhook","unlisted":false},{"type":"link","label":"User Interface","href":"/Tombolo/docs/User-Guides/user-interface","docId":"User-Guides/user-interface","unlisted":false},{"type":"link","label":"Wildcards","href":"/Tombolo/docs/User-Guides/Wildcards","docId":"User-Guides/Wildcards","unlisted":false},{"type":"link","label":"Workflows","href":"/Tombolo/docs/User-Guides/workflows","docId":"User-Guides/workflows","unlisted":false}],"href":"/Tombolo/docs/category/user-guides"},{"type":"category","label":"Developer Resources","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Integrations","href":"/Tombolo/docs/Developer/Integrations","docId":"Developer/Integrations","unlisted":false}],"href":"/Tombolo/docs/category/developer-resources"}]},"docs":{"Developer/Integrations":{"id":"Developer/Integrations","title":"Integrations","description":"Our Integration Guides are currently under construction and will be available soon.","sidebar":"tutorialSidebar"},"Install/Docker":{"id":"Install/Docker","title":"Docker Setup","description":"Step 1 - Recommended and Required Software","sidebar":"tutorialSidebar"},"Install/Env_config":{"id":"Install/Env_config","title":"Configurations","description":"To get Tombolo up and running, you\'ll need to configure two essential files. For your convenience, sample .env files are already included in the project. Simply rename these sample files to .env and adjust the values to suit your specific environment.","sidebar":"tutorialSidebar"},"Install/Local":{"id":"Install/Local","title":"Local Setup","description":"Local installation requires a few dependencies to be installed directly on your machine. This is the best choice for developers who want to contribute to the project, or develop integrations to customize their instance. If you intend to use this installation for production purposes, or do not want to configure your own system, we recommend a containerized installation using our Docker Installation Guide instead.","sidebar":"tutorialSidebar"},"Install/Uninstall":{"id":"Install/Uninstall","title":"Uninstall Instructions","description":"There are three potential steps that need to be completed in order to remove Tombolo from your system. It is easiest to follow the order given here.","sidebar":"tutorialSidebar"},"User-Guides/application":{"id":"User-Guides/application","title":"Applications","description":"Applications provide a way to seperate groups of data and settings inside of Tombolo. Each application has its own set of Assets, Dataflows, Jobs, Monitorings, and Notifications as well as administration settings. You can switch application instances at any time by utilizing the selector in the top left corner of the navigation bar, by the Tombolo logo.","sidebar":"tutorialSidebar"},"User-Guides/assets":{"id":"User-Guides/assets","title":"Assets","description":"The \\"Add Asset\\" feature in Tombolo allows you to import assets and their metadata from an HPCC cluster. You can","sidebar":"tutorialSidebar"},"User-Guides/cluster":{"id":"User-Guides/cluster","title":"Clusters","description":"Tombolo can speak directly to HPCC clusters to run ECL code, monitor jobs, files, or cluster usage states, and schedule user-defined dataflows.","sidebar":"tutorialSidebar"},"User-Guides/dashboards":{"id":"User-Guides/dashboards","title":"Dashboards","description":"Our Dashboards give great insight into how you and your teams tasks are being handled. Tombolo currently offers two dashboards","sidebar":"tutorialSidebar"},"User-Guides/github":{"id":"User-Guides/github","title":"Github","description":"Adding a Github Repository will allow files in that repository to be utilized in Dataflows. Tombolo can utilize ECL code within files to execute ECL queries and workloads in the designated cluster.","sidebar":"tutorialSidebar"},"User-Guides/monitoring":{"id":"User-Guides/monitoring","title":"Monitoring","description":"Tombolo currently offers the ability to monitor 4 different kinds of assets.","sidebar":"tutorialSidebar"},"User-Guides/teams-webhook":{"id":"User-Guides/teams-webhook","title":"MS Teams Webhooks","description":"Webhooks in Microsoft Teams allow Tombolo to deliver notifications and updates directly into a Teams channel. Webhooks post these updates directly into the chat stream which can be handled and responded to in order to keep your team on top of important notifications.","sidebar":"tutorialSidebar"},"User-Guides/user-interface":{"id":"User-Guides/user-interface","title":"User Interface","description":"Tombolo\'s user interface is divded into three major zones.","sidebar":"tutorialSidebar"},"User-Guides/Wildcards":{"id":"User-Guides/Wildcards","title":"Wildcards","description":"Wildcards are special characters that can stand in for unknown characters in a text value and are handy for","sidebar":"tutorialSidebar"},"User-Guides/workflows":{"id":"User-Guides/workflows","title":"Workflows","description":"Workflows are Tombolo\'s way of setting up a method for running a set of HPCC workunits, or jobs in a logical workflow.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.771fd470.js b/assets/js/935f2afb.771fd470.js new file mode 100644 index 000000000..85d332e1f --- /dev/null +++ b/assets/js/935f2afb.771fd470.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Installation & Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Local Setup","href":"/Tombolo/docs/Install/Local","docId":"Install/Local","unlisted":false},{"type":"link","label":"Docker Setup","href":"/Tombolo/docs/Install/Docker","docId":"Install/Docker","unlisted":false},{"type":"link","label":"Configurations","href":"/Tombolo/docs/Install/Configurations","docId":"Install/Configurations","unlisted":false},{"type":"link","label":"Uninstall Instructions","href":"/Tombolo/docs/Install/Uninstall","docId":"Install/Uninstall","unlisted":false}],"href":"/Tombolo/docs/category/installation--configuration"},{"type":"category","label":"User Guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Applications","href":"/Tombolo/docs/User-Guides/application","docId":"User-Guides/application","unlisted":false},{"type":"link","label":"Assets","href":"/Tombolo/docs/User-Guides/assets","docId":"User-Guides/assets","unlisted":false},{"type":"link","label":"Clusters","href":"/Tombolo/docs/User-Guides/cluster","docId":"User-Guides/cluster","unlisted":false},{"type":"link","label":"Dashboards","href":"/Tombolo/docs/User-Guides/dashboards","docId":"User-Guides/dashboards","unlisted":false},{"type":"link","label":"Github","href":"/Tombolo/docs/User-Guides/github","docId":"User-Guides/github","unlisted":false},{"type":"link","label":"Monitoring","href":"/Tombolo/docs/User-Guides/monitoring","docId":"User-Guides/monitoring","unlisted":false},{"type":"link","label":"MS Teams Webhooks","href":"/Tombolo/docs/User-Guides/teams-webhook","docId":"User-Guides/teams-webhook","unlisted":false},{"type":"link","label":"User Interface","href":"/Tombolo/docs/User-Guides/user-interface","docId":"User-Guides/user-interface","unlisted":false},{"type":"link","label":"Wildcards","href":"/Tombolo/docs/User-Guides/Wildcards","docId":"User-Guides/Wildcards","unlisted":false},{"type":"link","label":"Workflows","href":"/Tombolo/docs/User-Guides/workflows","docId":"User-Guides/workflows","unlisted":false}],"href":"/Tombolo/docs/category/user-guides"},{"type":"category","label":"Developer Resources","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Integrations","href":"/Tombolo/docs/Developer/Integrations","docId":"Developer/Integrations","unlisted":false}],"href":"/Tombolo/docs/category/developer-resources"}]},"docs":{"Developer/Integrations":{"id":"Developer/Integrations","title":"Integrations","description":"Our Integration Guides are currently under construction and will be available soon.","sidebar":"tutorialSidebar"},"Install/Configurations":{"id":"Install/Configurations","title":"Configurations","description":"To get Tombolo up and running, you\'ll need to configure two essential files. For your convenience, sample .env files are already included in the project. Simply copy these sample files and adjust the values to suit your specific environment.","sidebar":"tutorialSidebar"},"Install/Docker":{"id":"Install/Docker","title":"Docker Setup","description":"Tombolo can be deployed quickly by following a few simple steps and running a couple of Docker commands. With Docker, there are fewer prerequisites, and you don\u2019t need to worry about installing multiple applications or having a specific operating system on your machine. This makes Docker the preferred packaging method for production, as it ensures consistency across environments, enhances portability, and simplifies the deployment process.","sidebar":"tutorialSidebar"},"Install/Local":{"id":"Install/Local","title":"Local Setup","description":"Local installation requires a few dependencies to be installed directly on your machine. This is the best choice for developers who want to contribute to the project, or develop integrations to customize their instance. If you intend to use this installation for production purposes, or do not want to configure your own system, we recommend a containerized installation using our Docker Installation Guide instead.","sidebar":"tutorialSidebar"},"Install/Uninstall":{"id":"Install/Uninstall","title":"Uninstall Instructions","description":"There are three potential steps that need to be completed in order to remove Tombolo from your system. It is easiest to follow the order given here.","sidebar":"tutorialSidebar"},"User-Guides/application":{"id":"User-Guides/application","title":"Applications","description":"Applications provide a way to seperate groups of data and settings inside of Tombolo. Each application has its own set of Assets, Dataflows, Jobs, Monitorings, and Notifications as well as administration settings. You can switch application instances at any time by utilizing the selector in the top left corner of the navigation bar, by the Tombolo logo.","sidebar":"tutorialSidebar"},"User-Guides/assets":{"id":"User-Guides/assets","title":"Assets","description":"The \\"Add Asset\\" feature in Tombolo allows you to import assets and their metadata from an HPCC cluster. You can","sidebar":"tutorialSidebar"},"User-Guides/cluster":{"id":"User-Guides/cluster","title":"Clusters","description":"Tombolo can speak directly to HPCC clusters to run ECL code, monitor jobs, files, or cluster usage states, and schedule user-defined dataflows.","sidebar":"tutorialSidebar"},"User-Guides/dashboards":{"id":"User-Guides/dashboards","title":"Dashboards","description":"Our Dashboards give great insight into how you and your teams tasks are being handled. Tombolo currently offers two dashboards","sidebar":"tutorialSidebar"},"User-Guides/github":{"id":"User-Guides/github","title":"Github","description":"Adding a Github Repository will allow files in that repository to be utilized in Dataflows. Tombolo can utilize ECL code within files to execute ECL queries and workloads in the designated cluster.","sidebar":"tutorialSidebar"},"User-Guides/monitoring":{"id":"User-Guides/monitoring","title":"Monitoring","description":"Tombolo currently offers the ability to monitor 4 different kinds of assets.","sidebar":"tutorialSidebar"},"User-Guides/teams-webhook":{"id":"User-Guides/teams-webhook","title":"MS Teams Webhooks","description":"Webhooks in Microsoft Teams allow Tombolo to deliver notifications and updates directly into a Teams channel. Webhooks post these updates directly into the chat stream which can be handled and responded to in order to keep your team on top of important notifications.","sidebar":"tutorialSidebar"},"User-Guides/user-interface":{"id":"User-Guides/user-interface","title":"User Interface","description":"Tombolo\'s user interface is divded into three major zones.","sidebar":"tutorialSidebar"},"User-Guides/Wildcards":{"id":"User-Guides/Wildcards","title":"Wildcards","description":"Wildcards are special characters that can stand in for unknown characters in a text value and are handy for","sidebar":"tutorialSidebar"},"User-Guides/workflows":{"id":"User-Guides/workflows","title":"Workflows","description":"Workflows are Tombolo\'s way of setting up a method for running a set of HPCC workunits, or jobs in a logical workflow.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/a399c97a.6af4d34f.js b/assets/js/a399c97a.6af4d34f.js new file mode 100644 index 000000000..9d7f49c56 --- /dev/null +++ b/assets/js/a399c97a.6af4d34f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[801],{3583:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var r=i(4848),s=i(8453);const o={sidebar_position:3,pagination_next:null,pagination_prev:null,title:"Configurations"},t="Environment Configuration",l={id:"Install/Configurations",title:"Configurations",description:"To get Tombolo up and running, you'll need to configure two essential files. For your convenience, sample .env files are already included in the project. Simply copy these sample files and adjust the values to suit your specific environment.",source:"@site/docs/Install/Configurations.md",sourceDirName:"Install",slug:"/Install/Configurations",permalink:"/Tombolo/docs/Install/Configurations",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,pagination_next:null,pagination_prev:null,title:"Configurations"},sidebar:"tutorialSidebar"},c={},d=[{value:"Server Environment Variables",id:"server-environment-variables",level:2},{value:"1. Instance Configuration",id:"1-instance-configuration",level:3},{value:"2. Host, Port, and Web URL Configuration",id:"2-host-port-and-web-url-configuration",level:3},{value:"3. SSL Certificate Configuration (Nginx)",id:"3-ssl-certificate-configuration-nginx",level:3},{value:"4. Database Configuration",id:"4-database-configuration",level:3},{value:"5. Authentication Configuration",id:"5-authentication-configuration",level:3},{value:"6. Email Configuration",id:"6-email-configuration",level:3},{value:"7. Security Configuration",id:"7-security-configuration",level:3},{value:"8. Logging Configuration",id:"8-logging-configuration",level:3},{value:"9. Integration-Specific Configuration",id:"9-integration-specific-configuration",level:3},{value:"Client Environment Variables",id:"client-environment-variables",level:2},{value:"Development Configuration",id:"development-configuration",level:3},{value:"LDAP Configuration",id:"ldap-configuration",level:3},{value:"Authentication Configuration",id:"authentication-configuration",level:3},{value:"Azure Configuration (only if using Azure AD for authentication)",id:"azure-configuration-only-if-using-azure-ad-for-authentication",level:3},{value:"App Version",id:"app-version",level:3}];function a(e){const n={a:"a",blockquote:"blockquote",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"environment-configuration",children:"Environment Configuration"}),"\n",(0,r.jsx)(n.p,{children:"To get Tombolo up and running, you'll need to configure two essential files. For your convenience, sample .env files are already included in the project. Simply copy these sample files and adjust the values to suit your specific environment."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"General Environment File"}),":",(0,r.jsx)(n.br,{}),"\n","This file contains server-related configurations and Docker-related settings. It is located in the root directory of the project: ",(0,r.jsx)(n.code,{children:"Tombolo/Tombolo/.env"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Client-Specific Environment File"}),":",(0,r.jsx)(n.br,{}),"\n","This file is specific to the client-side application and is located in ",(0,r.jsx)(n.code,{children:"Tombolo/Tombolo/client-reactjs/.env"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)("div",{class:"important_block",children:(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Important"}),": Review and understand the variables in these files as they may differ depending on your environment. Detailed explanations for each variable are provided below."]}),"\n"]})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)("div",{class:"custom_details_component",children:(0,r.jsxs)(i,{class:"env_config-details",children:[(0,r.jsx)("summary",{children:(0,r.jsx)(n.h2,{id:"server-environment-variables",children:"Server Environment Variables"})}),(0,r.jsx)(n.p,{children:"Below are the server and Docker-related configuration variables for Tombolo. These variables are also referenced in the Docker Compose file. Each one is explained with its purpose and usage."}),(0,r.jsx)(n.h3,{id:"1-instance-configuration",children:"1. Instance Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"INSTANCE_NAME"}),(0,r.jsx)(n.br,{}),"\n","This variable is used to give a unique name to the instance of the Tombolo application.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"tombolo_dev_1"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"NODE_ENV"}),(0,r.jsx)(n.br,{}),"\n","Defines the environment type in which Tombolo will run. It can either be set to ",(0,r.jsx)(n.code,{children:"development"})," or ",(0,r.jsx)(n.code,{children:"production"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"development"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"2-host-port-and-web-url-configuration",children:"2. Host, Port, and Web URL Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"HOSTNAME"}),(0,r.jsx)(n.br,{}),"\n","This defines the hostname that Tombolo will use. Typically, ",(0,r.jsx)(n.code,{children:"localhost"})," is used for local development, but in a production setup, this could be a domain name or an IP address where the Tombolo server is hosted.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"localhost"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"SERVER_PORT"}),(0,r.jsx)(n.br,{}),"\n","Specifies the port on which the backend server will run. This is the port that handles API requests and communications between the frontend and backend.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3000"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"HTTP_PORT"}),(0,r.jsx)(n.br,{}),"\n","This port is dedicated to the frontend interface of Tombolo. When running locally, the frontend will be accessible through this port.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3001"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"HTTPS_PORT"}),(0,r.jsx)(n.br,{}),"\n","Port used for secure HTTP traffic (HTTPS). If SSL/TLS isn't configured or required for your local setup, this setting can be ignored.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"443"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"WEB_URL"}),(0,r.jsx)(n.br,{}),"\n","URL to access Tombolo's web interface. It is composed of the hostname and HTTP port. In production, this would be a FQDN.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://localhost:3001/"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"3-ssl-certificate-configuration-nginx",children:"3. SSL Certificate Configuration (Nginx)"}),(0,r.jsx)(n.p,{children:"These configurations are required if you're using SSL/TLS. Ignore if not using SSL."}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CERT_PATH"}),(0,r.jsx)(n.br,{}),"\n","Specifies the directory path where SSL certificates are stored. This path is referenced by Nginx.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"/certs"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CERTIFICATE_NAME"}),(0,r.jsx)(n.br,{}),"\n","The file name of your SSL certificate.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"my_certificate.pem"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CERTIFICATE_KEY"}),(0,r.jsx)(n.br,{}),"\n","The file name of the SSL certificate's private key.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"my_certificate_key.pem"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"4-database-configuration",children:"4. Database Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"MYSQL_SSL_ENABLED"}),(0,r.jsx)(n.br,{}),"\n","Determines whether SSL is enabled for the MySQL connection. Set this to ",(0,r.jsx)(n.code,{children:"true"})," in production environment.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"false"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_USERNAME"}),(0,r.jsx)(n.br,{}),"\n","The default is often ",(0,r.jsx)(n.code,{children:"root"}),". In production, a non-root user with appropriate permissions is recommended.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"root"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_PASSWORD"}),(0,r.jsx)(n.br,{}),"\n","The password associated with the MySQL username.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"root"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_PORT"}),(0,r.jsx)(n.br,{}),"\n","The port used for MySQL communication. The default MySQL port is ",(0,r.jsx)(n.code,{children:"3306"}),", but this may differ based on your environment.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3306"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_NAME"}),(0,r.jsx)(n.br,{}),"\n","The name of the MySQL database used by Tombolo.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"tombolo"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_HOSTNAME"}),(0,r.jsx)(n.br,{}),"\n","The host of the MySQL database, typically ",(0,r.jsx)(n.code,{children:"localhost"})," for local setups. For Docker, use the service name ",(0,r.jsx)(n.code,{children:"mysql_db"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"localhost"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"5-authentication-configuration",children:"5. Authentication Configuration"}),(0,r.jsxs)(n.p,{children:["Tombolo does not include built-in authentication. You can choose to use ",(0,r.jsx)(n.strong,{children:"Auth Service"})," or ",(0,r.jsx)(n.strong,{children:"Azure AD"}),"."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Auth Service"})," is an authentication service developed by the LNRS Solution Labs Team. For setup information, please visit the ",(0,r.jsx)(n.a,{href:"https://github.com/hpcc-systems/Auth-Service",children:"Auth Service repository"}),"."]}),(0,r.jsxs)(n.p,{children:["The preferred method, however, is ",(0,r.jsx)(n.strong,{children:"Microsoft Entra ID"})," (formerly Azure Active Directory). The first step to using Microsoft Entra ID for authentication is to register an application in Azure. Once registered, you will receive a Client ID and Tenant ID, which are crucial for this to work. You can also configure a redirect URI, which is a URL to be routed to when a user is authenticated."]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"APP_AUTH_METHOD"}),(0,r.jsx)(n.br,{}),"\n","Defines the method of authentication. Available options: ",(0,r.jsx)(n.code,{children:"auth_service"})," or ",(0,r.jsx)(n.code,{children:"azure_ad"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"AUTH_SERVICE_URL"}),(0,r.jsx)(n.br,{}),"\n","The URL of the Auth Service. Ignore if using Microsoft Entra ID for authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://auth-service-url.com"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"AUTHSERVICE_TOMBOLO_CLIENT_ID"}),(0,r.jsx)(n.br,{}),"\n","The client ID for Tombolo within the Auth Service. Ignore if using Microsoft Entra ID for authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your_client_id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"TENANT_ID"}),(0,r.jsx)(n.br,{}),"\n","The tenant ID from Azure AD. You obtain this after registering your application in Azure AD.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your_tenant_id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CLIENT_ID"}),(0,r.jsx)(n.br,{}),"\n","The client ID from Azure AD. You obtain this after registering your application in Azure AD.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your_client_id"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"6-email-configuration",children:"6. Email Configuration"}),(0,r.jsx)(n.p,{children:"Tombolo does not include a built-in SMTP server. To enable email functionality (e.g., notifications), you will need to configure an external SMTP server:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"EMAIL_SMTP_HOST"}),(0,r.jsx)(n.br,{}),"\n","The SMTP host for sending emails.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"smtp.mailserver.com"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"EMAIL_PORT"}),(0,r.jsx)(n.br,{}),"\n","The port number for the SMTP server.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"25"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"EMAIL_SENDER"}),(0,r.jsx)(n.br,{}),"\n","The default sender email address.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"donotreply@tombolo.com"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"7-security-configuration",children:"7. Security Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"ENCRYPTION_KEY"}),(0,r.jsx)(n.br,{}),"\n","This key is used for hashing, encryption, and decryption operations within Tombolo. You can generate this key using OpenSSL:",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.code,{children:"openssl rand -base64 32"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"API_KEY_DURATION"}),(0,r.jsx)(n.br,{}),"\n","The duration (in days) for which an API key remains valid. This key is used for accessing Tombolo data from external sources. The maximum duration is 365 days, and the default is 28 days.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"180"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"8-logging-configuration",children:"8. Logging Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"NODE_LOG_LEVEL"}),(0,r.jsx)(n.br,{}),"\n","The logging level for the Node.js server. Options include ",(0,r.jsx)(n.code,{children:"error"}),", ",(0,r.jsx)(n.code,{children:"warn"}),", ",(0,r.jsx)(n.code,{children:"info"}),", ",(0,r.jsx)(n.code,{children:"http"}),", ",(0,r.jsx)(n.code,{children:"verbose"}),", ",(0,r.jsx)(n.code,{children:"debug"}),", and ",(0,r.jsx)(n.code,{children:"silly"}),". For more information on configuring logging with Winston, refer to the ",(0,r.jsx)(n.a,{href:"https://github.com/winstonjs/winston",children:"Winston Configuration"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http"})]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"9-integration-specific-configuration",children:"9. Integration-Specific Configuration"}),(0,r.jsx)(n.p,{children:"If you have any integrations enabled and they have environment variables, they can be added to this configuration file as well. There is a placeholder section for those integration-specific variables. Please add them there."})]})}),"\n",(0,r.jsx)("div",{class:"custom_details_component",children:(0,r.jsxs)(i,{children:[(0,r.jsx)("summary",{children:(0,r.jsx)(n.h2,{id:"client-environment-variables",children:"Client Environment Variables"})}),(0,r.jsx)(n.h3,{id:"development-configuration",children:"Development Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"GENERATE_SOURCEMAP"}),(0,r.jsx)(n.br,{}),"\n","Controls whether source maps should be generated. This is mainly used to suppress certain logs generated by Ant Design (antd). The value should be set to ",(0,r.jsx)(n.code,{children:"false"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"false"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"PORT"}),(0,r.jsx)(n.br,{}),"\n","Defines the port on which the front-end React application will run.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3001"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_PROXY_URL"}),(0,r.jsx)(n.br,{}),"\n","Specifies the proxy URL for the React application, typically used to proxy API requests during development.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://localhost:3000"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.h3,{id:"ldap-configuration",children:"LDAP Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_LDAP_SEARCH_ENABLED"}),(0,r.jsx)(n.br,{}),"\n","Enables or disables LDAP search functionality. Set this to ",(0,r.jsx)(n.code,{children:"false"})," as LDAP is not currently used.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"false"})]}),"\n"]}),(0,r.jsx)(n.h3,{id:"authentication-configuration",children:"Authentication Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_APP_AUTH_METHOD"}),(0,r.jsx)(n.br,{}),"\n","Specifies the authentication method to be used by the application. Available options are ",(0,r.jsx)(n.code,{children:"auth_service"})," and ",(0,r.jsx)(n.code,{children:"azure_ad"}),". For more details, refer to the ",(0,r.jsx)(n.code,{children:"APP_AUTH_METHOD"})," variable in the server configuration.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"auth_service"})]}),"\n"]}),(0,r.jsx)(n.h3,{id:"azure-configuration-only-if-using-azure-ad-for-authentication",children:"Azure Configuration (only if using Azure AD for authentication)"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_CLIENT_ID"}),(0,r.jsx)(n.br,{}),"\n","The client ID for Azure AD authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your-azure-client-id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_TENANT_ID"}),(0,r.jsx)(n.br,{}),"\n","The tenant ID for Azure AD authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your-azure-tenant-id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_REDIRECT_URI"}),(0,r.jsx)(n.br,{}),"\n","The URL Azure will redirect the user to after successful authentication. This must also be configured in Azure when registering the app.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://localhost:3001/auth/callback"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_API_TOKEN_SCOPE"}),(0,r.jsx)(n.br,{}),"\n","The API token scope for Azure AD authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"api://your-api-id/.default"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.h3,{id:"app-version",children:"App Version"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_VERSION"}),(0,r.jsx)(n.br,{}),"\n","The version of the application, typically derived from the package version.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"$npm_package_version"})]}),"\n"]})]})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>l});var r=i(6540);const s={},o=r.createContext(s);function t(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a5ab87cc.f17fd665.js b/assets/js/a5ab87cc.f17fd665.js deleted file mode 100644 index ed85a335f..000000000 --- a/assets/js/a5ab87cc.f17fd665.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[365],{8926:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var r=i(4848),s=i(8453);const o={sidebar_position:3,pagination_next:null,pagination_prev:null,title:"Configurations"},t="Environment Configuration",l={id:"Install/Env_config",title:"Configurations",description:"To get Tombolo up and running, you'll need to configure two essential files. For your convenience, sample .env files are already included in the project. Simply rename these sample files to .env and adjust the values to suit your specific environment.",source:"@site/docs/Install/Env_config.md",sourceDirName:"Install",slug:"/Install/Env_config",permalink:"/Tombolo/docs/Install/Env_config",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,pagination_next:null,pagination_prev:null,title:"Configurations"},sidebar:"tutorialSidebar"},c={},d=[{value:"Server Environment Variables",id:"server-environment-variables",level:2},{value:"1. Instance Configuration",id:"1-instance-configuration",level:3},{value:"2. Host, Port, and Web URL Configuration",id:"2-host-port-and-web-url-configuration",level:3},{value:"3. SSL Certificate Configuration (Nginx)",id:"3-ssl-certificate-configuration-nginx",level:3},{value:"4. Database Configuration",id:"4-database-configuration",level:3},{value:"5. Authentication Configuration",id:"5-authentication-configuration",level:3},{value:"6. Email Configuration",id:"6-email-configuration",level:3},{value:"7. Security Configuration",id:"7-security-configuration",level:3},{value:"8. Logging Configuration",id:"8-logging-configuration",level:3},{value:"9. Integration-Specific Configuration",id:"9-integration-specific-configuration",level:3},{value:"Client Environment Variables",id:"client-environment-variables",level:2},{value:"Development Configuration",id:"development-configuration",level:3},{value:"LDAP Configuration",id:"ldap-configuration",level:3},{value:"Authentication Configuration",id:"authentication-configuration",level:3},{value:"Azure Configuration (only if using Azure AD for authentication)",id:"azure-configuration-only-if-using-azure-ad-for-authentication",level:3},{value:"App Version",id:"app-version",level:3}];function a(e){const n={a:"a",blockquote:"blockquote",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"environment-configuration",children:"Environment Configuration"}),"\n",(0,r.jsx)(n.p,{children:"To get Tombolo up and running, you'll need to configure two essential files. For your convenience, sample .env files are already included in the project. Simply rename these sample files to .env and adjust the values to suit your specific environment."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"General Environment File"}),":",(0,r.jsx)(n.br,{}),"\n","This file contains server-related configurations and Docker-related settings. It is located in the root directory of the project: ",(0,r.jsx)(n.code,{children:"Tombolo/Tombolo/.env"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Client-Specific Environment File"}),":",(0,r.jsx)(n.br,{}),"\n","This file is specific to the client-side application and is located in ",(0,r.jsx)(n.code,{children:"Tombolo/Tombolo/client-reactjs/.env"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)("div",{class:"important_block",children:(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Important"}),": Review and understand the variables in these files as they may differ depending on your environment. Detailed explanations for each variable are provided below."]}),"\n"]})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)("div",{class:"custom_details_component",children:(0,r.jsxs)(i,{class:"env_config-details",children:[(0,r.jsx)("summary",{children:(0,r.jsx)(n.h2,{id:"server-environment-variables",children:"Server Environment Variables"})}),(0,r.jsx)(n.p,{children:"Below are the server and Docker-related configuration variables for Tombolo. These variables are also referenced in the Docker Compose file. Each one is explained with its purpose and usage."}),(0,r.jsx)(n.h3,{id:"1-instance-configuration",children:"1. Instance Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"INSTANCE_NAME"}),(0,r.jsx)(n.br,{}),"\n","This variable is used to give a unique name to the instance of the Tombolo application.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"tombolo_dev_1"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"NODE_ENV"}),(0,r.jsx)(n.br,{}),"\n","Defines the environment type in which Tombolo will run. It can either be set to ",(0,r.jsx)(n.code,{children:"development"})," or ",(0,r.jsx)(n.code,{children:"production"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"development"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"2-host-port-and-web-url-configuration",children:"2. Host, Port, and Web URL Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"HOSTNAME"}),(0,r.jsx)(n.br,{}),"\n","This defines the hostname that Tombolo will use. Typically, ",(0,r.jsx)(n.code,{children:"localhost"})," is used for local development, but in a production setup, this could be a domain name or an IP address where the Tombolo server is hosted.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"localhost"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"SERVER_PORT"}),(0,r.jsx)(n.br,{}),"\n","Specifies the port on which the backend server will run. This is the port that handles API requests and communications between the frontend and backend.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3000"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"HTTP_PORT"}),(0,r.jsx)(n.br,{}),"\n","This port is dedicated to the frontend interface of Tombolo. When running locally, the frontend will be accessible through this port.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3001"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"HTTPS_PORT"}),(0,r.jsx)(n.br,{}),"\n","Port used for secure HTTP traffic (HTTPS). If SSL/TLS isn't configured or required for your local setup, this setting can be ignored.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"443"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"WEB_URL"}),(0,r.jsx)(n.br,{}),"\n","URL to access Tombolo's web interface. It is composed of the hostname and HTTP port. In production, this would be a FQDN.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://localhost:3001/"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"3-ssl-certificate-configuration-nginx",children:"3. SSL Certificate Configuration (Nginx)"}),(0,r.jsx)(n.p,{children:"These configurations are required if you're using SSL/TLS. Ignore if not using SSL."}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CERT_PATH"}),(0,r.jsx)(n.br,{}),"\n","Specifies the directory path where SSL certificates are stored. This path is referenced by Nginx.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"/certs"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CERTIFICATE_NAME"}),(0,r.jsx)(n.br,{}),"\n","The file name of your SSL certificate.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"my_certificate.pem"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CERTIFICATE_KEY"}),(0,r.jsx)(n.br,{}),"\n","The file name of the SSL certificate's private key.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"my_certificate_key.pem"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"4-database-configuration",children:"4. Database Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"MYSQL_SSL_ENABLED"}),(0,r.jsx)(n.br,{}),"\n","Determines whether SSL is enabled for the MySQL connection. Set this to ",(0,r.jsx)(n.code,{children:"true"})," in production environment.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"false"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_USERNAME"}),(0,r.jsx)(n.br,{}),"\n","The default is often ",(0,r.jsx)(n.code,{children:"root"}),". In production, a non-root user with appropriate permissions is recommended.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"root"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_PASSWORD"}),(0,r.jsx)(n.br,{}),"\n","The password associated with the MySQL username.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"root"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_PORT"}),(0,r.jsx)(n.br,{}),"\n","The port used for MySQL communication. The default MySQL port is ",(0,r.jsx)(n.code,{children:"3306"}),", but this may differ based on your environment.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3306"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_NAME"}),(0,r.jsx)(n.br,{}),"\n","The name of the MySQL database used by Tombolo.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"tombolo"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_HOSTNAME"}),(0,r.jsx)(n.br,{}),"\n","The host of the MySQL database, typically ",(0,r.jsx)(n.code,{children:"localhost"})," for local setups. For Docker, use the service name ",(0,r.jsx)(n.code,{children:"mysql_db"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"localhost"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"5-authentication-configuration",children:"5. Authentication Configuration"}),(0,r.jsxs)(n.p,{children:["Tombolo does not include built-in authentication. You can choose to use ",(0,r.jsx)(n.strong,{children:"Auth Service"})," or ",(0,r.jsx)(n.strong,{children:"Azure AD"}),"."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Auth Service"})," is an authentication service developed by the LNRS Solution Labs Team. For setup information, please visit the ",(0,r.jsx)(n.a,{href:"https://github.com/hpcc-systems/Auth-Service",children:"Auth Service repository"}),"."]}),(0,r.jsxs)(n.p,{children:["The preferred method, however, is ",(0,r.jsx)(n.strong,{children:"Microsoft Entra ID"})," (formerly Azure Active Directory). The first step to using Microsoft Entra ID for authentication is to register an application in Azure. Once registered, you will receive a Client ID and Tenant ID, which are crucial for this to work. You can also configure a redirect URI, which is a URL to be routed to when a user is authenticated."]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"APP_AUTH_METHOD"}),(0,r.jsx)(n.br,{}),"\n","Defines the method of authentication. Available options: ",(0,r.jsx)(n.code,{children:"auth_service"})," or ",(0,r.jsx)(n.code,{children:"azure_ad"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"AUTH_SERVICE_URL"}),(0,r.jsx)(n.br,{}),"\n","The URL of the Auth Service. Ignore if using Microsoft Entra ID for authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://auth-service-url.com"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"AUTHSERVICE_TOMBOLO_CLIENT_ID"}),(0,r.jsx)(n.br,{}),"\n","The client ID for Tombolo within the Auth Service. Ignore if using Microsoft Entra ID for authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your_client_id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"TENANT_ID"}),(0,r.jsx)(n.br,{}),"\n","The tenant ID from Azure AD. You obtain this after registering your application in Azure AD.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your_tenant_id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CLIENT_ID"}),(0,r.jsx)(n.br,{}),"\n","The client ID from Azure AD. You obtain this after registering your application in Azure AD.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your_client_id"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"6-email-configuration",children:"6. Email Configuration"}),(0,r.jsx)(n.p,{children:"Tombolo does not include a built-in SMTP server. To enable email functionality (e.g., notifications), you will need to configure an external SMTP server:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"EMAIL_SMTP_HOST"}),(0,r.jsx)(n.br,{}),"\n","The SMTP host for sending emails.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"smtp.mailserver.com"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"EMAIL_PORT"}),(0,r.jsx)(n.br,{}),"\n","The port number for the SMTP server.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"25"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"EMAIL_SENDER"}),(0,r.jsx)(n.br,{}),"\n","The default sender email address.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"donotreply@tombolo.com"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"7-security-configuration",children:"7. Security Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"ENCRYPTION_KEY"}),(0,r.jsx)(n.br,{}),"\n","This key is used for hashing, encryption, and decryption operations within Tombolo. You can generate this key using OpenSSL:",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.code,{children:"openssl rand -base64 32"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"API_KEY_DURATION"}),(0,r.jsx)(n.br,{}),"\n","The duration (in days) for which an API key remains valid. This key is used for accessing Tombolo data from external sources. The maximum duration is 365 days, and the default is 28 days.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"180"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"8-logging-configuration",children:"8. Logging Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"NODE_LOG_LEVEL"}),(0,r.jsx)(n.br,{}),"\n","The logging level for the Node.js server. Options include ",(0,r.jsx)(n.code,{children:"error"}),", ",(0,r.jsx)(n.code,{children:"warn"}),", ",(0,r.jsx)(n.code,{children:"info"}),", ",(0,r.jsx)(n.code,{children:"http"}),", ",(0,r.jsx)(n.code,{children:"verbose"}),", ",(0,r.jsx)(n.code,{children:"debug"}),", and ",(0,r.jsx)(n.code,{children:"silly"}),". For more information on configuring logging with Winston, refer to the ",(0,r.jsx)(n.a,{href:"https://github.com/winstonjs/winston",children:"Winston Configuration"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http"})]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"9-integration-specific-configuration",children:"9. Integration-Specific Configuration"}),(0,r.jsx)(n.p,{children:"If you have any integrations enabled and they have environment variables, they can be added to this configuration file as well. There is a placeholder section for those integration-specific variables. Please add them there."})]})}),"\n",(0,r.jsx)("div",{class:"custom_details_component",children:(0,r.jsxs)(i,{children:[(0,r.jsx)("summary",{children:(0,r.jsx)(n.h2,{id:"client-environment-variables",children:"Client Environment Variables"})}),(0,r.jsx)(n.h3,{id:"development-configuration",children:"Development Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"GENERATE_SOURCEMAP"}),(0,r.jsx)(n.br,{}),"\n","Controls whether source maps should be generated. This is mainly used to suppress certain logs generated by Ant Design (antd). The value should be set to ",(0,r.jsx)(n.code,{children:"false"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"false"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"PORT"}),(0,r.jsx)(n.br,{}),"\n","Defines the port on which the front-end React application will run.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3001"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_PROXY_URL"}),(0,r.jsx)(n.br,{}),"\n","Specifies the proxy URL for the React application, typically used to proxy API requests during development.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://localhost:3000"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.h3,{id:"ldap-configuration",children:"LDAP Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_LDAP_SEARCH_ENABLED"}),(0,r.jsx)(n.br,{}),"\n","Enables or disables LDAP search functionality. Set this to ",(0,r.jsx)(n.code,{children:"false"})," as LDAP is not currently used.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"false"})]}),"\n"]}),(0,r.jsx)(n.h3,{id:"authentication-configuration",children:"Authentication Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_APP_AUTH_METHOD"}),(0,r.jsx)(n.br,{}),"\n","Specifies the authentication method to be used by the application. Available options are ",(0,r.jsx)(n.code,{children:"auth_service"})," and ",(0,r.jsx)(n.code,{children:"azure_ad"}),". For more details, refer to the ",(0,r.jsx)(n.code,{children:"APP_AUTH_METHOD"})," variable in the server configuration.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"auth_service"})]}),"\n"]}),(0,r.jsx)(n.h3,{id:"azure-configuration-only-if-using-azure-ad-for-authentication",children:"Azure Configuration (only if using Azure AD for authentication)"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_CLIENT_ID"}),(0,r.jsx)(n.br,{}),"\n","The client ID for Azure AD authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your-azure-client-id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_TENANT_ID"}),(0,r.jsx)(n.br,{}),"\n","The tenant ID for Azure AD authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your-azure-tenant-id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_REDIRECT_URI"}),(0,r.jsx)(n.br,{}),"\n","The URL Azure will redirect the user to after successful authentication. This must also be configured in Azure when registering the app.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://localhost:3001/auth/callback"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_API_TOKEN_SCOPE"}),(0,r.jsx)(n.br,{}),"\n","The API token scope for Azure AD authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"api://your-api-id/.default"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.h3,{id:"app-version",children:"App Version"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_VERSION"}),(0,r.jsx)(n.br,{}),"\n","The version of the application, typically derived from the package version.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"$npm_package_version"})]}),"\n"]})]})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>l});var r=i(6540);const s={},o=r.createContext(s);function t(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.0627e92f.js b/assets/js/main.0627e92f.js deleted file mode 100644 index 960e69b02..000000000 --- a/assets/js/main.0627e92f.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.0627e92f.js.LICENSE.txt */ -(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[792],{8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(6540);var r=n(3259),o=n.n(r),a=n(4054);const i={"04dfaaf1":[()=>n.e(888).then(n.bind(n,4221)),"@site/docs/User-Guides/assets.md",4221],"0591830a":[()=>n.e(566).then(n.bind(n,4097)),"@site/src/pages/release-notes.js",4097],"14eb3368":[()=>Promise.all([n.e(869),n.e(969)]).then(n.bind(n,7247)),"@theme/DocCategoryGeneratedIndexPage",7247],17896441:[()=>Promise.all([n.e(869),n.e(401)]).then(n.bind(n,6041)),"@theme/DocItem",6041],"1fb83efa":[()=>n.e(91).then(n.bind(n,900)),"@site/docs/Install/Docker.md",900],"2bea854b":[()=>n.e(50).then(n.bind(n,141)),"@site/docs/User-Guides/user-interface.md",141],"31ea1fcb":[()=>n.e(887).then(n.bind(n,5449)),"@site/docs/User-Guides/Wildcards.md",5449],"3b352d9b":[()=>n.e(291).then(n.bind(n,6160)),"@site/docs/Developer/Integrations.md",6160],"5a7219e3":[()=>n.e(388).then(n.bind(n,8212)),"@site/docs/User-Guides/application.md",8212],"5e95c892":[()=>n.e(647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"70a23bf1":[()=>n.e(671).then(n.t.bind(n,4927,19)),"~docs/default/category-tombolodocs-tutorialsidebar-category-developer-resources-654.json",4927],"75b304dd":[()=>n.e(542).then(n.t.bind(n,9193,19)),"~docs/default/category-tombolodocs-tutorialsidebar-category-installation-configuration-4ae.json",9193],"7d2f855b":[()=>n.e(362).then(n.bind(n,8458)),"@site/docs/User-Guides/monitoring.md",8458],"922dea36":[()=>n.e(449).then(n.bind(n,6587)),"@site/docs/User-Guides/github.md",6587],"935f2afb":[()=>n.e(581).then(n.t.bind(n,5610,19)),"~docs/default/version-current-metadata-prop-751.json",5610],"9599dce5":[()=>n.e(794).then(n.bind(n,933)),"@site/docs/User-Guides/dashboards.md",933],"9743de0d":[()=>n.e(609).then(n.t.bind(n,1966,19)),"/home/runner/work/Tombolo/Tombolo/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",1966],a38188e4:[()=>n.e(153).then(n.t.bind(n,1329,19)),"~docs/default/category-tombolodocs-tutorialsidebar-category-user-guides-9f7.json",1329],a5ab87cc:[()=>n.e(365).then(n.bind(n,8926)),"@site/docs/Install/Env_config.md",8926],a7bd4aaa:[()=>n.e(98).then(n.bind(n,4532)),"@theme/DocVersionRoot",4532],a88f5f7a:[()=>n.e(55).then(n.bind(n,8044)),"@site/docs/User-Guides/cluster.md",8044],a94703ab:[()=>Promise.all([n.e(869),n.e(48)]).then(n.bind(n,2559)),"@theme/DocRoot",2559],aac7ac27:[()=>n.e(390).then(n.bind(n,8216)),"@site/docs/Install/Uninstall.md",8216],b5a65df0:[()=>n.e(880).then(n.bind(n,9096)),"@site/docs/User-Guides/workflows.md",9096],c4f5d8e4:[()=>Promise.all([n.e(869),n.e(634)]).then(n.bind(n,3200)),"@site/src/pages/index.js",3200],ce25515c:[()=>n.e(110).then(n.t.bind(n,4061,19)),"/home/runner/work/Tombolo/Tombolo/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",4061],df26ae7c:[()=>n.e(17).then(n.bind(n,8896)),"@site/src/pages/faq.js",8896],e68aaeaf:[()=>n.e(832).then(n.bind(n,5765)),"@site/docs/Install/Local.md",5765],f078caf9:[()=>n.e(127).then(n.bind(n,8552)),"@site/docs/User-Guides/teams-webhook.md",8552]};var l=n(4848);function s(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,l.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,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.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,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(6921),c=n(3102);function d(e,t){if("*"===e)return o()({loading:s,loader:()=>n.e(237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,l.jsx)(c.W,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,u.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]))})),o().Map({loading:s,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)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 a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,l.jsx)(c.W,{value:i,children:(0,l.jsx)(a,{...o,...n})})}})}const p=[{path:"/Tombolo/",component:d("/Tombolo/","d51"),exact:!0},{path:"/Tombolo/faq",component:d("/Tombolo/faq","fbc"),exact:!0},{path:"/Tombolo/release-notes",component:d("/Tombolo/release-notes","e57"),exact:!0},{path:"/Tombolo/docs",component:d("/Tombolo/docs","d5f"),routes:[{path:"/Tombolo/docs",component:d("/Tombolo/docs","1ed"),routes:[{path:"/Tombolo/docs",component:d("/Tombolo/docs","1fa"),routes:[{path:"/Tombolo/docs/category/developer-resources",component:d("/Tombolo/docs/category/developer-resources","296"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/category/installation--configuration",component:d("/Tombolo/docs/category/installation--configuration","e65"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/category/user-guides",component:d("/Tombolo/docs/category/user-guides","eb9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/Developer/Integrations",component:d("/Tombolo/docs/Developer/Integrations","3c2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/Install/Docker",component:d("/Tombolo/docs/Install/Docker","d53"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/Install/Env_config",component:d("/Tombolo/docs/Install/Env_config","fa3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/Install/Local",component:d("/Tombolo/docs/Install/Local","213"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/Install/Uninstall",component:d("/Tombolo/docs/Install/Uninstall","e22"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/application",component:d("/Tombolo/docs/User-Guides/application","2b5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/assets",component:d("/Tombolo/docs/User-Guides/assets","5dd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/cluster",component:d("/Tombolo/docs/User-Guides/cluster","64c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/dashboards",component:d("/Tombolo/docs/User-Guides/dashboards","21c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/github",component:d("/Tombolo/docs/User-Guides/github","a07"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/monitoring",component:d("/Tombolo/docs/User-Guides/monitoring","7dd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/teams-webhook",component:d("/Tombolo/docs/User-Guides/teams-webhook","0f8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/user-interface",component:d("/Tombolo/docs/User-Guides/user-interface","4ca"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/Wildcards",component:d("/Tombolo/docs/User-Guides/Wildcards","8fe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/workflows",component:d("/Tombolo/docs/User-Guides/workflows","b3e"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"*",component:d("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>i});var r=n(6540),o=n(4848);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},8536:(e,t,n)=>{"use strict";var r=n(6540),o=n(5338),a=n(4625),i=n(545),l=n(8193);const s=[n(119),n(6134),n(6294),n(1043)];var u=n(8328),c=n(6347),d=n(2831),p=n(4848);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var m=n(5260),g=n(4586),h=n(6025),y=n(6342),b=n(1003),v=n(2131),w=n(4090),k=n(2967),x=n(440),S=n(1463);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.A)(),r=(0,v.o)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(m.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(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,c.zy)();return e+(0,x.applyTrailingSlash)((0,h.A)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,p.jsxs)(m.A,{children:[(0,p.jsx)("meta",{property:"og:url",content:o}),(0,p.jsx)("link",{rel:"canonical",href:o})]})}function T(){const{i18n:{currentLocale:e}}=(0,g.A)(),{metadata:t,image:n}=(0,y.p)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(m.A,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.w})]}),n&&(0,p.jsx)(b.be,{image:n}),(0,p.jsx)(C,{}),(0,p.jsx)(E,{}),(0,p.jsx)(S.A,{tag:k.Cy,locale:e}),(0,p.jsx)(m.A,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const _=new Map;function A(e){if(_.has(e.pathname))return{...e,pathname:_.get(e.pathname)};if((0,d.u)(u.A,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return _.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return _.set(e.pathname,t),{...e,pathname:t}}var j=n(6125),N=n(6988),L=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()=>o.forEach((e=>e?.()))}const P=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,L.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)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 O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class D 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}),O(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,p.jsx)(P,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(c.qh,{location:t,render:()=>e})})}}const I=D,F="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function U(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 = '${F}';\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(/{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 o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.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 Y=n(6921);const Z=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Z.has(e))(e))return!1;Z.add(e);const t=(0,d.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,Y.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),O(e))},te=Object.freeze(ee),ne=Boolean(!0);if(l.A.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(i.vd,{children:(0,p.jsx)(a.Kd,{children:(0,p.jsx)(V,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},l=()=>{if(ne)r.startTransition((()=>{o.hydrateRoot(e,t,{onRecoverableError:n})}));else{const a=o.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{a.render(t)}))}};O(window.location.pathname).then(l)}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(6540),o=n(4784);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/Tombolo/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/Tombolo/docs","mainDocId":"Install/Local","docs":[{"id":"Developer/Integrations","path":"/Tombolo/docs/Developer/Integrations","sidebar":"tutorialSidebar"},{"id":"Install/Docker","path":"/Tombolo/docs/Install/Docker","sidebar":"tutorialSidebar"},{"id":"Install/Env_config","path":"/Tombolo/docs/Install/Env_config","sidebar":"tutorialSidebar"},{"id":"Install/Local","path":"/Tombolo/docs/Install/Local","sidebar":"tutorialSidebar"},{"id":"Install/Uninstall","path":"/Tombolo/docs/Install/Uninstall","sidebar":"tutorialSidebar"},{"id":"User-Guides/application","path":"/Tombolo/docs/User-Guides/application","sidebar":"tutorialSidebar"},{"id":"User-Guides/assets","path":"/Tombolo/docs/User-Guides/assets","sidebar":"tutorialSidebar"},{"id":"User-Guides/cluster","path":"/Tombolo/docs/User-Guides/cluster","sidebar":"tutorialSidebar"},{"id":"User-Guides/dashboards","path":"/Tombolo/docs/User-Guides/dashboards","sidebar":"tutorialSidebar"},{"id":"User-Guides/github","path":"/Tombolo/docs/User-Guides/github","sidebar":"tutorialSidebar"},{"id":"User-Guides/monitoring","path":"/Tombolo/docs/User-Guides/monitoring","sidebar":"tutorialSidebar"},{"id":"User-Guides/teams-webhook","path":"/Tombolo/docs/User-Guides/teams-webhook","sidebar":"tutorialSidebar"},{"id":"User-Guides/user-interface","path":"/Tombolo/docs/User-Guides/user-interface","sidebar":"tutorialSidebar"},{"id":"User-Guides/Wildcards","path":"/Tombolo/docs/User-Guides/Wildcards","sidebar":"tutorialSidebar"},{"id":"User-Guides/workflows","path":"/Tombolo/docs/User-Guides/workflows","sidebar":"tutorialSidebar"},{"id":"/category/installation--configuration","path":"/Tombolo/docs/category/installation--configuration","sidebar":"tutorialSidebar"},{"id":"/category/user-guides","path":"/Tombolo/docs/category/user-guides","sidebar":"tutorialSidebar"},{"id":"/category/developer-resources","path":"/Tombolo/docs/category/developer-resources","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/Tombolo/docs/category/installation--configuration","label":"Installation & Configuration"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en","fr"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"},"fr":{"label":"Fran\xe7ais","direction":"ltr","htmlLang":"fr","calendar":"gregory","path":"fr"}}}');var l=n(2654);const s=JSON.parse('{"docusaurusVersion":"3.2.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.2.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.2.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.2.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.2.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.2.1"}}}');var u=n(4848);const c={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},d=r.createContext(c);function p(e){let{children:t}=e;return(0,u.jsx)(d.Provider,{value:c,children:t})}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>g});var r=n(6540),o=n(8193),a=n(5260),i=n(440),l=n(781),s=n(3102),u=n(4848);function c(e){let{error:t,tryAgain:n}=e;return(0,u.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,u.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,u.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,u.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,u.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,u.jsx)(s.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)(p,{children:(0,u.jsxs)(g,{fallback:()=>(0,u.jsx)(c,{error:t,tryAgain:n}),children:[(0,u.jsx)(a.A,{children:(0,u.jsx)("title",{children:"Page Error"})}),(0,u.jsx)(l.A,{children:(0,u.jsx)(c,{error:t,tryAgain:n})})]})})}const m=e=>(0,u.jsx)(f,{...e});class g extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.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:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={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:()=>a});n(6540);var r=n(545),o=n(4848);function a(e){return(0,o.jsx)(r.mg,{...e})}},8774:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(6540),o=n(4625),a=n(440),i=n(4586),l=n(6654),s=n(8193),u=n(3427),c=n(6025),d=n(4848);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.A)(),{withBaseUrl:k}=(0,c.h)(),x=(0,u.A)(),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=p||f;const C=(0,l.A)(E),T=E?.replace("pathname://","");let _=void 0!==T?(A=T,y&&(e=>e.startsWith("/"))(A)?k(A):A):void 0;var A;_&&C&&(_=(0,a.applyTrailingSlash)(_,{trailingSlash:v,baseUrl:w}));const j=(0,r.useRef)(!1),N=n?o.k2:o.N_,L=s.A.canUseIntersectionObserver,R=(0,r.useRef)(),P=()=>{j.current||null==_||(window.docusaurus.preload(_),j.current=!0)};(0,r.useEffect)((()=>(!L&&C&&null!=_&&window.docusaurus.prefetch(_),()=>{L&&R.current&&R.current.disconnect()})),[R,_,L,C]);const O=_?.startsWith("#")??!1,D=!b.target||"_self"===b.target,I=!_||!C||!D||O;return h||!O&&I||x.collectLink(_),b.id&&x.collectAnchor(b.id),I?(0,d.jsx)("a",{ref:S,href:_,...E&&!C&&{target:"_blank",rel:"noopener noreferrer"},...b}):(0,d.jsx)(N,{...b,onMouseEnter:P,onTouchStart:P,innerRef:e=>{S.current=e,L&&e&&C&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=_&&window.docusaurus.prefetch(_))}))})),R.current.observe(e))},to:_,...n&&{isActive:g,activeClassName:m}})}const f=r.forwardRef(p)},418:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>null},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>u,T:()=>s});var r=n(6540),o=n(4848);function a(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 l(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 s(e,t){let{message:n,id:r}=e;return a(l({message:n,id:r}),t)}function u(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=l({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(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 o(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>o,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{A:()=>l,h:()=>i});var r=n(6540),o=n(4586),a=n(6654);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.A)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.z)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(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 o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6988);function a(){return(0,r.useContext)(o.o)}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6125);function a(){return(0,r.useContext)(o.o)}},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540);const o=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const l=o?`${o}.${a}`:a;r(i)?e(i,l):t[l]=i}))}(e),t}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>a});var r=n(6540),o=n(4848);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),l=(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,o.jsx)(a.Provider,{value:l,children:t})}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>g,vT:()=>p,Gy:()=>c,HW:()=>h,ht:()=>d,r7:()=>m,jh:()=>f});var r=n(6347),o=n(4586),a=n(7065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>{try{return function(e,t,n){void 0===t&&(t=a.W),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("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 p(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const o=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})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&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 a}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.zy)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(5947),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},6134:(e,t,n)=>{"use strict";n.r(t);var r=n(1765),o=n(4784);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(9700),n(8692)(`./prism-${e}`)})),delete globalThis.Prism}(r.My)},1107:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(4164),o=n(1312),a=n(6342),i=n(8774),l=n(3427);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var u=n(4848);function c(e){let{as:t,id:n,...c}=e;const d=(0,l.A)(),{navbar:{hideOnScroll:p}}=(0,a.p)();if("h1"===t||!n)return(0,u.jsx)(t,{...c,id:void 0});d.collectAnchor(n);const f=(0,o.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,u.jsxs)(t,{...c,className:(0,r.A)("anchor",p?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,u.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:()=>a});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(4848);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.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"})})}},781:(e,t,n)=>{"use strict";n.d(t,{A:()=>ft});var r=n(6540),o=n(4164),a=n(7489),i=n(1003),l=n(6347),s=n(1312),u=n(5062),c=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,l.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,u.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,s.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 g(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,c.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,c.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(7559),y=n(4090);const b={skipToContent:"skipToContent_fXgn"};function v(){return(0,c.jsx)(g,{className:b.skipToContent})}var w=n(6342),k=n(5041);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,c.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,c.jsx)("g",{stroke:r,strokeWidth:o,children:(0,c.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,c.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.A)("clean-btn close",S.closeButton,e.className),children:(0,c.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const C={content:"content_knG7"};function T(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,c.jsx)("div",{...e,className:(0,o.A)(C.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const _={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.Mj)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,c.jsxs)("div",{className:_.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,c.jsx)("div",{className:_.announcementBarPlaceholder}),(0,c.jsx)(T,{className:_.announcementBarContent}),a&&(0,c.jsx)(E,{onClick:n,className:_.announcementBarClose})]})}var j=n(9876),N=n(3104);var L=n(9532),R=n(5600);const P=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,j.M)(),t=(0,R.YL)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,L.ZC)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,c.jsx)(P.Provider,{value:n,children:t})}function D(e){if(e.component){const t=e.component;return(0,c.jsx)(t,{...e.props})}}function I(){const e=(0,r.useContext)(P);if(!e)throw new L.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,R.YL)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:D(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=I();return(0,c.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,c.jsxs)("div",{className:(0,o.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(5293),z=n(2303);function U(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.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 B(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.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 $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function G(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,z.A)(),l=(0,s.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,s.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,s.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,c.jsx)("div",{className:(0,o.A)($.toggle,t),children:(0,c.jsxs)("button",{className:(0,o.A)("clean-btn",$.toggleButton,!i&&$.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite",children:[(0,c.jsx)(U,{className:(0,o.A)($.toggleIcon,$.lightToggleIcon)}),(0,c.jsx)(B,{className:(0,o.A)($.toggleIcon,$.darkToggleIcon)})]})})}const q=r.memo(G),H={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){let{className:t}=e;const n=(0,w.p)().navbar.style,r=(0,w.p)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,M.G)();return r?null:(0,c.jsx)(q,{className:t,buttonClassName:"dark"===n?H.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var V=n(3465);function Q(){return(0,c.jsx)(V.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,j.M)();return(0,c.jsx)("button",{type:"button","aria-label":(0,s.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,c.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,c.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,c.jsx)(Q,{}),(0,c.jsx)(W,{className:"margin-right--md"}),(0,c.jsx)(K,{})]})}var Z=n(8774),X=n(6025),J=n(6654);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3186);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:l,prependBaseUrlToHref:s,...u}=e;const d=(0,X.A)(r),p=(0,X.A)(t),f=(0,X.A)(o,{forcePrependBaseUrl:!0}),m=a&&o&&!(0,J.A)(o),g=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,c.jsxs)(c.Fragment,{children:[a,m&&(0,c.jsx)(te.A,{...l&&{width:12,height:12}})]})};return o?(0,c.jsx)(Z.A,{href:s?f:o,...u,...g}):(0,c.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...u,...g})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,c.jsx)(ne,{className:(0,o.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,c.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,c.jsx)("li",{className:"menu__list-item",children:(0,c.jsx)(ne,{className:(0,o.A)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,c.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(1422),le=n(9169),se=n(4586);const ue={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...l}=e;const s=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{s.current&&!s.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)}}),[s]),(0,c.jsxs)("div",{ref:s,className:(0,o.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u}),children:[(0,c.jsx)(ne,{"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,o.A)("navbar__link",a),...l,onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))},children:l.children??l.label}),(0,c.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Ce,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:i,...s}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.A)(),{pathname:t}=(0,l.zy)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),(0,c.jsxs)("li",{className:(0,o.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,c.jsx)(ne,{role:"button",className:(0,o.A)(ue.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...s,onClick:e=>{e.preventDefault(),f()},children:s.children??s.label}),(0,c.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(Ce,{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,c.jsx)(r,{...n})}var me=n(2131);function ge(e){let{width:t=20,height:n=20,...r}=e;return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,c.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 he="iconLanguage_nlXk";var ye=n(418);const be={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,c.jsx)("div",{className:(0,o.A)(n,be.navbarSearchContainer),children:t})}var we=n(4070),ke=n(1754);var xe=n(5597);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.A)(),p=(0,me.o)(),{search:f,hash:m}=(0,l.zy)(),g=[...n,...u.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${o}`;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],h=t?(0,s.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,c.jsx)(fe,{...a,mobile:t,label:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(ge,{className:he}),h]}),items:g})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,c.jsx)(ve,{className:n,children:(0,c.jsx)(ye.A,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,c.jsx)(i,{className:(0,o.A)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.zK)(r),i=(0,ke.QB)(t,r),l=a?.path===i?.path;return null===i||i.unlisted&&!l?null:(0,c.jsx)(ae,{exact:!0,...o,isActive:()=>l||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.zK)(r),i=(0,ke.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,c.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,ke.Vd)(r)[0],i=t??a.label,l=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,c.jsx)(ae,{...o,label:i,to:l})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:u,hash:d}=(0,l.zy)(),p=(0,we.zK)(n),f=(0,we.jh)(n),{savePreferredVersionName:m}=(0,xe.g1)(n),g=[...o,...f.map((e=>{const t=p.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...a],h=(0,ke.Vd)(n)[0],y=t&&g.length>1?(0,s.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,b=t&&g.length>1?void 0:Se(h).path;return g.length<=1?(0,c.jsx)(ae,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,c.jsx)(fe,{...i,mobile:t,label:y,to:b,items:g,isActive:r?()=>!1:void 0})}};function Ce(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ee[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,c.jsx)(o,{...n})}function Te(){const e=(0,j.M)(),t=(0,w.p)().navbar.items;return(0,c.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Ce,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function _e(e){return(0,c.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,c.jsx)(s.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 Ae(){const e=0===(0,w.p)().navbar.items.length,t=I();return(0,c.jsxs)(c.Fragment,{children:[!e&&(0,c.jsx)(_e,{onClick:()=>t.hide()}),t.content]})}function je(){const e=(0,j.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,c.jsx)(F,{header:(0,c.jsx)(Y,{}),primaryMenu:(0,c.jsx)(Te,{}),secondaryMenu:(0,c.jsx)(Ae,{})}):null}const Ne={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Le(e){return(0,c.jsx)("div",{role:"presentation",...e,className:(0,o.A)("navbar-sidebar__backdrop",e.className)})}function Re(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.p)(),i=(0,j.M)(),{navbarRef:l,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,N.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,c.jsxs)("nav",{ref:l,"aria-label":(0,s.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.A)("navbar","navbar--fixed-top",n&&[Ne.navbarHideable,!d&&Ne.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,c.jsx)(Le,{onClick:i.toggle}),(0,c.jsx)(je,{})]})}var Pe=n(440);const Oe={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function De(e){return(0,c.jsx)("button",{type:"button",...e,children:(0,c.jsx)(s.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 Ie(e){let{error:t}=e;const n=(0,Pe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:Oe.errorBoundaryError,children:n})}class Fe extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Me="right";function ze(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,c.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,c.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Ue(){const{toggle:e,shown:t}=(0,j.M)();return(0,c.jsx)("button",{onClick:e,"aria-label":(0,s.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,c.jsx)(ze,{})})}const Be={colorModeToggle:"colorModeToggle_DEke"};function $e(e){let{items:t}=e;return(0,c.jsx)(c.Fragment,{children:t.map(((e,t)=>(0,c.jsx)(Fe,{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,c.jsx)(Ce,{...e})},t)))})}function Ge(e){let{left:t,right:n}=e;return(0,c.jsxs)("div",{className:"navbar__inner",children:[(0,c.jsx)("div",{className:"navbar__items",children:t}),(0,c.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function qe(){const e=(0,j.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Me)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,c.jsx)(Ge,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)(Ue,{}),(0,c.jsx)(Q,{}),(0,c.jsx)($e,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)($e,{items:r}),(0,c.jsx)(W,{className:Be.colorModeToggle}),!o&&(0,c.jsx)(ve,{children:(0,c.jsx)(ye.A,{})})]})})}function He(){return(0,c.jsx)(Re,{children:(0,c.jsx)(qe,{})})}function We(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,l=(0,X.A)(n),s=(0,X.A)(r,{forcePrependBaseUrl:!0});return(0,c.jsxs)(Z.A,{className:"footer__link-item",...r?{href:a?s:r}:{to:l},...i,children:[o,r&&!(0,J.A)(r)&&(0,c.jsx)(te.A,{})]})}function Ve(e){let{item:t}=e;return t.html?(0,c.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)("li",{className:"footer__item",children:(0,c.jsx)(We,{item:t})},t.href??t.to)}function Qe(e){let{column:t}=e;return(0,c.jsxs)("div",{className:"col footer__col",children:[(0,c.jsx)("div",{className:"footer__title",children:t.title}),(0,c.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,c.jsx)(Ve,{item:e},t)))})]})}function Ke(e){let{columns:t}=e;return(0,c.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,c.jsx)(Qe,{column:e},t)))})}function Ye(){return(0,c.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ze(e){let{item:t}=e;return t.html?(0,c.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)(We,{item:t})}function Xe(e){let{links:t}=e;return(0,c.jsx)("div",{className:"footer__links text--center",children:(0,c.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(Ze,{item:e}),t.length!==n+1&&(0,c.jsx)(Ye,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,c.jsx)(Ke,{columns:t}):(0,c.jsx)(Xe,{links:t})}var et=n(1122);const tt={footerLogoLink:"footerLogoLink_BH7S"};function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.h)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,c.jsx)(et.A,{className:(0,o.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,c.jsx)(Z.A,{href:t.href,className:tt.footerLogoLink,target:t.target,children:(0,c.jsx)(nt,{logo:t})}):(0,c.jsx)(nt,{logo:t})}function ot(e){let{copyright:t}=e;return(0,c.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,c.jsx)("footer",{className:(0,o.A)("footer",{"footer--dark":"dark"===t}),children:(0,c.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,c.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,c.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function it(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,c.jsx)(at,{style:o,links:n&&n.length>0&&(0,c.jsx)(Je,{links:n}),logo:r&&(0,c.jsx)(rt,{logo:r}),copyright:t&&(0,c.jsx)(ot,{copyright:t})})}const lt=r.memo(it),st=(0,L.fM)([M.a,k.oq,N.Tv,xe.VQ,i.Jx,function(e){let{children:t}=e;return(0,c.jsx)(R.y_,{children:(0,c.jsx)(j.e,{children:(0,c.jsx)(O,{children:t})})})}]);function ut(e){let{children:t}=e;return(0,c.jsx)(st,{children:t})}var ct=n(1107);function dt(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)("main",{className:"container margin-vert--xl",children:(0,c.jsx)("div",{className:"row",children:(0,c.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,c.jsx)(ct.A,{as:"h1",className:"hero__title",children:(0,c.jsx)(s.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,c.jsx)("div",{className:"margin-vert--lg",children:(0,c.jsx)(De,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(Ie,{error:t})})]})})})}const pt={mainWrapper:"mainWrapper_z2l0"};function ft(e){const{children:t,noFooter:n,wrapperClassName:r,title:l,description:s}=e;return(0,y.J)(),(0,c.jsxs)(ut,{children:[(0,c.jsx)(i.be,{title:l,description:s}),(0,c.jsx)(v,{}),(0,c.jsx)(A,{}),(0,c.jsx)(He,{}),(0,c.jsx)("div",{id:d,className:(0,o.A)(h.G.wrapper.main,pt.mainWrapper,r),children:(0,c.jsx)(a.A,{fallback:e=>(0,c.jsx)(dt,{...e}),children:t})}),!n&&(0,c.jsx)(lt,{})]})}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(8774),o=n(6025),a=n(4586),i=n(6342),l=n(1122),s=n(4848);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.A)(t.src),dark:(0,o.A)(t.srcDark||t.src)},i=(0,s.jsx)(l.A,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,s.jsx)("div",{className:r,children:i}):i}function c(e){const{siteConfig:{title:t}}=(0,a.A)(),{navbar:{title:n,logo:l}}=(0,i.p)(),{imageClassName:c,titleClassName:d,...p}=e,f=(0,o.A)(l?.href||"/"),m=n?"":t,g=l?.alt??m;return(0,s.jsxs)(r.A,{to:f,...p,...l?.target&&{target:l.target},children:[l&&(0,s.jsx)(u,{logo:l,alt:g,imageClassName:c}),null!=n&&(0,s.jsx)("b",{className:d,children:n})]})}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);var r=n(5260),o=n(4848);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.A,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},1122:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});var r=n(6540),o=n(4164),a=n(2303),i=n(5293);const l={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var s=n(4848);function u(e){let{className:t,children:n}=e;const u=(0,a.A)(),{colorMode:c}=(0,i.G)();return(0,s.jsx)(s.Fragment,{children:(u?"dark"===c?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.A)(t,l.themedComponent,l[`themedComponent--${e}`])});return(0,s.jsx)(r.Fragment,{children:a},e)}))})}function c(e){const{sources:t,className:n,alt:r,...o}=e;return(0,s.jsx)(u,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,s.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>y,u:()=>u});var r=n(6540),o=n(8193),a=n(205),i=n(3109),l=n(4848);const s="ease-in-out";function u(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?c: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:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.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 ${o?.easing??s}`,height:`${t}px`}}function l(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function m(e){if(!o.A.canUseDOM)return e?c:d}function g(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:s,disableSSRStyle:u}=e;const c=(0,r.useRef)(null);return f({collapsibleRef:c,collapsed:n,animation:a}),(0,l.jsx)(t,{ref:c,style:u?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(c.current,n),i?.(n))},className:s,children:o})}function h(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[s,u]=(0,r.useState)(t);return(0,a.A)((()=>{t||i(!0)}),[t]),(0,a.A)((()=>{o&&u(t)}),[o,t]),o?(0,l.jsx)(g,{...n,collapsed:s}):null}function y(e){let{lazy:t,...n}=e;const r=t?h:g;return(0,l.jsx)(r,{...n})}},5041:(e,t,n)=>{"use strict";n.d(t,{Mj:()=>g,oq:()=>m});var r=n(6540),o=n(2303),a=n(9466),i=n(9532),l=n(6342),s=n(4848);const u=(0,a.Wf)("docusaurus.announcement.dismiss"),c=(0,a.Wf)("docusaurus.announcement.id"),d=()=>"true"===u.get(),p=e=>u.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.p)(),t=(0,o.A)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,s.jsx)(f.Provider,{value:n,children:t})}function g(){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:()=>h});var r=n(6540),o=n(8193),a=n(9532),i=n(9466),l=n(6342),s=n(4848);const u=r.createContext(void 0),c="theme",d=(0,i.Wf)(c),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>o.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),g=e=>{d.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.p)(),[o,a]=(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:o=!0}=r;t?(a(t),o&&g(t)):(a(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(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(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||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,s.jsx)(u.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(u);if(null==e)throw new a.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,g1:()=>v});var r=n(6540),o=n(4070),a=n(7065),i=n(6342),l=n(1754),s=n(9532),u=n(9466),c=n(4848);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,u.Wf)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.Wf)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.Wf)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function g(){const e=(0,o.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(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,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=g();return(0,c.jsx)(m.Provider,{value:n,children:t})}function y(e){let{children:t}=e;return l.C5?(0,c.jsx)(h,{children:t}):(0,c.jsx)(c.Fragment,{children:t})}function b(){const e=(0,r.useContext)(m);if(!e)throw new s.dV("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.W);const t=(0,o.ht)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},6588:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,t:()=>u});var r=n(6540),o=n(9532),a=n(4848);const i=Symbol("EmptyContext"),l=r.createContext(i);function s(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(l.Provider,{value:i,children:t})}function u(){const e=(0,r.useContext)(l);if(e===i)throw new o.dV("DocsSidebarProvider");return e}},2252:(e,t,n)=>{"use strict";n.d(t,{n:()=>l,r:()=>s});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function l(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(null===e)throw new o.dV("DocsVersionProvider");return e}},9876:(e,t,n)=>{"use strict";n.d(t,{e:()=>f,M:()=>m});var r=n(6540),o=n(5600),a=n(4581),i=n(6347),l=n(9532);function s(e){!function(e){const t=(0,i.W6)(),n=(0,l._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6342),c=n(4848);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.YL)(),{items:t}=(0,u.p)().navbar;return 0===t.length&&!e.component}(),t=(0,a.l)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function f(e){let{children:t}=e;const n=p();return(0,c.jsx)(d.Provider,{value:n,children:t})}function m(){const e=r.useContext(d);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>u,YL:()=>s,y_:()=>l});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function l(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(!e)throw new o.dV("NavbarSecondaryMenuContentProvider");return e[0]}function u(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.dV("NavbarSecondaryMenuContentProvider");const[,l]=a,s=(0,o.Be)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>o,J:()=>a});var r=n(6540);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>l});var r=n(6540),o=n(8193);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,l]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){l(function(e){if(!o.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.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"}}},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,{d1:()=>_,Nr:()=>m,w8:()=>b,C5:()=>p,$S:()=>g,cC:()=>f,B5:()=>T,Vd:()=>S,QB:()=>C,fW:()=>E,OF:()=>x,Y:()=>w});var r=n(6540),o=n(6347),a=n(2831),i=n(4070),l=n(5597),s=n(2252),u=n(6588);function c(e){return Array.from(new Set(e))}var d=n(9169);const p=!!i.Gy;function f(e){const t=(0,s.r)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(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=m(t);if(e)return e}}(e):void 0:e.href}function g(){const{pathname:e}=(0,o.zy)(),t=(0,u.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.ys)(e,t),y=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||y(e.items,t))}function v(e,t){switch(e.type){case"category":return b(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||b(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function k(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.ys)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.ys)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function x(){const e=(0,u.t)(),{pathname:t}=(0,o.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?k({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,l.g1)(e),o=(0,i.r7)(e);return(0,r.useMemo)((()=>c([t,n,o].filter(Boolean))),[t,n,o])}function E(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 C(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- ${c(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function T(e){let{route:t}=e;const n=(0,o.zy)(),r=(0,s.r)(),i=t.routes,l=i.find((e=>(0,o.B6)(n.pathname,e)));if(!l)return null;const u=l.sidebar,c=u?r.docsSidebars[u]:void 0;return{docElement:(0,a.v)(i),sidebarName:u,sidebarItems:c}}function _(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!m(e)))}},1003:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>d,Jx:()=>m});var r=n(6540),o=n(4164),a=n(5260),i=n(3102);function l(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(6025),u=n(4586);var c=n(4848);function d(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const l=function(e){const{siteConfig:t}=(0,u.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.h)(),p=o?d(o,{absolute:!0}):void 0;return(0,c.jsxs)(a.A,{children:[t&&(0,c.jsx)("title",{children:l}),t&&(0,c.jsx)("meta",{property:"og:title",content:l}),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 p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),l=(0,o.A)(i,t);return(0,c.jsxs)(p.Provider,{value:l,children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("html",{className:l})}),n]})}function m(e){let{children:t}=e;const n=l(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(f,{className:(0,o.A)(r,a),children:t})}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>u,ZC:()=>l,_q:()=>i,dV:()=>s,fM:()=>c});var r=n(6540),o=n(205),a=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,o.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function l(e){const t=(0,r.useRef)();return(0,o.A)((()=>{t.current=e})),t.current}class s 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 u(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>l,ys:()=>i});var r=n(6540),o=n(8328),a=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.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 o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>p,Tv:()=>u,gk:()=>f});var r=n(6540),o=n(8193),a=n(2303),i=(n(205),n(9532)),l=n(4848);const s=r.createContext(void 0);function u(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,l.jsx)(s.Provider,{value:n,children:t})}function c(){const e=(0,r.useContext)(s);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const d=()=>o.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),o=(0,r.useRef)(d()),a=(0,i._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.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 o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},2967:(e,t,n)=>{"use strict";n.d(t,{Cy:()=>r,tU:()=>o});n(4586);const r="default";function o(e,t){return`docs-${e}-${t}`}},9466:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>s});n(6540);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function a(e){if(void 0===e&&(e=r),"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,i||(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),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){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}}(e);const n=a(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),o=n(6347),a=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.A)(),{pathname:s}=(0,o.zy)(),u=(0,a.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),o=n(6347),a=n(9532);function i(e){const t=(0,o.zy)(),n=(0,a.ZC)(t),i=(0,a._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:()=>o});var r=n(4586);function o(){return(0,r.A)().siteConfig.themeConfig}},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 o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}t.addTrailingSlash=o,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(/[#?]/),l="/"===i||i===r?i:(s=i,n?o(s):a(s));var s;return e.replace(i,l)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a},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 o=n(2983);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return o.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return o.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return o.removeTrailingSlash}});var a=n(2566);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return a.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return a.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return a.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return a.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:()=>w,TM:()=>T,yJ:()=>f,sC:()=>A,AO:()=>p});var r=n(8168);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(1561);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(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,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.A)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!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,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,g(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(4363),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={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},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=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 o=f(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},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,o;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 o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}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=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),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)*o(Math.random()*t,.1,.95)),t=o(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");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.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 l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=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,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);u(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===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},5302:(e,t,n)=>{var r=n(4634);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(l+=e.slice(i,f),i=f+d.length,p)l+=p[1];else{var m=e[i],g=n[2],h=n[3],y=n[4],b=n[5],v=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=g&&null!=m&&m!==g,x="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||c,C=y||b;r.push({name:h||a++,prefix:g||"",delimiter:E,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:C?u(C):w?".*":"[^"+s(E)+"]+?"})}}return i{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},8722:(e,t,n)=>{const r=n(6969),o=n(8380),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(3157).resolve(t)],delete Prism.languages[e],n(3157)(t),a.add(e)}))}i.silent=!1,e.exports=i},9700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],p="string"==typeof u?u:u.content,f=t(r,c),m=p.indexOf(f);if(m>-1){++o;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=p.substring(m+f.length),b=[];g&&b.push.apply(b,i([g])),b.push(h),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(Prism)},8692:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=8692},3157:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3157},8380:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in o(t,a),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var p,f=r(s),m=c;o(m);){for(var g in p={},m){var h=s[g];t(h&&h.modify,(function(e){e in d&&(p[e]=!0)}))}for(var y in d)if(!(y in c))for(var b in f(y))if(b in c){p[y]=!0;break}for(var v in m=p)c[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var o,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)o=r(e);else{var p=i(c.map((function(e){var t=u(e);return delete s[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return l[e]=o}for(var c in n)u(c);var d=[];for(var p in s)d.push(l[p]);return i(d)}(f,c,t,n)}};return w}}();e.exports=t},2694:(e,t,n)=>{"use strict";var r=n(6925);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=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 l.name="Invariant Violation",l}}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:a,resetWarningCache:o};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),o=n(9982);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n