From 30063ac1a7a1b25a714f708cd12c4494fa3af96b Mon Sep 17 00:00:00 2001 From: michaelwidmer-vg <161344715+michaelwidmer-vg@users.noreply.github.com> Date: Wed, 24 Jul 2024 05:38:06 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20vertigis?= =?UTF-8?q?/studio-dev-center@3f02dfe49fae8819c5c9e1b0df61f132775a9389=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 4 +- assets/js/4e713346.193e4dc0.js | 1 + assets/js/783f63b0.99c0387c.js | 1 + ...36074.13ab8300.js => 92c36074.7939a944.js} | 2 +- assets/js/935f2afb.c1b0de41.js | 1 - assets/js/935f2afb.f0bbb792.js | 1 + assets/js/97f8b990.743b1099.js | 1 + ...45aa9.550c4b65.js => a9c45aa9.4867f06f.js} | 2 +- assets/js/aba4ef12.2727e61e.js | 1 + assets/js/aba4ef12.688e6993.js | 1 - assets/js/b22f7342.bffc7de8.js | 1 + assets/js/dacf7858.21bcc8f0.js | 1 - assets/js/dacf7858.fe814dfb.js | 1 + assets/js/e247f73f.c5d93a28.js | 1 + assets/js/ec17ee32.2d61d10e.js | 1 + assets/js/ec17ee32.74bd5c2d.js | 1 - assets/js/fdede3e2.e3aee35d.js | 1 - assets/js/fdede3e2.e5914b87.js | 1 + assets/js/ff37a7c5.a44fc651.js | 1 + assets/js/ff37a7c5.fae363a5.js | 1 - assets/js/main.2577f733.js | 2 + ...CENSE.txt => main.2577f733.js.LICENSE.txt} | 0 assets/js/main.900f8b19.js | 2 - assets/js/runtime~main.88cf53db.js | 1 - assets/js/runtime~main.d0011a02.js | 1 + .../03/22/new-workflow-element-api/index.html | 4 +- .../mobile-generic-event-listener/index.html | 4 +- blog/2023/06/20/inline-sdk/index.html | 4 +- blog/archive/index.html | 4 +- blog/index.html | 4 +- blog/tags/index.html | 4 +- blog/tags/inline/index.html | 4 +- blog/tags/mobile/index.html | 4 +- blog/tags/web/index.html | 4 +- blog/tags/workflow/index.html | 4 +- .../api-argument-definitions/index.html | 4 +- .../api-commands-operations-events/index.html | 4 +- .../mobile/api-commands-operations/index.html | 4 +- docs/mobile/api-components/index.html | 4 +- docs/mobile/api-events/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../configuration-layout-reference/index.html | 4 +- docs/mobile/configuration-theme/index.html | 4 +- docs/mobile/key-concepts/index.html | 4 +- docs/mobile/overview/index.html | 4 +- .../mobile/sdk-commands-operations/index.html | 4 +- .../index.html | 4 +- docs/mobile/sdk-components-create/index.html | 4 +- .../index.html | 4 +- .../mobile/sdk-components-overview/index.html | 4 +- .../sdk-components-reference/index.html | 4 +- docs/mobile/sdk-components-styling/index.html | 4 +- .../index.html | 4 +- .../sdk-dependency-injection/index.html | 4 +- docs/mobile/sdk-deployment/index.html | 4 +- .../sdk-edit-layout-app-config/index.html | 4 +- docs/mobile/sdk-events-overview/index.html | 4 +- docs/mobile/sdk-events-reference/index.html | 4 +- .../sdk-internationalization/index.html | 4 +- docs/mobile/sdk-memory-leaks/index.html | 4 +- docs/mobile/sdk-overview/index.html | 4 +- .../sdk-quickstart-reference/index.html | 4 +- docs/mobile/sdk-samples/index.html | 4 +- docs/mobile/sdk-services-create/index.html | 4 +- docs/mobile/sdk-services-overview/index.html | 4 +- docs/mobile/sdk-services-reference/index.html | 4 +- .../snippets/cleanup-handles/index.html | 4 +- .../snippets/designer-callout/index.html | 4 +- docs/mobile/snippets/follow-along/index.html | 4 +- .../prereqs-layout-config-editing/index.html | 4 +- .../snippets/quickstart-prereqs/index.html | 4 +- .../relevant-workflow-samples/index.html | 4 +- .../snippets/translation-callout/index.html | 4 +- .../snippets/tweak-layout-config/index.html | 4 +- .../tutorial-add-medium-layout/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../tutorial-display-custom-form/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- docs/reporting/key-concepts/index.html | 4 +- docs/reporting/overview/index.html | 4 +- docs/reporting/sdk-js-overview/index.html | 4 +- docs/reporting/sdk-overview/index.html | 4 +- docs/reporting/sdk-py-overview/index.html | 4 +- .../snippets/designer-callout/index.html | 4 +- .../tutorial-arcgis-notebook/index.html | 4 +- docs/snippets/app-item/index.html | 4 +- docs/snippets/autofac-mobile/index.html | 4 +- docs/snippets/workflow-url/index.html | 4 +- docs/web/api-argument-definitions/index.html | 4 +- .../api-commands-operations-events/index.html | 4 +- docs/web/api-commands-operations/index.html | 4 +- docs/web/api-components/index.html | 4 +- docs/web/api-events/index.html | 4 +- docs/web/api-objects/index.html | 4 +- docs/web/app-initialization-events/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../configuration-layout-reference/index.html | 4 +- docs/web/configuration-theme/index.html | 4 +- docs/web/key-concepts/index.html | 4 +- docs/web/overview/index.html | 4 +- docs/web/sdk-adding-icons/index.html | 4 +- docs/web/sdk-commands-operations/index.html | 4 +- docs/web/sdk-components-create/index.html | 4 +- docs/web/sdk-components-hooks/index.html | 4 +- .../index.html | 4 +- .../sdk-components-interactions/index.html | 4 +- .../index.html | 4 +- docs/web/sdk-components-overview/index.html | 4 +- docs/web/sdk-components-reference/index.html | 4 +- docs/web/sdk-components-styling/index.html | 4 +- docs/web/sdk-components-ui-context/index.html | 4 +- docs/web/sdk-deployment/index.html | 4 +- docs/web/sdk-events-overview/index.html | 4 +- docs/web/sdk-events-reference/index.html | 4 +- docs/web/sdk-internationalization/index.html | 4 +- docs/web/sdk-overview/index.html | 4 +- .../index.html | 4 +- docs/web/sdk-samples/index.html | 4 +- .../sdk-serializable-properties/index.html | 4 +- docs/web/sdk-services-create/index.html | 4 +- .../index.html | 4 +- docs/web/sdk-services-overview/index.html | 4 +- docs/web/sdk-services-reference/index.html | 4 +- docs/web/snippets/designer-callout/index.html | 4 +- docs/web/snippets/follow-along/index.html | 4 +- .../snippets/framework-components/index.html | 4 +- .../snippets/prereqs-custom-code/index.html | 4 +- .../prereqs-layout-config-editing/index.html | 4 +- .../snippets/translation-callout/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../tutorial-command-can-execute/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../tutorial-display-custom-form/index.html | 4 +- docs/web/tutorial-events-subscribe/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- docs/web/tutorial-import-map-model/index.html | 4 +- .../tutorial-internationalization/index.html | 4 +- .../index.html | 4 +- .../tutorial-service-dynamic-data/index.html | 4 +- docs/workflow/key-concepts/index.html | 4 +- docs/workflow/overview/index.html | 4 +- .../sdk-desktop-create-activity/index.html | 47 +++++ docs/workflow/sdk-desktop-overview/index.html | 29 ++++ docs/workflow/sdk-desktop-wrapping/index.html | 28 +++ .../sdk-mobile-activity-reference/index.html | 6 +- .../sdk-mobile-create-activity/index.html | 6 +- .../sdk-mobile-form-reference/index.html | 6 +- docs/workflow/sdk-mobile-overview/index.html | 8 +- .../index.html | 6 +- .../index.html | 8 +- .../index.html | 29 ++++ docs/workflow/sdk-net-overview/index.html | 6 +- .../sdk-net-register-activities/index.html | 10 +- .../sdk-server-create-activity/index.html | 6 +- docs/workflow/sdk-server-overview/index.html | 8 +- .../index.html | 6 +- .../sdk-web-activity-block-tags/index.html | 4 +- .../sdk-web-activity-reference/index.html | 4 +- .../sdk-web-create-activity/index.html | 4 +- .../sdk-web-create-element/index.html | 4 +- .../sdk-web-form-reference/index.html | 4 +- .../index.html | 4 +- docs/workflow/sdk-web-overview/index.html | 4 +- .../index.html | 4 +- .../snippets/designer-callout/index.html | 4 +- .../snippets/prereqs-desktop/index.html | 24 +++ .../snippets/prereqs-mobile/index.html | 4 +- .../snippets/prereqs-server/index.html | 4 +- docs/workflow/snippets/prereqs-web/index.html | 4 +- .../sdk-net-limitations-warning/index.html | 4 +- .../index.html | 8 +- .../index.html | 6 +- .../index.html | 6 +- .../index.html | 6 +- .../tutorial-web-add-layer-to-map/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../tutorial-web-qr-code-activity/index.html | 4 +- img/desktop-designer-run-activity.png | Bin 0 -> 29545 bytes ...sktop-pro-run-create-activity-workflow.png | Bin 0 -> 328864 bytes index.html | 4 +- search/index.html | 4 +- sitemap.xml | 2 +- workflows/desktop-create-activity.json | 164 ++++++++++++++++++ 211 files changed, 715 insertions(+), 389 deletions(-) create mode 100644 assets/js/4e713346.193e4dc0.js create mode 100644 assets/js/783f63b0.99c0387c.js rename assets/js/{92c36074.13ab8300.js => 92c36074.7939a944.js} (99%) delete mode 100644 assets/js/935f2afb.c1b0de41.js create mode 100644 assets/js/935f2afb.f0bbb792.js create mode 100644 assets/js/97f8b990.743b1099.js rename assets/js/{a9c45aa9.550c4b65.js => a9c45aa9.4867f06f.js} (98%) create mode 100644 assets/js/aba4ef12.2727e61e.js delete mode 100644 assets/js/aba4ef12.688e6993.js create mode 100644 assets/js/b22f7342.bffc7de8.js delete mode 100644 assets/js/dacf7858.21bcc8f0.js create mode 100644 assets/js/dacf7858.fe814dfb.js create mode 100644 assets/js/e247f73f.c5d93a28.js create mode 100644 assets/js/ec17ee32.2d61d10e.js delete mode 100644 assets/js/ec17ee32.74bd5c2d.js delete mode 100644 assets/js/fdede3e2.e3aee35d.js create mode 100644 assets/js/fdede3e2.e5914b87.js create mode 100644 assets/js/ff37a7c5.a44fc651.js delete mode 100644 assets/js/ff37a7c5.fae363a5.js create mode 100644 assets/js/main.2577f733.js rename assets/js/{main.900f8b19.js.LICENSE.txt => main.2577f733.js.LICENSE.txt} (100%) delete mode 100644 assets/js/main.900f8b19.js delete mode 100644 assets/js/runtime~main.88cf53db.js create mode 100644 assets/js/runtime~main.d0011a02.js create mode 100644 docs/workflow/sdk-desktop-create-activity/index.html create mode 100644 docs/workflow/sdk-desktop-overview/index.html create mode 100644 docs/workflow/sdk-desktop-wrapping/index.html create mode 100644 docs/workflow/sdk-net-integrating-the-arcgis-pro-api/index.html create mode 100644 docs/workflow/snippets/prereqs-desktop/index.html create mode 100644 img/desktop-designer-run-activity.png create mode 100644 img/desktop-pro-run-create-activity-workflow.png create mode 100644 workflows/desktop-create-activity.json diff --git a/404.html b/404.html index 91f1c2ee1..a79e36725 100644 --- a/404.html +++ b/404.html @@ -13,8 +13,8 @@ - - + +
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/4e713346.193e4dc0.js b/assets/js/4e713346.193e4dc0.js new file mode 100644 index 000000000..c3f1e3a4b --- /dev/null +++ b/assets/js/4e713346.193e4dc0.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[3258],{5380:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var r=n(7624),i=n(2172);const o={title:"Wrapping activity inputs and outputs",sidebar_label:"Input and output wrapping",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Desktop"},s=void 0,a={id:"workflow/sdk-desktop-wrapping",title:"Wrapping activity inputs and outputs",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Desktop",source:"@site/docs/workflow/sdk-desktop-wrapping.mdx",sourceDirName:"workflow",slug:"/workflow/sdk-desktop-wrapping",permalink:"/docs/workflow/sdk-desktop-wrapping",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/sdk-desktop-wrapping.mdx",tags:[],version:"current",frontMatter:{title:"Wrapping activity inputs and outputs",sidebar_label:"Input and output wrapping",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Desktop"},sidebar:"workflow",previous:{title:"Create an Activity",permalink:"/docs/workflow/sdk-desktop-create-activity"},next:{title:"SDK Overview",permalink:"/docs/workflow/sdk-server-overview"}},p={},c=[{value:"Unwrapping inputs",id:"unwrapping-inputs",level:3}];function u(e){const t={a:"a",code:"code",h3:"h3",p:"p",pre:"pre",...(0,i.M)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:["The implementation of the Workflow Runtime uses mechanisms to internally stay agnostic of used APIs. To achieve this, all ",(0,r.jsx)(t.a,{href:"https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/built-in-types",children:"non-builtin types"})," in the output of an activity should get wrapped in a ",(0,r.jsx)(t.code,{children:"WrapperBase"}),":"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-cs",children:'public Task> Execute(IDictionary inputs, IActivityContext context)\n{\n // activity work, e.g. creating a feature\n\n IDictionary outputs = new Dictionary();\n\n // highlight-start\n outputs.Add("feature", new CustomActivityWrapper(createdFeature));\n // highlight-end\n\n return Task.FromResult(outputs);\n}\n'})}),"\n",(0,r.jsxs)(t.p,{children:["where an implementation of a WrapperBase at least offers a ",(0,r.jsx)(t.code,{children:"Unwrap"})," method:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-cs",children:"private class CustomActivityWrapper : WrapperBase\n{\n //internals of the wrapper\n\n public override object Unwrap()\n {\n return _actualObject;\n }\n}\n"})}),"\n",(0,r.jsx)(t.h3,{id:"unwrapping-inputs",children:"Unwrapping inputs"}),"\n",(0,r.jsxs)(t.p,{children:["Thus all inputs in an activity should get unwrapped before working with it. On Studio Desktop you may cast the input either to ",(0,r.jsx)(t.code,{children:"WrapperBase"})," or ",(0,r.jsx)(t.code,{children:"IServiceProvider"})," - both methods are equivalent:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-cs",children:'public Task> Execute(IDictionary inputs, IActivityContext context)\n{\n // Variant 1 IServiceProvider:\n IServiceProvider provider = inputs["feature"] as IServiceProvider;\n Row actualObject = (Row)provider.GetService(typeof(Row));\n\n // Variant 2 WrapperBase:\n WrapperBase wrapper = inputs["feature"] as WrapperBase;\n Row actualObject2 = (Row)wrapper.Unwrap();\n}\n'})})]})}function d(e={}){const{wrapper:t}={...(0,i.M)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},2172:(e,t,n)=>{n.d(t,{I:()=>a,M:()=>s});var r=n(1504);const i={},o=r.createContext(i);function s(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(i):e.components||i:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/783f63b0.99c0387c.js b/assets/js/783f63b0.99c0387c.js new file mode 100644 index 000000000..2987351db --- /dev/null +++ b/assets/js/783f63b0.99c0387c.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[1868],{400:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>i,metadata:()=>d,toc:()=>a});var r=o(7624),n=o(2172);const i={},s=void 0,d={id:"workflow/snippets/prereqs-desktop",title:"prereqs-desktop",description:"While extending VertiGIS Studio Workflow for Desktop can easily be achieved, you require an installed Workflow runtime module to make your custom activities work with VertiGIS Studio Desktop.",source:"@site/docs/workflow/snippets/prereqs-desktop.mdx",sourceDirName:"workflow/snippets",slug:"/workflow/snippets/prereqs-desktop",permalink:"/docs/workflow/snippets/prereqs-desktop",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/snippets/prereqs-desktop.mdx",tags:[],version:"current",frontMatter:{}},c={},a=[];function p(e){const t={a:"a",admonition:"admonition",p:"p",...(0,n.M)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.admonition,{title:"Important",type:"info",children:(0,r.jsx)(t.p,{children:"While extending VertiGIS Studio Workflow for Desktop can easily be achieved, you require an installed Workflow runtime module to make your custom activities work with VertiGIS Studio Desktop."})}),"\n",(0,r.jsxs)(t.p,{children:["To ease using your custom activities when authoring of Workflows with Workflow Designer, you may create method stubs for your activities and publish them to make them, as described in ",(0,r.jsx)(t.a,{href:"/docs/workflow/sdk-net-register-activities",children:"the corresponding chapter"}),"."]}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsxs)(t.p,{children:["A working knowledge of ",(0,r.jsx)(t.a,{href:"https://docs.microsoft.com/en-ca/dotnet/csharp/",children:"C#"})," and ",(0,r.jsx)(t.a,{href:"https://dotnet.microsoft.com/platform/dotnet-standard",children:".NET Standard"})," is recommended before extending Workflow for VertiGIS Studio Desktop"]})})]})}function l(e={}){const{wrapper:t}={...(0,n.M)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},2172:(e,t,o)=>{o.d(t,{I:()=>d,M:()=>s});var r=o(1504);const n={},i=r.createContext(n);function s(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/92c36074.13ab8300.js b/assets/js/92c36074.7939a944.js similarity index 99% rename from assets/js/92c36074.13ab8300.js rename to assets/js/92c36074.7939a944.js index c0bafea39..f0547ffdb 100644 --- a/assets/js/92c36074.13ab8300.js +++ b/assets/js/92c36074.7939a944.js @@ -1 +1 @@ -"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[1868,7884,5940],{548:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var i=n(7624),r=n(2172);const o={},a=void 0,s={id:"snippets/workflow-url",title:"workflow-url",description:"https://apps.vertigisstudio.com/workflow/designer/#workflow=",source:"@site/docs/snippets/workflow-url.mdx",sourceDirName:"snippets",slug:"/snippets/workflow-url",permalink:"/docs/snippets/workflow-url",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/snippets/workflow-url.mdx",tags:[],version:"current",frontMatter:{}},l={},c=[];function u(e){const t={a:"a",p:"p",...(0,r.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("div",{class:"alert alert--secondary",role:"alert",children:(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://apps.vertigisstudio.com/workflow/designer/#workflow=",children:"https://apps.vertigisstudio.com/workflow/designer/#workflow="}),"\n",(0,i.jsx)("b",{children:"44010fc421dd4659b74fb921e09ba594"})]})}),"\n",(0,i.jsx)("br",{})]})}function d(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},1404:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var i=n(7624),r=n(2172);const o={},a=void 0,s={id:"workflow/snippets/prereqs-mobile",title:"prereqs-mobile",description:"Extending VertiGIS Studio Workflow for Mobile requires development and deployment of a custom VertiGIS Studio Mobile Application using the VertiGIS Studio Mobile SDK",source:"@site/docs/workflow/snippets/prereqs-mobile.mdx",sourceDirName:"workflow/snippets",slug:"/workflow/snippets/prereqs-mobile",permalink:"/docs/workflow/snippets/prereqs-mobile",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/snippets/prereqs-mobile.mdx",tags:[],version:"current",frontMatter:{}},l={},c=[];function u(e){const t={a:"a",admonition:"admonition",p:"p",...(0,r.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.admonition,{title:"Important",type:"info",children:(0,i.jsxs)(t.p,{children:["Extending VertiGIS Studio Workflow for Mobile requires development and deployment of a custom VertiGIS Studio Mobile Application using the ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-overview",children:"VertiGIS Studio Mobile SDK"})]})}),"\n",(0,i.jsxs)(t.p,{children:["Follow the instructions in the ",(0,i.jsx)(t.a,{href:"/docs/workflow/sdk-mobile-overview",children:"VertiGIS Studio Mobile SDK"})," page to set up the environment for extending Workflow for VertiGIS Studio Mobile."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["A working knowledge of ",(0,i.jsx)(t.a,{href:"https://docs.microsoft.com/en-ca/dotnet/csharp/",children:"C#"})," and ",(0,i.jsx)(t.a,{href:"https://dotnet.microsoft.com/platform/dotnet-standard",children:".NET Standard"})," is recommended before extending Workflow for VertiGIS Studio Mobile"]})})]})}function d(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},1668:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>d,default:()=>g,frontMatter:()=>u,metadata:()=>p,toc:()=>m});var i=n(7624),r=n(2172),o=n(1268),a=n(5388),s=n(1404),l=n(964),c=n(548);const u={title:"Show a Callout on the Map with an Activity",description:"VertiGIS Studio Workflow - Access the map and show a callout through a custom activity."},d=void 0,p={id:"workflow/tutorial-mobile-show-map-callout",title:"Show a Callout on the Map with an Activity",description:"VertiGIS Studio Workflow - Access the map and show a callout through a custom activity.",source:"@site/docs/workflow/tutorial-mobile-show-map-callout.mdx",sourceDirName:"workflow",slug:"/workflow/tutorial-mobile-show-map-callout",permalink:"/docs/workflow/tutorial-mobile-show-map-callout",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/tutorial-mobile-show-map-callout.mdx",tags:[],version:"current",frontMatter:{title:"Show a Callout on the Map with an Activity",description:"VertiGIS Studio Workflow - Access the map and show a callout through a custom activity."},sidebar:"workflow",previous:{title:"Implement an Activity that Calculates a Logarithm",permalink:"/docs/workflow/tutorial-mobile-calculate-logarithm-activity"},next:{title:"Implement an Loading Indicator Form Element",permalink:"/docs/workflow/tutorial-mobile-activity-indicator-form-element"}},h={},m=[{value:"Prerequisites",id:"prerequisites",level:2},...s.toc,{value:"Set up the Activity",id:"set-up-the-activity",level:2},{value:"Access the MapProviderBase",id:"access-the-mapproviderbase",level:2},{value:"Load the MapView",id:"load-the-mapview",level:2},{value:"Add a Callout at the Map Center",id:"add-a-callout-at-the-map-center",level:2},{value:"Test your Activity",id:"test-your-activity",level:2},...c.toc];function f(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,r.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:["Some activities may need access to the map embedded in the VertiGIS Studio Mobile Application. The ",(0,i.jsx)(t.code,{children:"MapProviderBase"})," class can be injected in an activity and used to access the ",(0,i.jsx)(t.a,{href:"https://developers.arcgis.com/net/latest/uwp/api-reference/html/T_Esri_ArcGISRuntime_Mapping_Map.htm",children:"Map"})," and ",(0,i.jsx)(t.a,{href:"https://developers.arcgis.com/net/latest/uwp/api-reference/html/T_Esri_ArcGISRuntime_UI_Controls_MapView.htm",children:"MapView"})," for the application."]}),"\n",(0,i.jsx)(t.p,{children:"This article will walk you through accessing the map from an activity and displaying a callout at the map center point."}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(s.default,{}),"\n",(0,i.jsx)(t.h2,{id:"set-up-the-activity",children:"Set up the Activity"}),"\n",(0,i.jsx)(t.p,{children:"First, the basic activity needs to be setup and registered. Below is an example of an activity setup to take text to display in the map callout."}),"\n",(0,i.jsx)(t.admonition,{type:"tip",children:(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/docs/workflow/sdk-mobile-activity-reference",children:"Learn more about custom activities"}),"."]})}),"\n",(0,i.jsxs)(o.c,{defaultValue:"activity",values:[{label:"Activity",value:"activity"},{label:"Registration",value:"registration"}],children:[(0,i.jsx)(a.c,{value:"activity",children:(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/PlaceCalloutAtCenter.cs"',children:'using App1.Workflow;\nusing VertiGIS.Mobile.Composition;\nusing VertiGIS.Workflow.GIS.ArcGISRuntime;\nusing VertiGIS.Workflow.Runtime;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\n[assembly: Export(typeof(PlaceCalloutAtCenter))]\nnamespace App1.Workflow\n{\n public class PlaceCalloutAtCenter : IActivityHandler\n {\n public static string Action { get; } = "uuid:::PlaceCalloutAtCenter";\n\n public async Task> Execute(IDictionary inputs, IActivityContext context)\n {\n // highlight-next-line\n var calloutText = (string)inputs["calloutText"];\n\n return new Dictionary();\n }\n }\n}\n'})})}),(0,i.jsx)(a.c,{value:"registration",children:(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/ActivityLoader.cs"',children:'using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing App1.Workflow;\nusing VertiGIS.Mobile.Composition;\nusing VertiGIS.Workflow.Runtime;\nusing VertiGIS.Workflow.Runtime.Definition;\nusing VertiGIS.Workflow.Runtime.Execution;\n\n[assembly: Export(typeof(ActivityLoader), SingleInstance = true, AsImplementedInterfaces = true)]\nnamespace App1.Workflow\n{\n public class ActivityLoader : IActivityHandlerFactory\n {\n /// \n /// Gets a mapping of action names to implementations of s.\n /// \n private Dictionary> RegisteredActivities { get; } = new Dictionary>();\n\n public ActivityLoader(Func placeCalloutAtCenterFactory)\n {\n RegisteredActivities[PlaceCalloutAtCenter.Action] = placeCalloutAtCenterFactory;\n }\n\n /// \n /// Creates an .\n /// \n /// The name of the action to create.\n /// The cancellation token.\n /// The for the program.\n /// The activity handler for the given action.\n public Task Create(string action, CancellationToken token, ProgramInspector inspector = null)\n {\n if (action == null || token.IsCancellationRequested)\n {\n return Task.FromResult(null);\n }\n\n if (RegisteredActivities.TryGetValue(action, out Func handlerType))\n {\n return Task.FromResult(handlerType());\n }\n else\n {\n return Task.FromResult(null);\n }\n }\n }\n}\n\n\n'})})})]}),"\n",(0,i.jsxs)(t.h2,{id:"access-the-mapproviderbase",children:["Access the ",(0,i.jsx)(t.code,{children:"MapProviderBase"})]}),"\n",(0,i.jsxs)(t.p,{children:["Accessing the map for the application uses the built-in ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-dependency-injection",children:"dependency injection pattern"})," to inject a ",(0,i.jsx)(t.code,{children:"MapProviderBase"})," class which exposes the ",(0,i.jsx)(t.a,{href:"https://developers.arcgis.com/net/latest/uwp/api-reference/html/T_Esri_ArcGISRuntime_Mapping_Map.htm",children:"Map"})," and ",(0,i.jsx)(t.a,{href:"https://developers.arcgis.com/net/latest/uwp/api-reference/html/T_Esri_ArcGISRuntime_UI_Controls_MapView.htm",children:"MapView"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["To inject the MapProviderBase, add a new ",(0,i.jsx)(t.a,{href:"https://autofaccn.readthedocs.io/en/latest/resolve/relationships.html#dynamic-instantiation-func-b",children:"Autofac factory"})," property that injects a ",(0,i.jsx)(t.code,{children:"MapProviderBase"})," into your custom activity."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/PlaceCalloutAtCenter.cs"',children:'using App1.Workflow;\nusing VertiGIS.Mobile.Composition;\nusing VertiGIS.Workflow.GIS.ArcGISRuntime;\nusing VertiGIS.Workflow.Runtime;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\n[assembly: Export(typeof(PlaceCalloutAtCenter))]\nnamespace App1.Workflow\n{\n public class PlaceCalloutAtCenter : IActivityHandler\n {\n public static string Action { get; } = "uuid:::PlaceCalloutAtCenter";\n\n // highlight-start\n [ProviderFactoryAttribute(typeof(MapProviderBase))]\n public Func MapProviderFactory { get; set; }\n // highlight-end\n\n public async Task> Execute(IDictionary inputs, IActivityContext context)\n {\n var calloutText = (string)inputs["calloutText"];\n\n return new Dictionary();\n }\n }\n}\n'})}),"\n",(0,i.jsxs)(t.h2,{id:"load-the-mapview",children:["Load the ",(0,i.jsx)(t.code,{children:"MapView"})]}),"\n",(0,i.jsxs)(t.p,{children:["Next, we need to load the ",(0,i.jsx)(t.code,{children:"MapView"})," from the ",(0,i.jsx)(t.code,{children:"MapProviderFactory"}),"."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/PlaceCalloutAtCenter.cs"',children:'using App1.Workflow;\nusing Esri.ArcGISRuntime.Mapping;\nusing Esri.ArcGISRuntime.Xamarin.Forms;\nusing VertiGIS.Mobile.Composition;\nusing VertiGIS.Workflow.GIS.ArcGISRuntime;\nusing VertiGIS.Workflow.Runtime;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing VertiGIS.Mobile.Infrastructure.Workflow;\n\n[assembly: Export(typeof(PlaceCalloutAtCenter))]\nnamespace App1.Workflow\n{\n public class PlaceCalloutAtCenter : IActivityHandler\n {\n public static string Action { get; } = "uuid:::PlaceCalloutAtCenter";\n\n [ProviderFactoryAttribute(typeof(MapProviderBase))]\n public Func MapProviderFactory { get; set; }\n\n public async Task> Execute(IDictionary inputs, IActivityContext context)\n {\n var calloutText = (string)inputs["calloutText"];\n\n // highlight-start\n // Get an instance of the MapProvider\n var mapProvider = MapProviderFactory();\n // Ensure the map has loaded\n await mapProvider.Load();\n // ArcGIS runtime Map\n Map map = mapProvider.Map;\n // ArcGIS runtime MapView\n MapView mapView = (MapView)((WorkflowMapProvider)mapProvider).View;\n // highlight-end\n\n return new Dictionary();\n }\n }\n}\n'})}),"\n",(0,i.jsx)(t.h2,{id:"add-a-callout-at-the-map-center",children:"Add a Callout at the Map Center"}),"\n",(0,i.jsxs)(t.p,{children:["Finally, we can use the ",(0,i.jsx)(t.code,{children:"MapView"})," to get the map center and add a callout with the user's text."]}),"\n",(0,i.jsx)(t.admonition,{type:"tip",children:(0,i.jsxs)(t.p,{children:["Operations related to UI activities have to run in Xamarin's ",(0,i.jsx)(t.a,{href:"https://docs.microsoft.com/en-us/xamarin/essentials/main-thread",children:"main thread"}),", else they will throw an error."]})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/PlaceCalloutAtCenter.cs"',children:'using App1.Workflow;\nusing VertiGIS.Mobile.Composition;\nusing Esri.ArcGISRuntime.Geometry;\nusing Esri.ArcGISRuntime.UI;\nusing Esri.ArcGISRuntime.Mapping;\nusing Esri.ArcGISRuntime.Xamarin.Forms;\nusing VertiGIS.Workflow.GIS.ArcGISRuntime;\nusing VertiGIS.Workflow.Runtime;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing VertiGIS.Mobile.Infrastructure.Workflow;\n\n[assembly: Export(typeof(PlaceCalloutAtCenter))]\nnamespace App1.Workflow\n{\n public class PlaceCalloutAtCenter : IActivityHandler\n {\n public static string Action { get; } = "uuid:::PlaceCalloutAtCenter";\n\n [ProviderFactoryAttribute(typeof(MapProviderBase))]\n public Func MapProviderFactory { get; set; }\n\n public async Task> Execute(IDictionary inputs, IActivityContext context)\n {\n var calloutText = (string)inputs["calloutText"];\n\n // Get an instance of the MapProvider\n dynamic mapProvider = MapProviderFactory();\n // Ensure the map has loaded\n await mapProvider.Load();\n // ArcGIS runtime Map\n Map map = mapProvider.Map;\n // ArcGIS runtime MapView\n MapView mapView = (MapView)((WorkflowMapProvider)mapProvider).View;\n\n // highlight-start\n Xamarin.Essentials.MainThread.BeginInvokeOnMainThread(() =>\n {\n var currentEnvelope = (Envelope)mapView.GetCurrentViewpoint(Esri.ArcGISRuntime.Mapping.ViewpointType.BoundingGeometry).TargetGeometry;\n\n mapView.ShowCalloutAt(currentEnvelope.GetCenter(), new CalloutDefinition("Hey!", $"Listen! {calloutText}"));\n });\n // highlight-end\n\n return new Dictionary();\n }\n }\n}\n'})}),"\n",(0,i.jsx)(t.h2,{id:"test-your-activity",children:"Test your Activity"}),"\n",(0,i.jsxs)(t.p,{children:["Now you can ",(0,i.jsx)(t.a,{href:"https://docs.vertigisstudio.com/mobileviewer/latest/admin-help/Default.htm#gmv/designer/add-a-workflow-to-an-app.htm",children:"build a workflow for VertiGIS Studio Mobile"})," that uses your new activity!"]}),"\n",(0,i.jsx)(t.admonition,{type:"tip",children:(0,i.jsxs)(t.p,{children:["If you want your custom activity to show up with a friendly user interface in VertiGIS Studio Workflow Designer, check out ",(0,i.jsx)(t.a,{href:"/docs/workflow/sdk-net-register-activities",children:"Registering .NET Activities with VertiGIS Studio Workflow Designer"}),"."]})}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/activities/run-activity.htm%3FTocPath%3DActivities%7CActivity%2520Reference%7C_____167",children:(0,i.jsx)(t.code,{children:"RunActivity"})})," activity can be used to execute your activity by the name defined in ",(0,i.jsx)(t.code,{children:"PlaceCalloutAtCenter.cs"})," (for this example, ",(0,i.jsx)(t.code,{children:"uuid:::PlaceCalloutAtCenter"}),")."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)("p",{children:[(0,i.jsxs)(t.p,{children:["You can"," "]}),(0,i.jsx)("a",{href:(0,l.c)("workflows/mobile-show-map-callout.json"),download:"show-map-callout.json",target:"_blank",children:(0,i.jsx)(t.p,{children:"download this demo workflow"})})," ",(0,i.jsx)(t.p,{children:"that runs the custom activity and"}),(0,i.jsxs)("a",{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/import-export-workflows.htm",target:"_blank",children:[" ",(0,i.jsxs)(t.p,{children:["import it into the VertiGIS Studio Workflow Designer."," "]})]})]})}),"\n",(0,i.jsx)(t.p,{children:"Next you need to run the workflow you just created in your VertiGIS Studio Mobile SDK project."}),"\n",(0,i.jsx)(t.p,{children:"You can do this by configuring the layout and app config to run a workflow. You will need to copy the ID of the the workflow you created into the app.json"}),"\n",(0,i.jsx)(c.default,{}),"\n",(0,i.jsxs)(o.c,{defaultValue:"config",values:[{label:"App Config",value:"config"},{label:"Layout",value:"layout"},{label:"UI",value:"ui"}],children:[(0,i.jsx)(a.c,{value:"config",children:(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="App1/App1/app.json"',children:'{\n "schemaVersion": "1.0",\n "items": [\n {\n "$type": "layout",\n "id": "desktop-layout",\n "url": "resource://layout-large.xml",\n "tags": ["large"]\n },\n {\n "$type": "workflow",\n "id": "custom-workflow",\n "title": "Custom Workflow",\n "target": "#taskbar",\n // highlight-next-line\n "portalItem": ""\n },\n {\n "$type": "menu",\n "id": "iwtm",\n "items": [\n {\n "title": "Run Custom Workflow",\n "isEnabled": true,\n "iconId": "workflow",\n "action": {\n "name": "workflow.run",\n "arguments": {\n "id": "custom-workflow"\n }\n }\n }\n ]\n }\n ]\n}\n'})})}),(0,i.jsx)(a.c,{value:"layout",children:(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-xml",metastring:'title="App1/App1/layout-large.xml"',children:'\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\n'})})}),(0,i.jsx)(a.c,{value:"ui",children:(0,i.jsx)("img",{src:(0,l.c)("img/workflow-mobile-show-map-callout.png")})})]})]})}function g(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(f,{...e})}):f(e)}},5388:(e,t,n)=>{n.d(t,{c:()=>a});n(1504);var i=n(4064);const r={tabItem:"tabItem_Ymn6"};var o=n(7624);function a({children:e,hidden:t,className:n}){return(0,o.jsx)("div",{role:"tabpanel",className:(0,i.c)(r.tabItem,n),hidden:t,children:e})}},1268:(e,t,n)=>{n.d(t,{c:()=>k});var i=n(1504),r=n(4064),o=n(3943),a=n(5592),s=n(5288),l=n(632),c=n(7128),u=n(1148);function d(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,i.useMemo)((()=>{const e=t??function(e){return d(e).map((({props:{value:e,label:t,attributes:n,default:i}})=>({value:e,label:t,attributes:n,default:i})))}(n);return function(e){const t=(0,c.w)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h({value:e,tabValues:t}){return t.some((t=>t.value===e))}function m({queryString:e=!1,groupId:t}){const n=(0,a.Uz)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:e,groupId:t});return[(0,l._M)(r),(0,i.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace({...n.location,search:t.toString()})}),[r,n])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=p(e),[a,l]=(0,i.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!h({value:e,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=t.find((e=>e.default))??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[c,d]=m({queryString:n,groupId:r}),[f,g]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,u.IN)(t);return[n,(0,i.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),w=(()=>{const e=c??f;return h({value:e,tabValues:o})?e:null})();(0,s.c)((()=>{w&&l(w)}),[w]);return{selectedValue:a,selectValue:(0,i.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),g(e)}),[d,g,o]),tabValues:o}}var g=n(3664);const w={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(7624);function y({className:e,block:t,selectedValue:n,selectValue:i,tabValues:a}){const s=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.MV)(),c=e=>{const t=e.currentTarget,r=s.indexOf(t),o=a[r].value;o!==n&&(l(t),i(o))},u=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=s.indexOf(e.currentTarget)+1;t=s[n]??s[0];break}case"ArrowLeft":{const n=s.indexOf(e.currentTarget)-1;t=s[n]??s[s.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.c)("tabs",{"tabs--block":t},e),children:a.map((({value:e,label:t,attributes:i})=>(0,v.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>s.push(e),onKeyDown:u,onClick:c,...i,className:(0,r.c)("tabs__item",w.tabItem,i?.className,{"tabs__item--active":n===e}),children:t??e},e)))})}function x({lazy:e,children:t,selectedValue:n}){const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=r.find((e=>e.props.value===n));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,i.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function b(e){const t=f(e);return(0,v.jsxs)("div",{className:(0,r.c)("tabs-container",w.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(x,{...e,...t})]})}function k(e){const t=(0,g.c)();return(0,v.jsx)(b,{...e,children:d(e.children)},String(t))}},2172:(e,t,n)=>{n.d(t,{I:()=>s,M:()=>a});var i=n(1504);const r={},o=i.createContext(r);function a(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[9488,7884,5940],{548:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var i=n(7624),r=n(2172);const o={},a=void 0,s={id:"snippets/workflow-url",title:"workflow-url",description:"https://apps.vertigisstudio.com/workflow/designer/#workflow=",source:"@site/docs/snippets/workflow-url.mdx",sourceDirName:"snippets",slug:"/snippets/workflow-url",permalink:"/docs/snippets/workflow-url",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/snippets/workflow-url.mdx",tags:[],version:"current",frontMatter:{}},l={},c=[];function u(e){const t={a:"a",p:"p",...(0,r.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("div",{class:"alert alert--secondary",role:"alert",children:(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://apps.vertigisstudio.com/workflow/designer/#workflow=",children:"https://apps.vertigisstudio.com/workflow/designer/#workflow="}),"\n",(0,i.jsx)("b",{children:"44010fc421dd4659b74fb921e09ba594"})]})}),"\n",(0,i.jsx)("br",{})]})}function d(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},1404:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var i=n(7624),r=n(2172);const o={},a=void 0,s={id:"workflow/snippets/prereqs-mobile",title:"prereqs-mobile",description:"Extending VertiGIS Studio Workflow for Mobile requires development and deployment of a custom VertiGIS Studio Mobile Application using the VertiGIS Studio Mobile SDK",source:"@site/docs/workflow/snippets/prereqs-mobile.mdx",sourceDirName:"workflow/snippets",slug:"/workflow/snippets/prereqs-mobile",permalink:"/docs/workflow/snippets/prereqs-mobile",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/snippets/prereqs-mobile.mdx",tags:[],version:"current",frontMatter:{}},l={},c=[];function u(e){const t={a:"a",admonition:"admonition",p:"p",...(0,r.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.admonition,{title:"Important",type:"info",children:(0,i.jsxs)(t.p,{children:["Extending VertiGIS Studio Workflow for Mobile requires development and deployment of a custom VertiGIS Studio Mobile Application using the ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-overview",children:"VertiGIS Studio Mobile SDK"})]})}),"\n",(0,i.jsxs)(t.p,{children:["Follow the instructions in the ",(0,i.jsx)(t.a,{href:"/docs/workflow/sdk-mobile-overview",children:"VertiGIS Studio Mobile SDK"})," page to set up the environment for extending Workflow for VertiGIS Studio Mobile."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["A working knowledge of ",(0,i.jsx)(t.a,{href:"https://docs.microsoft.com/en-ca/dotnet/csharp/",children:"C#"})," and ",(0,i.jsx)(t.a,{href:"https://dotnet.microsoft.com/platform/dotnet-standard",children:".NET Standard"})," is recommended before extending Workflow for VertiGIS Studio Mobile"]})})]})}function d(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},1668:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>d,default:()=>g,frontMatter:()=>u,metadata:()=>p,toc:()=>m});var i=n(7624),r=n(2172),o=n(1268),a=n(5388),s=n(1404),l=n(964),c=n(548);const u={title:"Show a Callout on the Map with an Activity",description:"VertiGIS Studio Workflow - Access the map and show a callout through a custom activity."},d=void 0,p={id:"workflow/tutorial-mobile-show-map-callout",title:"Show a Callout on the Map with an Activity",description:"VertiGIS Studio Workflow - Access the map and show a callout through a custom activity.",source:"@site/docs/workflow/tutorial-mobile-show-map-callout.mdx",sourceDirName:"workflow",slug:"/workflow/tutorial-mobile-show-map-callout",permalink:"/docs/workflow/tutorial-mobile-show-map-callout",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/tutorial-mobile-show-map-callout.mdx",tags:[],version:"current",frontMatter:{title:"Show a Callout on the Map with an Activity",description:"VertiGIS Studio Workflow - Access the map and show a callout through a custom activity."},sidebar:"workflow",previous:{title:"Implement an Activity that Calculates a Logarithm",permalink:"/docs/workflow/tutorial-mobile-calculate-logarithm-activity"},next:{title:"Implement an Loading Indicator Form Element",permalink:"/docs/workflow/tutorial-mobile-activity-indicator-form-element"}},h={},m=[{value:"Prerequisites",id:"prerequisites",level:2},...s.toc,{value:"Set up the Activity",id:"set-up-the-activity",level:2},{value:"Access the MapProviderBase",id:"access-the-mapproviderbase",level:2},{value:"Load the MapView",id:"load-the-mapview",level:2},{value:"Add a Callout at the Map Center",id:"add-a-callout-at-the-map-center",level:2},{value:"Test your Activity",id:"test-your-activity",level:2},...c.toc];function f(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,r.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:["Some activities may need access to the map embedded in the VertiGIS Studio Mobile Application. The ",(0,i.jsx)(t.code,{children:"MapProviderBase"})," class can be injected in an activity and used to access the ",(0,i.jsx)(t.a,{href:"https://developers.arcgis.com/net/latest/uwp/api-reference/html/T_Esri_ArcGISRuntime_Mapping_Map.htm",children:"Map"})," and ",(0,i.jsx)(t.a,{href:"https://developers.arcgis.com/net/latest/uwp/api-reference/html/T_Esri_ArcGISRuntime_UI_Controls_MapView.htm",children:"MapView"})," for the application."]}),"\n",(0,i.jsx)(t.p,{children:"This article will walk you through accessing the map from an activity and displaying a callout at the map center point."}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(s.default,{}),"\n",(0,i.jsx)(t.h2,{id:"set-up-the-activity",children:"Set up the Activity"}),"\n",(0,i.jsx)(t.p,{children:"First, the basic activity needs to be setup and registered. Below is an example of an activity setup to take text to display in the map callout."}),"\n",(0,i.jsx)(t.admonition,{type:"tip",children:(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/docs/workflow/sdk-mobile-activity-reference",children:"Learn more about custom activities"}),"."]})}),"\n",(0,i.jsxs)(o.c,{defaultValue:"activity",values:[{label:"Activity",value:"activity"},{label:"Registration",value:"registration"}],children:[(0,i.jsx)(a.c,{value:"activity",children:(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/PlaceCalloutAtCenter.cs"',children:'using App1.Workflow;\nusing VertiGIS.Mobile.Composition;\nusing VertiGIS.Workflow.GIS.ArcGISRuntime;\nusing VertiGIS.Workflow.Runtime;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\n[assembly: Export(typeof(PlaceCalloutAtCenter))]\nnamespace App1.Workflow\n{\n public class PlaceCalloutAtCenter : IActivityHandler\n {\n public static string Action { get; } = "uuid:::PlaceCalloutAtCenter";\n\n public async Task> Execute(IDictionary inputs, IActivityContext context)\n {\n // highlight-next-line\n var calloutText = (string)inputs["calloutText"];\n\n return new Dictionary();\n }\n }\n}\n'})})}),(0,i.jsx)(a.c,{value:"registration",children:(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/ActivityLoader.cs"',children:'using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing App1.Workflow;\nusing VertiGIS.Mobile.Composition;\nusing VertiGIS.Workflow.Runtime;\nusing VertiGIS.Workflow.Runtime.Definition;\nusing VertiGIS.Workflow.Runtime.Execution;\n\n[assembly: Export(typeof(ActivityLoader), SingleInstance = true, AsImplementedInterfaces = true)]\nnamespace App1.Workflow\n{\n public class ActivityLoader : IActivityHandlerFactory\n {\n /// \n /// Gets a mapping of action names to implementations of s.\n /// \n private Dictionary> RegisteredActivities { get; } = new Dictionary>();\n\n public ActivityLoader(Func placeCalloutAtCenterFactory)\n {\n RegisteredActivities[PlaceCalloutAtCenter.Action] = placeCalloutAtCenterFactory;\n }\n\n /// \n /// Creates an .\n /// \n /// The name of the action to create.\n /// The cancellation token.\n /// The for the program.\n /// The activity handler for the given action.\n public Task Create(string action, CancellationToken token, ProgramInspector inspector = null)\n {\n if (action == null || token.IsCancellationRequested)\n {\n return Task.FromResult(null);\n }\n\n if (RegisteredActivities.TryGetValue(action, out Func handlerType))\n {\n return Task.FromResult(handlerType());\n }\n else\n {\n return Task.FromResult(null);\n }\n }\n }\n}\n\n\n'})})})]}),"\n",(0,i.jsxs)(t.h2,{id:"access-the-mapproviderbase",children:["Access the ",(0,i.jsx)(t.code,{children:"MapProviderBase"})]}),"\n",(0,i.jsxs)(t.p,{children:["Accessing the map for the application uses the built-in ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-dependency-injection",children:"dependency injection pattern"})," to inject a ",(0,i.jsx)(t.code,{children:"MapProviderBase"})," class which exposes the ",(0,i.jsx)(t.a,{href:"https://developers.arcgis.com/net/latest/uwp/api-reference/html/T_Esri_ArcGISRuntime_Mapping_Map.htm",children:"Map"})," and ",(0,i.jsx)(t.a,{href:"https://developers.arcgis.com/net/latest/uwp/api-reference/html/T_Esri_ArcGISRuntime_UI_Controls_MapView.htm",children:"MapView"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["To inject the MapProviderBase, add a new ",(0,i.jsx)(t.a,{href:"https://autofaccn.readthedocs.io/en/latest/resolve/relationships.html#dynamic-instantiation-func-b",children:"Autofac factory"})," property that injects a ",(0,i.jsx)(t.code,{children:"MapProviderBase"})," into your custom activity."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/PlaceCalloutAtCenter.cs"',children:'using App1.Workflow;\nusing VertiGIS.Mobile.Composition;\nusing VertiGIS.Workflow.GIS.ArcGISRuntime;\nusing VertiGIS.Workflow.Runtime;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\n[assembly: Export(typeof(PlaceCalloutAtCenter))]\nnamespace App1.Workflow\n{\n public class PlaceCalloutAtCenter : IActivityHandler\n {\n public static string Action { get; } = "uuid:::PlaceCalloutAtCenter";\n\n // highlight-start\n [ProviderFactoryAttribute(typeof(MapProviderBase))]\n public Func MapProviderFactory { get; set; }\n // highlight-end\n\n public async Task> Execute(IDictionary inputs, IActivityContext context)\n {\n var calloutText = (string)inputs["calloutText"];\n\n return new Dictionary();\n }\n }\n}\n'})}),"\n",(0,i.jsxs)(t.h2,{id:"load-the-mapview",children:["Load the ",(0,i.jsx)(t.code,{children:"MapView"})]}),"\n",(0,i.jsxs)(t.p,{children:["Next, we need to load the ",(0,i.jsx)(t.code,{children:"MapView"})," from the ",(0,i.jsx)(t.code,{children:"MapProviderFactory"}),"."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/PlaceCalloutAtCenter.cs"',children:'using App1.Workflow;\nusing Esri.ArcGISRuntime.Mapping;\nusing Esri.ArcGISRuntime.Xamarin.Forms;\nusing VertiGIS.Mobile.Composition;\nusing VertiGIS.Workflow.GIS.ArcGISRuntime;\nusing VertiGIS.Workflow.Runtime;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing VertiGIS.Mobile.Infrastructure.Workflow;\n\n[assembly: Export(typeof(PlaceCalloutAtCenter))]\nnamespace App1.Workflow\n{\n public class PlaceCalloutAtCenter : IActivityHandler\n {\n public static string Action { get; } = "uuid:::PlaceCalloutAtCenter";\n\n [ProviderFactoryAttribute(typeof(MapProviderBase))]\n public Func MapProviderFactory { get; set; }\n\n public async Task> Execute(IDictionary inputs, IActivityContext context)\n {\n var calloutText = (string)inputs["calloutText"];\n\n // highlight-start\n // Get an instance of the MapProvider\n var mapProvider = MapProviderFactory();\n // Ensure the map has loaded\n await mapProvider.Load();\n // ArcGIS runtime Map\n Map map = mapProvider.Map;\n // ArcGIS runtime MapView\n MapView mapView = (MapView)((WorkflowMapProvider)mapProvider).View;\n // highlight-end\n\n return new Dictionary();\n }\n }\n}\n'})}),"\n",(0,i.jsx)(t.h2,{id:"add-a-callout-at-the-map-center",children:"Add a Callout at the Map Center"}),"\n",(0,i.jsxs)(t.p,{children:["Finally, we can use the ",(0,i.jsx)(t.code,{children:"MapView"})," to get the map center and add a callout with the user's text."]}),"\n",(0,i.jsx)(t.admonition,{type:"tip",children:(0,i.jsxs)(t.p,{children:["Operations related to UI activities have to run in Xamarin's ",(0,i.jsx)(t.a,{href:"https://docs.microsoft.com/en-us/xamarin/essentials/main-thread",children:"main thread"}),", else they will throw an error."]})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/PlaceCalloutAtCenter.cs"',children:'using App1.Workflow;\nusing VertiGIS.Mobile.Composition;\nusing Esri.ArcGISRuntime.Geometry;\nusing Esri.ArcGISRuntime.UI;\nusing Esri.ArcGISRuntime.Mapping;\nusing Esri.ArcGISRuntime.Xamarin.Forms;\nusing VertiGIS.Workflow.GIS.ArcGISRuntime;\nusing VertiGIS.Workflow.Runtime;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing VertiGIS.Mobile.Infrastructure.Workflow;\n\n[assembly: Export(typeof(PlaceCalloutAtCenter))]\nnamespace App1.Workflow\n{\n public class PlaceCalloutAtCenter : IActivityHandler\n {\n public static string Action { get; } = "uuid:::PlaceCalloutAtCenter";\n\n [ProviderFactoryAttribute(typeof(MapProviderBase))]\n public Func MapProviderFactory { get; set; }\n\n public async Task> Execute(IDictionary inputs, IActivityContext context)\n {\n var calloutText = (string)inputs["calloutText"];\n\n // Get an instance of the MapProvider\n dynamic mapProvider = MapProviderFactory();\n // Ensure the map has loaded\n await mapProvider.Load();\n // ArcGIS runtime Map\n Map map = mapProvider.Map;\n // ArcGIS runtime MapView\n MapView mapView = (MapView)((WorkflowMapProvider)mapProvider).View;\n\n // highlight-start\n Xamarin.Essentials.MainThread.BeginInvokeOnMainThread(() =>\n {\n var currentEnvelope = (Envelope)mapView.GetCurrentViewpoint(Esri.ArcGISRuntime.Mapping.ViewpointType.BoundingGeometry).TargetGeometry;\n\n mapView.ShowCalloutAt(currentEnvelope.GetCenter(), new CalloutDefinition("Hey!", $"Listen! {calloutText}"));\n });\n // highlight-end\n\n return new Dictionary();\n }\n }\n}\n'})}),"\n",(0,i.jsx)(t.h2,{id:"test-your-activity",children:"Test your Activity"}),"\n",(0,i.jsxs)(t.p,{children:["Now you can ",(0,i.jsx)(t.a,{href:"https://docs.vertigisstudio.com/mobileviewer/latest/admin-help/Default.htm#gmv/designer/add-a-workflow-to-an-app.htm",children:"build a workflow for VertiGIS Studio Mobile"})," that uses your new activity!"]}),"\n",(0,i.jsx)(t.admonition,{type:"tip",children:(0,i.jsxs)(t.p,{children:["If you want your custom activity to show up with a friendly user interface in VertiGIS Studio Workflow Designer, check out ",(0,i.jsx)(t.a,{href:"/docs/workflow/sdk-net-register-activities",children:"Registering .NET Activities with VertiGIS Studio Workflow Designer"}),"."]})}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/activities/run-activity.htm%3FTocPath%3DActivities%7CActivity%2520Reference%7C_____167",children:(0,i.jsx)(t.code,{children:"RunActivity"})})," activity can be used to execute your activity by the name defined in ",(0,i.jsx)(t.code,{children:"PlaceCalloutAtCenter.cs"})," (for this example, ",(0,i.jsx)(t.code,{children:"uuid:::PlaceCalloutAtCenter"}),")."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)("p",{children:[(0,i.jsxs)(t.p,{children:["You can"," "]}),(0,i.jsx)("a",{href:(0,l.c)("workflows/mobile-show-map-callout.json"),download:"show-map-callout.json",target:"_blank",children:(0,i.jsx)(t.p,{children:"download this demo workflow"})})," ",(0,i.jsx)(t.p,{children:"that runs the custom activity and"}),(0,i.jsxs)("a",{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/import-export-workflows.htm",target:"_blank",children:[" ",(0,i.jsxs)(t.p,{children:["import it into the VertiGIS Studio Workflow Designer."," "]})]})]})}),"\n",(0,i.jsx)(t.p,{children:"Next you need to run the workflow you just created in your VertiGIS Studio Mobile SDK project."}),"\n",(0,i.jsx)(t.p,{children:"You can do this by configuring the layout and app config to run a workflow. You will need to copy the ID of the the workflow you created into the app.json"}),"\n",(0,i.jsx)(c.default,{}),"\n",(0,i.jsxs)(o.c,{defaultValue:"config",values:[{label:"App Config",value:"config"},{label:"Layout",value:"layout"},{label:"UI",value:"ui"}],children:[(0,i.jsx)(a.c,{value:"config",children:(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="App1/App1/app.json"',children:'{\n "schemaVersion": "1.0",\n "items": [\n {\n "$type": "layout",\n "id": "desktop-layout",\n "url": "resource://layout-large.xml",\n "tags": ["large"]\n },\n {\n "$type": "workflow",\n "id": "custom-workflow",\n "title": "Custom Workflow",\n "target": "#taskbar",\n // highlight-next-line\n "portalItem": ""\n },\n {\n "$type": "menu",\n "id": "iwtm",\n "items": [\n {\n "title": "Run Custom Workflow",\n "isEnabled": true,\n "iconId": "workflow",\n "action": {\n "name": "workflow.run",\n "arguments": {\n "id": "custom-workflow"\n }\n }\n }\n ]\n }\n ]\n}\n'})})}),(0,i.jsx)(a.c,{value:"layout",children:(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-xml",metastring:'title="App1/App1/layout-large.xml"',children:'\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\n'})})}),(0,i.jsx)(a.c,{value:"ui",children:(0,i.jsx)("img",{src:(0,l.c)("img/workflow-mobile-show-map-callout.png")})})]})]})}function g(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(f,{...e})}):f(e)}},5388:(e,t,n)=>{n.d(t,{c:()=>a});n(1504);var i=n(4064);const r={tabItem:"tabItem_Ymn6"};var o=n(7624);function a({children:e,hidden:t,className:n}){return(0,o.jsx)("div",{role:"tabpanel",className:(0,i.c)(r.tabItem,n),hidden:t,children:e})}},1268:(e,t,n)=>{n.d(t,{c:()=>k});var i=n(1504),r=n(4064),o=n(3943),a=n(5592),s=n(5288),l=n(632),c=n(7128),u=n(1148);function d(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,i.useMemo)((()=>{const e=t??function(e){return d(e).map((({props:{value:e,label:t,attributes:n,default:i}})=>({value:e,label:t,attributes:n,default:i})))}(n);return function(e){const t=(0,c.w)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h({value:e,tabValues:t}){return t.some((t=>t.value===e))}function m({queryString:e=!1,groupId:t}){const n=(0,a.Uz)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:e,groupId:t});return[(0,l._M)(r),(0,i.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace({...n.location,search:t.toString()})}),[r,n])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=p(e),[a,l]=(0,i.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!h({value:e,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=t.find((e=>e.default))??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[c,d]=m({queryString:n,groupId:r}),[f,g]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,u.IN)(t);return[n,(0,i.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),w=(()=>{const e=c??f;return h({value:e,tabValues:o})?e:null})();(0,s.c)((()=>{w&&l(w)}),[w]);return{selectedValue:a,selectValue:(0,i.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),g(e)}),[d,g,o]),tabValues:o}}var g=n(3664);const w={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(7624);function y({className:e,block:t,selectedValue:n,selectValue:i,tabValues:a}){const s=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.MV)(),c=e=>{const t=e.currentTarget,r=s.indexOf(t),o=a[r].value;o!==n&&(l(t),i(o))},u=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=s.indexOf(e.currentTarget)+1;t=s[n]??s[0];break}case"ArrowLeft":{const n=s.indexOf(e.currentTarget)-1;t=s[n]??s[s.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.c)("tabs",{"tabs--block":t},e),children:a.map((({value:e,label:t,attributes:i})=>(0,v.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>s.push(e),onKeyDown:u,onClick:c,...i,className:(0,r.c)("tabs__item",w.tabItem,i?.className,{"tabs__item--active":n===e}),children:t??e},e)))})}function x({lazy:e,children:t,selectedValue:n}){const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=r.find((e=>e.props.value===n));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,i.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function b(e){const t=f(e);return(0,v.jsxs)("div",{className:(0,r.c)("tabs-container",w.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(x,{...e,...t})]})}function k(e){const t=(0,g.c)();return(0,v.jsx)(b,{...e,children:d(e.children)},String(t))}},2172:(e,t,n)=>{n.d(t,{I:()=>s,M:()=>a});var i=n(1504);const r={},o=i.createContext(r);function a(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.c1b0de41.js b/assets/js/935f2afb.c1b0de41.js deleted file mode 100644 index 5fcbe2848..000000000 --- a/assets/js/935f2afb.c1b0de41.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[5696],{5988:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"web":[{"type":"link","label":"Overview","href":"/docs/web/overview","docId":"web/overview","unlisted":false},{"type":"link","label":"Key Concepts","href":"/docs/web/key-concepts","docId":"web/key-concepts","unlisted":false},{"type":"category","label":"Configuration","items":[{"type":"category","label":"Layout","items":[{"type":"link","label":"Getting Started","href":"/docs/web/configuration-layout-getting-started","docId":"web/configuration-layout-getting-started","unlisted":false},{"type":"link","label":"Layout Reference","href":"/docs/web/configuration-layout-reference","docId":"web/configuration-layout-reference","unlisted":false},{"type":"link","label":"Advanced Model Binding","href":"/docs/web/configuration-advanced-model-binding","docId":"web/configuration-advanced-model-binding","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"App Config","items":[{"type":"link","label":"Getting Started","href":"/docs/web/configuration-app-config-getting-started","docId":"web/configuration-app-config-getting-started","unlisted":false},{"type":"link","label":"App Config Reference","href":"/docs/web/configuration-app-config-reference","docId":"web/configuration-app-config-reference","unlisted":false},{"type":"link","label":"Configuring the Theme","href":"/docs/web/configuration-theme","docId":"web/configuration-theme","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Commands and Operations","href":"/docs/web/configuration-commands-operations","docId":"web/configuration-commands-operations","unlisted":false},{"type":"link","label":"App Initialization Events","href":"/docs/web/app-initialization-events","docId":"web/app-initialization-events","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Configure Button Click Behavior","href":"/docs/web/tutorial-configure-button-click","docId":"web/tutorial-configure-button-click","unlisted":false},{"type":"link","label":"Change the Default Behavior of Components","href":"/docs/web/tutorial-change-default-behavior","docId":"web/tutorial-change-default-behavior","unlisted":false},{"type":"link","label":"Customize the Theme","href":"/docs/web/tutorial-customize-application-theme","docId":"web/tutorial-customize-application-theme","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"VertiGIS Studio Workflow","items":[{"type":"link","label":"Run a Workflow from App Config","href":"/docs/web/tutorial-run-workflow-app-config","docId":"web/tutorial-run-workflow-app-config","unlisted":false},{"type":"link","label":"Display a Custom Form","href":"/docs/web/tutorial-display-custom-form","docId":"web/tutorial-display-custom-form","unlisted":false},{"type":"link","label":"Change Default Map Click Behavior","href":"/docs/web/tutorial-change-default-map-click-behavior","docId":"web/tutorial-change-default-map-click-behavior","unlisted":false},{"type":"link","label":"Implement a Custom Activity","href":"/docs/web/tutorial-implement-custom-activity","docId":"web/tutorial-implement-custom-activity","unlisted":false},{"type":"link","label":"Implement a Custom Form Element","href":"/docs/web/tutorial-implement-custom-form-elements","docId":"web/tutorial-implement-custom-form-elements","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"VertiGIS Studio Web SDK","items":[{"type":"link","label":"SDK Overview","href":"/docs/web/sdk-overview","docId":"web/sdk-overview","unlisted":false},{"type":"link","label":"SDK Samples","href":"/docs/web/sdk-samples","docId":"web/sdk-samples","unlisted":false},{"type":"link","label":"Deployment","href":"/docs/web/sdk-deployment","docId":"web/sdk-deployment","unlisted":false},{"type":"category","label":"Components","items":[{"type":"link","label":"Overview","href":"/docs/web/sdk-components-overview","docId":"web/sdk-components-overview","unlisted":false},{"type":"link","label":"Create a Component","href":"/docs/web/sdk-components-create","docId":"web/sdk-components-create","unlisted":false},{"type":"link","label":"Component Reference","href":"/docs/web/sdk-components-reference","docId":"web/sdk-components-reference","unlisted":false},{"type":"link","label":"Component Hooks","href":"/docs/web/sdk-components-hooks","docId":"web/sdk-components-hooks","unlisted":false},{"type":"link","label":"UIContext","href":"/docs/web/sdk-components-ui-context","docId":"web/sdk-components-ui-context","unlisted":false},{"type":"link","label":"Component Interactions","href":"/docs/web/sdk-components-interactions","docId":"web/sdk-components-interactions","unlisted":false},{"type":"link","label":"Service Injection","href":"/docs/web/sdk-components-injecting-services","docId":"web/sdk-components-injecting-services","unlisted":false},{"type":"link","label":"Component Styling","href":"/docs/web/sdk-components-styling","docId":"web/sdk-components-styling","unlisted":false},{"type":"link","label":"Internationalization","href":"/docs/web/sdk-components-internationalization","docId":"web/sdk-components-internationalization","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Services","items":[{"type":"link","label":"Overview","href":"/docs/web/sdk-services-overview","docId":"web/sdk-services-overview","unlisted":false},{"type":"link","label":"Create a Service","href":"/docs/web/sdk-services-create","docId":"web/sdk-services-create","unlisted":false},{"type":"link","label":"Service Reference","href":"/docs/web/sdk-services-reference","docId":"web/sdk-services-reference","unlisted":false},{"type":"link","label":"Service Injection","href":"/docs/web/sdk-services-injecting-services","docId":"web/sdk-services-injecting-services","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Events","items":[{"type":"link","label":"Overview","href":"/docs/web/sdk-events-overview","docId":"web/sdk-events-overview","unlisted":false},{"type":"link","label":"Events Reference","href":"/docs/web/sdk-events-reference","docId":"web/sdk-events-reference","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Commands and Operations","href":"/docs/web/sdk-commands-operations","docId":"web/sdk-commands-operations","unlisted":false},{"type":"link","label":"Serializable Properties","href":"/docs/web/sdk-serializable-properties","docId":"web/sdk-serializable-properties","unlisted":false},{"type":"link","label":"Adding Icons","href":"/docs/web/sdk-adding-icons","docId":"web/sdk-adding-icons","unlisted":false},{"type":"link","label":"Internationalization","href":"/docs/web/sdk-internationalization","docId":"web/sdk-internationalization","unlisted":false},{"type":"link","label":"Reference Third Party Libraries","href":"/docs/web/sdk-reference-third-party-libraries","docId":"web/sdk-reference-third-party-libraries","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Build a Custom Command and Operation","href":"/docs/web/tutorial-implement-command-operation","docId":"web/tutorial-implement-command-operation","unlisted":false},{"type":"link","label":"Build a Custom Component with UI","href":"/docs/web/tutorial-implement-component-with-ui","docId":"web/tutorial-implement-component-with-ui","unlisted":false},{"type":"link","label":"Import the MapModel into a Component","href":"/docs/web/tutorial-import-map-model","docId":"web/tutorial-import-map-model","unlisted":false},{"type":"link","label":"Pull Component Data from App Config","href":"/docs/web/tutorial-implement-component-participate-app-config","docId":"web/tutorial-implement-component-participate-app-config","unlisted":false},{"type":"link","label":"Subscribe to an Existing Event","href":"/docs/web/tutorial-events-subscribe","docId":"web/tutorial-events-subscribe","unlisted":false},{"type":"link","label":"Translate a Component\'s Text","href":"/docs/web/tutorial-internationalization","docId":"web/tutorial-internationalization","unlisted":false},{"type":"link","label":"Using the canExecute Command Hook","href":"/docs/web/tutorial-command-can-execute","docId":"web/tutorial-command-can-execute","unlisted":false},{"type":"link","label":"Manage Dynamic Data with a Service","href":"/docs/web/tutorial-service-dynamic-data","docId":"web/tutorial-service-dynamic-data","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"API","items":[{"type":"link","label":"Commands and Operations Reference","href":"/docs/web/api-commands-operations","docId":"web/api-commands-operations","unlisted":false},{"type":"link","label":"Events Reference","href":"/docs/web/api-events","docId":"web/api-events","unlisted":false},{"type":"link","label":"Argument Definition Reference","href":"/docs/web/api-argument-definitions","docId":"web/api-argument-definitions","unlisted":false},{"type":"link","label":"Components and Services","href":"/docs/web/api-components","docId":"web/api-components","unlisted":false},{"type":"link","label":"API Object Reference","href":"/docs/web/api-objects","docId":"web/api-objects","unlisted":false}],"collapsed":true,"collapsible":true}],"workflow":[{"type":"link","label":"Overview","href":"/docs/workflow/overview","docId":"workflow/overview","unlisted":false},{"type":"link","label":"Key Concepts","href":"/docs/workflow/key-concepts","docId":"workflow/key-concepts","unlisted":false},{"type":"category","label":"VertiGIS Studio Workflow TypeScript SDK","items":[{"type":"link","label":"SDK Overview","href":"/docs/workflow/sdk-web-overview","docId":"workflow/sdk-web-overview","unlisted":false},{"type":"link","label":"Create an Activity","href":"/docs/workflow/sdk-web-create-activity","docId":"workflow/sdk-web-create-activity","unlisted":false},{"type":"link","label":"Create a Form Element","href":"/docs/workflow/sdk-web-create-element","docId":"workflow/sdk-web-create-element","unlisted":false},{"type":"link","label":"Activity Reference","href":"/docs/workflow/sdk-web-activity-reference","docId":"workflow/sdk-web-activity-reference","unlisted":false},{"type":"link","label":"Form Element Reference","href":"/docs/workflow/sdk-web-form-reference","docId":"workflow/sdk-web-form-reference","unlisted":false},{"type":"link","label":"Integrating the ArcGIS API for JavaScript","href":"/docs/workflow/sdk-web-integrating-the-arcgis-api","docId":"workflow/sdk-web-integrating-the-arcgis-api","unlisted":false},{"type":"link","label":"Activity Block Tags","href":"/docs/workflow/sdk-web-activity-block-tags","docId":"workflow/sdk-web-activity-block-tags","unlisted":false},{"type":"link","label":"Reference a Third Party Library","href":"/docs/workflow/sdk-web-reference-third-party-library","docId":"workflow/sdk-web-reference-third-party-library","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Implement an Activity that Calculates a Logarithm","href":"/docs/workflow/tutorial-web-calculate-logarithm-activity","docId":"workflow/tutorial-web-calculate-logarithm-activity","unlisted":false},{"type":"link","label":"Add a Layer to a Map with an Activity","href":"/docs/workflow/tutorial-web-add-layer-to-map","docId":"workflow/tutorial-web-add-layer-to-map","unlisted":false},{"type":"link","label":"Implement an activity that creates a QR Code image using a Third Party Library","href":"/docs/workflow/tutorial-web-qr-code-activity","docId":"workflow/tutorial-web-qr-code-activity","unlisted":false},{"type":"link","label":"Implement a Star Rating Custom Form Element","href":"/docs/workflow/tutorial-web-implement-star-rating-form-element","docId":"workflow/tutorial-web-implement-star-rating-form-element","unlisted":false},{"type":"link","label":"Implement a Star Rating Custom Form Element using a Third Party Library","href":"/docs/workflow/tutorial-web-implement-third-party-star-rating-form-element","docId":"workflow/tutorial-web-implement-third-party-star-rating-form-element","unlisted":false},{"type":"link","label":"Implement a Signature Block Custom Form Element using a Third Party Library","href":"/docs/workflow/tutorial-web-implement-third-party-signature-block-form-element","docId":"workflow/tutorial-web-implement-third-party-signature-block-form-element","unlisted":false},{"type":"link","label":"Implement a Captcha Custom Form Element using a Third Party Library","href":"/docs/workflow/tutorial-web-implement-third-party-captcha-form-element","docId":"workflow/tutorial-web-implement-third-party-captcha-form-element","unlisted":false},{"type":"link","label":"Implement a QR Code Custom Form Element using a Third Party Library","href":"/docs/workflow/tutorial-web-implement-third-party-qr-code-form-element","docId":"workflow/tutorial-web-implement-third-party-qr-code-form-element","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"VertiGIS Studio Workflow .NET SDK","items":[{"type":"link","label":"SDK Overview","href":"/docs/workflow/sdk-net-overview","docId":"workflow/sdk-net-overview","unlisted":false},{"type":"link","label":"Registering .NET Activities with VertiGIS Studio Workflow Designer","href":"/docs/workflow/sdk-net-register-activities","docId":"workflow/sdk-net-register-activities","unlisted":false},{"type":"link","label":"Integrating the ArcGIS Runtime SDK for .NET","href":"/docs/workflow/sdk-net-integrating-the-arcgis-api","docId":"workflow/sdk-net-integrating-the-arcgis-api","unlisted":false},{"type":"category","label":"VertiGIS Studio Mobile","items":[{"type":"link","label":"SDK Overview","href":"/docs/workflow/sdk-mobile-overview","docId":"workflow/sdk-mobile-overview","unlisted":false},{"type":"link","label":"Create an Activity","href":"/docs/workflow/sdk-mobile-create-activity","docId":"workflow/sdk-mobile-create-activity","unlisted":false},{"type":"link","label":"Activity Reference","href":"/docs/workflow/sdk-mobile-activity-reference","docId":"workflow/sdk-mobile-activity-reference","unlisted":false},{"type":"link","label":"Form Element Reference","href":"/docs/workflow/sdk-mobile-form-reference","docId":"workflow/sdk-mobile-form-reference","unlisted":false},{"type":"link","label":"Reference a Third Party Library","href":"/docs/workflow/sdk-mobile-reference-third-party-library","docId":"workflow/sdk-mobile-reference-third-party-library","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Implement an Activity that Calculates a Logarithm","href":"/docs/workflow/tutorial-mobile-calculate-logarithm-activity","docId":"workflow/tutorial-mobile-calculate-logarithm-activity","unlisted":false},{"type":"link","label":"Show a Callout on the Map with an Activity","href":"/docs/workflow/tutorial-mobile-show-map-callout","docId":"workflow/tutorial-mobile-show-map-callout","unlisted":false},{"type":"link","label":"Implement an Loading Indicator Form Element","href":"/docs/workflow/tutorial-mobile-activity-indicator-form-element","docId":"workflow/tutorial-mobile-activity-indicator-form-element","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"VertiGIS Studio Workflow Server","items":[{"type":"link","label":"SDK Overview","href":"/docs/workflow/sdk-server-overview","docId":"workflow/sdk-server-overview","unlisted":false},{"type":"link","label":"Create an Activity","href":"/docs/workflow/sdk-server-create-activity","docId":"workflow/sdk-server-create-activity","unlisted":false},{"type":"link","label":"Reference a Third Party Library","href":"/docs/workflow/sdk-server-reference-third-party-library","docId":"workflow/sdk-server-reference-third-party-library","unlisted":false},{"type":"link","label":"Implement an Activity that Calculates a Logarithm","href":"/docs/workflow/tutorial-server-calculate-logarithm-activity","docId":"workflow/tutorial-server-calculate-logarithm-activity","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"mobile":[{"type":"link","label":"Overview","href":"/docs/mobile/overview","docId":"mobile/overview","unlisted":false},{"type":"link","label":"Key Concepts","href":"/docs/mobile/key-concepts","docId":"mobile/key-concepts","unlisted":false},{"type":"category","label":"Configuration","items":[{"type":"category","label":"Layout","items":[{"type":"link","label":"Getting Started","href":"/docs/mobile/configuration-layout-getting-started","docId":"mobile/configuration-layout-getting-started","unlisted":false},{"type":"link","label":"Layout Reference","href":"/docs/mobile/configuration-layout-reference","docId":"mobile/configuration-layout-reference","unlisted":false},{"type":"link","label":"Advanced Model Binding","href":"/docs/mobile/configuration-advanced-model-binding","docId":"mobile/configuration-advanced-model-binding","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"App Config","items":[{"type":"link","label":"Getting Started","href":"/docs/mobile/configuration-app-config-getting-started","docId":"mobile/configuration-app-config-getting-started","unlisted":false},{"type":"link","label":"App Config Reference","href":"/docs/mobile/configuration-app-config-reference","docId":"mobile/configuration-app-config-reference","unlisted":false},{"type":"link","label":"Configuring the Theme","href":"/docs/mobile/configuration-theme","docId":"mobile/configuration-theme","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Commands and Operations","href":"/docs/mobile/configuration-commands-operations","docId":"mobile/configuration-commands-operations","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Configure Button Click Behavior","href":"/docs/mobile/tutorial-configure-button-click","docId":"mobile/tutorial-configure-button-click","unlisted":false},{"type":"link","label":"Change the Default Behavior of Components","href":"/docs/mobile/tutorial-change-default-behavior","docId":"mobile/tutorial-change-default-behavior","unlisted":false},{"type":"link","label":"Customize the Theme","href":"/docs/mobile/tutorial-customize-application-theme","docId":"mobile/tutorial-customize-application-theme","unlisted":false},{"type":"link","label":"Add a Medium Layout","href":"/docs/mobile/tutorial-add-medium-layout","docId":"mobile/tutorial-add-medium-layout","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"VertiGIS Studio Workflow","items":[{"type":"link","label":"Run a Workflow from App Config","href":"/docs/mobile/tutorial-run-workflow-app-config","docId":"mobile/tutorial-run-workflow-app-config","unlisted":false},{"type":"link","label":"Display a Custom Form","href":"/docs/mobile/tutorial-display-custom-form","docId":"mobile/tutorial-display-custom-form","unlisted":false},{"type":"link","label":"Change Default Map Click Behavior","href":"/docs/mobile/tutorial-change-default-map-click-behavior","docId":"mobile/tutorial-change-default-map-click-behavior","unlisted":false},{"type":"link","label":"Implement a Custom Form Element","href":"/docs/mobile/tutorial-implement-custom-form-elements","docId":"mobile/tutorial-implement-custom-form-elements","unlisted":false},{"type":"link","label":"Implement a Custom Activity","href":"/docs/mobile/tutorial-implement-custom-activity","docId":"mobile/tutorial-implement-custom-activity","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"VertiGIS Studio Mobile SDK","items":[{"type":"link","label":"SDK Overview","href":"/docs/mobile/sdk-overview","docId":"mobile/sdk-overview","unlisted":false},{"type":"link","label":"Edit the Layout and App Config","href":"/docs/mobile/sdk-edit-layout-app-config","docId":"mobile/sdk-edit-layout-app-config","unlisted":false},{"type":"link","label":"Quickstart Reference","href":"/docs/mobile/sdk-quickstart-reference","docId":"mobile/sdk-quickstart-reference","unlisted":false},{"type":"link","label":"SDK Samples","href":"/docs/mobile/sdk-samples","docId":"mobile/sdk-samples","unlisted":false},{"type":"link","label":"Deployment","href":"/docs/mobile/sdk-deployment","docId":"mobile/sdk-deployment","unlisted":false},{"type":"link","label":"Commands and Operations","href":"/docs/mobile/sdk-commands-operations","docId":"mobile/sdk-commands-operations","unlisted":false},{"type":"category","label":"Components","items":[{"type":"link","label":"Overview","href":"/docs/mobile/sdk-components-overview","docId":"mobile/sdk-components-overview","unlisted":false},{"type":"link","label":"Create a Component","href":"/docs/mobile/sdk-components-create","docId":"mobile/sdk-components-create","unlisted":false},{"type":"link","label":"Component Reference","href":"/docs/mobile/sdk-components-reference","docId":"mobile/sdk-components-reference","unlisted":false},{"type":"link","label":"View Model Helper Class","href":"/docs/mobile/sdk-components-viewmodel-helper-class","docId":"mobile/sdk-components-viewmodel-helper-class","unlisted":false},{"type":"link","label":"Component Styling","href":"/docs/mobile/sdk-components-styling","docId":"mobile/sdk-components-styling","unlisted":false},{"type":"link","label":"Internationalization","href":"/docs/mobile/sdk-components-internationalization","docId":"mobile/sdk-components-internationalization","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Services","items":[{"type":"link","label":"Overview","href":"/docs/mobile/sdk-services-overview","docId":"mobile/sdk-services-overview","unlisted":false},{"type":"link","label":"Create a Service","href":"/docs/mobile/sdk-services-create","docId":"mobile/sdk-services-create","unlisted":false},{"type":"link","label":"Service Reference","href":"/docs/mobile/sdk-services-reference","docId":"mobile/sdk-services-reference","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Events","items":[{"type":"link","label":"Overview","href":"/docs/mobile/sdk-events-overview","docId":"mobile/sdk-events-overview","unlisted":false},{"type":"link","label":"Events Reference","href":"/docs/mobile/sdk-events-reference","docId":"mobile/sdk-events-reference","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Dependency Injection","href":"/docs/mobile/sdk-dependency-injection","docId":"mobile/sdk-dependency-injection","unlisted":false},{"type":"link","label":"Component and Service Interactions","href":"/docs/mobile/sdk-component-service-interactions","docId":"mobile/sdk-component-service-interactions","unlisted":false},{"type":"link","label":"Internationalization","href":"/docs/mobile/sdk-internationalization","docId":"mobile/sdk-internationalization","unlisted":false},{"type":"link","label":"Memory Management","href":"/docs/mobile/sdk-memory-leaks","docId":"mobile/sdk-memory-leaks","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Build a Custom Command","href":"/docs/mobile/tutorial-implement-command-operation","docId":"mobile/tutorial-implement-command-operation","unlisted":false},{"type":"link","label":"Build a Custom Component with UI","href":"/docs/mobile/tutorial-implement-component-with-ui","docId":"mobile/tutorial-implement-component-with-ui","unlisted":false},{"type":"link","label":"Pull Component Data from App Config","href":"/docs/mobile/tutorial-implement-component-participate-app-config","docId":"mobile/tutorial-implement-component-participate-app-config","unlisted":false},{"type":"link","label":"Build a Service that Fetches Dynamic Data","href":"/docs/mobile/tutorial-implement-service-fetch-dynamic-data","docId":"mobile/tutorial-implement-service-fetch-dynamic-data","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"API","items":[{"type":"link","label":"Commands and Operations Reference","href":"/docs/mobile/api-commands-operations","docId":"mobile/api-commands-operations","unlisted":false},{"type":"link","label":"Events Reference","href":"/docs/mobile/api-events","docId":"mobile/api-events","unlisted":false},{"type":"link","label":"Argument Definition Reference","href":"/docs/mobile/api-argument-definitions","docId":"mobile/api-argument-definitions","unlisted":false},{"type":"link","label":"Components and Services","href":"/docs/mobile/api-components","docId":"mobile/api-components","unlisted":false}],"collapsed":true,"collapsible":true}],"reporting":[{"type":"link","label":"Overview","href":"/docs/reporting/overview","docId":"reporting/overview","unlisted":false},{"type":"link","label":"Key Concepts","href":"/docs/reporting/key-concepts","docId":"reporting/key-concepts","unlisted":false},{"type":"category","label":"VertiGIS Studio Reporting SDK","items":[{"type":"link","label":"SDK Overview","href":"/docs/reporting/sdk-overview","docId":"reporting/sdk-overview","unlisted":false},{"type":"link","label":"Run a report from JavaScript","href":"/docs/reporting/sdk-js-overview","docId":"reporting/sdk-js-overview","unlisted":false},{"type":"link","label":"Run a report from Python","href":"/docs/reporting/sdk-py-overview","docId":"reporting/sdk-py-overview","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Run a report from an ArcGIS Notebook","href":"/docs/reporting/tutorial-arcgis-notebook","docId":"reporting/tutorial-arcgis-notebook","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}]},"docs":{"mobile/api-argument-definitions":{"id":"mobile/api-argument-definitions","title":"Argument Definition Reference","description":"VertiGIS Studio Mobile - Argument Definition API Reference","sidebar":"mobile"},"mobile/api-commands-operations":{"id":"mobile/api-commands-operations","title":"Commands and Operations Reference","description":"VertiGIS Studio Mobile - Commands and Operations API Reference","sidebar":"mobile"},"mobile/api-commands-operations-events":{"id":"mobile/api-commands-operations-events","title":"Redirecting...","description":"{/ prettier-ignore /}"},"mobile/api-components":{"id":"mobile/api-components","title":"Components and Services","description":"VertiGIS Studio Mobile - Component and service configuration","sidebar":"mobile"},"mobile/api-events":{"id":"mobile/api-events","title":"Events Reference","description":"VertiGIS Studio Mobile - Events API Reference","sidebar":"mobile"},"mobile/configuration-advanced-model-binding":{"id":"mobile/configuration-advanced-model-binding","title":"Advanced Model Binding","description":"VertiGIS Studio Mobile - Learn about advanced model binding with layout","sidebar":"mobile"},"mobile/configuration-app-config-getting-started":{"id":"mobile/configuration-app-config-getting-started","title":"App Config","description":"VertiGIS Studio Mobile - Learn about VertiGIS Studio Mobile\'s configuration concepts","sidebar":"mobile"},"mobile/configuration-app-config-reference":{"id":"mobile/configuration-app-config-reference","title":"App Config Reference","description":"VertiGIS Studio Mobile - App config reference","sidebar":"mobile"},"mobile/configuration-commands-operations":{"id":"mobile/configuration-commands-operations","title":"Commands and Operations","description":"VertiGIS Studio Mobile - Learn about commands and operations","sidebar":"mobile"},"mobile/configuration-layout-getting-started":{"id":"mobile/configuration-layout-getting-started","title":"Layout","description":"VertiGIS Studio Mobile - Learn about layout concepts","sidebar":"mobile"},"mobile/configuration-layout-reference":{"id":"mobile/configuration-layout-reference","title":"Layout Reference","description":"VertiGIS Studio Mobile - Layout Reference","sidebar":"mobile"},"mobile/configuration-theme":{"id":"mobile/configuration-theme","title":"Configuring the Theme","description":"VertiGIS Studio Mobile - Configuring the application theme using app config","sidebar":"mobile"},"mobile/key-concepts":{"id":"mobile/key-concepts","title":"Key Concepts","description":"VertiGIS Studio Mobile - Learn about key concepts of the VertiGIS Studio Mobile Framework","sidebar":"mobile"},"mobile/overview":{"id":"mobile/overview","title":"Overview","description":"VertiGIS Studio Mobile - Overview","sidebar":"mobile"},"mobile/sdk-commands-operations":{"id":"mobile/sdk-commands-operations","title":"Commands and Operations","description":"VertiGIS Studio Mobile - Learn how to register and run commands and operations in custom services and components","sidebar":"mobile"},"mobile/sdk-component-service-interactions":{"id":"mobile/sdk-component-service-interactions","title":"Component and Service Interactions","description":"VertiGIS Studio Mobile - Learn how to make custom components and services interact with the larger application","sidebar":"mobile"},"mobile/sdk-components-create":{"id":"mobile/sdk-components-create","title":"Create a Component","description":"VertiGIS Studio Mobile - Create a component using the VertiGIS Studio Mobile SDK Quickstart","sidebar":"mobile"},"mobile/sdk-components-internationalization":{"id":"mobile/sdk-components-internationalization","title":"Internationalization","description":"VertiGIS Studio Mobile - Learn how to translate a components user facing text","sidebar":"mobile"},"mobile/sdk-components-overview":{"id":"mobile/sdk-components-overview","title":"Components Overview","description":"VertiGIS Studio Mobile - Overview of components","sidebar":"mobile"},"mobile/sdk-components-reference":{"id":"mobile/sdk-components-reference","title":"Component Reference","description":"VertiGIS Studio Mobile - Reference for custom components in VertiGIS Studio Mobile","sidebar":"mobile"},"mobile/sdk-components-styling":{"id":"mobile/sdk-components-styling","title":"Component Styling","description":"VertiGIS Studio Mobile - Learn how to style a custom component","sidebar":"mobile"},"mobile/sdk-components-viewmodel-helper-class":{"id":"mobile/sdk-components-viewmodel-helper-class","title":"View Model Helper Class","description":"VertiGIS Studio Mobile - Learn about the base class for ViewModels in mobile, NotifyPropertyBase","sidebar":"mobile"},"mobile/sdk-dependency-injection":{"id":"mobile/sdk-dependency-injection","title":"Dependency Injection","description":"VertiGIS Studio Mobile - Learn about dependency injection in VertiGIS Studio Mobile","sidebar":"mobile"},"mobile/sdk-deployment":{"id":"mobile/sdk-deployment","title":"Deployment","description":"VertiGIS Studio Mobile - Deploy a VertiGIS Studio Mobile Application","sidebar":"mobile"},"mobile/sdk-edit-layout-app-config":{"id":"mobile/sdk-edit-layout-app-config","title":"Edit the Layout and App Config","description":"VertiGIS Studio Mobile - Edit the layout and app config in the SDK Quickstart","sidebar":"mobile"},"mobile/sdk-events-overview":{"id":"mobile/sdk-events-overview","title":"Events Overview","description":"VertiGIS Studio Mobile - Overview of events","sidebar":"mobile"},"mobile/sdk-events-reference":{"id":"mobile/sdk-events-reference","title":"Events Reference","description":"VertiGIS Studio Mobile - Events Reference","sidebar":"mobile"},"mobile/sdk-internationalization":{"id":"mobile/sdk-internationalization","title":"Internationalization","description":"VertiGIS Studio Mobile - Internationalization reference","sidebar":"mobile"},"mobile/sdk-memory-leaks":{"id":"mobile/sdk-memory-leaks","title":"Memory Management","description":"VertiGIS Studio Mobile - Learn about memory management in VertiGIS Studio Mobile","sidebar":"mobile"},"mobile/sdk-overview":{"id":"mobile/sdk-overview","title":"SDK Overview","description":"VertiGIS Studio Mobile - Learn how to get started with the VertiGIS Studio Mobile SDK","sidebar":"mobile"},"mobile/sdk-quickstart-reference":{"id":"mobile/sdk-quickstart-reference","title":"Quickstart Reference","description":"VertiGIS Studio Mobile - Learn more about the VertiGIS Studio Mobile SDK Quickstart Project","sidebar":"mobile"},"mobile/sdk-samples":{"id":"mobile/sdk-samples","title":"SDK Samples","description":"VertiGIS Studio Mobile - Learn about the VertiGIS Studio Mobile SDK Samples project","sidebar":"mobile"},"mobile/sdk-services-create":{"id":"mobile/sdk-services-create","title":"Create a Service","description":"VertiGIS Studio Mobile - Create a service using the VertiGIS Studio Mobile SDK Quickstart","sidebar":"mobile"},"mobile/sdk-services-overview":{"id":"mobile/sdk-services-overview","title":"Services Overview","description":"VertiGIS Studio Mobile - Overview of services","sidebar":"mobile"},"mobile/sdk-services-reference":{"id":"mobile/sdk-services-reference","title":"Service Reference","description":"VertiGIS Studio Mobile - Service reference","sidebar":"mobile"},"mobile/snippets/cleanup-handles":{"id":"mobile/snippets/cleanup-handles","title":"cleanup-handles","description":"It is vital that subscription handles are cleaned up when the object is cleaned up, otherwise dangling references can occur. This can be done by implementing the IDisposable and IDisposableTracker interface, and then providing this as the second argument to a call to subscribe. ServiceBase and ComponentBase already implement these interfaces so you don\'t have to."},"mobile/snippets/designer-callout":{"id":"mobile/snippets/designer-callout","title":"designer-callout","description":"The VertiGIS Studio Mobile Designer allows you to edit your application\'s layout, configure custom behaviors for buttons and other UI components, and solve complex business problems through VertiGIS Studio Workflow. Many use cases can be solved through the VertiGIS Studio Mobile Designer and don\'t require custom development."},"mobile/snippets/follow-along":{"id":"mobile/snippets/follow-along","title":"follow-along","description":"Check out the Quickstart and edit the default app config and layout."},"mobile/snippets/prereqs-layout-config-editing":{"id":"mobile/snippets/prereqs-layout-config-editing","title":"prereqs-layout-config-editing","description":"Follow along by setting up the VertiGIS Studio Mobile SDK and editing the minimal layout and app config provided."},"mobile/snippets/quickstart-prereqs":{"id":"mobile/snippets/quickstart-prereqs","title":"quickstart-prereqs","description":"Check out and setup the VertiGIS Studio Mobile SDK Quickstart project."},"mobile/snippets/relevant-workflow-samples":{"id":"mobile/snippets/relevant-workflow-samples","title":"relevant-workflow-samples","description":"The VertiGIS Studio Mobile SDK Samples project has a variety of workflow samples:"},"mobile/snippets/translation-callout":{"id":"mobile/snippets/translation-callout","title":"translation-callout","description":"Existing language strings for an application can be customized for any language in the VertiGIS Studio Mobile s Designer. To provide a complete translation in an entirely new locale for VertiGIS Studio Mobile, please contact us."},"mobile/snippets/tweak-layout-config":{"id":"mobile/snippets/tweak-layout-config","title":"tweak-layout-config","description":"If you just need to make a small change to the layout and app config of an existing application, you can download the config and layout files for the application, tweak them, and then re-upload them."},"mobile/tutorial-add-medium-layout":{"id":"mobile/tutorial-add-medium-layout","title":"Add a Medium Layout","description":"VertiGIS Studio Mobile - Learn how to add a medium layout definition for tablets.","sidebar":"mobile"},"mobile/tutorial-change-default-behavior":{"id":"mobile/tutorial-change-default-behavior","title":"Change the Default Behavior of Components","description":"VertiGIS Studio Mobile - Learn how to configure VertiGIS Studio Mobile to change default application behavior","sidebar":"mobile"},"mobile/tutorial-change-default-map-click-behavior":{"id":"mobile/tutorial-change-default-map-click-behavior","title":"Change Default Map Click Behavior","description":"VertiGIS Studio Mobile - Learn how to configure VertiGIS Studio Mobile to change the default map click behavior","sidebar":"mobile"},"mobile/tutorial-configure-button-click":{"id":"mobile/tutorial-configure-button-click","title":"Configure Button Click Behavior","description":"VertiGIS Studio Mobile - Learn how to run an existing command or operation on a button press","sidebar":"mobile"},"mobile/tutorial-customize-application-theme":{"id":"mobile/tutorial-customize-application-theme","title":"Customize the Theme","description":"VertiGIS Studio Mobile - Learn how to customize the look and feel of your VertiGIS Studio Mobile application","sidebar":"mobile"},"mobile/tutorial-display-custom-form":{"id":"mobile/tutorial-display-custom-form","title":"Display a Custom Form","description":"VertiGIS Studio Mobile - Learn how to display a custom form","sidebar":"mobile"},"mobile/tutorial-implement-command-operation":{"id":"mobile/tutorial-implement-command-operation","title":"Build a Custom Command","description":"VertiGIS Studio Mobile - Learn how to implement a custom command","sidebar":"mobile"},"mobile/tutorial-implement-component-participate-app-config":{"id":"mobile/tutorial-implement-component-participate-app-config","title":"Pull Component Data from App Config","description":"VertiGIS Studio Mobile - Learn how to make a component participate in app config.","sidebar":"mobile"},"mobile/tutorial-implement-component-with-ui":{"id":"mobile/tutorial-implement-component-with-ui","title":"Build a Custom Component with UI","description":"VertiGIS Studio Mobile - Learn how to implement a custom component with UI","sidebar":"mobile"},"mobile/tutorial-implement-custom-activity":{"id":"mobile/tutorial-implement-custom-activity","title":"Implement a Custom Activity","description":"VertiGIS Studio Mobile - Learn how to implement a custom workflow activity","sidebar":"mobile"},"mobile/tutorial-implement-custom-form-elements":{"id":"mobile/tutorial-implement-custom-form-elements","title":"Implement a Custom Form Element","description":"VertiGIS Studio Mobile - Learn how to implement a custom form element","sidebar":"mobile"},"mobile/tutorial-implement-service-fetch-dynamic-data":{"id":"mobile/tutorial-implement-service-fetch-dynamic-data","title":"Build a Service that Fetches Dynamic Data","description":"VertiGIS Studio Mobile - Implement a custom Service","sidebar":"mobile"},"mobile/tutorial-run-workflow-app-config":{"id":"mobile/tutorial-run-workflow-app-config","title":"Run a Workflow from App Config","description":"VertiGIS Studio Mobile - Learn how to run a workflow using app config and layout","sidebar":"mobile"},"reporting/key-concepts":{"id":"reporting/key-concepts","title":"Key Concepts","description":"VertiGIS Studio Reporting - Learn about key concepts of VertiGIS Studio Reporting","sidebar":"reporting"},"reporting/overview":{"id":"reporting/overview","title":"Overview","description":"VertiGIS Studio Reporting - Overview","sidebar":"reporting"},"reporting/sdk-js-overview":{"id":"reporting/sdk-js-overview","title":"Run a report from JavaScript","description":"VertiGIS Studio Reporting - JavaScript","sidebar":"reporting"},"reporting/sdk-overview":{"id":"reporting/sdk-overview","title":"SDK Overview","description":"VertiGIS Studio Reporting - Overview of the SDK","sidebar":"reporting"},"reporting/sdk-py-overview":{"id":"reporting/sdk-py-overview","title":"Run a report from Python","description":"VertiGIS Studio Reporting - Python","sidebar":"reporting"},"reporting/snippets/designer-callout":{"id":"reporting/snippets/designer-callout","title":"designer-callout","description":"The VertiGIS Studio Report Designer has an extensive suite of tools for laying out reports, specifying the data that you want to include, and presenting the data using charts, tables, and other configurable elements."},"reporting/tutorial-arcgis-notebook":{"id":"reporting/tutorial-arcgis-notebook","title":"Run a report from an ArcGIS Notebook","description":"VertiGIS Studio Reporting - ArcGIS Notebook","sidebar":"reporting"},"snippets/app-item":{"id":"snippets/app-item","title":"app-item","description":"An app config file is composed of a list of app items. App items can potentially be anything. Each app item has an item $type, which viewer is aware of and knows how to locate and load. They usually they represent configuration for components, maps, portal items, or shared data. All item app configuration is specified within the items array of the app.json file."},"snippets/autofac-mobile":{"id":"snippets/autofac-mobile","title":"autofac-mobile","description":"VertiGIS Studio Mobile uses Autofac to register, locate, and inject components, services and other classes. See dependency injection for more info."},"snippets/workflow-url":{"id":"snippets/workflow-url","title":"workflow-url","description":"https://apps.vertigisstudio.com/workflow/designer/#workflow="},"web/api-argument-definitions":{"id":"web/api-argument-definitions","title":"Argument Definition Reference","description":"VertiGIS Studio Web - Argument Definition API Reference","sidebar":"web"},"web/api-commands-operations":{"id":"web/api-commands-operations","title":"Commands and Operations Reference","description":"VertiGIS Studio Web - Commands and Operations API Reference","sidebar":"web"},"web/api-commands-operations-events":{"id":"web/api-commands-operations-events","title":"Redirecting...","description":"{/ prettier-ignore /}"},"web/api-components":{"id":"web/api-components","title":"Components and Services","description":"VertiGIS Studio Web - Component and service configuration","sidebar":"web"},"web/api-events":{"id":"web/api-events","title":"Events Reference","description":"VertiGIS Studio Web - Events API Reference","sidebar":"web"},"web/api-objects":{"id":"web/api-objects","title":"API Object Reference","description":"VertiGIS Studio - API Object Reference","sidebar":"web"},"web/app-initialization-events":{"id":"web/app-initialization-events","title":"App Initialization Events","description":"VertiGIS Studio Web - Key event hooks during app initialization and how to use them","sidebar":"web"},"web/configuration-advanced-model-binding":{"id":"web/configuration-advanced-model-binding","title":"Advanced Model Binding","description":"VertiGIS Studio Web - Learn about advanced model binding with layout","sidebar":"web"},"web/configuration-app-config-getting-started":{"id":"web/configuration-app-config-getting-started","title":"App Config","description":"VertiGIS Studio Web - Learn about VertiGIS Studio Web\'s configuration concepts","sidebar":"web"},"web/configuration-app-config-reference":{"id":"web/configuration-app-config-reference","title":"App Config Reference","description":"VertiGIS Studio Web - Reference for App Config","sidebar":"web"},"web/configuration-commands-operations":{"id":"web/configuration-commands-operations","title":"Commands and Operations","description":"VertiGIS Studio Web - Learn about commands and operations","sidebar":"web"},"web/configuration-layout-getting-started":{"id":"web/configuration-layout-getting-started","title":"Layout","description":"VertiGIS Studio Web - Learn about layout concepts","sidebar":"web"},"web/configuration-layout-reference":{"id":"web/configuration-layout-reference","title":"Layout Reference","description":"VertiGIS Studio Web - Learn about the core layout components","sidebar":"web"},"web/configuration-theme":{"id":"web/configuration-theme","title":"Configuring the Theme","description":"VertiGIS Studio Web - Configuring the application theme using app config","sidebar":"web"},"web/key-concepts":{"id":"web/key-concepts","title":"Key Concepts","description":"VertiGIS Studio Web - Learn about key concepts of VertiGIS Studio Web","sidebar":"web"},"web/overview":{"id":"web/overview","title":"Overview","description":"VertiGIS Studio Web - Overview","sidebar":"web"},"web/sdk-adding-icons":{"id":"web/sdk-adding-icons","title":"Adding Icons","description":"VertiGIS Studio Web - Learn how to add custom icons to the Web SDK","sidebar":"web"},"web/sdk-commands-operations":{"id":"web/sdk-commands-operations","title":"Commands and Operations","description":"VertiGIS Studio Web - Learn how to register and run commands and operations in custom components and services","sidebar":"web"},"web/sdk-components-create":{"id":"web/sdk-components-create","title":"Create a Component","description":"VertiGIS Studio Web - Create a component for VertiGIS Studio Web","sidebar":"web"},"web/sdk-components-hooks":{"id":"web/sdk-components-hooks","title":"Component Hooks","description":"VertiGIS Studio Web - Learn about the React hooks used to react to changes on a component\'s model","sidebar":"web"},"web/sdk-components-injecting-services":{"id":"web/sdk-components-injecting-services","title":"Service Injection","description":"VertiGIS Studio Web - Injecting services into component models","sidebar":"web"},"web/sdk-components-interactions":{"id":"web/sdk-components-interactions","title":"Component Interactions","description":"VertiGIS Studio Web - Learn how to make custom components interact in with the larger application","sidebar":"web"},"web/sdk-components-internationalization":{"id":"web/sdk-components-internationalization","title":"Internationalization","description":"VertiGIS Studio Web - Learn how to translate a components user facing text","sidebar":"web"},"web/sdk-components-overview":{"id":"web/sdk-components-overview","title":"Components Overview","description":"VertiGIS Studio Web - Overview of components","sidebar":"web"},"web/sdk-components-reference":{"id":"web/sdk-components-reference","title":"Component Reference","description":"VertiGIS Studio Web - Reference for custom components in VertiGIS Studio Web","sidebar":"web"},"web/sdk-components-styling":{"id":"web/sdk-components-styling","title":"Component Styling","description":"VertiGIS Studio Web - Learn how to style a custom component","sidebar":"web"},"web/sdk-components-ui-context":{"id":"web/sdk-components-ui-context","title":"UIContext","description":"VertiGIS Studio Web - Accessing the UIContext in Components","sidebar":"web"},"web/sdk-deployment":{"id":"web/sdk-deployment","title":"Deployment","description":"VertiGIS Studio Web - Deploy a VertiGIS Studio Web Application","sidebar":"web"},"web/sdk-events-overview":{"id":"web/sdk-events-overview","title":"Events Overview","description":"VertiGIS Studio Web - Overview of events","sidebar":"web"},"web/sdk-events-reference":{"id":"web/sdk-events-reference","title":"Events Reference","description":"VertiGIS Studio Web - Events Reference","sidebar":"web"},"web/sdk-internationalization":{"id":"web/sdk-internationalization","title":"Internationalization","description":"VertiGIS Studio Web - Learn about internationalization and language strings in VertiGIS Studio Web","sidebar":"web"},"web/sdk-overview":{"id":"web/sdk-overview","title":"SDK Overview","description":"VertiGIS Studio Web - Learn how to get started with the VertiGIS Studio Web SDK","sidebar":"web"},"web/sdk-reference-third-party-libraries":{"id":"web/sdk-reference-third-party-libraries","title":"Reference Third Party Libraries","description":"VertiGIS Studio Web - Reference third party libraries with the VertiGIS Studio Web SDK","sidebar":"web"},"web/sdk-samples":{"id":"web/sdk-samples","title":"SDK Samples","description":"VertiGIS Studio Web - Learn about the VertiGIS Studio Mobile SDK Samples","sidebar":"web"},"web/sdk-serializable-properties":{"id":"web/sdk-serializable-properties","title":"Serializable Properties","description":"VertiGIS Studio Web - Learn how to serialize and deserialize app config properties","sidebar":"web"},"web/sdk-services-create":{"id":"web/sdk-services-create","title":"Create a Service","description":"VertiGIS Studio Web - Create a Service for VertiGIS Studio Web","sidebar":"web"},"web/sdk-services-injecting-services":{"id":"web/sdk-services-injecting-services","title":"Service Injection","description":"VertiGIS Studio Web - Injecting services into custom services","sidebar":"web"},"web/sdk-services-overview":{"id":"web/sdk-services-overview","title":"Services Overview","description":"VertiGIS Studio Web - Overview of Services","sidebar":"web"},"web/sdk-services-reference":{"id":"web/sdk-services-reference","title":"Service Reference","description":"VertiGIS Studio Web - Service Reference","sidebar":"web"},"web/snippets/designer-callout":{"id":"web/snippets/designer-callout","title":"designer-callout","description":"The VertiGIS Studio Web Designer allows you to edit your application\'s layout, configure custom behaviors for buttons and other UI components, and solve complex business problems through VertiGIS Studio Workflow. Many use cases can be solved through the VertiGIS Studio Web Designer and don\'t require custom development."},"web/snippets/follow-along":{"id":"web/snippets/follow-along","title":"follow-along","description":"Download and setup the VertiGIS Studio Web SDK and edit the minimal layout and app config provided."},"web/snippets/framework-components":{"id":"web/snippets/framework-components","title":"framework-components","description":"This example uses VertiGIS Studio Web layout components"},"web/snippets/prereqs-custom-code":{"id":"web/snippets/prereqs-custom-code","title":"prereqs-custom-code","description":"- Download and setup the VertiGIS Studio Web SDK."},"web/snippets/prereqs-layout-config-editing":{"id":"web/snippets/prereqs-layout-config-editing","title":"prereqs-layout-config-editing","description":"- Follow along by setting up the VertiGIS Studio Web SDK and editing the minimal layout and app config provided."},"web/snippets/translation-callout":{"id":"web/snippets/translation-callout","title":"translation-callout","description":"Existing language strings for an application can be customized for any language in the VertiGIS Studio Web Designer. To provide a complete translation in an entirely new locale for VertiGIS Studio Web, please contact us."},"web/tutorial-change-default-behavior":{"id":"web/tutorial-change-default-behavior","title":"Change the Default Behavior of Components","description":"VertiGIS Studio Web - Learn how to configure VertiGIS Studio Web to change default application behavior","sidebar":"web"},"web/tutorial-change-default-map-click-behavior":{"id":"web/tutorial-change-default-map-click-behavior","title":"Change Default Map Click Behavior","description":"VertiGIS Studio Web - Learn how to configure VertiGIS Studio Web to change the default map click behavior","sidebar":"web"},"web/tutorial-command-can-execute":{"id":"web/tutorial-command-can-execute","title":"Using the canExecute Command Hook","description":"VertiGIS Studio Web - Learn how to optionally disable a command with the canExecute hook","sidebar":"web"},"web/tutorial-configure-button-click":{"id":"web/tutorial-configure-button-click","title":"Configure Button Click Behavior","description":"VertiGIS Studio Web - Learn how to run an existing command or operation on a button press","sidebar":"web"},"web/tutorial-customize-application-theme":{"id":"web/tutorial-customize-application-theme","title":"Customize the Theme","description":"VertiGIS Studio Web - Customize the application theme using app config","sidebar":"web"},"web/tutorial-display-custom-form":{"id":"web/tutorial-display-custom-form","title":"Display a Custom Form","description":"VertiGIS Studio Web - Learn how to display a custom form","sidebar":"web"},"web/tutorial-events-subscribe":{"id":"web/tutorial-events-subscribe","title":"Subscribe to an Existing Event","description":"VertiGIS Studio Web - Learn how to create and subscribe to an existing VertiGIS Studio Web event","sidebar":"web"},"web/tutorial-implement-command-operation":{"id":"web/tutorial-implement-command-operation","title":"Build a Custom Command and Operation","description":"VertiGIS Studio Web - Learn how to implement a custom command or operation","sidebar":"web"},"web/tutorial-implement-component-participate-app-config":{"id":"web/tutorial-implement-component-participate-app-config","title":"Pull Component Data from App Config","description":"VertiGIS Studio Web - Learn how to make a component participate in app config.","sidebar":"web"},"web/tutorial-implement-component-with-ui":{"id":"web/tutorial-implement-component-with-ui","title":"Build a Custom Component with UI","description":"VertiGIS Studio Web - Learn how to implement a custom component with UI","sidebar":"web"},"web/tutorial-implement-custom-activity":{"id":"web/tutorial-implement-custom-activity","title":"Implement a Custom Activity","description":"VertiGIS Studio Web - Learn how to implement a custom workflow activity","sidebar":"web"},"web/tutorial-implement-custom-form-elements":{"id":"web/tutorial-implement-custom-form-elements","title":"Implement a Custom Form Element","description":"VertiGIS Studio Web - Learn how to implement a custom form element","sidebar":"web"},"web/tutorial-import-map-model":{"id":"web/tutorial-import-map-model","title":"Import the MapModel into a Component","description":"VertiGIS Studio Web - Learn how to interact with the map in a custom component","sidebar":"web"},"web/tutorial-internationalization":{"id":"web/tutorial-internationalization","title":"Translate a Component\'s Text","description":"VertiGIS Studio Web - Learn how to internationalize a custom component","sidebar":"web"},"web/tutorial-run-workflow-app-config":{"id":"web/tutorial-run-workflow-app-config","title":"Run a Workflow from App Config","description":"VertiGIS Studio Web - Learn how to run a workflow using app config and layout","sidebar":"web"},"web/tutorial-service-dynamic-data":{"id":"web/tutorial-service-dynamic-data","title":"Manage Dynamic Data with a Service","description":"VertiGIS Studio Web - Implement a service that manages dynamic data for a component","sidebar":"web"},"workflow/key-concepts":{"id":"workflow/key-concepts","title":"Key Concepts","description":"VertiGIS Studio Workflow - Learn about key concepts.","sidebar":"workflow"},"workflow/overview":{"id":"workflow/overview","title":"Overview","description":"VertiGIS Studio Workflow - Learn about extending VertiGIS Studio Workflow","sidebar":"workflow"},"workflow/sdk-mobile-activity-reference":{"id":"workflow/sdk-mobile-activity-reference","title":"Workflow Activity Reference","description":"VertiGIS Studio Workflow - Reference for workflow activities for VertiGIS Studio Mobile","sidebar":"workflow"},"workflow/sdk-mobile-create-activity":{"id":"workflow/sdk-mobile-create-activity","title":"Create an Activity","description":"VertiGIS Studio Workflow - Create a workflow activity for web applications","sidebar":"workflow"},"workflow/sdk-mobile-form-reference":{"id":"workflow/sdk-mobile-form-reference","title":"Workflow Form Element Reference","description":"VertiGIS Studio Workflow - Reference for workflow form elements for web applications","sidebar":"workflow"},"workflow/sdk-mobile-overview":{"id":"workflow/sdk-mobile-overview","title":"Using the .NET Workflow SDK with VertiGIS Studio Mobile","description":"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Mobile","sidebar":"workflow"},"workflow/sdk-mobile-reference-third-party-library":{"id":"workflow/sdk-mobile-reference-third-party-library","title":"Reference a Third Party Library through the VertiGIS Studio Mobile SDK","description":"VertiGIS Studio Workflow - Reference a third party library in workflow for VertiGIS Studio Mobile","sidebar":"workflow"},"workflow/sdk-net-integrating-the-arcgis-api":{"id":"workflow/sdk-net-integrating-the-arcgis-api","title":"Integrating the ArcGIS Runtime SDK for .NET","description":"VertiGIS Studio Workflow - Integrate the ArcGIS Runtime SDK for .NET into custom activities for .NET applications","sidebar":"workflow"},"workflow/sdk-net-overview":{"id":"workflow/sdk-net-overview","title":"VertiGIS Studio Workflow .NET SDK Overview","description":"VertiGIS Studio Workflow - Overview of the .NET workflow SDK","sidebar":"workflow"},"workflow/sdk-net-register-activities":{"id":"workflow/sdk-net-register-activities","title":"Registering .NET Activities with VertiGIS Studio Workflow Designer","description":"VertiGIS Studio Workflow - Registering .NET workflow activities with VertiGIS Studio Workflow Designer","sidebar":"workflow"},"workflow/sdk-server-create-activity":{"id":"workflow/sdk-server-create-activity","title":"Create an Activity","description":"VertiGIS Studio Workflow - Create a workflow activity for web applications","sidebar":"workflow"},"workflow/sdk-server-overview":{"id":"workflow/sdk-server-overview","title":"Using the .NET Workflow SDK with VertiGIS Studio Workflow Server","description":"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Workflow Server","sidebar":"workflow"},"workflow/sdk-server-reference-third-party-library":{"id":"workflow/sdk-server-reference-third-party-library","title":"Reference a Third Party Library in VertiGIS Studio Workflow Server","description":"VertiGIS Studio Workflow - Reference a third party library in a VertiGIS Studio Workflow Server extension","sidebar":"workflow"},"workflow/sdk-web-activity-block-tags":{"id":"workflow/sdk-web-activity-block-tags","title":"Activity Block Tags","description":"VertiGIS Studio Workflow - Learn about the typescript activity metadata tags","sidebar":"workflow"},"workflow/sdk-web-activity-reference":{"id":"workflow/sdk-web-activity-reference","title":"Workflow Activity Reference","description":"VertiGIS Studio Workflow - Reference for workflow activities for web applications","sidebar":"workflow"},"workflow/sdk-web-create-activity":{"id":"workflow/sdk-web-create-activity","title":"Create an Activity","description":"VertiGIS Studio Workflow - Create a workflow activity for web applications","sidebar":"workflow"},"workflow/sdk-web-create-element":{"id":"workflow/sdk-web-create-element","title":"Create a Form Element","description":"VertiGIS Studio Workflow - Create a workflow form element for web applications","sidebar":"workflow"},"workflow/sdk-web-form-reference":{"id":"workflow/sdk-web-form-reference","title":"Workflow Form Element Reference","description":"VertiGIS Studio Workflow - Reference for workflow form elements for web applications","sidebar":"workflow"},"workflow/sdk-web-integrating-the-arcgis-api":{"id":"workflow/sdk-web-integrating-the-arcgis-api","title":"Integrating the ArcGIS API for JavaScript","description":"VertiGIS Studio Workflow - Integrate the ArcGIS API for JavaScript into custom activities for web applications","sidebar":"workflow"},"workflow/sdk-web-overview":{"id":"workflow/sdk-web-overview","title":"VertiGIS Studio Workflow TypeScript SDK Overview","description":"VertiGIS Studio Workflow - Overview of extending workflow for web applications","sidebar":"workflow"},"workflow/sdk-web-reference-third-party-library":{"id":"workflow/sdk-web-reference-third-party-library","title":"Reference a Third Party Library for Web Application Environments","description":"VertiGIS Studio Workflow - Reference a third party library in workflow for web applications","sidebar":"workflow"},"workflow/snippets/designer-callout":{"id":"workflow/snippets/designer-callout","title":"designer-callout","description":"The VertiGIS Studio Workflow Designer has a wide range of built-in activities you can use to satisfy your business case. You can take the behavior of workflow even further by running the commands and operations available in VertiGIS Studio Web and VertiGIS Studio Mobile."},"workflow/snippets/prereqs-mobile":{"id":"workflow/snippets/prereqs-mobile","title":"prereqs-mobile","description":"Extending VertiGIS Studio Workflow for Mobile requires development and deployment of a custom VertiGIS Studio Mobile Application using the VertiGIS Studio Mobile SDK"},"workflow/snippets/prereqs-server":{"id":"workflow/snippets/prereqs-server","title":"prereqs-server","description":"Extending VertiGIS Studio Workflow with server side components requires an on-premises installation of VertiGIS Studio Workflow. You will need administrative access to this installation."},"workflow/snippets/prereqs-web":{"id":"workflow/snippets/prereqs-web","title":"prereqs-web","description":"Follow the instructions in the Web Applications SDK page to set up your development environment."},"workflow/snippets/sdk-net-limitations-warning":{"id":"workflow/snippets/sdk-net-limitations-warning","title":"sdk-net-limitations-warning","description":"We recommend that you only implement the IActivityHandler interface examples provided in the Developer Center. These examples have been verified and are provided to help you customize your VertiGIS Studio product to suit your needs. You should not reference other classes and functions from the various VertiGIS Studio Workflow assemblies. Doing so could risk breaking functionality and/or unexpected results as a result of future changes."},"workflow/tutorial-mobile-activity-indicator-form-element":{"id":"workflow/tutorial-mobile-activity-indicator-form-element","title":"Implement an Loading Indicator Form Element","description":"VertiGIS Studio Workflow - Build a custom form element that displays a loading indicator","sidebar":"workflow"},"workflow/tutorial-mobile-calculate-logarithm-activity":{"id":"workflow/tutorial-mobile-calculate-logarithm-activity","title":"Implement an Activity that Calculates a Logarithm","description":"VertiGIS Studio Workflow - Implement a custom activity for VertiGIS Studio Mobile","sidebar":"workflow"},"workflow/tutorial-mobile-show-map-callout":{"id":"workflow/tutorial-mobile-show-map-callout","title":"Show a Callout on the Map with an Activity","description":"VertiGIS Studio Workflow - Access the map and show a callout through a custom activity.","sidebar":"workflow"},"workflow/tutorial-server-calculate-logarithm-activity":{"id":"workflow/tutorial-server-calculate-logarithm-activity","title":"Implement an Activity that Calculates a Logarithm","description":"VertiGIS Studio Workflow - Implement a custom activity for VertiGIS Studio Workflow Server that calculates the logarithm of a number","sidebar":"workflow"},"workflow/tutorial-web-add-layer-to-map":{"id":"workflow/tutorial-web-add-layer-to-map","title":"Add a Layer to a Map with an Activity","description":"VertiGIS Studio Workflow - Learn how to access and mutate the application map","sidebar":"workflow"},"workflow/tutorial-web-calculate-logarithm-activity":{"id":"workflow/tutorial-web-calculate-logarithm-activity","title":"Implement an Activity that Calculates a Logarithm","description":"VertiGIS Studio Workflow - Implement a custom activity for web applications that calculates the logarithm of a number","sidebar":"workflow"},"workflow/tutorial-web-implement-star-rating-form-element":{"id":"workflow/tutorial-web-implement-star-rating-form-element","title":"Implement a Star Rating Custom Form Element","description":"VertiGIS Studio Workflow - Implement a star rating form element for web applications","sidebar":"workflow"},"workflow/tutorial-web-implement-third-party-captcha-form-element":{"id":"workflow/tutorial-web-implement-third-party-captcha-form-element","title":"Implement a Captcha Custom Form Element using a Third Party Library","description":"VertiGIS Studio Workflow - Implement a captcha form element for web applications using a third party library","sidebar":"workflow"},"workflow/tutorial-web-implement-third-party-qr-code-form-element":{"id":"workflow/tutorial-web-implement-third-party-qr-code-form-element","title":"Implement a QR Code Custom Form Element using a Third Party Library","description":"VertiGIS Studio Workflow - Implement a QR code form element for web applications using a third party library","sidebar":"workflow"},"workflow/tutorial-web-implement-third-party-signature-block-form-element":{"id":"workflow/tutorial-web-implement-third-party-signature-block-form-element","title":"Implement a Signature Block Custom Form Element using a Third Party Library","description":"VertiGIS Studio Workflow - Implement a signature block form element for web applications using a third party library","sidebar":"workflow"},"workflow/tutorial-web-implement-third-party-star-rating-form-element":{"id":"workflow/tutorial-web-implement-third-party-star-rating-form-element","title":"Implement a Star Rating Custom Form Element using a Third Party Library","description":"VertiGIS Studio Workflow - Implement a star rating form element for web applications using a third party library","sidebar":"workflow"},"workflow/tutorial-web-qr-code-activity":{"id":"workflow/tutorial-web-qr-code-activity","title":"Implement an activity that creates a QR Code image using a Third Party Library","description":"VertiGIS Studio Workflow - Implement a custom activity for web applications that creates a QR code image using a third party library","sidebar":"workflow"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.f0bbb792.js b/assets/js/935f2afb.f0bbb792.js new file mode 100644 index 000000000..307a7defa --- /dev/null +++ b/assets/js/935f2afb.f0bbb792.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[5696],{5988:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"web":[{"type":"link","label":"Overview","href":"/docs/web/overview","docId":"web/overview","unlisted":false},{"type":"link","label":"Key Concepts","href":"/docs/web/key-concepts","docId":"web/key-concepts","unlisted":false},{"type":"category","label":"Configuration","items":[{"type":"category","label":"Layout","items":[{"type":"link","label":"Getting Started","href":"/docs/web/configuration-layout-getting-started","docId":"web/configuration-layout-getting-started","unlisted":false},{"type":"link","label":"Layout Reference","href":"/docs/web/configuration-layout-reference","docId":"web/configuration-layout-reference","unlisted":false},{"type":"link","label":"Advanced Model Binding","href":"/docs/web/configuration-advanced-model-binding","docId":"web/configuration-advanced-model-binding","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"App Config","items":[{"type":"link","label":"Getting Started","href":"/docs/web/configuration-app-config-getting-started","docId":"web/configuration-app-config-getting-started","unlisted":false},{"type":"link","label":"App Config Reference","href":"/docs/web/configuration-app-config-reference","docId":"web/configuration-app-config-reference","unlisted":false},{"type":"link","label":"Configuring the Theme","href":"/docs/web/configuration-theme","docId":"web/configuration-theme","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Commands and Operations","href":"/docs/web/configuration-commands-operations","docId":"web/configuration-commands-operations","unlisted":false},{"type":"link","label":"App Initialization Events","href":"/docs/web/app-initialization-events","docId":"web/app-initialization-events","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Configure Button Click Behavior","href":"/docs/web/tutorial-configure-button-click","docId":"web/tutorial-configure-button-click","unlisted":false},{"type":"link","label":"Change the Default Behavior of Components","href":"/docs/web/tutorial-change-default-behavior","docId":"web/tutorial-change-default-behavior","unlisted":false},{"type":"link","label":"Customize the Theme","href":"/docs/web/tutorial-customize-application-theme","docId":"web/tutorial-customize-application-theme","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"VertiGIS Studio Workflow","items":[{"type":"link","label":"Run a Workflow from App Config","href":"/docs/web/tutorial-run-workflow-app-config","docId":"web/tutorial-run-workflow-app-config","unlisted":false},{"type":"link","label":"Display a Custom Form","href":"/docs/web/tutorial-display-custom-form","docId":"web/tutorial-display-custom-form","unlisted":false},{"type":"link","label":"Change Default Map Click Behavior","href":"/docs/web/tutorial-change-default-map-click-behavior","docId":"web/tutorial-change-default-map-click-behavior","unlisted":false},{"type":"link","label":"Implement a Custom Activity","href":"/docs/web/tutorial-implement-custom-activity","docId":"web/tutorial-implement-custom-activity","unlisted":false},{"type":"link","label":"Implement a Custom Form Element","href":"/docs/web/tutorial-implement-custom-form-elements","docId":"web/tutorial-implement-custom-form-elements","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"VertiGIS Studio Web SDK","items":[{"type":"link","label":"SDK Overview","href":"/docs/web/sdk-overview","docId":"web/sdk-overview","unlisted":false},{"type":"link","label":"SDK Samples","href":"/docs/web/sdk-samples","docId":"web/sdk-samples","unlisted":false},{"type":"link","label":"Deployment","href":"/docs/web/sdk-deployment","docId":"web/sdk-deployment","unlisted":false},{"type":"category","label":"Components","items":[{"type":"link","label":"Overview","href":"/docs/web/sdk-components-overview","docId":"web/sdk-components-overview","unlisted":false},{"type":"link","label":"Create a Component","href":"/docs/web/sdk-components-create","docId":"web/sdk-components-create","unlisted":false},{"type":"link","label":"Component Reference","href":"/docs/web/sdk-components-reference","docId":"web/sdk-components-reference","unlisted":false},{"type":"link","label":"Component Hooks","href":"/docs/web/sdk-components-hooks","docId":"web/sdk-components-hooks","unlisted":false},{"type":"link","label":"UIContext","href":"/docs/web/sdk-components-ui-context","docId":"web/sdk-components-ui-context","unlisted":false},{"type":"link","label":"Component Interactions","href":"/docs/web/sdk-components-interactions","docId":"web/sdk-components-interactions","unlisted":false},{"type":"link","label":"Service Injection","href":"/docs/web/sdk-components-injecting-services","docId":"web/sdk-components-injecting-services","unlisted":false},{"type":"link","label":"Component Styling","href":"/docs/web/sdk-components-styling","docId":"web/sdk-components-styling","unlisted":false},{"type":"link","label":"Internationalization","href":"/docs/web/sdk-components-internationalization","docId":"web/sdk-components-internationalization","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Services","items":[{"type":"link","label":"Overview","href":"/docs/web/sdk-services-overview","docId":"web/sdk-services-overview","unlisted":false},{"type":"link","label":"Create a Service","href":"/docs/web/sdk-services-create","docId":"web/sdk-services-create","unlisted":false},{"type":"link","label":"Service Reference","href":"/docs/web/sdk-services-reference","docId":"web/sdk-services-reference","unlisted":false},{"type":"link","label":"Service Injection","href":"/docs/web/sdk-services-injecting-services","docId":"web/sdk-services-injecting-services","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Events","items":[{"type":"link","label":"Overview","href":"/docs/web/sdk-events-overview","docId":"web/sdk-events-overview","unlisted":false},{"type":"link","label":"Events Reference","href":"/docs/web/sdk-events-reference","docId":"web/sdk-events-reference","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Commands and Operations","href":"/docs/web/sdk-commands-operations","docId":"web/sdk-commands-operations","unlisted":false},{"type":"link","label":"Serializable Properties","href":"/docs/web/sdk-serializable-properties","docId":"web/sdk-serializable-properties","unlisted":false},{"type":"link","label":"Adding Icons","href":"/docs/web/sdk-adding-icons","docId":"web/sdk-adding-icons","unlisted":false},{"type":"link","label":"Internationalization","href":"/docs/web/sdk-internationalization","docId":"web/sdk-internationalization","unlisted":false},{"type":"link","label":"Reference Third Party Libraries","href":"/docs/web/sdk-reference-third-party-libraries","docId":"web/sdk-reference-third-party-libraries","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Build a Custom Command and Operation","href":"/docs/web/tutorial-implement-command-operation","docId":"web/tutorial-implement-command-operation","unlisted":false},{"type":"link","label":"Build a Custom Component with UI","href":"/docs/web/tutorial-implement-component-with-ui","docId":"web/tutorial-implement-component-with-ui","unlisted":false},{"type":"link","label":"Import the MapModel into a Component","href":"/docs/web/tutorial-import-map-model","docId":"web/tutorial-import-map-model","unlisted":false},{"type":"link","label":"Pull Component Data from App Config","href":"/docs/web/tutorial-implement-component-participate-app-config","docId":"web/tutorial-implement-component-participate-app-config","unlisted":false},{"type":"link","label":"Subscribe to an Existing Event","href":"/docs/web/tutorial-events-subscribe","docId":"web/tutorial-events-subscribe","unlisted":false},{"type":"link","label":"Translate a Component\'s Text","href":"/docs/web/tutorial-internationalization","docId":"web/tutorial-internationalization","unlisted":false},{"type":"link","label":"Using the canExecute Command Hook","href":"/docs/web/tutorial-command-can-execute","docId":"web/tutorial-command-can-execute","unlisted":false},{"type":"link","label":"Manage Dynamic Data with a Service","href":"/docs/web/tutorial-service-dynamic-data","docId":"web/tutorial-service-dynamic-data","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"API","items":[{"type":"link","label":"Commands and Operations Reference","href":"/docs/web/api-commands-operations","docId":"web/api-commands-operations","unlisted":false},{"type":"link","label":"Events Reference","href":"/docs/web/api-events","docId":"web/api-events","unlisted":false},{"type":"link","label":"Argument Definition Reference","href":"/docs/web/api-argument-definitions","docId":"web/api-argument-definitions","unlisted":false},{"type":"link","label":"Components and Services","href":"/docs/web/api-components","docId":"web/api-components","unlisted":false},{"type":"link","label":"API Object Reference","href":"/docs/web/api-objects","docId":"web/api-objects","unlisted":false}],"collapsed":true,"collapsible":true}],"workflow":[{"type":"link","label":"Overview","href":"/docs/workflow/overview","docId":"workflow/overview","unlisted":false},{"type":"link","label":"Key Concepts","href":"/docs/workflow/key-concepts","docId":"workflow/key-concepts","unlisted":false},{"type":"category","label":"VertiGIS Studio Workflow TypeScript SDK","items":[{"type":"link","label":"SDK Overview","href":"/docs/workflow/sdk-web-overview","docId":"workflow/sdk-web-overview","unlisted":false},{"type":"link","label":"Create an Activity","href":"/docs/workflow/sdk-web-create-activity","docId":"workflow/sdk-web-create-activity","unlisted":false},{"type":"link","label":"Create a Form Element","href":"/docs/workflow/sdk-web-create-element","docId":"workflow/sdk-web-create-element","unlisted":false},{"type":"link","label":"Activity Reference","href":"/docs/workflow/sdk-web-activity-reference","docId":"workflow/sdk-web-activity-reference","unlisted":false},{"type":"link","label":"Form Element Reference","href":"/docs/workflow/sdk-web-form-reference","docId":"workflow/sdk-web-form-reference","unlisted":false},{"type":"link","label":"Integrating the ArcGIS API for JavaScript","href":"/docs/workflow/sdk-web-integrating-the-arcgis-api","docId":"workflow/sdk-web-integrating-the-arcgis-api","unlisted":false},{"type":"link","label":"Activity Block Tags","href":"/docs/workflow/sdk-web-activity-block-tags","docId":"workflow/sdk-web-activity-block-tags","unlisted":false},{"type":"link","label":"Reference a Third Party Library","href":"/docs/workflow/sdk-web-reference-third-party-library","docId":"workflow/sdk-web-reference-third-party-library","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Implement an Activity that Calculates a Logarithm","href":"/docs/workflow/tutorial-web-calculate-logarithm-activity","docId":"workflow/tutorial-web-calculate-logarithm-activity","unlisted":false},{"type":"link","label":"Add a Layer to a Map with an Activity","href":"/docs/workflow/tutorial-web-add-layer-to-map","docId":"workflow/tutorial-web-add-layer-to-map","unlisted":false},{"type":"link","label":"Implement an activity that creates a QR Code image using a Third Party Library","href":"/docs/workflow/tutorial-web-qr-code-activity","docId":"workflow/tutorial-web-qr-code-activity","unlisted":false},{"type":"link","label":"Implement a Star Rating Custom Form Element","href":"/docs/workflow/tutorial-web-implement-star-rating-form-element","docId":"workflow/tutorial-web-implement-star-rating-form-element","unlisted":false},{"type":"link","label":"Implement a Star Rating Custom Form Element using a Third Party Library","href":"/docs/workflow/tutorial-web-implement-third-party-star-rating-form-element","docId":"workflow/tutorial-web-implement-third-party-star-rating-form-element","unlisted":false},{"type":"link","label":"Implement a Signature Block Custom Form Element using a Third Party Library","href":"/docs/workflow/tutorial-web-implement-third-party-signature-block-form-element","docId":"workflow/tutorial-web-implement-third-party-signature-block-form-element","unlisted":false},{"type":"link","label":"Implement a Captcha Custom Form Element using a Third Party Library","href":"/docs/workflow/tutorial-web-implement-third-party-captcha-form-element","docId":"workflow/tutorial-web-implement-third-party-captcha-form-element","unlisted":false},{"type":"link","label":"Implement a QR Code Custom Form Element using a Third Party Library","href":"/docs/workflow/tutorial-web-implement-third-party-qr-code-form-element","docId":"workflow/tutorial-web-implement-third-party-qr-code-form-element","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"VertiGIS Studio Workflow .NET SDK","items":[{"type":"link","label":"SDK Overview","href":"/docs/workflow/sdk-net-overview","docId":"workflow/sdk-net-overview","unlisted":false},{"type":"link","label":"Registering .NET Activities with VertiGIS Studio Workflow Designer","href":"/docs/workflow/sdk-net-register-activities","docId":"workflow/sdk-net-register-activities","unlisted":false},{"type":"link","label":"Integrating the ArcGIS Runtime SDK for .NET","href":"/docs/workflow/sdk-net-integrating-the-arcgis-api","docId":"workflow/sdk-net-integrating-the-arcgis-api","unlisted":false},{"type":"link","label":"Integrating the ArcGIS Pro SDK","href":"/docs/workflow/sdk-net-integrating-the-arcgis-pro-api","docId":"workflow/sdk-net-integrating-the-arcgis-pro-api","unlisted":false},{"type":"category","label":"VertiGIS Studio Mobile","items":[{"type":"link","label":"SDK Overview","href":"/docs/workflow/sdk-mobile-overview","docId":"workflow/sdk-mobile-overview","unlisted":false},{"type":"link","label":"Create an Activity","href":"/docs/workflow/sdk-mobile-create-activity","docId":"workflow/sdk-mobile-create-activity","unlisted":false},{"type":"link","label":"Activity Reference","href":"/docs/workflow/sdk-mobile-activity-reference","docId":"workflow/sdk-mobile-activity-reference","unlisted":false},{"type":"link","label":"Form Element Reference","href":"/docs/workflow/sdk-mobile-form-reference","docId":"workflow/sdk-mobile-form-reference","unlisted":false},{"type":"link","label":"Reference a Third Party Library","href":"/docs/workflow/sdk-mobile-reference-third-party-library","docId":"workflow/sdk-mobile-reference-third-party-library","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Implement an Activity that Calculates a Logarithm","href":"/docs/workflow/tutorial-mobile-calculate-logarithm-activity","docId":"workflow/tutorial-mobile-calculate-logarithm-activity","unlisted":false},{"type":"link","label":"Show a Callout on the Map with an Activity","href":"/docs/workflow/tutorial-mobile-show-map-callout","docId":"workflow/tutorial-mobile-show-map-callout","unlisted":false},{"type":"link","label":"Implement an Loading Indicator Form Element","href":"/docs/workflow/tutorial-mobile-activity-indicator-form-element","docId":"workflow/tutorial-mobile-activity-indicator-form-element","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"VertiGIS Studio Desktop","items":[{"type":"link","label":"Overview","href":"/docs/workflow/sdk-desktop-overview","docId":"workflow/sdk-desktop-overview","unlisted":false},{"type":"link","label":"Create an Activity","href":"/docs/workflow/sdk-desktop-create-activity","docId":"workflow/sdk-desktop-create-activity","unlisted":false},{"type":"link","label":"Input and output wrapping","href":"/docs/workflow/sdk-desktop-wrapping","docId":"workflow/sdk-desktop-wrapping","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"VertiGIS Studio Workflow Server","items":[{"type":"link","label":"SDK Overview","href":"/docs/workflow/sdk-server-overview","docId":"workflow/sdk-server-overview","unlisted":false},{"type":"link","label":"Create an Activity","href":"/docs/workflow/sdk-server-create-activity","docId":"workflow/sdk-server-create-activity","unlisted":false},{"type":"link","label":"Reference a Third Party Library","href":"/docs/workflow/sdk-server-reference-third-party-library","docId":"workflow/sdk-server-reference-third-party-library","unlisted":false},{"type":"link","label":"Implement an Activity that Calculates a Logarithm","href":"/docs/workflow/tutorial-server-calculate-logarithm-activity","docId":"workflow/tutorial-server-calculate-logarithm-activity","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"mobile":[{"type":"link","label":"Overview","href":"/docs/mobile/overview","docId":"mobile/overview","unlisted":false},{"type":"link","label":"Key Concepts","href":"/docs/mobile/key-concepts","docId":"mobile/key-concepts","unlisted":false},{"type":"category","label":"Configuration","items":[{"type":"category","label":"Layout","items":[{"type":"link","label":"Getting Started","href":"/docs/mobile/configuration-layout-getting-started","docId":"mobile/configuration-layout-getting-started","unlisted":false},{"type":"link","label":"Layout Reference","href":"/docs/mobile/configuration-layout-reference","docId":"mobile/configuration-layout-reference","unlisted":false},{"type":"link","label":"Advanced Model Binding","href":"/docs/mobile/configuration-advanced-model-binding","docId":"mobile/configuration-advanced-model-binding","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"App Config","items":[{"type":"link","label":"Getting Started","href":"/docs/mobile/configuration-app-config-getting-started","docId":"mobile/configuration-app-config-getting-started","unlisted":false},{"type":"link","label":"App Config Reference","href":"/docs/mobile/configuration-app-config-reference","docId":"mobile/configuration-app-config-reference","unlisted":false},{"type":"link","label":"Configuring the Theme","href":"/docs/mobile/configuration-theme","docId":"mobile/configuration-theme","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Commands and Operations","href":"/docs/mobile/configuration-commands-operations","docId":"mobile/configuration-commands-operations","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Configure Button Click Behavior","href":"/docs/mobile/tutorial-configure-button-click","docId":"mobile/tutorial-configure-button-click","unlisted":false},{"type":"link","label":"Change the Default Behavior of Components","href":"/docs/mobile/tutorial-change-default-behavior","docId":"mobile/tutorial-change-default-behavior","unlisted":false},{"type":"link","label":"Customize the Theme","href":"/docs/mobile/tutorial-customize-application-theme","docId":"mobile/tutorial-customize-application-theme","unlisted":false},{"type":"link","label":"Add a Medium Layout","href":"/docs/mobile/tutorial-add-medium-layout","docId":"mobile/tutorial-add-medium-layout","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"VertiGIS Studio Workflow","items":[{"type":"link","label":"Run a Workflow from App Config","href":"/docs/mobile/tutorial-run-workflow-app-config","docId":"mobile/tutorial-run-workflow-app-config","unlisted":false},{"type":"link","label":"Display a Custom Form","href":"/docs/mobile/tutorial-display-custom-form","docId":"mobile/tutorial-display-custom-form","unlisted":false},{"type":"link","label":"Change Default Map Click Behavior","href":"/docs/mobile/tutorial-change-default-map-click-behavior","docId":"mobile/tutorial-change-default-map-click-behavior","unlisted":false},{"type":"link","label":"Implement a Custom Form Element","href":"/docs/mobile/tutorial-implement-custom-form-elements","docId":"mobile/tutorial-implement-custom-form-elements","unlisted":false},{"type":"link","label":"Implement a Custom Activity","href":"/docs/mobile/tutorial-implement-custom-activity","docId":"mobile/tutorial-implement-custom-activity","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"VertiGIS Studio Mobile SDK","items":[{"type":"link","label":"SDK Overview","href":"/docs/mobile/sdk-overview","docId":"mobile/sdk-overview","unlisted":false},{"type":"link","label":"Edit the Layout and App Config","href":"/docs/mobile/sdk-edit-layout-app-config","docId":"mobile/sdk-edit-layout-app-config","unlisted":false},{"type":"link","label":"Quickstart Reference","href":"/docs/mobile/sdk-quickstart-reference","docId":"mobile/sdk-quickstart-reference","unlisted":false},{"type":"link","label":"SDK Samples","href":"/docs/mobile/sdk-samples","docId":"mobile/sdk-samples","unlisted":false},{"type":"link","label":"Deployment","href":"/docs/mobile/sdk-deployment","docId":"mobile/sdk-deployment","unlisted":false},{"type":"link","label":"Commands and Operations","href":"/docs/mobile/sdk-commands-operations","docId":"mobile/sdk-commands-operations","unlisted":false},{"type":"category","label":"Components","items":[{"type":"link","label":"Overview","href":"/docs/mobile/sdk-components-overview","docId":"mobile/sdk-components-overview","unlisted":false},{"type":"link","label":"Create a Component","href":"/docs/mobile/sdk-components-create","docId":"mobile/sdk-components-create","unlisted":false},{"type":"link","label":"Component Reference","href":"/docs/mobile/sdk-components-reference","docId":"mobile/sdk-components-reference","unlisted":false},{"type":"link","label":"View Model Helper Class","href":"/docs/mobile/sdk-components-viewmodel-helper-class","docId":"mobile/sdk-components-viewmodel-helper-class","unlisted":false},{"type":"link","label":"Component Styling","href":"/docs/mobile/sdk-components-styling","docId":"mobile/sdk-components-styling","unlisted":false},{"type":"link","label":"Internationalization","href":"/docs/mobile/sdk-components-internationalization","docId":"mobile/sdk-components-internationalization","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Services","items":[{"type":"link","label":"Overview","href":"/docs/mobile/sdk-services-overview","docId":"mobile/sdk-services-overview","unlisted":false},{"type":"link","label":"Create a Service","href":"/docs/mobile/sdk-services-create","docId":"mobile/sdk-services-create","unlisted":false},{"type":"link","label":"Service Reference","href":"/docs/mobile/sdk-services-reference","docId":"mobile/sdk-services-reference","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Events","items":[{"type":"link","label":"Overview","href":"/docs/mobile/sdk-events-overview","docId":"mobile/sdk-events-overview","unlisted":false},{"type":"link","label":"Events Reference","href":"/docs/mobile/sdk-events-reference","docId":"mobile/sdk-events-reference","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Dependency Injection","href":"/docs/mobile/sdk-dependency-injection","docId":"mobile/sdk-dependency-injection","unlisted":false},{"type":"link","label":"Component and Service Interactions","href":"/docs/mobile/sdk-component-service-interactions","docId":"mobile/sdk-component-service-interactions","unlisted":false},{"type":"link","label":"Internationalization","href":"/docs/mobile/sdk-internationalization","docId":"mobile/sdk-internationalization","unlisted":false},{"type":"link","label":"Memory Management","href":"/docs/mobile/sdk-memory-leaks","docId":"mobile/sdk-memory-leaks","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Build a Custom Command","href":"/docs/mobile/tutorial-implement-command-operation","docId":"mobile/tutorial-implement-command-operation","unlisted":false},{"type":"link","label":"Build a Custom Component with UI","href":"/docs/mobile/tutorial-implement-component-with-ui","docId":"mobile/tutorial-implement-component-with-ui","unlisted":false},{"type":"link","label":"Pull Component Data from App Config","href":"/docs/mobile/tutorial-implement-component-participate-app-config","docId":"mobile/tutorial-implement-component-participate-app-config","unlisted":false},{"type":"link","label":"Build a Service that Fetches Dynamic Data","href":"/docs/mobile/tutorial-implement-service-fetch-dynamic-data","docId":"mobile/tutorial-implement-service-fetch-dynamic-data","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"API","items":[{"type":"link","label":"Commands and Operations Reference","href":"/docs/mobile/api-commands-operations","docId":"mobile/api-commands-operations","unlisted":false},{"type":"link","label":"Events Reference","href":"/docs/mobile/api-events","docId":"mobile/api-events","unlisted":false},{"type":"link","label":"Argument Definition Reference","href":"/docs/mobile/api-argument-definitions","docId":"mobile/api-argument-definitions","unlisted":false},{"type":"link","label":"Components and Services","href":"/docs/mobile/api-components","docId":"mobile/api-components","unlisted":false}],"collapsed":true,"collapsible":true}],"reporting":[{"type":"link","label":"Overview","href":"/docs/reporting/overview","docId":"reporting/overview","unlisted":false},{"type":"link","label":"Key Concepts","href":"/docs/reporting/key-concepts","docId":"reporting/key-concepts","unlisted":false},{"type":"category","label":"VertiGIS Studio Reporting SDK","items":[{"type":"link","label":"SDK Overview","href":"/docs/reporting/sdk-overview","docId":"reporting/sdk-overview","unlisted":false},{"type":"link","label":"Run a report from JavaScript","href":"/docs/reporting/sdk-js-overview","docId":"reporting/sdk-js-overview","unlisted":false},{"type":"link","label":"Run a report from Python","href":"/docs/reporting/sdk-py-overview","docId":"reporting/sdk-py-overview","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Run a report from an ArcGIS Notebook","href":"/docs/reporting/tutorial-arcgis-notebook","docId":"reporting/tutorial-arcgis-notebook","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}]},"docs":{"mobile/api-argument-definitions":{"id":"mobile/api-argument-definitions","title":"Argument Definition Reference","description":"VertiGIS Studio Mobile - Argument Definition API Reference","sidebar":"mobile"},"mobile/api-commands-operations":{"id":"mobile/api-commands-operations","title":"Commands and Operations Reference","description":"VertiGIS Studio Mobile - Commands and Operations API Reference","sidebar":"mobile"},"mobile/api-commands-operations-events":{"id":"mobile/api-commands-operations-events","title":"Redirecting...","description":"{/ prettier-ignore /}"},"mobile/api-components":{"id":"mobile/api-components","title":"Components and Services","description":"VertiGIS Studio Mobile - Component and service configuration","sidebar":"mobile"},"mobile/api-events":{"id":"mobile/api-events","title":"Events Reference","description":"VertiGIS Studio Mobile - Events API Reference","sidebar":"mobile"},"mobile/configuration-advanced-model-binding":{"id":"mobile/configuration-advanced-model-binding","title":"Advanced Model Binding","description":"VertiGIS Studio Mobile - Learn about advanced model binding with layout","sidebar":"mobile"},"mobile/configuration-app-config-getting-started":{"id":"mobile/configuration-app-config-getting-started","title":"App Config","description":"VertiGIS Studio Mobile - Learn about VertiGIS Studio Mobile\'s configuration concepts","sidebar":"mobile"},"mobile/configuration-app-config-reference":{"id":"mobile/configuration-app-config-reference","title":"App Config Reference","description":"VertiGIS Studio Mobile - App config reference","sidebar":"mobile"},"mobile/configuration-commands-operations":{"id":"mobile/configuration-commands-operations","title":"Commands and Operations","description":"VertiGIS Studio Mobile - Learn about commands and operations","sidebar":"mobile"},"mobile/configuration-layout-getting-started":{"id":"mobile/configuration-layout-getting-started","title":"Layout","description":"VertiGIS Studio Mobile - Learn about layout concepts","sidebar":"mobile"},"mobile/configuration-layout-reference":{"id":"mobile/configuration-layout-reference","title":"Layout Reference","description":"VertiGIS Studio Mobile - Layout Reference","sidebar":"mobile"},"mobile/configuration-theme":{"id":"mobile/configuration-theme","title":"Configuring the Theme","description":"VertiGIS Studio Mobile - Configuring the application theme using app config","sidebar":"mobile"},"mobile/key-concepts":{"id":"mobile/key-concepts","title":"Key Concepts","description":"VertiGIS Studio Mobile - Learn about key concepts of the VertiGIS Studio Mobile Framework","sidebar":"mobile"},"mobile/overview":{"id":"mobile/overview","title":"Overview","description":"VertiGIS Studio Mobile - Overview","sidebar":"mobile"},"mobile/sdk-commands-operations":{"id":"mobile/sdk-commands-operations","title":"Commands and Operations","description":"VertiGIS Studio Mobile - Learn how to register and run commands and operations in custom services and components","sidebar":"mobile"},"mobile/sdk-component-service-interactions":{"id":"mobile/sdk-component-service-interactions","title":"Component and Service Interactions","description":"VertiGIS Studio Mobile - Learn how to make custom components and services interact with the larger application","sidebar":"mobile"},"mobile/sdk-components-create":{"id":"mobile/sdk-components-create","title":"Create a Component","description":"VertiGIS Studio Mobile - Create a component using the VertiGIS Studio Mobile SDK Quickstart","sidebar":"mobile"},"mobile/sdk-components-internationalization":{"id":"mobile/sdk-components-internationalization","title":"Internationalization","description":"VertiGIS Studio Mobile - Learn how to translate a components user facing text","sidebar":"mobile"},"mobile/sdk-components-overview":{"id":"mobile/sdk-components-overview","title":"Components Overview","description":"VertiGIS Studio Mobile - Overview of components","sidebar":"mobile"},"mobile/sdk-components-reference":{"id":"mobile/sdk-components-reference","title":"Component Reference","description":"VertiGIS Studio Mobile - Reference for custom components in VertiGIS Studio Mobile","sidebar":"mobile"},"mobile/sdk-components-styling":{"id":"mobile/sdk-components-styling","title":"Component Styling","description":"VertiGIS Studio Mobile - Learn how to style a custom component","sidebar":"mobile"},"mobile/sdk-components-viewmodel-helper-class":{"id":"mobile/sdk-components-viewmodel-helper-class","title":"View Model Helper Class","description":"VertiGIS Studio Mobile - Learn about the base class for ViewModels in mobile, NotifyPropertyBase","sidebar":"mobile"},"mobile/sdk-dependency-injection":{"id":"mobile/sdk-dependency-injection","title":"Dependency Injection","description":"VertiGIS Studio Mobile - Learn about dependency injection in VertiGIS Studio Mobile","sidebar":"mobile"},"mobile/sdk-deployment":{"id":"mobile/sdk-deployment","title":"Deployment","description":"VertiGIS Studio Mobile - Deploy a VertiGIS Studio Mobile Application","sidebar":"mobile"},"mobile/sdk-edit-layout-app-config":{"id":"mobile/sdk-edit-layout-app-config","title":"Edit the Layout and App Config","description":"VertiGIS Studio Mobile - Edit the layout and app config in the SDK Quickstart","sidebar":"mobile"},"mobile/sdk-events-overview":{"id":"mobile/sdk-events-overview","title":"Events Overview","description":"VertiGIS Studio Mobile - Overview of events","sidebar":"mobile"},"mobile/sdk-events-reference":{"id":"mobile/sdk-events-reference","title":"Events Reference","description":"VertiGIS Studio Mobile - Events Reference","sidebar":"mobile"},"mobile/sdk-internationalization":{"id":"mobile/sdk-internationalization","title":"Internationalization","description":"VertiGIS Studio Mobile - Internationalization reference","sidebar":"mobile"},"mobile/sdk-memory-leaks":{"id":"mobile/sdk-memory-leaks","title":"Memory Management","description":"VertiGIS Studio Mobile - Learn about memory management in VertiGIS Studio Mobile","sidebar":"mobile"},"mobile/sdk-overview":{"id":"mobile/sdk-overview","title":"SDK Overview","description":"VertiGIS Studio Mobile - Learn how to get started with the VertiGIS Studio Mobile SDK","sidebar":"mobile"},"mobile/sdk-quickstart-reference":{"id":"mobile/sdk-quickstart-reference","title":"Quickstart Reference","description":"VertiGIS Studio Mobile - Learn more about the VertiGIS Studio Mobile SDK Quickstart Project","sidebar":"mobile"},"mobile/sdk-samples":{"id":"mobile/sdk-samples","title":"SDK Samples","description":"VertiGIS Studio Mobile - Learn about the VertiGIS Studio Mobile SDK Samples project","sidebar":"mobile"},"mobile/sdk-services-create":{"id":"mobile/sdk-services-create","title":"Create a Service","description":"VertiGIS Studio Mobile - Create a service using the VertiGIS Studio Mobile SDK Quickstart","sidebar":"mobile"},"mobile/sdk-services-overview":{"id":"mobile/sdk-services-overview","title":"Services Overview","description":"VertiGIS Studio Mobile - Overview of services","sidebar":"mobile"},"mobile/sdk-services-reference":{"id":"mobile/sdk-services-reference","title":"Service Reference","description":"VertiGIS Studio Mobile - Service reference","sidebar":"mobile"},"mobile/snippets/cleanup-handles":{"id":"mobile/snippets/cleanup-handles","title":"cleanup-handles","description":"It is vital that subscription handles are cleaned up when the object is cleaned up, otherwise dangling references can occur. This can be done by implementing the IDisposable and IDisposableTracker interface, and then providing this as the second argument to a call to subscribe. ServiceBase and ComponentBase already implement these interfaces so you don\'t have to."},"mobile/snippets/designer-callout":{"id":"mobile/snippets/designer-callout","title":"designer-callout","description":"The VertiGIS Studio Mobile Designer allows you to edit your application\'s layout, configure custom behaviors for buttons and other UI components, and solve complex business problems through VertiGIS Studio Workflow. Many use cases can be solved through the VertiGIS Studio Mobile Designer and don\'t require custom development."},"mobile/snippets/follow-along":{"id":"mobile/snippets/follow-along","title":"follow-along","description":"Check out the Quickstart and edit the default app config and layout."},"mobile/snippets/prereqs-layout-config-editing":{"id":"mobile/snippets/prereqs-layout-config-editing","title":"prereqs-layout-config-editing","description":"Follow along by setting up the VertiGIS Studio Mobile SDK and editing the minimal layout and app config provided."},"mobile/snippets/quickstart-prereqs":{"id":"mobile/snippets/quickstart-prereqs","title":"quickstart-prereqs","description":"Check out and setup the VertiGIS Studio Mobile SDK Quickstart project."},"mobile/snippets/relevant-workflow-samples":{"id":"mobile/snippets/relevant-workflow-samples","title":"relevant-workflow-samples","description":"The VertiGIS Studio Mobile SDK Samples project has a variety of workflow samples:"},"mobile/snippets/translation-callout":{"id":"mobile/snippets/translation-callout","title":"translation-callout","description":"Existing language strings for an application can be customized for any language in the VertiGIS Studio Mobile s Designer. To provide a complete translation in an entirely new locale for VertiGIS Studio Mobile, please contact us."},"mobile/snippets/tweak-layout-config":{"id":"mobile/snippets/tweak-layout-config","title":"tweak-layout-config","description":"If you just need to make a small change to the layout and app config of an existing application, you can download the config and layout files for the application, tweak them, and then re-upload them."},"mobile/tutorial-add-medium-layout":{"id":"mobile/tutorial-add-medium-layout","title":"Add a Medium Layout","description":"VertiGIS Studio Mobile - Learn how to add a medium layout definition for tablets.","sidebar":"mobile"},"mobile/tutorial-change-default-behavior":{"id":"mobile/tutorial-change-default-behavior","title":"Change the Default Behavior of Components","description":"VertiGIS Studio Mobile - Learn how to configure VertiGIS Studio Mobile to change default application behavior","sidebar":"mobile"},"mobile/tutorial-change-default-map-click-behavior":{"id":"mobile/tutorial-change-default-map-click-behavior","title":"Change Default Map Click Behavior","description":"VertiGIS Studio Mobile - Learn how to configure VertiGIS Studio Mobile to change the default map click behavior","sidebar":"mobile"},"mobile/tutorial-configure-button-click":{"id":"mobile/tutorial-configure-button-click","title":"Configure Button Click Behavior","description":"VertiGIS Studio Mobile - Learn how to run an existing command or operation on a button press","sidebar":"mobile"},"mobile/tutorial-customize-application-theme":{"id":"mobile/tutorial-customize-application-theme","title":"Customize the Theme","description":"VertiGIS Studio Mobile - Learn how to customize the look and feel of your VertiGIS Studio Mobile application","sidebar":"mobile"},"mobile/tutorial-display-custom-form":{"id":"mobile/tutorial-display-custom-form","title":"Display a Custom Form","description":"VertiGIS Studio Mobile - Learn how to display a custom form","sidebar":"mobile"},"mobile/tutorial-implement-command-operation":{"id":"mobile/tutorial-implement-command-operation","title":"Build a Custom Command","description":"VertiGIS Studio Mobile - Learn how to implement a custom command","sidebar":"mobile"},"mobile/tutorial-implement-component-participate-app-config":{"id":"mobile/tutorial-implement-component-participate-app-config","title":"Pull Component Data from App Config","description":"VertiGIS Studio Mobile - Learn how to make a component participate in app config.","sidebar":"mobile"},"mobile/tutorial-implement-component-with-ui":{"id":"mobile/tutorial-implement-component-with-ui","title":"Build a Custom Component with UI","description":"VertiGIS Studio Mobile - Learn how to implement a custom component with UI","sidebar":"mobile"},"mobile/tutorial-implement-custom-activity":{"id":"mobile/tutorial-implement-custom-activity","title":"Implement a Custom Activity","description":"VertiGIS Studio Mobile - Learn how to implement a custom workflow activity","sidebar":"mobile"},"mobile/tutorial-implement-custom-form-elements":{"id":"mobile/tutorial-implement-custom-form-elements","title":"Implement a Custom Form Element","description":"VertiGIS Studio Mobile - Learn how to implement a custom form element","sidebar":"mobile"},"mobile/tutorial-implement-service-fetch-dynamic-data":{"id":"mobile/tutorial-implement-service-fetch-dynamic-data","title":"Build a Service that Fetches Dynamic Data","description":"VertiGIS Studio Mobile - Implement a custom Service","sidebar":"mobile"},"mobile/tutorial-run-workflow-app-config":{"id":"mobile/tutorial-run-workflow-app-config","title":"Run a Workflow from App Config","description":"VertiGIS Studio Mobile - Learn how to run a workflow using app config and layout","sidebar":"mobile"},"reporting/key-concepts":{"id":"reporting/key-concepts","title":"Key Concepts","description":"VertiGIS Studio Reporting - Learn about key concepts of VertiGIS Studio Reporting","sidebar":"reporting"},"reporting/overview":{"id":"reporting/overview","title":"Overview","description":"VertiGIS Studio Reporting - Overview","sidebar":"reporting"},"reporting/sdk-js-overview":{"id":"reporting/sdk-js-overview","title":"Run a report from JavaScript","description":"VertiGIS Studio Reporting - JavaScript","sidebar":"reporting"},"reporting/sdk-overview":{"id":"reporting/sdk-overview","title":"SDK Overview","description":"VertiGIS Studio Reporting - Overview of the SDK","sidebar":"reporting"},"reporting/sdk-py-overview":{"id":"reporting/sdk-py-overview","title":"Run a report from Python","description":"VertiGIS Studio Reporting - Python","sidebar":"reporting"},"reporting/snippets/designer-callout":{"id":"reporting/snippets/designer-callout","title":"designer-callout","description":"The VertiGIS Studio Report Designer has an extensive suite of tools for laying out reports, specifying the data that you want to include, and presenting the data using charts, tables, and other configurable elements."},"reporting/tutorial-arcgis-notebook":{"id":"reporting/tutorial-arcgis-notebook","title":"Run a report from an ArcGIS Notebook","description":"VertiGIS Studio Reporting - ArcGIS Notebook","sidebar":"reporting"},"snippets/app-item":{"id":"snippets/app-item","title":"app-item","description":"An app config file is composed of a list of app items. App items can potentially be anything. Each app item has an item $type, which viewer is aware of and knows how to locate and load. They usually they represent configuration for components, maps, portal items, or shared data. All item app configuration is specified within the items array of the app.json file."},"snippets/autofac-mobile":{"id":"snippets/autofac-mobile","title":"autofac-mobile","description":"VertiGIS Studio Mobile uses Autofac to register, locate, and inject components, services and other classes. See dependency injection for more info."},"snippets/workflow-url":{"id":"snippets/workflow-url","title":"workflow-url","description":"https://apps.vertigisstudio.com/workflow/designer/#workflow="},"web/api-argument-definitions":{"id":"web/api-argument-definitions","title":"Argument Definition Reference","description":"VertiGIS Studio Web - Argument Definition API Reference","sidebar":"web"},"web/api-commands-operations":{"id":"web/api-commands-operations","title":"Commands and Operations Reference","description":"VertiGIS Studio Web - Commands and Operations API Reference","sidebar":"web"},"web/api-commands-operations-events":{"id":"web/api-commands-operations-events","title":"Redirecting...","description":"{/ prettier-ignore /}"},"web/api-components":{"id":"web/api-components","title":"Components and Services","description":"VertiGIS Studio Web - Component and service configuration","sidebar":"web"},"web/api-events":{"id":"web/api-events","title":"Events Reference","description":"VertiGIS Studio Web - Events API Reference","sidebar":"web"},"web/api-objects":{"id":"web/api-objects","title":"API Object Reference","description":"VertiGIS Studio - API Object Reference","sidebar":"web"},"web/app-initialization-events":{"id":"web/app-initialization-events","title":"App Initialization Events","description":"VertiGIS Studio Web - Key event hooks during app initialization and how to use them","sidebar":"web"},"web/configuration-advanced-model-binding":{"id":"web/configuration-advanced-model-binding","title":"Advanced Model Binding","description":"VertiGIS Studio Web - Learn about advanced model binding with layout","sidebar":"web"},"web/configuration-app-config-getting-started":{"id":"web/configuration-app-config-getting-started","title":"App Config","description":"VertiGIS Studio Web - Learn about VertiGIS Studio Web\'s configuration concepts","sidebar":"web"},"web/configuration-app-config-reference":{"id":"web/configuration-app-config-reference","title":"App Config Reference","description":"VertiGIS Studio Web - Reference for App Config","sidebar":"web"},"web/configuration-commands-operations":{"id":"web/configuration-commands-operations","title":"Commands and Operations","description":"VertiGIS Studio Web - Learn about commands and operations","sidebar":"web"},"web/configuration-layout-getting-started":{"id":"web/configuration-layout-getting-started","title":"Layout","description":"VertiGIS Studio Web - Learn about layout concepts","sidebar":"web"},"web/configuration-layout-reference":{"id":"web/configuration-layout-reference","title":"Layout Reference","description":"VertiGIS Studio Web - Learn about the core layout components","sidebar":"web"},"web/configuration-theme":{"id":"web/configuration-theme","title":"Configuring the Theme","description":"VertiGIS Studio Web - Configuring the application theme using app config","sidebar":"web"},"web/key-concepts":{"id":"web/key-concepts","title":"Key Concepts","description":"VertiGIS Studio Web - Learn about key concepts of VertiGIS Studio Web","sidebar":"web"},"web/overview":{"id":"web/overview","title":"Overview","description":"VertiGIS Studio Web - Overview","sidebar":"web"},"web/sdk-adding-icons":{"id":"web/sdk-adding-icons","title":"Adding Icons","description":"VertiGIS Studio Web - Learn how to add custom icons to the Web SDK","sidebar":"web"},"web/sdk-commands-operations":{"id":"web/sdk-commands-operations","title":"Commands and Operations","description":"VertiGIS Studio Web - Learn how to register and run commands and operations in custom components and services","sidebar":"web"},"web/sdk-components-create":{"id":"web/sdk-components-create","title":"Create a Component","description":"VertiGIS Studio Web - Create a component for VertiGIS Studio Web","sidebar":"web"},"web/sdk-components-hooks":{"id":"web/sdk-components-hooks","title":"Component Hooks","description":"VertiGIS Studio Web - Learn about the React hooks used to react to changes on a component\'s model","sidebar":"web"},"web/sdk-components-injecting-services":{"id":"web/sdk-components-injecting-services","title":"Service Injection","description":"VertiGIS Studio Web - Injecting services into component models","sidebar":"web"},"web/sdk-components-interactions":{"id":"web/sdk-components-interactions","title":"Component Interactions","description":"VertiGIS Studio Web - Learn how to make custom components interact in with the larger application","sidebar":"web"},"web/sdk-components-internationalization":{"id":"web/sdk-components-internationalization","title":"Internationalization","description":"VertiGIS Studio Web - Learn how to translate a components user facing text","sidebar":"web"},"web/sdk-components-overview":{"id":"web/sdk-components-overview","title":"Components Overview","description":"VertiGIS Studio Web - Overview of components","sidebar":"web"},"web/sdk-components-reference":{"id":"web/sdk-components-reference","title":"Component Reference","description":"VertiGIS Studio Web - Reference for custom components in VertiGIS Studio Web","sidebar":"web"},"web/sdk-components-styling":{"id":"web/sdk-components-styling","title":"Component Styling","description":"VertiGIS Studio Web - Learn how to style a custom component","sidebar":"web"},"web/sdk-components-ui-context":{"id":"web/sdk-components-ui-context","title":"UIContext","description":"VertiGIS Studio Web - Accessing the UIContext in Components","sidebar":"web"},"web/sdk-deployment":{"id":"web/sdk-deployment","title":"Deployment","description":"VertiGIS Studio Web - Deploy a VertiGIS Studio Web Application","sidebar":"web"},"web/sdk-events-overview":{"id":"web/sdk-events-overview","title":"Events Overview","description":"VertiGIS Studio Web - Overview of events","sidebar":"web"},"web/sdk-events-reference":{"id":"web/sdk-events-reference","title":"Events Reference","description":"VertiGIS Studio Web - Events Reference","sidebar":"web"},"web/sdk-internationalization":{"id":"web/sdk-internationalization","title":"Internationalization","description":"VertiGIS Studio Web - Learn about internationalization and language strings in VertiGIS Studio Web","sidebar":"web"},"web/sdk-overview":{"id":"web/sdk-overview","title":"SDK Overview","description":"VertiGIS Studio Web - Learn how to get started with the VertiGIS Studio Web SDK","sidebar":"web"},"web/sdk-reference-third-party-libraries":{"id":"web/sdk-reference-third-party-libraries","title":"Reference Third Party Libraries","description":"VertiGIS Studio Web - Reference third party libraries with the VertiGIS Studio Web SDK","sidebar":"web"},"web/sdk-samples":{"id":"web/sdk-samples","title":"SDK Samples","description":"VertiGIS Studio Web - Learn about the VertiGIS Studio Mobile SDK Samples","sidebar":"web"},"web/sdk-serializable-properties":{"id":"web/sdk-serializable-properties","title":"Serializable Properties","description":"VertiGIS Studio Web - Learn how to serialize and deserialize app config properties","sidebar":"web"},"web/sdk-services-create":{"id":"web/sdk-services-create","title":"Create a Service","description":"VertiGIS Studio Web - Create a Service for VertiGIS Studio Web","sidebar":"web"},"web/sdk-services-injecting-services":{"id":"web/sdk-services-injecting-services","title":"Service Injection","description":"VertiGIS Studio Web - Injecting services into custom services","sidebar":"web"},"web/sdk-services-overview":{"id":"web/sdk-services-overview","title":"Services Overview","description":"VertiGIS Studio Web - Overview of Services","sidebar":"web"},"web/sdk-services-reference":{"id":"web/sdk-services-reference","title":"Service Reference","description":"VertiGIS Studio Web - Service Reference","sidebar":"web"},"web/snippets/designer-callout":{"id":"web/snippets/designer-callout","title":"designer-callout","description":"The VertiGIS Studio Web Designer allows you to edit your application\'s layout, configure custom behaviors for buttons and other UI components, and solve complex business problems through VertiGIS Studio Workflow. Many use cases can be solved through the VertiGIS Studio Web Designer and don\'t require custom development."},"web/snippets/follow-along":{"id":"web/snippets/follow-along","title":"follow-along","description":"Download and setup the VertiGIS Studio Web SDK and edit the minimal layout and app config provided."},"web/snippets/framework-components":{"id":"web/snippets/framework-components","title":"framework-components","description":"This example uses VertiGIS Studio Web layout components"},"web/snippets/prereqs-custom-code":{"id":"web/snippets/prereqs-custom-code","title":"prereqs-custom-code","description":"- Download and setup the VertiGIS Studio Web SDK."},"web/snippets/prereqs-layout-config-editing":{"id":"web/snippets/prereqs-layout-config-editing","title":"prereqs-layout-config-editing","description":"- Follow along by setting up the VertiGIS Studio Web SDK and editing the minimal layout and app config provided."},"web/snippets/translation-callout":{"id":"web/snippets/translation-callout","title":"translation-callout","description":"Existing language strings for an application can be customized for any language in the VertiGIS Studio Web Designer. To provide a complete translation in an entirely new locale for VertiGIS Studio Web, please contact us."},"web/tutorial-change-default-behavior":{"id":"web/tutorial-change-default-behavior","title":"Change the Default Behavior of Components","description":"VertiGIS Studio Web - Learn how to configure VertiGIS Studio Web to change default application behavior","sidebar":"web"},"web/tutorial-change-default-map-click-behavior":{"id":"web/tutorial-change-default-map-click-behavior","title":"Change Default Map Click Behavior","description":"VertiGIS Studio Web - Learn how to configure VertiGIS Studio Web to change the default map click behavior","sidebar":"web"},"web/tutorial-command-can-execute":{"id":"web/tutorial-command-can-execute","title":"Using the canExecute Command Hook","description":"VertiGIS Studio Web - Learn how to optionally disable a command with the canExecute hook","sidebar":"web"},"web/tutorial-configure-button-click":{"id":"web/tutorial-configure-button-click","title":"Configure Button Click Behavior","description":"VertiGIS Studio Web - Learn how to run an existing command or operation on a button press","sidebar":"web"},"web/tutorial-customize-application-theme":{"id":"web/tutorial-customize-application-theme","title":"Customize the Theme","description":"VertiGIS Studio Web - Customize the application theme using app config","sidebar":"web"},"web/tutorial-display-custom-form":{"id":"web/tutorial-display-custom-form","title":"Display a Custom Form","description":"VertiGIS Studio Web - Learn how to display a custom form","sidebar":"web"},"web/tutorial-events-subscribe":{"id":"web/tutorial-events-subscribe","title":"Subscribe to an Existing Event","description":"VertiGIS Studio Web - Learn how to create and subscribe to an existing VertiGIS Studio Web event","sidebar":"web"},"web/tutorial-implement-command-operation":{"id":"web/tutorial-implement-command-operation","title":"Build a Custom Command and Operation","description":"VertiGIS Studio Web - Learn how to implement a custom command or operation","sidebar":"web"},"web/tutorial-implement-component-participate-app-config":{"id":"web/tutorial-implement-component-participate-app-config","title":"Pull Component Data from App Config","description":"VertiGIS Studio Web - Learn how to make a component participate in app config.","sidebar":"web"},"web/tutorial-implement-component-with-ui":{"id":"web/tutorial-implement-component-with-ui","title":"Build a Custom Component with UI","description":"VertiGIS Studio Web - Learn how to implement a custom component with UI","sidebar":"web"},"web/tutorial-implement-custom-activity":{"id":"web/tutorial-implement-custom-activity","title":"Implement a Custom Activity","description":"VertiGIS Studio Web - Learn how to implement a custom workflow activity","sidebar":"web"},"web/tutorial-implement-custom-form-elements":{"id":"web/tutorial-implement-custom-form-elements","title":"Implement a Custom Form Element","description":"VertiGIS Studio Web - Learn how to implement a custom form element","sidebar":"web"},"web/tutorial-import-map-model":{"id":"web/tutorial-import-map-model","title":"Import the MapModel into a Component","description":"VertiGIS Studio Web - Learn how to interact with the map in a custom component","sidebar":"web"},"web/tutorial-internationalization":{"id":"web/tutorial-internationalization","title":"Translate a Component\'s Text","description":"VertiGIS Studio Web - Learn how to internationalize a custom component","sidebar":"web"},"web/tutorial-run-workflow-app-config":{"id":"web/tutorial-run-workflow-app-config","title":"Run a Workflow from App Config","description":"VertiGIS Studio Web - Learn how to run a workflow using app config and layout","sidebar":"web"},"web/tutorial-service-dynamic-data":{"id":"web/tutorial-service-dynamic-data","title":"Manage Dynamic Data with a Service","description":"VertiGIS Studio Web - Implement a service that manages dynamic data for a component","sidebar":"web"},"workflow/key-concepts":{"id":"workflow/key-concepts","title":"Key Concepts","description":"VertiGIS Studio Workflow - Learn about key concepts.","sidebar":"workflow"},"workflow/overview":{"id":"workflow/overview","title":"Overview","description":"VertiGIS Studio Workflow - Learn about extending VertiGIS Studio Workflow","sidebar":"workflow"},"workflow/sdk-desktop-create-activity":{"id":"workflow/sdk-desktop-create-activity","title":"Create an Activity","description":"VertiGIS Studio Workflow - Create a workflow activity for desktop applications","sidebar":"workflow"},"workflow/sdk-desktop-overview":{"id":"workflow/sdk-desktop-overview","title":"Using the .NET Workflow SDK with VertiGIS Studio Desktop","description":"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Desktop","sidebar":"workflow"},"workflow/sdk-desktop-wrapping":{"id":"workflow/sdk-desktop-wrapping","title":"Wrapping activity inputs and outputs","description":"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Desktop","sidebar":"workflow"},"workflow/sdk-mobile-activity-reference":{"id":"workflow/sdk-mobile-activity-reference","title":"Workflow Activity Reference","description":"VertiGIS Studio Workflow - Reference for workflow activities for VertiGIS Studio Mobile","sidebar":"workflow"},"workflow/sdk-mobile-create-activity":{"id":"workflow/sdk-mobile-create-activity","title":"Create an Activity","description":"VertiGIS Studio Workflow - Create a workflow activity for web applications","sidebar":"workflow"},"workflow/sdk-mobile-form-reference":{"id":"workflow/sdk-mobile-form-reference","title":"Workflow Form Element Reference","description":"VertiGIS Studio Workflow - Reference for workflow form elements for web applications","sidebar":"workflow"},"workflow/sdk-mobile-overview":{"id":"workflow/sdk-mobile-overview","title":"Using the .NET Workflow SDK with VertiGIS Studio Mobile","description":"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Mobile","sidebar":"workflow"},"workflow/sdk-mobile-reference-third-party-library":{"id":"workflow/sdk-mobile-reference-third-party-library","title":"Reference a Third Party Library through the VertiGIS Studio Mobile SDK","description":"VertiGIS Studio Workflow - Reference a third party library in workflow for VertiGIS Studio Mobile","sidebar":"workflow"},"workflow/sdk-net-integrating-the-arcgis-api":{"id":"workflow/sdk-net-integrating-the-arcgis-api","title":"Integrating the ArcGIS Runtime SDK for .NET","description":"VertiGIS Studio Workflow - Integrate the ArcGIS Runtime SDK for .NET into custom activities for .NET applications","sidebar":"workflow"},"workflow/sdk-net-integrating-the-arcgis-pro-api":{"id":"workflow/sdk-net-integrating-the-arcgis-pro-api","title":"Integrating the ArcGIS Pro SDK","description":"VertiGIS Studio Workflow - Integrate the ArcGIS Pro SDK into custom activities for .NET applications","sidebar":"workflow"},"workflow/sdk-net-overview":{"id":"workflow/sdk-net-overview","title":"VertiGIS Studio Workflow .NET SDK Overview","description":"VertiGIS Studio Workflow - Overview of the .NET workflow SDK","sidebar":"workflow"},"workflow/sdk-net-register-activities":{"id":"workflow/sdk-net-register-activities","title":"Registering .NET Activities with VertiGIS Studio Workflow Designer","description":"VertiGIS Studio Workflow - Registering .NET workflow activities with VertiGIS Studio Workflow Designer","sidebar":"workflow"},"workflow/sdk-server-create-activity":{"id":"workflow/sdk-server-create-activity","title":"Create an Activity","description":"VertiGIS Studio Workflow - Create a workflow activity for web applications","sidebar":"workflow"},"workflow/sdk-server-overview":{"id":"workflow/sdk-server-overview","title":"Using the .NET Workflow SDK with VertiGIS Studio Workflow Server","description":"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Workflow Server","sidebar":"workflow"},"workflow/sdk-server-reference-third-party-library":{"id":"workflow/sdk-server-reference-third-party-library","title":"Reference a Third Party Library in VertiGIS Studio Workflow Server","description":"VertiGIS Studio Workflow - Reference a third party library in a VertiGIS Studio Workflow Server extension","sidebar":"workflow"},"workflow/sdk-web-activity-block-tags":{"id":"workflow/sdk-web-activity-block-tags","title":"Activity Block Tags","description":"VertiGIS Studio Workflow - Learn about the typescript activity metadata tags","sidebar":"workflow"},"workflow/sdk-web-activity-reference":{"id":"workflow/sdk-web-activity-reference","title":"Workflow Activity Reference","description":"VertiGIS Studio Workflow - Reference for workflow activities for web applications","sidebar":"workflow"},"workflow/sdk-web-create-activity":{"id":"workflow/sdk-web-create-activity","title":"Create an Activity","description":"VertiGIS Studio Workflow - Create a workflow activity for web applications","sidebar":"workflow"},"workflow/sdk-web-create-element":{"id":"workflow/sdk-web-create-element","title":"Create a Form Element","description":"VertiGIS Studio Workflow - Create a workflow form element for web applications","sidebar":"workflow"},"workflow/sdk-web-form-reference":{"id":"workflow/sdk-web-form-reference","title":"Workflow Form Element Reference","description":"VertiGIS Studio Workflow - Reference for workflow form elements for web applications","sidebar":"workflow"},"workflow/sdk-web-integrating-the-arcgis-api":{"id":"workflow/sdk-web-integrating-the-arcgis-api","title":"Integrating the ArcGIS API for JavaScript","description":"VertiGIS Studio Workflow - Integrate the ArcGIS API for JavaScript into custom activities for web applications","sidebar":"workflow"},"workflow/sdk-web-overview":{"id":"workflow/sdk-web-overview","title":"VertiGIS Studio Workflow TypeScript SDK Overview","description":"VertiGIS Studio Workflow - Overview of extending workflow for web applications","sidebar":"workflow"},"workflow/sdk-web-reference-third-party-library":{"id":"workflow/sdk-web-reference-third-party-library","title":"Reference a Third Party Library for Web Application Environments","description":"VertiGIS Studio Workflow - Reference a third party library in workflow for web applications","sidebar":"workflow"},"workflow/snippets/designer-callout":{"id":"workflow/snippets/designer-callout","title":"designer-callout","description":"The VertiGIS Studio Workflow Designer has a wide range of built-in activities you can use to satisfy your business case. You can take the behavior of workflow even further by running the commands and operations available in VertiGIS Studio Web and VertiGIS Studio Mobile."},"workflow/snippets/prereqs-desktop":{"id":"workflow/snippets/prereqs-desktop","title":"prereqs-desktop","description":"While extending VertiGIS Studio Workflow for Desktop can easily be achieved, you require an installed Workflow runtime module to make your custom activities work with VertiGIS Studio Desktop."},"workflow/snippets/prereqs-mobile":{"id":"workflow/snippets/prereqs-mobile","title":"prereqs-mobile","description":"Extending VertiGIS Studio Workflow for Mobile requires development and deployment of a custom VertiGIS Studio Mobile Application using the VertiGIS Studio Mobile SDK"},"workflow/snippets/prereqs-server":{"id":"workflow/snippets/prereqs-server","title":"prereqs-server","description":"Extending VertiGIS Studio Workflow with server side components requires an on-premises installation of VertiGIS Studio Workflow. You will need administrative access to this installation."},"workflow/snippets/prereqs-web":{"id":"workflow/snippets/prereqs-web","title":"prereqs-web","description":"Follow the instructions in the Web Applications SDK page to set up your development environment."},"workflow/snippets/sdk-net-limitations-warning":{"id":"workflow/snippets/sdk-net-limitations-warning","title":"sdk-net-limitations-warning","description":"We recommend that you only implement the IActivityHandler interface examples provided in the Developer Center. These examples have been verified and are provided to help you customize your VertiGIS Studio product to suit your needs. You should not reference other classes and functions from the various VertiGIS Studio Workflow assemblies. Doing so could risk breaking functionality and/or unexpected results as a result of future changes."},"workflow/tutorial-mobile-activity-indicator-form-element":{"id":"workflow/tutorial-mobile-activity-indicator-form-element","title":"Implement an Loading Indicator Form Element","description":"VertiGIS Studio Workflow - Build a custom form element that displays a loading indicator","sidebar":"workflow"},"workflow/tutorial-mobile-calculate-logarithm-activity":{"id":"workflow/tutorial-mobile-calculate-logarithm-activity","title":"Implement an Activity that Calculates a Logarithm","description":"VertiGIS Studio Workflow - Implement a custom activity for VertiGIS Studio Mobile","sidebar":"workflow"},"workflow/tutorial-mobile-show-map-callout":{"id":"workflow/tutorial-mobile-show-map-callout","title":"Show a Callout on the Map with an Activity","description":"VertiGIS Studio Workflow - Access the map and show a callout through a custom activity.","sidebar":"workflow"},"workflow/tutorial-server-calculate-logarithm-activity":{"id":"workflow/tutorial-server-calculate-logarithm-activity","title":"Implement an Activity that Calculates a Logarithm","description":"VertiGIS Studio Workflow - Implement a custom activity for VertiGIS Studio Workflow Server that calculates the logarithm of a number","sidebar":"workflow"},"workflow/tutorial-web-add-layer-to-map":{"id":"workflow/tutorial-web-add-layer-to-map","title":"Add a Layer to a Map with an Activity","description":"VertiGIS Studio Workflow - Learn how to access and mutate the application map","sidebar":"workflow"},"workflow/tutorial-web-calculate-logarithm-activity":{"id":"workflow/tutorial-web-calculate-logarithm-activity","title":"Implement an Activity that Calculates a Logarithm","description":"VertiGIS Studio Workflow - Implement a custom activity for web applications that calculates the logarithm of a number","sidebar":"workflow"},"workflow/tutorial-web-implement-star-rating-form-element":{"id":"workflow/tutorial-web-implement-star-rating-form-element","title":"Implement a Star Rating Custom Form Element","description":"VertiGIS Studio Workflow - Implement a star rating form element for web applications","sidebar":"workflow"},"workflow/tutorial-web-implement-third-party-captcha-form-element":{"id":"workflow/tutorial-web-implement-third-party-captcha-form-element","title":"Implement a Captcha Custom Form Element using a Third Party Library","description":"VertiGIS Studio Workflow - Implement a captcha form element for web applications using a third party library","sidebar":"workflow"},"workflow/tutorial-web-implement-third-party-qr-code-form-element":{"id":"workflow/tutorial-web-implement-third-party-qr-code-form-element","title":"Implement a QR Code Custom Form Element using a Third Party Library","description":"VertiGIS Studio Workflow - Implement a QR code form element for web applications using a third party library","sidebar":"workflow"},"workflow/tutorial-web-implement-third-party-signature-block-form-element":{"id":"workflow/tutorial-web-implement-third-party-signature-block-form-element","title":"Implement a Signature Block Custom Form Element using a Third Party Library","description":"VertiGIS Studio Workflow - Implement a signature block form element for web applications using a third party library","sidebar":"workflow"},"workflow/tutorial-web-implement-third-party-star-rating-form-element":{"id":"workflow/tutorial-web-implement-third-party-star-rating-form-element","title":"Implement a Star Rating Custom Form Element using a Third Party Library","description":"VertiGIS Studio Workflow - Implement a star rating form element for web applications using a third party library","sidebar":"workflow"},"workflow/tutorial-web-qr-code-activity":{"id":"workflow/tutorial-web-qr-code-activity","title":"Implement an activity that creates a QR Code image using a Third Party Library","description":"VertiGIS Studio Workflow - Implement a custom activity for web applications that creates a QR code image using a third party library","sidebar":"workflow"}}}')}}]); \ No newline at end of file diff --git a/assets/js/97f8b990.743b1099.js b/assets/js/97f8b990.743b1099.js new file mode 100644 index 000000000..18ba25d8a --- /dev/null +++ b/assets/js/97f8b990.743b1099.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[4044,7884,1868,5940],{548:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>n,metadata:()=>a,toc:()=>l});var o=r(7624),i=r(2172);const n={},s=void 0,a={id:"snippets/workflow-url",title:"workflow-url",description:"https://apps.vertigisstudio.com/workflow/designer/#workflow=",source:"@site/docs/snippets/workflow-url.mdx",sourceDirName:"snippets",slug:"/snippets/workflow-url",permalink:"/docs/snippets/workflow-url",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/snippets/workflow-url.mdx",tags:[],version:"current",frontMatter:{}},c={},l=[];function d(e){const t={a:"a",p:"p",...(0,i.M)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("div",{class:"alert alert--secondary",role:"alert",children:(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.a,{href:"https://apps.vertigisstudio.com/workflow/designer/#workflow=",children:"https://apps.vertigisstudio.com/workflow/designer/#workflow="}),"\n",(0,o.jsx)("b",{children:"44010fc421dd4659b74fb921e09ba594"})]})}),"\n",(0,o.jsx)("br",{})]})}function u(e={}){const{wrapper:t}={...(0,i.M)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},4760:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>p});var o=r(7624),i=r(2172),n=r(964),s=(r(1268),r(5388),r(7160),r(7528),r(1404),r(400)),a=r(548);const c={title:"Create an Activity",description:"VertiGIS Studio Workflow - Create a workflow activity for desktop applications"},l=void 0,d={id:"workflow/sdk-desktop-create-activity",title:"Create an Activity",description:"VertiGIS Studio Workflow - Create a workflow activity for desktop applications",source:"@site/docs/workflow/sdk-desktop-create-activity.mdx",sourceDirName:"workflow",slug:"/workflow/sdk-desktop-create-activity",permalink:"/docs/workflow/sdk-desktop-create-activity",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/sdk-desktop-create-activity.mdx",tags:[],version:"current",frontMatter:{title:"Create an Activity",description:"VertiGIS Studio Workflow - Create a workflow activity for desktop applications"},sidebar:"workflow",previous:{title:"Overview",permalink:"/docs/workflow/sdk-desktop-overview"},next:{title:"Input and output wrapping",permalink:"/docs/workflow/sdk-desktop-wrapping"}},u={},p=[{value:"Prerequisites",id:"prerequisites",level:2},...s.toc,{value:"Create the Activity",id:"create-the-activity",level:2},{value:"Use the Activity in a Workflow",id:"use-the-activity-in-a-workflow",level:2},...a.toc];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",...(0,i.M)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"This article will walk you through creating a new workflow activity for VertiGIS Studio Desktop applications."}),"\n",(0,o.jsx)("img",{src:(0,n.c)("img/desktop-pro-run-create-activity-workflow.png")}),"\n",(0,o.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,o.jsx)(s.default,{}),"\n",(0,o.jsx)(t.h2,{id:"create-the-activity",children:"Create the Activity"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["If you haven't done yet, create a new Visual Studio project using the ",(0,o.jsx)(t.code,{children:"ArcGIS Pro Module Add-In"})," project template."]}),"\n",(0,o.jsxs)(t.li,{children:["Create a new file ",(0,o.jsx)(t.code,{children:"MyCustomActivity.cs"})," in the previously mentioned project."]}),"\n",(0,o.jsxs)(t.li,{children:["Add a new skeleton workflow activity that implements ",(0,o.jsx)(t.code,{children:"IActivityHandler"}),"."]}),"\n"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-cs",metastring:'title="MyCustomActivity.cs"',children:'using System.Collections.Generic;\nusing System.Threading.Tasks;\nusing VertiGIS.Workflow.Runtime;\n\n// highlight-next-line\n[assembly:WorkflowActivities]\nnamespace Poc_ProCustomActivities\n{\n public class MyCustomActivity : IActivityHandler\n {\n // highlight-next-line\n public static string Action => "uuid:cc39c481-4d05-4c39-8363-07b79dc03aa7::MyCustomActivity";\n\n public Task> Execute(IDictionary inputs, IActivityContext context)\n {\n IDictionary outputs = new Dictionary();\n\n outputs["test"] = "Hello World. This is a custom activity.";\n\n return Task.FromResult(outputs);\n }\n }\n}\n'})}),"\n",(0,o.jsxs)(t.admonition,{type:"important",children:[(0,o.jsx)(t.p,{children:"It's important to conform to two necessary constraints to make the activity recognizable to VertiGIS Studio Desktop:"}),(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["Inside your assembly you need to add the ",(0,o.jsx)(t.code,{children:"WorkflowActivities"})," attribute (make sure to add it only once across your whole project, e.g. in your module rather than inside your activity)"]}),"\n",(0,o.jsxs)(t.li,{children:["Your custom activity needs to contain an action identifier that tells VertiGIS Studio Desktop what activity is represented by this implementation. This can be achieved by declaring a static string property named ",(0,o.jsx)(t.code,{children:"Action"})," that returns the activities action id. As static members cannot be specified in interfaces, you have to ensure this property being present yourself."]}),"\n"]}),(0,o.jsx)(t.p,{children:"Ignoring any of those rules will lead to the activity not being found by VertiGIS Studio Desktop and thus cause a runtime error."})]}),"\n",(0,o.jsx)(t.h2,{id:"use-the-activity-in-a-workflow",children:"Use the Activity in a Workflow"}),"\n",(0,o.jsx)(t.p,{children:"Workflows that run in your custom VertiGIS Studio Desktop application can now run this custom activity."}),"\n",(0,o.jsxs)(t.admonition,{type:"tip",children:[(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.a,{href:"/docs/workflow/sdk-net-register-activities",children:"Registering stubs for .NET activities"})," provides a user friendly interface for your custom activities in VertiGIS Studio Workflow Designer."]}),(0,o.jsx)("img",{src:(0,n.c)("img/desktop-designer-run-activity.png")})]}),"\n",(0,o.jsxs)(t.p,{children:["Without registering stubs you may still call your custom activity using the ",(0,o.jsx)(t.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/activities/run-activity.htm%3FTocPath%3DActivities%7CActivity%2520Reference%7C_____167",children:(0,o.jsx)(t.code,{children:"RunActivity"})})," by the name defined in ",(0,o.jsx)(t.code,{children:"MyCustomActivity.cs"})," (for this example, ",(0,o.jsx)(t.code,{children:"uuid:cc39c481-4d05-4c39-8363-07b79dc03aa7::MyCustomActivity"}),")."]}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsxs)("p",{children:[(0,o.jsxs)(t.p,{children:["You can"," "]}),(0,o.jsx)("a",{href:(0,n.c)("workflows/desktop-create-activity.json"),download:"custom-activity-workflow.json",target:"_blank",children:(0,o.jsx)(t.p,{children:"download this demo workflow"})})," ",(0,o.jsx)(t.p,{children:"that runs the custom activity and"}),(0,o.jsxs)("a",{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/import-export-workflows.htm",target:"_blank",children:[" ",(0,o.jsxs)(t.p,{children:["import it into the VertiGIS Studio Workflow Designer."," "]})]})]})}),"\n",(0,o.jsx)(t.p,{children:"Next you need to run the workflow you just created in your VertiGIS Studio Desktop project."}),"\n",(0,o.jsx)(a.default,{})]})}function f(e={}){const{wrapper:t}={...(0,i.M)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},400:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>n,metadata:()=>a,toc:()=>l});var o=r(7624),i=r(2172);const n={},s=void 0,a={id:"workflow/snippets/prereqs-desktop",title:"prereqs-desktop",description:"While extending VertiGIS Studio Workflow for Desktop can easily be achieved, you require an installed Workflow runtime module to make your custom activities work with VertiGIS Studio Desktop.",source:"@site/docs/workflow/snippets/prereqs-desktop.mdx",sourceDirName:"workflow/snippets",slug:"/workflow/snippets/prereqs-desktop",permalink:"/docs/workflow/snippets/prereqs-desktop",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/snippets/prereqs-desktop.mdx",tags:[],version:"current",frontMatter:{}},c={},l=[];function d(e){const t={a:"a",admonition:"admonition",p:"p",...(0,i.M)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.admonition,{title:"Important",type:"info",children:(0,o.jsx)(t.p,{children:"While extending VertiGIS Studio Workflow for Desktop can easily be achieved, you require an installed Workflow runtime module to make your custom activities work with VertiGIS Studio Desktop."})}),"\n",(0,o.jsxs)(t.p,{children:["To ease using your custom activities when authoring of Workflows with Workflow Designer, you may create method stubs for your activities and publish them to make them, as described in ",(0,o.jsx)(t.a,{href:"/docs/workflow/sdk-net-register-activities",children:"the corresponding chapter"}),"."]}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsxs)(t.p,{children:["A working knowledge of ",(0,o.jsx)(t.a,{href:"https://docs.microsoft.com/en-ca/dotnet/csharp/",children:"C#"})," and ",(0,o.jsx)(t.a,{href:"https://dotnet.microsoft.com/platform/dotnet-standard",children:".NET Standard"})," is recommended before extending Workflow for VertiGIS Studio Desktop"]})})]})}function u(e={}){const{wrapper:t}={...(0,i.M)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},1404:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>n,metadata:()=>a,toc:()=>l});var o=r(7624),i=r(2172);const n={},s=void 0,a={id:"workflow/snippets/prereqs-mobile",title:"prereqs-mobile",description:"Extending VertiGIS Studio Workflow for Mobile requires development and deployment of a custom VertiGIS Studio Mobile Application using the VertiGIS Studio Mobile SDK",source:"@site/docs/workflow/snippets/prereqs-mobile.mdx",sourceDirName:"workflow/snippets",slug:"/workflow/snippets/prereqs-mobile",permalink:"/docs/workflow/snippets/prereqs-mobile",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/snippets/prereqs-mobile.mdx",tags:[],version:"current",frontMatter:{}},c={},l=[];function d(e){const t={a:"a",admonition:"admonition",p:"p",...(0,i.M)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.admonition,{title:"Important",type:"info",children:(0,o.jsxs)(t.p,{children:["Extending VertiGIS Studio Workflow for Mobile requires development and deployment of a custom VertiGIS Studio Mobile Application using the ",(0,o.jsx)(t.a,{href:"/docs/mobile/sdk-overview",children:"VertiGIS Studio Mobile SDK"})]})}),"\n",(0,o.jsxs)(t.p,{children:["Follow the instructions in the ",(0,o.jsx)(t.a,{href:"/docs/workflow/sdk-mobile-overview",children:"VertiGIS Studio Mobile SDK"})," page to set up the environment for extending Workflow for VertiGIS Studio Mobile."]}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsxs)(t.p,{children:["A working knowledge of ",(0,o.jsx)(t.a,{href:"https://docs.microsoft.com/en-ca/dotnet/csharp/",children:"C#"})," and ",(0,o.jsx)(t.a,{href:"https://dotnet.microsoft.com/platform/dotnet-standard",children:".NET Standard"})," is recommended before extending Workflow for VertiGIS Studio Mobile"]})})]})}function u(e={}){const{wrapper:t}={...(0,i.M)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},5388:(e,t,r)=>{r.d(t,{c:()=>s});r(1504);var o=r(4064);const i={tabItem:"tabItem_Ymn6"};var n=r(7624);function s({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.c)(i.tabItem,r),hidden:t,children:e})}},1268:(e,t,r)=>{r.d(t,{c:()=>x});var o=r(1504),i=r(4064),n=r(3943),s=r(5592),a=r(5288),c=r(632),l=r(7128),d=r(1148);function u(e){return o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=t??function(e){return u(e).map((({props:{value:e,label:t,attributes:r,default:o}})=>({value:e,label:t,attributes:r,default:o})))}(r);return function(e){const t=(0,l.w)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function h({value:e,tabValues:t}){return t.some((t=>t.value===e))}function f({queryString:e=!1,groupId:t}){const r=(0,s.Uz)(),i=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:e,groupId:t});return[(0,c._M)(i),(0,o.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(r.location.search);t.set(i,e),r.replace({...r.location,search:t.toString()})}),[i,r])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:i}=e,n=p(e),[s,c]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!h({value:e,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const r=t.find((e=>e.default))??t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:n}))),[l,u]=f({queryString:r,groupId:i}),[m,w]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,i]=(0,d.IN)(t);return[r,(0,o.useCallback)((e=>{t&&i.set(e)}),[t,i])]}({groupId:i}),v=(()=>{const e=l??m;return h({value:e,tabValues:n})?e:null})();(0,a.c)((()=>{v&&c(v)}),[v]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!h({value:e,tabValues:n}))throw new Error(`Can't select invalid tab value=${e}`);c(e),u(e),w(e)}),[u,w,n]),tabValues:n}}var w=r(3664);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=r(7624);function y({className:e,block:t,selectedValue:r,selectValue:o,tabValues:s}){const a=[],{blockElementScrollPositionUntilNextRender:c}=(0,n.MV)(),l=e=>{const t=e.currentTarget,i=a.indexOf(t),n=s[i].value;n!==r&&(c(t),o(n))},d=e=>{let t=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;t=a[r]??a[0];break}case"ArrowLeft":{const r=a.indexOf(e.currentTarget)-1;t=a[r]??a[a.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.c)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:o})=>(0,k.jsx)("li",{role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>a.push(e),onKeyDown:d,onClick:l,...o,className:(0,i.c)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===e}),children:t??e},e)))})}function b({lazy:e,children:t,selectedValue:r}){const i=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function g(e){const t=m(e);return(0,k.jsxs)("div",{className:(0,i.c)("tabs-container",v.tabList),children:[(0,k.jsx)(y,{...e,...t}),(0,k.jsx)(b,{...e,...t})]})}function x(e){const t=(0,w.c)();return(0,k.jsx)(g,{...e,children:u(e.children)},String(t))}},7528:(e,t,r)=>{r.d(t,{c:()=>a});var o=r(867),i=(r(1504),r(4971));const n={root:"root_Uwqo"};var s=r(7624);function a({title:e,description:t,link:r}){return(0,s.jsx)("div",{className:(0,i.c)("card-demo",n.root),children:(0,s.jsxs)("div",{className:"card",children:[(0,s.jsx)("div",{className:"card__header",children:(0,s.jsx)("h3",{children:e})}),(0,s.jsx)("div",{className:"card__body",children:(0,s.jsx)("p",{children:t})}),(0,s.jsx)("div",{className:"card__footer",children:(0,s.jsx)(o.c,{className:"button button--secondary button--block",to:r,children:"Get Started"})})]})})}},7160:(e,t,r)=>{r.d(t,{c:()=>n});r(1504);const o={root:"root_vxd5"};var i=r(7624);function n({children:e}){return(0,i.jsx)("div",{className:o.root,children:e})}},4971:(e,t,r)=>{function o(e){var t,r,i="";if("string"==typeof e||"number"==typeof e)i+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ti});const i=function(){for(var e,t,r=0,i="";r{r.d(t,{I:()=>a,M:()=>s});var o=r(1504);const i={},n=o.createContext(i);function s(e){const t=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a9c45aa9.550c4b65.js b/assets/js/a9c45aa9.4867f06f.js similarity index 98% rename from assets/js/a9c45aa9.550c4b65.js rename to assets/js/a9c45aa9.4867f06f.js index e0405ce16..f26fb68f0 100644 --- a/assets/js/a9c45aa9.550c4b65.js +++ b/assets/js/a9c45aa9.4867f06f.js @@ -1 +1 @@ -"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[2468],{4760:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>l,frontMatter:()=>c,metadata:()=>r,toc:()=>d});var o=n(7624),s=n(2172);const c={title:"UIContext",description:"VertiGIS Studio Web - Accessing the UIContext in Components"},i=void 0,r={id:"web/sdk-components-ui-context",title:"UIContext",description:"VertiGIS Studio Web - Accessing the UIContext in Components",source:"@site/docs/web/sdk-components-ui-context.mdx",sourceDirName:"web",slug:"/web/sdk-components-ui-context",permalink:"/docs/web/sdk-components-ui-context",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/web/sdk-components-ui-context.mdx",tags:[],version:"current",frontMatter:{title:"UIContext",description:"VertiGIS Studio Web - Accessing the UIContext in Components"},sidebar:"web",previous:{title:"Component Hooks",permalink:"/docs/web/sdk-components-hooks"},next:{title:"Component Interactions",permalink:"/docs/web/sdk-components-interactions"}},a={},d=[{value:"Accessing the UIContext",id:"accessing-the-uicontext",level:2},{value:"hostElement",id:"hostelement",level:2}];function h(e){const t={a:"a",code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.M)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.a,{href:"/docs/web/sdk-components-create",children:"Custom components"})," often need to access the application context to run ",(0,o.jsx)(t.a,{href:"/docs/web/configuration-commands-operations",children:"commands and operations"}),", subscribe and publish to ",(0,o.jsx)(t.a,{href:"/docs/web/sdk-events-overview",children:"events"}),", and more. A component has two ways of accessing the application context."]}),"\n",(0,o.jsxs)(t.p,{children:["First, every component has a ",(0,o.jsx)(t.a,{href:"/docs/web/sdk-components-reference#models",children:"model"})," which in turn has a ",(0,o.jsx)(t.code,{children:"messages"})," property that can be used to access commands, operations, and events. All application level interactions should be facilitated by the model."]}),"\n",(0,o.jsxs)(t.p,{children:["Optionally, a component can use the ",(0,o.jsx)(t.code,{children:"UIContext"})," to access commands, operations and events, as well as use the ",(0,o.jsx)(t.code,{children:"translate"})," function to take advantage of our internationalization features."]}),"\n",(0,o.jsx)(t.h2,{id:"accessing-the-uicontext",children:"Accessing the UIContext"}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.code,{children:"UIContext"})," is injected into a component with the ",(0,o.jsxs)(t.a,{href:"https://reactjs.org/docs/hooks-reference.html#usecontext",children:["React ",(0,o.jsx)(t.code,{children:"useContext"})," hook"]}),"."]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-tsx",children:'import { UIContext } from "@vertigis/web/ui";\nimport { useContext } from "react";\n\nexport default function CustomComponent(props) {\n const { command, event, operation, translate, hostElement } =\n useContext(UIContext);\n // ...\n}\n'})}),"\n",(0,o.jsxs)(t.p,{children:["Once you have reference to the ",(0,o.jsx)(t.code,{children:"UIContext"}),", you can access its properties and interact with the application context in your custom component."]}),"\n",(0,o.jsx)(t.h2,{id:"hostelement",children:"hostElement"}),"\n",(0,o.jsxs)(t.p,{children:["The UIContext provides access to the DOM through the ",(0,o.jsx)(t.code,{children:"hostElement"})," property. However, this is meant to be a last resort, intended for enabling complex third party libraries. The DOM should only be interacted with through the abstraction of React components whenever possible."]})]})}function l(e={}){const{wrapper:t}={...(0,s.M)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},2172:(e,t,n)=>{n.d(t,{I:()=>r,M:()=>i});var o=n(1504);const s={},c=o.createContext(s);function i(e){const t=o.useContext(c);return o.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:i(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[2468],{2376:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>l,frontMatter:()=>c,metadata:()=>r,toc:()=>d});var o=n(7624),s=n(2172);const c={title:"UIContext",description:"VertiGIS Studio Web - Accessing the UIContext in Components"},i=void 0,r={id:"web/sdk-components-ui-context",title:"UIContext",description:"VertiGIS Studio Web - Accessing the UIContext in Components",source:"@site/docs/web/sdk-components-ui-context.mdx",sourceDirName:"web",slug:"/web/sdk-components-ui-context",permalink:"/docs/web/sdk-components-ui-context",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/web/sdk-components-ui-context.mdx",tags:[],version:"current",frontMatter:{title:"UIContext",description:"VertiGIS Studio Web - Accessing the UIContext in Components"},sidebar:"web",previous:{title:"Component Hooks",permalink:"/docs/web/sdk-components-hooks"},next:{title:"Component Interactions",permalink:"/docs/web/sdk-components-interactions"}},a={},d=[{value:"Accessing the UIContext",id:"accessing-the-uicontext",level:2},{value:"hostElement",id:"hostelement",level:2}];function h(e){const t={a:"a",code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.M)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.a,{href:"/docs/web/sdk-components-create",children:"Custom components"})," often need to access the application context to run ",(0,o.jsx)(t.a,{href:"/docs/web/configuration-commands-operations",children:"commands and operations"}),", subscribe and publish to ",(0,o.jsx)(t.a,{href:"/docs/web/sdk-events-overview",children:"events"}),", and more. A component has two ways of accessing the application context."]}),"\n",(0,o.jsxs)(t.p,{children:["First, every component has a ",(0,o.jsx)(t.a,{href:"/docs/web/sdk-components-reference#models",children:"model"})," which in turn has a ",(0,o.jsx)(t.code,{children:"messages"})," property that can be used to access commands, operations, and events. All application level interactions should be facilitated by the model."]}),"\n",(0,o.jsxs)(t.p,{children:["Optionally, a component can use the ",(0,o.jsx)(t.code,{children:"UIContext"})," to access commands, operations and events, as well as use the ",(0,o.jsx)(t.code,{children:"translate"})," function to take advantage of our internationalization features."]}),"\n",(0,o.jsx)(t.h2,{id:"accessing-the-uicontext",children:"Accessing the UIContext"}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.code,{children:"UIContext"})," is injected into a component with the ",(0,o.jsxs)(t.a,{href:"https://reactjs.org/docs/hooks-reference.html#usecontext",children:["React ",(0,o.jsx)(t.code,{children:"useContext"})," hook"]}),"."]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-tsx",children:'import { UIContext } from "@vertigis/web/ui";\nimport { useContext } from "react";\n\nexport default function CustomComponent(props) {\n const { command, event, operation, translate, hostElement } =\n useContext(UIContext);\n // ...\n}\n'})}),"\n",(0,o.jsxs)(t.p,{children:["Once you have reference to the ",(0,o.jsx)(t.code,{children:"UIContext"}),", you can access its properties and interact with the application context in your custom component."]}),"\n",(0,o.jsx)(t.h2,{id:"hostelement",children:"hostElement"}),"\n",(0,o.jsxs)(t.p,{children:["The UIContext provides access to the DOM through the ",(0,o.jsx)(t.code,{children:"hostElement"})," property. However, this is meant to be a last resort, intended for enabling complex third party libraries. The DOM should only be interacted with through the abstraction of React components whenever possible."]})]})}function l(e={}){const{wrapper:t}={...(0,s.M)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},2172:(e,t,n)=>{n.d(t,{I:()=>r,M:()=>i});var o=n(1504);const s={},c=o.createContext(s);function i(e){const t=o.useContext(c);return o.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:i(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/aba4ef12.2727e61e.js b/assets/js/aba4ef12.2727e61e.js new file mode 100644 index 000000000..a9126e27b --- /dev/null +++ b/assets/js/aba4ef12.2727e61e.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[7344,1064],{4844:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>m,contentTitle:()=>a,default:()=>h,frontMatter:()=>c,metadata:()=>u,toc:()=>p});var i=o(7624),r=o(2172),n=o(964),s=o(7160),l=o(7528),d=o(9552);const c={title:"Using the .NET Workflow SDK with VertiGIS Studio Mobile",sidebar_label:"SDK Overview",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Mobile"},a=void 0,u={id:"workflow/sdk-mobile-overview",title:"Using the .NET Workflow SDK with VertiGIS Studio Mobile",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Mobile",source:"@site/docs/workflow/sdk-mobile-overview.mdx",sourceDirName:"workflow",slug:"/workflow/sdk-mobile-overview",permalink:"/docs/workflow/sdk-mobile-overview",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/sdk-mobile-overview.mdx",tags:[],version:"current",frontMatter:{title:"Using the .NET Workflow SDK with VertiGIS Studio Mobile",sidebar_label:"SDK Overview",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Mobile"},sidebar:"workflow",previous:{title:"Integrating the ArcGIS Pro SDK",permalink:"/docs/workflow/sdk-net-integrating-the-arcgis-pro-api"},next:{title:"Create an Activity",permalink:"/docs/workflow/sdk-mobile-create-activity"}},m={},p=[{value:"SDK Samples",id:"sdk-samples",level:2},...d.toc,{value:"Next Steps",id:"next-steps",level:2}];function f(e){const t={a:"a",admonition:"admonition",h2:"h2",p:"p",...(0,r.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:["The VertiGIS Studio Mobile SDK is used to extend VertiGIS Studio Workflow functionality for VertiGIS Studio Mobile. Follow the instructions in the ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-overview",children:"Quickstart"})," project to get set up for VertiGIS Studio Mobile + VertiGIS Studio Workflow custom development."]}),"\n",(0,i.jsx)(t.admonition,{title:"Important",type:"info",children:(0,i.jsx)(t.p,{children:"Creating custom workflow activities for VertiGIS Studio Mobile requires the development and deployment of a custom VertiGIS Studio Mobile application."})}),"\n",(0,i.jsx)(t.h2,{id:"sdk-samples",children:"SDK Samples"}),"\n",(0,i.jsx)(d.default,{}),"\n",(0,i.jsxs)(t.p,{children:["The VertiGIS Studio Mobile SDK includes various ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-samples",children:"SDK Samples"})," for development, including ",(0,i.jsx)(t.a,{href:"https://github.com/geocortex/vertigis-mobile-samples/tree/master/Geocortex.Mobile.Samples/Geocortex.Mobile.Samples/Samples/Workflow/CustomActivity",children:"a sample which demonstrate custom workflow functionality"})," ."]}),"\n",(0,i.jsx)(t.h2,{id:"next-steps",children:"Next Steps"}),"\n",(0,i.jsxs)(s.c,{children:[(0,i.jsx)(l.c,{title:"Implement a Custom Activity",description:"Implement a custom activity for VertiGIS Studio Mobile",link:(0,n.c)("docs/workflow/sdk-mobile-create-activity")}),(0,i.jsx)(l.c,{title:"Implement a Custom Form Element",description:"Implement a custom form element for VertiGIS Studio Mobile",link:(0,n.c)("docs/workflow/tutorial-mobile-activity-indicator-form-element")}),(0,i.jsx)(l.c,{title:"Reference a Third Party library",description:"Reference a third party library in VertiGIS Studio Mobile",link:(0,n.c)("docs/workflow/sdk-mobile-reference-third-party-library")})]})]})}function h(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(f,{...e})}):f(e)}},9552:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>u,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var i=o(7624),r=o(2172);const n={},s=void 0,l={id:"workflow/snippets/sdk-net-limitations-warning",title:"sdk-net-limitations-warning",description:"We recommend that you only implement the IActivityHandler interface examples provided in the Developer Center. These examples have been verified and are provided to help you customize your VertiGIS Studio product to suit your needs. You should not reference other classes and functions from the various VertiGIS Studio Workflow assemblies. Doing so could risk breaking functionality and/or unexpected results as a result of future changes.",source:"@site/docs/workflow/snippets/sdk-net-limitations-warning.mdx",sourceDirName:"workflow/snippets",slug:"/workflow/snippets/sdk-net-limitations-warning",permalink:"/docs/workflow/snippets/sdk-net-limitations-warning",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/snippets/sdk-net-limitations-warning.mdx",tags:[],version:"current",frontMatter:{}},d={},c=[];function a(e){const t={admonition:"admonition",p:"p",...(0,r.M)(),...e.components};return(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["We recommend that you only implement the ",(0,i.jsx)("code",{children:"IActivityHandler"})," interface examples provided in the Developer Center. These examples have been verified and are provided to help you customize your VertiGIS Studio product to suit your needs. You should not reference other classes and functions from the various VertiGIS Studio Workflow assemblies. Doing so could risk breaking functionality and/or unexpected results as a result of future changes."]})})}function u(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},7528:(e,t,o)=>{o.d(t,{c:()=>l});var i=o(867),r=(o(1504),o(4971));const n={root:"root_Uwqo"};var s=o(7624);function l({title:e,description:t,link:o}){return(0,s.jsx)("div",{className:(0,r.c)("card-demo",n.root),children:(0,s.jsxs)("div",{className:"card",children:[(0,s.jsx)("div",{className:"card__header",children:(0,s.jsx)("h3",{children:e})}),(0,s.jsx)("div",{className:"card__body",children:(0,s.jsx)("p",{children:t})}),(0,s.jsx)("div",{className:"card__footer",children:(0,s.jsx)(i.c,{className:"button button--secondary button--block",to:o,children:"Get Started"})})]})})}},7160:(e,t,o)=>{o.d(t,{c:()=>n});o(1504);const i={root:"root_vxd5"};var r=o(7624);function n({children:e}){return(0,r.jsx)("div",{className:i.root,children:e})}},4971:(e,t,o)=>{function i(e){var t,o,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;tr});const r=function(){for(var e,t,o=0,r="";o{o.d(t,{I:()=>l,M:()=>s});var i=o(1504);const r={},n=i.createContext(r);function s(e){const t=i.useContext(n);return i.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(r):e.components||r:s(e.components),i.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/aba4ef12.688e6993.js b/assets/js/aba4ef12.688e6993.js deleted file mode 100644 index 77b3a8dea..000000000 --- a/assets/js/aba4ef12.688e6993.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[7344,1064],{4844:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>m,contentTitle:()=>a,default:()=>h,frontMatter:()=>c,metadata:()=>u,toc:()=>f});var i=o(7624),r=o(2172),n=o(964),s=o(7160),l=o(7528),d=o(9552);const c={title:"Using the .NET Workflow SDK with VertiGIS Studio Mobile",sidebar_label:"SDK Overview",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Mobile"},a=void 0,u={id:"workflow/sdk-mobile-overview",title:"Using the .NET Workflow SDK with VertiGIS Studio Mobile",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Mobile",source:"@site/docs/workflow/sdk-mobile-overview.mdx",sourceDirName:"workflow",slug:"/workflow/sdk-mobile-overview",permalink:"/docs/workflow/sdk-mobile-overview",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/sdk-mobile-overview.mdx",tags:[],version:"current",frontMatter:{title:"Using the .NET Workflow SDK with VertiGIS Studio Mobile",sidebar_label:"SDK Overview",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Mobile"},sidebar:"workflow",previous:{title:"Integrating the ArcGIS Runtime SDK for .NET",permalink:"/docs/workflow/sdk-net-integrating-the-arcgis-api"},next:{title:"Create an Activity",permalink:"/docs/workflow/sdk-mobile-create-activity"}},m={},f=[{value:"SDK Samples",id:"sdk-samples",level:2},...d.toc,{value:"Next Steps",id:"next-steps",level:2}];function p(e){const t={a:"a",admonition:"admonition",h2:"h2",p:"p",...(0,r.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:["The VertiGIS Studio Mobile SDK is used to extend VertiGIS Studio Workflow functionality for VertiGIS Studio Mobile. Follow the instructions in the ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-overview",children:"Quickstart"})," project to get set up for VertiGIS Studio Mobile + VertiGIS Studio Workflow custom development."]}),"\n",(0,i.jsx)(t.admonition,{title:"Important",type:"info",children:(0,i.jsx)(t.p,{children:"Creating custom workflow activities for VertiGIS Studio Mobile requires the development and deployment of a custom VertiGIS Studio Mobile application."})}),"\n",(0,i.jsx)(t.h2,{id:"sdk-samples",children:"SDK Samples"}),"\n",(0,i.jsx)(d.default,{}),"\n",(0,i.jsxs)(t.p,{children:["The VertiGIS Studio Mobile SDK includes various ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-samples",children:"SDK Samples"})," for development, including ",(0,i.jsx)(t.a,{href:"https://github.com/geocortex/vertigis-mobile-samples/tree/master/Geocortex.Mobile.Samples/Geocortex.Mobile.Samples/Samples/Workflow/CustomActivity",children:"a sample which demonstrate custom workflow functionality"})," ."]}),"\n",(0,i.jsx)(t.h2,{id:"next-steps",children:"Next Steps"}),"\n",(0,i.jsxs)(s.c,{children:[(0,i.jsx)(l.c,{title:"Implement a Custom Activity",description:"Implement a custom activity for VertiGIS Studio Mobile",link:(0,n.c)("docs/workflow/sdk-mobile-create-activity")}),(0,i.jsx)(l.c,{title:"Implement a Custom Form Element",description:"Implement a custom form element for VertiGIS Studio Mobile",link:(0,n.c)("docs/workflow/tutorial-mobile-activity-indicator-form-element")}),(0,i.jsx)(l.c,{title:"Reference a Third Party library",description:"Reference a third party library in VertiGIS Studio Mobile",link:(0,n.c)("docs/workflow/sdk-mobile-reference-third-party-library")})]})]})}function h(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},9552:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>u,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var i=o(7624),r=o(2172);const n={},s=void 0,l={id:"workflow/snippets/sdk-net-limitations-warning",title:"sdk-net-limitations-warning",description:"We recommend that you only implement the IActivityHandler interface examples provided in the Developer Center. These examples have been verified and are provided to help you customize your VertiGIS Studio product to suit your needs. You should not reference other classes and functions from the various VertiGIS Studio Workflow assemblies. Doing so could risk breaking functionality and/or unexpected results as a result of future changes.",source:"@site/docs/workflow/snippets/sdk-net-limitations-warning.mdx",sourceDirName:"workflow/snippets",slug:"/workflow/snippets/sdk-net-limitations-warning",permalink:"/docs/workflow/snippets/sdk-net-limitations-warning",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/snippets/sdk-net-limitations-warning.mdx",tags:[],version:"current",frontMatter:{}},d={},c=[];function a(e){const t={admonition:"admonition",p:"p",...(0,r.M)(),...e.components};return(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["We recommend that you only implement the ",(0,i.jsx)("code",{children:"IActivityHandler"})," interface examples provided in the Developer Center. These examples have been verified and are provided to help you customize your VertiGIS Studio product to suit your needs. You should not reference other classes and functions from the various VertiGIS Studio Workflow assemblies. Doing so could risk breaking functionality and/or unexpected results as a result of future changes."]})})}function u(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},7528:(e,t,o)=>{o.d(t,{c:()=>l});var i=o(867),r=(o(1504),o(4971));const n={root:"root_Uwqo"};var s=o(7624);function l({title:e,description:t,link:o}){return(0,s.jsx)("div",{className:(0,r.c)("card-demo",n.root),children:(0,s.jsxs)("div",{className:"card",children:[(0,s.jsx)("div",{className:"card__header",children:(0,s.jsx)("h3",{children:e})}),(0,s.jsx)("div",{className:"card__body",children:(0,s.jsx)("p",{children:t})}),(0,s.jsx)("div",{className:"card__footer",children:(0,s.jsx)(i.c,{className:"button button--secondary button--block",to:o,children:"Get Started"})})]})})}},7160:(e,t,o)=>{o.d(t,{c:()=>n});o(1504);const i={root:"root_vxd5"};var r=o(7624);function n({children:e}){return(0,r.jsx)("div",{className:i.root,children:e})}},4971:(e,t,o)=>{function i(e){var t,o,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;tr});const r=function(){for(var e,t,o=0,r="";o{o.d(t,{I:()=>l,M:()=>s});var i=o(1504);const r={},n=i.createContext(r);function s(e){const t=i.useContext(n);return i.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(r):e.components||r:s(e.components),i.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b22f7342.bffc7de8.js b/assets/js/b22f7342.bffc7de8.js new file mode 100644 index 000000000..b57734baa --- /dev/null +++ b/assets/js/b22f7342.bffc7de8.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[2e3],{8976:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>k,frontMatter:()=>c,metadata:()=>a,toc:()=>f});var r=o(7624),i=o(2172),n=o(964),s=o(7160),d=o(7528);const c={title:"Using the .NET Workflow SDK with VertiGIS Studio Desktop",sidebar_label:"Overview",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Desktop"},l=void 0,a={id:"workflow/sdk-desktop-overview",title:"Using the .NET Workflow SDK with VertiGIS Studio Desktop",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Desktop",source:"@site/docs/workflow/sdk-desktop-overview.mdx",sourceDirName:"workflow",slug:"/workflow/sdk-desktop-overview",permalink:"/docs/workflow/sdk-desktop-overview",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/sdk-desktop-overview.mdx",tags:[],version:"current",frontMatter:{title:"Using the .NET Workflow SDK with VertiGIS Studio Desktop",sidebar_label:"Overview",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Desktop"},sidebar:"workflow",previous:{title:"Implement an Loading Indicator Form Element",permalink:"/docs/workflow/tutorial-mobile-activity-indicator-form-element"},next:{title:"Create an Activity",permalink:"/docs/workflow/sdk-desktop-create-activity"}},u={},f=[{value:"Next Steps",id:"next-steps",level:2}];function p(e){const t={a:"a",h2:"h2",li:"li",ol:"ol",p:"p",...(0,i.M)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"Custom activities are being added to VertiGIS Studio Desktop using the add-in mechanism of ArcGIS Pro. Providing some implementations for well-known elements, you easily can bring your custom logic to Workflow Desktop:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://developers.arcgis.com/documentation/arcgis-add-ins-and-automation/arcgis-pro/tutorials/build-your-first-add-in/",children:"Create a new"})," (or extend your existing) ArcGIS Pro add-in."]}),"\n",(0,r.jsxs)(t.li,{children:["Add a reference to Workflow Runtime ",(0,r.jsx)(t.a,{href:"https://www.nuget.org/packages/VertiGIS.Workflow.Runtime",children:"NuGet Package"})," to your project"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"/docs/workflow/sdk-desktop-create-activity",children:"Implement"})," your activities"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"next-steps",children:"Next Steps"}),"\n",(0,r.jsx)(s.c,{children:(0,r.jsx)(d.c,{title:"Implement a Custom Activity",description:"Implement a custom activity for VertiGIS Studio Desktop",link:(0,n.c)("docs/workflow/sdk-desktop-create-activity")})})]})}function k(e={}){const{wrapper:t}={...(0,i.M)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},7528:(e,t,o)=>{o.d(t,{c:()=>d});var r=o(867),i=(o(1504),o(4971));const n={root:"root_Uwqo"};var s=o(7624);function d({title:e,description:t,link:o}){return(0,s.jsx)("div",{className:(0,i.c)("card-demo",n.root),children:(0,s.jsxs)("div",{className:"card",children:[(0,s.jsx)("div",{className:"card__header",children:(0,s.jsx)("h3",{children:e})}),(0,s.jsx)("div",{className:"card__body",children:(0,s.jsx)("p",{children:t})}),(0,s.jsx)("div",{className:"card__footer",children:(0,s.jsx)(r.c,{className:"button button--secondary button--block",to:o,children:"Get Started"})})]})})}},7160:(e,t,o)=>{o.d(t,{c:()=>n});o(1504);const r={root:"root_vxd5"};var i=o(7624);function n({children:e}){return(0,i.jsx)("div",{className:r.root,children:e})}},4971:(e,t,o)=>{function r(e){var t,o,i="";if("string"==typeof e||"number"==typeof e)i+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ti});const i=function(){for(var e,t,o=0,i="";o{o.d(t,{I:()=>d,M:()=>s});var r=o(1504);const i={},n=r.createContext(i);function s(e){const t=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dacf7858.21bcc8f0.js b/assets/js/dacf7858.21bcc8f0.js deleted file mode 100644 index 5e1b84caf..000000000 --- a/assets/js/dacf7858.21bcc8f0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[776,7884,5940],{548:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=n(7624),o=n(2172);const r={},s=void 0,l={id:"snippets/workflow-url",title:"workflow-url",description:"https://apps.vertigisstudio.com/workflow/designer/#workflow=",source:"@site/docs/snippets/workflow-url.mdx",sourceDirName:"snippets",slug:"/snippets/workflow-url",permalink:"/docs/snippets/workflow-url",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/snippets/workflow-url.mdx",tags:[],version:"current",frontMatter:{}},a={},c=[];function d(e){const t={a:"a",p:"p",...(0,o.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("div",{class:"alert alert--secondary",role:"alert",children:(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://apps.vertigisstudio.com/workflow/designer/#workflow=",children:"https://apps.vertigisstudio.com/workflow/designer/#workflow="}),"\n",(0,i.jsx)("b",{children:"44010fc421dd4659b74fb921e09ba594"})]})}),"\n",(0,i.jsx)("br",{})]})}function m(e={}){const{wrapper:t}={...(0,o.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1404:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=n(7624),o=n(2172);const r={},s=void 0,l={id:"workflow/snippets/prereqs-mobile",title:"prereqs-mobile",description:"Extending VertiGIS Studio Workflow for Mobile requires development and deployment of a custom VertiGIS Studio Mobile Application using the VertiGIS Studio Mobile SDK",source:"@site/docs/workflow/snippets/prereqs-mobile.mdx",sourceDirName:"workflow/snippets",slug:"/workflow/snippets/prereqs-mobile",permalink:"/docs/workflow/snippets/prereqs-mobile",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/snippets/prereqs-mobile.mdx",tags:[],version:"current",frontMatter:{}},a={},c=[];function d(e){const t={a:"a",admonition:"admonition",p:"p",...(0,o.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.admonition,{title:"Important",type:"info",children:(0,i.jsxs)(t.p,{children:["Extending VertiGIS Studio Workflow for Mobile requires development and deployment of a custom VertiGIS Studio Mobile Application using the ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-overview",children:"VertiGIS Studio Mobile SDK"})]})}),"\n",(0,i.jsxs)(t.p,{children:["Follow the instructions in the ",(0,i.jsx)(t.a,{href:"/docs/workflow/sdk-mobile-overview",children:"VertiGIS Studio Mobile SDK"})," page to set up the environment for extending Workflow for VertiGIS Studio Mobile."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["A working knowledge of ",(0,i.jsx)(t.a,{href:"https://docs.microsoft.com/en-ca/dotnet/csharp/",children:"C#"})," and ",(0,i.jsx)(t.a,{href:"https://dotnet.microsoft.com/platform/dotnet-standard",children:".NET Standard"})," is recommended before extending Workflow for VertiGIS Studio Mobile"]})})]})}function m(e={}){const{wrapper:t}={...(0,o.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},6780:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>m,default:()=>g,frontMatter:()=>d,metadata:()=>u,toc:()=>h});var i=n(7624),o=n(2172),r=n(964),s=n(1268),l=n(5388),a=n(1404),c=n(548);const d={title:"Implement an Loading Indicator Form Element",description:"VertiGIS Studio Workflow - Build a custom form element that displays a loading indicator"},m=void 0,u={id:"workflow/tutorial-mobile-activity-indicator-form-element",title:"Implement an Loading Indicator Form Element",description:"VertiGIS Studio Workflow - Build a custom form element that displays a loading indicator",source:"@site/docs/workflow/tutorial-mobile-activity-indicator-form-element.mdx",sourceDirName:"workflow",slug:"/workflow/tutorial-mobile-activity-indicator-form-element",permalink:"/docs/workflow/tutorial-mobile-activity-indicator-form-element",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/tutorial-mobile-activity-indicator-form-element.mdx",tags:[],version:"current",frontMatter:{title:"Implement an Loading Indicator Form Element",description:"VertiGIS Studio Workflow - Build a custom form element that displays a loading indicator"},sidebar:"workflow",previous:{title:"Show a Callout on the Map with an Activity",permalink:"/docs/workflow/tutorial-mobile-show-map-callout"},next:{title:"SDK Overview",permalink:"/docs/workflow/sdk-server-overview"}},p={},h=[{value:"Prerequisites",id:"prerequisites",level:2},...a.toc,{value:"Overview",id:"overview",level:2},{value:"Set up the Custom Form Element Skeleton",id:"set-up-the-custom-form-element-skeleton",level:2},{value:"Set up a Form Element Registration Activity",id:"set-up-a-form-element-registration-activity",level:2},{value:"Register the Form Element Registration Activity",id:"register-the-form-element-registration-activity",level:2},{value:"Add the Loading Indicator",id:"add-the-loading-indicator",level:2},{value:"Test your Activity",id:"test-your-activity",level:2},...c.toc,{value:"Relevant SDK Sample",id:"relevant-sdk-sample",level:2}];function f(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:["Implementing a custom ",(0,i.jsx)(t.a,{href:"/docs/workflow/key-concepts#form-elements",children:"form element"})," allows you to augment the existing ",(0,i.jsx)(t.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/form-elements/auto-complete.htm%3FTocPath%3DForms%7CForm%2520Element%2520Reference%7C_____0",children:"form elements that come with VertiGIS Studio Workflow"}),".\nThis article will walk you through creating a form element that displays a loading indicator."]}),"\n",(0,i.jsx)("img",{src:(0,r.c)("img/workflow-mobile-custom-form-element-loading-indicator.png")}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(a.default,{}),"\n",(0,i.jsx)(t.h2,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(t.p,{children:"Implementing a custom form element in VertiGIS Studio Mobile consists of three steps:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Creating the custom form element and implementing the UI."}),"\n",(0,i.jsx)(t.li,{children:"Creating an activity which will register this form component with VertiGIS Studio Workflow."}),"\n",(0,i.jsxs)(t.li,{children:["Registering the activity with VertiGIS Studio Workflow and running it ",(0,i.jsx)(t.strong,{children:"before"})," using the custom form element."]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"set-up-the-custom-form-element-skeleton",children:"Set up the Custom Form Element Skeleton"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Using Visual Studio, create a new file, using the Xamarin Forms: Content View template. Name the file ",(0,i.jsx)(t.code,{children:"LoadingIndicator.xaml"}),", and place it in the platform agnostic project of the VertiGIS Studio Mobile ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-overview",children:"Quickstart"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:["Change the base class to ",(0,i.jsx)(t.code,{children:"ContentComponent"})," both in the xaml and in the code-behind."]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-xml",metastring:'title="App1/App1/workflow/LoadingIndicator.xaml"',children:'\n// highlight-next-line\n\n \n \n\n'})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/LoadingIndicator.xaml.cs"',children:"using VertiGIS.Mobile.Workflow.Core;\nusing Xamarin.Forms.Xaml;\n\nnamespace App1.Workflow\n{\n [XamlCompilation(XamlCompilationOptions.Compile)]\n // highlight-next-line\n public partial class LoadingIndicator : ContentComponent\n {\n public LoadingIndicator(VertiGIS.Workflow.Runtime.Definition.Forms.Element element, string name)\n : base(element, name)\n {\n InitializeComponent();\n }\n }\n}\n"})}),"\n",(0,i.jsx)(t.h2,{id:"set-up-a-form-element-registration-activity",children:"Set up a Form Element Registration Activity"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Create a new file ",(0,i.jsx)(t.code,{children:"FormElementRegistrationActivity.cs"})," in the platform agnostic project of the VertiGIS Studio Mobile ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-overview",children:"Quickstart"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:["Add a new form registration activity that implements ",(0,i.jsx)(t.code,{children:"RegisterCustomFormElementBase"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:["Register the ",(0,i.jsx)(t.code,{children:"LoadingIndicator"})," form element in the ",(0,i.jsx)(t.code,{children:"Execute"})," method of the activity."]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"tip",children:(0,i.jsxs)(t.p,{children:["Only one form element registration activity is needed per app, as it can register multiple custom form elements.\nLearn more about ",(0,i.jsx)(t.a,{href:"/docs/workflow/sdk-mobile-activity-reference",children:"implementing custom activities"}),"."]})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/FormElementRegistrationActivity.cs"',children:'using VertiGIS.Workflow.Runtime;\nusing VertiGIS.Workflow.Runtime.Activities.App;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\n[assembly: Export(typeof(FormElementRegistrationActivity))]\nnamespace App1.Workflow\n{\n // highlight-next-line\n class FormElementRegistrationActivity : RegisterCustomFormElementBase\n {\n public static string Action { get; } = "uuid:::FormElementRegistrationActivity";\n\n public override Task> Execute(IDictionary inputs, IActivityContext context)\n {\n IDictionary result = new Dictionary();\n // highlight-next-line\n Register("LoadingIndicator", typeof(LoadingIndicator), context);\n return Task.FromResult(result);\n }\n }\n}\n'})}),"\n",(0,i.jsx)(t.h2,{id:"register-the-form-element-registration-activity",children:"Register the Form Element Registration Activity"}),"\n",(0,i.jsxs)(t.p,{children:["Register the ",(0,i.jsx)(t.code,{children:"RegisterCustomFormElementBase"})," class in the ",(0,i.jsxs)(t.a,{href:"/docs/workflow/tutorial-mobile-calculate-logarithm-activity#register-the-activity-with-the-iactivityhandlerfactory",children:[(0,i.jsx)(t.code,{children:"IActivityHandlerFactory"})," for the application"]}),"."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["Learn more about activity registration in the ",(0,i.jsx)(t.a,{href:"/docs/workflow/sdk-mobile-activity-reference",children:"activity reference"}),"."]})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/ActivityLoader.cs"',children:'using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing App1.Workflow;\nusing VertiGIS.Mobile.Composition;\nusing VertiGIS.Workflow.Runtime;\nusing VertiGIS.Workflow.Runtime.Definition;\nusing VertiGIS.Workflow.Runtime.Execution;\n\n[assembly: Export(typeof(ActivityLoader), SingleInstance = true, AsImplementedInterfaces = true)]\nnamespace App1.Workflow\n{\n public class ActivityLoader : IActivityHandlerFactory\n {\n /// \n /// Gets a mapping of action names to implementations of s.\n /// \n private Dictionary> RegisteredActivities { get; } = new Dictionary>();\n\n public ActivityLoader(Func formElementRegistrationActivityFactory)\n {\n // highlight-next-line\n RegisteredActivities[FormElementRegistrationActivity.Action] = formElementRegistrationActivityFactory;\n }\n\n /// \n /// Creates an .\n /// \n /// The name of the action to create.\n /// The cancellation token.\n /// The for the program.\n /// The activity handler for the given action.\n public Task Create(string action, CancellationToken token, ProgramInspector inspector = null)\n {\n if (action == null || token.IsCancellationRequested)\n {\n return Task.FromResult(null);\n }\n\n if (RegisteredActivities.TryGetValue(action, out Func handlerType))\n {\n return Task.FromResult(handlerType());\n }\n else\n {\n return Task.FromResult(null);\n }\n }\n }\n}\n\n\n'})}),"\n",(0,i.jsx)(t.h2,{id:"add-the-loading-indicator",children:"Add the Loading Indicator"}),"\n",(0,i.jsx)(t.p,{children:"Next we can add the loading indicator to the form element xaml."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-xml",metastring:'title="App1/App1/workflow/LoadingIndicator.xaml.cs"',children:'\n\n \n // highlight-next-line\n \n \n\n'})}),"\n",(0,i.jsx)(t.h2,{id:"test-your-activity",children:"Test your Activity"}),"\n",(0,i.jsxs)(t.p,{children:["Now you can ",(0,i.jsx)(t.a,{href:"https://docs.vertigisstudio.com/mobileviewer/latest/admin-help/Default.htm#gmv/designer/add-a-workflow-to-an-app.htm",children:"build a workflow for VertiGIS Studio Mobile"})," that uses your new custom form element! It is ",(0,i.jsx)(t.strong,{children:"essential"})," that this custom activity be run before the custom form element is used. It is best practice to run the form element registration activity at the start of a workflow."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)("p",{children:[(0,i.jsxs)(t.p,{children:["You can"," "]}),(0,i.jsx)("a",{href:(0,r.c)("workflows/mobile-custom-form-element.json"),download:"custom-form-element.json",target:"_blank",children:(0,i.jsx)(t.p,{children:"download this demo workflow"})})," ",(0,i.jsx)(t.p,{children:"that registers and displays the custom form element and"}),(0,i.jsxs)("a",{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/import-export-workflows.htm",target:"_blank",children:[" ",(0,i.jsxs)(t.p,{children:["import it into the VertiGIS Studio Workflow Designer."," "]})]})]})}),"\n",(0,i.jsx)(t.p,{children:"Next you need to run the workflow you just created in your VertiGIS Studio Mobile SDK project."}),"\n",(0,i.jsx)(t.p,{children:"You can do this by configuring the layout and app config to run a workflow. You will need to copy the ID of the the workflow you created into the app.json"}),"\n",(0,i.jsx)(c.default,{}),"\n",(0,i.jsxs)(s.c,{defaultValue:"config",values:[{label:"App Config",value:"config"},{label:"Layout",value:"layout"},{label:"UI",value:"ui"}],children:[(0,i.jsx)(l.c,{value:"config",children:(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="App1/App1/app.json"',children:'{\n "schemaVersion": "1.0",\n "items": [\n {\n "$type": "layout",\n "id": "desktop-layout",\n "url": "resource://layout-large.xml",\n "tags": ["large"]\n },\n {\n "$type": "workflow",\n "id": "custom-workflow",\n "title": "Custom Workflow",\n "target": "#taskbar",\n // highlight-next-line\n "portalItem": ""\n },\n {\n "$type": "menu",\n "id": "iwtm",\n "items": [\n {\n "title": "Run Custom Workflow",\n "isEnabled": true,\n "iconId": "workflow",\n "action": {\n "name": "workflow.run",\n "arguments": {\n "id": "custom-workflow"\n }\n }\n }\n ]\n }\n ]\n}\n'})})}),(0,i.jsx)(l.c,{value:"layout",children:(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-xml",metastring:'title="App1/App1/layout-large.xml"',children:'\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\n'})})}),(0,i.jsx)(l.c,{value:"ui",children:(0,i.jsx)("img",{src:(0,r.c)("img/workflow-mobile-custom-form-element-loading-indicator.png")})})]}),"\n",(0,i.jsx)(t.h2,{id:"relevant-sdk-sample",children:"Relevant SDK Sample"}),"\n",(0,i.jsx)(t.p,{children:"Check out the relevant VertiGIS Studio Mobile SDK Sample:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/geocortex/vertigis-mobile-samples/tree/master/Geocortex.Mobile.Samples/Geocortex.Mobile.Samples/Samples/Workflow/CustomFormComponent",children:"Custom Workflow Form Element"})}),"\n"]})]})}function g(e={}){const{wrapper:t}={...(0,o.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(f,{...e})}):f(e)}},5388:(e,t,n)=>{n.d(t,{c:()=>s});n(1504);var i=n(4064);const o={tabItem:"tabItem_Ymn6"};var r=n(7624);function s({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.c)(o.tabItem,n),hidden:t,children:e})}},1268:(e,t,n)=>{n.d(t,{c:()=>k});var i=n(1504),o=n(4064),r=n(3943),s=n(5592),l=n(5288),a=n(632),c=n(7128),d=n(1148);function m(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:t,children:n}=e;return(0,i.useMemo)((()=>{const e=t??function(e){return m(e).map((({props:{value:e,label:t,attributes:n,default:i}})=>({value:e,label:t,attributes:n,default:i})))}(n);return function(e){const t=(0,c.w)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p({value:e,tabValues:t}){return t.some((t=>t.value===e))}function h({queryString:e=!1,groupId:t}){const n=(0,s.Uz)(),o=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:e,groupId:t});return[(0,a._M)(o),(0,i.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,r=u(e),[s,a]=(0,i.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!p({value:e,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=t.find((e=>e.default))??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:r}))),[c,m]=h({queryString:n,groupId:o}),[f,g]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,o]=(0,d.IN)(t);return[n,(0,i.useCallback)((e=>{t&&o.set(e)}),[t,o])]}({groupId:o}),w=(()=>{const e=c??f;return p({value:e,tabValues:r})?e:null})();(0,l.c)((()=>{w&&a(w)}),[w]);return{selectedValue:s,selectValue:(0,i.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);a(e),m(e),g(e)}),[m,g,r]),tabValues:r}}var g=n(3664);const w={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(7624);function x({className:e,block:t,selectedValue:n,selectValue:i,tabValues:s}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,r.MV)(),c=e=>{const t=e.currentTarget,o=l.indexOf(t),r=s[o].value;r!==n&&(a(t),i(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.c)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:i})=>(0,v.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:c,...i,className:(0,o.c)("tabs__item",w.tabItem,i?.className,{"tabs__item--active":n===e}),children:t??e},e)))})}function b({lazy:e,children:t,selectedValue:n}){const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===n));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,i.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function y(e){const t=f(e);return(0,v.jsxs)("div",{className:(0,o.c)("tabs-container",w.tabList),children:[(0,v.jsx)(x,{...e,...t}),(0,v.jsx)(b,{...e,...t})]})}function k(e){const t=(0,g.c)();return(0,v.jsx)(y,{...e,children:m(e.children)},String(t))}},2172:(e,t,n)=>{n.d(t,{I:()=>l,M:()=>s});var i=n(1504);const o={},r=i.createContext(o);function s(e){const t=i.useContext(r);return i.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(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dacf7858.fe814dfb.js b/assets/js/dacf7858.fe814dfb.js new file mode 100644 index 000000000..2bb3086f9 --- /dev/null +++ b/assets/js/dacf7858.fe814dfb.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[776,7884,5940],{548:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=n(7624),o=n(2172);const r={},s=void 0,l={id:"snippets/workflow-url",title:"workflow-url",description:"https://apps.vertigisstudio.com/workflow/designer/#workflow=",source:"@site/docs/snippets/workflow-url.mdx",sourceDirName:"snippets",slug:"/snippets/workflow-url",permalink:"/docs/snippets/workflow-url",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/snippets/workflow-url.mdx",tags:[],version:"current",frontMatter:{}},a={},c=[];function d(e){const t={a:"a",p:"p",...(0,o.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("div",{class:"alert alert--secondary",role:"alert",children:(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://apps.vertigisstudio.com/workflow/designer/#workflow=",children:"https://apps.vertigisstudio.com/workflow/designer/#workflow="}),"\n",(0,i.jsx)("b",{children:"44010fc421dd4659b74fb921e09ba594"})]})}),"\n",(0,i.jsx)("br",{})]})}function m(e={}){const{wrapper:t}={...(0,o.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1404:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=n(7624),o=n(2172);const r={},s=void 0,l={id:"workflow/snippets/prereqs-mobile",title:"prereqs-mobile",description:"Extending VertiGIS Studio Workflow for Mobile requires development and deployment of a custom VertiGIS Studio Mobile Application using the VertiGIS Studio Mobile SDK",source:"@site/docs/workflow/snippets/prereqs-mobile.mdx",sourceDirName:"workflow/snippets",slug:"/workflow/snippets/prereqs-mobile",permalink:"/docs/workflow/snippets/prereqs-mobile",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/snippets/prereqs-mobile.mdx",tags:[],version:"current",frontMatter:{}},a={},c=[];function d(e){const t={a:"a",admonition:"admonition",p:"p",...(0,o.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.admonition,{title:"Important",type:"info",children:(0,i.jsxs)(t.p,{children:["Extending VertiGIS Studio Workflow for Mobile requires development and deployment of a custom VertiGIS Studio Mobile Application using the ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-overview",children:"VertiGIS Studio Mobile SDK"})]})}),"\n",(0,i.jsxs)(t.p,{children:["Follow the instructions in the ",(0,i.jsx)(t.a,{href:"/docs/workflow/sdk-mobile-overview",children:"VertiGIS Studio Mobile SDK"})," page to set up the environment for extending Workflow for VertiGIS Studio Mobile."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["A working knowledge of ",(0,i.jsx)(t.a,{href:"https://docs.microsoft.com/en-ca/dotnet/csharp/",children:"C#"})," and ",(0,i.jsx)(t.a,{href:"https://dotnet.microsoft.com/platform/dotnet-standard",children:".NET Standard"})," is recommended before extending Workflow for VertiGIS Studio Mobile"]})})]})}function m(e={}){const{wrapper:t}={...(0,o.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},6780:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>m,default:()=>g,frontMatter:()=>d,metadata:()=>u,toc:()=>h});var i=n(7624),o=n(2172),r=n(964),s=n(1268),l=n(5388),a=n(1404),c=n(548);const d={title:"Implement an Loading Indicator Form Element",description:"VertiGIS Studio Workflow - Build a custom form element that displays a loading indicator"},m=void 0,u={id:"workflow/tutorial-mobile-activity-indicator-form-element",title:"Implement an Loading Indicator Form Element",description:"VertiGIS Studio Workflow - Build a custom form element that displays a loading indicator",source:"@site/docs/workflow/tutorial-mobile-activity-indicator-form-element.mdx",sourceDirName:"workflow",slug:"/workflow/tutorial-mobile-activity-indicator-form-element",permalink:"/docs/workflow/tutorial-mobile-activity-indicator-form-element",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/tutorial-mobile-activity-indicator-form-element.mdx",tags:[],version:"current",frontMatter:{title:"Implement an Loading Indicator Form Element",description:"VertiGIS Studio Workflow - Build a custom form element that displays a loading indicator"},sidebar:"workflow",previous:{title:"Show a Callout on the Map with an Activity",permalink:"/docs/workflow/tutorial-mobile-show-map-callout"},next:{title:"Overview",permalink:"/docs/workflow/sdk-desktop-overview"}},p={},h=[{value:"Prerequisites",id:"prerequisites",level:2},...a.toc,{value:"Overview",id:"overview",level:2},{value:"Set up the Custom Form Element Skeleton",id:"set-up-the-custom-form-element-skeleton",level:2},{value:"Set up a Form Element Registration Activity",id:"set-up-a-form-element-registration-activity",level:2},{value:"Register the Form Element Registration Activity",id:"register-the-form-element-registration-activity",level:2},{value:"Add the Loading Indicator",id:"add-the-loading-indicator",level:2},{value:"Test your Activity",id:"test-your-activity",level:2},...c.toc,{value:"Relevant SDK Sample",id:"relevant-sdk-sample",level:2}];function f(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:["Implementing a custom ",(0,i.jsx)(t.a,{href:"/docs/workflow/key-concepts#form-elements",children:"form element"})," allows you to augment the existing ",(0,i.jsx)(t.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/form-elements/auto-complete.htm%3FTocPath%3DForms%7CForm%2520Element%2520Reference%7C_____0",children:"form elements that come with VertiGIS Studio Workflow"}),".\nThis article will walk you through creating a form element that displays a loading indicator."]}),"\n",(0,i.jsx)("img",{src:(0,r.c)("img/workflow-mobile-custom-form-element-loading-indicator.png")}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(a.default,{}),"\n",(0,i.jsx)(t.h2,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(t.p,{children:"Implementing a custom form element in VertiGIS Studio Mobile consists of three steps:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Creating the custom form element and implementing the UI."}),"\n",(0,i.jsx)(t.li,{children:"Creating an activity which will register this form component with VertiGIS Studio Workflow."}),"\n",(0,i.jsxs)(t.li,{children:["Registering the activity with VertiGIS Studio Workflow and running it ",(0,i.jsx)(t.strong,{children:"before"})," using the custom form element."]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"set-up-the-custom-form-element-skeleton",children:"Set up the Custom Form Element Skeleton"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Using Visual Studio, create a new file, using the Xamarin Forms: Content View template. Name the file ",(0,i.jsx)(t.code,{children:"LoadingIndicator.xaml"}),", and place it in the platform agnostic project of the VertiGIS Studio Mobile ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-overview",children:"Quickstart"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:["Change the base class to ",(0,i.jsx)(t.code,{children:"ContentComponent"})," both in the xaml and in the code-behind."]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-xml",metastring:'title="App1/App1/workflow/LoadingIndicator.xaml"',children:'\n// highlight-next-line\n\n \n \n\n'})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/LoadingIndicator.xaml.cs"',children:"using VertiGIS.Mobile.Workflow.Core;\nusing Xamarin.Forms.Xaml;\n\nnamespace App1.Workflow\n{\n [XamlCompilation(XamlCompilationOptions.Compile)]\n // highlight-next-line\n public partial class LoadingIndicator : ContentComponent\n {\n public LoadingIndicator(VertiGIS.Workflow.Runtime.Definition.Forms.Element element, string name)\n : base(element, name)\n {\n InitializeComponent();\n }\n }\n}\n"})}),"\n",(0,i.jsx)(t.h2,{id:"set-up-a-form-element-registration-activity",children:"Set up a Form Element Registration Activity"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Create a new file ",(0,i.jsx)(t.code,{children:"FormElementRegistrationActivity.cs"})," in the platform agnostic project of the VertiGIS Studio Mobile ",(0,i.jsx)(t.a,{href:"/docs/mobile/sdk-overview",children:"Quickstart"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:["Add a new form registration activity that implements ",(0,i.jsx)(t.code,{children:"RegisterCustomFormElementBase"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:["Register the ",(0,i.jsx)(t.code,{children:"LoadingIndicator"})," form element in the ",(0,i.jsx)(t.code,{children:"Execute"})," method of the activity."]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"tip",children:(0,i.jsxs)(t.p,{children:["Only one form element registration activity is needed per app, as it can register multiple custom form elements.\nLearn more about ",(0,i.jsx)(t.a,{href:"/docs/workflow/sdk-mobile-activity-reference",children:"implementing custom activities"}),"."]})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/FormElementRegistrationActivity.cs"',children:'using VertiGIS.Workflow.Runtime;\nusing VertiGIS.Workflow.Runtime.Activities.App;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\n[assembly: Export(typeof(FormElementRegistrationActivity))]\nnamespace App1.Workflow\n{\n // highlight-next-line\n class FormElementRegistrationActivity : RegisterCustomFormElementBase\n {\n public static string Action { get; } = "uuid:::FormElementRegistrationActivity";\n\n public override Task> Execute(IDictionary inputs, IActivityContext context)\n {\n IDictionary result = new Dictionary();\n // highlight-next-line\n Register("LoadingIndicator", typeof(LoadingIndicator), context);\n return Task.FromResult(result);\n }\n }\n}\n'})}),"\n",(0,i.jsx)(t.h2,{id:"register-the-form-element-registration-activity",children:"Register the Form Element Registration Activity"}),"\n",(0,i.jsxs)(t.p,{children:["Register the ",(0,i.jsx)(t.code,{children:"RegisterCustomFormElementBase"})," class in the ",(0,i.jsxs)(t.a,{href:"/docs/workflow/tutorial-mobile-calculate-logarithm-activity#register-the-activity-with-the-iactivityhandlerfactory",children:[(0,i.jsx)(t.code,{children:"IActivityHandlerFactory"})," for the application"]}),"."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["Learn more about activity registration in the ",(0,i.jsx)(t.a,{href:"/docs/workflow/sdk-mobile-activity-reference",children:"activity reference"}),"."]})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-cs",metastring:'title="App1/App1/workflow/ActivityLoader.cs"',children:'using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing App1.Workflow;\nusing VertiGIS.Mobile.Composition;\nusing VertiGIS.Workflow.Runtime;\nusing VertiGIS.Workflow.Runtime.Definition;\nusing VertiGIS.Workflow.Runtime.Execution;\n\n[assembly: Export(typeof(ActivityLoader), SingleInstance = true, AsImplementedInterfaces = true)]\nnamespace App1.Workflow\n{\n public class ActivityLoader : IActivityHandlerFactory\n {\n /// \n /// Gets a mapping of action names to implementations of s.\n /// \n private Dictionary> RegisteredActivities { get; } = new Dictionary>();\n\n public ActivityLoader(Func formElementRegistrationActivityFactory)\n {\n // highlight-next-line\n RegisteredActivities[FormElementRegistrationActivity.Action] = formElementRegistrationActivityFactory;\n }\n\n /// \n /// Creates an .\n /// \n /// The name of the action to create.\n /// The cancellation token.\n /// The for the program.\n /// The activity handler for the given action.\n public Task Create(string action, CancellationToken token, ProgramInspector inspector = null)\n {\n if (action == null || token.IsCancellationRequested)\n {\n return Task.FromResult(null);\n }\n\n if (RegisteredActivities.TryGetValue(action, out Func handlerType))\n {\n return Task.FromResult(handlerType());\n }\n else\n {\n return Task.FromResult(null);\n }\n }\n }\n}\n\n\n'})}),"\n",(0,i.jsx)(t.h2,{id:"add-the-loading-indicator",children:"Add the Loading Indicator"}),"\n",(0,i.jsx)(t.p,{children:"Next we can add the loading indicator to the form element xaml."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-xml",metastring:'title="App1/App1/workflow/LoadingIndicator.xaml.cs"',children:'\n\n \n // highlight-next-line\n \n \n\n'})}),"\n",(0,i.jsx)(t.h2,{id:"test-your-activity",children:"Test your Activity"}),"\n",(0,i.jsxs)(t.p,{children:["Now you can ",(0,i.jsx)(t.a,{href:"https://docs.vertigisstudio.com/mobileviewer/latest/admin-help/Default.htm#gmv/designer/add-a-workflow-to-an-app.htm",children:"build a workflow for VertiGIS Studio Mobile"})," that uses your new custom form element! It is ",(0,i.jsx)(t.strong,{children:"essential"})," that this custom activity be run before the custom form element is used. It is best practice to run the form element registration activity at the start of a workflow."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)("p",{children:[(0,i.jsxs)(t.p,{children:["You can"," "]}),(0,i.jsx)("a",{href:(0,r.c)("workflows/mobile-custom-form-element.json"),download:"custom-form-element.json",target:"_blank",children:(0,i.jsx)(t.p,{children:"download this demo workflow"})})," ",(0,i.jsx)(t.p,{children:"that registers and displays the custom form element and"}),(0,i.jsxs)("a",{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/import-export-workflows.htm",target:"_blank",children:[" ",(0,i.jsxs)(t.p,{children:["import it into the VertiGIS Studio Workflow Designer."," "]})]})]})}),"\n",(0,i.jsx)(t.p,{children:"Next you need to run the workflow you just created in your VertiGIS Studio Mobile SDK project."}),"\n",(0,i.jsx)(t.p,{children:"You can do this by configuring the layout and app config to run a workflow. You will need to copy the ID of the the workflow you created into the app.json"}),"\n",(0,i.jsx)(c.default,{}),"\n",(0,i.jsxs)(s.c,{defaultValue:"config",values:[{label:"App Config",value:"config"},{label:"Layout",value:"layout"},{label:"UI",value:"ui"}],children:[(0,i.jsx)(l.c,{value:"config",children:(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="App1/App1/app.json"',children:'{\n "schemaVersion": "1.0",\n "items": [\n {\n "$type": "layout",\n "id": "desktop-layout",\n "url": "resource://layout-large.xml",\n "tags": ["large"]\n },\n {\n "$type": "workflow",\n "id": "custom-workflow",\n "title": "Custom Workflow",\n "target": "#taskbar",\n // highlight-next-line\n "portalItem": ""\n },\n {\n "$type": "menu",\n "id": "iwtm",\n "items": [\n {\n "title": "Run Custom Workflow",\n "isEnabled": true,\n "iconId": "workflow",\n "action": {\n "name": "workflow.run",\n "arguments": {\n "id": "custom-workflow"\n }\n }\n }\n ]\n }\n ]\n}\n'})})}),(0,i.jsx)(l.c,{value:"layout",children:(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-xml",metastring:'title="App1/App1/layout-large.xml"',children:'\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\n'})})}),(0,i.jsx)(l.c,{value:"ui",children:(0,i.jsx)("img",{src:(0,r.c)("img/workflow-mobile-custom-form-element-loading-indicator.png")})})]}),"\n",(0,i.jsx)(t.h2,{id:"relevant-sdk-sample",children:"Relevant SDK Sample"}),"\n",(0,i.jsx)(t.p,{children:"Check out the relevant VertiGIS Studio Mobile SDK Sample:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/geocortex/vertigis-mobile-samples/tree/master/Geocortex.Mobile.Samples/Geocortex.Mobile.Samples/Samples/Workflow/CustomFormComponent",children:"Custom Workflow Form Element"})}),"\n"]})]})}function g(e={}){const{wrapper:t}={...(0,o.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(f,{...e})}):f(e)}},5388:(e,t,n)=>{n.d(t,{c:()=>s});n(1504);var i=n(4064);const o={tabItem:"tabItem_Ymn6"};var r=n(7624);function s({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.c)(o.tabItem,n),hidden:t,children:e})}},1268:(e,t,n)=>{n.d(t,{c:()=>k});var i=n(1504),o=n(4064),r=n(3943),s=n(5592),l=n(5288),a=n(632),c=n(7128),d=n(1148);function m(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:t,children:n}=e;return(0,i.useMemo)((()=>{const e=t??function(e){return m(e).map((({props:{value:e,label:t,attributes:n,default:i}})=>({value:e,label:t,attributes:n,default:i})))}(n);return function(e){const t=(0,c.w)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p({value:e,tabValues:t}){return t.some((t=>t.value===e))}function h({queryString:e=!1,groupId:t}){const n=(0,s.Uz)(),o=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:e,groupId:t});return[(0,a._M)(o),(0,i.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,r=u(e),[s,a]=(0,i.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!p({value:e,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=t.find((e=>e.default))??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:r}))),[c,m]=h({queryString:n,groupId:o}),[f,g]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,o]=(0,d.IN)(t);return[n,(0,i.useCallback)((e=>{t&&o.set(e)}),[t,o])]}({groupId:o}),w=(()=>{const e=c??f;return p({value:e,tabValues:r})?e:null})();(0,l.c)((()=>{w&&a(w)}),[w]);return{selectedValue:s,selectValue:(0,i.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);a(e),m(e),g(e)}),[m,g,r]),tabValues:r}}var g=n(3664);const w={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(7624);function v({className:e,block:t,selectedValue:n,selectValue:i,tabValues:s}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,r.MV)(),c=e=>{const t=e.currentTarget,o=l.indexOf(t),r=s[o].value;r!==n&&(a(t),i(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.c)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:i})=>(0,x.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:c,...i,className:(0,o.c)("tabs__item",w.tabItem,i?.className,{"tabs__item--active":n===e}),children:t??e},e)))})}function b({lazy:e,children:t,selectedValue:n}){const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===n));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,i.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function y(e){const t=f(e);return(0,x.jsxs)("div",{className:(0,o.c)("tabs-container",w.tabList),children:[(0,x.jsx)(v,{...e,...t}),(0,x.jsx)(b,{...e,...t})]})}function k(e){const t=(0,g.c)();return(0,x.jsx)(y,{...e,children:m(e.children)},String(t))}},2172:(e,t,n)=>{n.d(t,{I:()=>l,M:()=>s});var i=n(1504);const o={},r=i.createContext(o);function s(e){const t=i.useContext(r);return i.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(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e247f73f.c5d93a28.js b/assets/js/e247f73f.c5d93a28.js new file mode 100644 index 000000000..036f7f990 --- /dev/null +++ b/assets/js/e247f73f.c5d93a28.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[5284],{20:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>a,contentTitle:()=>n,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var r=o(7624),i=o(2172);const s={title:"Integrating the ArcGIS Pro SDK",description:"VertiGIS Studio Workflow - Integrate the ArcGIS Pro SDK into custom activities for .NET applications"},n=void 0,c={id:"workflow/sdk-net-integrating-the-arcgis-pro-api",title:"Integrating the ArcGIS Pro SDK",description:"VertiGIS Studio Workflow - Integrate the ArcGIS Pro SDK into custom activities for .NET applications",source:"@site/docs/workflow/sdk-net-integrating-the-arcgis-pro-api.mdx",sourceDirName:"workflow",slug:"/workflow/sdk-net-integrating-the-arcgis-pro-api",permalink:"/docs/workflow/sdk-net-integrating-the-arcgis-pro-api",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/sdk-net-integrating-the-arcgis-pro-api.mdx",tags:[],version:"current",frontMatter:{title:"Integrating the ArcGIS Pro SDK",description:"VertiGIS Studio Workflow - Integrate the ArcGIS Pro SDK into custom activities for .NET applications"},sidebar:"workflow",previous:{title:"Integrating the ArcGIS Runtime SDK for .NET",permalink:"/docs/workflow/sdk-net-integrating-the-arcgis-api"},next:{title:"SDK Overview",permalink:"/docs/workflow/sdk-mobile-overview"}},a={},l=[{value:"VertiGIS Studio Desktop",id:"vertigis-studio-desktop",level:2},{value:"VertiGIS Studio Workflow Server",id:"vertigis-studio-workflow-server",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,i.M)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://apps.vertigisstudio.com/workflow/designer/",children:"VertiGIS Studio Workflow"})," was designed to be a flexible tool for implementing business logic for mapping applications, and tightly integrates with ArcGIS Pro SDK. You may want to use the ArcGIS Pro SDK in your own custom activities; this article will explain how to reference ArcGIS Pro SDK types in your custom activity or custom form elements for .NET applications."]}),"\n",(0,r.jsx)(t.h2,{id:"vertigis-studio-desktop",children:"VertiGIS Studio Desktop"}),"\n",(0,r.jsxs)(t.p,{children:["When ",(0,r.jsx)(t.a,{href:"/docs/workflow/sdk-desktop-overview",children:"creating a new ArcGIS Pro add-in project in Visual Studio"}),", your project already references the ",(0,r.jsx)(t.a,{href:"https://pro.arcgis.com/en/pro-app/latest/sdk/",children:"ArcGIS Pro SDK"}),", so integrating the ArcGIS Pro API is as easy as adding a ",(0,r.jsx)(t.code,{children:"using"})," statement to the top of your custom activity or form element."]}),"\n",(0,r.jsx)(t.p,{children:"For example:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-c#",children:"using Esri.ArcGISRuntime.Data;\n"})}),"\n",(0,r.jsx)(t.h2,{id:"vertigis-studio-workflow-server",children:"VertiGIS Studio Workflow Server"}),"\n",(0,r.jsxs)(t.p,{children:["It is ",(0,r.jsx)(t.strong,{children:"not possible"})," to reference the ",(0,r.jsx)(t.a,{href:"https://pro.arcgis.com/en/pro-app/latest/sdk/",children:"ArcGIS Pro SDK"})," in VertiGIS Studio Workflow Server, as the licensing does not allow for this usage."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["Consider using the ",(0,r.jsx)(t.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/geometries.htm#Work_with_Geometries%3FTocPath%3DWork%2520with%2520Geometries%7C_____0",children:"Geoprocessing activities"})," in a client workflow or the ",(0,r.jsx)(t.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/activities/run-python.htm%3FTocPath%3DActivities%7CActivity%2520Reference%7C_____174",children:(0,r.jsx)(t.code,{children:"Run Python"})})," activity on the server to have your workflow offload any operations that require server processing of ArcGIS types."]})})]})}function p(e={}){const{wrapper:t}={...(0,i.M)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},2172:(e,t,o)=>{o.d(t,{I:()=>c,M:()=>n});var r=o(1504);const i={},s=r.createContext(i);function n(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:n(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ec17ee32.2d61d10e.js b/assets/js/ec17ee32.2d61d10e.js new file mode 100644 index 000000000..ac2f15e1b --- /dev/null +++ b/assets/js/ec17ee32.2d61d10e.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[6590,1064],{8964:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>h,contentTitle:()=>a,default:()=>m,frontMatter:()=>c,metadata:()=>u,toc:()=>p});var i=o(7624),r=o(2172),n=o(964),s=o(7160),l=o(7528),d=o(9552);const c={title:"Using the .NET Workflow SDK with VertiGIS Studio Workflow Server",sidebar_label:"SDK Overview",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Workflow Server"},a=void 0,u={id:"workflow/sdk-server-overview",title:"Using the .NET Workflow SDK with VertiGIS Studio Workflow Server",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Workflow Server",source:"@site/docs/workflow/sdk-server-overview.mdx",sourceDirName:"workflow",slug:"/workflow/sdk-server-overview",permalink:"/docs/workflow/sdk-server-overview",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/sdk-server-overview.mdx",tags:[],version:"current",frontMatter:{title:"Using the .NET Workflow SDK with VertiGIS Studio Workflow Server",sidebar_label:"SDK Overview",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Workflow Server"},sidebar:"workflow",previous:{title:"Input and output wrapping",permalink:"/docs/workflow/sdk-desktop-wrapping"},next:{title:"Create an Activity",permalink:"/docs/workflow/sdk-server-create-activity"}},h={},p=[{value:"Requirements",id:"requirements",level:2},{value:"Development Environment",id:"development-environment",level:2},{value:"Setting up a VertiGIS Studio Workflow Server Extension Project",id:"setting-up-a-vertigis-studio-workflow-server-extension-project",level:2},...d.toc,{value:"Deploying VertiGIS Studio Workflow Server Activities",id:"deploying-vertigis-studio-workflow-server-activities",level:2},{value:"Debugging Server Workflow Activities",id:"debugging-server-workflow-activities",level:2},{value:"Automating Deployment of Server Workflow Activities",id:"automating-deployment-of-server-workflow-activities",level:2},{value:"Next Steps",id:"next-steps",level:2}];function f(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"VertiGIS Studio Workflow Server can be extended by augmenting your on-premises installation with additional custom .NET assemblies."}),"\n",(0,i.jsx)(t.h2,{id:"requirements",children:"Requirements"}),"\n",(0,i.jsx)(t.p,{children:"Extending VertiGIS Studio Workflow Server requires administrative access to your on-premises installation of workflow."}),"\n",(0,i.jsx)(t.h2,{id:"development-environment",children:"Development Environment"}),"\n",(0,i.jsx)(t.p,{children:"Visual Studio 2022 is the only officially supported development environment for extending VertiGIS Studio Workflow Server."}),"\n",(0,i.jsx)(t.h2,{id:"setting-up-a-vertigis-studio-workflow-server-extension-project",children:"Setting up a VertiGIS Studio Workflow Server Extension Project"}),"\n",(0,i.jsxs)(t.p,{children:["Extending VertiGIS Studio Workflow Server requires you to produce a separate assembly with your custom activities, and copy that into your on-premises deployment of VertiGIS Studio Workflow. We first need to set up a project using Visual Studio that references the ",(0,i.jsx)(t.a,{href:"/docs/workflow/key-concepts#vertigis-studio-workflow-designer-and-runtime",children:"workflow runtime"}),"."]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Launch Microsoft Visual Studio 2022."}),"\n",(0,i.jsxs)(t.li,{children:["Create a new project of type ",(0,i.jsx)(t.em,{children:"Class Library"})," (.NET Standard)","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["You can also create a project of type ",(0,i.jsx)(t.a,{href:"https://dotnet.microsoft.com/learn/dotnet/what-is-dotnet",children:".NET"})," to take advantage of its larger feature set. If so, you need to go into the project settings and change the output type to ",(0,i.jsx)(t.code,{children:"Class Library"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["Edit the ",(0,i.jsx)(t.code,{children:".csproj"})," file in a text editor and add the ",(0,i.jsx)(t.code,{children:"CopyLocalLockFileAssemblies"})," attribute to the ",(0,i.jsx)(t.code,{children:"PropertyGroup"}),"."]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-xml",children:"\n netstandard2.1\n CustomWorkflow\n // highlight-next-line\n true\n\n"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"This will copy the referenced nuget assemblies to the build output folder, which will be important for later."}),"\n"]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://docs.microsoft.com/en-us/visualstudio/ide/how-to-add-or-remove-references-by-using-the-reference-manager?view=vs-2019",children:"Add a reference"})," to the ",(0,i.jsx)(t.code,{children:"VertiGIS.Workflow.Runtime"})," assembly.\nBy default, this is located in",(0,i.jsx)(t.code,{children:"C:\\Program Files\\VertiGIS\\VertiGIS Studio Workflow\\Deployment\\service"})]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{title:"Important",type:"info",children:(0,i.jsxs)(t.p,{children:[".NET Standard projects ",(0,i.jsx)(t.strong,{children:"must"})," target .NET Standard 2.1, and .NET projects must target .NET 6.0, or else the assembly will be incompatible with VertiGIS Studio Workflow Server."]})}),"\n",(0,i.jsx)(d.default,{}),"\n",(0,i.jsxs)(t.p,{children:["Next, learn how to implement a ",(0,i.jsx)(t.a,{href:"/docs/workflow/tutorial-server-calculate-logarithm-activity",children:"custom activity"})," for VertiGIS Studio Workflow Server."]}),"\n",(0,i.jsx)(t.h2,{id:"deploying-vertigis-studio-workflow-server-activities",children:"Deploying VertiGIS Studio Workflow Server Activities"}),"\n",(0,i.jsx)(t.p,{children:"For VertiGIS Studio Workflow Server to find your custom activities, you need to copy the build output to a particular folder."}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Build the project."}),"\n",(0,i.jsxs)(t.li,{children:["Find the build output on disk.","\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:'In Visual Studio, right-click on your project in Solution Explorer and choose "Open Folder in File Explorer".'}),"\n",(0,i.jsxs)(t.li,{children:["Open the ",(0,i.jsx)(t.code,{children:"bin"})," folder.\nIf you do not see a",(0,i.jsx)(t.code,{children:"bin"})," folder, it is possible you right-clicked on the solution instead of the project."]}),"\n",(0,i.jsxs)(t.li,{children:["In the ",(0,i.jsx)(t.code,{children:"bin"})," folder, open either ",(0,i.jsx)(t.code,{children:"Debug"})," or ",(0,i.jsx)(t.code,{children:"Release"}),", depending on which build configuration you used."]}),"\n",(0,i.jsxs)(t.li,{children:["In the ",(0,i.jsx)(t.code,{children:"bin\\Debug"})," or ",(0,i.jsx)(t.code,{children:"bin\\Release"})," folder, there will be one final sub-directory which will be ",(0,i.jsx)(t.code,{children:"netstandard2.1"}),"\nor ",(0,i.jsx)(t.code,{children:"net6.0"}),". Open this folder."]}),"\n",(0,i.jsxs)(t.li,{children:["You should now see a number of files including ",(0,i.jsx)(t.code,{children:"VertiGIS.Workflow.Runtime.dll"})," and your own project, such as ",(0,i.jsx)(t.code,{children:"AssemblyNamespace.dll"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["Find the ",(0,i.jsx)(t.code,{children:"CustomAssemblies"})," folder on disk.","\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["VertiGIS Studio Workflow looks in a folder called ",(0,i.jsx)(t.code,{children:"CustomAssemblies"})," for assemblies that contain custom activities.\nThis is located in the folder that you chose when installing VertiGIS Studio Workflow. The default location is\n",(0,i.jsx)(t.code,{children:"C:\\Program Files\\VertiGIS\\VertiGIS Studio Workflow\\CustomAssemblies"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["Copy the relevant files from the build output to the ",(0,i.jsx)(t.code,{children:"CustomAssemblies"})," folder.","\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Copy your project's assembly. (e.g. ",(0,i.jsx)(t.code,{children:"AssemblyNamespace.dll"}),")"]}),"\n",(0,i.jsx)(t.li,{children:"Copy any third-party libraries that your project relies on (these should have been output to the build folder)"}),"\n",(0,i.jsx)(t.li,{children:"Copy any other configuration files or resources that your project relies on."}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Do not"})," copy any files that start with ",(0,i.jsx)(t.code,{children:"VertiGIS.Workflow."})," They are not required in this folder."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["If you created a .NET Project and see ",(0,i.jsx)(t.code,{children:"AssemblyNamespace.exe"}),", you need to change the project output type to ",(0,i.jsx)(t.code,{children:"Class Library"}),"."]})}),"\n",(0,i.jsx)(t.admonition,{title:"Important",type:"info",children:(0,i.jsx)(t.p,{children:"You may need to stop VertiGIS Studio Workflow Server in IIS in order to copy your copy your custom code."})}),"\n",(0,i.jsx)(t.h2,{id:"debugging-server-workflow-activities",children:"Debugging Server Workflow Activities"}),"\n",(0,i.jsx)(t.p,{children:"You can debug custom VertiGIS Studio Workflow Server activities by attaching to the VertiGIS Studio Workflow Server process from the VertiGIS Studio Workflow extension project you created."}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Start Visual Studio 2022 with administrator privileges."}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://docs.microsoft.com/en-us/visualstudio/debugger/debug-multiple-processes?view=vs-2019#BKMK_Attach_to_a_process",children:"Attach the debugger"})," to the running ",(0,i.jsx)(t.code,{children:"GeocortexWorkflowServer.exe"})," process.","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"You may need to check 'show processes from all users' to see it."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.li,{children:"Set a breakpoint in your custom activity."}),"\n",(0,i.jsx)(t.li,{children:"Run your server workflow that uses the custom activity. Your breakpoint should be hit."}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"automating-deployment-of-server-workflow-activities",children:"Automating Deployment of Server Workflow Activities"}),"\n",(0,i.jsx)(t.p,{children:"To automate the deployment to VertiGIS Studio Workflow Server, we have to add a post build step to the project that copies the build output."}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Locate the ",(0,i.jsx)(t.code,{children:"Custom Assemblies"})," folder in the VertiGIS Studio Workflow Server installation. The default location is ",(0,i.jsx)(t.code,{children:"C:\\Program Files\\VertiGIS\\VertiGIS Studio Workflow\\CustomAssemblies"})]}),"\n",(0,i.jsxs)(t.li,{children:["Create a file ",(0,i.jsx)(t.code,{children:"excluded_files.txt"})," at the root of the project that excludes the appropriate build output files as described in the ",(0,i.jsx)(t.a,{href:"#deploying-vertigis-studio-workflow-server-activities",children:"deployment section"}),"."]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"VertiGIS.Workflow.Runtime.dll\nVertiGIS.Workflow.Runtime.xml\n"})}),"\n",(0,i.jsxs)(t.ol,{start:"2",children:["\n",(0,i.jsxs)(t.li,{children:["Edit the post build event in the project properties.","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Add a command which copies the build output to the ",(0,i.jsx)(t.code,{children:"Custom Assemblies"})," folder."]}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.code,{children:'xcopy "$(OutDir)*" "C:\\Program Files\\VertiGIS\\VertiGIS Studio Workflow\\CustomAssemblies" /Exclude:$(ProjectDir)excludedFiles.txt /y'})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.li,{children:"Run a rebuild and ensure all appropriate files are copied."}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{title:"Important",type:"info",children:(0,i.jsx)(t.p,{children:"You may need to stop then restart VertiGIS Studio Workflow Server in order for the post build step to copy your custom code."})}),"\n",(0,i.jsx)(t.h2,{id:"next-steps",children:"Next Steps"}),"\n",(0,i.jsx)(t.p,{children:"Check out the tutorials to learn how to build custom activities for VertiGIS Studio Workflow Server and augment them with third party libraries."}),"\n",(0,i.jsxs)(s.c,{children:[(0,i.jsx)(l.c,{title:"Implement a Custom Activity",description:"Implement a custom activity for VertiGIS Studio Workflow Server",link:(0,n.c)("docs/workflow/tutorial-server-calculate-logarithm-activity")}),(0,i.jsx)(l.c,{title:"Reference a Third Party Library",description:"Reference a third party library in custom code.",link:(0,n.c)("docs/workflow/sdk-server-reference-third-party-library")})]})]})}function m(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(f,{...e})}):f(e)}},9552:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>u,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var i=o(7624),r=o(2172);const n={},s=void 0,l={id:"workflow/snippets/sdk-net-limitations-warning",title:"sdk-net-limitations-warning",description:"We recommend that you only implement the IActivityHandler interface examples provided in the Developer Center. These examples have been verified and are provided to help you customize your VertiGIS Studio product to suit your needs. You should not reference other classes and functions from the various VertiGIS Studio Workflow assemblies. Doing so could risk breaking functionality and/or unexpected results as a result of future changes.",source:"@site/docs/workflow/snippets/sdk-net-limitations-warning.mdx",sourceDirName:"workflow/snippets",slug:"/workflow/snippets/sdk-net-limitations-warning",permalink:"/docs/workflow/snippets/sdk-net-limitations-warning",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/snippets/sdk-net-limitations-warning.mdx",tags:[],version:"current",frontMatter:{}},d={},c=[];function a(e){const t={admonition:"admonition",p:"p",...(0,r.M)(),...e.components};return(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["We recommend that you only implement the ",(0,i.jsx)("code",{children:"IActivityHandler"})," interface examples provided in the Developer Center. These examples have been verified and are provided to help you customize your VertiGIS Studio product to suit your needs. You should not reference other classes and functions from the various VertiGIS Studio Workflow assemblies. Doing so could risk breaking functionality and/or unexpected results as a result of future changes."]})})}function u(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},7528:(e,t,o)=>{o.d(t,{c:()=>l});var i=o(867),r=(o(1504),o(4971));const n={root:"root_Uwqo"};var s=o(7624);function l({title:e,description:t,link:o}){return(0,s.jsx)("div",{className:(0,r.c)("card-demo",n.root),children:(0,s.jsxs)("div",{className:"card",children:[(0,s.jsx)("div",{className:"card__header",children:(0,s.jsx)("h3",{children:e})}),(0,s.jsx)("div",{className:"card__body",children:(0,s.jsx)("p",{children:t})}),(0,s.jsx)("div",{className:"card__footer",children:(0,s.jsx)(i.c,{className:"button button--secondary button--block",to:o,children:"Get Started"})})]})})}},7160:(e,t,o)=>{o.d(t,{c:()=>n});o(1504);const i={root:"root_vxd5"};var r=o(7624);function n({children:e}){return(0,r.jsx)("div",{className:i.root,children:e})}},4971:(e,t,o)=>{function i(e){var t,o,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;tr});const r=function(){for(var e,t,o=0,r="";o{o.d(t,{I:()=>l,M:()=>s});var i=o(1504);const r={},n=i.createContext(r);function s(e){const t=i.useContext(n);return i.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(r):e.components||r:s(e.components),i.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ec17ee32.74bd5c2d.js b/assets/js/ec17ee32.74bd5c2d.js deleted file mode 100644 index 332eb083f..000000000 --- a/assets/js/ec17ee32.74bd5c2d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[6590,1064],{8964:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>h,contentTitle:()=>a,default:()=>m,frontMatter:()=>c,metadata:()=>u,toc:()=>p});var i=o(7624),r=o(2172),n=o(964),s=o(7160),l=o(7528),d=o(9552);const c={title:"Using the .NET Workflow SDK with VertiGIS Studio Workflow Server",sidebar_label:"SDK Overview",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Workflow Server"},a=void 0,u={id:"workflow/sdk-server-overview",title:"Using the .NET Workflow SDK with VertiGIS Studio Workflow Server",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Workflow Server",source:"@site/docs/workflow/sdk-server-overview.mdx",sourceDirName:"workflow",slug:"/workflow/sdk-server-overview",permalink:"/docs/workflow/sdk-server-overview",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/sdk-server-overview.mdx",tags:[],version:"current",frontMatter:{title:"Using the .NET Workflow SDK with VertiGIS Studio Workflow Server",sidebar_label:"SDK Overview",description:"VertiGIS Studio Workflow - Overview of extending workflow for VertiGIS Studio Workflow Server"},sidebar:"workflow",previous:{title:"Implement an Loading Indicator Form Element",permalink:"/docs/workflow/tutorial-mobile-activity-indicator-form-element"},next:{title:"Create an Activity",permalink:"/docs/workflow/sdk-server-create-activity"}},h={},p=[{value:"Requirements",id:"requirements",level:2},{value:"Development Environment",id:"development-environment",level:2},{value:"Setting up a VertiGIS Studio Workflow Server Extension Project",id:"setting-up-a-vertigis-studio-workflow-server-extension-project",level:2},...d.toc,{value:"Deploying VertiGIS Studio Workflow Server Activities",id:"deploying-vertigis-studio-workflow-server-activities",level:2},{value:"Debugging Server Workflow Activities",id:"debugging-server-workflow-activities",level:2},{value:"Automating Deployment of Server Workflow Activities",id:"automating-deployment-of-server-workflow-activities",level:2},{value:"Next Steps",id:"next-steps",level:2}];function f(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"VertiGIS Studio Workflow Server can be extended by augmenting your on-premises installation with additional custom .NET assemblies."}),"\n",(0,i.jsx)(t.h2,{id:"requirements",children:"Requirements"}),"\n",(0,i.jsx)(t.p,{children:"Extending VertiGIS Studio Workflow Server requires administrative access to your on-premises installation of workflow."}),"\n",(0,i.jsx)(t.h2,{id:"development-environment",children:"Development Environment"}),"\n",(0,i.jsx)(t.p,{children:"Visual Studio 2022 is the only officially supported development environment for extending VertiGIS Studio Workflow Server."}),"\n",(0,i.jsx)(t.h2,{id:"setting-up-a-vertigis-studio-workflow-server-extension-project",children:"Setting up a VertiGIS Studio Workflow Server Extension Project"}),"\n",(0,i.jsxs)(t.p,{children:["Extending VertiGIS Studio Workflow Server requires you to produce a separate assembly with your custom activities, and copy that into your on-premises deployment of VertiGIS Studio Workflow. We first need to set up a project using Visual Studio that references the ",(0,i.jsx)(t.a,{href:"/docs/workflow/key-concepts#vertigis-studio-workflow-designer-and-runtime",children:"workflow runtime"}),"."]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Launch Microsoft Visual Studio 2022."}),"\n",(0,i.jsxs)(t.li,{children:["Create a new project of type ",(0,i.jsx)(t.em,{children:"Class Library"})," (.NET Standard)","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["You can also create a project of type ",(0,i.jsx)(t.a,{href:"https://dotnet.microsoft.com/learn/dotnet/what-is-dotnet",children:".NET"})," to take advantage of its larger feature set. If so, you need to go into the project settings and change the output type to ",(0,i.jsx)(t.code,{children:"Class Library"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["Edit the ",(0,i.jsx)(t.code,{children:".csproj"})," file in a text editor and add the ",(0,i.jsx)(t.code,{children:"CopyLocalLockFileAssemblies"})," attribute to the ",(0,i.jsx)(t.code,{children:"PropertyGroup"}),"."]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-xml",children:"\n netstandard2.1\n CustomWorkflow\n // highlight-next-line\n true\n\n"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"This will copy the referenced nuget assemblies to the build output folder, which will be important for later."}),"\n"]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://docs.microsoft.com/en-us/visualstudio/ide/how-to-add-or-remove-references-by-using-the-reference-manager?view=vs-2019",children:"Add a reference"})," to the ",(0,i.jsx)(t.code,{children:"VertiGIS.Workflow.Runtime"})," assembly.\nBy default, this is located in",(0,i.jsx)(t.code,{children:"C:\\Program Files\\VertiGIS\\VertiGIS Studio Workflow\\Deployment\\service"})]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{title:"Important",type:"info",children:(0,i.jsxs)(t.p,{children:[".NET Standard projects ",(0,i.jsx)(t.strong,{children:"must"})," target .NET Standard 2.1, and .NET projects must target .NET 6.0, or else the assembly will be incompatible with VertiGIS Studio Workflow Server."]})}),"\n",(0,i.jsx)(d.default,{}),"\n",(0,i.jsxs)(t.p,{children:["Next, learn how to implement a ",(0,i.jsx)(t.a,{href:"/docs/workflow/tutorial-server-calculate-logarithm-activity",children:"custom activity"})," for VertiGIS Studio Workflow Server."]}),"\n",(0,i.jsx)(t.h2,{id:"deploying-vertigis-studio-workflow-server-activities",children:"Deploying VertiGIS Studio Workflow Server Activities"}),"\n",(0,i.jsx)(t.p,{children:"For VertiGIS Studio Workflow Server to find your custom activities, you need to copy the build output to a particular folder."}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Build the project."}),"\n",(0,i.jsxs)(t.li,{children:["Find the build output on disk.","\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:'In Visual Studio, right-click on your project in Solution Explorer and choose "Open Folder in File Explorer".'}),"\n",(0,i.jsxs)(t.li,{children:["Open the ",(0,i.jsx)(t.code,{children:"bin"})," folder.\nIf you do not see a",(0,i.jsx)(t.code,{children:"bin"})," folder, it is possible you right-clicked on the solution instead of the project."]}),"\n",(0,i.jsxs)(t.li,{children:["In the ",(0,i.jsx)(t.code,{children:"bin"})," folder, open either ",(0,i.jsx)(t.code,{children:"Debug"})," or ",(0,i.jsx)(t.code,{children:"Release"}),", depending on which build configuration you used."]}),"\n",(0,i.jsxs)(t.li,{children:["In the ",(0,i.jsx)(t.code,{children:"bin\\Debug"})," or ",(0,i.jsx)(t.code,{children:"bin\\Release"})," folder, there will be one final sub-directory which will be ",(0,i.jsx)(t.code,{children:"netstandard2.1"}),"\nor ",(0,i.jsx)(t.code,{children:"net6.0"}),". Open this folder."]}),"\n",(0,i.jsxs)(t.li,{children:["You should now see a number of files including ",(0,i.jsx)(t.code,{children:"VertiGIS.Workflow.Runtime.dll"})," and your own project, such as ",(0,i.jsx)(t.code,{children:"AssemblyNamespace.dll"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["Find the ",(0,i.jsx)(t.code,{children:"CustomAssemblies"})," folder on disk.","\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["VertiGIS Studio Workflow looks in a folder called ",(0,i.jsx)(t.code,{children:"CustomAssemblies"})," for assemblies that contain custom activities.\nThis is located in the folder that you chose when installing VertiGIS Studio Workflow. The default location is\n",(0,i.jsx)(t.code,{children:"C:\\Program Files\\VertiGIS\\VertiGIS Studio Workflow\\CustomAssemblies"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["Copy the relevant files from the build output to the ",(0,i.jsx)(t.code,{children:"CustomAssemblies"})," folder.","\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Copy your project's assembly. (e.g. ",(0,i.jsx)(t.code,{children:"AssemblyNamespace.dll"}),")"]}),"\n",(0,i.jsx)(t.li,{children:"Copy any third-party libraries that your project relies on (these should have been output to the build folder)"}),"\n",(0,i.jsx)(t.li,{children:"Copy any other configuration files or resources that your project relies on."}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Do not"})," copy any files that start with ",(0,i.jsx)(t.code,{children:"VertiGIS.Workflow."})," They are not required in this folder."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["If you created a .NET Project and see ",(0,i.jsx)(t.code,{children:"AssemblyNamespace.exe"}),", you need to change the project output type to ",(0,i.jsx)(t.code,{children:"Class Library"}),"."]})}),"\n",(0,i.jsx)(t.admonition,{title:"Important",type:"info",children:(0,i.jsx)(t.p,{children:"You may need to stop VertiGIS Studio Workflow Server in IIS in order to copy your copy your custom code."})}),"\n",(0,i.jsx)(t.h2,{id:"debugging-server-workflow-activities",children:"Debugging Server Workflow Activities"}),"\n",(0,i.jsx)(t.p,{children:"You can debug custom VertiGIS Studio Workflow Server activities by attaching to the VertiGIS Studio Workflow Server process from the VertiGIS Studio Workflow extension project you created."}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Start Visual Studio 2022 with administrator privileges."}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://docs.microsoft.com/en-us/visualstudio/debugger/debug-multiple-processes?view=vs-2019#BKMK_Attach_to_a_process",children:"Attach the debugger"})," to the running ",(0,i.jsx)(t.code,{children:"GeocortexWorkflowServer.exe"})," process.","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"You may need to check 'show processes from all users' to see it."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.li,{children:"Set a breakpoint in your custom activity."}),"\n",(0,i.jsx)(t.li,{children:"Run your server workflow that uses the custom activity. Your breakpoint should be hit."}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"automating-deployment-of-server-workflow-activities",children:"Automating Deployment of Server Workflow Activities"}),"\n",(0,i.jsx)(t.p,{children:"To automate the deployment to VertiGIS Studio Workflow Server, we have to add a post build step to the project that copies the build output."}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Locate the ",(0,i.jsx)(t.code,{children:"Custom Assemblies"})," folder in the VertiGIS Studio Workflow Server installation. The default location is ",(0,i.jsx)(t.code,{children:"C:\\Program Files\\VertiGIS\\VertiGIS Studio Workflow\\CustomAssemblies"})]}),"\n",(0,i.jsxs)(t.li,{children:["Create a file ",(0,i.jsx)(t.code,{children:"excluded_files.txt"})," at the root of the project that excludes the appropriate build output files as described in the ",(0,i.jsx)(t.a,{href:"#deploying-vertigis-studio-workflow-server-activities",children:"deployment section"}),"."]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"VertiGIS.Workflow.Runtime.dll\nVertiGIS.Workflow.Runtime.xml\n"})}),"\n",(0,i.jsxs)(t.ol,{start:"2",children:["\n",(0,i.jsxs)(t.li,{children:["Edit the post build event in the project properties.","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Add a command which copies the build output to the ",(0,i.jsx)(t.code,{children:"Custom Assemblies"})," folder."]}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.code,{children:'xcopy "$(OutDir)*" "C:\\Program Files\\VertiGIS\\VertiGIS Studio Workflow\\CustomAssemblies" /Exclude:$(ProjectDir)excludedFiles.txt /y'})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.li,{children:"Run a rebuild and ensure all appropriate files are copied."}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{title:"Important",type:"info",children:(0,i.jsx)(t.p,{children:"You may need to stop then restart VertiGIS Studio Workflow Server in order for the post build step to copy your custom code."})}),"\n",(0,i.jsx)(t.h2,{id:"next-steps",children:"Next Steps"}),"\n",(0,i.jsx)(t.p,{children:"Check out the tutorials to learn how to build custom activities for VertiGIS Studio Workflow Server and augment them with third party libraries."}),"\n",(0,i.jsxs)(s.c,{children:[(0,i.jsx)(l.c,{title:"Implement a Custom Activity",description:"Implement a custom activity for VertiGIS Studio Workflow Server",link:(0,n.c)("docs/workflow/tutorial-server-calculate-logarithm-activity")}),(0,i.jsx)(l.c,{title:"Reference a Third Party Library",description:"Reference a third party library in custom code.",link:(0,n.c)("docs/workflow/sdk-server-reference-third-party-library")})]})]})}function m(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(f,{...e})}):f(e)}},9552:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>u,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var i=o(7624),r=o(2172);const n={},s=void 0,l={id:"workflow/snippets/sdk-net-limitations-warning",title:"sdk-net-limitations-warning",description:"We recommend that you only implement the IActivityHandler interface examples provided in the Developer Center. These examples have been verified and are provided to help you customize your VertiGIS Studio product to suit your needs. You should not reference other classes and functions from the various VertiGIS Studio Workflow assemblies. Doing so could risk breaking functionality and/or unexpected results as a result of future changes.",source:"@site/docs/workflow/snippets/sdk-net-limitations-warning.mdx",sourceDirName:"workflow/snippets",slug:"/workflow/snippets/sdk-net-limitations-warning",permalink:"/docs/workflow/snippets/sdk-net-limitations-warning",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/snippets/sdk-net-limitations-warning.mdx",tags:[],version:"current",frontMatter:{}},d={},c=[];function a(e){const t={admonition:"admonition",p:"p",...(0,r.M)(),...e.components};return(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["We recommend that you only implement the ",(0,i.jsx)("code",{children:"IActivityHandler"})," interface examples provided in the Developer Center. These examples have been verified and are provided to help you customize your VertiGIS Studio product to suit your needs. You should not reference other classes and functions from the various VertiGIS Studio Workflow assemblies. Doing so could risk breaking functionality and/or unexpected results as a result of future changes."]})})}function u(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},7528:(e,t,o)=>{o.d(t,{c:()=>l});var i=o(867),r=(o(1504),o(4971));const n={root:"root_Uwqo"};var s=o(7624);function l({title:e,description:t,link:o}){return(0,s.jsx)("div",{className:(0,r.c)("card-demo",n.root),children:(0,s.jsxs)("div",{className:"card",children:[(0,s.jsx)("div",{className:"card__header",children:(0,s.jsx)("h3",{children:e})}),(0,s.jsx)("div",{className:"card__body",children:(0,s.jsx)("p",{children:t})}),(0,s.jsx)("div",{className:"card__footer",children:(0,s.jsx)(i.c,{className:"button button--secondary button--block",to:o,children:"Get Started"})})]})})}},7160:(e,t,o)=>{o.d(t,{c:()=>n});o(1504);const i={root:"root_vxd5"};var r=o(7624);function n({children:e}){return(0,r.jsx)("div",{className:i.root,children:e})}},4971:(e,t,o)=>{function i(e){var t,o,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;tr});const r=function(){for(var e,t,o=0,r="";o{o.d(t,{I:()=>l,M:()=>s});var i=o(1504);const r={},n=i.createContext(r);function s(e){const t=i.useContext(n);return i.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(r):e.components||r:s(e.components),i.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fdede3e2.e3aee35d.js b/assets/js/fdede3e2.e3aee35d.js deleted file mode 100644 index 7ccb3d985..000000000 --- a/assets/js/fdede3e2.e3aee35d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[8744],{3668:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var o=i(7624),n=i(2172);const r={title:"Registering .NET Activities with VertiGIS Studio Workflow Designer",description:"VertiGIS Studio Workflow - Registering .NET workflow activities with VertiGIS Studio Workflow Designer"},a=void 0,s={id:"workflow/sdk-net-register-activities",title:"Registering .NET Activities with VertiGIS Studio Workflow Designer",description:"VertiGIS Studio Workflow - Registering .NET workflow activities with VertiGIS Studio Workflow Designer",source:"@site/docs/workflow/sdk-net-register-activities.mdx",sourceDirName:"workflow",slug:"/workflow/sdk-net-register-activities",permalink:"/docs/workflow/sdk-net-register-activities",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/sdk-net-register-activities.mdx",tags:[],version:"current",frontMatter:{title:"Registering .NET Activities with VertiGIS Studio Workflow Designer",description:"VertiGIS Studio Workflow - Registering .NET workflow activities with VertiGIS Studio Workflow Designer"},sidebar:"workflow",previous:{title:"SDK Overview",permalink:"/docs/workflow/sdk-net-overview"},next:{title:"Integrating the ArcGIS Runtime SDK for .NET",permalink:"/docs/workflow/sdk-net-integrating-the-arcgis-api"}},c={},l=[{value:"Implement a TypeScript Activity Pack with Stub Activities",id:"implement-a-typescript-activity-pack-with-stub-activities",level:2},{value:"Create a new Activity Pack",id:"create-a-new-activity-pack",level:3},{value:"Stub out the Activity Metadata",id:"stub-out-the-activity-metadata",level:3}];function u(t){const e={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,n.M)(),...t.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(e.p,{children:["VertiGIS Studio Workflow ",(0,o.jsx)(e.a,{href:"/docs/workflow/key-concepts#activities",children:"activities"})," can be implemented in either TypeScript or C#, depending on the target platform. For ",(0,o.jsx)(e.a,{href:"/docs/workflow/tutorial-web-calculate-logarithm-activity",children:"custom activities implemented in TypeScript"}),", the registration of the workflow activity implementation is done alongside the VertiGIS Studio Workflow Designer activity definition when the ",(0,o.jsx)(e.a,{href:"/docs/workflow/key-concepts#activity-packs",children:"activity pack"})," is registered. However, with .NET activities implemented for VertiGIS Studio Mobile or ",(0,o.jsx)(e.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/server-workflows.htm%3FTocPath%3DServer%2520Workflows%7C_____0",children:"VertiGIS Studio Workflow Server"}),", the implementation is defined on the host platform (.NET), while the VertiGIS Studio Workflow Designer activity definition must be defined in an activity pack (TypeScript)."]}),"\n",(0,o.jsx)(e.admonition,{type:"note",children:(0,o.jsxs)(e.p,{children:["If no VertiGIS Studio Workflow Designer activity definition is provided for a custom activity implemented for VertiGIS Studio Mobile or VertiGIS Studio Workflow Server, the activity will not show up in VertiGIS Studio Workflow Designer and must be run using ",(0,o.jsx)(e.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/activities/run-activity.htm%3FTocPath%3DActivities%7CActivity%2520Reference%7C_____167",children:(0,o.jsx)(e.code,{children:"RunActivity"})}),"."]})}),"\n",(0,o.jsxs)(e.p,{children:["This article covers how to create an activity pack to register VertiGIS Studio Workflow Designer activity definitions for custom activities implemented in ",(0,o.jsx)(e.a,{href:"/docs/workflow/tutorial-mobile-calculate-logarithm-activity",children:"VertiGIS Studio Mobile"})," or ",(0,o.jsx)(e.a,{href:"/docs/workflow/tutorial-server-calculate-logarithm-activity",children:"VertiGIS Studio Workflow Server"}),"."]}),"\n",(0,o.jsx)(e.h2,{id:"implement-a-typescript-activity-pack-with-stub-activities",children:"Implement a TypeScript Activity Pack with Stub Activities"}),"\n",(0,o.jsx)(e.p,{children:"The idea behind creating activity definitions for VertiGIS Studio Workflow Designer is that every activity implemented in .NET has a corresponding stub activity with the metadata, but no execution body, in a TypeScript activity pack."}),"\n",(0,o.jsxs)(e.p,{children:["Let's take the VertiGIS Studio Mobile ",(0,o.jsx)(e.a,{href:"/docs/workflow/tutorial-mobile-calculate-logarithm-activity",children:"custom logarithm activity"})," for example."]}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-cs",metastring:'title="App1/App1/CustomActivity.cs"',children:'using VertiGIS.Workflow.Runtime;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace App1.Workflow\n{\n public class CalculateLog : IActivityHandler\n {\n public const string Action = "uuid:::CalculateLog";\n\n public Task> Execute(IDictionary inputs, IActivityContext context)\n {\n double? logBase = null;\n if (inputs.ContainsKey("base")) {\n var logBase = inputs["base"];\n }\n var value = (double)inputs["value"];\n\n double logResult;\n if(logBase != null)\n {\n logResult = Math.Log(value, (double)logBase);\n } else\n {\n logResult = Math.Log(value);\n }\n\n return Task.FromResult((IDictionary)new Dictionary()\n {\n ["result"] = logResult\n });\n }\n }\n}\n'})}),"\n",(0,o.jsx)(e.p,{children:"This activity will need a TypeScript stub that defines its input and output types and descriptions, specifies the runtime environments it supports, and an activity description."}),"\n",(0,o.jsx)(e.h3,{id:"create-a-new-activity-pack",children:"Create a new Activity Pack"}),"\n",(0,o.jsxs)(e.p,{children:["Follow the instructions in ",(0,o.jsx)(e.a,{href:"/docs/workflow/tutorial-web-calculate-logarithm-activity",children:"Implement a Custom Activity for Web Applications"})," up to ",(0,o.jsx)(e.a,{href:"/docs/workflow/tutorial-web-calculate-logarithm-activity#implement-the-activity",children:"Implement the Activity"}),". You will need to update the uuid value in ",(0,o.jsx)(e.code,{children:"uuid.js"})," of your activity pack to match the uuid of your .NET project."]}),"\n",(0,o.jsx)(e.h3,{id:"stub-out-the-activity-metadata",children:"Stub out the Activity Metadata"}),"\n",(0,o.jsx)(e.p,{children:"Stub out the appropriate metadata and type information for the .NET activity you are stubbing out. The execute body is left empty, as the implementation is defined in .NET using the VertiGIS Studio Mobile SDK or VertiGIS Studio Workflow for Server. In the case of the Logarithm activity, the stub might look like this."}),"\n",(0,o.jsx)(e.admonition,{title:"Important",type:"info",children:(0,o.jsxs)(e.p,{children:["By default the static ",(0,o.jsx)(e.code,{children:"action"})," property will be generated for you when you build the TypeScript activity pack. In the example below we've explicitly declared the static ",(0,o.jsx)(e.code,{children:"action"})," property to match the action name in the .NET implementation. If these two action names are not the same, the .NET workflow runtime will ",(0,o.jsx)(e.strong,{children:"not"})," be able to find the correct activity."]})}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-ts",children:'import type { IActivityHandler } from "@vertigis/workflow/IActivityHandler";\n\nexport interface CalculateLogInputs {\n /**\n * @description The base of the logarithm. Defaults to the natural log.\n */\n base?: number;\n\n /**\n * @description The number to calculate the logarithm for.\n * @required\n */\n value: number;\n}\n\nexport interface CalculateLogOutputs {\n /**\n * @description The logarithm output.\n */\n result: number;\n}\n\n/**\n * @supportedApps GMV\n * @category Custom Activities\n * @description An activity that calculates the log of a number with the given base.\n */\nexport class CalculateLog implements IActivityHandler {\n static action = "uuid:::CalculateLog";\n\n async execute(\n inputs: CalculateLogInputs\n ): Promise {\n // The host application must implement this activity\n throw new Error(\n "Activity not implemented for this platform."\n );\n }\n}\n'})}),"\n",(0,o.jsxs)(e.p,{children:["The activity now has a friendly user interface in VertiGIS Studio Workflow Designer, that can be ",(0,o.jsx)(e.a,{href:"/docs/workflow/sdk-web-overview#sharing-the-activity-pack",children:"shared with other workflow authors"}),"."]})]})}function d(t={}){const{wrapper:e}={...(0,n.M)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(u,{...t})}):u(t)}},2172:(t,e,i)=>{i.d(e,{I:()=>s,M:()=>a});var o=i(1504);const n={},r=o.createContext(n);function a(t){const e=o.useContext(r);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:a(t.components),o.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/fdede3e2.e5914b87.js b/assets/js/fdede3e2.e5914b87.js new file mode 100644 index 000000000..86cf0d58a --- /dev/null +++ b/assets/js/fdede3e2.e5914b87.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[8744],{3668:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var o=i(7624),n=i(2172);const r={title:"Registering .NET Activities with VertiGIS Studio Workflow Designer",description:"VertiGIS Studio Workflow - Registering .NET workflow activities with VertiGIS Studio Workflow Designer"},a=void 0,s={id:"workflow/sdk-net-register-activities",title:"Registering .NET Activities with VertiGIS Studio Workflow Designer",description:"VertiGIS Studio Workflow - Registering .NET workflow activities with VertiGIS Studio Workflow Designer",source:"@site/docs/workflow/sdk-net-register-activities.mdx",sourceDirName:"workflow",slug:"/workflow/sdk-net-register-activities",permalink:"/docs/workflow/sdk-net-register-activities",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/sdk-net-register-activities.mdx",tags:[],version:"current",frontMatter:{title:"Registering .NET Activities with VertiGIS Studio Workflow Designer",description:"VertiGIS Studio Workflow - Registering .NET workflow activities with VertiGIS Studio Workflow Designer"},sidebar:"workflow",previous:{title:"SDK Overview",permalink:"/docs/workflow/sdk-net-overview"},next:{title:"Integrating the ArcGIS Runtime SDK for .NET",permalink:"/docs/workflow/sdk-net-integrating-the-arcgis-api"}},c={},l=[{value:"Implement a TypeScript Activity Pack with Stub Activities",id:"implement-a-typescript-activity-pack-with-stub-activities",level:2},{value:"Create a new Activity Pack",id:"create-a-new-activity-pack",level:3},{value:"Stub out the Activity Metadata",id:"stub-out-the-activity-metadata",level:3}];function d(t){const e={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,n.M)(),...t.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(e.p,{children:["VertiGIS Studio Workflow ",(0,o.jsx)(e.a,{href:"/docs/workflow/key-concepts#activities",children:"activities"})," can be implemented in either TypeScript or C#, depending on the target platform. For ",(0,o.jsx)(e.a,{href:"/docs/workflow/tutorial-web-calculate-logarithm-activity",children:"custom activities implemented in TypeScript"}),", the registration of the workflow activity implementation is done alongside the VertiGIS Studio Workflow Designer activity definition when the ",(0,o.jsx)(e.a,{href:"/docs/workflow/key-concepts#activity-packs",children:"activity pack"})," is registered. However, with .NET activities implemented for VertiGIS Studio Mobile or ",(0,o.jsx)(e.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/server-workflows.htm%3FTocPath%3DServer%2520Workflows%7C_____0",children:"VertiGIS Studio Workflow Server"}),", the implementation is defined on the host platform (.NET), while the VertiGIS Studio Workflow Designer activity definition must be defined in an activity pack (TypeScript)."]}),"\n",(0,o.jsx)(e.admonition,{type:"note",children:(0,o.jsxs)(e.p,{children:["If no VertiGIS Studio Workflow Designer activity definition is provided for a custom activity implemented for VertiGIS Studio Mobile, VertiGIS Studio Desktop or VertiGIS Studio Workflow Server, the activity will not show up in VertiGIS Studio Workflow Designer and must be run using ",(0,o.jsx)(e.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/activities/run-activity.htm%3FTocPath%3DActivities%7CActivity%2520Reference%7C_____167",children:(0,o.jsx)(e.code,{children:"RunActivity"})}),"."]})}),"\n",(0,o.jsxs)(e.p,{children:["This article covers how to create an activity pack to register VertiGIS Studio Workflow Designer activity definitions for custom activities implemented in ",(0,o.jsx)(e.a,{href:"/docs/workflow/tutorial-mobile-calculate-logarithm-activity",children:"VertiGIS Studio Mobile"}),", ",(0,o.jsx)(e.a,{href:"/docs/workflow/sdk-desktop-create-activity",children:"VertiGIS Studio Desktop"})," or ",(0,o.jsx)(e.a,{href:"/docs/workflow/tutorial-server-calculate-logarithm-activity",children:"VertiGIS Studio Workflow Server"}),"."]}),"\n",(0,o.jsx)(e.h2,{id:"implement-a-typescript-activity-pack-with-stub-activities",children:"Implement a TypeScript Activity Pack with Stub Activities"}),"\n",(0,o.jsx)(e.p,{children:"The idea behind creating activity definitions for VertiGIS Studio Workflow Designer is that every activity implemented in .NET has a corresponding stub activity with the metadata, but no execution body, in a TypeScript activity pack."}),"\n",(0,o.jsxs)(e.p,{children:["Let's take the VertiGIS Studio Mobile ",(0,o.jsx)(e.a,{href:"/docs/workflow/tutorial-mobile-calculate-logarithm-activity",children:"custom logarithm activity"})," for example."]}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-cs",metastring:'title="App1/App1/CustomActivity.cs"',children:'using VertiGIS.Workflow.Runtime;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace App1.Workflow\n{\n public class CalculateLog : IActivityHandler\n {\n public const string Action = "uuid:::CalculateLog";\n\n public Task> Execute(IDictionary inputs, IActivityContext context)\n {\n double? logBase = null;\n if (inputs.ContainsKey("base")) {\n var logBase = inputs["base"];\n }\n var value = (double)inputs["value"];\n\n double logResult;\n if(logBase != null)\n {\n logResult = Math.Log(value, (double)logBase);\n } else\n {\n logResult = Math.Log(value);\n }\n\n return Task.FromResult((IDictionary)new Dictionary()\n {\n ["result"] = logResult\n });\n }\n }\n}\n'})}),"\n",(0,o.jsx)(e.p,{children:"This activity will need a TypeScript stub that defines its input and output types and descriptions, specifies the runtime environments it supports, and an activity description."}),"\n",(0,o.jsx)(e.h3,{id:"create-a-new-activity-pack",children:"Create a new Activity Pack"}),"\n",(0,o.jsxs)(e.p,{children:["Follow the instructions in ",(0,o.jsx)(e.a,{href:"/docs/workflow/tutorial-web-calculate-logarithm-activity",children:"Implement a Custom Activity for Web Applications"})," up to ",(0,o.jsx)(e.a,{href:"/docs/workflow/tutorial-web-calculate-logarithm-activity#implement-the-activity",children:"Implement the Activity"}),". You will need to update the uuid value in ",(0,o.jsx)(e.code,{children:"uuid.js"})," of your activity pack to match the uuid of your .NET project."]}),"\n",(0,o.jsx)(e.h3,{id:"stub-out-the-activity-metadata",children:"Stub out the Activity Metadata"}),"\n",(0,o.jsx)(e.p,{children:"Stub out the appropriate metadata and type information for the .NET activity you are stubbing out. The execute body is left empty, as the implementation is defined in .NET using the VertiGIS Studio Mobile SDK or VertiGIS Studio Workflow for Server. In the case of the Logarithm activity, the stub might look like this."}),"\n",(0,o.jsx)(e.admonition,{title:"Important",type:"info",children:(0,o.jsxs)(e.p,{children:["By default the static ",(0,o.jsx)(e.code,{children:"action"})," property will be generated for you when you build the TypeScript activity pack. In the example below we've explicitly declared the static ",(0,o.jsx)(e.code,{children:"action"})," property to match the action name in the .NET implementation. If these two action names are not the same, the .NET workflow runtime will ",(0,o.jsx)(e.strong,{children:"not"})," be able to find the correct activity."]})}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-ts",children:'import type { IActivityHandler } from "@vertigis/workflow/IActivityHandler";\n\nexport interface CalculateLogInputs {\n /**\n * @description The base of the logarithm. Defaults to the natural log.\n */\n base?: number;\n\n /**\n * @description The number to calculate the logarithm for.\n * @required\n */\n value: number;\n}\n\nexport interface CalculateLogOutputs {\n /**\n * @description The logarithm output.\n */\n result: number;\n}\n\n/**\n * @supportedApps GMV\n * @category Custom Activities\n * @description An activity that calculates the log of a number with the given base.\n */\nexport class CalculateLog implements IActivityHandler {\n static action = "uuid:::CalculateLog";\n\n async execute(\n inputs: CalculateLogInputs\n ): Promise {\n // The host application must implement this activity\n throw new Error(\n "Activity not implemented for this platform."\n );\n }\n}\n'})}),"\n",(0,o.jsxs)(e.p,{children:["The activity now has a friendly user interface in VertiGIS Studio Workflow Designer, that can be ",(0,o.jsx)(e.a,{href:"/docs/workflow/sdk-web-overview#sharing-the-activity-pack",children:"shared with other workflow authors"}),"."]})]})}function u(t={}){const{wrapper:e}={...(0,n.M)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(d,{...t})}):d(t)}},2172:(t,e,i)=>{i.d(e,{I:()=>s,M:()=>a});var o=i(1504);const n={},r=o.createContext(n);function a(t){const e=o.useContext(r);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:a(t.components),o.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/ff37a7c5.a44fc651.js b/assets/js/ff37a7c5.a44fc651.js new file mode 100644 index 000000000..dfe3dfbef --- /dev/null +++ b/assets/js/ff37a7c5.a44fc651.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[7308],{1420:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>h,frontMatter:()=>n,metadata:()=>c,toc:()=>l});var r=i(7624),o=i(2172);const n={title:"Integrating the ArcGIS Runtime SDK for .NET",description:"VertiGIS Studio Workflow - Integrate the ArcGIS Runtime SDK for .NET into custom activities for .NET applications"},s=void 0,c={id:"workflow/sdk-net-integrating-the-arcgis-api",title:"Integrating the ArcGIS Runtime SDK for .NET",description:"VertiGIS Studio Workflow - Integrate the ArcGIS Runtime SDK for .NET into custom activities for .NET applications",source:"@site/docs/workflow/sdk-net-integrating-the-arcgis-api.mdx",sourceDirName:"workflow",slug:"/workflow/sdk-net-integrating-the-arcgis-api",permalink:"/docs/workflow/sdk-net-integrating-the-arcgis-api",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/sdk-net-integrating-the-arcgis-api.mdx",tags:[],version:"current",frontMatter:{title:"Integrating the ArcGIS Runtime SDK for .NET",description:"VertiGIS Studio Workflow - Integrate the ArcGIS Runtime SDK for .NET into custom activities for .NET applications"},sidebar:"workflow",previous:{title:"Registering .NET Activities with VertiGIS Studio Workflow Designer",permalink:"/docs/workflow/sdk-net-register-activities"},next:{title:"Integrating the ArcGIS Pro SDK",permalink:"/docs/workflow/sdk-net-integrating-the-arcgis-pro-api"}},a={},l=[{value:"VertiGIS Studio Mobile",id:"vertigis-studio-mobile",level:2},{value:"VertiGIS Studio Workflow Server",id:"vertigis-studio-workflow-server",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,o.M)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://apps.vertigisstudio.com/workflow/designer/",children:"VertiGIS Studio Workflow"})," was designed to be a flexible tool for implementing business logic for mapping applications, and tightly integrates with ArcGIS Runtime SDK for .NET. You may want to use the ArcGIS Runtime SDK in your own custom activities; this article will explain how to reference ArcGIS Runtime SDK types in your custom activity or custom form elements for .NET applications."]}),"\n",(0,r.jsx)(t.h2,{id:"vertigis-studio-mobile",children:"VertiGIS Studio Mobile"}),"\n",(0,r.jsxs)(t.p,{children:["The VertiGIS Studio Mobile ",(0,r.jsx)(t.a,{href:"/docs/mobile/sdk-overview",children:"Quickstart"})," already references the ",(0,r.jsx)(t.a,{href:"https://developers.arcgis.com/net/latest/api-reference/",children:"ArcGIS Runtime SDK for .NET"}),", so integrating the ArcGIS API is as easy as adding a ",(0,r.jsx)(t.code,{children:"using"})," statement to the top of your custom activity or form element."]}),"\n",(0,r.jsx)(t.p,{children:"For example,"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-c#",children:"using Esri.ArcGISRuntime.Data;\n"})}),"\n",(0,r.jsx)(t.h2,{id:"vertigis-studio-workflow-server",children:"VertiGIS Studio Workflow Server"}),"\n",(0,r.jsxs)(t.p,{children:["It is ",(0,r.jsx)(t.strong,{children:"not possible"})," to reference the ",(0,r.jsx)(t.a,{href:"https://developers.arcgis.com/net/latest/api-reference/",children:"ArcGIS Runtime SDK for .NET"})," in VertiGIS Studio Workflow Server, as the licensing does not allow for this usage."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["Consider using the ",(0,r.jsx)(t.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/geometries.htm#Work_with_Geometries%3FTocPath%3DWork%2520with%2520Geometries%7C_____0",children:"Geoprocessing activities"})," in a client workflow or the ",(0,r.jsx)(t.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/activities/run-python.htm%3FTocPath%3DActivities%7CActivity%2520Reference%7C_____174",children:(0,r.jsx)(t.code,{children:"Run Python"})})," activity on the server to have your workflow offload any operations that require server processing of ArcGIS types."]})})]})}function h(e={}){const{wrapper:t}={...(0,o.M)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},2172:(e,t,i)=>{i.d(t,{I:()=>c,M:()=>s});var r=i(1504);const o={},n=r.createContext(o);function s(e){const t=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ff37a7c5.fae363a5.js b/assets/js/ff37a7c5.fae363a5.js deleted file mode 100644 index 833437a35..000000000 --- a/assets/js/ff37a7c5.fae363a5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[7308],{1420:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>h,frontMatter:()=>n,metadata:()=>c,toc:()=>l});var r=i(7624),o=i(2172);const n={title:"Integrating the ArcGIS Runtime SDK for .NET",description:"VertiGIS Studio Workflow - Integrate the ArcGIS Runtime SDK for .NET into custom activities for .NET applications"},s=void 0,c={id:"workflow/sdk-net-integrating-the-arcgis-api",title:"Integrating the ArcGIS Runtime SDK for .NET",description:"VertiGIS Studio Workflow - Integrate the ArcGIS Runtime SDK for .NET into custom activities for .NET applications",source:"@site/docs/workflow/sdk-net-integrating-the-arcgis-api.mdx",sourceDirName:"workflow",slug:"/workflow/sdk-net-integrating-the-arcgis-api",permalink:"/docs/workflow/sdk-net-integrating-the-arcgis-api",draft:!1,unlisted:!1,editUrl:"https://github.com/vertigis/studio-dev-center/edit/master/docs/workflow/sdk-net-integrating-the-arcgis-api.mdx",tags:[],version:"current",frontMatter:{title:"Integrating the ArcGIS Runtime SDK for .NET",description:"VertiGIS Studio Workflow - Integrate the ArcGIS Runtime SDK for .NET into custom activities for .NET applications"},sidebar:"workflow",previous:{title:"Registering .NET Activities with VertiGIS Studio Workflow Designer",permalink:"/docs/workflow/sdk-net-register-activities"},next:{title:"SDK Overview",permalink:"/docs/workflow/sdk-mobile-overview"}},a={},l=[{value:"VertiGIS Studio Mobile",id:"vertigis-studio-mobile",level:2},{value:"VertiGIS Studio Workflow Server",id:"vertigis-studio-workflow-server",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,o.M)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://apps.vertigisstudio.com/workflow/designer/",children:"VertiGIS Studio Workflow"})," was designed to be a flexible tool for implementing business logic for mapping applications, and tightly integrates with ArcGIS Runtime SDK for .NET. You may want to use the ArcGIS Runtime SDK in your own custom activities; this article will explain how to reference ArcGIS Runtime SDK types in your custom activity or custom form elements for .NET applications."]}),"\n",(0,r.jsx)(t.h2,{id:"vertigis-studio-mobile",children:"VertiGIS Studio Mobile"}),"\n",(0,r.jsxs)(t.p,{children:["The VertiGIS Studio Mobile ",(0,r.jsx)(t.a,{href:"/docs/mobile/sdk-overview",children:"Quickstart"})," already references the ",(0,r.jsx)(t.a,{href:"https://developers.arcgis.com/net/latest/api-reference/",children:"ArcGIS Runtime SDK for .NET"}),", so integrating the ArcGIS API is as easy as adding a ",(0,r.jsx)(t.code,{children:"using"})," statement to the top of your custom activity or form element."]}),"\n",(0,r.jsx)(t.p,{children:"For example,"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-c#",children:"using Esri.ArcGISRuntime.Data;\n"})}),"\n",(0,r.jsx)(t.h2,{id:"vertigis-studio-workflow-server",children:"VertiGIS Studio Workflow Server"}),"\n",(0,r.jsxs)(t.p,{children:["It is ",(0,r.jsx)(t.strong,{children:"not possible"})," to reference the ",(0,r.jsx)(t.a,{href:"https://developers.arcgis.com/net/latest/api-reference/",children:"ArcGIS Runtime SDK for .NET"})," in VertiGIS Studio Workflow Server, as the licensing does not allow for this usage."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["Consider using the ",(0,r.jsx)(t.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/geometries.htm#Work_with_Geometries%3FTocPath%3DWork%2520with%2520Geometries%7C_____0",children:"Geoprocessing activities"})," in a client workflow or the ",(0,r.jsx)(t.a,{href:"https://docs.vertigisstudio.com/workflow/latest/help/Default.htm#wf5/help/activities/run-python.htm%3FTocPath%3DActivities%7CActivity%2520Reference%7C_____174",children:(0,r.jsx)(t.code,{children:"Run Python"})})," activity on the server to have your workflow offload any operations that require server processing of ArcGIS types."]})})]})}function h(e={}){const{wrapper:t}={...(0,o.M)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},2172:(e,t,i)=>{i.d(t,{I:()=>c,M:()=>s});var r=i(1504);const o={},n=r.createContext(o);function s(e){const t=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.2577f733.js b/assets/js/main.2577f733.js new file mode 100644 index 000000000..438a7b827 --- /dev/null +++ b/assets/js/main.2577f733.js @@ -0,0 +1,2 @@ +/*! For license information please see main.2577f733.js.LICENSE.txt */ +(globalThis.webpackChunkvertigis_studio_dev_center=globalThis.webpackChunkvertigis_studio_dev_center||[]).push([[1590],{5052:(e,t,n)=>{"use strict";n.d(t,{I:()=>o});var r=n(1504);function o(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20","aria-hidden":"true"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},628:(e,t,n)=>{"use strict";n.d(t,{c:()=>p});n(1504);var r=n(8852),o=n.n(r),a=n(4504);const i={"007a3b54":[()=>n.e(7084).then(n.bind(n,820)),"@site/docs/mobile/sdk-deployment.mdx",820],"0111422e":[()=>Promise.all([n.e(8112),n.e(7896)]).then(n.bind(n,4104)),"@site/docs/mobile/api-events.mdx",4104],"011ed6ff":[()=>Promise.all([n.e(8112),n.e(8180)]).then(n.bind(n,4804)),"@site/docs/web/api-commands-operations.mdx",4804],"01a85c17":[()=>Promise.all([n.e(2176),n.e(8412)]).then(n.bind(n,3024)),"@theme/BlogTagsListPage",3024],"02514b17":[()=>Promise.all([n.e(2176),n.e(648)]).then(n.bind(n,9428)),"@site/docs/web/tutorial-change-default-behavior.mdx",9428],"0714b732":[()=>Promise.all([n.e(2176),n.e(4680)]).then(n.bind(n,1324)),"@site/docs/mobile/tutorial-implement-custom-activity.mdx",1324],"08abf9e9":[()=>Promise.all([n.e(2176),n.e(4232)]).then(n.bind(n,908)),"@site/docs/mobile/sdk-edit-layout-app-config.mdx",908],"0b0c459e":[()=>Promise.all([n.e(2176),n.e(3656)]).then(n.bind(n,6696)),"@site/docs/mobile/tutorial-customize-application-theme.mdx",6696],"0b2d2831":[()=>n.e(5052).then(n.bind(n,8032)),"@site/blog/2023-06-20-inline-sdk.mdx",8032],"0c3d2ab5":[()=>Promise.all([n.e(2176),n.e(4484)]).then(n.bind(n,3752)),"@site/docs/web/configuration-app-config-getting-started.mdx",3752],"0c65b380":[()=>Promise.all([n.e(2176),n.e(6768)]).then(n.bind(n,5243)),"@site/docs/reporting/sdk-overview.mdx",5243],"1174eec2":[()=>Promise.all([n.e(2176),n.e(9696)]).then(n.bind(n,7896)),"@site/docs/web/sdk-components-interactions.mdx",7896],"13e2146d":[()=>n.e(2152).then(n.bind(n,904)),"@site/blog/2021-03-22-new-workflow-element-api.mdx",904],"16510b1a":[()=>Promise.all([n.e(8112),n.e(6309)]).then(n.bind(n,1116)),"@site/docs/web/api-events.mdx",1116],"1740332a":[()=>Promise.all([n.e(2176),n.e(3352)]).then(n.bind(n,3644)),"@site/docs/web/sdk-services-reference.mdx",3644],17676934:[()=>n.e(376).then(n.bind(n,8572)),"@site/docs/mobile/snippets/follow-along.mdx",8572],17896441:[()=>Promise.all([n.e(2176),n.e(5432),n.e(6752)]).then(n.bind(n,9752)),"@theme/DocItem",9752],"178ca42b":[()=>Promise.all([n.e(2176),n.e(3112)]).then(n.bind(n,8212)),"@site/docs/workflow/sdk-web-create-element.mdx",8212],"1a4e3797":[()=>Promise.all([n.e(2176),n.e(9648)]).then(n.bind(n,5952)),"@theme/SearchPage",5952],"1aec8ce5":[()=>n.e(176).then(n.bind(n,6940)),"@site/docs/workflow/sdk-mobile-form-reference.mdx",6940],"1b2d2e26":[()=>Promise.all([n.e(2176),n.e(192)]).then(n.bind(n,8188)),"@site/docs/web/tutorial-command-can-execute.mdx",8188],"1c441bd3":[()=>Promise.all([n.e(2176),n.e(4732)]).then(n.bind(n,2116)),"@site/docs/mobile/sdk-commands-operations.mdx",2116],"1cf84d8e":[()=>Promise.all([n.e(2176),n.e(1797)]).then(n.bind(n,4780)),"@site/docs/mobile/tutorial-display-custom-form.mdx",4780],"1eeceed2":[()=>n.e(7664).then(n.bind(n,8156)),"@site/docs/mobile/sdk-components-internationalization.mdx",8156],"2209cee0":[()=>Promise.all([n.e(2176),n.e(20)]).then(n.bind(n,9312)),"@site/docs/web/sdk-services-injecting-services.mdx",9312],22103403:[()=>n.e(540).then(n.bind(n,7300)),"@site/docs/mobile/sdk-quickstart-reference.mdx",7300],"226e15d4":[()=>Promise.all([n.e(2176),n.e(274)]).then(n.bind(n,4148)),"@site/docs/mobile/sdk-dependency-injection.mdx",4148],23428535:[()=>Promise.all([n.e(2176),n.e(4292)]).then(n.bind(n,2204)),"@site/docs/workflow/sdk-mobile-activity-reference.mdx",2204],"237866d4":[()=>Promise.all([n.e(2176),n.e(6068)]).then(n.bind(n,6080)),"@site/docs/mobile/sdk-components-overview.mdx",6080],"27531a3f":[()=>n.e(3568).then(n.bind(n,6296)),"@site/docs/web/sdk-reference-third-party-libraries.mdx",6296],"2766450f":[()=>n.e(9760).then(n.bind(n,6668)),"@site/docs/reporting/sdk-py-overview.mdx",6668],"2b9383c3":[()=>Promise.all([n.e(2176),n.e(40)]).then(n.bind(n,7004)),"@site/docs/mobile/sdk-events-overview.mdx",7004],"2c6f9f56":[()=>Promise.all([n.e(2176),n.e(816)]).then(n.bind(n,4472)),"@site/docs/web/tutorial-implement-command-operation.mdx",4472],"3096d415":[()=>n.e(9552).then(n.bind(n,4616)),"@site/docs/mobile/sdk-events-reference.mdx",4616],"32002cac":[()=>n.e(7884).then(n.bind(n,548)),"@site/docs/snippets/workflow-url.mdx",548],"3203bc93":[()=>Promise.all([n.e(2176),n.e(7264)]).then(n.bind(n,6420)),"@site/docs/mobile/configuration-theme.mdx",6420],"33bc6b2f":[()=>Promise.all([n.e(2176),n.e(7902)]).then(n.bind(n,7140)),"@site/docs/web/sdk-components-styling.mdx",7140],"3485d728":[()=>Promise.all([n.e(2176),n.e(7056)]).then(n.bind(n,4584)),"@site/docs/mobile/tutorial-implement-service-fetch-dynamic-data.mdx",4584],"37e92fbe":[()=>Promise.all([n.e(2176),n.e(1016)]).then(n.bind(n,3576)),"@site/docs/mobile/configuration-app-config-reference.mdx",3576],"3b2e9033":[()=>Promise.all([n.e(2176),n.e(208)]).then(n.bind(n,2060)),"@site/docs/workflow/tutorial-mobile-calculate-logarithm-activity.mdx",2060],"3b54c321":[()=>n.e(9240).then(n.bind(n,7964)),"@site/docs/workflow/sdk-web-activity-block-tags.mdx",7964],"3b7274fe":[()=>Promise.all([n.e(2176),n.e(6312)]).then(n.bind(n,7656)),"@site/docs/mobile/tutorial-run-workflow-app-config.mdx",7656],"3cdd8ef6":[()=>Promise.all([n.e(2176),n.e(1388)]).then(n.bind(n,6011)),"@site/docs/web/tutorial-configure-button-click.mdx",6011],"3ed07416":[()=>n.e(8518).then(n.bind(n,1356)),"@site/docs/mobile/key-concepts.mdx",1356],"409973dd":[()=>n.e(1344).then(n.t.bind(n,1724,19)),"~blog/default/blog-tags-workflow-113.json",1724],"427670f8":[()=>Promise.all([n.e(2176),n.e(5960)]).then(n.bind(n,1836)),"@site/docs/mobile/sdk-overview.mdx",1836],"42d3648b":[()=>Promise.all([n.e(2176),n.e(3800)]).then(n.bind(n,4e3)),"@site/docs/mobile/configuration-commands-operations.mdx",4e3],"4606197d":[()=>Promise.all([n.e(2176),n.e(7384)]).then(n.bind(n,3952)),"@site/docs/web/sdk-services-overview.mdx",3952],"463ed5e2":[()=>Promise.all([n.e(2176),n.e(8928)]).then(n.bind(n,4532)),"@site/docs/web/sdk-events-overview.mdx",4532],"470932b3":[()=>n.e(7288).then(n.bind(n,3500)),"@site/docs/web/api-commands-operations-events.mdx",3500],"483d0e35":[()=>Promise.all([n.e(2176),n.e(652)]).then(n.bind(n,3916)),"@site/docs/mobile/configuration-layout-getting-started.mdx",3916],"4881170e":[()=>Promise.all([n.e(2176),n.e(2220)]).then(n.bind(n,5300)),"@site/docs/mobile/sdk-services-overview.mdx",5300],"48f3574e":[()=>n.e(1268).then(n.bind(n,540)),"@site/docs/workflow/tutorial-server-calculate-logarithm-activity.mdx",540],"49a66b85":[()=>n.e(3784).then(n.bind(n,524)),"@site/docs/mobile/snippets/relevant-workflow-samples.mdx",524],"4a205101":[()=>Promise.all([n.e(2176),n.e(1120)]).then(n.bind(n,6624)),"@site/docs/web/tutorial-import-map-model.mdx",6624],"4e713346":[()=>n.e(3258).then(n.bind(n,5380)),"@site/docs/workflow/sdk-desktop-wrapping.mdx",5380],"4eea7515":[()=>Promise.all([n.e(2176),n.e(6996)]).then(n.bind(n,96)),"@site/docs/web/sdk-internationalization.mdx",96],"4eed6c2e":[()=>n.e(4160).then(n.bind(n,6484)),"@site/docs/web/sdk-events-reference.mdx",6484],"51c0133b":[()=>Promise.all([n.e(2176),n.e(5806)]).then(n.bind(n,5488)),"@site/docs/web/configuration-theme.mdx",5488],"51fdb279":[()=>n.e(2168).then(n.bind(n,3480)),"@site/docs/workflow/snippets/prereqs-server.mdx",3480],"5213ec67":[()=>n.e(4436).then(n.bind(n,4748)),"@site/docs/web/configuration-advanced-model-binding.mdx",4748],"5334e3c6":[()=>Promise.all([n.e(2176),n.e(8982)]).then(n.bind(n,8456)),"@site/docs/mobile/tutorial-implement-component-participate-app-config.mdx",8456],"53f2b7dd":[()=>Promise.all([n.e(2176),n.e(556)]).then(n.bind(n,6388)),"@site/docs/web/sdk-components-internationalization.mdx",6388],"56da8850":[()=>n.e(9972).then(n.bind(n,7668)),"@site/docs/reporting/tutorial-arcgis-notebook.mdx",7668],"5798a141":[()=>Promise.all([n.e(8112),n.e(1916)]).then(n.bind(n,9912)),"@site/docs/web/api-components.mdx",9912],"5b5d4b34":[()=>Promise.all([n.e(2176),n.e(5572)]).then(n.bind(n,1760)),"@site/docs/web/sdk-components-injecting-services.mdx",1760],"5bc05ec2":[()=>Promise.all([n.e(2176),n.e(6632)]).then(n.bind(n,6008)),"@site/docs/web/tutorial-display-custom-form.mdx",6008],"5be18fe9":[()=>Promise.all([n.e(2176),n.e(7296)]).then(n.bind(n,5888)),"@site/docs/workflow/sdk-mobile-reference-third-party-library.mdx",5888],"5cef846a":[()=>Promise.all([n.e(2176),n.e(8964)]).then(n.bind(n,6516)),"@site/docs/workflow/sdk-web-create-activity.mdx",6516],"5dcb5f12":[()=>n.e(7048).then(n.bind(n,640)),"@site/blog/2023-06-20-inline-sdk.mdx?truncated=true",640],"5e95c892":[()=>n.e(4304).then(n.bind(n,3564)),"@theme/DocsRoot",3564],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,7768)),"@generated/docusaurus.config",7768],"5f9b0b57":[()=>Promise.all([n.e(2176),n.e(8896)]).then(n.bind(n,9284)),"@site/docs/workflow/tutorial-web-implement-third-party-qr-code-form-element.mdx",9284],"60650f56":[()=>n.e(1448).then(n.t.bind(n,2080,19)),"/home/runner/work/studio-dev-center/studio-dev-center/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",2080],"6337427f":[()=>Promise.all([n.e(2176),n.e(4736)]).then(n.bind(n,2236)),"@site/docs/workflow/sdk-web-overview.mdx",2236],"6739c067":[()=>n.e(8932).then(n.t.bind(n,5e3,19)),"~blog/default/blog-tags-workflow-113-list.json",5e3],"6793124d":[()=>n.e(9584).then(n.t.bind(n,3008,19)),"~blog/default/blog-tags-inline-639-list.json",3008],"6875c492":[()=>Promise.all([n.e(2176),n.e(5432),n.e(4600),n.e(2392)]).then(n.bind(n,2948)),"@theme/BlogTagsPostsPage",2948],"68c77936":[()=>Promise.all([n.e(2176),n.e(5088)]).then(n.bind(n,3820)),"@site/docs/mobile/sdk-component-service-interactions.mdx",3820],"69e044ba":[()=>Promise.all([n.e(2176),n.e(5024)]).then(n.bind(n,8932)),"@site/docs/web/tutorial-implement-component-with-ui.mdx",8932],"70779b5f":[()=>n.e(5720).then(n.bind(n,7996)),"@site/docs/workflow/sdk-web-reference-third-party-library.mdx",7996],71382582:[()=>Promise.all([n.e(2176),n.e(6184)]).then(n.bind(n,2012)),"@site/docs/web/sdk-commands-operations.mdx",2012],"721624e7":[()=>Promise.all([n.e(2176),n.e(9384)]).then(n.bind(n,2796)),"@site/docs/web/sdk-samples.mdx",2796],74450489:[()=>n.e(7516).then(n.t.bind(n,8e3,19)),"~blog/default/blog-tags-web-0e7.json",8e3],"74da11cb":[()=>Promise.all([n.e(2176),n.e(7080)]).then(n.bind(n,7268)),"@site/docs/web/tutorial-implement-custom-activity.mdx",7268],"75f6d0d6":[()=>Promise.all([n.e(8112),n.e(4414)]).then(n.bind(n,8280)),"@site/docs/mobile/api-components.mdx",8280],"76082c53":[()=>n.e(8644).then(n.t.bind(n,2564,19)),"~blog/default/blog-tags-mobile-ee3-list.json",2564],"764db3c1":[()=>Promise.all([n.e(2176),n.e(2908)]).then(n.bind(n,6092)),"@site/docs/web/configuration-layout-getting-started.mdx",6092],"76cc552f":[()=>Promise.all([n.e(2176),n.e(3120)]).then(n.bind(n,7892)),"@site/docs/mobile/configuration-app-config-getting-started.mdx",7892],"775b3562":[()=>Promise.all([n.e(2176),n.e(7968)]).then(n.bind(n,8124)),"@site/docs/mobile/sdk-components-styling.mdx",8124],"783f63b0":[()=>n.e(1868).then(n.bind(n,400)),"@site/docs/workflow/snippets/prereqs-desktop.mdx",400],"79387e8d":[()=>n.e(5620).then(n.bind(n,7372)),"@site/docs/workflow/sdk-web-integrating-the-arcgis-api.mdx",7372],"79865ffd":[()=>n.e(6424).then(n.t.bind(n,590,19)),"/home/runner/work/studio-dev-center/studio-dev-center/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",590],"7be350a5":[()=>Promise.all([n.e(2176),n.e(7150)]).then(n.bind(n,9728)),"@site/docs/web/tutorial-run-workflow-app-config.mdx",9728],"7d082907":[()=>Promise.all([n.e(2176),n.e(2084)]).then(n.bind(n,7832)),"@site/docs/mobile/tutorial-change-default-map-click-behavior.mdx",7832],"7faf4504":[()=>n.e(6628).then(n.bind(n,1468)),"@site/docs/mobile/snippets/quickstart-prereqs.mdx",1468],"814f3328":[()=>n.e(5512).then(n.t.bind(n,4352,19)),"~blog/default/blog-post-list-prop-default.json",4352],"82e305ad":[()=>n.e(2440).then(n.bind(n,5700)),"@site/docs/mobile/snippets/translation-callout.mdx",5700],"84244b50":[()=>n.e(2592).then(n.bind(n,68)),"@site/docs/web/snippets/framework-components.mdx",68],"85be5554":[()=>Promise.all([n.e(2176),n.e(132)]).then(n.bind(n,2956)),"@site/docs/web/configuration-commands-operations.mdx",2956],"871556c2":[()=>Promise.all([n.e(2176),n.e(3248)]).then(n.bind(n,9412)),"@site/docs/web/sdk-components-reference.mdx",9412],"884c83a9":[()=>n.e(7292).then(n.bind(n,8060)),"@site/docs/mobile/snippets/prereqs-layout-config-editing.mdx",8060],"8851c959":[()=>n.e(8904).then(n.bind(n,2124)),"@site/docs/reporting/overview.mdx",2124],"89566bd9":[()=>n.e(6776).then(n.bind(n,6800)),"@site/docs/mobile/sdk-components-viewmodel-helper-class.mdx",6800],"8a2e37be":[()=>n.e(4880).then(n.bind(n,8844)),"@site/docs/workflow/sdk-server-reference-third-party-library.mdx",8844],"8a33fbc0":[()=>n.e(8756).then(n.bind(n,6820)),"@site/docs/web/snippets/follow-along.mdx",6820],"8b077b8f":[()=>Promise.all([n.e(2176),n.e(3634)]).then(n.bind(n,5868)),"@site/docs/web/sdk-adding-icons.mdx",5868],"8c1247ef":[()=>n.e(9952).then(n.bind(n,4828)),"@site/docs/mobile/snippets/tweak-layout-config.mdx",4828],"8d446741":[()=>Promise.all([n.e(2176),n.e(9984)]).then(n.bind(n,8628)),"@site/docs/mobile/tutorial-implement-command-operation.mdx",8628],"8f6e0ec2":[()=>n.e(4432).then(n.bind(n,6776)),"@site/docs/mobile/api-commands-operations-events.mdx",6776],"8f8fe2a5":[()=>Promise.all([n.e(2176),n.e(4768)]).then(n.bind(n,9404)),"@site/docs/web/tutorial-implement-component-participate-app-config.mdx",9404],"91ee8259":[()=>n.e(3536).then(n.bind(n,4556)),"@site/docs/mobile/snippets/designer-callout.mdx",4556],"92c36074":[()=>Promise.all([n.e(2176),n.e(9488)]).then(n.bind(n,1668)),"@site/docs/workflow/tutorial-mobile-show-map-callout.mdx",1668],"935f2afb":[()=>n.e(5696).then(n.t.bind(n,5988,19)),"~docs/default/version-current-metadata-prop-751.json",5988],"9382dd71":[()=>Promise.all([n.e(2176),n.e(3128)]).then(n.bind(n,4988)),"@site/docs/web/tutorial-customize-application-theme.mdx",4988],"94e997ba":[()=>n.e(5660).then(n.bind(n,3808)),"@site/docs/workflow/sdk-web-form-reference.mdx",3808],"956a7a56":[()=>n.e(3989).then(n.bind(n,492)),"@site/docs/reporting/sdk-js-overview.mdx",492],"970ca76d":[()=>n.e(1966).then(n.bind(n,4728)),"@site/docs/reporting/key-concepts.mdx",4728],97382187:[()=>n.e(196).then(n.bind(n,6076)),"@site/blog/2023-03-01-mobile-generic-event-listener.mdx",6076],"97f8b990":[()=>Promise.all([n.e(2176),n.e(4044)]).then(n.bind(n,4760)),"@site/docs/workflow/sdk-desktop-create-activity.mdx",4760],"97f987ea":[()=>n.e(432).then(n.bind(n,7632)),"@site/blog/2021-03-22-new-workflow-element-api.mdx?truncated=true",7632],"9d545ab3":[()=>n.e(16).then(n.bind(n,6908)),"@site/docs/mobile/snippets/cleanup-handles.mdx",6908],"9e4087bc":[()=>n.e(7028).then(n.bind(n,6140)),"@theme/BlogArchivePage",6140],"9e97d1a6":[()=>Promise.all([n.e(2176),n.e(8720)]).then(n.bind(n,9068)),"@site/docs/workflow/tutorial-web-implement-star-rating-form-element.mdx",9068],a14b64be:[()=>n.e(380).then(n.t.bind(n,6792,19)),"/home/runner/work/studio-dev-center/studio-dev-center/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",6792],a159c336:[()=>n.e(9880).then(n.bind(n,2288)),"@site/docs/workflow/sdk-web-activity-reference.mdx",2288],a2686faa:[()=>Promise.all([n.e(2176),n.e(8696)]).then(n.bind(n,7264)),"@site/docs/web/sdk-serializable-properties.mdx",7264],a45b06a8:[()=>Promise.all([n.e(2176),n.e(1964)]).then(n.bind(n,7780)),"@site/docs/web/tutorial-service-dynamic-data.mdx",7780],a5412a2b:[()=>Promise.all([n.e(2176),n.e(9410)]).then(n.bind(n,9880)),"@site/docs/mobile/tutorial-change-default-behavior.mdx",9880],a67bc9da:[()=>Promise.all([n.e(2176),n.e(6884)]).then(n.bind(n,7924)),"@site/docs/web/overview.mdx",7924],a6aa9e1f:[()=>Promise.all([n.e(2176),n.e(5432),n.e(4600),n.e(4976)]).then(n.bind(n,6960)),"@theme/BlogListPage",6960],a7023ddc:[()=>n.e(9112).then(n.t.bind(n,1568,19)),"~blog/default/blog-tags-tags-4c2.json",1568],a7bd4aaa:[()=>n.e(6500).then(n.bind(n,2e3)),"@theme/DocVersionRoot",2e3],a94703ab:[()=>Promise.all([n.e(2176),n.e(4666)]).then(n.bind(n,996)),"@theme/DocRoot",996],a9c45aa9:[()=>n.e(2468).then(n.bind(n,2376)),"@site/docs/web/sdk-components-ui-context.mdx",2376],a9f767f8:[()=>n.e(4251).then(n.bind(n,5404)),"@site/docs/workflow/tutorial-web-implement-third-party-star-rating-form-element.mdx",5404],aba4ef12:[()=>Promise.all([n.e(2176),n.e(7344)]).then(n.bind(n,4844)),"@site/docs/workflow/sdk-mobile-overview.mdx",4844],abdc00a3:[()=>Promise.all([n.e(2176),n.e(8864)]).then(n.bind(n,6760)),"@site/docs/web/sdk-overview.mdx",6760],acecf23e:[()=>n.e(6360).then(n.t.bind(n,1112,19)),"~blog/default/blogMetadata-default.json",1112],af03d7a3:[()=>Promise.all([n.e(2176),n.e(9752)]).then(n.bind(n,6020)),"@site/docs/mobile/sdk-components-reference.mdx",6020],afbf75bf:[()=>n.e(7752).then(n.bind(n,4260)),"@site/docs/workflow/sdk-server-create-activity.mdx",4260],b059735e:[()=>n.e(200).then(n.t.bind(n,9360,19)),"~blog/default/blog-tags-web-0e7-list.json",9360],b1f0ca92:[()=>Promise.all([n.e(2176),n.e(7620)]).then(n.bind(n,8404)),"@site/docs/mobile/sdk-services-create.mdx",8404],b22f7342:[()=>Promise.all([n.e(2176),n.e(2e3)]).then(n.bind(n,8976)),"@site/docs/workflow/sdk-desktop-overview.mdx",8976],b2b675dd:[()=>n.e(6292).then(n.t.bind(n,6180,19)),"~blog/default/blog-c06.json",6180],b2f554cd:[()=>n.e(6880).then(n.t.bind(n,8256,19)),"~blog/default/blog-archive-80c.json",8256],b35571e5:[()=>n.e(1808).then(n.bind(n,1716)),"@site/docs/mobile/configuration-advanced-model-binding.mdx",1716],b3939278:[()=>Promise.all([n.e(2176),n.e(712)]).then(n.bind(n,8344)),"@site/docs/workflow/tutorial-web-qr-code-activity.mdx",8344],b4683136:[()=>n.e(1064).then(n.bind(n,9552)),"@site/docs/workflow/snippets/sdk-net-limitations-warning.mdx",9552],b4c66af2:[()=>Promise.all([n.e(2176),n.e(8464)]).then(n.bind(n,6204)),"@site/docs/mobile/sdk-services-reference.mdx",6204],b50e98c8:[()=>Promise.all([n.e(2176),n.e(4556)]).then(n.bind(n,8384)),"@site/docs/web/sdk-components-overview.mdx",8384],b5e2b715:[()=>n.e(3357).then(n.bind(n,3648)),"@site/docs/web/snippets/designer-callout.mdx",3648],b760a7b1:[()=>Promise.all([n.e(2176),n.e(2316)]).then(n.bind(n,4304)),"@site/docs/web/sdk-services-create.mdx",4304],b7bc9348:[()=>Promise.all([n.e(2176),n.e(4148)]).then(n.bind(n,3372)),"@site/docs/web/tutorial-implement-custom-form-elements.mdx",3372],bb3a9948:[()=>n.e(2628).then(n.bind(n,9996)),"@site/docs/web/key-concepts.mdx",9996],bec8f033:[()=>Promise.all([n.e(2176),n.e(3920)]).then(n.bind(n,5964)),"@site/docs/mobile/tutorial-implement-custom-form-elements.mdx",5964],c02cdf4a:[()=>Promise.all([n.e(2176),n.e(9124)]).then(n.bind(n,9200)),"@site/docs/workflow/tutorial-web-calculate-logarithm-activity.mdx",9200],c3a5a46a:[()=>n.e(7396).then(n.bind(n,4656)),"@site/docs/web/sdk-components-hooks.mdx",4656],c4f5d8e4:[()=>Promise.all([n.e(2176),n.e(2632)]).then(n.bind(n,2736)),"@site/src/pages/index.js",2736],c68e373c:[()=>Promise.all([n.e(2176),n.e(8564)]).then(n.bind(n,9392)),"@site/docs/mobile/tutorial-implement-component-with-ui.mdx",9392],c6c7dfb8:[()=>Promise.all([n.e(2176),n.e(5456)]).then(n.bind(n,2572)),"@site/docs/mobile/tutorial-configure-button-click.mdx",2572],c7915d49:[()=>n.e(7016).then(n.bind(n,5412)),"@site/docs/web/tutorial-events-subscribe.mdx",5412],c878bb0f:[()=>Promise.all([n.e(2176),n.e(7256)]).then(n.bind(n,6084)),"@site/docs/web/sdk-components-create.mdx",6084],ccc49370:[()=>Promise.all([n.e(2176),n.e(5432),n.e(4600),n.e(6344)]).then(n.bind(n,4068)),"@theme/BlogPostPage",4068],ce430d7a:[()=>Promise.all([n.e(2176),n.e(2712)]).then(n.bind(n,7688)),"@site/docs/mobile/sdk-samples.mdx",7688],ce564099:[()=>Promise.all([n.e(2176),n.e(2904)]).then(n.bind(n,2968)),"@site/docs/mobile/sdk-components-create.mdx",2968],ce88a68f:[()=>n.e(2664).then(n.bind(n,472)),"@site/docs/workflow/snippets/designer-callout.mdx",472],cfa5b9a9:[()=>n.e(2464).then(n.bind(n,76)),"@site/docs/snippets/autofac-mobile.mdx",76],d0b73500:[()=>n.e(8216).then(n.t.bind(n,4684,19)),"/home/runner/work/studio-dev-center/studio-dev-center/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",4684],d3ca81a1:[()=>Promise.all([n.e(8112),n.e(7448)]).then(n.bind(n,8268)),"@site/docs/mobile/api-argument-definitions.mdx",8268],d4027e72:[()=>Promise.all([n.e(2176),n.e(8e3)]).then(n.bind(n,5956)),"@site/docs/web/app-initialization-events.mdx",5956],d4973b75:[()=>n.e(3988).then(n.bind(n,4676)),"@site/docs/workflow/snippets/prereqs-web.mdx",4676],d531abed:[()=>Promise.all([n.e(2176),n.e(2512)]).then(n.bind(n,4164)),"@site/docs/web/tutorial-change-default-map-click-behavior.mdx",4164],d72cb1d6:[()=>Promise.all([n.e(8112),n.e(9566)]).then(n.bind(n,4356)),"@site/docs/web/api-argument-definitions.mdx",4356],d7fc8fda:[()=>Promise.all([n.e(2176),n.e(3963)]).then(n.bind(n,8699)),"@site/docs/web/configuration-app-config-reference.mdx",8699],da9e7ae6:[()=>n.e(2368).then(n.bind(n,876)),"@site/blog/2023-03-01-mobile-generic-event-listener.mdx?truncated=true",876],dacf7858:[()=>Promise.all([n.e(2176),n.e(776)]).then(n.bind(n,6780)),"@site/docs/workflow/tutorial-mobile-activity-indicator-form-element.mdx",6780],ddeee7d4:[()=>n.e(284).then(n.bind(n,2388)),"@site/docs/workflow/tutorial-web-add-layer-to-map.mdx",2388],df1f6bcf:[()=>n.e(7124).then(n.bind(n,2680)),"@site/docs/workflow/tutorial-web-implement-third-party-captcha-form-element.mdx",2680],e0d51d97:[()=>Promise.all([n.e(2176),n.e(2683)]).then(n.bind(n,9088)),"@site/docs/workflow/sdk-net-overview.mdx",9088],e247f73f:[()=>n.e(5284).then(n.bind(n,20)),"@site/docs/workflow/sdk-net-integrating-the-arcgis-pro-api.mdx",20],e24fe72c:[()=>Promise.all([n.e(8112),n.e(1176)]).then(n.bind(n,8960)),"@site/docs/web/api-objects.mdx",8960],e2af53aa:[()=>Promise.all([n.e(2176),n.e(8908)]).then(n.bind(n,6600)),"@site/docs/web/tutorial-internationalization.mdx",6600],e33b24a1:[()=>Promise.all([n.e(2176),n.e(4584)]).then(n.bind(n,3692)),"@site/docs/workflow/sdk-mobile-create-activity.mdx",3692],e46baac8:[()=>n.e(3804).then(n.bind(n,1684)),"@site/docs/mobile/tutorial-add-medium-layout.mdx",1684],e5698f5b:[()=>n.e(9560).then(n.bind(n,7692)),"@site/docs/snippets/app-item.mdx",7692],e659d45e:[()=>n.e(1596).then(n.bind(n,1300)),"@site/docs/web/snippets/prereqs-custom-code.mdx",1300],e6605000:[()=>Promise.all([n.e(2176),n.e(4860)]).then(n.bind(n,5900)),"@site/docs/workflow/key-concepts.mdx",5900],eb4e678c:[()=>n.e(5940).then(n.bind(n,1404)),"@site/docs/workflow/snippets/prereqs-mobile.mdx",1404],ec17ee32:[()=>Promise.all([n.e(2176),n.e(6590)]).then(n.bind(n,8964)),"@site/docs/workflow/sdk-server-overview.mdx",8964],ec2a1e0d:[()=>n.e(5812).then(n.bind(n,8132)),"@site/docs/mobile/sdk-memory-leaks.mdx",8132],ed6d9243:[()=>Promise.all([n.e(2176),n.e(8960)]).then(n.bind(n,8244)),"@site/docs/workflow/overview.mdx",8244],f1c82b24:[()=>n.e(1820).then(n.bind(n,8528)),"@site/docs/web/configuration-layout-reference.mdx",8528],f7abda3c:[()=>Promise.all([n.e(8112),n.e(2984)]).then(n.bind(n,7032)),"@site/docs/mobile/api-commands-operations.mdx",7032],f9b89150:[()=>n.e(5464).then(n.bind(n,532)),"@site/docs/web/sdk-deployment.mdx",532],f9d5545e:[()=>Promise.all([n.e(2176),n.e(7600)]).then(n.bind(n,2768)),"@site/docs/mobile/overview.mdx",2768],fa5152a0:[()=>n.e(7668).then(n.bind(n,4732)),"@site/docs/web/snippets/translation-callout.mdx",4732],fa8f80ec:[()=>n.e(9876).then(n.t.bind(n,4480,19)),"~blog/default/blog-tags-mobile-ee3.json",4480],fa90ae09:[()=>n.e(1204).then(n.bind(n,7776)),"@site/docs/reporting/snippets/designer-callout.mdx",7776],fb55ac16:[()=>n.e(6024).then(n.t.bind(n,6496,19)),"~blog/default/blog-tags-inline-639.json",6496],fc6de4ba:[()=>n.e(6656).then(n.bind(n,3412)),"@site/docs/web/snippets/prereqs-layout-config-editing.mdx",3412],fd2a990b:[()=>Promise.all([n.e(2176),n.e(24)]).then(n.bind(n,3880)),"@site/docs/mobile/sdk-internationalization.mdx",3880],fdede3e2:[()=>n.e(8744).then(n.bind(n,3668)),"@site/docs/workflow/sdk-net-register-activities.mdx",3668],ff09f030:[()=>n.e(2976).then(n.bind(n,60)),"@site/docs/workflow/tutorial-web-implement-third-party-signature-block-form-element.mdx",60],ff37a7c5:[()=>n.e(7308).then(n.bind(n,1420)),"@site/docs/workflow/sdk-net-integrating-the-arcgis-api.mdx",1420],ffc554b4:[()=>Promise.all([n.e(2176),n.e(6900)]).then(n.bind(n,4972)),"@site/docs/mobile/configuration-layout-reference.mdx",4972]};var s=n(7624);function l({error:e,retry:t,pastDelay:n}){return e?(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(e)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:t,children:"Retry"})})]}):n?(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(8120),u=n(5548);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(4552).then(n.bind(n,4552)),modules:["@theme/NotFound"],webpack:()=>[4552],render(e,t){const n=e.default;return(0,s.jsx)(u.Y,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,c.c)(r);return Object.entries(m).forEach((([e,t])=>{const n=i[t];n&&(d[e]=n[0],p.push(n[1]),f.push(n[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((([t,n])=>{const r=n.default;if(!r)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 r&&"function"!=typeof r||Object.keys(n).filter((e=>"default"!==e)).forEach((e=>{r[e]=n[e]}));let a=o;const i=t.split(".");i.slice(0,-1).forEach((e=>{a=a[e]})),a[i[i.length-1]]=r}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,s.jsx)(u.Y,{value:i,children:(0,s.jsx)(a,{...o,...n})})}})}const p=[{path:"/blog",component:d("/blog","fee"),exact:!0},{path:"/blog/2021/03/22/new-workflow-element-api",component:d("/blog/2021/03/22/new-workflow-element-api","243"),exact:!0},{path:"/blog/2023/03/01/mobile-generic-event-listener",component:d("/blog/2023/03/01/mobile-generic-event-listener","03f"),exact:!0},{path:"/blog/2023/06/20/inline-sdk",component:d("/blog/2023/06/20/inline-sdk","7d1"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","8e3"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","110"),exact:!0},{path:"/blog/tags/inline",component:d("/blog/tags/inline","e3f"),exact:!0},{path:"/blog/tags/mobile",component:d("/blog/tags/mobile","955"),exact:!0},{path:"/blog/tags/web",component:d("/blog/tags/web","b3f"),exact:!0},{path:"/blog/tags/workflow",component:d("/blog/tags/workflow","07c"),exact:!0},{path:"/search",component:d("/search","56a"),exact:!0},{path:"/docs",component:d("/docs","006"),routes:[{path:"/docs",component:d("/docs","008"),routes:[{path:"/docs",component:d("/docs","de8"),routes:[{path:"/docs/mobile/api-argument-definitions",component:d("/docs/mobile/api-argument-definitions","98a"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/api-commands-operations",component:d("/docs/mobile/api-commands-operations","b17"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/api-commands-operations-events",component:d("/docs/mobile/api-commands-operations-events","f50"),exact:!0},{path:"/docs/mobile/api-components",component:d("/docs/mobile/api-components","d67"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/api-events",component:d("/docs/mobile/api-events","809"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/configuration-advanced-model-binding",component:d("/docs/mobile/configuration-advanced-model-binding","2d1"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/configuration-app-config-getting-started",component:d("/docs/mobile/configuration-app-config-getting-started","cee"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/configuration-app-config-reference",component:d("/docs/mobile/configuration-app-config-reference","f14"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/configuration-commands-operations",component:d("/docs/mobile/configuration-commands-operations","c9a"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/configuration-layout-getting-started",component:d("/docs/mobile/configuration-layout-getting-started","07a"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/configuration-layout-reference",component:d("/docs/mobile/configuration-layout-reference","6f4"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/configuration-theme",component:d("/docs/mobile/configuration-theme","b0d"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/key-concepts",component:d("/docs/mobile/key-concepts","db4"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/overview",component:d("/docs/mobile/overview","a4a"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-commands-operations",component:d("/docs/mobile/sdk-commands-operations","ce7"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-component-service-interactions",component:d("/docs/mobile/sdk-component-service-interactions","e76"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-components-create",component:d("/docs/mobile/sdk-components-create","cb2"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-components-internationalization",component:d("/docs/mobile/sdk-components-internationalization","5df"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-components-overview",component:d("/docs/mobile/sdk-components-overview","8b2"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-components-reference",component:d("/docs/mobile/sdk-components-reference","2fa"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-components-styling",component:d("/docs/mobile/sdk-components-styling","b3d"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-components-viewmodel-helper-class",component:d("/docs/mobile/sdk-components-viewmodel-helper-class","0dc"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-dependency-injection",component:d("/docs/mobile/sdk-dependency-injection","3ef"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-deployment",component:d("/docs/mobile/sdk-deployment","cf5"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-edit-layout-app-config",component:d("/docs/mobile/sdk-edit-layout-app-config","715"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-events-overview",component:d("/docs/mobile/sdk-events-overview","d92"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-events-reference",component:d("/docs/mobile/sdk-events-reference","572"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-internationalization",component:d("/docs/mobile/sdk-internationalization","675"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-memory-leaks",component:d("/docs/mobile/sdk-memory-leaks","3ee"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-overview",component:d("/docs/mobile/sdk-overview","748"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-quickstart-reference",component:d("/docs/mobile/sdk-quickstart-reference","d21"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-samples",component:d("/docs/mobile/sdk-samples","7da"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-services-create",component:d("/docs/mobile/sdk-services-create","ad0"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-services-overview",component:d("/docs/mobile/sdk-services-overview","29a"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/sdk-services-reference",component:d("/docs/mobile/sdk-services-reference","24f"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/snippets/cleanup-handles",component:d("/docs/mobile/snippets/cleanup-handles","dcd"),exact:!0},{path:"/docs/mobile/snippets/designer-callout",component:d("/docs/mobile/snippets/designer-callout","86b"),exact:!0},{path:"/docs/mobile/snippets/follow-along",component:d("/docs/mobile/snippets/follow-along","655"),exact:!0},{path:"/docs/mobile/snippets/prereqs-layout-config-editing",component:d("/docs/mobile/snippets/prereqs-layout-config-editing","ba0"),exact:!0},{path:"/docs/mobile/snippets/quickstart-prereqs",component:d("/docs/mobile/snippets/quickstart-prereqs","d58"),exact:!0},{path:"/docs/mobile/snippets/relevant-workflow-samples",component:d("/docs/mobile/snippets/relevant-workflow-samples","f2a"),exact:!0},{path:"/docs/mobile/snippets/translation-callout",component:d("/docs/mobile/snippets/translation-callout","43c"),exact:!0},{path:"/docs/mobile/snippets/tweak-layout-config",component:d("/docs/mobile/snippets/tweak-layout-config","fbc"),exact:!0},{path:"/docs/mobile/tutorial-add-medium-layout",component:d("/docs/mobile/tutorial-add-medium-layout","be8"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/tutorial-change-default-behavior",component:d("/docs/mobile/tutorial-change-default-behavior","f69"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/tutorial-change-default-map-click-behavior",component:d("/docs/mobile/tutorial-change-default-map-click-behavior","e07"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/tutorial-configure-button-click",component:d("/docs/mobile/tutorial-configure-button-click","f7a"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/tutorial-customize-application-theme",component:d("/docs/mobile/tutorial-customize-application-theme","fff"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/tutorial-display-custom-form",component:d("/docs/mobile/tutorial-display-custom-form","641"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/tutorial-implement-command-operation",component:d("/docs/mobile/tutorial-implement-command-operation","9fa"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/tutorial-implement-component-participate-app-config",component:d("/docs/mobile/tutorial-implement-component-participate-app-config","765"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/tutorial-implement-component-with-ui",component:d("/docs/mobile/tutorial-implement-component-with-ui","fa8"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/tutorial-implement-custom-activity",component:d("/docs/mobile/tutorial-implement-custom-activity","3e8"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/tutorial-implement-custom-form-elements",component:d("/docs/mobile/tutorial-implement-custom-form-elements","d43"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/tutorial-implement-service-fetch-dynamic-data",component:d("/docs/mobile/tutorial-implement-service-fetch-dynamic-data","08a"),exact:!0,sidebar:"mobile"},{path:"/docs/mobile/tutorial-run-workflow-app-config",component:d("/docs/mobile/tutorial-run-workflow-app-config","e45"),exact:!0,sidebar:"mobile"},{path:"/docs/reporting/key-concepts",component:d("/docs/reporting/key-concepts","d7a"),exact:!0,sidebar:"reporting"},{path:"/docs/reporting/overview",component:d("/docs/reporting/overview","792"),exact:!0,sidebar:"reporting"},{path:"/docs/reporting/sdk-js-overview",component:d("/docs/reporting/sdk-js-overview","b2d"),exact:!0,sidebar:"reporting"},{path:"/docs/reporting/sdk-overview",component:d("/docs/reporting/sdk-overview","485"),exact:!0,sidebar:"reporting"},{path:"/docs/reporting/sdk-py-overview",component:d("/docs/reporting/sdk-py-overview","b18"),exact:!0,sidebar:"reporting"},{path:"/docs/reporting/snippets/designer-callout",component:d("/docs/reporting/snippets/designer-callout","e52"),exact:!0},{path:"/docs/reporting/tutorial-arcgis-notebook",component:d("/docs/reporting/tutorial-arcgis-notebook","9fc"),exact:!0,sidebar:"reporting"},{path:"/docs/snippets/app-item",component:d("/docs/snippets/app-item","c68"),exact:!0},{path:"/docs/snippets/autofac-mobile",component:d("/docs/snippets/autofac-mobile","2fb"),exact:!0},{path:"/docs/snippets/workflow-url",component:d("/docs/snippets/workflow-url","9a0"),exact:!0},{path:"/docs/web/api-argument-definitions",component:d("/docs/web/api-argument-definitions","b32"),exact:!0,sidebar:"web"},{path:"/docs/web/api-commands-operations",component:d("/docs/web/api-commands-operations","8e0"),exact:!0,sidebar:"web"},{path:"/docs/web/api-commands-operations-events",component:d("/docs/web/api-commands-operations-events","a26"),exact:!0},{path:"/docs/web/api-components",component:d("/docs/web/api-components","a7b"),exact:!0,sidebar:"web"},{path:"/docs/web/api-events",component:d("/docs/web/api-events","81c"),exact:!0,sidebar:"web"},{path:"/docs/web/api-objects",component:d("/docs/web/api-objects","176"),exact:!0,sidebar:"web"},{path:"/docs/web/app-initialization-events",component:d("/docs/web/app-initialization-events","c4c"),exact:!0,sidebar:"web"},{path:"/docs/web/configuration-advanced-model-binding",component:d("/docs/web/configuration-advanced-model-binding","cda"),exact:!0,sidebar:"web"},{path:"/docs/web/configuration-app-config-getting-started",component:d("/docs/web/configuration-app-config-getting-started","4db"),exact:!0,sidebar:"web"},{path:"/docs/web/configuration-app-config-reference",component:d("/docs/web/configuration-app-config-reference","f48"),exact:!0,sidebar:"web"},{path:"/docs/web/configuration-commands-operations",component:d("/docs/web/configuration-commands-operations","7db"),exact:!0,sidebar:"web"},{path:"/docs/web/configuration-layout-getting-started",component:d("/docs/web/configuration-layout-getting-started","d02"),exact:!0,sidebar:"web"},{path:"/docs/web/configuration-layout-reference",component:d("/docs/web/configuration-layout-reference","ba8"),exact:!0,sidebar:"web"},{path:"/docs/web/configuration-theme",component:d("/docs/web/configuration-theme","279"),exact:!0,sidebar:"web"},{path:"/docs/web/key-concepts",component:d("/docs/web/key-concepts","27b"),exact:!0,sidebar:"web"},{path:"/docs/web/overview",component:d("/docs/web/overview","b9a"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-adding-icons",component:d("/docs/web/sdk-adding-icons","c0c"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-commands-operations",component:d("/docs/web/sdk-commands-operations","50e"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-components-create",component:d("/docs/web/sdk-components-create","774"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-components-hooks",component:d("/docs/web/sdk-components-hooks","a2a"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-components-injecting-services",component:d("/docs/web/sdk-components-injecting-services","d3d"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-components-interactions",component:d("/docs/web/sdk-components-interactions","aec"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-components-internationalization",component:d("/docs/web/sdk-components-internationalization","783"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-components-overview",component:d("/docs/web/sdk-components-overview","86a"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-components-reference",component:d("/docs/web/sdk-components-reference","497"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-components-styling",component:d("/docs/web/sdk-components-styling","abe"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-components-ui-context",component:d("/docs/web/sdk-components-ui-context","80c"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-deployment",component:d("/docs/web/sdk-deployment","daa"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-events-overview",component:d("/docs/web/sdk-events-overview","484"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-events-reference",component:d("/docs/web/sdk-events-reference","427"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-internationalization",component:d("/docs/web/sdk-internationalization","f97"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-overview",component:d("/docs/web/sdk-overview","ed3"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-reference-third-party-libraries",component:d("/docs/web/sdk-reference-third-party-libraries","b44"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-samples",component:d("/docs/web/sdk-samples","03c"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-serializable-properties",component:d("/docs/web/sdk-serializable-properties","b84"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-services-create",component:d("/docs/web/sdk-services-create","fbf"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-services-injecting-services",component:d("/docs/web/sdk-services-injecting-services","45f"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-services-overview",component:d("/docs/web/sdk-services-overview","307"),exact:!0,sidebar:"web"},{path:"/docs/web/sdk-services-reference",component:d("/docs/web/sdk-services-reference","566"),exact:!0,sidebar:"web"},{path:"/docs/web/snippets/designer-callout",component:d("/docs/web/snippets/designer-callout","c23"),exact:!0},{path:"/docs/web/snippets/follow-along",component:d("/docs/web/snippets/follow-along","8e5"),exact:!0},{path:"/docs/web/snippets/framework-components",component:d("/docs/web/snippets/framework-components","35a"),exact:!0},{path:"/docs/web/snippets/prereqs-custom-code",component:d("/docs/web/snippets/prereqs-custom-code","2e2"),exact:!0},{path:"/docs/web/snippets/prereqs-layout-config-editing",component:d("/docs/web/snippets/prereqs-layout-config-editing","084"),exact:!0},{path:"/docs/web/snippets/translation-callout",component:d("/docs/web/snippets/translation-callout","340"),exact:!0},{path:"/docs/web/tutorial-change-default-behavior",component:d("/docs/web/tutorial-change-default-behavior","246"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-change-default-map-click-behavior",component:d("/docs/web/tutorial-change-default-map-click-behavior","075"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-command-can-execute",component:d("/docs/web/tutorial-command-can-execute","343"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-configure-button-click",component:d("/docs/web/tutorial-configure-button-click","c04"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-customize-application-theme",component:d("/docs/web/tutorial-customize-application-theme","4dd"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-display-custom-form",component:d("/docs/web/tutorial-display-custom-form","fd1"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-events-subscribe",component:d("/docs/web/tutorial-events-subscribe","16b"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-implement-command-operation",component:d("/docs/web/tutorial-implement-command-operation","d8c"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-implement-component-participate-app-config",component:d("/docs/web/tutorial-implement-component-participate-app-config","0fe"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-implement-component-with-ui",component:d("/docs/web/tutorial-implement-component-with-ui","857"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-implement-custom-activity",component:d("/docs/web/tutorial-implement-custom-activity","6d1"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-implement-custom-form-elements",component:d("/docs/web/tutorial-implement-custom-form-elements","69a"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-import-map-model",component:d("/docs/web/tutorial-import-map-model","bf5"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-internationalization",component:d("/docs/web/tutorial-internationalization","513"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-run-workflow-app-config",component:d("/docs/web/tutorial-run-workflow-app-config","726"),exact:!0,sidebar:"web"},{path:"/docs/web/tutorial-service-dynamic-data",component:d("/docs/web/tutorial-service-dynamic-data","a6e"),exact:!0,sidebar:"web"},{path:"/docs/workflow/key-concepts",component:d("/docs/workflow/key-concepts","b1f"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/overview",component:d("/docs/workflow/overview","355"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-desktop-create-activity",component:d("/docs/workflow/sdk-desktop-create-activity","8de"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-desktop-overview",component:d("/docs/workflow/sdk-desktop-overview","846"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-desktop-wrapping",component:d("/docs/workflow/sdk-desktop-wrapping","0b7"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-mobile-activity-reference",component:d("/docs/workflow/sdk-mobile-activity-reference","ea0"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-mobile-create-activity",component:d("/docs/workflow/sdk-mobile-create-activity","e71"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-mobile-form-reference",component:d("/docs/workflow/sdk-mobile-form-reference","91f"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-mobile-overview",component:d("/docs/workflow/sdk-mobile-overview","b75"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-mobile-reference-third-party-library",component:d("/docs/workflow/sdk-mobile-reference-third-party-library","644"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-net-integrating-the-arcgis-api",component:d("/docs/workflow/sdk-net-integrating-the-arcgis-api","5f5"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-net-integrating-the-arcgis-pro-api",component:d("/docs/workflow/sdk-net-integrating-the-arcgis-pro-api","81b"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-net-overview",component:d("/docs/workflow/sdk-net-overview","a46"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-net-register-activities",component:d("/docs/workflow/sdk-net-register-activities","767"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-server-create-activity",component:d("/docs/workflow/sdk-server-create-activity","7a8"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-server-overview",component:d("/docs/workflow/sdk-server-overview","ed9"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-server-reference-third-party-library",component:d("/docs/workflow/sdk-server-reference-third-party-library","c77"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-web-activity-block-tags",component:d("/docs/workflow/sdk-web-activity-block-tags","83e"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-web-activity-reference",component:d("/docs/workflow/sdk-web-activity-reference","e7e"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-web-create-activity",component:d("/docs/workflow/sdk-web-create-activity","af8"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-web-create-element",component:d("/docs/workflow/sdk-web-create-element","275"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-web-form-reference",component:d("/docs/workflow/sdk-web-form-reference","1e9"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-web-integrating-the-arcgis-api",component:d("/docs/workflow/sdk-web-integrating-the-arcgis-api","af1"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-web-overview",component:d("/docs/workflow/sdk-web-overview","d11"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/sdk-web-reference-third-party-library",component:d("/docs/workflow/sdk-web-reference-third-party-library","cd5"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/snippets/designer-callout",component:d("/docs/workflow/snippets/designer-callout","e4c"),exact:!0},{path:"/docs/workflow/snippets/prereqs-desktop",component:d("/docs/workflow/snippets/prereqs-desktop","e3f"),exact:!0},{path:"/docs/workflow/snippets/prereqs-mobile",component:d("/docs/workflow/snippets/prereqs-mobile","428"),exact:!0},{path:"/docs/workflow/snippets/prereqs-server",component:d("/docs/workflow/snippets/prereqs-server","e43"),exact:!0},{path:"/docs/workflow/snippets/prereqs-web",component:d("/docs/workflow/snippets/prereqs-web","34b"),exact:!0},{path:"/docs/workflow/snippets/sdk-net-limitations-warning",component:d("/docs/workflow/snippets/sdk-net-limitations-warning","8a1"),exact:!0},{path:"/docs/workflow/tutorial-mobile-activity-indicator-form-element",component:d("/docs/workflow/tutorial-mobile-activity-indicator-form-element","a0b"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/tutorial-mobile-calculate-logarithm-activity",component:d("/docs/workflow/tutorial-mobile-calculate-logarithm-activity","b10"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/tutorial-mobile-show-map-callout",component:d("/docs/workflow/tutorial-mobile-show-map-callout","716"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/tutorial-server-calculate-logarithm-activity",component:d("/docs/workflow/tutorial-server-calculate-logarithm-activity","888"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/tutorial-web-add-layer-to-map",component:d("/docs/workflow/tutorial-web-add-layer-to-map","c4b"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/tutorial-web-calculate-logarithm-activity",component:d("/docs/workflow/tutorial-web-calculate-logarithm-activity","43f"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/tutorial-web-implement-star-rating-form-element",component:d("/docs/workflow/tutorial-web-implement-star-rating-form-element","926"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/tutorial-web-implement-third-party-captcha-form-element",component:d("/docs/workflow/tutorial-web-implement-third-party-captcha-form-element","730"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/tutorial-web-implement-third-party-qr-code-form-element",component:d("/docs/workflow/tutorial-web-implement-third-party-qr-code-form-element","70b"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/tutorial-web-implement-third-party-signature-block-form-element",component:d("/docs/workflow/tutorial-web-implement-third-party-signature-block-form-element","520"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/tutorial-web-implement-third-party-star-rating-form-element",component:d("/docs/workflow/tutorial-web-implement-third-party-star-rating-form-element","4c5"),exact:!0,sidebar:"workflow"},{path:"/docs/workflow/tutorial-web-qr-code-activity",component:d("/docs/workflow/tutorial-web-qr-code-activity","e63"),exact:!0,sidebar:"workflow"}]}]}]},{path:"/",component:d("/","650"),exact:!0},{path:"*",component:d("*")}]},240:(e,t,n)=>{"use strict";n.d(t,{e:()=>a,g:()=>i});var r=n(1504),o=n(7624);const a=r.createContext(!1);function i({children:e}){const[t,n]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{n(!0)}),[]),(0,o.jsx)(a.Provider,{value:t,children:e})}},8808:(e,t,n)=>{"use strict";var r=n(1504),o=n(8352),a=n(440),i=n(2160),s=n(8684);const l=[n(7483),n(1462),n(5396),n(1976),n(1496)];var c=n(628),u=n(5592),d=n(5464),p=n(7624);function f({children:e}){return(0,p.jsx)(p.Fragment,{children:e})}var m=n(6952),b=n(8264),h=n(964),g=n(1824),y=n(3368),v=n(1616),w=n(204),k=n(4456),x=n(5684),S=n(8712);function _(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,b.c)(),r=(0,v.D)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(m.c,{children:[Object.entries(n).map((([e,{htmlLang:t}])=>(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:e,fullyQualified:!0}),hrefLang:t},e))),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function E({permalink:e}){const{siteConfig:{url:t}}=(0,b.c)(),n=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,b.c)(),{pathname:r}=(0,u.IT)();return e+(0,x.applyTrailingSlash)((0,h.c)(r),{trailingSlash:n,baseUrl:t})}(),r=e?`${t}${e}`:n;return(0,p.jsxs)(m.c,{children:[(0,p.jsx)("meta",{property:"og:url",content:r}),(0,p.jsx)("link",{rel:"canonical",href:r})]})}function C(){const{i18n:{currentLocale:e}}=(0,b.c)(),{metadata:t,image:n}=(0,g.y)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(m.c,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.m})]}),n&&(0,p.jsx)(y.U7,{image:n}),(0,p.jsx)(E,{}),(0,p.jsx)(_,{}),(0,p.jsx)(S.c,{tag:k.e6,locale:e}),(0,p.jsx)(m.c,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const T=new Map;function P(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.C)(c.c,e.pathname).some((({route:e})=>!0===e.exact)))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var j=n(240),A=n(136),N=n(5288);function L(e,...t){const n=l.map((n=>{const r=n.default?.[e]??n[e];return r?.(...t)}));return()=>n.forEach((e=>e?.()))}const O=function({children:e,location:t,previousLocation:n}){return(0,N.c)((()=>{n!==t&&(!function({location:e,previousLocation:t}){if(!t)return;const n=e.pathname===t.pathname,r=e.hash===t.hash,o=e.search===t.search;if(n&&r&&!o)return;const{hash:a}=e;if(a){const e=decodeURIComponent(a.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:t,previousLocation:n}),L("onRouteDidUpdate",{previousLocation:n,location:t}))}),[n,t]),e};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.C)(c.c,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.c.canUseDOM?L("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=L("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,p.jsx)(O,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(u.kX,{location:t,render:()=>e})})}}const M=I,F="__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 = '${F}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

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

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Q=n(8120);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.C)(c.c,e).flatMap((e=>{return t=e.route.path,Object.entries(Y).filter((([e])=>e.replace(/-[^-]+$/,"")===t)).flatMap((([,e])=>Object.values((0,Q.c)(e))));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),R(e))},te=Object.freeze(ee),ne=Boolean(!0);if(s.c.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(i.EN,{children:(0,p.jsx)(a.kn,{children:(0,p.jsx)(G,{})})}),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)}},136:(e,t,n)=>{"use strict";n.d(t,{e:()=>d,y:()=>p});var r=n(1504),o=n(7768);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"web/overview","docs":[{"id":"mobile/api-argument-definitions","path":"/docs/mobile/api-argument-definitions","sidebar":"mobile"},{"id":"mobile/api-commands-operations","path":"/docs/mobile/api-commands-operations","sidebar":"mobile"},{"id":"mobile/api-commands-operations-events","path":"/docs/mobile/api-commands-operations-events","unlisted":true},{"id":"mobile/api-components","path":"/docs/mobile/api-components","sidebar":"mobile"},{"id":"mobile/api-events","path":"/docs/mobile/api-events","sidebar":"mobile"},{"id":"mobile/configuration-advanced-model-binding","path":"/docs/mobile/configuration-advanced-model-binding","sidebar":"mobile"},{"id":"mobile/configuration-app-config-getting-started","path":"/docs/mobile/configuration-app-config-getting-started","sidebar":"mobile"},{"id":"mobile/configuration-app-config-reference","path":"/docs/mobile/configuration-app-config-reference","sidebar":"mobile"},{"id":"mobile/configuration-commands-operations","path":"/docs/mobile/configuration-commands-operations","sidebar":"mobile"},{"id":"mobile/configuration-layout-getting-started","path":"/docs/mobile/configuration-layout-getting-started","sidebar":"mobile"},{"id":"mobile/configuration-layout-reference","path":"/docs/mobile/configuration-layout-reference","sidebar":"mobile"},{"id":"mobile/configuration-theme","path":"/docs/mobile/configuration-theme","sidebar":"mobile"},{"id":"mobile/key-concepts","path":"/docs/mobile/key-concepts","sidebar":"mobile"},{"id":"mobile/overview","path":"/docs/mobile/overview","sidebar":"mobile"},{"id":"mobile/sdk-commands-operations","path":"/docs/mobile/sdk-commands-operations","sidebar":"mobile"},{"id":"mobile/sdk-component-service-interactions","path":"/docs/mobile/sdk-component-service-interactions","sidebar":"mobile"},{"id":"mobile/sdk-components-create","path":"/docs/mobile/sdk-components-create","sidebar":"mobile"},{"id":"mobile/sdk-components-internationalization","path":"/docs/mobile/sdk-components-internationalization","sidebar":"mobile"},{"id":"mobile/sdk-components-overview","path":"/docs/mobile/sdk-components-overview","sidebar":"mobile"},{"id":"mobile/sdk-components-reference","path":"/docs/mobile/sdk-components-reference","sidebar":"mobile"},{"id":"mobile/sdk-components-styling","path":"/docs/mobile/sdk-components-styling","sidebar":"mobile"},{"id":"mobile/sdk-components-viewmodel-helper-class","path":"/docs/mobile/sdk-components-viewmodel-helper-class","sidebar":"mobile"},{"id":"mobile/sdk-dependency-injection","path":"/docs/mobile/sdk-dependency-injection","sidebar":"mobile"},{"id":"mobile/sdk-deployment","path":"/docs/mobile/sdk-deployment","sidebar":"mobile"},{"id":"mobile/sdk-edit-layout-app-config","path":"/docs/mobile/sdk-edit-layout-app-config","sidebar":"mobile"},{"id":"mobile/sdk-events-overview","path":"/docs/mobile/sdk-events-overview","sidebar":"mobile"},{"id":"mobile/sdk-events-reference","path":"/docs/mobile/sdk-events-reference","sidebar":"mobile"},{"id":"mobile/sdk-internationalization","path":"/docs/mobile/sdk-internationalization","sidebar":"mobile"},{"id":"mobile/sdk-memory-leaks","path":"/docs/mobile/sdk-memory-leaks","sidebar":"mobile"},{"id":"mobile/sdk-overview","path":"/docs/mobile/sdk-overview","sidebar":"mobile"},{"id":"mobile/sdk-quickstart-reference","path":"/docs/mobile/sdk-quickstart-reference","sidebar":"mobile"},{"id":"mobile/sdk-samples","path":"/docs/mobile/sdk-samples","sidebar":"mobile"},{"id":"mobile/sdk-services-create","path":"/docs/mobile/sdk-services-create","sidebar":"mobile"},{"id":"mobile/sdk-services-overview","path":"/docs/mobile/sdk-services-overview","sidebar":"mobile"},{"id":"mobile/sdk-services-reference","path":"/docs/mobile/sdk-services-reference","sidebar":"mobile"},{"id":"mobile/snippets/cleanup-handles","path":"/docs/mobile/snippets/cleanup-handles"},{"id":"mobile/snippets/designer-callout","path":"/docs/mobile/snippets/designer-callout"},{"id":"mobile/snippets/follow-along","path":"/docs/mobile/snippets/follow-along"},{"id":"mobile/snippets/prereqs-layout-config-editing","path":"/docs/mobile/snippets/prereqs-layout-config-editing"},{"id":"mobile/snippets/quickstart-prereqs","path":"/docs/mobile/snippets/quickstart-prereqs"},{"id":"mobile/snippets/relevant-workflow-samples","path":"/docs/mobile/snippets/relevant-workflow-samples"},{"id":"mobile/snippets/translation-callout","path":"/docs/mobile/snippets/translation-callout"},{"id":"mobile/snippets/tweak-layout-config","path":"/docs/mobile/snippets/tweak-layout-config"},{"id":"mobile/tutorial-add-medium-layout","path":"/docs/mobile/tutorial-add-medium-layout","sidebar":"mobile"},{"id":"mobile/tutorial-change-default-behavior","path":"/docs/mobile/tutorial-change-default-behavior","sidebar":"mobile"},{"id":"mobile/tutorial-change-default-map-click-behavior","path":"/docs/mobile/tutorial-change-default-map-click-behavior","sidebar":"mobile"},{"id":"mobile/tutorial-configure-button-click","path":"/docs/mobile/tutorial-configure-button-click","sidebar":"mobile"},{"id":"mobile/tutorial-customize-application-theme","path":"/docs/mobile/tutorial-customize-application-theme","sidebar":"mobile"},{"id":"mobile/tutorial-display-custom-form","path":"/docs/mobile/tutorial-display-custom-form","sidebar":"mobile"},{"id":"mobile/tutorial-implement-command-operation","path":"/docs/mobile/tutorial-implement-command-operation","sidebar":"mobile"},{"id":"mobile/tutorial-implement-component-participate-app-config","path":"/docs/mobile/tutorial-implement-component-participate-app-config","sidebar":"mobile"},{"id":"mobile/tutorial-implement-component-with-ui","path":"/docs/mobile/tutorial-implement-component-with-ui","sidebar":"mobile"},{"id":"mobile/tutorial-implement-custom-activity","path":"/docs/mobile/tutorial-implement-custom-activity","sidebar":"mobile"},{"id":"mobile/tutorial-implement-custom-form-elements","path":"/docs/mobile/tutorial-implement-custom-form-elements","sidebar":"mobile"},{"id":"mobile/tutorial-implement-service-fetch-dynamic-data","path":"/docs/mobile/tutorial-implement-service-fetch-dynamic-data","sidebar":"mobile"},{"id":"mobile/tutorial-run-workflow-app-config","path":"/docs/mobile/tutorial-run-workflow-app-config","sidebar":"mobile"},{"id":"reporting/key-concepts","path":"/docs/reporting/key-concepts","sidebar":"reporting"},{"id":"reporting/overview","path":"/docs/reporting/overview","sidebar":"reporting"},{"id":"reporting/sdk-js-overview","path":"/docs/reporting/sdk-js-overview","sidebar":"reporting"},{"id":"reporting/sdk-overview","path":"/docs/reporting/sdk-overview","sidebar":"reporting"},{"id":"reporting/sdk-py-overview","path":"/docs/reporting/sdk-py-overview","sidebar":"reporting"},{"id":"reporting/snippets/designer-callout","path":"/docs/reporting/snippets/designer-callout"},{"id":"reporting/tutorial-arcgis-notebook","path":"/docs/reporting/tutorial-arcgis-notebook","sidebar":"reporting"},{"id":"snippets/app-item","path":"/docs/snippets/app-item"},{"id":"snippets/autofac-mobile","path":"/docs/snippets/autofac-mobile"},{"id":"snippets/workflow-url","path":"/docs/snippets/workflow-url"},{"id":"web/api-argument-definitions","path":"/docs/web/api-argument-definitions","sidebar":"web"},{"id":"web/api-commands-operations","path":"/docs/web/api-commands-operations","sidebar":"web"},{"id":"web/api-commands-operations-events","path":"/docs/web/api-commands-operations-events","unlisted":true},{"id":"web/api-components","path":"/docs/web/api-components","sidebar":"web"},{"id":"web/api-events","path":"/docs/web/api-events","sidebar":"web"},{"id":"web/api-objects","path":"/docs/web/api-objects","sidebar":"web"},{"id":"web/app-initialization-events","path":"/docs/web/app-initialization-events","sidebar":"web"},{"id":"web/configuration-advanced-model-binding","path":"/docs/web/configuration-advanced-model-binding","sidebar":"web"},{"id":"web/configuration-app-config-getting-started","path":"/docs/web/configuration-app-config-getting-started","sidebar":"web"},{"id":"web/configuration-app-config-reference","path":"/docs/web/configuration-app-config-reference","sidebar":"web"},{"id":"web/configuration-commands-operations","path":"/docs/web/configuration-commands-operations","sidebar":"web"},{"id":"web/configuration-layout-getting-started","path":"/docs/web/configuration-layout-getting-started","sidebar":"web"},{"id":"web/configuration-layout-reference","path":"/docs/web/configuration-layout-reference","sidebar":"web"},{"id":"web/configuration-theme","path":"/docs/web/configuration-theme","sidebar":"web"},{"id":"web/key-concepts","path":"/docs/web/key-concepts","sidebar":"web"},{"id":"web/overview","path":"/docs/web/overview","sidebar":"web"},{"id":"web/sdk-adding-icons","path":"/docs/web/sdk-adding-icons","sidebar":"web"},{"id":"web/sdk-commands-operations","path":"/docs/web/sdk-commands-operations","sidebar":"web"},{"id":"web/sdk-components-create","path":"/docs/web/sdk-components-create","sidebar":"web"},{"id":"web/sdk-components-hooks","path":"/docs/web/sdk-components-hooks","sidebar":"web"},{"id":"web/sdk-components-injecting-services","path":"/docs/web/sdk-components-injecting-services","sidebar":"web"},{"id":"web/sdk-components-interactions","path":"/docs/web/sdk-components-interactions","sidebar":"web"},{"id":"web/sdk-components-internationalization","path":"/docs/web/sdk-components-internationalization","sidebar":"web"},{"id":"web/sdk-components-overview","path":"/docs/web/sdk-components-overview","sidebar":"web"},{"id":"web/sdk-components-reference","path":"/docs/web/sdk-components-reference","sidebar":"web"},{"id":"web/sdk-components-styling","path":"/docs/web/sdk-components-styling","sidebar":"web"},{"id":"web/sdk-components-ui-context","path":"/docs/web/sdk-components-ui-context","sidebar":"web"},{"id":"web/sdk-deployment","path":"/docs/web/sdk-deployment","sidebar":"web"},{"id":"web/sdk-events-overview","path":"/docs/web/sdk-events-overview","sidebar":"web"},{"id":"web/sdk-events-reference","path":"/docs/web/sdk-events-reference","sidebar":"web"},{"id":"web/sdk-internationalization","path":"/docs/web/sdk-internationalization","sidebar":"web"},{"id":"web/sdk-overview","path":"/docs/web/sdk-overview","sidebar":"web"},{"id":"web/sdk-reference-third-party-libraries","path":"/docs/web/sdk-reference-third-party-libraries","sidebar":"web"},{"id":"web/sdk-samples","path":"/docs/web/sdk-samples","sidebar":"web"},{"id":"web/sdk-serializable-properties","path":"/docs/web/sdk-serializable-properties","sidebar":"web"},{"id":"web/sdk-services-create","path":"/docs/web/sdk-services-create","sidebar":"web"},{"id":"web/sdk-services-injecting-services","path":"/docs/web/sdk-services-injecting-services","sidebar":"web"},{"id":"web/sdk-services-overview","path":"/docs/web/sdk-services-overview","sidebar":"web"},{"id":"web/sdk-services-reference","path":"/docs/web/sdk-services-reference","sidebar":"web"},{"id":"web/snippets/designer-callout","path":"/docs/web/snippets/designer-callout"},{"id":"web/snippets/follow-along","path":"/docs/web/snippets/follow-along"},{"id":"web/snippets/framework-components","path":"/docs/web/snippets/framework-components"},{"id":"web/snippets/prereqs-custom-code","path":"/docs/web/snippets/prereqs-custom-code"},{"id":"web/snippets/prereqs-layout-config-editing","path":"/docs/web/snippets/prereqs-layout-config-editing"},{"id":"web/snippets/translation-callout","path":"/docs/web/snippets/translation-callout"},{"id":"web/tutorial-change-default-behavior","path":"/docs/web/tutorial-change-default-behavior","sidebar":"web"},{"id":"web/tutorial-change-default-map-click-behavior","path":"/docs/web/tutorial-change-default-map-click-behavior","sidebar":"web"},{"id":"web/tutorial-command-can-execute","path":"/docs/web/tutorial-command-can-execute","sidebar":"web"},{"id":"web/tutorial-configure-button-click","path":"/docs/web/tutorial-configure-button-click","sidebar":"web"},{"id":"web/tutorial-customize-application-theme","path":"/docs/web/tutorial-customize-application-theme","sidebar":"web"},{"id":"web/tutorial-display-custom-form","path":"/docs/web/tutorial-display-custom-form","sidebar":"web"},{"id":"web/tutorial-events-subscribe","path":"/docs/web/tutorial-events-subscribe","sidebar":"web"},{"id":"web/tutorial-implement-command-operation","path":"/docs/web/tutorial-implement-command-operation","sidebar":"web"},{"id":"web/tutorial-implement-component-participate-app-config","path":"/docs/web/tutorial-implement-component-participate-app-config","sidebar":"web"},{"id":"web/tutorial-implement-component-with-ui","path":"/docs/web/tutorial-implement-component-with-ui","sidebar":"web"},{"id":"web/tutorial-implement-custom-activity","path":"/docs/web/tutorial-implement-custom-activity","sidebar":"web"},{"id":"web/tutorial-implement-custom-form-elements","path":"/docs/web/tutorial-implement-custom-form-elements","sidebar":"web"},{"id":"web/tutorial-import-map-model","path":"/docs/web/tutorial-import-map-model","sidebar":"web"},{"id":"web/tutorial-internationalization","path":"/docs/web/tutorial-internationalization","sidebar":"web"},{"id":"web/tutorial-run-workflow-app-config","path":"/docs/web/tutorial-run-workflow-app-config","sidebar":"web"},{"id":"web/tutorial-service-dynamic-data","path":"/docs/web/tutorial-service-dynamic-data","sidebar":"web"},{"id":"workflow/key-concepts","path":"/docs/workflow/key-concepts","sidebar":"workflow"},{"id":"workflow/overview","path":"/docs/workflow/overview","sidebar":"workflow"},{"id":"workflow/sdk-desktop-create-activity","path":"/docs/workflow/sdk-desktop-create-activity","sidebar":"workflow"},{"id":"workflow/sdk-desktop-overview","path":"/docs/workflow/sdk-desktop-overview","sidebar":"workflow"},{"id":"workflow/sdk-desktop-wrapping","path":"/docs/workflow/sdk-desktop-wrapping","sidebar":"workflow"},{"id":"workflow/sdk-mobile-activity-reference","path":"/docs/workflow/sdk-mobile-activity-reference","sidebar":"workflow"},{"id":"workflow/sdk-mobile-create-activity","path":"/docs/workflow/sdk-mobile-create-activity","sidebar":"workflow"},{"id":"workflow/sdk-mobile-form-reference","path":"/docs/workflow/sdk-mobile-form-reference","sidebar":"workflow"},{"id":"workflow/sdk-mobile-overview","path":"/docs/workflow/sdk-mobile-overview","sidebar":"workflow"},{"id":"workflow/sdk-mobile-reference-third-party-library","path":"/docs/workflow/sdk-mobile-reference-third-party-library","sidebar":"workflow"},{"id":"workflow/sdk-net-integrating-the-arcgis-api","path":"/docs/workflow/sdk-net-integrating-the-arcgis-api","sidebar":"workflow"},{"id":"workflow/sdk-net-integrating-the-arcgis-pro-api","path":"/docs/workflow/sdk-net-integrating-the-arcgis-pro-api","sidebar":"workflow"},{"id":"workflow/sdk-net-overview","path":"/docs/workflow/sdk-net-overview","sidebar":"workflow"},{"id":"workflow/sdk-net-register-activities","path":"/docs/workflow/sdk-net-register-activities","sidebar":"workflow"},{"id":"workflow/sdk-server-create-activity","path":"/docs/workflow/sdk-server-create-activity","sidebar":"workflow"},{"id":"workflow/sdk-server-overview","path":"/docs/workflow/sdk-server-overview","sidebar":"workflow"},{"id":"workflow/sdk-server-reference-third-party-library","path":"/docs/workflow/sdk-server-reference-third-party-library","sidebar":"workflow"},{"id":"workflow/sdk-web-activity-block-tags","path":"/docs/workflow/sdk-web-activity-block-tags","sidebar":"workflow"},{"id":"workflow/sdk-web-activity-reference","path":"/docs/workflow/sdk-web-activity-reference","sidebar":"workflow"},{"id":"workflow/sdk-web-create-activity","path":"/docs/workflow/sdk-web-create-activity","sidebar":"workflow"},{"id":"workflow/sdk-web-create-element","path":"/docs/workflow/sdk-web-create-element","sidebar":"workflow"},{"id":"workflow/sdk-web-form-reference","path":"/docs/workflow/sdk-web-form-reference","sidebar":"workflow"},{"id":"workflow/sdk-web-integrating-the-arcgis-api","path":"/docs/workflow/sdk-web-integrating-the-arcgis-api","sidebar":"workflow"},{"id":"workflow/sdk-web-overview","path":"/docs/workflow/sdk-web-overview","sidebar":"workflow"},{"id":"workflow/sdk-web-reference-third-party-library","path":"/docs/workflow/sdk-web-reference-third-party-library","sidebar":"workflow"},{"id":"workflow/snippets/designer-callout","path":"/docs/workflow/snippets/designer-callout"},{"id":"workflow/snippets/prereqs-desktop","path":"/docs/workflow/snippets/prereqs-desktop"},{"id":"workflow/snippets/prereqs-mobile","path":"/docs/workflow/snippets/prereqs-mobile"},{"id":"workflow/snippets/prereqs-server","path":"/docs/workflow/snippets/prereqs-server"},{"id":"workflow/snippets/prereqs-web","path":"/docs/workflow/snippets/prereqs-web"},{"id":"workflow/snippets/sdk-net-limitations-warning","path":"/docs/workflow/snippets/sdk-net-limitations-warning"},{"id":"workflow/tutorial-mobile-activity-indicator-form-element","path":"/docs/workflow/tutorial-mobile-activity-indicator-form-element","sidebar":"workflow"},{"id":"workflow/tutorial-mobile-calculate-logarithm-activity","path":"/docs/workflow/tutorial-mobile-calculate-logarithm-activity","sidebar":"workflow"},{"id":"workflow/tutorial-mobile-show-map-callout","path":"/docs/workflow/tutorial-mobile-show-map-callout","sidebar":"workflow"},{"id":"workflow/tutorial-server-calculate-logarithm-activity","path":"/docs/workflow/tutorial-server-calculate-logarithm-activity","sidebar":"workflow"},{"id":"workflow/tutorial-web-add-layer-to-map","path":"/docs/workflow/tutorial-web-add-layer-to-map","sidebar":"workflow"},{"id":"workflow/tutorial-web-calculate-logarithm-activity","path":"/docs/workflow/tutorial-web-calculate-logarithm-activity","sidebar":"workflow"},{"id":"workflow/tutorial-web-implement-star-rating-form-element","path":"/docs/workflow/tutorial-web-implement-star-rating-form-element","sidebar":"workflow"},{"id":"workflow/tutorial-web-implement-third-party-captcha-form-element","path":"/docs/workflow/tutorial-web-implement-third-party-captcha-form-element","sidebar":"workflow"},{"id":"workflow/tutorial-web-implement-third-party-qr-code-form-element","path":"/docs/workflow/tutorial-web-implement-third-party-qr-code-form-element","sidebar":"workflow"},{"id":"workflow/tutorial-web-implement-third-party-signature-block-form-element","path":"/docs/workflow/tutorial-web-implement-third-party-signature-block-form-element","sidebar":"workflow"},{"id":"workflow/tutorial-web-implement-third-party-star-rating-form-element","path":"/docs/workflow/tutorial-web-implement-third-party-star-rating-form-element","sidebar":"workflow"},{"id":"workflow/tutorial-web-qr-code-activity","path":"/docs/workflow/tutorial-web-qr-code-activity","sidebar":"workflow"}],"draftIds":[],"sidebars":{"web":{"link":{"path":"/docs/web/overview","label":"web/overview"}},"workflow":{"link":{"path":"/docs/workflow/overview","label":"workflow/overview"}},"mobile":{"link":{"path":"/docs/mobile/overview","label":"mobile/overview"}},"reporting":{"link":{"path":"/docs/reporting/overview","label":"reporting/overview"}}}}],"breadcrumbs":true}},"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-2ZXTZT5M0F"],"anonymizeIP":true,"id":"default"}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(144);const l=JSON.parse('{"docusaurusVersion":"3.2.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.2.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.2.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.2.1"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"3.2.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.2.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.2.1"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"3.2.1"}}}');var c=n(7624);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function p({children:e}){return(0,c.jsx)(d.Provider,{value:u,children:e})}},5852:(e,t,n)=>{"use strict";n.d(t,{c:()=>b});var r=n(1504),o=n(8684),a=n(6952),i=n(5684),s=n(7468),l=n(5548),c=n(7624);function u({error:e,tryAgain:t}){return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:t,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:e})]})}function d({error:e}){const t=(0,i.getErrorCausalChain)(e).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:t})}function p({children:e}){return(0,c.jsx)(l.Y,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:e})}function f({error:e,tryAgain:t}){return(0,c.jsx)(p,{children:(0,c.jsxs)(b,{fallback:()=>(0,c.jsx)(u,{error:e,tryAgain:t}),children:[(0,c.jsx)(a.c,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.c,{children:(0,c.jsx)(u,{error:e,tryAgain:t})})]})})}const m=e=>(0,c.jsx)(f,{...e});class b extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.c.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??m)(e)}return e??null}}},8684:(e,t,n)=>{"use strict";n.d(t,{c:()=>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}},6952:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});n(1504);var r=n(2160),o=n(7624);function a(e){return(0,o.jsx)(r.So,{...e})}},867:(e,t,n)=>{"use strict";n.d(t,{c:()=>f});var r=n(1504),o=n(440),a=n(5684),i=n(8264),s=n(8136),l=n(8684),c=n(5976),u=n(964),d=n(7624);function p({isNavLink:e,to:t,href:n,activeClassName:p,isActive:f,"data-noBrokenLinkCheck":m,autoAddBaseUrl:b=!0,...h},g){const{siteConfig:{trailingSlash:y,baseUrl:v}}=(0,i.c)(),{withBaseUrl:w}=(0,u.E)(),k=(0,c.c)(),x=(0,r.useRef)(null);(0,r.useImperativeHandle)(g,(()=>x.current));const S=t||n;const _=(0,s.c)(S),E=S?.replace("pathname://","");let C=void 0!==E?(T=E,b&&(e=>e.startsWith("/"))(T)?w(T):T):void 0;var T;C&&_&&(C=(0,a.applyTrailingSlash)(C,{trailingSlash:y,baseUrl:v}));const P=(0,r.useRef)(!1),j=e?o.Af:o.cH,A=l.c.canUseIntersectionObserver,N=(0,r.useRef)(),L=()=>{P.current||null==C||(window.docusaurus.preload(C),P.current=!0)};(0,r.useEffect)((()=>(!A&&_&&null!=C&&window.docusaurus.prefetch(C),()=>{A&&N.current&&N.current.disconnect()})),[N,C,A,_]);const O=C?.startsWith("#")??!1,R=!h.target||"_self"===h.target,I=!C||!_||!R||O;return m||!O&&I||k.collectLink(C),h.id&&k.collectAnchor(h.id),I?(0,d.jsx)("a",{ref:x,href:C,...S&&!_&&{target:"_blank",rel:"noopener noreferrer"},...h}):(0,d.jsx)(j,{...h,onMouseEnter:L,onTouchStart:L,innerRef:e=>{x.current=e,A&&e&&_&&(N.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(N.current.unobserve(e),N.current.disconnect(),null!=C&&window.docusaurus.prefetch(C))}))})),N.current.observe(e))},to:C,...e&&{isActive:f,activeClassName:p}})}const f=r.forwardRef(p)},4357:(e,t,n)=>{"use strict";n.d(t,{c:()=>c,G:()=>l});var r=n(1504),o=n(7624);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(144);function s({id:e,message:t}){if(void 0===e&&void 0===t)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[e??t]??t??e}function l({message:e,id:t},n){return a(s({message:e,id:t}),n)}function c({children:e,id:t,values:n}){if(e&&"string"!=typeof e)throw console.warn("Illegal children",e),new Error("The Docusaurus component only accept simple string values");const r=s({message:e,id:t});return(0,o.jsx)(o.Fragment,{children:a(r,n)})}},2488:(e,t,n)=>{"use strict";n.d(t,{M:()=>r});const r="default"},8136:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{_:()=>r,c:()=>o})},964:(e,t,n)=>{"use strict";n.d(t,{E:()=>i,c:()=>s});var r=n(1504),o=n(8264),a=n(8136);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.c)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,{forcePrependBaseUrl:r=!1,absolute:o=!1}={}){if(!n||n.startsWith("#")||(0,a._)(n))return n;if(r)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const i=n.startsWith(t)?n:t+n.replace(/^\//,"");return o?e+i:i}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t={}){const{withBaseUrl:n}=i();return n(e,t)}},5976:(e,t,n)=>{"use strict";n.d(t,{c:()=>i});var r=n(1504);n(7624);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},8264:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(1504),o=n(136);function a(){return(0,r.useContext)(o.e)}},3664:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(1504),o=n(240);function a(){return(0,r.useContext)(o.e)}},5288:(e,t,n)=>{"use strict";n.d(t,{c:()=>o});var r=n(1504);const o=n(8684).c.canUseDOM?r.useLayoutEffect:r.useEffect},5308:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(1504),o=n(5548);function a(){const e=r.useContext(o.e);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}},8120:(e,t,n)=>{"use strict";n.d(t,{c:()=>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,a])=>{const i=o?`${o}.${n}`:n;r(a)?e(a,i):t[i]=a}))}(e),t}},5548:(e,t,n)=>{"use strict";n.d(t,{Y:()=>i,e:()=>a});var r=n(1504),o=n(7624);const a=r.createContext(null);function i({children:e,value:t}){const n=r.useContext(a),i=(0,r.useMemo)((()=>function({parent:e,value:t}){if(!e){if(!t)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in t))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return t}const n={...e.data,...t?.data};return{plugin:e.plugin,data:n}}({parent:n,value:t})),[n,t]);return(0,o.jsx)(a.Provider,{value:i,children:e})}},2840:(e,t,n)=>{"use strict";n.d(t,{wB:()=>g,UF:()=>f,mU:()=>m,L0:()=>d,i8:()=>y,OK:()=>p,aA:()=>h,gN:()=>b});var r=n(5592),o=n(8264),a=n(2488);function i(e,t={}){const n=function(){const{globalData:e}=(0,o.c)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.ot)(t,{path:e.path,exact:!1,strict:!1})))}function c(e,t){const n=l(e,t),o=n?.docs.find((e=>!!(0,r.ot)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const u={},d=()=>i("docusaurus-plugin-content-docs")??u,p=e=>{try{return function(e,t=a.M,n={}){const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function f(e={}){const t=d(),{pathname:n}=(0,r.IT)();return function(e,t,n={}){const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((([,e])=>!!(0,r.ot)(t,{path:e.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 m(e={}){const t=f(e),{pathname:n}=(0,r.IT)();if(!t)return;return{activePlugin:t,activeVersion:l(t.pluginData,n)}}function b(e){return p(e).versions}function h(e){const t=p(e);return s(t)}function g(e){const t=p(e),{pathname:n}=(0,r.IT)();return c(t,n)}function y(e){const t=p(e),{pathname:n}=(0,r.IT)();return function(e,t){const n=s(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},7483:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate({location:e,previousLocation:t}){!t||e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash||setTimeout((()=>{window.gtag("set","page_path",e.pathname+e.search+e.hash),window.gtag("event","page_view")}))}}},1976:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(2272),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate({location:e,previousLocation:t}){if(t&&e.pathname!==t.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},5396:(e,t,n)=>{"use strict";n.r(t);var r=n(6756),o=n(7768);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(1808),n(9016)(`./prism-${e}`)})),delete globalThis.Prism}(r.sp)},6448:(e,t,n)=>{"use strict";n.d(t,{c:()=>u});n(1504);var r=n(4064),o=n(4357),a=n(1824),i=n(867),s=n(5976);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(7624);function u({as:e,id:t,...n}){const u=(0,s.c)(),{navbar:{hideOnScroll:d}}=(0,a.y)();if("h1"===e||!t)return(0,c.jsx)(e,{...n,id:void 0});u.collectAnchor(t);const p=(0,o.G)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof n.children?n.children:t});return(0,c.jsxs)(e,{...n,className:(0,r.c)("anchor",d?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,n.className),id:t,children:[n.children,(0,c.jsx)(i.c,{className:"hash-link",to:`#${t}`,"aria-label":p,title:p,children:"\u200b"})]})}},3232:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});n(1504);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(7624);function a({width:e=13.5,height:t=13.5}){return(0,o.jsx)("svg",{width:e,height:t,"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"})})}},7468:(e,t,n)=>{"use strict";n.d(t,{c:()=>Ot});var r=n(1504),o=n(4064),a=n(5852),i=n(3368),s=n(5592),l=n(4357),c=n(7124),u=n(7624);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.Uz)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.c)((({location:n})=>{e.current&&!n.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,l.G)({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 b(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(5864),g=n(204);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(b,{className:y.skipToContent})}var w=n(1824),k=n(3868);function x({width:e=21,height:t=21,color:n="currentColor",strokeWidth:r=1.2,className:o,...a}){return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:e,height:t,...a,children:(0,u.jsx)("g",{stroke:n,strokeWidth:r,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function _(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.G)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.c)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const E={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.y)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.c)(E.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function P(){const{announcementBar:e}=(0,w.y)(),{isActive:t,close:n}=(0,k.el)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:T.announcementBarPlaceholder}),(0,u.jsx)(C,{className:T.announcementBarContent}),a&&(0,u.jsx)(_,{onClick:n,className:T.announcementBarClose})]})}var j=n(8200),A=n(3943);var N=n(1100),L=n(5168);const O=r.createContext(null);function R({children:e}){const t=function(){const e=(0,j.q)(),t=(0,L.MF)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,N.i0)(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)(O.Provider,{value:t,children:e})}function I(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function M(){const e=(0,r.useContext)(O);if(!e)throw new N.AH("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,L.MF)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:I(a)})),[o,a,t])}function F({header:e,primaryMenu:t,secondaryMenu:n}){const{shown:r}=M();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[e,(0,u.jsxs)("div",{className:(0,o.c)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":r}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:t}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n})]})]})}var D=n(6528),z=n(3664);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({className:e,buttonClassName:t,value:n,onChange:r}){const a=(0,z.c)(),i=(0,l.G)({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"===n?(0,l.G)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.G)({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.c)(U.toggle,e),children:(0,u.jsxs)("button",{className:(0,o.c)("clean-btn",U.toggleButton,!a&&U.toggleButtonDisabled,t),type:"button",onClick:()=>r("dark"===n?"light":"dark"),disabled:!a,title:i,"aria-label":i,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,o.c)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,o.c)(U.toggleIcon,U.darkToggleIcon)})]})})}const q=r.memo(H),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W({className:e}){const t=(0,w.y)().navbar.style,n=(0,w.y)().colorMode.disableSwitch,{colorMode:r,setColorMode:o}=(0,D.U)();return n?null:(0,u.jsx)(q,{className:e,buttonClassName:"dark"===t?V.darkNavbarColorModeToggle:void 0,value:r,onChange:o})}var G=n(8164);function Y(){return(0,u.jsx)(G.c,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,j.q)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.G)({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 Q(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(Y,{}),(0,u.jsx)(W,{className:"margin-right--md"}),(0,u.jsx)(K,{})]})}var Z=n(867),X=n(964),J=n(8136),ee=n(1064),te=n(3232);function ne({activeBasePath:e,activeBaseRegex:t,to:n,href:r,label:o,html:a,isDropdownLink:i,prependBaseUrlToHref:s,...l}){const c=(0,X.c)(n),d=(0,X.c)(e),p=(0,X.c)(r,{forcePrependBaseUrl:!0}),f=o&&r&&!(0,J.c)(r),m=a?{dangerouslySetInnerHTML:{__html:a}}:{children:(0,u.jsxs)(u.Fragment,{children:[o,f&&(0,u.jsx)(te.c,{...i&&{width:12,height:12}})]})};return r?(0,u.jsx)(Z.c,{href:s?p:r,...l,...m}):(0,u.jsx)(Z.c,{to:c,isNavLink:!0,...(e||t)&&{isActive:(e,n)=>t?(0,ee._)(t,n.pathname):n.pathname.startsWith(d)},...l,...m})}function re({className:e,isDropdownItem:t=!1,...n}){const r=(0,u.jsx)(ne,{className:(0,o.c)(t?"dropdown__link":"navbar__item navbar__link",e),isDropdownLink:t,...n});return t?(0,u.jsx)("li",{children:r}):r}function oe({className:e,isDropdownItem:t,...n}){return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.c)("menu__link",e),...n})})}function ae({mobile:e=!1,position:t,...n}){const r=e?oe:re;return(0,u.jsx)(r,{...n,activeClassName:n.activeClassName??(e?"menu__link--active":"navbar__link--active")})}var ie=n(8448),se=n(3376),le=n(8264);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.Sc)(e.to,t)||!!(0,ee._)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de({items:e,position:t,className:n,onClick:a,...i}){const s=(0,r.useRef)(null),[l,c]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{s.current&&!s.current.contains(e.target)&&c(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[s]),(0,u.jsxs)("div",{ref:s,className:(0,o.c)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===t,"dropdown--show":l}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":l,role:"button",href:i.to?void 0:"#",className:(0,o.c)("navbar__link",n),...i,onClick:i.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),c(!l))},children:i.children??i.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:e.map(((e,t)=>(0,r.createElement)(Ve,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe({items:e,className:t,position:n,onClick:a,...i}){const l=function(){const{siteConfig:{baseUrl:e}}=(0,le.c)(),{pathname:t}=(0,s.IT)();return t.replace(e,"/")}(),c=ue(e,l),{collapsed:d,toggleCollapsed:p,setCollapsed:f}=(0,ie.a)({initialState:()=>!c});return(0,r.useEffect)((()=>{c&&f(!c)}),[l,c,f]),(0,u.jsxs)("li",{className:(0,o.c)("menu__list-item",{"menu__list-item--collapsed":d}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.c)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",t),...i,onClick:e=>{e.preventDefault(),p()},children:i.children??i.label}),(0,u.jsx)(ie.U,{lazy:!0,as:"ul",className:"menu__list",collapsed:d,children:e.map(((e,t)=>(0,r.createElement)(Ve,{mobile:!0,isDropdownItem:!0,onClick:a,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe({mobile:e=!1,...t}){const n=e?pe:de;return(0,u.jsx)(n,{...t})}var me=n(1616);function be({width:e=20,height:t=20,...n}){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:e,height:t,"aria-hidden":!0,...n,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 ge=n(7104);function ye(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var ve=n(5052),we=["translations"];function ke(){return ke=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Ee="Ctrl";var Ce=r.forwardRef((function(e,t){var n=e.translations,o=void 0===n?{}:n,a=_e(e,we),i=o.buttonText,s=void 0===i?"Search":i,l=o.buttonAriaLabel,c=void 0===l?"Search":l,u=xe((0,r.useState)(null),2),d=u[0],p=u[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?p("\u2318"):p(Ee))}),[]),r.createElement("button",ke({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},a,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(ve.I,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement(Te,{reactsToKey:d===Ee?Ee:"Meta"},d===Ee?r.createElement(ye,null):d),r.createElement(Te,{reactsToKey:"k"},"K"))))}));function Te(e){var t=e.reactsToKey,n=e.children,o=xe((0,r.useState)(!1),2),a=o[0],i=o[1];return(0,r.useEffect)((function(){if(t)return window.addEventListener("keydown",e),window.addEventListener("keyup",n),function(){window.removeEventListener("keydown",e),window.removeEventListener("keyup",n)};function e(e){e.key===t&&i(!0)}function n(e){e.key!==t&&"Meta"!==e.key||i(!1)}}),[t]),r.createElement("kbd",{className:a?"DocSearch-Button-Key DocSearch-Button-Key--pressed":"DocSearch-Button-Key"},n)}var Pe=n(6952),je=n(7092),Ae=n(9032),Ne=n(4456);const Le={button:{buttonText:(0,l.G)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,l.G)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,l.G)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,l.G)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,l.G)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,l.G)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,l.G)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,l.G)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,l.G)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,l.G)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,l.G)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,l.G)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,l.G)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,l.G)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,l.G)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,l.G)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,l.G)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,l.G)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,l.G)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,l.G)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,l.G)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,l.G)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,l.G)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,l.G)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,l.G)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,l.G)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,l.G)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let Oe=null;function Re({hit:e,children:t}){return(0,u.jsx)(Z.c,{to:e.url,children:t})}function Ie({state:e,onClose:t}){const n=(0,je.Y)();return(0,u.jsx)(Z.c,{to:n(e.query),onClick:t,children:(0,u.jsx)(l.c,{id:"theme.SearchBar.seeAll",values:{count:e.context.nbHits},children:"See all {count} results"})})}function Me({contextualSearch:e,externalUrlRegex:t,...o}){const{siteMetadata:a}=(0,le.c)(),i=(0,Ae.Q)(),l=function(){const{locale:e,tags:t}=(0,Ne.mY)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),c=o.searchParameters?.facetFilters??[],d=e?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(l,c):c,p={...o.searchParameters,facetFilters:d},f=(0,s.Uz)(),m=(0,r.useRef)(null),b=(0,r.useRef)(null),[h,g]=(0,r.useState)(!1),[y,v]=(0,r.useState)(void 0),w=(0,r.useCallback)((()=>Oe?Promise.resolve():Promise.all([n.e(2528).then(n.bind(n,2528)),Promise.all([n.e(2176),n.e(1676)]).then(n.bind(n,1676)),Promise.all([n.e(2176),n.e(8879)]).then(n.bind(n,8879))]).then((([{DocSearchModal:e}])=>{Oe=e}))),[]),k=(0,r.useCallback)((()=>{w().then((()=>{m.current=document.createElement("div"),document.body.insertBefore(m.current,document.body.firstChild),g(!0)}))}),[w,g]),x=(0,r.useCallback)((()=>{g(!1),m.current?.remove(),b.current?.focus()}),[g]),S=(0,r.useCallback)((e=>{w().then((()=>{g(!0),v(e.key)}))}),[w,g,v]),_=(0,r.useRef)({navigate({itemUrl:e}){(0,ee._)(t,e)?window.location.href=e:f.push(e)}}).current,E=(0,r.useRef)((e=>o.transformItems?o.transformItems(e):e.map((e=>({...e,url:i(e.url)}))))).current,C=(0,r.useMemo)((()=>e=>(0,u.jsx)(Ie,{...e,onClose:x})),[x]),T=(0,r.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",a.docusaurusVersion),e)),[a.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,o=e.onClose,a=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&t||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?o():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&a&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&a(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,o,a,i])}({isOpen:h,onOpen:k,onClose:x,onInput:S,searchButtonRef:b}),(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Pe.c,{children:(0,u.jsx)("link",{rel:"preconnect",href:`https://${o.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})}),(0,u.jsx)(Ce,{onTouchStart:w,onFocus:w,onMouseOver:w,onClick:k,ref:b,translations:Le.button}),h&&Oe&&m.current&&(0,ge.createPortal)((0,u.jsx)(Oe,{onClose:x,initialScrollY:window.scrollY,initialQuery:y,navigator:_,transformItems:E,hitComponent:Re,transformSearchClient:T,...o.searchPagePath&&{resultsFooterComponent:C},...o,searchParameters:p,placeholder:Le.placeholder,translations:Le.modal}),m.current)]})}function Fe(){const{siteConfig:e}=(0,le.c)();return(0,u.jsx)(Me,{...e.themeConfig.algolia})}const De={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ze({children:e,className:t}){return(0,u.jsx)("div",{className:(0,o.c)(t,De.navbarSearchContainer),children:e})}var Be=n(2840),$e=n(5492);var Ue=n(4592);const He=e=>e.docs.find((t=>t.id===e.mainDocId));const qe={default:ae,localeDropdown:function({mobile:e,dropdownItemsBefore:t,dropdownItemsAfter:n,queryString:r="",...o}){const{i18n:{currentLocale:a,locales:i,localeConfigs:c}}=(0,le.c)(),d=(0,me.D)(),{search:p,hash:f}=(0,s.IT)(),m=[...t,...i.map((t=>{const n=`${`pathname://${d.createUrl({locale:t,fullyQualified:!1})}`}${p}${f}${r}`;return{label:c[t].label,lang:c[t].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:t===a?e?"menu__link--active":"dropdown__link--active":""}})),...n],b=e?(0,l.G)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):c[a].label;return(0,u.jsx)(fe,{...o,mobile:e,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(be,{className:he}),b]}),items:m})},search:function({mobile:e,className:t}){return e?null:(0,u.jsx)(ze,{className:t,children:(0,u.jsx)(Fe,{})})},dropdown:fe,html:function({value:e,className:t,mobile:n=!1,isDropdownItem:r=!1}){const a=r?"li":"div";return(0,u.jsx)(a,{className:(0,o.c)({navbar__item:!n&&!r,"menu__list-item":n},t),dangerouslySetInnerHTML:{__html:e}})},doc:function({docId:e,label:t,docsPluginId:n,...r}){const{activeDoc:o}=(0,Be.wB)(n),a=(0,$e.Qf)(e,n),i=o?.path===a?.path;return null===a||a.unlisted&&!i?null:(0,u.jsx)(ae,{exact:!0,...r,isActive:()=>i||!!o?.sidebar&&o.sidebar===a.sidebar,label:t??a.id,to:a.path})},docSidebar:function({sidebarId:e,label:t,docsPluginId:n,...r}){const{activeDoc:o}=(0,Be.wB)(n),a=(0,$e.Ab)(e,n).link;if(!a)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${e}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...r,isActive:()=>o?.sidebar===e,label:t??a.label,to:a.path})},docsVersion:function({label:e,to:t,docsPluginId:n,...r}){const o=(0,$e.b7)(n)[0],a=e??o.label,i=t??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,u.jsx)(ae,{...r,label:a,to:i})},docsVersionDropdown:function({mobile:e,docsPluginId:t,dropdownActiveClassDisabled:n,dropdownItemsBefore:r,dropdownItemsAfter:o,...a}){const{search:i,hash:c}=(0,s.IT)(),d=(0,Be.wB)(t),p=(0,Be.gN)(t),{savePreferredVersionName:f}=(0,Ue.iy)(t),m=[...r,...p.map((e=>{const t=d.alternateDocVersions[e.name]??He(e);return{label:e.label,to:`${t.path}${i}${c}`,isActive:()=>e===d.activeVersion,onClick:()=>f(e.name)}})),...o],b=(0,$e.b7)(t)[0],h=e&&m.length>1?(0,l.G)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,g=e&&m.length>1?void 0:He(b).path;return m.length<=1?(0,u.jsx)(ae,{...a,mobile:e,label:h,to:g,isActive:n?()=>!1:void 0}):(0,u.jsx)(fe,{...a,mobile:e,label:h,to:g,items:m,isActive:n?()=>!1:void 0})}};function Ve({type:e,...t}){const n=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(e,t),r=qe[n];if(!r)throw new Error(`No NavbarItem component found for type "${e}".`);return(0,u.jsx)(r,{...t})}function We(){const e=(0,j.q)(),t=(0,w.y)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Ve,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ge(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.c,{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 Ye(){const e=0===(0,w.y)().navbar.items.length,t=M();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(Ge,{onClick:()=>t.hide()}),t.content]})}function Ke(){const e=(0,j.q)();return function(e=!0){(0,r.useEffect)((()=>(document.body.style.overflow=e?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[e])}(e.shown),e.shouldRender?(0,u.jsx)(F,{header:(0,u.jsx)(Q,{}),primaryMenu:(0,u.jsx)(We,{}),secondaryMenu:(0,u.jsx)(Ye,{})}):null}const Qe={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ze(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.c)("navbar-sidebar__backdrop",e.className)})}function Xe({children:e}){const{navbar:{hideOnScroll:t,style:n}}=(0,w.y)(),a=(0,j.q)(),{navbarRef:i,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,A.SM)((({scrollY:t},r)=>{if(!e)return;if(t=i?n(!1):t+l{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}}(t);return(0,u.jsxs)("nav",{ref:i,"aria-label":(0,l.G)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.c)("navbar","navbar--fixed-top",t&&[Qe.navbarHideable,!s&&Qe.navbarHidden],{"navbar--dark":"dark"===n,"navbar--primary":"primary"===n,"navbar-sidebar--show":a.shown}),children:[e,(0,u.jsx)(Ze,{onClick:a.toggle}),(0,u.jsx)(Ke,{})]})}var Je=n(5684);const et={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function tt(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.c,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function nt({error:e}){const t=(0,Je.getErrorCausalChain)(e).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:et.errorBoundaryError,children:t})}class rt extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const ot="right";function at({width:e=30,height:t=30,className:n,...r}){return(0,u.jsx)("svg",{className:n,width:e,height:t,viewBox:"0 0 30 30","aria-hidden":"true",...r,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function it(){const{toggle:e,shown:t}=(0,j.q)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.G)({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)(at,{})})}const st={colorModeToggle:"colorModeToggle_DEke"};function lt({items:e}){return(0,u.jsx)(u.Fragment,{children:e.map(((e,t)=>(0,u.jsx)(rt,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(Ve,{...e})},t)))})}function ct({left:e,right:t}){return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:e}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:t})]})}function ut(){const e=(0,j.q)(),t=(0,w.y)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??ot)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(ct,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(it,{}),(0,u.jsx)(Y,{}),(0,u.jsx)(lt,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(lt,{items:r}),(0,u.jsx)(W,{className:st.colorModeToggle}),!o&&(0,u.jsx)(ze,{children:(0,u.jsx)(Fe,{})})]})})}function dt(){return(0,u.jsx)(Xe,{children:(0,u.jsx)(ut,{})})}function pt({item:e}){const{to:t,href:n,label:r,prependBaseUrlToHref:o,...a}=e,i=(0,X.c)(t),s=(0,X.c)(n,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Z.c,{className:"footer__link-item",...n?{href:o?s:n}:{to:i},...a,children:[r,n&&!(0,J.c)(n)&&(0,u.jsx)(te.c,{})]})}function ft({item:e}){return e.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(pt,{item:e})},e.href??e.to)}function mt({column:e}){return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:e.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:e.items.map(((e,t)=>(0,u.jsx)(ft,{item:e},t)))})]})}function bt({columns:e}){return(0,u.jsx)("div",{className:"row footer__links",children:e.map(((e,t)=>(0,u.jsx)(mt,{column:e},t)))})}function ht(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function gt({item:e}){return e.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:e.html}}):(0,u.jsx)(pt,{item:e})}function yt({links:e}){return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:e.map(((t,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(gt,{item:t}),e.length!==n+1&&(0,u.jsx)(ht,{})]},n)))})})}function vt({links:e}){return function(e){return"title"in e[0]}(e)?(0,u.jsx)(bt,{columns:e}):(0,u.jsx)(yt,{links:e})}var wt=n(1964);const kt={footerLogoLink:"footerLogoLink_BH7S"};function xt({logo:e}){const{withBaseUrl:t}=(0,X.E)(),n={light:t(e.src),dark:t(e.srcDark??e.src)};return(0,u.jsx)(wt.c,{className:(0,o.c)("footer__logo",e.className),alt:e.alt,sources:n,width:e.width,height:e.height,style:e.style})}function St({logo:e}){return e.href?(0,u.jsx)(Z.c,{href:e.href,className:kt.footerLogoLink,target:e.target,children:(0,u.jsx)(xt,{logo:e})}):(0,u.jsx)(xt,{logo:e})}function _t({copyright:e}){return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:e}})}function Et({style:e,links:t,logo:n,copyright:r}){return(0,u.jsx)("footer",{className:(0,o.c)("footer",{"footer--dark":"dark"===e}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[t,(n||r)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[n&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:n}),r]})]})})}function Ct(){const{footer:e}=(0,w.y)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(Et,{style:o,links:n&&n.length>0&&(0,u.jsx)(vt,{links:n}),logo:r&&(0,u.jsx)(St,{logo:r}),copyright:t&&(0,u.jsx)(_t,{copyright:t})})}const Tt=r.memo(Ct),Pt=(0,N.qY)([D.C,k.qu,A.S2,Ue.gc,i.w7,function({children:e}){return(0,u.jsx)(L.Ub,{children:(0,u.jsx)(j.y,{children:(0,u.jsx)(R,{children:e})})})}]);function jt({children:e}){return(0,u.jsx)(Pt,{children:e})}var At=n(6448);function Nt({error:e,tryAgain:t}){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)(At.c,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.c,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(tt,{onClick:t,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(nt,{error:e})})]})})})}const Lt={mainWrapper:"mainWrapper_z2l0"};function Ot(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,g.W)(),(0,u.jsxs)(jt,{children:[(0,u.jsx)(i.U7,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(P,{}),(0,u.jsx)(dt,{}),(0,u.jsx)("div",{id:d,className:(0,o.c)(h.W.wrapper.main,Lt.mainWrapper,r),children:(0,u.jsx)(a.c,{fallback:e=>(0,u.jsx)(Nt,{...e}),children:t})}),!n&&(0,u.jsx)(Tt,{})]})}},8164:(e,t,n)=>{"use strict";n.d(t,{c:()=>u});n(1504);var r=n(867),o=n(964),a=n(8264),i=n(1824),s=n(1964),l=n(7624);function c({logo:e,alt:t,imageClassName:n}){const r={light:(0,o.c)(e.src),dark:(0,o.c)(e.srcDark||e.src)},a=(0,l.jsx)(s.c,{className:e.className,sources:r,height:e.height,width:e.width,alt:t,style:e.style});return n?(0,l.jsx)("div",{className:n,children:a}):a}function u(e){const{siteConfig:{title:t}}=(0,a.c)(),{navbar:{title:n,logo:s}}=(0,i.y)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.c)(s?.href||"/"),m=n?"":t,b=s?.alt??m;return(0,l.jsxs)(r.c,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:b,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},8712:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});n(1504);var r=n(6952),o=n(7624);function a({locale:e,version:t,tag:n}){const a=e;return(0,o.jsxs)(r.c,{children:[e&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:e}),t&&(0,o.jsx)("meta",{name:"docusaurus_version",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:language",content:a}),t&&(0,o.jsx)("meta",{name:"docsearch:version",content:t}),n&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:n})]})}},1964:(e,t,n)=>{"use strict";n.d(t,{c:()=>u});var r=n(1504),o=n(5420),a=n(3664),i=n(6528);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(7624);function c({className:e,children:t}){const n=(0,a.c)(),{colorMode:c}=(0,i.U)();return(0,l.jsx)(l.Fragment,{children:(n?"dark"===c?["dark"]:["light"]:["light","dark"]).map((n=>{const a=t({theme:n,className:(0,o.c)(e,s.themedComponent,s[`themedComponent--${n}`])});return(0,l.jsx)(r.Fragment,{children:a},n)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:({theme:e,className:n})=>(0,l.jsx)("img",{src:t[e],alt:r,className:n,...o})})}},8448:(e,t,n)=>{"use strict";n.d(t,{U:()=>g,a:()=>c});var r=n(1504),o=n(8684),a=n(5288),i=n(3856),s=n(7624);const l="ease-in-out";function c({initialState:e}){const[t,n]=(0,r.useState)(e??!1),o=(0,r.useCallback)((()=>{n((e=>!e))}),[]);return{collapsed:t,setCollapsed:n,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f({collapsibleRef:e,collapsed:t,animation:n}){const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const r=e.current;function a(){const e=r.scrollHeight,t=n?.duration??function(e){if((0,i.I)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(e);return{transition:`height ${t}ms ${n?.easing??l}`,height:`${e}px`}}function s(){const e=a();r.style.transition=e.transition,r.style.height=e.height}if(!o.current)return p(r,t),void(o.current=!0);return r.style.willChange="height",function(){const e=requestAnimationFrame((()=>{t?(s(),requestAnimationFrame((()=>{r.style.height=u.height,r.style.overflow=u.overflow}))):(r.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(e)}()}),[e,t,n])}function m(e){if(!o.c.canUseDOM)return e?u:d}function b({as:e="div",collapsed:t,children:n,animation:o,onCollapseTransitionEnd:a,className:i,disableSSRStyle:l}){const c=(0,r.useRef)(null);return f({collapsibleRef:c,collapsed:t,animation:o}),(0,s.jsx)(e,{ref:c,style:l?void 0:m(t),onTransitionEnd:e=>{"height"===e.propertyName&&(p(c.current,t),a?.(t))},className:i,children:n})}function h({collapsed:e,...t}){const[n,o]=(0,r.useState)(!e),[i,l]=(0,r.useState)(e);return(0,a.c)((()=>{e||o(!0)}),[e]),(0,a.c)((()=>{n&&l(e)}),[n,e]),n?(0,s.jsx)(b,{...t,collapsed:i}):null}function g({lazy:e,...t}){const n=e?h:b;return(0,s.jsx)(n,{...t})}},3868:(e,t,n)=>{"use strict";n.d(t,{el:()=>b,qu:()=>m});var r=n(1504),o=n(3664),a=n(1148),i=n(1100),s=n(1824),l=n(7624);const c=(0,a.GS)("docusaurus.announcement.dismiss"),u=(0,a.GS)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function m({children:e}){const t=function(){const{announcementBar:e}=(0,s.y)(),t=(0,o.c)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:t,children:e})}function b(){const e=(0,r.useContext)(f);if(!e)throw new i.AH("AnnouncementBarProvider");return e}},6528:(e,t,n)=>{"use strict";n.d(t,{C:()=>h,U:()=>g});var r=n(1504),o=n(8684),a=n(1100),i=n(1148),s=n(1824),l=n(7624);const c=r.createContext(void 0),u="theme",d=(0,i.GS)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>o.c.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),b=e=>{d.set(f(e))};function h({children:e}){const t=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.y)(),[o,a]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)(((t,r={})=>{const{persist:o=!0}=r;t?(a(t),o&&b(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,l.jsx)(c.Provider,{value:t,children:e})}function g(){const e=(0,r.useContext)(c);if(null==e)throw new a.AH("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},4592:(e,t,n)=>{"use strict";n.d(t,{eM:()=>w,gc:()=>g,iy:()=>v});var r=n(1504),o=n(2840),a=n(2488),i=n(1824),s=n(5492),l=n(1100),c=n(1148),u=n(7624);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,c.GS)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.GS)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.GS)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function b(){const e=(0,o.L0)(),t=(0,i.y)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{s(function({pluginIds:e,versionPersistence:t,allDocsData:n}){function r(e){const r=p.read(e,t);return n[e].versions.some((e=>e.name===r))?{preferredVersionName:r}:(p.clear(e,t),{preferredVersionName:null})}return Object.fromEntries(e.map((e=>[e,r(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h({children:e}){const t=b();return(0,u.jsx)(m.Provider,{value:t,children:e})}function g({children:e}){return s.c1?(0,u.jsx)(h,{children:e}):(0,u.jsx)(u.Fragment,{children:e})}function y(){const e=(0,r.useContext)(m);if(!e)throw new l.AH("DocsPreferredVersionContextProvider");return e}function v(e=a.M){const t=(0,o.OK)(e),[n,i]=y(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function w(){const e=(0,o.L0)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},6192:(e,t,n)=>{"use strict";n.d(t,{m:()=>c,y:()=>l});var r=n(1504),o=n(1100),a=n(7624);const i=Symbol("EmptyContext"),s=r.createContext(i);function l({children:e,name:t,items:n}){const o=(0,r.useMemo)((()=>t&&n?{name:t,items:n}:null),[t,n]);return(0,a.jsx)(s.Provider,{value:o,children:e})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.AH("DocsSidebarProvider");return e}},9920:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,Q:()=>s});var r=n(1504),o=n(1100),a=n(7624);const i=r.createContext(null);function s({children:e,version:t}){return(0,a.jsx)(i.Provider,{value:t,children:e})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.AH("DocsVersionProvider");return e}},8200:(e,t,n)=>{"use strict";n.d(t,{q:()=>f,y:()=>p});var r=n(1504),o=n(5168),a=n(1432),i=n(632),s=n(1824),l=n(1100),c=n(7624);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,o.MF)(),{items:t}=(0,s.y)().navbar;return 0===t.length&&!e.component}(),t=(0,a.U)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,i.a4)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function p({children:e}){const t=d();return(0,c.jsx)(u.Provider,{value:t,children:e})}function f(){const e=r.useContext(u);if(void 0===e)throw new l.AH("NavbarMobileSidebarProvider");return e}},5168:(e,t,n)=>{"use strict";n.d(t,{MF:()=>l,Mx:()=>c,Ub:()=>s});var r=n(1504),o=n(1100),a=n(7624);const i=r.createContext(null);function s({children:e}){const t=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:t,children:e})}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.AH("NavbarSecondaryMenuContentProvider");return e[0]}function c({component:e,props:t}){const n=(0,r.useContext)(i);if(!n)throw new o.AH("NavbarSecondaryMenuContentProvider");const[,a]=n,s=(0,o.Mh)(t);return(0,r.useEffect)((()=>{a({component:e,props:s})}),[a,e,s]),(0,r.useEffect)((()=>()=>a({component:null,props:null})),[a]),null}},204:(e,t,n)=>{"use strict";n.d(t,{m:()=>o,W:()=>a});var r=n(1504);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)}}),[])}},7092:(e,t,n)=>{"use strict";n.d(t,{Y:()=>l,a:()=>s});var r=n(1504),o=n(8264),a=n(632);const i="q";function s(){return(0,a.E9)(i)}function l(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,o.c)(),{algolia:{searchPagePath:n}}=t;return(0,r.useCallback)((t=>`${e}${n}?${i}=${encodeURIComponent(t)}`),[e,n])}},1432:(e,t,n)=>{"use strict";n.d(t,{U:()=>s});var r=n(1504),o=n(8684);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s({desktopBreakpoint:e=i}={}){const[t,n]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function t(){n(function(e){if(!o.c.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(e))}return t(),window.addEventListener("resize",t),()=>{window.removeEventListener("resize",t)}}),[e]),t}},5864:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"}}},3856:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{I:()=>r})},5492:(e,t,n)=>{"use strict";n.d(t,{Ab:()=>x,Gw:()=>f,Md:()=>h,Qf:()=>S,Uj:()=>_,b7:()=>k,c1:()=>p,js:()=>w,mg:()=>y});var r=n(1504),o=n(5592),a=n(5464),i=n(2840),s=n(4592),l=n(9920),c=n(6192),u=n(7128),d=n(3376);const p=!!i.L0;function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}const m=(e,t)=>void 0!==e&&(0,d.Sc)(e,t),b=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||b(e.items,t))}function g(e,t){switch(e.type){case"category":return h(e,t)||e.items.some((e=>g(e,t)));case"link":return!e.unlisted||h(e,t);default:return!0}}function y(e,t){return(0,r.useMemo)((()=>e.filter((e=>g(e,t)))),[e,t])}function v({sidebarItems:e,pathname:t,onlyCategories:n=!1}){const r=[];return function e(o){for(const a of o)if("category"===a.type&&((0,d.Sc)(a.href,t)||e(a.items))||"link"===a.type&&(0,d.Sc)(a.href,t)){return n&&"category"!==a.type||r.unshift(a),!0}return!1}(e),r}function w(){const e=(0,c.m)(),{pathname:t}=(0,o.IT)(),n=(0,i.UF)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.wB)(e),{preferredVersion:n}=(0,s.iy)(e),o=(0,i.aA)(e);return(0,r.useMemo)((()=>(0,u.U)([t,n,o].filter(Boolean))),[t,n,o])}function x(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.U)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function _({route:e}){const t=(0,o.IT)(),n=(0,l.E)(),r=e.routes,i=r.find((e=>(0,o.ot)(t.pathname,e)));if(!i)return null;const s=i.sidebar,c=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.k)(r),sidebarName:s,sidebarItems:c}}},8648:(e,t,n)=>{"use strict";n.d(t,{g:()=>o});var r=n(8264);function o(e){const{siteConfig:t}=(0,r.c)(),{title:n,titleDelimiter:o}=t;return e?.trim().length?`${e.trim()} ${o} ${n}`:n}},632:(e,t,n)=>{"use strict";n.d(t,{E9:()=>l,_M:()=>s,a4:()=>i});var r=n(1504),o=n(5592),a=n(1100);function i(e){!function(e){const t=(0,o.Uz)(),n=(0,a.yA)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,o.Uz)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function l(e){const t=s(e)??"",n=function(){const e=(0,o.Uz)();return(0,r.useCallback)(((t,n,r)=>{const o=new URLSearchParams(e.location.search);n?o.set(t,n):o.delete(t),(r?.push?e.push:e.replace)({search:o.toString()})}),[e])}();return[t,(0,r.useCallback)(((t,r)=>{n(e,t,r)}),[n,e])]}},7128:(e,t,n)=>{"use strict";function r(e,t=((e,t)=>e===t)){return e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{U:()=>o,w:()=>r})},3368:(e,t,n)=>{"use strict";n.d(t,{U7:()=>u,cr:()=>p,w7:()=>f});var r=n(1504),o=n(5420),a=n(6952),i=n(5308),s=n(964),l=n(8648),c=n(7624);function u({title:e,description:t,keywords:n,image:r,children:o}){const i=(0,l.g)(e),{withBaseUrl:u}=(0,s.E)(),d=r?u(r,{absolute:!0}):void 0;return(0,c.jsxs)(a.c,{children:[e&&(0,c.jsx)("title",{children:i}),e&&(0,c.jsx)("meta",{property:"og:title",content:i}),t&&(0,c.jsx)("meta",{name:"description",content:t}),t&&(0,c.jsx)("meta",{property:"og:description",content:t}),n&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(n)?n.join(","):n}),d&&(0,c.jsx)("meta",{property:"og:image",content:d}),d&&(0,c.jsx)("meta",{name:"twitter:image",content:d}),o]})}const d=r.createContext(void 0);function p({className:e,children:t}){const n=r.useContext(d),i=(0,o.c)(n,e);return(0,c.jsxs)(d.Provider,{value:i,children:[(0,c.jsx)(a.c,{children:(0,c.jsx)("html",{className:i})}),t]})}function f({children:e}){const t=(0,i.c)(),n=`plugin-${t.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const r=`plugin-id-${t.plugin.id}`;return(0,c.jsx)(p,{className:(0,o.c)(n,r),children:e})}},1100:(e,t,n)=>{"use strict";n.d(t,{AH:()=>l,Mh:()=>c,i0:()=>s,qY:()=>u,yA:()=>i});var r=n(1504),o=n(5288),a=n(7624);function i(e){const t=(0,r.useRef)(e);return(0,o.c)((()=>{t.current=e}),[e]),(0,r.useCallback)(((...e)=>t.current(...e)),[])}function s(e){const t=(0,r.useRef)();return(0,o.c)((()=>{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({children:t})=>(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),t)})}},1064:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{_:()=>r})},3376:(e,t,n)=>{"use strict";n.d(t,{Sc:()=>i,Y5:()=>s});var r=n(1504),o=n(628),a=n(8264);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.c)().siteConfig;return(0,r.useMemo)((()=>function({baseUrl:e,routes:t}){function n(t){return t.path===e&&!0===t.exact}function r(t){return t.path===e&&!t.exact}return function e(t){if(0===t.length)return;return t.find(n)||e(t.filter(r).flatMap((e=>e.routes??[])))}(t)}({routes:o.c,baseUrl:e})),[e])}},3943:(e,t,n)=>{"use strict";n.d(t,{MV:()=>m,S2:()=>u,SM:()=>f,yI:()=>b});var r=n(1504),o=n(8684),a=n(3664),i=n(5288),s=n(1100),l=n(7624);const c=r.createContext(void 0);function u({children:e}){const t=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(c.Provider,{value:t,children:e})}function d(){const e=(0,r.useContext)(c);if(null==e)throw new s.AH("ScrollControllerProvider");return e}const p=()=>o.c.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t=[]){const{scrollEventsEnabledRef:n}=d(),o=(0,r.useRef)(p()),a=(0,s.yA)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=p();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 m(){const e=d(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.c)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function b(){const e=(0,r.useRef)(null),t=(0,a.c)()&&"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?.()}}},4456:(e,t,n)=>{"use strict";n.d(t,{SE:()=>s,e6:()=>i,mY:()=>l});var r=n(2840),o=n(8264),a=n(4592);const i="default";function s(e,t){return`docs-${e}-${t}`}function l(){const{i18n:e}=(0,o.c)(),t=(0,r.L0)(),n=(0,r.mU)(),l=(0,a.eM)();const c=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=l[e],a=t[e].versions.find((e=>e.isLast));return s(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:c}}},1148:(e,t,n)=>{"use strict";n.d(t,{GS:()=>c,IN:()=>u});var r=n(1504);const o="localStorage";function a({key:e,oldValue:t,newValue:n,storage:r}){if(t===n)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,e,t,n,window.location.href,r),window.dispatchEvent(o)}function i(e=o){if("undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){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=i(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({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),a({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),()=>{}}}}}function u(e,t){const n=(0,r.useRef)((()=>null===e?l:c(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,r.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},1616:(e,t,n)=>{"use strict";n.d(t,{D:()=>i});var r=n(8264),o=n(5592),a=n(5684);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.c)(),{pathname:l}=(0,o.IT)(),c=(0,a.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function({locale:e,fullyQualified:n}){return`${n?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(e)}${d}`}}}},7124:(e,t,n)=>{"use strict";n.d(t,{c:()=>i});var r=n(1504),o=n(5592),a=n(1100);function i(e){const t=(0,o.IT)(),n=(0,a.i0)(t),i=(0,a.yA)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},1824:(e,t,n)=>{"use strict";n.d(t,{y:()=>o});var r=n(8264);function o(){return(0,r.c)().siteConfig.themeConfig}},8589:(e,t,n)=>{"use strict";n.d(t,{E:()=>o});var r=n(8264);function o(){const{siteConfig:{themeConfig:e}}=(0,r.c)();return e}},9032:(e,t,n)=>{"use strict";n.d(t,{Q:()=>s});var r=n(1504),o=n(1064),a=n(964),i=n(8589);function s(){const{withBaseUrl:e}=(0,a.E)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:n}}=(0,i.E)();return(0,r.useCallback)((r=>{const a=new URL(r);if((0,o._)(t,a.href))return r;const i=`${a.pathname+a.hash}`;return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(i,n))}),[e,t,n])}},1600:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=void 0;const r=n(2112);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,n?o(l):a(l));var l;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a},4292:(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]}},5684:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(1600);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return o.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return o.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return o.removeTrailingSlash}});var a=n(2112);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return a.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return a.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return a.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return a.removePrefix}});var i=n(4292);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},2112:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=void 0,t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},8064:(e,t,n)=>{"use strict";n.d(t,{iU:()=>w,Yf:()=>C,gh:()=>f,Wi:()=>P,Ep:()=>p});var r=n(5072);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!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(4812);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.c)({},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=f(e,t,b(),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(2168),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,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),b=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}}},9600:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},1462:(e,t,n)=>{"use strict";n.r(t)},1496:(e,t,n)=>{"use strict";n.r(t)},2272: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))&&f(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&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,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:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},6872:(e,t,n)=>{var r=n(9600);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;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],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var m=e[i],b=n[2],h=n[3],g=n[4],y=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=b&&null!=m&&m!==b,x="+"===v||"*"===v,S="?"===v||"*"===v,_=n[2]||u,E=g||y;r.push({name:h||a++,prefix:b||"",delimiter:_,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:E?c(E):w?".*":"[^"+l(_)+"]+?"})}}return i{!function(e){function t(e,t){return e.replace(/<<(\d+)>>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,r){return RegExp(t(e,n),r||"")}function r(e,t){for(var n=0;n>/g,(function(){return"(?:"+e+")"}));return e.replace(/<>/g,"[^\\s\\S]")}var o="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",a="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",s="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var c=l(a),u=RegExp(l(o+" "+a+" "+i+" "+s)),d=l(a+" "+i+" "+s),p=l(o+" "+a+" "+s),f=r(/<(?:[^<>;=+\-*/%&|^]|<>)*>/.source,2),m=r(/\((?:[^()]|<>)*\)/.source,2),b=/@?\b[A-Za-z_]\w*\b/.source,h=t(/<<0>>(?:\s*<<1>>)?/.source,[b,f]),g=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,h]),y=/\[\s*(?:,\s*)*\]/.source,v=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[g,y]),w=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[f,m,y]),k=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[w]),x=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[k,g,y]),S={keyword:u,punctuation:/[<>()?,.:[\]]/},_=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,E=/"(?:\\.|[^\\"\r\n])*"/.source,C=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[C]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[E]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[g]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[b,x]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[b]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[c,h]),lookbehind:!0,inside:S},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[g]),lookbehind:!0,inside:S},{pattern:n(/(\bwhere\s+)<<0>>/.source,[b]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[v]),lookbehind:!0,inside:S},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[x,p,b]),inside:S}],keyword:u,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[b]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[b]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[m]),lookbehind:!0,alias:"class-name",inside:S},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[x,g]),inside:S,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[x]),lookbehind:!0,inside:S,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[b,f]),inside:{function:n(/^<<0>>/.source,[b]),generic:{pattern:RegExp(f),alias:"class-name",inside:S}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[c,h,b,x,u.source,m,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[h,m]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:u,"class-name":{pattern:RegExp(x),greedy:!0,inside:S},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var T=E+"|"+_,P=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[T]),j=r(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[P]),2),A=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,N=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[g,j]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[A,N]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[A]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[j]),inside:e.languages.csharp},"class-name":{pattern:RegExp(g),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var L=/:[^}\r\n]+/.source,O=r(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[P]),2),R=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[O,L]),I=r(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<>*\)/.source,[T]),2),M=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[I,L]);function F(t,r){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[t]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[r,L]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[R]),lookbehind:!0,greedy:!0,inside:F(R,O)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[M]),lookbehind:!0,greedy:!0,inside:F(M,I)}],char:{pattern:RegExp(_),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(Prism)},1808:()=>{!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],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++o;var b=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),g=p.substring(m+f.length),y=[];b&&y.push.apply(y,i([b])),y.push(h),g&&y.push.apply(y,i([g])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},9016:(e,t,n)=>{var r={"./prism-csharp":7952};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=9016},9776:(e,t,n)=>{"use strict";var r=n(9143);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}},3268:(e,t,n)=>{e.exports=n(9776)()},9143:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},9516:(e,t,n)=>{"use strict";var r=n(1504),o=n(4712);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n