From 50e3d6dd501dcb226080cf11bfc916610199e797 Mon Sep 17 00:00:00 2001 From: Adriano Castro Date: Tue, 11 Jun 2024 10:49:34 -0300 Subject: [PATCH] Updates --- 404.html | 4 +- assets/js/056e7b99.56e29dd7.js | 1 + assets/js/056e7b99.c4e4e3d1.js | 1 - assets/js/0c665981.7e1b0966.js | 1 - assets/js/0c665981.d34c1b8e.js | 1 + assets/js/129bb65a.1ceb5832.js | 1 + assets/js/129bb65a.d55b5545.js | 1 - assets/js/4c4d8dbc.37a78ea1.js | 1 + assets/js/4ee3fa9d.d6db3d5e.js | 1 + assets/js/58f8672d.2db41273.js | 1 - assets/js/58f8672d.9d4b5023.js | 1 + assets/js/6871f1bd.8ac921f8.js | 1 + assets/js/935f2afb.2c16a0c8.js | 1 + assets/js/935f2afb.b6125aa4.js | 1 - assets/js/9beb87c2.af8c5e07.js | 1 - assets/js/9beb87c2.ccc7ba1f.js | 1 + assets/js/b28425fc.1f2a2527.js | 1 + assets/js/b28425fc.a9787cef.js | 1 - ...a1df7.4d2267b8.js => beea1df7.ad394c68.js} | 2 +- assets/js/fd08dba1.2c078ea8.js | 1 + assets/js/ff6fac3d.356b42f5.js | 1 + assets/js/ff6fac3d.67fa18cf.js | 1 - assets/js/main.4a71c675.js | 2 + ...CENSE.txt => main.4a71c675.js.LICENSE.txt} | 0 assets/js/main.518e62f7.js | 2 - assets/js/runtime~main.4f378b55.js | 1 - assets/js/runtime~main.f7a74c55.js | 1 + docs/category/commands/index.html | 6 +- docs/category/core/index.html | 6 +- docs/category/development-process/index.html | 6 +- docs/category/facades/index.html | 6 +- docs/category/factories/index.html | 13 + docs/category/library-structure/index.html | 4 +- docs/category/models/index.html | 6 +- docs/category/resources/index.html | 6 +- docs/category/support/index.html | 6 +- docs/category/testing/index.html | 4 +- docs/category/views/index.html | 6 +- docs/changelog/index.html | 16 +- .../development-process/deployment/index.html | 34 +- docs/development-process/discovery/index.html | 4 +- .../implementation/index.html | 4 +- docs/development-process/overview/index.html | 4 +- docs/intro/index.html | 4 +- docs/library-structure/build/index.html | 4 +- docs/library-structure/docs/index.html | 4 +- docs/library-structure/import/index.html | 4 +- docs/library-structure/luadocs/index.html | 4 +- docs/library-structure/overview/index.html | 4 +- docs/resources/commands/command/index.html | 6 +- .../commands/commands-handler/index.html | 6 +- docs/resources/commands/overview/index.html | 6 +- .../core/addon-properties/index.html | 48 ++- docs/resources/core/classes/index.html | 6 +- docs/resources/core/configuration/index.html | 6 +- docs/resources/core/environment/index.html | 6 +- docs/resources/core/factory/index.html | 7 +- docs/resources/core/output/index.html | 6 +- docs/resources/facades/events/index.html | 6 +- docs/resources/facades/target/index.html | 6 +- docs/resources/facades/tooltip/index.html | 8 +- .../factories/item-factory/index.html | 27 ++ docs/resources/models/container/index.html | 26 ++ docs/resources/models/inventory/index.html | 61 ++++ docs/resources/models/item/index.html | 12 +- docs/resources/models/macro/index.html | 6 +- docs/resources/models/overview/index.html | 8 +- docs/resources/models/player/index.html | 6 +- docs/resources/models/raid-marker/index.html | 6 +- docs/resources/models/realm/index.html | 6 +- docs/resources/support/arr/index.html | 6 +- docs/resources/support/bool/index.html | 6 +- docs/resources/support/str/index.html | 6 +- docs/resources/views/window/index.html | 6 +- docs/testing/api-mocks/index.html | 4 +- docs/testing/test-classes/index.html | 4 +- docs/testing/unit-suite/index.html | 4 +- index.html | 4 +- lua-docs/classes/Commands.Command.html | 5 +- .../classes/Commands.CommandsHandler.html | 5 +- lua-docs/classes/Core.Configuration.html | 5 +- lua-docs/classes/Core.Environment.html | 5 +- lua-docs/classes/Core.Events.html | 5 +- lua-docs/classes/Core.Output.html | 5 +- lua-docs/classes/Core.Target.html | 5 +- lua-docs/classes/Facades.AbstractTooltip.html | 5 +- lua-docs/classes/Facades.ClassicTooltip.html | 5 +- lua-docs/classes/Facades.RetailTooltip.html | 5 +- lua-docs/classes/Factories.ItemFactory.html | 174 +++++++++ lua-docs/classes/Models.Container.html | 338 ++++++++++++++++++ lua-docs/classes/Models.Inventory.html | 237 ++++++++++++ lua-docs/classes/Models.Item.html | 36 +- lua-docs/classes/Models.Macro.html | 5 +- lua-docs/classes/Models.Player.html | 5 +- lua-docs/classes/Models.RaidMarker.html | 5 +- lua-docs/classes/Models.Realm.html | 5 +- lua-docs/classes/Support.Arr.html | 48 ++- lua-docs/classes/Support.Bool.html | 5 +- lua-docs/classes/Support.Str.html | 5 +- lua-docs/classes/Views.Windows.Window.html | 5 +- lua-docs/index.html | 19 +- lua-docs/modules/stormwind-library.html | 5 +- markdown-page/index.html | 4 +- sitemap.xml | 2 +- 104 files changed, 1269 insertions(+), 181 deletions(-) create mode 100644 assets/js/056e7b99.56e29dd7.js delete mode 100644 assets/js/056e7b99.c4e4e3d1.js delete mode 100644 assets/js/0c665981.7e1b0966.js create mode 100644 assets/js/0c665981.d34c1b8e.js create mode 100644 assets/js/129bb65a.1ceb5832.js delete mode 100644 assets/js/129bb65a.d55b5545.js create mode 100644 assets/js/4c4d8dbc.37a78ea1.js create mode 100644 assets/js/4ee3fa9d.d6db3d5e.js delete mode 100644 assets/js/58f8672d.2db41273.js create mode 100644 assets/js/58f8672d.9d4b5023.js create mode 100644 assets/js/6871f1bd.8ac921f8.js create mode 100644 assets/js/935f2afb.2c16a0c8.js delete mode 100644 assets/js/935f2afb.b6125aa4.js delete mode 100644 assets/js/9beb87c2.af8c5e07.js create mode 100644 assets/js/9beb87c2.ccc7ba1f.js create mode 100644 assets/js/b28425fc.1f2a2527.js delete mode 100644 assets/js/b28425fc.a9787cef.js rename assets/js/{beea1df7.4d2267b8.js => beea1df7.ad394c68.js} (57%) create mode 100644 assets/js/fd08dba1.2c078ea8.js create mode 100644 assets/js/ff6fac3d.356b42f5.js delete mode 100644 assets/js/ff6fac3d.67fa18cf.js create mode 100644 assets/js/main.4a71c675.js rename assets/js/{main.518e62f7.js.LICENSE.txt => main.4a71c675.js.LICENSE.txt} (100%) delete mode 100644 assets/js/main.518e62f7.js delete mode 100644 assets/js/runtime~main.4f378b55.js create mode 100644 assets/js/runtime~main.f7a74c55.js create mode 100644 docs/category/factories/index.html create mode 100644 docs/resources/factories/item-factory/index.html create mode 100644 docs/resources/models/container/index.html create mode 100644 docs/resources/models/inventory/index.html create mode 100644 lua-docs/classes/Factories.ItemFactory.html create mode 100644 lua-docs/classes/Models.Container.html create mode 100644 lua-docs/classes/Models.Inventory.html diff --git a/404.html b/404.html index 7678d85d..53abfbed 100644 --- a/404.html +++ b/404.html @@ -4,8 +4,8 @@ Page Not Found | Stormwind Library - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

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

diff --git a/assets/js/056e7b99.56e29dd7.js b/assets/js/056e7b99.56e29dd7.js new file mode 100644 index 00000000..4ffb0a33 --- /dev/null +++ b/assets/js/056e7b99.56e29dd7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[820],{1575:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var n=o(4848),s=o(8453);const i={},a="Tooltip",r={id:"resources/facades/tooltip",title:"Tooltip",description:"The Tooltip facade is a layer between the World of Warcraft tooltip system",source:"@site/docs/resources/facades/tooltip.md",sourceDirName:"resources/facades",slug:"/resources/facades/tooltip",permalink:"/docs/resources/facades/tooltip",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/resources/facades/tooltip.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Target",permalink:"/docs/resources/facades/target"},next:{title:"Factories",permalink:"/docs/category/factories"}},l={},c=[{value:"Handling tooltip show events",id:"handling-tooltip-show-events",level:2},{value:"Tooltip implementations",id:"tooltip-implementations",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"tooltip",children:"Tooltip"}),"\n",(0,n.jsx)(t.p,{children:"The Tooltip facade is a layer between the World of Warcraft tooltip system\r\nand the Stormwind Library."}),"\n",(0,n.jsxs)(t.p,{children:["It was introduced in version 1.2.0 due to the need of different ways to handle\r\ntooltip show events from Classic Era and Retail versions of the game. For that\r\nreason, this facade is offered as an abstraction called ",(0,n.jsx)(t.code,{children:"AbstractTooltip"})," and\r\nits implementations will be automatically delivered to any addons as long as\r\nthey use the ",(0,n.jsx)(t.a,{href:"../core/factory",children:"instantiation structure"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"handling-tooltip-show-events",children:"Handling tooltip show events"}),"\n",(0,n.jsxs)(t.p,{children:["Tooltip events in World of Warcraft are handled by the child classes of the\r\nabstraction and then an ",(0,n.jsx)(t.a,{href:"events",children:"event"})," is broadcasted so addons can\r\nhook into it and perform their own actions, regardless of the game version."]}),"\n",(0,n.jsx)(t.p,{children:"With this approach, it's only a matter of listening to the proper events."}),"\n",(0,n.jsxs)(t.admonition,{title:"Tooltip events in 1.2.0",type:"note",children:[(0,n.jsxs)(t.p,{children:["In version 1.2.0, the tooltip facade covers only ",(0,n.jsx)(t.strong,{children:"Unit"})," and ",(0,n.jsx)(t.strong,{children:"Item"}),"\r\ntooltips. However, there are plans to expand it to other types of tooltips\r\nin the future."]}),(0,n.jsxs)(t.p,{children:["Keep an eye on the ",(0,n.jsx)(t.a,{href:"../../changelog",children:"changelog"})," for updates and in this page\r\nfor new implementations."]})]}),"\n",(0,n.jsxs)(t.p,{children:["The list of available tooltip events is ",(0,n.jsx)(t.a,{href:"events#tooltip_item_shown",children:"here"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"tooltip-implementations",children:"Tooltip implementations"}),"\n",(0,n.jsx)(t.p,{children:"The abstract tooltip facade has two implementations:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"ClassicTooltip"}),": for Classic Era and Classic versions of the game"]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"RetailTooltip"})}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["They're registered for the proper game version when the library is loaded,\r\nso there's no need to manually instantiate them, just invoke the facade\r\ninstantiation method by passing ",(0,n.jsx)(t.code,{children:"'Tooltip'"})," as the class name."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-lua",children:"local tooltip = library:new('Tooltip')\n"})})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,t,o)=>{o.d(t,{R:()=>a,x:()=>r});var n=o(6540);const s={},i=n.createContext(s);function a(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/056e7b99.c4e4e3d1.js b/assets/js/056e7b99.c4e4e3d1.js deleted file mode 100644 index e57e764c..00000000 --- a/assets/js/056e7b99.c4e4e3d1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[820],{1575:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var n=o(4848),s=o(8453);const i={},a="Tooltip",r={id:"resources/facades/tooltip",title:"Tooltip",description:"The Tooltip facade is a layer between the World of Warcraft tooltip system",source:"@site/docs/resources/facades/tooltip.md",sourceDirName:"resources/facades",slug:"/resources/facades/tooltip",permalink:"/docs/resources/facades/tooltip",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/resources/facades/tooltip.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Target",permalink:"/docs/resources/facades/target"},next:{title:"Models",permalink:"/docs/category/models"}},l={},c=[{value:"Handling tooltip show events",id:"handling-tooltip-show-events",level:2},{value:"Tooltip implementations",id:"tooltip-implementations",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"tooltip",children:"Tooltip"}),"\n",(0,n.jsx)(t.p,{children:"The Tooltip facade is a layer between the World of Warcraft tooltip system\r\nand the Stormwind Library."}),"\n",(0,n.jsxs)(t.p,{children:["It was introduced in version 1.2.0 due to the need of different ways to handle\r\ntooltip show events from Classic Era and Retail versions of the game. For that\r\nreason, this facade is offered as an abstraction called ",(0,n.jsx)(t.code,{children:"AbstractTooltip"})," and\r\nits implementations will be automatically delivered to any addons as long as\r\nthey use the ",(0,n.jsx)(t.a,{href:"../core/factory",children:"instantiation structure"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"handling-tooltip-show-events",children:"Handling tooltip show events"}),"\n",(0,n.jsxs)(t.p,{children:["Tooltip events in World of Warcraft are handled by the child classes of the\r\nabstraction and then an ",(0,n.jsx)(t.a,{href:"events",children:"event"})," is broadcasted so addons can\r\nhook into it and perform their own actions, regardless of the game version."]}),"\n",(0,n.jsx)(t.p,{children:"With this approach, it's only a matter of listening to the proper events."}),"\n",(0,n.jsxs)(t.admonition,{title:"Tooltip events in 1.2.0",type:"note",children:[(0,n.jsxs)(t.p,{children:["In version 1.2.0, the tooltip facade covers only ",(0,n.jsx)(t.strong,{children:"Unit"})," and ",(0,n.jsx)(t.strong,{children:"Item"}),"\r\ntooltips. However, there are plans to expand it to other types of tooltips\r\nin the future."]}),(0,n.jsxs)(t.p,{children:["Keep an eye on the ",(0,n.jsx)(t.a,{href:"../../changelog",children:"changelog"})," for updates and in this page\r\nfor new implementations."]})]}),"\n",(0,n.jsxs)(t.p,{children:["The list of available tooltip events is ",(0,n.jsx)(t.a,{href:"events#tooltip_item_shown",children:"here"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"tooltip-implementations",children:"Tooltip implementations"}),"\n",(0,n.jsx)(t.p,{children:"The abstract tooltip facade has two implementations:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"ClassicTooltip"}),": for Classic Era and Classic versions of the game"]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"RetailTooltip"})}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["They're registered for the proper game version when the library is loaded,\r\nso there's no need to manually instantiate them, just invoke the facade\r\ninstantiation method by passing ",(0,n.jsx)(t.code,{children:"'Tooltip'"})," as the class name."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-lua",children:"local tooltip = library:new('Tooltip')\n"})})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,t,o)=>{o.d(t,{R:()=>a,x:()=>r});var n=o(6540);const s={},i=n.createContext(s);function a(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0c665981.7e1b0966.js b/assets/js/0c665981.7e1b0966.js deleted file mode 100644 index 3f41f2b1..00000000 --- a/assets/js/0c665981.7e1b0966.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5607],{581:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>l,frontMatter:()=>s,metadata:()=>i,toc:()=>p});var n=o(4848),r=o(8453);const s={sidebar_position:4,title:"Deployment"},c=void 0,i={id:"development-process/deployment",title:"Deployment",description:"",source:"@site/docs/development-process/deployment.md",sourceDirName:"development-process",slug:"/development-process/deployment",permalink:"/docs/development-process/deployment",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/development-process/deployment.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,title:"Deployment"},sidebar:"tutorialSidebar",previous:{title:"Implementation",permalink:"/docs/development-process/implementation"},next:{title:"Library Structure",permalink:"/docs/category/library-structure"}},a={},p=[];function d(e){return(0,n.jsx)(n.Fragment,{})}function l(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d()}},8453:(e,t,o)=>{o.d(t,{R:()=>c,x:()=>i});var n=o(6540);const r={},s=n.createContext(r);function c(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0c665981.d34c1b8e.js b/assets/js/0c665981.d34c1b8e.js new file mode 100644 index 00000000..bbee1779 --- /dev/null +++ b/assets/js/0c665981.d34c1b8e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5607],{581:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=n(4848),s=n(8453);const o={sidebar_position:4,title:"Deployment"},i=void 0,l={id:"development-process/deployment",title:"Deployment",description:"When the library is tested and ready to be deployed, the following steps",source:"@site/docs/development-process/deployment.md",sourceDirName:"development-process",slug:"/development-process/deployment",permalink:"/docs/development-process/deployment",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/development-process/deployment.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,title:"Deployment"},sidebar:"tutorialSidebar",previous:{title:"Implementation",permalink:"/docs/development-process/implementation"},next:{title:"Library Structure",permalink:"/docs/category/library-structure"}},a={},c=[];function d(e){const t={a:"a",code:"code",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"When the library is tested and ready to be deployed, the following steps\r\nshould be followed:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Checkout the ",(0,r.jsx)(t.strong,{children:"release branch"})," created in the\r\n",(0,r.jsx)(t.a,{href:"implementation",children:"implementation"})," phase"]}),"\n",(0,r.jsxs)(t.li,{children:["Make sure all ",(0,r.jsx)(t.a,{href:"../testing/unit-suite",children:"tests"})," are passing"]}),"\n",(0,r.jsxs)(t.li,{children:["Generate the ",(0,r.jsx)(t.a,{href:"../library-structure/luadocs",children:"LuaDocs files"})," and push them\r\nto the repository with ",(0,r.jsx)(t.strong,{children:'"Update LuaDocs"'})," as the commit message"]}),"\n",(0,r.jsxs)(t.li,{children:["Open the ",(0,r.jsx)(t.code,{children:"documentation/docs/changelog.md"})," file and update the release\r\ndate placeholder with the current date and push it to the repository with\r\n",(0,r.jsx)(t.strong,{children:'"Update vx.y.z release date"'})," (of course, replacing ",(0,r.jsx)(t.code,{children:"x.y.z"})," with the\r\ncurrent version being deployed)"]}),"\n",(0,r.jsx)(t.li,{children:"Go to the release PR in GitHub, take a quick look at the changes, and\r\nmerge it"}),"\n",(0,r.jsxs)(t.li,{children:["Create a ",(0,r.jsx)(t.a,{href:"https://github.com/adrianocastro189/stormwind-library/releases/new",children:"new release"}),":","\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["The tag name is the raw version number, like ",(0,r.jsx)(t.code,{children:"1.0.0"})]}),"\n",(0,r.jsxs)(t.li,{children:["The release title is the same, but with a ",(0,r.jsx)(t.code,{children:"v"})," prefix, like ",(0,r.jsx)(t.code,{children:"v1.0.0"})]}),"\n",(0,r.jsxs)(t.li,{children:["The release notes are created with the ",(0,r.jsx)(t.strong,{children:"Generate release notes"}),"\r\nbutton"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["Checkout the ",(0,r.jsx)(t.code,{children:"main"})," branch and pull the latest changes"]}),"\n",(0,r.jsxs)(t.li,{children:["Deploy the documentation to\r\n",(0,r.jsx)(t.a,{href:"https://www.stormwindlibrary.com",children:"GitHub Pages"})," using the ",(0,r.jsx)(t.code,{children:"npm"})," commands\r\ndescribed ",(0,r.jsx)(t.a,{href:"../library-structure/docs",children:"here"})]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>l});var r=n(6540);const s={},o=r.createContext(s);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/129bb65a.1ceb5832.js b/assets/js/129bb65a.1ceb5832.js new file mode 100644 index 00000000..04b6abdb --- /dev/null +++ b/assets/js/129bb65a.1ceb5832.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6049],{6164:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var r=s(4848),n=s(8453);const o={},i="Item",a={id:"resources/models/item",title:"Item",description:"The Item class is a model that maps game items and their properties.",source:"@site/docs/resources/models/item.md",sourceDirName:"resources/models",slug:"/resources/models/item",permalink:"/docs/resources/models/item",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/resources/models/item.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Inventory",permalink:"/docs/resources/models/inventory"},next:{title:"Macros",permalink:"/docs/resources/models/macro"}},c={},d=[{value:"Building item instances from different sources",id:"building-item-instances-from-different-sources",level:2}];function m(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"item",children:"Item"}),"\n",(0,r.jsx)(t.p,{children:"The Item class is a model that maps game items and their properties."}),"\n",(0,r.jsx)(t.p,{children:"Just like any other model, it's used to standardize the way addons interact\r\nwith game objects, especially when item information is passed as a parameter\r\nto methods, events, datasets, etc."}),"\n",(0,r.jsxs)(t.p,{children:["Its first version, introduced in the library version 1.2.0 includes only the\r\n",(0,r.jsx)(t.code,{children:"name"})," property, but this model will grow over time as new expansions are\r\nreleased and new features are implemented in the library."]}),"\n",(0,r.jsxs)(t.p,{children:["For a more detailed explanation of the Item model and its available methods\r\nand properties, please refer to the library\r\n",(0,r.jsx)(t.a,{href:"pathname:///lua-docs/classes/Models.Item.html",children:"technical documentation"}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"building-item-instances-from-different-sources",children:"Building item instances from different sources"}),"\n",(0,r.jsxs)(t.p,{children:["Stormwind Library provides a factory to create item instances from different\r\nsources like the container item info table. Please refer to the\r\n",(0,r.jsx)(t.a,{href:"../factories/item-factory",children:"ItemFactory documentation"})," for more information."]})]})}function l(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>a});var r=s(6540);const n={},o=r.createContext(n);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/129bb65a.d55b5545.js b/assets/js/129bb65a.d55b5545.js deleted file mode 100644 index f251fe69..00000000 --- a/assets/js/129bb65a.d55b5545.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6049],{6164:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>l,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var r=s(4848),n=s(8453);const o={},a="Item",i={id:"resources/models/item",title:"Item",description:"The Item class is a model that maps game items and their properties.",source:"@site/docs/resources/models/item.md",sourceDirName:"resources/models",slug:"/resources/models/item",permalink:"/docs/resources/models/item",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/resources/models/item.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/docs/resources/models/overview"},next:{title:"Macros",permalink:"/docs/resources/models/macro"}},c={},d=[];function m(e){const t={a:"a",code:"code",h1:"h1",p:"p",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"item",children:"Item"}),"\n",(0,r.jsx)(t.p,{children:"The Item class is a model that maps game items and their properties."}),"\n",(0,r.jsx)(t.p,{children:"Just like any other model, it's used to standardize the way addons interact\r\nwith game objects, especially when item information is passed as a parameter\r\nto methods, events, datasets, etc."}),"\n",(0,r.jsxs)(t.p,{children:["Its first version, introduced in the library version 1.2.0 includes only the\r\n",(0,r.jsx)(t.code,{children:"name"})," property, but this model will grow over time as new expansions are\r\nreleased and new features are implemented in the library."]}),"\n",(0,r.jsxs)(t.p,{children:["For a more detailed explanation of the Item model and its available methods\r\nand properties, please refer to the library\r\n",(0,r.jsx)(t.a,{href:"pathname:///lua-docs/classes/Models.Item.html",children:"technical documentation"}),"."]})]})}function l(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>i});var r=s(6540);const n={},o=r.createContext(n);function a(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4c4d8dbc.37a78ea1.js b/assets/js/4c4d8dbc.37a78ea1.js new file mode 100644 index 00000000..6cad026b --- /dev/null +++ b/assets/js/4c4d8dbc.37a78ea1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4625],{1745:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>m});var r=n(4848),o=n(8453);const s={},a="ItemFactory",i={id:"resources/factories/item-factory",title:"ItemFactory",description:"Creates item instances from multiple sources.",source:"@site/docs/resources/factories/item-factory.md",sourceDirName:"resources/factories",slug:"/resources/factories/item-factory",permalink:"/docs/resources/factories/item-factory",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/resources/factories/item-factory.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Factories",permalink:"/docs/category/factories"},next:{title:"Models",permalink:"/docs/category/models"}},c={},m=[{value:"Usage",id:"usage",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"itemfactory",children:"ItemFactory"}),"\n",(0,r.jsx)(t.p,{children:"Creates item instances from multiple sources."}),"\n",(0,r.jsxs)(t.p,{children:["This factory is responsible for being able to instantiate\r\n",(0,r.jsx)(t.a,{href:"../models/item",children:"item"})," objects from different sources, such as item links,\r\nitem ids, item names, complex strings containing item information and any\r\nother source that's available in the game that can be used to identify an item."]}),"\n",(0,r.jsxs)(t.p,{children:["For a complete list of methods available in this factory, please refer to the\r\n",(0,r.jsx)(t.a,{href:"pathname:///lua-docs/classes/Factories.ItemFactory.html",children:"LuaDocs ItemFactory page"})]}),"\n",(0,r.jsx)(t.h2,{id:"usage",children:"Usage"}),"\n",(0,r.jsx)(t.p,{children:"In game, it's possible to run a slash command to get item information from any\r\nitem in a bag or in the backpack itself."}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{children:"/dump C_Container.GetContainerItemInfo(0, 1)\n"})}),"\n",(0,r.jsx)(t.p,{children:"This command will return a table with a few item properties and this table can\r\nbe passed to the factory to create an item instance."}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-lua",children:"local info = C_Container.GetContainerItemInfo(0, 1)\r\nlocal item = library.itemFactory:createFromContainerItemInfo(info)\n"})})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>i});var r=n(6540);const o={},s=r.createContext(o);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4ee3fa9d.d6db3d5e.js b/assets/js/4ee3fa9d.d6db3d5e.js new file mode 100644 index 00000000..010b0372 --- /dev/null +++ b/assets/js/4ee3fa9d.d6db3d5e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4430],{2144:e=>{e.exports=JSON.parse('{"title":"Factories","description":"Classes in this section must not be confused with the core\'s factory structure for instantiating classes. They\'re factories to build model instances from multiple sources and reduce the amount of code to build objects from different tables, strings and other formats.","slug":"/category/factories","permalink":"/docs/category/factories","navigation":{"previous":{"title":"Tooltip","permalink":"/docs/resources/facades/tooltip"},"next":{"title":"ItemFactory","permalink":"/docs/resources/factories/item-factory"}}}')}}]); \ No newline at end of file diff --git a/assets/js/58f8672d.2db41273.js b/assets/js/58f8672d.2db41273.js deleted file mode 100644 index 8571ed79..00000000 --- a/assets/js/58f8672d.2db41273.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1353],{2556:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var t=r(4848),n=r(8453);const o={sidebar_position:1,title:"Overview"},a=void 0,i={id:"resources/models/overview",title:"Overview",description:"Models are structures following class standards, mostly",source:"@site/docs/resources/models/overview.md",sourceDirName:"resources/models",slug:"/resources/models/overview",permalink:"/docs/resources/models/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/resources/models/overview.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,title:"Overview"},sidebar:"tutorialSidebar",previous:{title:"Models",permalink:"/docs/category/models"},next:{title:"Item",permalink:"/docs/resources/models/item"}},d={},l=[{value:"Model standards",id:"model-standards",level:2}];function c(e){const s={a:"a",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(s.p,{children:["Models are structures following ",(0,t.jsx)(s.a,{href:"../core/classes",children:"class standards"}),", mostly\r\nused to map game objects and ease data manipulation in the addon."]}),"\n",(0,t.jsx)(s.h2,{id:"model-standards",children:"Model standards"}),"\n",(0,t.jsx)(s.p,{children:"Models are classes that represent a data structure, like a raid marker,\r\na player, a macro, an item, etc. They're usually used to hold information\r\nabout game objects as a way to standardize structures."}),"\n",(0,t.jsx)(s.p,{children:"Here are some practices when creating models:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Avoid constructors with parameters"}),": Prefer to use setters as that ease\r\non inheritance, testing and avoid compatibility issues in case new parameters\r\nare added to the constructors."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Implement chainable setters"}),": When a setter is called, it should return\r\nthe instance itself, so it can be chained with other setters. That improves\r\nwriting code and makes it more readable.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Prefer to use ",(0,t.jsx)(s.code,{children:"value"})," as the setter parameter name instead of the\r\nproperty name, example:","\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-lua",children:"--[[--\r\nSets the model name.\r\n\r\n@tparam string value the model's name\r\n\r\n@treturn Module.ClassName self\r\n]]\r\nfunction ClassName:setProperty(value)\r\n self.property = value\r\n return self\r\nend\n"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"There's no need for getters"}),": Lua doesn't have a way to protect\r\nproperties, so it's not necessary to create getters for them. If a property\r\nneeds to be read, it can be accessed directly, and that will save a lot of\r\nunnecessary code."]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,s,r)=>{r.d(s,{R:()=>a,x:()=>i});var t=r(6540);const n={},o=t.createContext(n);function a(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/58f8672d.9d4b5023.js b/assets/js/58f8672d.9d4b5023.js new file mode 100644 index 00000000..e4a9144b --- /dev/null +++ b/assets/js/58f8672d.9d4b5023.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1353],{2556:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var t=r(4848),n=r(8453);const o={sidebar_position:1,title:"Overview"},a=void 0,i={id:"resources/models/overview",title:"Overview",description:"Models are structures following class standards, mostly",source:"@site/docs/resources/models/overview.md",sourceDirName:"resources/models",slug:"/resources/models/overview",permalink:"/docs/resources/models/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/resources/models/overview.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,title:"Overview"},sidebar:"tutorialSidebar",previous:{title:"Models",permalink:"/docs/category/models"},next:{title:"Container",permalink:"/docs/resources/models/container"}},d={},l=[{value:"Model standards",id:"model-standards",level:2}];function c(e){const s={a:"a",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(s.p,{children:["Models are structures following ",(0,t.jsx)(s.a,{href:"../core/classes",children:"class standards"}),", mostly\r\nused to map game objects and ease data manipulation in the addon."]}),"\n",(0,t.jsx)(s.h2,{id:"model-standards",children:"Model standards"}),"\n",(0,t.jsx)(s.p,{children:"Models are classes that represent a data structure, like a raid marker,\r\na player, a macro, an item, etc. They're usually used to hold information\r\nabout game objects as a way to standardize structures."}),"\n",(0,t.jsx)(s.p,{children:"Here are some practices when creating models:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Avoid constructors with parameters"}),": Prefer to use setters as that ease\r\non inheritance, testing and avoid compatibility issues in case new parameters\r\nare added to the constructors."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Implement chainable setters"}),": When a setter is called, it should return\r\nthe instance itself, so it can be chained with other setters. That improves\r\nwriting code and makes it more readable.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Prefer to use ",(0,t.jsx)(s.code,{children:"value"})," as the setter parameter name instead of the\r\nproperty name, example:","\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-lua",children:"--[[--\r\nSets the model name.\r\n\r\n@tparam string value the model's name\r\n\r\n@treturn Module.ClassName self\r\n]]\r\nfunction ClassName:setProperty(value)\r\n self.property = value\r\n return self\r\nend\n"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"There's no need for getters"}),": Lua doesn't have a way to protect\r\nproperties, so it's not necessary to create getters for them. If a property\r\nneeds to be read, it can be accessed directly, and that will save a lot of\r\nunnecessary code."]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,s,r)=>{r.d(s,{R:()=>a,x:()=>i});var t=r(6540);const n={},o=t.createContext(n);function a(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6871f1bd.8ac921f8.js b/assets/js/6871f1bd.8ac921f8.js new file mode 100644 index 00000000..3887d6e0 --- /dev/null +++ b/assets/js/6871f1bd.8ac921f8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8168],{5067:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var r=n(4848),i=n(8453);const s={},a="Inventory",o={id:"resources/models/inventory",title:"Inventory",description:"The Container model introduced a mapped object to represent bags,",source:"@site/docs/resources/models/inventory.md",sourceDirName:"resources/models",slug:"/resources/models/inventory",permalink:"/docs/resources/models/inventory",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/resources/models/inventory.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Container",permalink:"/docs/resources/models/container"},next:{title:"Item",permalink:"/docs/resources/models/item"}},l={},c=[{value:"Inventory tracking",id:"inventory-tracking",level:2},{value:"What's available in inventory tracking?",id:"whats-available-in-inventory-tracking",level:3},{value:"What's not available yet?",id:"whats-not-available-yet",level:3},{value:"What's on the radar for future versions of inventory tracking?",id:"whats-on-the-radar-for-future-versions-of-inventory-tracking",level:3}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"inventory",children:"Inventory"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.a,{href:"container",children:"Container"})," model introduced a mapped object to represent bags,\r\nbank slots, the player's backpack, and any other container capable of holding\r\nitems."]}),"\n",(0,r.jsxs)(t.p,{children:["The Inventory model is a concept that ",(0,r.jsx)(t.strong,{children:"groups all containers"})," available to\r\nthe player in a way to represent all items the player has."]}),"\n",(0,r.jsx)(t.p,{children:"Although instantiable just like almost every model in the Stormwind Library,\r\nit's recommended to use the instance stored in the library object as a good\r\nsource of truth."}),"\n",(0,r.jsxs)(t.p,{children:["For a more detailed explanation of the Inventory model and its available\r\nmethods and properties, please refer to the library\r\n",(0,r.jsx)(t.a,{href:"pathname:///lua-docs/classes/Models.Inventory.html",children:"technical documentation"}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"inventory-tracking",children:"Inventory tracking"}),"\n",(0,r.jsxs)(t.p,{children:["When the library is instantiated, it's possible to tell it to track the\r\nplayer's inventory by setting the ",(0,r.jsx)(t.code,{children:"inventory.track"})," property to ",(0,r.jsx)(t.code,{children:"true"}),"\r\n(read more ",(0,r.jsx)(t.a,{href:"../core/addon-properties#inventory",children:"here"}),"). ",(0,r.jsx)(t.strong,{children:"By default, it won't\r\ntrack inventory, at least until its performance is measured and improved."})]}),"\n",(0,r.jsxs)(t.p,{children:["If inventory tracking is set to ",(0,r.jsx)(t.code,{children:"true"}),", upon initialization, the library will\r\nautomatically instantiate the player's inventory and store its instance. After\r\nthat, it will \"try its best\" to keep it updated with the player's containers,\r\nso it's the best source of truth for getting the player's inventory items."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-lua",children:"-- this will return a table with instances of Item\r\nlocal playerItems = library.playerInventory:getItems()\n"})}),"\n",(0,r.jsxs)(t.admonition,{title:"Careful with inventory management, at least for now",type:"danger",children:[(0,r.jsx)(t.p,{children:"The inventory tracking feature is still experimental as of version 1.4.0, when\r\nit was introduced. It's recommended to use it with caution and expect changes\r\nin future versions, especially in performance."}),(0,r.jsx)(t.p,{children:"By default, the library won't track the player's inventory."})]}),"\n",(0,r.jsx)(t.h3,{id:"whats-available-in-inventory-tracking",children:"What's available in inventory tracking?"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Updates when the player's bags are updated, which means the\r\n",(0,r.jsx)(t.code,{children:"library.playerInventory"})," instance will be updated when players get, remove,\r\nmove, etc, items in their bags."]}),"\n",(0,r.jsxs)(t.li,{children:["Items mapped as objects with the ",(0,r.jsx)(t.a,{href:"item",children:"Item"})," model, so it's possible to\r\naccess all item properties and methods and implement new features in the next\r\nversions."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"whats-not-available-yet",children:"What's not available yet?"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Caching items in bank slots"}),"\n",(0,r.jsx)(t.li,{children:"Item quantities"}),"\n",(0,r.jsx)(t.li,{children:"Slot mapping"}),"\n",(0,r.jsx)(t.li,{children:"Programmatically item operations like moving, removing"}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"whats-on-the-radar-for-future-versions-of-inventory-tracking",children:"What's on the radar for future versions of inventory tracking?"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"The items listed above"}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Performance improvements"})," - as of now, every ",(0,r.jsx)(t.code,{children:"BAG_UPDATE"})," event will\r\ntrigger a full inventory update and that should be reviewed in the future,\r\nbecause sometimes this event may be triggered multiple times in a short period\r\nof time, so it's important to polish this feature to avoid performance issues."]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>o});var r=n(6540);const i={},s=r.createContext(i);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.2c16a0c8.js b/assets/js/935f2afb.2c16a0c8.js new file mode 100644 index 00000000..e4b06695 --- /dev/null +++ b/assets/js/935f2afb.2c16a0c8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Overview","href":"/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Development Process","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs/development-process/overview","docId":"development-process/overview","unlisted":false},{"type":"link","label":"Discovery","href":"/docs/development-process/discovery","docId":"development-process/discovery","unlisted":false},{"type":"link","label":"Implementation","href":"/docs/development-process/implementation","docId":"development-process/implementation","unlisted":false},{"type":"link","label":"Deployment","href":"/docs/development-process/deployment","docId":"development-process/deployment","unlisted":false}],"href":"/docs/category/development-process"},{"type":"category","label":"Library Structure","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs/library-structure/overview","docId":"library-structure/overview","unlisted":false},{"type":"link","label":"Build","href":"/docs/library-structure/build","docId":"library-structure/build","unlisted":false},{"type":"link","label":"Import","href":"/docs/library-structure/import","docId":"library-structure/import","unlisted":false},{"type":"link","label":"Documentation","href":"/docs/library-structure/docs","docId":"library-structure/docs","unlisted":false},{"type":"link","label":"LuaDocs","href":"/docs/library-structure/luadocs","docId":"library-structure/luadocs","unlisted":false}],"href":"/docs/category/library-structure"},{"type":"category","label":"Resources","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Commands","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs/resources/commands/overview","docId":"resources/commands/overview","unlisted":false},{"type":"link","label":"Command","href":"/docs/resources/commands/command","docId":"resources/commands/command","unlisted":false},{"type":"link","label":"Commands Handler","href":"/docs/resources/commands/commands-handler","docId":"resources/commands/commands-handler","unlisted":false}],"href":"/docs/category/commands"},{"type":"category","label":"Core","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Addon Properties","href":"/docs/resources/core/addon-properties","docId":"resources/core/addon-properties","unlisted":false},{"type":"link","label":"Classes","href":"/docs/resources/core/classes","docId":"resources/core/classes","unlisted":false},{"type":"link","label":"Configuration","href":"/docs/resources/core/configuration","docId":"resources/core/configuration","unlisted":false},{"type":"link","label":"Environment","href":"/docs/resources/core/environment","docId":"resources/core/environment","unlisted":false},{"type":"link","label":"Factory","href":"/docs/resources/core/factory","docId":"resources/core/factory","unlisted":false},{"type":"link","label":"Output","href":"/docs/resources/core/output","docId":"resources/core/output","unlisted":false}],"href":"/docs/category/core"},{"type":"category","label":"Facades","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Events","href":"/docs/resources/facades/events","docId":"resources/facades/events","unlisted":false},{"type":"link","label":"Target","href":"/docs/resources/facades/target","docId":"resources/facades/target","unlisted":false},{"type":"link","label":"Tooltip","href":"/docs/resources/facades/tooltip","docId":"resources/facades/tooltip","unlisted":false}],"href":"/docs/category/facades"},{"type":"category","label":"Factories","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"ItemFactory","href":"/docs/resources/factories/item-factory","docId":"resources/factories/item-factory","unlisted":false}],"href":"/docs/category/factories"},{"type":"category","label":"Models","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs/resources/models/overview","docId":"resources/models/overview","unlisted":false},{"type":"link","label":"Container","href":"/docs/resources/models/container","docId":"resources/models/container","unlisted":false},{"type":"link","label":"Inventory","href":"/docs/resources/models/inventory","docId":"resources/models/inventory","unlisted":false},{"type":"link","label":"Item","href":"/docs/resources/models/item","docId":"resources/models/item","unlisted":false},{"type":"link","label":"Macros","href":"/docs/resources/models/macro","docId":"resources/models/macro","unlisted":false},{"type":"link","label":"Player","href":"/docs/resources/models/player","docId":"resources/models/player","unlisted":false},{"type":"link","label":"Raid Marker","href":"/docs/resources/models/raid-marker","docId":"resources/models/raid-marker","unlisted":false},{"type":"link","label":"Realm","href":"/docs/resources/models/realm","docId":"resources/models/realm","unlisted":false}],"href":"/docs/category/models"},{"type":"category","label":"Support","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Arr","href":"/docs/resources/support/arr","docId":"resources/support/arr","unlisted":false},{"type":"link","label":"Bool","href":"/docs/resources/support/bool","docId":"resources/support/bool","unlisted":false},{"type":"link","label":"Str","href":"/docs/resources/support/str","docId":"resources/support/str","unlisted":false}],"href":"/docs/category/support"},{"type":"category","label":"Views","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Window","href":"/docs/resources/views/window","docId":"resources/views/window","unlisted":false}],"href":"/docs/category/views"}],"href":"/docs/category/resources"},{"type":"category","label":"Testing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"API Mocks","href":"/docs/testing/api-mocks","docId":"testing/api-mocks","unlisted":false},{"type":"link","label":"Test Classes","href":"/docs/testing/test-classes","docId":"testing/test-classes","unlisted":false},{"type":"link","label":"Unit Suite","href":"/docs/testing/unit-suite","docId":"testing/unit-suite","unlisted":false}],"href":"/docs/category/testing"},{"type":"link","label":"Changelog","href":"/docs/changelog","docId":"changelog","unlisted":false}]},"docs":{"changelog":{"id":"changelog","title":"Changelog","description":"2024.06.11 - version 1.4.0","sidebar":"tutorialSidebar"},"development-process/deployment":{"id":"development-process/deployment","title":"Deployment","description":"When the library is tested and ready to be deployed, the following steps","sidebar":"tutorialSidebar"},"development-process/discovery":{"id":"development-process/discovery","title":"Discovery","description":"The discovery process walks side by side with the addon development and with versioning the library.","sidebar":"tutorialSidebar"},"development-process/implementation":{"id":"development-process/implementation","title":"Implementation","description":"The implementation phase starts by creating a new release branch that will be used as the base","sidebar":"tutorialSidebar"},"development-process/overview":{"id":"development-process/overview","title":"Overview","description":"The process behind all library releases is defined in a couple of steps and will happen for","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Overview","description":"Stormwind Library is a library developed in Lua to serve as a framework for building World of Warcraft addons.","sidebar":"tutorialSidebar"},"library-structure/build":{"id":"library-structure/build","title":"Build","description":"All the library code is written inside the ./src folder and split into multiple .lua files.","sidebar":"tutorialSidebar"},"library-structure/docs":{"id":"library-structure/docs","title":"Documentation","description":"The Stormwind Library documentation is built on top of","sidebar":"tutorialSidebar"},"library-structure/import":{"id":"library-structure/import","title":"Import","description":"When a new version of the library is built, it\'s time to import it","sidebar":"tutorialSidebar"},"library-structure/luadocs":{"id":"library-structure/luadocs","title":"LuaDocs","description":"Although the Stormwind Library is fully covered in this documentation page","sidebar":"tutorialSidebar"},"library-structure/overview":{"id":"library-structure/overview","title":"Overview","description":"The Stormwind Library was structured with the following goals:","sidebar":"tutorialSidebar"},"resources/commands/command":{"id":"resources/commands/command","title":"Command","description":"The command object is a simple DTO object that can also house the callback","sidebar":"tutorialSidebar"},"resources/commands/commands-handler":{"id":"resources/commands/commands-handler","title":"Commands Handler","description":"The commands handler is a class that intercepts all commands registered by an","sidebar":"tutorialSidebar"},"resources/commands/overview":{"id":"resources/commands/overview","title":"Overview","description":"Slash commands in World of Warcraft are executed in the chat box that can","sidebar":"tutorialSidebar"},"resources/core/addon-properties":{"id":"resources/core/addon-properties","title":"Addon Properties","description":"When the library is initialized, addons can pass its properties to","sidebar":"tutorialSidebar"},"resources/core/classes":{"id":"resources/core/classes","title":"Classes","description":"Lua doesn\'t offer directly a class structure like every","sidebar":"tutorialSidebar"},"resources/core/configuration":{"id":"resources/core/configuration","title":"Configuration","description":"The Configuration class provides methods to easily access and manipulate the","sidebar":"tutorialSidebar"},"resources/core/environment":{"id":"resources/core/environment","title":"Environment","description":"Environment is a library resource used to identify the environment where the","sidebar":"tutorialSidebar"},"resources/core/factory":{"id":"resources/core/factory","title":"Factory","description":"The Factory is a simple part of the library responsible for emulating the new keyword from OOP languages.","sidebar":"tutorialSidebar"},"resources/core/output":{"id":"resources/core/output","title":"Output","description":"The output structure controls everything that can be printed","sidebar":"tutorialSidebar"},"resources/facades/events":{"id":"resources/facades/events","title":"Events","description":"The Events facade is an important class in the Stormwind Library, as it","sidebar":"tutorialSidebar"},"resources/facades/target":{"id":"resources/facades/target","title":"Target","description":"The target facade maps all the information that can be retrieved by the","sidebar":"tutorialSidebar"},"resources/facades/tooltip":{"id":"resources/facades/tooltip","title":"Tooltip","description":"The Tooltip facade is a layer between the World of Warcraft tooltip system","sidebar":"tutorialSidebar"},"resources/factories/item-factory":{"id":"resources/factories/item-factory","title":"ItemFactory","description":"Creates item instances from multiple sources.","sidebar":"tutorialSidebar"},"resources/models/container":{"id":"resources/models/container","title":"Container","description":"The Container model represents bags, bank slots, the player\'s backpack, and","sidebar":"tutorialSidebar"},"resources/models/inventory":{"id":"resources/models/inventory","title":"Inventory","description":"The Container model introduced a mapped object to represent bags,","sidebar":"tutorialSidebar"},"resources/models/item":{"id":"resources/models/item","title":"Item","description":"The Item class is a model that maps game items and their properties.","sidebar":"tutorialSidebar"},"resources/models/macro":{"id":"resources/models/macro","title":"Macros","description":"Macro is the mapping of a game macro accessed with /m.","sidebar":"tutorialSidebar"},"resources/models/overview":{"id":"resources/models/overview","title":"Overview","description":"Models are structures following class standards, mostly","sidebar":"tutorialSidebar"},"resources/models/player":{"id":"resources/models/player","title":"Player","description":"The Player class is a model that maps player information.","sidebar":"tutorialSidebar"},"resources/models/raid-marker":{"id":"resources/models/raid-marker","title":"Raid Marker","description":"The raid marker model represents those icon markers that can","sidebar":"tutorialSidebar"},"resources/models/realm":{"id":"resources/models/realm","title":"Realm","description":"The Realm class is a model that maps realm, or server, information.","sidebar":"tutorialSidebar"},"resources/support/arr":{"id":"resources/support/arr","title":"Arr","description":"The Arr methods are focused on manipulating arrays.","sidebar":"tutorialSidebar"},"resources/support/bool":{"id":"resources/support/bool","title":"Bool","description":"The Bool support methods are focused on working and validating bool","sidebar":"tutorialSidebar"},"resources/support/str":{"id":"resources/support/str","title":"Str","description":"The Str methods are focused on manipulating strings.","sidebar":"tutorialSidebar"},"resources/views/window":{"id":"resources/views/window","title":"Window","description":"Working with frames in the World of Warcraft API usually envolves a lot of","sidebar":"tutorialSidebar"},"testing/api-mocks":{"id":"testing/api-mocks","title":"API Mocks","description":"The tests/wow-mocks.lua file contains a set of mocks for the World of","sidebar":"tutorialSidebar"},"testing/test-classes":{"id":"testing/test-classes","title":"Test Classes","description":"Test classes in the Stormwind Library are organized in a way that makes it","sidebar":"tutorialSidebar"},"testing/unit-suite":{"id":"testing/unit-suite","title":"Unit Suite","description":"For the steps below, Lua 5.4 will be used as the installed version, but the","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.b6125aa4.js b/assets/js/935f2afb.b6125aa4.js deleted file mode 100644 index b2e6b49d..00000000 --- a/assets/js/935f2afb.b6125aa4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Overview","href":"/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Development Process","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs/development-process/overview","docId":"development-process/overview","unlisted":false},{"type":"link","label":"Discovery","href":"/docs/development-process/discovery","docId":"development-process/discovery","unlisted":false},{"type":"link","label":"Implementation","href":"/docs/development-process/implementation","docId":"development-process/implementation","unlisted":false},{"type":"link","label":"Deployment","href":"/docs/development-process/deployment","docId":"development-process/deployment","unlisted":false}],"href":"/docs/category/development-process"},{"type":"category","label":"Library Structure","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs/library-structure/overview","docId":"library-structure/overview","unlisted":false},{"type":"link","label":"Build","href":"/docs/library-structure/build","docId":"library-structure/build","unlisted":false},{"type":"link","label":"Import","href":"/docs/library-structure/import","docId":"library-structure/import","unlisted":false},{"type":"link","label":"Documentation","href":"/docs/library-structure/docs","docId":"library-structure/docs","unlisted":false},{"type":"link","label":"LuaDocs","href":"/docs/library-structure/luadocs","docId":"library-structure/luadocs","unlisted":false}],"href":"/docs/category/library-structure"},{"type":"category","label":"Resources","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Commands","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs/resources/commands/overview","docId":"resources/commands/overview","unlisted":false},{"type":"link","label":"Command","href":"/docs/resources/commands/command","docId":"resources/commands/command","unlisted":false},{"type":"link","label":"Commands Handler","href":"/docs/resources/commands/commands-handler","docId":"resources/commands/commands-handler","unlisted":false}],"href":"/docs/category/commands"},{"type":"category","label":"Core","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Addon Properties","href":"/docs/resources/core/addon-properties","docId":"resources/core/addon-properties","unlisted":false},{"type":"link","label":"Classes","href":"/docs/resources/core/classes","docId":"resources/core/classes","unlisted":false},{"type":"link","label":"Configuration","href":"/docs/resources/core/configuration","docId":"resources/core/configuration","unlisted":false},{"type":"link","label":"Environment","href":"/docs/resources/core/environment","docId":"resources/core/environment","unlisted":false},{"type":"link","label":"Factory","href":"/docs/resources/core/factory","docId":"resources/core/factory","unlisted":false},{"type":"link","label":"Output","href":"/docs/resources/core/output","docId":"resources/core/output","unlisted":false}],"href":"/docs/category/core"},{"type":"category","label":"Facades","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Events","href":"/docs/resources/facades/events","docId":"resources/facades/events","unlisted":false},{"type":"link","label":"Target","href":"/docs/resources/facades/target","docId":"resources/facades/target","unlisted":false},{"type":"link","label":"Tooltip","href":"/docs/resources/facades/tooltip","docId":"resources/facades/tooltip","unlisted":false}],"href":"/docs/category/facades"},{"type":"category","label":"Models","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs/resources/models/overview","docId":"resources/models/overview","unlisted":false},{"type":"link","label":"Item","href":"/docs/resources/models/item","docId":"resources/models/item","unlisted":false},{"type":"link","label":"Macros","href":"/docs/resources/models/macro","docId":"resources/models/macro","unlisted":false},{"type":"link","label":"Player","href":"/docs/resources/models/player","docId":"resources/models/player","unlisted":false},{"type":"link","label":"Raid Marker","href":"/docs/resources/models/raid-marker","docId":"resources/models/raid-marker","unlisted":false},{"type":"link","label":"Realm","href":"/docs/resources/models/realm","docId":"resources/models/realm","unlisted":false}],"href":"/docs/category/models"},{"type":"category","label":"Support","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Arr","href":"/docs/resources/support/arr","docId":"resources/support/arr","unlisted":false},{"type":"link","label":"Bool","href":"/docs/resources/support/bool","docId":"resources/support/bool","unlisted":false},{"type":"link","label":"Str","href":"/docs/resources/support/str","docId":"resources/support/str","unlisted":false}],"href":"/docs/category/support"},{"type":"category","label":"Views","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Window","href":"/docs/resources/views/window","docId":"resources/views/window","unlisted":false}],"href":"/docs/category/views"}],"href":"/docs/category/resources"},{"type":"category","label":"Testing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"API Mocks","href":"/docs/testing/api-mocks","docId":"testing/api-mocks","unlisted":false},{"type":"link","label":"Test Classes","href":"/docs/testing/test-classes","docId":"testing/test-classes","unlisted":false},{"type":"link","label":"Unit Suite","href":"/docs/testing/unit-suite","docId":"testing/unit-suite","unlisted":false}],"href":"/docs/category/testing"},{"type":"link","label":"Changelog","href":"/docs/changelog","docId":"changelog","unlisted":false}]},"docs":{"changelog":{"id":"changelog","title":"Changelog","description":"2024.05.24 - version 1.3.0","sidebar":"tutorialSidebar"},"development-process/deployment":{"id":"development-process/deployment","title":"Deployment","description":"","sidebar":"tutorialSidebar"},"development-process/discovery":{"id":"development-process/discovery","title":"Discovery","description":"The discovery process walks side by side with the addon development and with versioning the library.","sidebar":"tutorialSidebar"},"development-process/implementation":{"id":"development-process/implementation","title":"Implementation","description":"The implementation phase starts by creating a new release branch that will be used as the base","sidebar":"tutorialSidebar"},"development-process/overview":{"id":"development-process/overview","title":"Overview","description":"The process behind all library releases is defined in a couple of steps and will happen for","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Overview","description":"Stormwind Library is a library developed in Lua to serve as a framework for building World of Warcraft addons.","sidebar":"tutorialSidebar"},"library-structure/build":{"id":"library-structure/build","title":"Build","description":"All the library code is written inside the ./src folder and split into multiple .lua files.","sidebar":"tutorialSidebar"},"library-structure/docs":{"id":"library-structure/docs","title":"Documentation","description":"The Stormwind Library documentation is built on top of","sidebar":"tutorialSidebar"},"library-structure/import":{"id":"library-structure/import","title":"Import","description":"When a new version of the library is built, it\'s time to import it","sidebar":"tutorialSidebar"},"library-structure/luadocs":{"id":"library-structure/luadocs","title":"LuaDocs","description":"Although the Stormwind Library is fully covered in this documentation page","sidebar":"tutorialSidebar"},"library-structure/overview":{"id":"library-structure/overview","title":"Overview","description":"The Stormwind Library was structured with the following goals:","sidebar":"tutorialSidebar"},"resources/commands/command":{"id":"resources/commands/command","title":"Command","description":"The command object is a simple DTO object that can also house the callback","sidebar":"tutorialSidebar"},"resources/commands/commands-handler":{"id":"resources/commands/commands-handler","title":"Commands Handler","description":"The commands handler is a class that intercepts all commands registered by an","sidebar":"tutorialSidebar"},"resources/commands/overview":{"id":"resources/commands/overview","title":"Overview","description":"Slash commands in World of Warcraft are executed in the chat box that can","sidebar":"tutorialSidebar"},"resources/core/addon-properties":{"id":"resources/core/addon-properties","title":"Addon Properties","description":"When the library is initialized, addons can pass its properties to","sidebar":"tutorialSidebar"},"resources/core/classes":{"id":"resources/core/classes","title":"Classes","description":"Lua doesn\'t offer directly a class structure like every","sidebar":"tutorialSidebar"},"resources/core/configuration":{"id":"resources/core/configuration","title":"Configuration","description":"The Configuration class provides methods to easily access and manipulate the","sidebar":"tutorialSidebar"},"resources/core/environment":{"id":"resources/core/environment","title":"Environment","description":"Environment is a library resource used to identify the environment where the","sidebar":"tutorialSidebar"},"resources/core/factory":{"id":"resources/core/factory","title":"Factory","description":"The Factory is a simple part of the library responsible for emulating the new keyword from OOP languages.","sidebar":"tutorialSidebar"},"resources/core/output":{"id":"resources/core/output","title":"Output","description":"The output structure controls everything that can be printed","sidebar":"tutorialSidebar"},"resources/facades/events":{"id":"resources/facades/events","title":"Events","description":"The Events facade is an important class in the Stormwind Library, as it","sidebar":"tutorialSidebar"},"resources/facades/target":{"id":"resources/facades/target","title":"Target","description":"The target facade maps all the information that can be retrieved by the","sidebar":"tutorialSidebar"},"resources/facades/tooltip":{"id":"resources/facades/tooltip","title":"Tooltip","description":"The Tooltip facade is a layer between the World of Warcraft tooltip system","sidebar":"tutorialSidebar"},"resources/models/item":{"id":"resources/models/item","title":"Item","description":"The Item class is a model that maps game items and their properties.","sidebar":"tutorialSidebar"},"resources/models/macro":{"id":"resources/models/macro","title":"Macros","description":"Macro is the mapping of a game macro accessed with /m.","sidebar":"tutorialSidebar"},"resources/models/overview":{"id":"resources/models/overview","title":"Overview","description":"Models are structures following class standards, mostly","sidebar":"tutorialSidebar"},"resources/models/player":{"id":"resources/models/player","title":"Player","description":"The Player class is a model that maps player information.","sidebar":"tutorialSidebar"},"resources/models/raid-marker":{"id":"resources/models/raid-marker","title":"Raid Marker","description":"The raid marker model represents those icon markers that can","sidebar":"tutorialSidebar"},"resources/models/realm":{"id":"resources/models/realm","title":"Realm","description":"The Realm class is a model that maps realm, or server, information.","sidebar":"tutorialSidebar"},"resources/support/arr":{"id":"resources/support/arr","title":"Arr","description":"The Arr methods are focused on manipulating arrays.","sidebar":"tutorialSidebar"},"resources/support/bool":{"id":"resources/support/bool","title":"Bool","description":"The Bool support methods are focused on working and validating bool","sidebar":"tutorialSidebar"},"resources/support/str":{"id":"resources/support/str","title":"Str","description":"The Str methods are focused on manipulating strings.","sidebar":"tutorialSidebar"},"resources/views/window":{"id":"resources/views/window","title":"Window","description":"Working with frames in the World of Warcraft API usually envolves a lot of","sidebar":"tutorialSidebar"},"testing/api-mocks":{"id":"testing/api-mocks","title":"API Mocks","description":"The tests/wow-mocks.lua file contains a set of mocks for the World of","sidebar":"tutorialSidebar"},"testing/test-classes":{"id":"testing/test-classes","title":"Test Classes","description":"Test classes in the Stormwind Library are organized in a way that makes it","sidebar":"tutorialSidebar"},"testing/unit-suite":{"id":"testing/unit-suite","title":"Unit Suite","description":"For the steps below, Lua 5.4 will be used as the installed version, but the","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/9beb87c2.af8c5e07.js b/assets/js/9beb87c2.af8c5e07.js deleted file mode 100644 index 471ac7c2..00000000 --- a/assets/js/9beb87c2.af8c5e07.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3539],{4520:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>a,toc:()=>d});var s=i(4848),t=i(8453);const l={},r="Changelog",a={id:"changelog",title:"Changelog",description:"2024.05.24 - version 1.3.0",source:"@site/docs/changelog.md",sourceDirName:".",slug:"/changelog",permalink:"/docs/changelog",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/changelog.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Unit Suite",permalink:"/docs/testing/unit-suite"}},o={},d=[{value:"2024.05.24 - version 1.3.0",id:"20240524---version-130",level:2},{value:"2024.05.08 - version 1.2.0",id:"20240508---version-120",level:2},{value:"2024.04.25 - version 1.1.0",id:"20240425---version-110",level:2},{value:"2024.04.10 - version 1.0.0",id:"20240410---version-100",level:2},{value:"2024.04.03 - version 0.0.8-alpha",id:"20240403---version-008-alpha",level:2},{value:"2024.03.29 - version 0.0.7-alpha",id:"20240329---version-007-alpha",level:2},{value:"2024.03.16 - version 0.0.6-alpha",id:"20240316---version-006-alpha",level:2},{value:"2024.03.08 - version 0.0.5-alpha",id:"20240308---version-005-alpha",level:2},{value:"2024.02.29 - version 0.0.4-alpha",id:"20240229---version-004-alpha",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"changelog",children:"Changelog"}),"\n",(0,s.jsx)(n.h2,{id:"20240524---version-130",children:"2024.05.24 - version 1.3.0"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Documentation published on ",(0,s.jsx)(n.a,{href:"https://www.stormwindlibrary.com",children:"GitHub Pages"})]}),"\n",(0,s.jsx)(n.li,{children:"Finish covering all classes with LuaDoc blocks"}),"\n",(0,s.jsxs)(n.li,{children:["Fix Events",":notify","() to properly handle multiple arguments"]}),"\n",(0,s.jsx)(n.li,{children:"Move the dd() method to a better location in the library structure,\r\nallowing it to be used before the Output class is registered"}),"\n",(0,s.jsx)(n.li,{children:"Move the generated LuaDoc files inside the docusaurus folder"}),"\n",(0,s.jsx)(n.li,{children:"Move World of Warcraft API mocks to a new reusable file separated from\r\nthe unit suite"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240508---version-120",children:"2024.05.08 - version 1.2.0"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Add the Environment class to identify the environment where the addon is\r\nrunning"}),"\n",(0,s.jsx)(n.li,{children:"Add the Item model to map game items and their properties"}),"\n",(0,s.jsx)(n.li,{children:"Add the library playerConfig() method to access player-specific configurations"}),"\n",(0,s.jsx)(n.li,{children:"Add the Player model to map player information"}),"\n",(0,s.jsx)(n.li,{children:"Add the Realm model to map realm information"}),"\n",(0,s.jsx)(n.li,{children:"Add the Tooltip facade to handle tooltip events"}),"\n",(0,s.jsxs)(n.li,{children:["Allow classes to define constants with the Arr",":freeze","() method"]}),"\n",(0,s.jsx)(n.li,{children:"Allow window instances to have their state saved to player configurations\r\n(still defaults to global)"}),"\n",(0,s.jsx)(n.li,{children:"Fix an issue with dd() when called in test units causing the terminal\r\ncolor to be changed permanently"}),"\n",(0,s.jsx)(n.li,{children:"Fix an issue with parsing command arguments when they mix single and double\r\nquotes"}),"\n",(0,s.jsx)(n.li,{children:"Update the library Factory to allow classes to be instantiated in specific\r\nWorld of Warcraft versions if necessary"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240425---version-110",children:"2024.04.25 - version 1.1.0"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:'Add a "dump and die" method to the Output class to improve debugging'}),"\n",(0,s.jsx)(n.li,{children:"Add a new property to initialize the library that allows addons to have a\r\nclass managing configurations and settings with facades to Arr"}),"\n",(0,s.jsx)(n.li,{children:"Add more LuaDoc blocks covering the library structure: to all classes in\r\nthe Commands structure, and to Output"}),"\n",(0,s.jsx)(n.li,{children:"Add the Configuration class to handle addon configurations and settings"}),"\n",(0,s.jsx)(n.li,{children:"Add the library getClass() method to allow addons to retrieve a class\r\nstructure instead of instantiating it, useful for class inheritance"}),"\n",(0,s.jsx)(n.li,{children:"Add the reusable Window class that allows addons to create windows with\r\nbasic features"}),"\n",(0,s.jsxs)(n.li,{children:["Fix Arr",":get","() to return false values instead of considering them nil and\r\nreturn the default value erroneously"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240410---version-100",children:"2024.04.10 - version 1.0.0"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Add code documentation with ",(0,s.jsx)(n.a,{href:"https://github.com/lunarmodules/ldoc",children:"ldoc"})]}),"\n",(0,s.jsx)(n.li,{children:"Add Target methods to get the target current raid mark"}),"\n",(0,s.jsx)(n.li,{children:"Allow the Output class to be switched to test mode"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240403---version-008-alpha",children:"2024.04.03 - version 0.0.8-alpha"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Add a new support class to handle bool values"}),"\n",(0,s.jsx)(n.li,{children:"Add new support methods to Str"}),"\n",(0,s.jsx)(n.li,{children:"Reset the library instance for each test method for better mocking and less garbage between test cases"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240329---version-007-alpha",children:"2024.03.29 - version 0.0.7-alpha"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Add the Events facade class to serve as a way to improve event handling","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Listen to PLAYER_LOGIN"}),"\n",(0,s.jsx)(n.li,{children:"Listen to PLAYER_TARGET_CHANGED and split it into three events"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.li,{children:"Add the CommandsHandler class to allow addons to register commands"}),"\n",(0,s.jsx)(n.li,{children:"Add the Output class to replace print() calls"}),"\n",(0,s.jsx)(n.li,{children:"Add the RaidMarker model class and the library's possible marker instances"}),"\n",(0,s.jsx)(n.li,{children:"Allow passing addon properties to the library"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240316---version-006-alpha",children:"2024.03.16 - version 0.0.6-alpha"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Add the Str support class"}),"\n",(0,s.jsx)(n.li,{children:"Allow addons to register classes to be instantiated"}),"\n",(0,s.jsx)(n.li,{children:"Improvements to the Target facade resources"}),"\n",(0,s.jsx)(n.li,{children:"New Arr support class methods"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240308---version-005-alpha",children:"2024.03.08 - version 0.0.5-alpha"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Add the Target facade"}),"\n",(0,s.jsx)(n.li,{children:"Add the Unit Test Suite"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240229---version-004-alpha",children:"2024.02.29 - version 0.0.4-alpha"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Add the Macro class"}),"\n",(0,s.jsx)(n.li,{children:"Add the Factory structure"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>a});var s=i(6540);const t={},l=s.createContext(t);function r(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9beb87c2.ccc7ba1f.js b/assets/js/9beb87c2.ccc7ba1f.js new file mode 100644 index 00000000..a55d2dbe --- /dev/null +++ b/assets/js/9beb87c2.ccc7ba1f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3539],{4520:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>a,toc:()=>d});var s=i(4848),t=i(8453);const l={},r="Changelog",a={id:"changelog",title:"Changelog",description:"2024.06.11 - version 1.4.0",source:"@site/docs/changelog.md",sourceDirName:".",slug:"/changelog",permalink:"/docs/changelog",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/changelog.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Unit Suite",permalink:"/docs/testing/unit-suite"}},o={},d=[{value:"2024.06.11 - version 1.4.0",id:"20240611---version-140",level:2},{value:"2024.05.24 - version 1.3.0",id:"20240524---version-130",level:2},{value:"2024.05.08 - version 1.2.0",id:"20240508---version-120",level:2},{value:"2024.04.25 - version 1.1.0",id:"20240425---version-110",level:2},{value:"2024.04.10 - version 1.0.0",id:"20240410---version-100",level:2},{value:"2024.04.03 - version 0.0.8-alpha",id:"20240403---version-008-alpha",level:2},{value:"2024.03.29 - version 0.0.7-alpha",id:"20240329---version-007-alpha",level:2},{value:"2024.03.16 - version 0.0.6-alpha",id:"20240316---version-006-alpha",level:2},{value:"2024.03.08 - version 0.0.5-alpha",id:"20240308---version-005-alpha",level:2},{value:"2024.02.29 - version 0.0.4-alpha",id:"20240229---version-004-alpha",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"changelog",children:"Changelog"}),"\n",(0,s.jsx)(n.h2,{id:"20240611---version-140",children:"2024.06.11 - version 1.4.0"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Add a factory to create item instances from multiple sources"}),"\n",(0,s.jsx)(n.li,{children:"Add new helper methods to Arr"}),"\n",(0,s.jsx)(n.li,{children:"Add the Container model to map the backpack, bags, bank slots, etc"}),"\n",(0,s.jsx)(n.li,{children:"Add the id property to the Item model"}),"\n",(0,s.jsx)(n.li,{children:"Inventory tracking (still experimental)"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240524---version-130",children:"2024.05.24 - version 1.3.0"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Documentation published on ",(0,s.jsx)(n.a,{href:"https://www.stormwindlibrary.com",children:"GitHub Pages"})]}),"\n",(0,s.jsx)(n.li,{children:"Finish covering all classes with LuaDoc blocks"}),"\n",(0,s.jsxs)(n.li,{children:["Fix Events",":notify","() to properly handle multiple arguments"]}),"\n",(0,s.jsx)(n.li,{children:"Move the dd() method to a better location in the library structure,\r\nallowing it to be used before the Output class is registered"}),"\n",(0,s.jsx)(n.li,{children:"Move the generated LuaDoc files inside the docusaurus folder"}),"\n",(0,s.jsx)(n.li,{children:"Move World of Warcraft API mocks to a new reusable file separated from\r\nthe unit suite"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240508---version-120",children:"2024.05.08 - version 1.2.0"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Add the Environment class to identify the environment where the addon is\r\nrunning"}),"\n",(0,s.jsx)(n.li,{children:"Add the Item model to map game items and their properties"}),"\n",(0,s.jsx)(n.li,{children:"Add the library playerConfig() method to access player-specific configurations"}),"\n",(0,s.jsx)(n.li,{children:"Add the Player model to map player information"}),"\n",(0,s.jsx)(n.li,{children:"Add the Realm model to map realm information"}),"\n",(0,s.jsx)(n.li,{children:"Add the Tooltip facade to handle tooltip events"}),"\n",(0,s.jsxs)(n.li,{children:["Allow classes to define constants with the Arr",":freeze","() method"]}),"\n",(0,s.jsx)(n.li,{children:"Allow window instances to have their state saved to player configurations\r\n(still defaults to global)"}),"\n",(0,s.jsx)(n.li,{children:"Fix an issue with dd() when called in test units causing the terminal\r\ncolor to be changed permanently"}),"\n",(0,s.jsx)(n.li,{children:"Fix an issue with parsing command arguments when they mix single and double\r\nquotes"}),"\n",(0,s.jsx)(n.li,{children:"Update the library Factory to allow classes to be instantiated in specific\r\nWorld of Warcraft versions if necessary"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240425---version-110",children:"2024.04.25 - version 1.1.0"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:'Add a "dump and die" method to the Output class to improve debugging'}),"\n",(0,s.jsx)(n.li,{children:"Add a new property to initialize the library that allows addons to have a\r\nclass managing configurations and settings with facades to Arr"}),"\n",(0,s.jsx)(n.li,{children:"Add more LuaDoc blocks covering the library structure: to all classes in\r\nthe Commands structure, and to Output"}),"\n",(0,s.jsx)(n.li,{children:"Add the Configuration class to handle addon configurations and settings"}),"\n",(0,s.jsx)(n.li,{children:"Add the library getClass() method to allow addons to retrieve a class\r\nstructure instead of instantiating it, useful for class inheritance"}),"\n",(0,s.jsx)(n.li,{children:"Add the reusable Window class that allows addons to create windows with\r\nbasic features"}),"\n",(0,s.jsxs)(n.li,{children:["Fix Arr",":get","() to return false values instead of considering them nil and\r\nreturn the default value erroneously"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240410---version-100",children:"2024.04.10 - version 1.0.0"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Add code documentation with ",(0,s.jsx)(n.a,{href:"https://github.com/lunarmodules/ldoc",children:"ldoc"})]}),"\n",(0,s.jsx)(n.li,{children:"Add Target methods to get the target current raid mark"}),"\n",(0,s.jsx)(n.li,{children:"Allow the Output class to be switched to test mode"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240403---version-008-alpha",children:"2024.04.03 - version 0.0.8-alpha"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Add a new support class to handle bool values"}),"\n",(0,s.jsx)(n.li,{children:"Add new support methods to Str"}),"\n",(0,s.jsx)(n.li,{children:"Reset the library instance for each test method for better mocking and less garbage between test cases"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240329---version-007-alpha",children:"2024.03.29 - version 0.0.7-alpha"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Add the Events facade class to serve as a way to improve event handling","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Listen to PLAYER_LOGIN"}),"\n",(0,s.jsx)(n.li,{children:"Listen to PLAYER_TARGET_CHANGED and split it into three events"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.li,{children:"Add the CommandsHandler class to allow addons to register commands"}),"\n",(0,s.jsx)(n.li,{children:"Add the Output class to replace print() calls"}),"\n",(0,s.jsx)(n.li,{children:"Add the RaidMarker model class and the library's possible marker instances"}),"\n",(0,s.jsx)(n.li,{children:"Allow passing addon properties to the library"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240316---version-006-alpha",children:"2024.03.16 - version 0.0.6-alpha"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Add the Str support class"}),"\n",(0,s.jsx)(n.li,{children:"Allow addons to register classes to be instantiated"}),"\n",(0,s.jsx)(n.li,{children:"Improvements to the Target facade resources"}),"\n",(0,s.jsx)(n.li,{children:"New Arr support class methods"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240308---version-005-alpha",children:"2024.03.08 - version 0.0.5-alpha"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Add the Target facade"}),"\n",(0,s.jsx)(n.li,{children:"Add the Unit Test Suite"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"20240229---version-004-alpha",children:"2024.02.29 - version 0.0.4-alpha"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Add the Macro class"}),"\n",(0,s.jsx)(n.li,{children:"Add the Factory structure"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>a});var s=i(6540);const t={},l=s.createContext(t);function r(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b28425fc.1f2a2527.js b/assets/js/b28425fc.1f2a2527.js new file mode 100644 index 00000000..93f5142c --- /dev/null +++ b/assets/js/b28425fc.1f2a2527.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4437],{7176:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>o,toc:()=>d});var i=r(4848),s=r(8453);const t={},l="Addon Properties",o={id:"resources/core/addon-properties",title:"Addon Properties",description:"When the library is initialized, addons can pass its properties to",source:"@site/docs/resources/core/addon-properties.md",sourceDirName:"resources/core",slug:"/resources/core/addon-properties",permalink:"/docs/resources/core/addon-properties",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/resources/core/addon-properties.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Core",permalink:"/docs/category/core"},next:{title:"Classes",permalink:"/docs/resources/core/classes"}},a={},d=[{value:"Available properties",id:"available-properties",level:2},{value:"colors",id:"colors",level:3},{value:"command",id:"command",level:3},{value:"data",id:"data",level:3},{value:"inventory",id:"inventory",level:3},{value:"name",id:"name",level:3}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"addon-properties",children:"Addon Properties"}),"\n",(0,i.jsx)(n.p,{children:"When the library is initialized, addons can pass its properties to\r\nimprove how it handles its resources."}),"\n",(0,i.jsxs)(n.p,{children:["In the example below, ",(0,i.jsx)(n.code,{children:"MyAddon"})," is the addon main table and ",(0,i.jsx)(n.code,{children:"__"})," is\r\nthe library reference. Please, remember that the library class must\r\ncarry its version to avoid conflicts, but for the sake of simplicity,\r\nit's simply called ",(0,i.jsx)(n.code,{children:"StormwindLibrary"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"MyAddon.__ = StormwindLibrary.new({\r\n command = 'myAddon',\r\n name = 'My Custom Addon',\r\n})\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Once initialized, these properties can be accessed in the library's\r\nproperty called ",(0,i.jsx)(n.code,{children:"addon"}),'. The code below will print "My Custom Addon".']}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"print(MyAddon.__.addon.name)\n"})}),"\n",(0,i.jsx)(n.h2,{id:"available-properties",children:"Available properties"}),"\n",(0,i.jsxs)(n.p,{children:["The following sections list the available properties and their effect\r\non the library. See the first example in this article on how to pass\r\nthe addon properties and each subtitle below represents a table index,\r\nso when showing ",(0,i.jsx)(n.code,{children:"command"})," for example, it means passing a table with\r\n",(0,i.jsx)(n.code,{children:"{command = 'myAddon'}"})," when calling ",(0,i.jsx)(n.code,{children:"new()"})," for a new library instance."]}),"\n",(0,i.jsxs)(n.p,{children:["Some parameters are ",(0,i.jsx)(n.strong,{children:"optional"})," and some are ",(0,i.jsx)(n.strong,{children:"required"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"colors",children:"colors"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Type"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"A table containing the primary and the secondary colors"}),"\n",(0,i.jsx)(n.li,{children:"Colors must be provided as hexadecimal strings"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"-- ...\r\ncolors = {\r\n primary = 'FFFFFF',\r\n secondary = '000000',\r\n}\r\n-- ...\n"})}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Optional"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Default:"})," ",(0,i.jsx)(n.code,{children:"{}"}),", indicating there are not default colors"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Effect:"})," Most output messages will use the ",(0,i.jsx)(n.strong,{children:"primary"})," color to\r\nhighlight the prefix; the ",(0,i.jsx)(n.strong,{children:"secondary"})," color may also be used to\r\nhighlight secondary information."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"command",children:"command"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Type:"})," string"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Optional"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Default:"})," ",(0,i.jsx)(n.code,{children:"nil"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Effect:"})," When initialized, the library will register a command\r\nthat can be executed in game. Please, read the\r\n",(0,i.jsx)(n.a,{href:"../commands/overview",children:"commands documentation"})," for reference."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"data",children:"data"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Type:"})," string, that must be informed as a string, not the table variable\r\nitself, given that the library will access it with ",(0,i.jsx)(n.code,{children:"_G"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Optional"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Default:"})," ",(0,i.jsx)(n.code,{children:"nil"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Effect:"})," The library will automatically create a ",(0,i.jsx)(n.a,{href:"configuration",children:"configuration"}),"\r\ninstance and enable the ",(0,i.jsx)(n.code,{children:"config(...)"})," proxy method to access the saved\r\nvariables properties. The string must be the name of the saved variables\r\ntable."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"inventory",children:"inventory"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Type"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"A table containing flags for inventory management"}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Important note:"})," This property and the inventory tracking feature were\r\nintroduced in version 1.4.0 in an experimental way. Please, use this tracking\r\nflag with caution and expect changes (especially in performance) in future"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"-- ...\r\ninventory = {\r\n track = true,\r\n}\r\n-- ...\n"})}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Optional"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Default:"})," ",(0,i.jsx)(n.code,{children:"{ track = false }"}),", indicating that the library will not\r\ntrack the player's inventory by default"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Effect:"})," When set to ",(0,i.jsx)(n.code,{children:"true"}),", the library will automatically instantiate\r\nthe ",(0,i.jsx)(n.a,{href:"../models/inventory",children:"player's inventory"})," and keep it updated with the\r\nplayer's containers by listening to the ",(0,i.jsx)(n.code,{children:"BAG_UPDATE"})," event."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"name",children:"name"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Type:"})," string"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Required"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Effect:"})," The library will store the addon name for multiple purposes."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>l,x:()=>o});var i=r(6540);const s={},t=i.createContext(s);function l(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b28425fc.a9787cef.js b/assets/js/b28425fc.a9787cef.js deleted file mode 100644 index 87da8c76..00000000 --- a/assets/js/b28425fc.a9787cef.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4437],{7176:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var s=r(4848),i=r(8453);const t={},o="Addon Properties",l={id:"resources/core/addon-properties",title:"Addon Properties",description:"When the library is initialized, addons can pass its properties to",source:"@site/docs/resources/core/addon-properties.md",sourceDirName:"resources/core",slug:"/resources/core/addon-properties",permalink:"/docs/resources/core/addon-properties",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/resources/core/addon-properties.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Core",permalink:"/docs/category/core"},next:{title:"Classes",permalink:"/docs/resources/core/classes"}},a={},d=[{value:"Available properties",id:"available-properties",level:2},{value:"data",id:"data",level:3},{value:"colors",id:"colors",level:3},{value:"command",id:"command",level:3},{value:"name",id:"name",level:3}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"addon-properties",children:"Addon Properties"}),"\n",(0,s.jsx)(n.p,{children:"When the library is initialized, addons can pass its properties to\r\nimprove how it handles its resources."}),"\n",(0,s.jsxs)(n.p,{children:["In the example below, ",(0,s.jsx)(n.code,{children:"MyAddon"})," is the addon main table and ",(0,s.jsx)(n.code,{children:"__"})," is\r\nthe library reference. Please, remember that the library class must\r\ncarry its version to avoid conflicts, but for the sake of simplicity,\r\nit's simply called ",(0,s.jsx)(n.code,{children:"StormwindLibrary"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-lua",children:"MyAddon.__ = StormwindLibrary.new({\r\n command = 'myAddon',\r\n name = 'My Custom Addon',\r\n})\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Once initialized, these properties can be accessed in the library's\r\nproperty called ",(0,s.jsx)(n.code,{children:"addon"}),'. The code below will print "My Custom Addon".']}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-lua",children:"print(MyAddon.__.addon.name)\n"})}),"\n",(0,s.jsx)(n.h2,{id:"available-properties",children:"Available properties"}),"\n",(0,s.jsxs)(n.p,{children:["The following sections list the available properties and their effect\r\non the library. See the first example in this article on how to pass\r\nthe addon properties and each subtitle below represents a table index,\r\nso when showing ",(0,s.jsx)(n.code,{children:"command"})," for example, it means passing a table with\r\n",(0,s.jsx)(n.code,{children:"{command = 'myAddon'}"})," when calling ",(0,s.jsx)(n.code,{children:"new()"})," for a new library instance."]}),"\n",(0,s.jsxs)(n.p,{children:["Some parameters are ",(0,s.jsx)(n.strong,{children:"optional"})," and some are ",(0,s.jsx)(n.strong,{children:"required"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"data",children:"data"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Type:"})," string, that must be informed as a string, not the table variable\r\nitself, given that the library will access it with ",(0,s.jsx)(n.code,{children:"_G"})]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Optional"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Default:"})," ",(0,s.jsx)(n.code,{children:"nil"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Effect:"})," The library will automatically create a ",(0,s.jsx)(n.a,{href:"configuration",children:"configuration"}),"\r\ninstance and enable the ",(0,s.jsx)(n.code,{children:"config(...)"})," proxy method to access the saved\r\nvariables properties. The string must be the name of the saved variables\r\ntable."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"colors",children:"colors"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Type"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A table containing the primary and the secondary colors"}),"\n",(0,s.jsx)(n.li,{children:"Colors must be provided as hexadecimal strings"}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-lua",children:"-- ...\r\ncolors = {\r\n primary = 'FFFFFF',\r\n secondary = '000000',\r\n}\r\n-- ...\n"})}),"\n"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Optional"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Default:"})," ",(0,s.jsx)(n.code,{children:"{}"}),", indicating there are not default colors"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Effect:"})," Most output messages will use the ",(0,s.jsx)(n.strong,{children:"primary"})," color to\r\nhighlight the prefix; the ",(0,s.jsx)(n.strong,{children:"secondary"})," color may also be used to\r\nhighlight secondary information."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"command",children:"command"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Type:"})," string"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Optional"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Default:"})," ",(0,s.jsx)(n.code,{children:"nil"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Effect:"})," When initialized, the library will register a command\r\nthat can be executed in game. Please, read the\r\n",(0,s.jsx)(n.a,{href:"../commands/overview",children:"commands documentation"})," for reference."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"name",children:"name"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Type:"})," string"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Required"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Effect:"})," The library will store the addon name for multiple purposes."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>l});var s=r(6540);const i={},t=s.createContext(i);function o(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/beea1df7.4d2267b8.js b/assets/js/beea1df7.ad394c68.js similarity index 57% rename from assets/js/beea1df7.4d2267b8.js rename to assets/js/beea1df7.ad394c68.js index a81687be..2c40a2bb 100644 --- a/assets/js/beea1df7.4d2267b8.js +++ b/assets/js/beea1df7.ad394c68.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[812],{7081:e=>{e.exports=JSON.parse('{"title":"Models","description":"Classes that map game data to objects.","slug":"/category/models","permalink":"/docs/category/models","navigation":{"previous":{"title":"Tooltip","permalink":"/docs/resources/facades/tooltip"},"next":{"title":"Overview","permalink":"/docs/resources/models/overview"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[812],{7081:e=>{e.exports=JSON.parse('{"title":"Models","description":"Classes that map game data to objects.","slug":"/category/models","permalink":"/docs/category/models","navigation":{"previous":{"title":"ItemFactory","permalink":"/docs/resources/factories/item-factory"},"next":{"title":"Overview","permalink":"/docs/resources/models/overview"}}}')}}]); \ No newline at end of file diff --git a/assets/js/fd08dba1.2c078ea8.js b/assets/js/fd08dba1.2c078ea8.js new file mode 100644 index 00000000..bb49a7f7 --- /dev/null +++ b/assets/js/fd08dba1.2c078ea8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8617],{6428:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var a=t(4848),s=t(8453);const r={},o="Container",i={id:"resources/models/container",title:"Container",description:"The Container model represents bags, bank slots, the player's backpack, and",source:"@site/docs/resources/models/container.md",sourceDirName:"resources/models",slug:"/resources/models/container",permalink:"/docs/resources/models/container",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/resources/models/container.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/docs/resources/models/overview"},next:{title:"Inventory",permalink:"/docs/resources/models/inventory"}},c={},l=[{value:"Getting an updated container list of items",id:"getting-an-updated-container-list-of-items",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"container",children:"Container"}),"\n",(0,a.jsx)(n.p,{children:"The Container model represents bags, bank slots, the player's backpack, and\r\nany other container capable of holding items."}),"\n",(0,a.jsxs)(n.p,{children:["For a more detailed explanation of the Container model and its available\r\nmethods and properties, please refer to the library\r\n",(0,a.jsx)(n.a,{href:"pathname:///lua-docs/classes/Models.Container.html",children:"technical documentation"}),"."]}),"\n",(0,a.jsx)(n.h2,{id:"getting-an-updated-container-list-of-items",children:"Getting an updated container list of items"}),"\n",(0,a.jsx)(n.p,{children:"When instantiated, the container instance has no items stored yet."}),"\n",(0,a.jsxs)(n.p,{children:["Given that items are cached internally, when calling ",(0,a.jsx)(n.code,{children:"getItems()"})," in a brand\r\nnew instance will result in a container scan to populate the list."]}),"\n",(0,a.jsxs)(n.p,{children:["After that, the ",(0,a.jsx)(n.code,{children:"refresh()"})," method should be called."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-lua",children:"local backpack = library\r\n :new('Container')\r\n :setSlot(Enum.BagIndex.Backpack)\r\n\r\nlocal itemsInBackpack = backpack:getItems()\r\n\r\n-- later in another part of the code if the backpack instance is reused\r\nlocal updatedItemsInBackpack = backpack:refresh():getItems()\n"})}),"\n",(0,a.jsxs)(n.admonition,{title:"Getting the available slot constants",type:"tip",children:[(0,a.jsxs)(n.p,{children:["A list of slots can be found with ",(0,a.jsx)(n.code,{children:"/dump Enum.BagIndex"})," in game."]}),(0,a.jsx)(n.p,{children:"At the time of writing (June 2024), the command above returns the same results\r\nfor Classic Era, Cataclysm Classic and Dragonflight."})]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>i});var a=t(6540);const s={},r=a.createContext(s);function o(e){const n=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ff6fac3d.356b42f5.js b/assets/js/ff6fac3d.356b42f5.js new file mode 100644 index 00000000..5aa0134a --- /dev/null +++ b/assets/js/ff6fac3d.356b42f5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8462],{1648:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>o,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var r=n(4848),a=n(8453);const t={},i="Factory",l={id:"resources/core/factory",title:"Factory",description:"The Factory is a simple part of the library responsible for emulating the new keyword from OOP languages.",source:"@site/docs/resources/core/factory.md",sourceDirName:"resources/core",slug:"/resources/core/factory",permalink:"/docs/resources/core/factory",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/resources/core/factory.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Environment",permalink:"/docs/resources/core/environment"},next:{title:"Output",permalink:"/docs/resources/core/output"}},o={},c=[{value:"How to allow classes to be instantiated",id:"how-to-allow-classes-to-be-instantiated",level:2},{value:"Examples",id:"examples",level:2},{value:"Class inheritance",id:"class-inheritance",level:2}];function d(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"factory",children:"Factory"}),"\n",(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.strong,{children:"Factory"})," is a simple part of the library responsible for emulating the ",(0,r.jsx)(s.code,{children:"new"})," keyword from OOP languages."]}),"\n",(0,r.jsxs)(s.p,{children:["It registers a ",(0,r.jsx)(s.code,{children:"new()"})," method to the library structure that's capable of instantiating classes\r\nthat are registered in its ",(0,r.jsx)(s.code,{children:"classes"})," property."]}),"\n",(0,r.jsx)(s.admonition,{title:"Model factories are not covered here",type:"warning",children:(0,r.jsxs)(s.p,{children:["Please, refer to the ",(0,r.jsx)(s.a,{href:"/docs/category/factories",children:"factories"})," documentation for information about model factories, which are a different concept from this one."]})}),"\n",(0,r.jsx)(s.h2,{id:"how-to-allow-classes-to-be-instantiated",children:"How to allow classes to be instantiated"}),"\n",(0,r.jsxs)(s.p,{children:["These are the steps to allow ",(0,r.jsx)(s.a,{href:"classes",children:"classes"})," to be instantiated:"]}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsxs)(s.li,{children:["When writing a Lua file containing a class, make sure to register it by doing\r\n",(0,r.jsx)(s.code,{children:"self:addClass('', )"})," right below the ",(0,r.jsx)(s.code,{children:".__index = "}),"\r\nline","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["It's also possible to limit the class instantiation per World of Warcraft\r\nversion by adding a third parameter to this call, which is a string or\r\ntable representing one or many ",(0,r.jsx)(s.a,{href:"environment",children:"client flavors"})]}),"\n",(0,r.jsx)(s.li,{children:"When no flavors are provided, the class is instantiable in any World of\r\nWarcraft version"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["Write the ",(0,r.jsx)(s.code,{children:"__constructor()"})," method accepting zero or many parameters"]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["With that, it's possible to ask the library to provide a new instance of that\r\nclass with a ",(0,r.jsx)(s.code,{children:"new"})," call."]}),"\n",(0,r.jsx)(s.h2,{id:"examples",children:"Examples"}),"\n",(0,r.jsx)(s.p,{children:"Adding a class that's instantiable in any World of Warcraft version:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-lua",children:"local MyClass = {}\r\nMyClass.__index = MyClass\r\nself:addClass('MyClass', MyClass)\r\n\r\nfunction MyClass.__construct(name)\r\n local self = setmetatable({}, MyClass)\r\n\r\n self.name = name\r\n\r\n return self\r\nend\n"})}),"\n",(0,r.jsx)(s.p,{children:"Adding a class that's instantiable only in Classic Era"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-lua",children:"local MyClassicEraClass = {}\r\nMyClassicEraClass.__index = MyClassicEraClass\r\nself:addClass('MyClassicEraClass', MyClassicEraClass, library.environment.constants.CLIENT_CLASSIC_ERA)\r\n\r\nfunction MyClassicEraClass.__construct()\r\n -- ...\r\nend\n"})}),"\n",(0,r.jsxs)(s.p,{children:["Now, it's possible to instantiate ",(0,r.jsx)(s.code,{children:"MyClass"})," in any World of Warcraft version\r\nby doing a ",(0,r.jsx)(s.code,{children:"new()"})," call in the library instance, but ",(0,r.jsx)(s.code,{children:"MyClassicEraClass"})," can\r\nonly be instantiated if running a World of Warcraft Classic Era client, like\r\nin Season of Discovery, Hardcore, etc."]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-lua",children:"-- this will work in any World of Warcraft version\r\nlocal instance = library:new('MyClass', 'Any name')\r\n\r\n-- this will throw an error if running in a non-Classic Era client\r\nlocal instance = library:new('MyClassicEraClass')\n"})}),"\n",(0,r.jsx)(s.h2,{id:"class-inheritance",children:"Class inheritance"}),"\n",(0,r.jsxs)(s.p,{children:["To allow class inheritance, instead of calling the ",(0,r.jsx)(s.code,{children:"new()"})," method directly,\r\nit's possible to retrieve a class structure with the ",(0,r.jsx)(s.code,{children:"getClass()"})," method. That\r\nway, a class can inherit another one by using any inheritance strategy, like\r\nsetting the meta table."]}),"\n",(0,r.jsx)(s.p,{children:"Example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-lua",children:"-- imagine that this is a class in the library or in another addon\r\nlocal MyClass = {}\r\nMyClass.__index = MyClass\r\nself:addClass('MyClass', MyClass)\r\n\r\n-- then to inherit from MyClass, get the class structure with:\r\nmyClassStructure = library:getClass('MyClass')\r\n-- and then inherit from it using your preferred way to work with inheritance\r\n-- in Lua, like the setmetatable function\r\nsetmetatable(MyNewClass, myClassStructure)\n"})}),"\n",(0,r.jsx)(s.admonition,{title:"Parent class constructor limitations",type:"warning",children:(0,r.jsxs)(s.p,{children:["Due to how class instantiation works in the Stormwind Library, the parent\r\nclass constructor can be a bit tricky to call. The best way to do it is to\r\nnot use this structure if you need that or override the ",(0,r.jsx)(s.code,{children:"__construct()"})," method\r\nin the child class by doing the same thing as the parent class constructor."]})})]})}function h(e={}){const{wrapper:s}={...(0,a.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>l});var r=n(6540);const a={},t=r.createContext(a);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ff6fac3d.67fa18cf.js b/assets/js/ff6fac3d.67fa18cf.js deleted file mode 100644 index 35e95a65..00000000 --- a/assets/js/ff6fac3d.67fa18cf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8462],{1648:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>o,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var r=n(4848),a=n(8453);const t={},i="Factory",l={id:"resources/core/factory",title:"Factory",description:"The Factory is a simple part of the library responsible for emulating the new keyword from OOP languages.",source:"@site/docs/resources/core/factory.md",sourceDirName:"resources/core",slug:"/resources/core/factory",permalink:"/docs/resources/core/factory",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/resources/core/factory.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Environment",permalink:"/docs/resources/core/environment"},next:{title:"Output",permalink:"/docs/resources/core/output"}},o={},c=[{value:"How to allow classes to be instantiated",id:"how-to-allow-classes-to-be-instantiated",level:2},{value:"Examples",id:"examples",level:2},{value:"Class inheritance",id:"class-inheritance",level:2}];function d(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"factory",children:"Factory"}),"\n",(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.strong,{children:"Factory"})," is a simple part of the library responsible for emulating the ",(0,r.jsx)(s.code,{children:"new"})," keyword from OOP languages."]}),"\n",(0,r.jsxs)(s.p,{children:["It registers a ",(0,r.jsx)(s.code,{children:"new()"})," method to the library structure that's capable of instantiating classes\r\nthat are registered in its ",(0,r.jsx)(s.code,{children:"classes"})," property."]}),"\n",(0,r.jsx)(s.h2,{id:"how-to-allow-classes-to-be-instantiated",children:"How to allow classes to be instantiated"}),"\n",(0,r.jsxs)(s.p,{children:["These are the steps to allow ",(0,r.jsx)(s.a,{href:"classes",children:"classes"})," to be instantiated:"]}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsxs)(s.li,{children:["When writing a Lua file containing a class, make sure to register it by doing\r\n",(0,r.jsx)(s.code,{children:"self:addClass('', )"})," right below the ",(0,r.jsx)(s.code,{children:".__index = "}),"\r\nline","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["It's also possible to limit the class instantiation per World of Warcraft\r\nversion by adding a third parameter to this call, which is a string or\r\ntable representing one or many ",(0,r.jsx)(s.a,{href:"environment",children:"client flavors"})]}),"\n",(0,r.jsx)(s.li,{children:"When no flavors are provided, the class is instantiable in any World of\r\nWarcraft version"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["Write the ",(0,r.jsx)(s.code,{children:"__constructor()"})," method accepting zero or many parameters"]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["With that, it's possible to ask the library to provide a new instance of that\r\nclass with a ",(0,r.jsx)(s.code,{children:"new"})," call."]}),"\n",(0,r.jsx)(s.h2,{id:"examples",children:"Examples"}),"\n",(0,r.jsx)(s.p,{children:"Adding a class that's instantiable in any World of Warcraft version:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-lua",children:"local MyClass = {}\r\nMyClass.__index = MyClass\r\nself:addClass('MyClass', MyClass)\r\n\r\nfunction MyClass.__construct(name)\r\n local self = setmetatable({}, MyClass)\r\n\r\n self.name = name\r\n\r\n return self\r\nend\n"})}),"\n",(0,r.jsx)(s.p,{children:"Adding a class that's instantiable only in Classic Era"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-lua",children:"local MyClassicEraClass = {}\r\nMyClassicEraClass.__index = MyClassicEraClass\r\nself:addClass('MyClassicEraClass', MyClassicEraClass, library.environment.constants.CLIENT_CLASSIC_ERA)\r\n\r\nfunction MyClassicEraClass.__construct()\r\n -- ...\r\nend\n"})}),"\n",(0,r.jsxs)(s.p,{children:["Now, it's possible to instantiate ",(0,r.jsx)(s.code,{children:"MyClass"})," in any World of Warcraft version\r\nby doing a ",(0,r.jsx)(s.code,{children:"new()"})," call in the library instance, but ",(0,r.jsx)(s.code,{children:"MyClassicEraClass"})," can\r\nonly be instantiated if running a World of Warcraft Classic Era client, like\r\nin Season of Discovery, Hardcore, etc."]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-lua",children:"-- this will work in any World of Warcraft version\r\nlocal instance = library:new('MyClass', 'Any name')\r\n\r\n-- this will throw an error if running in a non-Classic Era client\r\nlocal instance = library:new('MyClassicEraClass')\n"})}),"\n",(0,r.jsx)(s.h2,{id:"class-inheritance",children:"Class inheritance"}),"\n",(0,r.jsxs)(s.p,{children:["To allow class inheritance, instead of calling the ",(0,r.jsx)(s.code,{children:"new()"})," method directly,\r\nit's possible to retrieve a class structure with the ",(0,r.jsx)(s.code,{children:"getClass()"})," method. That\r\nway, a class can inherit another one by using any inheritance strategy, like\r\nsetting the meta table."]}),"\n",(0,r.jsx)(s.p,{children:"Example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-lua",children:"-- imagine that this is a class in the library or in another addon\r\nlocal MyClass = {}\r\nMyClass.__index = MyClass\r\nself:addClass('MyClass', MyClass)\r\n\r\n-- then to inherit from MyClass, get the class structure with:\r\nmyClassStructure = library:getClass('MyClass')\r\n-- and then inherit from it using your preferred way to work with inheritance\r\n-- in Lua, like the setmetatable function\r\nsetmetatable(MyNewClass, myClassStructure)\n"})}),"\n",(0,r.jsx)(s.admonition,{title:"Parent class constructor limitations",type:"warning",children:(0,r.jsxs)(s.p,{children:["Due to how class instantiation works in the Stormwind Library, the parent\r\nclass constructor can be a bit tricky to call. The best way to do it is to\r\nnot use this structure if you need that or override the ",(0,r.jsx)(s.code,{children:"__construct()"})," method\r\nin the child class by doing the same thing as the parent class constructor."]})})]})}function h(e={}){const{wrapper:s}={...(0,a.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>l});var r=n(6540);const a={},t=r.createContext(a);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.4a71c675.js b/assets/js/main.4a71c675.js new file mode 100644 index 00000000..2f8bf821 --- /dev/null +++ b/assets/js/main.4a71c675.js @@ -0,0 +1,2 @@ +/*! For license information please see main.4a71c675.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8792],{8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});n(6540);var r=n(3259),o=n.n(r),a=n(4054);const i={"05307afa":[()=>n.e(2984).then(n.bind(n,9861)),"@site/docs/library-structure/import.md",9861],"056e7b99":[()=>n.e(820).then(n.bind(n,1575)),"@site/docs/resources/facades/tooltip.md",1575],"0c665981":[()=>n.e(5607).then(n.bind(n,581)),"@site/docs/development-process/deployment.md",581],"0d7809f6":[()=>n.e(8579).then(n.bind(n,8471)),"@site/docs/library-structure/docs.md",8471],"0e384e19":[()=>n.e(3976).then(n.bind(n,1512)),"@site/docs/intro.md",1512],"129bb65a":[()=>n.e(6049).then(n.bind(n,6164)),"@site/docs/resources/models/item.md",6164],"14eb3368":[()=>Promise.all([n.e(1869),n.e(6969)]).then(n.bind(n,4136)),"@theme/DocCategoryGeneratedIndexPage",4136],"14fb2de5":[()=>n.e(6692).then(n.bind(n,5085)),"@site/docs/resources/core/output.md",5085],17896441:[()=>Promise.all([n.e(1869),n.e(7922),n.e(8401)]).then(n.bind(n,3761)),"@theme/DocItem",3761],"1f391b9e":[()=>Promise.all([n.e(1869),n.e(7922),n.e(6061)]).then(n.bind(n,7973)),"@theme/MDXPage",7973],"269afbcb":[()=>n.e(7422).then(n.t.bind(n,8886,19)),"~docs/default/category-docs-tutorialsidebar-category-commands-b86.json",8886],"291c4fe2":[()=>n.e(9263).then(n.bind(n,6949)),"@site/docs/development-process/overview.md",6949],"2cff753d":[()=>n.e(8743).then(n.bind(n,6811)),"@site/docs/library-structure/luadocs.md",6811],"31b7736d":[()=>n.e(8162).then(n.bind(n,8631)),"@site/docs/resources/support/arr.md",8631],"360bc410":[()=>n.e(5180).then(n.t.bind(n,6931,19)),"~docs/default/category-docs-tutorialsidebar-category-support-cb3.json",6931],"393be207":[()=>n.e(4134).then(n.bind(n,6602)),"@site/src/pages/markdown-page.md",6602],"48ee8235":[()=>n.e(3611).then(n.bind(n,658)),"@site/docs/testing/unit-suite.md",658],"4a3cafc1":[()=>n.e(4465).then(n.bind(n,2094)),"@site/docs/resources/support/bool.md",2094],"4a65ff84":[()=>n.e(8577).then(n.bind(n,7212)),"@site/docs/resources/commands/commands-handler.md",7212],"4c4d8dbc":[()=>n.e(4625).then(n.bind(n,1745)),"@site/docs/resources/factories/item-factory.md",1745],"4d89cf04":[()=>n.e(5449).then(n.t.bind(n,2961,19)),"~docs/default/category-docs-tutorialsidebar-category-testing-2c6.json",2961],"4ee3fa9d":[()=>n.e(4430).then(n.t.bind(n,2144,19)),"~docs/default/category-docs-tutorialsidebar-category-factories-f4f.json",2144],"58f8672d":[()=>n.e(1353).then(n.bind(n,2556)),"@site/docs/resources/models/overview.md",2556],"5e95c892":[()=>n.e(9647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"643fd383":[()=>n.e(5646).then(n.bind(n,9996)),"@site/docs/resources/commands/overview.md",9996],"6871f1bd":[()=>n.e(8168).then(n.bind(n,5067)),"@site/docs/resources/models/inventory.md",5067],"6c63c787":[()=>n.e(3766).then(n.bind(n,6180)),"@site/docs/resources/core/configuration.md",6180],"6cb57f58":[()=>n.e(2529).then(n.t.bind(n,4580,19)),"~docs/default/category-docs-tutorialsidebar-category-development-process-aa3.json",4580],"6e998a5b":[()=>n.e(3362).then(n.bind(n,3310)),"@site/docs/resources/core/classes.md",3310],"715a998e":[()=>n.e(5666).then(n.bind(n,2922)),"@site/docs/development-process/discovery.md",2922],"771bc00e":[()=>n.e(3264).then(n.bind(n,9647)),"@site/docs/library-structure/overview.md",9647],"8747e7cd":[()=>n.e(6834).then(n.bind(n,5531)),"@site/docs/testing/api-mocks.md",5531],"935f2afb":[()=>n.e(8581).then(n.t.bind(n,5610,19)),"~docs/default/version-current-metadata-prop-751.json",5610],"98c488c7":[()=>n.e(567).then(n.bind(n,5324)),"@site/docs/development-process/implementation.md",5324],"99a50e39":[()=>n.e(9022).then(n.bind(n,3482)),"@site/docs/resources/models/player.md",3482],"9beb87c2":[()=>n.e(3539).then(n.bind(n,4520)),"@site/docs/changelog.md",4520],"9e6d74f8":[()=>n.e(6292).then(n.bind(n,787)),"@site/docs/resources/facades/target.md",787],a4e6c145:[()=>n.e(6400).then(n.t.bind(n,5859,19)),"~docs/default/category-docs-tutorialsidebar-category-core-df2.json",5859],a666c68b:[()=>n.e(1399).then(n.bind(n,3664)),"@site/docs/resources/models/realm.md",3664],a67d08a5:[()=>n.e(9753).then(n.t.bind(n,6948,19)),"~docs/default/category-docs-tutorialsidebar-category-library-structure-e9e.json",6948],a7bd4aaa:[()=>n.e(7098).then(n.bind(n,4532)),"@theme/DocVersionRoot",4532],a94703ab:[()=>Promise.all([n.e(1869),n.e(9048)]).then(n.bind(n,2559)),"@theme/DocRoot",2559],abd5ab83:[()=>n.e(9445).then(n.bind(n,3383)),"@site/docs/resources/core/environment.md",3383],b28425fc:[()=>n.e(4437).then(n.bind(n,7176)),"@site/docs/resources/core/addon-properties.md",7176],b951fe0d:[()=>n.e(8305).then(n.bind(n,5250)),"@site/docs/resources/commands/command.md",5250],beea1df7:[()=>n.e(812).then(n.t.bind(n,7081,19)),"~docs/default/category-docs-tutorialsidebar-category-models-a6b.json",7081],bf8bff70:[()=>n.e(1396).then(n.t.bind(n,3822,19)),"~docs/default/category-docs-tutorialsidebar-category-resources-784.json",3822],c16cc70a:[()=>n.e(1525).then(n.bind(n,8138)),"@site/docs/library-structure/build.md",8138],c4f5d8e4:[()=>Promise.all([n.e(1869),n.e(2634)]).then(n.bind(n,6467)),"@site/src/pages/index.js",6467],d5a95a95:[()=>n.e(9484).then(n.bind(n,3891)),"@site/docs/resources/facades/events.md",3891],dc503fc7:[()=>n.e(3874).then(n.bind(n,3532)),"@site/docs/testing/test-classes.md",3532],dd89b1bb:[()=>n.e(4657).then(n.t.bind(n,5747,19)),"~docs/default/category-docs-tutorialsidebar-category-facades-455.json",5747],e667d0e2:[()=>n.e(1994).then(n.bind(n,9347)),"@site/docs/resources/models/macro.md",9347],e6ba023b:[()=>n.e(6932).then(n.t.bind(n,1966,19)),"C:\\Users\\adria\\OneDrive\\Documents\\GitHub\\stormwind-library\\documentation\\.docusaurus\\docusaurus-plugin-content-docs\\default\\plugin-route-context-module-100.json",1966],f93fe7a4:[()=>n.e(976).then(n.bind(n,5402)),"@site/docs/resources/models/raid-marker.md",5402],fca92bce:[()=>n.e(4020).then(n.bind(n,1719)),"@site/docs/resources/support/str.md",1719],fd08dba1:[()=>n.e(8617).then(n.bind(n,6428)),"@site/docs/resources/models/container.md",6428],fe7a8cfb:[()=>n.e(6631).then(n.t.bind(n,8337,19)),"~docs/default/category-docs-tutorialsidebar-category-views-120.json",8337],ff11e8fd:[()=>n.e(2968).then(n.t.bind(n,4061,19)),"C:\\Users\\adria\\OneDrive\\Documents\\GitHub\\stormwind-library\\documentation\\.docusaurus\\docusaurus-plugin-content-pages\\default\\plugin-route-context-module-100.json",4061],ff51729b:[()=>n.e(3307).then(n.bind(n,3861)),"@site/docs/resources/views/window.md",3861],ff6fac3d:[()=>n.e(8462).then(n.bind(n,1648)),"@site/docs/resources/core/factory.md",1648]};var s=n(4848);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(6921),u=n(3102);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(2237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,s.jsx)(u.W,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},f=[],p=[],m=(0,c.A)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],f.push(r[1]),p.push(r[2]))})),o().Map({loading:l,loader:d,modules:f,webpack:()=>p,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 s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,s.jsx)(u.W,{value:i,children:(0,s.jsx)(a,{...o,...n})})}})}const f=[{path:"/markdown-page",component:d("/markdown-page","722"),exact:!0},{path:"/docs",component:d("/docs","017"),routes:[{path:"/docs",component:d("/docs","3a8"),routes:[{path:"/docs",component:d("/docs","5cf"),routes:[{path:"/docs/category/commands",component:d("/docs/category/commands","17f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/core",component:d("/docs/category/core","7ee"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/development-process",component:d("/docs/category/development-process","c16"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/facades",component:d("/docs/category/facades","9d1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/factories",component:d("/docs/category/factories","096"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/library-structure",component:d("/docs/category/library-structure","41a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/models",component:d("/docs/category/models","3e0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/resources",component:d("/docs/category/resources","0c2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/support",component:d("/docs/category/support","7b0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/testing",component:d("/docs/category/testing","027"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/views",component:d("/docs/category/views","bd6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/changelog",component:d("/docs/changelog","fe5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development-process/deployment",component:d("/docs/development-process/deployment","75e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development-process/discovery",component:d("/docs/development-process/discovery","edb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development-process/implementation",component:d("/docs/development-process/implementation","769"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/development-process/overview",component:d("/docs/development-process/overview","011"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro",component:d("/docs/intro","aed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/library-structure/build",component:d("/docs/library-structure/build","d0f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/library-structure/docs",component:d("/docs/library-structure/docs","4a2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/library-structure/import",component:d("/docs/library-structure/import","85d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/library-structure/luadocs",component:d("/docs/library-structure/luadocs","b3f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/library-structure/overview",component:d("/docs/library-structure/overview","f3d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/commands/command",component:d("/docs/resources/commands/command","67e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/commands/commands-handler",component:d("/docs/resources/commands/commands-handler","cfd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/commands/overview",component:d("/docs/resources/commands/overview","917"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/core/addon-properties",component:d("/docs/resources/core/addon-properties","6b8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/core/classes",component:d("/docs/resources/core/classes","8ba"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/core/configuration",component:d("/docs/resources/core/configuration","ed2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/core/environment",component:d("/docs/resources/core/environment","ec9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/core/factory",component:d("/docs/resources/core/factory","81a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/core/output",component:d("/docs/resources/core/output","023"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/facades/events",component:d("/docs/resources/facades/events","067"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/facades/target",component:d("/docs/resources/facades/target","05a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/facades/tooltip",component:d("/docs/resources/facades/tooltip","0ef"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/factories/item-factory",component:d("/docs/resources/factories/item-factory","48b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/models/container",component:d("/docs/resources/models/container","3f5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/models/inventory",component:d("/docs/resources/models/inventory","c21"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/models/item",component:d("/docs/resources/models/item","5ed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/models/macro",component:d("/docs/resources/models/macro","f5a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/models/overview",component:d("/docs/resources/models/overview","0ad"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/models/player",component:d("/docs/resources/models/player","663"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/models/raid-marker",component:d("/docs/resources/models/raid-marker","d9a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/models/realm",component:d("/docs/resources/models/realm","a7a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/support/arr",component:d("/docs/resources/support/arr","81a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/support/bool",component:d("/docs/resources/support/bool","2f2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/support/str",component:d("/docs/resources/support/str","875"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/resources/views/window",component:d("/docs/resources/views/window","76d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/testing/api-mocks",component:d("/docs/testing/api-mocks","8ad"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/testing/test-classes",component:d("/docs/testing/test-classes","d49"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/testing/unit-suite",component:d("/docs/testing/unit-suite","1ad"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/",component:d("/","6ff"),exact:!0},{path:"*",component:d("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>i});var r=n(6540),o=n(4848);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},8536:(e,t,n)=>{"use strict";var r=n(6540),o=n(5338),a=n(4625),i=n(545),s=n(8193);const l=[n(119),n(6134),n(6294),n(1043)];var c=n(8328),u=n(6347),d=n(2831),f=n(4848);function p(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var m=n(5260),g=n(4586),h=n(6025),y=n(6342),b=n(1003),v=n(2131),w=n(4090),k=n(2967),x=n(440),S=n(1463);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.A)(),r=(0,v.o)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,f.jsxs)(m.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.A)(),{pathname:r}=(0,u.zy)();return e+(0,x.applyTrailingSlash)((0,h.A)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,f.jsxs)(m.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:o}),(0,f.jsx)("link",{rel:"canonical",href:o})]})}function C(){const{i18n:{currentLocale:e}}=(0,g.A)(),{metadata:t,image:n}=(0,y.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(m.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:w.w})]}),n&&(0,f.jsx)(b.be,{image:n}),(0,f.jsx)(_,{}),(0,f.jsx)(E,{}),(0,f.jsx)(S.A,{tag:k.Cy,locale:e}),(0,f.jsx)(m.A,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const A=new Map;function T(e){if(A.has(e.pathname))return{...e,pathname:A.get(e.pathname)};if((0,d.u)(c.A,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return A.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return A.set(e.pathname,t),{...e,pathname:t}}var N=n(6125),j=n(6988),L=n(205);function O(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const P=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,L.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),O("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.u)(c.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.A.canUseDOM?O("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=O("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(P,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(u.qh,{location:t,render:()=>e})})}}const F=I,M="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${M}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

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

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var K=n(6921);const Z=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Z.has(e))(e))return!1;Z.add(e);const t=(0,d.u)(c.A,e).flatMap((e=>{return t=e.route.path,Object.entries(Y).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Q(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),R(e))},te=Object.freeze(ee),ne=Boolean(!0);if(s.A.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(i.vd,{children:(0,f.jsx)(a.Kd,{children:(0,f.jsx)(q,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},s=()=>{if(ne)r.startTransition((()=>{o.hydrateRoot(e,t,{onRecoverableError:n})}));else{const a=o.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{a.render(t)}))}};R(window.location.pathname).then(s)}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>f});var r=n(6540),o=n(4784);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"changelog","path":"/docs/changelog","sidebar":"tutorialSidebar"},{"id":"development-process/deployment","path":"/docs/development-process/deployment","sidebar":"tutorialSidebar"},{"id":"development-process/discovery","path":"/docs/development-process/discovery","sidebar":"tutorialSidebar"},{"id":"development-process/implementation","path":"/docs/development-process/implementation","sidebar":"tutorialSidebar"},{"id":"development-process/overview","path":"/docs/development-process/overview","sidebar":"tutorialSidebar"},{"id":"intro","path":"/docs/intro","sidebar":"tutorialSidebar"},{"id":"library-structure/build","path":"/docs/library-structure/build","sidebar":"tutorialSidebar"},{"id":"library-structure/docs","path":"/docs/library-structure/docs","sidebar":"tutorialSidebar"},{"id":"library-structure/import","path":"/docs/library-structure/import","sidebar":"tutorialSidebar"},{"id":"library-structure/luadocs","path":"/docs/library-structure/luadocs","sidebar":"tutorialSidebar"},{"id":"library-structure/overview","path":"/docs/library-structure/overview","sidebar":"tutorialSidebar"},{"id":"resources/commands/command","path":"/docs/resources/commands/command","sidebar":"tutorialSidebar"},{"id":"resources/commands/commands-handler","path":"/docs/resources/commands/commands-handler","sidebar":"tutorialSidebar"},{"id":"resources/commands/overview","path":"/docs/resources/commands/overview","sidebar":"tutorialSidebar"},{"id":"resources/core/addon-properties","path":"/docs/resources/core/addon-properties","sidebar":"tutorialSidebar"},{"id":"resources/core/classes","path":"/docs/resources/core/classes","sidebar":"tutorialSidebar"},{"id":"resources/core/configuration","path":"/docs/resources/core/configuration","sidebar":"tutorialSidebar"},{"id":"resources/core/environment","path":"/docs/resources/core/environment","sidebar":"tutorialSidebar"},{"id":"resources/core/factory","path":"/docs/resources/core/factory","sidebar":"tutorialSidebar"},{"id":"resources/core/output","path":"/docs/resources/core/output","sidebar":"tutorialSidebar"},{"id":"resources/facades/events","path":"/docs/resources/facades/events","sidebar":"tutorialSidebar"},{"id":"resources/facades/target","path":"/docs/resources/facades/target","sidebar":"tutorialSidebar"},{"id":"resources/facades/tooltip","path":"/docs/resources/facades/tooltip","sidebar":"tutorialSidebar"},{"id":"resources/factories/item-factory","path":"/docs/resources/factories/item-factory","sidebar":"tutorialSidebar"},{"id":"resources/models/container","path":"/docs/resources/models/container","sidebar":"tutorialSidebar"},{"id":"resources/models/inventory","path":"/docs/resources/models/inventory","sidebar":"tutorialSidebar"},{"id":"resources/models/item","path":"/docs/resources/models/item","sidebar":"tutorialSidebar"},{"id":"resources/models/macro","path":"/docs/resources/models/macro","sidebar":"tutorialSidebar"},{"id":"resources/models/overview","path":"/docs/resources/models/overview","sidebar":"tutorialSidebar"},{"id":"resources/models/player","path":"/docs/resources/models/player","sidebar":"tutorialSidebar"},{"id":"resources/models/raid-marker","path":"/docs/resources/models/raid-marker","sidebar":"tutorialSidebar"},{"id":"resources/models/realm","path":"/docs/resources/models/realm","sidebar":"tutorialSidebar"},{"id":"resources/support/arr","path":"/docs/resources/support/arr","sidebar":"tutorialSidebar"},{"id":"resources/support/bool","path":"/docs/resources/support/bool","sidebar":"tutorialSidebar"},{"id":"resources/support/str","path":"/docs/resources/support/str","sidebar":"tutorialSidebar"},{"id":"resources/views/window","path":"/docs/resources/views/window","sidebar":"tutorialSidebar"},{"id":"testing/api-mocks","path":"/docs/testing/api-mocks","sidebar":"tutorialSidebar"},{"id":"testing/test-classes","path":"/docs/testing/test-classes","sidebar":"tutorialSidebar"},{"id":"testing/unit-suite","path":"/docs/testing/unit-suite","sidebar":"tutorialSidebar"},{"id":"/category/development-process","path":"/docs/category/development-process","sidebar":"tutorialSidebar"},{"id":"/category/library-structure","path":"/docs/category/library-structure","sidebar":"tutorialSidebar"},{"id":"/category/resources","path":"/docs/category/resources","sidebar":"tutorialSidebar"},{"id":"/category/commands","path":"/docs/category/commands","sidebar":"tutorialSidebar"},{"id":"/category/core","path":"/docs/category/core","sidebar":"tutorialSidebar"},{"id":"/category/facades","path":"/docs/category/facades","sidebar":"tutorialSidebar"},{"id":"/category/factories","path":"/docs/category/factories","sidebar":"tutorialSidebar"},{"id":"/category/models","path":"/docs/category/models","sidebar":"tutorialSidebar"},{"id":"/category/support","path":"/docs/category/support","sidebar":"tutorialSidebar"},{"id":"/category/views","path":"/docs/category/views","sidebar":"tutorialSidebar"},{"id":"/category/testing","path":"/docs/category/testing","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(2654);const l=JSON.parse('{"docusaurusVersion":"3.1.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.1.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.1.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.1.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.1.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.1.1"}}}');var c=n(4848);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function f(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(6540),o=n(8193),a=n(5260),i=n(440),s=n(781),l=n(4848);function c(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,l.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,l.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,l.jsx)(u,{error:t})]})}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)(p,{fallback:()=>(0,l.jsx)(c,{error:t,tryAgain:n}),children:[(0,l.jsx)(a.A,{children:(0,l.jsx)("title",{children:"Page Error"})}),(0,l.jsx)(s.A,{children:(0,l.jsx)(c,{error:t,tryAgain:n})})]})}const f=e=>(0,l.jsx)(d,{...e});class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??f)(e)}return e??null}}},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);var r=n(545),o=n(4848);function a(e){return(0,o.jsx)(r.mg,{...e})}},8774:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(6540),o=n(4625),a=n(440),i=n(4586),s=n(6654),l=n(8193),c=n(3427),u=n(6025),d=n(4848);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.A)(),{withBaseUrl:k}=(0,u.h)(),x=(0,c.A)(),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=f||p;const _=(0,s.A)(E),C=E?.replace("pathname://","");let A=void 0!==C?(T=C,y&&(e=>e.startsWith("/"))(T)?k(T):T):void 0;var T;A&&_&&(A=(0,a.applyTrailingSlash)(A,{trailingSlash:v,baseUrl:w}));const N=(0,r.useRef)(!1),j=n?o.k2:o.N_,L=l.A.canUseIntersectionObserver,O=(0,r.useRef)(),P=()=>{N.current||null==A||(window.docusaurus.preload(A),N.current=!0)};(0,r.useEffect)((()=>(!L&&_&&null!=A&&window.docusaurus.prefetch(A),()=>{L&&O.current&&O.current.disconnect()})),[O,A,L,_]);const R=A?.startsWith("#")??!1,I=!b.target||"_self"===b.target,F=!A||!_||!I||R;return h||!R&&F||x.collectLink(A),b.id&&x.collectAnchor(b.id),F?(0,d.jsx)("a",{ref:S,href:A,...E&&!_&&{target:"_blank",rel:"noopener noreferrer"},...b}):(0,d.jsx)(j,{...b,onMouseEnter:P,onTouchStart:P,innerRef:e=>{S.current=e,L&&e&&_&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=A&&window.docusaurus.prefetch(A))}))})),O.current.observe(e))},to:A,...n&&{isActive:g,activeClassName:m}})}const p=r.forwardRef(f)},418:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>null},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>c,T:()=>l});var r=n(6540),o=n(4848);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(2654);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>o,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{A:()=>s,h:()=>i});var r=n(6540),o=n(4586),a=n(6654);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.A)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.z)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},3427:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540);n(4848);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6988);function a(){return(0,r.useContext)(o.o)}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6125);function a(){return(0,r.useContext)(o.o)}},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540);const o=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>a});var r=n(6540),o=n(4848);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>g,vT:()=>f,Gy:()=>u,HW:()=>h,ht:()=>d,r7:()=>m,jh:()=>p});var r=n(6347),o=n(4586),a=n(7065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=function(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=a.W),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function p(e){return d(e).versions}function m(e){const t=d(e);return s(t)}function g(e){const t=d(e),{pathname:n}=(0,r.zy)();return l(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(5947),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},6134:(e,t,n)=>{"use strict";n.r(t);var r=n(1765),o=n(4784);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(9700),n(2719)(`./prism-${e}`)})),delete globalThis.Prism}(r.My)},1107:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(6540);var r=n(4164),o=n(1312),a=n(6342),i=n(8774),s=n(3427);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(4848);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.A)(),{navbar:{hideOnScroll:f}}=(0,a.p)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const p=(0,o.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.A)("anchor",f?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":p,title:p,children:"\u200b"})]})}},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(4848);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},781:(e,t,n)=>{"use strict";n.d(t,{A:()=>pt});var r=n(6540),o=n(4164),a=n(7489),i=n(1003),s=n(6347),l=n(1312),c=n(5062),u=n(4848);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,l.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:r}=p();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(7559),y=n(4090);const b={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(g,{className:b.skipToContent})}var w=n(6342),k=n(5041);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.A)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.A)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.Mj)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:A.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:A.announcementBarPlaceholder}),(0,u.jsx)(C,{className:A.announcementBarContent}),a&&(0,u.jsx)(E,{onClick:n,className:A.announcementBarClose})]})}var N=n(9876),j=n(3104);var L=n(9532),O=n(5600);const P=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,N.M)(),t=(0,O.YL)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,L.ZC)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(P.Provider,{value:n,children:t})}function I(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function F(){const e=(0,r.useContext)(P);if(!e)throw new L.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,O.YL)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:I(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=F();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var D=n(5293),z=n(2303);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,z.A)(),s=(0,l.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.A)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,o.A)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,o.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const V=r.memo(H),W={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function G(e){let{className:t}=e;const n=(0,w.p)().navbar.style,r=(0,w.p)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,D.G)();return r?null:(0,u.jsx)(V,{className:t,buttonClassName:"dark"===n?W.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var q=n(3465);function Y(){return(0,u.jsx)(q.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Q(){const e=(0,N.M)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function K(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(Y,{}),(0,u.jsx)(G,{className:"margin-right--md"}),(0,u.jsx)(Q,{})]})}var Z=n(8774),X=n(6025),J=n(6654);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3186);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.A)(r),f=(0,X.A)(t),p=(0,X.A)(o,{forcePrependBaseUrl:!0}),m=a&&o&&!(0,J.A)(o),g=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,m&&(0,u.jsx)(te.A,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(Z.A,{href:l?p:o,...c,...g}):(0,u.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},...c,...g})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.A)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(1422),se=n(9169),le=n(4586);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.A)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(_e,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function fe(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),(0,u.jsxs)("li",{className:(0,o.A)("menu__list-item",{"menu__list-item--collapsed":f}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.A)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),p()},children:l.children??l.label}),(0,u.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:f,children:t.map(((e,t)=>(0,r.createElement)(_e,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function pe(e){let{mobile:t=!1,...n}=e;const r=t?fe:de;return(0,u.jsx)(r,{...n})}var me=n(2131);function ge(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const he="iconLanguage_nlXk";var ye=n(418);const be={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.A)(n,be.navbarSearchContainer),children:t})}var we=n(4070),ke=n(1754);var xe=n(5597);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.A)(),f=(0,me.o)(),{search:p,hash:m}=(0,s.zy)(),g=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],h=t?(0,l.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(pe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(ge,{className:he}),h]}),items:g})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(ve,{className:n,children:(0,u.jsx)(ye.A,{})})},dropdown:pe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.A)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.zK)(r),i=(0,ke.QB)(t,r),s=a?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>s||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.zK)(r),i=(0,ke.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,ke.Vd)(r)[0],i=t??a.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:c,hash:d}=(0,s.zy)(),f=(0,we.zK)(n),p=(0,we.jh)(n),{savePreferredVersionName:m}=(0,xe.g1)(n),g=[...o,...p.map((e=>{const t=f.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===f.activeVersion,onClick:()=>m(e.name)}})),...a],h=(0,ke.Vd)(n)[0],y=t&&g.length>1?(0,l.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,b=t&&g.length>1?void 0:Se(h).path;return g.length<=1?(0,u.jsx)(ae,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,u.jsx)(pe,{...i,mobile:t,label:y,to:b,items:g,isActive:r?()=>!1:void 0})}};function _e(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ee[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function Ce(){const e=(0,N.M)(),t=(0,w.p)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(_e,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ae(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Te(){const e=0===(0,w.p)().navbar.items.length,t=F();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(Ae,{onClick:()=>t.hide()}),t.content]})}function Ne(){const e=(0,N.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(M,{header:(0,u.jsx)(K,{}),primaryMenu:(0,u.jsx)(Ce,{}),secondaryMenu:(0,u.jsx)(Te,{})}):null}const je={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Le(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.A)("navbar-sidebar__backdrop",e.className)})}function Oe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.p)(),i=(0,N.M)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,j.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.A)("navbar","navbar--fixed-top",n&&[je.navbarHideable,!d&&je.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Le,{onClick:i.toggle}),(0,u.jsx)(Ne,{})]})}var Pe=n(440);const Re={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Ie(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Fe(e){let{error:t}=e;const n=(0,Pe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:Re.errorBoundaryError,children:n})}class Me extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const De="right";function ze(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Be(){const{toggle:e,shown:t}=(0,N.M)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(ze,{})})}const $e={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(Me,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(_e,{...e})},t)))})}function He(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function Ve(){const e=(0,N.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??De)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(He,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(Be,{}),(0,u.jsx)(Y,{}),(0,u.jsx)(Ue,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Ue,{items:r}),(0,u.jsx)(G,{className:$e.colorModeToggle}),!o&&(0,u.jsx)(ve,{children:(0,u.jsx)(ye.A,{})})]})})}function We(){return(0,u.jsx)(Oe,{children:(0,u.jsx)(Ve,{})})}function Ge(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,s=(0,X.A)(n),l=(0,X.A)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Z.A,{className:"footer__link-item",...r?{href:a?l:r}:{to:s},...i,children:[o,r&&!(0,J.A)(r)&&(0,u.jsx)(te.A,{})]})}function qe(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(Ge,{item:t})},t.href??t.to)}function Ye(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(qe,{item:e},t)))})]})}function Qe(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(Ye,{column:e},t)))})}function Ke(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ze(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(Ge,{item:t})}function Xe(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(Ze,{item:e}),t.length!==n+1&&(0,u.jsx)(Ke,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(Qe,{columns:t}):(0,u.jsx)(Xe,{links:t})}var et=n(1122);const tt={footerLogoLink:"footerLogoLink_BH7S"};function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.h)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(et.A,{className:(0,o.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,u.jsx)(Z.A,{href:t.href,className:tt.footerLogoLink,target:t.target,children:(0,u.jsx)(nt,{logo:t})}):(0,u.jsx)(nt,{logo:t})}function ot(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.A)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function it(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(at,{style:o,links:n&&n.length>0&&(0,u.jsx)(Je,{links:n}),logo:r&&(0,u.jsx)(rt,{logo:r}),copyright:t&&(0,u.jsx)(ot,{copyright:t})})}const st=r.memo(it),lt=(0,L.fM)([D.a,k.oq,j.Tv,xe.VQ,i.Jx,function(e){let{children:t}=e;return(0,u.jsx)(O.y_,{children:(0,u.jsx)(N.e,{children:(0,u.jsx)(R,{children:t})})})}]);function ct(e){let{children:t}=e;return(0,u.jsx)(lt,{children:t})}var ut=n(1107);function dt(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(ut.A,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Ie,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(Fe,{error:t})})]})})})}const ft={mainWrapper:"mainWrapper_z2l0"};function pt(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,y.J)(),(0,u.jsxs)(ct,{children:[(0,u.jsx)(i.be,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(T,{}),(0,u.jsx)(We,{}),(0,u.jsx)("div",{id:d,className:(0,o.A)(h.G.wrapper.main,ft.mainWrapper,r),children:(0,u.jsx)(a.A,{fallback:e=>(0,u.jsx)(dt,{...e}),children:t})}),!n&&(0,u.jsx)(st,{})]})}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(6540);var r=n(8774),o=n(6025),a=n(4586),i=n(6342),s=n(1122),l=n(4848);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.A)(t.src),dark:(0,o.A)(t.srcDark||t.src)},i=(0,l.jsx)(s.A,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.A)(),{navbar:{title:n,logo:s}}=(0,i.p)(),{imageClassName:u,titleClassName:d,...f}=e,p=(0,o.A)(s?.href||"/"),m=n?"":t,g=s?.alt??m;return(0,l.jsxs)(r.A,{to:p,...f,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:g,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);var r=n(5260),o=n(4848);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.A,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},1122:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});var r=n(6540),o=n(4164),a=n(2303),i=n(5293);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(4848);function c(e){let{className:t,children:n}=e;const c=(0,a.A)(),{colorMode:u}=(0,i.G)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.A)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>y,u:()=>c});var r=n(6540),o=n(8193),a=n(205),i=n(3109),s=n(4848);const l="ease-in-out";function c(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 u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function f(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return f(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function m(e){if(!o.A.canUseDOM)return e?u:d}function g(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return p({collapsibleRef:u,collapsed:n,animation:a}),(0,s.jsx)(t,{ref:u,style:c?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(f(u.current,n),i?.(n))},className:l,children:o})}function h(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.A)((()=>{t||i(!0)}),[t]),(0,a.A)((()=>{o&&c(t)}),[o,t]),o?(0,s.jsx)(g,{...n,collapsed:l}):null}function y(e){let{lazy:t,...n}=e;const r=t?h:g;return(0,s.jsx)(r,{...n})}},5041:(e,t,n)=>{"use strict";n.d(t,{Mj:()=>g,oq:()=>m});var r=n(6540),o=n(2303),a=n(9466),i=n(9532),s=n(6342),l=n(4848);const c=(0,a.Wf)("docusaurus.announcement.dismiss"),u=(0,a.Wf)("docusaurus.announcement.id"),d=()=>"true"===c.get(),f=e=>c.set(String(e)),p=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.p)(),t=(0,o.A)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{f(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&f(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(p.Provider,{value:n,children:t})}function g(){const e=(0,r.useContext)(p);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>y,a:()=>h});var r=n(6540),o=n(8193),a=n(9532),i=n(9466),s=n(6342),l=n(4848);const c=r.createContext(void 0),u="theme",d=(0,i.Wf)(u),f={light:"light",dark:"dark"},p=e=>e===f.dark?f.dark:f.light,m=e=>o.A.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),g=e=>{d.set(p(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.p)(),[o,a]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&g(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f.dark:f.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===f.dark},setLightTheme(){i(f.light)},setDarkTheme(){i(f.dark)}})),[o,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(c);if(null==e)throw new a.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},5597:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>y,g1:()=>v});var r=n(6540),o=n(4070),a=n(7065),i=n(6342),s=n(1754),l=n(9532),c=n(9466),u=n(4848);const d=e=>`docs-preferred-version-${e}`,f={save:(e,t,n)=>{(0,c.Wf)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.Wf)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.Wf)(d(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function g(){const e=(0,o.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=f.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f.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){f.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=g();return(0,u.jsx)(m.Provider,{value:n,children:t})}function y(e){let{children:t}=e;return s.C5?(0,u.jsx)(h,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function b(){const e=(0,r.useContext)(m);if(!e)throw new l.dV("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.W);const t=(0,o.ht)(e),[n,i]=b(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},6588:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,t:()=>c});var r=n(6540),o=n(9532),a=n(4848);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(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)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.dV("DocsSidebarProvider");return e}},2252:(e,t,n)=>{"use strict";n.d(t,{n:()=>s,r:()=>l});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.dV("DocsVersionProvider");return e}},9876:(e,t,n)=>{"use strict";n.d(t,{e:()=>p,M:()=>m});var r=n(6540),o=n(5600),a=n(4581),i=n(6347),s=n(9532);function l(e){!function(e){const t=(0,i.W6)(),n=(0,s._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(6342),u=n(4848);const d=r.createContext(void 0);function f(){const e=function(){const e=(0,o.YL)(),{items:t}=(0,c.p)().navbar;return 0===t.length&&!e.component}(),t=(0,a.l)(),n=!e&&"mobile"===t,[i,s]=(0,r.useState)(!1);l((()=>{if(i)return s(!1),!1}));const u=(0,r.useCallback)((()=>{s((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function p(e){let{children:t}=e;const n=f();return(0,u.jsx)(d.Provider,{value:n,children:t})}function m(){const e=r.useContext(d);if(void 0===e)throw new s.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>c,YL:()=>l,y_:()=>s});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.dV("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.dV("NavbarSecondaryMenuContentProvider");const[,s]=a,l=(0,o.Be)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>o,J:()=>a});var r=n(6540);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(6540),o=n(8193);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!o.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},1754:(e,t,n)=>{"use strict";n.d(t,{d1:()=>A,Nr:()=>m,w8:()=>b,C5:()=>f,$S:()=>g,cC:()=>p,B5:()=>C,Vd:()=>S,QB:()=>_,fW:()=>E,OF:()=>x,Y:()=>w});var r=n(6540),o=n(6347),a=n(2831),i=n(4070),s=n(5597),l=n(2252),c=n(6588);function u(e){return Array.from(new Set(e))}var d=n(9169);const f=!!i.Gy;function p(e){const t=(0,l.r)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=m(t);if(e)return e}}(e):void 0:e.href}function g(){const{pathname:e}=(0,o.zy)(),t=(0,c.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.ys)(e,t),y=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||y(e.items,t))}function v(e,t){switch(e.type){case"category":return b(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||b(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function k(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.ys)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.ys)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function x(){const e=(0,c.t)(),{pathname:t}=(0,o.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?k({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,s.g1)(e),o=(0,i.r7)(e);return(0,r.useMemo)((()=>u([t,n,o].filter(Boolean))),[t,n,o])}function E(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function _(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function C(e){let{route:t}=e;const n=(0,o.zy)(),r=(0,l.r)(),i=t.routes,s=i.find((e=>(0,o.B6)(n.pathname,e)));if(!s)return null;const c=s.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,a.v)(i),sidebarName:c,sidebarItems:u}}function A(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!m(e)))}},1003:(e,t,n)=>{"use strict";n.d(t,{e3:()=>p,be:()=>d,Jx:()=>m});var r=n(6540),o=n(4164),a=n(5260),i=n(3102);function s(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(6025),c=n(4586);var u=n(4848);function d(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const s=function(e){const{siteConfig:t}=(0,c.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.h)(),f=o?d(o,{absolute:!0}):void 0;return(0,u.jsxs)(a.A,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),f&&(0,u.jsx)("meta",{property:"og:image",content:f}),f&&(0,u.jsx)("meta",{name:"twitter:image",content:f}),i]})}const f=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(f),s=(0,o.A)(i,t);return(0,u.jsxs)(f.Provider,{value:s,children:[(0,u.jsx)(a.A,{children:(0,u.jsx)("html",{className:s})}),n]})}function m(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(p,{className:(0,o.A)(r,a),children:t})}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>c,ZC:()=>s,_q:()=>i,dV:()=>l,fM:()=>u});var r=n(6540),o=n(205),a=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,o.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,o.A)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>s,ys:()=>i});var r=n(6540),o=n(8328),a=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>f,Tv:()=>c,gk:()=>p});var r=n(6540),o=n(8193),a=n(2303),i=(n(205),n(9532)),s=n(4848);const l=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,s.jsx)(l.Provider,{value:n,children:t})}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const d=()=>o.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(d()),a=(0,i._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,a.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},2967:(e,t,n)=>{"use strict";n.d(t,{Cy:()=>r,tU:()=>o});n(4586);const r="default";function o(e,t){return`docs-${e}-${t}`}},9466:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>l});n(6540);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=a(t?.persistence);return null===n?s:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),o=n(6347),a=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.A)(),{pathname:l}=(0,o.zy)(),c=(0,a.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),o=n(6347),a=n(9532);function i(e){const t=(0,o.zy)(),n=(0,a.ZC)(t),i=(0,a._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var r=n(4586);function o(){return(0,r.A)().siteConfig.themeConfig}},2983:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},440:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(2983);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(253);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>C,yJ:()=>p,sC:()=>T,AO:()=>f});var r=n(8168);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(1561);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function p(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.A)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,g(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(4363),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=p(n);o&&o!==m&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),g=l(n),h=0;h{"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},119:(e,t,n)=>{"use strict";n.r(t)},1043:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=f(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},5302:(e,t,n)=>{var r=n(4634);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],f=n[1],p=n.index;if(s+=e.slice(i,p),i=p+d.length,f)s+=f[1];else{var m=e[i],g=n[2],h=n[3],y=n[4],b=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=g&&null!=m&&m!==g,x="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||u,_=y||b;r.push({name:h||a++,prefix:g||"",delimiter:E,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:_?c(_):w?".*":"[^"+l(E)+"]+?"})}}return i{Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},64:()=>{Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[^z]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+(?:\.[a-f\d]*)?(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|(?:\.\d*)?(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/}},9700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=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(s){for(var l=0;l=a.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],f="string"==typeof c?c:c.content,p=t(r,u),m=f.indexOf(p);if(m>-1){++o;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(m+p.length),b=[];g&&b.push.apply(b,i([g])),b.push(h),y&&b.push.apply(b,i([y])),"string"==typeof c?s.splice.apply(s,[l,1].concat(b)):c.content=b}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},2719:(e,t,n)=>{var r={"./prism-json":2514,"./prism-lua":64};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=2719},2694:(e,t,n)=>{"use strict";var r=n(6925);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),o=n(9982);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n