From 75464e058f60413f33d00e1ff963bfce603584d9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 07:45:49 +0000 Subject: [PATCH] deploy: cf3f549f4fe30cc5a689d8f0fb7b7b2c4260ee5e --- 404.html | 8 ++++---- ..._works-5ce97ed02f4c54237f64f270244a59f0.png | Bin 0 -> 91210 bytes ...dbb8ab.37538635.js => 46dbb8ab.ac422a14.js} | 2 +- assets/js/5bde3a12.7b8edd7b.js | 1 + assets/js/935f2afb.19a58e49.js | 1 + assets/js/935f2afb.4b5b8f0e.js | 1 - assets/js/d757ab52.c0a454b1.js | 1 + assets/js/f701fe34.25c00fdd.js | 1 - assets/js/f701fe34.c395d937.js | 1 + assets/js/main.125abcd6.js | 2 -- assets/js/main.7ae3f0b4.js | 2 ++ ...ICENSE.txt => main.7ae3f0b4.js.LICENSE.txt} | 0 ...in.8a5d3eea.js => runtime~main.ed9a5b32.js} | 2 +- .../congratulations.html | 10 +++++----- .../create-a-blog-post.html | 10 +++++----- .../create-a-document.html | 10 +++++----- docs/How to update the docs/create-a-page.html | 10 +++++----- .../deploy-your-site.html | 10 +++++----- .../markdown-features.html | 10 +++++----- .../Informations/detect-dependency-cycles.html | 10 +++++----- docs/category/how-to-update-the-docs.html | 10 +++++----- docs/category/nuxt-client.html | 10 +++++----- docs/category/schulcloud-client.html | 10 +++++----- docs/category/schulcloud-server.html | 10 +++++----- docs/intro.html | 10 +++++----- docs/nuxt-client/Accessibility.html | 10 +++++----- docs/nuxt-client/CodeConventions.html | 10 +++++----- docs/nuxt-client/Colors.html | 10 +++++----- docs/nuxt-client/ComponentGuidelines.html | 10 +++++----- docs/nuxt-client/GettingStarted.html | 10 +++++----- docs/nuxt-client/GitConventions.html | 10 +++++----- docs/nuxt-client/HintsForWorking.html | 10 +++++----- docs/nuxt-client/HowTo.html | 10 +++++----- ...ifyingAndResolvingCircularDependencies.html | 10 +++++----- docs/nuxt-client/ProjectStructure.html | 10 +++++----- docs/nuxt-client/WritingTests.html | 10 +++++----- docs/schulcloud-client/Getting started.html | 10 +++++----- docs/schulcloud-server/Api.html | 10 +++++----- .../Coding-Guidelines/access-legacy-code.html | 10 +++++----- .../Coding-Guidelines/code-style.html | 10 +++++----- .../Coding-Guidelines/controllers.html | 10 +++++----- .../Coding-Guidelines/deprection-workflow.html | 10 +++++----- .../domain-object-validation.html | 10 +++++----- .../Coding-Guidelines/event-handling.html | 10 +++++----- .../Coding-Guidelines/exception-handling.html | 10 +++++----- .../Coding-Guidelines/logging.html | 10 +++++----- .../Coding-Guidelines/micro-orm.html | 10 +++++----- .../Coding-Guidelines/modules-submodules.html | 10 +++++----- .../Coding-Guidelines/repositories.html | 10 +++++----- .../Coding-Guidelines/testing.html | 10 +++++----- docs/schulcloud-server/Development/git.html | 10 +++++----- .../Development/keycloak.html | 10 +++++----- .../Development/rocket-chat.html | 10 +++++----- .../schulcloud-server/Development/vs-code.html | 10 +++++----- docs/schulcloud-server/Getting started.html | 10 +++++----- docs/schulcloud-server/Migrations.html | 10 +++++----- docs/schulcloud-server/architecture.html | 10 +++++----- docs/services/etherpad/How it works.html | 16 ++++++++++++++++ docs/services/etherpad/Local setup.html | 17 +++++++++++++++++ docs/services/tldraw/How it works.html | 12 ++++++------ docs/services/tldraw/Local setup.html | 10 +++++----- docs/services/tldraw/Technical details.html | 10 +++++----- index.html | 8 ++++---- markdown-page.html | 8 ++++---- search-index.json | 2 +- search.html | 8 ++++---- sitemap.xml | 2 +- 67 files changed, 295 insertions(+), 260 deletions(-) create mode 100644 assets/images/how_it_works-5ce97ed02f4c54237f64f270244a59f0.png rename assets/js/{46dbb8ab.37538635.js => 46dbb8ab.ac422a14.js} (74%) create mode 100644 assets/js/5bde3a12.7b8edd7b.js create mode 100644 assets/js/935f2afb.19a58e49.js delete mode 100644 assets/js/935f2afb.4b5b8f0e.js create mode 100644 assets/js/d757ab52.c0a454b1.js delete mode 100644 assets/js/f701fe34.25c00fdd.js create mode 100644 assets/js/f701fe34.c395d937.js delete mode 100644 assets/js/main.125abcd6.js create mode 100644 assets/js/main.7ae3f0b4.js rename assets/js/{main.125abcd6.js.LICENSE.txt => main.7ae3f0b4.js.LICENSE.txt} (100%) rename assets/js/{runtime~main.8a5d3eea.js => runtime~main.ed9a5b32.js} (51%) create mode 100644 docs/services/etherpad/How it works.html create mode 100644 docs/services/etherpad/Local setup.html diff --git a/404.html b/404.html index da6120d..8622539 100644 --- a/404.html +++ b/404.html @@ -4,13 +4,13 @@ Page Not Found | Schulcloud-Verbund-Software 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.

- - + + \ No newline at end of file diff --git a/assets/images/how_it_works-5ce97ed02f4c54237f64f270244a59f0.png b/assets/images/how_it_works-5ce97ed02f4c54237f64f270244a59f0.png new file mode 100644 index 0000000000000000000000000000000000000000..cbf71e86d1696d2faeaacddc828400d07c47e3af GIT binary patch literal 91210 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℘#Zh`gj~- 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 J;(^mw{vRQbE4Bat literal 0 HcmV?d00001 diff --git a/assets/js/46dbb8ab.37538635.js b/assets/js/46dbb8ab.ac422a14.js similarity index 74% rename from assets/js/46dbb8ab.37538635.js rename to assets/js/46dbb8ab.ac422a14.js index 518d9af..43994bc 100644 --- a/assets/js/46dbb8ab.37538635.js +++ b/assets/js/46dbb8ab.ac422a14.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdataport_docusaurus=self.webpackChunkdataport_docusaurus||[]).push([[1594],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>y});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i=r.createContext({}),p=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,c=e.originalType,i=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,y=u["".concat(i,".").concat(m)]||u[m]||d[m]||c;return n?r.createElement(y,a(a({ref:t},s),{},{components:n})):r.createElement(y,a({ref:t},s))}));function y(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=n.length,a=new Array(c);a[0]=m;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[u]="string"==typeof e?e:o,a[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>d,frontMatter:()=>c,metadata:()=>l,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const c={},a="Detect Dependency Cycles",l={unversionedId:"Informations/detect-dependency-cycles",id:"Informations/detect-dependency-cycles",title:"Detect Dependency Cycles",description:"You can use following package and command to detect dependency cycles in code.",source:"@site/docs/Informations/detect-dependency-cycles.md",sourceDirName:"Informations",slug:"/Informations/detect-dependency-cycles",permalink:"/docs/Informations/detect-dependency-cycles",draft:!1,editUrl:"https://github.com/hpi-schul-cloud/hpi-schul-cloud.github.io/blob/main/docs/Informations/detect-dependency-cycles.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Congratulations!",permalink:"/docs/How to update the docs/congratulations"},next:{title:"How it works",permalink:"/docs/services/tldraw/How it works"}},i={},p=[{value:"text export",id:"text-export",level:3},{value:"image export (Ubuntu/Wsl)",id:"image-export-ubuntuwsl",level:3}],s={toc:p},u="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"detect-dependency-cycles"},"Detect Dependency Cycles"),(0,o.kt)("p",null,"You can use following package and command to detect dependency cycles in code."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/madge"},"https://www.npmjs.com/package/madge")),(0,o.kt)("h3",{id:"text-export"},"text export"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"npx madge --extensions js,ts --circular .")),(0,o.kt)("h3",{id:"image-export-ubuntuwsl"},"image export (Ubuntu/Wsl)"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"apt-get install graphviz"),(0,o.kt)("li",{parentName:"ul"},"npx madge --extensions js,ts --circular --image graph.svg .")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkdataport_docusaurus=self.webpackChunkdataport_docusaurus||[]).push([[1594],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>y});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i=r.createContext({}),p=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,c=e.originalType,i=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,y=u["".concat(i,".").concat(m)]||u[m]||d[m]||c;return n?r.createElement(y,a(a({ref:t},s),{},{components:n})):r.createElement(y,a({ref:t},s))}));function y(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=n.length,a=new Array(c);a[0]=m;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[u]="string"==typeof e?e:o,a[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>d,frontMatter:()=>c,metadata:()=>l,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const c={},a="Detect Dependency Cycles",l={unversionedId:"Informations/detect-dependency-cycles",id:"Informations/detect-dependency-cycles",title:"Detect Dependency Cycles",description:"You can use following package and command to detect dependency cycles in code.",source:"@site/docs/Informations/detect-dependency-cycles.md",sourceDirName:"Informations",slug:"/Informations/detect-dependency-cycles",permalink:"/docs/Informations/detect-dependency-cycles",draft:!1,editUrl:"https://github.com/hpi-schul-cloud/hpi-schul-cloud.github.io/blob/main/docs/Informations/detect-dependency-cycles.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Congratulations!",permalink:"/docs/How to update the docs/congratulations"},next:{title:"How it works",permalink:"/docs/services/etherpad/How it works"}},i={},p=[{value:"text export",id:"text-export",level:3},{value:"image export (Ubuntu/Wsl)",id:"image-export-ubuntuwsl",level:3}],s={toc:p},u="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"detect-dependency-cycles"},"Detect Dependency Cycles"),(0,o.kt)("p",null,"You can use following package and command to detect dependency cycles in code."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/madge"},"https://www.npmjs.com/package/madge")),(0,o.kt)("h3",{id:"text-export"},"text export"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"npx madge --extensions js,ts --circular .")),(0,o.kt)("h3",{id:"image-export-ubuntuwsl"},"image export (Ubuntu/Wsl)"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"apt-get install graphviz"),(0,o.kt)("li",{parentName:"ul"},"npx madge --extensions js,ts --circular --image graph.svg .")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5bde3a12.7b8edd7b.js b/assets/js/5bde3a12.7b8edd7b.js new file mode 100644 index 0000000..4d43463 --- /dev/null +++ b/assets/js/5bde3a12.7b8edd7b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdataport_docusaurus=self.webpackChunkdataport_docusaurus||[]).push([[4211],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),s=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},d="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),d=s(n),u=a,m=d["".concat(l,".").concat(u)]||d[u]||h[u]||o;return n?r.createElement(m,i(i({ref:t},c),{},{components:n})):r.createElement(m,i({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p[d]="string"==typeof e?e:a,i[1]=p;for(var s=2;s{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const o={},i="Local Setup",p={unversionedId:"services/etherpad/Local setup",id:"services/etherpad/Local setup",title:"Local Setup",description:"Running the Etherpad server",source:"@site/docs/services/etherpad/Local setup.md",sourceDirName:"services/etherpad",slug:"/services/etherpad/Local setup",permalink:"/docs/services/etherpad/Local setup",draft:!1,editUrl:"https://github.com/hpi-schul-cloud/hpi-schul-cloud.github.io/blob/main/docs/services/etherpad/Local setup.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"How it works",permalink:"/docs/services/etherpad/How it works"},next:{title:"How it works",permalink:"/docs/services/tldraw/How it works"}},l={},s=[{value:"Running the Etherpad server",id:"running-the-etherpad-server",level:2}],c={toc:s},d="wrapper";function h(e){let{components:t,...n}=e;return(0,a.kt)(d,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"local-setup"},"Local Setup"),(0,a.kt)("h2",{id:"running-the-etherpad-server"},"Running the Etherpad server"),(0,a.kt)("p",null,"To run the Etherpad service for the local development and resting purposes you can follow the below steps:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Create a new dir that will contain all the needed files that we'll want to use when running the Etherpad service.\nCreate a directory called sc-etherpad\xa0and then enter it, in Unix-like systems you can use the following command: "),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre"},"`mkdir sc-etherpad && cd sc-etherpad`\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Create a new file called APIKEY.txt in it, with the following content:"),(0,a.kt)("p",{parentName:"li"},(0,a.kt)("inlineCode",{parentName:"p"},"381d67e6347d235ac9446da3ea10a82efd6f8ae09fa2e90efeda80f82feeb4fd")),(0,a.kt)("p",{parentName:"li"},"We'll use this file to set a fixed Etherpad's API key on the Etherpad server's start.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Create also a file called settings.env with the following content:"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre"},'REQUIRE_SESSION="true"\nPAD_OPTIONS_SHOW_CHAT="true"\nDISABLE_IP_LOGGING="true"\nDEFAULT_PAD_TEXT="Schreib etwas!\\n\\nDieses Etherpad wird synchronisiert, w\xe4hrend du tippst, so dass alle Betrachter jederzeit den selben Text sehen. So k\xf6nnt ihr auf einfache Weise gemeinsam an Dokumenten arbeiten."\nDB_TYPE=mongodb\nDB_URL=mongodb://host.docker.internal:27017/etherpad\n')),(0,a.kt)("p",{parentName:"li"},"We'll use this file to provide all the needed environment variables to the Etherpad's server."),(0,a.kt)("p",{parentName:"li"},"Please note the last line, that contains the MongoDB connection string:"),(0,a.kt)("p",{parentName:"li"},(0,a.kt)("inlineCode",{parentName:"p"},"DB_URL=mongodb://host.docker.internal:27017/etherpad")),(0,a.kt)("p",{parentName:"li"},"Here we're using the host.docker.internal hostname which should make it possible for the Etherpad's container to connect to the host's local network and should work out of the box e.g. on macOS. But please modify it accordingly to your needs and your Docker's network configuration. An alternative configuaration would be to use ",(0,a.kt)("inlineCode",{parentName:"p"},"DB_URL=mongodb://localhost:27017/etherpad")," and than add ",(0,a.kt)("inlineCode",{parentName:"p"},'--network="host"')," to the following docker run command.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Next, start the Etherpad's container:"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre"},"docker run -d \\\n -p 9001:9001 \\\n --env-file ./settings.env \\\n -v ./APIKEY.txt:/opt/etherpad-lite/APIKEY.txt \\\n --name sc-etherpad \\\n docker.io/etherpad/etherpad:2.0.0\n")),(0,a.kt)("p",{parentName:"li"},"Please note we're using the docker.io/etherpad/etherpad:2.0.0 image in the command above which might be not the one that is being used anytime in the future when you read this article. To make sure you're using the current version (the one that is currently being used in the SchulCloud platform), please refer to the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/hpi-schul-cloud/dof_app_deploy/blob/main/ansible/group_vars/infra/dof_etherpad.yml"},"https://github.com/hpi-schul-cloud/dof_app_deploy/blob/main/ansible/group_vars/infra/dof_etherpad.yml")," file."))),(0,a.kt)("p",null,"Now we should have the Etherpad service running locally on port 9001, we can verify it's working properly e.g. by fetching the current Etherpad's API version:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'~ curl -v http://127.0.0.1:9001/api\n* Trying 127.0.0.1:9001...\n* Connected to 127.0.0.1 (127.0.0.1) port 9001\n> GET /api HTTP/1.1\n> Host: 127.0.0.1:9001\n> User-Agent: curl/8.4.0\n> Accept: */*\n> \n< HTTP/1.1 200 OK\n< X-Powered-By: Express\n< X-UA-Compatible: IE=Edge,chrome=1\n< Referrer-Policy: same-origin\n< Content-Type: application/json; charset=utf-8\n< Content-Length: 26\n< ETag: W/"1a-2HmNLqF3wPt+KQRlEmGwH4O+xu4"\n< Date: Fri, 29 Mar 2024 13:27:00 GMT\n< Connection: keep-alive\n< Keep-Alive: timeout=5\n< \n* Connection #0 to host 127.0.0.1 left intact\n{"currentVersion":"1.3.0"}\n')),(0,a.kt)("p",null,"We can also verify that the API key has been set successfully, let's use the example API call from the Etherpad's documentation ( ",(0,a.kt)("a",{parentName:"p",href:"https://etherpad.org/doc/v2.0.0/#_example_1"},"https://etherpad.org/doc/v2.0.0/#_example_1")," ):"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'~ curl -v http://127.0.0.1:9001/api/1/createAuthorIfNotExistsFor\\?apikey\\=381d67e6347d235ac9446da3ea10a82efd6f8ae09fa2e90efeda80f82feeb4fd\\&name\\=Michael\\&authorMapper\\=7\n* Trying 127.0.0.1:9001...\n* Connected to 127.0.0.1 (127.0.0.1) port 9001\n> GET /api/1/createAuthorIfNotExistsFor?apikey=381d67e6347d235ac9446da3ea10a82efd6f8ae09fa2e90efeda80f82feeb4fd&name=Michael&authorMapper=7 HTTP/1.1\n> Host: 127.0.0.1:9001\n> User-Agent: curl/8.4.0\n> Accept: */*\n> \n< HTTP/1.1 200 OK\n< X-Powered-By: Express\n< X-UA-Compatible: IE=Edge,chrome=1\n< Referrer-Policy: same-origin\n< Content-Type: application/json; charset=utf-8\n< Content-Length: 66\n< ETag: W/"42-bg92QA1xRFO6QmkNRbNXhfsFBUM"\n< Date: Fri, 29 Mar 2024 13:40:05 GMT\n< Connection: keep-alive\n< Keep-Alive: timeout=5\n< \n* Connection #0 to host 127.0.0.1 left intact\n{"code":0,"message":"ok","data":{"authorID":"a.7BgkAuzbHXR1G8Cv"}}\n')),(0,a.kt)("p",null,"In case of an unsuccessful result (e.g. improperly set or invalid API key) we would receive the following response:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'~ curl -v http://127.0.0.1:9001/api/1/createAuthorIfNotExistsFor\\?apikey\\=secret\\&name\\=Michael\\&authorMapper\\=7\n* Trying 127.0.0.1:9001...\n* Connected to 127.0.0.1 (127.0.0.1) port 9001\n> GET /api/1/createAuthorIfNotExistsFor?apikey=secret&name=Michael&authorMapper=7 HTTP/1.1\n> Host: 127.0.0.1:9001\n> User-Agent: curl/8.4.0\n> Accept: */*\n> \n< HTTP/1.1 401 Unauthorized\n< X-Powered-By: Express\n< X-UA-Compatible: IE=Edge,chrome=1\n< Referrer-Policy: same-origin\n< Content-Type: application/json; charset=utf-8\n< Content-Length: 54\n< ETag: W/"36-dbJd0O+vdNi3zPpwRXE+1EGLTho"\n< Date: Fri, 29 Mar 2024 13:39:44 GMT\n< Connection: keep-alive\n< Keep-Alive: timeout=5\n< \n* Connection #0 to host 127.0.0.1 left intact\n{"code":4,"message":"no or wrong API Key","data":null}\n')))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.19a58e49.js b/assets/js/935f2afb.19a58e49.js new file mode 100644 index 0000000..de7ea14 --- /dev/null +++ b/assets/js/935f2afb.19a58e49.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdataport_docusaurus=self.webpackChunkdataport_docusaurus||[]).push([[53],{1109: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":"link","label":"Schulcloud Documentation","href":"/docs/intro","docId":"intro"},{"type":"category","label":"nuxt-client","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Getting Started","href":"/docs/nuxt-client/GettingStarted","docId":"nuxt-client/GettingStarted"},{"type":"link","label":"Project Structure","href":"/docs/nuxt-client/ProjectStructure","docId":"nuxt-client/ProjectStructure"},{"type":"link","label":"Code Conventions","href":"/docs/nuxt-client/CodeConventions","docId":"nuxt-client/CodeConventions"},{"type":"link","label":"Git Conventions","href":"/docs/nuxt-client/GitConventions","docId":"nuxt-client/GitConventions"},{"type":"link","label":"How To","href":"/docs/nuxt-client/HowTo","docId":"nuxt-client/HowTo"},{"type":"link","label":"Writing Tests","href":"/docs/nuxt-client/WritingTests","docId":"nuxt-client/WritingTests"},{"type":"link","label":"Accessibility (A11y)","href":"/docs/nuxt-client/Accessibility","docId":"nuxt-client/Accessibility"},{"type":"link","label":"Colors","href":"/docs/nuxt-client/Colors","docId":"nuxt-client/Colors"},{"type":"link","label":"Identifying and Resolving Circular Dependencies","href":"/docs/nuxt-client/IdentifyingAndResolvingCircularDependencies","docId":"nuxt-client/IdentifyingAndResolvingCircularDependencies"},{"type":"link","label":"Hints for Working","href":"/docs/nuxt-client/HintsForWorking","docId":"nuxt-client/HintsForWorking"},{"type":"link","label":"Component Development Guidelines","href":"/docs/nuxt-client/ComponentGuidelines","docId":"nuxt-client/ComponentGuidelines"}],"href":"/docs/category/nuxt-client"},{"type":"category","label":"schulcloud-client","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Getting started","href":"/docs/schulcloud-client/Getting started","docId":"schulcloud-client/Getting started"}],"href":"/docs/category/schulcloud-client"},{"type":"category","label":"schulcloud-server","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Getting started","href":"/docs/schulcloud-server/Getting started","docId":"schulcloud-server/Getting started"},{"type":"link","label":"API design","href":"/docs/schulcloud-server/Api","docId":"schulcloud-server/Api"},{"type":"category","label":"Coding-Guidelines","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Access legacy Code","href":"/docs/schulcloud-server/Coding-Guidelines/access-legacy-code","docId":"schulcloud-server/Coding-Guidelines/access-legacy-code"},{"type":"link","label":"Code Style","href":"/docs/schulcloud-server/Coding-Guidelines/code-style","docId":"schulcloud-server/Coding-Guidelines/code-style"},{"type":"link","label":"Controller","href":"/docs/schulcloud-server/Coding-Guidelines/controllers","docId":"schulcloud-server/Coding-Guidelines/controllers"},{"type":"link","label":"Deprecation Workflow","href":"/docs/schulcloud-server/Coding-Guidelines/deprection-workflow","docId":"schulcloud-server/Coding-Guidelines/deprection-workflow"},{"type":"link","label":"Domain Object Validation","href":"/docs/schulcloud-server/Coding-Guidelines/domain-object-validation","docId":"schulcloud-server/Coding-Guidelines/domain-object-validation"},{"type":"link","label":"Event Handling","href":"/docs/schulcloud-server/Coding-Guidelines/event-handling","docId":"schulcloud-server/Coding-Guidelines/event-handling"},{"type":"link","label":"Exception Handling","href":"/docs/schulcloud-server/Coding-Guidelines/exception-handling","docId":"schulcloud-server/Coding-Guidelines/exception-handling"},{"type":"link","label":"Logging","href":"/docs/schulcloud-server/Coding-Guidelines/logging","docId":"schulcloud-server/Coding-Guidelines/logging"},{"type":"link","label":"Defining Entities","href":"/docs/schulcloud-server/Coding-Guidelines/micro-orm","docId":"schulcloud-server/Coding-Guidelines/micro-orm"},{"type":"link","label":"Implementation and usage of modules, submodule and barrel files in our project","href":"/docs/schulcloud-server/Coding-Guidelines/modules-submodules","docId":"schulcloud-server/Coding-Guidelines/modules-submodules"},{"type":"link","label":"Repositories","href":"/docs/schulcloud-server/Coding-Guidelines/repositories","docId":"schulcloud-server/Coding-Guidelines/repositories"},{"type":"link","label":"Testing","href":"/docs/schulcloud-server/Coding-Guidelines/testing","docId":"schulcloud-server/Coding-Guidelines/testing"}]},{"type":"category","label":"Development","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Git","href":"/docs/schulcloud-server/Development/git","docId":"schulcloud-server/Development/git"},{"type":"link","label":"ErWIn-IDM (Keycloak)","href":"/docs/schulcloud-server/Development/keycloak","docId":"schulcloud-server/Development/keycloak"},{"type":"link","label":"Rocket.Chat","href":"/docs/schulcloud-server/Development/rocket-chat","docId":"schulcloud-server/Development/rocket-chat"},{"type":"link","label":"VSCode","href":"/docs/schulcloud-server/Development/vs-code","docId":"schulcloud-server/Development/vs-code"}]},{"type":"link","label":"Migrations","href":"/docs/schulcloud-server/Migrations","docId":"schulcloud-server/Migrations"},{"type":"link","label":"Software Architecture","href":"/docs/schulcloud-server/architecture","docId":"schulcloud-server/architecture"}],"href":"/docs/category/schulcloud-server"},{"type":"category","label":"How to update the docs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Create a Page","href":"/docs/How to update the docs/create-a-page","docId":"How to update the docs/create-a-page"},{"type":"link","label":"Create a Document","href":"/docs/How to update the docs/create-a-document","docId":"How to update the docs/create-a-document"},{"type":"link","label":"Create a Blog Post","href":"/docs/How to update the docs/create-a-blog-post","docId":"How to update the docs/create-a-blog-post"},{"type":"link","label":"Markdown Features","href":"/docs/How to update the docs/markdown-features","docId":"How to update the docs/markdown-features"},{"type":"link","label":"Deploy your site","href":"/docs/How to update the docs/deploy-your-site","docId":"How to update the docs/deploy-your-site"},{"type":"link","label":"Congratulations!","href":"/docs/How to update the docs/congratulations","docId":"How to update the docs/congratulations"}],"href":"/docs/category/how-to-update-the-docs"},{"type":"category","label":"Informations","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Detect Dependency Cycles","href":"/docs/Informations/detect-dependency-cycles","docId":"Informations/detect-dependency-cycles"}]},{"type":"category","label":"services","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"etherpad","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"How it works","href":"/docs/services/etherpad/How it works","docId":"services/etherpad/How it works"},{"type":"link","label":"Local Setup","href":"/docs/services/etherpad/Local setup","docId":"services/etherpad/Local setup"}]},{"type":"category","label":"tldraw","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"How it works","href":"/docs/services/tldraw/How it works","docId":"services/tldraw/How it works"},{"type":"link","label":"Local setup","href":"/docs/services/tldraw/Local setup","docId":"services/tldraw/Local setup"},{"type":"link","label":"Technical details","href":"/docs/services/tldraw/Technical details","docId":"services/tldraw/Technical details"}]}]}]},"docs":{"How to update the docs/congratulations":{"id":"How to update the docs/congratulations","title":"Congratulations!","description":"You have just learned the basics of Docusaurus and made some changes to the initial template.","sidebar":"tutorialSidebar"},"How to update the docs/create-a-blog-post":{"id":"How to update the docs/create-a-blog-post","title":"Create a Blog Post","description":"Docusaurus creates a page for each blog post, but also a blog index page, a tag system, an RSS feed...","sidebar":"tutorialSidebar"},"How to update the docs/create-a-document":{"id":"How to update the docs/create-a-document","title":"Create a Document","description":"Documents are groups of pages connected through:","sidebar":"tutorialSidebar"},"How to update the docs/create-a-page":{"id":"How to update the docs/create-a-page","title":"Create a Page","description":"Add Markdown or React files to src/pages to create a standalone page:","sidebar":"tutorialSidebar"},"How to update the docs/deploy-your-site":{"id":"How to update the docs/deploy-your-site","title":"Deploy your site","description":"Docusaurus is a static-site-generator (also called Jamstack).","sidebar":"tutorialSidebar"},"How to update the docs/markdown-features":{"id":"How to update the docs/markdown-features","title":"Markdown Features","description":"Docusaurus supports Markdown and a few additional features.","sidebar":"tutorialSidebar"},"Informations/detect-dependency-cycles":{"id":"Informations/detect-dependency-cycles","title":"Detect Dependency Cycles","description":"You can use following package and command to detect dependency cycles in code.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Schulcloud Documentation","description":"The schulcloud consists of many repositories.","sidebar":"tutorialSidebar"},"nuxt-client/Accessibility":{"id":"nuxt-client/Accessibility","title":"Accessibility (A11y)","description":"We want to make sure that our product can be used by anyone.","sidebar":"tutorialSidebar"},"nuxt-client/CodeConventions":{"id":"nuxt-client/CodeConventions","title":"Code Conventions","description":"- Code Conventions","sidebar":"tutorialSidebar"},"nuxt-client/Colors":{"id":"nuxt-client/Colors","title":"Colors","description":"You can find our custom defined theme colors under /src/themes/base-vuetify.options.js and their overwrites per theme in /src/themes//vuetify.options.js.","sidebar":"tutorialSidebar"},"nuxt-client/ComponentGuidelines":{"id":"nuxt-client/ComponentGuidelines","title":"Component Development Guidelines","description":"HTML is not a string","sidebar":"tutorialSidebar"},"nuxt-client/GettingStarted":{"id":"nuxt-client/GettingStarted","title":"Getting Started","description":"Development Setup","sidebar":"tutorialSidebar"},"nuxt-client/GitConventions":{"id":"nuxt-client/GitConventions","title":"Git Conventions","description":"Each change should be done in a Ticket (no matter how small).","sidebar":"tutorialSidebar"},"nuxt-client/HintsForWorking":{"id":"nuxt-client/HintsForWorking","title":"Hints for Working","description":"Working with Material Design Icons","sidebar":"tutorialSidebar"},"nuxt-client/HowTo":{"id":"nuxt-client/HowTo","title":"How To","description":"Collection of instructions on how to do certain things:","sidebar":"tutorialSidebar"},"nuxt-client/IdentifyingAndResolvingCircularDependencies":{"id":"nuxt-client/IdentifyingAndResolvingCircularDependencies","title":"Identifying and Resolving Circular Dependencies","description":"What is a circular dependency?","sidebar":"tutorialSidebar"},"nuxt-client/ProjectStructure":{"id":"nuxt-client/ProjectStructure","title":"Project Structure","description":"Filenames","sidebar":"tutorialSidebar"},"nuxt-client/WritingTests":{"id":"nuxt-client/WritingTests","title":"Writing Tests","description":"How to write valuable, reliable tests, that are easy to maintain.","sidebar":"tutorialSidebar"},"schulcloud-client/Getting started":{"id":"schulcloud-client/Getting started","title":"Getting started","description":"Make sure to have the following software installed","sidebar":"tutorialSidebar"},"schulcloud-server/Api":{"id":"schulcloud-server/Api","title":"API design","description":"nest.js","sidebar":"tutorialSidebar"},"schulcloud-server/architecture":{"id":"schulcloud-server/architecture","title":"Software Architecture","description":"Goals","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/access-legacy-code":{"id":"schulcloud-server/Coding-Guidelines/access-legacy-code","title":"Access legacy Code","description":"Access Feathers Service from NestJS","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/code-style":{"id":"schulcloud-server/Coding-Guidelines/code-style","title":"Code Style","description":"Function","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/controllers":{"id":"schulcloud-server/Coding-Guidelines/controllers","title":"Controller","description":"A modules api layer is defined within of controllers.","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/deprection-workflow":{"id":"schulcloud-server/Coding-Guidelines/deprection-workflow","title":"Deprecation Workflow","description":"When to use 2 step migration","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/domain-object-validation":{"id":"schulcloud-server/Coding-Guidelines/domain-object-validation","title":"Domain Object Validation","description":"If you need to validate a domain object, please write an independent class, so that the domain object itself, its repo and services can reuse it.","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/event-handling":{"id":"schulcloud-server/Coding-Guidelines/event-handling","title":"Event Handling","description":"Internal Events are used as a mechanism for Dependency Inversion.","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/exception-handling":{"id":"schulcloud-server/Coding-Guidelines/exception-handling","title":"Exception Handling","description":"exception hierarchy","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/logging":{"id":"schulcloud-server/Coding-Guidelines/logging","title":"Logging","description":"For logging use the Logger, exported by the logger module. It encapsulates a Winston logger. Its injection scope is transient, so you can set a context when you inject it.","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/micro-orm":{"id":"schulcloud-server/Coding-Guidelines/micro-orm","title":"Defining Entities","description":"When defining entities with MikroORM (Version 5), the following should be considered:","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/modules-submodules":{"id":"schulcloud-server/Coding-Guidelines/modules-submodules","title":"Implementation and usage of modules, submodule and barrel files in our project","description":"In this guide, we\'ll cover how to use modules, submodules and barrel files in our project. These concepts help you organize your code into separate files and directories, making it easier to manage and maintain.","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/repositories":{"id":"schulcloud-server/Coding-Guidelines/repositories","title":"Repositories","description":"The repository is responsible to provide domain objects for the domain layer. Typically, it does so by accessing a database.","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/testing":{"id":"schulcloud-server/Coding-Guidelines/testing","title":"Testing","description":"Automated testing is the essential part of the software development process.","sidebar":"tutorialSidebar"},"schulcloud-server/Development/git":{"id":"schulcloud-server/Development/git","title":"Git","description":"Branch name conventions","sidebar":"tutorialSidebar"},"schulcloud-server/Development/keycloak":{"id":"schulcloud-server/Development/keycloak","title":"ErWIn-IDM (Keycloak)","description":"ErWIn-IDM, namely Keycloak, will be the future Identity Management System (IDM) for the dBildungscloud. Keycloak","sidebar":"tutorialSidebar"},"schulcloud-server/Development/rocket-chat":{"id":"schulcloud-server/Development/rocket-chat","title":"Rocket.Chat","description":"Start Mongodb","sidebar":"tutorialSidebar"},"schulcloud-server/Development/vs-code":{"id":"schulcloud-server/Development/vs-code","title":"VSCode","description":"Launch scripts","sidebar":"tutorialSidebar"},"schulcloud-server/Getting started":{"id":"schulcloud-server/Getting started","title":"Getting started","description":"Make sure to have the following software installed","sidebar":"tutorialSidebar"},"schulcloud-server/Migrations":{"id":"schulcloud-server/Migrations","title":"Migrations","description":"Migrations for server database","sidebar":"tutorialSidebar"},"services/etherpad/How it works":{"id":"services/etherpad/How it works","title":"How it works","description":"Configuration","sidebar":"tutorialSidebar"},"services/etherpad/Local setup":{"id":"services/etherpad/Local setup","title":"Local Setup","description":"Running the Etherpad server","sidebar":"tutorialSidebar"},"services/tldraw/How it works":{"id":"services/tldraw/How it works","title":"How it works","description":"Configuration","sidebar":"tutorialSidebar"},"services/tldraw/Local setup":{"id":"services/tldraw/Local setup","title":"Local setup","description":"To run tldraw locally:","sidebar":"tutorialSidebar"},"services/tldraw/Technical details":{"id":"services/tldraw/Technical details","title":"Technical details","description":"Backend","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.4b5b8f0e.js b/assets/js/935f2afb.4b5b8f0e.js deleted file mode 100644 index cc5cccb..0000000 --- a/assets/js/935f2afb.4b5b8f0e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdataport_docusaurus=self.webpackChunkdataport_docusaurus||[]).push([[53],{1109: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":"link","label":"Schulcloud Documentation","href":"/docs/intro","docId":"intro"},{"type":"category","label":"nuxt-client","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Getting Started","href":"/docs/nuxt-client/GettingStarted","docId":"nuxt-client/GettingStarted"},{"type":"link","label":"Project Structure","href":"/docs/nuxt-client/ProjectStructure","docId":"nuxt-client/ProjectStructure"},{"type":"link","label":"Code Conventions","href":"/docs/nuxt-client/CodeConventions","docId":"nuxt-client/CodeConventions"},{"type":"link","label":"Git Conventions","href":"/docs/nuxt-client/GitConventions","docId":"nuxt-client/GitConventions"},{"type":"link","label":"How To","href":"/docs/nuxt-client/HowTo","docId":"nuxt-client/HowTo"},{"type":"link","label":"Writing Tests","href":"/docs/nuxt-client/WritingTests","docId":"nuxt-client/WritingTests"},{"type":"link","label":"Accessibility (A11y)","href":"/docs/nuxt-client/Accessibility","docId":"nuxt-client/Accessibility"},{"type":"link","label":"Colors","href":"/docs/nuxt-client/Colors","docId":"nuxt-client/Colors"},{"type":"link","label":"Identifying and Resolving Circular Dependencies","href":"/docs/nuxt-client/IdentifyingAndResolvingCircularDependencies","docId":"nuxt-client/IdentifyingAndResolvingCircularDependencies"},{"type":"link","label":"Hints for Working","href":"/docs/nuxt-client/HintsForWorking","docId":"nuxt-client/HintsForWorking"},{"type":"link","label":"Component Development Guidelines","href":"/docs/nuxt-client/ComponentGuidelines","docId":"nuxt-client/ComponentGuidelines"}],"href":"/docs/category/nuxt-client"},{"type":"category","label":"schulcloud-client","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Getting started","href":"/docs/schulcloud-client/Getting started","docId":"schulcloud-client/Getting started"}],"href":"/docs/category/schulcloud-client"},{"type":"category","label":"schulcloud-server","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Getting started","href":"/docs/schulcloud-server/Getting started","docId":"schulcloud-server/Getting started"},{"type":"link","label":"API design","href":"/docs/schulcloud-server/Api","docId":"schulcloud-server/Api"},{"type":"category","label":"Coding-Guidelines","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Access legacy Code","href":"/docs/schulcloud-server/Coding-Guidelines/access-legacy-code","docId":"schulcloud-server/Coding-Guidelines/access-legacy-code"},{"type":"link","label":"Code Style","href":"/docs/schulcloud-server/Coding-Guidelines/code-style","docId":"schulcloud-server/Coding-Guidelines/code-style"},{"type":"link","label":"Controller","href":"/docs/schulcloud-server/Coding-Guidelines/controllers","docId":"schulcloud-server/Coding-Guidelines/controllers"},{"type":"link","label":"Deprecation Workflow","href":"/docs/schulcloud-server/Coding-Guidelines/deprection-workflow","docId":"schulcloud-server/Coding-Guidelines/deprection-workflow"},{"type":"link","label":"Domain Object Validation","href":"/docs/schulcloud-server/Coding-Guidelines/domain-object-validation","docId":"schulcloud-server/Coding-Guidelines/domain-object-validation"},{"type":"link","label":"Event Handling","href":"/docs/schulcloud-server/Coding-Guidelines/event-handling","docId":"schulcloud-server/Coding-Guidelines/event-handling"},{"type":"link","label":"Exception Handling","href":"/docs/schulcloud-server/Coding-Guidelines/exception-handling","docId":"schulcloud-server/Coding-Guidelines/exception-handling"},{"type":"link","label":"Logging","href":"/docs/schulcloud-server/Coding-Guidelines/logging","docId":"schulcloud-server/Coding-Guidelines/logging"},{"type":"link","label":"Defining Entities","href":"/docs/schulcloud-server/Coding-Guidelines/micro-orm","docId":"schulcloud-server/Coding-Guidelines/micro-orm"},{"type":"link","label":"Implementation and usage of modules, submodule and barrel files in our project","href":"/docs/schulcloud-server/Coding-Guidelines/modules-submodules","docId":"schulcloud-server/Coding-Guidelines/modules-submodules"},{"type":"link","label":"Repositories","href":"/docs/schulcloud-server/Coding-Guidelines/repositories","docId":"schulcloud-server/Coding-Guidelines/repositories"},{"type":"link","label":"Testing","href":"/docs/schulcloud-server/Coding-Guidelines/testing","docId":"schulcloud-server/Coding-Guidelines/testing"}]},{"type":"category","label":"Development","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Git","href":"/docs/schulcloud-server/Development/git","docId":"schulcloud-server/Development/git"},{"type":"link","label":"ErWIn-IDM (Keycloak)","href":"/docs/schulcloud-server/Development/keycloak","docId":"schulcloud-server/Development/keycloak"},{"type":"link","label":"Rocket.Chat","href":"/docs/schulcloud-server/Development/rocket-chat","docId":"schulcloud-server/Development/rocket-chat"},{"type":"link","label":"VSCode","href":"/docs/schulcloud-server/Development/vs-code","docId":"schulcloud-server/Development/vs-code"}]},{"type":"link","label":"Migrations","href":"/docs/schulcloud-server/Migrations","docId":"schulcloud-server/Migrations"},{"type":"link","label":"Software Architecture","href":"/docs/schulcloud-server/architecture","docId":"schulcloud-server/architecture"}],"href":"/docs/category/schulcloud-server"},{"type":"category","label":"How to update the docs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Create a Page","href":"/docs/How to update the docs/create-a-page","docId":"How to update the docs/create-a-page"},{"type":"link","label":"Create a Document","href":"/docs/How to update the docs/create-a-document","docId":"How to update the docs/create-a-document"},{"type":"link","label":"Create a Blog Post","href":"/docs/How to update the docs/create-a-blog-post","docId":"How to update the docs/create-a-blog-post"},{"type":"link","label":"Markdown Features","href":"/docs/How to update the docs/markdown-features","docId":"How to update the docs/markdown-features"},{"type":"link","label":"Deploy your site","href":"/docs/How to update the docs/deploy-your-site","docId":"How to update the docs/deploy-your-site"},{"type":"link","label":"Congratulations!","href":"/docs/How to update the docs/congratulations","docId":"How to update the docs/congratulations"}],"href":"/docs/category/how-to-update-the-docs"},{"type":"category","label":"Informations","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Detect Dependency Cycles","href":"/docs/Informations/detect-dependency-cycles","docId":"Informations/detect-dependency-cycles"}]},{"type":"category","label":"services","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"tldraw","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"How it works","href":"/docs/services/tldraw/How it works","docId":"services/tldraw/How it works"},{"type":"link","label":"Local setup","href":"/docs/services/tldraw/Local setup","docId":"services/tldraw/Local setup"},{"type":"link","label":"Technical details","href":"/docs/services/tldraw/Technical details","docId":"services/tldraw/Technical details"}]}]}]},"docs":{"How to update the docs/congratulations":{"id":"How to update the docs/congratulations","title":"Congratulations!","description":"You have just learned the basics of Docusaurus and made some changes to the initial template.","sidebar":"tutorialSidebar"},"How to update the docs/create-a-blog-post":{"id":"How to update the docs/create-a-blog-post","title":"Create a Blog Post","description":"Docusaurus creates a page for each blog post, but also a blog index page, a tag system, an RSS feed...","sidebar":"tutorialSidebar"},"How to update the docs/create-a-document":{"id":"How to update the docs/create-a-document","title":"Create a Document","description":"Documents are groups of pages connected through:","sidebar":"tutorialSidebar"},"How to update the docs/create-a-page":{"id":"How to update the docs/create-a-page","title":"Create a Page","description":"Add Markdown or React files to src/pages to create a standalone page:","sidebar":"tutorialSidebar"},"How to update the docs/deploy-your-site":{"id":"How to update the docs/deploy-your-site","title":"Deploy your site","description":"Docusaurus is a static-site-generator (also called Jamstack).","sidebar":"tutorialSidebar"},"How to update the docs/markdown-features":{"id":"How to update the docs/markdown-features","title":"Markdown Features","description":"Docusaurus supports Markdown and a few additional features.","sidebar":"tutorialSidebar"},"Informations/detect-dependency-cycles":{"id":"Informations/detect-dependency-cycles","title":"Detect Dependency Cycles","description":"You can use following package and command to detect dependency cycles in code.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Schulcloud Documentation","description":"The schulcloud consists of many repositories.","sidebar":"tutorialSidebar"},"nuxt-client/Accessibility":{"id":"nuxt-client/Accessibility","title":"Accessibility (A11y)","description":"We want to make sure that our product can be used by anyone.","sidebar":"tutorialSidebar"},"nuxt-client/CodeConventions":{"id":"nuxt-client/CodeConventions","title":"Code Conventions","description":"- Code Conventions","sidebar":"tutorialSidebar"},"nuxt-client/Colors":{"id":"nuxt-client/Colors","title":"Colors","description":"You can find our custom defined theme colors under /src/themes/base-vuetify.options.js and their overwrites per theme in /src/themes//vuetify.options.js.","sidebar":"tutorialSidebar"},"nuxt-client/ComponentGuidelines":{"id":"nuxt-client/ComponentGuidelines","title":"Component Development Guidelines","description":"HTML is not a string","sidebar":"tutorialSidebar"},"nuxt-client/GettingStarted":{"id":"nuxt-client/GettingStarted","title":"Getting Started","description":"Development Setup","sidebar":"tutorialSidebar"},"nuxt-client/GitConventions":{"id":"nuxt-client/GitConventions","title":"Git Conventions","description":"Each change should be done in a Ticket (no matter how small).","sidebar":"tutorialSidebar"},"nuxt-client/HintsForWorking":{"id":"nuxt-client/HintsForWorking","title":"Hints for Working","description":"Working with Material Design Icons","sidebar":"tutorialSidebar"},"nuxt-client/HowTo":{"id":"nuxt-client/HowTo","title":"How To","description":"Collection of instructions on how to do certain things:","sidebar":"tutorialSidebar"},"nuxt-client/IdentifyingAndResolvingCircularDependencies":{"id":"nuxt-client/IdentifyingAndResolvingCircularDependencies","title":"Identifying and Resolving Circular Dependencies","description":"What is a circular dependency?","sidebar":"tutorialSidebar"},"nuxt-client/ProjectStructure":{"id":"nuxt-client/ProjectStructure","title":"Project Structure","description":"Filenames","sidebar":"tutorialSidebar"},"nuxt-client/WritingTests":{"id":"nuxt-client/WritingTests","title":"Writing Tests","description":"How to write valuable, reliable tests, that are easy to maintain.","sidebar":"tutorialSidebar"},"schulcloud-client/Getting started":{"id":"schulcloud-client/Getting started","title":"Getting started","description":"Make sure to have the following software installed","sidebar":"tutorialSidebar"},"schulcloud-server/Api":{"id":"schulcloud-server/Api","title":"API design","description":"nest.js","sidebar":"tutorialSidebar"},"schulcloud-server/architecture":{"id":"schulcloud-server/architecture","title":"Software Architecture","description":"Goals","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/access-legacy-code":{"id":"schulcloud-server/Coding-Guidelines/access-legacy-code","title":"Access legacy Code","description":"Access Feathers Service from NestJS","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/code-style":{"id":"schulcloud-server/Coding-Guidelines/code-style","title":"Code Style","description":"Function","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/controllers":{"id":"schulcloud-server/Coding-Guidelines/controllers","title":"Controller","description":"A modules api layer is defined within of controllers.","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/deprection-workflow":{"id":"schulcloud-server/Coding-Guidelines/deprection-workflow","title":"Deprecation Workflow","description":"When to use 2 step migration","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/domain-object-validation":{"id":"schulcloud-server/Coding-Guidelines/domain-object-validation","title":"Domain Object Validation","description":"If you need to validate a domain object, please write an independent class, so that the domain object itself, its repo and services can reuse it.","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/event-handling":{"id":"schulcloud-server/Coding-Guidelines/event-handling","title":"Event Handling","description":"Internal Events are used as a mechanism for Dependency Inversion.","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/exception-handling":{"id":"schulcloud-server/Coding-Guidelines/exception-handling","title":"Exception Handling","description":"exception hierarchy","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/logging":{"id":"schulcloud-server/Coding-Guidelines/logging","title":"Logging","description":"For logging use the Logger, exported by the logger module. It encapsulates a Winston logger. Its injection scope is transient, so you can set a context when you inject it.","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/micro-orm":{"id":"schulcloud-server/Coding-Guidelines/micro-orm","title":"Defining Entities","description":"When defining entities with MikroORM (Version 5), the following should be considered:","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/modules-submodules":{"id":"schulcloud-server/Coding-Guidelines/modules-submodules","title":"Implementation and usage of modules, submodule and barrel files in our project","description":"In this guide, we\'ll cover how to use modules, submodules and barrel files in our project. These concepts help you organize your code into separate files and directories, making it easier to manage and maintain.","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/repositories":{"id":"schulcloud-server/Coding-Guidelines/repositories","title":"Repositories","description":"The repository is responsible to provide domain objects for the domain layer. Typically, it does so by accessing a database.","sidebar":"tutorialSidebar"},"schulcloud-server/Coding-Guidelines/testing":{"id":"schulcloud-server/Coding-Guidelines/testing","title":"Testing","description":"Automated testing is the essential part of the software development process.","sidebar":"tutorialSidebar"},"schulcloud-server/Development/git":{"id":"schulcloud-server/Development/git","title":"Git","description":"Branch name conventions","sidebar":"tutorialSidebar"},"schulcloud-server/Development/keycloak":{"id":"schulcloud-server/Development/keycloak","title":"ErWIn-IDM (Keycloak)","description":"ErWIn-IDM, namely Keycloak, will be the future Identity Management System (IDM) for the dBildungscloud. Keycloak","sidebar":"tutorialSidebar"},"schulcloud-server/Development/rocket-chat":{"id":"schulcloud-server/Development/rocket-chat","title":"Rocket.Chat","description":"Start Mongodb","sidebar":"tutorialSidebar"},"schulcloud-server/Development/vs-code":{"id":"schulcloud-server/Development/vs-code","title":"VSCode","description":"Launch scripts","sidebar":"tutorialSidebar"},"schulcloud-server/Getting started":{"id":"schulcloud-server/Getting started","title":"Getting started","description":"Make sure to have the following software installed","sidebar":"tutorialSidebar"},"schulcloud-server/Migrations":{"id":"schulcloud-server/Migrations","title":"Migrations","description":"Migrations for server database","sidebar":"tutorialSidebar"},"services/tldraw/How it works":{"id":"services/tldraw/How it works","title":"How it works","description":"Configuration","sidebar":"tutorialSidebar"},"services/tldraw/Local setup":{"id":"services/tldraw/Local setup","title":"Local setup","description":"To run tldraw locally:","sidebar":"tutorialSidebar"},"services/tldraw/Technical details":{"id":"services/tldraw/Technical details","title":"Technical details","description":"Backend","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/d757ab52.c0a454b1.js b/assets/js/d757ab52.c0a454b1.js new file mode 100644 index 0000000..7e68667 --- /dev/null +++ b/assets/js/d757ab52.c0a454b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdataport_docusaurus=self.webpackChunkdataport_docusaurus||[]).push([[9826],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>m});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),d=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},h=function(e){var t=d(e.components);return a.createElement(l.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),p=d(n),u=r,m=p["".concat(l,".").concat(u)]||p[u]||c[u]||i;return n?a.createElement(m,o(o({ref:t},h),{},{components:n})):a.createElement(m,o({ref:t},h))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:r,o[1]=s;for(var d=2;d{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var a=n(7462),r=(n(7294),n(3905));const i={},o="How it works",s={unversionedId:"services/etherpad/How it works",id:"services/etherpad/How it works",title:"How it works",description:"Configuration",source:"@site/docs/services/etherpad/How it works.md",sourceDirName:"services/etherpad",slug:"/services/etherpad/How it works",permalink:"/docs/services/etherpad/How it works",draft:!1,editUrl:"https://github.com/hpi-schul-cloud/hpi-schul-cloud.github.io/blob/main/docs/services/etherpad/How it works.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Detect Dependency Cycles",permalink:"/docs/Informations/detect-dependency-cycles"},next:{title:"Local Setup",permalink:"/docs/services/etherpad/Local setup"}},l={},d=[{value:"Configuration",id:"configuration",level:2},{value:"Creating and Opening an Etherpad Element on a Column Board",id:"creating-and-opening-an-etherpad-element-on-a-column-board",level:2},{value:"Creating an Etherpad Element",id:"creating-an-etherpad-element",level:3},{value:"Interacting with the Etherpad Element",id:"interacting-with-the-etherpad-element",level:3},{value:"Grouping and Creating Etherpads",id:"grouping-and-creating-etherpads",level:3},{value:"Session Creation and Cookie Setting",id:"session-creation-and-cookie-setting",level:3},{value:"Opening the Etherpad",id:"opening-the-etherpad",level:3},{value:"Etherpad Adapter",id:"etherpad-adapter",level:2},{value:"Authentication",id:"authentication",level:2},{value:"Session managment",id:"session-managment",level:2},{value:"Etherpad Session Creation and Expiration",id:"etherpad-session-creation-and-expiration",level:3},{value:"Session Reuse",id:"session-reuse",level:3},{value:"Session Renewal",id:"session-renewal",level:3},{value:"Session Removal",id:"session-removal",level:3},{value:"Cookie Management",id:"cookie-management",level:3},{value:"Legacy Topics",id:"legacy-topics",level:3}],h={toc:d},p="wrapper";function c(e){let{components:t,...i}=e;return(0,r.kt)(p,(0,a.Z)({},h,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"how-it-works"},"How it works"),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"ETHERPAD_COOKIE__EXPIRES_SECONDS - time in seconds after which a session expires"),(0,r.kt)("li",{parentName:"ul"},"ETHERPAD_ETHERPAD_COOKIE_RELEASE_THRESHOLD - time in seconds after which a session is not returned to the user"),(0,r.kt)("li",{parentName:"ul"},"ETHERPAD_API_KEY - api key used for authentication of schulcloud server requests"),(0,r.kt)("li",{parentName:"ul"},"ETHERPAD_URI - Used as base path for api client in nest"),(0,r.kt)("li",{parentName:"ul"},"ETHERPAD__PAD_PATH - Used in legacy client to set path on cookie."),(0,r.kt)("li",{parentName:"ul"},"ETHERPAD__PAD_URI - Used for collab editor and lesson to build return url, Used in legacy client to build url"),(0,r.kt)("li",{parentName:"ul"},"ETHERPAD__NEW_DOMAIN - Used in legacy client to validate url"),(0,r.kt)("li",{parentName:"ul"},"ETHERPAD__OLD_DOMAIN - Used in legacy client to validate url"),(0,r.kt)("li",{parentName:"ul"},"ETHERPAD_API_PATH - Only used in tests."),(0,r.kt)("li",{parentName:"ul"},"ETHERPAD_BASE_URL - Not used.")),(0,r.kt)("h2",{id:"creating-and-opening-an-etherpad-element-on-a-column-board"},"Creating and Opening an Etherpad Element on a Column Board"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Requests of etherpad creation",src:n(6376).Z,width:"1251",height:"805"})),(0,r.kt)("h3",{id:"creating-an-etherpad-element"},"Creating an Etherpad Element"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"The user initiates the process by creating an Etherpad element on a column board."),(0,r.kt)("li",{parentName:"ol"},"Vue then sends a request to the board module in the Schulcloud server for a new Etherpad element."),(0,r.kt)("li",{parentName:"ol"},"The server responds by returning an Etherpad element which is then displayed on the board.")),(0,r.kt)("h3",{id:"interacting-with-the-etherpad-element"},"Interacting with the Etherpad Element"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"When the user clicks on the Etherpad element, the Vue client sends a request to the collaborative text editor module in the Schulcloud server for a new Etherpad."),(0,r.kt)("li",{parentName:"ol"},"The Schulcloud server is capable of creating Etherpads based on parent types. The parent type is further used for handling authorisation of the etherpad. Currently, the only parent type is a column board element.")),(0,r.kt)("h3",{id:"grouping-and-creating-etherpads"},"Grouping and Creating Etherpads"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"The Schulcloud server first creates a group that clusters several Etherpads together. Each group shares a session and a new group is created for every column board element. This requires sending a request to the Etherpad server."),(0,r.kt)("li",{parentName:"ol"},"Once the group is created, the server can send a request to create an Etherpad within that group.")),(0,r.kt)("h3",{id:"session-creation-and-cookie-setting"},"Session Creation and Cookie Setting"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"For session creation, the server first needs to request an Etherpad author and then the session for that author."),(0,r.kt)("li",{parentName:"ol"},"With that session, the server can set a session cookie in the client's browser and return the Etherpad URL to Vue.")),(0,r.kt)("h3",{id:"opening-the-etherpad"},"Opening the Etherpad"),(0,r.kt)("p",null,"In the final step, Vue opens the Etherpad URL in a new browser tab, enabling the user to interact directly with the Etherpad. It's important to note that the Etherpad client interface displayed to the user is served by the Etherpad server, and as such, it is not a part of our own codebase."),(0,r.kt)("h2",{id:"etherpad-adapter"},"Etherpad Adapter"),(0,r.kt)("p",null,"For the communication with the Etherpad server, the Schulcloud server uses an adapter. This adapter is responsible for handling all requests to the Etherpad server and ensuring that the correct data is sent and received. This adapter uses a client that is generated by open api generator. Client generation can be triggered with ",(0,r.kt)("inlineCode",{parentName:"p"},"generate-client:etherpad")," and should be executed after update of etherpad server."),(0,r.kt)("h2",{id:"authentication"},"Authentication"),(0,r.kt)("p",null,"The authentication process in our system works via a token. This token is sent with each request as a parameter to ensure secure communication."),(0,r.kt)("p",null,"The token is defined by the ",(0,r.kt)("inlineCode",{parentName:"p"},"ETHERPAD_API_KEY")," environment variable. This variable holds the key used for authentication, ensuring that only authorized requests are processed."),(0,r.kt)("p",null,"In the Schulcloud server, this API key is passed to the etherpad adapter on its initialization in the collaborative text editor module."),(0,r.kt)("h2",{id:"session-managment"},"Session managment"),(0,r.kt)("h3",{id:"etherpad-session-creation-and-expiration"},"Etherpad Session Creation and Expiration"),(0,r.kt)("p",null,"Each interaction with an Etherpad element initiates the creation of a new session. The lifespan of this session is determined by the ",(0,r.kt)("inlineCode",{parentName:"p"},"ETHERPAD_COOKIE__EXPIRES_SECONDS"),' environment variable. Once this time period elapses, the user loses access to the pad. This loss of access is indicated by the display of a non-translated English message: "You do not have permission to access this pad." However, even after the session expires, users can still view the pad content as long as they do not interact with it.'),(0,r.kt)("h3",{id:"session-reuse"},"Session Reuse"),(0,r.kt)("p",null,"Upon subsequent interactions with the Etherpad element, an existing session for that element may be reused. Whether an old session is reused or a new one is created depends on the environment variable settings. The ",(0,r.kt)("inlineCode",{parentName:"p"},"ETHERPAD_COOKIE_RELEASE_THRESHOLD")," variable determines the remaining validity period of a session for it to be delivered to the user. In the current production environment, both ",(0,r.kt)("inlineCode",{parentName:"p"},"ETHERPAD_COOKIE_RELEASE_THRESHOLD")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"ETHERPAD_COOKIE__EXPIRES_SECONDS")," are set to the same value of 2 hours. This configuration results in the creation of a new session for each interaction with an Etherpad element."),(0,r.kt)("h3",{id:"session-renewal"},"Session Renewal"),(0,r.kt)("p",null,"Currently there is no automatic session renewal upon interaction. Etherpad provides the ",(0,r.kt)("inlineCode",{parentName:"p"},"COOKIE_SESSION_REFRESH_INTERVAL")," configuration variable, which specifies the time period after which a user's session is automatically renewed in an open tab. However, this variable is currently unset, and the default value of 1 day has no effect because it exceeds the ",(0,r.kt)("inlineCode",{parentName:"p"},"ETHERPAD_COOKIE__EXPIRES_SECONDS")," value. Therefore, sessions are not automatically renewed."),(0,r.kt)("h3",{id:"session-removal"},"Session Removal"),(0,r.kt)("p",null,"When a user logs out of Schulcloud, all sessions are terminated, and the user loses access to the pads upon interaction. However, Etherpad sessions are not automatically removed upon user auto-logout in Schulcloud. As long as ",(0,r.kt)("inlineCode",{parentName:"p"},"ETHERPAD_COOKIE__EXPIRES_SECONDS")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"JWT_TIMEOUT_SECONDS")," are set to the same value, all sessions should theoretically become invalid after auto-logout."),(0,r.kt)("h3",{id:"cookie-management"},"Cookie Management"),(0,r.kt)("p",null,"A cookie named sessionID is stored for each session. These cookies are not programmatically removed after the ",(0,r.kt)("inlineCode",{parentName:"p"},"ETHERPAD_COOKIE__EXPIRES_SECONDS")," period or upon Schulcloud logout."),(0,r.kt)("h3",{id:"legacy-topics"},"Legacy Topics"),(0,r.kt)("p",null,"Same session behavior also applies to legacy code. Env vars are used by both implementations."),(0,r.kt)("p",null,"In contrast to the nest code in legacy code a session is created for every course and stored as a cookie for every etherpad."))}c.isMDXComponent=!0},6376:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/how_it_works-5ce97ed02f4c54237f64f270244a59f0.png"}}]); \ No newline at end of file diff --git a/assets/js/f701fe34.25c00fdd.js b/assets/js/f701fe34.25c00fdd.js deleted file mode 100644 index 390416e..0000000 --- a/assets/js/f701fe34.25c00fdd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdataport_docusaurus=self.webpackChunkdataport_docusaurus||[]).push([[4020],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function l(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var i=r.createContext({}),d=function(e){var t=r.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},c=function(e){var t=d(e.components);return r.createElement(i.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},w=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=d(a),w=n,f=u["".concat(i,".").concat(w)]||u[w]||p[w]||o;return a?r.createElement(f,l(l({ref:t},c),{},{components:a})):r.createElement(f,l({ref:t},c))}));function f(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,l=new Array(o);l[0]=w;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[u]="string"==typeof e?e:n,l[1]=s;for(var d=2;d{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=a(7462),n=(a(7294),a(3905));const o={},l="How it works",s={unversionedId:"services/tldraw/How it works",id:"services/tldraw/How it works",title:"How it works",description:"Configuration",source:"@site/docs/services/tldraw/How it works.md",sourceDirName:"services/tldraw",slug:"/services/tldraw/How it works",permalink:"/docs/services/tldraw/How it works",draft:!1,editUrl:"https://github.com/hpi-schul-cloud/hpi-schul-cloud.github.io/blob/main/docs/services/tldraw/How it works.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Detect Dependency Cycles",permalink:"/docs/Informations/detect-dependency-cycles"},next:{title:"Local setup",permalink:"/docs/services/tldraw/Local setup"}},i={},d=[{value:"Configuration",id:"configuration",level:2},{value:"Create",id:"create",level:2},{value:"Usage",id:"usage",level:2},{value:"Connection",id:"connection",level:3},{value:"Sending updates/storing data",id:"sending-updatesstoring-data",level:3},{value:"Delete",id:"delete",level:2},{value:"Assets",id:"assets",level:2},{value:"files upload",id:"files-upload",level:3},{value:"files deletion",id:"files-deletion",level:3}],c={toc:d},u="wrapper";function p(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"how-it-works"},"How it works"),(0,n.kt)("h2",{id:"configuration"},"Configuration"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"NEST_LOG_LEVEL - logging level"),(0,n.kt)("li",{parentName:"ul"},"FEATURE_TLDRAW_ENABLED - flag determining if tldraw is enabled"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW_URI - address of tldraw server "),(0,n.kt)("li",{parentName:"ul"},"INCOMING_REQUEST_TIMEOUT - request timeout"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW_DB_URL - mongoDB connection string"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__SOCKET_PORT - port number for websockets connection"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__PING_TIMEOUT - timeout for ping-pong during establishing websockets connection"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__FINALIZE_DELAY - delay in ms before checking if can finalize a tldraw board"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__GC_ENABLED - if tldraw garbage collector should be enabled"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__DB_COMPRESS_THRESHOLD - threshold size for tldraw mongo documents compression"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__MAX_DOCUMENT_SIZE - max size of a single tldraw document in mongo"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__ASSETS_ENABLED - enables uploading assets to tldraw board"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__ASSETS_SYNC_ENABLED - enables synch of tldraw board assets with filestorage (no longer used)"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__ASSETS_MAX_SIZE - maximum asset size in bytes"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__ASSETS_ALLOWED_MIME_TYPES_LIST - listy of allowed assets MIME types"),(0,n.kt)("li",{parentName:"ul"},"REDIS_URI - Redis connection string"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW_CLIENT_REPLICAS - number of pods for tldraw-client "),(0,n.kt)("li",{parentName:"ul"},"TLDRAW_SERVER_REPLICAS - number of pods for tldraw-server"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW_ADMIN_API_CLIENT__API_KEY - authorization API key for accessing tldraw controller (delete flow) "),(0,n.kt)("li",{parentName:"ul"},"TLDRAW_ADMIN_API_CLIENT__BASE_URL - address of tldraw controller (delete flow) ")),(0,n.kt)("p",null,"In order to have deletion functionality fully working you have to fill those feature flags, e.g.:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"ADMIN_API__ALLOWED_API_KEYS=",'["7ccd4e11-c6f6-48b0-81eb-abcdef123456"]'),(0,n.kt)("li",{parentName:"ul"},'TLDRAW_ADMIN_API_CLIENT__API_KEY="7ccd4e11-c6f6-48b0-81eb-abcdef123456"'),(0,n.kt)("li",{parentName:"ul"},'TLDRAW_ADMIN_API_CLIENT__BASE_URL="http://localhost:3349"')),(0,n.kt)("h2",{id:"create"},"Create"),(0,n.kt)("p",null,"![Create tldraw workflow]","(./assets/Create TLDRAW.drawio.svg)"),(0,n.kt)("p",null,"Creation of Tldraw starts with creation proccess for Courses and CourseBoard. It has Representation in CourseBoard as card's element (BoardNode in db). After creating Representation of drawing we can enter actual tldraw SPA client (left side of picture)."),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"User enters CourseBoard and creates Representation of whiteboard (tldraw) in CourseCard."),(0,n.kt)("li",{parentName:"ol"},"Data is saved and feedback with proper creation is given - user can see Representation and can enter whiteboard."),(0,n.kt)("li",{parentName:"ol"},"By entering whiteboard user is redirected to SPA tldraw-client."),(0,n.kt)("li",{parentName:"ol"},"Tldraw-client is starting WS connection with tldraw-server."),(0,n.kt)("li",{parentName:"ol"},"Tldraw-server firstly checks if user has permission to this resource (by checking if user has a permission to Representation of whiteboard -BoardNode).\nId of Representation is same as drawingName, which is visible in tldraw-client url."),(0,n.kt)("li",{parentName:"ol"},"If user has permission tldraw-server is allowing to remain connection and getting drawing data from separate tldraw-db. If there were no drawing data saved tldraw-server will create it automatically. ")),(0,n.kt)("h2",{id:"usage"},"Usage"),(0,n.kt)("p",null,"![Usage tldraw workflow]","(./assets/Use tldraw.drawio.svg)"),(0,n.kt)("h3",{id:"connection"},"Connection"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"user joins tldraw board"),(0,n.kt)("li",{parentName:"ol"},"tldraw-client connects to one of the tldraw-server pods and tries to establish websocket connection"),(0,n.kt)("li",{parentName:"ol"},"tldraw-server calls schulcloud-server via HTTP requests to check user permissions, if everything is fine the websocket connection is established"),(0,n.kt)("li",{parentName:"ol"},"tldraw-server gets stored tldraw board data from mongodb and sends it via websocket to connected users"),(0,n.kt)("li",{parentName:"ol"},"tldraw-server starts subscribing to Redis PUBSUB channel corresponding to tldraw board name to listen to changes from other pods")),(0,n.kt)("h3",{id:"sending-updatesstoring-data"},"Sending updates/storing data"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"tldraw-client sends user's drawing changes to the tldraw-server via websocket connection"),(0,n.kt)("li",{parentName:"ol"},"tldraw-server stores the board update in the mongodb - basically creates a diff between what's already stored and what's being updated"),(0,n.kt)("li",{parentName:"ol"},"tldraw-server pushes the update to correct Redis channel so that clients connected to different pods have synchronized board data"),(0,n.kt)("li",{parentName:"ol"},"other pods subscribing to Redis channel send updates to their connected clients via websocket whenever they see a new message on Redis channel")),(0,n.kt)("h2",{id:"delete"},"Delete"),(0,n.kt)("p",null,"![Delete tldraw workflow]","(./assets/Delete TLDRAW.drawio.svg)"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"User from schulcloud app in CourseBoard deletes whiteboard (tldraw) instance form CardBoard."),(0,n.kt)("li",{parentName:"ol"},"Having drawingName sc-server is removing Representation data in sc-database - BoardNodes collection ( drawingName === BoardNode id)"),(0,n.kt)("li",{parentName:"ol"},"Sc-server is calling tldraw-server via tldraw-management rules in tldraw-server-svc to delete all data that has given id)."),(0,n.kt)("li",{parentName:"ol"},"After deletion user sees refreshed state of CourseBoard. ")),(0,n.kt)("h2",{id:"assets"},"Assets"),(0,n.kt)("h3",{id:"files-upload"},"files upload"),(0,n.kt)("p",null,"Images/GIFs can be uploaded into tldraw whiteboard by every user with access to the board. We use s3 storage to physically store uploaded assets while tldraw only holds URL to a resource."),(0,n.kt)("p",null,"The files are uploaded by calling schulcloud-api's fileController upload endpoint. This is possible because tldraw is represented as a boardnode called drawing-element. Mongo id of this drawing-element is a roomId used in URL param when connecting to a specific board."),(0,n.kt)("h3",{id:"files-deletion"},"files deletion"),(0,n.kt)("p",null,"Because of the undo/redo functionality of tldraw (user can basically undo an upload of an image, undo a deletion, then redo upload etc.) we needed a way to clean up unused assets from the storage. We could not use soft delete/restore endpoints every time undo/redo happens due to various issues with performance/user experience and technical challenges that arose when testing different scenarios. We decided to go with cron job solution: once per day, at midnight by default, we would go through each board stored in database, get every asset that's stored as URL but no longer used as an active drawing and then delete all of them via amqp call to filesStorage service."),(0,n.kt)("p",null,"For implementation details, take a look at: tldraw-files.console.ts."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f701fe34.c395d937.js b/assets/js/f701fe34.c395d937.js new file mode 100644 index 0000000..a7ded6c --- /dev/null +++ b/assets/js/f701fe34.c395d937.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdataport_docusaurus=self.webpackChunkdataport_docusaurus||[]).push([[4020],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function l(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var i=r.createContext({}),d=function(e){var t=r.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},c=function(e){var t=d(e.components);return r.createElement(i.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},w=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=d(a),w=n,f=u["".concat(i,".").concat(w)]||u[w]||p[w]||o;return a?r.createElement(f,l(l({ref:t},c),{},{components:a})):r.createElement(f,l({ref:t},c))}));function f(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,l=new Array(o);l[0]=w;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[u]="string"==typeof e?e:n,l[1]=s;for(var d=2;d{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=a(7462),n=(a(7294),a(3905));const o={},l="How it works",s={unversionedId:"services/tldraw/How it works",id:"services/tldraw/How it works",title:"How it works",description:"Configuration",source:"@site/docs/services/tldraw/How it works.md",sourceDirName:"services/tldraw",slug:"/services/tldraw/How it works",permalink:"/docs/services/tldraw/How it works",draft:!1,editUrl:"https://github.com/hpi-schul-cloud/hpi-schul-cloud.github.io/blob/main/docs/services/tldraw/How it works.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Local Setup",permalink:"/docs/services/etherpad/Local setup"},next:{title:"Local setup",permalink:"/docs/services/tldraw/Local setup"}},i={},d=[{value:"Configuration",id:"configuration",level:2},{value:"Create",id:"create",level:2},{value:"Usage",id:"usage",level:2},{value:"Connection",id:"connection",level:3},{value:"Sending updates/storing data",id:"sending-updatesstoring-data",level:3},{value:"Delete",id:"delete",level:2},{value:"Assets",id:"assets",level:2},{value:"files upload",id:"files-upload",level:3},{value:"files deletion",id:"files-deletion",level:3}],c={toc:d},u="wrapper";function p(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"how-it-works"},"How it works"),(0,n.kt)("h2",{id:"configuration"},"Configuration"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"NEST_LOG_LEVEL - logging level"),(0,n.kt)("li",{parentName:"ul"},"FEATURE_TLDRAW_ENABLED - flag determining if tldraw is enabled"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW_URI - address of tldraw server "),(0,n.kt)("li",{parentName:"ul"},"INCOMING_REQUEST_TIMEOUT - request timeout"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW_DB_URL - mongoDB connection string"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__SOCKET_PORT - port number for websockets connection"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__PING_TIMEOUT - timeout for ping-pong during establishing websockets connection"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__FINALIZE_DELAY - delay in ms before checking if can finalize a tldraw board"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__GC_ENABLED - if tldraw garbage collector should be enabled"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__DB_COMPRESS_THRESHOLD - threshold size for tldraw mongo documents compression"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__MAX_DOCUMENT_SIZE - max size of a single tldraw document in mongo"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__ASSETS_ENABLED - enables uploading assets to tldraw board"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__ASSETS_SYNC_ENABLED - enables synch of tldraw board assets with filestorage (no longer used)"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__ASSETS_MAX_SIZE - maximum asset size in bytes"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW__ASSETS_ALLOWED_MIME_TYPES_LIST - listy of allowed assets MIME types"),(0,n.kt)("li",{parentName:"ul"},"REDIS_URI - Redis connection string"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW_CLIENT_REPLICAS - number of pods for tldraw-client "),(0,n.kt)("li",{parentName:"ul"},"TLDRAW_SERVER_REPLICAS - number of pods for tldraw-server"),(0,n.kt)("li",{parentName:"ul"},"TLDRAW_ADMIN_API_CLIENT__API_KEY - authorization API key for accessing tldraw controller (delete flow) "),(0,n.kt)("li",{parentName:"ul"},"TLDRAW_ADMIN_API_CLIENT__BASE_URL - address of tldraw controller (delete flow) ")),(0,n.kt)("p",null,"In order to have deletion functionality fully working you have to fill those feature flags, e.g.:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"ADMIN_API__ALLOWED_API_KEYS=",'["7ccd4e11-c6f6-48b0-81eb-abcdef123456"]'),(0,n.kt)("li",{parentName:"ul"},'TLDRAW_ADMIN_API_CLIENT__API_KEY="7ccd4e11-c6f6-48b0-81eb-abcdef123456"'),(0,n.kt)("li",{parentName:"ul"},'TLDRAW_ADMIN_API_CLIENT__BASE_URL="http://localhost:3349"')),(0,n.kt)("h2",{id:"create"},"Create"),(0,n.kt)("p",null,"![Create tldraw workflow]","(./assets/Create TLDRAW.drawio.svg)"),(0,n.kt)("p",null,"Creation of Tldraw starts with creation proccess for Courses and CourseBoard. It has Representation in CourseBoard as card's element (BoardNode in db). After creating Representation of drawing we can enter actual tldraw SPA client (left side of picture)."),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"User enters CourseBoard and creates Representation of whiteboard (tldraw) in CourseCard."),(0,n.kt)("li",{parentName:"ol"},"Data is saved and feedback with proper creation is given - user can see Representation and can enter whiteboard."),(0,n.kt)("li",{parentName:"ol"},"By entering whiteboard user is redirected to SPA tldraw-client."),(0,n.kt)("li",{parentName:"ol"},"Tldraw-client is starting WS connection with tldraw-server."),(0,n.kt)("li",{parentName:"ol"},"Tldraw-server firstly checks if user has permission to this resource (by checking if user has a permission to Representation of whiteboard -BoardNode).\nId of Representation is same as drawingName, which is visible in tldraw-client url."),(0,n.kt)("li",{parentName:"ol"},"If user has permission tldraw-server is allowing to remain connection and getting drawing data from separate tldraw-db. If there were no drawing data saved tldraw-server will create it automatically. ")),(0,n.kt)("h2",{id:"usage"},"Usage"),(0,n.kt)("p",null,"![Usage tldraw workflow]","(./assets/Use tldraw.drawio.svg)"),(0,n.kt)("h3",{id:"connection"},"Connection"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"user joins tldraw board"),(0,n.kt)("li",{parentName:"ol"},"tldraw-client connects to one of the tldraw-server pods and tries to establish websocket connection"),(0,n.kt)("li",{parentName:"ol"},"tldraw-server calls schulcloud-server via HTTP requests to check user permissions, if everything is fine the websocket connection is established"),(0,n.kt)("li",{parentName:"ol"},"tldraw-server gets stored tldraw board data from mongodb and sends it via websocket to connected users"),(0,n.kt)("li",{parentName:"ol"},"tldraw-server starts subscribing to Redis PUBSUB channel corresponding to tldraw board name to listen to changes from other pods")),(0,n.kt)("h3",{id:"sending-updatesstoring-data"},"Sending updates/storing data"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"tldraw-client sends user's drawing changes to the tldraw-server via websocket connection"),(0,n.kt)("li",{parentName:"ol"},"tldraw-server stores the board update in the mongodb - basically creates a diff between what's already stored and what's being updated"),(0,n.kt)("li",{parentName:"ol"},"tldraw-server pushes the update to correct Redis channel so that clients connected to different pods have synchronized board data"),(0,n.kt)("li",{parentName:"ol"},"other pods subscribing to Redis channel send updates to their connected clients via websocket whenever they see a new message on Redis channel")),(0,n.kt)("h2",{id:"delete"},"Delete"),(0,n.kt)("p",null,"![Delete tldraw workflow]","(./assets/Delete TLDRAW.drawio.svg)"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"User from schulcloud app in CourseBoard deletes whiteboard (tldraw) instance form CardBoard."),(0,n.kt)("li",{parentName:"ol"},"Having drawingName sc-server is removing Representation data in sc-database - BoardNodes collection ( drawingName === BoardNode id)"),(0,n.kt)("li",{parentName:"ol"},"Sc-server is calling tldraw-server via tldraw-management rules in tldraw-server-svc to delete all data that has given id)."),(0,n.kt)("li",{parentName:"ol"},"After deletion user sees refreshed state of CourseBoard. ")),(0,n.kt)("h2",{id:"assets"},"Assets"),(0,n.kt)("h3",{id:"files-upload"},"files upload"),(0,n.kt)("p",null,"Images/GIFs can be uploaded into tldraw whiteboard by every user with access to the board. We use s3 storage to physically store uploaded assets while tldraw only holds URL to a resource."),(0,n.kt)("p",null,"The files are uploaded by calling schulcloud-api's fileController upload endpoint. This is possible because tldraw is represented as a boardnode called drawing-element. Mongo id of this drawing-element is a roomId used in URL param when connecting to a specific board."),(0,n.kt)("h3",{id:"files-deletion"},"files deletion"),(0,n.kt)("p",null,"Because of the undo/redo functionality of tldraw (user can basically undo an upload of an image, undo a deletion, then redo upload etc.) we needed a way to clean up unused assets from the storage. We could not use soft delete/restore endpoints every time undo/redo happens due to various issues with performance/user experience and technical challenges that arose when testing different scenarios. We decided to go with cron job solution: once per day, at midnight by default, we would go through each board stored in database, get every asset that's stored as URL but no longer used as an active drawing and then delete all of them via amqp call to filesStorage service."),(0,n.kt)("p",null,"For implementation details, take a look at: tldraw-files.console.ts."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.125abcd6.js b/assets/js/main.125abcd6.js deleted file mode 100644 index 0cacdfa..0000000 --- a/assets/js/main.125abcd6.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.125abcd6.js.LICENSE.txt */ -(self.webpackChunkdataport_docusaurus=self.webpackChunkdataport_docusaurus||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),l=n(6887);const s={"09271db2":[()=>n.e(1670).then(n.t.bind(n,5745,19)),"/home/runner/work/schulcloud-documentation/schulcloud-documentation/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"09e11c27":[()=>n.e(1932).then(n.bind(n,5170)),"@site/docs/nuxt-client/9_HintsForWorking.md",5170],"0e384e19":[()=>n.e(9671).then(n.bind(n,9881)),"@site/docs/intro.md",9881],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,4228)),"@theme/DocCategoryGeneratedIndexPage",4228],17896441:[()=>Promise.all([n.e(532),n.e(2784),n.e(7918)]).then(n.bind(n,230)),"@theme/DocItem",230],"18a636a5":[()=>n.e(5556).then(n.bind(n,6807)),"@site/docs/nuxt-client/3_GitConventions.md",6807],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,2027)),"@theme/SearchPage",2027],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1c700299":[()=>n.e(7464).then(n.bind(n,9760)),"@site/docs/schulcloud-server/Coding-Guidelines/repositories.md",9760],"1df93b7f":[()=>Promise.all([n.e(532),n.e(3237)]).then(n.bind(n,3808)),"@site/src/pages/index.tsx",3808],"1f391b9e":[()=>Promise.all([n.e(532),n.e(2784),n.e(3085)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],"2276cd77":[()=>n.e(5125).then(n.t.bind(n,9973,19)),"~docs/default/category-docs-tutorialsidebar-category-how-to-update-the-docs-da9.json",9973],"234d9ac0":[()=>n.e(8844).then(n.bind(n,8545)),"@site/docs/schulcloud-server/Development/vs-code.md",8545],"25d29d9b":[()=>n.e(3195).then(n.bind(n,9368)),"@site/docs/schulcloud-server/Coding-Guidelines/controllers.md",9368],"287ec6bc":[()=>n.e(4615).then(n.bind(n,6573)),"@site/docs/nuxt-client/1_ProjectStructure.md",6573],"306c3845":[()=>n.e(6616).then(n.t.bind(n,2776,19)),"/home/runner/work/schulcloud-documentation/schulcloud-documentation/.docusaurus/@easyops-cn/docusaurus-search-local/default/plugin-route-context-module-100.json",2776],"393be207":[()=>n.e(7414).then(n.bind(n,3123)),"@site/src/pages/markdown-page.md",3123],"4648a6e8":[()=>n.e(3879).then(n.bind(n,5208)),"@site/docs/schulcloud-server/Development/rocket-chat.md",5208],"46dbb8ab":[()=>n.e(1594).then(n.bind(n,3730)),"@site/docs/Informations/detect-dependency-cycles.md",3730],48751006:[()=>n.e(7858).then(n.bind(n,7660)),"@site/docs/schulcloud-server/Coding-Guidelines/exception-handling.md",7660],"4ad69fc2":[()=>n.e(5773).then(n.bind(n,7489)),"@site/docs/schulcloud-server/Migrations.md",7489],"4f93518d":[()=>n.e(8404).then(n.bind(n,3124)),"@site/docs/schulcloud-server/Coding-Guidelines/access-legacy-code.md",3124],"579213b9":[()=>n.e(3093).then(n.bind(n,9405)),"@site/docs/How to update the docs/congratulations.md",9405],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"64027feb":[()=>n.e(7816).then(n.bind(n,3144)),"@site/docs/schulcloud-server/architecture.md",3144],"679fb4ac":[()=>n.e(1796).then(n.bind(n,5470)),"@site/docs/schulcloud-server/Coding-Guidelines/code-style.md",5470],"67d0f22c":[()=>n.e(6947).then(n.bind(n,2226)),"@site/docs/schulcloud-server/Coding-Guidelines/logging.md",2226],"6af581cf":[()=>n.e(8639).then(n.bind(n,5064)),"@site/docs/nuxt-client/0_GettingStarted.md",5064],76533127:[()=>n.e(9903).then(n.bind(n,9541)),"@site/docs/schulcloud-client/Getting started.md",9541],"76ac0d9b":[()=>n.e(4038).then(n.bind(n,3406)),"@site/docs/schulcloud-server/Getting started.md",3406],"785f7b5a":[()=>n.e(8981).then(n.bind(n,9846)),"@site/docs/nuxt-client/5_WritingTests.md",9846],"78e80160":[()=>n.e(7975).then(n.bind(n,8794)),"@site/docs/nuxt-client/8_IdentifyingAndResolvingCircularDependencies.md",8794],"7fbcedce":[()=>n.e(9539).then(n.bind(n,2398)),"@site/docs/nuxt-client/7_Colors.md",2398],"7fbd2616":[()=>n.e(5896).then(n.bind(n,8411)),"@site/docs/schulcloud-server/Development/git.md",8411],81589697:[()=>n.e(2996).then(n.bind(n,354)),"@site/docs/How to update the docs/deploy-your-site.md",354],"88fdfd2d":[()=>n.e(2732).then(n.bind(n,7947)),"@site/docs/How to update the docs/markdown-features.mdx",7947],"8e3ce21d":[()=>n.e(4233).then(n.bind(n,6358)),"@site/docs/schulcloud-server/Coding-Guidelines/event-handling.md",6358],"8e9e9291":[()=>n.e(4968).then(n.bind(n,4635)),"@site/docs/How to update the docs/create-a-blog-post.md",4635],"8fc771c1":[()=>n.e(8896).then(n.bind(n,34)),"@site/docs/schulcloud-server/Development/keycloak.md",34],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"95fe1a58":[()=>n.e(9739).then(n.t.bind(n,3769,19)),"/home/runner/work/schulcloud-documentation/schulcloud-documentation/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"9a9bfca7":[()=>n.e(2341).then(n.bind(n,1040)),"@site/docs/schulcloud-server/Coding-Guidelines/micro-orm.md",1040],"9bc4dd96":[()=>n.e(770).then(n.t.bind(n,4832,19)),"~docs/default/category-docs-tutorialsidebar-category-nuxt-client-514.json",4832],"9e1b0827":[()=>n.e(2364).then(n.bind(n,2816)),"@site/docs/nuxt-client/2_CodeConventions.md",2816],a5f57a66:[()=>n.e(7022).then(n.bind(n,7655)),"@site/docs/nuxt-client/4_HowTo.md",7655],aa3d8eef:[()=>n.e(3941).then(n.t.bind(n,432,19)),"~docs/default/category-docs-tutorialsidebar-category-schulcloud-server-2d3.json",432],b7891a86:[()=>n.e(1142).then(n.bind(n,2518)),"@site/docs/nuxt-client/ComponentGuidelines.md",2518],cc565af5:[()=>n.e(1292).then(n.bind(n,1938)),"@site/docs/schulcloud-server/Coding-Guidelines/deprection-workflow.md",1938],dc9c4dc5:[()=>n.e(2395).then(n.bind(n,6390)),"@site/docs/How to update the docs/create-a-page.md",6390],dcaf9ebd:[()=>n.e(3589).then(n.bind(n,4532)),"@site/docs/schulcloud-server/Api.md",4532],dd56d1b0:[()=>n.e(3958).then(n.bind(n,5185)),"@site/docs/nuxt-client/6_Accessibility.md",5185],e4a1fa55:[()=>n.e(4293).then(n.bind(n,9567)),"@site/docs/schulcloud-server/Coding-Guidelines/testing.md",9567],e849eca6:[()=>n.e(8171).then(n.bind(n,3091)),"@site/docs/schulcloud-server/Coding-Guidelines/domain-object-validation.md",3091],e8e7469b:[()=>n.e(3027).then(n.t.bind(n,2407,19)),"~docs/default/category-docs-tutorialsidebar-category-schulcloud-client-f67.json",2407],ef5d9dc5:[()=>n.e(4028).then(n.bind(n,3464)),"@site/docs/services/tldraw/Technical details.md",3464],f016df95:[()=>n.e(2857).then(n.bind(n,6243)),"@site/docs/services/tldraw/Local setup.md",6243],f701fe34:[()=>n.e(4020).then(n.bind(n,7992)),"@site/docs/services/tldraw/How it works.md",7992],f70b05ae:[()=>n.e(1779).then(n.bind(n,1539)),"@site/docs/How to update the docs/create-a-document.md",1539],ff57262e:[()=>n.e(8247).then(n.bind(n,3792)),"@site/docs/schulcloud-server/Coding-Guidelines/modules-submodules.md",3792]};function u(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("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%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("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"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=l[`${e}-${t}`],f={},p=[],h=[],m=(0,c.Z)(a);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),h.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>h,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{a=a[e]})),a[l[l.length-1]]=o}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},i,n)))}})}const p=[{path:"/markdown-page",component:f("/markdown-page","4c1"),exact:!0},{path:"/search",component:f("/search","407"),exact:!0},{path:"/docs",component:f("/docs","9f4"),routes:[{path:"/docs/category/how-to-update-the-docs",component:f("/docs/category/how-to-update-the-docs","092"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/nuxt-client",component:f("/docs/category/nuxt-client","e2a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/schulcloud-client",component:f("/docs/category/schulcloud-client","ebf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/schulcloud-server",component:f("/docs/category/schulcloud-server","fad"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/How to update the docs/congratulations",component:f("/docs/How to update the docs/congratulations","b44"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/How to update the docs/create-a-blog-post",component:f("/docs/How to update the docs/create-a-blog-post","ef7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/How to update the docs/create-a-document",component:f("/docs/How to update the docs/create-a-document","30e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/How to update the docs/create-a-page",component:f("/docs/How to update the docs/create-a-page","bda"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/How to update the docs/deploy-your-site",component:f("/docs/How to update the docs/deploy-your-site","2c7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/How to update the docs/markdown-features",component:f("/docs/How to update the docs/markdown-features","608"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Informations/detect-dependency-cycles",component:f("/docs/Informations/detect-dependency-cycles","277"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro",component:f("/docs/intro","aed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nuxt-client/Accessibility",component:f("/docs/nuxt-client/Accessibility","379"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nuxt-client/CodeConventions",component:f("/docs/nuxt-client/CodeConventions","902"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nuxt-client/Colors",component:f("/docs/nuxt-client/Colors","389"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nuxt-client/ComponentGuidelines",component:f("/docs/nuxt-client/ComponentGuidelines","005"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nuxt-client/GettingStarted",component:f("/docs/nuxt-client/GettingStarted","17a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nuxt-client/GitConventions",component:f("/docs/nuxt-client/GitConventions","3c7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nuxt-client/HintsForWorking",component:f("/docs/nuxt-client/HintsForWorking","833"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nuxt-client/HowTo",component:f("/docs/nuxt-client/HowTo","d3d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nuxt-client/IdentifyingAndResolvingCircularDependencies",component:f("/docs/nuxt-client/IdentifyingAndResolvingCircularDependencies","166"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nuxt-client/ProjectStructure",component:f("/docs/nuxt-client/ProjectStructure","f6c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/nuxt-client/WritingTests",component:f("/docs/nuxt-client/WritingTests","640"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-client/Getting started",component:f("/docs/schulcloud-client/Getting started","464"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Api",component:f("/docs/schulcloud-server/Api","ff8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/architecture",component:f("/docs/schulcloud-server/architecture","67a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Coding-Guidelines/access-legacy-code",component:f("/docs/schulcloud-server/Coding-Guidelines/access-legacy-code","7ca"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Coding-Guidelines/code-style",component:f("/docs/schulcloud-server/Coding-Guidelines/code-style","b84"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Coding-Guidelines/controllers",component:f("/docs/schulcloud-server/Coding-Guidelines/controllers","d09"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Coding-Guidelines/deprection-workflow",component:f("/docs/schulcloud-server/Coding-Guidelines/deprection-workflow","d71"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Coding-Guidelines/domain-object-validation",component:f("/docs/schulcloud-server/Coding-Guidelines/domain-object-validation","daf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Coding-Guidelines/event-handling",component:f("/docs/schulcloud-server/Coding-Guidelines/event-handling","5ce"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Coding-Guidelines/exception-handling",component:f("/docs/schulcloud-server/Coding-Guidelines/exception-handling","e0d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Coding-Guidelines/logging",component:f("/docs/schulcloud-server/Coding-Guidelines/logging","c7c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Coding-Guidelines/micro-orm",component:f("/docs/schulcloud-server/Coding-Guidelines/micro-orm","8cf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Coding-Guidelines/modules-submodules",component:f("/docs/schulcloud-server/Coding-Guidelines/modules-submodules","733"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Coding-Guidelines/repositories",component:f("/docs/schulcloud-server/Coding-Guidelines/repositories","10d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Coding-Guidelines/testing",component:f("/docs/schulcloud-server/Coding-Guidelines/testing","8a7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Development/git",component:f("/docs/schulcloud-server/Development/git","e08"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Development/keycloak",component:f("/docs/schulcloud-server/Development/keycloak","a56"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Development/rocket-chat",component:f("/docs/schulcloud-server/Development/rocket-chat","311"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Development/vs-code",component:f("/docs/schulcloud-server/Development/vs-code","e39"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Getting started",component:f("/docs/schulcloud-server/Getting started","081"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/schulcloud-server/Migrations",component:f("/docs/schulcloud-server/Migrations","9ef"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/services/tldraw/How it works",component:f("/docs/services/tldraw/How it works","57b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/services/tldraw/Local setup",component:f("/docs/services/tldraw/Local setup","2f1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/services/tldraw/Technical details",component:f("/docs/services/tldraw/Technical details","ab9"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/",component:f("/","dc7"),exact:!0},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},7221:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var u=n(723),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),h=n(5742),m=n(2263),g=n(4996),v=n(6668),b=n(1944),y=n(4711),w=n(9727),k=n(3320),E=n(8780),S=n(197);function x(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,m.Z)(),n=(0,y.l)();return r.createElement(h.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function C(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,m.Z)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,m.Z)(),{pathname:r}=(0,c.TH)();return e+(0,E.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:o;return r.createElement(h.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function _(){const{i18n:{currentLocale:e}}=(0,m.Z)(),{metadata:t,image:n}=(0,v.L)();return r.createElement(r.Fragment,null,r.createElement(h.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(b.d,{image:n}),r.createElement(C,null),r.createElement(x,null),r.createElement(S.Z,{tag:k.HX,locale:e}),r.createElement(h.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const T=new Map;function L(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var A=n(8934),R=n(8940);function P(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 O=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==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:o}),P("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?P("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=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(O,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const D=I,M="__docusaurus-base-url-issue-banner-container",F="__docusaurus-base-url-issue-banner",j="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${M}');\n if (!bannerContainer) {\n return;\n }\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(/{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(h.Z,null,r.createElement("script",null,z(e))),r.createElement("div",{id:M}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,m.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement($,null):null}function G(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,m.Z)(),i=(0,g.Z)(e),{htmlLang:l,direction:s}=a[o];return r.createElement(h.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var H=n(4763),q=n(2389);function Q(){const e=(0,q.Z)();return r.createElement(h.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function Z(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(H.Z,null,r.createElement(R.M,null,r.createElement(A.t,null,r.createElement(f,null,r.createElement(G,null),r.createElement(_,null),r.createElement(U,null),r.createElement(D,{location:L(t)},e)),r.createElement(Q,null))))}var V=n(6887);const W=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const 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 K=n(9670);const Y=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Y.has(e))(e))return!1;Y.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(V).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?W(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),N(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=o.hydrate;N(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(Z,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"How to update the docs/congratulations","path":"/docs/How to update the docs/congratulations","sidebar":"tutorialSidebar"},{"id":"How to update the docs/create-a-blog-post","path":"/docs/How to update the docs/create-a-blog-post","sidebar":"tutorialSidebar"},{"id":"How to update the docs/create-a-document","path":"/docs/How to update the docs/create-a-document","sidebar":"tutorialSidebar"},{"id":"How to update the docs/create-a-page","path":"/docs/How to update the docs/create-a-page","sidebar":"tutorialSidebar"},{"id":"How to update the docs/deploy-your-site","path":"/docs/How to update the docs/deploy-your-site","sidebar":"tutorialSidebar"},{"id":"How to update the docs/markdown-features","path":"/docs/How to update the docs/markdown-features","sidebar":"tutorialSidebar"},{"id":"Informations/detect-dependency-cycles","path":"/docs/Informations/detect-dependency-cycles","sidebar":"tutorialSidebar"},{"id":"intro","path":"/docs/intro","sidebar":"tutorialSidebar"},{"id":"nuxt-client/Accessibility","path":"/docs/nuxt-client/Accessibility","sidebar":"tutorialSidebar"},{"id":"nuxt-client/CodeConventions","path":"/docs/nuxt-client/CodeConventions","sidebar":"tutorialSidebar"},{"id":"nuxt-client/Colors","path":"/docs/nuxt-client/Colors","sidebar":"tutorialSidebar"},{"id":"nuxt-client/ComponentGuidelines","path":"/docs/nuxt-client/ComponentGuidelines","sidebar":"tutorialSidebar"},{"id":"nuxt-client/GettingStarted","path":"/docs/nuxt-client/GettingStarted","sidebar":"tutorialSidebar"},{"id":"nuxt-client/GitConventions","path":"/docs/nuxt-client/GitConventions","sidebar":"tutorialSidebar"},{"id":"nuxt-client/HintsForWorking","path":"/docs/nuxt-client/HintsForWorking","sidebar":"tutorialSidebar"},{"id":"nuxt-client/HowTo","path":"/docs/nuxt-client/HowTo","sidebar":"tutorialSidebar"},{"id":"nuxt-client/IdentifyingAndResolvingCircularDependencies","path":"/docs/nuxt-client/IdentifyingAndResolvingCircularDependencies","sidebar":"tutorialSidebar"},{"id":"nuxt-client/ProjectStructure","path":"/docs/nuxt-client/ProjectStructure","sidebar":"tutorialSidebar"},{"id":"nuxt-client/WritingTests","path":"/docs/nuxt-client/WritingTests","sidebar":"tutorialSidebar"},{"id":"schulcloud-client/Getting started","path":"/docs/schulcloud-client/Getting started","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Api","path":"/docs/schulcloud-server/Api","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/architecture","path":"/docs/schulcloud-server/architecture","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Coding-Guidelines/access-legacy-code","path":"/docs/schulcloud-server/Coding-Guidelines/access-legacy-code","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Coding-Guidelines/code-style","path":"/docs/schulcloud-server/Coding-Guidelines/code-style","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Coding-Guidelines/controllers","path":"/docs/schulcloud-server/Coding-Guidelines/controllers","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Coding-Guidelines/deprection-workflow","path":"/docs/schulcloud-server/Coding-Guidelines/deprection-workflow","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Coding-Guidelines/domain-object-validation","path":"/docs/schulcloud-server/Coding-Guidelines/domain-object-validation","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Coding-Guidelines/event-handling","path":"/docs/schulcloud-server/Coding-Guidelines/event-handling","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Coding-Guidelines/exception-handling","path":"/docs/schulcloud-server/Coding-Guidelines/exception-handling","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Coding-Guidelines/logging","path":"/docs/schulcloud-server/Coding-Guidelines/logging","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Coding-Guidelines/micro-orm","path":"/docs/schulcloud-server/Coding-Guidelines/micro-orm","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Coding-Guidelines/modules-submodules","path":"/docs/schulcloud-server/Coding-Guidelines/modules-submodules","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Coding-Guidelines/repositories","path":"/docs/schulcloud-server/Coding-Guidelines/repositories","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Coding-Guidelines/testing","path":"/docs/schulcloud-server/Coding-Guidelines/testing","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Development/git","path":"/docs/schulcloud-server/Development/git","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Development/keycloak","path":"/docs/schulcloud-server/Development/keycloak","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Development/rocket-chat","path":"/docs/schulcloud-server/Development/rocket-chat","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Development/vs-code","path":"/docs/schulcloud-server/Development/vs-code","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Getting started","path":"/docs/schulcloud-server/Getting started","sidebar":"tutorialSidebar"},{"id":"schulcloud-server/Migrations","path":"/docs/schulcloud-server/Migrations","sidebar":"tutorialSidebar"},{"id":"services/tldraw/How it works","path":"/docs/services/tldraw/How it works","sidebar":"tutorialSidebar"},{"id":"services/tldraw/Local setup","path":"/docs/services/tldraw/Local setup","sidebar":"tutorialSidebar"},{"id":"services/tldraw/Technical details","path":"/docs/services/tldraw/Technical details","sidebar":"tutorialSidebar"},{"id":"/category/nuxt-client","path":"/docs/category/nuxt-client","sidebar":"tutorialSidebar"},{"id":"/category/schulcloud-client","path":"/docs/category/schulcloud-client","sidebar":"tutorialSidebar"},{"id":"/category/schulcloud-server","path":"/docs/category/schulcloud-server","sidebar":"tutorialSidebar"},{"id":"/category/how-to-update-the-docs","path":"/docs/category/how-to-update-the-docs","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"@easyops-cn/docusaurus-search-local":{"type":"package","name":"@easyops-cn/docusaurus-search-local","version":"0.35.0"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"2.4.3"}}}'),u={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(412),a=n(5742),i=n(8780),l=n(179);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.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??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>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}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),o=n(7294),a=n(3727),i=n(8780),l=n(2263),s=n(3919),u=n(412);const c=o.createContext({collectLink:()=>{}});var d=n(4996);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:h,isActive:m,"data-noBrokenLinkCheck":g,autoAddBaseUrl:v=!0,...b}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:k}=(0,d.C)(),E=(0,o.useContext)(c),S=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>S.current));const x=f||p;const C=(0,s.Z)(x),_=x?.replace("pathname://","");let T=void 0!==_?(L=_,v&&(e=>e.startsWith("/"))(L)?k(L):L):void 0;var L;T&&C&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const A=(0,o.useRef)(!1),R=n?a.OL:a.rU,P=u.Z.canUseIntersectionObserver,O=(0,o.useRef)(),N=()=>{A.current||null==T||(window.docusaurus.preload(T),A.current=!0)};(0,o.useEffect)((()=>(!P&&C&&null!=T&&window.docusaurus.prefetch(T),()=>{P&&O.current&&O.current.disconnect()})),[O,T,P,C]);const I=T?.startsWith("#")??!1,D=!T||!C||I;return D||g||E.collectLink(T),D?o.createElement("a",(0,r.Z)({ref:S,href:T},x&&!C&&{target:"_blank",rel:"noopener noreferrer"},b)):o.createElement(R,(0,r.Z)({},b,{onMouseEnter:N,onTouchStart:N,innerRef:e=>{S.current=e,P&&e&&C&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),O.current.observe(e))},to:T},n&&{isActive:m,activeClassName:h}))}const p=o.forwardRef(f)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(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 a[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,o(l,a))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),o=n(2263),a=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),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.b)(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)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8940);function a(){return(0,r.useContext)(o._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8934);function a(){return(0,r.useContext)(o._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>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}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(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:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>m,gA:()=>f,_r:()=>c,Jo:()=>g,zh:()=>d,yW:()=>h,gB:()=>p});var r=n(6550),o=n(2263),a=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.Z)();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.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.LX)(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=>function(e,t,n){void 0===t&&(t=a.m),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});function f(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.TH)();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.LX)(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 p(e){return d(e).versions}function h(e){const t=d(e);return l(t)}function m(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),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()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("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"}))}},179:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Ot});var r=n(7294),o=n(6010),a=n(4763),i=n(1944),l=n(7462),s=n(6550),u=n(5999),c=n(5936);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const h=(0,u.I)({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 m(e){const t=e.children??h,{containerRef:n,onClick:o}=p();return r.createElement("div",{ref:n,role:"region","aria-label":h},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(5281),v=n(9727);const b={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(m,{className:b.skipToContent})}var w=n(6668),k=n(9689);function E(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function x(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(E,{width:14,height:14,strokeWidth:3.1}))}const C={content:"content_knG7"};function _(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,o.Z)(C.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function L(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(_,{className:T.announcementBarContent}),i&&r.createElement(x,{onClick:n,className:T.announcementBarClose}))}var A=n(2961),R=n(2466);var P=n(902),O=n(3102);const N=r.createContext(null);function I(e){let{children:t}=e;const n=function(){const e=(0,A.e)(),t=(0,O.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,P.D9)(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 r.createElement(N.Provider,{value:n},t)}function D(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function M(){const e=(0,r.useContext)(N);if(!e)throw new P.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,O.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:D(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=M();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var j=n(2949),B=n(2389);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function $(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function G(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const l=(0,B.Z)(),s=(0,u.I)({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"===a?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)(U.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",U.toggleButton,!l&&U.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,o.Z)(U.toggleIcon,U.lightToggleIcon)}),r.createElement($,{className:(0,o.Z)(U.toggleIcon,U.darkToggleIcon)})))}const H=r.memo(G),q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function Q(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,j.I)();return o?null:r.createElement(H,{className:t,buttonClassName:"dark"===n?q.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var Z=n(1327);function V(){return r.createElement(Z.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function W(){const e=(0,A.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({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()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(V,null),r.createElement(Q,{className:"margin-right--md"}),r.createElement(W,null))}var Y=n(9960),X=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,X.Z)(o),p=(0,X.Z)(t),h=(0,X.Z)(a,{forcePrependBaseUrl:!0}),m=i&&a&&!(0,J.Z)(a),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,m&&r.createElement(te.Z,u&&{width:12,height:12}))};return a?r.createElement(Y.Z,(0,l.Z)({href:c?h:a},d,g)):r.createElement(Y.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ae(e){let{mobile:t=!1,position:n,...o}=e;const a=t?oe:re;return r.createElement(a,(0,l.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(6043),le=n(8596),se=n(2263);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.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)}}),[u]),r.createElement("div",{ref:u,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(qe,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:a,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:h}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&h(!d)}),[c,d,h]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(qe,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const o=t?de:ce;return r.createElement(o,n)}var pe=n(4711);function he(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("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 me="iconLanguage_nlXk";var ge=n(1029),ve=n(412),be=n(373),ye=n(143),we=n(22),ke=n(8202),Ee=n(3926),Se=n(1073),xe=n(2539),Ce=n(726);const _e='',Te='',Le='',Ae='',Re='',Pe='',Oe='',Ne={searchBar:"searchBar_RVTs",dropdownMenu:"dropdownMenu_qbY6",searchBarLeft:"searchBarLeft_MXDe",suggestion:"suggestion_fB_2",cursor:"cursor_eG29",hitTree:"hitTree_kk6K",hitIcon:"hitIcon_a7Zy",hitPath:"hitPath_ieM4",noResultsIcon:"noResultsIcon_EBY5",hitFooter:"hitFooter_E9YW",hitWrapper:"hitWrapper_sAK8",hitTitle:"hitTitle_vyVt",hitAction:"hitAction_NqkB",hideAction:"hideAction_vcyE",noResults:"noResults_l6Q3",searchBarContainer:"searchBarContainer_NW3z",searchBarLoadingRing:"searchBarLoadingRing_YnHq",searchClearButton:"searchClearButton_qk4g",searchIndexLoading:"searchIndexLoading_EJ1f",searchHintContainer:"searchHintContainer_Pkmr",searchHint:"searchHint_iIMx",focused:"focused_OWtg",input:"input_FOTf",hint:"hint_URu1",suggestions:"suggestions_X8XU",dataset:"dataset_QiCy",empty:"empty_eITn"};function Ie(e){let{document:t,type:n,page:r,metadata:o,tokens:a,isInterOfTree:i,isLastOfTree:l}=e;const s=0===n,u=1===n,c=[];i?c.push(Pe):l&&c.push(Oe);const d=c.map((e=>`${e}`)),f=`${s?_e:u?Te:Le}`,p=[`${(0,Ce.o)(t.t,(0,Se.m)(o,"t"),a)}`];if(!i&&!l&&ge.H6){const e=r?(r.b??[]).concat(r.t).concat(t.s&&t.s!==r.t?t.s:[]):t.b;p.push(`${(0,Ee.e)(e??[])}`)}else s||p.push(`${(0,xe.C)(r.t||(t.u.startsWith("/docs/api-reference/")?"API Reference":""),a)}`);const h=`${Ae}`;return[...d,f,``,...p,"",h].join("")}function De(){return`${Re}${(0,u.I)({id:"theme.SearchBar.noResultsText",message:"No results"})}`}var Me=n(311);async function Fe(){const e=await Promise.all([n.e(8443),n.e(5525)]).then(n.t.bind(n,8443,23)),t=e.default;return t.noConflict?t.noConflict():e.noConflict&&e.noConflict(),t}const je="_highlight";const Be=function(e){let{handleSearchBarToggle:t}=e;const{siteConfig:{baseUrl:n}}=(0,se.Z)(),a=(0,ye.gA)();let i=n;try{const{preferredVersion:e}=(0,be.J)(a?.pluginId??ge.gQ);e&&!e.isLast&&(i=e.path+"/")}catch(D){if(ge.l9&&!(D instanceof P.i6))throw D}const l=(0,s.k6)(),c=(0,s.TH)(),d=(0,r.useRef)(null),f=(0,r.useRef)(new Map),p=(0,r.useRef)(!1),[h,m]=(0,r.useState)(!1),[g,v]=(0,r.useState)(!1),[b,y]=(0,r.useState)(""),w=(0,r.useRef)(null),k=(0,r.useRef)(""),[E,S]=(0,r.useState)("");(0,r.useEffect)((()=>{if(!Array.isArray(ge.Kc))return;let e="";if(c.pathname.startsWith(i)){const t=c.pathname.substring(i.length),n=ge.Kc.find((e=>t===e||t.startsWith(`${e}/`)));n&&(e=n)}k.current!==e&&(f.current.delete(e),k.current=e),S(e)}),[c.pathname,i]);const x=!!ge.hG&&Array.isArray(ge.Kc)&&""===E,C=(0,r.useCallback)((async()=>{if(x||f.current.get(E))return;f.current.set(E,"loading"),w.current?.autocomplete.destroy(),m(!0);const[{wrappedIndexes:e,zhDictionary:t},r]=await Promise.all([(0,we.w)(i,E),Fe()]);if(w.current=r(d.current,{hint:!1,autoselect:!0,openOnFocus:!0,cssClasses:{root:(0,o.Z)(Ne.searchBar,{[Ne.searchBarLeft]:"left"===ge.pu}),noPrefix:!0,dropdownMenu:Ne.dropdownMenu,input:Ne.input,hint:Ne.hint,suggestions:Ne.suggestions,suggestion:Ne.suggestion,cursor:Ne.cursor,dataset:Ne.dataset,empty:Ne.empty}},[{source:(0,ke.v)(e,t,ge.qo),templates:{suggestion:Ie,empty:De,footer:e=>{let{query:t,isEmpty:r}=e;if(r&&!E)return;const o=(e=>{let{query:t,isEmpty:r}=e;const o=document.createElement("a"),a=new URLSearchParams,s=(0,u.I)({id:"theme.SearchBar.seeAll",message:"See all results"}),c=(0,u.I)({id:"theme.SearchBar.seeAllOutsideContext",message:"See results outside {context}"},{context:E}),d=(0,u.I)({id:"theme.SearchBar.searchInContext",message:"See all results in {context}"},{context:E});let f;if(a.set("q",t),f=E&&r?c:E?d:s,Array.isArray(ge.Kc)&&!r&&a.set("ctx",E),i!==n){if(!i.startsWith(n))throw new Error(`Version url '${i}' does not start with base url '${n}', this is a bug of \`@easyops-cn/docusaurus-search-local\`, please report it.`);a.set("version",i.substring(n.length))}const p=`${n}search?${a.toString()}`;return o.href=p,o.textContent=f,o.addEventListener("click",(e=>{e.ctrlKey||e.metaKey||(e.preventDefault(),w.current?.autocomplete.close(),l.push(p))})),o})({query:t,isEmpty:r}),a=document.createElement("div");return a.className=Ne.hitFooter,a.appendChild(o),a}}}]).on("autocomplete:selected",(function(e,t){let{document:{u:n,h:r},tokens:o}=t;d.current?.blur();let a=n;if(ge.vc&&o.length>0){const e=new URLSearchParams;for(const t of o)e.append(je,t);a+=`?${e.toString()}`}r&&(a+=r),l.push(a)})).on("autocomplete:closed",(()=>{d.current?.blur()})),f.current.set(E,"done"),m(!1),p.current){const e=d.current;e.value&&w.current?.autocomplete.open(),e.focus()}}),[x,E,i,n,l]);(0,r.useEffect)((()=>{if(!ge.vc)return;const e=ve.Z.canUseDOM?new URLSearchParams(c.search).getAll(je):[];setTimeout((()=>{const t=document.querySelector("article");if(!t)return;const n=new ge.vc(t);n.unmark(),0!==e.length&&n.mark(e),y(e.join(" ")),w.current?.autocomplete.setVal(e.join(" "))}))}),[c.search,c.pathname]);const[_,T]=(0,r.useState)(!1),L=(0,r.useCallback)((()=>{p.current=!0,C(),T(!0),t?.(!0)}),[t,C]),A=(0,r.useCallback)((()=>{T(!1),t?.(!1)}),[t]),R=(0,r.useCallback)((()=>{C()}),[C]),O=(0,r.useCallback)((e=>{y(e.target.value),e.target.value&&v(!0)}),[]),N=!!ve.Z.canUseDOM&&/mac/i.test(navigator.userAgentData?.platform??navigator.platform);(0,r.useEffect)((()=>{if(!ge.AY)return;const e=e=>{!(N?e.metaKey:e.ctrlKey)||"k"!==e.key&&"K"!==e.key||(e.preventDefault(),d.current?.focus(),L())};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[N,L]);const I=(0,r.useCallback)((()=>{const e=new URLSearchParams(c.search);e.delete(je);const t=e.toString(),n=c.pathname+(""!=t?`?${t}`:"")+c.hash;n!=c.pathname+c.search+c.hash&&l.push(n),y(""),w.current?.autocomplete.setVal("")}),[c.pathname,c.search,c.hash,l]);return r.createElement("div",{className:(0,o.Z)("navbar__search",Ne.searchBarContainer,{[Ne.searchIndexLoading]:h&&g,[Ne.focused]:_}),hidden:x},r.createElement("input",{placeholder:(0,u.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),"aria-label":"Search",className:"navbar__search-input",onMouseEnter:R,onFocus:L,onBlur:A,onChange:O,ref:d,value:b}),r.createElement(Me.Z,{className:Ne.searchBarLoadingRing}),ge.AY&&ge.t_&&(""!==b?r.createElement("button",{className:Ne.searchClearButton,onClick:I},"\u2715"):ve.Z.canUseDOM&&r.createElement("div",{className:Ne.searchHintContainer},r.createElement("kbd",{className:Ne.searchHint},N?"\u2318":"ctrl"),r.createElement("kbd",{className:Ne.searchHint},"K"))))},ze={searchBox:"searchBox_ZlJk"};function $e(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,ze.searchBox)},t)}var Ue=n(2802);const Ge=e=>e.docs.find((t=>t.id===e.mainDocId));const He={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:h}=(0,s.TH)(),m=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${h}`;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":""}})),...o],g=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(he,{className:me}),g),items:m}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement($e,{className:n},r.createElement(Be,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,ye.Iw)(o),s=(0,Ue.vY)(t,o);return null===s?null:r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,ye.Iw)(o),s=(0,Ue.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,Ue.lO)(o)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,l.Z)({},a,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,ye.Iw)(n),h=(0,ye.gB)(n),{savePreferredVersionName:m}=(0,be.J)(n),g=[...a,...h.map((e=>{const t=p.alternateDocVersions[e.name]??Ge(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...i],v=(0,Ue.lO)(n)[0],b=t&&g.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):v.label,y=t&&g.length>1?void 0:Ge(v).path;return g.length<=1?r.createElement(ae,(0,l.Z)({},c,{mobile:t,label:b,to:y,isActive:o?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},c,{mobile:t,label:b,to:y,items:g,isActive:o?()=>!1:void 0}))}};function qe(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=He[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function Qe(){const e=(0,A.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(qe,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ze(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{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)"},"\u2190 Back to main menu"))}function Ve(){const e=0===(0,w.L)().navbar.items.length,t=M();return r.createElement(r.Fragment,null,!e&&r.createElement(Ze,{onClick:()=>t.hide()}),t.content)}function We(){const e=(0,A.e)();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?r.createElement(F,{header:r.createElement(K,null),primaryMenu:r.createElement(Qe,null),secondaryMenu:r.createElement(Ve,null)}):null}const Ke={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ye(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function Xe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,A.e)(),{navbarRef:l,isNavbarVisible:s}=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,R.RF)(((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 r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Ke.navbarHideable,!s&&Ke.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(Ye,{onClick:i.toggle}),r.createElement(We,null))}var Je=n(8780);const et={errorBoundaryError:"errorBoundaryError_a6uf"};function tt(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function nt(e){let{error:t}=e;const n=(0,Je.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:et.errorBoundaryError},n)}class rt extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const ot="right";function at(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,l.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function it(){const{toggle:e,shown:t}=(0,A.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({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"},r.createElement(at,null))}const lt={colorModeToggle:"colorModeToggle_DEke"};function st(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(rt,{key:t,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})},r.createElement(qe,e)))))}function ut(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function ct(){const e=(0,A.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??ot)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(ut,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(it,null),r.createElement(V,null),r.createElement(st,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(st,{items:o}),r.createElement(Q,{className:lt.colorModeToggle}),!a&&r.createElement($e,null,r.createElement(Be,null)))})}function dt(){return r.createElement(Xe,null,r.createElement(ct,null))}function ft(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...s}=t,u=(0,X.Z)(n),c=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(Y.Z,(0,l.Z)({className:"footer__link-item"},o?{href:i?c:o}:{to:u},s),a,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function pt(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(ft,{item:t}))}function ht(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(pt,{key:t,item:e})))))}function mt(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(ht,{key:t,column:e}))))}function gt(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function vt(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(ft,{item:t})}function bt(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(vt,{item:e}),t.length!==n+1&&r.createElement(gt,null))))))}function yt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(mt,{columns:t}):r.createElement(bt,{links:t})}var wt=n(941);const kt={footerLogoLink:"footerLogoLink_BH7S"};function Et(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(wt.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function St(e){let{logo:t}=e;return t.href?r.createElement(Y.Z,{href:t.href,className:kt.footerLogoLink,target:t.target},r.createElement(Et,{logo:t})):r.createElement(Et,{logo:t})}function xt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Ct(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function _t(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(Ct,{style:a,links:n&&n.length>0&&r.createElement(yt,{links:n}),logo:o&&r.createElement(St,{logo:o}),copyright:t&&r.createElement(xt,{copyright:t})})}const Tt=r.memo(_t),Lt=(0,P.Qc)([j.S,k.pl,R.OC,be.L5,i.VC,function(e){let{children:t}=e;return r.createElement(O.n2,null,r.createElement(A.M,null,r.createElement(I,null,t)))}]);function At(e){let{children:t}=e;return r.createElement(Lt,null,t)}function Rt(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(tt,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(nt,{error:t})))))}const Pt={mainWrapper:"mainWrapper_z2l0"};function Ot(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,v.t)(),r.createElement(At,null,r.createElement(i.d,{title:s,description:u}),r.createElement(y,null),r.createElement(L,null),r.createElement(dt,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,Pt.mainWrapper,l)},r.createElement(a.Z,{fallback:e=>r.createElement(Rt,e)},t)),!n&&r.createElement(Tt,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(9960),i=n(4996),l=n(2263),s=n(6668),u=n(941);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=o.createElement(u.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,h=(0,i.Z)(u?.href||"/"),m=n?"":t,g=u?.alt??m;return o.createElement(a.Z,(0,r.Z)({to:h},p,u?.target&&{target:u.target}),u&&o.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:f},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(5742);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,p.map((e=>o.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,a.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var r=n(7462),o=n(7294),a=n(412),i=n(1442);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!a.Z.canUseDOM)return e?u:c}function h(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,o.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),o.createElement(t,{ref:u,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function m(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[l,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&s(t)}),[a,t]),a?o.createElement(h,(0,r.Z)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?m:h;return o.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>h,pl:()=>p});var r=n(7294),o=n(2389),a=n(12),i=n(902),l=n(6668);const s=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>m});var r=n(7294),o=n(412),a=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),h=e=>{c.set(f(e))};function m(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,a]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&h(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.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!==u)return;const t=c.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===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>b,L5:()=>g});var r=n(7294),o=n(143),a=n(9935),i=n(6668),l=n(2802),s=n(902),u=n(12);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function h(){const e=(0,o._r)(),t=(0,i.L)().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=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.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){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=h();return r.createElement(p.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.cE?r.createElement(m,null,t):r.createElement(r.Fragment,null,t)}function v(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function b(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=v(),{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])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),o=n(902);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>i});var r=n(7294),o=n(902);const a=r.createContext(null);function i(e){let{children:t,version:n}=e;return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(null===e)throw new o.i6("DocsVersionProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(7294),o=n(3102),a=n(7524),i=n(6550),l=(n(1688),n(902));function s(e){!function(e){const t=(0,i.k6)(),n=(0,l.zX)(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(6668);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),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=d();return r.createElement(c.Provider,{value:n},t)}function p(){const e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),o=n(902);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);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)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),o=n(412);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>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",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:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},2802:(e,t,n)=>{"use strict";n.d(t,{MN:()=>C,Wl:()=>h,_F:()=>b,cE:()=>f,jA:()=>m,xz:()=>p,hI:()=>x,lO:()=>k,vY:()=>S,oz:()=>E,s1:()=>w});var r=n(7294),o=n(6550),a=n(8790),i=n(143),l=n(373),s=n(4477),u=n(1116);function c(e){return Array.from(new Set(e))}var d=n(8596);const f=!!i._r;function p(e){const t=(0,s.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function h(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=h(t);if(e)return e}}}function m(){const{pathname:e}=(0,o.TH)(),t=(0,u.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=y({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 g=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),v=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||v(e.items,t))}function y(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.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function w(){const e=(0,u.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?y({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>c([t,n,o].filter(Boolean))),[t,n,o])}function E(e,t){const n=k(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 S(e,t){const n=k(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 x(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,l=i.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.H)(i),sidebarName:s,sidebarItems:u}}function C(e){return e.filter((e=>"category"!==e.type||!!h(e)))}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),o=n(6010),a=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2263);function c(e){let{title:t,description:n,keywords:o,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(a.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,o.Z)(a,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>a});var r=n(7294);const o=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),o=n(723),a=n(2263);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.Z)().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.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>s,RF:()=>d});var r=n(7294),o=n(412),a=n(2389),i=n(902);const l=r.createContext(void 0);function s(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 r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();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.Z)()&&"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?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>o});n(2263);const r="default";function o(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(7294),n(1688);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),()=>{}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(2263),o=n(6550),a=n(8780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,o.TH)(),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}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(902);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(2263);function o(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},4143:(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]}},8780: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.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},311:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),o=n(6010);const a={loadingRing:"loadingRing_RJI3","loading-ring":"loading-ring_FB5o"};function i(e){let{className:t}=e;return r.createElement("div",{className:(0,o.Z)(a.loadingRing,t)},r.createElement("div",null),r.createElement("div",null),r.createElement("div",null),r.createElement("div",null))}},22:(e,t,n)=>{"use strict";n.d(t,{w:()=>l});var r=n(1336),o=n.n(r),a=n(1029);const i=new Map;function l(e,t){const n=`${e}${t}`;let r=i.get(n);return r||(r=async function(e,t){{const n=`${e}${a.J.replace("{dir}",t?`-${t.replace(/\//g,"-")}`:"")}`;if(new URL(n,location.origin).origin!==location.origin)throw new Error("Unexpected version url");const r=await(await fetch(n)).json(),i=r.map(((e,t)=>{let{documents:n,index:r}=e;return{type:t,documents:n,index:o().Index.load(r)}})),l=r.reduce(((e,t)=>{for(const n of t.index.invertedIndex)/\p{Unified_Ideograph}/u.test(n[0][0])&&e.add(n[0]);return e}),new Set);return{wrappedIndexes:i,zhDictionary:Array.from(l)}}return{wrappedIndexes:[],zhDictionary:[]}}(e,t),i.set(n,r)),r}},8202:(e,t,n)=>{"use strict";n.d(t,{v:()=>s});var r=n(1336),o=n.n(r);var a=n(1029);function i(e){return l(e).concat(l(e.filter((e=>{const t=e[e.length-1];return!t.trailing&&t.maybeTyping})),!0))}function l(e,t){return e.map((e=>({tokens:e.map((e=>e.value)),term:e.map((e=>({value:e.value,presence:o().Query.presence.REQUIRED,wildcard:(t?e.trailing||e.maybeTyping:e.trailing)?o().Query.wildcard.TRAILING:o().Query.wildcard.NONE})))})))}function s(e,t,n){return function(r,l){const s=function(e,t){if(1===t.length&&["ja","jp","th"].includes(t[0]))return o()[t[0]].tokenizer(e).map((e=>e.toString()));let n=/[^-\s]+/g;return t.includes("zh")&&(n=/\w+|\p{Unified_Ideograph}+/gu),e.toLowerCase().match(n)||[]}(r,a.dK);if(0===s.length)return void l([]);const u=function(e,t){const n=function(e,t){const n=[];return function e(r,o){if(0===r.length)return void n.push(o);const a=r[0];if(/\p{Unified_Ideograph}/u.test(a)){const n=function(e,t){const n=[];return function e(r,o){let a=0,i=!1;for(const l of t)if(r.substr(0,l.length)===l){const t={missed:o.missed,term:o.term.concat({value:l})};r.length>l.length?e(r.substr(l.length),t):n.push(t),i=!0}else for(let t=l.length-1;t>a;t-=1){const s=l.substr(0,t);if(r.substr(0,t)===s){a=t;const l={missed:o.missed,term:o.term.concat({value:s,trailing:!0})};r.length>t?e(r.substr(t),l):n.push(l),i=!0;break}}i||(r.length>0?e(r.substr(1),{missed:o.missed+1,term:o.term}):o.term.length>0&&n.push(o))}(e,{missed:0,term:[]}),n.sort(((e,t)=>{const n=e.missed>0?1:0,r=t.missed>0?1:0;return n!==r?n-r:e.term.length-t.term.length})).map((e=>e.term))}(a,t);for(const t of n){const n=o.concat(...t);e(r.slice(1),n)}}else{const t=o.concat({value:a});e(r.slice(1),t)}}(e,[]),n}(e,t);if(0===n.length)return[{tokens:e,term:e.map((e=>({value:e,presence:o().Query.presence.REQUIRED,wildcard:o().Query.wildcard.LEADING|o().Query.wildcard.TRAILING})))}];for(const o of n)o[o.length-1].maybeTyping=!0;const r=[];for(const i of a.dK)if("en"===i)a._k||r.unshift(o().stopWordFilter);else{const e=o()[i];e.stopWordFilter&&r.unshift(e.stopWordFilter)}let l;if(r.length>0){const e=e=>r.reduce(((e,t)=>e.filter((e=>t(e.value)))),e);l=[];const t=[];for(const r of n){const n=e(r);l.push(n),n.length0&&t.push(n)}n.push(...t)}else l=n.slice();const s=[];for(const o of l)if(o.length>2)for(let e=o.length-1;e>=0;e-=1)s.push(o.slice(0,e).concat(o.slice(e+1)));return i(n).concat(i(s))}(s,t),c=[];e:for(const{term:t,tokens:o}of u)for(const{documents:r,index:a,type:i}of e)if(c.push(...a.query((e=>{for(const n of t)e.term(n.value,{wildcard:n.wildcard,presence:n.presence})})).slice(0,n).filter((e=>!c.some((t=>t.document.i.toString()===e.ref)))).slice(0,n-c.length).map((t=>{const n=r.find((e=>e.i.toString()===t.ref));return{document:n,type:i,page:0!==i&&e[0].documents.find((e=>e.i===n.p)),metadata:t.matchData.metadata,tokens:o,score:t.score}}))),c.length>=n)break e;!function(e){e.forEach(((e,t)=>{e.index=t})),e.sort(((t,n)=>{let r=t.type>0&&t.page?e.findIndex((e=>e.document===t.page)):t.index,o=n.type>0&&n.page?e.findIndex((e=>e.document===n.page)):n.index;return-1===r&&(r=t.index),-1===o&&(o=n.index),r===o?0===t.type?-1:0===n.type?1:t.index-n.index:r-o}))}(c),function(e){e.forEach(((t,n)=>{n>0&&t.page&&e.some((e=>e.document===t.page))&&(n{"use strict";function r(e){return e.join(" \u203a ")}n.d(t,{e:()=>r})},1690:(e,t,n)=>{"use strict";function r(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}n.d(t,{X:()=>r})},1073:(e,t,n)=>{"use strict";function r(e,t){const n=[];for(const r of Object.values(e))r[t]&&n.push(...r[t].position);return n.sort(((e,t)=>e[0]-t[0]||t[1]-e[1]))}n.d(t,{m:()=>r})},2539:(e,t,n)=>{"use strict";n.d(t,{C:()=>o});var r=n(1690);function o(e,t,n){const a=[];for(const i of t){const n=e.toLowerCase().indexOf(i);if(n>=0){n>0&&a.push(o(e.substr(0,n),t)),a.push(`${(0,r.X)(e.substr(n,i.length))}`);const l=n+i.length;l${(0,r.X)(e)}`:(0,r.X)(e):a.join("")}},726:(e,t,n)=>{"use strict";n.d(t,{o:()=>s});var r=n(1690),o=n(2539);const a=/\w+|\p{Unified_Ideograph}/u;function i(e){const t=[];let n=0,r=e;for(;r.length>0;){const o=r.match(a);if(!o){t.push(r);break}o.index>0&&t.push(r.substring(0,o.index)),t.push(o[0]),n+=o.index+o[0].length,r=e.substring(n)}return t}var l=n(1029);function s(e,t,n,a){void 0===a&&(a=l.Hk);const{chunkIndex:s,chunks:u}=function(e,t,n){const a=[];let l=0,s=0,u=-1;for(;ls){const t=i(e.substring(s,c)).map((e=>({html:(0,r.X)(e),textLength:e.length})));for(const e of t)a.push(e)}-1===u&&(u=a.length),s=c+d,a.push({html:(0,o.C)(e.substring(c,s),n,!0),textLength:d})}}if(s({html:(0,r.X)(e),textLength:e.length})));for(const e of t)a.push(e)}return{chunkIndex:u,chunks:a}}(e,t,n),c=u.slice(0,s),d=u[s],f=[d.html],p=u.slice(s+1);let h=d.textLength,m=0,g=0,v=!1,b=!1;for(;h0){const e=c.pop();h+e.textLength<=a?(f.unshift(e.html),m+=e.textLength,h+=e.textLength):(v=!0,c.length=0)}else{if(!(p.length>0))break;{const e=p.shift();h+e.textLength<=a?(f.push(e.html),g+=e.textLength,h+=e.textLength):(b=!0,p.length=0)}}return(v||c.length>0)&&f.unshift("\u2026"),(b||p.length>0)&&f.push("\u2026"),f.join("")}},1029:(e,t,n)=>{"use strict";n.d(t,{vc:()=>a,gQ:()=>p,H6:()=>u,hG:()=>g,l9:()=>h,dK:()=>r,_k:()=>o,pu:()=>f,AY:()=>c,t_:()=>d,Kc:()=>m,J:()=>i,Hk:()=>s,qo:()=>l,pQ:()=>v});n(1336);const r=["en"],o=!1,a=null,i="search-index{dir}.json?_=a7100a8f",l=8,s=50,u=!1,c=!0,d=!0,f="right",p=void 0,h=!0,m=null,g=!1,v=!1},6010:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;to});const o=function(){for(var e,t,n=0,o="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>_,ob:()=>p,PP:()=>L,Ep:()=>f});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var h=i.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};var l=n(8776);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 f(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 p(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.Z)({},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 h(){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=p(e,t,m(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),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,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var o=p(n);o&&o!==h&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),m=s(n),g=0;g{"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}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},1336:(e,t,n)=>{var r,o;!function(){var a,i,l,s,u,c,d,f,p,h,m,g,v,b,y,w,k,E,S,x,C,_,T,L,A,R,P,O,N,I,D=function(e){var t=new D.Builder;return t.pipeline.add(D.trimmer,D.stopWordFilter,D.stemmer),t.searchPipeline.add(D.stemmer),e.call(t,t),t.build()};D.version="2.3.9",D.utils={},D.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),D.utils.asString=function(e){return null==e?"":e.toString()},D.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r0){var s=D.utils.clone(t)||{};s.position=[i,l],s.index=o.length,o.push(new D.Token(n.slice(i,a),s))}i=a+1}}return o},D.tokenizer.separator=/[\s\-]+/,D.Pipeline=function(){this._stack=[]},D.Pipeline.registeredFunctions=Object.create(null),D.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&D.utils.warn("Overwriting existing registered function: "+t),e.label=t,D.Pipeline.registeredFunctions[e.label]=e},D.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||D.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},D.Pipeline.load=function(e){var t=new D.Pipeline;return e.forEach((function(e){var n=D.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},D.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){D.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},D.Pipeline.prototype.after=function(e,t){D.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},D.Pipeline.prototype.before=function(e,t){D.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},D.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},D.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n1&&(ae&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:al?u+=2:i==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},D.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},D.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new D.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new D.TokenSet;o.node.edges["*"]=l}if(0==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new D.TokenSet;o.node.edges["*"]=s}1==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new D.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},D.TokenSet.fromString=function(e){for(var t=new D.TokenSet,n=t,r=0,o=e.length;r=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},D.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},D.Index.prototype.search=function(e){return this.query((function(t){new D.QueryParser(e,t).parse()}))},D.Index.prototype.query=function(e){for(var t=new D.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),l=0;l1?1:e},D.Builder.prototype.k1=function(e){this._k1=e},D.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o=this.length)return D.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},D.QueryLexer.prototype.width=function(){return this.pos-this.start},D.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},D.QueryLexer.prototype.backup=function(){this.pos-=1},D.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=D.QueryLexer.EOS&&this.backup()},D.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(D.QueryLexer.TERM)),e.ignore(),e.more())return D.QueryLexer.lexText},D.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(D.QueryLexer.EDIT_DISTANCE),D.QueryLexer.lexText},D.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(D.QueryLexer.BOOST),D.QueryLexer.lexText},D.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(D.QueryLexer.TERM)},D.QueryLexer.termSeparator=D.tokenizer.separator,D.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==D.QueryLexer.EOS)return D.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return D.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(D.QueryLexer.TERM),D.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(D.QueryLexer.TERM),D.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(D.QueryLexer.PRESENCE),D.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(D.QueryLexer.PRESENCE),D.QueryLexer.lexText;if(t.match(D.QueryLexer.termSeparator))return D.QueryLexer.lexTerm}else e.escapeCharacter()}},D.QueryParser=function(e,t){this.lexer=new D.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},D.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=D.QueryParser.parseClause;e;)e=e(this);return this.query},D.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},D.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},D.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},D.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case D.QueryLexer.PRESENCE:return D.QueryParser.parsePresence;case D.QueryLexer.FIELD:return D.QueryParser.parseField;case D.QueryLexer.TERM:return D.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new D.QueryParseError(n,t.start,t.end)}},D.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=D.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=D.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new D.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new D.QueryParseError(n,t.start,t.end)}switch(r.type){case D.QueryLexer.FIELD:return D.QueryParser.parseField;case D.QueryLexer.TERM:return D.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new D.QueryParseError(n,r.start,r.end)}}},D.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new D.QueryParseError(r,t.start,t.end)}if(o.type===D.QueryLexer.TERM)return D.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new D.QueryParseError(r,o.start,o.end)}},D.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new D.QueryParseError(r,n.start,n.end)}else e.nextClause()}},D.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new D.QueryParseError(r,o.start,o.end)}else e.nextClause()}},D.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new D.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return D})?r.call(t,n,t,e):r)||(e.exports=o)}()},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865: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))&&p(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&&p(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:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(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)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{var r=n(5826);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;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],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var h=e[i],m=n[2],g=n[3],v=n[4],b=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=m&&null!=h&&h!==m,E="+"===y||"*"===y,S="?"===y||"*"===y,x=n[2]||c,C=v||b;r.push({name:g||a++,prefix:m||"",delimiter:x,optional:S,repeat:E,partial:k,asterisk:!!w,pattern:C?u(C):w?".*":"[^"+s(x)+"]+?"})}}return i{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=E.value.length,E=E.next){var x=E.value;if(t.length>e.length)return;if(!(x instanceof o)){var C,_=1;if(b){if(!(C=a(k,S,e,v))||C.index>=e.length)break;var T=C.index,L=C.index+C[0].length,A=S;for(A+=E.value.length;T>=A;)A+=(E=E.next).value.length;if(S=A-=E.value.length,E.value instanceof o)continue;for(var R=E;R!==t.tail&&(Ad.reach&&(d.reach=I);var D=E.prev;if(O&&(D=s(t,D,O),S+=O.length),u(t,D,_),E=s(t,D,new o(f,g?r.tokenize(P,g):P,y,P)),N&&s(t,E,N),_>1){var M={cause:f+","+h,reach:I};i(e,t,n,E.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o"+a.content+""},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,s(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=o,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var s=a.substring(0,l),d=u(c[o]),p=a.substring(l+o.length),h=[];if(s&&h.push(s),h.push(d),p){var m=[p];e(m),h.push.apply(h,m)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(h)),n+=h.length-1):r.content=h}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function a(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],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],f="string"==typeof u?u:u.content,p=t(r,c),h=f.indexOf(p);if(h>-1){++o;var m=f.substring(0,h),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),v=f.substring(h+p.length),b=[];m&&b.push.apply(b,i([m])),b.push(g),v&&b.push.apply(b,i([v])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9901:e=>{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"}}})},2885:(e,t,n)=>{const r=n(9901),o=n(9642),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(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),a.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};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=6726},6500:(e,t,n)=>{var r={"./":2885};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=6500},9642: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 f,p=r(s),h=c;o(h);){for(var m in f={},h){var g=s[m];t(g&&g.modify,(function(e){e in d&&(f[e]=!0)}))}for(var v in d)if(!(v in c))for(var b in p(v))if(b in c){f[v]=!0;break}for(var y in h=f)c[y]=!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 f=i(c.map((function(e){var t=u(e);return delete s[e],t})));a?o=a(f,(function(){return r(e)})):r(e)}return l[e]=o}for(var c in n)u(c);var d=[];for(var f in s)d.push(l[f]);return i(d)}(p,c,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);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}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n