Page Not Found
We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
diff --git a/404.html b/404.html index 0cb17a0..72e3973 100644 --- a/404.html +++ b/404.html @@ -5,8 +5,8 @@
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.
context
property",id:"context-property",level:3},{value:"components property",id:"components-property",level:3},{value:"views property",id:"views-property",level:3},{value:"Example Search Trace",id:"example-search-trace",level:3},{value:"Event Record (Event List) Event",id:"event-record-event-list-event",level:2},{value:"Event",id:"event",level:3}];function h(e){const n={a:"a",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"search-trace",children:"Search Trace"}),"\n",(0,r.jsx)(n.h2,{id:"context",children:"Context"}),"\n",(0,r.jsx)(n.h2,{id:"render-definition",children:"Render Definition"}),"\n",(0,r.jsx)(n.p,{children:"The Render Definition is a template syntax that offers a minimalistic way to detail the visualization of the events."}),"\n",(0,r.jsx)(n.p,{children:"It comprises three properties."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"views"})," is a required property which contains information on the rendering processes of the individual views."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"context"})," is an optional property which can be used to provide additional information for the components."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"components"})," is optional property which can contain user defined visualization elements."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The structure for the ",(0,r.jsx)(n.code,{children:"RenderDefinition"})," is defined below,"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type View = {\n renderer: string;\n component: Component;\n};\n\ntype RenderDefinition = {\n context?: ContextDefinition;\n components?: { [K: string]: Component[] };\n views: { main: View; secondary: View };\n};\n"})}),"\n",(0,r.jsxs)(n.h3,{id:"context-property",children:[(0,r.jsx)(n.code,{children:"context"})," property"]}),"\n",(0,r.jsx)(n.p,{children:"The context property provides an additional variable environment for components. It can be used to provide new general values and override the default context variables (eg. Changing the colours for the different types of Events.)"}),"\n",(0,r.jsxs)(n.p,{children:["Refer to ",(0,r.jsx)(n.a,{href:"./context.md",children:"context.md"})," for more ",(0,r.jsx)(n.code,{children:"ContextDefinition"})," detail."]}),"\n",(0,r.jsx)(n.h3,{id:"components-property",children:"components property"}),"\n",(0,r.jsxs)(n.p,{children:["The components property is a object of ",(0,r.jsx)(n.a,{href:"#components",children:"Component"})," definitions. The key is the name of the component and the value is list of ",(0,r.jsx)(n.a,{href:"#components",children:"Component"})," which are compose together. This is where the user can create custom element to render each of events. Custom components must be recurse back to inbuilts primitive components."]}),"\n",(0,r.jsxs)(n.p,{children:["Refer to ",(0,r.jsx)(n.a,{href:"../../4-user-guide/renderer/standard-renderers.md",children:"standard-renderers.md"})," for more detail."]}),"\n",(0,r.jsx)(n.h3,{id:"views-property",children:"views property"}),"\n",(0,r.jsx)(n.p,{children:"The views property which is a object of view definitions. The key is the view name and the value is the view information object. Each view defines what component will be displayed in individual window which can be resized."}),"\n",(0,r.jsxs)(n.p,{children:["A view consist a component (which can be comprise of many components) and the name of the renderer it will utilize to draw this component. This component can either be user defined component from the ",(0,r.jsx)(n.a,{href:"#components-property",children:"components property"})," or a prefined component from ",(0,r.jsx)(n.a,{href:"#",children:"renderer"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Below is an example for the usage of a prefined component."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:'type RendererDefinition = {\n views: { main: { renderer: "2d-pixi"; component: { $: "tree" } } };\n};\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Refer to ",(0,r.jsx)(n.a,{href:"../../4-user-guide/renderer/standard-renderers.md",children:"standard-renderers.md"})," for more detail on the usage of prefined components."]}),"\n",(0,r.jsx)(n.p,{children:"\xa0"}),"\n",(0,r.jsx)(n.h3,{id:"example-search-trace",children:"Example Search Trace"}),"\n",(0,r.jsx)(n.p,{children:"Below is an example renderer definition that specifies that each step in the search trace should be rendered as boxes with their IDs inside."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:'const myTrace = {\n "version": "1.0.5",\n "render": {\n "components": {},\n "views": {\n "main": {\n "components": [\n {\n "$": "rect",\n "fill": "{{$.color[$.event.type]}}",\n "width": 1,\n "height": 1,\n "x": "{{\'x\' in $.event ? $.event.x : 0}}",\n "y": "{{\'y\' in $.event ? $.event.y : 0}}"\n }\n ]\n }\n }\n },\n "events": [\n ...\n {\n "type": "generating",\n "id": 1640,\n "g": 0.00001,\n "f": 0.000320711,\n "pId": 1736,\n "x": 8,\n "y": 14\n },\n ...\n ]\n};\n'})}),"\n",(0,r.jsx)(n.p,{children:"\xa0"}),"\n",(0,r.jsxs)(n.h2,{id:"event-record-event-list-event",children:["Event Record (Event List) ",Event]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"events"})," is an array of objects each of which describes the state of a node at a particular stage in a search. Each object in this array is an ",(0,r.jsx)(n.code,{children:"Event"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Each of the events in the ",(0,r.jsx)(n.code,{children:"events"})," can be rendered/animated to show the process of the search, this is done by providing the variables of the event to the respectives components. The rendering process will be follow linear progression through the ",(0,r.jsx)(n.code,{children:"events"})]}),"\n",(0,r.jsx)(n.h3,{id:"event",children:"Event"}),"\n",(0,r.jsxs)(n.p,{children:["An ",(0,r.jsx)(n.code,{children:"Event"})," is an object describing a node at a particular state in search.\n",(0,r.jsx)(n.code,{children:"Events"})," have a couple standard properties including"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"id"})," an unique identifier for the node"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"pId"})," the id for the parent of the current node"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"f"})," bound on total cost from start to target from current node"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"g"})," associated cost (g-value)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"h"})," estimated cost (h-valye)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"type"})," which signifies state of the node"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Events Types"}),(0,r.jsx)(n.th,{children:"Definition"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"source"}),(0,r.jsx)(n.td,{children:"A Beginning Node of the Search Trace"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"destination"}),(0,r.jsx)(n.td,{children:"A Ending Node of the Search Trace"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"generating"}),(0,r.jsx)(n.td,{children:"A Node that has just been discovered"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"updating"}),(0,r.jsx)(n.td,{children:"A Node thats information is being updated"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"expanding"}),(0,r.jsx)(n.td,{children:"Current Node which is simulating all actions avaiable to it"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"closing"}),(0,r.jsx)(n.td,{children:"Node is done expanding"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"end"}),(0,r.jsx)(n.td,{children:"End node of the search process"})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["These standard properties will be displayed in visualiser's Info Panel and node's popups for easy inspection.",(0,r.jsx)(n.br,{}),"\n","Events will generally contain more information such as x and y positions that are required for the rendering of the Search Trace. Those custom/additional properties will be provided to the component when rendering."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:'export type TraceEventType =\n | "source"\n | "destination"\n | "generating"\n | "updating"\n | "closing"\n | "expanding"\n | "end";\n\nexport type TraceEvent = {\n type: TraceEventType;\n id: number | string;\n pId?: number | string | null;\n f?: number;\n g?: number;\n h?: number;\n [key: string]: any;\n};\n'})})]})}function l(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>d,a:()=>o});var r=t(7294);const i={},s=r.createContext(i);function o(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/6f3fa7c4.9e0ac90b.js b/assets/js/6f3fa7c4.9e0ac90b.js
new file mode 100644
index 0000000..b89f76f
--- /dev/null
+++ b/assets/js/6f3fa7c4.9e0ac90b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkdocs_2=self.webpackChunkdocs_2||[]).push([[2378],{822:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>l,frontMatter:()=>s,metadata:()=>d,toc:()=>a});var r=t(5893),i=t(1151);const s={},o="Search Trace",d={id:"api/search-trace",title:"Search Trace",description:"Context",source:"@site/docs/6-api/search-trace.md",sourceDirName:"6-api",slug:"/api/search-trace",permalink:"/docs/api/search-trace",draft:!1,unlisted:!1,editUrl:"https://github.com/path-visualiser/path-visualiser.github.io/tree/master/docs/6-api/search-trace.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Standard Renderers",permalink:"/docs/api/renderer/standard-renderers"},next:{title:"Posthoc Adapter Protocol",permalink:"/docs/api/visualiser-adapter-protocol"}},c={},a=[{value:"Context",id:"context",level:2},{value:"Render Definition",id:"render-definition",level:2},{value:"context
property",id:"context-property",level:3},{value:"components property",id:"components-property",level:3},{value:"views property",id:"views-property",level:3},{value:"Example Search Trace",id:"example-search-trace",level:3},{value:"Event Record (Event List) Event",id:"event-record-event-list-event",level:2},{value:"Event",id:"event",level:3}];function h(e){const n={a:"a",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"search-trace",children:"Search Trace"}),"\n",(0,r.jsx)(n.h2,{id:"context",children:"Context"}),"\n",(0,r.jsx)(n.h2,{id:"render-definition",children:"Render Definition"}),"\n",(0,r.jsx)(n.p,{children:"The Render Definition is a template syntax that offers a minimalistic way to detail the visualization of the events."}),"\n",(0,r.jsx)(n.p,{children:"It comprises three properties."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"views"})," is a required property which contains information on the rendering processes of the individual views."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"context"})," is an optional property which can be used to provide additional information for the components."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"components"})," is optional property which can contain user defined visualization elements."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The structure for the ",(0,r.jsx)(n.code,{children:"RenderDefinition"})," is defined below,"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type View = {\n renderer: string;\n component: Component;\n};\n\ntype RenderDefinition = {\n context?: ContextDefinition;\n components?: { [K: string]: Component[] };\n views: { main: View; secondary: View };\n};\n"})}),"\n",(0,r.jsxs)(n.h3,{id:"context-property",children:[(0,r.jsx)(n.code,{children:"context"})," property"]}),"\n",(0,r.jsx)(n.p,{children:"The context property provides an additional variable environment for components. It can be used to provide new general values and override the default context variables (eg. Changing the colours for the different types of Events.)"}),"\n",(0,r.jsxs)(n.p,{children:["Refer to ",(0,r.jsx)(n.a,{href:"./context.md",children:"context.md"})," for more ",(0,r.jsx)(n.code,{children:"ContextDefinition"})," detail."]}),"\n",(0,r.jsx)(n.h3,{id:"components-property",children:"components property"}),"\n",(0,r.jsxs)(n.p,{children:["The components property is a object of ",(0,r.jsx)(n.a,{href:"#components",children:"Component"})," definitions. The key is the name of the component and the value is list of ",(0,r.jsx)(n.a,{href:"#components",children:"Component"})," which are compose together. This is where the user can create custom element to render each of events. Custom components must be recurse back to inbuilts primitive components."]}),"\n",(0,r.jsxs)(n.p,{children:["Refer to ",(0,r.jsx)(n.a,{href:"../../4-user-guide/renderer/standard-renderers.md",children:"standard-renderers.md"})," for more detail."]}),"\n",(0,r.jsx)(n.h3,{id:"views-property",children:"views property"}),"\n",(0,r.jsx)(n.p,{children:"The views property which is a object of view definitions. The key is the view name and the value is the view information object. Each view defines what component will be displayed in individual window which can be resized."}),"\n",(0,r.jsxs)(n.p,{children:["A view consist a component (which can be comprise of many components) and the name of the renderer it will utilize to draw this component. This component can either be user defined component from the ",(0,r.jsx)(n.a,{href:"#components-property",children:"components property"})," or a prefined component from ",(0,r.jsx)(n.a,{href:"#",children:"renderer"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Below is an example for the usage of a prefined component."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:'type RendererDefinition = {\n views: { main: { renderer: "2d-pixi"; component: { $: "tree" } } };\n};\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Refer to ",(0,r.jsx)(n.a,{href:"../../4-user-guide/renderer/standard-renderers.md",children:"standard-renderers.md"})," for more detail on the usage of prefined components."]}),"\n",(0,r.jsx)(n.p,{children:"\xa0"}),"\n",(0,r.jsx)(n.h3,{id:"example-search-trace",children:"Example Search Trace"}),"\n",(0,r.jsx)(n.p,{children:"Below is an example renderer definition that specifies that each step in the search trace should be rendered as boxes with their IDs inside."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:'const myTrace = {\n "version": "1.0.5",\n "render": {\n "components": {},\n "views": {\n "main": {\n "components": [\n {\n "$": "rect",\n "fill": "{{$.color[$.event.type]}}",\n "width": 1,\n "height": 1,\n "x": "{{\'x\' in $.event ? $.event.x : 0}}",\n "y": "{{\'y\' in $.event ? $.event.y : 0}}"\n }\n ]\n }\n }\n },\n "events": [\n ...\n {\n "type": "generating",\n "id": 1640,\n "g": 0.00001,\n "f": 0.000320711,\n "pId": 1736,\n "x": 8,\n "y": 14\n },\n ...\n ]\n};\n'})}),"\n",(0,r.jsx)(n.p,{children:"\xa0"}),"\n",(0,r.jsxs)(n.h2,{id:"event-record-event-list-event",children:["Event Record (Event List) ",Event]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"events"})," is an array of objects each of which describes the state of a node at a particular stage in a search. Each object in this array is an ",(0,r.jsx)(n.code,{children:"Event"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Each of the events in the ",(0,r.jsx)(n.code,{children:"events"})," can be rendered/animated to show the process of the search, this is done by providing the variables of the event to the respectives components. The rendering process will be follow linear progression through the ",(0,r.jsx)(n.code,{children:"events"})]}),"\n",(0,r.jsx)(n.h3,{id:"event",children:"Event"}),"\n",(0,r.jsxs)(n.p,{children:["An ",(0,r.jsx)(n.code,{children:"Event"})," is an object describing a node at a particular state in search.\n",(0,r.jsx)(n.code,{children:"Events"})," have a couple standard properties including"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"id"})," an unique identifier for the node"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"pId"})," the id for the parent of the current node"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"f"})," bound on total cost from start to target from current node"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"g"})," associated cost (g-value)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"h"})," estimated cost (h-valye)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"type"})," which signifies state of the node"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Events Types"}),(0,r.jsx)(n.th,{children:"Definition"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"source"}),(0,r.jsx)(n.td,{children:"A Beginning Node of the Search Trace"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"destination"}),(0,r.jsx)(n.td,{children:"A Ending Node of the Search Trace"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"generating"}),(0,r.jsx)(n.td,{children:"A Node that has just been discovered"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"updating"}),(0,r.jsx)(n.td,{children:"A Node thats information is being updated"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"expanding"}),(0,r.jsx)(n.td,{children:"Current Node which is simulating all actions avaiable to it"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"closing"}),(0,r.jsx)(n.td,{children:"Node is done expanding"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"end"}),(0,r.jsx)(n.td,{children:"End node of the search process"})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["These standard properties will be displayed in visualiser's Info Panel and node's popups for easy inspection.",(0,r.jsx)(n.br,{}),"\n","Events will generally contain more information such as x and y positions that are required for the rendering of the Search Trace. Those custom/additional properties will be provided to the component when rendering."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:'export type TraceEventType =\n | "source"\n | "destination"\n | "generating"\n | "updating"\n | "closing"\n | "expanding"\n | "end";\n\nexport type TraceEvent = {\n type: TraceEventType;\n id: number | string;\n pId?: number | string | null;\n f?: number;\n g?: number;\n h?: number;\n [key: string]: any;\n};\n'})})]})}function l(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>d,a:()=>o});var r=t(7294);const i={},s=r.createContext(i);function o(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/7163198f.3f4f897f.js b/assets/js/7163198f.3f4f897f.js
new file mode 100644
index 0000000..eeb869a
--- /dev/null
+++ b/assets/js/7163198f.3f4f897f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkdocs_2=self.webpackChunkdocs_2||[]).push([[7005],{6265:(e,n,t)=>{t.d(n,{ZP:()=>i});var r=t(5893),s=t(1151);function a(e){const n={li:"li",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["In the ",(0,r.jsx)(n.strong,{children:"Layer"})," panel, click ",(0,r.jsx)(n.strong,{children:"+ Layer"})," to add a new layer."]}),"\n",(0,r.jsx)(n.li,{children:"Click the pencil icon to edit the layer."}),"\n",(0,r.jsxs)(n.li,{children:["For ",(0,r.jsx)(n.strong,{children:"Type"}),", choose ",(0,r.jsx)(n.strong,{children:"Trace"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["For ",(0,r.jsx)(n.strong,{children:"Trace"}),", choose ",(0,r.jsx)(n.strong,{children:"Choose File"}),", then pick the search trace from your system."]}),"\n",(0,r.jsxs)(n.li,{children:["Close the ",(0,r.jsx)(n.strong,{children:"Edit Layer"})," modal."]}),"\n",(0,r.jsxs)(n.li,{children:["In the ",(0,r.jsx)(n.strong,{children:"Viewport"})," panel, click ",(0,r.jsx)(n.strong,{children:"Fit"})," to fit the map to the viewport."]}),"\n"]})}function i(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},7018:(e,n,t)=>{t.d(n,{ZP:()=>l});var r=t(5893),s=t(1151);const a=t.p+"assets/images/step-through-trace-acf140b666c50587044d8b193da3b200.png";function i(e){const n={li:"li",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["In the ",(0,r.jsx)(n.strong,{children:"Steps"})," panel, choose the search trace layer from the layer dropdown. Here, the layer is named ",(0,r.jsx)(n.strong,{children:e.traceName??"Cross Example"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Play"}),"."]}),"\n"]}),"\n",(0,r.jsx)("img",{src:e.image??a,alt:"Step through trace"})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},3199:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>h,toc:()=>p});var r=t(5893),s=t(1151),a=t(3992),i=t(425),l=t(6265),o=t(7018);const c={},d="Single Agent Grid Search",h={id:"tutorials/single-agent-grid",title:"Single Agent Grid Search",description:"Follow these steps to visualise a single-agent search, in our case A\\*, on a grid map.",source:"@site/docs/4-tutorials/single-agent-grid.mdx",sourceDirName:"4-tutorials",slug:"/tutorials/single-agent-grid",permalink:"/docs/tutorials/single-agent-grid",draft:!1,unlisted:!1,editUrl:"https://github.com/path-visualiser/path-visualiser.github.io/tree/master/docs/4-tutorials/single-agent-grid.mdx",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Tutorials",permalink:"/docs/category/tutorials"},next:{title:"Decision Tree Search",permalink:"/docs/tutorials/tile"}},u={},p=[{value:"Prepare the Map",id:"prepare-the-map",level:2},{value:"Load the Map",id:"load-the-map",level:2},{value:"Prepare the Search Trace",id:"prepare-the-search-trace",level:2},{value:"Load the Search Trace",id:"load-the-search-trace",level:2},{value:"Adding the Query",id:"adding-the-query",level:2},{value:"Adding Source and Destination",id:"adding-source-and-destination",level:2},{value:"Step through the Search Trace",id:"step-through-the-search-trace",level:2}];function g(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"single-agent-grid-search",children:"Single Agent Grid Search"}),"\n",(0,r.jsx)(n.p,{children:"Follow these steps to visualise a single-agent search, in our case A*, on a grid map."}),"\n",(0,r.jsx)(n.h2,{id:"prepare-the-map",children:"Prepare the Map"}),"\n",(0,r.jsxs)(n.p,{children:["We support grid maps as ",(0,r.jsx)(n.code,{children:".grid"})," files. A ",(0,r.jsx)(n.code,{children:".grid"})," file is a text file that looks like this:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-txt",metastring:'title="cross.grid"',children:"type octile\nheight 5\nwidth 5\nmap\n.....\n..@..\n.@@@.\n..@..\n.....\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Save this file as ",(0,r.jsx)(n.code,{children:"cross.grid"})," to your system."]}),"\n",(0,r.jsx)(n.h2,{id:"load-the-map",children:"Load the Map"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["In the ",(0,r.jsx)(n.strong,{children:"Layer"})," panel, click ",(0,r.jsx)(n.strong,{children:"+ Layer"})," to add a new layer."]}),"\n",(0,r.jsx)(n.li,{children:"Click the pencil icon to edit the layer."}),"\n",(0,r.jsxs)(n.li,{children:["For ",(0,r.jsx)(n.strong,{children:"Type"}),", choose ",(0,r.jsx)(n.strong,{children:"Map"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["For ",(0,r.jsx)(n.strong,{children:"Source"}),", choose ",(0,r.jsx)(n.strong,{children:"Import Map"}),", then pick ",(0,r.jsx)(n.code,{children:"cross.grid"})," from your system."]}),"\n",(0,r.jsxs)(n.li,{children:["Close the ",(0,r.jsx)(n.strong,{children:"Edit Layer"})," modal."]}),"\n",(0,r.jsxs)(n.li,{children:["In the ",(0,r.jsx)(n.strong,{children:"Viewport"})," panel, click ",(0,r.jsx)(n.strong,{children:"Fit"})," to fit the map to the viewport."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"This should be the result:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Loaded map",src:t(8907).Z+"",width:"2560",height:"1528"})}),"\n",(0,r.jsx)(n.h2,{id:"prepare-the-search-trace",children:"Prepare the Search Trace"}),"\n",(0,r.jsx)(n.p,{children:"You can generate the search trace in a number of ways depending on your solver."}),"\n",(0,r.jsxs)(a.Z,{children:[(0,r.jsxs)(i.Z,{value:"raw",label:"Demo Search Trace",children:[(0,r.jsxs)(n.p,{children:["Download ",(0,r.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(6344).Z+"",children:"this"})," pre-computed search trace."]}),(0,r.jsx)(n.p,{children:"The file should start like this:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="example.trace.yaml"',children:'render:\n components:\n tile:\n - $: rect\n width: 1\n height: 1\n x: "{{$.event.x}}"\n y: "{{$.event.y}}"\n fill: "{{$.color[$.event.type]}}"\n views:\n main:\n components:\n - $: tile\n path:\n pivot:\n x: "{{$.event.x + 0.5}}"\n y: "{{$.event.y + 0.5}}"\n scale: 0.3\nevents:\n - type: source\n id: 96\n x: 0\n y: 0\n - type: destination\n id: 228\n x: 4\n y: 4\n'})}),(0,r.jsx)(n.p,{children:"The search trace contains a record of the events that occured during the search and how to visualise them."}),(0,r.jsx)(n.h2,{id:"load-the-search-trace",children:"Load the Search Trace"}),(0,r.jsx)(l.ZP,{})]}),(0,r.jsx)(i.Z,{value:"warthog",label:"Warthog",children:(0,r.jsx)(n.p,{children:"TODO: explain on how warthog can be download and used through the terminal and produce a search trace"})}),(0,r.jsxs)(i.Z,{value:"query",label:"Query",children:[(0,r.jsx)(n.p,{children:"By default, Visualiser is bundled with a WebAssembly version of Warthog, a solver for grid maps."}),(0,r.jsxs)(n.p,{children:["Check that ",(0,r.jsx)(n.strong,{children:"Warthog (WebAssembly)"})," is enabled in the ",(0,r.jsx)(n.strong,{children:"Settings"})," panel, in the ",(0,r.jsx)(n.strong,{children:"Connections"})," tab."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Alt text",src:t(7195).Z+"",width:"1431",height:"147"})}),(0,r.jsx)(n.h2,{id:"adding-the-query",children:"Adding the Query"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["In the ",(0,r.jsx)(n.strong,{children:"Layer"})," panel, click ",(0,r.jsx)(n.strong,{children:"+ Layer"})," to add a new layer."]}),"\n",(0,r.jsx)(n.li,{children:"Click the pencil icon to edit the layer."}),"\n",(0,r.jsxs)(n.li,{children:["For ",(0,r.jsx)(n.strong,{children:"Type"}),", choose ",(0,r.jsx)(n.strong,{children:"Query"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["For ",(0,r.jsx)(n.strong,{children:"Algorithm"}),", choose the algorithm that you want to visualise."]}),"\n",(0,r.jsxs)(n.li,{children:["For ",(0,r.jsx)(n.strong,{children:"Map"}),", choose a map that you have chose."]}),"\n",(0,r.jsxs)(n.li,{children:["Close the ",(0,r.jsx)(n.strong,{children:"Edit Layer"})," modal."]}),"\n"]}),(0,r.jsx)(n.h2,{id:"adding-source-and-destination",children:"Adding Source and Destination"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Left click on any part of the map that you wanted to be set as a source, then ",(0,r.jsx)(n.strong,{children:"Set as Source"})]}),"\n",(0,r.jsxs)(n.li,{children:["Do the same for the destination click ",(0,r.jsx)(n.strong,{children:"Set as Destination"})]}),"\n",(0,r.jsx)(n.li,{children:"A green pixel will show up marking the source"}),"\n"]}),(0,r.jsxs)(n.p,{children:["A demonstration on how to add a query, destination and source is provided in this ",(0,r.jsx)(n.a,{href:"https://youtu.be/7hFjyrnAVkA",children:"Video"})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"step-through-the-search-trace",children:"Step through the Search Trace"}),"\n",(0,r.jsx)(o.ZP,{}),"\n",(0,r.jsx)(n.p,{children:"\xa0"}),"\n",(0,r.jsxs)(n.p,{children:["A demonstration on how to import a map and a trace is provided in this ",(0,r.jsx)(n.a,{href:"https://youtu.be/MkA-Qf2TAZQ",children:"Video"}),"\n\xa0"]}),"\n",(0,r.jsx)(n.p,{children:"You have now visualised an A* search on a grid map."})]})}function x(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}},425:(e,n,t)=>{t.d(n,{Z:()=>i});t(7294);var r=t(6905);const s={tabItem:"tabItem_Ymn6"};var a=t(5893);function i(e){let{children:n,hidden:t,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,r.Z)(s.tabItem,i),hidden:t,children:n})}},3992:(e,n,t)=>{t.d(n,{Z:()=>w});var r=t(7294),s=t(6905),a=t(2957),i=t(6550),l=t(1270),o=t(5238),c=t(3609),d=t(2560);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad clear
",id:"clear",level:3},{value:"$for
",id:"for",level:3},{value:"$if
",id:"if",level:3},{value:"$info
",id:"info",level:3},{value:"API",id:"api",level:2}];function o(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"search-trace",children:"Search trace"}),"\n",(0,r.jsx)(n.p,{children:"The search trace is a YAML log of your algorithm's decisions. What, and how much, you want to log is up to you. Here are some ideas."}),"\n",(0,r.jsxs)("figure",{children:[(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="single-agent-search.trace.yaml"',children:"version: 1.4.0\nevents:\n - { type: expand, id: 0, f: 0, g: 0 }\n - { type: generate, id: 1, pId: 0, f: 1, g: 1 }\n - { type: close, id: 0, f: 0, g: 0 }\n"})}),(0,r.jsx)("figcaption",{children:"Generic search events"})]}),"\n",(0,r.jsxs)("figure",{children:[(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="agent-moves.trace.yaml"',children:"version: 1.4.0\nevents:\n - { type: move, agent: 47, id: 0, x: 0, y: 0 }\n - { type: move, agent: 18, id: 0, pId: 0, x: 5, y: 2 }\n"})}),(0,r.jsx)("figcaption",{children:"Multi-agent plan execution"})]}),"\n",(0,r.jsxs)("figure",{children:[(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="rayscan.trace.yaml"',children:"version: 1.4.0\nevents:\n - { type: raycast, id: 1, x: 1, y: 2, rayX: 3, rayY: 4 }\n - { type: raycast, id: 1, x: 1, y: 2, rayX: 1, rayY: 4 }\n - { type: expand, id: 2, x: 3, y: 4 }\n"})}),(0,r.jsx)("figcaption",{children:"Algorithm-specific events"})]}),"\n",(0,r.jsx)(n.p,{children:"Since YAML is a superset of JSON, your traces can be in JSON too."}),"\n",(0,r.jsxs)("figure",{children:[(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="single-agent-search.trace.json"',children:'version: 1.4.0\n{\n "events": [\n { "type": "expand", "id": 0, "f": 0, "g": 0 },\n { "type": "generate", "id": 1, "pId": 0, "f": 1, "g": 1 },\n { "type": "close", "id": 0, "f": 0, "g": 0 }\n ]\n}\n'})}),(0,r.jsx)("figcaption",{children:"Generic search events (JSON)"})]}),"\n",(0,r.jsxs)(n.p,{children:["Search traces should have the extensions ",(0,r.jsx)(n.code,{children:".trace.yaml"})," or ",(0,r.jsx)(n.code,{children:".trace.json"}),". It's required to declare ",(0,r.jsx)(n.code,{children:"version: 1.4.0"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"decision-tree",children:"Decision tree"}),"\n",(0,r.jsxs)(n.p,{children:["View your sequential decision-making processes as a tree or directed graph. Just provide ",(0,r.jsx)(n.code,{children:"id"})," and ",(0,r.jsx)(n.code,{children:"pId"}),"(parent ID) properties in your log."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="simple-tree.trace.yaml"',children:"version: 1.4.0\nevents:\n - { type: decision, id: a, pId: null }\n - { type: decision, id: b, pId: a }\n - { type: decision, id: c, pId: a }\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"type"})," property is optional, but should be a descriptive name of the kind of event that was logged."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Simple tree",src:i(1107).Z+"",width:"2560",height:"1600"})}),"\n",(0,r.jsx)(n.h2,{id:"custom-views",children:"Custom views"}),"\n",(0,r.jsxs)(n.p,{children:["Give your search trace a custom visual representation by adding a ",(0,r.jsx)(n.code,{children:"views"})," section to it."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'{2-9} title="custom-view.trace.yaml"',children:"version: 1.4.0\nviews:\n main:\n - $: rect # Show a rectangle...\n x: ${{ $.x }} # at this coordinate...\n y: ${{ $.y }} # at this coordinate...\n width: 1\n height: 1\n fill: ${{ theme.foreground }} # with this color \ud83c\udfa8\nevents:\n - { type: decision, id: a, x: 1, y: 1, pId: null }\n - { type: decision, id: b, x: 1, y: 3, pId: a }\n - { type: decision, id: c, x: 1, y: 5, pId: a }\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"main"})," view acts as the entry-point, and ",(0,r.jsx)(n.code,{children:"rect"})," is a primitive provided by the built-in 2D renderer."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Simple view",src:i(6234).Z+"",width:"2560",height:"1600"})}),"\n",(0,r.jsx)(n.p,{children:"It's that easy!"}),"\n",(0,r.jsx)(n.p,{children:"Custom views get you quickly going to creating something useful, but its also a language that is powerful enough to let you express complex visualisations."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Complex view",src:i(1641).Z+"",width:"2560",height:"1600"})}),"\n",(0,r.jsxs)(n.p,{children:["See the ",(0,r.jsx)(n.a,{href:"category/renderer",children:"2D renderer API reference"})," for a list of primitives provided by the built-in renderer."]}),"\n",(0,r.jsx)(n.h2,{id:"nested-views",children:"Nested views"}),"\n",(0,r.jsx)(n.p,{children:"Nesting allows you to create copies of some element without having to repeat yourself."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="nesting.trace.yaml',children:"version: 1.4.0\nviews:\n // highlight-next-line\n marker: # A marker is defined here, which just draws a circle\n - $: circle\n fill: ${{ $.color }}\n radius: 0.25\n x: ${{ $.x }}\n y: ${{ $.step }}\n main:\n // highlight-next-line\n - $: marker # Render a red marker\n color: red\n x: ${{ $.min }}\n // highlight-next-line\n - $: marker # Render a green marker\n color: green\n x: ${{ $.max }}\n\nevents:\n - { type: bound, step: 0, min: 1, max: 5 }\n - { type: bound, step: 1, min: 2, max: 5 }\n - { type: bound, step: 2, min: 2, max: 4 }\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Nest views by referencing other views with the ",(0,r.jsx)(n.code,{children:"$"})," property. You can also pass properties to them, which is accessible via the ",(0,r.jsx)(n.code,{children:"$"})," object in expressions."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Nesting",src:i(8557).Z+"",width:"2560",height:"1600"})}),"\n",(0,r.jsx)(n.h2,{id:"property-expressions",children:"Property expressions"}),"\n",(0,r.jsxs)(n.p,{children:["You can write expressions inside ",(0,r.jsx)(n.code,{children:"${{ }}"})," brackets to reference event information or values passed from a parent view."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="expression.trace.yaml',children:"version: 1.4.0\nviews:\n main:\n - $: rect\n width: 1\n height: 1\n // highlight-next-line\n fill: ${{ $.color }}\n $info:\n // highlight-next-line\n greeting: This rectangle is ${{ $.color }}\n\nevents:\n - { type: event, color: orange }\n"})}),"\n",(0,r.jsx)(n.p,{children:"If a property is a single expression, the property's value and type is taken from the result of the expression. But, if the property contains multiple expressions, or if there's text around the expressions, it becomes a concatenated string instead."}),"\n",(0,r.jsxs)(n.p,{children:["See the ",(0,r.jsx)(n.a,{href:"api/search-trace",children:"search trace API reference"})," for a list of properties available in expressions."]}),"\n",(0,r.jsx)(n.h2,{id:"special-properties",children:"Special properties"}),"\n",(0,r.jsx)(n.h3,{id:"clear",children:(0,r.jsx)(n.code,{children:"clear"})}),"\n",(0,r.jsx)(n.p,{children:"Control when elements should be cleared."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Value"}),(0,r.jsx)(n.th,{children:"Usage"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"false"})," (default)"]}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"clear: false"})}),(0,r.jsx)(n.td,{children:"Event will remain once drawn."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"clear: true"})}),(0,r.jsx)(n.td,{children:"Event will clear immediately after the step they're drawn."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"clear: close"})}),(0,r.jsxs)(n.td,{children:["Event clears once another event of the same ",(0,r.jsx)(n.code,{children:"id"}),", and the specified type (e.g. ",(0,r.jsx)(n.code,{children:"close"}),"), is encountered."]})]})]})]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="clear.trace.yaml"',children:"version: 1.4.0\nviews:\n main:\n - $: circle\n x: ${{ $.step }}\n y: 1\n radius: 0.25\n fill: ${{ colors.blue }}\n // highlight-next-line\n clear: close\nevents:\n - { type: open, id: 1 }\n - { type: generate, id: 1 }\n - { type: close, id: 1, message: Open and generate events should be cleared }\n"})}),"\n",(0,r.jsx)(n.h3,{id:"for",children:(0,r.jsx)(n.code,{children:"$for"})}),"\n",(0,r.jsx)(n.p,{children:"Repeat a view based on a value."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'{11-15} title="loop.trace.yaml"',children:"version: 1.4.0\nviews:\n main:\n - $: circle\n x: ${{ $.i }}\n y: 1\n radius: 0.25\n fill: ${{ $.colors[$.i] }}\n $info:\n color: ${{ $.colors[$.i] }}\n $for:\n $let: i # Optional, default `i`\n $from: 0 # Optional, default 0\n $step: 1 # Optional, default 1\n $to: ${{ $.colors.length }} # Required, number\nevents:\n - { type: event, colors: [red, green, blue, orange] }\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"For property",src:i(7786).Z+"",width:"2560",height:"1600"})}),"\n",(0,r.jsx)(n.h3,{id:"if",children:(0,r.jsx)(n.code,{children:"$if"})}),"\n",(0,r.jsx)(n.p,{children:"Conditionally render a view."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="if.trace.yaml"',children:"version: 1.4.0\nviews:\n main:\n - $: circle\n radius: 1\n x: 1\n y: 1\n fill: red\n // highlight-next-line\n $if: ${{ $.direction == 'left' }}\n - $: rect\n width: 1\n height: 1\n x: 1\n y: 1\n fill: red\n // highlight-next-line\n $if: ${{ $.direction == 'right' }}\nevents:\n - { type: event, direction: left }\n - { type: event, direction: right }\n"})}),"\n",(0,r.jsx)(n.h3,{id:"info",children:(0,r.jsx)(n.code,{children:"$info"})}),"\n",(0,r.jsx)(n.p,{children:"By default, clicking on elements in the viewport will show you info about the event that rendered it. However, you can define information that will only be shown when a specific part of the event was clicked."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'{9-11,17-19} title="info.trace.yaml',children:"version: 1.4.0\nviews:\n main:\n - $: circle\n fill: green\n radius: 0.25\n x: ${{ $.x + $.l }}\n y: 0\n $info:\n message: This is the left marker\n position: ${{ $.x }} + ${{ $.l }} = ${{ $.x + $.l }}\n - $: circle\n fill: red\n radius: 0.25\n x: ${{ $.x + $.r }}\n y: 0\n $info:\n message: This is the right marker\n position: ${{ $.x }} + ${{ $.r }} = ${{ $.x + $.r }}\nevents:\n - { type: bound, x: 10, l: 2, r: 4 }\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Info",src:i(950).Z+"",width:"2560",height:"1600"})}),"\n",(0,r.jsx)(n.h2,{id:"api",children:"API"}),"\n",(0,r.jsxs)(n.p,{children:["The search trace API defines how you can write and structure your search trace. ",(0,r.jsx)(n.a,{href:"api/search-trace",children:"See the search trace API"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The renderer specifies what primitives are available and how you can use them. For the built-in renderer, see the ",(0,r.jsx)(n.a,{href:"category/renderer",children:"2D renderer API here"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Check out the ",(0,r.jsx)(n.a,{href:"https://yaml.org/spec/1.2.2/",children:"YAML 1.2.2 documentation"})," for all the ways you can write YAML."]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},1641:(e,n,i)=>{i.d(n,{Z:()=>r});const r=i.p+"assets/images/complex-view-223a700f28d621ab7a77e34f80eb04ab.png"},7786:(e,n,i)=>{i.d(n,{Z:()=>r});const r=i.p+"assets/images/for-property-c87fdd4573ea433dddda4426707b4d3f.png"},950:(e,n,i)=>{i.d(n,{Z:()=>r});const r=i.p+"assets/images/info-f11c5f6a5fd1de5c1f3ebce102c51725.png"},8557:(e,n,i)=>{i.d(n,{Z:()=>r});const r=i.p+"assets/images/nesting-0f619bb07e3d8ac6d111b03507c058f6.png"},6234:(e,n,i)=>{i.d(n,{Z:()=>r});const r=i.p+"assets/images/simple-rendering-1f8ae5ac70f6059ca50b2f10025fa150.png"},1107:(e,n,i)=>{i.d(n,{Z:()=>r});const r=i.p+"assets/images/simple-tree-ea8b85e47ad3d4081ec880110c7651b8.png"},1151:(e,n,i)=>{i.d(n,{Z:()=>c,a:()=>a});var r=i(7294);const s={},t=r.createContext(s);function a(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/ef2725c4.e6cdd6bf.js b/assets/js/ef2725c4.e6cdd6bf.js
deleted file mode 100644
index 671f6a3..0000000
--- a/assets/js/ef2725c4.e6cdd6bf.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkdocs_2=self.webpackChunkdocs_2||[]).push([[6635],{957:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var r=i(5893),s=i(1151);const t={sidebar_position:1},a="Search trace",c={id:"search-trace",title:"Search trace",description:"The search trace is a YAML log of your algorithm's decisions. What, and how much, you want to log is up to you. Here are some ideas.",source:"@site/docs/2-search-trace.md",sourceDirName:".",slug:"/search-trace",permalink:"/docs/search-trace",draft:!1,unlisted:!1,editUrl:"https://github.com/path-visualiser/path-visualiser.github.io/tree/master/docs/2-search-trace.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/docs/overview"},next:{title:"Posthoc visualiser",permalink:"/docs/category/posthoc-visualiser"}},l={},d=[{value:"Decision tree",id:"decision-tree",level:2},{value:"Custom views",id:"custom-views",level:2},{value:"Nested views",id:"nested-views",level:2},{value:"Property expressions",id:"property-expressions",level:2},{value:"Special properties",id:"special-properties",level:2},{value:"clear
",id:"clear",level:3},{value:"$for
",id:"for",level:3},{value:"$if
",id:"if",level:3},{value:"$info
",id:"info",level:3},{value:"API",id:"api",level:2}];function o(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"search-trace",children:"Search trace"}),"\n",(0,r.jsx)(n.p,{children:"The search trace is a YAML log of your algorithm's decisions. What, and how much, you want to log is up to you. Here are some ideas."}),"\n",(0,r.jsxs)("figure",{children:[(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="single-agent-search.trace.yaml"',children:"events:\n - { type: expand, id: 0, f: 0, g: 0 }\n - { type: generate, id: 1, pId: 0, f: 1, g: 1 }\n - { type: close, id: 0, f: 0, g: 0 }\n"})}),(0,r.jsx)("figcaption",{children:"Generic search events"})]}),"\n",(0,r.jsxs)("figure",{children:[(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="agent-moves.trace.yaml"',children:"events:\n - { type: move, agent: 47, id: 0, x: 0, y: 0 }\n - { type: move, agent: 18, id: 0, pId: 0, x: 5, y: 2 }\n"})}),(0,r.jsx)("figcaption",{children:"Multi-agent plan execution"})]}),"\n",(0,r.jsxs)("figure",{children:[(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="rayscan.trace.yaml"',children:"events:\n - { type: raycast, id: 1, x: 1, y: 2, rayX: 3, rayY: 4 }\n - { type: raycast, id: 1, x: 1, y: 2, rayX: 1, rayY: 4 }\n - { type: expand, id: 2, x: 3, y: 4 }\n"})}),(0,r.jsx)("figcaption",{children:"Algorithm-specific events"})]}),"\n",(0,r.jsx)(n.p,{children:"Since YAML is a superset of JSON, your traces can be in JSON too."}),"\n",(0,r.jsxs)("figure",{children:[(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="single-agent-search.trace.json"',children:'{\n "events": [\n { "type": "expand", "id": 0, "f": 0, "g": 0 },\n { "type": "generate", "id": 1, "pId": 0, "f": 1, "g": 1 },\n { "type": "close", "id": 0, "f": 0, "g": 0 }\n ]\n}\n'})}),(0,r.jsx)("figcaption",{children:"Generic search events (JSON)"})]}),"\n",(0,r.jsxs)(n.p,{children:["Search traces should have the extensions ",(0,r.jsx)(n.code,{children:".trace.yaml"})," or ",(0,r.jsx)(n.code,{children:".trace.json"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"decision-tree",children:"Decision tree"}),"\n",(0,r.jsxs)(n.p,{children:["View your sequential decision-making processes as a tree or directed graph. Just provide ",(0,r.jsx)(n.code,{children:"id"})," and ",(0,r.jsx)(n.code,{children:"pId"}),"(parent ID) properties in your log."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="simple-tree.trace.yaml"',children:"events:\n - { type: decision, id: a, pId: null }\n - { type: decision, id: b, pId: a }\n - { type: decision, id: c, pId: a }\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"type"})," property is optional, but should be a descriptive name of the kind of event that was logged."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Simple tree",src:i(1107).Z+"",width:"2560",height:"1600"})}),"\n",(0,r.jsx)(n.h2,{id:"custom-views",children:"Custom views"}),"\n",(0,r.jsxs)(n.p,{children:["Give your search trace a custom visual representation by adding a ",(0,r.jsx)(n.code,{children:"views"})," section to it."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'{1-8} title="custom-view.trace.yaml"',children:"views:\n main:\n - $: rect # Show a rectangle...\n x: ${{ $.x }} # at this coordinate...\n y: ${{ $.y }} # at this coordinate...\n width: 1\n height: 1\n fill: ${{ theme.foreground }} # with this color \ud83c\udfa8\nevents:\n - { type: decision, id: a, x: 1, y: 1, pId: null }\n - { type: decision, id: b, x: 1, y: 3, pId: a }\n - { type: decision, id: c, x: 1, y: 5, pId: a }\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"main"})," view acts as the entry-point, and ",(0,r.jsx)(n.code,{children:"rect"})," is a primitive provided by the built-in 2D renderer."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Simple view",src:i(6234).Z+"",width:"2560",height:"1600"})}),"\n",(0,r.jsx)(n.p,{children:"It's that easy!"}),"\n",(0,r.jsx)(n.p,{children:"Custom views get you quickly going to creating something useful, but its also a language that is powerful enough to let you express complex visualisations."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Complex view",src:i(1641).Z+"",width:"2560",height:"1600"})}),"\n",(0,r.jsxs)(n.p,{children:["See the ",(0,r.jsx)(n.a,{href:"category/renderer",children:"2D renderer API reference"})," for a list of primitives provided by the built-in renderer."]}),"\n",(0,r.jsx)(n.h2,{id:"nested-views",children:"Nested views"}),"\n",(0,r.jsx)(n.p,{children:"Nesting allows you to create copies of some element without having to repeat yourself."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="nesting.trace.yaml',children:"views:\n // highlight-next-line\n marker: # A marker is defined here, which just draws a circle\n - $: circle\n fill: ${{ $.color }}\n radius: 0.25\n x: ${{ $.x }}\n y: ${{ $.step }}\n main:\n // highlight-next-line\n - $: marker # Render a red marker\n color: red\n x: ${{ $.min }}\n // highlight-next-line\n - $: marker # Render a green marker\n color: green\n x: ${{ $.max }}\n\nevents:\n - { type: bound, step: 0, min: 1, max: 5 }\n - { type: bound, step: 1, min: 2, max: 5 }\n - { type: bound, step: 2, min: 2, max: 4 }\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Nest views by referencing other views with the ",(0,r.jsx)(n.code,{children:"$"})," property. You can also pass properties to them, which is accessible via the ",(0,r.jsx)(n.code,{children:"$"})," object in expressions."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Nesting",src:i(8557).Z+"",width:"2560",height:"1600"})}),"\n",(0,r.jsx)(n.h2,{id:"property-expressions",children:"Property expressions"}),"\n",(0,r.jsxs)(n.p,{children:["You can write expressions inside ",(0,r.jsx)(n.code,{children:"${{ }}"})," brackets to reference event information or values passed from a parent view."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="expression.trace.yaml',children:"views:\n main:\n - $: rect\n width: 1\n height: 1\n // highlight-next-line\n fill: ${{ $.color }}\n $info:\n // highlight-next-line\n greeting: This rectangle is ${{ $.color }}\n\nevents:\n - { type: event, color: orange }\n"})}),"\n",(0,r.jsx)(n.p,{children:"If a property is a single expression, the property's value and type is taken from the result of the expression. But, if the property contains multiple expressions, or if there's text around the expressions, it becomes a concatenated string instead."}),"\n",(0,r.jsxs)(n.p,{children:["See the ",(0,r.jsx)(n.a,{href:"api/search-trace",children:"search trace API reference"})," for a list of properties available in expressions."]}),"\n",(0,r.jsx)(n.h2,{id:"special-properties",children:"Special properties"}),"\n",(0,r.jsx)(n.h3,{id:"clear",children:(0,r.jsx)(n.code,{children:"clear"})}),"\n",(0,r.jsx)(n.p,{children:"Control when elements should be cleared."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Value"}),(0,r.jsx)(n.th,{children:"Example"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"false"})," (default)"]}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"clear: false"})}),(0,r.jsx)(n.td,{children:"Elements will remain once drawn."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"clear: true"})}),(0,r.jsx)(n.td,{children:"Elements will clear immediately after the step they're drawn."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"clear: closing"})}),(0,r.jsxs)(n.td,{children:["Clear once the event of a particular type (e.g. ",(0,r.jsx)(n.code,{children:"closing"}),") is encountered."]})]})]})]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="clear.trace.yaml"',children:"views:\n main:\n - $: circle\n x: ${{ $.step }}\n y: 1\n radius: 0.25\n fill: ${{ colors.blue }}\n // highlight-next-line\n clear: close\nevents:\n - { type: open, id: 1 }\n - { type: generate, id: 1 }\n - { type: close, id: 1, message: Open and generate events should be cleared }\n"})}),"\n",(0,r.jsx)(n.h3,{id:"for",children:(0,r.jsx)(n.code,{children:"$for"})}),"\n",(0,r.jsx)(n.p,{children:"Repeat a view based on a value."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'{10-14} title="loop.trace.yaml"',children:"views:\n main:\n - $: circle\n x: ${{ $.i }}\n y: 1\n radius: 0.25\n fill: ${{ $.colors[$.i] }}\n $info:\n color: ${{ $.colors[$.i] }}\n $for:\n $let: i # Optional, default `i`\n $from: 0 # Optional, default 0\n $step: 1 # Optional, default 1\n $to: ${{ $.colors.length }} # Required, number\nevents:\n - { type: event, colors: [red, green, blue, orange] }\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"For property",src:i(7786).Z+"",width:"2560",height:"1600"})}),"\n",(0,r.jsx)(n.h3,{id:"if",children:(0,r.jsx)(n.code,{children:"$if"})}),"\n",(0,r.jsx)(n.p,{children:"Conditionally render a view."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="if.trace.yaml"',children:"views:\n main:\n - $: circle\n radius: 1\n x: 1\n y: 1\n fill: red\n // highlight-next-line\n $if: ${{ $.direction == 'left' }}\n - $: rect\n width: 1\n height: 1\n x: 1\n y: 1\n fill: red\n // highlight-next-line\n $if: ${{ $.direction == 'right' }}\nevents:\n - { type: event, direction: left }\n - { type: event, direction: right }\n"})}),"\n",(0,r.jsx)(n.h3,{id:"info",children:(0,r.jsx)(n.code,{children:"$info"})}),"\n",(0,r.jsx)(n.p,{children:"By default, clicking on elements in the viewport will show you info about the event that rendered it. However, you can define information that will only be shown when a specific part of the event was clicked."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'{8-11,17-20} title="info.trace.yaml',children:"views:\n main:\n - $: circle\n fill: green\n radius: 0.25\n x: ${{ $.x + $.l }}\n y: 0\n $info:\n message: This is the left marker\n position: ${{ $.x }} + ${{ $.l }} = ${{ $.x + $.l }}\n - $: circle\n fill: red\n radius: 0.25\n x: ${{ $.x + $.r }}\n y: 0\n $info:\n message: This is the right marker\n position: ${{ $.x }} + ${{ $.r }} = ${{ $.x + $.r }}\nevents:\n - { type: bound, x: 10, l: 2, r: 4 }\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Info",src:i(950).Z+"",width:"2560",height:"1600"})}),"\n",(0,r.jsx)(n.h2,{id:"api",children:"API"}),"\n",(0,r.jsxs)(n.p,{children:["The search trace API defines how you can write and structure your search trace. ",(0,r.jsx)(n.a,{href:"api/search-trace",children:"See the search trace API"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The renderer specifies what primitives are available and how you can use them. For the built-in renderer, see the ",(0,r.jsx)(n.a,{href:"category/renderer",children:"2D renderer API here"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Check out the ",(0,r.jsx)(n.a,{href:"https://yaml.org/spec/1.2.2/",children:"YAML 1.2.2 documentation"})," for all the ways you can write YAML."]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},1641:(e,n,i)=>{i.d(n,{Z:()=>r});const r=i.p+"assets/images/complex-view-223a700f28d621ab7a77e34f80eb04ab.png"},7786:(e,n,i)=>{i.d(n,{Z:()=>r});const r=i.p+"assets/images/for-property-c87fdd4573ea433dddda4426707b4d3f.png"},950:(e,n,i)=>{i.d(n,{Z:()=>r});const r=i.p+"assets/images/info-f11c5f6a5fd1de5c1f3ebce102c51725.png"},8557:(e,n,i)=>{i.d(n,{Z:()=>r});const r=i.p+"assets/images/nesting-0f619bb07e3d8ac6d111b03507c058f6.png"},6234:(e,n,i)=>{i.d(n,{Z:()=>r});const r=i.p+"assets/images/simple-rendering-1f8ae5ac70f6059ca50b2f10025fa150.png"},1107:(e,n,i)=>{i.d(n,{Z:()=>r});const r=i.p+"assets/images/simple-tree-ea8b85e47ad3d4081ec880110c7651b8.png"},1151:(e,n,i)=>{i.d(n,{Z:()=>c,a:()=>a});var r=i(7294);const s={},t=r.createContext(s);function a(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/main.128a9183.js b/assets/js/main.128a9183.js
new file mode 100644
index 0000000..c7f7b23
--- /dev/null
+++ b/assets/js/main.128a9183.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.128a9183.js.LICENSE.txt */
+(self.webpackChunkdocs_2=self.webpackChunkdocs_2||[]).push([[179],{997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(7294);var r=n(8356),o=n.n(r),a=n(6887);const i={"00a4425a":[()=>n.e(879).then(n.bind(n,528)),"@site/docs/3-visualiser/3-1-user-guide/interface.md",528],"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,2864)),"@theme/BlogTagsListPage",2864],"029c79a8":[()=>Promise.all([n.e(532),n.e(7987)]).then(n.bind(n,3395)),"@site/docs/4-tutorials/tile.mdx",3395],"0ec73681":[()=>n.e(5868).then(n.bind(n,4621)),"@site/docs/6-api/renderer/protocol.md",4621],"1429b7e2":[()=>n.e(8756).then(n.t.bind(n,3181,19)),"~docs/default/category-docs-tutorialsidebar-category-user-guide-a78.json",3181],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,853)),"@theme/DocCategoryGeneratedIndexPage",853],15503985:[()=>n.e(4626).then(n.bind(n,7387)),"@site/docs/6-api/renderer/standard-renderers.md",7387],17896441:[()=>Promise.all([n.e(532),n.e(4885),n.e(7918)]).then(n.bind(n,2889)),"@theme/DocItem",2889],"1dec2e7b":[()=>n.e(1567).then(n.bind(n,3140)),"@site/docs/1-overview.md",3140],"1df93b7f":[()=>Promise.all([n.e(333),n.e(3237)]).then(n.bind(n,7648)),"@site/src/pages/index.tsx",7648],"30a24c52":[()=>n.e(453).then(n.t.bind(n,8605,19)),"~blog/default/blog-tags-hello-039.json",8605],"3bc5039f":[()=>n.e(4473).then(n.bind(n,297)),"@site/docs/6-api/renderer/components.md",297],"458816ec":[()=>n.e(9985).then(n.bind(n,665)),"@site/docs/3-visualiser/3-1-user-guide/steps.md",665],"46eee094":[()=>n.e(5265).then(n.t.bind(n,6187,19)),"~docs/default/category-docs-tutorialsidebar-category-contributing-2d3.json",6187],"4cd738bd":[()=>n.e(8322).then(n.t.bind(n,4876,19)),"~docs/default/category-docs-tutorialsidebar-category-tutorials-d5c.json",4876],"53fa505f":[()=>n.e(6663).then(n.t.bind(n,4469,19)),"/home/runner/work/path-visualiser.github.io/path-visualiser.github.io/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],"55f71885":[()=>n.e(6277).then(n.bind(n,1562)),"@site/docs/3-visualiser/3-1-user-guide/viewport.md",1562],"5e95c892":[()=>n.e(9661).then(n.bind(n,4942)),"@theme/DocsRoot",4942],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],66406991:[()=>n.e(110).then(n.t.bind(n,711,19)),"~blog/default/blog-tags-hello-039-list.json",711],68647428:[()=>n.e(5039).then(n.bind(n,5247)),"@site/docs/3-visualiser/3-1-user-guide/tree.md",5247],"6875c492":[()=>Promise.all([n.e(532),n.e(4885),n.e(864),n.e(8610)]).then(n.bind(n,4883)),"@theme/BlogTagsPostsPage",4883],"6c945e85":[()=>n.e(1070).then(n.bind(n,8158)),"@site/docs/6-api/visualiser-adapter-protocol.md",8158],"6f3fa7c4":[()=>n.e(2378).then(n.bind(n,822)),"@site/docs/6-api/search-trace.md",822],"7163198f":[()=>Promise.all([n.e(532),n.e(7005)]).then(n.bind(n,3199)),"@site/docs/4-tutorials/single-agent-grid.mdx",3199],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"8e97e476":[()=>n.e(5498).then(n.bind(n,1940)),"@site/docs/6-api/renderer/execution-context.md",1940],"8f3a0c2f":[()=>n.e(5234).then(n.t.bind(n,5745,19)),"/home/runner/work/path-visualiser.github.io/path-visualiser.github.io/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"988781e2":[()=>n.e(9493).then(n.t.bind(n,6800,19)),"~docs/default/category-docs-tutorialsidebar-category-api-2c3.json",6800],"9c7a41f4":[()=>n.e(3480).then(n.bind(n,2211)),"@site/docs/3-visualiser/overview.md",2211],"9cde8b2f":[()=>n.e(9340).then(n.t.bind(n,7537,19)),"~docs/default/category-docs-tutorialsidebar-category-posthoc-visualiser-1e7.json",7537],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8151)),"@theme/BlogArchivePage",8151],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(4885),n.e(864),n.e(3089)]).then(n.bind(n,9928)),"@theme/BlogListPage",9928],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,604)),"@theme/DocVersionRoot",604],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,3699)),"@theme/DocRoot",3699],aff2e64c:[()=>n.e(644).then(n.bind(n,1032)),"@site/docs/6-api/renderer/2D-renderer.md",1032],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],b763b81d:[()=>n.e(1439).then(n.bind(n,4816)),"@site/blog/2023-11-18-todo/index.md?truncated=true",4816],b83e3081:[()=>n.e(6640).then(n.bind(n,47)),"@site/docs/3-visualiser/3-1-user-guide/settings.mdx",47],bdf3e333:[()=>n.e(4176).then(n.bind(n,1706)),"@site/docs/3-visualiser/3-1-user-guide/debugger.mdx",1706],bfde10d3:[()=>n.e(8429).then(n.t.bind(n,229,19)),"~docs/default/category-docs-tutorialsidebar-category-renderer-935.json",229],c5b27c7c:[()=>n.e(5253).then(n.t.bind(n,3769,19)),"/home/runner/work/path-visualiser.github.io/path-visualiser.github.io/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],c695d9ce:[()=>n.e(1169).then(n.bind(n,5501)),"@site/docs/3-visualiser/3-1-user-guide/layers.mdx",5501],cc37995b:[()=>n.e(8046).then(n.bind(n,198)),"@site/docs/6-api/renderer/2D-inbuilts.md",198],ccc49370:[()=>Promise.all([n.e(532),n.e(4885),n.e(864),n.e(6103)]).then(n.bind(n,324)),"@theme/BlogPostPage",324],deaa081a:[()=>n.e(4223).then(n.bind(n,4214)),"@site/blog/2023-11-18-todo/index.md",4214],e00b1594:[()=>n.e(3740).then(n.bind(n,34)),"@site/docs/7-contributing/overview.md",34],ef2725c4:[()=>n.e(6635).then(n.bind(n,957)),"@site/docs/2-search-trace.md",957]};var l=n(5893);function s(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(5304),c=n(9656);function d(e,t){if("*"===e)return o()({loading:s,loader:()=>n.e(868).then(n.bind(n,4336)),modules:["@theme/NotFound"],webpack:()=>[4336],render(e,t){const n=e.default;return(0,l.jsx)(c.z,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,u.Z)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:s,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,l.jsx)(c.z,{value:i,children:(0,l.jsx)(a,{...o,...n})})}})}const p=[{path:"/blog",component:d("/blog","416"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","0b6"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","9ee"),exact:!0},{path:"/blog/tags/hello",component:d("/blog/tags/hello","76c"),exact:!0},{path:"/blog/todo",component:d("/blog/todo","a7f"),exact:!0},{path:"/docs",component:d("/docs","94a"),routes:[{path:"/docs",component:d("/docs","32c"),routes:[{path:"/docs",component:d("/docs","127"),routes:[{path:"/docs/api/renderer/2D-inbuilts",component:d("/docs/api/renderer/2D-inbuilts","be1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/renderer/2D-renderer",component:d("/docs/api/renderer/2D-renderer","392"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/renderer/components",component:d("/docs/api/renderer/components","6af"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/renderer/execution-context",component:d("/docs/api/renderer/execution-context","614"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/renderer/protocol",component:d("/docs/api/renderer/protocol","5d8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/renderer/standard-renderers",component:d("/docs/api/renderer/standard-renderers","704"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/search-trace",component:d("/docs/api/search-trace","0eb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/visualiser-adapter-protocol",component:d("/docs/api/visualiser-adapter-protocol","1c5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/api",component:d("/docs/category/api","664"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/contributing",component:d("/docs/category/contributing","9f4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/posthoc-visualiser",component:d("/docs/category/posthoc-visualiser","7e6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/renderer",component:d("/docs/category/renderer","8e1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/tutorials",component:d("/docs/category/tutorials","f40"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/user-guide",component:d("/docs/category/user-guide","2a4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/contributing/overview",component:d("/docs/contributing/overview","c6a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/overview",component:d("/docs/overview","285"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/search-trace",component:d("/docs/search-trace","4b0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/single-agent-grid",component:d("/docs/tutorials/single-agent-grid","33d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/tile",component:d("/docs/tutorials/tile","c5c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/debugger",component:d("/docs/visualiser/3-1-user-guide/debugger","2da"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/interface",component:d("/docs/visualiser/3-1-user-guide/interface","5a3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/layers",component:d("/docs/visualiser/3-1-user-guide/layers","c0e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/settings",component:d("/docs/visualiser/3-1-user-guide/settings","9ec"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/steps",component:d("/docs/visualiser/3-1-user-guide/steps","256"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/tree",component:d("/docs/visualiser/3-1-user-guide/tree","4cf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/viewport",component:d("/docs/visualiser/3-1-user-guide/viewport","b93"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/overview",component:d("/docs/visualiser/overview","d58"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/",component:d("/","c1c"),exact:!0},{path:"*",component:d("*")}]},5351:(e,t,n)=>{var r,o;!function(){var a,i,l,s,u,c,d,p,f,m,h,g,y,v,b,w,k,S,x,_,E,O,j,C,P,T,I,A,N,L,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;rYour Docusaurus site did not load properly.
\nA very common reason is a wrong site baseUrl configuration.
\nCurrent configured baseUrl = ${e} ${"/"===e?" (default value)":""}
\nWe suggest trying baseUrl =
\n.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},6854:()=>{!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{const l=t.toLowerCase(),s=((e,t)=>{const[n,o]=(0,r.useState)(W(t,e)),a=(0,r.useRef)(),i=(0,r.useRef)();return(0,r.useEffect)((()=>{t===a.current&&e===i.current||(a.current=t,i.current=e,o(W(t,e)))}),[e,t]),n})(l,o),u=(e=>(0,r.useCallback)((t=>{var n=t,{className:r,style:o,line:i}=n,l=_(n,["className","style","line"]);const s=x(S({},l),{className:a("token-line",r)});return"object"==typeof e&&"plain"in e&&(s.style=e.plain),"object"==typeof o&&(s.style=S(S({},s.style||{}),o)),s}),[e]))(s),c=(e=>{const t=(0,r.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,r.useCallback)((e=>{var n=e,{token:r,className:o,style:i}=n,l=_(n,["token","className","style"]);const s=x(S({},l),{className:a("token",...r.types,o),children:r.content,style:t(r)});return null!=i&&(s.style=S(S({},s.style||{}),i)),s}),[t])})(s),d=(({prism:e,code:t,grammar:n,language:o})=>{const a=(0,r.useRef)(e);return(0,r.useMemo)((()=>{if(null==n)return Y([t]);const e={code:t,grammar:n,language:o,tokens:[]};return a.current.hooks.run("before-tokenize",e),e.tokens=a.current.tokenize(t,n),a.current.hooks.run("after-tokenize",e),Y(e.tokens)}),[t,n,o])})({prism:i,language:l,code:n,grammar:i.languages[l]});return e({tokens:d,className:`prism-code language-${l}`,style:null!=s?s.root:{},getLineProps:u,getTokenProps:c})},X=e=>(0,r.createElement)(J,x(S({},e),{prism:e.prism||O,theme:e.theme||U,code:e.code,language:e.language}))},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},7529:e=>{"use strict";e.exports=JSON.parse('{"cmfcmf/d-s-l.searchBar.placeholder":"Search...","cmfcmf/d-s-l.searchBar.noResults":"No results found.","cmfcmf/d-s-l.searchBar.clearButtonTitle":"Clear","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"Cancel","cmfcmf/d-s-l.searchBar.submitButtonTitle":"Submit"}')},6887:e=>{"use strict";e.exports=JSON.parse('{"/blog-416":{"__comp":"a6aa9e1f","__context":{"plugin":"53fa505f"},"sidebar":"814f3328","items":[{"content":"b763b81d"}],"metadata":"b2b675dd"},"/blog/archive-0b6":{"__comp":"9e4087bc","__context":{"plugin":"53fa505f"},"archive":"b2f554cd"},"/blog/tags-9ee":{"__comp":"01a85c17","__context":{"plugin":"53fa505f"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/hello-76c":{"__comp":"6875c492","__context":{"plugin":"53fa505f"},"sidebar":"814f3328","items":[{"content":"b763b81d"}],"tag":"30a24c52","listMetadata":"66406991"},"/blog/todo-a7f":{"__comp":"ccc49370","__context":{"plugin":"53fa505f"},"sidebar":"814f3328","content":"deaa081a"},"/docs-94a":{"__comp":"5e95c892","__context":{"plugin":"c5b27c7c"}},"/docs-32c":{"__comp":"a7bd4aaa","version":"935f2afb"},"/docs-127":{"__comp":"a94703ab"},"/docs/api/renderer/2D-inbuilts-be1":{"__comp":"17896441","content":"cc37995b"},"/docs/api/renderer/2D-renderer-392":{"__comp":"17896441","content":"aff2e64c"},"/docs/api/renderer/components-6af":{"__comp":"17896441","content":"3bc5039f"},"/docs/api/renderer/execution-context-614":{"__comp":"17896441","content":"8e97e476"},"/docs/api/renderer/protocol-5d8":{"__comp":"17896441","content":"0ec73681"},"/docs/api/renderer/standard-renderers-704":{"__comp":"17896441","content":"15503985"},"/docs/api/search-trace-0eb":{"__comp":"17896441","content":"6f3fa7c4"},"/docs/api/visualiser-adapter-protocol-1c5":{"__comp":"17896441","content":"6c945e85"},"/docs/category/api-664":{"__comp":"14eb3368","categoryGeneratedIndex":"988781e2"},"/docs/category/contributing-9f4":{"__comp":"14eb3368","categoryGeneratedIndex":"46eee094"},"/docs/category/posthoc-visualiser-7e6":{"__comp":"14eb3368","categoryGeneratedIndex":"9cde8b2f"},"/docs/category/renderer-8e1":{"__comp":"14eb3368","categoryGeneratedIndex":"bfde10d3"},"/docs/category/tutorials-f40":{"__comp":"14eb3368","categoryGeneratedIndex":"4cd738bd"},"/docs/category/user-guide-2a4":{"__comp":"14eb3368","categoryGeneratedIndex":"1429b7e2"},"/docs/contributing/overview-c6a":{"__comp":"17896441","content":"e00b1594"},"/docs/overview-285":{"__comp":"17896441","content":"1dec2e7b"},"/docs/search-trace-4b0":{"__comp":"17896441","content":"ef2725c4"},"/docs/tutorials/single-agent-grid-33d":{"__comp":"17896441","content":"7163198f"},"/docs/tutorials/tile-c5c":{"__comp":"17896441","content":"029c79a8"},"/docs/visualiser/3-1-user-guide/debugger-2da":{"__comp":"17896441","content":"bdf3e333"},"/docs/visualiser/3-1-user-guide/interface-5a3":{"__comp":"17896441","content":"00a4425a"},"/docs/visualiser/3-1-user-guide/layers-c0e":{"__comp":"17896441","content":"c695d9ce"},"/docs/visualiser/3-1-user-guide/settings-9ec":{"__comp":"17896441","content":"b83e3081"},"/docs/visualiser/3-1-user-guide/steps-256":{"__comp":"17896441","content":"458816ec"},"/docs/visualiser/3-1-user-guide/tree-4cf":{"__comp":"17896441","content":"68647428"},"/docs/visualiser/3-1-user-guide/viewport-b93":{"__comp":"17896441","content":"55f71885"},"/docs/visualiser/overview-d58":{"__comp":"17896441","content":"9c7a41f4"},"/-c1c":{"__comp":"1df93b7f","__context":{"plugin":"8f3a0c2f"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=9717,e(e.s=t);var t}));e.O()}]);
\ No newline at end of file
diff --git a/assets/js/main.c6a1be2d.js.LICENSE.txt b/assets/js/main.128a9183.js.LICENSE.txt
similarity index 100%
rename from assets/js/main.c6a1be2d.js.LICENSE.txt
rename to assets/js/main.128a9183.js.LICENSE.txt
diff --git a/assets/js/main.c6a1be2d.js b/assets/js/main.c6a1be2d.js
deleted file mode 100644
index 219ca0b..0000000
--- a/assets/js/main.c6a1be2d.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see main.c6a1be2d.js.LICENSE.txt */
-(self.webpackChunkdocs_2=self.webpackChunkdocs_2||[]).push([[179],{997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(7294);var r=n(8356),o=n.n(r),a=n(6887);const i={"00a4425a":[()=>n.e(879).then(n.bind(n,528)),"@site/docs/3-visualiser/3-1-user-guide/interface.md",528],"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,2864)),"@theme/BlogTagsListPage",2864],"029c79a8":[()=>Promise.all([n.e(532),n.e(7987)]).then(n.bind(n,3395)),"@site/docs/4-tutorials/tile.mdx",3395],"0ec73681":[()=>n.e(5868).then(n.bind(n,4621)),"@site/docs/6-api/renderer/protocol.md",4621],"1429b7e2":[()=>n.e(8756).then(n.t.bind(n,3181,19)),"~docs/default/category-docs-tutorialsidebar-category-user-guide-a78.json",3181],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,853)),"@theme/DocCategoryGeneratedIndexPage",853],15503985:[()=>n.e(4626).then(n.bind(n,7387)),"@site/docs/6-api/renderer/standard-renderers.md",7387],17896441:[()=>Promise.all([n.e(532),n.e(4885),n.e(7918)]).then(n.bind(n,2889)),"@theme/DocItem",2889],"1dec2e7b":[()=>n.e(1567).then(n.bind(n,3140)),"@site/docs/1-overview.md",3140],"1df93b7f":[()=>Promise.all([n.e(333),n.e(3237)]).then(n.bind(n,7648)),"@site/src/pages/index.tsx",7648],"216f74a6":[()=>n.e(7566).then(n.bind(n,5052)),"@site/docs/6-api/overview.md",5052],"30a24c52":[()=>n.e(453).then(n.t.bind(n,8605,19)),"~blog/default/blog-tags-hello-039.json",8605],"3688c61a":[()=>n.e(3022).then(n.bind(n,4151)),"@site/docs/4-tutorials/overview.md",4151],"3bc5039f":[()=>n.e(4473).then(n.bind(n,297)),"@site/docs/6-api/renderer/components.md",297],"458816ec":[()=>n.e(9985).then(n.bind(n,665)),"@site/docs/3-visualiser/3-1-user-guide/steps.md",665],"46eee094":[()=>n.e(5265).then(n.t.bind(n,6187,19)),"~docs/default/category-docs-tutorialsidebar-category-contributing-2d3.json",6187],"4cd738bd":[()=>n.e(8322).then(n.t.bind(n,4876,19)),"~docs/default/category-docs-tutorialsidebar-category-tutorials-d5c.json",4876],"53fa505f":[()=>n.e(6663).then(n.t.bind(n,4469,19)),"/home/runner/work/path-visualiser.github.io/path-visualiser.github.io/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],"55f71885":[()=>n.e(6277).then(n.bind(n,1562)),"@site/docs/3-visualiser/3-1-user-guide/viewport.md",1562],"5e95c892":[()=>n.e(9661).then(n.bind(n,4942)),"@theme/DocsRoot",4942],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],66406991:[()=>n.e(110).then(n.t.bind(n,711,19)),"~blog/default/blog-tags-hello-039-list.json",711],68647428:[()=>n.e(5039).then(n.bind(n,5247)),"@site/docs/3-visualiser/3-1-user-guide/tree.md",5247],"6875c492":[()=>Promise.all([n.e(532),n.e(4885),n.e(864),n.e(8610)]).then(n.bind(n,4883)),"@theme/BlogTagsPostsPage",4883],"6c945e85":[()=>n.e(1070).then(n.bind(n,8158)),"@site/docs/6-api/visualiser-adapter-protocol.md",8158],"6f3fa7c4":[()=>n.e(2378).then(n.bind(n,822)),"@site/docs/6-api/search-trace.md",822],"7163198f":[()=>Promise.all([n.e(532),n.e(7005)]).then(n.bind(n,3199)),"@site/docs/4-tutorials/single-agent-grid.mdx",3199],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"8e97e476":[()=>n.e(5498).then(n.bind(n,1940)),"@site/docs/6-api/renderer/execution-context.md",1940],"8f3a0c2f":[()=>n.e(5234).then(n.t.bind(n,5745,19)),"/home/runner/work/path-visualiser.github.io/path-visualiser.github.io/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"988781e2":[()=>n.e(9493).then(n.t.bind(n,6800,19)),"~docs/default/category-docs-tutorialsidebar-category-api-2c3.json",6800],"9cde8b2f":[()=>n.e(9340).then(n.t.bind(n,7537,19)),"~docs/default/category-docs-tutorialsidebar-category-posthoc-visualiser-1e7.json",7537],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8151)),"@theme/BlogArchivePage",8151],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(4885),n.e(864),n.e(3089)]).then(n.bind(n,9928)),"@theme/BlogListPage",9928],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,604)),"@theme/DocVersionRoot",604],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,3699)),"@theme/DocRoot",3699],aff2e64c:[()=>n.e(644).then(n.bind(n,1032)),"@site/docs/6-api/renderer/2D-renderer.md",1032],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],b763b81d:[()=>n.e(1439).then(n.bind(n,4816)),"@site/blog/2023-11-18-todo/index.md?truncated=true",4816],b83e3081:[()=>n.e(6640).then(n.bind(n,47)),"@site/docs/3-visualiser/3-1-user-guide/settings.mdx",47],bdf3e333:[()=>n.e(4176).then(n.bind(n,1706)),"@site/docs/3-visualiser/3-1-user-guide/debugger.mdx",1706],bfde10d3:[()=>n.e(8429).then(n.t.bind(n,229,19)),"~docs/default/category-docs-tutorialsidebar-category-renderer-935.json",229],c0de6e9d:[()=>n.e(1573).then(n.bind(n,7168)),"@site/docs/3-visualiser/2-visualiser.md",7168],c5b27c7c:[()=>n.e(5253).then(n.t.bind(n,3769,19)),"/home/runner/work/path-visualiser.github.io/path-visualiser.github.io/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],c695d9ce:[()=>n.e(1169).then(n.bind(n,5501)),"@site/docs/3-visualiser/3-1-user-guide/layers.mdx",5501],cc37995b:[()=>n.e(8046).then(n.bind(n,198)),"@site/docs/6-api/renderer/2D-inbuilts.md",198],ccc49370:[()=>Promise.all([n.e(532),n.e(4885),n.e(864),n.e(6103)]).then(n.bind(n,324)),"@theme/BlogPostPage",324],deaa081a:[()=>n.e(4223).then(n.bind(n,4214)),"@site/blog/2023-11-18-todo/index.md",4214],e00b1594:[()=>n.e(3740).then(n.bind(n,34)),"@site/docs/7-contributing/overview.md",34],ef2725c4:[()=>n.e(6635).then(n.bind(n,957)),"@site/docs/2-search-trace.md",957]};var l=n(5893);function s(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(5304),c=n(9656);function d(e,t){if("*"===e)return o()({loading:s,loader:()=>n.e(868).then(n.bind(n,4336)),modules:["@theme/NotFound"],webpack:()=>[4336],render(e,t){const n=e.default;return(0,l.jsx)(c.z,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,u.Z)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:s,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,l.jsx)(c.z,{value:i,children:(0,l.jsx)(a,{...o,...n})})}})}const p=[{path:"/blog",component:d("/blog","416"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","0b6"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","9ee"),exact:!0},{path:"/blog/tags/hello",component:d("/blog/tags/hello","76c"),exact:!0},{path:"/blog/todo",component:d("/blog/todo","a7f"),exact:!0},{path:"/docs",component:d("/docs","357"),routes:[{path:"/docs",component:d("/docs","c62"),routes:[{path:"/docs",component:d("/docs","15e"),routes:[{path:"/docs/api/overview",component:d("/docs/api/overview","857"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/renderer/2D-inbuilts",component:d("/docs/api/renderer/2D-inbuilts","be1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/renderer/2D-renderer",component:d("/docs/api/renderer/2D-renderer","392"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/renderer/components",component:d("/docs/api/renderer/components","6af"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/renderer/execution-context",component:d("/docs/api/renderer/execution-context","614"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/renderer/protocol",component:d("/docs/api/renderer/protocol","5d8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/renderer/standard-renderers",component:d("/docs/api/renderer/standard-renderers","704"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/search-trace",component:d("/docs/api/search-trace","0eb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/visualiser-adapter-protocol",component:d("/docs/api/visualiser-adapter-protocol","1c5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/api",component:d("/docs/category/api","664"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/contributing",component:d("/docs/category/contributing","9f4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/posthoc-visualiser",component:d("/docs/category/posthoc-visualiser","7e6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/renderer",component:d("/docs/category/renderer","8e1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/tutorials",component:d("/docs/category/tutorials","f40"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/user-guide",component:d("/docs/category/user-guide","2a4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/contributing/overview",component:d("/docs/contributing/overview","c6a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/overview",component:d("/docs/overview","285"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/search-trace",component:d("/docs/search-trace","4b0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/overview",component:d("/docs/tutorials/overview","d35"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/single-agent-grid",component:d("/docs/tutorials/single-agent-grid","33d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/tutorials/tile",component:d("/docs/tutorials/tile","c5c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/debugger",component:d("/docs/visualiser/3-1-user-guide/debugger","2da"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/interface",component:d("/docs/visualiser/3-1-user-guide/interface","5a3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/layers",component:d("/docs/visualiser/3-1-user-guide/layers","c0e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/settings",component:d("/docs/visualiser/3-1-user-guide/settings","9ec"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/steps",component:d("/docs/visualiser/3-1-user-guide/steps","256"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/tree",component:d("/docs/visualiser/3-1-user-guide/tree","4cf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/3-1-user-guide/viewport",component:d("/docs/visualiser/3-1-user-guide/viewport","b93"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/visualiser/visualiser",component:d("/docs/visualiser/visualiser","fbc"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/",component:d("/","c1c"),exact:!0},{path:"*",component:d("*")}]},5351:(e,t,n)=>{var r,o;!function(){var a,i,l,s,u,c,d,p,f,m,h,g,y,v,b,w,k,S,x,_,E,O,j,C,P,T,I,A,N,L,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r Your Docusaurus site did not load properly. A very common reason is a wrong site baseUrl configuration. Current configured baseUrl = ${e} ${"/"===e?" (default value)":""} We suggest trying baseUrl = {if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,c.jsxs)("nav",{ref:l,"aria-label":(0,s.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[_a.navbarHideable,!d&&_a.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,c.jsx)(Ea,{onClick:i.toggle}),(0,c.jsx)(xa,{})]})}var ja=n(3905);const Ca={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Pa(e){return(0,c.jsx)("button",{type:"button",...e,children:(0,c.jsx)(s.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Ta(e){let{error:t}=e;const n=(0,ja.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:Ca.errorBoundaryError,children:n})}class Ia extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Aa="right";function Na(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,c.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,c.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function La(){const{toggle:e,shown:t}=(0,P.e)();return(0,c.jsx)("button",{onClick:e,"aria-label":(0,s.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",children:(0,c.jsx)(Na,{})})}const Ra={colorModeToggle:"colorModeToggle_DEke"};function Da(e){let{items:t}=e;return(0,c.jsx)(c.Fragment,{children:t.map(((e,t)=>(0,c.jsx)(Ia,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,c.jsx)(ba,{...e})},t)))})}function Fa(e){let{left:t,right:n}=e;return(0,c.jsxs)("div",{className:"navbar__inner",children:[(0,c.jsx)("div",{className:"navbar__items",children:t}),(0,c.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function Ma(){const e=(0,P.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Aa)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,c.jsx)(Fa,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)(La,{}),(0,c.jsx)(Z,{}),(0,c.jsx)(Da,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(Da,{items:r}),(0,c.jsx)(V,{className:Ra.colorModeToggle}),!o&&(0,c.jsx)(pa,{children:(0,c.jsx)(ca,{})})]})})}function Ba(){return(0,c.jsx)(Oa,{children:(0,c.jsx)(Ma,{})})}function za(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,l=(0,J.Z)(n),s=(0,J.Z)(r,{forcePrependBaseUrl:!0});return(0,c.jsxs)(Y.Z,{className:"footer__link-item",...r?{href:a?s:r}:{to:l},...i,children:[o,r&&!(0,X.Z)(r)&&(0,c.jsx)(te.Z,{})]})}function Ua(e){let{item:t}=e;return t.html?(0,c.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)("li",{className:"footer__item",children:(0,c.jsx)(za,{item:t})},t.href??t.to)}function $a(e){let{column:t}=e;return(0,c.jsxs)("div",{className:"col footer__col",children:[(0,c.jsx)("div",{className:"footer__title",children:t.title}),(0,c.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,c.jsx)(Ua,{item:e},t)))})]})}function qa(e){let{columns:t}=e;return(0,c.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,c.jsx)($a,{column:e},t)))})}function Ha(){return(0,c.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Qa(e){let{item:t}=e;return t.html?(0,c.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)(za,{item:t})}function Va(e){let{links:t}=e;return(0,c.jsx)("div",{className:"footer__links text--center",children:(0,c.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(Qa,{item:e}),t.length!==n+1&&(0,c.jsx)(Ha,{})]},n)))})})}function Wa(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,c.jsx)(qa,{columns:t}):(0,c.jsx)(Va,{links:t})}var Za=n(4277);const Ga={footerLogoLink:"footerLogoLink_BH7S"};function Ka(e){let{logo:t}=e;const{withBaseUrl:n}=(0,J.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,c.jsx)(Za.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function Ya(e){let{logo:t}=e;return t.href?(0,c.jsx)(Y.Z,{href:t.href,className:Ga.footerLogoLink,target:t.target,children:(0,c.jsx)(Ka,{logo:t})}):(0,c.jsx)(Ka,{logo:t})}function Ja(e){let{copyright:t}=e;return(0,c.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Xa(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,c.jsx)("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t}),children:(0,c.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,c.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,c.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function ei(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,c.jsx)(Xa,{style:o,links:n&&n.length>0&&(0,c.jsx)(Wa,{links:n}),logo:r&&(0,c.jsx)(Ya,{logo:r}),copyright:t&&(0,c.jsx)(Ja,{copyright:t})})}const ti=r.memo(ei),ni=(0,I.Qc)([M.S,k.pl,T.OC,ha.L5,i.VC,function(e){let{children:t}=e;return(0,c.jsx)(A.n2,{children:(0,c.jsx)(P.M,{children:(0,c.jsx)(L,{children:t})})})}]);function ri(e){let{children:t}=e;return(0,c.jsx)(ni,{children:t})}var oi=n(3899);function ai(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)("main",{className:"container margin-vert--xl",children:(0,c.jsx)("div",{className:"row",children:(0,c.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,c.jsx)(oi.Z,{as:"h1",className:"hero__title",children:(0,c.jsx)(s.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,c.jsx)("div",{className:"margin-vert--lg",children:(0,c.jsx)(Pa,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(Ta,{error:t})})]})})})}const ii={mainWrapper:"mainWrapper_z2l0"};function li(e){const{children:t,noFooter:n,wrapperClassName:r,title:l,description:s}=e;return(0,y.t)(),(0,c.jsxs)(ri,{children:[(0,c.jsx)(i.d,{title:l,description:s}),(0,c.jsx)(b,{}),(0,c.jsx)(C,{}),(0,c.jsx)(Ba,{}),(0,c.jsx)("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,ii.mainWrapper,r),children:(0,c.jsx)(a.Z,{fallback:e=>(0,c.jsx)(ai,{...e}),children:t})}),!n&&(0,c.jsx)(ti,{})]})}},6811:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var r=n(4791),o=n(9524),a=n(9962),i=n(107),l=n(4277),s=n(5893);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.Z)(t.src),dark:(0,o.Z)(t.srcDark||t.src)},i=(0,s.jsx)(l.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,s.jsx)("div",{className:r,children:i}):i}function c(e){const{siteConfig:{title:t}}=(0,a.Z)(),{navbar:{title:n,logo:l}}=(0,i.L)(),{imageClassName:c,titleClassName:d,...p}=e,f=(0,o.Z)(l?.href||"/"),m=n?"":t,h=l?.alt??m;return(0,s.jsxs)(r.Z,{to:f,...p,...l?.target&&{target:l.target},children:[l&&(0,s.jsx)(u,{logo:l,alt:h,imageClassName:c}),null!=n&&(0,s.jsx)("b",{className:d,children:n})]})}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(7294);var r=n(1514),o=n(5893);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.Z,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},4277:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7294),o=n(788),a=n(1048),i=n(9200);const l={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var s=n(5893);function u(e){let{className:t,children:n}=e;const u=(0,a.Z)(),{colorMode:c}=(0,i.I)();return(0,s.jsx)(s.Fragment,{children:(u?"dark"===c?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.Z)(t,l.themedComponent,l[`themedComponent--${e}`])});return(0,s.jsx)(r.Fragment,{children:a},e)}))})}function c(e){const{sources:t,className:n,alt:r,...o}=e;return(0,s.jsx)(u,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,s.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>u,z:()=>y});var r=n(7294),o=n(6136),a=n(1270),i=n(8986),l=n(5893);const s="ease-in-out";function u(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??s}`,height:`${t}px`}}function l(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function m(e){if(!o.Z.canUseDOM)return e?c:d}function h(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:s,disableSSRStyle:u}=e;const c=(0,r.useRef)(null);return f({collapsibleRef:c,collapsed:n,animation:a}),(0,l.jsx)(t,{ref:c,style:u?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(c.current,n),i?.(n))},className:s,children:o})}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[s,u]=(0,r.useState)(t);return(0,a.Z)((()=>{t||i(!0)}),[t]),(0,a.Z)((()=>{o&&u(t)}),[o,t]),o?(0,l.jsx)(h,{...n,collapsed:s}):null}function y(e){let{lazy:t,...n}=e;const r=t?g:h;return(0,l.jsx)(r,{...n})}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>h,pl:()=>m});var r=n(7294),o=n(1048),a=n(2560),i=n(3768),l=n(107),s=n(5893);const u=(0,a.WA)("docusaurus.announcement.dismiss"),c=(0,a.WA)("docusaurus.announcement.id"),d=()=>"true"===u.get(),p=e=>u.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,s.jsx)(f.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>y,S:()=>g});var r=n(7294),o=n(6136),a=n(3768),i=n(2560),l=n(107),s=n(5893);const u=r.createContext(void 0),c="theme",d=(0,i.WA)(c),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),h=e=>{d.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,a]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&h(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,s.jsx)(u.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(u);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>b,L5:()=>y,Oh:()=>w});var r=n(7294),o=n(868),a=n(6875),i=n(107),l=n(8259),s=n(3768),u=n(2560),c=n(5893);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,u.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function h(){const e=(0,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=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=h();return(0,c.jsx)(m.Provider,{value:n,children:t})}function y(e){let{children:t}=e;return l.cE?(0,c.jsx)(g,{children:t}):(0,c.jsx)(c.Fragment,{children:t})}function v(){const e=(0,r.useContext)(m);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])}}function w(){const e=(0,o._r)(),[t]=v();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>u,b:()=>s});var r=n(7294),o=n(3768),a=n(5893);const i=Symbol("EmptyContext"),l=r.createContext(i);function s(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(l.Provider,{value:i,children:t})}function u(){const e=(0,r.useContext)(l);if(e===i)throw new o.i6("DocsSidebarProvider");return e}},8801:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>l});var r=n(7294),o=n(3768),a=n(5893);const i=r.createContext(null);function l(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(null===e)throw new o.i6("DocsVersionProvider");return e}},735:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(7294),o=n(3086),a=n(3488),i=n(5238),l=n(107),s=n(3768),u=n(5893);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function p(e){let{children:t}=e;const n=d();return(0,u.jsx)(c.Provider,{value:n,children:t})}function f(){const e=r.useContext(c);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>u,n2:()=>l});var r=n(7294),o=n(3768),a=n(5893);const i=r.createContext(null);function l(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function u(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=a,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}},8181:(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)}}),[])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>l});var r=n(7294),o=n(6136);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,l]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){l(function(e){if(!o.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},3702:(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",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8986:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},8259:(e,t,n)=>{"use strict";n.d(t,{LM:()=>m,MN:()=>j,SN:()=>O,_F:()=>v,cE:()=>p,f:()=>w,jA:()=>h,lO:()=>x,oz:()=>_,s1:()=>S,vY:()=>E,xz:()=>f});var r=n(7294),o=n(6550),a=n(8790),i=n(868),l=n(6409),s=n(8801),u=n(4432),c=n(3609),d=n(9003);const p=!!i._r;function f(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 m(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=m(t);if(e)return e}}(e):void 0:e.href}function h(){const{pathname:e}=(0,o.TH)(),t=(0,u.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const g=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),y=(e,t)=>e.some((e=>v(e,t)));function v(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||y(e.items,t))}function b(e,t){switch(e.type){case"category":return v(e,t)||e.items.some((e=>b(e,t)));case"link":return!e.unlisted||v(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)((()=>e.filter((e=>b(e,t)))),[e,t])}function k(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.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 S(){const e=(0,u.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?k({sidebarItems:e.items,pathname:t}):null}function x(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,c.j)([t,n,o].filter(Boolean))),[t,n,o])}function _(e,t){const n=x(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 E(e,t){const n=x(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- ${(0,c.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function O(e){let{route:t}=e;const n=(0,o.TH)(),r=(0,s.E)(),i=t.routes,l=i.find((e=>(0,o.LX)(n.pathname,e)));if(!l)return null;const u=l.sidebar,c=u?r.docsSidebars[u]:void 0;return{docElement:(0,a.H)(i),sidebarName:u,sidebarItems:c}}function j(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!m(e)))}},5238:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>i,_X:()=>l});var r=n(7294),o=n(6550),a=n(3768);function i(e){!function(e){const t=(0,o.k6)(),n=(0,a.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function l(e){return function(e){const t=(0,o.k6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},3609:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>r})},5463:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>d,VC:()=>m});var r=n(7294),o=n(788),a=n(1514),i=n(9656);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(9524),u=n(9962);var c=n(5893);function d(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const l=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)(),p=o?d(o,{absolute:!0}):void 0;return(0,c.jsxs)(a.Z,{children:[t&&(0,c.jsx)("title",{children:l}),t&&(0,c.jsx)("meta",{property:"og:title",content:l}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,c.jsx)("meta",{property:"og:image",content:p}),p&&(0,c.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),l=(0,o.Z)(i,t);return(0,c.jsxs)(p.Provider,{value:l,children:[(0,c.jsx)(a.Z,{children:(0,c.jsx)("html",{className:l})}),n]})}function m(e){let{children:t}=e;const n=l(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(f,{className:(0,o.Z)(r,a),children:t})}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>l,Qc:()=>c,Ql:()=>u,i6:()=>s,zX:()=>i});var r=n(7294),o=n(1270),a=n(5893);function i(e){const t=(0,r.useRef)(e);return(0,o.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function l(e){const t=(0,r.useRef)();return(0,o.Z)((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?