\n"})}),"\n",(0,n.jsx)(r.p,{children:"Assuming sketches are within some outer boundary with size outerArea,\ncalculates the area of each sketch and the proportion of outerArea they take up."}),"\n",(0,n.jsx)(r.h2,{id:"parameters",children:"Parameters"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Parameter"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"metricId"})}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"string"})}),(0,n.jsx)(r.td,{children:"Metric identifier"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"sketch"})}),(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Sketch",children:(0,n.jsx)(r.code,{children:"Sketch"})}),"<",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,n.jsx)(r.code,{children:"Polygon"})}),"> | ",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchCollection",children:(0,n.jsx)(r.code,{children:"SketchCollection"})}),"<",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,n.jsx)(r.code,{children:"Polygon"})}),">"]}),(0,n.jsx)(r.td,{children:"single sketch or collection."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"outerArea"})}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"number"})}),(0,n.jsx)(r.td,{children:"area of outer boundary (typically EEZ or planning area)"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"options"})}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"object"})}),(0,n.jsx)(r.td,{children:"-"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.code,{children:"options.includeChildMetrics"}),"?"]}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"boolean"})}),(0,n.jsx)(r.td,{children:"If sketch collection, will include its child sketch metrics in addition to collection metrics, defaults to true"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.code,{children:"options.includePercMetric"}),"?"]}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"boolean"})}),(0,n.jsx)(r.td,{children:"Includes metrics with percent of total area, in addition to raw area value metrics, defaults to true"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.code,{children:"options.simplifyTolerance"}),"?"]}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"number"})}),(0,n.jsx)(r.td,{children:"simplify sketches with tolerance in degrees. .000001 is a good first value to try. only used for calculating area of collection (avoiding clip union to remove overlap blowing up)"})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"returns",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"Promise"}),"<",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metric",children:(0,n.jsx)(r.code,{children:"Metric"})}),"[]>"]})]})}function h(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},28453:(e,r,s)=>{s.d(r,{R:()=>c,x:()=>o});var n=s(96540);const t={},i=n.createContext(t);function c(e){const r=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),n.createElement(i.Provider,{value:r},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/51c12c5f.e9820340.js b/assets/js/51c12c5f.e9820340.js
new file mode 100644
index 0000000000..9b99144447
--- /dev/null
+++ b/assets/js/51c12c5f.e9820340.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[34321],{27812:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>t,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var r=n(74848),o=n(28453);const i={},t="clipMultiMerge()",c={id:"api/geoprocessing/functions/clipMultiMerge",title:"clipMultiMerge()",description:"Performs clip after first merging features2 coords into a single multipolygon.",source:"@site/docs/api/geoprocessing/functions/clipMultiMerge.md",sourceDirName:"api/geoprocessing/functions",slug:"/api/geoprocessing/functions/clipMultiMerge",permalink:"/geoprocessing/docs/next/api/geoprocessing/functions/clipMultiMerge",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/geoprocessing/functions/clipMultiMerge.md",tags:[],version:"current",frontMatter:{}},l={},d=[{value:"Type Parameters",id:"type-parameters",level:2},{value:"Parameters",id:"parameters",level:2},{value:"Returns",id:"returns",level:2},{value:"Todo",id:"todo",level:2}];function a(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"clipmultimerge",children:"clipMultiMerge()"})}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-ts",children:"function clipMultiMerge(\n feature1, \n features2, \n operation, \n options): Feature | null\n"})}),"\n",(0,r.jsx)(s.p,{children:"Performs clip after first merging features2 coords into a single multipolygon.\nAvoids errors in underlying clipping library when too many features in features2"}),"\n",(0,r.jsx)(s.h2,{id:"type-parameters",children:"Type Parameters"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Type Parameter"}),(0,r.jsx)(s.th,{children:"Default type"})]})}),(0,r.jsx)(s.tbody,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"P"})," ",(0,r.jsx)(s.em,{children:"extends"})," ",(0,r.jsx)(s.code,{children:"undefined"})," | ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(s.code,{children:"GeoJsonProperties"})})]}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(s.code,{children:"GeoJsonProperties"})})})]})})]}),"\n",(0,r.jsx)(s.h2,{id:"parameters",children:"Parameters"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Parameter"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"feature1"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,r.jsx)(s.code,{children:"Feature"})}),"<",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,r.jsx)(s.code,{children:"Polygon"})})," | ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,r.jsx)(s.code,{children:"MultiPolygon"})}),", ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(s.code,{children:"GeoJsonProperties"})}),">"]}),(0,r.jsx)(s.td,{children:"polygon or multipolygon to clip"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"features2"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureCollection",children:(0,r.jsx)(s.code,{children:"FeatureCollection"})}),"<",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,r.jsx)(s.code,{children:"Polygon"})})," | ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,r.jsx)(s.code,{children:"MultiPolygon"})}),", ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(s.code,{children:"GeoJsonProperties"})}),">"]}),(0,r.jsx)(s.td,{children:"collection of polygons or multipolygons to clip feature1 against"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"operation"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:'"intersection"'})," | ",(0,r.jsx)(s.code,{children:'"difference"'})," | ",(0,r.jsx)(s.code,{children:'"xor"'})," | ",(0,r.jsx)(s.code,{children:'"union"'})]}),(0,r.jsx)(s.td,{children:'one of "union", "intersection", "xor", "difference"'})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"options"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"object"})}),(0,r.jsx)(s.td,{children:"-"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"options.properties"}),"?"]}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"P"})}),(0,r.jsx)(s.td,{children:"properties to set on the resulting feature"})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"returns",children:"Returns"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,r.jsx)(s.code,{children:"Feature"})}),"<",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,r.jsx)(s.code,{children:"Polygon"})})," | ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,r.jsx)(s.code,{children:"MultiPolygon"})}),"> | ",(0,r.jsx)(s.code,{children:"null"})]}),"\n",(0,r.jsx)(s.p,{children:"polygon or multipolygon feature result from clip operation, if no overlap then returns null"}),"\n",(0,r.jsx)(s.h2,{id:"todo",children:"Todo"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"migrate back to using turf now that it supports multiple features as second argument"}),"\n"]})]})}function p(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>t,x:()=>c});var r=n(96540);const o={},i=r.createContext(o);function t(e){const s=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(i.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/51c12c5f.f47da27c.js b/assets/js/51c12c5f.f47da27c.js
deleted file mode 100644
index 52b8088ecc..0000000000
--- a/assets/js/51c12c5f.f47da27c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[34321],{27812:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var r=s(74848),o=s(28453);const i={},t="clipMultiMerge()",c={id:"api/geoprocessing/functions/clipMultiMerge",title:"clipMultiMerge()",description:"Performs clip after first merging features2 coords into a single multipolygon.",source:"@site/docs/api/geoprocessing/functions/clipMultiMerge.md",sourceDirName:"api/geoprocessing/functions",slug:"/api/geoprocessing/functions/clipMultiMerge",permalink:"/geoprocessing/docs/next/api/geoprocessing/functions/clipMultiMerge",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/geoprocessing/functions/clipMultiMerge.md",tags:[],version:"current",frontMatter:{}},l={},d=[{value:"Type Parameters",id:"type-parameters",level:2},{value:"Parameters",id:"parameters",level:2},{value:"Returns",id:"returns",level:2},{value:"Todo",id:"todo",level:2}];function a(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"clipmultimerge",children:"clipMultiMerge()"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"function clipMultiMerge(\n feature1, \n features2, \n operation, \n options): Feature | null\n"})}),"\n",(0,r.jsx)(n.p,{children:"Performs clip after first merging features2 coords into a single multipolygon.\nCan perform better than regular clip and help avoid errors in underlying library when running against many features."}),"\n",(0,r.jsx)(n.h2,{id:"type-parameters",children:"Type Parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Type Parameter"}),(0,r.jsx)(n.th,{children:"Default type"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"P"})," ",(0,r.jsx)(n.em,{children:"extends"})," ",(0,r.jsx)(n.code,{children:"undefined"})," | ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(n.code,{children:"GeoJsonProperties"})})]}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(n.code,{children:"GeoJsonProperties"})})})]})})]}),"\n",(0,r.jsx)(n.h2,{id:"parameters",children:"Parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Parameter"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feature1"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,r.jsx)(n.code,{children:"Feature"})}),"<",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,r.jsx)(n.code,{children:"Polygon"})})," | ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,r.jsx)(n.code,{children:"MultiPolygon"})}),", ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(n.code,{children:"GeoJsonProperties"})}),">"]}),(0,r.jsx)(n.td,{children:"polygon or multipolygon to clip"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"features2"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureCollection",children:(0,r.jsx)(n.code,{children:"FeatureCollection"})}),"<",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,r.jsx)(n.code,{children:"Polygon"})})," | ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,r.jsx)(n.code,{children:"MultiPolygon"})}),", ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(n.code,{children:"GeoJsonProperties"})}),">"]}),(0,r.jsx)(n.td,{children:"collection of polygons or multipolygons to clip feature1 against"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"operation"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:'"union"'})," | ",(0,r.jsx)(n.code,{children:'"intersection"'})," | ",(0,r.jsx)(n.code,{children:'"xor"'})," | ",(0,r.jsx)(n.code,{children:'"difference"'})]}),(0,r.jsx)(n.td,{children:'one of "union", "intersection", "xor", "difference"'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"options"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object"})}),(0,r.jsx)(n.td,{children:"-"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"options.properties"}),"?"]}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"P"})}),(0,r.jsx)(n.td,{children:"properties to set on the resulting feature"})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"returns",children:"Returns"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,r.jsx)(n.code,{children:"Feature"})}),"<",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,r.jsx)(n.code,{children:"Polygon"})})," | ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,r.jsx)(n.code,{children:"MultiPolygon"})}),"> | ",(0,r.jsx)(n.code,{children:"null"})]}),"\n",(0,r.jsx)(n.p,{children:"polygon or multipolygon feature result from clip operation, if no overlap then returns null"}),"\n",(0,r.jsx)(n.h2,{id:"todo",children:"Todo"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"migrate back to using turf now that it supports multiple features as second argument"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>c});var r=s(96540);const o={},i=r.createContext(o);function t(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/5e8c322a.82f39127.js b/assets/js/5e8c322a.82f39127.js
deleted file mode 100644
index 89fa91f50a..0000000000
--- a/assets/js/5e8c322a.82f39127.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[50594],{83478:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>a});var s=n(74848),i=n(28453);const r={},o="Typescript API",c={id:"api/index",title:"Typescript API",description:"Modules",source:"@site/docs/api/index.md",sourceDirName:"api",slug:"/api/",permalink:"/geoprocessing/docs/next/api/",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/index.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Accuracy/Limitations",permalink:"/geoprocessing/docs/next/EdgesAndLimits"},next:{title:"Extending",permalink:"/geoprocessing/docs/next/extending"}},d={},a=[{value:"Modules",id:"modules",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"typescript-api",children:"Typescript API"})}),"\n",(0,s.jsx)(t.h2,{id:"modules",children:"Modules"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Module"}),(0,s.jsx)(t.th,{children:"Description"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/geoprocessing/docs/next/api/client-core/",children:"client-core"})}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.code,{children:"client-ui"})," provides everything for creating geoprocessing client interface, except for individual React Components. It provides everthing you need to work with sketches, call geoprocessing functions, transform and format data (metric results, geojson types, numbers), and input it to the React components."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/geoprocessing/docs/next/api/client-ui/",children:"client-ui"})}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.code,{children:"client-ui"})," provides all of the core React UI components for geoprocessing projects, including the building blocks for creating custom UI components needed by a project. Run the ",(0,s.jsx)(t.code,{children:"storybook"})," command to explore them interactively."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/geoprocessing/docs/next/api/dataproviders/",children:"dataproviders"})}),(0,s.jsx)(t.td,{children:"-"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/geoprocessing/docs/next/api/geoprocessing/",children:"geoprocessing"})}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.code,{children:"geoprocessing"})," is the main module used by a geoprocessing project. It includes everything needing for creating, building, testing, and deploying a geoprocessing project with the exception of UI components which are exported separately in ",(0,s.jsx)(t.code,{children:"client-ui"}),"."]})]})]})]})]})}function p(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>c});var s=n(96540);const i={},r=s.createContext(i);function o(e){const t=s.useContext(r);return s.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:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/5e8c322a.f0f5d22d.js b/assets/js/5e8c322a.f0f5d22d.js
new file mode 100644
index 0000000000..0f3914f9b5
--- /dev/null
+++ b/assets/js/5e8c322a.f0f5d22d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[50594],{83478:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>a});var s=n(74848),i=n(28453);const o={},r="Typescript API",c={id:"api/index",title:"Typescript API",description:"Modules",source:"@site/docs/api/index.md",sourceDirName:"api",slug:"/api/",permalink:"/geoprocessing/docs/next/api/",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/index.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Codespaces",permalink:"/geoprocessing/docs/next/codespaces/"},next:{title:"Extending",permalink:"/geoprocessing/docs/next/extending"}},d={},a=[{value:"Modules",id:"modules",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"typescript-api",children:"Typescript API"})}),"\n",(0,s.jsx)(t.h2,{id:"modules",children:"Modules"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Module"}),(0,s.jsx)(t.th,{children:"Description"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/geoprocessing/docs/next/api/client-core/",children:"client-core"})}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.code,{children:"client-ui"})," provides everything for creating geoprocessing client interface, except for individual React Components. It provides everthing you need to work with sketches, call geoprocessing functions, transform and format data (metric results, geojson types, numbers), and input it to the React components."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/geoprocessing/docs/next/api/client-ui/",children:"client-ui"})}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.code,{children:"client-ui"})," provides all of the core React UI components for geoprocessing projects, including the building blocks for creating custom UI components needed by a project. Run the ",(0,s.jsx)(t.code,{children:"storybook"})," command to explore them interactively."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/geoprocessing/docs/next/api/dataproviders/",children:"dataproviders"})}),(0,s.jsx)(t.td,{children:"-"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/geoprocessing/docs/next/api/geoprocessing/",children:"geoprocessing"})}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.code,{children:"geoprocessing"})," is the main module used by a geoprocessing project. It includes everything needing for creating, building, testing, and deploying a geoprocessing project with the exception of UI components which are exported separately in ",(0,s.jsx)(t.code,{children:"client-ui"}),"."]})]})]})]})]})}function p(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>c});var s=n(96540);const i={},o=s.createContext(i);function r(e){const t=s.useContext(o);return s.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:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/5fab0d7b.0bc1de17.js b/assets/js/5fab0d7b.f2e8165a.js
similarity index 96%
rename from assets/js/5fab0d7b.0bc1de17.js
rename to assets/js/5fab0d7b.f2e8165a.js
index 0d95fda77c..8b7042dec4 100644
--- a/assets/js/5fab0d7b.0bc1de17.js
+++ b/assets/js/5fab0d7b.f2e8165a.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[86180],{12754:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var r=n(74848),i=n(28453);const s={},a="Accuracy/Limitations",o={id:"EdgesAndLimits",title:"Accuracy/Limitations",description:"Javascript-only",source:"@site/docs/EdgesAndLimits.md",sourceDirName:".",slug:"/EdgesAndLimits",permalink:"/geoprocessing/docs/next/EdgesAndLimits",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/EdgesAndLimits.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Architecture",permalink:"/geoprocessing/docs/next/architecture"},next:{title:"Typescript API",permalink:"/geoprocessing/docs/next/api/"}},c={},l=[{value:"Javascript-only",id:"javascript-only",level:3},{value:"Coordinate System Support",id:"coordinate-system-support",level:3},{value:"Calculation Error",id:"calculation-error",level:3},{value:"TurfJS",id:"turfjs",level:4}];function d(e){const t={a:"a",h1:"h1",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"accuracylimitations",children:"Accuracy/Limitations"})}),"\n",(0,r.jsx)(t.h3,{id:"javascript-only",children:"Javascript-only"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"The geoprocessing library currently only supports geoprocessing functions that run in a NodeJS environment. You have the ability to invoke any Lambda function, the framework just doesn't have first class support for writing and publishing functions in any other languages."}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"coordinate-system-support",children:"Coordinate System Support"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Vector data, on import, is converted to WGS 84 (EPSG 4326). Vector toolbox functions expect data to be in this projection."}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Raster data, on import, is converted to an equal area projection (NSIDC EASE-Grid 2.0 Global)[",(0,r.jsx)(t.a,{href:"https://epsg.io/6933",children:"https://epsg.io/6933"}),"]."," Raster toolbox functions should work with any grid-based projection but anything other than equal area will have accuract issues."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Geoprocessing functions in this library currently only support GeoJSON data in the World Geodetic System 1984 (WGS 84) [WGS84] datum (aka Lat/Lon), with longitude and latitude units of decimal degrees."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"calculation-error",children:"Calculation Error"}),"\n",(0,r.jsx)(t.h4,{id:"turfjs",children:"TurfJS"}),"\n",(0,r.jsxs)(t.p,{children:["TurfJS vector function (particularly those that use ",(0,r.jsx)(t.a,{href:"http://turfjs.org/docs/#distance",children:"Turf.JS"}),") measure distance and area by approximating them on a sphere. Turf.js functions strike a balance between speed and accuracy."]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"If the geographic area of your project is small, on the order of a few hundred to a thousand miles, and not at high latitudes (> 60), then the accuracy will be quite good, and the error quite small (within 5%) compared to more exact algorithms."}),"\n",(0,r.jsx)(t.li,{children:"And if your planning objectives target creating areas that capture a given % of something, for example 20% of the rocky reef habitat in the entire planning area, then the effect of error in area calculations should be limited to none as long as the area calculations are done using the same algorithms."}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Sources:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://blog.mapbox.com/fast-geodesic-approximations-with-cheap-ruler-106f229ad016",children:"Fast Geodesic Approximations"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.movable-type.co.uk/scripts/latlong.html",children:"Calculate distance, bearing and more between Latitude/Longitude points"})}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Haversine_formula",children:"Haversine Formula on Wikipedia"}),". Used by ",(0,r.jsx)(t.a,{href:"https://github.com/Turfjs/turf/tree/master/packages/turf-distance",children:"turf-distance"}),". Error up to 0.5%"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://sgp1.digitaloceanspaces.com/proletarian-library/books/5cc63c78dc09ee09864293f66e2716e2.pdf",children:"Some algorithms for polygons on a sphere"})," - used by ",(0,r.jsx)(t.a,{href:"http://turfjs.org/docs/#area",children:"turf-area"}),". Greater error at higher latitudes vs. Vincenty."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Vincenty%27s_formulae",children:"Vincenty algorithm"})," used by ",(0,r.jsx)(t.a,{href:"https://github.com/Turfjs/turf-vincenty-inverse",children:"turf-vincenty-inverse"})]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://datatracker.ietf.org/doc/html/rfc7946#section-4",children:"GeoJSON spec WGS84 requirement"}),"."]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>o});var r=n(96540);const i={},s=r.createContext(i);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[86180],{12754:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var r=n(74848),i=n(28453);const s={},a="Accuracy/Limitations",o={id:"EdgesAndLimits",title:"Accuracy/Limitations",description:"Javascript-only",source:"@site/docs/EdgesAndLimits.md",sourceDirName:".",slug:"/EdgesAndLimits",permalink:"/geoprocessing/docs/next/EdgesAndLimits",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/EdgesAndLimits.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Skill Building",permalink:"/geoprocessing/docs/next/skills"},next:{title:"System Setup",permalink:"/geoprocessing/docs/next/tutorials/"}},c={},l=[{value:"Javascript-only",id:"javascript-only",level:3},{value:"Coordinate System Support",id:"coordinate-system-support",level:3},{value:"Calculation Error",id:"calculation-error",level:3},{value:"TurfJS",id:"turfjs",level:4}];function d(e){const t={a:"a",h1:"h1",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"accuracylimitations",children:"Accuracy/Limitations"})}),"\n",(0,r.jsx)(t.h3,{id:"javascript-only",children:"Javascript-only"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"The geoprocessing library currently only supports geoprocessing functions that run in a NodeJS environment. You have the ability to invoke any Lambda function, the framework just doesn't have first class support for writing and publishing functions in any other languages."}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"coordinate-system-support",children:"Coordinate System Support"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Vector data, on import, is converted to WGS 84 (EPSG 4326). Vector toolbox functions expect data to be in this projection."}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Raster data, on import, is converted to an equal area projection (NSIDC EASE-Grid 2.0 Global)[",(0,r.jsx)(t.a,{href:"https://epsg.io/6933",children:"https://epsg.io/6933"}),"]."," Raster toolbox functions should work with any grid-based projection but anything other than equal area will have accuract issues."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Geoprocessing functions in this library currently only support GeoJSON data in the World Geodetic System 1984 (WGS 84) [WGS84] datum (aka Lat/Lon), with longitude and latitude units of decimal degrees."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"calculation-error",children:"Calculation Error"}),"\n",(0,r.jsx)(t.h4,{id:"turfjs",children:"TurfJS"}),"\n",(0,r.jsxs)(t.p,{children:["TurfJS vector function (particularly those that use ",(0,r.jsx)(t.a,{href:"http://turfjs.org/docs/#distance",children:"Turf.JS"}),") measure distance and area by approximating them on a sphere. Turf.js functions strike a balance between speed and accuracy."]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"If the geographic area of your project is small, on the order of a few hundred to a thousand miles, and not at high latitudes (> 60), then the accuracy will be quite good, and the error quite small (within 5%) compared to more exact algorithms."}),"\n",(0,r.jsx)(t.li,{children:"And if your planning objectives target creating areas that capture a given % of something, for example 20% of the rocky reef habitat in the entire planning area, then the effect of error in area calculations should be limited to none as long as the area calculations are done using the same algorithms."}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Sources:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://blog.mapbox.com/fast-geodesic-approximations-with-cheap-ruler-106f229ad016",children:"Fast Geodesic Approximations"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://www.movable-type.co.uk/scripts/latlong.html",children:"Calculate distance, bearing and more between Latitude/Longitude points"})}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Haversine_formula",children:"Haversine Formula on Wikipedia"}),". Used by ",(0,r.jsx)(t.a,{href:"https://github.com/Turfjs/turf/tree/master/packages/turf-distance",children:"turf-distance"}),". Error up to 0.5%"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://sgp1.digitaloceanspaces.com/proletarian-library/books/5cc63c78dc09ee09864293f66e2716e2.pdf",children:"Some algorithms for polygons on a sphere"})," - used by ",(0,r.jsx)(t.a,{href:"http://turfjs.org/docs/#area",children:"turf-area"}),". Greater error at higher latitudes vs. Vincenty."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Vincenty%27s_formulae",children:"Vincenty algorithm"})," used by ",(0,r.jsx)(t.a,{href:"https://github.com/Turfjs/turf-vincenty-inverse",children:"turf-vincenty-inverse"})]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://datatracker.ietf.org/doc/html/rfc7946#section-4",children:"GeoJSON spec WGS84 requirement"}),"."]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>o});var r=n(96540);const i={},s=r.createContext(i);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/61695351.2e87f03f.js b/assets/js/61695351.2e87f03f.js
new file mode 100644
index 0000000000..186011acef
--- /dev/null
+++ b/assets/js/61695351.2e87f03f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[61993],{66330:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var s=t(74848),i=t(28453);const o={slug:"/concepts"},a="Concepts",r={id:"concepts/Concepts",title:"Concepts",description:"Geoprocessing projects built with this framework support step #2 and #4 in the following planning workflow, the SeaSketch platform supports the rest. They work together to provide a complete solution.",source:"@site/docs/concepts/Concepts.md",sourceDirName:"concepts",slug:"/concepts",permalink:"/geoprocessing/docs/next/concepts",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/concepts/Concepts.md",tags:[],version:"current",frontMatter:{slug:"/concepts"},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/geoprocessing/docs/next/"},next:{title:"Advanced Concepts",permalink:"/geoprocessing/docs/next/concepts/AdvancedConcepts"}},c={},l=[{value:"Terminology",id:"terminology",level:2},{value:"Marine Spatial Planning Terminology",id:"marine-spatial-planning-terminology",level:3},{value:"Classification System",id:"classification-system",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"concepts",children:"Concepts"})}),"\n",(0,s.jsxs)(n.p,{children:["Geoprocessing projects built with this framework support step #2 and #4 in the following planning workflow, the ",(0,s.jsx)(n.a,{href:"https://docs.seasketch.org/seasketch-documentation",children:"SeaSketch platform"})," supports the rest. They work together to provide a complete solution."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Allow a user to draw a design (sketch) and define attributes (e.g. allowed activities, etc.)."}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Preprocess that sketch to ensure it meets project guidelines, for example to ensure that it has a valid shape and is within the designated planning area."})}),"\n",(0,s.jsx)(n.li,{children:"Allow a user to organize one or more sketches into a proposal (collection)."}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Provide feedback (reports) on how well sketches and sketch collections meet measurable planning objectives and their targets (using geoprocessing functions)."})}),"\n",(0,s.jsx)(n.li,{children:"Allow users to share and iterate on designs as a group until they come to a decision."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"System Model",src:t(23999).A+"",title:"System Model Basic",width:"692",height:"273"})}),"\n",(0,s.jsx)(n.h2,{id:"terminology",children:"Terminology"}),"\n",(0,s.jsxs)(n.p,{children:["There are a number of terms and concepts to be familiar with. Many of them are implemented as features of the framework, which you can learn more about on the ",(0,s.jsx)(n.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts",children:"advanced concepts"})," page."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Goal"})," - also known as vision or aim. These are general summaries of the desired future state of an area."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Example - Protect biological diversity, productivity, and ecological function across all habitat types"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Objective"})," - These are specific statements that describe how a planning goal will be reached and are typically measurable or quantifiable in some way."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Example - Designate a minimum of 20% of planning area as protected areas."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Target"})," - The measurement to reach to say that an objective has been met."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Example - 20% of the EEZ, 15% of a species habitat within planning area,"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Metric"})," - an individual piece of data, a measurement. For example a spatial statistic or an area calculation."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Sketch"})," - a user-drawn feature, typically a Polygon, that can be shared, further altered or put into a Sketch Collection. A Sketch is an extension of a GeoJSON ",(0,s.jsx)(n.a,{href:"https://www.rfc-editor.org/rfc/rfc7946#section-3.2",children:"Feature"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Geography"})," - one or more geographic boundaries for the project. Primarily used to define project planning boundaries."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Datasource"})," - a published dataset within the project. It can be either Vector or Raster spatial data. A datasource can contain vector features that define the extent of a Geography or provide spatial data for calculating Metrics for sketches."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Here's a couple examples putting it all together:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A polygon boundary Datasource containing a countries Exclusive Economic Zone is used to measure what % of the EEZ a proposed area covers."}),"\n",(0,s.jsx)(n.li,{children:"A coral reef Datasource can be used to measure whether a proposed area covers at least 50% of each coral type."}),"\n",(0,s.jsx)(n.li,{children:"A geomorphology Datasource can be used to measure whether a proposed area covers at least 20% of each seabottom type."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"marine-spatial-planning-terminology",children:"Marine Spatial Planning Terminology"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"MPA"})," - marine protected area. An area designated for marine protection with defined allowed uses."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Territorial Sea"})," - A belt of coastal waters extending at most 12 nautical miles from the baseline (usually the mean low-water mark) of a coastal state."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"EEZ"}),' - exclusive economic zone aka "Offshore". An area of the sea in which a sovereign state has exclusive rights regarding the exploration and use of marine resources. It stretches from the outer edge of the territorial sea, 12 nautical miles out from the baseline, to 200 nautical miles. May also be defined as the "Offshore".']}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Nearshore"})," - a shorthand name used in marine planning projects, which often matches up with the definition of Territorial Sea, but it may not."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Offshore"})," - a shorthand name used in marine planning projects, which often matches up with the definition of EEZ, but it may not."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"classification-system",children:"Classification System"}),"\n",(0,s.jsxs)(n.p,{children:["Planning processes may leverage a ",(0,s.jsx)(n.code,{children:"classification system"})," for defining what levels of protection can be assigned to proposed areas. They then decide what protection levels are required at minimum to count towards meeting a planning objective. Marine Protected Areas or MPA's for example have multiple ",(0,s.jsx)(n.a,{href:"https://docs.google.com/document/d/1i0baxgK8JEUjtU8mnzFiG5VB_gO8lmxCrAtJ5rltk30/edit?usp=sharing",children:"classification schemes"})," to choose from."]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},23999:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/SystemModelBasic-ddf0991220dfb310cea956f818249dd0.jpg"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>r});var s=t(96540);const i={},o=s.createContext(i);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/61695351.ae226d7b.js b/assets/js/61695351.ae226d7b.js
deleted file mode 100644
index 83c2c9e3aa..0000000000
--- a/assets/js/61695351.ae226d7b.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[61993],{66330:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var s=t(74848),i=t(28453);const o={slug:"/concepts"},a="Concepts",r={id:"concepts/Concepts",title:"Concepts",description:"Geoprocessing projects built with this framework support step #2 and #4 in the following planning workflow, the SeaSketch platform supports the rest. They work together to provide a complete solution.",source:"@site/docs/concepts/Concepts.md",sourceDirName:"concepts",slug:"/concepts",permalink:"/geoprocessing/docs/next/concepts",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/concepts/Concepts.md",tags:[],version:"current",frontMatter:{slug:"/concepts"},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/geoprocessing/docs/next/"},next:{title:"System Setup",permalink:"/geoprocessing/docs/next/tutorials/"}},c={},l=[{value:"Terminology",id:"terminology",level:2},{value:"Marine Spatial Planning Terminology",id:"marine-spatial-planning-terminology",level:3},{value:"Classification System",id:"classification-system",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"concepts",children:"Concepts"})}),"\n",(0,s.jsxs)(n.p,{children:["Geoprocessing projects built with this framework support step #2 and #4 in the following planning workflow, the ",(0,s.jsx)(n.a,{href:"https://docs.seasketch.org/seasketch-documentation",children:"SeaSketch platform"})," supports the rest. They work together to provide a complete solution."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Allow a user to draw a design (sketch) and define attributes (e.g. allowed activities, etc.)."}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Preprocess that sketch to ensure it meets project guidelines, for example to ensure that it has a valid shape and is within the designated planning area."})}),"\n",(0,s.jsx)(n.li,{children:"Allow a user to organize one or more sketches into a proposal (collection)."}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.strong,{children:"Provide feedback (reports) on how well sketches and sketch collections meet measurable planning objectives and their targets (using geoprocessing functions)."})}),"\n",(0,s.jsx)(n.li,{children:"Allow users to share and iterate on designs as a group until they come to a decision."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"System Model",src:t(23999).A+"",title:"System Model Basic",width:"692",height:"273"})}),"\n",(0,s.jsx)(n.h2,{id:"terminology",children:"Terminology"}),"\n",(0,s.jsxs)(n.p,{children:["There are a number of terms and concepts to be familiar with. Many of them are implemented as features of the framework, which you can learn more about on the ",(0,s.jsx)(n.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts",children:"advanced concepts"})," page."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Goal"})," - also known as vision or aim. These are general summaries of the desired future state of an area."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Example - Protect biological diversity, productivity, and ecological function across all habitat types"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Objective"})," - These are specific statements that describe how a planning goal will be reached and are typically measurable or quantifiable in some way."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Example - Designate a minimum of 20% of planning area as protected areas."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Target"})," - The measurement to reach to say that an objective has been met."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Example - 20% of the EEZ, 15% of a species habitat within planning area,"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Metric"})," - an individual piece of data, a measurement. For example a spatial statistic or an area calculation."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Sketch"})," - a user-drawn feature, typically a Polygon, that can be shared, further altered or put into a Sketch Collection. A Sketch is an extension of a GeoJSON ",(0,s.jsx)(n.a,{href:"https://www.rfc-editor.org/rfc/rfc7946#section-3.2",children:"Feature"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Geography"})," - one or more geographic boundaries for the project. Primarily used to define project planning boundaries."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Datasource"})," - a published dataset within the project. It can be either Vector or Raster spatial data. A datasource can contain vector features that define the extent of a Geography or provide spatial data for calculating Metrics for sketches."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Here's a couple examples putting it all together:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A polygon boundary Datasource containing a countries Exclusive Economic Zone is used to measure what % of the EEZ a proposed area covers."}),"\n",(0,s.jsx)(n.li,{children:"A coral reef Datasource can be used to measure whether a proposed area covers at least 50% of each coral type."}),"\n",(0,s.jsx)(n.li,{children:"A geomorphology Datasource can be used to measure whether a proposed area covers at least 20% of each seabottom type."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"marine-spatial-planning-terminology",children:"Marine Spatial Planning Terminology"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"MPA"})," - marine protected area. An area designated for marine protection with defined allowed uses."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Territorial Sea"})," - A belt of coastal waters extending at most 12 nautical miles from the baseline (usually the mean low-water mark) of a coastal state."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"EEZ"}),' - exclusive economic zone aka "Offshore". An area of the sea in which a sovereign state has exclusive rights regarding the exploration and use of marine resources. It stretches from the outer edge of the territorial sea, 12 nautical miles out from the baseline, to 200 nautical miles. May also be defined as the "Offshore".']}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Nearshore"})," - a shorthand name used in marine planning projects, which often matches up with the definition of Territorial Sea, but it may not."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Offshore"})," - a shorthand name used in marine planning projects, which often matches up with the definition of EEZ, but it may not."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"classification-system",children:"Classification System"}),"\n",(0,s.jsxs)(n.p,{children:["Planning processes may leverage a ",(0,s.jsx)(n.code,{children:"classification system"})," for defining what levels of protection can be assigned to proposed areas. They then decide what protection levels are required at minimum to count towards meeting a planning objective. Marine Protected Areas or MPA's for example have multiple ",(0,s.jsx)(n.a,{href:"https://docs.google.com/document/d/1i0baxgK8JEUjtU8mnzFiG5VB_gO8lmxCrAtJ5rltk30/edit?usp=sharing",children:"classification schemes"})," to choose from."]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},23999:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/SystemModelBasic-ddf0991220dfb310cea956f818249dd0.jpg"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>r});var s=t(96540);const i={},o=s.createContext(i);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/6dd78e99.0e83bd29.js b/assets/js/6dd78e99.0e83bd29.js
deleted file mode 100644
index 874ba68739..0000000000
--- a/assets/js/6dd78e99.0e83bd29.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44849],{30135:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>t,metadata:()=>o,toc:()=>d});var i=r(74848),n=r(28453);const t={},c="geoprocessing",o={id:"api/geoprocessing/index",title:"geoprocessing",description:"geoprocessing is the main module used by a geoprocessing project. It includes everything needing for creating, building, testing, and deploying a geoprocessing project with the exception of UI components which are exported separately in client-ui.",source:"@site/docs/api/geoprocessing/index.md",sourceDirName:"api/geoprocessing",slug:"/api/geoprocessing/",permalink:"/geoprocessing/docs/next/api/geoprocessing/",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/geoprocessing/index.md",tags:[],version:"current",frontMatter:{}},a={},d=[{value:"Index",id:"index",level:2},{value:"Classes",id:"classes",level:3},{value:"Interfaces",id:"interfaces",level:3},{value:"Enumerations",id:"enumerations",level:3},{value:"Functions",id:"functions",level:3},{value:"Type Aliases",id:"type-aliases",level:3},{value:"Variables",id:"variables",level:3}];function l(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"geoprocessing",children:"geoprocessing"})}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.code,{children:"geoprocessing"})," is the main module used by a geoprocessing project. It includes everything needing for creating, building, testing, and deploying a geoprocessing project with the exception of UI components which are exported separately in ",(0,i.jsx)(s.code,{children:"client-ui"}),"."]}),"\n",(0,i.jsx)(s.h2,{id:"index",children:"Index"}),"\n",(0,i.jsx)(s.h3,{id:"classes",children:"Classes"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Class"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/ComplexityError",children:"ComplexityError"})}),(0,i.jsx)(s.td,{children:"Error signifying function threw due to not being able to handle the input - e.g. size/complexity"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/GeoprocessingHandler",children:"GeoprocessingHandler"})}),(0,i.jsx)(s.td,{children:"Manages the task of executing a geoprocessing function within an AWS Lambda function. This includes sending estimate of completion, caching the results, and getting them back to the client. Supports 2 different execution modes for running a geoprocessing function - sync and async These modes create 3 different request scenarios. A lambda is created for each scenario, and they all run this one handler. 1 - sync executionMode - immediately run gp function and return result in resolved promise to client 2 - async executionMode, ASYNC_REQUEST_TYPE=start - invoke a second lambda to run gp function and return incomplete task to client with socket for notification of result 3 - async executionMode, ASYNC_REQUEST_TYPE=run - run gp function started by scenario 2 and send completed task info on socket for client to pick up result"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/PreprocessingHandler",children:"PreprocessingHandler"})}),(0,i.jsx)(s.td,{children:"Lambda handler for a preprocessing function"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/ProjectClientBase",children:"ProjectClientBase"})}),(0,i.jsx)(s.td,{children:"Client for reading project configuration/metadata."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/ValidationError",children:"ValidationError"})}),(0,i.jsx)(s.td,{children:"Error signifying input is not valid"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/VectorDataSource",children:"VectorDataSource"})}),(0,i.jsx)(s.td,{children:"-"})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"interfaces",children:"Interfaces"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Interface"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/BaseImportDatasourceConfig",children:"BaseImportDatasourceConfig"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/CalcStatsOptions",children:"CalcStatsOptions"})}),(0,i.jsxs)(s.td,{children:["options accepted by geoblaze.stats() to calc-stats library See ",(0,i.jsx)(s.a,{href:"https://github.com/DanielJDufour/calc-stats/tree/main?tab=readme-ov-file#advanced-usage",children:"https://github.com/DanielJDufour/calc-stats/tree/main?tab=readme-ov-file#advanced-usage"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ClipOptions",children:"ClipOptions"})}),(0,i.jsx)(s.td,{children:"Optional parameters for polygon clip preprocessor"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/DatasourceClipOperation",children:"DatasourceClipOperation"})}),(0,i.jsx)(s.td,{children:"Parameters for clip operation using a datasource"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/DatasourceOptions",children:"DatasourceOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/DefaultExtraParams",children:"DefaultExtraParams"})}),(0,i.jsx)(s.td,{children:"Common set of extra parameters that might be passed to a geoprocessing function Replace or extend these as needed, there is nothing special about the param names other than to be descriptive of what they represent."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:"Feature"})}),(0,i.jsxs)(s.td,{children:["A feature object which contains a geometry and associated properties. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.2",children:"https://tools.ietf.org/html/rfc7946#section-3.2"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureClipOperation",children:"FeatureClipOperation"})}),(0,i.jsx)(s.td,{children:"Parameters for clip operation using polygon features"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureCollection",children:"FeatureCollection"})}),(0,i.jsxs)(s.td,{children:["A collection of feature objects. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.3",children:"https://tools.ietf.org/html/rfc7946#section-3.3"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureMap",children:"FeatureMap"})}),(0,i.jsx)(s.td,{children:"A simple map of features keyed by their name"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureTree",children:"FeatureTree"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FgBoundingBox",children:"FgBoundingBox"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeogProp",children:"GeogProp"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeometryCollection",children:"GeometryCollection"})}),(0,i.jsxs)(s.td,{children:["Geometry Collection ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.8",children:"https://tools.ietf.org/html/rfc7946#section-3.1.8"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingHandlerOptions",children:"GeoprocessingHandlerOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingProject",children:"GeoprocessingProject"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingRequestModel",children:"GeoprocessingRequestModel"})}),(0,i.jsx)(s.td,{children:"Geoprocessing request internal data model, with full objects, no JSON strings"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingServiceMetadata",children:"GeoprocessingServiceMetadata"})}),(0,i.jsx)(s.td,{children:"Expected public service metadata for each function"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingTask",children:"GeoprocessingTask"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Georaster",children:"Georaster"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Histogram",children:"Histogram"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/HistogramOptions",children:"HistogramOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnActivity",children:"IucnActivity"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnActivityRank",children:"IucnActivityRank"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnCategory",children:"IucnCategory"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnCategoryCombined",children:"IucnCategoryCombined"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/LineString",children:"LineString"})}),(0,i.jsxs)(s.td,{children:["LineString geometry object. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.4",children:"https://tools.ietf.org/html/rfc7946#section-3.1.4"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MetricGroupItem",children:"MetricGroupItem"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MetricPack",children:"MetricPack"})}),(0,i.jsx)(s.td,{children:"Alternative JSON format for metrics data that is smaller in size, better suited for blob storage and network transport"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiLineString",children:"MultiLineString"})}),(0,i.jsxs)(s.td,{children:["MultiLineString geometry object. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.5",children:"https://tools.ietf.org/html/rfc7946#section-3.1.5"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:"MultiPolygon"})}),(0,i.jsxs)(s.td,{children:["MultiPolygon geometry object. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.7",children:"https://tools.ietf.org/html/rfc7946#section-3.1.7"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Node",children:"Node"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/NullSketch",children:"NullSketch"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/NullSketchCollection",children:"NullSketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/OverlapRasterOptions",children:"OverlapRasterOptions"})}),(0,i.jsx)(s.td,{children:"options accepted by rasterStats"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PercentEdgeOptions",children:"PercentEdgeOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Point",children:"Point"})}),(0,i.jsxs)(s.td,{children:["Point geometry object. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.2",children:"https://tools.ietf.org/html/rfc7946#section-3.1.2"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:"Polygon"})}),(0,i.jsxs)(s.td,{children:["Polygon geometry object. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.6",children:"https://tools.ietf.org/html/rfc7946#section-3.1.6"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingHandlerOptions",children:"PreprocessingHandlerOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingRequest",children:"PreprocessingRequest"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingResponse",children:"PreprocessingResponse"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingService",children:"PreprocessingService"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingServiceMetadata",children:"PreprocessingServiceMetadata"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ProjectClientConfig",children:"ProjectClientConfig"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ProjectClientInterface",children:"ProjectClientInterface"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RasterStatsOptions",children:"RasterStatsOptions"})}),(0,i.jsx)(s.td,{children:"options accepted by rasterStats"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RbcsObjective",children:"RbcsObjective"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RegBasedClassificationMetric",children:"RegBasedClassificationMetric"})}),(0,i.jsx)(s.td,{children:"Extended metric for mpa-reg-based-classification results, either zone or mpa classification"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Report",children:"Report"})}),(0,i.jsx)(s.td,{children:"Represents a single report, with one or more metrics"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportContextValue",children:"ReportContextValue"})}),(0,i.jsx)(s.td,{children:"Provides necessary context to ReportClient components, particularly for use by useFunction() and useSketchProperties() hooks"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportResult",children:"ReportResult"})}),(0,i.jsx)(s.td,{children:"Report results consist of collections of metrics for sketches"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportResultBase",children:"ReportResultBase"})}),(0,i.jsx)(s.td,{children:"Metrics for reports not associated with sketches. Used for precalculation"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RootTaskItem",children:"RootTaskItem"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RoundDecimalOptions",children:"RoundDecimalOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingMessageEvent",children:"SeaSketchReportingMessageEvent"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingToggleLanguageEvent",children:"SeaSketchReportingToggleLanguageEvent"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingToggleLayerVisibilityEvent",children:"SeaSketchReportingToggleLayerVisibilityEvent"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingVisibleLayersChangeEvent",children:"SeaSketchReportingVisibleLayersChangeEvent"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Sketch",children:"Sketch"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchCollection",children:"SketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchMap",children:"SketchMap"})}),(0,i.jsx)(s.td,{children:"A simple map of sketches and/or sketch collections keyed by their name"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/StatsObject",children:"StatsObject"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/TestExampleOutput",children:"TestExampleOutput"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorDataSourceDetails",children:"VectorDataSourceDetails"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorDataSourceOptions",children:"VectorDataSourceOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorFeature",children:"VectorFeature"})}),(0,i.jsxs)(s.td,{children:["A feature object which contains a geometry and associated properties. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.2",children:"https://tools.ietf.org/html/rfc7946#section-3.2"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorPropertyFilter",children:"VectorPropertyFilter"})}),(0,i.jsx)(s.td,{children:"Specify one or more literal values for one or more vector Feature properties"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/WindowOptions",children:"WindowOptions"})}),(0,i.jsx)(s.td,{children:"defines the new raster image to generate as a window in the source raster image. Resolution (cell size) is determined from this"})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"enumerations",children:"Enumerations"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Enumeration"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsx)(s.tbody,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/enumerations/GeoprocessingTaskStatus",children:"GeoprocessingTaskStatus"})}),(0,i.jsx)(s.td,{children:"-"})]})})]}),"\n",(0,i.jsx)(s.h3,{id:"functions",children:"Functions"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Function"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/anchorScore",children:"anchorScore"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/aquacultureScore",children:"aquacultureScore"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/area",children:"area"})}),(0,i.jsx)(s.td,{children:"Calculates the area of each sketch and collection."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/batchDelete",children:"batchDelete"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/batchDeleteTasks",children:"batchDeleteTasks"})}),(0,i.jsx)(s.td,{children:"Batch delete array of tasks"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/bboxOverlap",children:"bboxOverlap"})}),(0,i.jsx)(s.td,{children:"Returns whether bounding box A overlaps with or touches bounding box B"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/booleanOverlap",children:"booleanOverlap"})}),(0,i.jsx)(s.td,{children:"Returns all B items that overlap with a A items Not all Feature types are supported, see typedoc A and B must have the same geometry dimension (single or multi). Builds on @turf/boolean-overlap."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/byteSize",children:"byteSize"})}),(0,i.jsx)(s.td,{children:"Get length of string in bytes"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/capitalize",children:"capitalize"})}),(0,i.jsx)(s.td,{children:"Capitalizes the first letter of string"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/chunk",children:"chunk"})}),(0,i.jsx)(s.td,{children:"Splits an array into chunks of size"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/classIdMapping",children:"classIdMapping"})}),(0,i.jsx)(s.td,{children:"Returns mapping of class ID to class DataClass objects"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/classifyMPA",children:"classifyMPA"})}),(0,i.jsx)(s.td,{children:"Given zone scores, returns object containing final scores, and mpa classification"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/classifyZone",children:"classifyZone"})}),(0,i.jsx)(s.td,{children:"Given activity scores, returns zone number"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/cleanBBox",children:"cleanBBox"})}),(0,i.jsx)(s.td,{children:"Normalizes bounding box longitude values to the [-180, 180] range if they cross the antimeridian"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/cleanCoords",children:"cleanCoords"})}),(0,i.jsx)(s.td,{children:"Cleans geojson coordinates to be within the bounds of the world [-90, -180, 90, 180], so that they don't wrap off the end, and can be split"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/clip",children:"clip"})}),(0,i.jsx)(s.td,{children:"Performs clip operation on features"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/clipMultiMerge",children:"clipMultiMerge"})}),(0,i.jsx)(s.td,{children:"Performs clip after first merging features2 coords into a single multipolygon. Can perform better than regular clip and help avoid errors in underlying library when running against many features."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/clipToPolygonDatasources",children:"clipToPolygonDatasources"})}),(0,i.jsx)(s.td,{children:"Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/clipToPolygonFeatures",children:"clipToPolygonFeatures"})}),(0,i.jsx)(s.td,{children:"Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more Polygon features"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/collectionHasGeometry",children:"collectionHasGeometry"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/createMetric",children:"createMetric"})}),(0,i.jsx)(s.td,{children:"Creates a new metric. Defaults to ID values of null and then copies in passed metric properties"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/createMetrics",children:"createMetrics"})}),(0,i.jsx)(s.td,{children:"Creates fully defined metrics from partial. Metric values not provided are initialized to null"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/ensureValidPolygon",children:"ensureValidPolygon"})}),(0,i.jsx)(s.td,{children:"Returns true if feature is valid and meets requirements set by options."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/featureToSketch",children:"featureToSketch"})}),(0,i.jsx)(s.td,{children:"Converts Feature to Sketch with reasonable defaults given for sketch properties if not provided"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/featureToSketchCollection",children:"featureToSketchCollection"})}),(0,i.jsx)(s.td,{children:"Converts FeatureCollection to SketchCollection with reasonable defaults given for sketch properties if not provided"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/fetchGeoJSON",children:"fetchGeoJSON"})}),(0,i.jsx)(s.td,{children:"Given geoprocessing function request, fetches the GeoJSON, which can also be sketch JSON"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/fgbFetchAll",children:"fgbFetchAll"})}),(0,i.jsx)(s.td,{children:"Fetch features from flatgeobuf at url within bounding box Awaits all features before returning, rather than streaming them."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/fgBoundingBox",children:"fgBoundingBox"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/findAndUpdateMetricValue",children:"findAndUpdateMetricValue"})}),(0,i.jsx)(s.td,{children:"Returns new sketchMetrics array with first sketchMetric matched set with new value. If no match, returns copy of sketchMetrics. Does not mutate array in place."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/firstMatching",children:"firstMatching"})}),(0,i.jsx)(s.td,{children:"Returns the first item that returns true for filter"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/firstMatchingMetric",children:"firstMatchingMetric"})}),(0,i.jsx)(s.td,{children:"Returns the first metric that returns true for metricFilter"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/flattenByGroupAllClass",children:"flattenByGroupAllClass"})}),(0,i.jsx)(s.td,{children:"Aggregates metrics by group"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/flattenByGroupSketchAllClass",children:"flattenByGroupSketchAllClass"})}),(0,i.jsx)(s.td,{children:"Flattens group class metrics, one for each group and sketch. Each object includes the percValue for each class, and the total percValue with classes combined groupId, sketchId, class1, class2, ..., total"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/flattenBySketchAllClass",children:"flattenBySketchAllClass"})}),(0,i.jsx)(s.td,{children:"Flattens class sketch metrics into array of objects, one for each sketch, where each object contains sketch id, sketch name, and all metric values for each class"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/flattenSketchAllId",children:"flattenSketchAllId"})}),(0,i.jsx)(s.td,{children:"Returns one aggregate object for every sketch ID present in metrics, with additional property for each unique value for idProperty present for sketch. Example - idProperty of 'classId', and two classes are present in metrics of 'classA', and 'classB' then each flattened object will have two extra properties per sketch, .classA and .classB, each with the first metric value for that sketch/idProperty found"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/gearTypeScore",children:"gearTypeScore"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genClipLoader",children:"genClipLoader"})}),(0,i.jsx)(s.td,{children:"Given a project client and 1 or more clip operations, returns a function that when called loads clip features from their datasources that overlap with the feature polygon to clip. Pass this function to genPreprocessor() and it will take care of the rest."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genClipToPolygonDatasources",children:"genClipToPolygonDatasources"})}),(0,i.jsx)(s.td,{children:"Returns a function that Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genClipToPolygonFeatures",children:"genClipToPolygonFeatures"})}),(0,i.jsx)(s.td,{children:"Returns a function that applies clip operations to a feature using other polygon features."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genFeature",children:"genFeature"})}),(0,i.jsx)(s.td,{children:"Returns a Feature with given features geometry and properties. Reasonable defaults are given for properties not provided Default geometry is a square from 0,0 to 1,1"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genFeatureCollection",children:"genFeatureCollection"})}),(0,i.jsx)(s.td,{children:"Given array of features, return a feature collection with given properties. Generates reasonable default values for any properties not passed in The geometry type of the returned collection will match the one passed in Properties of features are retained"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genRandomPolygons",children:"genRandomPolygons"})}),(0,i.jsxs)(s.td,{children:["Generates random polygons within provided bounds. numPolygons defaults to 300, max_radial_length to 0.5 Wrapper around @turf/random - ",(0,i.jsx)(s.a,{href:"https://turfjs.org/docs/#randomPolygon",children:"https://turfjs.org/docs/#randomPolygon"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleNullSketch",children:"genSampleNullSketch"})}),(0,i.jsx)(s.td,{children:"Returns a Sketch with given geometry and Geometry type, Properties are reasonable random"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleNullSketchCollection",children:"genSampleNullSketchCollection"})}),(0,i.jsx)(s.td,{children:"Given feature collection, return a sketch collection with reasonable random props. The geometry type of the returned collection will match the one passed in"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketch",children:"genSampleSketch"})}),(0,i.jsx)(s.td,{children:"Returns a Sketch with given geometry and Geometry type, Properties are reasonable random"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchCollection",children:"genSampleSketchCollection"})}),(0,i.jsx)(s.td,{children:"Given feature collection, return a sketch collection with reasonable random props. The geometry type of the returned collection will match the one passed in"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchCollectionFromSketches",children:"genSampleSketchCollectionFromSketches"})}),(0,i.jsx)(s.td,{children:"Given feature collection, return a sketch collection with reasonable random props. The geometry type of the returned collection will match the one passed in"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchContext",children:"genSampleSketchContext"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleUserAttributes",children:"genSampleUserAttributes"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSketch",children:"genSketch"})}),(0,i.jsx)(s.td,{children:"Returns a Sketch with given features geometry and properties. Reasonable defaults are given for properties not provided Default geometry is a square from 0,0 to 1,1"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSketchCollection",children:"genSketchCollection"})}),(0,i.jsx)(s.td,{children:"Given array of sketches, return a sketch collection with given properties. Generates reasonable default values for any properties not passed in The geometry type of the returned collection will match the one passed in Properties of sketches are retained"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genTaskCacheKey",children:"genTaskCacheKey"})}),(0,i.jsx)(s.td,{children:"Generates a cache key for a geoprocessing request, given sketch properties and optional extra parameters (must be JSON compatible object) Extra parameters are canonicalized and hashed using md5 to ensure cache key is consistent. Canonicalization ensures object keys are consistent but not arrays. If you use arrays as extraParam values, make sure the order stays the same and sort first if needed to generate a consistent cache key."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genZodErrorMessage",children:"genZodErrorMessage"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getArea",children:"getArea"})}),(0,i.jsx)(s.td,{children:"Returns area of valid raster cells (not nodata) overlapping with feature. If no valid cells found, returns 0."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getClassificationLabel",children:"getClassificationLabel"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getCogFilename",children:"getCogFilename"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getDatasetBucketName",children:"getDatasetBucketName"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getDatasourceById",children:"getDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return datasource from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getExternalRasterDatasourceById",children:"getExternalRasterDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return external raster datasource from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getExternalVectorDatasourceById",children:"getExternalVectorDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return external vector datasource from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getFeatures",children:"getFeatures"})}),(0,i.jsx)(s.td,{children:"Returns features for a variety of vector datasources and formats, with additional filter options"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getFeaturesForSketchBBoxes",children:"getFeaturesForSketchBBoxes"})}),(0,i.jsx)(s.td,{children:"Loads features from a FlatGeobuf referenced by URL, which intersect the bounding boxes of each individual sketch in a SketchCollection, or a single Sketch."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getFirstFromParam",children:"getFirstFromParam"})}),(0,i.jsx)(s.td,{children:"Returns first element from param object at paramName key. Parameter can be string or array of strings"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getFlatGeobufFilename",children:"getFlatGeobufFilename"})}),(0,i.jsx)(s.td,{children:"Returns datasource filename in flatgeobuf format"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getFlatGeobufPath",children:"getFlatGeobufPath"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getGeopackagePath",children:"getGeopackagePath"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getHistogram",children:"getHistogram"})}),(0,i.jsx)(s.td,{children:"Returns histogram of value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getIndexIconPerc",children:"getIndexIconPerc"})}),(0,i.jsx)(s.td,{children:"Returns percent protection given index value, percent is proportion (percent) of bottom color to top color to use for icon given index value (as shown in paper) e.g. index = 5.4 means bottom icon color should take 25% of icon and top color 75%"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getInternalRasterDatasourceById",children:"getInternalRasterDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return internal datasource from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getInternalVectorDatasourceById",children:"getInternalVectorDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return internal vector datasource from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryForActivities",children:"getIucnCategoryForActivities"})}),(0,i.jsx)(s.td,{children:"Given list of allowed activities in the sketch, returns the highest category allowable The lack of an activity assumes it is not allowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryForSketches",children:"getIucnCategoryForSketches"})}),(0,i.jsx)(s.td,{children:"Return Category for each sketch keyed by sketchId"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryNameForSketches",children:"getIucnCategoryNameForSketches"})}),(0,i.jsx)(s.td,{children:"Return Category name for each sketch keyed by sketchId"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnLevelNameForSketches",children:"getIucnLevelNameForSketches"})}),(0,i.jsx)(s.td,{children:"Return level name for each sketch keyed by sketchId"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getJsonFilename",children:"getJsonFilename"})}),(0,i.jsx)(s.td,{children:"Returns datasource filename in geojson format"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getJsonPath",children:"getJsonPath"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getJsonUserAttribute",children:"getJsonUserAttribute"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getKeys",children:"getKeys"})}),(0,i.jsx)(s.td,{children:"Object.keys helper that returns strongly typed key values. Uses assertion so make sure your type covers all the keys!"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getMetricGroupObjectiveId",children:"getMetricGroupObjectiveId"})}),(0,i.jsx)(s.td,{children:"Returns the top-level objective assigned for the given MetricGroup. If a classID is also passed, returns the objective ID for that class within the metric group"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getMetricGroupObjectiveIds",children:"getMetricGroupObjectiveIds"})}),(0,i.jsx)(s.td,{children:"Returns array of all objective IDs configured for the given MetricGroup. If a class does not have an objectiveId assigned, then it gets the top-level objectiveId"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getMinYesCountMap",children:"getMinYesCountMap"})}),(0,i.jsx)(s.td,{children:"Returns an object mapping objective ID to ID of first classification that counts toward objective"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getMpaClassificationName",children:"getMpaClassificationName"})}),(0,i.jsx)(s.td,{children:"Returns protection level given MPA classification index value"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getObjectiveById",children:"getObjectiveById"})}),(0,i.jsx)(s.td,{children:"find and return objectives from passed objectives"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getParamStringArray",children:"getParamStringArray"})}),(0,i.jsx)(s.td,{children:"Validates and returns string[] parameter from extraParams. If param missing it returns an empty array"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getRasterBoxSpherical",children:"getRasterBoxSpherical"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getRasterDatasourceById",children:"getRasterDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return raster datasource (internal or external) from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getSketchCollectionChildIds",children:"getSketchCollectionChildIds"})}),(0,i.jsx)(s.td,{children:"Given sketch collection, returns IDs of sketches in the collection"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getSketchFeatures",children:"getSketchFeatures"})}),(0,i.jsx)(s.td,{children:"Given sketch or sketch collection, returns just the individual sketch features inside."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getSketchToMpaProtectionLevel",children:"getSketchToMpaProtectionLevel"})}),(0,i.jsx)(s.td,{children:"Returns object mapping sketch id to MPA classification given sketch for rbcsMpa or collection of sketches for rbcsMpas with rbcs activity userAttributes, and area metrics for each sketch, assumes each mpa is a single zone mpa"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getSum",children:"getSum"})}),(0,i.jsx)(s.td,{children:"Returns sum of raster value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getUserAttribute",children:"getUserAttribute"})}),(0,i.jsx)(s.td,{children:"UserAttributes are those filled in via the attributes form specified as part of a SketchClass. This getter function is easier to use than searching the Sketch.properties.userAttributes array, supports default values, and is easier to use with typescript."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getVectorDatasourceById",children:"getVectorDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return vector datasource (internal or external) from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getZoneClassificationName",children:"getZoneClassificationName"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/groupBy",children:"groupBy"})}),(0,i.jsx)(s.td,{children:"Similar to lodash groupBy"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/hasOwnProperty",children:"hasOwnProperty"})}),(0,i.jsxs)(s.td,{children:["Type narrowing to allow property checking when object can be multiple types ",(0,i.jsx)(s.a,{href:"https://fettblog.eu/typescript-hasownproperty/",children:"https://fettblog.eu/typescript-hasownproperty/"})," Any code inside a block guarded by a conditional call to this function will have type narrowed to X"]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/includeVirtualSketch",children:"includeVirtualSketch"})}),(0,i.jsx)(s.td,{children:"If sketch collection passes sketchTest, then returns new collection with mergeSketchColl sketches appended and updated bbox"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isExternalDatasource",children:"isExternalDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isExternalRasterDatasource",children:"isExternalRasterDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isExternalVectorDatasource",children:"isExternalVectorDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isFeature",children:"isFeature"})}),(0,i.jsx)(s.td,{children:"Check if object is a Feature. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isFeatureCollection",children:"isFeatureCollection"})}),(0,i.jsx)(s.td,{children:"Check if object is a Feature Collection. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isGeometry",children:"isGeometry"})}),(0,i.jsx)(s.td,{children:"Check if object is a Feature. Any code inside a block guarded by a conditional call to this function will have type narrowed to Feature"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isImportRasterDatasourceConfig",children:"isImportRasterDatasourceConfig"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isImportVectorDatasourceConfig",children:"isImportVectorDatasourceConfig"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isinternalDatasource",children:"isinternalDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isInternalRasterDatasource",children:"isInternalRasterDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isInternalVectorDatasource",children:"isInternalVectorDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isLineStringFeature",children:"isLineStringFeature"})}),(0,i.jsx)(s.td,{children:"Check if object is a Linestring. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isLineStringSketchCollection",children:"isLineStringSketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isMetric",children:"isMetric"})}),(0,i.jsx)(s.td,{children:"Checks if object is a Metric and returns narrowed type"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isMetricArray",children:"isMetricArray"})}),(0,i.jsx)(s.td,{children:"Checks if object is a Metric array and returns narrowed type"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isMetricPack",children:"isMetricPack"})}),(0,i.jsx)(s.td,{children:"Checks if object is a MetricPack. Any code inside a block guarded by a conditional call to this function will have type narrowed to MetricPack"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonFeature",children:"isMultiPolygonFeature"})}),(0,i.jsx)(s.td,{children:"Check if object is a MultiPolygon. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonSketch",children:"isMultiPolygonSketch"})}),(0,i.jsx)(s.td,{children:"Checks if sketch is a MultiPolygon. Any code inside a block guarded by a conditional call to this function will have type narrowed to Sketch"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonSketchCollection",children:"isMultiPolygonSketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isNullSketch",children:"isNullSketch"})}),(0,i.jsx)(s.td,{children:"Checks if object is a NullSketch. Any code inside a block guarded by a conditional call to this function will have type narrowed to NullSketch"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isNullSketchCollection",children:"isNullSketchCollection"})}),(0,i.jsx)(s.td,{children:"Check if object is a NullSketchCollection. Any code inside a block guarded by a conditional call to this function will have type narrowed to NullSketchCollection"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isObject",children:"isObject"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPointFeature",children:"isPointFeature"})}),(0,i.jsx)(s.td,{children:"Check if object is a Point. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPointSketchCollection",children:"isPointSketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonAllSketchCollection",children:"isPolygonAllSketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonAnyFeature",children:"isPolygonAnyFeature"})}),(0,i.jsx)(s.td,{children:"Check if object is a Polygon or MultiPolygon. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonFeature",children:"isPolygonFeature"})}),(0,i.jsx)(s.td,{children:"Check if object is a Polygon feature. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonFeatureArray",children:"isPolygonFeatureArray"})}),(0,i.jsx)(s.td,{children:"Check if object is an array of Polygon features. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonSketch",children:"isPolygonSketch"})}),(0,i.jsx)(s.td,{children:"Checks if sketch is a Polygon"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonSketchCollection",children:"isPolygonSketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isRasterDatasource",children:"isRasterDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isRbcsProtectionLevel",children:"isRbcsProtectionLevel"})}),(0,i.jsx)(s.td,{children:"Type guard for checking string is one of supported objective IDs Use in conditional block logic to coerce to type RbcsObjectiveKey within the block"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isSketch",children:"isSketch"})}),(0,i.jsx)(s.td,{children:"Checks if object is a Sketch. Any code inside a block guarded by a conditional call to this function will have type narrowed to Sketch"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isSketchCollection",children:"isSketchCollection"})}),(0,i.jsx)(s.td,{children:"Check if object is a SketchCollection. Any code inside a block guarded by a conditional call to this function will have type narrowed to SketchCollection"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isTruthyAttributeValue",children:"isTruthyAttributeValue"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isVectorDatasource",children:"isVectorDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/keyBy",children:"keyBy"})}),(0,i.jsx)(s.td,{children:"Similar to lodash keyBy"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/loadCog",children:"loadCog"})}),(0,i.jsx)(s.td,{children:"Returns cog-aware georaster at given url. Will not fetch raster values until subsequent geoblaze calls are made with a geometry and it will calculate the window to load based on the geometry. The subsequent geoblaze calls (e.g. sum) must be called async to allow the raster to load."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/loadFgb",children:"loadFgb"})}),(0,i.jsx)(s.td,{children:"Fetch features from flatgeobuf at url that intersect with bounding box Awaits all features before returning, rather than streaming them."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/maxWidth",children:"maxWidth"})}),(0,i.jsx)(s.td,{children:"Returns the maximum width of the geojson or bbox"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/metricsForSketch",children:"metricsForSketch"})}),(0,i.jsx)(s.td,{children:"Returns metrics for given sketch (can be an array of sketches)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/metricsSketchIds",children:"metricsSketchIds"})}),(0,i.jsx)(s.td,{children:"Returns metrics with matching sketchId (can be an array of sketchids)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/metricsWithClassId",children:"metricsWithClassId"})}),(0,i.jsx)(s.td,{children:"Returns metrics with matching sketchId (can be an array of sketchids)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/metricsWithSketchId",children:"metricsWithSketchId"})}),(0,i.jsx)(s.td,{children:"Returns metrics with matching sketchId (can be an array of sketchids)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/minWidth",children:"minWidth"})}),(0,i.jsx)(s.td,{children:"Returns the minimum width of the bounding box of given feature"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/mpaClassMetric",children:"mpaClassMetric"})}),(0,i.jsx)(s.td,{children:"Given sketch for rbcsMpa with rbcs activity userAttributes, assumes mpa is a single zone mpa and returns metrics with mpa classification score"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/mpaClassMetrics",children:"mpaClassMetrics"})}),(0,i.jsx)(s.td,{children:"Given sketch for rbcsMpa or collection of sketches for rbcsMpas with rbcs activity userAttributes, assumes each mpa is a single zone mpa and returns metrics with mpa classification score Collection metric will have mpa classification score index as value"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/nestMetrics",children:"nestMetrics"})}),(0,i.jsx)(s.td,{children:"Recursively groups metrics by ID in order of ids specified to create arbitrary nested hierarchy for fast lookup. Caller responsible for all metrics having the ID properties defined If an id property is not defined on a metric, then 'undefined' will be used for the key"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/numberFormat",children:"numberFormat"})}),(0,i.jsx)(s.td,{children:"Formats number to string, if less than zero will leave as-is, otherwise will format as large number"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapArea",children:"overlapArea"})}),(0,i.jsx)(s.td,{children:"Assuming sketches are within some outer boundary with size outerArea, calculates the area of each sketch and the proportion of outerArea they take up."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapAreaGroupMetrics",children:"overlapAreaGroupMetrics"})}),(0,i.jsx)(s.td,{children:"Generate overlap group metrics using overlapArea operation"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapFeatures",children:"overlapFeatures"})}),(0,i.jsx)(s.td,{children:"Calculates overlap between sketch(es) and an array of polygon features. Supports area or sum operation (given sumProperty), defaults to area If sketch collection includes overall and per sketch"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapFeaturesGroupMetrics",children:"overlapFeaturesGroupMetrics"})}),(0,i.jsx)(s.td,{children:"Generate overlap group metrics using overlapFeatures operation"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapGroupMetrics",children:"overlapGroupMetrics"})}),(0,i.jsx)(s.td,{children:"Given area overlap metrics stratified by class and sketch, returns new metrics also stratified by group Assumes a sketch is member of only one group, determined by caller-provided metricToGroup For each group+class, calculates area of overlap between sketches in group and featuresByClass (with overlap between group sketches removed first) Types of metrics returned: sketch metrics: copy of caller-provided sketch metrics with addition of group ID overall metric for each group+class: takes sketches in group, subtracts overlap between them and overlap with higher group sketches, and runs operation If a group has no sketches in it, then no group metrics will be included for that group, and group+class metric will be 0"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapRasterClass",children:"overlapRasterClass"})}),(0,i.jsx)(s.td,{children:"Calculates sum of overlap between sketches and a categorical raster with numeric values representing feature classes If sketch collection, then calculate overlap for all child sketches also"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapRasterGroupMetrics",children:"overlapRasterGroupMetrics"})}),(0,i.jsx)(s.td,{children:"Generate overlap group metrics using rasterMetrics operation"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapSubarea",children:"overlapSubarea"})}),(0,i.jsx)(s.td,{children:"Returns area stats for sketch input after performing overlay operation against a subarea feature. Includes both area overlap and percent area overlap metrics, because calculating percent later would be too complicated For sketch collections, dissolve is used when calculating total sketch area to prevent double counting"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/packMetrics",children:"packMetrics"})}),(0,i.jsx)(s.td,{children:"Converts Metric array to a new MetricPack. Assumes metric dimensions are consistent for each element in the array, and null values are used"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/parseGeoraster",children:"parseGeoraster"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/parseLambdaResponse",children:"parseLambdaResponse"})}),(0,i.jsx)(s.td,{children:"Parses result from worker lambda"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/percentGoalWithEdge",children:"percentGoalWithEdge"})}),(0,i.jsx)(s.td,{children:"Special percent formatter designed to produce readable percent values for display given an upper percent goal All parameters are expected to be decimal percent values e.g. .001 = 1/10th of a percent."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/percentWithEdge",children:"percentWithEdge"})}),(0,i.jsx)(s.td,{children:"Special percent formatter designed to produce readable percent values for display with special handling of numbers within some edge range of user-defined lower or upper bounds. Defaults to handle only lower edge with lowerBound = 0 and lower = .001. All bound values are expected to be in decimal percent. So 1/10th of a percent is .001"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/randomFloat",children:"randomFloat"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/randomInt",children:"randomInt"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rasterMetrics",children:"rasterMetrics"})}),(0,i.jsx)(s.td,{children:"Calculates summary metrics (stats/area) on given raster, optionally intersecting raster with provided feature (zonal statistics). If feature is a collection, then calculate metrics for each individual feature as well as the collection as a whole. This can be disabled with includeChildMetrics: false. Defaults to assuming a continuous raster but also supports categorical option"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rasterStats",children:"rasterStats"})}),(0,i.jsx)(s.td,{children:"Calculates over 10 different raster statistics, optionally constrains to raster cells overlapping with feature (zonal statistics). Defaults to calculating only sum stat If no cells found, returns 0 or null value for each stat as appropriate."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rasterStatsToMetrics",children:"rasterStatsToMetrics"})}),(0,i.jsx)(s.td,{children:"Converts an array of geoblaze raster StatsObjects to an array of Metrics"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rbcsMpaToMetric",children:"rbcsMpaToMetric"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rbcsZoneToMetric",children:"rbcsZoneToMetric"})}),(0,i.jsx)(s.td,{children:"Transforms an rbcs zone object to a metric"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rekeyMetrics",children:"rekeyMetrics"})}),(0,i.jsx)(s.td,{children:"Reorders metrics (by mutation) to a consistent key order for readability"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rekeyObject",children:"rekeyObject"})}),(0,i.jsx)(s.td,{children:"Reorders object, mutating in place, in the order provided"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/removeSketchCollPolygonHoles",children:"removeSketchCollPolygonHoles"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/removeSketchPolygonHoles",children:"removeSketchPolygonHoles"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/roundDecimal",children:"roundDecimal"})}),(0,i.jsx)(s.td,{children:"Rounds number to a fixed number of decimals"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/roundDecimalFormat",children:"roundDecimalFormat"})}),(0,i.jsx)(s.td,{children:"Rounds number to a fixed number of decimals, then formats as a human readable string"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/roundLower",children:"roundLower"})}),(0,i.jsx)(s.td,{children:"Formats number to string, rounding decimal to number of digits, if value is less than lower will clamp to lower value"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/runLambdaWorker",children:"runLambdaWorker"})}),(0,i.jsx)(s.td,{children:"Runs a function on a specified lambda worker"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/sampleSketchReportContextValue",children:"sampleSketchReportContextValue"})}),(0,i.jsx)(s.td,{children:"Creates a ReportContextValue object for a Sketch with sample values. overrides will be merged in, replacing default values"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/scanTasks",children:"scanTasks"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/sketchToId",children:"sketchToId"})}),(0,i.jsx)(s.td,{children:"Given sketch(es), returns ID(s)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/sketchToZone",children:"sketchToZone"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/sortMetrics",children:"sortMetrics"})}),(0,i.jsx)(s.td,{children:"Sorts metrics to a consistent order for readability Defaults to [metricId, classId, sketchId]"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/sortMetricsDisplayOrder",children:"sortMetricsDisplayOrder"})}),(0,i.jsx)(s.td,{children:"Sorts metrics by ID given a user-defined metric dimension (sortId) and array of ID values in the order they should be sorted Useful for applying a \"display order\" to metrics Example - sortId = classId, displayOrder = ['sand','gravel','coral']"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/splitBBoxAntimeridian",children:"splitBBoxAntimeridian"})}),(0,i.jsx)(s.td,{children:"If bounding box crosses antimeridian (and extends outside the range of -180 to 180), split it into two bounding boxes at the antimeridian."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/splitFeatureAntimeridian",children:"splitFeatureAntimeridian"})}),(0,i.jsx)(s.td,{children:"Splits a Feature or FeatureCollection on the 180 degree antimeridian. The bbox property of the result will have longitude coordinates that are shifted/normalized to be within the range of -180 to 180."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/splitSketchAntimeridian",children:"splitSketchAntimeridian"})}),(0,i.jsx)(s.td,{children:"Splits a Sketch or SketchCollection on the 180 degree antimeridian The bbox property of the result will have longitude coordinates that are shifted/normalized to be within the range of -180 to 180."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/squareMeterToKilometer",children:"squareMeterToKilometer"})}),(0,i.jsx)(s.td,{children:"Converts value from square meters to square kilometers"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/squareMeterToMile",children:"squareMeterToMile"})}),(0,i.jsx)(s.td,{children:"Converts value from square meters to square miles"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/testWithinPerc",children:"testWithinPerc"})}),(0,i.jsx)(s.td,{children:"Expects that testValue is equal to expectedValue or optionally within percentage (defaults to .01 or 1%)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toChildProperties",children:"toChildProperties"})}),(0,i.jsx)(s.td,{children:"Returns SketchProperties for each child sketch in a SketchCollection"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toFeatureArray",children:"toFeatureArray"})}),(0,i.jsx)(s.td,{children:"Helper to convert a Feature or a FeatureCollection to a Feature array"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toFeaturePolygonArray",children:"toFeaturePolygonArray"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toNullSketch",children:"toNullSketch"})}),(0,i.jsx)(s.td,{children:"Returns sketch or sketch collection with null geometry"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toNullSketchArray",children:"toNullSketchArray"})}),(0,i.jsx)(s.td,{children:"Helper to convert a NullSketch or NullSketchCollection to a NullSketch array"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toPercentMetric",children:"toPercentMetric"})}),(0,i.jsx)(s.td,{children:"Matches numerator metrics with denominator metrics and divides their value, returning a new array of percent metrics. If denominator metric has value of 0, returns NaN Matches on the optional idProperty given, otherwise defaulting to classId Deep copies and maintains all other properties from the numerator metric"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toRasterProjection",children:"toRasterProjection"})}),(0,i.jsx)(s.td,{children:"Reprojects a feature to the same projection as the raster."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toShortSketches",children:"toShortSketches"})}),(0,i.jsx)(s.td,{children:"Returns an array of shorthand sketches (id + name) given a Sketch or SketchCollection. Includes a shorthand of parent collection also"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toSketchArray",children:"toSketchArray"})}),(0,i.jsx)(s.td,{children:"Converts a Sketch or SketchCollection to a Sketch array, maintaining geometry type Useful for putting in a consistent form that can be iterated over"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toSketchPropertiesArray",children:"toSketchPropertiesArray"})}),(0,i.jsx)(s.td,{children:"Converts array of sketches to an array of their SketchProperties"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/unpackMetrics",children:"unpackMetrics"})}),(0,i.jsx)(s.td,{children:"Converts MetricPack to a new Metric array."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/updateCommandsSync",children:"updateCommandsSync"})}),(0,i.jsx)(s.td,{children:"Run dynamodb update commands synchronously to avoid throttling, retrying on ThroughputError"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/valueFormatter",children:"valueFormatter"})}),(0,i.jsx)(s.td,{children:"Given a number or string value and the name of a formatter function, returns a formatted value"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/zeroPolygon",children:"zeroPolygon"})}),(0,i.jsx)(s.td,{children:"Returns a zero polygon geometry (three [0,0] coordinates)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketch",children:"zeroSketch"})}),(0,i.jsx)(s.td,{children:"Given sketch, returns the mutated sketch with a zero polygon geometry (three [0,0] coordinates)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketchArray",children:"zeroSketchArray"})}),(0,i.jsx)(s.td,{children:"Given sketch array, returns the mutated sketches with a zero polygon geometry (three [0,0] coordinates)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketchCollection",children:"zeroSketchCollection"})}),(0,i.jsx)(s.td,{children:"Given sketch collection, returns the mutated collection with all child sketches switched to have zero polygon geometry (three [0,0] coordinates)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/zoneClassMetrics",children:"zoneClassMetrics"})}),(0,i.jsx)(s.td,{children:"Given sketch for rbcsZone or collection of zone sketches with userAttributes for rcbs activities, returns metrics with zone classification score as value. If sketch collection, collection metric will have mpa classification score index as value"})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"type-aliases",children:"Type Aliases"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Type alias"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/bandArithmetic",children:"bandArithmetic"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/BaseDatasource",children:"BaseDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/BBox",children:"BBox"})}),(0,i.jsxs)(s.td,{children:["Bounding box ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-5",children:"https://tools.ietf.org/html/rfc7946#section-5"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClassificationId",children:"ClassificationId"})}),(0,i.jsx)(s.td,{children:"Unique string ID for classification given to sketches (e.g. zone classification, protection level)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClassStats",children:"ClassStats"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClientJsonConfig",children:"ClientJsonConfig"})}),(0,i.jsx)(s.td,{children:"Represents a geoprocessing client object"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClipOperations",children:"ClipOperations"})}),(0,i.jsx)(s.td,{children:"Supported clip operations"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/DataClass",children:"DataClass"})}),(0,i.jsx)(s.td,{children:"Represents a group of data classes. Used to access the data, and calcualte metrics based on them. This interface is murky but it supports a variety of scenarios: - Vector dataset with one feature class - Vector dataset with multiple feature class, each with their own file datasource, and possibly only one layerId to display them all - Vector dataset with multiple feature classes, all in one file datasource, each class with its own layerId - Raster with multiple feature classes represented by unique integer values that map to class names"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Datasource",children:"Datasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/EezLandUnion",children:"EezLandUnion"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExecutionMode",children:"ExecutionMode"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExternalRasterDatasource",children:"ExternalRasterDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExternalVectorDatasource",children:"ExternalVectorDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/EXTRA_RASTER_STAT",children:"EXTRA_RASTER_STAT"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/FunctionExtraParams",children:"FunctionExtraParams"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GEOBLAZE_RASTER_STAT",children:"GEOBLAZE_RASTER_STAT"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geographies",children:"Geographies"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geography",children:"Geography"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:"GeoJsonProperties"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geometry",children:"Geometry"})}),(0,i.jsxs)(s.td,{children:["Geometry object. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3",children:"https://tools.ietf.org/html/rfc7946#section-3"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingJsonConfig",children:"GeoprocessingJsonConfig"})}),(0,i.jsx)(s.td,{children:"Represents a single JS package"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingRequest",children:"GeoprocessingRequest"})}),(0,i.jsx)(s.td,{children:"Geoprocessing request sent via HTTP GET, with extraParams as url-encoded JSON string"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingRequestParams",children:"GeoprocessingRequestParams"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeorasterMetadata",children:"GeorasterMetadata"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoTypes",children:"GeoTypes"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/get",children:"get"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GroupMetricAgg",children:"GroupMetricAgg"})}),(0,i.jsx)(s.td,{children:"Single flattened metric with class values keyed by class name Useful for rendering table rows with the values of multiple classes for a group"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GroupMetricSketchAgg",children:"GroupMetricSketchAgg"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/histogram",children:"histogram"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/identify",children:"identify"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportRasterDatasourceConfig",children:"ImportRasterDatasourceConfig"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportRasterDatasourceOptions",children:"ImportRasterDatasourceOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportVectorDatasourceConfig",children:"ImportVectorDatasourceConfig"})}),(0,i.jsx)(s.td,{children:"Full configuration needed to import a dataset"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportVectorDatasourceOptions",children:"ImportVectorDatasourceOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/InternalRasterDatasource",children:"InternalRasterDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/InternalVectorDatasource",children:"InternalVectorDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ISO8601DateTime",children:"ISO8601DateTime"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ISO8601Duration",children:"ISO8601Duration"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/IucnActivityRankId",children:"IucnActivityRankId"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/JSONValue",children:"JSONValue"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/load",children:"load"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/LoadedPackage",children:"LoadedPackage"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/max",children:"max"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/mean",children:"mean"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/median",children:"median"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metric",children:"Metric"})}),(0,i.jsx)(s.td,{children:"Single record of value, stratified in one or more dimensions. The name Metric is an overgeneralization, you can think of it as a MetricValue."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricDimension",children:"MetricDimension"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricGroup",children:"MetricGroup"})}),(0,i.jsx)(s.td,{children:"Represents a single metric, having one DataGroup"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricGroups",children:"MetricGroups"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricIdTypes",children:"MetricIdTypes"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricProperty",children:"MetricProperty"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metrics",children:"Metrics"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/min",children:"min"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/mode",children:"mode"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MpaClassification",children:"MpaClassification"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Nullable",children:"Nullable"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Objective",children:"Objective"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveAnswer",children:"ObjectiveAnswer"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveAnswerMap",children:"ObjectiveAnswerMap"})}),(0,i.jsx)(s.td,{children:"Generic type for mapping classification ID to whether it counds toward or meets an objective Specific classification systems will extend this type with short list of allowed classification IDs"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveId",children:"ObjectiveId"})}),(0,i.jsx)(s.td,{children:"Unique name of objective"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Objectives",children:"Objectives"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/OsmLandFeature",children:"OsmLandFeature"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Package",children:"Package"})}),(0,i.jsx)(s.td,{children:"Represents a single JS package"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/PartialReportContextValue",children:"PartialReportContextValue"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Position",children:"Position"})}),(0,i.jsxs)(s.td,{children:["A Position is an array of coordinates. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.1",children:"https://tools.ietf.org/html/rfc7946#section-3.1.1"})," Array should contain between two and three elements. The previous GeoJSON specification allowed more elements (e.g., which could be used to represent M values), but the current specification only allows X, Y, and (optionally) Z to be defined."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Project",children:"Project"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/rasterCalculator",children:"rasterCalculator"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/RasterDatasource",children:"RasterDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/RbcsMpaObjectiveAnswerMap",children:"RbcsMpaObjectiveAnswerMap"})}),(0,i.jsx)(s.td,{children:"Mapping of RBCS MPA Classification ID to whether it counts toward or meets an objective"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/RbcsMpaProtectionLevel",children:"RbcsMpaProtectionLevel"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SketchGeometryTypes",children:"SketchGeometryTypes"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SketchProperties",children:"SketchProperties"})}),(0,i.jsx)(s.td,{children:"Properties of a Sketch, defines known keys as well as unknown for extensiblity"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/stats",children:"stats"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Stats-1",children:"Stats"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/sum",children:"sum"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SUPPORTED_RASTER_STAT",children:"SUPPORTED_RASTER_STAT"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SupportedFormats",children:"SupportedFormats"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/TaskKey",children:"TaskKey"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/TypedArray",children:"TypedArray"})}),(0,i.jsx)(s.td,{children:"Typed array of data values, the basic building block of a geotiff"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/UserAttribute",children:"UserAttribute"})}),(0,i.jsx)(s.td,{children:"User-defined attributes with values for Sketch. Defines known keys as well as unknown for extensiblity"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ValueFormatter",children:"ValueFormatter"})}),(0,i.jsx)(s.td,{children:"Options for formatting a given value."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/VectorDatasource",children:"VectorDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Zone",children:"Zone"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneColor",children:"ZoneColor"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneId",children:"ZoneId"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneName",children:"ZoneName"})}),(0,i.jsx)(s.td,{children:"-"})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"variables",children:"Variables"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Variable"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/activityRanks",children:"activityRanks"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/baseDatasourceSchema",children:"baseDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/bboxSchema",children:"bboxSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/box2dSchema",children:"box2dSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/box3dSchema",children:"box3dSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/classStatsSchema",children:"classStatsSchema"})}),(0,i.jsx)(s.td,{children:"Pre-calculated stats by key by class"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/clientJsonConfigSchema",children:"clientJsonConfigSchema"})}),(0,i.jsx)(s.td,{children:"Represents a geoprocessing client object"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/commonHeaders",children:"commonHeaders"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/dataClassSchema",children:"dataClassSchema"})}),(0,i.jsx)(s.td,{children:"Represents a single class of data. Ties it to an underlying datasource, holds attributes used for displaying in user interfaces"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/datasourceConfig",children:"datasourceConfig"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/datasourceFormatDescriptions",children:"datasourceFormatDescriptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/datasourceSchema",children:"datasourceSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/datasourcesSchema",children:"datasourcesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/defaultReportContext",children:"defaultReportContext"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/DEFAULTS",children:"DEFAULTS"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/defaultStatValues",children:"defaultStatValues"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/externalDatasourceSchema",children:"externalDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"Properties for external datasource"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/externalRasterDatasourceSchema",children:"externalRasterDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/externalVectorDatasourceSchema",children:"externalVectorDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/EXTRA_RASTER_STATS",children:"EXTRA_RASTER_STATS"})}),(0,i.jsx)(s.td,{children:"Additional raster stats calculated by geoprocessing library"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/extraParamsSchema",children:"extraParamsSchema"})}),(0,i.jsx)(s.td,{children:"Default set of additional parameters that a geoprocessing or preprocessing function can accept Override or extend as needed with more specific types, and use .parse() function to validate your input"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/fcSchema",children:"fcSchema"})}),(0,i.jsx)(s.td,{children:"Zod schema for FeatureCollection containing polygons or multipolygons"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/featureSchema",children:"featureSchema"})}),(0,i.jsx)(s.td,{children:"Zod schema for Feature containing Polygon or MultiPolygon"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/featuresSchema",children:"featuresSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/fixtures",children:"fixtures"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/fullColor",children:"fullColor"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/FULLY_PROTECTED_LEVEL",children:"FULLY_PROTECTED_LEVEL"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/GEOBLAZE_RASTER_STATS",children:"GEOBLAZE_RASTER_STATS"})}),(0,i.jsx)(s.td,{children:"Stats supported by geoblaze.stats() function"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/geoblazeDefaultStatValues",children:"geoblazeDefaultStatValues"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/geographiesSchema",children:"geographiesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/geographySchema",children:"geographySchema"})}),(0,i.jsx)(s.td,{children:"A geographic area (Polygon) for planning. Typically used to represent a planning area"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/geoprocessingConfigSchema",children:"geoprocessingConfigSchema"})}),(0,i.jsx)(s.td,{children:"Represents a single JS package"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/geoTypesSchema",children:"geoTypesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/globalDatasources",children:"globalDatasources"})}),(0,i.jsx)(s.td,{children:"Definitive list of global datasources for geoprocessing framework @todo: fetch from global-datasources repo"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/globalDatasourcesById",children:"globalDatasourcesById"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/highColor",children:"highColor"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/HIGHLY_PROTECTED_LEVEL",children:"HIGHLY_PROTECTED_LEVEL"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/importRasterDatasourceOptionsSchema",children:"importRasterDatasourceOptionsSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/importVectorDatasourceOptionsSchema",children:"importVectorDatasourceOptionsSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/internalDatasourceSchema",children:"internalDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"Timestamp properties to ease syncing with local/published datasource files"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/internalImportSchema",children:"internalImportSchema"})}),(0,i.jsx)(s.td,{children:"Properties for importing an internal datasource"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/internalRasterDatasourceSchema",children:"internalRasterDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/internalVectorDatasourceSchema",children:"internalVectorDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/internalVectorImportSchema",children:"internalVectorImportSchema"})}),(0,i.jsx)(s.td,{children:"Properties for import of internal vector datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnActivities",children:"iucnActivities"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnActivityCategories",children:"iucnActivityCategories"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoriesList",children:"iucnCategoriesList"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoriesMap",children:"iucnCategoriesMap"})}),(0,i.jsx)(s.td,{children:"IUCN category definitions. Note categories 2/3 and 4/6 have been merged because they have the same allowed uses"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoryNames",children:"iucnCategoryNames"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnLevels",children:"iucnLevels"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/jsonSchema",children:"jsonSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/loadedPackageSchema",children:"loadedPackageSchema"})}),(0,i.jsx)(s.td,{children:"Stricter schema for npm package.json metadata, with most fields guaranteed present"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/lowColor",children:"lowColor"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/measurementScalesSchema",children:"measurementScalesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/measurementTypesSchema",children:"measurementTypesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/MetricDimensions",children:"MetricDimensions"})}),(0,i.jsx)(s.td,{children:"Dimensions used in Metric"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/metricGroupSchema",children:"metricGroupSchema"})}),(0,i.jsx)(s.td,{children:"Defines a metric in combination with a datasource, with one or more data classes"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/metricGroupsSchema",children:"metricGroupsSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/MetricProperties",children:"MetricProperties"})}),(0,i.jsx)(s.td,{children:"Properties used in Metric"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/metricSchema",children:"metricSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/metricsSchema",children:"metricsSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/MODERATELY_PROTECTED_LEVEL",children:"MODERATELY_PROTECTED_LEVEL"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/multipolygonSchema",children:"multipolygonSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_GREEN",children:"OBJECTIVE_GREEN"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_MAYBE",children:"OBJECTIVE_MAYBE"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_NO",children:"OBJECTIVE_NO"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_RED",children:"OBJECTIVE_RED"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_YELLOW",children:"OBJECTIVE_YELLOW"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_YES",children:"OBJECTIVE_YES"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveAnswerMapSchema",children:"objectiveAnswerMapSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveAnswerSchema",children:"objectiveAnswerSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveCountsAnswers",children:"objectiveCountsAnswers"})}),(0,i.jsx)(s.td,{children:"Readonly list of possible answers for whether sketch counts toward objective"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveCountsColorMap",children:"objectiveCountsColorMap"})}),(0,i.jsx)(s.td,{children:"Object mapping answers for whether sketch counts toward objective to stop light colors - green / yellow / red"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveSchema",children:"objectiveSchema"})}),(0,i.jsx)(s.td,{children:"Base planning objective, extend as needed for specific classification system or ad-hoc"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/objectivesSchema",children:"objectivesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/packageSchema",children:"packageSchema"})}),(0,i.jsx)(s.td,{children:"Schema for npm package.json metadata, as found in the wild"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/PLANNING_AREA_TYPES",children:"PLANNING_AREA_TYPES"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/planningAreaTypesSchema",children:"planningAreaTypesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/polygonSchema",children:"polygonSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/POORLY_PROTECTED_LEVEL",children:"POORLY_PROTECTED_LEVEL"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/projectSchema",children:"projectSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rasterDatasourceSchema",children:"rasterDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"Properties for raster datasource"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsAnchoringActivities",children:"rbcsAnchoringActivities"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsAquacultureActivities",children:"rbcsAquacultureActivities"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsConstants",children:"rbcsConstants"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsGearTypes",children:"rbcsGearTypes"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsMpaProtectionLevels",children:"rbcsMpaProtectionLevels"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsScores",children:"rbcsScores"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/ReportContext",children:"ReportContext"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingLanguageChangeEvent",children:"seaSketchReportingLanguageChangeEvent"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingMessageEventType",children:"seaSketchReportingMessageEventType"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingVisibleLayersChangeEvent",children:"seaSketchReportingVisibleLayersChangeEvent"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/statsSchema",children:"statsSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/SUPPORTED_RASTER_STATS",children:"SUPPORTED_RASTER_STATS"})}),(0,i.jsx)(s.td,{children:"Combined raster stats supported by geoprocessing library"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/supportedFormatsSchema",children:"supportedFormatsSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/UNPROTECTED_LEVEL",children:"UNPROTECTED_LEVEL"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/vectorDatasourceSchema",children:"vectorDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"Properties for vector datasource"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/version",children:"version"})}),(0,i.jsx)(s.td,{children:"-"})]})]})]})]})}function h(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},28453:(e,s,r)=>{r.d(s,{R:()=>c,x:()=>o});var i=r(96540);const n={},t=i.createContext(n);function c(e){const s=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),i.createElement(t.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/6dd78e99.7c3a7fc5.js b/assets/js/6dd78e99.7c3a7fc5.js
new file mode 100644
index 0000000000..0a718ab4b9
--- /dev/null
+++ b/assets/js/6dd78e99.7c3a7fc5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44849],{30135:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>t,metadata:()=>o,toc:()=>d});var i=r(74848),n=r(28453);const t={},c="geoprocessing",o={id:"api/geoprocessing/index",title:"geoprocessing",description:"geoprocessing is the main module used by a geoprocessing project. It includes everything needing for creating, building, testing, and deploying a geoprocessing project with the exception of UI components which are exported separately in client-ui.",source:"@site/docs/api/geoprocessing/index.md",sourceDirName:"api/geoprocessing",slug:"/api/geoprocessing/",permalink:"/geoprocessing/docs/next/api/geoprocessing/",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/geoprocessing/index.md",tags:[],version:"current",frontMatter:{}},a={},d=[{value:"Index",id:"index",level:2},{value:"Classes",id:"classes",level:3},{value:"Interfaces",id:"interfaces",level:3},{value:"Enumerations",id:"enumerations",level:3},{value:"Functions",id:"functions",level:3},{value:"Type Aliases",id:"type-aliases",level:3},{value:"Variables",id:"variables",level:3}];function l(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"geoprocessing",children:"geoprocessing"})}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.code,{children:"geoprocessing"})," is the main module used by a geoprocessing project. It includes everything needing for creating, building, testing, and deploying a geoprocessing project with the exception of UI components which are exported separately in ",(0,i.jsx)(s.code,{children:"client-ui"}),"."]}),"\n",(0,i.jsx)(s.h2,{id:"index",children:"Index"}),"\n",(0,i.jsx)(s.h3,{id:"classes",children:"Classes"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Class"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/ComplexityError",children:"ComplexityError"})}),(0,i.jsx)(s.td,{children:"Error signifying function threw due to not being able to handle the input - e.g. size/complexity"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/GeoprocessingHandler",children:"GeoprocessingHandler"})}),(0,i.jsx)(s.td,{children:"Manages the task of executing a geoprocessing function within an AWS Lambda function. This includes sending estimate of completion, caching the results, and getting them back to the client. Supports 2 different execution modes for running a geoprocessing function - sync and async These modes create 3 different request scenarios. A lambda is created for each scenario, and they all run this one handler. 1 - sync executionMode - immediately run gp function and return result in resolved promise to client 2 - async executionMode, ASYNC_REQUEST_TYPE=start - invoke a second lambda to run gp function and return incomplete task to client with socket for notification of result 3 - async executionMode, ASYNC_REQUEST_TYPE=run - run gp function started by scenario 2 and send completed task info on socket for client to pick up result"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/PreprocessingHandler",children:"PreprocessingHandler"})}),(0,i.jsx)(s.td,{children:"Lambda handler for a preprocessing function"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/ProjectClientBase",children:"ProjectClientBase"})}),(0,i.jsx)(s.td,{children:"Client for reading project configuration/metadata."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/ValidationError",children:"ValidationError"})}),(0,i.jsx)(s.td,{children:"Error signifying input is not valid"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/VectorDataSource",children:"VectorDataSource"})}),(0,i.jsx)(s.td,{children:"-"})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"interfaces",children:"Interfaces"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Interface"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/BaseImportDatasourceConfig",children:"BaseImportDatasourceConfig"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/CalcStatsOptions",children:"CalcStatsOptions"})}),(0,i.jsxs)(s.td,{children:["options accepted by geoblaze.stats() to calc-stats library See ",(0,i.jsx)(s.a,{href:"https://github.com/DanielJDufour/calc-stats/tree/main?tab=readme-ov-file#advanced-usage",children:"https://github.com/DanielJDufour/calc-stats/tree/main?tab=readme-ov-file#advanced-usage"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ClipOptions",children:"ClipOptions"})}),(0,i.jsx)(s.td,{children:"Optional parameters for polygon clip preprocessor"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/DatasourceClipOperation",children:"DatasourceClipOperation"})}),(0,i.jsx)(s.td,{children:"Parameters for clip operation using a datasource"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/DatasourceOptions",children:"DatasourceOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/DefaultExtraParams",children:"DefaultExtraParams"})}),(0,i.jsx)(s.td,{children:"Common set of extra parameters that might be passed to a geoprocessing function Replace or extend these as needed, there is nothing special about the param names other than to be descriptive of what they represent."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:"Feature"})}),(0,i.jsxs)(s.td,{children:["A feature object which contains a geometry and associated properties. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.2",children:"https://tools.ietf.org/html/rfc7946#section-3.2"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureClipOperation",children:"FeatureClipOperation"})}),(0,i.jsx)(s.td,{children:"Parameters for clip operation using polygon features"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureCollection",children:"FeatureCollection"})}),(0,i.jsxs)(s.td,{children:["A collection of feature objects. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.3",children:"https://tools.ietf.org/html/rfc7946#section-3.3"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureMap",children:"FeatureMap"})}),(0,i.jsx)(s.td,{children:"A simple map of features keyed by their name"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureTree",children:"FeatureTree"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FgBoundingBox",children:"FgBoundingBox"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeogProp",children:"GeogProp"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeometryCollection",children:"GeometryCollection"})}),(0,i.jsxs)(s.td,{children:["Geometry Collection ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.8",children:"https://tools.ietf.org/html/rfc7946#section-3.1.8"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingHandlerOptions",children:"GeoprocessingHandlerOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingProject",children:"GeoprocessingProject"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingRequestModel",children:"GeoprocessingRequestModel"})}),(0,i.jsx)(s.td,{children:"Geoprocessing request internal data model, with full objects, no JSON strings"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingServiceMetadata",children:"GeoprocessingServiceMetadata"})}),(0,i.jsx)(s.td,{children:"Expected public service metadata for each function"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingTask",children:"GeoprocessingTask"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Georaster",children:"Georaster"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Histogram",children:"Histogram"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/HistogramOptions",children:"HistogramOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnActivity",children:"IucnActivity"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnActivityRank",children:"IucnActivityRank"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnCategory",children:"IucnCategory"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnCategoryCombined",children:"IucnCategoryCombined"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/LineString",children:"LineString"})}),(0,i.jsxs)(s.td,{children:["LineString geometry object. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.4",children:"https://tools.ietf.org/html/rfc7946#section-3.1.4"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MetricGroupItem",children:"MetricGroupItem"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MetricPack",children:"MetricPack"})}),(0,i.jsx)(s.td,{children:"Alternative JSON format for metrics data that is smaller in size, better suited for blob storage and network transport"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiLineString",children:"MultiLineString"})}),(0,i.jsxs)(s.td,{children:["MultiLineString geometry object. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.5",children:"https://tools.ietf.org/html/rfc7946#section-3.1.5"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:"MultiPolygon"})}),(0,i.jsxs)(s.td,{children:["MultiPolygon geometry object. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.7",children:"https://tools.ietf.org/html/rfc7946#section-3.1.7"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Node",children:"Node"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/NullSketch",children:"NullSketch"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/NullSketchCollection",children:"NullSketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/OverlapRasterOptions",children:"OverlapRasterOptions"})}),(0,i.jsx)(s.td,{children:"options accepted by rasterStats"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PercentEdgeOptions",children:"PercentEdgeOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Point",children:"Point"})}),(0,i.jsxs)(s.td,{children:["Point geometry object. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.2",children:"https://tools.ietf.org/html/rfc7946#section-3.1.2"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:"Polygon"})}),(0,i.jsxs)(s.td,{children:["Polygon geometry object. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.6",children:"https://tools.ietf.org/html/rfc7946#section-3.1.6"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingHandlerOptions",children:"PreprocessingHandlerOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingRequest",children:"PreprocessingRequest"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingResponse",children:"PreprocessingResponse"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingService",children:"PreprocessingService"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingServiceMetadata",children:"PreprocessingServiceMetadata"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ProjectClientConfig",children:"ProjectClientConfig"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ProjectClientInterface",children:"ProjectClientInterface"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RasterStatsOptions",children:"RasterStatsOptions"})}),(0,i.jsx)(s.td,{children:"options accepted by rasterStats"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RbcsObjective",children:"RbcsObjective"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RegBasedClassificationMetric",children:"RegBasedClassificationMetric"})}),(0,i.jsx)(s.td,{children:"Extended metric for mpa-reg-based-classification results, either zone or mpa classification"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Report",children:"Report"})}),(0,i.jsx)(s.td,{children:"Represents a single report, with one or more metrics"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportContextValue",children:"ReportContextValue"})}),(0,i.jsx)(s.td,{children:"Provides necessary context to ReportClient components, particularly for use by useFunction() and useSketchProperties() hooks"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportResult",children:"ReportResult"})}),(0,i.jsx)(s.td,{children:"Report results consist of collections of metrics for sketches"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportResultBase",children:"ReportResultBase"})}),(0,i.jsx)(s.td,{children:"Metrics for reports not associated with sketches. Used for precalculation"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RootTaskItem",children:"RootTaskItem"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RoundDecimalOptions",children:"RoundDecimalOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingMessageEvent",children:"SeaSketchReportingMessageEvent"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingToggleLanguageEvent",children:"SeaSketchReportingToggleLanguageEvent"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingToggleLayerVisibilityEvent",children:"SeaSketchReportingToggleLayerVisibilityEvent"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingVisibleLayersChangeEvent",children:"SeaSketchReportingVisibleLayersChangeEvent"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Sketch",children:"Sketch"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchCollection",children:"SketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchMap",children:"SketchMap"})}),(0,i.jsx)(s.td,{children:"A simple map of sketches and/or sketch collections keyed by their name"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/StatsObject",children:"StatsObject"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/TestExampleOutput",children:"TestExampleOutput"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorDataSourceDetails",children:"VectorDataSourceDetails"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorDataSourceOptions",children:"VectorDataSourceOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorFeature",children:"VectorFeature"})}),(0,i.jsxs)(s.td,{children:["A feature object which contains a geometry and associated properties. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.2",children:"https://tools.ietf.org/html/rfc7946#section-3.2"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorPropertyFilter",children:"VectorPropertyFilter"})}),(0,i.jsx)(s.td,{children:"Specify one or more literal values for one or more vector Feature properties"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/WindowOptions",children:"WindowOptions"})}),(0,i.jsx)(s.td,{children:"defines the new raster image to generate as a window in the source raster image. Resolution (cell size) is determined from this"})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"enumerations",children:"Enumerations"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Enumeration"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsx)(s.tbody,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/enumerations/GeoprocessingTaskStatus",children:"GeoprocessingTaskStatus"})}),(0,i.jsx)(s.td,{children:"-"})]})})]}),"\n",(0,i.jsx)(s.h3,{id:"functions",children:"Functions"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Function"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/anchorScore",children:"anchorScore"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/aquacultureScore",children:"aquacultureScore"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/area",children:"area"})}),(0,i.jsx)(s.td,{children:"Calculates the area of each sketch and collection."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/batchDelete",children:"batchDelete"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/batchDeleteTasks",children:"batchDeleteTasks"})}),(0,i.jsx)(s.td,{children:"Batch delete array of tasks"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/bboxOverlap",children:"bboxOverlap"})}),(0,i.jsx)(s.td,{children:"Returns whether bounding box A overlaps with or touches bounding box B"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/booleanOverlap",children:"booleanOverlap"})}),(0,i.jsx)(s.td,{children:"Returns all B items that overlap with a A items Not all Feature types are supported, see typedoc A and B must have the same geometry dimension (single or multi). Builds on @turf/boolean-overlap."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/byteSize",children:"byteSize"})}),(0,i.jsx)(s.td,{children:"Get length of string in bytes"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/capitalize",children:"capitalize"})}),(0,i.jsx)(s.td,{children:"Capitalizes the first letter of string"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/chunk",children:"chunk"})}),(0,i.jsx)(s.td,{children:"Splits an array into chunks of size"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/classIdMapping",children:"classIdMapping"})}),(0,i.jsx)(s.td,{children:"Returns mapping of class ID to class DataClass objects"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/classifyMPA",children:"classifyMPA"})}),(0,i.jsx)(s.td,{children:"Given zone scores, returns object containing final scores, and mpa classification"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/classifyZone",children:"classifyZone"})}),(0,i.jsx)(s.td,{children:"Given activity scores, returns zone number"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/cleanBBox",children:"cleanBBox"})}),(0,i.jsx)(s.td,{children:"Normalizes bounding box longitude values to the [-180, 180] range if they cross the antimeridian"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/cleanCoords",children:"cleanCoords"})}),(0,i.jsx)(s.td,{children:"Cleans geojson coordinates to be within the bounds of the world [-90, -180, 90, 180], so that they don't wrap off the end, and can be split"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/clip",children:"clip"})}),(0,i.jsx)(s.td,{children:"Performs one of 4 different clip operations on features"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/clipMultiMerge",children:"clipMultiMerge"})}),(0,i.jsx)(s.td,{children:"Performs clip after first merging features2 coords into a single multipolygon. Avoids errors in underlying clipping library when too many features in features2"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/clipToPolygonDatasources",children:"clipToPolygonDatasources"})}),(0,i.jsx)(s.td,{children:"Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/clipToPolygonFeatures",children:"clipToPolygonFeatures"})}),(0,i.jsx)(s.td,{children:"Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more Polygon features"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/collectionHasGeometry",children:"collectionHasGeometry"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/createMetric",children:"createMetric"})}),(0,i.jsx)(s.td,{children:"Creates a new metric. Defaults to ID values of null and then copies in passed metric properties"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/createMetrics",children:"createMetrics"})}),(0,i.jsx)(s.td,{children:"Creates fully defined metrics from partial. Metric values not provided are initialized to null"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/ensureValidPolygon",children:"ensureValidPolygon"})}),(0,i.jsx)(s.td,{children:"Returns true if feature is valid and meets requirements set by options."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/featureToSketch",children:"featureToSketch"})}),(0,i.jsx)(s.td,{children:"Converts Feature to Sketch with reasonable defaults given for sketch properties if not provided"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/featureToSketchCollection",children:"featureToSketchCollection"})}),(0,i.jsx)(s.td,{children:"Converts FeatureCollection to SketchCollection with reasonable defaults given for sketch properties if not provided"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/fetchGeoJSON",children:"fetchGeoJSON"})}),(0,i.jsx)(s.td,{children:"Given geoprocessing function request, fetches the GeoJSON, which can also be sketch JSON"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/fgbFetchAll",children:"fgbFetchAll"})}),(0,i.jsx)(s.td,{children:"Fetch features from flatgeobuf at url within bounding box Awaits all features before returning, rather than streaming them."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/fgBoundingBox",children:"fgBoundingBox"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/findAndUpdateMetricValue",children:"findAndUpdateMetricValue"})}),(0,i.jsx)(s.td,{children:"Returns new sketchMetrics array with first sketchMetric matched set with new value. If no match, returns copy of sketchMetrics. Does not mutate array in place."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/firstMatching",children:"firstMatching"})}),(0,i.jsx)(s.td,{children:"Returns the first item that returns true for filter"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/firstMatchingMetric",children:"firstMatchingMetric"})}),(0,i.jsx)(s.td,{children:"Returns the first metric that returns true for metricFilter"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/flattenByGroupAllClass",children:"flattenByGroupAllClass"})}),(0,i.jsx)(s.td,{children:"Aggregates metrics by group"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/flattenByGroupSketchAllClass",children:"flattenByGroupSketchAllClass"})}),(0,i.jsx)(s.td,{children:"Flattens group class metrics, one for each group and sketch. Each object includes the percValue for each class, and the total percValue with classes combined groupId, sketchId, class1, class2, ..., total"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/flattenBySketchAllClass",children:"flattenBySketchAllClass"})}),(0,i.jsx)(s.td,{children:"Flattens class sketch metrics into array of objects, one for each sketch, where each object contains sketch id, sketch name, and all metric values for each class"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/flattenSketchAllId",children:"flattenSketchAllId"})}),(0,i.jsx)(s.td,{children:"Returns one aggregate object for every sketch ID present in metrics, with additional property for each unique value for idProperty present for sketch. Example - idProperty of 'classId', and two classes are present in metrics of 'classA', and 'classB' then each flattened object will have two extra properties per sketch, .classA and .classB, each with the first metric value for that sketch/idProperty found"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/gearTypeScore",children:"gearTypeScore"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genClipLoader",children:"genClipLoader"})}),(0,i.jsx)(s.td,{children:"Given a project client and 1 or more clip operations, returns a function that when called loads clip features from their datasources that overlap with the feature polygon to clip. Pass this function to genPreprocessor() and it will take care of the rest."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genClipToPolygonDatasources",children:"genClipToPolygonDatasources"})}),(0,i.jsx)(s.td,{children:"Returns a function that Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genClipToPolygonFeatures",children:"genClipToPolygonFeatures"})}),(0,i.jsx)(s.td,{children:"Returns a function that applies clip operations to a feature using other polygon features."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genFeature",children:"genFeature"})}),(0,i.jsx)(s.td,{children:"Returns a Feature with given features geometry and properties. Reasonable defaults are given for properties not provided Default geometry is a square from 0,0 to 1,1"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genFeatureCollection",children:"genFeatureCollection"})}),(0,i.jsx)(s.td,{children:"Given array of features, return a feature collection with given properties. Generates reasonable default values for any properties not passed in The geometry type of the returned collection will match the one passed in Properties of features are retained"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genRandomPolygons",children:"genRandomPolygons"})}),(0,i.jsxs)(s.td,{children:["Generates random polygons within provided bounds. numPolygons defaults to 300, max_radial_length to 0.5 Wrapper around @turf/random - ",(0,i.jsx)(s.a,{href:"https://turfjs.org/docs/#randomPolygon",children:"https://turfjs.org/docs/#randomPolygon"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleNullSketch",children:"genSampleNullSketch"})}),(0,i.jsx)(s.td,{children:"Returns a Sketch with given geometry and Geometry type, Properties are reasonable random"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleNullSketchCollection",children:"genSampleNullSketchCollection"})}),(0,i.jsx)(s.td,{children:"Given feature collection, return a sketch collection with reasonable random props. The geometry type of the returned collection will match the one passed in"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketch",children:"genSampleSketch"})}),(0,i.jsx)(s.td,{children:"Returns a Sketch with given geometry and Geometry type, Properties are reasonable random"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchCollection",children:"genSampleSketchCollection"})}),(0,i.jsx)(s.td,{children:"Given feature collection, return a sketch collection with reasonable random props. The geometry type of the returned collection will match the one passed in"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchCollectionFromSketches",children:"genSampleSketchCollectionFromSketches"})}),(0,i.jsx)(s.td,{children:"Given feature collection, return a sketch collection with reasonable random props. The geometry type of the returned collection will match the one passed in"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchContext",children:"genSampleSketchContext"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleUserAttributes",children:"genSampleUserAttributes"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSketch",children:"genSketch"})}),(0,i.jsx)(s.td,{children:"Returns a Sketch with given features geometry and properties. Reasonable defaults are given for properties not provided Default geometry is a square from 0,0 to 1,1"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genSketchCollection",children:"genSketchCollection"})}),(0,i.jsx)(s.td,{children:"Given array of sketches, return a sketch collection with given properties. Generates reasonable default values for any properties not passed in The geometry type of the returned collection will match the one passed in Properties of sketches are retained"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genTaskCacheKey",children:"genTaskCacheKey"})}),(0,i.jsx)(s.td,{children:"Generates a cache key for a geoprocessing request, given sketch properties and optional extra parameters (must be JSON compatible object) Extra parameters are canonicalized and hashed using md5 to ensure cache key is consistent. Canonicalization ensures object keys are consistent but not arrays. If you use arrays as extraParam values, make sure the order stays the same and sort first if needed to generate a consistent cache key."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/genZodErrorMessage",children:"genZodErrorMessage"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getArea",children:"getArea"})}),(0,i.jsx)(s.td,{children:"Returns area of valid raster cells (not nodata) overlapping with feature. If no valid cells found, returns 0."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getClassificationLabel",children:"getClassificationLabel"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getCogFilename",children:"getCogFilename"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getDatasetBucketName",children:"getDatasetBucketName"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getDatasourceById",children:"getDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return datasource from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getExternalRasterDatasourceById",children:"getExternalRasterDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return external raster datasource from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getExternalVectorDatasourceById",children:"getExternalVectorDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return external vector datasource from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getFeatures",children:"getFeatures"})}),(0,i.jsx)(s.td,{children:"Returns features for a variety of vector datasources and formats, with additional filter options"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getFeaturesForSketchBBoxes",children:"getFeaturesForSketchBBoxes"})}),(0,i.jsx)(s.td,{children:"Loads features from a FlatGeobuf referenced by URL, which intersect the bounding boxes of each individual sketch in a SketchCollection, or a single Sketch."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getFirstFromParam",children:"getFirstFromParam"})}),(0,i.jsx)(s.td,{children:"Returns first element from param object at paramName key. Parameter can be string or array of strings"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getFlatGeobufFilename",children:"getFlatGeobufFilename"})}),(0,i.jsx)(s.td,{children:"Returns datasource filename in flatgeobuf format"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getFlatGeobufPath",children:"getFlatGeobufPath"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getGeopackagePath",children:"getGeopackagePath"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getHistogram",children:"getHistogram"})}),(0,i.jsx)(s.td,{children:"Returns histogram of value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getIndexIconPerc",children:"getIndexIconPerc"})}),(0,i.jsx)(s.td,{children:"Returns percent protection given index value, percent is proportion (percent) of bottom color to top color to use for icon given index value (as shown in paper) e.g. index = 5.4 means bottom icon color should take 25% of icon and top color 75%"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getInternalRasterDatasourceById",children:"getInternalRasterDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return internal datasource from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getInternalVectorDatasourceById",children:"getInternalVectorDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return internal vector datasource from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryForActivities",children:"getIucnCategoryForActivities"})}),(0,i.jsx)(s.td,{children:"Given list of allowed activities in the sketch, returns the highest category allowable The lack of an activity assumes it is not allowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryForSketches",children:"getIucnCategoryForSketches"})}),(0,i.jsx)(s.td,{children:"Return Category for each sketch keyed by sketchId"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryNameForSketches",children:"getIucnCategoryNameForSketches"})}),(0,i.jsx)(s.td,{children:"Return Category name for each sketch keyed by sketchId"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnLevelNameForSketches",children:"getIucnLevelNameForSketches"})}),(0,i.jsx)(s.td,{children:"Return level name for each sketch keyed by sketchId"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getJsonFilename",children:"getJsonFilename"})}),(0,i.jsx)(s.td,{children:"Returns datasource filename in geojson format"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getJsonPath",children:"getJsonPath"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getJsonUserAttribute",children:"getJsonUserAttribute"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getKeys",children:"getKeys"})}),(0,i.jsx)(s.td,{children:"Object.keys helper that returns strongly typed key values. Uses assertion so make sure your type covers all the keys!"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getMetricGroupObjectiveId",children:"getMetricGroupObjectiveId"})}),(0,i.jsx)(s.td,{children:"Returns the top-level objective assigned for the given MetricGroup. If a classID is also passed, returns the objective ID for that class within the metric group"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getMetricGroupObjectiveIds",children:"getMetricGroupObjectiveIds"})}),(0,i.jsx)(s.td,{children:"Returns array of all objective IDs configured for the given MetricGroup. If a class does not have an objectiveId assigned, then it gets the top-level objectiveId"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getMinYesCountMap",children:"getMinYesCountMap"})}),(0,i.jsx)(s.td,{children:"Returns an object mapping objective ID to ID of first classification that counts toward objective"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getMpaClassificationName",children:"getMpaClassificationName"})}),(0,i.jsx)(s.td,{children:"Returns protection level given MPA classification index value"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getObjectiveById",children:"getObjectiveById"})}),(0,i.jsx)(s.td,{children:"find and return objectives from passed objectives"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getParamStringArray",children:"getParamStringArray"})}),(0,i.jsx)(s.td,{children:"Validates and returns string[] parameter from extraParams. If param missing it returns an empty array"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getRasterBoxSpherical",children:"getRasterBoxSpherical"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getRasterDatasourceById",children:"getRasterDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return raster datasource (internal or external) from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getSketchCollectionChildIds",children:"getSketchCollectionChildIds"})}),(0,i.jsx)(s.td,{children:"Given sketch collection, returns IDs of sketches in the collection"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getSketchFeatures",children:"getSketchFeatures"})}),(0,i.jsx)(s.td,{children:"Given sketch or sketch collection, returns just the individual sketch features inside."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getSketchToMpaProtectionLevel",children:"getSketchToMpaProtectionLevel"})}),(0,i.jsx)(s.td,{children:"Returns object mapping sketch id to MPA classification given sketch for rbcsMpa or collection of sketches for rbcsMpas with rbcs activity userAttributes, and area metrics for each sketch, assumes each mpa is a single zone mpa"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getSum",children:"getSum"})}),(0,i.jsx)(s.td,{children:"Returns sum of raster value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getUserAttribute",children:"getUserAttribute"})}),(0,i.jsx)(s.td,{children:"UserAttributes are those filled in via the attributes form specified as part of a SketchClass. This getter function is easier to use than searching the Sketch.properties.userAttributes array, supports default values, and is easier to use with typescript."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getVectorDatasourceById",children:"getVectorDatasourceById"})}),(0,i.jsx)(s.td,{children:"find and return vector datasource (internal or external) from passed datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getZoneClassificationName",children:"getZoneClassificationName"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/groupBy",children:"groupBy"})}),(0,i.jsx)(s.td,{children:"Similar to lodash groupBy"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/hasOwnProperty",children:"hasOwnProperty"})}),(0,i.jsxs)(s.td,{children:["Type narrowing to allow property checking when object can be multiple types ",(0,i.jsx)(s.a,{href:"https://fettblog.eu/typescript-hasownproperty/",children:"https://fettblog.eu/typescript-hasownproperty/"})," Any code inside a block guarded by a conditional call to this function will have type narrowed to X"]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/includeVirtualSketch",children:"includeVirtualSketch"})}),(0,i.jsx)(s.td,{children:"If sketch collection passes sketchTest, then returns new collection with mergeSketchColl sketches appended and updated bbox"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/intersectInChunks",children:"intersectInChunks"})}),(0,i.jsx)(s.td,{children:"Calculates area overlap between a feature A and a feature array B. Intersection is done in chunks on featuresB to avoid errors due to too many features"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/intersectInChunksArea",children:"intersectInChunksArea"})}),(0,i.jsx)(s.td,{children:"Calculates area overlap between a feature A and a feature array B. Intersection is done in chunks on featuresB to avoid errors due to too many features"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/intersectSum",children:"intersectSum"})}),(0,i.jsx)(s.td,{children:"Sums the value of intersecting features. No support for partial, counts the whole feature"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isExternalDatasource",children:"isExternalDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isExternalRasterDatasource",children:"isExternalRasterDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isExternalVectorDatasource",children:"isExternalVectorDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isFeature",children:"isFeature"})}),(0,i.jsx)(s.td,{children:"Check if object is a Feature. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isFeatureCollection",children:"isFeatureCollection"})}),(0,i.jsx)(s.td,{children:"Check if object is a Feature Collection. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isGeometry",children:"isGeometry"})}),(0,i.jsx)(s.td,{children:"Check if object is a Feature. Any code inside a block guarded by a conditional call to this function will have type narrowed to Feature"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isImportRasterDatasourceConfig",children:"isImportRasterDatasourceConfig"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isImportVectorDatasourceConfig",children:"isImportVectorDatasourceConfig"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isinternalDatasource",children:"isinternalDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isInternalRasterDatasource",children:"isInternalRasterDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isInternalVectorDatasource",children:"isInternalVectorDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isLineStringFeature",children:"isLineStringFeature"})}),(0,i.jsx)(s.td,{children:"Check if object is a Linestring. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isLineStringSketchCollection",children:"isLineStringSketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isMetric",children:"isMetric"})}),(0,i.jsx)(s.td,{children:"Checks if object is a Metric and returns narrowed type"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isMetricArray",children:"isMetricArray"})}),(0,i.jsx)(s.td,{children:"Checks if object is a Metric array and returns narrowed type"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isMetricPack",children:"isMetricPack"})}),(0,i.jsx)(s.td,{children:"Checks if object is a MetricPack. Any code inside a block guarded by a conditional call to this function will have type narrowed to MetricPack"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonFeature",children:"isMultiPolygonFeature"})}),(0,i.jsx)(s.td,{children:"Check if object is a MultiPolygon. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonSketch",children:"isMultiPolygonSketch"})}),(0,i.jsx)(s.td,{children:"Checks if sketch is a MultiPolygon. Any code inside a block guarded by a conditional call to this function will have type narrowed to Sketch"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonSketchCollection",children:"isMultiPolygonSketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isNullSketch",children:"isNullSketch"})}),(0,i.jsx)(s.td,{children:"Checks if object is a NullSketch. Any code inside a block guarded by a conditional call to this function will have type narrowed to NullSketch"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isNullSketchCollection",children:"isNullSketchCollection"})}),(0,i.jsx)(s.td,{children:"Check if object is a NullSketchCollection. Any code inside a block guarded by a conditional call to this function will have type narrowed to NullSketchCollection"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isObject",children:"isObject"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPointFeature",children:"isPointFeature"})}),(0,i.jsx)(s.td,{children:"Check if object is a Point. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPointSketchCollection",children:"isPointSketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonAllSketchCollection",children:"isPolygonAllSketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonAnyFeature",children:"isPolygonAnyFeature"})}),(0,i.jsx)(s.td,{children:"Check if object is a Polygon or MultiPolygon. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonFeature",children:"isPolygonFeature"})}),(0,i.jsx)(s.td,{children:"Check if object is a Polygon feature. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonFeatureArray",children:"isPolygonFeatureArray"})}),(0,i.jsx)(s.td,{children:"Check if object is an array of Polygon features. Any code inside a block guarded by a conditional call to this function will have type narrowed"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonSketch",children:"isPolygonSketch"})}),(0,i.jsx)(s.td,{children:"Checks if sketch is a Polygon"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonSketchCollection",children:"isPolygonSketchCollection"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isRasterDatasource",children:"isRasterDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isRbcsProtectionLevel",children:"isRbcsProtectionLevel"})}),(0,i.jsx)(s.td,{children:"Type guard for checking string is one of supported objective IDs Use in conditional block logic to coerce to type RbcsObjectiveKey within the block"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isSketch",children:"isSketch"})}),(0,i.jsx)(s.td,{children:"Checks if object is a Sketch. Any code inside a block guarded by a conditional call to this function will have type narrowed to Sketch"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isSketchCollection",children:"isSketchCollection"})}),(0,i.jsx)(s.td,{children:"Check if object is a SketchCollection. Any code inside a block guarded by a conditional call to this function will have type narrowed to SketchCollection"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isTruthyAttributeValue",children:"isTruthyAttributeValue"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/isVectorDatasource",children:"isVectorDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/keyBy",children:"keyBy"})}),(0,i.jsx)(s.td,{children:"Similar to lodash keyBy"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/loadCog",children:"loadCog"})}),(0,i.jsx)(s.td,{children:"Returns cog-aware georaster at given url. Will not fetch raster values until subsequent geoblaze calls are made with a geometry and it will calculate the window to load based on the geometry. The subsequent geoblaze calls (e.g. sum) must be called async to allow the raster to load."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/loadFgb",children:"loadFgb"})}),(0,i.jsx)(s.td,{children:"Fetch features from flatgeobuf at url that intersect with bounding box Awaits all features before returning, rather than streaming them."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/maxWidth",children:"maxWidth"})}),(0,i.jsx)(s.td,{children:"Returns the maximum width of the geojson or bbox"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/metricsForSketch",children:"metricsForSketch"})}),(0,i.jsx)(s.td,{children:"Returns metrics for given sketch (can be an array of sketches)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/metricsSketchIds",children:"metricsSketchIds"})}),(0,i.jsx)(s.td,{children:"Returns metrics with matching sketchId (can be an array of sketchids)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/metricsWithClassId",children:"metricsWithClassId"})}),(0,i.jsx)(s.td,{children:"Returns metrics with matching sketchId (can be an array of sketchids)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/metricsWithSketchId",children:"metricsWithSketchId"})}),(0,i.jsx)(s.td,{children:"Returns metrics with matching sketchId (can be an array of sketchids)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/minWidth",children:"minWidth"})}),(0,i.jsx)(s.td,{children:"Returns the minimum width of the bounding box of given feature"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/mpaClassMetric",children:"mpaClassMetric"})}),(0,i.jsx)(s.td,{children:"Given sketch for rbcsMpa with rbcs activity userAttributes, assumes mpa is a single zone mpa and returns metrics with mpa classification score"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/mpaClassMetrics",children:"mpaClassMetrics"})}),(0,i.jsx)(s.td,{children:"Given sketch for rbcsMpa or collection of sketches for rbcsMpas with rbcs activity userAttributes, assumes each mpa is a single zone mpa and returns metrics with mpa classification score Collection metric will have mpa classification score index as value"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/nestMetrics",children:"nestMetrics"})}),(0,i.jsx)(s.td,{children:"Recursively groups metrics by ID in order of ids specified to create arbitrary nested hierarchy for fast lookup. Caller responsible for all metrics having the ID properties defined If an id property is not defined on a metric, then 'undefined' will be used for the key"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/numberFormat",children:"numberFormat"})}),(0,i.jsx)(s.td,{children:"Formats number to string, if less than zero will leave as-is, otherwise will format as large number"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapArea",children:"overlapArea"})}),(0,i.jsx)(s.td,{children:"Assuming sketches are within some outer boundary with size outerArea, calculates the area of each sketch and the proportion of outerArea they take up."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapAreaGroupMetrics",children:"overlapAreaGroupMetrics"})}),(0,i.jsx)(s.td,{children:"Generate overlap group metrics using overlapArea operation"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapFeatures",children:"overlapFeatures"})}),(0,i.jsx)(s.td,{children:"Calculates overlap between sketch(es) and an array of polygon features. Supports area or sum operation (given sumProperty), defaults to area If sketch collection includes overall and per sketch"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapFeaturesGroupMetrics",children:"overlapFeaturesGroupMetrics"})}),(0,i.jsx)(s.td,{children:"Generate overlap group metrics using overlapFeatures operation"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapGroupMetrics",children:"overlapGroupMetrics"})}),(0,i.jsx)(s.td,{children:"Given overlap metrics stratified by class and sketch, returns new metrics also stratified by group Assumes a sketch is member of only one group, determined by caller-provided metricToGroup For each group+class, calculates area of overlap between sketches in group and featuresByClass (with overlap between group sketches removed first) Types of metrics returned: sketch metrics: copy of caller-provided sketch metrics with addition of group ID overall metric for each group+class: takes sketches in group, subtracts overlap between them and overlap with higher group sketches, and runs operation If a group has no sketches in it, then no group metrics will be included for that group, and group+class metric will be 0"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapRasterClass",children:"overlapRasterClass"})}),(0,i.jsx)(s.td,{children:"Calculates sum of overlap between sketches and a categorical raster with numeric values representing feature classes If sketch collection, then calculate overlap for all child sketches also"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapRasterGroupMetrics",children:"overlapRasterGroupMetrics"})}),(0,i.jsx)(s.td,{children:"Generate overlap group metrics using rasterMetrics operation"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapSubarea",children:"overlapSubarea"})}),(0,i.jsx)(s.td,{children:"Returns area stats for sketch input after performing overlay operation against a subarea feature. Includes both area overlap and percent area overlap metrics, because calculating percent later would be too complicated For sketch collections, dissolve is used when calculating total sketch area to prevent double counting"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/packMetrics",children:"packMetrics"})}),(0,i.jsx)(s.td,{children:"Converts Metric array to a new MetricPack. Assumes metric dimensions are consistent for each element in the array, and null values are used"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/parseGeoraster",children:"parseGeoraster"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/parseLambdaResponse",children:"parseLambdaResponse"})}),(0,i.jsx)(s.td,{children:"Parses result from worker lambda"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/percentGoalWithEdge",children:"percentGoalWithEdge"})}),(0,i.jsx)(s.td,{children:"Special percent formatter designed to produce readable percent values for display given an upper percent goal All parameters are expected to be decimal percent values e.g. .001 = 1/10th of a percent."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/percentWithEdge",children:"percentWithEdge"})}),(0,i.jsx)(s.td,{children:"Special percent formatter designed to produce readable percent values for display with special handling of numbers within some edge range of user-defined lower or upper bounds. Defaults to handle only lower edge with lowerBound = 0 and lower = .001. All bound values are expected to be in decimal percent. So 1/10th of a percent is .001"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/randomFloat",children:"randomFloat"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/randomInt",children:"randomInt"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rasterMetrics",children:"rasterMetrics"})}),(0,i.jsx)(s.td,{children:"Calculates summary metrics (stats/area) on given raster, optionally intersecting raster with provided feature (zonal statistics). If feature is a collection, then calculate metrics for each individual feature as well as the collection as a whole. This can be disabled with includeChildMetrics: false. Defaults to assuming a continuous raster but also supports categorical option"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rasterStats",children:"rasterStats"})}),(0,i.jsx)(s.td,{children:"Calculates over 10 different raster statistics, optionally constrains to raster cells overlapping with feature (zonal statistics). Defaults to calculating only sum stat If no cells found, returns 0 or null value for each stat as appropriate."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rasterStatsToMetrics",children:"rasterStatsToMetrics"})}),(0,i.jsx)(s.td,{children:"Converts an array of geoblaze raster StatsObjects to an array of Metrics"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rbcsMpaToMetric",children:"rbcsMpaToMetric"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rbcsZoneToMetric",children:"rbcsZoneToMetric"})}),(0,i.jsx)(s.td,{children:"Transforms an rbcs zone object to a metric"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rekeyMetrics",children:"rekeyMetrics"})}),(0,i.jsx)(s.td,{children:"Reorders metrics (by mutation) to a consistent key order for readability"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rekeyObject",children:"rekeyObject"})}),(0,i.jsx)(s.td,{children:"Reorders object, mutating in place, in the order provided"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/removeSketchCollPolygonHoles",children:"removeSketchCollPolygonHoles"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/removeSketchPolygonHoles",children:"removeSketchPolygonHoles"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/roundDecimal",children:"roundDecimal"})}),(0,i.jsx)(s.td,{children:"Rounds number to a fixed number of decimals"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/roundDecimalFormat",children:"roundDecimalFormat"})}),(0,i.jsx)(s.td,{children:"Rounds number to a fixed number of decimals, then formats as a human readable string"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/roundLower",children:"roundLower"})}),(0,i.jsx)(s.td,{children:"Formats number to string, rounding decimal to number of digits, if value is less than lower will clamp to lower value"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/runLambdaWorker",children:"runLambdaWorker"})}),(0,i.jsx)(s.td,{children:"Runs a function on a specified lambda worker"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/sampleSketchReportContextValue",children:"sampleSketchReportContextValue"})}),(0,i.jsx)(s.td,{children:"Creates a ReportContextValue object for a Sketch with sample values. overrides will be merged in, replacing default values"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/scanTasks",children:"scanTasks"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/sketchToId",children:"sketchToId"})}),(0,i.jsx)(s.td,{children:"Given sketch(es), returns ID(s)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/sketchToZone",children:"sketchToZone"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/sortMetrics",children:"sortMetrics"})}),(0,i.jsx)(s.td,{children:"Sorts metrics to a consistent order for readability Defaults to [metricId, classId, sketchId]"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/sortMetricsDisplayOrder",children:"sortMetricsDisplayOrder"})}),(0,i.jsx)(s.td,{children:"Sorts metrics by ID given a user-defined metric dimension (sortId) and array of ID values in the order they should be sorted Useful for applying a \"display order\" to metrics Example - sortId = classId, displayOrder = ['sand','gravel','coral']"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/splitBBoxAntimeridian",children:"splitBBoxAntimeridian"})}),(0,i.jsx)(s.td,{children:"If bounding box crosses antimeridian (and extends outside the range of -180 to 180), split it into two bounding boxes at the antimeridian."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/splitFeatureAntimeridian",children:"splitFeatureAntimeridian"})}),(0,i.jsx)(s.td,{children:"Splits a Feature or FeatureCollection on the 180 degree antimeridian. The bbox property of the result will have longitude coordinates that are shifted/normalized to be within the range of -180 to 180."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/splitSketchAntimeridian",children:"splitSketchAntimeridian"})}),(0,i.jsx)(s.td,{children:"Splits a Sketch or SketchCollection on the 180 degree antimeridian The bbox property of the result will have longitude coordinates that are shifted/normalized to be within the range of -180 to 180."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/squareMeterToKilometer",children:"squareMeterToKilometer"})}),(0,i.jsx)(s.td,{children:"Converts value from square meters to square kilometers"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/squareMeterToMile",children:"squareMeterToMile"})}),(0,i.jsx)(s.td,{children:"Converts value from square meters to square miles"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/testWithinPerc",children:"testWithinPerc"})}),(0,i.jsx)(s.td,{children:"Expects that testValue is equal to expectedValue or optionally within percentage (defaults to .01 or 1%)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toChildProperties",children:"toChildProperties"})}),(0,i.jsx)(s.td,{children:"Returns SketchProperties for each child sketch in a SketchCollection"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toFeatureArray",children:"toFeatureArray"})}),(0,i.jsx)(s.td,{children:"Helper to convert a Feature or a FeatureCollection to a Feature array"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toFeaturePolygonArray",children:"toFeaturePolygonArray"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toNullSketch",children:"toNullSketch"})}),(0,i.jsx)(s.td,{children:"Returns sketch or sketch collection with null geometry"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toNullSketchArray",children:"toNullSketchArray"})}),(0,i.jsx)(s.td,{children:"Helper to convert a NullSketch or NullSketchCollection to a NullSketch array"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toPercentMetric",children:"toPercentMetric"})}),(0,i.jsx)(s.td,{children:"Matches numerator metrics with denominator metrics and divides their value, returning a new array of percent metrics. If denominator metric has value of 0, returns NaN Matches on the optional idProperty given, otherwise defaulting to classId Deep copies and maintains all other properties from the numerator metric"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toRasterProjection",children:"toRasterProjection"})}),(0,i.jsx)(s.td,{children:"Reprojects a feature to the same projection as the raster."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toShortSketches",children:"toShortSketches"})}),(0,i.jsx)(s.td,{children:"Returns an array of shorthand sketches (id + name) given a Sketch or SketchCollection. Includes a shorthand of parent collection also"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toSketchArray",children:"toSketchArray"})}),(0,i.jsx)(s.td,{children:"Converts a Sketch or SketchCollection to a Sketch array, maintaining geometry type Useful for putting in a consistent form that can be iterated over"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/toSketchPropertiesArray",children:"toSketchPropertiesArray"})}),(0,i.jsx)(s.td,{children:"Converts array of sketches to an array of their SketchProperties"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/unpackMetrics",children:"unpackMetrics"})}),(0,i.jsx)(s.td,{children:"Converts MetricPack to a new Metric array."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/updateCommandsSync",children:"updateCommandsSync"})}),(0,i.jsx)(s.td,{children:"Run dynamodb update commands synchronously to avoid throttling, retrying on ThroughputError"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/valueFormatter",children:"valueFormatter"})}),(0,i.jsx)(s.td,{children:"Given a number or string value and the name of a formatter function, returns a formatted value"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/zeroPolygon",children:"zeroPolygon"})}),(0,i.jsx)(s.td,{children:"Returns a zero polygon geometry (three [0,0] coordinates)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketch",children:"zeroSketch"})}),(0,i.jsx)(s.td,{children:"Given sketch, returns the mutated sketch with a zero polygon geometry (three [0,0] coordinates)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketchArray",children:"zeroSketchArray"})}),(0,i.jsx)(s.td,{children:"Given sketch array, returns the mutated sketches with a zero polygon geometry (three [0,0] coordinates)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketchCollection",children:"zeroSketchCollection"})}),(0,i.jsx)(s.td,{children:"Given sketch collection, returns the mutated collection with all child sketches switched to have zero polygon geometry (three [0,0] coordinates)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/zoneClassMetrics",children:"zoneClassMetrics"})}),(0,i.jsx)(s.td,{children:"Given sketch for rbcsZone or collection of zone sketches with userAttributes for rcbs activities, returns metrics with zone classification score as value. If sketch collection, collection metric will have mpa classification score index as value"})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"type-aliases",children:"Type Aliases"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Type alias"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/bandArithmetic",children:"bandArithmetic"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/BaseDatasource",children:"BaseDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/BBox",children:"BBox"})}),(0,i.jsxs)(s.td,{children:["Bounding box ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-5",children:"https://tools.ietf.org/html/rfc7946#section-5"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClassificationId",children:"ClassificationId"})}),(0,i.jsx)(s.td,{children:"Unique string ID for classification given to sketches (e.g. zone classification, protection level)"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClassStats",children:"ClassStats"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClientJsonConfig",children:"ClientJsonConfig"})}),(0,i.jsx)(s.td,{children:"Represents a geoprocessing client object"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClipOperations",children:"ClipOperations"})}),(0,i.jsx)(s.td,{children:"Supported clip operations"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/DataClass",children:"DataClass"})}),(0,i.jsx)(s.td,{children:"Represents a group of data classes. Used to access the data, and calcualte metrics based on them. This interface is murky but it supports a variety of scenarios: - Vector dataset with one feature class - Vector dataset with multiple feature class, each with their own file datasource, and possibly only one layerId to display them all - Vector dataset with multiple feature classes, all in one file datasource, each class with its own layerId - Raster with multiple feature classes represented by unique integer values that map to class names"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Datasource",children:"Datasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/EezLandUnion",children:"EezLandUnion"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExecutionMode",children:"ExecutionMode"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExternalRasterDatasource",children:"ExternalRasterDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExternalVectorDatasource",children:"ExternalVectorDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/EXTRA_RASTER_STAT",children:"EXTRA_RASTER_STAT"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/FunctionExtraParams",children:"FunctionExtraParams"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GEOBLAZE_RASTER_STAT",children:"GEOBLAZE_RASTER_STAT"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geographies",children:"Geographies"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geography",children:"Geography"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:"GeoJsonProperties"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geometry",children:"Geometry"})}),(0,i.jsxs)(s.td,{children:["Geometry object. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3",children:"https://tools.ietf.org/html/rfc7946#section-3"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingJsonConfig",children:"GeoprocessingJsonConfig"})}),(0,i.jsx)(s.td,{children:"Represents a single JS package"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingRequest",children:"GeoprocessingRequest"})}),(0,i.jsx)(s.td,{children:"Geoprocessing request sent via HTTP GET, with extraParams as url-encoded JSON string"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingRequestParams",children:"GeoprocessingRequestParams"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeorasterMetadata",children:"GeorasterMetadata"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoTypes",children:"GeoTypes"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/get",children:"get"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GroupMetricAgg",children:"GroupMetricAgg"})}),(0,i.jsx)(s.td,{children:"Single flattened metric with class values keyed by class name Useful for rendering table rows with the values of multiple classes for a group"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GroupMetricSketchAgg",children:"GroupMetricSketchAgg"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/histogram",children:"histogram"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/identify",children:"identify"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportRasterDatasourceConfig",children:"ImportRasterDatasourceConfig"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportRasterDatasourceOptions",children:"ImportRasterDatasourceOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportVectorDatasourceConfig",children:"ImportVectorDatasourceConfig"})}),(0,i.jsx)(s.td,{children:"Full configuration needed to import a dataset"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportVectorDatasourceOptions",children:"ImportVectorDatasourceOptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/InternalRasterDatasource",children:"InternalRasterDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/InternalVectorDatasource",children:"InternalVectorDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ISO8601DateTime",children:"ISO8601DateTime"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ISO8601Duration",children:"ISO8601Duration"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/IucnActivityRankId",children:"IucnActivityRankId"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/JSONValue",children:"JSONValue"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/load",children:"load"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/LoadedPackage",children:"LoadedPackage"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/max",children:"max"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/mean",children:"mean"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/median",children:"median"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metric",children:"Metric"})}),(0,i.jsx)(s.td,{children:"Single record of value, stratified in one or more dimensions. The name Metric is an overgeneralization, you can think of it as a MetricValue."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricDimension",children:"MetricDimension"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricGroup",children:"MetricGroup"})}),(0,i.jsx)(s.td,{children:"Represents a single metric, having one DataGroup"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricGroups",children:"MetricGroups"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricIdTypes",children:"MetricIdTypes"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricProperty",children:"MetricProperty"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metrics",children:"Metrics"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/min",children:"min"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/mode",children:"mode"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MpaClassification",children:"MpaClassification"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Nullable",children:"Nullable"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Objective",children:"Objective"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveAnswer",children:"ObjectiveAnswer"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveAnswerMap",children:"ObjectiveAnswerMap"})}),(0,i.jsx)(s.td,{children:"Generic type for mapping classification ID to whether it counds toward or meets an objective Specific classification systems will extend this type with short list of allowed classification IDs"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveId",children:"ObjectiveId"})}),(0,i.jsx)(s.td,{children:"Unique name of objective"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Objectives",children:"Objectives"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/OsmLandFeature",children:"OsmLandFeature"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Package",children:"Package"})}),(0,i.jsx)(s.td,{children:"Represents a single JS package"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/PartialReportContextValue",children:"PartialReportContextValue"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Position",children:"Position"})}),(0,i.jsxs)(s.td,{children:["A Position is an array of coordinates. ",(0,i.jsx)(s.a,{href:"https://tools.ietf.org/html/rfc7946#section-3.1.1",children:"https://tools.ietf.org/html/rfc7946#section-3.1.1"})," Array should contain between two and three elements. The previous GeoJSON specification allowed more elements (e.g., which could be used to represent M values), but the current specification only allows X, Y, and (optionally) Z to be defined."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Project",children:"Project"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/rasterCalculator",children:"rasterCalculator"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/RasterDatasource",children:"RasterDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/RbcsMpaObjectiveAnswerMap",children:"RbcsMpaObjectiveAnswerMap"})}),(0,i.jsx)(s.td,{children:"Mapping of RBCS MPA Classification ID to whether it counts toward or meets an objective"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/RbcsMpaProtectionLevel",children:"RbcsMpaProtectionLevel"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SketchGeometryTypes",children:"SketchGeometryTypes"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SketchProperties",children:"SketchProperties"})}),(0,i.jsx)(s.td,{children:"Properties of a Sketch, defines known keys as well as unknown for extensiblity"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/stats",children:"stats"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Stats-1",children:"Stats"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/sum",children:"sum"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SUPPORTED_RASTER_STAT",children:"SUPPORTED_RASTER_STAT"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SupportedFormats",children:"SupportedFormats"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/TaskKey",children:"TaskKey"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/TypedArray",children:"TypedArray"})}),(0,i.jsx)(s.td,{children:"Typed array of data values, the basic building block of a geotiff"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/UserAttribute",children:"UserAttribute"})}),(0,i.jsx)(s.td,{children:"User-defined attributes with values for Sketch. Defines known keys as well as unknown for extensiblity"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ValueFormatter",children:"ValueFormatter"})}),(0,i.jsx)(s.td,{children:"Options for formatting a given value."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/VectorDatasource",children:"VectorDatasource"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Zone",children:"Zone"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneColor",children:"ZoneColor"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneId",children:"ZoneId"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneName",children:"ZoneName"})}),(0,i.jsx)(s.td,{children:"-"})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"variables",children:"Variables"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Variable"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/activityRanks",children:"activityRanks"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/baseDatasourceSchema",children:"baseDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/bboxSchema",children:"bboxSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/box2dSchema",children:"box2dSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/box3dSchema",children:"box3dSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/classStatsSchema",children:"classStatsSchema"})}),(0,i.jsx)(s.td,{children:"Pre-calculated stats by key by class"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/clientJsonConfigSchema",children:"clientJsonConfigSchema"})}),(0,i.jsx)(s.td,{children:"Represents a geoprocessing client object"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/commonHeaders",children:"commonHeaders"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/dataClassSchema",children:"dataClassSchema"})}),(0,i.jsx)(s.td,{children:"Represents a single class of data. Ties it to an underlying datasource, holds attributes used for displaying in user interfaces"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/datasourceConfig",children:"datasourceConfig"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/datasourceFormatDescriptions",children:"datasourceFormatDescriptions"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/datasourceSchema",children:"datasourceSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/datasourcesSchema",children:"datasourcesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/defaultReportContext",children:"defaultReportContext"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/DEFAULTS",children:"DEFAULTS"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/defaultStatValues",children:"defaultStatValues"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/externalDatasourceSchema",children:"externalDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"Properties for external datasource"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/externalRasterDatasourceSchema",children:"externalRasterDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/externalVectorDatasourceSchema",children:"externalVectorDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/EXTRA_RASTER_STATS",children:"EXTRA_RASTER_STATS"})}),(0,i.jsx)(s.td,{children:"Additional raster stats calculated by geoprocessing library"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/extraParamsSchema",children:"extraParamsSchema"})}),(0,i.jsx)(s.td,{children:"Default set of additional parameters that a geoprocessing or preprocessing function can accept Override or extend as needed with more specific types, and use .parse() function to validate your input"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/fcSchema",children:"fcSchema"})}),(0,i.jsx)(s.td,{children:"Zod schema for FeatureCollection containing polygons or multipolygons"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/featureSchema",children:"featureSchema"})}),(0,i.jsx)(s.td,{children:"Zod schema for Feature containing Polygon or MultiPolygon"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/featuresSchema",children:"featuresSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/fixtures",children:"fixtures"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/fullColor",children:"fullColor"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/FULLY_PROTECTED_LEVEL",children:"FULLY_PROTECTED_LEVEL"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/GEOBLAZE_RASTER_STATS",children:"GEOBLAZE_RASTER_STATS"})}),(0,i.jsx)(s.td,{children:"Stats supported by geoblaze.stats() function"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/geoblazeDefaultStatValues",children:"geoblazeDefaultStatValues"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/geographiesSchema",children:"geographiesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/geographySchema",children:"geographySchema"})}),(0,i.jsx)(s.td,{children:"A geographic area (Polygon) for planning. Typically used to represent a planning area"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/geoprocessingConfigSchema",children:"geoprocessingConfigSchema"})}),(0,i.jsx)(s.td,{children:"Represents a single JS package"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/geoTypesSchema",children:"geoTypesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/globalDatasources",children:"globalDatasources"})}),(0,i.jsx)(s.td,{children:"Definitive list of global datasources for geoprocessing framework @todo: fetch from global-datasources repo"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/globalDatasourcesById",children:"globalDatasourcesById"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/highColor",children:"highColor"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/HIGHLY_PROTECTED_LEVEL",children:"HIGHLY_PROTECTED_LEVEL"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/importRasterDatasourceOptionsSchema",children:"importRasterDatasourceOptionsSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/importVectorDatasourceOptionsSchema",children:"importVectorDatasourceOptionsSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/internalDatasourceSchema",children:"internalDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"Timestamp properties to ease syncing with local/published datasource files"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/internalImportSchema",children:"internalImportSchema"})}),(0,i.jsx)(s.td,{children:"Properties for importing an internal datasource"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/internalRasterDatasourceSchema",children:"internalRasterDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/internalVectorDatasourceSchema",children:"internalVectorDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/internalVectorImportSchema",children:"internalVectorImportSchema"})}),(0,i.jsx)(s.td,{children:"Properties for import of internal vector datasources"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnActivities",children:"iucnActivities"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnActivityCategories",children:"iucnActivityCategories"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoriesList",children:"iucnCategoriesList"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoriesMap",children:"iucnCategoriesMap"})}),(0,i.jsx)(s.td,{children:"IUCN category definitions. Note categories 2/3 and 4/6 have been merged because they have the same allowed uses"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoryNames",children:"iucnCategoryNames"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnLevels",children:"iucnLevels"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/jsonSchema",children:"jsonSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/loadedPackageSchema",children:"loadedPackageSchema"})}),(0,i.jsx)(s.td,{children:"Stricter schema for npm package.json metadata, with most fields guaranteed present"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/lowColor",children:"lowColor"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/measurementScalesSchema",children:"measurementScalesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/measurementTypesSchema",children:"measurementTypesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/MetricDimensions",children:"MetricDimensions"})}),(0,i.jsx)(s.td,{children:"Dimensions used in Metric"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/metricGroupSchema",children:"metricGroupSchema"})}),(0,i.jsx)(s.td,{children:"Defines a metric in combination with a datasource, with one or more data classes"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/metricGroupsSchema",children:"metricGroupsSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/MetricProperties",children:"MetricProperties"})}),(0,i.jsx)(s.td,{children:"Properties used in Metric"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/metricSchema",children:"metricSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/metricsSchema",children:"metricsSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/MODERATELY_PROTECTED_LEVEL",children:"MODERATELY_PROTECTED_LEVEL"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/multipolygonSchema",children:"multipolygonSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_GREEN",children:"OBJECTIVE_GREEN"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_MAYBE",children:"OBJECTIVE_MAYBE"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_NO",children:"OBJECTIVE_NO"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_RED",children:"OBJECTIVE_RED"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_YELLOW",children:"OBJECTIVE_YELLOW"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_YES",children:"OBJECTIVE_YES"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveAnswerMapSchema",children:"objectiveAnswerMapSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveAnswerSchema",children:"objectiveAnswerSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveCountsAnswers",children:"objectiveCountsAnswers"})}),(0,i.jsx)(s.td,{children:"Readonly list of possible answers for whether sketch counts toward objective"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveCountsColorMap",children:"objectiveCountsColorMap"})}),(0,i.jsx)(s.td,{children:"Object mapping answers for whether sketch counts toward objective to stop light colors - green / yellow / red"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveSchema",children:"objectiveSchema"})}),(0,i.jsx)(s.td,{children:"Base planning objective, extend as needed for specific classification system or ad-hoc"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/objectivesSchema",children:"objectivesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/packageSchema",children:"packageSchema"})}),(0,i.jsx)(s.td,{children:"Schema for npm package.json metadata, as found in the wild"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/PLANNING_AREA_TYPES",children:"PLANNING_AREA_TYPES"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/planningAreaTypesSchema",children:"planningAreaTypesSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/polygonSchema",children:"polygonSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/POORLY_PROTECTED_LEVEL",children:"POORLY_PROTECTED_LEVEL"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/projectSchema",children:"projectSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rasterDatasourceSchema",children:"rasterDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"Properties for raster datasource"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsAnchoringActivities",children:"rbcsAnchoringActivities"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsAquacultureActivities",children:"rbcsAquacultureActivities"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsConstants",children:"rbcsConstants"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsGearTypes",children:"rbcsGearTypes"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsMpaProtectionLevels",children:"rbcsMpaProtectionLevels"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsScores",children:"rbcsScores"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/ReportContext",children:"ReportContext"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingLanguageChangeEvent",children:"seaSketchReportingLanguageChangeEvent"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingMessageEventType",children:"seaSketchReportingMessageEventType"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingVisibleLayersChangeEvent",children:"seaSketchReportingVisibleLayersChangeEvent"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/statsSchema",children:"statsSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/SUPPORTED_RASTER_STATS",children:"SUPPORTED_RASTER_STATS"})}),(0,i.jsx)(s.td,{children:"Combined raster stats supported by geoprocessing library"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/supportedFormatsSchema",children:"supportedFormatsSchema"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/UNPROTECTED_LEVEL",children:"UNPROTECTED_LEVEL"})}),(0,i.jsx)(s.td,{children:"-"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/vectorDatasourceSchema",children:"vectorDatasourceSchema"})}),(0,i.jsx)(s.td,{children:"Properties for vector datasource"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/variables/version",children:"version"})}),(0,i.jsx)(s.td,{children:"-"})]})]})]})]})}function h(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},28453:(e,s,r)=>{r.d(s,{R:()=>c,x:()=>o});var i=r(96540);const n={},t=i.createContext(n);function c(e){const s=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),i.createElement(t.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/77861e5d.e00f8825.js b/assets/js/77861e5d.e00f8825.js
deleted file mode 100644
index afbd1a4ecf..0000000000
--- a/assets/js/77861e5d.e00f8825.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[26126],{93434:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var o=t(74848),n=t(28453);const r={},i="Deploy your project",a={id:"tutorials/deploy",title:"Deploy your project",description:"A deploy of your application uses aws-cdk to inspect your local build and automatically provision all of the necessary AWS resources as a single CloudFormation stack.",source:"@site/docs/tutorials/deploy.md",sourceDirName:"tutorials",slug:"/tutorials/deploy",permalink:"/geoprocessing/docs/next/tutorials/deploy",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/tutorials/deploy.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Setup Existing Project",permalink:"/geoprocessing/docs/next/tutorials/existingproject"},next:{title:"New Geoprocessing Function",permalink:"/geoprocessing/docs/next/tutorials/createGeoprocessing"}},l={},c=[{value:"Setup AWS",id:"setup-aws",level:2},{value:"AWSCLI",id:"awscli",level:2},{value:"Extra steps for Windows",id:"extra-steps-for-windows",level:3},{value:"Confirm awscli is working",id:"confirm-awscli-is-working",level:2},{value:"Do the deploy",id:"do-the-deploy",level:2},{value:"Debugging deploy",id:"debugging-deploy",level:3},{value:"Publish your datasources",id:"publish-your-datasources",level:2},{value:"Integrating Your Project with SeaSketch",id:"integrating-your-project-with-seasketch",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.header,{children:(0,o.jsx)(s.h1,{id:"deploy-your-project",children:"Deploy your project"})}),"\n",(0,o.jsxs)(s.p,{children:["A ",(0,o.jsx)(s.code,{children:"deploy"})," of your application uses ",(0,o.jsx)(s.a,{href:"https://aws.amazon.com/cdk/",children:(0,o.jsx)(s.code,{children:"aws-cdk"})})," to inspect your local build and automatically provision all of the necessary AWS resources as a single ",(0,o.jsx)(s.a,{href:"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html",children:"CloudFormation"})," stack."]}),"\n",(0,o.jsx)(s.p,{children:"This includes:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"S3 storage buckets for publishing datasources and containing bundled Report UI components"}),"\n",(0,o.jsx)(s.li,{children:"Lambda functions that run preprocessing and geoprocessing functions on-demand"}),"\n",(0,o.jsx)(s.li,{children:"A Gateway with REST API and Web Socket API for clients like SeaSketch to discover, access, and run all project resources over the Internet."}),"\n",(0,o.jsx)(s.li,{children:"A DynamoDB database for caching function results"}),"\n"]}),"\n",(0,o.jsx)(s.p,{children:"For every deploy after the first, it is smart enough to compute the changeset between your local build and the published stack and modify the stack automatically."}),"\n",(0,o.jsx)(s.h2,{id:"setup-aws",children:"Setup AWS"}),"\n",(0,o.jsxs)(s.p,{children:["You are not required to complete this step until you want to deploy your project and integrate it with SeaSketch. Until then, you can do everything except ",(0,o.jsx)(s.code,{children:"publish"})," data or ",(0,o.jsx)(s.code,{children:"deploy"})," your project."]}),"\n",(0,o.jsx)(s.p,{children:"You will need to create an AWS account with an admin user, allowing the framework to deploy your project using CloudFormation. A payment method such as a credit card will be required."}),"\n",(0,o.jsxs)(s.p,{children:["Expected cost: ",(0,o.jsx)(s.a,{href:"https://aws.amazon.com/free",children:"free"})," to a few dollars per month. You will be able to track this."]}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["Create an Amazon [AWS account] such that you can login and access the main AWS Console page (",(0,o.jsx)(s.a,{href:"https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/",children:"https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/"}),")."]}),"\n",(0,o.jsxs)(s.li,{children:["Create an AWS IAM ",(0,o.jsx)(s.a,{href:"https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html",children:"admin account"}),". This is what you will use to manage projects."]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"awscli",children:"AWSCLI"}),"\n",(0,o.jsxs)(s.p,{children:["If you are using a Docker devcontaine to develop reports you should already have access to the ",(0,o.jsx)(s.code,{children:"aws"})," command. But if you are running directly on your host operating system you will need to install ",(0,o.jsx)(s.a,{href:"https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html",children:"AWS CLI"})," and ",(0,o.jsx)(s.a,{href:"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html",children:"configure"})," it with your IAM account credentials."]}),"\n",(0,o.jsx)(s.h3,{id:"extra-steps-for-windows",children:"Extra steps for Windows"}),"\n",(0,o.jsxs)(s.p,{children:["Windows you have the option of installing ",(0,o.jsx)(s.a,{href:"https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html",children:"awscli for Windows"})," and then exposing your credentials in your Ubuntu container. This allows you to manage one set of credentials."]}),"\n",(0,o.jsxs)(s.p,{children:["Assuming your username is ",(0,o.jsx)(s.code,{children:"alex"}),", once you've installed awscli in Windows, confirm you now have the following files under Windows."]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"C:\\Users\\alex\\.aws\\credentials\nC:\\Users\\alex\\.aws\\config\n"})}),"\n",(0,o.jsxs)(s.p,{children:["Now, open a Ubuntu shell and edit your bash environment variables to ",(0,o.jsx)(s.a,{href:"https://stackoverflow.com/questions/52238512/how-to-access-aws-config-file-from-wsl-windows-subsystem-for-linux/53083079#53083079",children:"point to those files"}),"."]}),"\n",(0,o.jsxs)(s.p,{children:["Add the following to your startup ",(0,o.jsx)(s.code,{children:".bashrc"})," file."]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"export AWS_SHARED_CREDENTIALS_FILE=/mnt/c/Users/alex/.aws/credentials\nexport AWS_CONFIG_FILE=/mnt/c/Users/alex/.aws/config\n"})}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.a,{href:"/geoprocessing/docs/next/skills#editing-your-startup-bash-script-in-ubuntu",children:"How do I do that?"})}),"\n",(0,o.jsx)(s.p,{children:"Now, verify the environment variables are set"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"source ~/.bashrc\necho $AWS_SHARED_CREDENTIALS_FILE\necho $AWS_CONFIG_FILE\n"})}),"\n",(0,o.jsx)(s.h2,{id:"confirm-awscli-is-working",children:"Confirm awscli is working"}),"\n",(0,o.jsx)(s.p,{children:"To check if awscli is configured run the following:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"aws configure list\n"})}),"\n",(0,o.jsx)(s.p,{children:"If no values are listed, then the AWS CLI is not configured properly. Go back and check everything over for this step."}),"\n",(0,o.jsx)(s.h2,{id:"do-the-deploy",children:"Do the deploy"}),"\n",(0,o.jsx)(s.p,{children:"To deploy your project run the following:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"npm run deploy\n"})}),"\n",(0,o.jsxs)(s.p,{children:["When the command completes, the stack should now be deployed. It should print out a list of URL's for accessing stack resources. You do not need to write these down. You can run the ",(0,o.jsx)(s.code,{children:"npm run url"})," command at any time and it will output the RestApiUrl, which is the main URL you care about for integration with SeaSketch. After deploy a ",(0,o.jsx)(s.code,{children:"cdk-outputs.json"})," file will also have been generated in the top-level directory of your project with the full list of URL's. This file is not checked into the code repository."]}),"\n",(0,o.jsx)(s.p,{children:"Example:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-json",children:'{\n "gp-fsm-reports-test": {\n "clientDistributionUrl": "abcdefg.cloudfront.net",\n "clientBucketUrl": "https://s3.us-west-2.amazonaws.com/gp-fsm-reports-test-client",\n "datasetBucketUrl": "https://s3.us-west-2.amazonaws.com/gp-fsm-reports-test-datasets",\n "GpRestApiEndpointBF901973": "https://tuvwxyz.execute-api.us-west-2.amazonaws.com/prod/",\n "restApiUrl": "https://tuvwxyz.execute-api.us-west-2.amazonaws.com/prod/",\n "socketApiUrl": "wss://lmnop.execute-api.us-west-2.amazonaws.com"\n }\n}\n'})}),"\n",(0,o.jsx)(s.h3,{id:"debugging-deploy",children:"Debugging deploy"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["If your AWS credentials are not setup and linked properly, you will get an error here. Go back and ",(0,o.jsx)(s.a,{href:"#setup-aws",children:"fix it"}),"."]}),"\n",(0,o.jsx)(s.li,{children:"The very first time you deploy any project to a given AWS data center (e.g. us-west-1), it may ask you to bootstrap cdk first. Simply run the following:"}),"\n"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"npm run bootstrap\n"})}),"\n",(0,o.jsxs)(s.p,{children:["Then ",(0,o.jsx)(s.code,{children:"deploy"})," again."]}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["If your deploy fails and it's not the first time you deployed, it may tell you it has performed a ",(0,o.jsx)(s.code,{children:"Rollback"})," on the deployed stack to its previous state. This may or may not be successful. You'll want to verify that your project is still working properly within SeaSketch. If it's not you can always destroy your stack by running:"]}),"\n"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"npm run destroy\n"})}),"\n",(0,o.jsxs)(s.p,{children:["Once complete, you will need to ",(0,o.jsx)(s.code,{children:"build"})," and ",(0,o.jsx)(s.code,{children:"deploy"})," again."]}),"\n",(0,o.jsx)(s.h2,{id:"publish-your-datasources",children:"Publish your datasources"}),"\n",(0,o.jsxs)(s.p,{children:["Once you have deployed your project to AWS, it will have an S3 bucket for publishing ",(0,o.jsx)(s.code,{children:"datasources"})," to."]}),"\n",(0,o.jsxs)(s.p,{children:["Your datasources will need to have already been imported using ",(0,o.jsx)(s.code,{children:"import:data"})," and exist in data/dist for this to work."]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"npm run publish:data\n"})}),"\n",(0,o.jsx)(s.p,{children:"It will ask you if you want to publish all datasources, or choose from a list."}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"Note if you don't publish your datasources, then your smoke tests may work properly, but your geoprocessing functions will throw file not found errors in production."}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"integrating-your-project-with-seasketch",children:"Integrating Your Project with SeaSketch"}),"\n",(0,o.jsxs)(s.p,{children:["Once you've deployed your project, you will find a file called ",(0,o.jsx)(s.code,{children:"cdk.outputs"})," which contains the URL to the service manifest for your project."]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-json",children:'"restApiUrl": "https://xxxyyyyzzz.execute-api.us-west-2.amazonaws.com/prod/",\n'})}),"\n",(0,o.jsxs)(s.p,{children:["Now follow the ",(0,o.jsx)(s.a,{href:"https://docs.seasketch.org/seasketch-documentation/administrators-guide/sketch-classes",children:"SeaSketch instructions"})," to assign services to each of your sketch classes."]}),"\n",(0,o.jsxs)(s.p,{children:["If your sketch class is a Polygon or other feature type, you should assign it both a preprocessing function (for clipping) and a report client. If you installed the ",(0,o.jsx)(s.code,{children:"template-ocean-eez"})," starter template then your preprocessor is called ",(0,o.jsx)(s.code,{children:"clipToOceanEez"})," and report client is named ",(0,o.jsx)(s.code,{children:"MpaTabReport"}),"."]}),"\n",(0,o.jsx)(s.p,{children:"If your sketch class is a collection then you only need to assign it a report client. Since we build report clients that work on both individual sketches and sketch collections, you can assign the same report client to your collection as you assigned to your individual sketch class(es)."}),"\n",(0,o.jsx)(s.p,{children:"This should give you the sense that you can create different report clients for different sketch classes within the same project. Or even make reports for sketch collections completely different from reports for individual sketches."}),"\n",(0,o.jsx)(s.p,{children:"Create a sketch and run your reports to make sure it all works!"})]})}function h(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,s,t)=>{t.d(s,{R:()=>i,x:()=>a});var o=t(96540);const n={},r=o.createContext(n);function i(e){const s=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),o.createElement(r.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/77861e5d.edb5c3a1.js b/assets/js/77861e5d.edb5c3a1.js
new file mode 100644
index 0000000000..ad02d6de27
--- /dev/null
+++ b/assets/js/77861e5d.edb5c3a1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[26126],{93434:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var o=t(74848),n=t(28453);const r={},i="Deploy your project",a={id:"tutorials/deploy",title:"Deploy your project",description:"A deploy of your application uses aws-cdk to inspect your local build and automatically provision all of the necessary AWS resources as a single CloudFormation stack.",source:"@site/docs/tutorials/deploy.md",sourceDirName:"tutorials",slug:"/tutorials/deploy",permalink:"/geoprocessing/docs/next/tutorials/deploy",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/tutorials/deploy.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Setup Existing Project",permalink:"/geoprocessing/docs/next/tutorials/existingproject"},next:{title:"Update Datasource",permalink:"/geoprocessing/docs/next/tutorials/updateDatasource"}},l={},c=[{value:"Setup AWS",id:"setup-aws",level:2},{value:"AWSCLI",id:"awscli",level:2},{value:"Extra steps for Windows",id:"extra-steps-for-windows",level:3},{value:"Confirm awscli is working",id:"confirm-awscli-is-working",level:2},{value:"Do the deploy",id:"do-the-deploy",level:2},{value:"Debugging deploy",id:"debugging-deploy",level:3},{value:"Publish your datasources",id:"publish-your-datasources",level:2},{value:"Integrating Your Project with SeaSketch",id:"integrating-your-project-with-seasketch",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.header,{children:(0,o.jsx)(s.h1,{id:"deploy-your-project",children:"Deploy your project"})}),"\n",(0,o.jsxs)(s.p,{children:["A ",(0,o.jsx)(s.code,{children:"deploy"})," of your application uses ",(0,o.jsx)(s.a,{href:"https://aws.amazon.com/cdk/",children:(0,o.jsx)(s.code,{children:"aws-cdk"})})," to inspect your local build and automatically provision all of the necessary AWS resources as a single ",(0,o.jsx)(s.a,{href:"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html",children:"CloudFormation"})," stack."]}),"\n",(0,o.jsx)(s.p,{children:"This includes:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"S3 storage buckets for publishing datasources and containing bundled Report UI components"}),"\n",(0,o.jsx)(s.li,{children:"Lambda functions that run preprocessing and geoprocessing functions on-demand"}),"\n",(0,o.jsx)(s.li,{children:"A Gateway with REST API and Web Socket API for clients like SeaSketch to discover, access, and run all project resources over the Internet."}),"\n",(0,o.jsx)(s.li,{children:"A DynamoDB database for caching function results"}),"\n"]}),"\n",(0,o.jsx)(s.p,{children:"For every deploy after the first, it is smart enough to compute the changeset between your local build and the published stack and modify the stack automatically."}),"\n",(0,o.jsx)(s.h2,{id:"setup-aws",children:"Setup AWS"}),"\n",(0,o.jsxs)(s.p,{children:["You are not required to complete this step until you want to deploy your project and integrate it with SeaSketch. Until then, you can do everything except ",(0,o.jsx)(s.code,{children:"publish"})," data or ",(0,o.jsx)(s.code,{children:"deploy"})," your project."]}),"\n",(0,o.jsx)(s.p,{children:"You will need to create an AWS account with an admin user, allowing the framework to deploy your project using CloudFormation. A payment method such as a credit card will be required."}),"\n",(0,o.jsxs)(s.p,{children:["Expected cost: ",(0,o.jsx)(s.a,{href:"https://aws.amazon.com/free",children:"free"})," to a few dollars per month. You will be able to track this."]}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["Create an Amazon [AWS account] such that you can login and access the main AWS Console page (",(0,o.jsx)(s.a,{href:"https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/",children:"https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/"}),")."]}),"\n",(0,o.jsxs)(s.li,{children:["Create an AWS IAM ",(0,o.jsx)(s.a,{href:"https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html",children:"admin account"}),". This is what you will use to manage projects."]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"awscli",children:"AWSCLI"}),"\n",(0,o.jsxs)(s.p,{children:["If you are using a Docker devcontaine to develop reports you should already have access to the ",(0,o.jsx)(s.code,{children:"aws"})," command. But if you are running directly on your host operating system you will need to install ",(0,o.jsx)(s.a,{href:"https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html",children:"AWS CLI"})," and ",(0,o.jsx)(s.a,{href:"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html",children:"configure"})," it with your IAM account credentials."]}),"\n",(0,o.jsx)(s.h3,{id:"extra-steps-for-windows",children:"Extra steps for Windows"}),"\n",(0,o.jsxs)(s.p,{children:["Windows you have the option of installing ",(0,o.jsx)(s.a,{href:"https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html",children:"awscli for Windows"})," and then exposing your credentials in your Ubuntu container. This allows you to manage one set of credentials."]}),"\n",(0,o.jsxs)(s.p,{children:["Assuming your username is ",(0,o.jsx)(s.code,{children:"alex"}),", once you've installed awscli in Windows, confirm you now have the following files under Windows."]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"C:\\Users\\alex\\.aws\\credentials\nC:\\Users\\alex\\.aws\\config\n"})}),"\n",(0,o.jsxs)(s.p,{children:["Now, open a Ubuntu shell and edit your bash environment variables to ",(0,o.jsx)(s.a,{href:"https://stackoverflow.com/questions/52238512/how-to-access-aws-config-file-from-wsl-windows-subsystem-for-linux/53083079#53083079",children:"point to those files"}),"."]}),"\n",(0,o.jsxs)(s.p,{children:["Add the following to your startup ",(0,o.jsx)(s.code,{children:".bashrc"})," file."]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"export AWS_SHARED_CREDENTIALS_FILE=/mnt/c/Users/alex/.aws/credentials\nexport AWS_CONFIG_FILE=/mnt/c/Users/alex/.aws/config\n"})}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.a,{href:"/geoprocessing/docs/next/skills#editing-your-startup-bash-script-in-ubuntu",children:"How do I do that?"})}),"\n",(0,o.jsx)(s.p,{children:"Now, verify the environment variables are set"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"source ~/.bashrc\necho $AWS_SHARED_CREDENTIALS_FILE\necho $AWS_CONFIG_FILE\n"})}),"\n",(0,o.jsx)(s.h2,{id:"confirm-awscli-is-working",children:"Confirm awscli is working"}),"\n",(0,o.jsx)(s.p,{children:"To check if awscli is configured run the following:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"aws configure list\n"})}),"\n",(0,o.jsx)(s.p,{children:"If no values are listed, then the AWS CLI is not configured properly. Go back and check everything over for this step."}),"\n",(0,o.jsx)(s.h2,{id:"do-the-deploy",children:"Do the deploy"}),"\n",(0,o.jsx)(s.p,{children:"To deploy your project run the following:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"npm run deploy\n"})}),"\n",(0,o.jsxs)(s.p,{children:["When the command completes, the stack should now be deployed. It should print out a list of URL's for accessing stack resources. You do not need to write these down. You can run the ",(0,o.jsx)(s.code,{children:"npm run url"})," command at any time and it will output the RestApiUrl, which is the main URL you care about for integration with SeaSketch. After deploy a ",(0,o.jsx)(s.code,{children:"cdk-outputs.json"})," file will also have been generated in the top-level directory of your project with the full list of URL's. This file is not checked into the code repository."]}),"\n",(0,o.jsx)(s.p,{children:"Example:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-json",children:'{\n "gp-fsm-reports-test": {\n "clientDistributionUrl": "abcdefg.cloudfront.net",\n "clientBucketUrl": "https://s3.us-west-2.amazonaws.com/gp-fsm-reports-test-client",\n "datasetBucketUrl": "https://s3.us-west-2.amazonaws.com/gp-fsm-reports-test-datasets",\n "GpRestApiEndpointBF901973": "https://tuvwxyz.execute-api.us-west-2.amazonaws.com/prod/",\n "restApiUrl": "https://tuvwxyz.execute-api.us-west-2.amazonaws.com/prod/",\n "socketApiUrl": "wss://lmnop.execute-api.us-west-2.amazonaws.com"\n }\n}\n'})}),"\n",(0,o.jsx)(s.h3,{id:"debugging-deploy",children:"Debugging deploy"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["If your AWS credentials are not setup and linked properly, you will get an error here. Go back and ",(0,o.jsx)(s.a,{href:"#setup-aws",children:"fix it"}),"."]}),"\n",(0,o.jsx)(s.li,{children:"The very first time you deploy any project to a given AWS data center (e.g. us-west-1), it may ask you to bootstrap cdk first. Simply run the following:"}),"\n"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"npm run bootstrap\n"})}),"\n",(0,o.jsxs)(s.p,{children:["Then ",(0,o.jsx)(s.code,{children:"deploy"})," again."]}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["If your deploy fails and it's not the first time you deployed, it may tell you it has performed a ",(0,o.jsx)(s.code,{children:"Rollback"})," on the deployed stack to its previous state. This may or may not be successful. You'll want to verify that your project is still working properly within SeaSketch. If it's not you can always destroy your stack by running:"]}),"\n"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"npm run destroy\n"})}),"\n",(0,o.jsxs)(s.p,{children:["Once complete, you will need to ",(0,o.jsx)(s.code,{children:"build"})," and ",(0,o.jsx)(s.code,{children:"deploy"})," again."]}),"\n",(0,o.jsx)(s.h2,{id:"publish-your-datasources",children:"Publish your datasources"}),"\n",(0,o.jsxs)(s.p,{children:["Once you have deployed your project to AWS, it will have an S3 bucket for publishing ",(0,o.jsx)(s.code,{children:"datasources"})," to."]}),"\n",(0,o.jsxs)(s.p,{children:["Your datasources will need to have already been imported using ",(0,o.jsx)(s.code,{children:"import:data"})," and exist in data/dist for this to work."]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"npm run publish:data\n"})}),"\n",(0,o.jsx)(s.p,{children:"It will ask you if you want to publish all datasources, or choose from a list."}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"Note if you don't publish your datasources, then your smoke tests may work properly, but your geoprocessing functions will throw file not found errors in production."}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"integrating-your-project-with-seasketch",children:"Integrating Your Project with SeaSketch"}),"\n",(0,o.jsxs)(s.p,{children:["Once you've deployed your project, you will find a file called ",(0,o.jsx)(s.code,{children:"cdk.outputs"})," which contains the URL to the service manifest for your project."]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-json",children:'"restApiUrl": "https://xxxyyyyzzz.execute-api.us-west-2.amazonaws.com/prod/",\n'})}),"\n",(0,o.jsxs)(s.p,{children:["Now follow the ",(0,o.jsx)(s.a,{href:"https://docs.seasketch.org/seasketch-documentation/administrators-guide/sketch-classes",children:"SeaSketch instructions"})," to assign services to each of your sketch classes."]}),"\n",(0,o.jsxs)(s.p,{children:["If your sketch class is a Polygon or other feature type, you should assign it both a preprocessing function (for clipping) and a report client. If you installed the ",(0,o.jsx)(s.code,{children:"template-ocean-eez"})," starter template then your preprocessor is called ",(0,o.jsx)(s.code,{children:"clipToOceanEez"})," and report client is named ",(0,o.jsx)(s.code,{children:"MpaTabReport"}),"."]}),"\n",(0,o.jsx)(s.p,{children:"If your sketch class is a collection then you only need to assign it a report client. Since we build report clients that work on both individual sketches and sketch collections, you can assign the same report client to your collection as you assigned to your individual sketch class(es)."}),"\n",(0,o.jsx)(s.p,{children:"This should give you the sense that you can create different report clients for different sketch classes within the same project. Or even make reports for sketch collections completely different from reports for individual sketches."}),"\n",(0,o.jsx)(s.p,{children:"Create a sketch and run your reports to make sure it all works!"})]})}function h(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,s,t)=>{t.d(s,{R:()=>i,x:()=>a});var o=t(96540);const n={},r=o.createContext(n);function i(e){const s=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),o.createElement(r.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/7bb51cbb.81f95712.js b/assets/js/7bb51cbb.81f95712.js
new file mode 100644
index 0000000000..563fcc79a3
--- /dev/null
+++ b/assets/js/7bb51cbb.81f95712.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90799],{12543:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>c,metadata:()=>a,toc:()=>l});var n=s(74848),r=s(28453);const c={},o="Project Client",a={id:"projectclient",title:"Project Client",description:"The ProjectClient is the bridge that connects project configuration with code. It makes it easier to bring together your projects datasources, geographies, objectives, metric group definitions, and precalculated metrics and use them in geoprocessing functions and report clients.",source:"@site/docs/projectclient.md",sourceDirName:".",slug:"/projectclient",permalink:"/geoprocessing/docs/next/projectclient",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/projectclient.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Data Fetching",permalink:"/geoprocessing/docs/next/dataproviders"},next:{title:"Link Project Data",permalink:"/geoprocessing/docs/next/linkData"}},i={},l=[];function d(e){const t={a:"a",code:"code",h1:"h1",header:"header",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"project-client",children:"Project Client"})}),"\n",(0,n.jsx)(t.p,{children:"The ProjectClient is the bridge that connects project configuration with code. It makes it easier to bring together your projects datasources, geographies, objectives, metric group definitions, and precalculated metrics and use them in geoprocessing functions and report clients."}),"\n",(0,n.jsxs)(t.p,{children:["Every geoprocessing project has a ProjectClient in ",(0,n.jsx)(t.code,{children:"project/projectClients.ts"}),". It doesn't do much beside imports your projects configuration files and instantiate an instance of ",(0,n.jsx)(t.a,{href:"https://seasketch.github.io/geoprocessing/api/classes/geoprocessing.ProjectClientBase.html",children:"ProjectClientBase"}),". This base class is what provides all of the methods for conveniently accessing your projects configuration. It is worthwhile to review the available methods, and look at ",(0,n.jsx)(t.a,{href:"https://github.com/search?q=org%3Aseasketch+%22project.%22&type=code",children:"other examples"})," of how the project client is used. Here are some snippets."]}),"\n",(0,n.jsxs)(t.p,{children:["Report client examples (",(0,n.jsx)(t.a,{href:"https://github.com/seasketch/cadiz-reports/blob/e83cc1c54132bd06a4bf048ea8a9fc5449c815b1/src/components/CommunitiesCard.tsx",children:"link"}),"):"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typescript",children:'const projectBounds = project.basic.bbox;\nconst metricGroup = project.getMetricGroup("marineCommunities");\nconst totalMetrics = project.getPrecalcMetrics(\n metricGroup,\n "area",\n metricGroup.classKey\n);\n\nconst ds = project.getVectorDatasourceById(geography.datasourceId)\nconst url = project.getDatasourceUrl(ds)\nconst geogFeatures = await getFeatures>(\n ds, url, { bbox: projectBounds }\n);\n\nreturn (\n <>\n \n {(data: ReportResult) => {\n let singleMetrics = data.metrics.filter(\n (m) => m.sketchId === data.sketch.properties.id\n );\n\n const finalMetrics = [\n ...singleMetrics,\n ...toPercentMetric(\n singleMetrics,\n precalcMetrics,\n project.getMetricGroupPercId(metricGroup)\n ),\n ];\n...\n'})}),"\n",(0,n.jsxs)(t.p,{children:["Geoprocessing function examples (",(0,n.jsx)(t.a,{href:"https://github.com/seasketch/gdansk-bay-reports/blob/e1143a069d13ba3a9cfbebae312fa250abea715c/src/functions/evAreaOverlap.ts",children:"link"}),"):"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typescript",children:'export async function evAreaOverlap(\n sketch: Sketch | SketchCollection,\n extraParams: DefaultExtraParams = {}\n): Promise {\n const geographyId = getFirstFromParam("geographyIds", extraParams);\n const curGeography = project.getGeographyById(geographyId, {\n fallbackGroup: "default-boundary",\n });\n const clippedSketch = await clipToGeography(sketch, curGeography);\n const box = clippedSketch.bbox || bbox(clippedSketch);\n\n const metricGroup = project.getMetricGroup("evAreaOverlap");\n\n let cachedFeatures: Record[]> = {};\n\n const polysByBoundary = (\n await Promise.all(\n metricGroup.classes.map(async (curClass) => {\n if (!curClass.datasourceId) {\n throw new Error(`Missing datasourceId ${curClass.classId}`);\n }\n const ds = project.getDatasourceById(curClass.datasourceId);\n if (isInternalVectorDatasource(ds)) {\n const url = `${project.dataBucketUrl()}${getFlatGeobufFilename(ds)}`;\n\n // Fetch features overlapping with sketch, pull from cache if already fetched\n const dsFeatures =\n cachedFeatures[curClass.datasourceId] ||\n (await loadFgb>(url, box));\n cachedFeatures[curClass.datasourceId] = dsFeatures;\n\n // If this is a sub-class, filter by class name, exclude null geometry too\n const finalFeatures =\n ds.classKeys.length > 0\n ? dsFeatures.filter((feat) => {\n const classId = Number(curClass.classId)\n ? Number(curClass.classId)\n : curClass.classId;\n return (\n feat.geometry &&\n feat.properties![ds.classKeys[0]] === classId\n );\n }, [])\n : dsFeatures;\n\n console.log(finalFeatures);\n return finalFeatures;\n }\n\n return [];\n })\n )\n ).reduce[]>>((acc, polys, classIndex) => {\n return {\n ...acc,\n [metricGroup.classes[classIndex].classId]: polys,\n };\n }, {});\n'})})]})}function p(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>o,x:()=>a});var n=s(96540);const r={},c=n.createContext(r);function o(e){const t=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(c.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/7bb51cbb.fe4590df.js b/assets/js/7bb51cbb.fe4590df.js
deleted file mode 100644
index a96ad39bdc..0000000000
--- a/assets/js/7bb51cbb.fe4590df.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90799],{12543:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>u,frontMatter:()=>c,metadata:()=>a,toc:()=>l});var r=s(74848),n=s(28453);const c={},o="Project Client",a={id:"projectclient",title:"Project Client",description:"The ProjectClient is the bridge that connects project configuration with code. It makes it easier to bring together your projects datasources, geographies, objectives, metric group definitions, and precalculated metrics and use them in geoprocessing functions and report clients.",source:"@site/docs/projectclient.md",sourceDirName:".",slug:"/projectclient",permalink:"/geoprocessing/docs/next/projectclient",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/projectclient.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Project Structure",permalink:"/geoprocessing/docs/next/structure"},next:{title:"Precalc Data",permalink:"/geoprocessing/docs/next/precalc"}},i={},l=[];function d(e){const t={a:"a",code:"code",h1:"h1",header:"header",p:"p",pre:"pre",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"project-client",children:"Project Client"})}),"\n",(0,r.jsx)(t.p,{children:"The ProjectClient is the bridge that connects project configuration with code. It makes it easier to bring together your projects datasources, geographies, objectives, metric group definitions, and precalculated metrics and use them in geoprocessing functions and report clients."}),"\n",(0,r.jsxs)(t.p,{children:["Every geoprocessing project has a ProjectClient in ",(0,r.jsx)(t.code,{children:"project/projectClients.ts"}),". It doesn't do much beside imports your projects configuration files and instantiate an instance of ",(0,r.jsx)(t.a,{href:"https://seasketch.github.io/geoprocessing/api/classes/geoprocessing.ProjectClientBase.html",children:"ProjectClientBase"}),". This base class is what provides all of the methods for conveniently accessing your projects configuration. It is worthwhile to review the available methods, and look at ",(0,r.jsx)(t.a,{href:"https://github.com/search?q=org%3Aseasketch+%22project.%22&type=code",children:"other examples"})," of how the project client is used. Here are some snippets."]}),"\n",(0,r.jsxs)(t.p,{children:["Report client examples (",(0,r.jsx)(t.a,{href:"https://github.com/seasketch/cadiz-reports/blob/e83cc1c54132bd06a4bf048ea8a9fc5449c815b1/src/components/CommunitiesCard.tsx",children:"link"}),"):"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-typescript",children:'const projectBounds = project.basic.bbox;\nconst metricGroup = project.getMetricGroup("marineCommunities");\nconst totalMetrics = project.getPrecalcMetrics(\n metricGroup,\n "area",\n metricGroup.classKey\n);\n\nconst ds = project.getVectorDatasourceById(geography.datasourceId)\nconst url = project.getDatasourceUrl(ds)\nconst geogFeatures = await getFeatures>(\n ds, url, { bbox: projectBounds }\n);\n\nreturn (\n <>\n \n {(data: ReportResult) => {\n let singleMetrics = data.metrics.filter(\n (m) => m.sketchId === data.sketch.properties.id\n );\n\n const finalMetrics = [\n ...singleMetrics,\n ...toPercentMetric(\n singleMetrics,\n precalcMetrics,\n project.getMetricGroupPercId(metricGroup)\n ),\n ];\n...\n'})}),"\n",(0,r.jsxs)(t.p,{children:["Geoprocessing function examples (",(0,r.jsx)(t.a,{href:"https://github.com/seasketch/gdansk-bay-reports/blob/e1143a069d13ba3a9cfbebae312fa250abea715c/src/functions/evAreaOverlap.ts",children:"link"}),"):"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-typescript",children:'export async function evAreaOverlap(\n sketch: Sketch | SketchCollection,\n extraParams: DefaultExtraParams = {}\n): Promise {\n const geographyId = getFirstFromParam("geographyIds", extraParams);\n const curGeography = project.getGeographyById(geographyId, {\n fallbackGroup: "default-boundary",\n });\n const clippedSketch = await clipToGeography(sketch, curGeography);\n const box = clippedSketch.bbox || bbox(clippedSketch);\n\n const metricGroup = project.getMetricGroup("evAreaOverlap");\n\n let cachedFeatures: Record[]> = {};\n\n const polysByBoundary = (\n await Promise.all(\n metricGroup.classes.map(async (curClass) => {\n if (!curClass.datasourceId) {\n throw new Error(`Missing datasourceId ${curClass.classId}`);\n }\n const ds = project.getDatasourceById(curClass.datasourceId);\n if (isInternalVectorDatasource(ds)) {\n const url = `${project.dataBucketUrl()}${getFlatGeobufFilename(ds)}`;\n\n // Fetch features overlapping with sketch, pull from cache if already fetched\n const dsFeatures =\n cachedFeatures[curClass.datasourceId] ||\n (await loadFgb>(url, box));\n cachedFeatures[curClass.datasourceId] = dsFeatures;\n\n // If this is a sub-class, filter by class name, exclude null geometry too\n const finalFeatures =\n ds.classKeys.length > 0\n ? dsFeatures.filter((feat) => {\n const classId = Number(curClass.classId)\n ? Number(curClass.classId)\n : curClass.classId;\n return (\n feat.geometry &&\n feat.properties![ds.classKeys[0]] === classId\n );\n }, [])\n : dsFeatures;\n\n console.log(finalFeatures);\n return finalFeatures;\n }\n\n return [];\n })\n )\n ).reduce[]>>((acc, polys, classIndex) => {\n return {\n ...acc,\n [metricGroup.classes[classIndex].classId]: polys,\n };\n }, {});\n'})})]})}function u(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>o,x:()=>a});var r=s(96540);const n={},c=r.createContext(n);function o(e){const t=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(c.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/7c49023e.dcc774ea.js b/assets/js/7c49023e.dcc774ea.js
deleted file mode 100644
index d330bd61fa..0000000000
--- a/assets/js/7c49023e.dcc774ea.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[41954],{45444:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var t=n(74848),o=n(28453);const r={},i="Project Structure",c={id:"structure",title:"Project Structure",description:"Configuration Files and Scripts",source:"@site/docs/structure.md",sourceDirName:".",slug:"/structure",permalink:"/geoprocessing/docs/next/structure",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/structure.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Update Datasource",permalink:"/geoprocessing/docs/next/tutorials/updateDatasource"},next:{title:"Project Client",permalink:"/geoprocessing/docs/next/projectclient"}},a={},l=[{value:"Configuration Files and Scripts",id:"configuration-files-and-scripts",level:2},{value:"Project Assets",id:"project-assets",level:2},{value:"Other Files",id:"other-files",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"project-structure",children:"Project Structure"})}),"\n",(0,t.jsx)(s.h2,{id:"configuration-files-and-scripts",children:"Configuration Files and Scripts"}),"\n",(0,t.jsx)(s.p,{children:"There are a variety of project configuration files. Many have been pre-populated usings your answers to the initial questions. You can hand edit most of these files later to change them, with some noted exceptions."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"package.json"})," - Javascript ",(0,t.jsx)(s.a,{href:"https://docs.npmjs.com/cli/v9/configuring-npm/package-json",children:"package"})," configuration that defines things like the project name, author, and third-party dependencies. The ",(0,t.jsx)(s.a,{href:"https://docs.npmjs.com/cli/v6/commands",children:"npm"})," command is typically used to add, upgrade, or remove dependencies using ",(0,t.jsx)(s.code,{children:"npm install"}),", otherwise it can be hand-edited."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"tsconfig.json"})," - contains configuration for the ",(0,t.jsx)(s.a,{href:"https://www.typescriptlang.org/docs/handbook/tsconfig-json.html",children:"Typescript"})," compiler"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"project/"})," - contains project configuration files.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"basic.json"})," - contains basic project configuration","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"planningAreaType"}),": ",(0,t.jsx)(s.code,{children:"eez"})," or ",(0,t.jsx)(s.code,{children:"other"})]}),"\n",(0,t.jsx)(s.li,{children:"bbox - the bounding box of the project as [bottom, top, left, right]. This generally represents the area that users will draw shapes. It can be used as a boundary for clipping, to generate examples sketches, and as a window for fetching from global datasources."}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"planningAreaId"})," - the unique identifier of the planning region used by the boundary dataset. If your planningAreaType is ",(0,t.jsx)(s.code,{children:"eez"})," and you want to change it, you'll find the full list ",(0,t.jsx)(s.a,{href:"https://raw.githubusercontent.com/seasketch/geoprocessing/dev/packages/geoprocessing/scripts/global/datasources/mr-eez-precalc.json",children:"in github"}),", just look at the UNION property for the id to use"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"planningAreaName"})," - the name of the planning region (e.g. Micronesia)"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"externalLinks"})," - central store of links that you want to populate in your reports."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"languages"})," - array of languages to enable for translation. Master list of language codes are in ",(0,t.jsx)(s.code,{children:"src/i18n/languages.json"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"geoprocessing.json"})," - file used to register assets to be bundled for deployment. If they aren't registered here, then they won't be included in the bundle."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"geographies.json"})," - contains one or more planning geographies for your project. If you chose to start with a blank project template, you will have a default geography of the entire world. If you chose to start with the Ocean EEZ template, you will have a default geography that is the EEZ you chose at creation time. Geographies must be manually added/edited in this file. You will then want to re-run ",(0,t.jsx)(s.code,{children:"precalc"})," and ",(0,t.jsx)(s.code,{children:"test"})," to process the changes and make sure they are working as expected. Learn more about ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#geographies",children:"geographies"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"datasources.json"})," - contains an array of one or more registered datasources, which can be global (url) or local (file path), with a format of vector or raster or subdivided. Global datasources can be manually added/edited in this file, but local datasources should use the ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/dataimport",children:"import"})," process. After import, datasources can be manually added/edited in this file. You will then want to run ",(0,t.jsx)(s.code,{children:"reimport:data"}),", ",(0,t.jsx)(s.code,{children:"precalc:data"}),", ",(0,t.jsx)(s.code,{children:"precalc:clean"}),", and ",(0,t.jsx)(s.code,{children:"test"})," to process the changes and make sure they are working as expected. Learn more about ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#datasources",children:"datasources"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"metrics.json"})," - contains an array of one or more metric groups. Each group defines a metric to calculate, with one or more data classes, derived from one or more datasources, measuring progress towards a planning objective. An initial boundaryAreaOverlap metric group is included in the file by default that uses the global eez datasource. Learn more about ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#metrics",children:"metrics"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"objectives.json"})," - contains an array of one or more objectives for your planning process. A default objective is included for protection of ",(0,t.jsx)(s.code,{children:"20%"})," of the EEZ. Objectives must be manually added/edited in this file. Learn more about ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#objectives",children:"objectives"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"precalc.json"})," - contains precalculated metrics for combinations of geographies and datasources. Specifically it calculates for example the total area/count/sum of the portion of a datasources features that overlap with each geography. This file should not be manually edited. If you have custome metrics/precalculations to do, then use a separate file. Learn more about the ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/precalc",children:"precalc"})," command."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["The object structure in many of the JSON files, particularly the ",(0,t.jsx)(s.code,{children:"project"})," folder, follow strict naming and structure (schema) that must be maintained or you will get validation errors when running commands. Adding additional undocumented properties may be possible, but is not tested. The schemas are defined here:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/projectBasic.ts",children:"Basic"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/geography.ts",children:"Geographies"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/datasource.ts",children:"Datasources"})}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metricGroup.ts",children:"MetricGroup"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/dataclass.ts",children:"DataClass"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/objective.ts",children:"Objective"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metrics.ts",children:"Precalc Metrics"})}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"project-assets",children:"Project Assets"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"src/"})," - contains all source code","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"clients/"})," - report clients are React UI components that can be registered with SeaSketch and when given a sketch URL as input, are able to run the appropriate geoprocessing functions and display a complete report. This can include multiple report pages with tabbed navigation."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"components/"})," - components are the UI building blocks of report clients. They are small and often reusable UI elements. They can be top-level ReportPage components, ResultCard components within a page that invoke geoprocessing functions and display the results, or much lower level components like custom Table or Chart components. You choose how to build them up into sweet report goodness."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"functions/"})," - contains preprocessor and geoprocessor functions that take input (typicall sketch features) and return output (typically metrics). They get bundled into AWS Lambda functions and run on-demand."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"i18n/"})," - contains building blocks for localization aka language translation in reports.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"scripts/"})," - contains scripts for working with translations"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"lang/"})," - contains english terms auto-extracted from this projects report clients and their translations in one or more languages."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"baseLang/"})," - contains english terms and their translations for all UI components and report client templates available through the geoprocessing library. Used to seed the ",(0,t.jsx)(s.code,{children:"lang"})," folder and as a fallback."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"config.json"})," - configuration for integration with POEditor localization service."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"extraTerms.json"})," - contains extra translations. Some are auto-generated from configuration on project init, and you can add more such as plural form of terms."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"i18nAsync.ts"})," - creates an i18next instance that lazy loads language translations on demand."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"i18nSync.ts"})," - creates an i18nnext instance that synchronously imports all language translations ahead of time. This is not quite functional, more for research."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"languages.json"})," - defines all of the supported languages. New languages codes can be added manually, or using ",(0,t.jsx)(s.code,{children:"upgrade"})," command."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["A ",(0,t.jsx)(s.a,{href:"https://seasketch.github.io/geoprocessing/api/classes/geoprocessing.ProjectClientBase.html",children:"ProjectClient"})," class is available in ",(0,t.jsx)(s.code,{children:"project/projectClients.ts"})," that is used in project code for quick access to all project configuration including methods that ease working with them. This is the bridge that connects configuration with code and is the backbone of every geoprocessing function and report client."]}),"\n",(0,t.jsx)(s.h2,{id:"other-files",children:"Other Files"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"node_modules"})," - contains all of the npm installed third-party code dependencies defined in package.json"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"README.md"})," - default readme file that becomes the published front page of your repo on github.com. Edit this with information to help your users understand your project. It could include information or sources on metric calculations and more."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"package-lock.json"})," - contains ",(0,t.jsx)(s.a,{href:"https://docs.npmjs.com/cli/v9/configuring-npm/package-lock-json",children:"cached metadata"})," on the 3rd party modules you have installed. Updates to this file are made automatically and you should commit the changes to your repository at the same time as changes to your package.json."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:".nvmrc"})," - a lesser used config file that works with nvm to define the node version to use for this project. If you use nvm to manage your node version as suggested then you can run ",(0,t.jsx)(s.code,{children:"nvm use"})," in your project and it will install and switch to this version of node."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["To learn more, check out the ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/architecture",children:"Architecture"})," page"]})]})}function h(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>c});var t=n(96540);const o={},r=t.createContext(o);function i(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/7c49023e.edfb931e.js b/assets/js/7c49023e.edfb931e.js
new file mode 100644
index 0000000000..5a4a088497
--- /dev/null
+++ b/assets/js/7c49023e.edfb931e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[41954],{45444:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var t=n(74848),o=n(28453);const r={},i="Project Structure",a={id:"structure",title:"Project Structure",description:"Configuration Files and Scripts",source:"@site/docs/structure.md",sourceDirName:".",slug:"/structure",permalink:"/geoprocessing/docs/next/structure",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/structure.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Third Party Data",permalink:"/geoprocessing/docs/next/thirdpartydata/"},next:{title:"Spatial Toolbox",permalink:"/geoprocessing/docs/next/toolbox"}},c={},l=[{value:"Configuration Files and Scripts",id:"configuration-files-and-scripts",level:2},{value:"Project Assets",id:"project-assets",level:2},{value:"Other Files",id:"other-files",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"project-structure",children:"Project Structure"})}),"\n",(0,t.jsx)(s.h2,{id:"configuration-files-and-scripts",children:"Configuration Files and Scripts"}),"\n",(0,t.jsx)(s.p,{children:"There are a variety of project configuration files. Many have been pre-populated usings your answers to the initial questions. You can hand edit most of these files later to change them, with some noted exceptions."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"package.json"})," - Javascript ",(0,t.jsx)(s.a,{href:"https://docs.npmjs.com/cli/v9/configuring-npm/package-json",children:"package"})," configuration that defines things like the project name, author, and third-party dependencies. The ",(0,t.jsx)(s.a,{href:"https://docs.npmjs.com/cli/v6/commands",children:"npm"})," command is typically used to add, upgrade, or remove dependencies using ",(0,t.jsx)(s.code,{children:"npm install"}),", otherwise it can be hand-edited."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"tsconfig.json"})," - contains configuration for the ",(0,t.jsx)(s.a,{href:"https://www.typescriptlang.org/docs/handbook/tsconfig-json.html",children:"Typescript"})," compiler"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"project/"})," - contains project configuration files.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"basic.json"})," - contains basic project configuration","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"planningAreaType"}),": ",(0,t.jsx)(s.code,{children:"eez"})," or ",(0,t.jsx)(s.code,{children:"other"})]}),"\n",(0,t.jsx)(s.li,{children:"bbox - the bounding box of the project as [bottom, top, left, right]. This generally represents the area that users will draw shapes. It can be used as a boundary for clipping, to generate examples sketches, and as a window for fetching from global datasources."}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"planningAreaId"})," - the unique identifier of the planning region used by the boundary dataset. If your planningAreaType is ",(0,t.jsx)(s.code,{children:"eez"})," and you want to change it, you'll find the full list ",(0,t.jsx)(s.a,{href:"https://raw.githubusercontent.com/seasketch/geoprocessing/dev/packages/geoprocessing/scripts/global/datasources/mr-eez-precalc.json",children:"in github"}),", just look at the UNION property for the id to use"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"planningAreaName"})," - the name of the planning region (e.g. Micronesia)"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"externalLinks"})," - central store of links that you want to populate in your reports."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"languages"})," - array of languages to enable for translation. Master list of language codes are in ",(0,t.jsx)(s.code,{children:"src/i18n/languages.json"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"geoprocessing.json"})," - file used to register assets to be bundled for deployment. If they aren't registered here, then they won't be included in the bundle."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"geographies.json"})," - contains one or more planning geographies for your project. If you chose to start with a blank project template, you will have a default geography of the entire world. If you chose to start with the Ocean EEZ template, you will have a default geography that is the EEZ you chose at creation time. Geographies must be manually added/edited in this file. You will then want to re-run ",(0,t.jsx)(s.code,{children:"precalc"})," and ",(0,t.jsx)(s.code,{children:"test"})," to process the changes and make sure they are working as expected. Learn more about ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#geographies",children:"geographies"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"datasources.json"})," - contains an array of one or more registered datasources, which can be global (url) or local (file path), with a format of vector or raster or subdivided. Global datasources can be manually added/edited in this file, but local datasources should use the ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/dataimport",children:"import"})," process. After import, datasources can be manually added/edited in this file. You will then want to run ",(0,t.jsx)(s.code,{children:"reimport:data"}),", ",(0,t.jsx)(s.code,{children:"precalc:data"}),", ",(0,t.jsx)(s.code,{children:"precalc:clean"}),", and ",(0,t.jsx)(s.code,{children:"test"})," to process the changes and make sure they are working as expected. Learn more about ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#datasources",children:"datasources"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"metrics.json"})," - contains an array of one or more metric groups. Each group defines a metric to calculate, with one or more data classes, derived from one or more datasources, measuring progress towards a planning objective. An initial boundaryAreaOverlap metric group is included in the file by default that uses the global eez datasource. Learn more about ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#metrics",children:"metrics"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"objectives.json"})," - contains an array of one or more objectives for your planning process. A default objective is included for protection of ",(0,t.jsx)(s.code,{children:"20%"})," of the EEZ. Objectives must be manually added/edited in this file. Learn more about ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#objectives",children:"objectives"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"precalc.json"})," - contains precalculated metrics for combinations of geographies and datasources. Specifically it calculates for example the total area/count/sum of the portion of a datasources features that overlap with each geography. This file should not be manually edited. If you have custome metrics/precalculations to do, then use a separate file. Learn more about the ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/precalc",children:"precalc"})," command."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["The object structure in many of the JSON files, particularly the ",(0,t.jsx)(s.code,{children:"project"})," folder, follow strict naming and structure (schema) that must be maintained or you will get validation errors when running commands. Adding additional undocumented properties may be possible, but is not tested. The schemas are defined here:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/projectBasic.ts",children:"Basic"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/geography.ts",children:"Geographies"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/datasource.ts",children:"Datasources"})}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metricGroup.ts",children:"MetricGroup"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/dataclass.ts",children:"DataClass"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/objective.ts",children:"Objective"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metrics.ts",children:"Precalc Metrics"})}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"project-assets",children:"Project Assets"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"src/"})," - contains all source code","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"clients/"})," - report clients are React UI components that can be registered with SeaSketch and when given a sketch URL as input, are able to run the appropriate geoprocessing functions and display a complete report. This can include multiple report pages with tabbed navigation."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"components/"})," - components are the UI building blocks of report clients. They are small and often reusable UI elements. They can be top-level ReportPage components, ResultCard components within a page that invoke geoprocessing functions and display the results, or much lower level components like custom Table or Chart components. You choose how to build them up into sweet report goodness."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"functions/"})," - contains preprocessor and geoprocessor functions that take input (typicall sketch features) and return output (typically metrics). They get bundled into AWS Lambda functions and run on-demand."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"i18n/"})," - contains building blocks for localization aka language translation in reports.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"scripts/"})," - contains scripts for working with translations"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"lang/"})," - contains english terms auto-extracted from this projects report clients and their translations in one or more languages."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"baseLang/"})," - contains english terms and their translations for all UI components and report client templates available through the geoprocessing library. Used to seed the ",(0,t.jsx)(s.code,{children:"lang"})," folder and as a fallback."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"config.json"})," - configuration for integration with POEditor localization service."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"extraTerms.json"})," - contains extra translations. Some are auto-generated from configuration on project init, and you can add more such as plural form of terms."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"i18nAsync.ts"})," - creates an i18next instance that lazy loads language translations on demand."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"i18nSync.ts"})," - creates an i18nnext instance that synchronously imports all language translations ahead of time. This is not quite functional, more for research."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"languages.json"})," - defines all of the supported languages. New languages codes can be added manually, or using ",(0,t.jsx)(s.code,{children:"upgrade"})," command."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["A ",(0,t.jsx)(s.a,{href:"https://seasketch.github.io/geoprocessing/api/classes/geoprocessing.ProjectClientBase.html",children:"ProjectClient"})," class is available in ",(0,t.jsx)(s.code,{children:"project/projectClients.ts"})," that is used in project code for quick access to all project configuration including methods that ease working with them. This is the bridge that connects configuration with code and is the backbone of every geoprocessing function and report client."]}),"\n",(0,t.jsx)(s.h2,{id:"other-files",children:"Other Files"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"node_modules"})," - contains all of the npm installed third-party code dependencies defined in package.json"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"README.md"})," - default readme file that becomes the published front page of your repo on github.com. Edit this with information to help your users understand your project. It could include information or sources on metric calculations and more."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"package-lock.json"})," - contains ",(0,t.jsx)(s.a,{href:"https://docs.npmjs.com/cli/v9/configuring-npm/package-lock-json",children:"cached metadata"})," on the 3rd party modules you have installed. Updates to this file are made automatically and you should commit the changes to your repository at the same time as changes to your package.json."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:".nvmrc"})," - a lesser used config file that works with nvm to define the node version to use for this project. If you use nvm to manage your node version as suggested then you can run ",(0,t.jsx)(s.code,{children:"nvm use"})," in your project and it will install and switch to this version of node."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["To learn more, check out the ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/architecture",children:"Architecture"})," page"]})]})}function h(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>a});var t=n(96540);const o={},r=t.createContext(o);function i(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/8dc88e6d.39863bb2.js b/assets/js/8dc88e6d.39863bb2.js
deleted file mode 100644
index 9cdba34b82..0000000000
--- a/assets/js/8dc88e6d.39863bb2.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[79929],{81059:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>a});var i=s(74848),t=s(28453);const o={},r="Skill Building",l={id:"skills",title:"Skill Building",description:"There are a number of required skills for using this framework successfully. If you don't have this knowledge, then skill building and potentially mentorship may be needed for you to succeed. Here is a list of resources that can help you get started:",source:"@site/docs/skills.md",sourceDirName:".",slug:"/skills",permalink:"/geoprocessing/docs/next/skills",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/skills.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Command Line Interface",permalink:"/geoprocessing/docs/next/cli"},next:{title:"Concepts",permalink:"/geoprocessing/docs/next/concepts/AdvancedConcepts"}},d={},a=[{value:"Other Tips",id:"other-tips",level:2},{value:"Editing a file in Ubuntu using nano text editor",id:"editing-a-file-in-ubuntu-using-nano-text-editor",level:3},{value:"Editing your startup bash script in Ubuntu",id:"editing-your-startup-bash-script-in-ubuntu",level:3},{value:"Access Cloud Drive folder",id:"access-cloud-drive-folder",level:3},{value:"MacOS",id:"macos",level:4},{value:"Ubuntu on Windows WSL2",id:"ubuntu-on-windows-wsl2",level:4}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"skill-building",children:"Skill Building"})}),"\n",(0,i.jsx)(n.p,{children:"There are a number of required skills for using this framework successfully. If you don't have this knowledge, then skill building and potentially mentorship may be needed for you to succeed. Here is a list of resources that can help you get started:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.youtube.com/watch?v=RGOj5yH7evk",children:"Git and Github"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.freecodecamp.org/news/what-is-node-js/",children:"Node JS"})," development"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.youtube.com/watch?v=WPqXP_kLzpo",children:"VSCode"})," integrated development environment (IDE)"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.freecodecamp.org/news/what-is-debugging-how-to-debug-code/",children:"Code debugging"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.freecodecamp.org/news/linux-command-line-bash-tutorial/",children:"Bash"})," command line"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.freecodecamp.org/learn/front-end-development-libraries/#react",children:"React"})," user interface development"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.freecodecamp.org/news/programming-in-typescript/",children:"Typescript"})," code development"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.qgis.org/en/site/",children:"QGIS"})," and ",(0,i.jsx)(n.a,{href:"https://www.qgistutorials.com/en/",children:"tutorials"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://gdal.org/index.html",children:"GDAL"})," and ",(0,i.jsx)(n.a,{href:"https://gdal.org/tutorials/index.html",children:"tutorials"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Essential tips For configuring this framework using a specific operating system (usually Ubuntu)."}),"\n",(0,i.jsx)(n.h2,{id:"other-tips",children:"Other Tips"}),"\n",(0,i.jsx)(n.h3,{id:"editing-a-file-in-ubuntu-using-nano-text-editor",children:"Editing a file in Ubuntu using nano text editor"}),"\n",(0,i.jsxs)(n.p,{children:["Assume you want to add some lines of text to a file called ",(0,i.jsx)(n.code,{children:"foo.txt"})," in your home directory using nano."]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Open a Ubuntu shell"}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"nano ~/foo.txt"})}),"\n",(0,i.jsx)(n.li,{children:"Copy and paste the following lines into the file"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",children:"This is file foo\nIt doesn't do much\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"4",children:["\n",(0,i.jsxs)(n.li,{children:["Save and exit with ",(0,i.jsx)(n.code,{children:"Ctrl-O"})," and ",(0,i.jsx)(n.code,{children:"Enter"})]}),"\n",(0,i.jsx)(n.li,{children:"Look at your results"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"echo ~/foo.txt\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"6",children:["\n",(0,i.jsxs)(n.li,{children:["Now delete the file with ",(0,i.jsx)(n.code,{children:"rm ~/.foo.txt"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"editing-your-startup-bash-script-in-ubuntu",children:"Editing your startup bash script in Ubuntu"}),"\n",(0,i.jsxs)(n.p,{children:["On occasion, you'll need to modify your Ubuntu bash shell environment to load something on startup. Building on the last tip, you can edit your ",(0,i.jsx)(n.code,{children:".bashrc"})," file"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Open a Ubuntu shell"}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"nano ~/.bashrc"})}),"\n",(0,i.jsx)(n.li,{children:"Add or paste in your configuration. This can be done at the top or bottom of the file usually."}),"\n",(0,i.jsxs)(n.li,{children:["Save and exit with ",(0,i.jsx)(n.code,{children:"Ctrl-O"})," and ",(0,i.jsx)(n.code,{children:"Enter"})]}),"\n",(0,i.jsxs)(n.li,{children:["Reload your bashrc with ",(0,i.jsx)(n.code,{children:"source ~/.bashrc"})," or you can just close and restart your Ubuntu shell."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"/Users/MAC-OS-USER/Library/CloudStorage/Box-Box"}),"\n",(0,i.jsx)(n.h3,{id:"access-cloud-drive-folder",children:"Access Cloud Drive folder"}),"\n",(0,i.jsxs)(n.p,{children:["This is useful if you manage your spatial data in Box and collaborators sync it to their local computers. This lets you bring your Box Drive folder into your Ubuntu docker container so that you can symlink it to your ",(0,i.jsx)(n.code,{children:"data/src"})," folder and import data in a consistent way across all users."]}),"\n",(0,i.jsx)(n.p,{children:"Note, this could be used with other drive share systems such as Google Drive."}),"\n",(0,i.jsx)(n.p,{children:"First, ensure you have Box Drive installed, and you have enabled sync of your data to your local computer."}),"\n",(0,i.jsx)(n.h4,{id:"macos",children:"MacOS"}),"\n",(0,i.jsxs)(n.p,{children:["Open a terminal and assuming your username is ",(0,i.jsx)(n.code,{children:"alex"})," check that the following path exists"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"ls /Users/alex/Library/CloudStorage/Box-Box\n"})}),"\n",(0,i.jsx)(n.p,{children:"If you see the top-level of your synced files, then you are good to go."}),"\n",(0,i.jsx)(n.h4,{id:"ubuntu-on-windows-wsl2",children:"Ubuntu on Windows WSL2"}),"\n",(0,i.jsxs)(n.p,{children:["Source - ",(0,i.jsx)(n.a,{href:"https://github.com/microsoft/WSL/issues/4310",children:"https://github.com/microsoft/WSL/issues/4310"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"C:\\Users\\alex\\box\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Now add the following ",(0,i.jsx)(n.a,{href:"#editing-a-file-in-ubuntu-using-nano-text-editor",children:"to your bashrc"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"if ! findmnt -M /mnt/box &>/dev/null; then\n sudo mount -t drvfs 'C:\\Users\\alex\\box' /mnt/box\nfi\n"})}),"\n",(0,i.jsx)(n.p,{children:"On every Ubuntu shell startup you will nowbe prompted for your root password. Once entered the drive mount will be performed."}),"\n",(0,i.jsx)(n.p,{children:"Now verify your box files are accessible from Linux"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"ls /mnt/box\n"})})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>l});var i=s(96540);const t={},o=i.createContext(t);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/8dc88e6d.d7c1e08d.js b/assets/js/8dc88e6d.d7c1e08d.js
new file mode 100644
index 0000000000..9d02be8160
--- /dev/null
+++ b/assets/js/8dc88e6d.d7c1e08d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[79929],{81059:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var i=s(74848),t=s(28453);const r={},o="Skill Building",l={id:"skills",title:"Skill Building",description:"There are a number of required skills for using this framework successfully. If you don't have this knowledge, then skill building and potentially mentorship may be needed for you to succeed. Here is a list of resources that can help you get started:",source:"@site/docs/skills.md",sourceDirName:".",slug:"/skills",permalink:"/geoprocessing/docs/next/skills",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/skills.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Command Line Interface",permalink:"/geoprocessing/docs/next/cli"},next:{title:"Accuracy/Limitations",permalink:"/geoprocessing/docs/next/EdgesAndLimits"}},d={},a=[{value:"Other Tips",id:"other-tips",level:2},{value:"Editing a file in Ubuntu using nano text editor",id:"editing-a-file-in-ubuntu-using-nano-text-editor",level:3},{value:"Editing your startup bash script in Ubuntu",id:"editing-your-startup-bash-script-in-ubuntu",level:3},{value:"Access Cloud Drive folder",id:"access-cloud-drive-folder",level:3},{value:"MacOS",id:"macos",level:4},{value:"Ubuntu on Windows WSL2",id:"ubuntu-on-windows-wsl2",level:4}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"skill-building",children:"Skill Building"})}),"\n",(0,i.jsx)(n.p,{children:"There are a number of required skills for using this framework successfully. If you don't have this knowledge, then skill building and potentially mentorship may be needed for you to succeed. Here is a list of resources that can help you get started:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.youtube.com/watch?v=RGOj5yH7evk",children:"Git and Github"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.freecodecamp.org/news/what-is-node-js/",children:"Node JS"})," development"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.youtube.com/watch?v=WPqXP_kLzpo",children:"VSCode"})," integrated development environment (IDE)"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.freecodecamp.org/news/what-is-debugging-how-to-debug-code/",children:"Code debugging"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.freecodecamp.org/news/linux-command-line-bash-tutorial/",children:"Bash"})," command line"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.freecodecamp.org/learn/front-end-development-libraries/#react",children:"React"})," user interface development"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.freecodecamp.org/news/programming-in-typescript/",children:"Typescript"})," code development"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.qgis.org/en/site/",children:"QGIS"})," and ",(0,i.jsx)(n.a,{href:"https://www.qgistutorials.com/en/",children:"tutorials"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://gdal.org/index.html",children:"GDAL"})," and ",(0,i.jsx)(n.a,{href:"https://gdal.org/tutorials/index.html",children:"tutorials"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Essential tips For configuring this framework using a specific operating system (usually Ubuntu)."}),"\n",(0,i.jsx)(n.h2,{id:"other-tips",children:"Other Tips"}),"\n",(0,i.jsx)(n.h3,{id:"editing-a-file-in-ubuntu-using-nano-text-editor",children:"Editing a file in Ubuntu using nano text editor"}),"\n",(0,i.jsxs)(n.p,{children:["Assume you want to add some lines of text to a file called ",(0,i.jsx)(n.code,{children:"foo.txt"})," in your home directory using nano."]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Open a Ubuntu shell"}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"nano ~/foo.txt"})}),"\n",(0,i.jsx)(n.li,{children:"Copy and paste the following lines into the file"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",children:"This is file foo\nIt doesn't do much\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"4",children:["\n",(0,i.jsxs)(n.li,{children:["Save and exit with ",(0,i.jsx)(n.code,{children:"Ctrl-O"})," and ",(0,i.jsx)(n.code,{children:"Enter"})]}),"\n",(0,i.jsx)(n.li,{children:"Look at your results"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"echo ~/foo.txt\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"6",children:["\n",(0,i.jsxs)(n.li,{children:["Now delete the file with ",(0,i.jsx)(n.code,{children:"rm ~/.foo.txt"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"editing-your-startup-bash-script-in-ubuntu",children:"Editing your startup bash script in Ubuntu"}),"\n",(0,i.jsxs)(n.p,{children:["On occasion, you'll need to modify your Ubuntu bash shell environment to load something on startup. Building on the last tip, you can edit your ",(0,i.jsx)(n.code,{children:".bashrc"})," file"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Open a Ubuntu shell"}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"nano ~/.bashrc"})}),"\n",(0,i.jsx)(n.li,{children:"Add or paste in your configuration. This can be done at the top or bottom of the file usually."}),"\n",(0,i.jsxs)(n.li,{children:["Save and exit with ",(0,i.jsx)(n.code,{children:"Ctrl-O"})," and ",(0,i.jsx)(n.code,{children:"Enter"})]}),"\n",(0,i.jsxs)(n.li,{children:["Reload your bashrc with ",(0,i.jsx)(n.code,{children:"source ~/.bashrc"})," or you can just close and restart your Ubuntu shell."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"/Users/MAC-OS-USER/Library/CloudStorage/Box-Box"}),"\n",(0,i.jsx)(n.h3,{id:"access-cloud-drive-folder",children:"Access Cloud Drive folder"}),"\n",(0,i.jsxs)(n.p,{children:["This is useful if you manage your spatial data in Box and collaborators sync it to their local computers. This lets you bring your Box Drive folder into your Ubuntu docker container so that you can symlink it to your ",(0,i.jsx)(n.code,{children:"data/src"})," folder and import data in a consistent way across all users."]}),"\n",(0,i.jsx)(n.p,{children:"Note, this could be used with other drive share systems such as Google Drive."}),"\n",(0,i.jsx)(n.p,{children:"First, ensure you have Box Drive installed, and you have enabled sync of your data to your local computer."}),"\n",(0,i.jsx)(n.h4,{id:"macos",children:"MacOS"}),"\n",(0,i.jsxs)(n.p,{children:["Open a terminal and assuming your username is ",(0,i.jsx)(n.code,{children:"alex"})," check that the following path exists"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"ls /Users/alex/Library/CloudStorage/Box-Box\n"})}),"\n",(0,i.jsx)(n.p,{children:"If you see the top-level of your synced files, then you are good to go."}),"\n",(0,i.jsx)(n.h4,{id:"ubuntu-on-windows-wsl2",children:"Ubuntu on Windows WSL2"}),"\n",(0,i.jsxs)(n.p,{children:["Source - ",(0,i.jsx)(n.a,{href:"https://github.com/microsoft/WSL/issues/4310",children:"https://github.com/microsoft/WSL/issues/4310"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"C:\\Users\\alex\\box\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Now add the following ",(0,i.jsx)(n.a,{href:"#editing-a-file-in-ubuntu-using-nano-text-editor",children:"to your bashrc"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"if ! findmnt -M /mnt/box &>/dev/null; then\n sudo mount -t drvfs 'C:\\Users\\alex\\box' /mnt/box\nfi\n"})}),"\n",(0,i.jsx)(n.p,{children:"On every Ubuntu shell startup you will nowbe prompted for your root password. Once entered the drive mount will be performed."}),"\n",(0,i.jsx)(n.p,{children:"Now verify your box files are accessible from Linux"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"ls /mnt/box\n"})})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>l});var i=s(96540);const t={},r=i.createContext(t);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/962e3ba3.40249758.js b/assets/js/962e3ba3.40249758.js
deleted file mode 100644
index 0be738bc40..0000000000
--- a/assets/js/962e3ba3.40249758.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[95886],{22155:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>r,metadata:()=>d,toc:()=>h});var i=s(74848),t=s(28453);s(96540);function o(){return(0,i.jsx)("span",{children:"20.12"})}function l(){return(0,i.jsx)("span",{children:"22.04 Jammy"})}const r={},c="System Setup",d={id:"tutorials/Tutorials",title:"System Setup",description:"These tutorials will walk you through creating and deploying a basic seasketch geoprocessing project. You should already have a basic working knowledge of your computer, its operating system, shell environment (command line), and web application development using NodeJS and React. Learn more about the skills required.",source:"@site/docs/tutorials/Tutorials.md",sourceDirName:"tutorials",slug:"/tutorials/",permalink:"/geoprocessing/docs/next/tutorials/",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/tutorials/Tutorials.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Concepts",permalink:"/geoprocessing/docs/next/concepts"},next:{title:"Create Sample Project",permalink:"/geoprocessing/docs/next/tutorials/sampleproject"}},a={},h=[{value:"Virtual Install With Docker Desktop",id:"virtual-install-with-docker-desktop",level:2},{value:"MacOS Direct Install",id:"macos-direct-install",level:2},{value:"Windows WSL Install",id:"windows-wsl-install",level:2},{value:"Geoprocessing Distribution",id:"geoprocessing-distribution",level:3},{value:"Default Ubuntu Distribution",id:"default-ubuntu-distribution",level:3},{value:"Ubuntu Direct Install",id:"ubuntu-direct-install",level:2},{value:"Final Configuration - all install options",id:"final-configuration---all-install-options",level:2}];function u(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"system-setup",children:"System Setup"})}),"\n","\n",(0,i.jsxs)(n.p,{children:["These tutorials will walk you through creating and deploying a basic seasketch ",(0,i.jsx)(n.code,{children:"geoprocessing"})," project. You should already have a basic working knowledge of your computer, its operating system, shell environment (command line), and web application development using NodeJS and React. Learn more about the ",(0,i.jsx)(n.a,{href:"/geoprocessing/docs/next/skills",children:"skills"})," required."]}),"\n",(0,i.jsx)(n.p,{children:"Setup options:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["MacOS","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#virtual-install-with-docker-desktop",children:"Virtual install with Docker Desktop"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#macos-direct-install",children:"Direct Install on MacOS"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Windows","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#windows-wsl-install",children:"Virtual install with Windows Subsystem for Linux (WSL)"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#virtual-install-with-docker-desktop",children:"Virtual install with Docker Desktop"})}),"\n",(0,i.jsx)(n.li,{children:"Direct Install on Windows not supported"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Ubuntu Linux","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#virtual-install-with-docker-desktop",children:"Virtual install with Docker Desktop"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#ubuntu-direct-install",children:"Direct Install on Ubuntu"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"../codespaces/",children:"Github codespaces"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Possible but not well tested"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"A virtual environment is the recommended way for beginners to develop geoprocessing projects. Docker Desktop is the recommended methods on MacOS and Linux. WSL is the recommended method on Windows."}),"\n",(0,i.jsx)(n.h2,{id:"virtual-install-with-docker-desktop",children:"Virtual Install With Docker Desktop"}),"\n",(0,i.jsxs)(n.p,{children:["Docker Desktop allows you to run containerized applications that are isolated from your host operating system. It's similar but different from a virtual machine. SeaSketch publishes the ",(0,i.jsx)(n.a,{href:"https://github.com/seasketch/docker-gp-workspace",children:"docker-gp-workspace"})," container image that is a fully-configured environment for developing geoprocessing projects. It allows you to get up and running quickly and has persistent storage. The downside is that code runs a bit slower in a container than directly on your system."]}),"\n",(0,i.jsx)(n.p,{children:"Install steps for all operating systems:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://www.docker.com/products/docker-desktop/",children:"Docker Desktop"})," on your host operating system and make sure it's running.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If you have a Mac, choose either Apple processor or Intel processor as appropriate. If you don't know, click the apple icon in the top left and select ",(0,i.jsx)(n.code,{children:"About This Mac"})," and look for ",(0,i.jsx)(n.code,{children:"Processor"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://code.visualstudio.com",children:"VS Code"})," on your host operating system and open it."]}),"\n",(0,i.jsxs)(n.li,{children:["Clone the geoprocessing-devcontainer Github repository to your host operating system, and open that folder in VSCode.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["From VSCode, click ",(0,i.jsx)(n.code,{children:"Open Folder"})," button or ",(0,i.jsx)(n.code,{children:"File -> Open Folder"})," and create or choose a folder where you keep source code. A folder called ",(0,i.jsx)(n.code,{children:"src"})," or ",(0,i.jsx)(n.code,{children:"code"})," in your users home directory is reasonable. Then click ",(0,i.jsx)(n.code,{children:"Select Folder"})," to finish."]}),"\n",(0,i.jsxs)(n.li,{children:["Press ",(0,i.jsx)(n.code,{children:"Ctrl-J"})," or ",(0,i.jsx)(n.code,{children:"Cmd-backtick"})," to open a terminal. The current directory of the terminal will be your workspace folder."]}),"\n",(0,i.jsxs)(n.li,{children:["Enter the command to clone the geoprocessing-devcontainer repository to your workspace.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"git clone https://github.com/seasketch/geoprocessing-devcontainer"})}),"\n",(0,i.jsxs)(n.li,{children:["If you had previously cloned this repository then update it now with ",(0,i.jsx)(n.code,{children:"cd geoprocessing-devcontainer && git pull"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.code,{children:"Open Folder"})," button or ",(0,i.jsx)(n.code,{children:"File -> Open Folder"})," and open the repo folder you just cloned."]}),"\n",(0,i.jsxs)(n.li,{children:["Press ",(0,i.jsx)(n.code,{children:"Ctrl-J"})," or ",(0,i.jsx)(n.code,{children:"Cmd-backtick"})," to open a terminal again."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Install required VSCode extensions. You may be prompted to do this, otherwise go to the ",(0,i.jsx)(n.code,{children:"Extension"})," panel found on the left side of the VSCode window. Then install the following extensions:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Remote Development"}),"\n",(0,i.jsx)(n.li,{children:"Remote Explorer"}),"\n",(0,i.jsx)(n.li,{children:"Docker"}),"\n",(0,i.jsx)(n.li,{children:"Dev Containers"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Once you have added the ",(0,i.jsx)(n.code,{children:"Dev Containers"}),' extension you should be prompted to "Reopen folder to develop in a container". ',(0,i.jsx)("b",{children:(0,i.jsx)(n.em,{children:"Do not do this yet."})})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["In the file ",(0,i.jsx)(n.code,{children:"Explorer"})," panel, open the ",(0,i.jsx)(n.code,{children:".devcontainer"})," folder.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["This top-level folder contains the configuration for the ",(0,i.jsx)(n.code,{children:"stable"})," geoprocessing devcontainer you will use."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Make a copy of ",(0,i.jsx)(n.code,{children:".devcontainer/.env.template"})," file and name it ",(0,i.jsx)(n.code,{children:".env"}),".","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["You don't need to add anything yet to your .env file, but it is required that it exists in the ",(0,i.jsx)(n.code,{children:".devcontainer"})," folder."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Now start the devcontainer:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Ctrl-Shift-P"})," or ",(0,i.jsx)(n.code,{children:"Cmd-Shift-P"})," to open the VSCode command palette"]}),"\n",(0,i.jsx)(n.li,{children:"type \u201cReopen in container\u201d and select the Dev Container command to do so."}),"\n",(0,i.jsxs)(n.li,{children:["Select the ",(0,i.jsx)(n.code,{children:"Geoprocessing Local Stable"})," environment."]}),"\n",(0,i.jsxs)(n.li,{children:["VSCode will pull the latest ",(0,i.jsx)(n.code,{children:"geoprocessing-workspace"})," docker image, create a container with it, and start a remote code experience inside the container."]}),"\n",(0,i.jsxs)(n.li,{children:["Notice the bottom left blue icon in your vscode window. It may say ",(0,i.jsx)(n.code,{children:"Opening remote connection"})," and eventually will say ",(0,i.jsx)(n.code,{children:"Dev Container: Geoprocessing"}),". This is telling you that this VSCode window is running in a devcontainer environment."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Manage Devcontainers",src:s(7098).A+"",title:"Manage Devcontainers",width:"591",height:"198"})}),"\n",(0,i.jsx)(n.p,{children:"You now have a devcontainer, ready to create a project in."}),"\n",(0,i.jsx)(n.p,{children:"To exit your devcontainer:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Click the blue icon in the bottom left, and then ",(0,i.jsx)(n.code,{children:"Reopen locally"}),". This will bring VSCode back out of the devcontainer session."]}),"\n",(0,i.jsxs)(n.li,{children:["You can also type ",(0,i.jsx)(n.code,{children:"Ctrl-Shift-P"})," or ",(0,i.jsx)(n.code,{children:"Cmd-Shift-P"})," and select ",(0,i.jsx)(n.code,{children:"Dev Containers: Reopen folder locally"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Manage Devcontainers",src:s(17383).A+"",title:"Manage Devcontainers",width:"582",height:"962"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["To update to the latest ",(0,i.jsx)(n.code,{children:"geoprocessing-workspace"})," Docker image at any point you simply use a different VSCode command to start it:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Ctrl-Shift-P"})," or ",(0,i.jsx)(n.code,{children:"Cmd-Shift-P"})," to open the VSCode command palette"]}),"\n",(0,i.jsx)(n.li,{children:'type "Dev Containers: Rebuild Without Cache and Reopen In Container"'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["See devcontainer advanced usage ",(0,i.jsx)(n.a,{href:"/geoprocessing/docs/next/devcontainer/",children:"guide"})," to learn more or the ",(0,i.jsx)(n.a,{href:"/geoprocessing/docs/next/upgrade",children:"upgrade"})," tutorial"]}),"\n",(0,i.jsx)(n.h2,{id:"macos-direct-install",children:"MacOS Direct Install"}),"\n",(0,i.jsx)(n.p,{children:"Requirement: 11.6.8 Big Sur or newer"}),"\n",(0,i.jsx)(n.p,{children:"Install all software dependencies directly on your Apple machine running the MacOS operating system:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Install ",(0,i.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node JS"})," >= ",(0,i.jsx)(o,{})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/nvm-sh/nvm",children:"nvm"})," is great for this","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"First, install nvm. May ask you to first install XCode developer tools which is available through the App Store or follow the instructions provided."}),"\n",(0,i.jsxs)(n.li,{children:["Then ",(0,i.jsxs)("code",{children:["nvm install v",(0,i.jsx)(o,{})]}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Then open your Terminal app of choice and run ",(0,i.jsx)(n.code,{children:"node -v"})," to check your node version"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Install latest ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/",children:"NPM"})," package manager after installing node."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"npm --version"})," to check"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"npm install -g latest"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Install ",(0,i.jsx)(n.a,{href:"https://code.visualstudio.com",children:"VS Code"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Install recommended ",(0,i.jsx)(n.a,{href:"https://code.visualstudio.com/docs/editor/extension-marketplace",children:"extensions"})," when prompted. If not prompted, go to the ",(0,i.jsx)(n.code,{children:"Extensions"})," panel on the left side and install the extensions named in ",(0,i.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/templates/project/.vscode/extensions.json",children:"this file"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Install ",(0,i.jsx)(n.a,{href:"https://gdal.org/",children:"GDAL"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["First install ",(0,i.jsx)(n.a,{href:"https://brew.sh/",children:"homebrew"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"brew install gdal"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Install ",(0,i.jsx)(n.a,{href:"https://www.java.com/en/download/",children:"Java runtime"})," for MacOS (required for testing with Amazon DynamoDb Local)"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Create a free Github account if you don't have one already"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"windows-wsl-install",children:"Windows WSL Install"}),"\n",(0,i.jsx)(n.p,{children:"Requirement: Windows 11 or newer"}),"\n",(0,i.jsxs)(n.p,{children:["Why use Windows Subsystem for Linux (WSL) to develop geoprocessing projects instead of using the ",(0,i.jsx)(n.a,{href:"#virtual-install-with-docker-desktop",children:"Docker Desktop"}),"? Because WSL is faster than Docker Desktop alone. And because WSL provides a built-in filesystem bridge allowing you to access all your Windows drives in the Ubuntu container (via ",(0,i.jsx)(n.code,{children:"/mnt"})," path)."]}),"\n",(0,i.jsx)(n.p,{children:"To get started in Windows:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4",children:"Powershell for Windows"})]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/install",children:"WSL with Ubuntu distribution"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If you already have WSL Version 2 installed, make sure it's up to date by running ",(0,i.jsx)(n.code,{children:"wsl --update"})," in PowerShell"]}),"\n",(0,i.jsx)(n.li,{children:"Install the default Ubuntu distribution as directed."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://docs.docker.com/desktop/windows/wsl/",children:"Docker Desktop with WSL2 support"}),".","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Once installed, make sure Docker Desktop is running"}),"\n",(0,i.jsx)(n.li,{children:"If you already had Docker Desktop installed, make sure it's updated to the latest version."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-vscode",children:"VS Code"})," for Windows with WSL extension."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"geoprocessing-distribution",children:"Geoprocessing Distribution"}),"\n",(0,i.jsxs)(n.p,{children:["A version of the ",(0,i.jsx)(n.a,{href:"https://github.com/seasketch/docker-gp-workspace",children:"geoprocessing-workspace"})," Docker image has been packaged by the SeaSketch team for running in WSL. It's pre-configured with all dependencies. You can download, import, and run it right alongside the default Ubuntu distribution."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Open Powershell in Windows"}),"\n",(0,i.jsx)(n.li,{children:"Create a tmp directory"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"mkdir C:\\tmp\n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Download the most recent ",(0,i.jsx)(n.code,{children:"geoprocessing-workspace"})," zip file from the ",(0,i.jsx)(n.a,{href:"https://ucsb.box.com/s/k9477fqzzn0yel5kf5kj2y81tst09f4i",children:"SeaSketch Box folder"})," to this tmp directory and then unzip it."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Create a second directory to import the Geoprocessing tar image too, then import it:"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"mkdir C:\\WslDistributions\\Geoprocessing\nwsl --import Geoprocessing C:\\WslDistributions\\Geoprocessing\\ C:\\tmp\\geoprocessing-workspace_20230627\\geoprocessing-workspace_20230627_65bd30ba63a3.tar\n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Be sure to update the filename in the import command above to match the version you downloaded."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If import is started correctly, you will see the message ",(0,i.jsx)(n.code,{children:"Import in progress, this may take a few minutes..."}),". Once done it should say ",(0,i.jsx)(n.code,{children:"The operation completed successfully"}),". If it didn't import successfully, try restarting your system, WSL may not have been running properly."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Setup Terminal Profile"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"This will create a shortcut to start an instance of Geoprocessing in WSL."}),"\n",(0,i.jsx)(n.li,{children:"In PowerShell, click the down arrow in the tab bar, to the right of the (+) icon, then click Settings."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Terminal Profile",src:s(23817).A+"",title:"Terminal Profile",width:"870",height:"595"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Find the Profiles section in left sidebar -> click ",(0,i.jsx)(n.code,{children:"Add a new profile"})]}),"\n",(0,i.jsxs)(n.li,{children:["The, under ",(0,i.jsx)(n.code,{children:"Duplicate a profile"}),", click ",(0,i.jsx)(n.code,{children:"Ubuntu"}),", then ",(0,i.jsx)(n.code,{children:"Duplicate"})," button."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Profile Duplicate",src:s(51481).A+"",title:"Profile Duplicate",width:"1716",height:"913"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Change the name of the duplicated Ubuntu profiles to ",(0,i.jsx)(n.code,{children:"Geoprocessing"})]}),"\n",(0,i.jsxs)(n.li,{children:["Change the profiles Terminal command from ",(0,i.jsx)(n.code,{children:"C:\\WINDOWS\\system32\\wsl.exe -d Ubuntu"})," to ",(0,i.jsx)(n.code,{children:"C:\\WINDOWS\\system32\\wsl.exe -u vscode -d Geoprocessing"}),". This will ensure that Geoprocessing starts with the correct user, instead of root."]}),"\n",(0,i.jsx)(n.li,{children:"Save and exit your new profile"}),"\n",(0,i.jsxs)(n.li,{children:["The Terminal dropdown menu should now have a new ",(0,i.jsx)(n.code,{children:"Geoprocessing"})," choice. Click this to start an instance of the Geoprocessing Distribution. It will open a shell, logged in with the vscode user."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"In the Geoprocessing shell, setup the workspaces directory where you will create projects:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo mkdir /workspaces\nsudo chmod 777 /workspaces\ncd /workspaces\n"})}),"\n",(0,i.jsx)(n.p,{children:"Now open VSCode in your workspaces directory:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"code .\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Install recommended VSCode ",(0,i.jsx)(n.a,{href:"https://code.visualstudio.com/docs/editor/extension-marketplace",children:"extensions"})," when prompted. If not prompted, go to the ",(0,i.jsx)(n.code,{children:"Extensions"})," panel on the left side and install the following extensions"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Remote Development"}),"\n",(0,i.jsx)(n.li,{children:"Remote Explorer"}),"\n",(0,i.jsx)(n.li,{children:"Docker"}),"\n",(0,i.jsx)(n.li,{children:"Dev Containers"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Check to make sure you have access to your Windows filesystem:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"ls /mnt/c\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Follow the ",(0,i.jsx)(n.a,{href:"#final-configuration---all-install-options",children:"final configuration steps"})," below, then move on to creating a new project."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/geoprocessing/docs/next/upgrade#upgrade-windows-geoprocessing",children:"Upgrade"})," steps for the Geoprocessing Distribution are available."]}),"\n",(0,i.jsx)(n.h3,{id:"default-ubuntu-distribution",children:"Default Ubuntu Distribution"}),"\n",(0,i.jsxs)(n.p,{children:["Only follow these install steps if you intend to setup and use the default Ubuntu Distribution in WSL ",(0,i.jsx)(n.em,{children:"instead of"})," the pre-configured Geoprocessing Distribution (above)."]}),"\n",(0,i.jsxs)(n.p,{children:["Supported Ubuntu version: ",(0,i.jsx)(l,{})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Open Windows start menu -> start typing ",(0,i.jsx)(n.code,{children:"Ubuntu on Windows"})," -> Select ",(0,i.jsx)(n.code,{children:"Ubuntu on Windows"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"This will start Ubuntu virtual machine and open a bash shell in your home directory."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"In Ubuntu shell:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://stackoverflow.com/questions/63866813/what-is-the-proper-way-of-using-jdk-on-wsl2-on-windows-10",children:"Java runtime"})," in Ubuntu (required by AWS CDK library)"]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-git",children:"Git in Ubuntu and Windows"})]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-vscode",children:"VS Code"})," in Windows and setup with WSL2.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Install recommended ",(0,i.jsx)(n.a,{href:"https://code.visualstudio.com/docs/editor/extension-marketplace",children:"extensions"})," when prompted. If not prompted, go to the ",(0,i.jsx)(n.code,{children:"Extensions"})," panel on the left side and install the extensions named in ",(0,i.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/templates/project/.vscode/extensions.json",children:"this file"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node JS"})," >= ",(0,i.jsx)(o,{})," in Ubuntu","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/nvm-sh/nvm",children:"nvm"})," is great for this","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"First, install nvm. May ask you to first install XCode developer tools which is available through the App Store or follow the instructions provided."}),"\n",(0,i.jsxs)(n.li,{children:["Then ",(0,i.jsxs)("code",{children:["nvm install v",(0,i.jsx)(o,{})]}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Then open your Terminal app of choice and run ",(0,i.jsx)(n.code,{children:"node -v"})," to check your node version"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Install latest ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/",children:"NPM"})," package manager after installing node.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"npm --version"})," to check"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"npm install -g latest"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"ubuntu-direct-install",children:"Ubuntu Direct Install"}),"\n",(0,i.jsxs)(n.p,{children:["Requirement: Ubuntu ",(0,i.jsx)(l,{})," or newer"]}),"\n",(0,i.jsx)(n.p,{children:"Setup is for a physical machine running the Ubuntu operating system."}),"\n",(0,i.jsxs)(n.p,{children:["From a Ubuntu terminal with root access, simply follow the steps above for ",(0,i.jsx)(n.a,{href:"#default-ubuntu-distribution",children:"default ubuntu installation"})]}),"\n",(0,i.jsx)(n.h2,{id:"final-configuration---all-install-options",children:"Final Configuration - all install options"}),"\n",(0,i.jsxs)(n.p,{children:["The last step, regardless of install option, is to set the ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git?platform=mac",children:"username"})," and email address git will associate with your commits."]}),"\n",(0,i.jsx)(n.p,{children:"You can set these per repository, or globally for all repositories on your system (and override as needed). Here's the commands to set globally for your environment."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'git config --global user.name "Your Name"\ngit config --global user.email "yourusername@youremail.com"\n'})}),"\n",(0,i.jsx)(n.p,{children:"Now verify it was set:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# If you set global - all repos\ncat ~/.gitconfig\n\n# If you set local - current repo\ncat .git/config\n"})}),"\n",(0,i.jsx)(n.p,{children:"Your environment is now ready for a project"})]})}function p(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},17383:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/ManageDevcontainers-27e4bf8f272ef4623eb9840cf4782470.jpg"},7098:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/devcontainer-blue-1983a66263059c6f8c7df8e0a75c9075.jpg"},51481:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/terminal-duplicate-2d64bf1f69e69c27f39cbf4a661738db.jpg"},23817:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/terminal-profile-7358a05fa250813ee995b7841a3ed6fa.jpg"},28453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>r});var i=s(96540);const t={},o=i.createContext(t);function l(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/962e3ba3.75cb91f5.js b/assets/js/962e3ba3.75cb91f5.js
new file mode 100644
index 0000000000..106b0068f2
--- /dev/null
+++ b/assets/js/962e3ba3.75cb91f5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[95886],{22155:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>r,metadata:()=>d,toc:()=>h});var i=s(74848),t=s(28453);s(96540);function o(){return(0,i.jsx)("span",{children:"20.12"})}function l(){return(0,i.jsx)("span",{children:"22.04 Jammy"})}const r={},c="System Setup",d={id:"tutorials/Tutorials",title:"System Setup",description:"These tutorials will walk you through creating and deploying a basic seasketch geoprocessing project. You should already have a basic working knowledge of your computer, its operating system, shell environment (command line), and web application development using NodeJS and React. Learn more about the skills required.",source:"@site/docs/tutorials/Tutorials.md",sourceDirName:"tutorials",slug:"/tutorials/",permalink:"/geoprocessing/docs/next/tutorials/",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/tutorials/Tutorials.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Accuracy/Limitations",permalink:"/geoprocessing/docs/next/EdgesAndLimits"},next:{title:"Create Sample Project",permalink:"/geoprocessing/docs/next/tutorials/sampleproject"}},a={},h=[{value:"Virtual Install With Docker Desktop",id:"virtual-install-with-docker-desktop",level:2},{value:"MacOS Direct Install",id:"macos-direct-install",level:2},{value:"Windows WSL Install",id:"windows-wsl-install",level:2},{value:"Geoprocessing Distribution",id:"geoprocessing-distribution",level:3},{value:"Default Ubuntu Distribution",id:"default-ubuntu-distribution",level:3},{value:"Ubuntu Direct Install",id:"ubuntu-direct-install",level:2},{value:"Final Configuration - all install options",id:"final-configuration---all-install-options",level:2}];function u(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"system-setup",children:"System Setup"})}),"\n","\n",(0,i.jsxs)(n.p,{children:["These tutorials will walk you through creating and deploying a basic seasketch ",(0,i.jsx)(n.code,{children:"geoprocessing"})," project. You should already have a basic working knowledge of your computer, its operating system, shell environment (command line), and web application development using NodeJS and React. Learn more about the ",(0,i.jsx)(n.a,{href:"/geoprocessing/docs/next/skills",children:"skills"})," required."]}),"\n",(0,i.jsx)(n.p,{children:"Setup options:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["MacOS","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#virtual-install-with-docker-desktop",children:"Virtual install with Docker Desktop"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#macos-direct-install",children:"Direct Install on MacOS"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Windows","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#windows-wsl-install",children:"Virtual install with Windows Subsystem for Linux (WSL)"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#virtual-install-with-docker-desktop",children:"Virtual install with Docker Desktop"})}),"\n",(0,i.jsx)(n.li,{children:"Direct Install on Windows not supported"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Ubuntu Linux","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#virtual-install-with-docker-desktop",children:"Virtual install with Docker Desktop"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#ubuntu-direct-install",children:"Direct Install on Ubuntu"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"../codespaces/",children:"Github codespaces"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Possible but not well tested"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"A virtual environment is the recommended way for beginners to develop geoprocessing projects. Docker Desktop is the recommended methods on MacOS and Linux. WSL is the recommended method on Windows."}),"\n",(0,i.jsx)(n.h2,{id:"virtual-install-with-docker-desktop",children:"Virtual Install With Docker Desktop"}),"\n",(0,i.jsxs)(n.p,{children:["Docker Desktop allows you to run containerized applications that are isolated from your host operating system. It's similar but different from a virtual machine. SeaSketch publishes the ",(0,i.jsx)(n.a,{href:"https://github.com/seasketch/docker-gp-workspace",children:"docker-gp-workspace"})," container image that is a fully-configured environment for developing geoprocessing projects. It allows you to get up and running quickly and has persistent storage. The downside is that code runs a bit slower in a container than directly on your system."]}),"\n",(0,i.jsx)(n.p,{children:"Install steps for all operating systems:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://www.docker.com/products/docker-desktop/",children:"Docker Desktop"})," on your host operating system and make sure it's running.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If you have a Mac, choose either Apple processor or Intel processor as appropriate. If you don't know, click the apple icon in the top left and select ",(0,i.jsx)(n.code,{children:"About This Mac"})," and look for ",(0,i.jsx)(n.code,{children:"Processor"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://code.visualstudio.com",children:"VS Code"})," on your host operating system and open it."]}),"\n",(0,i.jsxs)(n.li,{children:["Clone the geoprocessing-devcontainer Github repository to your host operating system, and open that folder in VSCode.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["From VSCode, click ",(0,i.jsx)(n.code,{children:"Open Folder"})," button or ",(0,i.jsx)(n.code,{children:"File -> Open Folder"})," and create or choose a folder where you keep source code. A folder called ",(0,i.jsx)(n.code,{children:"src"})," or ",(0,i.jsx)(n.code,{children:"code"})," in your users home directory is reasonable. Then click ",(0,i.jsx)(n.code,{children:"Select Folder"})," to finish."]}),"\n",(0,i.jsxs)(n.li,{children:["Press ",(0,i.jsx)(n.code,{children:"Ctrl-J"})," or ",(0,i.jsx)(n.code,{children:"Cmd-backtick"})," to open a terminal. The current directory of the terminal will be your workspace folder."]}),"\n",(0,i.jsxs)(n.li,{children:["Enter the command to clone the geoprocessing-devcontainer repository to your workspace.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"git clone https://github.com/seasketch/geoprocessing-devcontainer"})}),"\n",(0,i.jsxs)(n.li,{children:["If you had previously cloned this repository then update it now with ",(0,i.jsx)(n.code,{children:"cd geoprocessing-devcontainer && git pull"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.code,{children:"Open Folder"})," button or ",(0,i.jsx)(n.code,{children:"File -> Open Folder"})," and open the repo folder you just cloned."]}),"\n",(0,i.jsxs)(n.li,{children:["Press ",(0,i.jsx)(n.code,{children:"Ctrl-J"})," or ",(0,i.jsx)(n.code,{children:"Cmd-backtick"})," to open a terminal again."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Install required VSCode extensions. You may be prompted to do this, otherwise go to the ",(0,i.jsx)(n.code,{children:"Extension"})," panel found on the left side of the VSCode window. Then install the following extensions:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Remote Development"}),"\n",(0,i.jsx)(n.li,{children:"Remote Explorer"}),"\n",(0,i.jsx)(n.li,{children:"Docker"}),"\n",(0,i.jsx)(n.li,{children:"Dev Containers"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Once you have added the ",(0,i.jsx)(n.code,{children:"Dev Containers"}),' extension you should be prompted to "Reopen folder to develop in a container". ',(0,i.jsx)("b",{children:(0,i.jsx)(n.em,{children:"Do not do this yet."})})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["In the file ",(0,i.jsx)(n.code,{children:"Explorer"})," panel, open the ",(0,i.jsx)(n.code,{children:".devcontainer"})," folder.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["This top-level folder contains the configuration for the ",(0,i.jsx)(n.code,{children:"stable"})," geoprocessing devcontainer you will use."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Make a copy of ",(0,i.jsx)(n.code,{children:".devcontainer/.env.template"})," file and name it ",(0,i.jsx)(n.code,{children:".env"}),".","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["You don't need to add anything yet to your .env file, but it is required that it exists in the ",(0,i.jsx)(n.code,{children:".devcontainer"})," folder."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Now start the devcontainer:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Ctrl-Shift-P"})," or ",(0,i.jsx)(n.code,{children:"Cmd-Shift-P"})," to open the VSCode command palette"]}),"\n",(0,i.jsx)(n.li,{children:"type \u201cReopen in container\u201d and select the Dev Container command to do so."}),"\n",(0,i.jsxs)(n.li,{children:["Select the ",(0,i.jsx)(n.code,{children:"Geoprocessing Local Stable"})," environment."]}),"\n",(0,i.jsxs)(n.li,{children:["VSCode will pull the latest ",(0,i.jsx)(n.code,{children:"geoprocessing-workspace"})," docker image, create a container with it, and start a remote code experience inside the container."]}),"\n",(0,i.jsxs)(n.li,{children:["Notice the bottom left blue icon in your vscode window. It may say ",(0,i.jsx)(n.code,{children:"Opening remote connection"})," and eventually will say ",(0,i.jsx)(n.code,{children:"Dev Container: Geoprocessing"}),". This is telling you that this VSCode window is running in a devcontainer environment."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Manage Devcontainers",src:s(7098).A+"",title:"Manage Devcontainers",width:"591",height:"198"})}),"\n",(0,i.jsx)(n.p,{children:"You now have a devcontainer, ready to create a project in."}),"\n",(0,i.jsx)(n.p,{children:"To exit your devcontainer:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Click the blue icon in the bottom left, and then ",(0,i.jsx)(n.code,{children:"Reopen locally"}),". This will bring VSCode back out of the devcontainer session."]}),"\n",(0,i.jsxs)(n.li,{children:["You can also type ",(0,i.jsx)(n.code,{children:"Ctrl-Shift-P"})," or ",(0,i.jsx)(n.code,{children:"Cmd-Shift-P"})," and select ",(0,i.jsx)(n.code,{children:"Dev Containers: Reopen folder locally"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Manage Devcontainers",src:s(17383).A+"",title:"Manage Devcontainers",width:"582",height:"962"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["To update to the latest ",(0,i.jsx)(n.code,{children:"geoprocessing-workspace"})," Docker image at any point you simply use a different VSCode command to start it:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Ctrl-Shift-P"})," or ",(0,i.jsx)(n.code,{children:"Cmd-Shift-P"})," to open the VSCode command palette"]}),"\n",(0,i.jsx)(n.li,{children:'type "Dev Containers: Rebuild Without Cache and Reopen In Container"'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["See devcontainer advanced usage ",(0,i.jsx)(n.a,{href:"/geoprocessing/docs/next/devcontainer/",children:"guide"})," to learn more or the ",(0,i.jsx)(n.a,{href:"/geoprocessing/docs/next/upgrade",children:"upgrade"})," tutorial"]}),"\n",(0,i.jsx)(n.h2,{id:"macos-direct-install",children:"MacOS Direct Install"}),"\n",(0,i.jsx)(n.p,{children:"Requirement: 11.6.8 Big Sur or newer"}),"\n",(0,i.jsx)(n.p,{children:"Install all software dependencies directly on your Apple machine running the MacOS operating system:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Install ",(0,i.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node JS"})," >= ",(0,i.jsx)(o,{})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/nvm-sh/nvm",children:"nvm"})," is great for this","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"First, install nvm. May ask you to first install XCode developer tools which is available through the App Store or follow the instructions provided."}),"\n",(0,i.jsxs)(n.li,{children:["Then ",(0,i.jsxs)("code",{children:["nvm install v",(0,i.jsx)(o,{})]}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Then open your Terminal app of choice and run ",(0,i.jsx)(n.code,{children:"node -v"})," to check your node version"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Install latest ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/",children:"NPM"})," package manager after installing node."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"npm --version"})," to check"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"npm install -g latest"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Install ",(0,i.jsx)(n.a,{href:"https://code.visualstudio.com",children:"VS Code"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Install recommended ",(0,i.jsx)(n.a,{href:"https://code.visualstudio.com/docs/editor/extension-marketplace",children:"extensions"})," when prompted. If not prompted, go to the ",(0,i.jsx)(n.code,{children:"Extensions"})," panel on the left side and install the extensions named in ",(0,i.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/templates/project/.vscode/extensions.json",children:"this file"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Install ",(0,i.jsx)(n.a,{href:"https://gdal.org/",children:"GDAL"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["First install ",(0,i.jsx)(n.a,{href:"https://brew.sh/",children:"homebrew"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"brew install gdal"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Install ",(0,i.jsx)(n.a,{href:"https://www.java.com/en/download/",children:"Java runtime"})," for MacOS (required for testing with Amazon DynamoDb Local)"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Create a free Github account if you don't have one already"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"windows-wsl-install",children:"Windows WSL Install"}),"\n",(0,i.jsx)(n.p,{children:"Requirement: Windows 11 or newer"}),"\n",(0,i.jsxs)(n.p,{children:["Why use Windows Subsystem for Linux (WSL) to develop geoprocessing projects instead of using the ",(0,i.jsx)(n.a,{href:"#virtual-install-with-docker-desktop",children:"Docker Desktop"}),"? Because WSL is faster than Docker Desktop alone. And because WSL provides a built-in filesystem bridge allowing you to access all your Windows drives in the Ubuntu container (via ",(0,i.jsx)(n.code,{children:"/mnt"})," path)."]}),"\n",(0,i.jsx)(n.p,{children:"To get started in Windows:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4",children:"Powershell for Windows"})]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/install",children:"WSL with Ubuntu distribution"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If you already have WSL Version 2 installed, make sure it's up to date by running ",(0,i.jsx)(n.code,{children:"wsl --update"})," in PowerShell"]}),"\n",(0,i.jsx)(n.li,{children:"Install the default Ubuntu distribution as directed."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://docs.docker.com/desktop/windows/wsl/",children:"Docker Desktop with WSL2 support"}),".","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Once installed, make sure Docker Desktop is running"}),"\n",(0,i.jsx)(n.li,{children:"If you already had Docker Desktop installed, make sure it's updated to the latest version."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-vscode",children:"VS Code"})," for Windows with WSL extension."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"geoprocessing-distribution",children:"Geoprocessing Distribution"}),"\n",(0,i.jsxs)(n.p,{children:["A version of the ",(0,i.jsx)(n.a,{href:"https://github.com/seasketch/docker-gp-workspace",children:"geoprocessing-workspace"})," Docker image has been packaged by the SeaSketch team for running in WSL. It's pre-configured with all dependencies. You can download, import, and run it right alongside the default Ubuntu distribution."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Open Powershell in Windows"}),"\n",(0,i.jsx)(n.li,{children:"Create a tmp directory"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"mkdir C:\\tmp\n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Download the most recent ",(0,i.jsx)(n.code,{children:"geoprocessing-workspace"})," zip file from the ",(0,i.jsx)(n.a,{href:"https://ucsb.box.com/s/k9477fqzzn0yel5kf5kj2y81tst09f4i",children:"SeaSketch Box folder"})," to this tmp directory and then unzip it."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Create a second directory to import the Geoprocessing tar image too, then import it:"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"mkdir C:\\WslDistributions\\Geoprocessing\nwsl --import Geoprocessing C:\\WslDistributions\\Geoprocessing\\ C:\\tmp\\geoprocessing-workspace_20230627\\geoprocessing-workspace_20230627_65bd30ba63a3.tar\n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Be sure to update the filename in the import command above to match the version you downloaded."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If import is started correctly, you will see the message ",(0,i.jsx)(n.code,{children:"Import in progress, this may take a few minutes..."}),". Once done it should say ",(0,i.jsx)(n.code,{children:"The operation completed successfully"}),". If it didn't import successfully, try restarting your system, WSL may not have been running properly."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Setup Terminal Profile"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"This will create a shortcut to start an instance of Geoprocessing in WSL."}),"\n",(0,i.jsx)(n.li,{children:"In PowerShell, click the down arrow in the tab bar, to the right of the (+) icon, then click Settings."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Terminal Profile",src:s(23817).A+"",title:"Terminal Profile",width:"870",height:"595"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Find the Profiles section in left sidebar -> click ",(0,i.jsx)(n.code,{children:"Add a new profile"})]}),"\n",(0,i.jsxs)(n.li,{children:["The, under ",(0,i.jsx)(n.code,{children:"Duplicate a profile"}),", click ",(0,i.jsx)(n.code,{children:"Ubuntu"}),", then ",(0,i.jsx)(n.code,{children:"Duplicate"})," button."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Profile Duplicate",src:s(51481).A+"",title:"Profile Duplicate",width:"1716",height:"913"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Change the name of the duplicated Ubuntu profiles to ",(0,i.jsx)(n.code,{children:"Geoprocessing"})]}),"\n",(0,i.jsxs)(n.li,{children:["Change the profiles Terminal command from ",(0,i.jsx)(n.code,{children:"C:\\WINDOWS\\system32\\wsl.exe -d Ubuntu"})," to ",(0,i.jsx)(n.code,{children:"C:\\WINDOWS\\system32\\wsl.exe -u vscode -d Geoprocessing"}),". This will ensure that Geoprocessing starts with the correct user, instead of root."]}),"\n",(0,i.jsx)(n.li,{children:"Save and exit your new profile"}),"\n",(0,i.jsxs)(n.li,{children:["The Terminal dropdown menu should now have a new ",(0,i.jsx)(n.code,{children:"Geoprocessing"})," choice. Click this to start an instance of the Geoprocessing Distribution. It will open a shell, logged in with the vscode user."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"In the Geoprocessing shell, setup the workspaces directory where you will create projects:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo mkdir /workspaces\nsudo chmod 777 /workspaces\ncd /workspaces\n"})}),"\n",(0,i.jsx)(n.p,{children:"Now open VSCode in your workspaces directory:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"code .\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Install recommended VSCode ",(0,i.jsx)(n.a,{href:"https://code.visualstudio.com/docs/editor/extension-marketplace",children:"extensions"})," when prompted. If not prompted, go to the ",(0,i.jsx)(n.code,{children:"Extensions"})," panel on the left side and install the following extensions"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Remote Development"}),"\n",(0,i.jsx)(n.li,{children:"Remote Explorer"}),"\n",(0,i.jsx)(n.li,{children:"Docker"}),"\n",(0,i.jsx)(n.li,{children:"Dev Containers"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Check to make sure you have access to your Windows filesystem:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"ls /mnt/c\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Follow the ",(0,i.jsx)(n.a,{href:"#final-configuration---all-install-options",children:"final configuration steps"})," below, then move on to creating a new project."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/geoprocessing/docs/next/upgrade#upgrade-windows-geoprocessing",children:"Upgrade"})," steps for the Geoprocessing Distribution are available."]}),"\n",(0,i.jsx)(n.h3,{id:"default-ubuntu-distribution",children:"Default Ubuntu Distribution"}),"\n",(0,i.jsxs)(n.p,{children:["Only follow these install steps if you intend to setup and use the default Ubuntu Distribution in WSL ",(0,i.jsx)(n.em,{children:"instead of"})," the pre-configured Geoprocessing Distribution (above)."]}),"\n",(0,i.jsxs)(n.p,{children:["Supported Ubuntu version: ",(0,i.jsx)(l,{})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Open Windows start menu -> start typing ",(0,i.jsx)(n.code,{children:"Ubuntu on Windows"})," -> Select ",(0,i.jsx)(n.code,{children:"Ubuntu on Windows"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"This will start Ubuntu virtual machine and open a bash shell in your home directory."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"In Ubuntu shell:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://stackoverflow.com/questions/63866813/what-is-the-proper-way-of-using-jdk-on-wsl2-on-windows-10",children:"Java runtime"})," in Ubuntu (required by AWS CDK library)"]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-git",children:"Git in Ubuntu and Windows"})]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-vscode",children:"VS Code"})," in Windows and setup with WSL2.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Install recommended ",(0,i.jsx)(n.a,{href:"https://code.visualstudio.com/docs/editor/extension-marketplace",children:"extensions"})," when prompted. If not prompted, go to the ",(0,i.jsx)(n.code,{children:"Extensions"})," panel on the left side and install the extensions named in ",(0,i.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/templates/project/.vscode/extensions.json",children:"this file"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node JS"})," >= ",(0,i.jsx)(o,{})," in Ubuntu","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/nvm-sh/nvm",children:"nvm"})," is great for this","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"First, install nvm. May ask you to first install XCode developer tools which is available through the App Store or follow the instructions provided."}),"\n",(0,i.jsxs)(n.li,{children:["Then ",(0,i.jsxs)("code",{children:["nvm install v",(0,i.jsx)(o,{})]}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Then open your Terminal app of choice and run ",(0,i.jsx)(n.code,{children:"node -v"})," to check your node version"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Install latest ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/",children:"NPM"})," package manager after installing node.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"npm --version"})," to check"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"npm install -g latest"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"ubuntu-direct-install",children:"Ubuntu Direct Install"}),"\n",(0,i.jsxs)(n.p,{children:["Requirement: Ubuntu ",(0,i.jsx)(l,{})," or newer"]}),"\n",(0,i.jsx)(n.p,{children:"Setup is for a physical machine running the Ubuntu operating system."}),"\n",(0,i.jsxs)(n.p,{children:["From a Ubuntu terminal with root access, simply follow the steps above for ",(0,i.jsx)(n.a,{href:"#default-ubuntu-distribution",children:"default ubuntu installation"})]}),"\n",(0,i.jsx)(n.h2,{id:"final-configuration---all-install-options",children:"Final Configuration - all install options"}),"\n",(0,i.jsxs)(n.p,{children:["The last step, regardless of install option, is to set the ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git?platform=mac",children:"username"})," and email address git will associate with your commits."]}),"\n",(0,i.jsx)(n.p,{children:"You can set these per repository, or globally for all repositories on your system (and override as needed). Here's the commands to set globally for your environment."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'git config --global user.name "Your Name"\ngit config --global user.email "yourusername@youremail.com"\n'})}),"\n",(0,i.jsx)(n.p,{children:"Now verify it was set:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# If you set global - all repos\ncat ~/.gitconfig\n\n# If you set local - current repo\ncat .git/config\n"})}),"\n",(0,i.jsx)(n.p,{children:"Your environment is now ready for a project"})]})}function p(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},17383:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/ManageDevcontainers-27e4bf8f272ef4623eb9840cf4782470.jpg"},7098:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/devcontainer-blue-1983a66263059c6f8c7df8e0a75c9075.jpg"},51481:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/terminal-duplicate-2d64bf1f69e69c27f39cbf4a661738db.jpg"},23817:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/terminal-profile-7358a05fa250813ee995b7841a3ed6fa.jpg"},28453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>r});var i=s(96540);const t={},o=i.createContext(t);function l(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/96c08df1.8a1e3ffd.js b/assets/js/96c08df1.8a1e3ffd.js
deleted file mode 100644
index a226c66a3d..0000000000
--- a/assets/js/96c08df1.8a1e3ffd.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[92388],{15943:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>t,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var r=n(74848),o=n(28453);const i={},t="clip()",c={id:"api/geoprocessing/functions/clip",title:"clip()",description:"Performs clip operation on features",source:"@site/docs/api/geoprocessing/functions/clip.md",sourceDirName:"api/geoprocessing/functions",slug:"/api/geoprocessing/functions/clip",permalink:"/geoprocessing/docs/next/api/geoprocessing/functions/clip",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/geoprocessing/functions/clip.md",tags:[],version:"current",frontMatter:{}},d={},l=[{value:"Type Parameters",id:"type-parameters",level:2},{value:"Parameters",id:"parameters",level:2},{value:"Returns",id:"returns",level:2},{value:"Todo",id:"todo",level:2}];function a(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"clip",children:"clip()"})}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-ts",children:"function clip(\n features, \n operation, \n options): Feature | null\n"})}),"\n",(0,r.jsx)(s.p,{children:"Performs clip operation on features"}),"\n",(0,r.jsx)(s.h2,{id:"type-parameters",children:"Type Parameters"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Type Parameter"}),(0,r.jsx)(s.th,{children:"Default type"})]})}),(0,r.jsx)(s.tbody,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"P"})," ",(0,r.jsx)(s.em,{children:"extends"})," ",(0,r.jsx)(s.code,{children:"undefined"})," | ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(s.code,{children:"GeoJsonProperties"})})]}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(s.code,{children:"GeoJsonProperties"})})})]})})]}),"\n",(0,r.jsx)(s.h2,{id:"parameters",children:"Parameters"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Parameter"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"features"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureCollection",children:(0,r.jsx)(s.code,{children:"FeatureCollection"})}),"<",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,r.jsx)(s.code,{children:"Polygon"})})," | ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,r.jsx)(s.code,{children:"MultiPolygon"})}),", ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(s.code,{children:"GeoJsonProperties"})}),">"]}),(0,r.jsx)(s.td,{children:"FeatureCollection of Polygons or MultiPolygons. First feature is the subject, the rest are the clippers"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"operation"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:'"union"'})," | ",(0,r.jsx)(s.code,{children:'"intersection"'})," | ",(0,r.jsx)(s.code,{children:'"xor"'})," | ",(0,r.jsx)(s.code,{children:'"difference"'})]}),(0,r.jsx)(s.td,{children:'one of "union", "intersection", "xor", "difference"'})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"options"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"object"})}),(0,r.jsx)(s.td,{children:"optional properties to set on the resulting feature"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"options.properties"}),"?"]}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"P"})}),(0,r.jsx)(s.td,{children:"-"})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"returns",children:"Returns"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,r.jsx)(s.code,{children:"Feature"})}),"<",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,r.jsx)(s.code,{children:"Polygon"})})," | ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,r.jsx)(s.code,{children:"MultiPolygon"})}),"> | ",(0,r.jsx)(s.code,{children:"null"})]}),"\n",(0,r.jsx)(s.p,{children:"clipped Feature of Polygon or MultiPolygon"}),"\n",(0,r.jsx)(s.h2,{id:"todo",children:"Todo"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"migrate to use turf modules instead, now that added support for operating against an array of features"}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>t,x:()=>c});var r=n(96540);const o={},i=r.createContext(o);function t(e){const s=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(i.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/96c08df1.b5dc0bba.js b/assets/js/96c08df1.b5dc0bba.js
new file mode 100644
index 0000000000..c657d02e8d
--- /dev/null
+++ b/assets/js/96c08df1.b5dc0bba.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[92388],{15943:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>t,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var r=n(74848),o=n(28453);const i={},t="clip()",c={id:"api/geoprocessing/functions/clip",title:"clip()",description:"Performs one of 4 different clip operations on features",source:"@site/docs/api/geoprocessing/functions/clip.md",sourceDirName:"api/geoprocessing/functions",slug:"/api/geoprocessing/functions/clip",permalink:"/geoprocessing/docs/next/api/geoprocessing/functions/clip",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/geoprocessing/functions/clip.md",tags:[],version:"current",frontMatter:{}},d={},l=[{value:"Type Parameters",id:"type-parameters",level:2},{value:"Parameters",id:"parameters",level:2},{value:"Returns",id:"returns",level:2}];function a(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"clip",children:"clip()"})}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-ts",children:"function clip(\n features, \n operation, \n options): Feature | null\n"})}),"\n",(0,r.jsx)(s.p,{children:"Performs one of 4 different clip operations on features"}),"\n",(0,r.jsx)(s.h2,{id:"type-parameters",children:"Type Parameters"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Type Parameter"}),(0,r.jsx)(s.th,{children:"Default type"})]})}),(0,r.jsx)(s.tbody,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"P"})," ",(0,r.jsx)(s.em,{children:"extends"})," ",(0,r.jsx)(s.code,{children:"undefined"})," | ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(s.code,{children:"GeoJsonProperties"})})]}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(s.code,{children:"GeoJsonProperties"})})})]})})]}),"\n",(0,r.jsx)(s.h2,{id:"parameters",children:"Parameters"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Parameter"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"features"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureCollection",children:(0,r.jsx)(s.code,{children:"FeatureCollection"})}),"<",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,r.jsx)(s.code,{children:"Polygon"})})," | ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,r.jsx)(s.code,{children:"MultiPolygon"})}),", ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(s.code,{children:"GeoJsonProperties"})}),">"]}),(0,r.jsx)(s.td,{children:"FeatureCollection of Polygons or MultiPolygons. First feature is the subject, the rest are the clippers"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"operation"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:'"intersection"'})," | ",(0,r.jsx)(s.code,{children:'"difference"'})," | ",(0,r.jsx)(s.code,{children:'"xor"'})," | ",(0,r.jsx)(s.code,{children:'"union"'})]}),(0,r.jsx)(s.td,{children:'one of "union", "intersection", "xor", "difference"'})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"options"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"object"})}),(0,r.jsx)(s.td,{children:"optional properties to set on the resulting feature"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"options.properties"}),"?"]}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"P"})}),(0,r.jsx)(s.td,{children:"-"})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"returns",children:"Returns"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,r.jsx)(s.code,{children:"Feature"})}),"<",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,r.jsx)(s.code,{children:"Polygon"})})," | ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,r.jsx)(s.code,{children:"MultiPolygon"})}),"> | ",(0,r.jsx)(s.code,{children:"null"})]}),"\n",(0,r.jsx)(s.p,{children:"clipped Feature of Polygon or MultiPolygon"})]})}function h(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>t,x:()=>c});var r=n(96540);const o={},i=r.createContext(o);function t(e){const s=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(i.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/96c285ca.edee8a6b.js b/assets/js/96c285ca.edee8a6b.js
new file mode 100644
index 0000000000..6f40bd8099
--- /dev/null
+++ b/assets/js/96c285ca.edee8a6b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[94992],{29085:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var t=n(74848),r=n(28453);const i={},c="intersectSum()",o={id:"api/geoprocessing/functions/intersectSum",title:"intersectSum()",description:"Sums the value of intersecting features. No support for partial, counts the whole feature",source:"@site/docs/api/geoprocessing/functions/intersectSum.md",sourceDirName:"api/geoprocessing/functions",slug:"/api/geoprocessing/functions/intersectSum",permalink:"/geoprocessing/docs/next/api/geoprocessing/functions/intersectSum",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/geoprocessing/functions/intersectSum.md",tags:[],version:"current",frontMatter:{}},a={},d=[{value:"Parameters",id:"parameters",level:2},{value:"Returns",id:"returns",level:2},{value:"indices",id:"indices",level:3},{value:"value",id:"value",level:3}];function l(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"intersectsum",children:"intersectSum()"})}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-ts",children:"function intersectSum(\n featureA, \n featuresB, \n sumProperty?): object\n"})}),"\n",(0,t.jsx)(s.p,{children:"Sums the value of intersecting features. No support for partial, counts the whole feature"}),"\n",(0,t.jsx)(s.h2,{id:"parameters",children:"Parameters"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Parameter"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Description"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"featureA"})}),(0,t.jsxs)(s.td,{children:[(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,t.jsx)(s.code,{children:"Feature"})}),"<",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,t.jsx)(s.code,{children:"Polygon"})})," | ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,t.jsx)(s.code,{children:"MultiPolygon"})}),", ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,t.jsx)(s.code,{children:"GeoJsonProperties"})}),">"]}),(0,t.jsx)(s.td,{children:"single feature to intersect with featuresB"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"featuresB"})}),(0,t.jsxs)(s.td,{children:[(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,t.jsx)(s.code,{children:"Feature"})}),"<",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,t.jsx)(s.code,{children:"Polygon"})})," | ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,t.jsx)(s.code,{children:"MultiPolygon"})}),", ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,t.jsx)(s.code,{children:"GeoJsonProperties"})}),">[]"]}),(0,t.jsx)(s.td,{children:"array of features"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsxs)(s.td,{children:[(0,t.jsx)(s.code,{children:"sumProperty"}),"?"]}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:"Property in featuresB with value to sum, if not defined each feature will count as 1"})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"returns",children:"Returns"}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.code,{children:"object"})}),"\n",(0,t.jsx)(s.p,{children:"Sum of features/feature property which overlap with the sketch, and a list of\nindices for features that overlap with the sketch to be used in calculating total sum of\nthe sketch collection"}),"\n",(0,t.jsx)(s.h3,{id:"indices",children:"indices"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-ts",children:"indices: number[];\n"})}),"\n",(0,t.jsx)(s.h3,{id:"value",children:"value"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-ts",children:"value: number = sketchValue;\n"})})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>c,x:()=>o});var t=n(96540);const r={},i=t.createContext(r);function c(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/97aced89.a4c68a1e.js b/assets/js/97aced89.a4c68a1e.js
new file mode 100644
index 0000000000..1c613c121b
--- /dev/null
+++ b/assets/js/97aced89.a4c68a1e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93953],{80733:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var r=n(74848),t=n(28453);const o={},i="intersectInChunks()",c={id:"api/geoprocessing/functions/intersectInChunks",title:"intersectInChunks()",description:"Calculates area overlap between a feature A and a feature array B.",source:"@site/docs/api/geoprocessing/functions/intersectInChunks.md",sourceDirName:"api/geoprocessing/functions",slug:"/api/geoprocessing/functions/intersectInChunks",permalink:"/geoprocessing/docs/next/api/geoprocessing/functions/intersectInChunks",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/geoprocessing/functions/intersectInChunks.md",tags:[],version:"current",frontMatter:{}},a={},d=[{value:"Parameters",id:"parameters",level:2},{value:"Returns",id:"returns",level:2}];function l(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"intersectinchunks",children:"intersectInChunks()"})}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-ts",children:"function intersectInChunks(\n featureA, \n featuresB, \n chunkSize): Feature[]\n"})}),"\n",(0,r.jsx)(s.p,{children:"Calculates area overlap between a feature A and a feature array B.\nIntersection is done in chunks on featuresB to avoid errors due to too many features"}),"\n",(0,r.jsx)(s.h2,{id:"parameters",children:"Parameters"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Parameter"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"featureA"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,r.jsx)(s.code,{children:"Feature"})}),"<",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,r.jsx)(s.code,{children:"Polygon"})})," | ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,r.jsx)(s.code,{children:"MultiPolygon"})}),", ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(s.code,{children:"GeoJsonProperties"})}),">"]}),(0,r.jsx)(s.td,{children:"single feature to intersect with featuresB"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"featuresB"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,r.jsx)(s.code,{children:"Feature"})}),"<",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,r.jsx)(s.code,{children:"Polygon"})})," | ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,r.jsx)(s.code,{children:"MultiPolygon"})}),", ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(s.code,{children:"GeoJsonProperties"})}),">[]"]}),(0,r.jsx)(s.td,{children:"array of features"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"chunkSize"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"number"})}),(0,r.jsx)(s.td,{children:"Size of array to split featuresB into, avoids intersect failure due to large array)"})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"returns",children:"Returns"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,r.jsx)(s.code,{children:"Feature"})}),"<",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,r.jsx)(s.code,{children:"Polygon"})})," | ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,r.jsx)(s.code,{children:"MultiPolygon"})}),", ",(0,r.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,r.jsx)(s.code,{children:"GeoJsonProperties"})}),">[]"]}),"\n",(0,r.jsx)(s.p,{children:"intersection of featureA with featuresB"})]})}function h(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>c});var r=n(96540);const t={},o=r.createContext(t);function i(e){const s=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(o.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/a74d2383.bee93147.js b/assets/js/a74d2383.d59be70f.js
similarity index 90%
rename from assets/js/a74d2383.bee93147.js
rename to assets/js/a74d2383.d59be70f.js
index a79c74d60e..fd7d0d88dc 100644
--- a/assets/js/a74d2383.bee93147.js
+++ b/assets/js/a74d2383.d59be70f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21241],{3619:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>a,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var n=s(74848),o=s(28453);const t={},i="overlapSubarea()",c={id:"api/geoprocessing/functions/overlapSubarea",title:"~~overlapSubarea()~~",description:"Returns area stats for sketch input after performing overlay operation against a subarea feature.",source:"@site/docs/api/geoprocessing/functions/overlapSubarea.md",sourceDirName:"api/geoprocessing/functions",slug:"/api/geoprocessing/functions/overlapSubarea",permalink:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapSubarea",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/geoprocessing/functions/overlapSubarea.md",tags:[],version:"current",frontMatter:{}},a={},d=[{value:"Parameters",id:"parameters",level:2},{value:"Returns",id:"returns",level:2},{value:"Deprecated",id:"deprecated",level:2}];function l(e){const r={a:"a",code:"code",del:"del",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.header,{children:(0,n.jsx)(r.h1,{id:"overlapsubarea",children:(0,n.jsx)(r.del,{children:"overlapSubarea()"})})}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-ts",children:"function overlapSubarea(\n metricId, \n sketch, \n subareaFeature, \noptions?): Promise\n"})}),"\n",(0,n.jsx)(r.p,{children:"Returns area stats for sketch input after performing overlay operation against a subarea feature.\nIncludes both area overlap and percent area overlap metrics, because calculating percent later would be too complicated\nFor sketch collections, dissolve is used when calculating total sketch area to prevent double counting"}),"\n",(0,n.jsx)(r.h2,{id:"parameters",children:"Parameters"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Parameter"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"metricId"})}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"string"})}),(0,n.jsx)(r.td,{children:"Metric identifier"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"sketch"})}),(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Sketch",children:(0,n.jsx)(r.code,{children:"Sketch"})}),"<",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,n.jsx)(r.code,{children:"Polygon"})}),"> | ",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchCollection",children:(0,n.jsx)(r.code,{children:"SketchCollection"})}),"<",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,n.jsx)(r.code,{children:"Polygon"})}),">"]}),(0,n.jsx)(r.td,{children:"Single sketch or collection"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"subareaFeature"})}),(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,n.jsx)(r.code,{children:"Feature"})}),"<",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,n.jsx)(r.code,{children:"Polygon"})})," | ",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,n.jsx)(r.code,{children:"MultiPolygon"})}),", ",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,n.jsx)(r.code,{children:"GeoJsonProperties"})}),">"]}),(0,n.jsx)(r.td,{children:"subarea feature"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.code,{children:"options"}),"?"]}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"object"})}),(0,n.jsx)(r.td,{children:"-"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.code,{children:"options.operation"}),"?"]}),(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.code,{children:'"intersection"'})," | ",(0,n.jsx)(r.code,{children:'"difference"'})]}),(0,n.jsx)(r.td,{children:"operation to perform on sketch in relation to sub area features, defaults to 'intersection'"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.code,{children:"options.outerArea"}),"?"]}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"number"})}),(0,n.jsx)(r.td,{children:"area of outer boundary. Use for total area of the subarea for intersection when you don't have the whole feature, or use for the total area of the boundar outside of the subarea for difference (typically EEZ or planning area)"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.code,{children:"options.simplifyTolerance"}),"?"]}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"number"})}),(0,n.jsx)(r.td,{children:"simplify sketches with tolerance in degrees. .000001 is a good first value to try. only used for calculating area of collection (avoiding clip union to remove overlap blowing up)"})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"returns",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"Promise"}),"<",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metric",children:(0,n.jsx)(r.code,{children:"Metric"})}),"[]>"]}),"\n",(0,n.jsx)(r.h2,{id:"deprecated",children:"Deprecated"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"using geographies will clip your datasources and you can just use overlapFeatures"}),"\n"]})]})}function h(e={}){const{wrapper:r}={...(0,o.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},28453:(e,r,s)=>{s.d(r,{R:()=>i,x:()=>c});var n=s(96540);const o={},t=n.createContext(o);function i(e){const r=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(t.Provider,{value:r},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21241],{3619:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>a,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var n=s(74848),o=s(28453);const t={},i="overlapSubarea()",c={id:"api/geoprocessing/functions/overlapSubarea",title:"~~overlapSubarea()~~",description:"Returns area stats for sketch input after performing overlay operation against a subarea feature.",source:"@site/docs/api/geoprocessing/functions/overlapSubarea.md",sourceDirName:"api/geoprocessing/functions",slug:"/api/geoprocessing/functions/overlapSubarea",permalink:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapSubarea",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/geoprocessing/functions/overlapSubarea.md",tags:[],version:"current",frontMatter:{}},a={},d=[{value:"Parameters",id:"parameters",level:2},{value:"Returns",id:"returns",level:2},{value:"Deprecated",id:"deprecated",level:2}];function l(e){const r={a:"a",code:"code",del:"del",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.header,{children:(0,n.jsx)(r.h1,{id:"overlapsubarea",children:(0,n.jsx)(r.del,{children:"overlapSubarea()"})})}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-ts",children:"function overlapSubarea(\n metricId, \n sketch, \n subareaFeature, \noptions?): Promise\n"})}),"\n",(0,n.jsx)(r.p,{children:"Returns area stats for sketch input after performing overlay operation against a subarea feature.\nIncludes both area overlap and percent area overlap metrics, because calculating percent later would be too complicated\nFor sketch collections, dissolve is used when calculating total sketch area to prevent double counting"}),"\n",(0,n.jsx)(r.h2,{id:"parameters",children:"Parameters"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Parameter"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"metricId"})}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"string"})}),(0,n.jsx)(r.td,{children:"Metric identifier"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"sketch"})}),(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Sketch",children:(0,n.jsx)(r.code,{children:"Sketch"})}),"<",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,n.jsx)(r.code,{children:"Polygon"})}),"> | ",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchCollection",children:(0,n.jsx)(r.code,{children:"SketchCollection"})}),"<",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,n.jsx)(r.code,{children:"Polygon"})}),">"]}),(0,n.jsx)(r.td,{children:"Single sketch or collection"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"subareaFeature"})}),(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,n.jsx)(r.code,{children:"Feature"})}),"<",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,n.jsx)(r.code,{children:"Polygon"})})," | ",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon",children:(0,n.jsx)(r.code,{children:"MultiPolygon"})}),", ",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,n.jsx)(r.code,{children:"GeoJsonProperties"})}),">"]}),(0,n.jsx)(r.td,{children:"subarea feature"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.code,{children:"options"}),"?"]}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"object"})}),(0,n.jsx)(r.td,{children:"-"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.code,{children:"options.operation"}),"?"]}),(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.code,{children:'"intersection"'})," | ",(0,n.jsx)(r.code,{children:'"difference"'})]}),(0,n.jsx)(r.td,{children:"operation to perform on sketch in relation to sub area features, defaults to 'intersection'"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.code,{children:"options.outerArea"}),"?"]}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"number"})}),(0,n.jsx)(r.td,{children:"area of outer boundary. Use for total area of the subarea for intersection when you don't have the whole feature, or use for the total area of the boundar outside of the subarea for difference (typically EEZ or planning area)"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsxs)(r.td,{children:[(0,n.jsx)(r.code,{children:"options.simplifyTolerance"}),"?"]}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"number"})}),(0,n.jsx)(r.td,{children:"simplify sketches with tolerance in degrees. .000001 is a good first value to try. only used for calculating area of collection (avoiding clip union to remove overlap blowing up)"})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"returns",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"Promise"}),"<",(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metric",children:(0,n.jsx)(r.code,{children:"Metric"})}),"[]>"]}),"\n",(0,n.jsx)(r.h2,{id:"deprecated",children:"Deprecated"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"using geographies will clip your datasources and you can just use overlapFeatures. This will be removed in a future version"}),"\n"]})]})}function h(e={}){const{wrapper:r}={...(0,o.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},28453:(e,r,s)=>{s.d(r,{R:()=>i,x:()=>c});var n=s(96540);const o={},t=n.createContext(o);function i(e){const r=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(t.Provider,{value:r},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/b5365aa8.7dcddffa.js b/assets/js/b5365aa8.7dcddffa.js
new file mode 100644
index 0000000000..62809f3d56
--- /dev/null
+++ b/assets/js/b5365aa8.7dcddffa.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[56630],{46506:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var n=s(74848),t=s(28453);const i={},o="Toolbox",l={id:"toolbox",title:"Toolbox",description:"Clipping Data",source:"@site/docs/toolbox.md",sourceDirName:".",slug:"/toolbox",permalink:"/geoprocessing/docs/next/toolbox",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/toolbox.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Project Structure",permalink:"/geoprocessing/docs/next/structure"},next:{title:"Data Fetching",permalink:"/geoprocessing/docs/next/dataproviders"}},a={},c=[{value:"Clipping Data",id:"clipping-data",level:2},{value:"Vector Overlap Analysis",id:"vector-overlap-analysis",level:2},{value:"Raster Overlap Analysis",id:"raster-overlap-analysis",level:2},{value:"Group Metrics",id:"group-metrics",level:2}];function d(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.header,{children:(0,n.jsx)(r.h1,{id:"toolbox",children:"Toolbox"})}),"\n",(0,n.jsx)(r.h2,{id:"clipping-data",children:"Clipping Data"}),"\n",(0,n.jsx)(r.p,{children:"Turf functions can be used directly for clipping features including:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.code,{children:"intersect"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.code,{children:"difference"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.code,{children:"union"})}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:"The geoprocessing toolbox offers some convenience functions that wrap these functions with additional functionality, error checking, and/or error prevention:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"clip"})," - performs one of 4 different clip operations on features in one function (union, intersection, xor, difference)"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"clipMultiMerge"})," - performs clip after first merging features2 coords into a single multipolygon. Avoids errors in underlying clipping library when too many features in features2."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"intersectInChunks"})," - calculates area overlap between a feature A and a feature array B. Intersection is done in chunks on featuresB to avoid errors due to too many features."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"intersectInChunksArea"})," - calculates area overlap between a feature A and a feature array B. Intersection is done in chunks on featuresB to avoid errors due to too many features."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"intersectSum"})," - sums a property value of intersecting features. No support for partial."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/clipToPolygonFeatures",children:"clipToPolygonFeatures"})," - takes a Polygon feature and returns the portion remaining after performing one or more clipOperations (intersection or difference). If results in multiple polygons then returns the largest.\n",(0,n.jsx)(r.code,{children:"clipToPolygonDatasources"})]}),"\n"]}),"\n",(0,n.jsx)(r.h2,{id:"vector-overlap-analysis",children:"Vector Overlap Analysis"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"overlapFeatures"})," - calculates zonal statistics for overlap between sketch(es) and an array of polygon features.","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"high-level function that returns an array of Metric objects."}),"\n",(0,n.jsx)(r.li,{children:"Supports area or sum operation (given sumProperty), defaults to area."}),"\n",(0,n.jsx)(r.li,{children:"If sketch collection is input, calculates overall overlap stats as well as per child sketch."}),"\n",(0,n.jsx)(r.li,{children:"handles overlap of sketch features so that overlap is not double counted in area/sum stats."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h2,{id:"raster-overlap-analysis",children:"Raster Overlap Analysis"}),"\n",(0,n.jsx)(r.p,{children:"Geoblaze can be used directly for calculating zonal raster statistics using a Sketch feature."}),"\n",(0,n.jsx)(r.p,{children:"The geoprocessing framework offers some convenience functions that extend them with additional functionality:"}),"\n",(0,n.jsx)(r.p,{children:"High-level:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rasterMetrics",children:"rasterMetrics"})," calculate summary metrics (statistics/area) on a loa. If ",(0,n.jsx)(r.code,{children:"sketch"})," is passed will limit to raster values overlapping with the sketch (zonal statistics). Similar to ",(0,n.jsx)(r.code,{children:"rasterStats"})," but results are returned in a standardized ",(0,n.jsx)(r.code,{children:"Metric"})," array format.","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["If ",(0,n.jsx)(r.code,{children:"feature"})," is a collection, then calculate metrics for each individual feature as well as the collection as a whole. This can be disabled by passing ",(0,n.jsx)(r.code,{children:"includeChildMetrics: false"}),". If your raster is a categorical raster you should pass ",(0,n.jsx)(r.code,{children:"categorical: true"})," and optionally pass the list of ",(0,n.jsx)(r.code,{children:"categoryMetricsValues"})," to pull out of the raster."]}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://github.com/search?q=org%3Aseasketch+rasterMetrics%28&type=code",children:"Examples"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"https://github.com/seasketch/california-reports/blob/98cd29fc0da86707bfde9aa6f3ecf30c0e5db23a/src/functions/kelpMaxWorker.ts#L61",children:"Categorical example"})}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"overlapRasterClass"})," - salculates sum of overlap between sketches and a categorical raster with numeric values representing feature classes"]}),"\n",(0,n.jsxs)(r.li,{children:["Lesser used:","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"overlapRasterSum"})," - returns sum of cells overlapping sketch with raster as a metric object"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"overlapRasterArea"})," - returns area of sketch overlap with raster as a metric object"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:"Low-level:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rasterStats",children:"rasterStats"})," - is a lower-level all-in-one function for calculating up to 10 different raster stats in a single pass.","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"includes calculation of are not currently supported by geoblaze. Supported through use of equal area raster projection."}),"\n",(0,n.jsx)(r.li,{children:"Optionally constrains to raster cells overlapping with feature."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:"Older function:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getSum",children:"getSum"})," - returns sum of raster cell values overlap with feature. (not multi-band aware, first band only)"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getArea",children:"getArea"})," - returns area of valid raster cell values (not nodata) overlapping with feature. (not multi-band aware, first band only)"]}),"\n"]}),"\n",(0,n.jsx)(r.h2,{id:"group-metrics",children:"Group Metrics"}),"\n",(0,n.jsx)(r.p,{children:"Calculate group-level metrics by assigning sketches to groups (e.g. group by protection level)"}),"\n",(0,n.jsx)(r.p,{children:"High-level:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"overlapFeaturesGroupMetrics"})," - generate overlap metrics for groups of sketches using overlapFeatures operation."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"overlapRasterGroupMetrics"})," - generate overlap metrics for groups of sketches using rasterMetrics operation"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"overlapAreaGroupMetrics"})," - generate overlap metrics for groups of sketches using overlapArea operation."]}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:"Low-level:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"overlapArea"})," - calculates the area of each sketch and the proportion of outerArea they take up.","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"used by overlapAreaGroupMetrics."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"overlapGroupMetrics"})," - given overlap metrics (vector or raster) stratified by class and sketch, returns new metrics also stratified by group. Assumes a sketch is member of only one group, determined by caller-provided metricToGroup.","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"used by all high-level group metrics functions"}),"\n"]}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},28453:(e,r,s)=>{s.d(r,{R:()=>o,x:()=>l});var n=s(96540);const t={},i=n.createContext(t);function o(e){const r=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function l(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),n.createElement(i.Provider,{value:r},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/bb47ce6c.942bc984.js b/assets/js/bb47ce6c.942bc984.js
new file mode 100644
index 0000000000..4c993fa406
--- /dev/null
+++ b/assets/js/bb47ce6c.942bc984.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[31681],{92898:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":"unreleased","badge":true,"noIndex":false,"className":"docs-version-current","isLast":false,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Getting Started","items":[{"type":"link","label":"Introduction","href":"/geoprocessing/docs/next/","docId":"introduction","unlisted":false},{"type":"link","label":"Concepts","href":"/geoprocessing/docs/next/concepts","docId":"concepts/Concepts","unlisted":false},{"type":"link","label":"Advanced Concepts","href":"/geoprocessing/docs/next/concepts/AdvancedConcepts","docId":"concepts/AdvancedConcepts","unlisted":false},{"type":"link","label":"Architecture","href":"/geoprocessing/docs/next/architecture","docId":"architecture/Architecture","unlisted":false},{"type":"link","label":"Command Line Interface","href":"/geoprocessing/docs/next/cli","docId":"CLI","unlisted":false},{"type":"link","label":"Skill Building","href":"/geoprocessing/docs/next/skills","docId":"skills","unlisted":false},{"type":"link","label":"Accuracy/Limitations","href":"/geoprocessing/docs/next/EdgesAndLimits","docId":"EdgesAndLimits","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"System Setup","href":"/geoprocessing/docs/next/tutorials/","docId":"tutorials/Tutorials","unlisted":false},{"type":"link","label":"Create Sample Project","href":"/geoprocessing/docs/next/tutorials/sampleproject","docId":"tutorials/sampleproject","unlisted":false},{"type":"link","label":"Create New Project","href":"/geoprocessing/docs/next/tutorials/newproject","docId":"tutorials/newproject","unlisted":false},{"type":"link","label":"Setup Existing Project","href":"/geoprocessing/docs/next/tutorials/existingproject","docId":"tutorials/existingproject","unlisted":false},{"type":"link","label":"Deploy Project","href":"/geoprocessing/docs/next/tutorials/deploy","docId":"tutorials/deploy","unlisted":false},{"type":"link","label":"Update Datasource","href":"/geoprocessing/docs/next/tutorials/updateDatasource","docId":"tutorials/updateDatasource","unlisted":false},{"type":"link","label":"Upgrade Project","href":"/geoprocessing/docs/next/upgrade","docId":"upgrade","unlisted":false},{"type":"link","label":"Third Party Data","href":"/geoprocessing/docs/next/thirdpartydata/","docId":"thirdpartydata/thirdpartydata","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Guides","items":[{"type":"link","label":"Project Structure","href":"/geoprocessing/docs/next/structure","docId":"structure","unlisted":false},{"type":"link","label":"Spatial Toolbox","href":"/geoprocessing/docs/next/toolbox","docId":"toolbox","unlisted":false},{"type":"link","label":"Data Fetching","href":"/geoprocessing/docs/next/dataproviders","docId":"dataproviders","unlisted":false},{"type":"link","label":"Project Client","href":"/geoprocessing/docs/next/projectclient","docId":"projectclient","unlisted":false},{"type":"link","label":"Link Project Data","href":"/geoprocessing/docs/next/linkData","docId":"linkData","unlisted":false},{"type":"link","label":"Precalc Data","href":"/geoprocessing/docs/next/precalc","docId":"precalc","unlisted":false},{"type":"link","label":"Data Import","href":"/geoprocessing/docs/next/dataimport","docId":"dataimport","unlisted":false},{"type":"link","label":"Preprocessing Functions","href":"/geoprocessing/docs/next/preprocessing","docId":"preprocessing","unlisted":false},{"type":"link","label":"Geoprocessing Functions","href":"/geoprocessing/docs/next/geoprocessing","docId":"geoprocessing","unlisted":false},{"type":"link","label":"Report Clients","href":"/geoprocessing/docs/next/reportclient","docId":"reportclient","unlisted":false},{"type":"link","label":"Worker Functions","href":"/geoprocessing/docs/next/workers","docId":"workers","unlisted":false},{"type":"link","label":"Custom Sketch Attributes","href":"/geoprocessing/docs/next/tutorials/sketchAttributes","docId":"tutorials/sketchAttributes","unlisted":false},{"type":"link","label":"Extra Function Parameters","href":"/geoprocessing/docs/next/tutorials/extraParams","docId":"tutorials/extraParams","unlisted":false},{"type":"link","label":"Multi-Boundary","href":"/geoprocessing/docs/next/multiBoundary/","docId":"multiBoundary/multiBoundary","unlisted":false},{"type":"link","label":"Subdividing Data","href":"/geoprocessing/docs/next/tutorials/subdividing","docId":"tutorials/subdividing","unlisted":false},{"type":"link","label":"Antimeridian","href":"/geoprocessing/docs/next/antimeridian","docId":"antimeridian/Antimeridian","unlisted":false},{"type":"link","label":"Testing","href":"/geoprocessing/docs/next/testing","docId":"Testing","unlisted":false},{"type":"link","label":"Storybook","href":"/geoprocessing/docs/next/tutorials/storybook","docId":"tutorials/storybook","unlisted":false},{"type":"link","label":"Devcontainer","href":"/geoprocessing/docs/next/devcontainer/","docId":"devcontainer/devcontainer","unlisted":false},{"type":"link","label":"Codespaces","href":"/geoprocessing/docs/next/codespaces/","docId":"codespaces/codespaces","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Library","items":[{"type":"link","label":"Typescript API","href":"/geoprocessing/docs/next/api/","docId":"api/index","unlisted":false},{"type":"link","label":"Extending","href":"/geoprocessing/docs/next/extending","docId":"Extending","unlisted":false},{"type":"link","label":"Contributing","href":"/geoprocessing/docs/next/contributing","docId":"Contributing","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Improvement Proposals","items":[{"type":"link","label":"GIP-1: Internationalization","href":"/geoprocessing/docs/next/gip/GIP-1-i18n","docId":"gip/GIP-1-i18n","unlisted":false}],"collapsed":true,"collapsible":true}]},"docs":{"antimeridian/Antimeridian":{"id":"antimeridian/Antimeridian","title":"Antimeridian","description":"The antimeridian is the 180 degree meridian.","sidebar":"tutorialSidebar"},"api/client-core/index":{"id":"api/client-core/index","title":"client-core","description":"client-ui provides everything for creating geoprocessing client interface,"},"api/client-ui/classes/ReportError":{"id":"api/client-ui/classes/ReportError","title":"ReportError","description":"Extends"},"api/client-ui/functions/App":{"id":"api/client-ui/functions/App","title":"App()","description":"Parameters"},"api/client-ui/functions/Card":{"id":"api/client-ui/functions/Card","title":"Card()","description":"Parameters"},"api/client-ui/functions/CardDecorator":{"id":"api/client-ui/functions/CardDecorator","title":"CardDecorator()","description":"Default decorator. Create additional building on StoryLayout for more sophisticated needs"},"api/client-ui/functions/ChartLegend":{"id":"api/client-ui/functions/ChartLegend","title":"ChartLegend()","description":"Horizontal stacked bar chart component"},"api/client-ui/functions/CheckboxGroup":{"id":"api/client-ui/functions/CheckboxGroup","title":"CheckboxGroup()","description":"Controlled checkbox group"},"api/client-ui/functions/Circle":{"id":"api/client-ui/functions/Circle","title":"Circle()","description":"Circle with user-defined component inside"},"api/client-ui/functions/ClassTable":{"id":"api/client-ui/functions/ClassTable","title":"ClassTable()","description":"Table displaying class metrics, one class per table row. Having more than one metric per class may yield unexpected results"},"api/client-ui/functions/ClassTableStyled":{"id":"api/client-ui/functions/ClassTableStyled","title":"ClassTableStyled()","description":"ClassTableStyled(props)"},"api/client-ui/functions/Collapse":{"id":"api/client-ui/functions/Collapse","title":"Collapse()","description":"Parameters"},"api/client-ui/functions/CollapseGroup":{"id":"api/client-ui/functions/CollapseGroup","title":"CollapseGroup()","description":"Parameters"},"api/client-ui/functions/createReportDecorator":{"id":"api/client-ui/functions/createReportDecorator","title":"createReportDecorator()","description":"Think of this as a ReportDecorator generator, that allows you to pass in context and override the default"},"api/client-ui/functions/DataDownload":{"id":"api/client-ui/functions/DataDownload","title":"DataDownload()","description":"Dropdown menu for transforming data to CSV/JSON format and initiating a browser download"},"api/client-ui/functions/DataDownloadToolbar":{"id":"api/client-ui/functions/DataDownloadToolbar","title":"DataDownloadToolbar()","description":"Convenience component that creates a Toolbar with Header and DataDownload"},"api/client-ui/functions/Dropdown":{"id":"api/client-ui/functions/Dropdown","title":"Dropdown()","description":"Parameters"},"api/client-ui/functions/DropdownContainer":{"id":"api/client-ui/functions/DropdownContainer","title":"DropdownContainer()","description":"DropdownContainer(props)"},"api/client-ui/functions/DropdownItem":{"id":"api/client-ui/functions/DropdownItem","title":"DropdownItem()","description":"DropdownItem(props)"},"api/client-ui/functions/DropdownTrigger":{"id":"api/client-ui/functions/DropdownTrigger","title":"DropdownTrigger()","description":"DropdownTrigger(props)"},"api/client-ui/functions/EstimateLabel":{"id":"api/client-ui/functions/EstimateLabel","title":"EstimateLabel()","description":"EstimateLabel(props)"},"api/client-ui/functions/FilterSelectTable":{"id":"api/client-ui/functions/FilterSelectTable","title":"FilterSelectTable()","description":"Table with customizable filter functions as CheckboxGroup that when selected"},"api/client-ui/functions/FilterSelectTableStyled":{"id":"api/client-ui/functions/FilterSelectTableStyled","title":"FilterSelectTableStyled()","description":"FilterSelectTableStyled(props)"},"api/client-ui/functions/finishTask":{"id":"api/client-ui/functions/finishTask","title":"finishTask()","description":"Finishes task by hitting the remote cache, updating the hook with the task result and cleaning up"},"api/client-ui/functions/GeographySwitcher":{"id":"api/client-ui/functions/GeographySwitcher","title":"GeographySwitcher()","description":"Parameters"},"api/client-ui/functions/GreenPill":{"id":"api/client-ui/functions/GreenPill","title":"GreenPill()","description":"Parameters"},"api/client-ui/functions/GroupCircle":{"id":"api/client-ui/functions/GroupCircle","title":"GroupCircle()","description":"Circle with user-defined group colors"},"api/client-ui/functions/GroupCircleRow":{"id":"api/client-ui/functions/GroupCircleRow","title":"GroupCircleRow()","description":"GroupCircle with layout for use in table row"},"api/client-ui/functions/GroupPill":{"id":"api/client-ui/functions/GroupPill","title":"GroupPill()","description":"Pill with colors assigned to each group name"},"api/client-ui/functions/HorizontalStackedBar":{"id":"api/client-ui/functions/HorizontalStackedBar","title":"HorizontalStackedBar()","description":"Horizontal stacked bar chart component"},"api/client-ui/functions/InfoStatus":{"id":"api/client-ui/functions/InfoStatus","title":"InfoStatus()","description":"Parameters"},"api/client-ui/functions/IucnActivitiesCard":{"id":"api/client-ui/functions/IucnActivitiesCard","title":"IucnActivitiesCard()","description":"Returns"},"api/client-ui/functions/IucnDesignationTable":{"id":"api/client-ui/functions/IucnDesignationTable","title":"IucnDesignationTable()","description":"Returns"},"api/client-ui/functions/IucnLevelCircle":{"id":"api/client-ui/functions/IucnLevelCircle","title":"IucnLevelCircle()","description":"Parameters"},"api/client-ui/functions/IucnLevelCircleRow":{"id":"api/client-ui/functions/IucnLevelCircleRow","title":"IucnLevelCircleRow()","description":"Parameters"},"api/client-ui/functions/IucnLevelPill":{"id":"api/client-ui/functions/IucnLevelPill","title":"IucnLevelPill()","description":"Parameters"},"api/client-ui/functions/IucnMatrix":{"id":"api/client-ui/functions/IucnMatrix","title":"IucnMatrix()","description":"Returns"},"api/client-ui/functions/KeySection":{"id":"api/client-ui/functions/KeySection","title":"KeySection()","description":"Parameters"},"api/client-ui/functions/LanguageSwitcher":{"id":"api/client-ui/functions/LanguageSwitcher","title":"LanguageSwitcher()","description":"Returns"},"api/client-ui/functions/LayerToggle":{"id":"api/client-ui/functions/LayerToggle","title":"LayerToggle()","description":"Parameters"},"api/client-ui/functions/ObjectiveStatus":{"id":"api/client-ui/functions/ObjectiveStatus","title":"ObjectiveStatus()","description":"Parameters"},"api/client-ui/functions/Pill":{"id":"api/client-ui/functions/Pill","title":"Pill()","description":"Parameters"},"api/client-ui/functions/PillColumn":{"id":"api/client-ui/functions/PillColumn","title":"PillColumn()","description":"Parameters"},"api/client-ui/functions/PointyCircle":{"id":"api/client-ui/functions/PointyCircle","title":"PointyCircle()","description":"Circle with pointy top right corner"},"api/client-ui/functions/ProgressBar":{"id":"api/client-ui/functions/ProgressBar","title":"ProgressBar()","description":"ProgressBar(props)"},"api/client-ui/functions/ProgressBarWrapper":{"id":"api/client-ui/functions/ProgressBarWrapper","title":"ProgressBarWrapper()","description":"ProgressBarWrapper(props)"},"api/client-ui/functions/RbcsActivitiesCard":{"id":"api/client-ui/functions/RbcsActivitiesCard","title":"RbcsActivitiesCard()","description":"Returns"},"api/client-ui/functions/RbcsIcon":{"id":"api/client-ui/functions/RbcsIcon","title":"RbcsIcon()","description":"Parameters"},"api/client-ui/functions/RbcsLearnMore":{"id":"api/client-ui/functions/RbcsLearnMore","title":"RbcsLearnMore()","description":"Describes RBCS and lists minimum level of protection required for each objective"},"api/client-ui/functions/RbcsMpaClassPanel":{"id":"api/client-ui/functions/RbcsMpaClassPanel","title":"RbcsMpaClassPanel()","description":"Sketch collection status panel for MPA regulation-based classification"},"api/client-ui/functions/RbcsMpaObjectiveStatus":{"id":"api/client-ui/functions/RbcsMpaObjectiveStatus","title":"RbcsMpaObjectiveStatus()","description":"Parameters"},"api/client-ui/functions/RbcsNetworkObjectiveStatus":{"id":"api/client-ui/functions/RbcsNetworkObjectiveStatus","title":"RbcsNetworkObjectiveStatus()","description":"Displays status toward meeting Network objective"},"api/client-ui/functions/RbcsZoneClassPanel":{"id":"api/client-ui/functions/RbcsZoneClassPanel","title":"RbcsZoneClassPanel()","description":"Single-sketch status panel for MPA regulation-based classification"},"api/client-ui/functions/RbcsZoneRegIcon":{"id":"api/client-ui/functions/RbcsZoneRegIcon","title":"RbcsZoneRegIcon()","description":"Parameters"},"api/client-ui/functions/ReportChartFigure":{"id":"api/client-ui/functions/ReportChartFigure","title":"ReportChartFigure()","description":"Chart container styled with spacing for layout in report pages"},"api/client-ui/functions/ReportDecorator":{"id":"api/client-ui/functions/ReportDecorator","title":"ReportDecorator()","description":"Decorator that renders a story into ReportStoryLayout."},"api/client-ui/functions/ReportPage":{"id":"api/client-ui/functions/ReportPage","title":"ReportPage()","description":"Parameters"},"api/client-ui/functions/ReportStoryLayout":{"id":"api/client-ui/functions/ReportStoryLayout","title":"ReportStoryLayout()","description":"Wraps a story to look and behave like a sketch report"},"api/client-ui/functions/ReportTableStyled":{"id":"api/client-ui/functions/ReportTableStyled","title":"ReportTableStyled()","description":"ReportTableStyled(props)"},"api/client-ui/functions/ReportTextDirection":{"id":"api/client-ui/functions/ReportTextDirection","title":"ReportTextDirection()","description":"Controls text direction for report based on current language"},"api/client-ui/functions/ResultsCard":{"id":"api/client-ui/functions/ResultsCard","title":"ResultsCard()","description":"Type Parameters"},"api/client-ui/functions/runTask":{"id":"api/client-ui/functions/runTask","title":"runTask()","description":"Runs task by sending GET request to url with payload and optional flags"},"api/client-ui/functions/SegmentControl":{"id":"api/client-ui/functions/SegmentControl","title":"SegmentControl()","description":"Parameters"},"api/client-ui/functions/SimpleButton":{"id":"api/client-ui/functions/SimpleButton","title":"SimpleButton()","description":"A simple button component that accepts any text value so unicode can be used including emojis"},"api/client-ui/functions/SimpleButtonStyled":{"id":"api/client-ui/functions/SimpleButtonStyled","title":"SimpleButtonStyled()","description":"SimpleButtonStyled(props)"},"api/client-ui/functions/Skeleton":{"id":"api/client-ui/functions/Skeleton","title":"Skeleton()","description":"Skeleton(props)"},"api/client-ui/functions/SketchAttributesCard":{"id":"api/client-ui/functions/SketchAttributesCard","title":"SketchAttributesCard()","description":"Parameters"},"api/client-ui/functions/SketchClassTable":{"id":"api/client-ui/functions/SketchClassTable","title":"SketchClassTable()","description":"Table displaying sketch class metrics, one table row per sketch"},"api/client-ui/functions/SketchClassTableStyled":{"id":"api/client-ui/functions/SketchClassTableStyled","title":"SketchClassTableStyled()","description":"Style component for SketchClassTable"},"api/client-ui/functions/SmallReportTableStyled":{"id":"api/client-ui/functions/SmallReportTableStyled","title":"SmallReportTableStyled()","description":"SmallReportTableStyled(props)"},"api/client-ui/functions/StyledCircle":{"id":"api/client-ui/functions/StyledCircle","title":"StyledCircle()","description":"Default style for Circle"},"api/client-ui/functions/StyledPill":{"id":"api/client-ui/functions/StyledPill","title":"StyledPill()","description":"StyledPill(props)"},"api/client-ui/functions/StyledTwoColorPointyCircle":{"id":"api/client-ui/functions/StyledTwoColorPointyCircle","title":"StyledTwoColorPointyCircle()","description":"StyledTwoColorPointyCircle(props)"},"api/client-ui/functions/Table":{"id":"api/client-ui/functions/Table","title":"Table()","description":"Table component suited to geoprocessing client reports."},"api/client-ui/functions/TableStyled":{"id":"api/client-ui/functions/TableStyled","title":"TableStyled()","description":"TableStyled(props)"},"api/client-ui/functions/Toolbar":{"id":"api/client-ui/functions/Toolbar","title":"Toolbar()","description":"Parameters"},"api/client-ui/functions/ToolbarCard":{"id":"api/client-ui/functions/ToolbarCard","title":"ToolbarCard()","description":"Parameters"},"api/client-ui/functions/ToolbarStyled":{"id":"api/client-ui/functions/ToolbarStyled","title":"ToolbarStyled()","description":"ToolbarStyled(props)"},"api/client-ui/functions/Tooltip":{"id":"api/client-ui/functions/Tooltip","title":"Tooltip()","description":"Parameters"},"api/client-ui/functions/TooltipContainer":{"id":"api/client-ui/functions/TooltipContainer","title":"TooltipContainer()","description":"TooltipContainer(props)"},"api/client-ui/functions/TooltipItem":{"id":"api/client-ui/functions/TooltipItem","title":"TooltipItem()","description":"TooltipItem(props)"},"api/client-ui/functions/TooltipTrigger":{"id":"api/client-ui/functions/TooltipTrigger","title":"TooltipTrigger()","description":"TooltipTrigger(props)"},"api/client-ui/functions/Translator":{"id":"api/client-ui/functions/Translator","title":"Translator()","description":"Loads translations asynchronously using dynamic import abd react-i18next will have translations eventually and update"},"api/client-ui/functions/TwoColorPointyCircle":{"id":"api/client-ui/functions/TwoColorPointyCircle","title":"TwoColorPointyCircle()","description":"Two-color reg-based classification circle for collection index value"},"api/client-ui/functions/useCheckboxes":{"id":"api/client-ui/functions/useCheckboxes","title":"useCheckboxes()","description":"Hook to maintain checkbox state"},"api/client-ui/functions/useFunction":{"id":"api/client-ui/functions/useFunction","title":"useFunction()","description":"Runs the given geoprocessing function for the current sketch, as defined by ReportContext"},"api/client-ui/functions/useLanguage":{"id":"api/client-ui/functions/useLanguage","title":"useLanguage()","description":"Hook that returns current language from report context, and provides function to change the language"},"api/client-ui/functions/useSketchProperties":{"id":"api/client-ui/functions/useSketchProperties","title":"useSketchProperties()","description":"Returns"},"api/client-ui/functions/VerticalSpacer":{"id":"api/client-ui/functions/VerticalSpacer","title":"VerticalSpacer()","description":"Parameters"},"api/client-ui/functions/WarningPill":{"id":"api/client-ui/functions/WarningPill","title":"WarningPill()","description":"Parameters"},"api/client-ui/functions/WatersDiagram":{"id":"api/client-ui/functions/WatersDiagram","title":"WatersDiagram()","description":"Serves up a translatable SVG image showing nautical boundaries"},"api/client-ui/index":{"id":"api/client-ui/index","title":"client-ui","description":"client-ui provides all of the core React UI components for geoprocessing"},"api/client-ui/interfaces/AppProps":{"id":"api/client-ui/interfaces/AppProps","title":"AppProps","description":"Properties"},"api/client-ui/interfaces/CardProps":{"id":"api/client-ui/interfaces/CardProps","title":"CardProps","description":"Properties"},"api/client-ui/interfaces/CircleProps":{"id":"api/client-ui/interfaces/CircleProps","title":"CircleProps","description":"Properties"},"api/client-ui/interfaces/ClassTableColumnConfig":{"id":"api/client-ui/interfaces/ClassTableColumnConfig","title":"ClassTableColumnConfig","description":"Properties"},"api/client-ui/interfaces/ClassTableProps":{"id":"api/client-ui/interfaces/ClassTableProps","title":"ClassTableProps","description":"Properties"},"api/client-ui/interfaces/CollapseGroupProps":{"id":"api/client-ui/interfaces/CollapseGroupProps","title":"CollapseGroupProps","description":"Properties"},"api/client-ui/interfaces/CollapseProps":{"id":"api/client-ui/interfaces/CollapseProps","title":"CollapseProps","description":"Properties"},"api/client-ui/interfaces/DataDownloadProps":{"id":"api/client-ui/interfaces/DataDownloadProps","title":"DataDownloadProps","description":"Extends"},"api/client-ui/interfaces/DataDownloadToolbarProps":{"id":"api/client-ui/interfaces/DataDownloadToolbarProps","title":"DataDownloadToolbarProps","description":"Extends"},"api/client-ui/interfaces/DataFormatters":{"id":"api/client-ui/interfaces/DataFormatters","title":"DataFormatters","description":"Indexable"},"api/client-ui/interfaces/DownloadOption":{"id":"api/client-ui/interfaces/DownloadOption","title":"DownloadOption","description":"Properties"},"api/client-ui/interfaces/DropdownContainerProps":{"id":"api/client-ui/interfaces/DropdownContainerProps","title":"DropdownContainerProps","description":"Properties"},"api/client-ui/interfaces/DropdownProps":{"id":"api/client-ui/interfaces/DropdownProps","title":"DropdownProps","description":"Renders an element with a dropdown list"},"api/client-ui/interfaces/FilterSelect":{"id":"api/client-ui/interfaces/FilterSelect","title":"FilterSelect\\\\","description":"Custom table data filters that are only active when selected by the user"},"api/client-ui/interfaces/FilterSelectOption":{"id":"api/client-ui/interfaces/FilterSelectOption","title":"FilterSelectOption\\\\","description":"Custom table data filter"},"api/client-ui/interfaces/FilterSelectTableOptions":{"id":"api/client-ui/interfaces/FilterSelectTableOptions","title":"FilterSelectTableOptions\\\\","description":"The empty definitions of below provides a base definition for the parts used by useTable, that can then be extended in the users code."},"api/client-ui/interfaces/GeographySwitcherProps":{"id":"api/client-ui/interfaces/GeographySwitcherProps","title":"GeographySwitcherProps","description":"Properties"},"api/client-ui/interfaces/GroupCircleProps":{"id":"api/client-ui/interfaces/GroupCircleProps","title":"GroupCircleProps","description":"Properties"},"api/client-ui/interfaces/GroupCircleRowProps":{"id":"api/client-ui/interfaces/GroupCircleRowProps","title":"GroupCircleRowProps","description":"Properties"},"api/client-ui/interfaces/GroupPillProps":{"id":"api/client-ui/interfaces/GroupPillProps","title":"GroupPillProps","description":"Properties"},"api/client-ui/interfaces/HorizontalStackedBarProps":{"id":"api/client-ui/interfaces/HorizontalStackedBarProps","title":"HorizontalStackedBarProps","description":"Properties"},"api/client-ui/interfaces/InfoStatusProps":{"id":"api/client-ui/interfaces/InfoStatusProps","title":"InfoStatusProps","description":"Properties"},"api/client-ui/interfaces/IucnActivityRank":{"id":"api/client-ui/interfaces/IucnActivityRank","title":"IucnActivityRank","description":"Properties"},"api/client-ui/interfaces/IucnLevelCircleProps":{"id":"api/client-ui/interfaces/IucnLevelCircleProps","title":"IucnLevelCircleProps","description":"Properties"},"api/client-ui/interfaces/IucnLevelCircleRowProps":{"id":"api/client-ui/interfaces/IucnLevelCircleRowProps","title":"IucnLevelCircleRowProps","description":"Properties"},"api/client-ui/interfaces/IucnLevelPillProps":{"id":"api/client-ui/interfaces/IucnLevelPillProps","title":"IucnLevelPillProps","description":"Properties"},"api/client-ui/interfaces/KeySectionProps":{"id":"api/client-ui/interfaces/KeySectionProps","title":"KeySectionProps","description":"Properties"},"api/client-ui/interfaces/LabelProps":{"id":"api/client-ui/interfaces/LabelProps","title":"LabelProps","description":"Array of Labels to be inserted into the waters diagram"},"api/client-ui/interfaces/LegendProps":{"id":"api/client-ui/interfaces/LegendProps","title":"LegendProps","description":"Properties"},"api/client-ui/interfaces/ObjectiveStatusProps":{"id":"api/client-ui/interfaces/ObjectiveStatusProps","title":"ObjectiveStatusProps","description":"Properties"},"api/client-ui/interfaces/PillColumnProps":{"id":"api/client-ui/interfaces/PillColumnProps","title":"PillColumnProps","description":"Properties"},"api/client-ui/interfaces/PillProps":{"id":"api/client-ui/interfaces/PillProps","title":"PillProps","description":"Properties"},"api/client-ui/interfaces/RbcsIconProps":{"id":"api/client-ui/interfaces/RbcsIconProps","title":"RbcsIconProps","description":"Properties"},"api/client-ui/interfaces/RbcsLearnMoreProps":{"id":"api/client-ui/interfaces/RbcsLearnMoreProps","title":"RbcsLearnMoreProps","description":"Properties"},"api/client-ui/interfaces/RbcsMpaClassPanelProps":{"id":"api/client-ui/interfaces/RbcsMpaClassPanelProps","title":"RbcsMpaClassPanelProps","description":"Properties"},"api/client-ui/interfaces/RbcsMpaObjectiveStatusProps":{"id":"api/client-ui/interfaces/RbcsMpaObjectiveStatusProps","title":"RbcsMpaObjectiveStatusProps","description":"Properties"},"api/client-ui/interfaces/RbcsNetworkObjectiveProps":{"id":"api/client-ui/interfaces/RbcsNetworkObjectiveProps","title":"RbcsNetworkObjectiveProps","description":"Properties"},"api/client-ui/interfaces/RbcsPanelProps":{"id":"api/client-ui/interfaces/RbcsPanelProps","title":"RbcsPanelProps","description":"Properties"},"api/client-ui/interfaces/ReportChartFigureProps":{"id":"api/client-ui/interfaces/ReportChartFigureProps","title":"ReportChartFigureProps","description":"Properties"},"api/client-ui/interfaces/ReportContextState":{"id":"api/client-ui/interfaces/ReportContextState","title":"ReportContextState","description":"Properties"},"api/client-ui/interfaces/ReportPageProps":{"id":"api/client-ui/interfaces/ReportPageProps","title":"ReportPageProps","description":"Properties"},"api/client-ui/interfaces/ReportStoryLayoutProps":{"id":"api/client-ui/interfaces/ReportStoryLayoutProps","title":"ReportStoryLayoutProps","description":"Properties"},"api/client-ui/interfaces/ResultsCardProps":{"id":"api/client-ui/interfaces/ResultsCardProps","title":"ResultsCardProps\\\\","description":"Type Parameters"},"api/client-ui/interfaces/Row":{"id":"api/client-ui/interfaces/Row","title":"Row\\\\","description":"Extends"},"api/client-ui/interfaces/SegmentControlProps":{"id":"api/client-ui/interfaces/SegmentControlProps","title":"SegmentControlProps","description":"Properties"},"api/client-ui/interfaces/SimpleButtonProbs":{"id":"api/client-ui/interfaces/SimpleButtonProbs","title":"SimpleButtonProbs","description":"Properties"},"api/client-ui/interfaces/SketchAttributesCardProps":{"id":"api/client-ui/interfaces/SketchAttributesCardProps","title":"SketchAttributesCardProps","description":"Properties"},"api/client-ui/interfaces/SketchClassTableProps":{"id":"api/client-ui/interfaces/SketchClassTableProps","title":"SketchClassTableProps","description":"Properties"},"api/client-ui/interfaces/StyledHorizontalStackedBarProps":{"id":"api/client-ui/interfaces/StyledHorizontalStackedBarProps","title":"StyledHorizontalStackedBarProps","description":"Properties"},"api/client-ui/interfaces/StyledLegendProps":{"id":"api/client-ui/interfaces/StyledLegendProps","title":"StyledLegendProps","description":"Properties"},"api/client-ui/interfaces/StyledTwoColorPointyCircleProps":{"id":"api/client-ui/interfaces/StyledTwoColorPointyCircleProps","title":"StyledTwoColorPointyCircleProps","description":"Properties"},"api/client-ui/interfaces/TableOptions":{"id":"api/client-ui/interfaces/TableOptions","title":"TableOptions\\\\","description":"The empty definitions of below provides a base definition for the parts used by useTable, that can then be extended in the users code."},"api/client-ui/interfaces/ToolbarCardProps":{"id":"api/client-ui/interfaces/ToolbarCardProps","title":"ToolbarCardProps","description":"Properties"},"api/client-ui/interfaces/ToolbarProps":{"id":"api/client-ui/interfaces/ToolbarProps","title":"ToolbarProps","description":"Properties"},"api/client-ui/interfaces/TooltipContainerProps":{"id":"api/client-ui/interfaces/TooltipContainerProps","title":"TooltipContainerProps","description":"Properties"},"api/client-ui/interfaces/TooltipProps":{"id":"api/client-ui/interfaces/TooltipProps","title":"TooltipProps","description":"Renders an element with a tooltip"},"api/client-ui/interfaces/TwoColorPointyCircleProps":{"id":"api/client-ui/interfaces/TwoColorPointyCircleProps","title":"TwoColorPointyCircleProps","description":"Properties"},"api/client-ui/interfaces/VerticalSpacerProps":{"id":"api/client-ui/interfaces/VerticalSpacerProps","title":"VerticalSpacerProps","description":"Properties"},"api/client-ui/type-aliases/Block":{"id":"api/client-ui/type-aliases/Block","title":"Block","description":"Single rectangle block value representing length"},"api/client-ui/type-aliases/BlockGroup":{"id":"api/client-ui/type-aliases/BlockGroup","title":"BlockGroup","description":"Group of blocks with the same color"},"api/client-ui/type-aliases/Column":{"id":"api/client-ui/type-aliases/Column","title":"Column\\\\","description":"Type Parameters"},"api/client-ui/type-aliases/HorizontalStackedBarRow":{"id":"api/client-ui/type-aliases/HorizontalStackedBarRow","title":"HorizontalStackedBarRow","description":"One or more BlockGroups forming a single linear stacked row"},"api/client-ui/type-aliases/RbcsMpaObjectiveRenderMsgFunction":{"id":"api/client-ui/type-aliases/RbcsMpaObjectiveRenderMsgFunction","title":"RbcsMpaObjectiveRenderMsgFunction()","description":"Parameters"},"api/client-ui/type-aliases/RbcsNetworkObjectiveRenderMsgFunction":{"id":"api/client-ui/type-aliases/RbcsNetworkObjectiveRenderMsgFunction","title":"RbcsNetworkObjectiveRenderMsgFunction()","description":"Parameters"},"api/client-ui/type-aliases/RowConfig":{"id":"api/client-ui/type-aliases/RowConfig","title":"RowConfig","description":"Type declaration"},"api/client-ui/type-aliases/StringOrNumber":{"id":"api/client-ui/type-aliases/StringOrNumber","title":"StringOrNumber","description":""},"api/client-ui/type-aliases/SUPPORTED_FORMAT":{"id":"api/client-ui/type-aliases/SUPPORTED_FORMAT","title":"SUPPORTED\\\\_FORMAT","description":""},"api/client-ui/type-aliases/TargetFormatter":{"id":"api/client-ui/type-aliases/TargetFormatter","title":"TargetFormatter()","description":"Function that given target value for current table row, the table row index, and total number of"},"api/dataproviders/index":{"id":"api/dataproviders/index","title":"dataproviders","description":"References"},"api/geoprocessing/classes/ComplexityError":{"id":"api/geoprocessing/classes/ComplexityError","title":"ComplexityError","description":"Error signifying function threw due to not being able to handle the input - e.g. size/complexity"},"api/geoprocessing/classes/GeoprocessingHandler":{"id":"api/geoprocessing/classes/GeoprocessingHandler","title":"GeoprocessingHandler\\\\","description":"Manages the task of executing a geoprocessing function within an AWS Lambda function."},"api/geoprocessing/classes/PreprocessingHandler":{"id":"api/geoprocessing/classes/PreprocessingHandler","title":"PreprocessingHandler\\\\","description":"Lambda handler for a preprocessing function"},"api/geoprocessing/classes/ProjectClientBase":{"id":"api/geoprocessing/classes/ProjectClientBase","title":"ProjectClientBase","description":"Client for reading project configuration/metadata."},"api/geoprocessing/classes/ValidationError":{"id":"api/geoprocessing/classes/ValidationError","title":"ValidationError","description":"Error signifying input is not valid"},"api/geoprocessing/classes/VectorDataSource":{"id":"api/geoprocessing/classes/VectorDataSource","title":"VectorDataSource\\\\","description":"Type Parameters"},"api/geoprocessing/enumerations/GeoprocessingTaskStatus":{"id":"api/geoprocessing/enumerations/GeoprocessingTaskStatus","title":"GeoprocessingTaskStatus","description":"Enumeration Members"},"api/geoprocessing/functions/anchorScore":{"id":"api/geoprocessing/functions/anchorScore","title":"anchorScore()","description":"Parameters"},"api/geoprocessing/functions/aquacultureScore":{"id":"api/geoprocessing/functions/aquacultureScore","title":"aquacultureScore()","description":"Parameters"},"api/geoprocessing/functions/area":{"id":"api/geoprocessing/functions/area","title":"area()","description":"Calculates the area of each sketch and collection."},"api/geoprocessing/functions/batchDelete":{"id":"api/geoprocessing/functions/batchDelete","title":"batchDelete()","description":"Parameters"},"api/geoprocessing/functions/batchDeleteTasks":{"id":"api/geoprocessing/functions/batchDeleteTasks","title":"batchDeleteTasks()","description":"Batch delete array of tasks"},"api/geoprocessing/functions/bboxOverlap":{"id":"api/geoprocessing/functions/bboxOverlap","title":"bboxOverlap()","description":"Returns whether bounding box A overlaps with or touches bounding box B"},"api/geoprocessing/functions/booleanOverlap":{"id":"api/geoprocessing/functions/booleanOverlap","title":"booleanOverlap()","description":"booleanOverlap(featureAInput, featureBInput, idProperty)"},"api/geoprocessing/functions/byteSize":{"id":"api/geoprocessing/functions/byteSize","title":"byteSize()","description":"Get length of string in bytes"},"api/geoprocessing/functions/capitalize":{"id":"api/geoprocessing/functions/capitalize","title":"capitalize()","description":"Capitalizes the first letter of string"},"api/geoprocessing/functions/chunk":{"id":"api/geoprocessing/functions/chunk","title":"chunk()","description":"Splits an array into chunks of size"},"api/geoprocessing/functions/classIdMapping":{"id":"api/geoprocessing/functions/classIdMapping","title":"classIdMapping()","description":"Returns mapping of class ID to class DataClass objects"},"api/geoprocessing/functions/classifyMPA":{"id":"api/geoprocessing/functions/classifyMPA","title":"classifyMPA()","description":"Given zone scores, returns object containing final scores, and mpa classification"},"api/geoprocessing/functions/classifyZone":{"id":"api/geoprocessing/functions/classifyZone","title":"classifyZone()","description":"Given activity scores, returns zone number"},"api/geoprocessing/functions/cleanBBox":{"id":"api/geoprocessing/functions/cleanBBox","title":"cleanBBox()","description":"Normalizes bounding box longitude values to the [-180, 180] range if they cross the antimeridian"},"api/geoprocessing/functions/cleanCoords":{"id":"api/geoprocessing/functions/cleanCoords","title":"cleanCoords()","description":"Cleans geojson coordinates to be within the bounds of the world [-90, -180, 90, 180], so that they don\'t wrap off the end, and can be split"},"api/geoprocessing/functions/clip":{"id":"api/geoprocessing/functions/clip","title":"clip()","description":"Performs one of 4 different clip operations on features"},"api/geoprocessing/functions/clipMultiMerge":{"id":"api/geoprocessing/functions/clipMultiMerge","title":"clipMultiMerge()","description":"Performs clip after first merging features2 coords into a single multipolygon."},"api/geoprocessing/functions/clipToPolygonDatasources":{"id":"api/geoprocessing/functions/clipToPolygonDatasources","title":"clipToPolygonDatasources()","description":"Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources"},"api/geoprocessing/functions/clipToPolygonFeatures":{"id":"api/geoprocessing/functions/clipToPolygonFeatures","title":"clipToPolygonFeatures()","description":"Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more Polygon features"},"api/geoprocessing/functions/collectionHasGeometry":{"id":"api/geoprocessing/functions/collectionHasGeometry","title":"collectionHasGeometry()","description":"Parameters"},"api/geoprocessing/functions/createMetric":{"id":"api/geoprocessing/functions/createMetric","title":"createMetric()","description":"Creates a new metric. Defaults to ID values of null and then copies in passed metric properties"},"api/geoprocessing/functions/createMetrics":{"id":"api/geoprocessing/functions/createMetrics","title":"createMetrics()","description":"Creates fully defined metrics from partial. Metric values not provided are initialized to null"},"api/geoprocessing/functions/ensureValidPolygon":{"id":"api/geoprocessing/functions/ensureValidPolygon","title":"ensureValidPolygon()","description":"Returns true if feature is valid and meets requirements set by options."},"api/geoprocessing/functions/featureToSketch":{"id":"api/geoprocessing/functions/featureToSketch","title":"featureToSketch()","description":"Converts Feature to Sketch with reasonable defaults given for sketch properties if not provided"},"api/geoprocessing/functions/featureToSketchCollection":{"id":"api/geoprocessing/functions/featureToSketchCollection","title":"featureToSketchCollection()","description":"Converts FeatureCollection to SketchCollection with reasonable defaults given for sketch properties if not provided"},"api/geoprocessing/functions/fetchGeoJSON":{"id":"api/geoprocessing/functions/fetchGeoJSON","title":"fetchGeoJSON()","description":"Given geoprocessing function request, fetches the GeoJSON, which can also be sketch JSON"},"api/geoprocessing/functions/fgbFetchAll":{"id":"api/geoprocessing/functions/fgbFetchAll","title":"~~fgbFetchAll()~~","description":"Fetch features from flatgeobuf at url within bounding box"},"api/geoprocessing/functions/fgBoundingBox":{"id":"api/geoprocessing/functions/fgBoundingBox","title":"fgBoundingBox()","description":"Parameters"},"api/geoprocessing/functions/findAndUpdateMetricValue":{"id":"api/geoprocessing/functions/findAndUpdateMetricValue","title":"findAndUpdateMetricValue()","description":"Returns new sketchMetrics array with first sketchMetric matched set with new value."},"api/geoprocessing/functions/firstMatching":{"id":"api/geoprocessing/functions/firstMatching","title":"firstMatching()","description":"Returns the first item that returns true for filter"},"api/geoprocessing/functions/firstMatchingMetric":{"id":"api/geoprocessing/functions/firstMatchingMetric","title":"firstMatchingMetric()","description":"Returns the first metric that returns true for metricFilter"},"api/geoprocessing/functions/flattenByGroupAllClass":{"id":"api/geoprocessing/functions/flattenByGroupAllClass","title":"flattenByGroupAllClass()","description":"Aggregates metrics by group"},"api/geoprocessing/functions/flattenByGroupSketchAllClass":{"id":"api/geoprocessing/functions/flattenByGroupSketchAllClass","title":"flattenByGroupSketchAllClass()","description":"Flattens group class metrics, one for each group and sketch."},"api/geoprocessing/functions/flattenBySketchAllClass":{"id":"api/geoprocessing/functions/flattenBySketchAllClass","title":"flattenBySketchAllClass()","description":"Flattens class sketch metrics into array of objects, one for each sketch,"},"api/geoprocessing/functions/flattenSketchAllId":{"id":"api/geoprocessing/functions/flattenSketchAllId","title":"~~flattenSketchAllId()~~","description":"Returns one aggregate object for every sketch ID present in metrics,"},"api/geoprocessing/functions/gearTypeScore":{"id":"api/geoprocessing/functions/gearTypeScore","title":"gearTypeScore()","description":"Parameters"},"api/geoprocessing/functions/genClipLoader":{"id":"api/geoprocessing/functions/genClipLoader","title":"~~genClipLoader()~~","description":"Given a project client and 1 or more clip operations, returns a function that when called"},"api/geoprocessing/functions/genClipToPolygonDatasources":{"id":"api/geoprocessing/functions/genClipToPolygonDatasources","title":"genClipToPolygonDatasources()","description":"Returns a function that Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources"},"api/geoprocessing/functions/genClipToPolygonFeatures":{"id":"api/geoprocessing/functions/genClipToPolygonFeatures","title":"genClipToPolygonFeatures()","description":"Returns a function that applies clip operations to a feature using other polygon features."},"api/geoprocessing/functions/genFeature":{"id":"api/geoprocessing/functions/genFeature","title":"genFeature()","description":"Returns a Feature with given features geometry and properties. Reasonable defaults are given for properties not provided"},"api/geoprocessing/functions/genFeatureCollection":{"id":"api/geoprocessing/functions/genFeatureCollection","title":"genFeatureCollection()","description":"Given array of features, return a feature collection with given properties."},"api/geoprocessing/functions/genRandomPolygons":{"id":"api/geoprocessing/functions/genRandomPolygons","title":"genRandomPolygons()","description":"Generates random polygons within provided bounds. numPolygons defaults to 300, maxradiallength to 0.5"},"api/geoprocessing/functions/genSampleNullSketch":{"id":"api/geoprocessing/functions/genSampleNullSketch","title":"genSampleNullSketch()","description":"Returns a Sketch with given geometry and Geometry type, Properties are reasonable random"},"api/geoprocessing/functions/genSampleNullSketchCollection":{"id":"api/geoprocessing/functions/genSampleNullSketchCollection","title":"genSampleNullSketchCollection()","description":"Given feature collection, return a sketch collection with reasonable random props."},"api/geoprocessing/functions/genSampleSketch":{"id":"api/geoprocessing/functions/genSampleSketch","title":"genSampleSketch()","description":"Returns a Sketch with given geometry and Geometry type, Properties are reasonable random"},"api/geoprocessing/functions/genSampleSketchCollection":{"id":"api/geoprocessing/functions/genSampleSketchCollection","title":"genSampleSketchCollection()","description":"Given feature collection, return a sketch collection with reasonable random props."},"api/geoprocessing/functions/genSampleSketchCollectionFromSketches":{"id":"api/geoprocessing/functions/genSampleSketchCollectionFromSketches","title":"genSampleSketchCollectionFromSketches()","description":"Given feature collection, return a sketch collection with reasonable random props."},"api/geoprocessing/functions/genSampleSketchContext":{"id":"api/geoprocessing/functions/genSampleSketchContext","title":"genSampleSketchContext()","description":"Returns"},"api/geoprocessing/functions/genSampleUserAttributes":{"id":"api/geoprocessing/functions/genSampleUserAttributes","title":"genSampleUserAttributes()","description":"Returns"},"api/geoprocessing/functions/genSketch":{"id":"api/geoprocessing/functions/genSketch","title":"genSketch()","description":"Returns a Sketch with given features geometry and properties. Reasonable defaults are given for properties not provided"},"api/geoprocessing/functions/genSketchCollection":{"id":"api/geoprocessing/functions/genSketchCollection","title":"genSketchCollection()","description":"Given array of sketches, return a sketch collection with given properties."},"api/geoprocessing/functions/genTaskCacheKey":{"id":"api/geoprocessing/functions/genTaskCacheKey","title":"genTaskCacheKey()","description":"Generates a cache key for a geoprocessing request, given sketch properties and optional extra parameters (must be JSON compatible object)"},"api/geoprocessing/functions/genZodErrorMessage":{"id":"api/geoprocessing/functions/genZodErrorMessage","title":"genZodErrorMessage()","description":"Parameters"},"api/geoprocessing/functions/getArea":{"id":"api/geoprocessing/functions/getArea","title":"getArea()","description":"Returns area of valid raster cells (not nodata) overlapping with feature. If no valid cells found, returns 0."},"api/geoprocessing/functions/getClassificationLabel":{"id":"api/geoprocessing/functions/getClassificationLabel","title":"getClassificationLabel()","description":"Parameters"},"api/geoprocessing/functions/getCogFilename":{"id":"api/geoprocessing/functions/getCogFilename","title":"getCogFilename()","description":"Parameters"},"api/geoprocessing/functions/getDatasetBucketName":{"id":"api/geoprocessing/functions/getDatasetBucketName","title":"getDatasetBucketName()","description":"Type Parameters"},"api/geoprocessing/functions/getDatasourceById":{"id":"api/geoprocessing/functions/getDatasourceById","title":"getDatasourceById()","description":"find and return datasource from passed datasources"},"api/geoprocessing/functions/getExternalRasterDatasourceById":{"id":"api/geoprocessing/functions/getExternalRasterDatasourceById","title":"getExternalRasterDatasourceById()","description":"find and return external raster datasource from passed datasources"},"api/geoprocessing/functions/getExternalVectorDatasourceById":{"id":"api/geoprocessing/functions/getExternalVectorDatasourceById","title":"getExternalVectorDatasourceById()","description":"find and return external vector datasource from passed datasources"},"api/geoprocessing/functions/getFeatures":{"id":"api/geoprocessing/functions/getFeatures","title":"getFeatures()","description":"Returns features for a variety of vector datasources and formats, with additional filter options"},"api/geoprocessing/functions/getFeaturesForSketchBBoxes":{"id":"api/geoprocessing/functions/getFeaturesForSketchBBoxes","title":"getFeaturesForSketchBBoxes()","description":"Loads features from a FlatGeobuf referenced by URL, which intersect the"},"api/geoprocessing/functions/getFirstFromParam":{"id":"api/geoprocessing/functions/getFirstFromParam","title":"getFirstFromParam()","description":"Returns first element from param object at paramName key. Parameter can be string or array of strings"},"api/geoprocessing/functions/getFlatGeobufFilename":{"id":"api/geoprocessing/functions/getFlatGeobufFilename","title":"getFlatGeobufFilename()","description":"Returns datasource filename in flatgeobuf format"},"api/geoprocessing/functions/getFlatGeobufPath":{"id":"api/geoprocessing/functions/getFlatGeobufPath","title":"getFlatGeobufPath()","description":"Parameters"},"api/geoprocessing/functions/getGeopackagePath":{"id":"api/geoprocessing/functions/getGeopackagePath","title":"getGeopackagePath()","description":"Parameters"},"api/geoprocessing/functions/getHistogram":{"id":"api/geoprocessing/functions/getHistogram","title":"getHistogram()","description":"Returns histogram of value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0."},"api/geoprocessing/functions/getIndexIconPerc":{"id":"api/geoprocessing/functions/getIndexIconPerc","title":"getIndexIconPerc()","description":"Returns percent protection given index value,"},"api/geoprocessing/functions/getInternalRasterDatasourceById":{"id":"api/geoprocessing/functions/getInternalRasterDatasourceById","title":"getInternalRasterDatasourceById()","description":"find and return internal datasource from passed datasources"},"api/geoprocessing/functions/getInternalVectorDatasourceById":{"id":"api/geoprocessing/functions/getInternalVectorDatasourceById","title":"getInternalVectorDatasourceById()","description":"find and return internal vector datasource from passed datasources"},"api/geoprocessing/functions/getIucnCategoryForActivities":{"id":"api/geoprocessing/functions/getIucnCategoryForActivities","title":"getIucnCategoryForActivities()","description":"Given list of allowed activities in the sketch, returns the highest category allowable"},"api/geoprocessing/functions/getIucnCategoryForSketches":{"id":"api/geoprocessing/functions/getIucnCategoryForSketches","title":"getIucnCategoryForSketches()","description":"Return Category for each sketch keyed by sketchId"},"api/geoprocessing/functions/getIucnCategoryNameForSketches":{"id":"api/geoprocessing/functions/getIucnCategoryNameForSketches","title":"getIucnCategoryNameForSketches()","description":"Return Category name for each sketch keyed by sketchId"},"api/geoprocessing/functions/getIucnLevelNameForSketches":{"id":"api/geoprocessing/functions/getIucnLevelNameForSketches","title":"getIucnLevelNameForSketches()","description":"Return level name for each sketch keyed by sketchId"},"api/geoprocessing/functions/getJsonFilename":{"id":"api/geoprocessing/functions/getJsonFilename","title":"getJsonFilename()","description":"Returns datasource filename in geojson format"},"api/geoprocessing/functions/getJsonPath":{"id":"api/geoprocessing/functions/getJsonPath","title":"getJsonPath()","description":"Parameters"},"api/geoprocessing/functions/getJsonUserAttribute":{"id":"api/geoprocessing/functions/getJsonUserAttribute","title":"getJsonUserAttribute()","description":"Type Parameters"},"api/geoprocessing/functions/getKeys":{"id":"api/geoprocessing/functions/getKeys","title":"getKeys()","description":"Object.keys helper that returns strongly typed key values. Uses assertion so make sure your type covers all the keys!"},"api/geoprocessing/functions/getMetricGroupObjectiveId":{"id":"api/geoprocessing/functions/getMetricGroupObjectiveId","title":"getMetricGroupObjectiveId()","description":"Returns the top-level objective assigned for the given MetricGroup."},"api/geoprocessing/functions/getMetricGroupObjectiveIds":{"id":"api/geoprocessing/functions/getMetricGroupObjectiveIds","title":"getMetricGroupObjectiveIds()","description":"Returns array of all objective IDs configured for the given MetricGroup."},"api/geoprocessing/functions/getMinYesCountMap":{"id":"api/geoprocessing/functions/getMinYesCountMap","title":"getMinYesCountMap()","description":"Returns an object mapping objective ID to ID of first classification that counts toward objective"},"api/geoprocessing/functions/getMpaClassificationName":{"id":"api/geoprocessing/functions/getMpaClassificationName","title":"getMpaClassificationName()","description":"Returns protection level given MPA classification index value"},"api/geoprocessing/functions/getObjectiveById":{"id":"api/geoprocessing/functions/getObjectiveById","title":"getObjectiveById()","description":"find and return objectives from passed objectives"},"api/geoprocessing/functions/getParamStringArray":{"id":"api/geoprocessing/functions/getParamStringArray","title":"getParamStringArray()","description":"Validates and returns string[] parameter from extraParams. If param missing it returns an empty array"},"api/geoprocessing/functions/getRasterBoxSpherical":{"id":"api/geoprocessing/functions/getRasterBoxSpherical","title":"getRasterBoxSpherical()","description":"Parameters"},"api/geoprocessing/functions/getRasterDatasourceById":{"id":"api/geoprocessing/functions/getRasterDatasourceById","title":"getRasterDatasourceById()","description":"find and return raster datasource (internal or external) from passed datasources"},"api/geoprocessing/functions/getSketchCollectionChildIds":{"id":"api/geoprocessing/functions/getSketchCollectionChildIds","title":"~~getSketchCollectionChildIds()~~","description":"Given sketch collection, returns IDs of sketches in the collection"},"api/geoprocessing/functions/getSketchFeatures":{"id":"api/geoprocessing/functions/getSketchFeatures","title":"getSketchFeatures()","description":"Given sketch or sketch collection, returns just the individual sketch features inside."},"api/geoprocessing/functions/getSketchToMpaProtectionLevel":{"id":"api/geoprocessing/functions/getSketchToMpaProtectionLevel","title":"getSketchToMpaProtectionLevel()","description":"Returns object mapping sketch id to MPA classification"},"api/geoprocessing/functions/getSum":{"id":"api/geoprocessing/functions/getSum","title":"getSum()","description":"Returns sum of raster value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0."},"api/geoprocessing/functions/getUserAttribute":{"id":"api/geoprocessing/functions/getUserAttribute","title":"getUserAttribute()","description":"getUserAttribute(sketchOrProps, exportid)"},"api/geoprocessing/functions/getVectorDatasourceById":{"id":"api/geoprocessing/functions/getVectorDatasourceById","title":"getVectorDatasourceById()","description":"find and return vector datasource (internal or external) from passed datasources"},"api/geoprocessing/functions/getZoneClassificationName":{"id":"api/geoprocessing/functions/getZoneClassificationName","title":"getZoneClassificationName()","description":"Parameters"},"api/geoprocessing/functions/groupBy":{"id":"api/geoprocessing/functions/groupBy","title":"groupBy()","description":"Similar to lodash groupBy"},"api/geoprocessing/functions/hasOwnProperty":{"id":"api/geoprocessing/functions/hasOwnProperty","title":"hasOwnProperty()","description":"Type narrowing to allow property checking when object can be multiple types"},"api/geoprocessing/functions/includeVirtualSketch":{"id":"api/geoprocessing/functions/includeVirtualSketch","title":"includeVirtualSketch()","description":"If sketch collection passes sketchTest, then returns new collection"},"api/geoprocessing/functions/intersectInChunks":{"id":"api/geoprocessing/functions/intersectInChunks","title":"intersectInChunks()","description":"Calculates area overlap between a feature A and a feature array B."},"api/geoprocessing/functions/intersectInChunksArea":{"id":"api/geoprocessing/functions/intersectInChunksArea","title":"intersectInChunksArea()","description":"Calculates area overlap between a feature A and a feature array B."},"api/geoprocessing/functions/intersectSum":{"id":"api/geoprocessing/functions/intersectSum","title":"intersectSum()","description":"Sums the value of intersecting features. No support for partial, counts the whole feature"},"api/geoprocessing/functions/isExternalDatasource":{"id":"api/geoprocessing/functions/isExternalDatasource","title":"isExternalDatasource()","description":"Parameters"},"api/geoprocessing/functions/isExternalRasterDatasource":{"id":"api/geoprocessing/functions/isExternalRasterDatasource","title":"isExternalRasterDatasource()","description":"Parameters"},"api/geoprocessing/functions/isExternalVectorDatasource":{"id":"api/geoprocessing/functions/isExternalVectorDatasource","title":"isExternalVectorDatasource()","description":"Parameters"},"api/geoprocessing/functions/isFeature":{"id":"api/geoprocessing/functions/isFeature","title":"isFeature()","description":"Check if object is a Feature. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isFeatureCollection":{"id":"api/geoprocessing/functions/isFeatureCollection","title":"isFeatureCollection()","description":"Check if object is a Feature Collection. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isGeometry":{"id":"api/geoprocessing/functions/isGeometry","title":"isGeometry()","description":"Check if object is a Feature. Any code inside a block guarded by a conditional call to this function will have type narrowed to Feature"},"api/geoprocessing/functions/isImportRasterDatasourceConfig":{"id":"api/geoprocessing/functions/isImportRasterDatasourceConfig","title":"isImportRasterDatasourceConfig()","description":"Parameters"},"api/geoprocessing/functions/isImportVectorDatasourceConfig":{"id":"api/geoprocessing/functions/isImportVectorDatasourceConfig","title":"isImportVectorDatasourceConfig()","description":"Parameters"},"api/geoprocessing/functions/isinternalDatasource":{"id":"api/geoprocessing/functions/isinternalDatasource","title":"isinternalDatasource()","description":"Parameters"},"api/geoprocessing/functions/isInternalRasterDatasource":{"id":"api/geoprocessing/functions/isInternalRasterDatasource","title":"isInternalRasterDatasource()","description":"Parameters"},"api/geoprocessing/functions/isInternalVectorDatasource":{"id":"api/geoprocessing/functions/isInternalVectorDatasource","title":"isInternalVectorDatasource()","description":"Parameters"},"api/geoprocessing/functions/isLineStringFeature":{"id":"api/geoprocessing/functions/isLineStringFeature","title":"isLineStringFeature()","description":"Check if object is a Linestring. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isLineStringSketchCollection":{"id":"api/geoprocessing/functions/isLineStringSketchCollection","title":"isLineStringSketchCollection()","description":"Parameters"},"api/geoprocessing/functions/isMetric":{"id":"api/geoprocessing/functions/isMetric","title":"isMetric()","description":"Checks if object is a Metric and returns narrowed type"},"api/geoprocessing/functions/isMetricArray":{"id":"api/geoprocessing/functions/isMetricArray","title":"isMetricArray()","description":"Checks if object is a Metric array and returns narrowed type"},"api/geoprocessing/functions/isMetricPack":{"id":"api/geoprocessing/functions/isMetricPack","title":"isMetricPack()","description":"Checks if object is a MetricPack. Any code inside a block guarded by a conditional call to this function will have type narrowed to MetricPack"},"api/geoprocessing/functions/isMultiPolygonFeature":{"id":"api/geoprocessing/functions/isMultiPolygonFeature","title":"isMultiPolygonFeature()","description":"Check if object is a MultiPolygon. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isMultiPolygonSketch":{"id":"api/geoprocessing/functions/isMultiPolygonSketch","title":"isMultiPolygonSketch()","description":"Checks if sketch is a MultiPolygon. Any code inside a block guarded by a conditional call to this function will have type narrowed to Sketch"},"api/geoprocessing/functions/isMultiPolygonSketchCollection":{"id":"api/geoprocessing/functions/isMultiPolygonSketchCollection","title":"isMultiPolygonSketchCollection()","description":"Parameters"},"api/geoprocessing/functions/isNullSketch":{"id":"api/geoprocessing/functions/isNullSketch","title":"isNullSketch()","description":"Checks if object is a NullSketch. Any code inside a block guarded by a conditional call to this function will have type narrowed to NullSketch"},"api/geoprocessing/functions/isNullSketchCollection":{"id":"api/geoprocessing/functions/isNullSketchCollection","title":"isNullSketchCollection()","description":"Check if object is a NullSketchCollection. Any code inside a block guarded by a conditional call to this function will have type narrowed to NullSketchCollection"},"api/geoprocessing/functions/isObject":{"id":"api/geoprocessing/functions/isObject","title":"isObject()","description":"Parameters"},"api/geoprocessing/functions/isPointFeature":{"id":"api/geoprocessing/functions/isPointFeature","title":"isPointFeature()","description":"Check if object is a Point. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isPointSketchCollection":{"id":"api/geoprocessing/functions/isPointSketchCollection","title":"isPointSketchCollection()","description":"Parameters"},"api/geoprocessing/functions/isPolygonAllSketchCollection":{"id":"api/geoprocessing/functions/isPolygonAllSketchCollection","title":"isPolygonAllSketchCollection()","description":"Parameters"},"api/geoprocessing/functions/isPolygonAnyFeature":{"id":"api/geoprocessing/functions/isPolygonAnyFeature","title":"isPolygonAnyFeature()","description":"Check if object is a Polygon or MultiPolygon. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isPolygonFeature":{"id":"api/geoprocessing/functions/isPolygonFeature","title":"isPolygonFeature()","description":"Check if object is a Polygon feature. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isPolygonFeatureArray":{"id":"api/geoprocessing/functions/isPolygonFeatureArray","title":"isPolygonFeatureArray()","description":"Check if object is an array of Polygon features. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isPolygonSketch":{"id":"api/geoprocessing/functions/isPolygonSketch","title":"isPolygonSketch()","description":"Checks if sketch is a Polygon"},"api/geoprocessing/functions/isPolygonSketchCollection":{"id":"api/geoprocessing/functions/isPolygonSketchCollection","title":"isPolygonSketchCollection()","description":"Parameters"},"api/geoprocessing/functions/isRasterDatasource":{"id":"api/geoprocessing/functions/isRasterDatasource","title":"isRasterDatasource()","description":"Parameters"},"api/geoprocessing/functions/isRbcsProtectionLevel":{"id":"api/geoprocessing/functions/isRbcsProtectionLevel","title":"isRbcsProtectionLevel()","description":"Type guard for checking string is one of supported objective IDs"},"api/geoprocessing/functions/isSketch":{"id":"api/geoprocessing/functions/isSketch","title":"isSketch()","description":"Checks if object is a Sketch. Any code inside a block guarded by a conditional call to this function will have type narrowed to Sketch"},"api/geoprocessing/functions/isSketchCollection":{"id":"api/geoprocessing/functions/isSketchCollection","title":"isSketchCollection()","description":"Check if object is a SketchCollection. Any code inside a block guarded by a conditional call to this function will have type narrowed to SketchCollection"},"api/geoprocessing/functions/isTruthyAttributeValue":{"id":"api/geoprocessing/functions/isTruthyAttributeValue","title":"isTruthyAttributeValue()","description":"Parameters"},"api/geoprocessing/functions/isVectorDatasource":{"id":"api/geoprocessing/functions/isVectorDatasource","title":"isVectorDatasource()","description":"Parameters"},"api/geoprocessing/functions/keyBy":{"id":"api/geoprocessing/functions/keyBy","title":"keyBy()","description":"Similar to lodash keyBy"},"api/geoprocessing/functions/loadCog":{"id":"api/geoprocessing/functions/loadCog","title":"loadCog()","description":"Returns cog-aware georaster at given url. Will not fetch raster values"},"api/geoprocessing/functions/loadFgb":{"id":"api/geoprocessing/functions/loadFgb","title":"loadFgb()","description":"Fetch features from flatgeobuf at url that intersect with bounding box"},"api/geoprocessing/functions/maxWidth":{"id":"api/geoprocessing/functions/maxWidth","title":"maxWidth()","description":"Returns the maximum width of the geojson or bbox"},"api/geoprocessing/functions/metricsForSketch":{"id":"api/geoprocessing/functions/metricsForSketch","title":"metricsForSketch()","description":"Returns metrics for given sketch (can be an array of sketches)"},"api/geoprocessing/functions/metricsSketchIds":{"id":"api/geoprocessing/functions/metricsSketchIds","title":"metricsSketchIds()","description":"Returns metrics with matching sketchId (can be an array of sketchids)"},"api/geoprocessing/functions/metricsWithClassId":{"id":"api/geoprocessing/functions/metricsWithClassId","title":"metricsWithClassId()","description":"Returns metrics with matching sketchId (can be an array of sketchids)"},"api/geoprocessing/functions/metricsWithSketchId":{"id":"api/geoprocessing/functions/metricsWithSketchId","title":"metricsWithSketchId()","description":"Returns metrics with matching sketchId (can be an array of sketchids)"},"api/geoprocessing/functions/minWidth":{"id":"api/geoprocessing/functions/minWidth","title":"minWidth()","description":"Returns the minimum width of the bounding box of given feature"},"api/geoprocessing/functions/mpaClassMetric":{"id":"api/geoprocessing/functions/mpaClassMetric","title":"mpaClassMetric()","description":"Given sketch for rbcsMpa with rbcs activity userAttributes,"},"api/geoprocessing/functions/mpaClassMetrics":{"id":"api/geoprocessing/functions/mpaClassMetrics","title":"mpaClassMetrics()","description":"Given sketch for rbcsMpa or collection of sketches for rbcsMpas with rbcs activity userAttributes,"},"api/geoprocessing/functions/nestMetrics":{"id":"api/geoprocessing/functions/nestMetrics","title":"nestMetrics()","description":"Recursively groups metrics by ID in order of ids specified to create arbitrary nested hierarchy for fast lookup."},"api/geoprocessing/functions/numberFormat":{"id":"api/geoprocessing/functions/numberFormat","title":"numberFormat()","description":"Formats number to string, if less than zero will leave as-is, otherwise will format as large number"},"api/geoprocessing/functions/overlapArea":{"id":"api/geoprocessing/functions/overlapArea","title":"overlapArea()","description":"Assuming sketches are within some outer boundary with size outerArea,"},"api/geoprocessing/functions/overlapAreaGroupMetrics":{"id":"api/geoprocessing/functions/overlapAreaGroupMetrics","title":"overlapAreaGroupMetrics()","description":"Generate overlap group metrics using overlapArea operation"},"api/geoprocessing/functions/overlapFeatures":{"id":"api/geoprocessing/functions/overlapFeatures","title":"overlapFeatures()","description":"Calculates overlap between sketch(es) and an array of polygon features."},"api/geoprocessing/functions/overlapFeaturesGroupMetrics":{"id":"api/geoprocessing/functions/overlapFeaturesGroupMetrics","title":"overlapFeaturesGroupMetrics()","description":"Generate overlap group metrics using overlapFeatures operation"},"api/geoprocessing/functions/overlapGroupMetrics":{"id":"api/geoprocessing/functions/overlapGroupMetrics","title":"overlapGroupMetrics()","description":"Given overlap metrics stratified by class and sketch, returns new metrics also stratified by group"},"api/geoprocessing/functions/overlapRasterClass":{"id":"api/geoprocessing/functions/overlapRasterClass","title":"~~overlapRasterClass()~~","description":"Calculates sum of overlap between sketches and a categorical raster with numeric values representing feature classes"},"api/geoprocessing/functions/overlapRasterGroupMetrics":{"id":"api/geoprocessing/functions/overlapRasterGroupMetrics","title":"overlapRasterGroupMetrics()","description":"Generate overlap group metrics using rasterMetrics operation"},"api/geoprocessing/functions/overlapSubarea":{"id":"api/geoprocessing/functions/overlapSubarea","title":"~~overlapSubarea()~~","description":"Returns area stats for sketch input after performing overlay operation against a subarea feature."},"api/geoprocessing/functions/packMetrics":{"id":"api/geoprocessing/functions/packMetrics","title":"packMetrics()","description":"Converts Metric array to a new MetricPack."},"api/geoprocessing/functions/parseGeoraster":{"id":"api/geoprocessing/functions/parseGeoraster","title":"parseGeoraster()","description":"Parameters"},"api/geoprocessing/functions/parseLambdaResponse":{"id":"api/geoprocessing/functions/parseLambdaResponse","title":"parseLambdaResponse()","description":"Parses result from worker lambda"},"api/geoprocessing/functions/percentGoalWithEdge":{"id":"api/geoprocessing/functions/percentGoalWithEdge","title":"percentGoalWithEdge()","description":"Special percent formatter designed to produce readable percent values for display given an upper percent goal"},"api/geoprocessing/functions/percentWithEdge":{"id":"api/geoprocessing/functions/percentWithEdge","title":"percentWithEdge()","description":"Special percent formatter designed to produce readable percent values for"},"api/geoprocessing/functions/randomFloat":{"id":"api/geoprocessing/functions/randomFloat","title":"randomFloat()","description":"Parameters"},"api/geoprocessing/functions/randomInt":{"id":"api/geoprocessing/functions/randomInt","title":"randomInt()","description":"Parameters"},"api/geoprocessing/functions/rasterMetrics":{"id":"api/geoprocessing/functions/rasterMetrics","title":"rasterMetrics()","description":"Calculates summary metrics (stats/area) on given raster, optionally intersecting raster with provided feature (zonal statistics)."},"api/geoprocessing/functions/rasterStats":{"id":"api/geoprocessing/functions/rasterStats","title":"rasterStats()","description":"Calculates over 10 different raster statistics, optionally constrains to raster cells overlapping with feature (zonal statistics)."},"api/geoprocessing/functions/rasterStatsToMetrics":{"id":"api/geoprocessing/functions/rasterStatsToMetrics","title":"rasterStatsToMetrics()","description":"Converts an array of geoblaze raster StatsObjects to an array of Metrics"},"api/geoprocessing/functions/rbcsMpaToMetric":{"id":"api/geoprocessing/functions/rbcsMpaToMetric","title":"rbcsMpaToMetric()","description":"Parameters"},"api/geoprocessing/functions/rbcsZoneToMetric":{"id":"api/geoprocessing/functions/rbcsZoneToMetric","title":"rbcsZoneToMetric()","description":"Transforms an rbcs zone object to a metric"},"api/geoprocessing/functions/rekeyMetrics":{"id":"api/geoprocessing/functions/rekeyMetrics","title":"rekeyMetrics()","description":"Reorders metrics (by mutation) to a consistent key order for readability"},"api/geoprocessing/functions/rekeyObject":{"id":"api/geoprocessing/functions/rekeyObject","title":"rekeyObject()","description":"Reorders object, mutating in place, in the order provided"},"api/geoprocessing/functions/removeSketchCollPolygonHoles":{"id":"api/geoprocessing/functions/removeSketchCollPolygonHoles","title":"removeSketchCollPolygonHoles()","description":"Parameters"},"api/geoprocessing/functions/removeSketchPolygonHoles":{"id":"api/geoprocessing/functions/removeSketchPolygonHoles","title":"removeSketchPolygonHoles()","description":"Parameters"},"api/geoprocessing/functions/roundDecimal":{"id":"api/geoprocessing/functions/roundDecimal","title":"roundDecimal()","description":"Rounds number to a fixed number of decimals"},"api/geoprocessing/functions/roundDecimalFormat":{"id":"api/geoprocessing/functions/roundDecimalFormat","title":"roundDecimalFormat()","description":"Rounds number to a fixed number of decimals, then formats as a human readable string"},"api/geoprocessing/functions/roundLower":{"id":"api/geoprocessing/functions/roundLower","title":"roundLower()","description":"Formats number to string, rounding decimal to number of digits, if value is less than lower will clamp to lower value"},"api/geoprocessing/functions/runLambdaWorker":{"id":"api/geoprocessing/functions/runLambdaWorker","title":"runLambdaWorker()","description":"Runs a function on a specified lambda worker"},"api/geoprocessing/functions/sampleSketchReportContextValue":{"id":"api/geoprocessing/functions/sampleSketchReportContextValue","title":"sampleSketchReportContextValue()","description":"Creates a ReportContextValue object for a Sketch with sample values. overrides will be merged in, replacing default values"},"api/geoprocessing/functions/scanTasks":{"id":"api/geoprocessing/functions/scanTasks","title":"scanTasks()","description":"Parameters"},"api/geoprocessing/functions/sketchToId":{"id":"api/geoprocessing/functions/sketchToId","title":"sketchToId()","description":"Given sketch(es), returns ID(s)"},"api/geoprocessing/functions/sketchToZone":{"id":"api/geoprocessing/functions/sketchToZone","title":"sketchToZone()","description":"Parameters"},"api/geoprocessing/functions/sortMetrics":{"id":"api/geoprocessing/functions/sortMetrics","title":"sortMetrics()","description":"Sorts metrics to a consistent order for readability"},"api/geoprocessing/functions/sortMetricsDisplayOrder":{"id":"api/geoprocessing/functions/sortMetricsDisplayOrder","title":"sortMetricsDisplayOrder()","description":"Sorts metrics by ID given a user-defined metric dimension (sortId) and array of ID"},"api/geoprocessing/functions/splitBBoxAntimeridian":{"id":"api/geoprocessing/functions/splitBBoxAntimeridian","title":"splitBBoxAntimeridian()","description":"If bounding box crosses antimeridian (and extends outside the range of -180 to 180),"},"api/geoprocessing/functions/splitFeatureAntimeridian":{"id":"api/geoprocessing/functions/splitFeatureAntimeridian","title":"splitFeatureAntimeridian()","description":"Splits a Feature or FeatureCollection on the 180 degree antimeridian."},"api/geoprocessing/functions/splitSketchAntimeridian":{"id":"api/geoprocessing/functions/splitSketchAntimeridian","title":"splitSketchAntimeridian()","description":"Splits a Sketch or SketchCollection on the 180 degree antimeridian"},"api/geoprocessing/functions/squareMeterToKilometer":{"id":"api/geoprocessing/functions/squareMeterToKilometer","title":"squareMeterToKilometer()","description":"Converts value from square meters to square kilometers"},"api/geoprocessing/functions/squareMeterToMile":{"id":"api/geoprocessing/functions/squareMeterToMile","title":"squareMeterToMile()","description":"Converts value from square meters to square miles"},"api/geoprocessing/functions/testWithinPerc":{"id":"api/geoprocessing/functions/testWithinPerc","title":"testWithinPerc()","description":"Expects that testValue is equal to expectedValue or optionally within percentage (defaults to .01 or 1%)"},"api/geoprocessing/functions/toChildProperties":{"id":"api/geoprocessing/functions/toChildProperties","title":"toChildProperties()","description":"Returns SketchProperties for each child sketch in a SketchCollection"},"api/geoprocessing/functions/toFeatureArray":{"id":"api/geoprocessing/functions/toFeatureArray","title":"toFeatureArray()","description":"Helper to convert a Feature or a FeatureCollection to a Feature array"},"api/geoprocessing/functions/toFeaturePolygonArray":{"id":"api/geoprocessing/functions/toFeaturePolygonArray","title":"toFeaturePolygonArray()","description":"Parameters"},"api/geoprocessing/functions/toNullSketch":{"id":"api/geoprocessing/functions/toNullSketch","title":"toNullSketch()","description":"Returns sketch or sketch collection with null geometry"},"api/geoprocessing/functions/toNullSketchArray":{"id":"api/geoprocessing/functions/toNullSketchArray","title":"toNullSketchArray()","description":"Helper to convert a NullSketch or NullSketchCollection to a NullSketch array"},"api/geoprocessing/functions/toPercentMetric":{"id":"api/geoprocessing/functions/toPercentMetric","title":"toPercentMetric()","description":"Matches numerator metrics with denominator metrics and divides their value,"},"api/geoprocessing/functions/toRasterProjection":{"id":"api/geoprocessing/functions/toRasterProjection","title":"toRasterProjection()","description":"Reprojects a feature to the same projection as the raster."},"api/geoprocessing/functions/toShortSketches":{"id":"api/geoprocessing/functions/toShortSketches","title":"~~toShortSketches()~~","description":"Returns an array of shorthand sketches (id + name) given a Sketch or SketchCollection."},"api/geoprocessing/functions/toSketchArray":{"id":"api/geoprocessing/functions/toSketchArray","title":"toSketchArray()","description":"Converts a Sketch or SketchCollection to a Sketch array, maintaining geometry type"},"api/geoprocessing/functions/toSketchPropertiesArray":{"id":"api/geoprocessing/functions/toSketchPropertiesArray","title":"toSketchPropertiesArray()","description":"Converts array of sketches to an array of their SketchProperties"},"api/geoprocessing/functions/unpackMetrics":{"id":"api/geoprocessing/functions/unpackMetrics","title":"unpackMetrics()","description":"Converts MetricPack to a new Metric array."},"api/geoprocessing/functions/updateCommandsSync":{"id":"api/geoprocessing/functions/updateCommandsSync","title":"updateCommandsSync()","description":"Run dynamodb update commands synchronously to avoid throttling, retrying on ThroughputError"},"api/geoprocessing/functions/valueFormatter":{"id":"api/geoprocessing/functions/valueFormatter","title":"valueFormatter()","description":"Given a number or string value and the name of a formatter function, returns a formatted value"},"api/geoprocessing/functions/zeroPolygon":{"id":"api/geoprocessing/functions/zeroPolygon","title":"zeroPolygon()","description":"Returns a zero polygon geometry (three [0,0] coordinates)"},"api/geoprocessing/functions/zeroSketch":{"id":"api/geoprocessing/functions/zeroSketch","title":"zeroSketch()","description":"Given sketch, returns the mutated sketch with a zero polygon geometry (three [0,0] coordinates)"},"api/geoprocessing/functions/zeroSketchArray":{"id":"api/geoprocessing/functions/zeroSketchArray","title":"zeroSketchArray()","description":"Given sketch array, returns the mutated sketches with a zero polygon geometry (three [0,0] coordinates)"},"api/geoprocessing/functions/zeroSketchCollection":{"id":"api/geoprocessing/functions/zeroSketchCollection","title":"zeroSketchCollection()","description":"Given sketch collection, returns the mutated collection with all child sketches switched to have zero polygon geometry (three [0,0] coordinates)"},"api/geoprocessing/functions/zoneClassMetrics":{"id":"api/geoprocessing/functions/zoneClassMetrics","title":"zoneClassMetrics()","description":"Given sketch for rbcsZone or collection of zone sketches with userAttributes for rcbs activities,"},"api/geoprocessing/index":{"id":"api/geoprocessing/index","title":"geoprocessing","description":"geoprocessing is the main module used by a geoprocessing project. It includes everything needing for creating, building, testing, and deploying a geoprocessing project with the exception of UI components which are exported separately in client-ui."},"api/geoprocessing/interfaces/BaseImportDatasourceConfig":{"id":"api/geoprocessing/interfaces/BaseImportDatasourceConfig","title":"BaseImportDatasourceConfig","description":"Properties"},"api/geoprocessing/interfaces/CalcStatsOptions":{"id":"api/geoprocessing/interfaces/CalcStatsOptions","title":"CalcStatsOptions","description":"options accepted by geoblaze.stats() to calc-stats library"},"api/geoprocessing/interfaces/ClipOptions":{"id":"api/geoprocessing/interfaces/ClipOptions","title":"ClipOptions","description":"Optional parameters for polygon clip preprocessor"},"api/geoprocessing/interfaces/DatasourceClipOperation":{"id":"api/geoprocessing/interfaces/DatasourceClipOperation","title":"DatasourceClipOperation","description":"Parameters for clip operation using a datasource"},"api/geoprocessing/interfaces/DatasourceOptions":{"id":"api/geoprocessing/interfaces/DatasourceOptions","title":"DatasourceOptions","description":"Properties"},"api/geoprocessing/interfaces/DefaultExtraParams":{"id":"api/geoprocessing/interfaces/DefaultExtraParams","title":"DefaultExtraParams","description":"Common set of extra parameters that might be passed to a geoprocessing function"},"api/geoprocessing/interfaces/Feature":{"id":"api/geoprocessing/interfaces/Feature","title":"Feature\\\\","description":"A feature object which contains a geometry and associated properties."},"api/geoprocessing/interfaces/FeatureClipOperation":{"id":"api/geoprocessing/interfaces/FeatureClipOperation","title":"FeatureClipOperation","description":"Parameters for clip operation using polygon features"},"api/geoprocessing/interfaces/FeatureCollection":{"id":"api/geoprocessing/interfaces/FeatureCollection","title":"FeatureCollection\\\\","description":"A collection of feature objects."},"api/geoprocessing/interfaces/FeatureMap":{"id":"api/geoprocessing/interfaces/FeatureMap","title":"FeatureMap","description":"A simple map of features keyed by their name"},"api/geoprocessing/interfaces/FeatureTree":{"id":"api/geoprocessing/interfaces/FeatureTree","title":"FeatureTree","description":"Properties"},"api/geoprocessing/interfaces/FgBoundingBox":{"id":"api/geoprocessing/interfaces/FgBoundingBox","title":"FgBoundingBox","description":"Properties"},"api/geoprocessing/interfaces/GeogProp":{"id":"api/geoprocessing/interfaces/GeogProp","title":"GeogProp","description":"Properties"},"api/geoprocessing/interfaces/GeometryCollection":{"id":"api/geoprocessing/interfaces/GeometryCollection","title":"GeometryCollection\\\\","description":"Geometry Collection"},"api/geoprocessing/interfaces/GeoprocessingHandlerOptions":{"id":"api/geoprocessing/interfaces/GeoprocessingHandlerOptions","title":"GeoprocessingHandlerOptions","description":"Extended by"},"api/geoprocessing/interfaces/GeoprocessingProject":{"id":"api/geoprocessing/interfaces/GeoprocessingProject","title":"GeoprocessingProject","description":"Properties"},"api/geoprocessing/interfaces/GeoprocessingRequestModel":{"id":"api/geoprocessing/interfaces/GeoprocessingRequestModel","title":"GeoprocessingRequestModel\\\\","description":"Geoprocessing request internal data model, with full objects, no JSON strings"},"api/geoprocessing/interfaces/GeoprocessingServiceMetadata":{"id":"api/geoprocessing/interfaces/GeoprocessingServiceMetadata","title":"GeoprocessingServiceMetadata","description":"Expected public service metadata for each function"},"api/geoprocessing/interfaces/GeoprocessingTask":{"id":"api/geoprocessing/interfaces/GeoprocessingTask","title":"GeoprocessingTask\\\\","description":"Type Parameters"},"api/geoprocessing/interfaces/Georaster":{"id":"api/geoprocessing/interfaces/Georaster","title":"Georaster","description":"Properties"},"api/geoprocessing/interfaces/Histogram":{"id":"api/geoprocessing/interfaces/Histogram","title":"Histogram","description":"Indexable"},"api/geoprocessing/interfaces/HistogramOptions":{"id":"api/geoprocessing/interfaces/HistogramOptions","title":"HistogramOptions","description":"Properties"},"api/geoprocessing/interfaces/IucnActivity":{"id":"api/geoprocessing/interfaces/IucnActivity","title":"IucnActivity","description":"Properties"},"api/geoprocessing/interfaces/IucnActivityRank":{"id":"api/geoprocessing/interfaces/IucnActivityRank","title":"IucnActivityRank","description":"Properties"},"api/geoprocessing/interfaces/IucnCategory":{"id":"api/geoprocessing/interfaces/IucnCategory","title":"IucnCategory","description":"Extended by"},"api/geoprocessing/interfaces/IucnCategoryCombined":{"id":"api/geoprocessing/interfaces/IucnCategoryCombined","title":"IucnCategoryCombined","description":"Extends"},"api/geoprocessing/interfaces/LineString":{"id":"api/geoprocessing/interfaces/LineString","title":"LineString","description":"LineString geometry object."},"api/geoprocessing/interfaces/MetricGroupItem":{"id":"api/geoprocessing/interfaces/MetricGroupItem","title":"MetricGroupItem\\\\","description":"Extended by"},"api/geoprocessing/interfaces/MetricPack":{"id":"api/geoprocessing/interfaces/MetricPack","title":"MetricPack","description":"Alternative JSON format for metrics data that is smaller in size, better suited for blob storage and network transport"},"api/geoprocessing/interfaces/MultiLineString":{"id":"api/geoprocessing/interfaces/MultiLineString","title":"MultiLineString","description":"MultiLineString geometry object."},"api/geoprocessing/interfaces/MultiPolygon":{"id":"api/geoprocessing/interfaces/MultiPolygon","title":"MultiPolygon","description":"MultiPolygon geometry object."},"api/geoprocessing/interfaces/Node":{"id":"api/geoprocessing/interfaces/Node","title":"Node","description":"Properties"},"api/geoprocessing/interfaces/NullSketch":{"id":"api/geoprocessing/interfaces/NullSketch","title":"NullSketch","description":"Extends"},"api/geoprocessing/interfaces/NullSketchCollection":{"id":"api/geoprocessing/interfaces/NullSketchCollection","title":"NullSketchCollection","description":"Extends"},"api/geoprocessing/interfaces/OverlapRasterOptions":{"id":"api/geoprocessing/interfaces/OverlapRasterOptions","title":"OverlapRasterOptions","description":"options accepted by rasterStats"},"api/geoprocessing/interfaces/PercentEdgeOptions":{"id":"api/geoprocessing/interfaces/PercentEdgeOptions","title":"PercentEdgeOptions","description":"Properties"},"api/geoprocessing/interfaces/Point":{"id":"api/geoprocessing/interfaces/Point","title":"Point","description":"Point geometry object."},"api/geoprocessing/interfaces/Polygon":{"id":"api/geoprocessing/interfaces/Polygon","title":"Polygon","description":"Polygon geometry object."},"api/geoprocessing/interfaces/PreprocessingHandlerOptions":{"id":"api/geoprocessing/interfaces/PreprocessingHandlerOptions","title":"PreprocessingHandlerOptions","description":"Extended by"},"api/geoprocessing/interfaces/PreprocessingRequest":{"id":"api/geoprocessing/interfaces/PreprocessingRequest","title":"PreprocessingRequest","description":"Properties"},"api/geoprocessing/interfaces/PreprocessingResponse":{"id":"api/geoprocessing/interfaces/PreprocessingResponse","title":"PreprocessingResponse\\\\","description":"Type Parameters"},"api/geoprocessing/interfaces/PreprocessingService":{"id":"api/geoprocessing/interfaces/PreprocessingService","title":"PreprocessingService","description":"Properties"},"api/geoprocessing/interfaces/PreprocessingServiceMetadata":{"id":"api/geoprocessing/interfaces/PreprocessingServiceMetadata","title":"PreprocessingServiceMetadata","description":"Extends"},"api/geoprocessing/interfaces/ProjectClientConfig":{"id":"api/geoprocessing/interfaces/ProjectClientConfig","title":"ProjectClientConfig","description":"Properties"},"api/geoprocessing/interfaces/ProjectClientInterface":{"id":"api/geoprocessing/interfaces/ProjectClientInterface","title":"ProjectClientInterface","description":"Methods"},"api/geoprocessing/interfaces/RasterStatsOptions":{"id":"api/geoprocessing/interfaces/RasterStatsOptions","title":"RasterStatsOptions","description":"options accepted by rasterStats"},"api/geoprocessing/interfaces/RbcsObjective":{"id":"api/geoprocessing/interfaces/RbcsObjective","title":"RbcsObjective","description":"Extends"},"api/geoprocessing/interfaces/RegBasedClassificationMetric":{"id":"api/geoprocessing/interfaces/RegBasedClassificationMetric","title":"RegBasedClassificationMetric","description":"Extended metric for mpa-reg-based-classification results, either zone or mpa classification"},"api/geoprocessing/interfaces/Report":{"id":"api/geoprocessing/interfaces/Report","title":"Report","description":"Represents a single report, with one or more metrics"},"api/geoprocessing/interfaces/ReportContextValue":{"id":"api/geoprocessing/interfaces/ReportContextValue","title":"ReportContextValue","description":"Provides necessary context to ReportClient components, particularly for"},"api/geoprocessing/interfaces/ReportResult":{"id":"api/geoprocessing/interfaces/ReportResult","title":"ReportResult","description":"Report results consist of collections of metrics for sketches"},"api/geoprocessing/interfaces/ReportResultBase":{"id":"api/geoprocessing/interfaces/ReportResultBase","title":"ReportResultBase","description":"Metrics for reports not associated with sketches. Used for precalculation"},"api/geoprocessing/interfaces/RootTaskItem":{"id":"api/geoprocessing/interfaces/RootTaskItem","title":"RootTaskItem\\\\","description":"Extends"},"api/geoprocessing/interfaces/RoundDecimalOptions":{"id":"api/geoprocessing/interfaces/RoundDecimalOptions","title":"RoundDecimalOptions","description":"Properties"},"api/geoprocessing/interfaces/SeaSketchReportingMessageEvent":{"id":"api/geoprocessing/interfaces/SeaSketchReportingMessageEvent","title":"SeaSketchReportingMessageEvent","description":"Properties"},"api/geoprocessing/interfaces/SeaSketchReportingToggleLanguageEvent":{"id":"api/geoprocessing/interfaces/SeaSketchReportingToggleLanguageEvent","title":"SeaSketchReportingToggleLanguageEvent","description":"Properties"},"api/geoprocessing/interfaces/SeaSketchReportingToggleLayerVisibilityEvent":{"id":"api/geoprocessing/interfaces/SeaSketchReportingToggleLayerVisibilityEvent","title":"SeaSketchReportingToggleLayerVisibilityEvent","description":"Properties"},"api/geoprocessing/interfaces/SeaSketchReportingVisibleLayersChangeEvent":{"id":"api/geoprocessing/interfaces/SeaSketchReportingVisibleLayersChangeEvent","title":"SeaSketchReportingVisibleLayersChangeEvent","description":"Properties"},"api/geoprocessing/interfaces/Sketch":{"id":"api/geoprocessing/interfaces/Sketch","title":"Sketch\\\\","description":"Extends"},"api/geoprocessing/interfaces/SketchCollection":{"id":"api/geoprocessing/interfaces/SketchCollection","title":"SketchCollection\\\\","description":"Extends"},"api/geoprocessing/interfaces/SketchMap":{"id":"api/geoprocessing/interfaces/SketchMap","title":"SketchMap","description":"A simple map of sketches and/or sketch collections keyed by their name"},"api/geoprocessing/interfaces/StatsObject":{"id":"api/geoprocessing/interfaces/StatsObject","title":"StatsObject","description":"Properties"},"api/geoprocessing/interfaces/TestExampleOutput":{"id":"api/geoprocessing/interfaces/TestExampleOutput","title":"TestExampleOutput","description":"Properties"},"api/geoprocessing/interfaces/VectorDataSourceDetails":{"id":"api/geoprocessing/interfaces/VectorDataSourceDetails","title":"VectorDataSourceDetails","description":"Properties"},"api/geoprocessing/interfaces/VectorDataSourceOptions":{"id":"api/geoprocessing/interfaces/VectorDataSourceOptions","title":"VectorDataSourceOptions","description":"Properties"},"api/geoprocessing/interfaces/VectorFeature":{"id":"api/geoprocessing/interfaces/VectorFeature","title":"VectorFeature","description":"A feature object which contains a geometry and associated properties."},"api/geoprocessing/interfaces/VectorPropertyFilter":{"id":"api/geoprocessing/interfaces/VectorPropertyFilter","title":"VectorPropertyFilter","description":"Specify one or more literal values for one or more vector Feature properties"},"api/geoprocessing/interfaces/WindowOptions":{"id":"api/geoprocessing/interfaces/WindowOptions","title":"WindowOptions","description":"defines the new raster image to generate as a window in the source raster image. Resolution (cell size) is determined from this"},"api/geoprocessing/type-aliases/bandArithmetic":{"id":"api/geoprocessing/type-aliases/bandArithmetic","title":"bandArithmetic()","description":"Parameters"},"api/geoprocessing/type-aliases/BaseDatasource":{"id":"api/geoprocessing/type-aliases/BaseDatasource","title":"BaseDatasource","description":""},"api/geoprocessing/type-aliases/BBox":{"id":"api/geoprocessing/type-aliases/BBox","title":"BBox","description":"Bounding box"},"api/geoprocessing/type-aliases/ClassificationId":{"id":"api/geoprocessing/type-aliases/ClassificationId","title":"ClassificationId","description":"Unique string ID for classification given to sketches (e.g. zone classification, protection level)"},"api/geoprocessing/type-aliases/ClassStats":{"id":"api/geoprocessing/type-aliases/ClassStats","title":"ClassStats","description":""},"api/geoprocessing/type-aliases/ClientJsonConfig":{"id":"api/geoprocessing/type-aliases/ClientJsonConfig","title":"ClientJsonConfig","description":"Represents a geoprocessing client object"},"api/geoprocessing/type-aliases/ClipOperations":{"id":"api/geoprocessing/type-aliases/ClipOperations","title":"ClipOperations","description":"Supported clip operations"},"api/geoprocessing/type-aliases/DataClass":{"id":"api/geoprocessing/type-aliases/DataClass","title":"DataClass","description":"Represents a group of data classes."},"api/geoprocessing/type-aliases/Datasource":{"id":"api/geoprocessing/type-aliases/Datasource","title":"Datasource","description":""},"api/geoprocessing/type-aliases/EezLandUnion":{"id":"api/geoprocessing/type-aliases/EezLandUnion","title":"EezLandUnion","description":""},"api/geoprocessing/type-aliases/ExecutionMode":{"id":"api/geoprocessing/type-aliases/ExecutionMode","title":"ExecutionMode","description":""},"api/geoprocessing/type-aliases/ExternalRasterDatasource":{"id":"api/geoprocessing/type-aliases/ExternalRasterDatasource","title":"ExternalRasterDatasource","description":""},"api/geoprocessing/type-aliases/ExternalVectorDatasource":{"id":"api/geoprocessing/type-aliases/ExternalVectorDatasource","title":"ExternalVectorDatasource","description":""},"api/geoprocessing/type-aliases/EXTRA_RASTER_STAT":{"id":"api/geoprocessing/type-aliases/EXTRA_RASTER_STAT","title":"EXTRA\\\\_RASTER\\\\_STAT","description":""},"api/geoprocessing/type-aliases/FunctionExtraParams":{"id":"api/geoprocessing/type-aliases/FunctionExtraParams","title":"FunctionExtraParams","description":""},"api/geoprocessing/type-aliases/GEOBLAZE_RASTER_STAT":{"id":"api/geoprocessing/type-aliases/GEOBLAZE_RASTER_STAT","title":"GEOBLAZE\\\\_RASTER\\\\_STAT","description":""},"api/geoprocessing/type-aliases/Geographies":{"id":"api/geoprocessing/type-aliases/Geographies","title":"Geographies","description":""},"api/geoprocessing/type-aliases/Geography":{"id":"api/geoprocessing/type-aliases/Geography","title":"Geography","description":""},"api/geoprocessing/type-aliases/GeoJsonProperties":{"id":"api/geoprocessing/type-aliases/GeoJsonProperties","title":"GeoJsonProperties","description":""},"api/geoprocessing/type-aliases/Geometry":{"id":"api/geoprocessing/type-aliases/Geometry","title":"Geometry","description":"Geometry object."},"api/geoprocessing/type-aliases/GeoprocessingJsonConfig":{"id":"api/geoprocessing/type-aliases/GeoprocessingJsonConfig","title":"GeoprocessingJsonConfig","description":"Represents a single JS package"},"api/geoprocessing/type-aliases/GeoprocessingRequest":{"id":"api/geoprocessing/type-aliases/GeoprocessingRequest","title":"GeoprocessingRequest\\\\","description":"Geoprocessing request sent via HTTP GET, with extraParams as url-encoded JSON string"},"api/geoprocessing/type-aliases/GeoprocessingRequestParams":{"id":"api/geoprocessing/type-aliases/GeoprocessingRequestParams","title":"GeoprocessingRequestParams","description":""},"api/geoprocessing/type-aliases/GeorasterMetadata":{"id":"api/geoprocessing/type-aliases/GeorasterMetadata","title":"GeorasterMetadata","description":""},"api/geoprocessing/type-aliases/GeoTypes":{"id":"api/geoprocessing/type-aliases/GeoTypes","title":"GeoTypes","description":""},"api/geoprocessing/type-aliases/get":{"id":"api/geoprocessing/type-aliases/get","title":"get()","description":"Parameters"},"api/geoprocessing/type-aliases/GroupMetricAgg":{"id":"api/geoprocessing/type-aliases/GroupMetricAgg","title":"GroupMetricAgg","description":"Single flattened metric with class values keyed by class name"},"api/geoprocessing/type-aliases/GroupMetricSketchAgg":{"id":"api/geoprocessing/type-aliases/GroupMetricSketchAgg","title":"GroupMetricSketchAgg","description":"Type declaration"},"api/geoprocessing/type-aliases/histogram":{"id":"api/geoprocessing/type-aliases/histogram","title":"histogram()","description":"Parameters"},"api/geoprocessing/type-aliases/identify":{"id":"api/geoprocessing/type-aliases/identify","title":"identify()","description":"Parameters"},"api/geoprocessing/type-aliases/ImportRasterDatasourceConfig":{"id":"api/geoprocessing/type-aliases/ImportRasterDatasourceConfig","title":"ImportRasterDatasourceConfig","description":""},"api/geoprocessing/type-aliases/ImportRasterDatasourceOptions":{"id":"api/geoprocessing/type-aliases/ImportRasterDatasourceOptions","title":"ImportRasterDatasourceOptions","description":""},"api/geoprocessing/type-aliases/ImportVectorDatasourceConfig":{"id":"api/geoprocessing/type-aliases/ImportVectorDatasourceConfig","title":"ImportVectorDatasourceConfig","description":"Full configuration needed to import a dataset"},"api/geoprocessing/type-aliases/ImportVectorDatasourceOptions":{"id":"api/geoprocessing/type-aliases/ImportVectorDatasourceOptions","title":"ImportVectorDatasourceOptions","description":""},"api/geoprocessing/type-aliases/InternalRasterDatasource":{"id":"api/geoprocessing/type-aliases/InternalRasterDatasource","title":"InternalRasterDatasource","description":""},"api/geoprocessing/type-aliases/InternalVectorDatasource":{"id":"api/geoprocessing/type-aliases/InternalVectorDatasource","title":"InternalVectorDatasource","description":""},"api/geoprocessing/type-aliases/ISO8601DateTime":{"id":"api/geoprocessing/type-aliases/ISO8601DateTime","title":"ISO8601DateTime","description":""},"api/geoprocessing/type-aliases/ISO8601Duration":{"id":"api/geoprocessing/type-aliases/ISO8601Duration","title":"ISO8601Duration","description":""},"api/geoprocessing/type-aliases/IucnActivityRankId":{"id":"api/geoprocessing/type-aliases/IucnActivityRankId","title":"IucnActivityRankId","description":""},"api/geoprocessing/type-aliases/JSONValue":{"id":"api/geoprocessing/type-aliases/JSONValue","title":"JSONValue","description":""},"api/geoprocessing/type-aliases/load":{"id":"api/geoprocessing/type-aliases/load","title":"load()","description":"Parameters"},"api/geoprocessing/type-aliases/LoadedPackage":{"id":"api/geoprocessing/type-aliases/LoadedPackage","title":"LoadedPackage","description":""},"api/geoprocessing/type-aliases/max":{"id":"api/geoprocessing/type-aliases/max","title":"max()","description":"Parameters"},"api/geoprocessing/type-aliases/mean":{"id":"api/geoprocessing/type-aliases/mean","title":"mean()","description":"Parameters"},"api/geoprocessing/type-aliases/median":{"id":"api/geoprocessing/type-aliases/median","title":"median()","description":"Parameters"},"api/geoprocessing/type-aliases/Metric":{"id":"api/geoprocessing/type-aliases/Metric","title":"Metric","description":"Single record of value, stratified in one or more dimensions."},"api/geoprocessing/type-aliases/MetricDimension":{"id":"api/geoprocessing/type-aliases/MetricDimension","title":"MetricDimension","description":""},"api/geoprocessing/type-aliases/MetricGroup":{"id":"api/geoprocessing/type-aliases/MetricGroup","title":"MetricGroup","description":"Represents a single metric, having one DataGroup"},"api/geoprocessing/type-aliases/MetricGroups":{"id":"api/geoprocessing/type-aliases/MetricGroups","title":"MetricGroups","description":""},"api/geoprocessing/type-aliases/MetricIdTypes":{"id":"api/geoprocessing/type-aliases/MetricIdTypes","title":"MetricIdTypes","description":""},"api/geoprocessing/type-aliases/MetricProperty":{"id":"api/geoprocessing/type-aliases/MetricProperty","title":"MetricProperty","description":""},"api/geoprocessing/type-aliases/Metrics":{"id":"api/geoprocessing/type-aliases/Metrics","title":"Metrics","description":""},"api/geoprocessing/type-aliases/min":{"id":"api/geoprocessing/type-aliases/min","title":"min()","description":"Parameters"},"api/geoprocessing/type-aliases/mode":{"id":"api/geoprocessing/type-aliases/mode","title":"mode()","description":"Parameters"},"api/geoprocessing/type-aliases/MpaClassification":{"id":"api/geoprocessing/type-aliases/MpaClassification","title":"MpaClassification","description":"Type declaration"},"api/geoprocessing/type-aliases/Nullable":{"id":"api/geoprocessing/type-aliases/Nullable","title":"Nullable\\\\","description":"Type Parameters"},"api/geoprocessing/type-aliases/Objective":{"id":"api/geoprocessing/type-aliases/Objective","title":"Objective","description":""},"api/geoprocessing/type-aliases/ObjectiveAnswer":{"id":"api/geoprocessing/type-aliases/ObjectiveAnswer","title":"ObjectiveAnswer","description":""},"api/geoprocessing/type-aliases/ObjectiveAnswerMap":{"id":"api/geoprocessing/type-aliases/ObjectiveAnswerMap","title":"ObjectiveAnswerMap","description":"Generic type for mapping classification ID to whether it counds toward or meets an objective"},"api/geoprocessing/type-aliases/ObjectiveId":{"id":"api/geoprocessing/type-aliases/ObjectiveId","title":"ObjectiveId","description":"Unique name of objective"},"api/geoprocessing/type-aliases/Objectives":{"id":"api/geoprocessing/type-aliases/Objectives","title":"Objectives","description":""},"api/geoprocessing/type-aliases/OsmLandFeature":{"id":"api/geoprocessing/type-aliases/OsmLandFeature","title":"OsmLandFeature","description":""},"api/geoprocessing/type-aliases/Package":{"id":"api/geoprocessing/type-aliases/Package","title":"Package","description":"Represents a single JS package"},"api/geoprocessing/type-aliases/PartialReportContextValue":{"id":"api/geoprocessing/type-aliases/PartialReportContextValue","title":"PartialReportContextValue","description":"Type declaration"},"api/geoprocessing/type-aliases/Position":{"id":"api/geoprocessing/type-aliases/Position","title":"Position","description":"A Position is an array of coordinates."},"api/geoprocessing/type-aliases/Project":{"id":"api/geoprocessing/type-aliases/Project","title":"Project","description":""},"api/geoprocessing/type-aliases/rasterCalculator":{"id":"api/geoprocessing/type-aliases/rasterCalculator","title":"rasterCalculator()","description":"Parameters"},"api/geoprocessing/type-aliases/RasterDatasource":{"id":"api/geoprocessing/type-aliases/RasterDatasource","title":"RasterDatasource","description":""},"api/geoprocessing/type-aliases/RbcsMpaObjectiveAnswerMap":{"id":"api/geoprocessing/type-aliases/RbcsMpaObjectiveAnswerMap","title":"RbcsMpaObjectiveAnswerMap","description":"Mapping of RBCS MPA Classification ID to whether it counts toward or meets an objective"},"api/geoprocessing/type-aliases/RbcsMpaProtectionLevel":{"id":"api/geoprocessing/type-aliases/RbcsMpaProtectionLevel","title":"RbcsMpaProtectionLevel","description":""},"api/geoprocessing/type-aliases/SketchGeometryTypes":{"id":"api/geoprocessing/type-aliases/SketchGeometryTypes","title":"SketchGeometryTypes","description":""},"api/geoprocessing/type-aliases/SketchProperties":{"id":"api/geoprocessing/type-aliases/SketchProperties","title":"SketchProperties","description":"Properties of a Sketch, defines known keys as well as unknown for extensiblity"},"api/geoprocessing/type-aliases/stats":{"id":"api/geoprocessing/type-aliases/stats","title":"stats()","description":"Parameters"},"api/geoprocessing/type-aliases/Stats-1":{"id":"api/geoprocessing/type-aliases/Stats-1","title":"Stats","description":""},"api/geoprocessing/type-aliases/sum":{"id":"api/geoprocessing/type-aliases/sum","title":"sum()","description":"Parameters"},"api/geoprocessing/type-aliases/SUPPORTED_RASTER_STAT":{"id":"api/geoprocessing/type-aliases/SUPPORTED_RASTER_STAT","title":"SUPPORTED\\\\_RASTER\\\\_STAT","description":""},"api/geoprocessing/type-aliases/SupportedFormats":{"id":"api/geoprocessing/type-aliases/SupportedFormats","title":"SupportedFormats","description":""},"api/geoprocessing/type-aliases/TaskKey":{"id":"api/geoprocessing/type-aliases/TaskKey","title":"TaskKey","description":"Type declaration"},"api/geoprocessing/type-aliases/TypedArray":{"id":"api/geoprocessing/type-aliases/TypedArray","title":"TypedArray","description":"Typed array of data values, the basic building block of a geotiff"},"api/geoprocessing/type-aliases/UserAttribute":{"id":"api/geoprocessing/type-aliases/UserAttribute","title":"UserAttribute","description":"User-defined attributes with values for Sketch. Defines known keys as well as unknown for extensiblity"},"api/geoprocessing/type-aliases/ValueFormatter":{"id":"api/geoprocessing/type-aliases/ValueFormatter","title":"ValueFormatter","description":"Options for formatting a given value."},"api/geoprocessing/type-aliases/VectorDatasource":{"id":"api/geoprocessing/type-aliases/VectorDatasource","title":"VectorDatasource","description":""},"api/geoprocessing/type-aliases/Zone":{"id":"api/geoprocessing/type-aliases/Zone","title":"Zone","description":""},"api/geoprocessing/type-aliases/ZoneColor":{"id":"api/geoprocessing/type-aliases/ZoneColor","title":"ZoneColor","description":""},"api/geoprocessing/type-aliases/ZoneId":{"id":"api/geoprocessing/type-aliases/ZoneId","title":"ZoneId","description":""},"api/geoprocessing/type-aliases/ZoneName":{"id":"api/geoprocessing/type-aliases/ZoneName","title":"ZoneName","description":""},"api/geoprocessing/variables/activityRanks":{"id":"api/geoprocessing/variables/activityRanks","title":"activityRanks","description":""},"api/geoprocessing/variables/baseDatasourceSchema":{"id":"api/geoprocessing/variables/baseDatasourceSchema","title":"baseDatasourceSchema","description":"Type declaration"},"api/geoprocessing/variables/bboxSchema":{"id":"api/geoprocessing/variables/bboxSchema","title":"bboxSchema","description":""},"api/geoprocessing/variables/box2dSchema":{"id":"api/geoprocessing/variables/box2dSchema","title":"box2dSchema","description":""},"api/geoprocessing/variables/box3dSchema":{"id":"api/geoprocessing/variables/box3dSchema","title":"box3dSchema","description":""},"api/geoprocessing/variables/classStatsSchema":{"id":"api/geoprocessing/variables/classStatsSchema","title":"classStatsSchema","description":"Pre-calculated stats by key by class"},"api/geoprocessing/variables/clientJsonConfigSchema":{"id":"api/geoprocessing/variables/clientJsonConfigSchema","title":"clientJsonConfigSchema","description":"Represents a geoprocessing client object"},"api/geoprocessing/variables/commonHeaders":{"id":"api/geoprocessing/variables/commonHeaders","title":"commonHeaders","description":"Type declaration"},"api/geoprocessing/variables/dataClassSchema":{"id":"api/geoprocessing/variables/dataClassSchema","title":"dataClassSchema","description":"Represents a single class of data. Ties it to an underlying datasource, holds attributes used for displaying in user interfaces"},"api/geoprocessing/variables/datasourceConfig":{"id":"api/geoprocessing/variables/datasourceConfig","title":"datasourceConfig","description":"Type declaration"},"api/geoprocessing/variables/datasourceFormatDescriptions":{"id":"api/geoprocessing/variables/datasourceFormatDescriptions","title":"datasourceFormatDescriptions","description":"Type declaration"},"api/geoprocessing/variables/datasourceSchema":{"id":"api/geoprocessing/variables/datasourceSchema","title":"datasourceSchema","description":""},"api/geoprocessing/variables/datasourcesSchema":{"id":"api/geoprocessing/variables/datasourcesSchema","title":"datasourcesSchema","description":""},"api/geoprocessing/variables/defaultReportContext":{"id":"api/geoprocessing/variables/defaultReportContext","title":"defaultReportContext","description":""},"api/geoprocessing/variables/DEFAULTS":{"id":"api/geoprocessing/variables/DEFAULTS","title":"DEFAULTS","description":""},"api/geoprocessing/variables/defaultStatValues":{"id":"api/geoprocessing/variables/defaultStatValues","title":"defaultStatValues","description":"Type declaration"},"api/geoprocessing/variables/externalDatasourceSchema":{"id":"api/geoprocessing/variables/externalDatasourceSchema","title":"externalDatasourceSchema","description":"Properties for external datasource"},"api/geoprocessing/variables/externalRasterDatasourceSchema":{"id":"api/geoprocessing/variables/externalRasterDatasourceSchema","title":"externalRasterDatasourceSchema","description":""},"api/geoprocessing/variables/externalVectorDatasourceSchema":{"id":"api/geoprocessing/variables/externalVectorDatasourceSchema","title":"externalVectorDatasourceSchema","description":""},"api/geoprocessing/variables/EXTRA_RASTER_STATS":{"id":"api/geoprocessing/variables/EXTRA_RASTER_STATS","title":"EXTRA\\\\_RASTER\\\\_STATS","description":"Additional raster stats calculated by geoprocessing library"},"api/geoprocessing/variables/extraParamsSchema":{"id":"api/geoprocessing/variables/extraParamsSchema","title":"extraParamsSchema","description":"Default set of additional parameters that a geoprocessing or preprocessing function can accept"},"api/geoprocessing/variables/fcSchema":{"id":"api/geoprocessing/variables/fcSchema","title":"fcSchema","description":"Zod schema for FeatureCollection containing polygons or multipolygons"},"api/geoprocessing/variables/featureSchema":{"id":"api/geoprocessing/variables/featureSchema","title":"featureSchema","description":"Zod schema for Feature containing Polygon or MultiPolygon"},"api/geoprocessing/variables/featuresSchema":{"id":"api/geoprocessing/variables/featuresSchema","title":"featuresSchema","description":""},"api/geoprocessing/variables/fixtures":{"id":"api/geoprocessing/variables/fixtures","title":"fixtures","description":"Type declaration"},"api/geoprocessing/variables/fullColor":{"id":"api/geoprocessing/variables/fullColor","title":"fullColor","description":""},"api/geoprocessing/variables/FULLY_PROTECTED_LEVEL":{"id":"api/geoprocessing/variables/FULLY_PROTECTED_LEVEL","title":"FULLY\\\\_PROTECTED\\\\_LEVEL","description":""},"api/geoprocessing/variables/GEOBLAZE_RASTER_STATS":{"id":"api/geoprocessing/variables/GEOBLAZE_RASTER_STATS","title":"GEOBLAZE\\\\_RASTER\\\\_STATS","description":"Stats supported by geoblaze.stats() function"},"api/geoprocessing/variables/geoblazeDefaultStatValues":{"id":"api/geoprocessing/variables/geoblazeDefaultStatValues","title":"geoblazeDefaultStatValues","description":"Type declaration"},"api/geoprocessing/variables/geographiesSchema":{"id":"api/geoprocessing/variables/geographiesSchema","title":"geographiesSchema","description":""},"api/geoprocessing/variables/geographySchema":{"id":"api/geoprocessing/variables/geographySchema","title":"geographySchema","description":"A geographic area (Polygon) for planning. Typically used to represent a planning area"},"api/geoprocessing/variables/geoprocessingConfigSchema":{"id":"api/geoprocessing/variables/geoprocessingConfigSchema","title":"geoprocessingConfigSchema","description":"Represents a single JS package"},"api/geoprocessing/variables/geoTypesSchema":{"id":"api/geoprocessing/variables/geoTypesSchema","title":"geoTypesSchema","description":""},"api/geoprocessing/variables/globalDatasources":{"id":"api/geoprocessing/variables/globalDatasources","title":"globalDatasources","description":"Definitive list of global datasources for geoprocessing framework"},"api/geoprocessing/variables/globalDatasourcesById":{"id":"api/geoprocessing/variables/globalDatasourcesById","title":"globalDatasourcesById","description":""},"api/geoprocessing/variables/highColor":{"id":"api/geoprocessing/variables/highColor","title":"highColor","description":""},"api/geoprocessing/variables/HIGHLY_PROTECTED_LEVEL":{"id":"api/geoprocessing/variables/HIGHLY_PROTECTED_LEVEL","title":"HIGHLY\\\\_PROTECTED\\\\_LEVEL","description":""},"api/geoprocessing/variables/importRasterDatasourceOptionsSchema":{"id":"api/geoprocessing/variables/importRasterDatasourceOptionsSchema","title":"importRasterDatasourceOptionsSchema","description":""},"api/geoprocessing/variables/importVectorDatasourceOptionsSchema":{"id":"api/geoprocessing/variables/importVectorDatasourceOptionsSchema","title":"importVectorDatasourceOptionsSchema","description":""},"api/geoprocessing/variables/internalDatasourceSchema":{"id":"api/geoprocessing/variables/internalDatasourceSchema","title":"internalDatasourceSchema","description":"Timestamp properties to ease syncing with local/published datasource files"},"api/geoprocessing/variables/internalImportSchema":{"id":"api/geoprocessing/variables/internalImportSchema","title":"internalImportSchema","description":"Properties for importing an internal datasource"},"api/geoprocessing/variables/internalRasterDatasourceSchema":{"id":"api/geoprocessing/variables/internalRasterDatasourceSchema","title":"internalRasterDatasourceSchema","description":""},"api/geoprocessing/variables/internalVectorDatasourceSchema":{"id":"api/geoprocessing/variables/internalVectorDatasourceSchema","title":"internalVectorDatasourceSchema","description":""},"api/geoprocessing/variables/internalVectorImportSchema":{"id":"api/geoprocessing/variables/internalVectorImportSchema","title":"internalVectorImportSchema","description":"Properties for import of internal vector datasources"},"api/geoprocessing/variables/iucnActivities":{"id":"api/geoprocessing/variables/iucnActivities","title":"iucnActivities","description":"Type declaration"},"api/geoprocessing/variables/iucnActivityCategories":{"id":"api/geoprocessing/variables/iucnActivityCategories","title":"iucnActivityCategories","description":""},"api/geoprocessing/variables/iucnCategoriesList":{"id":"api/geoprocessing/variables/iucnCategoriesList","title":"iucnCategoriesList","description":""},"api/geoprocessing/variables/iucnCategoriesMap":{"id":"api/geoprocessing/variables/iucnCategoriesMap","title":"iucnCategoriesMap","description":"IUCN category definitions. Note categories 2/3 and 4/6 have been merged because they have the same allowed uses"},"api/geoprocessing/variables/iucnCategoryNames":{"id":"api/geoprocessing/variables/iucnCategoryNames","title":"iucnCategoryNames","description":""},"api/geoprocessing/variables/iucnLevels":{"id":"api/geoprocessing/variables/iucnLevels","title":"iucnLevels","description":""},"api/geoprocessing/variables/jsonSchema":{"id":"api/geoprocessing/variables/jsonSchema","title":"jsonSchema","description":""},"api/geoprocessing/variables/loadedPackageSchema":{"id":"api/geoprocessing/variables/loadedPackageSchema","title":"loadedPackageSchema","description":"Stricter schema for npm package.json metadata, with most fields guaranteed present"},"api/geoprocessing/variables/lowColor":{"id":"api/geoprocessing/variables/lowColor","title":"lowColor","description":""},"api/geoprocessing/variables/measurementScalesSchema":{"id":"api/geoprocessing/variables/measurementScalesSchema","title":"measurementScalesSchema","description":""},"api/geoprocessing/variables/measurementTypesSchema":{"id":"api/geoprocessing/variables/measurementTypesSchema","title":"measurementTypesSchema","description":""},"api/geoprocessing/variables/MetricDimensions":{"id":"api/geoprocessing/variables/MetricDimensions","title":"MetricDimensions","description":"Dimensions used in Metric"},"api/geoprocessing/variables/metricGroupSchema":{"id":"api/geoprocessing/variables/metricGroupSchema","title":"metricGroupSchema","description":"Defines a metric in combination with a datasource, with one or more data classes"},"api/geoprocessing/variables/metricGroupsSchema":{"id":"api/geoprocessing/variables/metricGroupsSchema","title":"metricGroupsSchema","description":""},"api/geoprocessing/variables/MetricProperties":{"id":"api/geoprocessing/variables/MetricProperties","title":"MetricProperties","description":"Properties used in Metric"},"api/geoprocessing/variables/metricSchema":{"id":"api/geoprocessing/variables/metricSchema","title":"metricSchema","description":"Type declaration"},"api/geoprocessing/variables/metricsSchema":{"id":"api/geoprocessing/variables/metricsSchema","title":"metricsSchema","description":""},"api/geoprocessing/variables/MODERATELY_PROTECTED_LEVEL":{"id":"api/geoprocessing/variables/MODERATELY_PROTECTED_LEVEL","title":"MODERATELY\\\\_PROTECTED\\\\_LEVEL","description":""},"api/geoprocessing/variables/multipolygonSchema":{"id":"api/geoprocessing/variables/multipolygonSchema","title":"multipolygonSchema","description":"Type declaration"},"api/geoprocessing/variables/OBJECTIVE_GREEN":{"id":"api/geoprocessing/variables/OBJECTIVE_GREEN","title":"OBJECTIVE\\\\_GREEN","description":""},"api/geoprocessing/variables/OBJECTIVE_MAYBE":{"id":"api/geoprocessing/variables/OBJECTIVE_MAYBE","title":"OBJECTIVE\\\\_MAYBE","description":""},"api/geoprocessing/variables/OBJECTIVE_NO":{"id":"api/geoprocessing/variables/OBJECTIVE_NO","title":"OBJECTIVE\\\\_NO","description":""},"api/geoprocessing/variables/OBJECTIVE_RED":{"id":"api/geoprocessing/variables/OBJECTIVE_RED","title":"OBJECTIVE\\\\_RED","description":""},"api/geoprocessing/variables/OBJECTIVE_YELLOW":{"id":"api/geoprocessing/variables/OBJECTIVE_YELLOW","title":"OBJECTIVE\\\\_YELLOW","description":""},"api/geoprocessing/variables/OBJECTIVE_YES":{"id":"api/geoprocessing/variables/OBJECTIVE_YES","title":"OBJECTIVE\\\\_YES","description":""},"api/geoprocessing/variables/objectiveAnswerMapSchema":{"id":"api/geoprocessing/variables/objectiveAnswerMapSchema","title":"objectiveAnswerMapSchema","description":""},"api/geoprocessing/variables/objectiveAnswerSchema":{"id":"api/geoprocessing/variables/objectiveAnswerSchema","title":"objectiveAnswerSchema","description":""},"api/geoprocessing/variables/objectiveCountsAnswers":{"id":"api/geoprocessing/variables/objectiveCountsAnswers","title":"objectiveCountsAnswers","description":"Readonly list of possible answers for whether sketch counts toward objective"},"api/geoprocessing/variables/objectiveCountsColorMap":{"id":"api/geoprocessing/variables/objectiveCountsColorMap","title":"objectiveCountsColorMap","description":"Object mapping answers for whether sketch counts toward objective to stop light colors - green / yellow / red"},"api/geoprocessing/variables/objectiveSchema":{"id":"api/geoprocessing/variables/objectiveSchema","title":"objectiveSchema","description":"Base planning objective, extend as needed for specific classification system or ad-hoc"},"api/geoprocessing/variables/objectivesSchema":{"id":"api/geoprocessing/variables/objectivesSchema","title":"objectivesSchema","description":""},"api/geoprocessing/variables/packageSchema":{"id":"api/geoprocessing/variables/packageSchema","title":"packageSchema","description":"Schema for npm package.json metadata, as found in the wild"},"api/geoprocessing/variables/PLANNING_AREA_TYPES":{"id":"api/geoprocessing/variables/PLANNING_AREA_TYPES","title":"PLANNING\\\\_AREA\\\\_TYPES","description":""},"api/geoprocessing/variables/planningAreaTypesSchema":{"id":"api/geoprocessing/variables/planningAreaTypesSchema","title":"planningAreaTypesSchema","description":""},"api/geoprocessing/variables/polygonSchema":{"id":"api/geoprocessing/variables/polygonSchema","title":"polygonSchema","description":"Type declaration"},"api/geoprocessing/variables/POORLY_PROTECTED_LEVEL":{"id":"api/geoprocessing/variables/POORLY_PROTECTED_LEVEL","title":"POORLY\\\\_PROTECTED\\\\_LEVEL","description":""},"api/geoprocessing/variables/projectSchema":{"id":"api/geoprocessing/variables/projectSchema","title":"projectSchema","description":"Type declaration"},"api/geoprocessing/variables/rasterDatasourceSchema":{"id":"api/geoprocessing/variables/rasterDatasourceSchema","title":"rasterDatasourceSchema","description":"Properties for raster datasource"},"api/geoprocessing/variables/rbcsAnchoringActivities":{"id":"api/geoprocessing/variables/rbcsAnchoringActivities","title":"rbcsAnchoringActivities","description":""},"api/geoprocessing/variables/rbcsAquacultureActivities":{"id":"api/geoprocessing/variables/rbcsAquacultureActivities","title":"rbcsAquacultureActivities","description":""},"api/geoprocessing/variables/rbcsConstants":{"id":"api/geoprocessing/variables/rbcsConstants","title":"rbcsConstants","description":""},"api/geoprocessing/variables/rbcsGearTypes":{"id":"api/geoprocessing/variables/rbcsGearTypes","title":"rbcsGearTypes","description":""},"api/geoprocessing/variables/rbcsMpaProtectionLevels":{"id":"api/geoprocessing/variables/rbcsMpaProtectionLevels","title":"rbcsMpaProtectionLevels","description":""},"api/geoprocessing/variables/rbcsScores":{"id":"api/geoprocessing/variables/rbcsScores","title":"rbcsScores","description":""},"api/geoprocessing/variables/ReportContext":{"id":"api/geoprocessing/variables/ReportContext","title":"ReportContext","description":""},"api/geoprocessing/variables/seaSketchReportingLanguageChangeEvent":{"id":"api/geoprocessing/variables/seaSketchReportingLanguageChangeEvent","title":"seaSketchReportingLanguageChangeEvent","description":""},"api/geoprocessing/variables/seaSketchReportingMessageEventType":{"id":"api/geoprocessing/variables/seaSketchReportingMessageEventType","title":"seaSketchReportingMessageEventType","description":""},"api/geoprocessing/variables/seaSketchReportingVisibleLayersChangeEvent":{"id":"api/geoprocessing/variables/seaSketchReportingVisibleLayersChangeEvent","title":"seaSketchReportingVisibleLayersChangeEvent","description":""},"api/geoprocessing/variables/statsSchema":{"id":"api/geoprocessing/variables/statsSchema","title":"statsSchema","description":"Type declaration"},"api/geoprocessing/variables/SUPPORTED_RASTER_STATS":{"id":"api/geoprocessing/variables/SUPPORTED_RASTER_STATS","title":"SUPPORTED\\\\_RASTER\\\\_STATS","description":"Combined raster stats supported by geoprocessing library"},"api/geoprocessing/variables/supportedFormatsSchema":{"id":"api/geoprocessing/variables/supportedFormatsSchema","title":"supportedFormatsSchema","description":""},"api/geoprocessing/variables/UNPROTECTED_LEVEL":{"id":"api/geoprocessing/variables/UNPROTECTED_LEVEL","title":"UNPROTECTED\\\\_LEVEL","description":""},"api/geoprocessing/variables/vectorDatasourceSchema":{"id":"api/geoprocessing/variables/vectorDatasourceSchema","title":"vectorDatasourceSchema","description":"Properties for vector datasource"},"api/geoprocessing/variables/version":{"id":"api/geoprocessing/variables/version","title":"version","description":"Type declaration"},"api/index":{"id":"api/index","title":"Typescript API","description":"Modules","sidebar":"tutorialSidebar"},"architecture/Architecture":{"id":"architecture/Architecture","title":"Architecture","description":"Library","sidebar":"tutorialSidebar"},"CLI":{"id":"CLI","title":"Command Line Interface","description":"Each geoprocessing project provides a number of commands to get work done. They are accessible via your projects package.json scripts and run using npm run","sidebar":"tutorialSidebar"},"codespaces/codespaces":{"id":"codespaces/codespaces","title":"Github Codespaces","description":"- Github provides a server running Ubuntu Linux, pre-configured to develop your geoprocessing project. Your local VSCode editor connects to it.","sidebar":"tutorialSidebar"},"concepts/AdvancedConcepts":{"id":"concepts/AdvancedConcepts","title":"Advanced Concepts","description":"Sketching","sidebar":"tutorialSidebar"},"concepts/Concepts":{"id":"concepts/Concepts","title":"Concepts","description":"Geoprocessing projects built with this framework support step #2 and #4 in the following planning workflow, the SeaSketch platform supports the rest. They work together to provide a complete solution.","sidebar":"tutorialSidebar"},"Contributing":{"id":"Contributing","title":"Contributing","description":"Common commands","sidebar":"tutorialSidebar"},"dataimport":{"id":"dataimport","title":"Data Import","description":"Work in progress","sidebar":"tutorialSidebar"},"dataproviders":{"id":"dataproviders","title":"Data Providers","description":"Fetching Data","sidebar":"tutorialSidebar"},"devcontainer/devcontainer":{"id":"devcontainer/devcontainer","title":"Devcontainers","description":"A devcontainer is a Docker container wrapped in some additional features to create a more full-featured development environment.","sidebar":"tutorialSidebar"},"EdgesAndLimits":{"id":"EdgesAndLimits","title":"Accuracy/Limitations","description":"Javascript-only","sidebar":"tutorialSidebar"},"Extending":{"id":"Extending","title":"Extending","description":"It is possible to extend the geoprocessing framework to meet your needs right in your project code space. Here are some common use cases.","sidebar":"tutorialSidebar"},"geoprocessing":{"id":"geoprocessing","title":"Geoprocessing","description":"Geoprocessing functions are the analytical workhorse of SeaSketch reports. These functions are packaged and published as AWS Lambda functions which crunch numbers using spatial analysis libraries and organize the results into a payload to be returned to the caller.","sidebar":"tutorialSidebar"},"gip/GIP-1-i18n":{"id":"gip/GIP-1-i18n","title":"Internationalization (i18n)","description":"Geoprocessing Improvement Proposal 1","sidebar":"tutorialSidebar"},"gip/README":{"id":"gip/README","title":"GIP","description":"A Geoprocessing Improvement Proposal or (GIP) is a specification for a major improvement to the geoprocessing framework."},"intro":{"id":"intro","title":"Tutorial Intro","description":"Let\'s discover Docusaurus in less than 5 minutes."},"introduction":{"id":"introduction","title":"Introduction","description":"The SeaSketch Geoprocessing framework is an all-in-one solution for developing low-cost and low-maintenance geoprocessing functions and reports for the web, with Typescript. Simplified publish to cloud with auto-scaling to meet high demand.","sidebar":"tutorialSidebar"},"linkData":{"id":"linkData","title":"Link Project Data","description":"In order to import and publish datasets needed in your reports, they will need to be accessible on your local computer. There are multiple ways to do this, choose the appropriate one for you.","sidebar":"tutorialSidebar"},"multiBoundary/multiBoundary":{"id":"multiBoundary/multiBoundary","title":"Multiple Planning Boundaries","description":"Sometimes a planning process may need to support multiple distinct non-overlapping planning units, so that planning can be done in each unit independently, with its own planning targets/objectives. For example the California MLPA planning process has 4 geographically distinct planning regions - North, North Cental, Central, South.","sidebar":"tutorialSidebar"},"precalc":{"id":"precalc","title":"Precalc Data","description":"Precalc is all about calculating expensive spatial metrics ahead of time.","sidebar":"tutorialSidebar"},"preprocessing":{"id":"preprocessing","title":"Preprocessing","description":"Preprocessing function are invoked by the SeaSketch platform, on a user-drawn shape, right after the user finishes drawing it. It\'s a specialized function that validates a drawn shape and potentially modifies it, such as to remove portions of the shape outside the planning boundary. This \\"clipping\\" of the shape allows a user to overdraw beyond the boundary and it will be clipped right to the edge of the boundary.","sidebar":"tutorialSidebar"},"projectclient":{"id":"projectclient","title":"Project Client","description":"The ProjectClient is the bridge that connects project configuration with code. It makes it easier to bring together your projects datasources, geographies, objectives, metric group definitions, and precalculated metrics and use them in geoprocessing functions and report clients.","sidebar":"tutorialSidebar"},"reportclient":{"id":"reportclient","title":"Report Client","description":"Report clients are React UI components that can be registered with SeaSketch and when given a user-drawn Sketch, they run one or more geoprocessing functions against that Sketch, and display the result in a way that is meaningful to the project.","sidebar":"tutorialSidebar"},"skills":{"id":"skills","title":"Skill Building","description":"There are a number of required skills for using this framework successfully. If you don\'t have this knowledge, then skill building and potentially mentorship may be needed for you to succeed. Here is a list of resources that can help you get started:","sidebar":"tutorialSidebar"},"structure":{"id":"structure","title":"Project Structure","description":"Configuration Files and Scripts","sidebar":"tutorialSidebar"},"Testing":{"id":"Testing","title":"Testing","description":"This will start a web server on port 8080 that serves up the data/dist folder. Smoke tests will run geoprocessing functions against all of the sketches and features in the examples folder. projectClient.getDatasourceUrl will automatically read data from localhost:8080 instead of the production S3 bucket url when using functions like loadFgb(), geoblaze.parse().","sidebar":"tutorialSidebar"},"thirdpartydata/thirdpartydata":{"id":"thirdpartydata/thirdpartydata","title":"Third Party Data","description":"With all datasets, it is important to check if there is an authoritative dataset that should be used. The sources below are diverse and may offer more accuracy, but they are not necessarily authoritative.","sidebar":"tutorialSidebar"},"toolbox":{"id":"toolbox","title":"Toolbox","description":"Clipping Data","sidebar":"tutorialSidebar"},"tutorial-basics/congratulations":{"id":"tutorial-basics/congratulations","title":"Congratulations!","description":"You have just learned the basics of Docusaurus and made some changes to the initial template."},"tutorial-basics/create-a-blog-post":{"id":"tutorial-basics/create-a-blog-post","title":"Create a Blog Post","description":"Docusaurus creates a page for each blog post, but also a blog index page, a tag system, an RSS feed..."},"tutorial-basics/create-a-document":{"id":"tutorial-basics/create-a-document","title":"Create a Document","description":"Documents are groups of pages connected through:"},"tutorial-basics/create-a-page":{"id":"tutorial-basics/create-a-page","title":"Create a Page","description":"Add Markdown or React files to src/pages to create a standalone page:"},"tutorial-basics/deploy-your-site":{"id":"tutorial-basics/deploy-your-site","title":"Deploy your site","description":"Docusaurus is a static-site-generator (also called Jamstack)."},"tutorial-basics/markdown-features":{"id":"tutorial-basics/markdown-features","title":"Markdown Features","description":"Docusaurus supports Markdown and a few additional features."},"tutorial-extras/manage-docs-versions":{"id":"tutorial-extras/manage-docs-versions","title":"Manage Docs Versions","description":"Docusaurus can manage multiple versions of your docs."},"tutorial-extras/translate-your-site":{"id":"tutorial-extras/translate-your-site","title":"Translate your site","description":"Let\'s translate docs/intro.md to French."},"tutorials/deploy":{"id":"tutorials/deploy","title":"Deploy your project","description":"A deploy of your application uses aws-cdk to inspect your local build and automatically provision all of the necessary AWS resources as a single CloudFormation stack.","sidebar":"tutorialSidebar"},"tutorials/existingproject":{"id":"tutorials/existingproject","title":"Setup an exising geoprocessing project","description":"This use case is where a geoprocessing project already exists, but it was developed on a different computer, and you now need to set it up on your computer, in order to be able to make and deploy modifications.","sidebar":"tutorialSidebar"},"tutorials/extraParams":{"id":"tutorials/extraParams","title":"Adding and Passing Extra Parameters","description":"Sometimes you want to pass additional parameters to a preprocessing or geoprocessing function that are defined outside of the sketch creation process by seasketch or through the report itself. These extraParams are separate from the sketch. They are an additional object passed to every preprocessing and geoprocessing function.","sidebar":"tutorialSidebar"},"tutorials/newproject":{"id":"tutorials/newproject","title":"newproject","description":"[WORK IN PROGRESS]","sidebar":"tutorialSidebar"},"tutorials/sampleproject":{"id":"tutorials/sampleproject","title":"Create Sample Project","description":"This tutorial walks through creating a sample geoprocessing project for the Federated States of Micronesia. It demonstrates multiple methods for doing spatial analysis and creating reports, from low-level to high-level, so that you can engage with it at any/all of the levels needed for your project.","sidebar":"tutorialSidebar"},"tutorials/sketchAttributes":{"id":"tutorials/sketchAttributes","title":"Custom Sketch Attributes","description":"Sketch attributes are additional properties provided with a Sketch Feature or a Sketch Collection. They can be user-defined at draw time or by the SeaSketch platform itself. The SeaSketch admin tool lets you add custom attributes to your sketch classes. SeaSketch will pass these sketch attributes on to geoprocessing functions.","sidebar":"tutorialSidebar"},"tutorials/storybook":{"id":"tutorials/storybook","title":"Advanced storybook usage","description":"There are multiple ways to introduce state into your stories. Many components draw their state from the ReportContext, which contains a lot of the information passed to the app on startup from seasketch.","sidebar":"tutorialSidebar"},"tutorials/subdividing":{"id":"tutorials/subdividing","title":"Subdividing Large Datasets","description":"If you have very large polygon datasets (think country or global data) with very large complex polygon, the standard data import process which uses flatgeobuf, may not be sufficient. An alternative is to use a VectorDataSource specially created by SeaSketch. It\'s based on a method described by Paul Ramsey in this article of subdividing your data, cutting it up along the boundaries of a spatial index.","sidebar":"tutorialSidebar"},"tutorials/Tutorials":{"id":"tutorials/Tutorials","title":"System Setup","description":"These tutorials will walk you through creating and deploying a basic seasketch geoprocessing project. You should already have a basic working knowledge of your computer, its operating system, shell environment (command line), and web application development using NodeJS and React. Learn more about the skills required.","sidebar":"tutorialSidebar"},"tutorials/updateDatasource":{"id":"tutorials/updateDatasource","title":"Updating A Datasource","description":"When updating a datasource, you should try to take it all the way through the process of import, precalc, and publish so that there\'s no confusion about which step you are on. It\'s easy to leave things in an incomplete state and its not obvious when you pick it back up.","sidebar":"tutorialSidebar"},"upgrade":{"id":"upgrade","title":"Upgrading","description":"Instructions to migrate existing geoprocessing projects to newer versions.","sidebar":"tutorialSidebar"},"workers":{"id":"workers","title":"Worker Functions","description":"Worker functions are sync geoprocessing functions that are invoked directly by parent geoprocessing functions, allowing computationally intensive or memory intensive tasks to be split out across multiple lambdas. Worker results are assembled in the parent function and returned back to the report client","sidebar":"tutorialSidebar"}}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/bb47ce6c.daabd842.js b/assets/js/bb47ce6c.daabd842.js
deleted file mode 100644
index 5a2273543c..0000000000
--- a/assets/js/bb47ce6c.daabd842.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[31681],{92898:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":"unreleased","badge":true,"noIndex":false,"className":"docs-version-current","isLast":false,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Getting Started","items":[{"type":"link","label":"Introduction","href":"/geoprocessing/docs/next/","docId":"introduction","unlisted":false},{"type":"link","label":"Concepts","href":"/geoprocessing/docs/next/concepts","docId":"concepts/Concepts","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"System Setup","href":"/geoprocessing/docs/next/tutorials/","docId":"tutorials/Tutorials","unlisted":false},{"type":"link","label":"Create Sample Project","href":"/geoprocessing/docs/next/tutorials/sampleproject","docId":"tutorials/sampleproject","unlisted":false},{"type":"link","label":"Create New Project","href":"/geoprocessing/docs/next/tutorials/newproject","docId":"tutorials/newproject","unlisted":false},{"type":"link","label":"Setup Existing Project","href":"/geoprocessing/docs/next/tutorials/existingproject","docId":"tutorials/existingproject","unlisted":false},{"type":"link","label":"Deploy Project","href":"/geoprocessing/docs/next/tutorials/deploy","docId":"tutorials/deploy","unlisted":false},{"type":"link","label":"New Geoprocessing Function","href":"/geoprocessing/docs/next/tutorials/createGeoprocessing","docId":"tutorials/createGeoprocessing","unlisted":false},{"type":"link","label":"New Report Client","href":"/geoprocessing/docs/next/tutorials/createReport","docId":"tutorials/createReport","unlisted":false},{"type":"link","label":"Upgrade Project","href":"/geoprocessing/docs/next/upgrade","docId":"upgrade","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Command Line Interface","href":"/geoprocessing/docs/next/cli","docId":"CLI","unlisted":false},{"type":"link","label":"Skill Building","href":"/geoprocessing/docs/next/skills","docId":"skills","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Advanced","items":[{"type":"link","label":"Concepts","href":"/geoprocessing/docs/next/concepts/AdvancedConcepts","docId":"concepts/AdvancedConcepts","unlisted":false},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Link Project Data","href":"/geoprocessing/docs/next/linkData","docId":"linkData","unlisted":false},{"type":"link","label":"Third Party Data","href":"/geoprocessing/docs/next/thirdpartydata/","docId":"thirdpartydata/thirdpartydata","unlisted":false},{"type":"link","label":"Update Datasource","href":"/geoprocessing/docs/next/tutorials/updateDatasource","docId":"tutorials/updateDatasource","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Guides","items":[{"type":"link","label":"Project Structure","href":"/geoprocessing/docs/next/structure","docId":"structure","unlisted":false},{"type":"link","label":"Project Client","href":"/geoprocessing/docs/next/projectclient","docId":"projectclient","unlisted":false},{"type":"link","label":"Precalc Data","href":"/geoprocessing/docs/next/precalc","docId":"precalc","unlisted":false},{"type":"link","label":"Data Import","href":"/geoprocessing/docs/next/dataimport","docId":"dataimport","unlisted":false},{"type":"link","label":"Preprocessing Functions","href":"/geoprocessing/docs/next/preprocessing","docId":"preprocessing","unlisted":false},{"type":"link","label":"Geoprocessing Functions","href":"/geoprocessing/docs/next/geoprocessing","docId":"geoprocessing","unlisted":false},{"type":"link","label":"Report Clients","href":"/geoprocessing/docs/next/reportclient","docId":"reportclient","unlisted":false},{"type":"link","label":"Worker Functions","href":"/geoprocessing/docs/next/workers","docId":"workers","unlisted":false},{"type":"link","label":"Custom Sketch Attributes","href":"/geoprocessing/docs/next/tutorials/sketchAttributes","docId":"tutorials/sketchAttributes","unlisted":false},{"type":"link","label":"Extra Function Parameters","href":"/geoprocessing/docs/next/tutorials/extraParams","docId":"tutorials/extraParams","unlisted":false},{"type":"link","label":"Multi-Boundary","href":"/geoprocessing/docs/next/multiBoundary/","docId":"multiBoundary/multiBoundary","unlisted":false},{"type":"link","label":"Subdividing Data","href":"/geoprocessing/docs/next/tutorials/subdividing","docId":"tutorials/subdividing","unlisted":false},{"type":"link","label":"Antimeridian","href":"/geoprocessing/docs/next/antimeridian","docId":"antimeridian/Antimeridian","unlisted":false},{"type":"link","label":"Testing","href":"/geoprocessing/docs/next/testing","docId":"Testing","unlisted":false},{"type":"link","label":"Storybook","href":"/geoprocessing/docs/next/tutorials/storybook","docId":"tutorials/storybook","unlisted":false},{"type":"link","label":"Devcontainer","href":"/geoprocessing/docs/next/devcontainer/","docId":"devcontainer/devcontainer","unlisted":false},{"type":"link","label":"Codespaces","href":"/geoprocessing/docs/next/codespaces/","docId":"codespaces/codespaces","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Architecture","href":"/geoprocessing/docs/next/architecture","docId":"architecture/Architecture","unlisted":false},{"type":"link","label":"Accuracy/Limitations","href":"/geoprocessing/docs/next/EdgesAndLimits","docId":"EdgesAndLimits","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Library","items":[{"type":"link","label":"Typescript API","href":"/geoprocessing/docs/next/api/","docId":"api/index","unlisted":false},{"type":"link","label":"Extending","href":"/geoprocessing/docs/next/extending","docId":"Extending","unlisted":false},{"type":"link","label":"Contributing","href":"/geoprocessing/docs/next/contributing","docId":"Contributing","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Improvement Proposals","items":[{"type":"link","label":"GIP-1: Internationalization","href":"/geoprocessing/docs/next/gip/GIP-1-i18n","docId":"gip/GIP-1-i18n","unlisted":false}],"collapsed":true,"collapsible":true}]},"docs":{"antimeridian/Antimeridian":{"id":"antimeridian/Antimeridian","title":"Antimeridian","description":"The antimeridian is the 180 degree meridian.","sidebar":"tutorialSidebar"},"api/client-core/index":{"id":"api/client-core/index","title":"client-core","description":"client-ui provides everything for creating geoprocessing client interface,"},"api/client-ui/classes/ReportError":{"id":"api/client-ui/classes/ReportError","title":"ReportError","description":"Extends"},"api/client-ui/functions/App":{"id":"api/client-ui/functions/App","title":"App()","description":"Parameters"},"api/client-ui/functions/Card":{"id":"api/client-ui/functions/Card","title":"Card()","description":"Parameters"},"api/client-ui/functions/CardDecorator":{"id":"api/client-ui/functions/CardDecorator","title":"CardDecorator()","description":"Default decorator. Create additional building on StoryLayout for more sophisticated needs"},"api/client-ui/functions/ChartLegend":{"id":"api/client-ui/functions/ChartLegend","title":"ChartLegend()","description":"Horizontal stacked bar chart component"},"api/client-ui/functions/CheckboxGroup":{"id":"api/client-ui/functions/CheckboxGroup","title":"CheckboxGroup()","description":"Controlled checkbox group"},"api/client-ui/functions/Circle":{"id":"api/client-ui/functions/Circle","title":"Circle()","description":"Circle with user-defined component inside"},"api/client-ui/functions/ClassTable":{"id":"api/client-ui/functions/ClassTable","title":"ClassTable()","description":"Table displaying class metrics, one class per table row. Having more than one metric per class may yield unexpected results"},"api/client-ui/functions/ClassTableStyled":{"id":"api/client-ui/functions/ClassTableStyled","title":"ClassTableStyled()","description":"ClassTableStyled(props)"},"api/client-ui/functions/Collapse":{"id":"api/client-ui/functions/Collapse","title":"Collapse()","description":"Parameters"},"api/client-ui/functions/CollapseGroup":{"id":"api/client-ui/functions/CollapseGroup","title":"CollapseGroup()","description":"Parameters"},"api/client-ui/functions/createReportDecorator":{"id":"api/client-ui/functions/createReportDecorator","title":"createReportDecorator()","description":"Think of this as a ReportDecorator generator, that allows you to pass in context and override the default"},"api/client-ui/functions/DataDownload":{"id":"api/client-ui/functions/DataDownload","title":"DataDownload()","description":"Dropdown menu for transforming data to CSV/JSON format and initiating a browser download"},"api/client-ui/functions/DataDownloadToolbar":{"id":"api/client-ui/functions/DataDownloadToolbar","title":"DataDownloadToolbar()","description":"Convenience component that creates a Toolbar with Header and DataDownload"},"api/client-ui/functions/Dropdown":{"id":"api/client-ui/functions/Dropdown","title":"Dropdown()","description":"Parameters"},"api/client-ui/functions/DropdownContainer":{"id":"api/client-ui/functions/DropdownContainer","title":"DropdownContainer()","description":"DropdownContainer(props)"},"api/client-ui/functions/DropdownItem":{"id":"api/client-ui/functions/DropdownItem","title":"DropdownItem()","description":"DropdownItem(props)"},"api/client-ui/functions/DropdownTrigger":{"id":"api/client-ui/functions/DropdownTrigger","title":"DropdownTrigger()","description":"DropdownTrigger(props)"},"api/client-ui/functions/EstimateLabel":{"id":"api/client-ui/functions/EstimateLabel","title":"EstimateLabel()","description":"EstimateLabel(props)"},"api/client-ui/functions/FilterSelectTable":{"id":"api/client-ui/functions/FilterSelectTable","title":"FilterSelectTable()","description":"Table with customizable filter functions as CheckboxGroup that when selected"},"api/client-ui/functions/FilterSelectTableStyled":{"id":"api/client-ui/functions/FilterSelectTableStyled","title":"FilterSelectTableStyled()","description":"FilterSelectTableStyled(props)"},"api/client-ui/functions/finishTask":{"id":"api/client-ui/functions/finishTask","title":"finishTask()","description":"Finishes task by hitting the remote cache, updating the hook with the task result and cleaning up"},"api/client-ui/functions/GeographySwitcher":{"id":"api/client-ui/functions/GeographySwitcher","title":"GeographySwitcher()","description":"Parameters"},"api/client-ui/functions/GreenPill":{"id":"api/client-ui/functions/GreenPill","title":"GreenPill()","description":"Parameters"},"api/client-ui/functions/GroupCircle":{"id":"api/client-ui/functions/GroupCircle","title":"GroupCircle()","description":"Circle with user-defined group colors"},"api/client-ui/functions/GroupCircleRow":{"id":"api/client-ui/functions/GroupCircleRow","title":"GroupCircleRow()","description":"GroupCircle with layout for use in table row"},"api/client-ui/functions/GroupPill":{"id":"api/client-ui/functions/GroupPill","title":"GroupPill()","description":"Pill with colors assigned to each group name"},"api/client-ui/functions/HorizontalStackedBar":{"id":"api/client-ui/functions/HorizontalStackedBar","title":"HorizontalStackedBar()","description":"Horizontal stacked bar chart component"},"api/client-ui/functions/InfoStatus":{"id":"api/client-ui/functions/InfoStatus","title":"InfoStatus()","description":"Parameters"},"api/client-ui/functions/IucnActivitiesCard":{"id":"api/client-ui/functions/IucnActivitiesCard","title":"IucnActivitiesCard()","description":"Returns"},"api/client-ui/functions/IucnDesignationTable":{"id":"api/client-ui/functions/IucnDesignationTable","title":"IucnDesignationTable()","description":"Returns"},"api/client-ui/functions/IucnLevelCircle":{"id":"api/client-ui/functions/IucnLevelCircle","title":"IucnLevelCircle()","description":"Parameters"},"api/client-ui/functions/IucnLevelCircleRow":{"id":"api/client-ui/functions/IucnLevelCircleRow","title":"IucnLevelCircleRow()","description":"Parameters"},"api/client-ui/functions/IucnLevelPill":{"id":"api/client-ui/functions/IucnLevelPill","title":"IucnLevelPill()","description":"Parameters"},"api/client-ui/functions/IucnMatrix":{"id":"api/client-ui/functions/IucnMatrix","title":"IucnMatrix()","description":"Returns"},"api/client-ui/functions/KeySection":{"id":"api/client-ui/functions/KeySection","title":"KeySection()","description":"Parameters"},"api/client-ui/functions/LanguageSwitcher":{"id":"api/client-ui/functions/LanguageSwitcher","title":"LanguageSwitcher()","description":"Returns"},"api/client-ui/functions/LayerToggle":{"id":"api/client-ui/functions/LayerToggle","title":"LayerToggle()","description":"Parameters"},"api/client-ui/functions/ObjectiveStatus":{"id":"api/client-ui/functions/ObjectiveStatus","title":"ObjectiveStatus()","description":"Parameters"},"api/client-ui/functions/Pill":{"id":"api/client-ui/functions/Pill","title":"Pill()","description":"Parameters"},"api/client-ui/functions/PillColumn":{"id":"api/client-ui/functions/PillColumn","title":"PillColumn()","description":"Parameters"},"api/client-ui/functions/PointyCircle":{"id":"api/client-ui/functions/PointyCircle","title":"PointyCircle()","description":"Circle with pointy top right corner"},"api/client-ui/functions/ProgressBar":{"id":"api/client-ui/functions/ProgressBar","title":"ProgressBar()","description":"ProgressBar(props)"},"api/client-ui/functions/ProgressBarWrapper":{"id":"api/client-ui/functions/ProgressBarWrapper","title":"ProgressBarWrapper()","description":"ProgressBarWrapper(props)"},"api/client-ui/functions/RbcsActivitiesCard":{"id":"api/client-ui/functions/RbcsActivitiesCard","title":"RbcsActivitiesCard()","description":"Returns"},"api/client-ui/functions/RbcsIcon":{"id":"api/client-ui/functions/RbcsIcon","title":"RbcsIcon()","description":"Parameters"},"api/client-ui/functions/RbcsLearnMore":{"id":"api/client-ui/functions/RbcsLearnMore","title":"RbcsLearnMore()","description":"Describes RBCS and lists minimum level of protection required for each objective"},"api/client-ui/functions/RbcsMpaClassPanel":{"id":"api/client-ui/functions/RbcsMpaClassPanel","title":"RbcsMpaClassPanel()","description":"Sketch collection status panel for MPA regulation-based classification"},"api/client-ui/functions/RbcsMpaObjectiveStatus":{"id":"api/client-ui/functions/RbcsMpaObjectiveStatus","title":"RbcsMpaObjectiveStatus()","description":"Parameters"},"api/client-ui/functions/RbcsNetworkObjectiveStatus":{"id":"api/client-ui/functions/RbcsNetworkObjectiveStatus","title":"RbcsNetworkObjectiveStatus()","description":"Displays status toward meeting Network objective"},"api/client-ui/functions/RbcsZoneClassPanel":{"id":"api/client-ui/functions/RbcsZoneClassPanel","title":"RbcsZoneClassPanel()","description":"Single-sketch status panel for MPA regulation-based classification"},"api/client-ui/functions/RbcsZoneRegIcon":{"id":"api/client-ui/functions/RbcsZoneRegIcon","title":"RbcsZoneRegIcon()","description":"Parameters"},"api/client-ui/functions/ReportChartFigure":{"id":"api/client-ui/functions/ReportChartFigure","title":"ReportChartFigure()","description":"Chart container styled with spacing for layout in report pages"},"api/client-ui/functions/ReportDecorator":{"id":"api/client-ui/functions/ReportDecorator","title":"ReportDecorator()","description":"Decorator that renders a story into ReportStoryLayout."},"api/client-ui/functions/ReportPage":{"id":"api/client-ui/functions/ReportPage","title":"ReportPage()","description":"Parameters"},"api/client-ui/functions/ReportStoryLayout":{"id":"api/client-ui/functions/ReportStoryLayout","title":"ReportStoryLayout()","description":"Wraps a story to look and behave like a sketch report"},"api/client-ui/functions/ReportTableStyled":{"id":"api/client-ui/functions/ReportTableStyled","title":"ReportTableStyled()","description":"ReportTableStyled(props)"},"api/client-ui/functions/ReportTextDirection":{"id":"api/client-ui/functions/ReportTextDirection","title":"ReportTextDirection()","description":"Controls text direction for report based on current language"},"api/client-ui/functions/ResultsCard":{"id":"api/client-ui/functions/ResultsCard","title":"ResultsCard()","description":"Type Parameters"},"api/client-ui/functions/runTask":{"id":"api/client-ui/functions/runTask","title":"runTask()","description":"Runs task by sending GET request to url with payload and optional flags"},"api/client-ui/functions/SegmentControl":{"id":"api/client-ui/functions/SegmentControl","title":"SegmentControl()","description":"Parameters"},"api/client-ui/functions/SimpleButton":{"id":"api/client-ui/functions/SimpleButton","title":"SimpleButton()","description":"A simple button component that accepts any text value so unicode can be used including emojis"},"api/client-ui/functions/SimpleButtonStyled":{"id":"api/client-ui/functions/SimpleButtonStyled","title":"SimpleButtonStyled()","description":"SimpleButtonStyled(props)"},"api/client-ui/functions/Skeleton":{"id":"api/client-ui/functions/Skeleton","title":"Skeleton()","description":"Skeleton(props)"},"api/client-ui/functions/SketchAttributesCard":{"id":"api/client-ui/functions/SketchAttributesCard","title":"SketchAttributesCard()","description":"Parameters"},"api/client-ui/functions/SketchClassTable":{"id":"api/client-ui/functions/SketchClassTable","title":"SketchClassTable()","description":"Table displaying sketch class metrics, one table row per sketch"},"api/client-ui/functions/SketchClassTableStyled":{"id":"api/client-ui/functions/SketchClassTableStyled","title":"SketchClassTableStyled()","description":"Style component for SketchClassTable"},"api/client-ui/functions/SmallReportTableStyled":{"id":"api/client-ui/functions/SmallReportTableStyled","title":"SmallReportTableStyled()","description":"SmallReportTableStyled(props)"},"api/client-ui/functions/StyledCircle":{"id":"api/client-ui/functions/StyledCircle","title":"StyledCircle()","description":"Default style for Circle"},"api/client-ui/functions/StyledPill":{"id":"api/client-ui/functions/StyledPill","title":"StyledPill()","description":"StyledPill(props)"},"api/client-ui/functions/StyledTwoColorPointyCircle":{"id":"api/client-ui/functions/StyledTwoColorPointyCircle","title":"StyledTwoColorPointyCircle()","description":"StyledTwoColorPointyCircle(props)"},"api/client-ui/functions/Table":{"id":"api/client-ui/functions/Table","title":"Table()","description":"Table component suited to geoprocessing client reports."},"api/client-ui/functions/TableStyled":{"id":"api/client-ui/functions/TableStyled","title":"TableStyled()","description":"TableStyled(props)"},"api/client-ui/functions/Toolbar":{"id":"api/client-ui/functions/Toolbar","title":"Toolbar()","description":"Parameters"},"api/client-ui/functions/ToolbarCard":{"id":"api/client-ui/functions/ToolbarCard","title":"ToolbarCard()","description":"Parameters"},"api/client-ui/functions/ToolbarStyled":{"id":"api/client-ui/functions/ToolbarStyled","title":"ToolbarStyled()","description":"ToolbarStyled(props)"},"api/client-ui/functions/Tooltip":{"id":"api/client-ui/functions/Tooltip","title":"Tooltip()","description":"Parameters"},"api/client-ui/functions/TooltipContainer":{"id":"api/client-ui/functions/TooltipContainer","title":"TooltipContainer()","description":"TooltipContainer(props)"},"api/client-ui/functions/TooltipItem":{"id":"api/client-ui/functions/TooltipItem","title":"TooltipItem()","description":"TooltipItem(props)"},"api/client-ui/functions/TooltipTrigger":{"id":"api/client-ui/functions/TooltipTrigger","title":"TooltipTrigger()","description":"TooltipTrigger(props)"},"api/client-ui/functions/Translator":{"id":"api/client-ui/functions/Translator","title":"Translator()","description":"Loads translations asynchronously using dynamic import abd react-i18next will have translations eventually and update"},"api/client-ui/functions/TwoColorPointyCircle":{"id":"api/client-ui/functions/TwoColorPointyCircle","title":"TwoColorPointyCircle()","description":"Two-color reg-based classification circle for collection index value"},"api/client-ui/functions/useCheckboxes":{"id":"api/client-ui/functions/useCheckboxes","title":"useCheckboxes()","description":"Hook to maintain checkbox state"},"api/client-ui/functions/useFunction":{"id":"api/client-ui/functions/useFunction","title":"useFunction()","description":"Runs the given geoprocessing function for the current sketch, as defined by ReportContext"},"api/client-ui/functions/useLanguage":{"id":"api/client-ui/functions/useLanguage","title":"useLanguage()","description":"Hook that returns current language from report context, and provides function to change the language"},"api/client-ui/functions/useSketchProperties":{"id":"api/client-ui/functions/useSketchProperties","title":"useSketchProperties()","description":"Returns"},"api/client-ui/functions/VerticalSpacer":{"id":"api/client-ui/functions/VerticalSpacer","title":"VerticalSpacer()","description":"Parameters"},"api/client-ui/functions/WarningPill":{"id":"api/client-ui/functions/WarningPill","title":"WarningPill()","description":"Parameters"},"api/client-ui/functions/WatersDiagram":{"id":"api/client-ui/functions/WatersDiagram","title":"WatersDiagram()","description":"Serves up a translatable SVG image showing nautical boundaries"},"api/client-ui/index":{"id":"api/client-ui/index","title":"client-ui","description":"client-ui provides all of the core React UI components for geoprocessing"},"api/client-ui/interfaces/AppProps":{"id":"api/client-ui/interfaces/AppProps","title":"AppProps","description":"Properties"},"api/client-ui/interfaces/CardProps":{"id":"api/client-ui/interfaces/CardProps","title":"CardProps","description":"Properties"},"api/client-ui/interfaces/CircleProps":{"id":"api/client-ui/interfaces/CircleProps","title":"CircleProps","description":"Properties"},"api/client-ui/interfaces/ClassTableColumnConfig":{"id":"api/client-ui/interfaces/ClassTableColumnConfig","title":"ClassTableColumnConfig","description":"Properties"},"api/client-ui/interfaces/ClassTableProps":{"id":"api/client-ui/interfaces/ClassTableProps","title":"ClassTableProps","description":"Properties"},"api/client-ui/interfaces/CollapseGroupProps":{"id":"api/client-ui/interfaces/CollapseGroupProps","title":"CollapseGroupProps","description":"Properties"},"api/client-ui/interfaces/CollapseProps":{"id":"api/client-ui/interfaces/CollapseProps","title":"CollapseProps","description":"Properties"},"api/client-ui/interfaces/DataDownloadProps":{"id":"api/client-ui/interfaces/DataDownloadProps","title":"DataDownloadProps","description":"Extends"},"api/client-ui/interfaces/DataDownloadToolbarProps":{"id":"api/client-ui/interfaces/DataDownloadToolbarProps","title":"DataDownloadToolbarProps","description":"Extends"},"api/client-ui/interfaces/DataFormatters":{"id":"api/client-ui/interfaces/DataFormatters","title":"DataFormatters","description":"Indexable"},"api/client-ui/interfaces/DownloadOption":{"id":"api/client-ui/interfaces/DownloadOption","title":"DownloadOption","description":"Properties"},"api/client-ui/interfaces/DropdownContainerProps":{"id":"api/client-ui/interfaces/DropdownContainerProps","title":"DropdownContainerProps","description":"Properties"},"api/client-ui/interfaces/DropdownProps":{"id":"api/client-ui/interfaces/DropdownProps","title":"DropdownProps","description":"Renders an element with a dropdown list"},"api/client-ui/interfaces/FilterSelect":{"id":"api/client-ui/interfaces/FilterSelect","title":"FilterSelect\\\\","description":"Custom table data filters that are only active when selected by the user"},"api/client-ui/interfaces/FilterSelectOption":{"id":"api/client-ui/interfaces/FilterSelectOption","title":"FilterSelectOption\\\\","description":"Custom table data filter"},"api/client-ui/interfaces/FilterSelectTableOptions":{"id":"api/client-ui/interfaces/FilterSelectTableOptions","title":"FilterSelectTableOptions\\\\","description":"The empty definitions of below provides a base definition for the parts used by useTable, that can then be extended in the users code."},"api/client-ui/interfaces/GeographySwitcherProps":{"id":"api/client-ui/interfaces/GeographySwitcherProps","title":"GeographySwitcherProps","description":"Properties"},"api/client-ui/interfaces/GroupCircleProps":{"id":"api/client-ui/interfaces/GroupCircleProps","title":"GroupCircleProps","description":"Properties"},"api/client-ui/interfaces/GroupCircleRowProps":{"id":"api/client-ui/interfaces/GroupCircleRowProps","title":"GroupCircleRowProps","description":"Properties"},"api/client-ui/interfaces/GroupPillProps":{"id":"api/client-ui/interfaces/GroupPillProps","title":"GroupPillProps","description":"Properties"},"api/client-ui/interfaces/HorizontalStackedBarProps":{"id":"api/client-ui/interfaces/HorizontalStackedBarProps","title":"HorizontalStackedBarProps","description":"Properties"},"api/client-ui/interfaces/InfoStatusProps":{"id":"api/client-ui/interfaces/InfoStatusProps","title":"InfoStatusProps","description":"Properties"},"api/client-ui/interfaces/IucnActivityRank":{"id":"api/client-ui/interfaces/IucnActivityRank","title":"IucnActivityRank","description":"Properties"},"api/client-ui/interfaces/IucnLevelCircleProps":{"id":"api/client-ui/interfaces/IucnLevelCircleProps","title":"IucnLevelCircleProps","description":"Properties"},"api/client-ui/interfaces/IucnLevelCircleRowProps":{"id":"api/client-ui/interfaces/IucnLevelCircleRowProps","title":"IucnLevelCircleRowProps","description":"Properties"},"api/client-ui/interfaces/IucnLevelPillProps":{"id":"api/client-ui/interfaces/IucnLevelPillProps","title":"IucnLevelPillProps","description":"Properties"},"api/client-ui/interfaces/KeySectionProps":{"id":"api/client-ui/interfaces/KeySectionProps","title":"KeySectionProps","description":"Properties"},"api/client-ui/interfaces/LabelProps":{"id":"api/client-ui/interfaces/LabelProps","title":"LabelProps","description":"Array of Labels to be inserted into the waters diagram"},"api/client-ui/interfaces/LegendProps":{"id":"api/client-ui/interfaces/LegendProps","title":"LegendProps","description":"Properties"},"api/client-ui/interfaces/ObjectiveStatusProps":{"id":"api/client-ui/interfaces/ObjectiveStatusProps","title":"ObjectiveStatusProps","description":"Properties"},"api/client-ui/interfaces/PillColumnProps":{"id":"api/client-ui/interfaces/PillColumnProps","title":"PillColumnProps","description":"Properties"},"api/client-ui/interfaces/PillProps":{"id":"api/client-ui/interfaces/PillProps","title":"PillProps","description":"Properties"},"api/client-ui/interfaces/RbcsIconProps":{"id":"api/client-ui/interfaces/RbcsIconProps","title":"RbcsIconProps","description":"Properties"},"api/client-ui/interfaces/RbcsLearnMoreProps":{"id":"api/client-ui/interfaces/RbcsLearnMoreProps","title":"RbcsLearnMoreProps","description":"Properties"},"api/client-ui/interfaces/RbcsMpaClassPanelProps":{"id":"api/client-ui/interfaces/RbcsMpaClassPanelProps","title":"RbcsMpaClassPanelProps","description":"Properties"},"api/client-ui/interfaces/RbcsMpaObjectiveStatusProps":{"id":"api/client-ui/interfaces/RbcsMpaObjectiveStatusProps","title":"RbcsMpaObjectiveStatusProps","description":"Properties"},"api/client-ui/interfaces/RbcsNetworkObjectiveProps":{"id":"api/client-ui/interfaces/RbcsNetworkObjectiveProps","title":"RbcsNetworkObjectiveProps","description":"Properties"},"api/client-ui/interfaces/RbcsPanelProps":{"id":"api/client-ui/interfaces/RbcsPanelProps","title":"RbcsPanelProps","description":"Properties"},"api/client-ui/interfaces/ReportChartFigureProps":{"id":"api/client-ui/interfaces/ReportChartFigureProps","title":"ReportChartFigureProps","description":"Properties"},"api/client-ui/interfaces/ReportContextState":{"id":"api/client-ui/interfaces/ReportContextState","title":"ReportContextState","description":"Properties"},"api/client-ui/interfaces/ReportPageProps":{"id":"api/client-ui/interfaces/ReportPageProps","title":"ReportPageProps","description":"Properties"},"api/client-ui/interfaces/ReportStoryLayoutProps":{"id":"api/client-ui/interfaces/ReportStoryLayoutProps","title":"ReportStoryLayoutProps","description":"Properties"},"api/client-ui/interfaces/ResultsCardProps":{"id":"api/client-ui/interfaces/ResultsCardProps","title":"ResultsCardProps\\\\","description":"Type Parameters"},"api/client-ui/interfaces/Row":{"id":"api/client-ui/interfaces/Row","title":"Row\\\\","description":"Extends"},"api/client-ui/interfaces/SegmentControlProps":{"id":"api/client-ui/interfaces/SegmentControlProps","title":"SegmentControlProps","description":"Properties"},"api/client-ui/interfaces/SimpleButtonProbs":{"id":"api/client-ui/interfaces/SimpleButtonProbs","title":"SimpleButtonProbs","description":"Properties"},"api/client-ui/interfaces/SketchAttributesCardProps":{"id":"api/client-ui/interfaces/SketchAttributesCardProps","title":"SketchAttributesCardProps","description":"Properties"},"api/client-ui/interfaces/SketchClassTableProps":{"id":"api/client-ui/interfaces/SketchClassTableProps","title":"SketchClassTableProps","description":"Properties"},"api/client-ui/interfaces/StyledHorizontalStackedBarProps":{"id":"api/client-ui/interfaces/StyledHorizontalStackedBarProps","title":"StyledHorizontalStackedBarProps","description":"Properties"},"api/client-ui/interfaces/StyledLegendProps":{"id":"api/client-ui/interfaces/StyledLegendProps","title":"StyledLegendProps","description":"Properties"},"api/client-ui/interfaces/StyledTwoColorPointyCircleProps":{"id":"api/client-ui/interfaces/StyledTwoColorPointyCircleProps","title":"StyledTwoColorPointyCircleProps","description":"Properties"},"api/client-ui/interfaces/TableOptions":{"id":"api/client-ui/interfaces/TableOptions","title":"TableOptions\\\\","description":"The empty definitions of below provides a base definition for the parts used by useTable, that can then be extended in the users code."},"api/client-ui/interfaces/ToolbarCardProps":{"id":"api/client-ui/interfaces/ToolbarCardProps","title":"ToolbarCardProps","description":"Properties"},"api/client-ui/interfaces/ToolbarProps":{"id":"api/client-ui/interfaces/ToolbarProps","title":"ToolbarProps","description":"Properties"},"api/client-ui/interfaces/TooltipContainerProps":{"id":"api/client-ui/interfaces/TooltipContainerProps","title":"TooltipContainerProps","description":"Properties"},"api/client-ui/interfaces/TooltipProps":{"id":"api/client-ui/interfaces/TooltipProps","title":"TooltipProps","description":"Renders an element with a tooltip"},"api/client-ui/interfaces/TwoColorPointyCircleProps":{"id":"api/client-ui/interfaces/TwoColorPointyCircleProps","title":"TwoColorPointyCircleProps","description":"Properties"},"api/client-ui/interfaces/VerticalSpacerProps":{"id":"api/client-ui/interfaces/VerticalSpacerProps","title":"VerticalSpacerProps","description":"Properties"},"api/client-ui/type-aliases/Block":{"id":"api/client-ui/type-aliases/Block","title":"Block","description":"Single rectangle block value representing length"},"api/client-ui/type-aliases/BlockGroup":{"id":"api/client-ui/type-aliases/BlockGroup","title":"BlockGroup","description":"Group of blocks with the same color"},"api/client-ui/type-aliases/Column":{"id":"api/client-ui/type-aliases/Column","title":"Column\\\\","description":"Type Parameters"},"api/client-ui/type-aliases/HorizontalStackedBarRow":{"id":"api/client-ui/type-aliases/HorizontalStackedBarRow","title":"HorizontalStackedBarRow","description":"One or more BlockGroups forming a single linear stacked row"},"api/client-ui/type-aliases/RbcsMpaObjectiveRenderMsgFunction":{"id":"api/client-ui/type-aliases/RbcsMpaObjectiveRenderMsgFunction","title":"RbcsMpaObjectiveRenderMsgFunction()","description":"Parameters"},"api/client-ui/type-aliases/RbcsNetworkObjectiveRenderMsgFunction":{"id":"api/client-ui/type-aliases/RbcsNetworkObjectiveRenderMsgFunction","title":"RbcsNetworkObjectiveRenderMsgFunction()","description":"Parameters"},"api/client-ui/type-aliases/RowConfig":{"id":"api/client-ui/type-aliases/RowConfig","title":"RowConfig","description":"Type declaration"},"api/client-ui/type-aliases/StringOrNumber":{"id":"api/client-ui/type-aliases/StringOrNumber","title":"StringOrNumber","description":""},"api/client-ui/type-aliases/SUPPORTED_FORMAT":{"id":"api/client-ui/type-aliases/SUPPORTED_FORMAT","title":"SUPPORTED\\\\_FORMAT","description":""},"api/client-ui/type-aliases/TargetFormatter":{"id":"api/client-ui/type-aliases/TargetFormatter","title":"TargetFormatter()","description":"Function that given target value for current table row, the table row index, and total number of"},"api/dataproviders/index":{"id":"api/dataproviders/index","title":"dataproviders","description":"References"},"api/geoprocessing/classes/ComplexityError":{"id":"api/geoprocessing/classes/ComplexityError","title":"ComplexityError","description":"Error signifying function threw due to not being able to handle the input - e.g. size/complexity"},"api/geoprocessing/classes/GeoprocessingHandler":{"id":"api/geoprocessing/classes/GeoprocessingHandler","title":"GeoprocessingHandler\\\\","description":"Manages the task of executing a geoprocessing function within an AWS Lambda function."},"api/geoprocessing/classes/PreprocessingHandler":{"id":"api/geoprocessing/classes/PreprocessingHandler","title":"PreprocessingHandler\\\\","description":"Lambda handler for a preprocessing function"},"api/geoprocessing/classes/ProjectClientBase":{"id":"api/geoprocessing/classes/ProjectClientBase","title":"ProjectClientBase","description":"Client for reading project configuration/metadata."},"api/geoprocessing/classes/ValidationError":{"id":"api/geoprocessing/classes/ValidationError","title":"ValidationError","description":"Error signifying input is not valid"},"api/geoprocessing/classes/VectorDataSource":{"id":"api/geoprocessing/classes/VectorDataSource","title":"VectorDataSource\\\\","description":"Type Parameters"},"api/geoprocessing/enumerations/GeoprocessingTaskStatus":{"id":"api/geoprocessing/enumerations/GeoprocessingTaskStatus","title":"GeoprocessingTaskStatus","description":"Enumeration Members"},"api/geoprocessing/functions/anchorScore":{"id":"api/geoprocessing/functions/anchorScore","title":"anchorScore()","description":"Parameters"},"api/geoprocessing/functions/aquacultureScore":{"id":"api/geoprocessing/functions/aquacultureScore","title":"aquacultureScore()","description":"Parameters"},"api/geoprocessing/functions/area":{"id":"api/geoprocessing/functions/area","title":"area()","description":"Calculates the area of each sketch and collection."},"api/geoprocessing/functions/batchDelete":{"id":"api/geoprocessing/functions/batchDelete","title":"batchDelete()","description":"Parameters"},"api/geoprocessing/functions/batchDeleteTasks":{"id":"api/geoprocessing/functions/batchDeleteTasks","title":"batchDeleteTasks()","description":"Batch delete array of tasks"},"api/geoprocessing/functions/bboxOverlap":{"id":"api/geoprocessing/functions/bboxOverlap","title":"bboxOverlap()","description":"Returns whether bounding box A overlaps with or touches bounding box B"},"api/geoprocessing/functions/booleanOverlap":{"id":"api/geoprocessing/functions/booleanOverlap","title":"booleanOverlap()","description":"booleanOverlap(featureAInput, featureBInput, idProperty)"},"api/geoprocessing/functions/byteSize":{"id":"api/geoprocessing/functions/byteSize","title":"byteSize()","description":"Get length of string in bytes"},"api/geoprocessing/functions/capitalize":{"id":"api/geoprocessing/functions/capitalize","title":"capitalize()","description":"Capitalizes the first letter of string"},"api/geoprocessing/functions/chunk":{"id":"api/geoprocessing/functions/chunk","title":"chunk()","description":"Splits an array into chunks of size"},"api/geoprocessing/functions/classIdMapping":{"id":"api/geoprocessing/functions/classIdMapping","title":"classIdMapping()","description":"Returns mapping of class ID to class DataClass objects"},"api/geoprocessing/functions/classifyMPA":{"id":"api/geoprocessing/functions/classifyMPA","title":"classifyMPA()","description":"Given zone scores, returns object containing final scores, and mpa classification"},"api/geoprocessing/functions/classifyZone":{"id":"api/geoprocessing/functions/classifyZone","title":"classifyZone()","description":"Given activity scores, returns zone number"},"api/geoprocessing/functions/cleanBBox":{"id":"api/geoprocessing/functions/cleanBBox","title":"cleanBBox()","description":"Normalizes bounding box longitude values to the [-180, 180] range if they cross the antimeridian"},"api/geoprocessing/functions/cleanCoords":{"id":"api/geoprocessing/functions/cleanCoords","title":"cleanCoords()","description":"Cleans geojson coordinates to be within the bounds of the world [-90, -180, 90, 180], so that they don\'t wrap off the end, and can be split"},"api/geoprocessing/functions/clip":{"id":"api/geoprocessing/functions/clip","title":"clip()","description":"Performs clip operation on features"},"api/geoprocessing/functions/clipMultiMerge":{"id":"api/geoprocessing/functions/clipMultiMerge","title":"clipMultiMerge()","description":"Performs clip after first merging features2 coords into a single multipolygon."},"api/geoprocessing/functions/clipToPolygonDatasources":{"id":"api/geoprocessing/functions/clipToPolygonDatasources","title":"clipToPolygonDatasources()","description":"Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources"},"api/geoprocessing/functions/clipToPolygonFeatures":{"id":"api/geoprocessing/functions/clipToPolygonFeatures","title":"clipToPolygonFeatures()","description":"Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more Polygon features"},"api/geoprocessing/functions/collectionHasGeometry":{"id":"api/geoprocessing/functions/collectionHasGeometry","title":"collectionHasGeometry()","description":"Parameters"},"api/geoprocessing/functions/createMetric":{"id":"api/geoprocessing/functions/createMetric","title":"createMetric()","description":"Creates a new metric. Defaults to ID values of null and then copies in passed metric properties"},"api/geoprocessing/functions/createMetrics":{"id":"api/geoprocessing/functions/createMetrics","title":"createMetrics()","description":"Creates fully defined metrics from partial. Metric values not provided are initialized to null"},"api/geoprocessing/functions/ensureValidPolygon":{"id":"api/geoprocessing/functions/ensureValidPolygon","title":"ensureValidPolygon()","description":"Returns true if feature is valid and meets requirements set by options."},"api/geoprocessing/functions/featureToSketch":{"id":"api/geoprocessing/functions/featureToSketch","title":"featureToSketch()","description":"Converts Feature to Sketch with reasonable defaults given for sketch properties if not provided"},"api/geoprocessing/functions/featureToSketchCollection":{"id":"api/geoprocessing/functions/featureToSketchCollection","title":"featureToSketchCollection()","description":"Converts FeatureCollection to SketchCollection with reasonable defaults given for sketch properties if not provided"},"api/geoprocessing/functions/fetchGeoJSON":{"id":"api/geoprocessing/functions/fetchGeoJSON","title":"fetchGeoJSON()","description":"Given geoprocessing function request, fetches the GeoJSON, which can also be sketch JSON"},"api/geoprocessing/functions/fgbFetchAll":{"id":"api/geoprocessing/functions/fgbFetchAll","title":"~~fgbFetchAll()~~","description":"Fetch features from flatgeobuf at url within bounding box"},"api/geoprocessing/functions/fgBoundingBox":{"id":"api/geoprocessing/functions/fgBoundingBox","title":"fgBoundingBox()","description":"Parameters"},"api/geoprocessing/functions/findAndUpdateMetricValue":{"id":"api/geoprocessing/functions/findAndUpdateMetricValue","title":"findAndUpdateMetricValue()","description":"Returns new sketchMetrics array with first sketchMetric matched set with new value."},"api/geoprocessing/functions/firstMatching":{"id":"api/geoprocessing/functions/firstMatching","title":"firstMatching()","description":"Returns the first item that returns true for filter"},"api/geoprocessing/functions/firstMatchingMetric":{"id":"api/geoprocessing/functions/firstMatchingMetric","title":"firstMatchingMetric()","description":"Returns the first metric that returns true for metricFilter"},"api/geoprocessing/functions/flattenByGroupAllClass":{"id":"api/geoprocessing/functions/flattenByGroupAllClass","title":"flattenByGroupAllClass()","description":"Aggregates metrics by group"},"api/geoprocessing/functions/flattenByGroupSketchAllClass":{"id":"api/geoprocessing/functions/flattenByGroupSketchAllClass","title":"flattenByGroupSketchAllClass()","description":"Flattens group class metrics, one for each group and sketch."},"api/geoprocessing/functions/flattenBySketchAllClass":{"id":"api/geoprocessing/functions/flattenBySketchAllClass","title":"flattenBySketchAllClass()","description":"Flattens class sketch metrics into array of objects, one for each sketch,"},"api/geoprocessing/functions/flattenSketchAllId":{"id":"api/geoprocessing/functions/flattenSketchAllId","title":"~~flattenSketchAllId()~~","description":"Returns one aggregate object for every sketch ID present in metrics,"},"api/geoprocessing/functions/gearTypeScore":{"id":"api/geoprocessing/functions/gearTypeScore","title":"gearTypeScore()","description":"Parameters"},"api/geoprocessing/functions/genClipLoader":{"id":"api/geoprocessing/functions/genClipLoader","title":"~~genClipLoader()~~","description":"Given a project client and 1 or more clip operations, returns a function that when called"},"api/geoprocessing/functions/genClipToPolygonDatasources":{"id":"api/geoprocessing/functions/genClipToPolygonDatasources","title":"genClipToPolygonDatasources()","description":"Returns a function that Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources"},"api/geoprocessing/functions/genClipToPolygonFeatures":{"id":"api/geoprocessing/functions/genClipToPolygonFeatures","title":"genClipToPolygonFeatures()","description":"Returns a function that applies clip operations to a feature using other polygon features."},"api/geoprocessing/functions/genFeature":{"id":"api/geoprocessing/functions/genFeature","title":"genFeature()","description":"Returns a Feature with given features geometry and properties. Reasonable defaults are given for properties not provided"},"api/geoprocessing/functions/genFeatureCollection":{"id":"api/geoprocessing/functions/genFeatureCollection","title":"genFeatureCollection()","description":"Given array of features, return a feature collection with given properties."},"api/geoprocessing/functions/genRandomPolygons":{"id":"api/geoprocessing/functions/genRandomPolygons","title":"genRandomPolygons()","description":"Generates random polygons within provided bounds. numPolygons defaults to 300, maxradiallength to 0.5"},"api/geoprocessing/functions/genSampleNullSketch":{"id":"api/geoprocessing/functions/genSampleNullSketch","title":"genSampleNullSketch()","description":"Returns a Sketch with given geometry and Geometry type, Properties are reasonable random"},"api/geoprocessing/functions/genSampleNullSketchCollection":{"id":"api/geoprocessing/functions/genSampleNullSketchCollection","title":"genSampleNullSketchCollection()","description":"Given feature collection, return a sketch collection with reasonable random props."},"api/geoprocessing/functions/genSampleSketch":{"id":"api/geoprocessing/functions/genSampleSketch","title":"genSampleSketch()","description":"Returns a Sketch with given geometry and Geometry type, Properties are reasonable random"},"api/geoprocessing/functions/genSampleSketchCollection":{"id":"api/geoprocessing/functions/genSampleSketchCollection","title":"genSampleSketchCollection()","description":"Given feature collection, return a sketch collection with reasonable random props."},"api/geoprocessing/functions/genSampleSketchCollectionFromSketches":{"id":"api/geoprocessing/functions/genSampleSketchCollectionFromSketches","title":"genSampleSketchCollectionFromSketches()","description":"Given feature collection, return a sketch collection with reasonable random props."},"api/geoprocessing/functions/genSampleSketchContext":{"id":"api/geoprocessing/functions/genSampleSketchContext","title":"genSampleSketchContext()","description":"Returns"},"api/geoprocessing/functions/genSampleUserAttributes":{"id":"api/geoprocessing/functions/genSampleUserAttributes","title":"genSampleUserAttributes()","description":"Returns"},"api/geoprocessing/functions/genSketch":{"id":"api/geoprocessing/functions/genSketch","title":"genSketch()","description":"Returns a Sketch with given features geometry and properties. Reasonable defaults are given for properties not provided"},"api/geoprocessing/functions/genSketchCollection":{"id":"api/geoprocessing/functions/genSketchCollection","title":"genSketchCollection()","description":"Given array of sketches, return a sketch collection with given properties."},"api/geoprocessing/functions/genTaskCacheKey":{"id":"api/geoprocessing/functions/genTaskCacheKey","title":"genTaskCacheKey()","description":"Generates a cache key for a geoprocessing request, given sketch properties and optional extra parameters (must be JSON compatible object)"},"api/geoprocessing/functions/genZodErrorMessage":{"id":"api/geoprocessing/functions/genZodErrorMessage","title":"genZodErrorMessage()","description":"Parameters"},"api/geoprocessing/functions/getArea":{"id":"api/geoprocessing/functions/getArea","title":"getArea()","description":"Returns area of valid raster cells (not nodata) overlapping with feature. If no valid cells found, returns 0."},"api/geoprocessing/functions/getClassificationLabel":{"id":"api/geoprocessing/functions/getClassificationLabel","title":"getClassificationLabel()","description":"Parameters"},"api/geoprocessing/functions/getCogFilename":{"id":"api/geoprocessing/functions/getCogFilename","title":"getCogFilename()","description":"Parameters"},"api/geoprocessing/functions/getDatasetBucketName":{"id":"api/geoprocessing/functions/getDatasetBucketName","title":"getDatasetBucketName()","description":"Type Parameters"},"api/geoprocessing/functions/getDatasourceById":{"id":"api/geoprocessing/functions/getDatasourceById","title":"getDatasourceById()","description":"find and return datasource from passed datasources"},"api/geoprocessing/functions/getExternalRasterDatasourceById":{"id":"api/geoprocessing/functions/getExternalRasterDatasourceById","title":"getExternalRasterDatasourceById()","description":"find and return external raster datasource from passed datasources"},"api/geoprocessing/functions/getExternalVectorDatasourceById":{"id":"api/geoprocessing/functions/getExternalVectorDatasourceById","title":"getExternalVectorDatasourceById()","description":"find and return external vector datasource from passed datasources"},"api/geoprocessing/functions/getFeatures":{"id":"api/geoprocessing/functions/getFeatures","title":"getFeatures()","description":"Returns features for a variety of vector datasources and formats, with additional filter options"},"api/geoprocessing/functions/getFeaturesForSketchBBoxes":{"id":"api/geoprocessing/functions/getFeaturesForSketchBBoxes","title":"getFeaturesForSketchBBoxes()","description":"Loads features from a FlatGeobuf referenced by URL, which intersect the"},"api/geoprocessing/functions/getFirstFromParam":{"id":"api/geoprocessing/functions/getFirstFromParam","title":"getFirstFromParam()","description":"Returns first element from param object at paramName key. Parameter can be string or array of strings"},"api/geoprocessing/functions/getFlatGeobufFilename":{"id":"api/geoprocessing/functions/getFlatGeobufFilename","title":"getFlatGeobufFilename()","description":"Returns datasource filename in flatgeobuf format"},"api/geoprocessing/functions/getFlatGeobufPath":{"id":"api/geoprocessing/functions/getFlatGeobufPath","title":"getFlatGeobufPath()","description":"Parameters"},"api/geoprocessing/functions/getGeopackagePath":{"id":"api/geoprocessing/functions/getGeopackagePath","title":"getGeopackagePath()","description":"Parameters"},"api/geoprocessing/functions/getHistogram":{"id":"api/geoprocessing/functions/getHistogram","title":"getHistogram()","description":"Returns histogram of value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0."},"api/geoprocessing/functions/getIndexIconPerc":{"id":"api/geoprocessing/functions/getIndexIconPerc","title":"getIndexIconPerc()","description":"Returns percent protection given index value,"},"api/geoprocessing/functions/getInternalRasterDatasourceById":{"id":"api/geoprocessing/functions/getInternalRasterDatasourceById","title":"getInternalRasterDatasourceById()","description":"find and return internal datasource from passed datasources"},"api/geoprocessing/functions/getInternalVectorDatasourceById":{"id":"api/geoprocessing/functions/getInternalVectorDatasourceById","title":"getInternalVectorDatasourceById()","description":"find and return internal vector datasource from passed datasources"},"api/geoprocessing/functions/getIucnCategoryForActivities":{"id":"api/geoprocessing/functions/getIucnCategoryForActivities","title":"getIucnCategoryForActivities()","description":"Given list of allowed activities in the sketch, returns the highest category allowable"},"api/geoprocessing/functions/getIucnCategoryForSketches":{"id":"api/geoprocessing/functions/getIucnCategoryForSketches","title":"getIucnCategoryForSketches()","description":"Return Category for each sketch keyed by sketchId"},"api/geoprocessing/functions/getIucnCategoryNameForSketches":{"id":"api/geoprocessing/functions/getIucnCategoryNameForSketches","title":"getIucnCategoryNameForSketches()","description":"Return Category name for each sketch keyed by sketchId"},"api/geoprocessing/functions/getIucnLevelNameForSketches":{"id":"api/geoprocessing/functions/getIucnLevelNameForSketches","title":"getIucnLevelNameForSketches()","description":"Return level name for each sketch keyed by sketchId"},"api/geoprocessing/functions/getJsonFilename":{"id":"api/geoprocessing/functions/getJsonFilename","title":"getJsonFilename()","description":"Returns datasource filename in geojson format"},"api/geoprocessing/functions/getJsonPath":{"id":"api/geoprocessing/functions/getJsonPath","title":"getJsonPath()","description":"Parameters"},"api/geoprocessing/functions/getJsonUserAttribute":{"id":"api/geoprocessing/functions/getJsonUserAttribute","title":"getJsonUserAttribute()","description":"Type Parameters"},"api/geoprocessing/functions/getKeys":{"id":"api/geoprocessing/functions/getKeys","title":"getKeys()","description":"Object.keys helper that returns strongly typed key values. Uses assertion so make sure your type covers all the keys!"},"api/geoprocessing/functions/getMetricGroupObjectiveId":{"id":"api/geoprocessing/functions/getMetricGroupObjectiveId","title":"getMetricGroupObjectiveId()","description":"Returns the top-level objective assigned for the given MetricGroup."},"api/geoprocessing/functions/getMetricGroupObjectiveIds":{"id":"api/geoprocessing/functions/getMetricGroupObjectiveIds","title":"getMetricGroupObjectiveIds()","description":"Returns array of all objective IDs configured for the given MetricGroup."},"api/geoprocessing/functions/getMinYesCountMap":{"id":"api/geoprocessing/functions/getMinYesCountMap","title":"getMinYesCountMap()","description":"Returns an object mapping objective ID to ID of first classification that counts toward objective"},"api/geoprocessing/functions/getMpaClassificationName":{"id":"api/geoprocessing/functions/getMpaClassificationName","title":"getMpaClassificationName()","description":"Returns protection level given MPA classification index value"},"api/geoprocessing/functions/getObjectiveById":{"id":"api/geoprocessing/functions/getObjectiveById","title":"getObjectiveById()","description":"find and return objectives from passed objectives"},"api/geoprocessing/functions/getParamStringArray":{"id":"api/geoprocessing/functions/getParamStringArray","title":"getParamStringArray()","description":"Validates and returns string[] parameter from extraParams. If param missing it returns an empty array"},"api/geoprocessing/functions/getRasterBoxSpherical":{"id":"api/geoprocessing/functions/getRasterBoxSpherical","title":"getRasterBoxSpherical()","description":"Parameters"},"api/geoprocessing/functions/getRasterDatasourceById":{"id":"api/geoprocessing/functions/getRasterDatasourceById","title":"getRasterDatasourceById()","description":"find and return raster datasource (internal or external) from passed datasources"},"api/geoprocessing/functions/getSketchCollectionChildIds":{"id":"api/geoprocessing/functions/getSketchCollectionChildIds","title":"~~getSketchCollectionChildIds()~~","description":"Given sketch collection, returns IDs of sketches in the collection"},"api/geoprocessing/functions/getSketchFeatures":{"id":"api/geoprocessing/functions/getSketchFeatures","title":"getSketchFeatures()","description":"Given sketch or sketch collection, returns just the individual sketch features inside."},"api/geoprocessing/functions/getSketchToMpaProtectionLevel":{"id":"api/geoprocessing/functions/getSketchToMpaProtectionLevel","title":"getSketchToMpaProtectionLevel()","description":"Returns object mapping sketch id to MPA classification"},"api/geoprocessing/functions/getSum":{"id":"api/geoprocessing/functions/getSum","title":"getSum()","description":"Returns sum of raster value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0."},"api/geoprocessing/functions/getUserAttribute":{"id":"api/geoprocessing/functions/getUserAttribute","title":"getUserAttribute()","description":"getUserAttribute(sketchOrProps, exportid)"},"api/geoprocessing/functions/getVectorDatasourceById":{"id":"api/geoprocessing/functions/getVectorDatasourceById","title":"getVectorDatasourceById()","description":"find and return vector datasource (internal or external) from passed datasources"},"api/geoprocessing/functions/getZoneClassificationName":{"id":"api/geoprocessing/functions/getZoneClassificationName","title":"getZoneClassificationName()","description":"Parameters"},"api/geoprocessing/functions/groupBy":{"id":"api/geoprocessing/functions/groupBy","title":"groupBy()","description":"Similar to lodash groupBy"},"api/geoprocessing/functions/hasOwnProperty":{"id":"api/geoprocessing/functions/hasOwnProperty","title":"hasOwnProperty()","description":"Type narrowing to allow property checking when object can be multiple types"},"api/geoprocessing/functions/includeVirtualSketch":{"id":"api/geoprocessing/functions/includeVirtualSketch","title":"includeVirtualSketch()","description":"If sketch collection passes sketchTest, then returns new collection"},"api/geoprocessing/functions/isExternalDatasource":{"id":"api/geoprocessing/functions/isExternalDatasource","title":"isExternalDatasource()","description":"Parameters"},"api/geoprocessing/functions/isExternalRasterDatasource":{"id":"api/geoprocessing/functions/isExternalRasterDatasource","title":"isExternalRasterDatasource()","description":"Parameters"},"api/geoprocessing/functions/isExternalVectorDatasource":{"id":"api/geoprocessing/functions/isExternalVectorDatasource","title":"isExternalVectorDatasource()","description":"Parameters"},"api/geoprocessing/functions/isFeature":{"id":"api/geoprocessing/functions/isFeature","title":"isFeature()","description":"Check if object is a Feature. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isFeatureCollection":{"id":"api/geoprocessing/functions/isFeatureCollection","title":"isFeatureCollection()","description":"Check if object is a Feature Collection. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isGeometry":{"id":"api/geoprocessing/functions/isGeometry","title":"isGeometry()","description":"Check if object is a Feature. Any code inside a block guarded by a conditional call to this function will have type narrowed to Feature"},"api/geoprocessing/functions/isImportRasterDatasourceConfig":{"id":"api/geoprocessing/functions/isImportRasterDatasourceConfig","title":"isImportRasterDatasourceConfig()","description":"Parameters"},"api/geoprocessing/functions/isImportVectorDatasourceConfig":{"id":"api/geoprocessing/functions/isImportVectorDatasourceConfig","title":"isImportVectorDatasourceConfig()","description":"Parameters"},"api/geoprocessing/functions/isinternalDatasource":{"id":"api/geoprocessing/functions/isinternalDatasource","title":"isinternalDatasource()","description":"Parameters"},"api/geoprocessing/functions/isInternalRasterDatasource":{"id":"api/geoprocessing/functions/isInternalRasterDatasource","title":"isInternalRasterDatasource()","description":"Parameters"},"api/geoprocessing/functions/isInternalVectorDatasource":{"id":"api/geoprocessing/functions/isInternalVectorDatasource","title":"isInternalVectorDatasource()","description":"Parameters"},"api/geoprocessing/functions/isLineStringFeature":{"id":"api/geoprocessing/functions/isLineStringFeature","title":"isLineStringFeature()","description":"Check if object is a Linestring. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isLineStringSketchCollection":{"id":"api/geoprocessing/functions/isLineStringSketchCollection","title":"isLineStringSketchCollection()","description":"Parameters"},"api/geoprocessing/functions/isMetric":{"id":"api/geoprocessing/functions/isMetric","title":"isMetric()","description":"Checks if object is a Metric and returns narrowed type"},"api/geoprocessing/functions/isMetricArray":{"id":"api/geoprocessing/functions/isMetricArray","title":"isMetricArray()","description":"Checks if object is a Metric array and returns narrowed type"},"api/geoprocessing/functions/isMetricPack":{"id":"api/geoprocessing/functions/isMetricPack","title":"isMetricPack()","description":"Checks if object is a MetricPack. Any code inside a block guarded by a conditional call to this function will have type narrowed to MetricPack"},"api/geoprocessing/functions/isMultiPolygonFeature":{"id":"api/geoprocessing/functions/isMultiPolygonFeature","title":"isMultiPolygonFeature()","description":"Check if object is a MultiPolygon. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isMultiPolygonSketch":{"id":"api/geoprocessing/functions/isMultiPolygonSketch","title":"isMultiPolygonSketch()","description":"Checks if sketch is a MultiPolygon. Any code inside a block guarded by a conditional call to this function will have type narrowed to Sketch"},"api/geoprocessing/functions/isMultiPolygonSketchCollection":{"id":"api/geoprocessing/functions/isMultiPolygonSketchCollection","title":"isMultiPolygonSketchCollection()","description":"Parameters"},"api/geoprocessing/functions/isNullSketch":{"id":"api/geoprocessing/functions/isNullSketch","title":"isNullSketch()","description":"Checks if object is a NullSketch. Any code inside a block guarded by a conditional call to this function will have type narrowed to NullSketch"},"api/geoprocessing/functions/isNullSketchCollection":{"id":"api/geoprocessing/functions/isNullSketchCollection","title":"isNullSketchCollection()","description":"Check if object is a NullSketchCollection. Any code inside a block guarded by a conditional call to this function will have type narrowed to NullSketchCollection"},"api/geoprocessing/functions/isObject":{"id":"api/geoprocessing/functions/isObject","title":"isObject()","description":"Parameters"},"api/geoprocessing/functions/isPointFeature":{"id":"api/geoprocessing/functions/isPointFeature","title":"isPointFeature()","description":"Check if object is a Point. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isPointSketchCollection":{"id":"api/geoprocessing/functions/isPointSketchCollection","title":"isPointSketchCollection()","description":"Parameters"},"api/geoprocessing/functions/isPolygonAllSketchCollection":{"id":"api/geoprocessing/functions/isPolygonAllSketchCollection","title":"isPolygonAllSketchCollection()","description":"Parameters"},"api/geoprocessing/functions/isPolygonAnyFeature":{"id":"api/geoprocessing/functions/isPolygonAnyFeature","title":"isPolygonAnyFeature()","description":"Check if object is a Polygon or MultiPolygon. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isPolygonFeature":{"id":"api/geoprocessing/functions/isPolygonFeature","title":"isPolygonFeature()","description":"Check if object is a Polygon feature. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isPolygonFeatureArray":{"id":"api/geoprocessing/functions/isPolygonFeatureArray","title":"isPolygonFeatureArray()","description":"Check if object is an array of Polygon features. Any code inside a block guarded by a conditional call to this function will have type narrowed"},"api/geoprocessing/functions/isPolygonSketch":{"id":"api/geoprocessing/functions/isPolygonSketch","title":"isPolygonSketch()","description":"Checks if sketch is a Polygon"},"api/geoprocessing/functions/isPolygonSketchCollection":{"id":"api/geoprocessing/functions/isPolygonSketchCollection","title":"isPolygonSketchCollection()","description":"Parameters"},"api/geoprocessing/functions/isRasterDatasource":{"id":"api/geoprocessing/functions/isRasterDatasource","title":"isRasterDatasource()","description":"Parameters"},"api/geoprocessing/functions/isRbcsProtectionLevel":{"id":"api/geoprocessing/functions/isRbcsProtectionLevel","title":"isRbcsProtectionLevel()","description":"Type guard for checking string is one of supported objective IDs"},"api/geoprocessing/functions/isSketch":{"id":"api/geoprocessing/functions/isSketch","title":"isSketch()","description":"Checks if object is a Sketch. Any code inside a block guarded by a conditional call to this function will have type narrowed to Sketch"},"api/geoprocessing/functions/isSketchCollection":{"id":"api/geoprocessing/functions/isSketchCollection","title":"isSketchCollection()","description":"Check if object is a SketchCollection. Any code inside a block guarded by a conditional call to this function will have type narrowed to SketchCollection"},"api/geoprocessing/functions/isTruthyAttributeValue":{"id":"api/geoprocessing/functions/isTruthyAttributeValue","title":"isTruthyAttributeValue()","description":"Parameters"},"api/geoprocessing/functions/isVectorDatasource":{"id":"api/geoprocessing/functions/isVectorDatasource","title":"isVectorDatasource()","description":"Parameters"},"api/geoprocessing/functions/keyBy":{"id":"api/geoprocessing/functions/keyBy","title":"keyBy()","description":"Similar to lodash keyBy"},"api/geoprocessing/functions/loadCog":{"id":"api/geoprocessing/functions/loadCog","title":"loadCog()","description":"Returns cog-aware georaster at given url. Will not fetch raster values"},"api/geoprocessing/functions/loadFgb":{"id":"api/geoprocessing/functions/loadFgb","title":"loadFgb()","description":"Fetch features from flatgeobuf at url that intersect with bounding box"},"api/geoprocessing/functions/maxWidth":{"id":"api/geoprocessing/functions/maxWidth","title":"maxWidth()","description":"Returns the maximum width of the geojson or bbox"},"api/geoprocessing/functions/metricsForSketch":{"id":"api/geoprocessing/functions/metricsForSketch","title":"metricsForSketch()","description":"Returns metrics for given sketch (can be an array of sketches)"},"api/geoprocessing/functions/metricsSketchIds":{"id":"api/geoprocessing/functions/metricsSketchIds","title":"metricsSketchIds()","description":"Returns metrics with matching sketchId (can be an array of sketchids)"},"api/geoprocessing/functions/metricsWithClassId":{"id":"api/geoprocessing/functions/metricsWithClassId","title":"metricsWithClassId()","description":"Returns metrics with matching sketchId (can be an array of sketchids)"},"api/geoprocessing/functions/metricsWithSketchId":{"id":"api/geoprocessing/functions/metricsWithSketchId","title":"metricsWithSketchId()","description":"Returns metrics with matching sketchId (can be an array of sketchids)"},"api/geoprocessing/functions/minWidth":{"id":"api/geoprocessing/functions/minWidth","title":"minWidth()","description":"Returns the minimum width of the bounding box of given feature"},"api/geoprocessing/functions/mpaClassMetric":{"id":"api/geoprocessing/functions/mpaClassMetric","title":"mpaClassMetric()","description":"Given sketch for rbcsMpa with rbcs activity userAttributes,"},"api/geoprocessing/functions/mpaClassMetrics":{"id":"api/geoprocessing/functions/mpaClassMetrics","title":"mpaClassMetrics()","description":"Given sketch for rbcsMpa or collection of sketches for rbcsMpas with rbcs activity userAttributes,"},"api/geoprocessing/functions/nestMetrics":{"id":"api/geoprocessing/functions/nestMetrics","title":"nestMetrics()","description":"Recursively groups metrics by ID in order of ids specified to create arbitrary nested hierarchy for fast lookup."},"api/geoprocessing/functions/numberFormat":{"id":"api/geoprocessing/functions/numberFormat","title":"numberFormat()","description":"Formats number to string, if less than zero will leave as-is, otherwise will format as large number"},"api/geoprocessing/functions/overlapArea":{"id":"api/geoprocessing/functions/overlapArea","title":"~~overlapArea()~~","description":"Assuming sketches are within some outer boundary with size outerArea,"},"api/geoprocessing/functions/overlapAreaGroupMetrics":{"id":"api/geoprocessing/functions/overlapAreaGroupMetrics","title":"overlapAreaGroupMetrics()","description":"Generate overlap group metrics using overlapArea operation"},"api/geoprocessing/functions/overlapFeatures":{"id":"api/geoprocessing/functions/overlapFeatures","title":"overlapFeatures()","description":"Calculates overlap between sketch(es) and an array of polygon features."},"api/geoprocessing/functions/overlapFeaturesGroupMetrics":{"id":"api/geoprocessing/functions/overlapFeaturesGroupMetrics","title":"overlapFeaturesGroupMetrics()","description":"Generate overlap group metrics using overlapFeatures operation"},"api/geoprocessing/functions/overlapGroupMetrics":{"id":"api/geoprocessing/functions/overlapGroupMetrics","title":"overlapGroupMetrics()","description":"Given area overlap metrics stratified by class and sketch, returns new metrics also stratified by group"},"api/geoprocessing/functions/overlapRasterClass":{"id":"api/geoprocessing/functions/overlapRasterClass","title":"~~overlapRasterClass()~~","description":"Calculates sum of overlap between sketches and a categorical raster with numeric values representing feature classes"},"api/geoprocessing/functions/overlapRasterGroupMetrics":{"id":"api/geoprocessing/functions/overlapRasterGroupMetrics","title":"overlapRasterGroupMetrics()","description":"Generate overlap group metrics using rasterMetrics operation"},"api/geoprocessing/functions/overlapSubarea":{"id":"api/geoprocessing/functions/overlapSubarea","title":"~~overlapSubarea()~~","description":"Returns area stats for sketch input after performing overlay operation against a subarea feature."},"api/geoprocessing/functions/packMetrics":{"id":"api/geoprocessing/functions/packMetrics","title":"packMetrics()","description":"Converts Metric array to a new MetricPack."},"api/geoprocessing/functions/parseGeoraster":{"id":"api/geoprocessing/functions/parseGeoraster","title":"parseGeoraster()","description":"Parameters"},"api/geoprocessing/functions/parseLambdaResponse":{"id":"api/geoprocessing/functions/parseLambdaResponse","title":"parseLambdaResponse()","description":"Parses result from worker lambda"},"api/geoprocessing/functions/percentGoalWithEdge":{"id":"api/geoprocessing/functions/percentGoalWithEdge","title":"percentGoalWithEdge()","description":"Special percent formatter designed to produce readable percent values for display given an upper percent goal"},"api/geoprocessing/functions/percentWithEdge":{"id":"api/geoprocessing/functions/percentWithEdge","title":"percentWithEdge()","description":"Special percent formatter designed to produce readable percent values for"},"api/geoprocessing/functions/randomFloat":{"id":"api/geoprocessing/functions/randomFloat","title":"randomFloat()","description":"Parameters"},"api/geoprocessing/functions/randomInt":{"id":"api/geoprocessing/functions/randomInt","title":"randomInt()","description":"Parameters"},"api/geoprocessing/functions/rasterMetrics":{"id":"api/geoprocessing/functions/rasterMetrics","title":"rasterMetrics()","description":"Calculates summary metrics (stats/area) on given raster, optionally intersecting raster with provided feature (zonal statistics)."},"api/geoprocessing/functions/rasterStats":{"id":"api/geoprocessing/functions/rasterStats","title":"rasterStats()","description":"Calculates over 10 different raster statistics, optionally constrains to raster cells overlapping with feature (zonal statistics)."},"api/geoprocessing/functions/rasterStatsToMetrics":{"id":"api/geoprocessing/functions/rasterStatsToMetrics","title":"rasterStatsToMetrics()","description":"Converts an array of geoblaze raster StatsObjects to an array of Metrics"},"api/geoprocessing/functions/rbcsMpaToMetric":{"id":"api/geoprocessing/functions/rbcsMpaToMetric","title":"rbcsMpaToMetric()","description":"Parameters"},"api/geoprocessing/functions/rbcsZoneToMetric":{"id":"api/geoprocessing/functions/rbcsZoneToMetric","title":"rbcsZoneToMetric()","description":"Transforms an rbcs zone object to a metric"},"api/geoprocessing/functions/rekeyMetrics":{"id":"api/geoprocessing/functions/rekeyMetrics","title":"rekeyMetrics()","description":"Reorders metrics (by mutation) to a consistent key order for readability"},"api/geoprocessing/functions/rekeyObject":{"id":"api/geoprocessing/functions/rekeyObject","title":"rekeyObject()","description":"Reorders object, mutating in place, in the order provided"},"api/geoprocessing/functions/removeSketchCollPolygonHoles":{"id":"api/geoprocessing/functions/removeSketchCollPolygonHoles","title":"removeSketchCollPolygonHoles()","description":"Parameters"},"api/geoprocessing/functions/removeSketchPolygonHoles":{"id":"api/geoprocessing/functions/removeSketchPolygonHoles","title":"removeSketchPolygonHoles()","description":"Parameters"},"api/geoprocessing/functions/roundDecimal":{"id":"api/geoprocessing/functions/roundDecimal","title":"roundDecimal()","description":"Rounds number to a fixed number of decimals"},"api/geoprocessing/functions/roundDecimalFormat":{"id":"api/geoprocessing/functions/roundDecimalFormat","title":"roundDecimalFormat()","description":"Rounds number to a fixed number of decimals, then formats as a human readable string"},"api/geoprocessing/functions/roundLower":{"id":"api/geoprocessing/functions/roundLower","title":"roundLower()","description":"Formats number to string, rounding decimal to number of digits, if value is less than lower will clamp to lower value"},"api/geoprocessing/functions/runLambdaWorker":{"id":"api/geoprocessing/functions/runLambdaWorker","title":"runLambdaWorker()","description":"Runs a function on a specified lambda worker"},"api/geoprocessing/functions/sampleSketchReportContextValue":{"id":"api/geoprocessing/functions/sampleSketchReportContextValue","title":"sampleSketchReportContextValue()","description":"Creates a ReportContextValue object for a Sketch with sample values. overrides will be merged in, replacing default values"},"api/geoprocessing/functions/scanTasks":{"id":"api/geoprocessing/functions/scanTasks","title":"scanTasks()","description":"Parameters"},"api/geoprocessing/functions/sketchToId":{"id":"api/geoprocessing/functions/sketchToId","title":"sketchToId()","description":"Given sketch(es), returns ID(s)"},"api/geoprocessing/functions/sketchToZone":{"id":"api/geoprocessing/functions/sketchToZone","title":"sketchToZone()","description":"Parameters"},"api/geoprocessing/functions/sortMetrics":{"id":"api/geoprocessing/functions/sortMetrics","title":"sortMetrics()","description":"Sorts metrics to a consistent order for readability"},"api/geoprocessing/functions/sortMetricsDisplayOrder":{"id":"api/geoprocessing/functions/sortMetricsDisplayOrder","title":"sortMetricsDisplayOrder()","description":"Sorts metrics by ID given a user-defined metric dimension (sortId) and array of ID"},"api/geoprocessing/functions/splitBBoxAntimeridian":{"id":"api/geoprocessing/functions/splitBBoxAntimeridian","title":"splitBBoxAntimeridian()","description":"If bounding box crosses antimeridian (and extends outside the range of -180 to 180),"},"api/geoprocessing/functions/splitFeatureAntimeridian":{"id":"api/geoprocessing/functions/splitFeatureAntimeridian","title":"splitFeatureAntimeridian()","description":"Splits a Feature or FeatureCollection on the 180 degree antimeridian."},"api/geoprocessing/functions/splitSketchAntimeridian":{"id":"api/geoprocessing/functions/splitSketchAntimeridian","title":"splitSketchAntimeridian()","description":"Splits a Sketch or SketchCollection on the 180 degree antimeridian"},"api/geoprocessing/functions/squareMeterToKilometer":{"id":"api/geoprocessing/functions/squareMeterToKilometer","title":"squareMeterToKilometer()","description":"Converts value from square meters to square kilometers"},"api/geoprocessing/functions/squareMeterToMile":{"id":"api/geoprocessing/functions/squareMeterToMile","title":"squareMeterToMile()","description":"Converts value from square meters to square miles"},"api/geoprocessing/functions/testWithinPerc":{"id":"api/geoprocessing/functions/testWithinPerc","title":"testWithinPerc()","description":"Expects that testValue is equal to expectedValue or optionally within percentage (defaults to .01 or 1%)"},"api/geoprocessing/functions/toChildProperties":{"id":"api/geoprocessing/functions/toChildProperties","title":"toChildProperties()","description":"Returns SketchProperties for each child sketch in a SketchCollection"},"api/geoprocessing/functions/toFeatureArray":{"id":"api/geoprocessing/functions/toFeatureArray","title":"toFeatureArray()","description":"Helper to convert a Feature or a FeatureCollection to a Feature array"},"api/geoprocessing/functions/toFeaturePolygonArray":{"id":"api/geoprocessing/functions/toFeaturePolygonArray","title":"toFeaturePolygonArray()","description":"Parameters"},"api/geoprocessing/functions/toNullSketch":{"id":"api/geoprocessing/functions/toNullSketch","title":"toNullSketch()","description":"Returns sketch or sketch collection with null geometry"},"api/geoprocessing/functions/toNullSketchArray":{"id":"api/geoprocessing/functions/toNullSketchArray","title":"toNullSketchArray()","description":"Helper to convert a NullSketch or NullSketchCollection to a NullSketch array"},"api/geoprocessing/functions/toPercentMetric":{"id":"api/geoprocessing/functions/toPercentMetric","title":"toPercentMetric()","description":"Matches numerator metrics with denominator metrics and divides their value,"},"api/geoprocessing/functions/toRasterProjection":{"id":"api/geoprocessing/functions/toRasterProjection","title":"toRasterProjection()","description":"Reprojects a feature to the same projection as the raster."},"api/geoprocessing/functions/toShortSketches":{"id":"api/geoprocessing/functions/toShortSketches","title":"~~toShortSketches()~~","description":"Returns an array of shorthand sketches (id + name) given a Sketch or SketchCollection."},"api/geoprocessing/functions/toSketchArray":{"id":"api/geoprocessing/functions/toSketchArray","title":"toSketchArray()","description":"Converts a Sketch or SketchCollection to a Sketch array, maintaining geometry type"},"api/geoprocessing/functions/toSketchPropertiesArray":{"id":"api/geoprocessing/functions/toSketchPropertiesArray","title":"toSketchPropertiesArray()","description":"Converts array of sketches to an array of their SketchProperties"},"api/geoprocessing/functions/unpackMetrics":{"id":"api/geoprocessing/functions/unpackMetrics","title":"unpackMetrics()","description":"Converts MetricPack to a new Metric array."},"api/geoprocessing/functions/updateCommandsSync":{"id":"api/geoprocessing/functions/updateCommandsSync","title":"updateCommandsSync()","description":"Run dynamodb update commands synchronously to avoid throttling, retrying on ThroughputError"},"api/geoprocessing/functions/valueFormatter":{"id":"api/geoprocessing/functions/valueFormatter","title":"valueFormatter()","description":"Given a number or string value and the name of a formatter function, returns a formatted value"},"api/geoprocessing/functions/zeroPolygon":{"id":"api/geoprocessing/functions/zeroPolygon","title":"zeroPolygon()","description":"Returns a zero polygon geometry (three [0,0] coordinates)"},"api/geoprocessing/functions/zeroSketch":{"id":"api/geoprocessing/functions/zeroSketch","title":"zeroSketch()","description":"Given sketch, returns the mutated sketch with a zero polygon geometry (three [0,0] coordinates)"},"api/geoprocessing/functions/zeroSketchArray":{"id":"api/geoprocessing/functions/zeroSketchArray","title":"zeroSketchArray()","description":"Given sketch array, returns the mutated sketches with a zero polygon geometry (three [0,0] coordinates)"},"api/geoprocessing/functions/zeroSketchCollection":{"id":"api/geoprocessing/functions/zeroSketchCollection","title":"zeroSketchCollection()","description":"Given sketch collection, returns the mutated collection with all child sketches switched to have zero polygon geometry (three [0,0] coordinates)"},"api/geoprocessing/functions/zoneClassMetrics":{"id":"api/geoprocessing/functions/zoneClassMetrics","title":"zoneClassMetrics()","description":"Given sketch for rbcsZone or collection of zone sketches with userAttributes for rcbs activities,"},"api/geoprocessing/index":{"id":"api/geoprocessing/index","title":"geoprocessing","description":"geoprocessing is the main module used by a geoprocessing project. It includes everything needing for creating, building, testing, and deploying a geoprocessing project with the exception of UI components which are exported separately in client-ui."},"api/geoprocessing/interfaces/BaseImportDatasourceConfig":{"id":"api/geoprocessing/interfaces/BaseImportDatasourceConfig","title":"BaseImportDatasourceConfig","description":"Properties"},"api/geoprocessing/interfaces/CalcStatsOptions":{"id":"api/geoprocessing/interfaces/CalcStatsOptions","title":"CalcStatsOptions","description":"options accepted by geoblaze.stats() to calc-stats library"},"api/geoprocessing/interfaces/ClipOptions":{"id":"api/geoprocessing/interfaces/ClipOptions","title":"ClipOptions","description":"Optional parameters for polygon clip preprocessor"},"api/geoprocessing/interfaces/DatasourceClipOperation":{"id":"api/geoprocessing/interfaces/DatasourceClipOperation","title":"DatasourceClipOperation","description":"Parameters for clip operation using a datasource"},"api/geoprocessing/interfaces/DatasourceOptions":{"id":"api/geoprocessing/interfaces/DatasourceOptions","title":"DatasourceOptions","description":"Properties"},"api/geoprocessing/interfaces/DefaultExtraParams":{"id":"api/geoprocessing/interfaces/DefaultExtraParams","title":"DefaultExtraParams","description":"Common set of extra parameters that might be passed to a geoprocessing function"},"api/geoprocessing/interfaces/Feature":{"id":"api/geoprocessing/interfaces/Feature","title":"Feature\\\\","description":"A feature object which contains a geometry and associated properties."},"api/geoprocessing/interfaces/FeatureClipOperation":{"id":"api/geoprocessing/interfaces/FeatureClipOperation","title":"FeatureClipOperation","description":"Parameters for clip operation using polygon features"},"api/geoprocessing/interfaces/FeatureCollection":{"id":"api/geoprocessing/interfaces/FeatureCollection","title":"FeatureCollection\\\\","description":"A collection of feature objects."},"api/geoprocessing/interfaces/FeatureMap":{"id":"api/geoprocessing/interfaces/FeatureMap","title":"FeatureMap","description":"A simple map of features keyed by their name"},"api/geoprocessing/interfaces/FeatureTree":{"id":"api/geoprocessing/interfaces/FeatureTree","title":"FeatureTree","description":"Properties"},"api/geoprocessing/interfaces/FgBoundingBox":{"id":"api/geoprocessing/interfaces/FgBoundingBox","title":"FgBoundingBox","description":"Properties"},"api/geoprocessing/interfaces/GeogProp":{"id":"api/geoprocessing/interfaces/GeogProp","title":"GeogProp","description":"Properties"},"api/geoprocessing/interfaces/GeometryCollection":{"id":"api/geoprocessing/interfaces/GeometryCollection","title":"GeometryCollection\\\\","description":"Geometry Collection"},"api/geoprocessing/interfaces/GeoprocessingHandlerOptions":{"id":"api/geoprocessing/interfaces/GeoprocessingHandlerOptions","title":"GeoprocessingHandlerOptions","description":"Extended by"},"api/geoprocessing/interfaces/GeoprocessingProject":{"id":"api/geoprocessing/interfaces/GeoprocessingProject","title":"GeoprocessingProject","description":"Properties"},"api/geoprocessing/interfaces/GeoprocessingRequestModel":{"id":"api/geoprocessing/interfaces/GeoprocessingRequestModel","title":"GeoprocessingRequestModel\\\\","description":"Geoprocessing request internal data model, with full objects, no JSON strings"},"api/geoprocessing/interfaces/GeoprocessingServiceMetadata":{"id":"api/geoprocessing/interfaces/GeoprocessingServiceMetadata","title":"GeoprocessingServiceMetadata","description":"Expected public service metadata for each function"},"api/geoprocessing/interfaces/GeoprocessingTask":{"id":"api/geoprocessing/interfaces/GeoprocessingTask","title":"GeoprocessingTask\\\\","description":"Type Parameters"},"api/geoprocessing/interfaces/Georaster":{"id":"api/geoprocessing/interfaces/Georaster","title":"Georaster","description":"Properties"},"api/geoprocessing/interfaces/Histogram":{"id":"api/geoprocessing/interfaces/Histogram","title":"Histogram","description":"Indexable"},"api/geoprocessing/interfaces/HistogramOptions":{"id":"api/geoprocessing/interfaces/HistogramOptions","title":"HistogramOptions","description":"Properties"},"api/geoprocessing/interfaces/IucnActivity":{"id":"api/geoprocessing/interfaces/IucnActivity","title":"IucnActivity","description":"Properties"},"api/geoprocessing/interfaces/IucnActivityRank":{"id":"api/geoprocessing/interfaces/IucnActivityRank","title":"IucnActivityRank","description":"Properties"},"api/geoprocessing/interfaces/IucnCategory":{"id":"api/geoprocessing/interfaces/IucnCategory","title":"IucnCategory","description":"Extended by"},"api/geoprocessing/interfaces/IucnCategoryCombined":{"id":"api/geoprocessing/interfaces/IucnCategoryCombined","title":"IucnCategoryCombined","description":"Extends"},"api/geoprocessing/interfaces/LineString":{"id":"api/geoprocessing/interfaces/LineString","title":"LineString","description":"LineString geometry object."},"api/geoprocessing/interfaces/MetricGroupItem":{"id":"api/geoprocessing/interfaces/MetricGroupItem","title":"MetricGroupItem\\\\","description":"Extended by"},"api/geoprocessing/interfaces/MetricPack":{"id":"api/geoprocessing/interfaces/MetricPack","title":"MetricPack","description":"Alternative JSON format for metrics data that is smaller in size, better suited for blob storage and network transport"},"api/geoprocessing/interfaces/MultiLineString":{"id":"api/geoprocessing/interfaces/MultiLineString","title":"MultiLineString","description":"MultiLineString geometry object."},"api/geoprocessing/interfaces/MultiPolygon":{"id":"api/geoprocessing/interfaces/MultiPolygon","title":"MultiPolygon","description":"MultiPolygon geometry object."},"api/geoprocessing/interfaces/Node":{"id":"api/geoprocessing/interfaces/Node","title":"Node","description":"Properties"},"api/geoprocessing/interfaces/NullSketch":{"id":"api/geoprocessing/interfaces/NullSketch","title":"NullSketch","description":"Extends"},"api/geoprocessing/interfaces/NullSketchCollection":{"id":"api/geoprocessing/interfaces/NullSketchCollection","title":"NullSketchCollection","description":"Extends"},"api/geoprocessing/interfaces/OverlapRasterOptions":{"id":"api/geoprocessing/interfaces/OverlapRasterOptions","title":"OverlapRasterOptions","description":"options accepted by rasterStats"},"api/geoprocessing/interfaces/PercentEdgeOptions":{"id":"api/geoprocessing/interfaces/PercentEdgeOptions","title":"PercentEdgeOptions","description":"Properties"},"api/geoprocessing/interfaces/Point":{"id":"api/geoprocessing/interfaces/Point","title":"Point","description":"Point geometry object."},"api/geoprocessing/interfaces/Polygon":{"id":"api/geoprocessing/interfaces/Polygon","title":"Polygon","description":"Polygon geometry object."},"api/geoprocessing/interfaces/PreprocessingHandlerOptions":{"id":"api/geoprocessing/interfaces/PreprocessingHandlerOptions","title":"PreprocessingHandlerOptions","description":"Extended by"},"api/geoprocessing/interfaces/PreprocessingRequest":{"id":"api/geoprocessing/interfaces/PreprocessingRequest","title":"PreprocessingRequest","description":"Properties"},"api/geoprocessing/interfaces/PreprocessingResponse":{"id":"api/geoprocessing/interfaces/PreprocessingResponse","title":"PreprocessingResponse\\\\","description":"Type Parameters"},"api/geoprocessing/interfaces/PreprocessingService":{"id":"api/geoprocessing/interfaces/PreprocessingService","title":"PreprocessingService","description":"Properties"},"api/geoprocessing/interfaces/PreprocessingServiceMetadata":{"id":"api/geoprocessing/interfaces/PreprocessingServiceMetadata","title":"PreprocessingServiceMetadata","description":"Extends"},"api/geoprocessing/interfaces/ProjectClientConfig":{"id":"api/geoprocessing/interfaces/ProjectClientConfig","title":"ProjectClientConfig","description":"Properties"},"api/geoprocessing/interfaces/ProjectClientInterface":{"id":"api/geoprocessing/interfaces/ProjectClientInterface","title":"ProjectClientInterface","description":"Methods"},"api/geoprocessing/interfaces/RasterStatsOptions":{"id":"api/geoprocessing/interfaces/RasterStatsOptions","title":"RasterStatsOptions","description":"options accepted by rasterStats"},"api/geoprocessing/interfaces/RbcsObjective":{"id":"api/geoprocessing/interfaces/RbcsObjective","title":"RbcsObjective","description":"Extends"},"api/geoprocessing/interfaces/RegBasedClassificationMetric":{"id":"api/geoprocessing/interfaces/RegBasedClassificationMetric","title":"RegBasedClassificationMetric","description":"Extended metric for mpa-reg-based-classification results, either zone or mpa classification"},"api/geoprocessing/interfaces/Report":{"id":"api/geoprocessing/interfaces/Report","title":"Report","description":"Represents a single report, with one or more metrics"},"api/geoprocessing/interfaces/ReportContextValue":{"id":"api/geoprocessing/interfaces/ReportContextValue","title":"ReportContextValue","description":"Provides necessary context to ReportClient components, particularly for"},"api/geoprocessing/interfaces/ReportResult":{"id":"api/geoprocessing/interfaces/ReportResult","title":"ReportResult","description":"Report results consist of collections of metrics for sketches"},"api/geoprocessing/interfaces/ReportResultBase":{"id":"api/geoprocessing/interfaces/ReportResultBase","title":"ReportResultBase","description":"Metrics for reports not associated with sketches. Used for precalculation"},"api/geoprocessing/interfaces/RootTaskItem":{"id":"api/geoprocessing/interfaces/RootTaskItem","title":"RootTaskItem\\\\","description":"Extends"},"api/geoprocessing/interfaces/RoundDecimalOptions":{"id":"api/geoprocessing/interfaces/RoundDecimalOptions","title":"RoundDecimalOptions","description":"Properties"},"api/geoprocessing/interfaces/SeaSketchReportingMessageEvent":{"id":"api/geoprocessing/interfaces/SeaSketchReportingMessageEvent","title":"SeaSketchReportingMessageEvent","description":"Properties"},"api/geoprocessing/interfaces/SeaSketchReportingToggleLanguageEvent":{"id":"api/geoprocessing/interfaces/SeaSketchReportingToggleLanguageEvent","title":"SeaSketchReportingToggleLanguageEvent","description":"Properties"},"api/geoprocessing/interfaces/SeaSketchReportingToggleLayerVisibilityEvent":{"id":"api/geoprocessing/interfaces/SeaSketchReportingToggleLayerVisibilityEvent","title":"SeaSketchReportingToggleLayerVisibilityEvent","description":"Properties"},"api/geoprocessing/interfaces/SeaSketchReportingVisibleLayersChangeEvent":{"id":"api/geoprocessing/interfaces/SeaSketchReportingVisibleLayersChangeEvent","title":"SeaSketchReportingVisibleLayersChangeEvent","description":"Properties"},"api/geoprocessing/interfaces/Sketch":{"id":"api/geoprocessing/interfaces/Sketch","title":"Sketch\\\\","description":"Extends"},"api/geoprocessing/interfaces/SketchCollection":{"id":"api/geoprocessing/interfaces/SketchCollection","title":"SketchCollection\\\\","description":"Extends"},"api/geoprocessing/interfaces/SketchMap":{"id":"api/geoprocessing/interfaces/SketchMap","title":"SketchMap","description":"A simple map of sketches and/or sketch collections keyed by their name"},"api/geoprocessing/interfaces/StatsObject":{"id":"api/geoprocessing/interfaces/StatsObject","title":"StatsObject","description":"Properties"},"api/geoprocessing/interfaces/TestExampleOutput":{"id":"api/geoprocessing/interfaces/TestExampleOutput","title":"TestExampleOutput","description":"Properties"},"api/geoprocessing/interfaces/VectorDataSourceDetails":{"id":"api/geoprocessing/interfaces/VectorDataSourceDetails","title":"VectorDataSourceDetails","description":"Properties"},"api/geoprocessing/interfaces/VectorDataSourceOptions":{"id":"api/geoprocessing/interfaces/VectorDataSourceOptions","title":"VectorDataSourceOptions","description":"Properties"},"api/geoprocessing/interfaces/VectorFeature":{"id":"api/geoprocessing/interfaces/VectorFeature","title":"VectorFeature","description":"A feature object which contains a geometry and associated properties."},"api/geoprocessing/interfaces/VectorPropertyFilter":{"id":"api/geoprocessing/interfaces/VectorPropertyFilter","title":"VectorPropertyFilter","description":"Specify one or more literal values for one or more vector Feature properties"},"api/geoprocessing/interfaces/WindowOptions":{"id":"api/geoprocessing/interfaces/WindowOptions","title":"WindowOptions","description":"defines the new raster image to generate as a window in the source raster image. Resolution (cell size) is determined from this"},"api/geoprocessing/type-aliases/bandArithmetic":{"id":"api/geoprocessing/type-aliases/bandArithmetic","title":"bandArithmetic()","description":"Parameters"},"api/geoprocessing/type-aliases/BaseDatasource":{"id":"api/geoprocessing/type-aliases/BaseDatasource","title":"BaseDatasource","description":""},"api/geoprocessing/type-aliases/BBox":{"id":"api/geoprocessing/type-aliases/BBox","title":"BBox","description":"Bounding box"},"api/geoprocessing/type-aliases/ClassificationId":{"id":"api/geoprocessing/type-aliases/ClassificationId","title":"ClassificationId","description":"Unique string ID for classification given to sketches (e.g. zone classification, protection level)"},"api/geoprocessing/type-aliases/ClassStats":{"id":"api/geoprocessing/type-aliases/ClassStats","title":"ClassStats","description":""},"api/geoprocessing/type-aliases/ClientJsonConfig":{"id":"api/geoprocessing/type-aliases/ClientJsonConfig","title":"ClientJsonConfig","description":"Represents a geoprocessing client object"},"api/geoprocessing/type-aliases/ClipOperations":{"id":"api/geoprocessing/type-aliases/ClipOperations","title":"ClipOperations","description":"Supported clip operations"},"api/geoprocessing/type-aliases/DataClass":{"id":"api/geoprocessing/type-aliases/DataClass","title":"DataClass","description":"Represents a group of data classes."},"api/geoprocessing/type-aliases/Datasource":{"id":"api/geoprocessing/type-aliases/Datasource","title":"Datasource","description":""},"api/geoprocessing/type-aliases/EezLandUnion":{"id":"api/geoprocessing/type-aliases/EezLandUnion","title":"EezLandUnion","description":""},"api/geoprocessing/type-aliases/ExecutionMode":{"id":"api/geoprocessing/type-aliases/ExecutionMode","title":"ExecutionMode","description":""},"api/geoprocessing/type-aliases/ExternalRasterDatasource":{"id":"api/geoprocessing/type-aliases/ExternalRasterDatasource","title":"ExternalRasterDatasource","description":""},"api/geoprocessing/type-aliases/ExternalVectorDatasource":{"id":"api/geoprocessing/type-aliases/ExternalVectorDatasource","title":"ExternalVectorDatasource","description":""},"api/geoprocessing/type-aliases/EXTRA_RASTER_STAT":{"id":"api/geoprocessing/type-aliases/EXTRA_RASTER_STAT","title":"EXTRA\\\\_RASTER\\\\_STAT","description":""},"api/geoprocessing/type-aliases/FunctionExtraParams":{"id":"api/geoprocessing/type-aliases/FunctionExtraParams","title":"FunctionExtraParams","description":""},"api/geoprocessing/type-aliases/GEOBLAZE_RASTER_STAT":{"id":"api/geoprocessing/type-aliases/GEOBLAZE_RASTER_STAT","title":"GEOBLAZE\\\\_RASTER\\\\_STAT","description":""},"api/geoprocessing/type-aliases/Geographies":{"id":"api/geoprocessing/type-aliases/Geographies","title":"Geographies","description":""},"api/geoprocessing/type-aliases/Geography":{"id":"api/geoprocessing/type-aliases/Geography","title":"Geography","description":""},"api/geoprocessing/type-aliases/GeoJsonProperties":{"id":"api/geoprocessing/type-aliases/GeoJsonProperties","title":"GeoJsonProperties","description":""},"api/geoprocessing/type-aliases/Geometry":{"id":"api/geoprocessing/type-aliases/Geometry","title":"Geometry","description":"Geometry object."},"api/geoprocessing/type-aliases/GeoprocessingJsonConfig":{"id":"api/geoprocessing/type-aliases/GeoprocessingJsonConfig","title":"GeoprocessingJsonConfig","description":"Represents a single JS package"},"api/geoprocessing/type-aliases/GeoprocessingRequest":{"id":"api/geoprocessing/type-aliases/GeoprocessingRequest","title":"GeoprocessingRequest\\\\","description":"Geoprocessing request sent via HTTP GET, with extraParams as url-encoded JSON string"},"api/geoprocessing/type-aliases/GeoprocessingRequestParams":{"id":"api/geoprocessing/type-aliases/GeoprocessingRequestParams","title":"GeoprocessingRequestParams","description":""},"api/geoprocessing/type-aliases/GeorasterMetadata":{"id":"api/geoprocessing/type-aliases/GeorasterMetadata","title":"GeorasterMetadata","description":""},"api/geoprocessing/type-aliases/GeoTypes":{"id":"api/geoprocessing/type-aliases/GeoTypes","title":"GeoTypes","description":""},"api/geoprocessing/type-aliases/get":{"id":"api/geoprocessing/type-aliases/get","title":"get()","description":"Parameters"},"api/geoprocessing/type-aliases/GroupMetricAgg":{"id":"api/geoprocessing/type-aliases/GroupMetricAgg","title":"GroupMetricAgg","description":"Single flattened metric with class values keyed by class name"},"api/geoprocessing/type-aliases/GroupMetricSketchAgg":{"id":"api/geoprocessing/type-aliases/GroupMetricSketchAgg","title":"GroupMetricSketchAgg","description":"Type declaration"},"api/geoprocessing/type-aliases/histogram":{"id":"api/geoprocessing/type-aliases/histogram","title":"histogram()","description":"Parameters"},"api/geoprocessing/type-aliases/identify":{"id":"api/geoprocessing/type-aliases/identify","title":"identify()","description":"Parameters"},"api/geoprocessing/type-aliases/ImportRasterDatasourceConfig":{"id":"api/geoprocessing/type-aliases/ImportRasterDatasourceConfig","title":"ImportRasterDatasourceConfig","description":""},"api/geoprocessing/type-aliases/ImportRasterDatasourceOptions":{"id":"api/geoprocessing/type-aliases/ImportRasterDatasourceOptions","title":"ImportRasterDatasourceOptions","description":""},"api/geoprocessing/type-aliases/ImportVectorDatasourceConfig":{"id":"api/geoprocessing/type-aliases/ImportVectorDatasourceConfig","title":"ImportVectorDatasourceConfig","description":"Full configuration needed to import a dataset"},"api/geoprocessing/type-aliases/ImportVectorDatasourceOptions":{"id":"api/geoprocessing/type-aliases/ImportVectorDatasourceOptions","title":"ImportVectorDatasourceOptions","description":""},"api/geoprocessing/type-aliases/InternalRasterDatasource":{"id":"api/geoprocessing/type-aliases/InternalRasterDatasource","title":"InternalRasterDatasource","description":""},"api/geoprocessing/type-aliases/InternalVectorDatasource":{"id":"api/geoprocessing/type-aliases/InternalVectorDatasource","title":"InternalVectorDatasource","description":""},"api/geoprocessing/type-aliases/ISO8601DateTime":{"id":"api/geoprocessing/type-aliases/ISO8601DateTime","title":"ISO8601DateTime","description":""},"api/geoprocessing/type-aliases/ISO8601Duration":{"id":"api/geoprocessing/type-aliases/ISO8601Duration","title":"ISO8601Duration","description":""},"api/geoprocessing/type-aliases/IucnActivityRankId":{"id":"api/geoprocessing/type-aliases/IucnActivityRankId","title":"IucnActivityRankId","description":""},"api/geoprocessing/type-aliases/JSONValue":{"id":"api/geoprocessing/type-aliases/JSONValue","title":"JSONValue","description":""},"api/geoprocessing/type-aliases/load":{"id":"api/geoprocessing/type-aliases/load","title":"load()","description":"Parameters"},"api/geoprocessing/type-aliases/LoadedPackage":{"id":"api/geoprocessing/type-aliases/LoadedPackage","title":"LoadedPackage","description":""},"api/geoprocessing/type-aliases/max":{"id":"api/geoprocessing/type-aliases/max","title":"max()","description":"Parameters"},"api/geoprocessing/type-aliases/mean":{"id":"api/geoprocessing/type-aliases/mean","title":"mean()","description":"Parameters"},"api/geoprocessing/type-aliases/median":{"id":"api/geoprocessing/type-aliases/median","title":"median()","description":"Parameters"},"api/geoprocessing/type-aliases/Metric":{"id":"api/geoprocessing/type-aliases/Metric","title":"Metric","description":"Single record of value, stratified in one or more dimensions."},"api/geoprocessing/type-aliases/MetricDimension":{"id":"api/geoprocessing/type-aliases/MetricDimension","title":"MetricDimension","description":""},"api/geoprocessing/type-aliases/MetricGroup":{"id":"api/geoprocessing/type-aliases/MetricGroup","title":"MetricGroup","description":"Represents a single metric, having one DataGroup"},"api/geoprocessing/type-aliases/MetricGroups":{"id":"api/geoprocessing/type-aliases/MetricGroups","title":"MetricGroups","description":""},"api/geoprocessing/type-aliases/MetricIdTypes":{"id":"api/geoprocessing/type-aliases/MetricIdTypes","title":"MetricIdTypes","description":""},"api/geoprocessing/type-aliases/MetricProperty":{"id":"api/geoprocessing/type-aliases/MetricProperty","title":"MetricProperty","description":""},"api/geoprocessing/type-aliases/Metrics":{"id":"api/geoprocessing/type-aliases/Metrics","title":"Metrics","description":""},"api/geoprocessing/type-aliases/min":{"id":"api/geoprocessing/type-aliases/min","title":"min()","description":"Parameters"},"api/geoprocessing/type-aliases/mode":{"id":"api/geoprocessing/type-aliases/mode","title":"mode()","description":"Parameters"},"api/geoprocessing/type-aliases/MpaClassification":{"id":"api/geoprocessing/type-aliases/MpaClassification","title":"MpaClassification","description":"Type declaration"},"api/geoprocessing/type-aliases/Nullable":{"id":"api/geoprocessing/type-aliases/Nullable","title":"Nullable\\\\","description":"Type Parameters"},"api/geoprocessing/type-aliases/Objective":{"id":"api/geoprocessing/type-aliases/Objective","title":"Objective","description":""},"api/geoprocessing/type-aliases/ObjectiveAnswer":{"id":"api/geoprocessing/type-aliases/ObjectiveAnswer","title":"ObjectiveAnswer","description":""},"api/geoprocessing/type-aliases/ObjectiveAnswerMap":{"id":"api/geoprocessing/type-aliases/ObjectiveAnswerMap","title":"ObjectiveAnswerMap","description":"Generic type for mapping classification ID to whether it counds toward or meets an objective"},"api/geoprocessing/type-aliases/ObjectiveId":{"id":"api/geoprocessing/type-aliases/ObjectiveId","title":"ObjectiveId","description":"Unique name of objective"},"api/geoprocessing/type-aliases/Objectives":{"id":"api/geoprocessing/type-aliases/Objectives","title":"Objectives","description":""},"api/geoprocessing/type-aliases/OsmLandFeature":{"id":"api/geoprocessing/type-aliases/OsmLandFeature","title":"OsmLandFeature","description":""},"api/geoprocessing/type-aliases/Package":{"id":"api/geoprocessing/type-aliases/Package","title":"Package","description":"Represents a single JS package"},"api/geoprocessing/type-aliases/PartialReportContextValue":{"id":"api/geoprocessing/type-aliases/PartialReportContextValue","title":"PartialReportContextValue","description":"Type declaration"},"api/geoprocessing/type-aliases/Position":{"id":"api/geoprocessing/type-aliases/Position","title":"Position","description":"A Position is an array of coordinates."},"api/geoprocessing/type-aliases/Project":{"id":"api/geoprocessing/type-aliases/Project","title":"Project","description":""},"api/geoprocessing/type-aliases/rasterCalculator":{"id":"api/geoprocessing/type-aliases/rasterCalculator","title":"rasterCalculator()","description":"Parameters"},"api/geoprocessing/type-aliases/RasterDatasource":{"id":"api/geoprocessing/type-aliases/RasterDatasource","title":"RasterDatasource","description":""},"api/geoprocessing/type-aliases/RbcsMpaObjectiveAnswerMap":{"id":"api/geoprocessing/type-aliases/RbcsMpaObjectiveAnswerMap","title":"RbcsMpaObjectiveAnswerMap","description":"Mapping of RBCS MPA Classification ID to whether it counts toward or meets an objective"},"api/geoprocessing/type-aliases/RbcsMpaProtectionLevel":{"id":"api/geoprocessing/type-aliases/RbcsMpaProtectionLevel","title":"RbcsMpaProtectionLevel","description":""},"api/geoprocessing/type-aliases/SketchGeometryTypes":{"id":"api/geoprocessing/type-aliases/SketchGeometryTypes","title":"SketchGeometryTypes","description":""},"api/geoprocessing/type-aliases/SketchProperties":{"id":"api/geoprocessing/type-aliases/SketchProperties","title":"SketchProperties","description":"Properties of a Sketch, defines known keys as well as unknown for extensiblity"},"api/geoprocessing/type-aliases/stats":{"id":"api/geoprocessing/type-aliases/stats","title":"stats()","description":"Parameters"},"api/geoprocessing/type-aliases/Stats-1":{"id":"api/geoprocessing/type-aliases/Stats-1","title":"Stats","description":""},"api/geoprocessing/type-aliases/sum":{"id":"api/geoprocessing/type-aliases/sum","title":"sum()","description":"Parameters"},"api/geoprocessing/type-aliases/SUPPORTED_RASTER_STAT":{"id":"api/geoprocessing/type-aliases/SUPPORTED_RASTER_STAT","title":"SUPPORTED\\\\_RASTER\\\\_STAT","description":""},"api/geoprocessing/type-aliases/SupportedFormats":{"id":"api/geoprocessing/type-aliases/SupportedFormats","title":"SupportedFormats","description":""},"api/geoprocessing/type-aliases/TaskKey":{"id":"api/geoprocessing/type-aliases/TaskKey","title":"TaskKey","description":"Type declaration"},"api/geoprocessing/type-aliases/TypedArray":{"id":"api/geoprocessing/type-aliases/TypedArray","title":"TypedArray","description":"Typed array of data values, the basic building block of a geotiff"},"api/geoprocessing/type-aliases/UserAttribute":{"id":"api/geoprocessing/type-aliases/UserAttribute","title":"UserAttribute","description":"User-defined attributes with values for Sketch. Defines known keys as well as unknown for extensiblity"},"api/geoprocessing/type-aliases/ValueFormatter":{"id":"api/geoprocessing/type-aliases/ValueFormatter","title":"ValueFormatter","description":"Options for formatting a given value."},"api/geoprocessing/type-aliases/VectorDatasource":{"id":"api/geoprocessing/type-aliases/VectorDatasource","title":"VectorDatasource","description":""},"api/geoprocessing/type-aliases/Zone":{"id":"api/geoprocessing/type-aliases/Zone","title":"Zone","description":""},"api/geoprocessing/type-aliases/ZoneColor":{"id":"api/geoprocessing/type-aliases/ZoneColor","title":"ZoneColor","description":""},"api/geoprocessing/type-aliases/ZoneId":{"id":"api/geoprocessing/type-aliases/ZoneId","title":"ZoneId","description":""},"api/geoprocessing/type-aliases/ZoneName":{"id":"api/geoprocessing/type-aliases/ZoneName","title":"ZoneName","description":""},"api/geoprocessing/variables/activityRanks":{"id":"api/geoprocessing/variables/activityRanks","title":"activityRanks","description":""},"api/geoprocessing/variables/baseDatasourceSchema":{"id":"api/geoprocessing/variables/baseDatasourceSchema","title":"baseDatasourceSchema","description":"Type declaration"},"api/geoprocessing/variables/bboxSchema":{"id":"api/geoprocessing/variables/bboxSchema","title":"bboxSchema","description":""},"api/geoprocessing/variables/box2dSchema":{"id":"api/geoprocessing/variables/box2dSchema","title":"box2dSchema","description":""},"api/geoprocessing/variables/box3dSchema":{"id":"api/geoprocessing/variables/box3dSchema","title":"box3dSchema","description":""},"api/geoprocessing/variables/classStatsSchema":{"id":"api/geoprocessing/variables/classStatsSchema","title":"classStatsSchema","description":"Pre-calculated stats by key by class"},"api/geoprocessing/variables/clientJsonConfigSchema":{"id":"api/geoprocessing/variables/clientJsonConfigSchema","title":"clientJsonConfigSchema","description":"Represents a geoprocessing client object"},"api/geoprocessing/variables/commonHeaders":{"id":"api/geoprocessing/variables/commonHeaders","title":"commonHeaders","description":"Type declaration"},"api/geoprocessing/variables/dataClassSchema":{"id":"api/geoprocessing/variables/dataClassSchema","title":"dataClassSchema","description":"Represents a single class of data. Ties it to an underlying datasource, holds attributes used for displaying in user interfaces"},"api/geoprocessing/variables/datasourceConfig":{"id":"api/geoprocessing/variables/datasourceConfig","title":"datasourceConfig","description":"Type declaration"},"api/geoprocessing/variables/datasourceFormatDescriptions":{"id":"api/geoprocessing/variables/datasourceFormatDescriptions","title":"datasourceFormatDescriptions","description":"Type declaration"},"api/geoprocessing/variables/datasourceSchema":{"id":"api/geoprocessing/variables/datasourceSchema","title":"datasourceSchema","description":""},"api/geoprocessing/variables/datasourcesSchema":{"id":"api/geoprocessing/variables/datasourcesSchema","title":"datasourcesSchema","description":""},"api/geoprocessing/variables/defaultReportContext":{"id":"api/geoprocessing/variables/defaultReportContext","title":"defaultReportContext","description":""},"api/geoprocessing/variables/DEFAULTS":{"id":"api/geoprocessing/variables/DEFAULTS","title":"DEFAULTS","description":""},"api/geoprocessing/variables/defaultStatValues":{"id":"api/geoprocessing/variables/defaultStatValues","title":"defaultStatValues","description":"Type declaration"},"api/geoprocessing/variables/externalDatasourceSchema":{"id":"api/geoprocessing/variables/externalDatasourceSchema","title":"externalDatasourceSchema","description":"Properties for external datasource"},"api/geoprocessing/variables/externalRasterDatasourceSchema":{"id":"api/geoprocessing/variables/externalRasterDatasourceSchema","title":"externalRasterDatasourceSchema","description":""},"api/geoprocessing/variables/externalVectorDatasourceSchema":{"id":"api/geoprocessing/variables/externalVectorDatasourceSchema","title":"externalVectorDatasourceSchema","description":""},"api/geoprocessing/variables/EXTRA_RASTER_STATS":{"id":"api/geoprocessing/variables/EXTRA_RASTER_STATS","title":"EXTRA\\\\_RASTER\\\\_STATS","description":"Additional raster stats calculated by geoprocessing library"},"api/geoprocessing/variables/extraParamsSchema":{"id":"api/geoprocessing/variables/extraParamsSchema","title":"extraParamsSchema","description":"Default set of additional parameters that a geoprocessing or preprocessing function can accept"},"api/geoprocessing/variables/fcSchema":{"id":"api/geoprocessing/variables/fcSchema","title":"fcSchema","description":"Zod schema for FeatureCollection containing polygons or multipolygons"},"api/geoprocessing/variables/featureSchema":{"id":"api/geoprocessing/variables/featureSchema","title":"featureSchema","description":"Zod schema for Feature containing Polygon or MultiPolygon"},"api/geoprocessing/variables/featuresSchema":{"id":"api/geoprocessing/variables/featuresSchema","title":"featuresSchema","description":""},"api/geoprocessing/variables/fixtures":{"id":"api/geoprocessing/variables/fixtures","title":"fixtures","description":"Type declaration"},"api/geoprocessing/variables/fullColor":{"id":"api/geoprocessing/variables/fullColor","title":"fullColor","description":""},"api/geoprocessing/variables/FULLY_PROTECTED_LEVEL":{"id":"api/geoprocessing/variables/FULLY_PROTECTED_LEVEL","title":"FULLY\\\\_PROTECTED\\\\_LEVEL","description":""},"api/geoprocessing/variables/GEOBLAZE_RASTER_STATS":{"id":"api/geoprocessing/variables/GEOBLAZE_RASTER_STATS","title":"GEOBLAZE\\\\_RASTER\\\\_STATS","description":"Stats supported by geoblaze.stats() function"},"api/geoprocessing/variables/geoblazeDefaultStatValues":{"id":"api/geoprocessing/variables/geoblazeDefaultStatValues","title":"geoblazeDefaultStatValues","description":"Type declaration"},"api/geoprocessing/variables/geographiesSchema":{"id":"api/geoprocessing/variables/geographiesSchema","title":"geographiesSchema","description":""},"api/geoprocessing/variables/geographySchema":{"id":"api/geoprocessing/variables/geographySchema","title":"geographySchema","description":"A geographic area (Polygon) for planning. Typically used to represent a planning area"},"api/geoprocessing/variables/geoprocessingConfigSchema":{"id":"api/geoprocessing/variables/geoprocessingConfigSchema","title":"geoprocessingConfigSchema","description":"Represents a single JS package"},"api/geoprocessing/variables/geoTypesSchema":{"id":"api/geoprocessing/variables/geoTypesSchema","title":"geoTypesSchema","description":""},"api/geoprocessing/variables/globalDatasources":{"id":"api/geoprocessing/variables/globalDatasources","title":"globalDatasources","description":"Definitive list of global datasources for geoprocessing framework"},"api/geoprocessing/variables/globalDatasourcesById":{"id":"api/geoprocessing/variables/globalDatasourcesById","title":"globalDatasourcesById","description":""},"api/geoprocessing/variables/highColor":{"id":"api/geoprocessing/variables/highColor","title":"highColor","description":""},"api/geoprocessing/variables/HIGHLY_PROTECTED_LEVEL":{"id":"api/geoprocessing/variables/HIGHLY_PROTECTED_LEVEL","title":"HIGHLY\\\\_PROTECTED\\\\_LEVEL","description":""},"api/geoprocessing/variables/importRasterDatasourceOptionsSchema":{"id":"api/geoprocessing/variables/importRasterDatasourceOptionsSchema","title":"importRasterDatasourceOptionsSchema","description":""},"api/geoprocessing/variables/importVectorDatasourceOptionsSchema":{"id":"api/geoprocessing/variables/importVectorDatasourceOptionsSchema","title":"importVectorDatasourceOptionsSchema","description":""},"api/geoprocessing/variables/internalDatasourceSchema":{"id":"api/geoprocessing/variables/internalDatasourceSchema","title":"internalDatasourceSchema","description":"Timestamp properties to ease syncing with local/published datasource files"},"api/geoprocessing/variables/internalImportSchema":{"id":"api/geoprocessing/variables/internalImportSchema","title":"internalImportSchema","description":"Properties for importing an internal datasource"},"api/geoprocessing/variables/internalRasterDatasourceSchema":{"id":"api/geoprocessing/variables/internalRasterDatasourceSchema","title":"internalRasterDatasourceSchema","description":""},"api/geoprocessing/variables/internalVectorDatasourceSchema":{"id":"api/geoprocessing/variables/internalVectorDatasourceSchema","title":"internalVectorDatasourceSchema","description":""},"api/geoprocessing/variables/internalVectorImportSchema":{"id":"api/geoprocessing/variables/internalVectorImportSchema","title":"internalVectorImportSchema","description":"Properties for import of internal vector datasources"},"api/geoprocessing/variables/iucnActivities":{"id":"api/geoprocessing/variables/iucnActivities","title":"iucnActivities","description":"Type declaration"},"api/geoprocessing/variables/iucnActivityCategories":{"id":"api/geoprocessing/variables/iucnActivityCategories","title":"iucnActivityCategories","description":""},"api/geoprocessing/variables/iucnCategoriesList":{"id":"api/geoprocessing/variables/iucnCategoriesList","title":"iucnCategoriesList","description":""},"api/geoprocessing/variables/iucnCategoriesMap":{"id":"api/geoprocessing/variables/iucnCategoriesMap","title":"iucnCategoriesMap","description":"IUCN category definitions. Note categories 2/3 and 4/6 have been merged because they have the same allowed uses"},"api/geoprocessing/variables/iucnCategoryNames":{"id":"api/geoprocessing/variables/iucnCategoryNames","title":"iucnCategoryNames","description":""},"api/geoprocessing/variables/iucnLevels":{"id":"api/geoprocessing/variables/iucnLevels","title":"iucnLevels","description":""},"api/geoprocessing/variables/jsonSchema":{"id":"api/geoprocessing/variables/jsonSchema","title":"jsonSchema","description":""},"api/geoprocessing/variables/loadedPackageSchema":{"id":"api/geoprocessing/variables/loadedPackageSchema","title":"loadedPackageSchema","description":"Stricter schema for npm package.json metadata, with most fields guaranteed present"},"api/geoprocessing/variables/lowColor":{"id":"api/geoprocessing/variables/lowColor","title":"lowColor","description":""},"api/geoprocessing/variables/measurementScalesSchema":{"id":"api/geoprocessing/variables/measurementScalesSchema","title":"measurementScalesSchema","description":""},"api/geoprocessing/variables/measurementTypesSchema":{"id":"api/geoprocessing/variables/measurementTypesSchema","title":"measurementTypesSchema","description":""},"api/geoprocessing/variables/MetricDimensions":{"id":"api/geoprocessing/variables/MetricDimensions","title":"MetricDimensions","description":"Dimensions used in Metric"},"api/geoprocessing/variables/metricGroupSchema":{"id":"api/geoprocessing/variables/metricGroupSchema","title":"metricGroupSchema","description":"Defines a metric in combination with a datasource, with one or more data classes"},"api/geoprocessing/variables/metricGroupsSchema":{"id":"api/geoprocessing/variables/metricGroupsSchema","title":"metricGroupsSchema","description":""},"api/geoprocessing/variables/MetricProperties":{"id":"api/geoprocessing/variables/MetricProperties","title":"MetricProperties","description":"Properties used in Metric"},"api/geoprocessing/variables/metricSchema":{"id":"api/geoprocessing/variables/metricSchema","title":"metricSchema","description":"Type declaration"},"api/geoprocessing/variables/metricsSchema":{"id":"api/geoprocessing/variables/metricsSchema","title":"metricsSchema","description":""},"api/geoprocessing/variables/MODERATELY_PROTECTED_LEVEL":{"id":"api/geoprocessing/variables/MODERATELY_PROTECTED_LEVEL","title":"MODERATELY\\\\_PROTECTED\\\\_LEVEL","description":""},"api/geoprocessing/variables/multipolygonSchema":{"id":"api/geoprocessing/variables/multipolygonSchema","title":"multipolygonSchema","description":"Type declaration"},"api/geoprocessing/variables/OBJECTIVE_GREEN":{"id":"api/geoprocessing/variables/OBJECTIVE_GREEN","title":"OBJECTIVE\\\\_GREEN","description":""},"api/geoprocessing/variables/OBJECTIVE_MAYBE":{"id":"api/geoprocessing/variables/OBJECTIVE_MAYBE","title":"OBJECTIVE\\\\_MAYBE","description":""},"api/geoprocessing/variables/OBJECTIVE_NO":{"id":"api/geoprocessing/variables/OBJECTIVE_NO","title":"OBJECTIVE\\\\_NO","description":""},"api/geoprocessing/variables/OBJECTIVE_RED":{"id":"api/geoprocessing/variables/OBJECTIVE_RED","title":"OBJECTIVE\\\\_RED","description":""},"api/geoprocessing/variables/OBJECTIVE_YELLOW":{"id":"api/geoprocessing/variables/OBJECTIVE_YELLOW","title":"OBJECTIVE\\\\_YELLOW","description":""},"api/geoprocessing/variables/OBJECTIVE_YES":{"id":"api/geoprocessing/variables/OBJECTIVE_YES","title":"OBJECTIVE\\\\_YES","description":""},"api/geoprocessing/variables/objectiveAnswerMapSchema":{"id":"api/geoprocessing/variables/objectiveAnswerMapSchema","title":"objectiveAnswerMapSchema","description":""},"api/geoprocessing/variables/objectiveAnswerSchema":{"id":"api/geoprocessing/variables/objectiveAnswerSchema","title":"objectiveAnswerSchema","description":""},"api/geoprocessing/variables/objectiveCountsAnswers":{"id":"api/geoprocessing/variables/objectiveCountsAnswers","title":"objectiveCountsAnswers","description":"Readonly list of possible answers for whether sketch counts toward objective"},"api/geoprocessing/variables/objectiveCountsColorMap":{"id":"api/geoprocessing/variables/objectiveCountsColorMap","title":"objectiveCountsColorMap","description":"Object mapping answers for whether sketch counts toward objective to stop light colors - green / yellow / red"},"api/geoprocessing/variables/objectiveSchema":{"id":"api/geoprocessing/variables/objectiveSchema","title":"objectiveSchema","description":"Base planning objective, extend as needed for specific classification system or ad-hoc"},"api/geoprocessing/variables/objectivesSchema":{"id":"api/geoprocessing/variables/objectivesSchema","title":"objectivesSchema","description":""},"api/geoprocessing/variables/packageSchema":{"id":"api/geoprocessing/variables/packageSchema","title":"packageSchema","description":"Schema for npm package.json metadata, as found in the wild"},"api/geoprocessing/variables/PLANNING_AREA_TYPES":{"id":"api/geoprocessing/variables/PLANNING_AREA_TYPES","title":"PLANNING\\\\_AREA\\\\_TYPES","description":""},"api/geoprocessing/variables/planningAreaTypesSchema":{"id":"api/geoprocessing/variables/planningAreaTypesSchema","title":"planningAreaTypesSchema","description":""},"api/geoprocessing/variables/polygonSchema":{"id":"api/geoprocessing/variables/polygonSchema","title":"polygonSchema","description":"Type declaration"},"api/geoprocessing/variables/POORLY_PROTECTED_LEVEL":{"id":"api/geoprocessing/variables/POORLY_PROTECTED_LEVEL","title":"POORLY\\\\_PROTECTED\\\\_LEVEL","description":""},"api/geoprocessing/variables/projectSchema":{"id":"api/geoprocessing/variables/projectSchema","title":"projectSchema","description":"Type declaration"},"api/geoprocessing/variables/rasterDatasourceSchema":{"id":"api/geoprocessing/variables/rasterDatasourceSchema","title":"rasterDatasourceSchema","description":"Properties for raster datasource"},"api/geoprocessing/variables/rbcsAnchoringActivities":{"id":"api/geoprocessing/variables/rbcsAnchoringActivities","title":"rbcsAnchoringActivities","description":""},"api/geoprocessing/variables/rbcsAquacultureActivities":{"id":"api/geoprocessing/variables/rbcsAquacultureActivities","title":"rbcsAquacultureActivities","description":""},"api/geoprocessing/variables/rbcsConstants":{"id":"api/geoprocessing/variables/rbcsConstants","title":"rbcsConstants","description":""},"api/geoprocessing/variables/rbcsGearTypes":{"id":"api/geoprocessing/variables/rbcsGearTypes","title":"rbcsGearTypes","description":""},"api/geoprocessing/variables/rbcsMpaProtectionLevels":{"id":"api/geoprocessing/variables/rbcsMpaProtectionLevels","title":"rbcsMpaProtectionLevels","description":""},"api/geoprocessing/variables/rbcsScores":{"id":"api/geoprocessing/variables/rbcsScores","title":"rbcsScores","description":""},"api/geoprocessing/variables/ReportContext":{"id":"api/geoprocessing/variables/ReportContext","title":"ReportContext","description":""},"api/geoprocessing/variables/seaSketchReportingLanguageChangeEvent":{"id":"api/geoprocessing/variables/seaSketchReportingLanguageChangeEvent","title":"seaSketchReportingLanguageChangeEvent","description":""},"api/geoprocessing/variables/seaSketchReportingMessageEventType":{"id":"api/geoprocessing/variables/seaSketchReportingMessageEventType","title":"seaSketchReportingMessageEventType","description":""},"api/geoprocessing/variables/seaSketchReportingVisibleLayersChangeEvent":{"id":"api/geoprocessing/variables/seaSketchReportingVisibleLayersChangeEvent","title":"seaSketchReportingVisibleLayersChangeEvent","description":""},"api/geoprocessing/variables/statsSchema":{"id":"api/geoprocessing/variables/statsSchema","title":"statsSchema","description":"Type declaration"},"api/geoprocessing/variables/SUPPORTED_RASTER_STATS":{"id":"api/geoprocessing/variables/SUPPORTED_RASTER_STATS","title":"SUPPORTED\\\\_RASTER\\\\_STATS","description":"Combined raster stats supported by geoprocessing library"},"api/geoprocessing/variables/supportedFormatsSchema":{"id":"api/geoprocessing/variables/supportedFormatsSchema","title":"supportedFormatsSchema","description":""},"api/geoprocessing/variables/UNPROTECTED_LEVEL":{"id":"api/geoprocessing/variables/UNPROTECTED_LEVEL","title":"UNPROTECTED\\\\_LEVEL","description":""},"api/geoprocessing/variables/vectorDatasourceSchema":{"id":"api/geoprocessing/variables/vectorDatasourceSchema","title":"vectorDatasourceSchema","description":"Properties for vector datasource"},"api/geoprocessing/variables/version":{"id":"api/geoprocessing/variables/version","title":"version","description":"Type declaration"},"api/index":{"id":"api/index","title":"Typescript API","description":"Modules","sidebar":"tutorialSidebar"},"architecture/Architecture":{"id":"architecture/Architecture","title":"Architecture","description":"Library","sidebar":"tutorialSidebar"},"CLI":{"id":"CLI","title":"Command Line Interface","description":"Each geoprocessing project provides a number of commands to get work done. They are accessible via your projects package.json scripts and run using npm run","sidebar":"tutorialSidebar"},"codespaces/codespaces":{"id":"codespaces/codespaces","title":"Github Codespaces","description":"- Github provides a server running Ubuntu Linux, pre-configured to develop your geoprocessing project. Your local VSCode editor connects to it.","sidebar":"tutorialSidebar"},"concepts/AdvancedConcepts":{"id":"concepts/AdvancedConcepts","title":"Advanced Concepts","description":"Sketching","sidebar":"tutorialSidebar"},"concepts/Concepts":{"id":"concepts/Concepts","title":"Concepts","description":"Geoprocessing projects built with this framework support step #2 and #4 in the following planning workflow, the SeaSketch platform supports the rest. They work together to provide a complete solution.","sidebar":"tutorialSidebar"},"Contributing":{"id":"Contributing","title":"Contributing","description":"Common commands","sidebar":"tutorialSidebar"},"dataimport":{"id":"dataimport","title":"Data Import","description":"Work in progress","sidebar":"tutorialSidebar"},"devcontainer/devcontainer":{"id":"devcontainer/devcontainer","title":"Devcontainers","description":"A devcontainer is a Docker container wrapped in some additional features to create a more full-featured development environment.","sidebar":"tutorialSidebar"},"EdgesAndLimits":{"id":"EdgesAndLimits","title":"Accuracy/Limitations","description":"Javascript-only","sidebar":"tutorialSidebar"},"Extending":{"id":"Extending","title":"Extending","description":"It is possible to extend the geoprocessing framework to meet your needs right in your project code space. Here are some common use cases.","sidebar":"tutorialSidebar"},"geoprocessing":{"id":"geoprocessing","title":"Geoprocessing","description":"Geoprocessing functions are the analytical workhorse of SeaSketch reports. These functions are packaged and published as AWS Lambda functions which crunch numbers using spatial analysis libraries and organize the results into a payload to be returned to the caller.","sidebar":"tutorialSidebar"},"gip/GIP-1-i18n":{"id":"gip/GIP-1-i18n","title":"Internationalization (i18n)","description":"Geoprocessing Improvement Proposal 1","sidebar":"tutorialSidebar"},"gip/README":{"id":"gip/README","title":"GIP","description":"A Geoprocessing Improvement Proposal or (GIP) is a specification for a major improvement to the geoprocessing framework."},"intro":{"id":"intro","title":"Tutorial Intro","description":"Let\'s discover Docusaurus in less than 5 minutes."},"introduction":{"id":"introduction","title":"Introduction","description":"The SeaSketch Geoprocessing framework is an all-in-one solution for developing low-cost and low-maintenance geoprocessing functions and reports for the web, with Typescript. Simplified publish to cloud with auto-scaling to meet high demand.","sidebar":"tutorialSidebar"},"linkData":{"id":"linkData","title":"Link Project Data","description":"In order to import and publish datasets needed in your reports, they will need to be accessible on your local computer. There are multiple ways to do this, choose the appropriate one for you.","sidebar":"tutorialSidebar"},"multiBoundary/multiBoundary":{"id":"multiBoundary/multiBoundary","title":"Multiple Planning Boundaries","description":"Sometimes a planning process may need to support multiple distinct non-overlapping planning units, so that planning can be done in each unit independently, with its own planning targets/objectives. For example the California MLPA planning process has 4 geographically distinct planning regions - North, North Cental, Central, South.","sidebar":"tutorialSidebar"},"precalc":{"id":"precalc","title":"Precalc Data","description":"Precalc is all about calculating expensive spatial metrics ahead of time.","sidebar":"tutorialSidebar"},"preprocessing":{"id":"preprocessing","title":"Preprocessing","description":"Preprocessing function are invoked by the SeaSketch platform, on a user-drawn shape, right after the user finishes drawing it. It\'s a specialized function that validates a drawn shape and potentially modifies it, such as to remove portions of the shape outside the planning boundary. This \\"clipping\\" of the shape allows a user to overdraw beyond the boundary and it will be clipped right to the edge of the boundary.","sidebar":"tutorialSidebar"},"projectclient":{"id":"projectclient","title":"Project Client","description":"The ProjectClient is the bridge that connects project configuration with code. It makes it easier to bring together your projects datasources, geographies, objectives, metric group definitions, and precalculated metrics and use them in geoprocessing functions and report clients.","sidebar":"tutorialSidebar"},"reportclient":{"id":"reportclient","title":"Report Client","description":"Report clients are React UI components that can be registered with SeaSketch and when given a user-drawn Sketch, they run one or more geoprocessing functions against that Sketch, and display the result in a way that is meaningful to the project.","sidebar":"tutorialSidebar"},"skills":{"id":"skills","title":"Skill Building","description":"There are a number of required skills for using this framework successfully. If you don\'t have this knowledge, then skill building and potentially mentorship may be needed for you to succeed. Here is a list of resources that can help you get started:","sidebar":"tutorialSidebar"},"structure":{"id":"structure","title":"Project Structure","description":"Configuration Files and Scripts","sidebar":"tutorialSidebar"},"Testing":{"id":"Testing","title":"Testing","description":"This will start a web server on port 8080 that serves up the data/dist folder. Smoke tests will run geoprocessing functions against all of the sketches and features in the examples folder. projectClient.getDatasourceUrl will automatically read data from localhost:8080 instead of the production S3 bucket url when using functions like loadFgb(), geoblaze.parse().","sidebar":"tutorialSidebar"},"thirdpartydata/thirdpartydata":{"id":"thirdpartydata/thirdpartydata","title":"Third Party Data","description":"With all datasets, it is important to check if there is an authoritative dataset that should be used. The sources below are diverse and may offer more accuracy, but they are not necessarily authoritative.","sidebar":"tutorialSidebar"},"tutorial-basics/congratulations":{"id":"tutorial-basics/congratulations","title":"Congratulations!","description":"You have just learned the basics of Docusaurus and made some changes to the initial template."},"tutorial-basics/create-a-blog-post":{"id":"tutorial-basics/create-a-blog-post","title":"Create a Blog Post","description":"Docusaurus creates a page for each blog post, but also a blog index page, a tag system, an RSS feed..."},"tutorial-basics/create-a-document":{"id":"tutorial-basics/create-a-document","title":"Create a Document","description":"Documents are groups of pages connected through:"},"tutorial-basics/create-a-page":{"id":"tutorial-basics/create-a-page","title":"Create a Page","description":"Add Markdown or React files to src/pages to create a standalone page:"},"tutorial-basics/deploy-your-site":{"id":"tutorial-basics/deploy-your-site","title":"Deploy your site","description":"Docusaurus is a static-site-generator (also called Jamstack)."},"tutorial-basics/markdown-features":{"id":"tutorial-basics/markdown-features","title":"Markdown Features","description":"Docusaurus supports Markdown and a few additional features."},"tutorial-extras/manage-docs-versions":{"id":"tutorial-extras/manage-docs-versions","title":"Manage Docs Versions","description":"Docusaurus can manage multiple versions of your docs."},"tutorial-extras/translate-your-site":{"id":"tutorial-extras/translate-your-site","title":"Translate your site","description":"Let\'s translate docs/intro.md to French."},"tutorials/createGeoprocessing":{"id":"tutorials/createGeoprocessing","title":"Creating a geoprocessing function","description":"The create","sidebar":"tutorialSidebar"},"tutorials/createReport":{"id":"tutorials/createReport","title":"Creating a Report Client","description":"To create a new report client simply run:","sidebar":"tutorialSidebar"},"tutorials/deploy":{"id":"tutorials/deploy","title":"Deploy your project","description":"A deploy of your application uses aws-cdk to inspect your local build and automatically provision all of the necessary AWS resources as a single CloudFormation stack.","sidebar":"tutorialSidebar"},"tutorials/existingproject":{"id":"tutorials/existingproject","title":"Setup an exising geoprocessing project","description":"This use case is where a geoprocessing project already exists, but it was developed on a different computer, and you now need to set it up on your computer, in order to be able to make and deploy modifications.","sidebar":"tutorialSidebar"},"tutorials/extraParams":{"id":"tutorials/extraParams","title":"Adding and Passing Extra Parameters","description":"Sometimes you want to pass additional parameters to a preprocessing or geoprocessing function that are defined outside of the sketch creation process by seasketch or through the report itself. These extraParams are separate from the sketch. They are an additional object passed to every preprocessing and geoprocessing function.","sidebar":"tutorialSidebar"},"tutorials/newproject":{"id":"tutorials/newproject","title":"newproject","description":"[WORK IN PROGRESS]","sidebar":"tutorialSidebar"},"tutorials/sampleproject":{"id":"tutorials/sampleproject","title":"Create Sample Project","description":"This tutorial walks through creating a sample geoprocessing project for the Federated States of Micronesia. It demonstrates multiple methods for doing spatial analysis and creating reports, from low-level to high-level, so that you can engage with it at any/all of the levels needed for your project.","sidebar":"tutorialSidebar"},"tutorials/sketchAttributes":{"id":"tutorials/sketchAttributes","title":"Custom Sketch Attributes","description":"Sketch attributes are additional properties provided with a Sketch Feature or a Sketch Collection. They can be user-defined at draw time or by the SeaSketch platform itself. The SeaSketch admin tool lets you add custom attributes to your sketch classes. SeaSketch will pass these sketch attributes on to geoprocessing functions.","sidebar":"tutorialSidebar"},"tutorials/storybook":{"id":"tutorials/storybook","title":"Advanced storybook usage","description":"There are multiple ways to introduce state into your stories. Many components draw their state from the ReportContext, which contains a lot of the information passed to the app on startup from seasketch.","sidebar":"tutorialSidebar"},"tutorials/subdividing":{"id":"tutorials/subdividing","title":"Subdividing Large Datasets","description":"If you have very large polygon datasets (think country or global data) with very large complex polygon, the standard data import process which uses flatgeobuf, may not be sufficient. An alternative is to use a VectorDataSource specially created by SeaSketch. It\'s based on a method described by Paul Ramsey in this article of subdividing your data, cutting it up along the boundaries of a spatial index.","sidebar":"tutorialSidebar"},"tutorials/Tutorials":{"id":"tutorials/Tutorials","title":"System Setup","description":"These tutorials will walk you through creating and deploying a basic seasketch geoprocessing project. You should already have a basic working knowledge of your computer, its operating system, shell environment (command line), and web application development using NodeJS and React. Learn more about the skills required.","sidebar":"tutorialSidebar"},"tutorials/updateDatasource":{"id":"tutorials/updateDatasource","title":"Updating A Datasource","description":"When updating a datasource, you should try to take it all the way through the process of import, precalc, and publish so that there\'s no confusion about which step you are on. It\'s easy to leave things in an incomplete state and its not obvious when you pick it back up.","sidebar":"tutorialSidebar"},"upgrade":{"id":"upgrade","title":"Upgrading","description":"Instructions to migrate existing geoprocessing projects to newer versions.","sidebar":"tutorialSidebar"},"workers":{"id":"workers","title":"Worker Functions","description":"Worker functions are sync geoprocessing functions that are invoked directly by parent geoprocessing functions, allowing computationally intensive or memory intensive tasks to be split out across multiple lambdas. Worker results are assembled in the parent function and returned back to the report client","sidebar":"tutorialSidebar"}}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/bd00d4f3.8fc5863e.js b/assets/js/bd00d4f3.8fc5863e.js
deleted file mode 100644
index 0b96659231..0000000000
--- a/assets/js/bd00d4f3.8fc5863e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30068],{7471:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>i,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var n=r(74848),t=r(28453);const o={},a="Geoprocessing",c={id:"geoprocessing",title:"Geoprocessing",description:"Geoprocessing functions are the analytical workhorse of SeaSketch reports. These functions are packaged and published as AWS Lambda functions which crunch numbers using spatial analysis libraries and organize the results into a payload to be returned to the caller.",source:"@site/docs/geoprocessing.md",sourceDirName:".",slug:"/geoprocessing",permalink:"/geoprocessing/docs/next/geoprocessing",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/geoprocessing.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Preprocessing Functions",permalink:"/geoprocessing/docs/next/preprocessing"},next:{title:"Report Clients",permalink:"/geoprocessing/docs/next/reportclient"}},i={},l=[{value:"Toolbox Functions",id:"toolbox-functions",level:2},{value:"rasterMetrics",id:"rastermetrics",level:3},{value:"overlapFeatures",id:"overlapfeatures",level:3},{value:"Low Level Functions",id:"low-level-functions",level:2},{value:"clipToPolygonFeatures",id:"cliptopolygonfeatures",level:3},{value:"rasterStats",id:"rasterstats",level:3},{value:"Raster",id:"raster",level:2},{value:"Vector",id:"vector",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"geoprocessing",children:"Geoprocessing"})}),"\n",(0,n.jsxs)(s.p,{children:["Geoprocessing functions are the analytical workhorse of SeaSketch reports. These functions are packaged and published as ",(0,n.jsx)(s.a,{href:"https://aws.amazon.com/pm/lambda",children:"AWS Lambda"})," functions which crunch numbers using spatial analysis libraries and organize the results into a payload to be returned to the caller."]}),"\n",(0,n.jsx)(s.p,{children:"Geoprocessing functions are typically invoked in one of two ways:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["By a ",(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/reportclient",children:"report client"})," using a ResultsCard UI component."]}),"\n",(0,n.jsxs)(s.li,{children:["By another geoprocessing function such as a parent geoprocessing function calling a ",(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/workers",children:"worker"})," geoprocessing function."]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["The first step of a geoprocessing function is to import everything you need. The top-level ",(0,n.jsx)(s.code,{children:"@seasketch/geoprocessing"})," module and the dataproviders submodule has most things. See the ",(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/api/",children:"Typescript API"})," docs to discover more of what they offer."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-typescript",children:'import {\n GeoprocessingHandler,\n Metric,\n Polygon,\n ReportResult,\n Sketch,\n SketchCollection,\n DefaultExtraParams,\n toNullSketch,\n rekeyMetrics,\n sortMetrics,\n getCogFilename,\n MultiPolygon,\n getFirstFromParam,\n rasterMetrics,\n loadCog,\n} from "@seasketch/geoprocessing";\nimport project from "../../project";\nimport { clipToGeography } from "../util/clipToGeography";\n'})}),"\n",(0,n.jsxs)(s.p,{children:["The geoprocessing function signature itself should accept a ",(0,n.jsx)(s.code,{children:"Sketch"})," parameter and one or more ",(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/tutorials/extraParams",children:"extraParams"})," as input. ",(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/tutorials/extraParams",children:"extraParams"})," are extra runtime parameters that can be passed by a ",(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/reportclient",children:"report client"}),", or passed by a parent geoprocessing function to a ",(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/workers",children:"worker"}),"."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-typescript",children:"export async function sdmValueOverlap(\n sketch:\n | Sketch\n | SketchCollection,\n extraParams: DefaultExtraParams = {}\n): Promise {\n"})}),"\n",(0,n.jsx)(s.p,{children:"The first goal of a geoprocessing function might be to validate the sketch."}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-typescript",children:'import {\n isPolygonFeature,\n isPolygonSketchCollection,\n} from "@seasketch/geoprocessing";\n\nif (!isPolygonFeature(sketch) || isPolygonSketchCollection(sketch)) {\n throw new Error("Invalid sketch, expected Polygon or MultiPolygon");\n}\n'})}),"\n",(0,n.jsxs)(s.p,{children:["A next step might be to extract extraParams and use ",(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/ProjectClientBase",children:"ProjectClient"})," helper methods to access project configuration such as geographies, datasources, etc."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-typescript",children:'const mg = project.getMetricGroup("protectionCountOverlap");\nconst geographyId = getFirstFromParam("geographyIds", extraParams);\nconst curGeography = project.getGeographyById(geographyId, {\n fallbackGroup: "default-boundary",\n});\n\nconst finalSketch = await clipToGeography(sketch, curGeography);\n'})}),"\n",(0,n.jsx)(s.p,{children:"Another goal might be to extract custom attributes from the sketch and use that in analysis."}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-typescript",children:'const sketchFeatures = getSketchFeatures(sketch);\n\nconst protectionLevels = sketchFeatures.reduce>(\n (levels, sketch) => {\n console.log(sketch.properties);\n const designation = getUserAttribute(sketch.properties, "designation", "");\n if (!designation) throw new Error("Malformed sketch, no designation level");\n\n levels[designation] = 1 + (levels[designation] || 0);\n return levels;\n },\n {},\n);\n'})}),"\n",(0,n.jsxs)(s.p,{children:["The key part of most geoprocessing functions is to take the parameters you've collected, use a pre-defined MetricGroup to retrieve and load datasources, then finally run the an analysis function to produce ",(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#metrics",children:"Metrics"}),", append additional IDs to those metrics (class, geography, etc.) so that it's explicitly clear what the value represents, and merge those metrics into a single result."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-typescript",children:"const metrics: Metric[] = (\n await Promise.all(\n metricGroup.classes.map(async (curClass) => {\n if (!curClass.datasourceId)\n throw new Error(`Expected datasourceId for ${curClass}`);\n const url = `${project.dataBucketUrl()}${getCogFilename(\n project.getInternalRasterDatasourceById(curClass.datasourceId),\n )}`;\n const raster = await loadCog(url);\n\n const overlapResult = await rasterMetrics(raster, {\n metricId: metricGroup.metricId,\n feature: finalSketch,\n });\n return overlapResult.map(\n (metrics): Metric => ({\n ...metrics,\n classId: curClass.classId,\n geographyId: curGeography.geographyId,\n }),\n );\n }),\n )\n).reduce(\n // merge\n (metricsSoFar, curClassMetrics) => [...metricsSoFar, ...curClassMetrics],\n [],\n);\n"})}),"\n",(0,n.jsx)(s.p,{children:"The final goal is to produce a payload to return to the caller. Sorting and rekeying metrics makes them more human readable."}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-typescript",children:"return {\n metrics: sortMetrics(rekeyMetrics(metrics)),\n};\n"})}),"\n",(0,n.jsx)(s.p,{children:"Lastly, you'll pass your function to the GeoprocessingHandler function and export it for use."}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-typescript",children:'export default new GeoprocessingHandler(protection, {\n title: "protection",\n description: "returns area metrics for protection levels for sketch",\n timeout: 60, // seconds\n executionMode: "async",\n memory: 1024,\n});\n'})}),"\n",(0,n.jsx)(s.p,{children:"Some things to note:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Typically, you will start with the default ",(0,n.jsx)(s.code,{children:"memory"})," of 1024."]}),"\n",(0,n.jsxs)(s.li,{children:["Any function that is expected to take more than 3-5 seconds to run should be configured as ",(0,n.jsx)(s.code,{children:"async"})," instead of ",(0,n.jsx)(s.code,{children:"sync"}),", unless it's a worker function, which should always be ",(0,n.jsx)(s.code,{children:"sync"}),"."]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"toolbox-functions",children:"Toolbox Functions"}),"\n",(0,n.jsx)(s.h3,{id:"rastermetrics",children:"rasterMetrics"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rasterMetrics",children:"rasterMetrics"})," is an all-in-one function for calculating summary metrics (statistics/area) on a loaded raster. If ",(0,n.jsx)(s.code,{children:"sketch"})," is passed will limit to raster values overlapping with the sketch (zonal statistics). Results are in standardized ",(0,n.jsx)(s.code,{children:"Metric"})," array format."]}),"\n",(0,n.jsxs)(s.p,{children:["If ",(0,n.jsx)(s.code,{children:"feature"})," is a collection, then calculate metrics for each individual feature as well as the collection as a whole. This can be disabled by passing ",(0,n.jsx)(s.code,{children:"includeChildMetrics: false"}),". If your raster is a categorical raster you should pass ",(0,n.jsx)(s.code,{children:"categorical: true"})," and optionally pass the list of ",(0,n.jsx)(s.code,{children:"categoryMetricsValues"})," to pull out of the raster."]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://github.com/search?q=org%3Aseasketch+rasterMetrics%28&type=code",children:"Examples"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://github.com/seasketch/california-reports/blob/98cd29fc0da86707bfde9aa6f3ecf30c0e5db23a/src/functions/kelpMaxWorker.ts#L61",children:"Categorical example"})}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"overlapfeatures",children:"overlapFeatures"}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.code,{children:"overlapFeatures"})}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"getFeatures"}),"\n",(0,n.jsx)(s.code,{children:"overlapFeaturesGroupMetrics"}),"\n",(0,n.jsx)(s.code,{children:"overlapRasterGroupMetrics"}),"\n",(0,n.jsx)(s.code,{children:"overlapRasterClass"}),"\n",(0,n.jsx)(s.code,{children:"overlapRasterSum"}),"\n",(0,n.jsx)(s.code,{children:"overlapRasterArea"})]}),"\n",(0,n.jsx)(s.h2,{id:"low-level-functions",children:"Low Level Functions"}),"\n",(0,n.jsx)(s.p,{children:"If the high-level toolbox functions don't meet your needs, you can create your own, potentially creating from lower level functions."}),"\n",(0,n.jsx)(s.h3,{id:"cliptopolygonfeatures",children:"clipToPolygonFeatures"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/clipToPolygonFeatures",children:"clipToPolygonFeatures"})," - takes a Polygon feature and returns the portion remaining after performing clipOperations (intersection or difference). If results in multiple polygons then returns the largest."]}),"\n",(0,n.jsx)(s.h3,{id:"rasterstats",children:"rasterStats"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/rasterStats",children:"rasterStats"})," - calculates over 10 different raster stats, optionally constrains to raster cells overlapping with feature."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getSum",children:"getSum"})," - returns sum of raster cell values overlap with feature. (not multi-band aware, first band only)"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/geoprocessing/docs/next/api/geoprocessing/functions/getArea",children:"getArea"})," - returns area of valid raster cell values (not nodata) overlapping with feature. (not multi-band aware, first band only)"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"raster",children:"Raster"}),"\n",(0,n.jsx)(s.p,{children:"loadCog"}),"\n",(0,n.jsx)(s.p,{children:"rasterMetrics"}),"\n",(0,n.jsx)(s.h2,{id:"vector",children:"Vector"}),"\n",(0,n.jsx)(s.p,{children:"fgbFetchAll"})]})}function h(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},28453:(e,s,r)=>{r.d(s,{R:()=>a,x:()=>c});var n=r(96540);const t={},o=n.createContext(t);function a(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/bd00d4f3.d3b5f4c7.js b/assets/js/bd00d4f3.d3b5f4c7.js
new file mode 100644
index 0000000000..44d6166b87
--- /dev/null
+++ b/assets/js/bd00d4f3.d3b5f4c7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30068],{7471:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var t=s(74848),r=s(28453);const o={},c="Geoprocessing",a={id:"geoprocessing",title:"Geoprocessing",description:"Geoprocessing functions are the analytical workhorse of SeaSketch reports. These functions are packaged and published as AWS Lambda functions which crunch numbers using spatial analysis libraries and organize the results into a payload to be returned to the caller.",source:"@site/docs/geoprocessing.md",sourceDirName:".",slug:"/geoprocessing",permalink:"/geoprocessing/docs/next/geoprocessing",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/geoprocessing.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Preprocessing Functions",permalink:"/geoprocessing/docs/next/preprocessing"},next:{title:"Report Clients",permalink:"/geoprocessing/docs/next/reportclient"}},i={},l=[];function p(e){const n={a:"a",code:"code",h1:"h1",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"geoprocessing",children:"Geoprocessing"})}),"\n",(0,t.jsxs)(n.p,{children:["Geoprocessing functions are the analytical workhorse of SeaSketch reports. These functions are packaged and published as ",(0,t.jsx)(n.a,{href:"https://aws.amazon.com/pm/lambda",children:"AWS Lambda"})," functions which crunch numbers using spatial analysis libraries and organize the results into a payload to be returned to the caller."]}),"\n",(0,t.jsx)(n.p,{children:"Geoprocessing functions are typically invoked in one of two ways:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["By a ",(0,t.jsx)(n.a,{href:"/geoprocessing/docs/next/reportclient",children:"report client"})," using a ResultsCard UI component."]}),"\n",(0,t.jsxs)(n.li,{children:["By another geoprocessing function such as a parent geoprocessing function calling a ",(0,t.jsx)(n.a,{href:"/geoprocessing/docs/next/workers",children:"worker"})," geoprocessing function."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The first step of a geoprocessing function is to import everything you need. The top-level ",(0,t.jsx)(n.code,{children:"@seasketch/geoprocessing"})," module and the dataproviders submodule has most things. See the ",(0,t.jsx)(n.a,{href:"/geoprocessing/docs/next/api/",children:"Typescript API"})," docs to discover more of what they offer."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:'import {\n GeoprocessingHandler,\n Metric,\n Polygon,\n ReportResult,\n Sketch,\n SketchCollection,\n DefaultExtraParams,\n toNullSketch,\n rekeyMetrics,\n sortMetrics,\n getCogFilename,\n MultiPolygon,\n getFirstFromParam,\n rasterMetrics,\n loadCog,\n} from "@seasketch/geoprocessing";\nimport project from "../../project";\nimport { clipToGeography } from "../util/clipToGeography";\n'})}),"\n",(0,t.jsxs)(n.p,{children:["The geoprocessing function signature itself should accept a ",(0,t.jsx)(n.code,{children:"Sketch"})," parameter and one or more ",(0,t.jsx)(n.a,{href:"/geoprocessing/docs/next/tutorials/extraParams",children:"extraParams"})," as input. ",(0,t.jsx)(n.a,{href:"/geoprocessing/docs/next/tutorials/extraParams",children:"extraParams"})," are extra runtime parameters that can be passed by a ",(0,t.jsx)(n.a,{href:"/geoprocessing/docs/next/reportclient",children:"report client"}),", or passed by a parent geoprocessing function to a ",(0,t.jsx)(n.a,{href:"/geoprocessing/docs/next/workers",children:"worker"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:"export async function sdmValueOverlap(\n sketch:\n | Sketch\n | SketchCollection,\n extraParams: DefaultExtraParams = {}\n): Promise {\n"})}),"\n",(0,t.jsx)(n.p,{children:"The first goal of a geoprocessing function might be to validate the sketch."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:'import {\n isPolygonFeature,\n isPolygonSketchCollection,\n} from "@seasketch/geoprocessing";\n\nif (!isPolygonFeature(sketch) || isPolygonSketchCollection(sketch)) {\n throw new Error("Invalid sketch, expected Polygon or MultiPolygon");\n}\n'})}),"\n",(0,t.jsxs)(n.p,{children:["A next step might be to extract extraParams and use ",(0,t.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/classes/ProjectClientBase",children:"ProjectClient"})," helper methods to access project configuration such as geographies, datasources, etc."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:'const mg = project.getMetricGroup("protectionCountOverlap");\nconst geographyId = getFirstFromParam("geographyIds", extraParams);\nconst curGeography = project.getGeographyById(geographyId, {\n fallbackGroup: "default-boundary",\n});\n\nconst finalSketch = await clipToGeography(sketch, curGeography);\n'})}),"\n",(0,t.jsx)(n.p,{children:"Another goal might be to extract custom attributes from the sketch and use that in analysis."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:'const sketchFeatures = getSketchFeatures(sketch);\n\nconst protectionLevels = sketchFeatures.reduce>(\n (levels, sketch) => {\n console.log(sketch.properties);\n const designation = getUserAttribute(sketch.properties, "designation", "");\n if (!designation) throw new Error("Malformed sketch, no designation level");\n\n levels[designation] = 1 + (levels[designation] || 0);\n return levels;\n },\n {},\n);\n'})}),"\n",(0,t.jsxs)(n.p,{children:["The key part of most geoprocessing functions is to take the parameters you've collected, use a pre-defined MetricGroup to retrieve and load datasources, then finally run the an analysis function to produce ",(0,t.jsx)(n.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#metrics",children:"Metrics"}),", append additional IDs to those metrics (class, geography, etc.) so that it's explicitly clear what the value represents, and merge those metrics into a single result."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:"const metrics: Metric[] = (\n await Promise.all(\n metricGroup.classes.map(async (curClass) => {\n if (!curClass.datasourceId)\n throw new Error(`Expected datasourceId for ${curClass}`);\n const url = `${project.dataBucketUrl()}${getCogFilename(\n project.getInternalRasterDatasourceById(curClass.datasourceId),\n )}`;\n const raster = await loadCog(url);\n\n const overlapResult = await rasterMetrics(raster, {\n metricId: metricGroup.metricId,\n feature: finalSketch,\n });\n return overlapResult.map(\n (metrics): Metric => ({\n ...metrics,\n classId: curClass.classId,\n geographyId: curGeography.geographyId,\n }),\n );\n }),\n )\n).reduce(\n // merge\n (metricsSoFar, curClassMetrics) => [...metricsSoFar, ...curClassMetrics],\n [],\n);\n"})}),"\n",(0,t.jsx)(n.p,{children:"The final goal is to produce a payload to return to the caller. Sorting and rekeying metrics makes them more human readable."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:"return {\n metrics: sortMetrics(rekeyMetrics(metrics)),\n};\n"})}),"\n",(0,t.jsx)(n.p,{children:"Lastly, you'll pass your function to the GeoprocessingHandler function and export it for use."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:'export default new GeoprocessingHandler(protection, {\n title: "protection",\n description: "returns area metrics for protection levels for sketch",\n timeout: 60, // seconds\n executionMode: "async",\n memory: 1024,\n});\n'})}),"\n",(0,t.jsx)(n.p,{children:"Some things to note:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Typically, you will start with the default ",(0,t.jsx)(n.code,{children:"memory"})," of 1024."]}),"\n",(0,t.jsxs)(n.li,{children:["Any function that is expected to take more than 3-5 seconds to run should be configured as ",(0,t.jsx)(n.code,{children:"async"})," instead of ",(0,t.jsx)(n.code,{children:"sync"}),", unless it's a worker function, which should always be ",(0,t.jsx)(n.code,{children:"sync"}),"."]}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>c,x:()=>a});var t=s(96540);const r={},o=t.createContext(r);function c(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/c5879d20.d16d4e8e.js b/assets/js/c5879d20.d16d4e8e.js
new file mode 100644
index 0000000000..5647cb574f
--- /dev/null
+++ b/assets/js/c5879d20.d16d4e8e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[31429],{76254:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var t=n(74848),r=n(28453);const i={},o="Create New Geoprocessing Project",a={id:"tutorials/newproject",title:"newproject",description:"[WORK IN PROGRESS]",source:"@site/docs/tutorials/newproject.md",sourceDirName:"tutorials",slug:"/tutorials/newproject",permalink:"/geoprocessing/docs/next/tutorials/newproject",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/tutorials/newproject.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Create Sample Project",permalink:"/geoprocessing/docs/next/tutorials/sampleproject"},next:{title:"Setup Existing Project",permalink:"/geoprocessing/docs/next/tutorials/existingproject"}},c={},l=[{value:"Where Do I Start?",id:"where-do-i-start",level:2},{value:"Design",id:"design",level:3},{value:"Start Simple",id:"start-simple",level:3},{value:"Then Get Complicated",id:"then-get-complicated",level:3},{value:"Create SeaSketch Project",id:"create-seasketch-project",level:2},{value:"Initialize New Project",id:"initialize-new-project",level:2},{value:"Link Data Into Workspace",id:"link-data-into-workspace",level:2},{value:"Import Datasources",id:"import-datasources",level:2},{value:"Write a Geoprocessing Function",id:"write-a-geoprocessing-function",level:2},{value:"Testing",id:"testing",level:2},{value:"Write Report Client",id:"write-report-client",level:2},{value:"Build and Deploy to AWS",id:"build-and-deploy-to-aws",level:2},{value:"Publish Datasources",id:"publish-datasources",level:2},{value:"Debugging build failure",id:"debugging-build-failure",level:3},{value:"Connect to SeaSketch Project and Test",id:"connect-to-seasketch-project-and-test",level:2},{value:"Advanced Features",id:"advanced-features",level:2},{value:"Project Client",id:"project-client",level:3},{value:"Configure Geography",id:"configure-geography",level:3},{value:"Precalc Metrics",id:"precalc-metrics",level:4},{value:"Metric Groups",id:"metric-groups",level:3},{value:"Create Report",id:"create-report",level:3},{value:"Language Translation",id:"language-translation",level:3},{value:"What Next",id:"what-next",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.p,{children:"[WORK IN PROGRESS]"}),"\n",(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"create-new-geoprocessing-project",children:"Create New Geoprocessing Project"})}),"\n",(0,t.jsx)(s.p,{children:"This tutorial walks you through designing and creating your own geoprocessing report. It covers many of the questions and decisions you might face along the way."}),"\n",(0,t.jsx)(s.p,{children:"This tutorial assumes:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Your ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/tutorials/",children:"system setup"})," is complete"]}),"\n",(0,t.jsxs)(s.li,{children:["You completed the ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/tutorials/sampleproject",children:"sample project tutorial"})]}),"\n",(0,t.jsx)(s.li,{children:"Your geoprocessing virtual environment is currently running (Devcontainer or WSL)"}),"\n",(0,t.jsx)(s.li,{children:"You have VSCode open in your virtual environment with a terminal pane open"}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"where-do-i-start",children:"Where Do I Start?"}),"\n",(0,t.jsx)(s.p,{children:"Creating a geoprocessing project is not linear, it's iterative. You don't need to have all the answers for your project or understand all the features of the framework. Here's one approach:"}),"\n",(0,t.jsx)(s.h3,{id:"design",children:"Design"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Explore the geoprocessing ",(0,t.jsx)(s.a,{href:"/storybook",children:"UI component library"})]}),"\n",(0,t.jsx)(s.li,{children:"Look at other SeaSketch Reports"}),"\n",(0,t.jsxs)(s.li,{children:["Use a design ",(0,t.jsx)(s.a,{href:"https://docs.google.com/document/d/1Qe7pZYmwg7ggRY9ocu3tpdTQkvuIHMr38wLxrjSitpU/edit?usp=sharing",children:"template"}),". This one asks common questions and is a good place to capture decisions."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"start-simple",children:"Start Simple"}),"\n",(0,t.jsx)(s.p,{children:"The geoprocessing framework is a set of building blocks. Which ones you use are up to you. If your planning process requirements can start simple:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"a single planning boundary or none at all"}),"\n",(0,t.jsx)(s.li,{children:"simple measurable objectives (overlap area, % area overlap, overlap feature count)"}),"\n",(0,t.jsx)(s.li,{children:"on smaller datasets"}),"\n",(0,t.jsx)(s.li,{children:"no classification of sketch types (e.g. protection levels)"}),"\n",(0,t.jsx)(s.li,{children:"no need to handle overlapping sketch polygons"}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Then your geoprocessing project code can start simple:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"no precalculation needed"}),"\n",(0,t.jsx)(s.li,{children:"direct import of GeoJSON datasets in code, or simple datasource import."}),"\n",(0,t.jsx)(s.li,{children:"direct use of turf and geoblaze to calculate simple metrics"}),"\n",(0,t.jsx)(s.li,{children:"simple reports rendering a few values, a table, a chart"}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["A good example of this is ",(0,t.jsx)(s.a,{href:"https://github.com/underbluewaters/oregon-next",children:"Oregon"})," SeaSketch reports."]}),"\n",(0,t.jsx)(s.h3,{id:"then-get-complicated",children:"Then Get Complicated"}),"\n",(0,t.jsx)(s.p,{children:"As your planning process gets more complex:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"multiple planning boundaries (offshore/nearshore)"}),"\n",(0,t.jsx)(s.li,{children:"multiple objectives with targets"}),"\n",(0,t.jsx)(s.li,{children:"large datasets with multiple data subclasses."}),"\n",(0,t.jsx)(s.li,{children:"long running analysis with required precalculation"}),"\n",(0,t.jsx)(s.li,{children:"use of a sketch classification system (e.g. protection levels)"}),"\n",(0,t.jsx)(s.li,{children:"need to enforce rules about overlapping sketches"}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Then your project can benefit from more advanced features:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Fully managed ",(0,t.jsx)(s.code,{children:"Datasources"})," via ",(0,t.jsx)(s.code,{children:"data:import"})," and ",(0,t.jsx)(s.code,{children:"data:publish"})," commands with automated import, transform, and publish to S3."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"Geography"})," records representing project planning boundaries"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"Metric"})," records for representing multi-dimensional analysis results."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"Objective"})," records representing objective targets per sketch class."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"MetricGroup"})," records reresenting relationship of metric results to their data classes, datasource, objective target, etc."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"toolbox"})," for calculating overlay analysis metrics at the collection level in many dimensions - by data class, by protection level, by planning boundary.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"overlapFeatures"}),", ",(0,t.jsx)(s.code,{children:"rasterMetrics"}),", ",(0,t.jsx)(s.code,{children:"overlapFeaturesGroupMetrics"}),", ",(0,t.jsx)(s.code,{children:"overlapRasterGroupMetrics"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["UI components that can work with all of these record types","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"ClassTable"}),", ",(0,t.jsx)(s.code,{children:"SketchClassTable"}),", ",(0,t.jsx)(s.code,{children:"GeographySwitcher"}),", ",(0,t.jsx)(s.code,{children:"RbcsMpaObjective"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"precalc"})," command automating pre-calculation of overlay stats for combinations of Datasources and Geographies."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"worker"})," functions to run geoprocessing work in parallel and get results faster."]}),"\n",(0,t.jsxs)(s.li,{children:["Language ",(0,t.jsx)(s.code,{children:"translation"})," workflow and library of pre-translated UI components."]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Examples of more complex projects:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/seasketch/california-reports",children:"California"})," - multiple geographies presented in reports (planning boundaries, bioregions), worker functions"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/seasketch/bermuda-reports-next",children:"Bermuda"})," - IUCN classification system with metrics calculated overall, per protection level, and per sketch. worker functions"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/seasketch/azores-nearshore-reports",children:"Blue Azores nearshore"})," - user switching between planning geographies."]}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/samoa-reports",children:"Samoa Reports"})}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/seasketch/azores-nearshore-reports",children:"Azores Nearshore Reports"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"create-seasketch-project",children:"Create SeaSketch Project"}),"\n",(0,t.jsxs)(s.p,{children:["First, follow the ",(0,t.jsx)(s.a,{href:"https://docs.seasketch.org/seasketch-documentation/administrators-guide/getting-started",children:"instructions"})," to create a new SeaSketch project. This includes defining the planning bounds and ",(0,t.jsx)(s.a,{href:"https://docs.seasketch.org/seasketch-documentation/administrators-guide/sketch-classes",children:"creating a Sketch class"}),". You will want to create a ",(0,t.jsx)(s.code,{children:"Polygon"})," sketch class with a name that makes sense for you project (e.g. MPA for Marine Protected Area) and then also a ",(0,t.jsx)(s.code,{children:"Collection"})," sketch class to group instances of your polygon sketch class into. Note that sketch classes are where you will integrate your geoprocessing services to view reports, but you will not do it at this time."]}),"\n",(0,t.jsx)(s.h2,{id:"initialize-new-project",children:"Initialize New Project"}),"\n",(0,t.jsx)(s.p,{children:"Start with initializing a new project:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sh",children:"cd /workspaces\nnpx @seasketch/geoprocessing@7.0.0-experimental-7x-docs.103 init 7.0.0-experimental-7x-docs.103\n"})}),"\n",(0,t.jsx)(s.p,{children:"Tips:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"the answers to all of the init questions can be changed later, so don't worry if you don't know the answer."}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/seasketch/next/blob/master/LICENSE",children:"SeaSketch"})," uses a BSD-3 license (the default choice). You can choose any including ",(0,t.jsx)(s.code,{children:"UNLICENSED"}),' meaning proprietary or "All rights reserved" .']}),"\n",(0,t.jsxs)(s.li,{children:["The most common AWS region is ",(0,t.jsx)(s.code,{children:"us-west-1"})," or ",(0,t.jsx)(s.code,{children:"us-east-2"}),". ",(0,t.jsx)(s.a,{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html",children:"Choose the region"})," closest to your project."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Learn more about your projects ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/structure",children:"structure"})]}),"\n",(0,t.jsx)(s.h2,{id:"link-data-into-workspace",children:"Link Data Into Workspace"}),"\n",(0,t.jsxs)(s.p,{children:["Choose how to ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/linkData",children:"bring data into your workspace"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"import-datasources",children:"Import Datasources"}),"\n",(0,t.jsx)(s.p,{children:"Methods:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Use ",(0,t.jsx)(s.code,{children:"import:data"})]}),"\n",(0,t.jsxs)(s.li,{children:["Script your own method to prepare data and put it into ",(0,t.jsx)(s.code,{children:"data/dist"})]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"write-a-geoprocessing-function",children:"Write a Geoprocessing Function"}),"\n",(0,t.jsxs)(s.p,{children:["Let's start with ",(0,t.jsx)(s.code,{children:"src/functions/simpleFunction"})," and build it up to use a datasource."]}),"\n",(0,t.jsx)(s.p,{children:"Methods:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Directly import geojson file in function"}),"\n",(0,t.jsxs)(s.li,{children:["Use ",(0,t.jsx)(s.code,{children:"datasource"})," record and ",(0,t.jsx)(s.code,{children:"getDatasource"})," and ",(0,t.jsx)(s.code,{children:"getFeatures"})]}),"\n",(0,t.jsxs)(s.li,{children:["Load from project datasets bucket using ",(0,t.jsx)(s.code,{children:"loadFgb"})," or ",(0,t.jsx)(s.code,{children:"loadCog"})," function"]}),"\n",(0,t.jsxs)(s.li,{children:["Load from third-party using ",(0,t.jsx)(s.code,{children:"loadFgb"})," or ",(0,t.jsx)(s.code,{children:"loadCog"})," function"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["If the data you'll use in analysis is already published online, publicly accessible, and in flatgeobuf or cloud-optimized geotiff format, then you can directly access them with ",(0,t.jsx)(s.code,{children:"loadFgb"})," and ",(0,t.jsx)(s.code,{children:"loadCog"})," functions."]}),"\n",(0,t.jsx)(s.h2,{id:"testing",children:"Testing"}),"\n",(0,t.jsx)(s.p,{children:"Methods to generate examples:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"genRandomPolygon"}),"\n",(0,t.jsx)(s.li,{children:"geojson.io"}),"\n",(0,t.jsx)(s.li,{children:"export sketch geojson from SeaSketch project"}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Assuming you have a SeaSketch project with a Polygon sketch class, follow the instructions for ",(0,t.jsx)(s.a,{href:"https://docs.seasketch.org/seasketch-documentation/users-guide/sketching-tools",children:"sketching tools"})," to draw one or more polygon sketches. You can also create a collection and group your sketches into the collection."]}),"\n",(0,t.jsxs)(s.p,{children:["Finally, ",(0,t.jsx)(s.a,{href:"https://docs.seasketch.org/seasketch-documentation/users-guide/sketching-tools#downloading-sketches",children:"export"})," your sketches and sketch collections as GeoJSON, and move them into your geoprocessing projects ",(0,t.jsx)(s.code,{children:"examples/sketches"})," folder."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:" /examples/\n sketches/ # <-- examples used by geoprocessing functions\n features/ # <-- examples used by preprocessing functions\n"})}),"\n",(0,t.jsx)(s.p,{children:"Once you add your example sketches and collections to this folder, run your smoke tests."}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"npm run test\n"})}),"\n",(0,t.jsxs)(s.p,{children:["The smoke test for your geoprocessing function will run the function against every sketch example whether a single Sketch or a SketchCollection and output the results to ",(0,t.jsx)(s.code,{children:"examples/output"}),". You look at this output and ensure that it is as expected."]}),"\n",(0,t.jsxs)(s.p,{children:["Learn more about testing and debugging in\n",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/testing",children:"testing"})]}),"\n",(0,t.jsx)(s.h2,{id:"write-report-client",children:"Write Report Client"}),"\n",(0,t.jsx)(s.h2,{id:"build-and-deploy-to-aws",children:"Build and Deploy to AWS"}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/tutorials/deploy",children:"Deploy your project"})}),"\n",(0,t.jsx)(s.h2,{id:"publish-datasources",children:"Publish Datasources"}),"\n",(0,t.jsx)(s.p,{children:"Methods:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["use ",(0,t.jsx)(s.code,{children:"publish:data"})]}),"\n",(0,t.jsxs)(s.li,{children:["script your own method to publish datasources from ",(0,t.jsx)(s.code,{children:"data/dist"})," to project ",(0,t.jsx)(s.code,{children:"datasets"})," S3 bucket."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"debugging-build-failure",children:"Debugging build failure"}),"\n",(0,t.jsxs)(s.p,{children:["If the build step fails, you will need to look at the error message and figure out what you need to do. Did it fail in building the functions or the clients? 99% of the time you should be able to catch these errors sooner. If VSCode finds invalid Typescript code, it will warn you with files marked in ",(0,t.jsx)(s.code,{children:"red"})," in the Explorer panel or with red markes and squiggle text in any of the files."]}),"\n",(0,t.jsx)(s.p,{children:"If you're still not sure try some of the following:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Run your smoke tests, see if they pass"}),"\n",(0,t.jsx)(s.li,{children:"When was the last time your build did succeed? You can be sure the error is caused by a change you made since then either in your project code, by upgrading your geoprocessing library version and not migratin fully, or by changing something on your system."}),"\n",(0,t.jsx)(s.li,{children:"You can stash your current changes or commit them to a branch so they are not lost. Then sequentially check out previous commits of the code until you find one that builds properly. Now you know that the next commit cause the build error."}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"connect-to-seasketch-project-and-test",children:"Connect to SeaSketch Project and Test"}),"\n",(0,t.jsxs)(s.p,{children:["Choose ",(0,t.jsx)(s.code,{children:"clipToOcean"})," as preprocessor\nChoose ",(0,t.jsx)(s.code,{children:"MpaTabReport"})," as report client"]}),"\n",(0,t.jsxs)(s.p,{children:["Test different sketch and collection scenarios. When you find one that errors or does something unexpected, then you can export that sketch to your projects ",(0,t.jsx)(s.code,{children:"examples/sketches"})," directory and run your smoke tests. If that succeeds and produces output as expected, then load your storybook and see if you can reproduce in your report client."]}),"\n",(0,t.jsx)(s.h2,{id:"advanced-features",children:"Advanced Features"}),"\n",(0,t.jsx)(s.p,{children:"There are more advanced features available if you need them."}),"\n",(0,t.jsx)(s.h3,{id:"project-client",children:"Project Client"}),"\n",(0,t.jsx)(s.p,{children:"It has a lot of shortcut methods for working with datasources, geographies, precalc metrics, objectives, etc."}),"\n",(0,t.jsx)(s.p,{children:"[Link to project client ]"}),"\n",(0,t.jsx)(s.h3,{id:"configure-geography",children:"Configure Geography"}),"\n",(0,t.jsx)(s.p,{children:"Import planning boundary datasource and add as geography"}),"\n",(0,t.jsx)(s.h4,{id:"precalc-metrics",children:"Precalc Metrics"}),"\n",(0,t.jsx)(s.p,{children:"At the very least you should import your planning boundaries, preferably as individual files, or as individual layers within a file package."}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sh",children:"npm run precalc:data\n\n? Do you want to precalculate only a subset?\n Yes, by datasource\n Yes, by geography\n Yes, by both\n\u276f No, just precalculate everything (may take a while)\n"})}),"\n",(0,t.jsxs)(s.p,{children:["What's happening is that the precalc script starts a local web server on port 8001 that serves up the datasources in ",(0,t.jsx)(s.code,{children:"data/dist"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["The precalc script then gets all your project datasources with ",(0,t.jsx)(s.code,{children:"precalc: true"}),", and all your project geographies with ",(0,t.jsx)(s.code,{children:"precalc: true"}),", and then calculate ",(0,t.jsx)(s.code,{children:"area"}),", ",(0,t.jsx)(s.code,{children:"sum"}),", and ",(0,t.jsx)(s.code,{children:"count"})," metrics for each combination of datasource and geography."]}),"\n",(0,t.jsxs)(s.p,{children:["Once complete ",(0,t.jsx)(s.code,{children:"project/precalc.json"})," will have been updated with the new metric values."]}),"\n",(0,t.jsxs)(s.p,{children:["If your datasource has ",(0,t.jsx)(s.code,{children:"classKeys"})," defined in its record, precalc will also calculate ",(0,t.jsx)(s.code,{children:"area"}),", ",(0,t.jsx)(s.code,{children:"sum"}),", and ",(0,t.jsx)(s.code,{children:"count"})," for each unique class value found within the classKey."]}),"\n",(0,t.jsxs)(s.p,{children:["You must re-run ",(0,t.jsx)(s.code,{children:"precalc:data"})," every time you change a geography record or a datasource."]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["To learn more advanced use, see the ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/precalc",children:"precalc"})," guide."]}),"\n",(0,t.jsxs)(s.li,{children:["To learn more about use of precalculated metrics, see the ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/reportclient",children:"report client"})," guide."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"metric-groups",children:"Metric Groups"}),"\n",(0,t.jsx)(s.p,{children:"How you intend to use your data will determine what form the data needs to be in."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Do you have a vector dataset?","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Does it have a single data class?"}),"\n",(0,t.jsxs)(s.li,{children:["Does it have multiple data classes?","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Is it one data class per file?"}),"\n",(0,t.jsx)(s.li,{children:"Is it one data class per layer within file?"}),"\n",(0,t.jsx)(s.li,{children:"Does it have multiple data classes within one layer with an attribute to differentiate them?"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Do you have raster dataset?","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Does it have a single data class?","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Is it one file with one data class?"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Does it have multiple data classes?","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Is it one file, one data class per raster band?"}),"\n",(0,t.jsx)(s.li,{children:"Is it multiple files, one data class per file?"}),"\n",(0,t.jsx)(s.li,{children:"Is it a categorical raster with unique cell value for each class?"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"[ToDo: provide metric group example for each leaf in tree]"}),"\n",(0,t.jsx)(s.h3,{id:"create-report",children:"Create Report"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Edits to the statistic you want calculated (i.e.calculating average instead of sum, etc) should happen in your function."}),"\n",(0,t.jsx)(s.li,{children:"Edits to the way the analytics are displayed (i.e. changing labels, converting units, adding text context, etc) should happen in your report components."}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"language-translation",children:"Language Translation"}),"\n",(0,t.jsxs)(s.p,{children:["Language translation takes effort to maintain. It is suggested that you get your reports close to final, in the English language, and then ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/gip/GIP-1-i18n#language-translation-tutorial",children:"add translations"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"what-next",children:"What Next"}),"\n",(0,t.jsxs)(s.p,{children:["Still have more questions? ",(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/discussions",children:"Start a discussion"})," on Github."]})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>a});var t=n(96540);const r={},i=t.createContext(r);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/c5879d20.e1704ba8.js b/assets/js/c5879d20.e1704ba8.js
deleted file mode 100644
index 62b68dc3b0..0000000000
--- a/assets/js/c5879d20.e1704ba8.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[31429],{76254:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var t=n(74848),r=n(28453);const i={},o="Create New Geoprocessing Project",a={id:"tutorials/newproject",title:"newproject",description:"[WORK IN PROGRESS]",source:"@site/docs/tutorials/newproject.md",sourceDirName:"tutorials",slug:"/tutorials/newproject",permalink:"/geoprocessing/docs/next/tutorials/newproject",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/tutorials/newproject.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Create Sample Project",permalink:"/geoprocessing/docs/next/tutorials/sampleproject"},next:{title:"Setup Existing Project",permalink:"/geoprocessing/docs/next/tutorials/existingproject"}},c={},l=[{value:"Where Do I Start?",id:"where-do-i-start",level:2},{value:"Design",id:"design",level:3},{value:"Start Simple",id:"start-simple",level:3},{value:"Then Get Complicated",id:"then-get-complicated",level:3},{value:"Create SeaSketch Project",id:"create-seasketch-project",level:2},{value:"Initialize New Project",id:"initialize-new-project",level:2},{value:"Link Data Into Workspace",id:"link-data-into-workspace",level:2},{value:"Import Datasources",id:"import-datasources",level:2},{value:"Write a Geoprocessing Function",id:"write-a-geoprocessing-function",level:2},{value:"Testing",id:"testing",level:2},{value:"Write Report Client",id:"write-report-client",level:2},{value:"Build and Deploy to AWS",id:"build-and-deploy-to-aws",level:2},{value:"Publish Datasources",id:"publish-datasources",level:2},{value:"Debugging build failure",id:"debugging-build-failure",level:3},{value:"Connect to SeaSketch Project and Test",id:"connect-to-seasketch-project-and-test",level:2},{value:"Advanced Features",id:"advanced-features",level:2},{value:"Project Client",id:"project-client",level:3},{value:"Configure Geography",id:"configure-geography",level:3},{value:"Precalc Metrics",id:"precalc-metrics",level:4},{value:"Metric Groups",id:"metric-groups",level:3},{value:"Create Report",id:"create-report",level:3},{value:"Language Translation",id:"language-translation",level:3},{value:"What Next",id:"what-next",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.p,{children:"[WORK IN PROGRESS]"}),"\n",(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"create-new-geoprocessing-project",children:"Create New Geoprocessing Project"})}),"\n",(0,t.jsx)(s.p,{children:"This tutorial walks you through designing and creating your own geoprocessing report. It covers many of the questions and decisions you might face along the way."}),"\n",(0,t.jsx)(s.p,{children:"This tutorial assumes:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Your ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/tutorials/",children:"system setup"})," is complete"]}),"\n",(0,t.jsxs)(s.li,{children:["You completed the ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/tutorials/sampleproject",children:"sample project tutorial"})]}),"\n",(0,t.jsx)(s.li,{children:"Your geoprocessing virtual environment is currently running (Devcontainer or WSL)"}),"\n",(0,t.jsx)(s.li,{children:"You have VSCode open in your virtual environment with a terminal pane open"}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"where-do-i-start",children:"Where Do I Start?"}),"\n",(0,t.jsx)(s.p,{children:"Creating a geoprocessing project is not linear, it's iterative. You don't need to have all the answers for your project or understand all the features of the framework. Here's one approach:"}),"\n",(0,t.jsx)(s.h3,{id:"design",children:"Design"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Explore the geoprocessing ",(0,t.jsx)(s.a,{href:"/storybook",children:"UI component library"})]}),"\n",(0,t.jsx)(s.li,{children:"Look at other SeaSketch Reports"}),"\n",(0,t.jsxs)(s.li,{children:["Use a design ",(0,t.jsx)(s.a,{href:"https://docs.google.com/document/d/1Qe7pZYmwg7ggRY9ocu3tpdTQkvuIHMr38wLxrjSitpU/edit?usp=sharing",children:"template"}),". This one asks common questions and is a good place to capture decisions."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"start-simple",children:"Start Simple"}),"\n",(0,t.jsx)(s.p,{children:"The geoprocessing framework is a set of building blocks. Which ones you use are up to you. If your planning process requirements can start simple:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"a single planning boundary or none at all"}),"\n",(0,t.jsx)(s.li,{children:"simple measurable objectives (overlap area, % area overlap, overlap feature count)"}),"\n",(0,t.jsx)(s.li,{children:"on smaller datasets"}),"\n",(0,t.jsx)(s.li,{children:"no classification of sketch types (e.g. protection levels)"}),"\n",(0,t.jsx)(s.li,{children:"no need to handle overlapping sketch polygons"}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Then your geoprocessing project code can start simple:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"no precalculation needed"}),"\n",(0,t.jsx)(s.li,{children:"direct import of GeoJSON datasets in code, or simple datasource import."}),"\n",(0,t.jsx)(s.li,{children:"direct use of turf and geoblaze to calculate simple metrics"}),"\n",(0,t.jsx)(s.li,{children:"simple reports rendering a few values, a table, a chart"}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["A good example of this is ",(0,t.jsx)(s.a,{href:"https://github.com/underbluewaters/oregon-next",children:"Oregon"})," SeaSketch reports."]}),"\n",(0,t.jsx)(s.h3,{id:"then-get-complicated",children:"Then Get Complicated"}),"\n",(0,t.jsx)(s.p,{children:"As your planning process gets more complex:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"multiple planning boundaries (offshore/nearshore)"}),"\n",(0,t.jsx)(s.li,{children:"multiple objectives with targets"}),"\n",(0,t.jsx)(s.li,{children:"large datasets with multiple data subclasses."}),"\n",(0,t.jsx)(s.li,{children:"long running analysis with required precalculation"}),"\n",(0,t.jsx)(s.li,{children:"use of a sketch classification system (e.g. protection levels)"}),"\n",(0,t.jsx)(s.li,{children:"need to enforce rules about overlapping sketches"}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Then your project can benefit from more advanced features:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Fully managed ",(0,t.jsx)(s.code,{children:"Datasources"})," via ",(0,t.jsx)(s.code,{children:"data:import"})," and ",(0,t.jsx)(s.code,{children:"data:publish"})," commands with automated import, transform, and publish to S3."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"Geography"})," records representing project planning boundaries"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"Metric"})," records for representing multi-dimensional analysis results."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"Objective"})," records representing objective targets per sketch class."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"MetricGroup"})," records reresenting relationship of metric results to their data classes, datasource, objective target, etc."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"toolbox"})," for calculating overlay analysis metrics at the collection level in many dimensions - by data class, by protection level, by planning boundary.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"overlapFeatures"}),", ",(0,t.jsx)(s.code,{children:"rasterMetrics"}),", ",(0,t.jsx)(s.code,{children:"overlapFeaturesGroupMetrics"}),", ",(0,t.jsx)(s.code,{children:"overlapRasterGroupMetrics"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["UI components that can work with all of these record types","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"ClassTable"}),", ",(0,t.jsx)(s.code,{children:"SketchClassTable"}),", ",(0,t.jsx)(s.code,{children:"GeographySwitcher"}),", ",(0,t.jsx)(s.code,{children:"RbcsMpaObjective"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"precalc"})," command automating pre-calculation of overlay stats for combinations of Datasources and Geographies."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"worker"})," functions to run geoprocessing work in parallel and get results faster."]}),"\n",(0,t.jsxs)(s.li,{children:["Language ",(0,t.jsx)(s.code,{children:"translation"})," workflow and library of pre-translated UI components."]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Examples of more complex projects:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/seasketch/california-reports",children:"California"})," - multiple geographies presented in reports (planning boundaries, bioregions), worker functions"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/seasketch/bermuda-reports-next",children:"Bermuda"})," - IUCN classification system with metrics calculated overall, per protection level, and per sketch. worker functions"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/seasketch/azores-nearshore-reports",children:"Blue Azores nearshore"})," - user switching between planning geographies."]}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://github.com/seasketch/samoa-reports",children:"Samoa Reports"})}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/seasketch/azores-nearshore-reports",children:"Azores Nearshore Reports"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"create-seasketch-project",children:"Create SeaSketch Project"}),"\n",(0,t.jsxs)(s.p,{children:["First, follow the ",(0,t.jsx)(s.a,{href:"https://docs.seasketch.org/seasketch-documentation/administrators-guide/getting-started",children:"instructions"})," to create a new SeaSketch project. This includes defining the planning bounds and ",(0,t.jsx)(s.a,{href:"https://docs.seasketch.org/seasketch-documentation/administrators-guide/sketch-classes",children:"creating a Sketch class"}),". You will want to create a ",(0,t.jsx)(s.code,{children:"Polygon"})," sketch class with a name that makes sense for you project (e.g. MPA for Marine Protected Area) and then also a ",(0,t.jsx)(s.code,{children:"Collection"})," sketch class to group instances of your polygon sketch class into. Note that sketch classes are where you will integrate your geoprocessing services to view reports, but you will not do it at this time."]}),"\n",(0,t.jsx)(s.h2,{id:"initialize-new-project",children:"Initialize New Project"}),"\n",(0,t.jsx)(s.p,{children:"Start with initializing a new project:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sh",children:"cd /workspaces\nnpx @seasketch/geoprocessing@7.0.0-experimental-7x-docs.95 init 7.0.0-experimental-7x-docs.95\n"})}),"\n",(0,t.jsx)(s.p,{children:"Tips:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"the answers to all of the init questions can be changed later, so don't worry if you don't know the answer."}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/seasketch/next/blob/master/LICENSE",children:"SeaSketch"})," uses a BSD-3 license (the default choice). You can choose any including ",(0,t.jsx)(s.code,{children:"UNLICENSED"}),' meaning proprietary or "All rights reserved" .']}),"\n",(0,t.jsxs)(s.li,{children:["The most common AWS region is ",(0,t.jsx)(s.code,{children:"us-west-1"})," or ",(0,t.jsx)(s.code,{children:"us-east-2"}),". ",(0,t.jsx)(s.a,{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html",children:"Choose the region"})," closest to your project."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Learn more about your projects ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/structure",children:"structure"})]}),"\n",(0,t.jsx)(s.h2,{id:"link-data-into-workspace",children:"Link Data Into Workspace"}),"\n",(0,t.jsxs)(s.p,{children:["Choose how to ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/linkData",children:"bring data into your workspace"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"import-datasources",children:"Import Datasources"}),"\n",(0,t.jsx)(s.p,{children:"Methods:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Use ",(0,t.jsx)(s.code,{children:"import:data"})]}),"\n",(0,t.jsxs)(s.li,{children:["Script your own method to prepare data and put it into ",(0,t.jsx)(s.code,{children:"data/dist"})]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"write-a-geoprocessing-function",children:"Write a Geoprocessing Function"}),"\n",(0,t.jsxs)(s.p,{children:["Let's start with ",(0,t.jsx)(s.code,{children:"src/functions/simpleFunction"})," and build it up to use a datasource."]}),"\n",(0,t.jsx)(s.p,{children:"Methods:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Directly import geojson file in function"}),"\n",(0,t.jsxs)(s.li,{children:["Use ",(0,t.jsx)(s.code,{children:"datasource"})," record and ",(0,t.jsx)(s.code,{children:"getDatasource"})," and ",(0,t.jsx)(s.code,{children:"getFeatures"})]}),"\n",(0,t.jsxs)(s.li,{children:["Load from project datasets bucket using ",(0,t.jsx)(s.code,{children:"loadFgb"})," or ",(0,t.jsx)(s.code,{children:"loadCog"})," function"]}),"\n",(0,t.jsxs)(s.li,{children:["Load from third-party using ",(0,t.jsx)(s.code,{children:"loadFgb"})," or ",(0,t.jsx)(s.code,{children:"loadCog"})," function"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["If the data you'll use in analysis is already published online, publicly accessible, and in flatgeobuf or cloud-optimized geotiff format, then you can directly access them with ",(0,t.jsx)(s.code,{children:"loadFgb"})," and ",(0,t.jsx)(s.code,{children:"loadCog"})," functions."]}),"\n",(0,t.jsx)(s.h2,{id:"testing",children:"Testing"}),"\n",(0,t.jsx)(s.p,{children:"Methods to generate examples:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"genRandomPolygon"}),"\n",(0,t.jsx)(s.li,{children:"geojson.io"}),"\n",(0,t.jsx)(s.li,{children:"export sketch geojson from SeaSketch project"}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Assuming you have a SeaSketch project with a Polygon sketch class, follow the instructions for ",(0,t.jsx)(s.a,{href:"https://docs.seasketch.org/seasketch-documentation/users-guide/sketching-tools",children:"sketching tools"})," to draw one or more polygon sketches. You can also create a collection and group your sketches into the collection."]}),"\n",(0,t.jsxs)(s.p,{children:["Finally, ",(0,t.jsx)(s.a,{href:"https://docs.seasketch.org/seasketch-documentation/users-guide/sketching-tools#downloading-sketches",children:"export"})," your sketches and sketch collections as GeoJSON, and move them into your geoprocessing projects ",(0,t.jsx)(s.code,{children:"examples/sketches"})," folder."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:" /examples/\n sketches/ # <-- examples used by geoprocessing functions\n features/ # <-- examples used by preprocessing functions\n"})}),"\n",(0,t.jsx)(s.p,{children:"Once you add your example sketches and collections to this folder, run your smoke tests."}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"npm run test\n"})}),"\n",(0,t.jsxs)(s.p,{children:["The smoke test for your geoprocessing function will run the function against every sketch example whether a single Sketch or a SketchCollection and output the results to ",(0,t.jsx)(s.code,{children:"examples/output"}),". You look at this output and ensure that it is as expected."]}),"\n",(0,t.jsxs)(s.p,{children:["Learn more about testing and debugging in\n",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/testing",children:"testing"})]}),"\n",(0,t.jsx)(s.h2,{id:"write-report-client",children:"Write Report Client"}),"\n",(0,t.jsx)(s.h2,{id:"build-and-deploy-to-aws",children:"Build and Deploy to AWS"}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/tutorials/deploy",children:"Deploy your project"})}),"\n",(0,t.jsx)(s.h2,{id:"publish-datasources",children:"Publish Datasources"}),"\n",(0,t.jsx)(s.p,{children:"Methods:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["use ",(0,t.jsx)(s.code,{children:"publish:data"})]}),"\n",(0,t.jsxs)(s.li,{children:["script your own method to publish datasources from ",(0,t.jsx)(s.code,{children:"data/dist"})," to project ",(0,t.jsx)(s.code,{children:"datasets"})," S3 bucket."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"debugging-build-failure",children:"Debugging build failure"}),"\n",(0,t.jsxs)(s.p,{children:["If the build step fails, you will need to look at the error message and figure out what you need to do. Did it fail in building the functions or the clients? 99% of the time you should be able to catch these errors sooner. If VSCode finds invalid Typescript code, it will warn you with files marked in ",(0,t.jsx)(s.code,{children:"red"})," in the Explorer panel or with red markes and squiggle text in any of the files."]}),"\n",(0,t.jsx)(s.p,{children:"If you're still not sure try some of the following:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Run your smoke tests, see if they pass"}),"\n",(0,t.jsx)(s.li,{children:"When was the last time your build did succeed? You can be sure the error is caused by a change you made since then either in your project code, by upgrading your geoprocessing library version and not migratin fully, or by changing something on your system."}),"\n",(0,t.jsx)(s.li,{children:"You can stash your current changes or commit them to a branch so they are not lost. Then sequentially check out previous commits of the code until you find one that builds properly. Now you know that the next commit cause the build error."}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"connect-to-seasketch-project-and-test",children:"Connect to SeaSketch Project and Test"}),"\n",(0,t.jsxs)(s.p,{children:["Choose ",(0,t.jsx)(s.code,{children:"clipToOcean"})," as preprocessor\nChoose ",(0,t.jsx)(s.code,{children:"MpaTabReport"})," as report client"]}),"\n",(0,t.jsxs)(s.p,{children:["Test different sketch and collection scenarios. When you find one that errors or does something unexpected, then you can export that sketch to your projects ",(0,t.jsx)(s.code,{children:"examples/sketches"})," directory and run your smoke tests. If that succeeds and produces output as expected, then load your storybook and see if you can reproduce in your report client."]}),"\n",(0,t.jsx)(s.h2,{id:"advanced-features",children:"Advanced Features"}),"\n",(0,t.jsx)(s.p,{children:"There are more advanced features available if you need them."}),"\n",(0,t.jsx)(s.h3,{id:"project-client",children:"Project Client"}),"\n",(0,t.jsx)(s.p,{children:"It has a lot of shortcut methods for working with datasources, geographies, precalc metrics, objectives, etc."}),"\n",(0,t.jsx)(s.p,{children:"[Link to project client ]"}),"\n",(0,t.jsx)(s.h3,{id:"configure-geography",children:"Configure Geography"}),"\n",(0,t.jsx)(s.p,{children:"Import planning boundary datasource and add as geography"}),"\n",(0,t.jsx)(s.h4,{id:"precalc-metrics",children:"Precalc Metrics"}),"\n",(0,t.jsx)(s.p,{children:"At the very least you should import your planning boundaries, preferably as individual files, or as individual layers within a file package."}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sh",children:"npm run precalc:data\n\n? Do you want to precalculate only a subset?\n Yes, by datasource\n Yes, by geography\n Yes, by both\n\u276f No, just precalculate everything (may take a while)\n"})}),"\n",(0,t.jsxs)(s.p,{children:["What's happening is that the precalc script starts a local web server on port 8001 that serves up the datasources in ",(0,t.jsx)(s.code,{children:"data/dist"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["The precalc script then gets all your project datasources with ",(0,t.jsx)(s.code,{children:"precalc: true"}),", and all your project geographies with ",(0,t.jsx)(s.code,{children:"precalc: true"}),", and then calculate ",(0,t.jsx)(s.code,{children:"area"}),", ",(0,t.jsx)(s.code,{children:"sum"}),", and ",(0,t.jsx)(s.code,{children:"count"})," metrics for each combination of datasource and geography."]}),"\n",(0,t.jsxs)(s.p,{children:["Once complete ",(0,t.jsx)(s.code,{children:"project/precalc.json"})," will have been updated with the new metric values."]}),"\n",(0,t.jsxs)(s.p,{children:["If your datasource has ",(0,t.jsx)(s.code,{children:"classKeys"})," defined in its record, precalc will also calculate ",(0,t.jsx)(s.code,{children:"area"}),", ",(0,t.jsx)(s.code,{children:"sum"}),", and ",(0,t.jsx)(s.code,{children:"count"})," for each unique class value found within the classKey."]}),"\n",(0,t.jsxs)(s.p,{children:["You must re-run ",(0,t.jsx)(s.code,{children:"precalc:data"})," every time you change a geography record or a datasource."]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["To learn more advanced use, see the ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/precalc",children:"precalc"})," guide."]}),"\n",(0,t.jsxs)(s.li,{children:["To learn more about use of precalculated metrics, see the ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/reportclient",children:"report client"})," guide."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"metric-groups",children:"Metric Groups"}),"\n",(0,t.jsx)(s.p,{children:"How you intend to use your data will determine what form the data needs to be in."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Do you have a vector dataset?","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Does it have a single data class?"}),"\n",(0,t.jsxs)(s.li,{children:["Does it have multiple data classes?","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Is it one data class per file?"}),"\n",(0,t.jsx)(s.li,{children:"Is it one data class per layer within file?"}),"\n",(0,t.jsx)(s.li,{children:"Does it have multiple data classes within one layer with an attribute to differentiate them?"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Do you have raster dataset?","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Does it have a single data class?","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Is it one file with one data class?"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Does it have multiple data classes?","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Is it one file, one data class per raster band?"}),"\n",(0,t.jsx)(s.li,{children:"Is it multiple files, one data class per file?"}),"\n",(0,t.jsx)(s.li,{children:"Is it a categorical raster with unique cell value for each class?"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"[ToDo: provide metric group example for each leaf in tree]"}),"\n",(0,t.jsx)(s.h3,{id:"create-report",children:"Create Report"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Edits to the statistic you want calculated (i.e.calculating average instead of sum, etc) should happen in your function."}),"\n",(0,t.jsx)(s.li,{children:"Edits to the way the analytics are displayed (i.e. changing labels, converting units, adding text context, etc) should happen in your report components."}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"language-translation",children:"Language Translation"}),"\n",(0,t.jsxs)(s.p,{children:["Language translation takes effort to maintain. It is suggested that you get your reports close to final, in the English language, and then ",(0,t.jsx)(s.a,{href:"/geoprocessing/docs/next/gip/GIP-1-i18n#language-translation-tutorial",children:"add translations"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"what-next",children:"What Next"}),"\n",(0,t.jsxs)(s.p,{children:["Still have more questions? ",(0,t.jsx)(s.a,{href:"https://github.com/seasketch/geoprocessing/discussions",children:"Start a discussion"})," on Github."]})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>a});var t=n(96540);const r={},i=t.createContext(r);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/cd822b78.1bff7b4c.js b/assets/js/cd822b78.1bff7b4c.js
deleted file mode 100644
index 1bd8ce9563..0000000000
--- a/assets/js/cd822b78.1bff7b4c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[54037],{91363:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var o=n(74848),r=n(28453);const s={},i="Creating a Report Client",c={id:"tutorials/createReport",title:"Creating a Report Client",description:"To create a new report client simply run:",source:"@site/docs/tutorials/createReport.md",sourceDirName:"tutorials",slug:"/tutorials/createReport",permalink:"/geoprocessing/docs/next/tutorials/createReport",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/tutorials/createReport.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"New Geoprocessing Function",permalink:"/geoprocessing/docs/next/tutorials/createGeoprocessing"},next:{title:"Upgrade Project",permalink:"/geoprocessing/docs/next/upgrade"}},a={},l=[];function d(e){const t={a:"a",code:"code",h1:"h1",header:"header",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"creating-a-report-client",children:"Creating a Report Client"})}),"\n",(0,o.jsx)(t.p,{children:"To create a new report client simply run:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"npm run create:client\n"})}),"\n",(0,o.jsx)(t.p,{children:"Enter some information about this report client:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:"? Name for this client, in PascalCase ReefReport\n? Describe what this client is for calculating reef overlap\n? What is the name of geoprocessing function this client will invoke? (in camelCase) reefAreaOverlap\n"})}),"\n",(0,o.jsx)(t.p,{children:"The command should then return the following output:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:"\u2714 created ReefReport client in src/clients/\n\nGeoprocessing client initialized\n\nNext Steps:\n * Update your client definition in src/clients/ReefReport.tsx\n * View your report client using 'npm storybook' with smoke test output for all geoprocessing functions\n"})}),"\n",(0,o.jsxs)(t.p,{children:["Assuming you named your client the default ",(0,o.jsx)(t.code,{children:"SimpleReport"}),", it will have been been added to ",(0,o.jsx)(t.code,{children:"project/geoprocessing.json"})," in the ",(0,o.jsx)(t.code,{children:"clients"})," section. A ",(0,o.jsx)(t.code,{children:"SimpleReport.tsx"})," file will have been added to ",(0,o.jsx)(t.code,{children:"src/clients"})," folder. It is responsible for rendering your new ",(0,o.jsx)(t.code,{children:"SimpleCard"})," component from the ",(0,o.jsx)(t.code,{children:"src/components"})," folder and wrapping it in a language ",(0,o.jsx)(t.code,{children:"Translator"}),". Think of the Card component as one section of a report. It executes a geoprocessing function and renders the results in a way that is readable to the user. You can add one or more Cards to your Report client. If your report gets too long, you can split it into multiple ReportPages. See the ",(0,o.jsx)(t.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/template-blank-project/src/clients/TabReport.tsx",children:"TabReport"})," example of how to add a ",(0,o.jsx)(t.code,{children:"SegmentControl"})," with multiple pages."]}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.code,{children:"SimpleReport.stories.tsx"})," and ",(0,o.jsx)(t.code,{children:"SimpleCard.stories.tsx"})," files will both be included that allows you to view your Report and Card components in ",(0,o.jsx)(t.a,{href:"/geoprocessing/docs/next/tutorials/storybook",children:"storybook"})," to dial in how they should render for every example sketch and their smoke test output."]}),"\n",(0,o.jsxs)(t.p,{children:["After adding a report client, be sure to properly setup user displayed text for ",(0,o.jsx)(t.a,{href:"/geoprocessing/docs/next/gip/GIP-1-i18n#making-report-strings-translatable",children:"translation"}),". You'll need to follow the full workflow to extract the english translation and add the translations for other languages."]})]})}function p(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>c});var o=n(96540);const r={},s=o.createContext(r);function i(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/d6d926f4.550430a2.js b/assets/js/d6d926f4.550430a2.js
deleted file mode 100644
index 6840362b6a..0000000000
--- a/assets/js/d6d926f4.550430a2.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[12094],{20130:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var o=s(74848),t=s(28453);const n={},c="overlapGroupMetrics()",i={id:"api/geoprocessing/functions/overlapGroupMetrics",title:"overlapGroupMetrics()",description:"Given area overlap metrics stratified by class and sketch, returns new metrics also stratified by group",source:"@site/docs/api/geoprocessing/functions/overlapGroupMetrics.md",sourceDirName:"api/geoprocessing/functions",slug:"/api/geoprocessing/functions/overlapGroupMetrics",permalink:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapGroupMetrics",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/geoprocessing/functions/overlapGroupMetrics.md",tags:[],version:"current",frontMatter:{}},d={},l=[{value:"Parameters",id:"parameters",level:2},{value:"Returns",id:"returns",level:2}];function a(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.header,{children:(0,o.jsx)(r.h1,{id:"overlapgroupmetrics",children:"overlapGroupMetrics()"})}),"\n",(0,o.jsx)(r.pre,{children:(0,o.jsx)(r.code,{className:"language-ts",children:"function overlapGroupMetrics(options): Promise\n"})}),"\n",(0,o.jsx)(r.p,{children:"Given area overlap metrics stratified by class and sketch, returns new metrics also stratified by group\nAssumes a sketch is member of only one group, determined by caller-provided metricToGroup\nFor each group+class, calculates area of overlap between sketches in group and featuresByClass (with overlap between group sketches removed first)\nTypes of metrics returned:\nsketch metrics: copy of caller-provided sketch metrics with addition of group ID\noverall metric for each group+class: takes sketches in group, subtracts overlap between them and overlap with higher group sketches, and runs operation\nIf a group has no sketches in it, then no group metrics will be included for that group, and group+class metric will be 0"}),"\n",(0,o.jsx)(r.h2,{id:"parameters",children:"Parameters"}),"\n",(0,o.jsxs)(r.table,{children:[(0,o.jsx)(r.thead,{children:(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.th,{children:"Parameter"}),(0,o.jsx)(r.th,{children:"Type"}),(0,o.jsx)(r.th,{children:"Description"})]})}),(0,o.jsxs)(r.tbody,{children:[(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options"})}),(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"object"})}),(0,o.jsx)(r.td,{children:"-"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.featuresByClass"})}),(0,o.jsxs)(r.td,{children:[(0,o.jsx)(r.code,{children:"Record"}),"<",(0,o.jsx)(r.code,{children:"string"}),", ",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Georaster",children:(0,o.jsx)(r.code,{children:"Georaster"})}),"> | ",(0,o.jsx)(r.code,{children:"Record"}),"<",(0,o.jsx)(r.code,{children:"string"}),", ",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,o.jsx)(r.code,{children:"Feature"})}),"<",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,o.jsx)(r.code,{children:"Polygon"})}),", ",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,o.jsx)(r.code,{children:"GeoJsonProperties"})}),">[]>"]}),(0,o.jsx)(r.td,{children:"features to overlap, keyed by class ID, use empty array if overlapArea operation"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.groupIds"})}),(0,o.jsxs)(r.td,{children:[(0,o.jsx)(r.code,{children:"string"}),"[]"]}),(0,o.jsx)(r.td,{children:"Group identifiers"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.metricId"})}),(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"string"})}),(0,o.jsx)(r.td,{children:"Caller-provided metric ID"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.metrics"})}),(0,o.jsxs)(r.td,{children:[(0,o.jsx)(r.code,{children:"object"}),"[]"]}),(0,o.jsx)(r.td,{children:"The metrics to group"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.metricToGroup"})}),(0,o.jsxs)(r.td,{children:["(",(0,o.jsx)(r.code,{children:"sketchMetric"}),") => ",(0,o.jsx)(r.code,{children:"string"})]}),(0,o.jsx)(r.td,{children:"Function that given sketch metric returns the group ID"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsxs)(r.td,{children:[(0,o.jsx)(r.code,{children:"options.onlyPresentGroups"}),"?"]}),(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"boolean"})}),(0,o.jsx)(r.td,{children:"only generate metrics for groups that sketches match to, rather than all groupIds"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.operation"})}),(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"OverlapGroupOperation"})}),(0,o.jsx)(r.td,{children:"overlap operation, defaults to overlapFeatures"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.sketch"})}),(0,o.jsxs)(r.td,{children:[(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Sketch",children:(0,o.jsx)(r.code,{children:"Sketch"})}),"<",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,o.jsx)(r.code,{children:"Polygon"})}),"> | ",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchCollection",children:(0,o.jsx)(r.code,{children:"SketchCollection"})}),"<",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,o.jsx)(r.code,{children:"Polygon"})}),">"]}),(0,o.jsx)(r.td,{children:"Sketch - single or collection"})]})]})]}),"\n",(0,o.jsx)(r.h2,{id:"returns",children:"Returns"}),"\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.code,{children:"Promise"}),"<",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metric",children:(0,o.jsx)(r.code,{children:"Metric"})}),"[]>"]})]})}function h(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,o.jsx)(r,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},28453:(e,r,s)=>{s.d(r,{R:()=>c,x:()=>i});var o=s(96540);const t={},n=o.createContext(t);function c(e){const r=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),o.createElement(n.Provider,{value:r},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/d6d926f4.b2c0787f.js b/assets/js/d6d926f4.b2c0787f.js
new file mode 100644
index 0000000000..074e8a0017
--- /dev/null
+++ b/assets/js/d6d926f4.b2c0787f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[12094],{20130:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var o=s(74848),t=s(28453);const n={},c="overlapGroupMetrics()",i={id:"api/geoprocessing/functions/overlapGroupMetrics",title:"overlapGroupMetrics()",description:"Given overlap metrics stratified by class and sketch, returns new metrics also stratified by group",source:"@site/docs/api/geoprocessing/functions/overlapGroupMetrics.md",sourceDirName:"api/geoprocessing/functions",slug:"/api/geoprocessing/functions/overlapGroupMetrics",permalink:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapGroupMetrics",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/api/geoprocessing/functions/overlapGroupMetrics.md",tags:[],version:"current",frontMatter:{}},d={},l=[{value:"Parameters",id:"parameters",level:2},{value:"Returns",id:"returns",level:2}];function a(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.header,{children:(0,o.jsx)(r.h1,{id:"overlapgroupmetrics",children:"overlapGroupMetrics()"})}),"\n",(0,o.jsx)(r.pre,{children:(0,o.jsx)(r.code,{className:"language-ts",children:"function overlapGroupMetrics(options): Promise\n"})}),"\n",(0,o.jsx)(r.p,{children:"Given overlap metrics stratified by class and sketch, returns new metrics also stratified by group\nAssumes a sketch is member of only one group, determined by caller-provided metricToGroup\nFor each group+class, calculates area of overlap between sketches in group and featuresByClass (with overlap between group sketches removed first)\nTypes of metrics returned:\nsketch metrics: copy of caller-provided sketch metrics with addition of group ID\noverall metric for each group+class: takes sketches in group, subtracts overlap between them and overlap with higher group sketches, and runs operation\nIf a group has no sketches in it, then no group metrics will be included for that group, and group+class metric will be 0"}),"\n",(0,o.jsx)(r.h2,{id:"parameters",children:"Parameters"}),"\n",(0,o.jsxs)(r.table,{children:[(0,o.jsx)(r.thead,{children:(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.th,{children:"Parameter"}),(0,o.jsx)(r.th,{children:"Type"}),(0,o.jsx)(r.th,{children:"Description"})]})}),(0,o.jsxs)(r.tbody,{children:[(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options"})}),(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"object"})}),(0,o.jsx)(r.td,{children:"-"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.featuresByClass"})}),(0,o.jsxs)(r.td,{children:[(0,o.jsx)(r.code,{children:"Record"}),"<",(0,o.jsx)(r.code,{children:"string"}),", ",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Georaster",children:(0,o.jsx)(r.code,{children:"Georaster"})}),"> | ",(0,o.jsx)(r.code,{children:"Record"}),"<",(0,o.jsx)(r.code,{children:"string"}),", ",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature",children:(0,o.jsx)(r.code,{children:"Feature"})}),"<",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,o.jsx)(r.code,{children:"Polygon"})}),", ",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties",children:(0,o.jsx)(r.code,{children:"GeoJsonProperties"})}),">[]>"]}),(0,o.jsx)(r.td,{children:"features to overlap, keyed by class ID, use empty array if overlapArea operation"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.groupIds"})}),(0,o.jsxs)(r.td,{children:[(0,o.jsx)(r.code,{children:"string"}),"[]"]}),(0,o.jsx)(r.td,{children:"Group identifiers"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.metricId"})}),(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"string"})}),(0,o.jsx)(r.td,{children:"Caller-provided metric ID"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.metrics"})}),(0,o.jsxs)(r.td,{children:[(0,o.jsx)(r.code,{children:"object"}),"[]"]}),(0,o.jsx)(r.td,{children:"The metrics to group"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.metricToGroup"})}),(0,o.jsxs)(r.td,{children:["(",(0,o.jsx)(r.code,{children:"sketchMetric"}),") => ",(0,o.jsx)(r.code,{children:"string"})]}),(0,o.jsx)(r.td,{children:"Function that given sketch metric returns the group ID"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsxs)(r.td,{children:[(0,o.jsx)(r.code,{children:"options.onlyPresentGroups"}),"?"]}),(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"boolean"})}),(0,o.jsx)(r.td,{children:"only generate metrics for groups that sketches match to, rather than all groupIds"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.operation"})}),(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"OverlapGroupOperation"})}),(0,o.jsx)(r.td,{children:"overlap operation, defaults to overlapFeatures"})]}),(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:(0,o.jsx)(r.code,{children:"options.sketch"})}),(0,o.jsxs)(r.td,{children:[(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Sketch",children:(0,o.jsx)(r.code,{children:"Sketch"})}),"<",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,o.jsx)(r.code,{children:"Polygon"})}),"> | ",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchCollection",children:(0,o.jsx)(r.code,{children:"SketchCollection"})}),"<",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon",children:(0,o.jsx)(r.code,{children:"Polygon"})}),">"]}),(0,o.jsx)(r.td,{children:"Sketch - single or collection"})]})]})]}),"\n",(0,o.jsx)(r.h2,{id:"returns",children:"Returns"}),"\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.code,{children:"Promise"}),"<",(0,o.jsx)(r.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metric",children:(0,o.jsx)(r.code,{children:"Metric"})}),"[]>"]})]})}function h(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,o.jsx)(r,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},28453:(e,r,s)=>{s.d(r,{R:()=>c,x:()=>i});var o=s(96540);const t={},n=o.createContext(t);function c(e){const r=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),o.createElement(n.Provider,{value:r},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/e6688bcd.53ad73b1.js b/assets/js/e6688bcd.53ad73b1.js
deleted file mode 100644
index 196e2b1c3d..0000000000
--- a/assets/js/e6688bcd.53ad73b1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21895],{88794:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var r=t(74848),s=t(28453);const o={},a="Create Sample Project",i={id:"tutorials/sampleproject",title:"Create Sample Project",description:"This tutorial walks through creating a sample geoprocessing project for the Federated States of Micronesia. It demonstrates multiple methods for doing spatial analysis and creating reports, from low-level to high-level, so that you can engage with it at any/all of the levels needed for your project.",source:"@site/docs/tutorials/sampleproject.md",sourceDirName:"tutorials",slug:"/tutorials/sampleproject",permalink:"/geoprocessing/docs/next/tutorials/sampleproject",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/tutorials/sampleproject.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"System Setup",permalink:"/geoprocessing/docs/next/tutorials/"},next:{title:"Create New Project",permalink:"/geoprocessing/docs/next/tutorials/newproject"}},c={},l=[{value:"Initialize Geoprocessing Project",id:"initialize-geoprocessing-project",level:2},{value:"Connect Github repo and push",id:"connect-github-repo-and-push",level:2},{value:"Preprocessing",id:"preprocessing",level:2},{value:"Testing",id:"testing",level:3},{value:"Simple Report",id:"simple-report",level:2},{value:"simpleFunction",id:"simplefunction",level:3},{value:"SimpleReport",id:"simplereport",level:3},{value:"Language Translation",id:"language-translation",level:3},{value:"Generate Examples",id:"generate-examples",level:3},{value:"Run test suite",id:"run-test-suite",level:3},{value:"Storybook",id:"storybook",level:3},{value:"Simple Function Modifications",id:"simple-function-modifications",level:3},{value:"Simple Report Modification",id:"simple-report-modification",level:3},{value:"First Project Build",id:"first-project-build",level:3},{value:"Reef Report",id:"reef-report",level:2},{value:"Import Data",id:"import-data",level:3},{value:"Precalculation",id:"precalculation",level:3},{value:"Geoprocessing Function",id:"geoprocessing-function",level:3},{value:"Report Client",id:"report-client",level:3},{value:"Add to Tab Report",id:"add-to-tab-report",level:3},{value:"Benthic Habitat Report",id:"benthic-habitat-report",level:2},{value:"Import Data",id:"import-data-1",level:3},{value:"Add Metric Group",id:"add-metric-group",level:3},{value:"Create Report",id:"create-report",level:3},{value:"Create Report",id:"create-report-1",level:3},{value:"Octocoral Report",id:"octocoral-report",level:2},{value:"Import Data",id:"import-data-2",level:3},{value:"Add Metric Group",id:"add-metric-group-1",level:3},{value:"Create Report",id:"create-report-2",level:3},{value:"Advanced Features",id:"advanced-features",level:2},{value:"Add Planning Boundary",id:"add-planning-boundary",level:3},{value:"Update default Geography",id:"update-default-geography",level:3},{value:"Precalc Data",id:"precalc-data",level:3},{value:"Language Translation",id:"language-translation-1",level:3},{value:"What's Next",id:"whats-next",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components},{Details:o}=n;return o||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"create-sample-project",children:"Create Sample Project"})}),"\n",(0,r.jsx)(n.p,{children:"This tutorial walks through creating a sample geoprocessing project for the Federated States of Micronesia. It demonstrates multiple methods for doing spatial analysis and creating reports, from low-level to high-level, so that you can engage with it at any/all of the levels needed for your project."}),"\n",(0,r.jsx)(n.p,{children:"The planning area for this example is defined as the area extending from the baseline (coastline/shoreline) to the outer boundary of the Exclusive Economic Zone (200 nautical miles)."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"EEZ with land",src:t(94616).A+"",width:"2113",height:"1099"})}),"\n",(0,r.jsx)(n.p,{children:"This tutorial assumes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Your ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/tutorials/",children:"system setup"})," is complete"]}),"\n",(0,r.jsx)(n.li,{children:"Your geoprocessing virtual environment is running (Devcontainer or WSL)"}),"\n",(0,r.jsx)(n.li,{children:"You have VSCode open in your virtual environment with a terminal pane open"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Have questions along the way? Start a ",(0,r.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/discussions",children:"discussion"})," on Github"]}),"\n",(0,r.jsx)(n.h2,{id:"initialize-geoprocessing-project",children:"Initialize Geoprocessing Project"}),"\n",(0,r.jsxs)(n.p,{children:["Start the project ",(0,r.jsx)(n.code,{children:"init"})," process, which will download the framework, and collect required project metadata."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sh",children:"cd /workspaces\nnpx @seasketch/geoprocessing@7.0.0-experimental-7x-docs.95 init 7.0.0-experimental-7x-docs.95\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Choose a name for your project\nfsm-reports-test\n? Please provide a short description of this project\nMicronesia reports\n? Source code repository location\n[LEAVE BLANK]\n? Your name\n[YOUR_NAME]\n? Your email\n[YOUR_EMAIL]\n? Organization name (optional)\nExample organization\n? What software license would you like to use?\nBSD-3-Clause\n? What AWS region would you like to deploy functions in?\nus-west-1\n? What languages will your reports be published in, other than English? (leave blank for none)\nChuukese\nKosraean\n"})}),"\n",(0,r.jsx)(n.p,{children:"After pressing Enter, your project will be created and all NodeJS software dependencies installed. If your language is not present, you will be able to add it later."}),"\n",(0,r.jsx)(n.p,{children:"Now, re-open VSCode one level deeper, in your project folder::"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"File -> Open Folder\nType /workspaces/fsm-reports-test/\nPress Ctrl-J or Ctrl-backtick to open a new terminal\n"})}),"\n",(0,r.jsx)(n.h2,{id:"connect-github-repo-and-push",children:"Connect Github repo and push"}),"\n",(0,r.jsx)(n.p,{children:"Before you continue, let's take a snapshot of your code now, at the starting point."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://github.com/new",children:"Create a remote Github repository"})," called ",(0,r.jsx)(n.code,{children:"fsm-reports-test"}),". Leave it empty, do not choose to initialize with a template, README, gitignore, or LICENSE."]}),"\n",(0,r.jsx)(n.p,{children:"Then connect your local repo and make your first code commit:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'git init\ngit add .\ngit commit -m "first commit"\ngit branch -M main\ngit remote add origin https://github.com/PUT_YOUR_GITHUB_ORG_OR_USERNAME_HERE/fsm-reports-test.git\ngit push -u origin main\n'})}),"\n",(0,r.jsx)(n.p,{children:"You should see your files successfuly pushed to Github."}),"\n",(0,r.jsx)(n.p,{children:"It may ask you if it can use the Github extension to sign you in using Github. It will open a browser tab and communicate with the Github website. If you are already logged in there, then it should be done quickly, otherwise it may have you login to Github."}),"\n",(0,r.jsxs)(n.p,{children:["After this point, you can continue using git commands in the terminal to stage code changes and commit them if that's what you know, or you can use VSCode's ",(0,r.jsx)(n.a,{href:"https://code.visualstudio.com/docs/sourcecontrol/overview",children:"built-in git support"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["You can learn more about your projects ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/structure",children:"folder structure"})]}),"\n",(0,r.jsx)(n.h2,{id:"preprocessing",children:"Preprocessing"}),"\n",(0,r.jsx)(n.p,{children:'Preprocessing function are invoked by the SeaSketch platform, on a user-drawn shape, right after the user finishes drawing it. It\'s a specialized function that validates a drawn shape and potentially modifies it, such as to remove portions of the shape outside the planning boundary. This "clipping" of the shape is useful in that it allows a user to overdraw beyond the planning boundary and it will be clipped right to the edge of that boundary.'}),"\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.code,{children:"src/functions"})," directory you will find four preprocessing functions that come with every project, and they are further configureable to meet your needs:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"validatePolygon"})," - verifies shape is not self-crossing, is at least 500 square meters in size, and no larger than 1 million square kilometers."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"clipToLand"})," - clips the shape to just the portion on land, as defined by OpenStreeMap land polygons. Includes validatePolygon."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"clipToOcean"})," - clips the shape to remove the portion on land, as defined by OpenStreetMap land polygons. Includes validatePolygon."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"clipToOceanEez"})," - clips the shape to keep the portion within the boundary from the coastline to the outer boundary of the EEZ. Includes validatePolygon."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"testing",children:"Testing"}),"\n",(0,r.jsx)(n.p,{children:"Each preprocessing function has its own unit test and smoke test file. For example:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Unit: ",(0,r.jsx)(n.code,{children:"src/functions/validatePolygon.test.ts"})]}),"\n",(0,r.jsxs)(n.li,{children:["Smoke: ",(0,r.jsx)(n.code,{children:"src/functions/validatePolygonSmoke.test.ts"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Unit tests"})," ensure the preprocessor produces exact output for very specific input features and configuration, and throws errors properly."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Smoke tests"}),' are about ensuring the preprocessor behaves properly for your project location, and that its results "look right" for a variety of input features. It does this by loading example shapes from the project ',(0,r.jsx)(n.code,{children:"examples/features"}),' directory. It then runs the preprocessing function on the examples, makes sure they produce "truthy" output, and saves them to ',(0,r.jsx)(n.code,{children:"examples/output"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"To test your preprocessing functions, we need to create example features within the extent of our Micronesian planning area. To do this, run the following script:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'npx tsx scripts/genRandomPolygon.ts --outDir examples/features --filename polygon1.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]"\nnpx tsx scripts/genRandomPolygon.ts --outDir examples/features --filename polygon2.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]"\n'})}),"\n",(0,r.jsxs)(n.p,{children:["This will output an example Feature and an example FeatureCollection to ",(0,r.jsx)(n.code,{children:"examples/features"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Now run the tests:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm test\n"})}),"\n",(0,r.jsxs)(n.p,{children:["You can now look at the geojson output in ",(0,r.jsx)(n.code,{children:"examples/output"}),", including visually by opening a file in QGIS or pasting it into geojson.io. This is the best way to verify the preprocessor worked as expected."]}),"\n",(0,r.jsx)(n.p,{children:"Commit the feature examples and their output files to your git repository so that you can track changes over time."}),"\n",(0,r.jsxs)(n.p,{children:["To learn more about preprocessing, check out the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/preprocessing",children:"guide"})]}),"\n",(0,r.jsx)(n.h2,{id:"simple-report",children:"Simple Report"}),"\n",(0,r.jsx)(n.p,{children:"Your new project comes with a simple report that calculates the area of a sketch or sketch collection and presents it in a human readable format. Let's look at the pieces that go into this report."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Simple Card View",src:t(44424).A+"",width:"775",height:"553"})}),"\n",(0,r.jsx)(n.h3,{id:"simplefunction",children:"simpleFunction"}),"\n",(0,r.jsxs)(n.p,{children:["The area calculation is done within a geoprocessing function in ",(0,r.jsx)(n.code,{children:"src/functions/simpleFunction.ts"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Open this file and you will notice this function defines a custom result payload called ",(0,r.jsx)(n.code,{children:"SimpleResults"}),", which in this case is an object with an ",(0,r.jsx)(n.code,{children:"area"})," number value."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"export interface SimpleResults {\n /** area of sketch within geography in square meters */\n area: number;\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"simpleFunction"})," starts off with the basic signature of a geoprocessing function. It accepts a ",(0,r.jsx)(n.code,{children:"sketch"})," parameter that is either a single ",(0,r.jsx)(n.code,{children:"Sketch"})," polygon or a ",(0,r.jsx)(n.code,{children:"SketchCollection"})," with multiple Sketch polygons. Unless your planning project only requires users to design single sketches and not collections, your geoprocessing function must be able to handle both."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"async function simpleFunction(\n sketch:\n | Sketch\n | SketchCollection,\n): Promise {\n"})}),"\n",(0,r.jsx)(n.p,{children:"The function then performs its analysis and returns the result."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"// Add analysis code\nconst sketchArea = area(sketch);\n\n// Custom return type\nreturn {\n area: sketchArea,\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Below that, a new ",(0,r.jsx)(n.code,{children:"GeoprocessingHandler"})," is instantiated, with simpleFunction passed into it. Behind the scenes, this wraps simpleFunction in an AWS Lambda handler function, which once deployed to AWS, allows the geoprocessing function to be invoked using an API call, by a report client running in a web browser."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'export default new GeoprocessingHandler(simpleFunction, {\n title: "simpleFunction",\n description: "Function description",\n timeout: 60, // seconds\n memory: 1024, // megabytes\n executionMode: "async",\n});\n'})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"GeoprocessingHandler"})," requires a ",(0,r.jsx)(n.code,{children:"title"})," and ",(0,r.jsx)(n.code,{children:"description"}),", which uniquely identifies the function that will be published by your project. It also accepts some additional parameters defining what resources the Lamda should have, and its behavior:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"timeout"}),": how many seconds the Lambda will run before it times out in error."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"memory"}),": memory allocated to the Lambda, can go up to 10,240 MB. Number of processors increase with memory size automatically."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"executionMode"}),": determines how the report client waits for geoprocessing function results, defaults to async. Sync - wait with connection open for immediate results, Async - wait for web socket message that results are ready, then fetch. Sync should only be used for very fast geoprocessing functions (1-2 seconds max). Think of it as a performance optimization."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"You can change all these parameter values to suit your needs, but the default values are suitable for now."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"simpleFunction"})," is already registered as a geoprocessing function in ",(0,r.jsx)(n.code,{children:"project/geoprocessing.json"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Now let's look at the browser report client that invokes this function."}),"\n",(0,r.jsx)(n.h3,{id:"simplereport",children:"SimpleReport"}),"\n",(0,r.jsxs)(n.p,{children:["A report client is a top-level React component for rendering a report in the users web browser. Report clients are located in the ",(0,r.jsx)(n.code,{children:"src/clients"})," directory and are responsible for the layout of one or more ",(0,r.jsx)(n.code,{children:"Card"})," components. Cards are able to invoke geoprocessing functions and display their results."]}),"\n",(0,r.jsx)(n.p,{children:"The two report clients that come with your project are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"SimpleReport.tsx"})," - simple one page report client containing a SketchAttributesCard and a SimpleCard."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"TabReport.tsx"})," - more complex multi-page report layout controlled by a tab switcher component, so that only one page is in view at a time."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Both these report clients are already registered in ",(0,r.jsx)(n.code,{children:"project/geoprocessing.json"}),". To start, let's focus on ",(0,r.jsx)(n.code,{children:"SimpleReport"})," and ",(0,r.jsx)(n.code,{children:"SimpleCard"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"export const SimpleReport = () => {\n return (\n \n \n \n \n );\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["SimpleReport renders two cards, ",(0,r.jsx)(n.code,{children:"SimpleCard"})," and ",(0,r.jsx)(n.code,{children:"SketchAttributesCard"}),", wrapping them in a languge ",(0,r.jsx)(n.code,{children:"Translator"})," component (you will learn more about this later)."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"SketchAttributes"})," card is a card component that displays the properties of the users Sketch. No geoprocessing function is needed to do its work."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"SimpleCard"})," is a card component that invokes simpleFunction and displays its results. Let's look at the full initial code:"]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"src/components/SimpleCard.tsx"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'import React from "react";\nimport { Trans, useTranslation } from "react-i18next";\nimport {\n ResultsCard,\n useSketchProperties,\n} from "@seasketch/geoprocessing/client-ui";\nimport { roundDecimalFormat } from "@seasketch/geoprocessing/client-core";\n// Import SimpleResults to type-check data access in ResultsCard render function\nimport { SimpleResults } from "../functions/simpleFunction.js";\n\nexport const SimpleCard = () => {\n const { t } = useTranslation();\n const [{ isCollection }] = useSketchProperties();\n const titleTrans = t("SimpleCard title", "Simple Report");\n return (\n <>\n \n {(data: SimpleResults) => {\n const areaSqKm = data.area / 1_000_000;\n const areaString = roundDecimalFormat(areaSqKm, 0, {\n keepSmallValues: true,\n });\n const sketchStr = isCollection ? t("sketch collection") : t("sketch");\n\n return (\n <>\n \n \n This {{ sketchStr }} is {{ areaString }} square kilometers.\n \n
\n >\n );\n }}\n \n >\n );\n};\n'})})]}),"\n",(0,r.jsxs)(n.p,{children:["The first thing to notice is that SimpleCard renders a ",(0,r.jsx)(n.code,{children:"ResultsCard"})," component. Behind the scenes ResultsCard invokes the geoprocessing function with the ",(0,r.jsx)(n.code,{children:"functionName"})," provided (simpleFunction)."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'\n'})}),"\n",(0,r.jsx)(n.p,{children:"ResultsCard then render function it is provided with the results."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"{\n (data: SimpleResults) => {\n // Render results here\n };\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["This render function takes an input parameter ",(0,r.jsx)(n.code,{children:"data"})," that has the same type (",(0,r.jsx)(n.code,{children:"SimpleResults"}),") as the return type of ",(0,r.jsx)(n.code,{children:"simpleFunction"}),". This gives you fully typed access to your report results."]}),"\n",(0,r.jsxs)(n.p,{children:["The code in this render function is the heart of each report card. This particular card takes the ",(0,r.jsx)(n.code,{children:"area"})," value it is given in square meters, and converts it to square kilometers. It then rounds it to a whole number, and formats it to make it more readable. Also notice that it renders a slightly different message depending on whether it is a single sketch or a sketch collection being reported on."]}),"\n",(0,r.jsx)(n.h3,{id:"language-translation",children:"Language Translation"}),"\n",(0,r.jsxs)(n.p,{children:["The last thing to notice is that SimpleCard contains a lot of boilerplate for language translation of its strings (using ",(0,r.jsx)(n.a,{href:"https://react.i18next.com/",children:(0,r.jsx)(n.code,{children:"react-i18next"})}),"). If your reports need to be multi-lingual you will need to to use these, otherwise you can drop them. Language translation is a multi-part process:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["First, a combination of ",(0,r.jsx)(n.code,{children:"useTranslation"}),", ",(0,r.jsx)(n.code,{children:"t"})," function, and ",(0,r.jsx)(n.code,{children:"Trans"})," components are used to establish which strings in your report client and components should be translated."]}),"\n",(0,r.jsxs)(n.li,{children:["Next, translateable strings are extracted using the ",(0,r.jsx)(n.code,{children:"extract:translation"})," command to ",(0,r.jsx)(n.code,{children:"src/i18n/lang/en/translation.json"}),". The strings extacted for SimpleCard are:"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:'{\n "sketch": "sketch",\n "sketch collection": "sketch collection",\n "SimpleCard sketch size message": "This {{sketchStr}} is {{areaString}} square kilometers.",\n}\n'})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Once the strings are translated to different languages (covered in a later tutorial), the ",(0,r.jsx)(n.code,{children:"Translator"})," component in our report client is responsible for inspecting the users language at runtime in the browser and swapping in strings for the appropriate language."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"generate-examples",children:"Generate Examples"}),"\n",(0,r.jsxs)(n.p,{children:["With a working geoprocessing function and report client already in place, you're ready to generate example sketches for testing them. We'll use the same ",(0,r.jsx)(n.code,{children:"genRandomPolygon"})," script as before. But let's look closer at how we figured out the bounding box extent of the Micronesian planning area. First, use ogrinfo to inspect the Micronesia EEZ polygon data layer in your data package."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"ogrinfo -so -json data/src/eez_withland_mr.fgb\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Deep in its output you will see a ",(0,r.jsx)(n.code,{children:"geometryFields"})," property, which contains the bounding box extent of the EEZ feature. Use the ",(0,r.jsx)(n.code,{children:"jq"})," utility to extract this extent:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"ogrinfo -so -json data/src/eez_withland_mr.fgb | jq -c .layers[0].geometryFields[0].extent\n[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]\n"})}),"\n",(0,r.jsx)(n.p,{children:"This will output an array with the extent of the EEZ. This is just one of multiple possible methods to get this extent. You are welcome to use the method that works best for you."}),"\n",(0,r.jsx)(n.p,{children:"Now run the genRandomPolygon script with this extent. The following examples will create a Sketch polygon, and then a SketchCollection containing 10 Sketch polygons."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'npx tsx scripts/genRandomPolygon.ts --outDir examples/sketches --filename sketch1.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]" --bboxShrinkFactor 5 --sketch\nnpx tsx scripts/genRandomPolygon.ts --outDir examples/sketches --filename sketchCollection1.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]" --bboxShrinkFactor 5 --sketch --numFeatures 10\n'})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"--bboxShrinkFactor"})," argument used shrinks the height and width of the given bbox by a factor of 5, and then generates random features that are within that reduced bbox. A suitable shrink factor value was discovered through trial and error. Simply visualize the resulting json file in QGIS or other software and find a value that produces polygons that are completely within the planning area polygon. (see image below)."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.img,{alt:"EEZ bbox",src:t(81465).A+"",width:"1278",height:"661"}),"\nImage: cluster of 10 random sketches (in orange) within Micronesia EEZ"]}),"\n",(0,r.jsxs)(n.p,{children:["Learn more about the options for ",(0,r.jsx)(n.code,{children:"genRandomPolygon"})," by running:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"npx tsx scripts/genRandomPolygon.ts --help\n"})}),"\n",(0,r.jsx)(n.h3,{id:"run-test-suite",children:"Run test suite"}),"\n",(0,r.jsxs)(n.p,{children:["Now that you have example features and sketches, you can test ",(0,r.jsx)(n.code,{children:"simpleFunction"}),". Run the test suite now:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm test\n"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Using ",(0,r.jsx)(n.code,{children:"simpleFunctionSmoke.test.ts"}),", simpleFunction will be run against all of the polygon Sketches in ",(0,r.jsx)(n.code,{children:"examples/sketches"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["The results of all smokes tests are output to the ",(0,r.jsx)(n.code,{children:"examples/output"})," directory."]}),"\n",(0,r.jsx)(n.li,{children:"You can inspect the output files, and see the calculated area values for each sketch input."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Commit the output files to your git repository at this time."}),"\n",(0,r.jsxs)(n.p,{children:["You can make changes to simpleFunction, then rerun tests to regenerate them at any time, and delete any that are stale and no longer needed. For advanced use, check out the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/testing",children:"testing"})," guide."]}),"\n",(0,r.jsx)(n.h3,{id:"storybook",children:"Storybook"}),"\n",(0,r.jsx)(n.p,{children:"Storybook is used to view your reports."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run storybook\n"})}),"\n",(0,r.jsx)(n.p,{children:"This will:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Generate a story for every combination of report client registered in ",(0,r.jsx)(n.code,{children:"project/geoprocessing.json"})," and sketch present in ",(0,r.jsx)(n.code,{children:"examples/sketches"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Load all of the smoke test output for every sketch (to load in stories instead of running geoprocessing functions)"}),"\n",(0,r.jsx)(n.li,{children:"Start the storybook server and give you the URL."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Open the storybook URL in your browser and click through the stories."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Storybook initial view",src:t(26730).A+"",width:"775",height:"340"})}),"\n",(0,r.jsx)(n.p,{children:"A powerful feature of Storybook is that when you save edits to your report client or component code, storybook will refresh the browser automatically with the changes. This lets you develop your reports and debug them more quickly."}),"\n",(0,r.jsxs)(n.p,{children:["If you later add more sketch examples to the ",(0,r.jsx)(n.code,{children:"examples/sketch"})," directory, will need to rerun the smoke tests to generate example output, and then stop and restart your storybook to re-generate all the stories."]}),"\n",(0,r.jsxs)(n.p,{children:["Learn more in the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/tutorials/storybook",children:"storybook guide"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"simple-function-modifications",children:"Simple Function Modifications"}),"\n",(0,r.jsx)(n.p,{children:"Let's enhance your simple geoprocessing function to calculate more detailed information when the report is run on a sketch collection. It should now also calculate the area of the entire collection, and the area of each child sketch in the collection."}),"\n",(0,r.jsxs)(n.p,{children:["First modify SimpleResults with an additional property ",(0,r.jsx)(n.code,{children:"childSketchAreas"})," that can store this information:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"export interface SimpleResults {\n /** area of reef within sketch in square meters */\n area: number;\n childSketchAreas: {\n /** Name of the sketch */\n name: string;\n /** Area of the sketch in square meters */\n area: number;\n }[];\n}\n"})}),"\n",(0,r.jsx)(n.p,{children:"Then calculate the additional values and return them in the result payload:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'// Add analysis code\nconst sketchArea = area(sketch);\n\nlet childSketchAreas: SimpleResults["childSketchAreas"] = [];\nif (sketch.properties.isCollection) {\n childSketchAreas = toSketchArray(sketch).map((sketch) => ({\n name: sketch.properties.name,\n area: area(sketch),\n }));\n}\n\n// Custom return type\nreturn {\n area: sketchArea,\n childSketchAreas,\n};\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Here's what the final ",(0,r.jsx)(n.code,{children:"simpleFunction"})," code should look like:"]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"src/functions/simpleFunction.ts"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'import {\n Sketch,\n SketchCollection,\n Polygon,\n MultiPolygon,\n GeoprocessingHandler,\n toSketchArray,\n} from "@seasketch/geoprocessing";\nimport { area } from "@turf/turf";\n\nexport interface SimpleResults {\n /** area of reef within sketch in square meters */\n area: number;\n childSketchAreas: {\n /** Name of the sketch */\n name: string;\n /** Area of the sketch in square meters */\n area: number;\n }[];\n}\n\n/**\n * Simple geoprocessing function with custom result payload\n */\nasync function simpleFunction(\n sketch:\n | Sketch\n | SketchCollection,\n): Promise {\n // Add analysis code\n const sketchArea = area(sketch);\n\n let childSketchAreas: SimpleResults["childSketchAreas"] = [];\n if (sketch.properties.isCollection) {\n childSketchAreas = toSketchArray(sketch).map((sketch) => ({\n name: sketch.properties.name,\n area: area(sketch),\n }));\n }\n\n // Custom return type\n return {\n area: sketchArea,\n childSketchAreas,\n };\n}\n\nexport default new GeoprocessingHandler(simpleFunction, {\n title: "simpleFunction",\n description: "Function description",\n timeout: 60, // seconds\n memory: 1024, // megabytes\n executionMode: "async",\n});\n'})})]}),"\n",(0,r.jsx)(n.p,{children:"Run your tests again to generate the new smoke test output:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run test\n"})}),"\n",(0,r.jsx)(n.h3,{id:"simple-report-modification",children:"Simple Report Modification"}),"\n",(0,r.jsxs)(n.p,{children:["Now let's modify SimpleReportCard to display the new data. You will add a new ",(0,r.jsx)(n.code,{children:"Collapse"})," section with a ",(0,r.jsx)(n.code,{children:"Table"})," component that lists out the sketch areas by name."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'\n \n This {{ sketchStr }} is {{ areaString }} km\xb2.\n \n
\n{isCollection && (\n \n \n roundDecimalFormat(row.area / 1_000_000, 0, {\n keepSmallValues: true,\n }),\n },\n ]}\n />\n \n)}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Here's what the final SimpleCard code should look like:"}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"src/components/SimpleCard.tsx"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'import React from "react";\nimport { Trans, useTranslation } from "react-i18next";\nimport {\n Collapse,\n ResultsCard,\n Table,\n useSketchProperties,\n} from "@seasketch/geoprocessing/client-ui";\n// Import SimpleResults to type-check data access in ResultsCard render function\nimport { SimpleResults } from "../functions/simpleFunction.js";\nimport { roundDecimalFormat } from "@seasketch/geoprocessing/client-core";\n\nexport const SimpleCard = () => {\n const { t } = useTranslation();\n const [{ isCollection }] = useSketchProperties();\n const titleTrans = t("SimpleCard title", "Simple Report");\n return (\n <>\n \n {(data: SimpleResults) => {\n const areaSqKm = data.area / 1_000_000;\n const areaString = roundDecimalFormat(areaSqKm, 0, {\n keepSmallValues: true,\n });\n const sketchStr = isCollection ? t("sketch collection") : t("sketch");\n\n return (\n <>\n \n \n This {{ sketchStr }} is {{ areaString }} km\xb2.\n \n
\n {isCollection && (\n \n \n roundDecimalFormat(row.area / 1_000_000, 0, {\n keepSmallValues: true,\n }),\n },\n ]}\n />\n \n )}\n >\n );\n }}\n \n >\n );\n};\n'})})]}),"\n",(0,r.jsx)(n.p,{children:"If your storybook is still running from last time, you will need to restart it to pick up the new smoke test output. In fact, anytime you rerun your smoke tests to generate new output, you will need to restart your storybook."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"Ctrl-C\nnpm run storybook\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Your updated report should have a new collapsible table, that when expanded looks like the following:\n",(0,r.jsx)(n.img,{alt:"Simple Card with table",src:t(51899).A+"",width:"747",height:"679"})]}),"\n",(0,r.jsx)(n.h3,{id:"first-project-build",children:"First Project Build"}),"\n",(0,r.jsxs)(n.p,{children:["Now that you have confirmed your function is working properly, and your report client displays properly for a variety of example sketches, you are ready to do your first build. The application ",(0,r.jsx)(n.code,{children:"build"})," proceess packages it for deployment. Specifically it:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Checks all the Typescript code to make sure it's valid and types are used properly."}),"\n",(0,r.jsx)(n.li,{children:"Transpiles all Typescript to Javascript"}),"\n",(0,r.jsxs)(n.li,{children:["Bundles UI report clients into the ",(0,r.jsx)(n.code,{children:".build-web"})," directory"]}),"\n",(0,r.jsxs)(n.li,{children:["Bundles geoprocessing and preprocessing functions into the ",(0,r.jsx)(n.code,{children:".build"})," directory."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"To build your application run the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run build\n"})}),"\n",(0,r.jsx)(n.p,{children:"Once your build is successful, you should stage and commit all your changes to git."}),"\n",(0,r.jsx)(n.h2,{id:"reef-report",children:"Reef Report"}),"\n",(0,r.jsx)(n.p,{children:"Next you will create a coral reef report that uses a reef extent datasource. Here is an image of it displayed in QGIS. Notice that the coral is entirely in shallow water around the island coastline and atolls."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Reef Extent",src:t(35162).A+"",width:"2053",height:"1024"})}),"\n",(0,r.jsx)(n.h3,{id:"import-data",children:"Import Data"}),"\n",(0,r.jsx)(n.p,{children:"To access this datasource, first download a data package prepared for FSM to your project space and unzip it:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"wget -P data/src https://github.com/user-attachments/files/17697992/FSM_MSP_Data_Example_V2.zip\nunzip data/src/FSM_MSP_Data_Example_V2.zip -d data/src\nrm data/src/FSM_MSP_Data_Example_V2.zip\n"})}),"\n",(0,r.jsx)(n.p,{children:"Now import the datasource to your project."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run import:data\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Type of data?\nVector\n? Enter path to src file (with filename)\ndata/src/reefextent.fgb\n? Select layer to import\nreefextent\n? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename\nreefextent\n? Should multi-part geometries be split into single-part geometries?\nYes\n? (Optional) additional formats to create (besides fgb)\n[Press enter to skip]\n? Select feature properties that you want to group metrics by\n[Press enter to skip]\n? Select additional feature properties to keep in final datasource\n[Press enter to skip]\n? These formats are automatically created: fgb. Select any additional formats you want created\n[Press enter to skip]\n? Will you be precalculating summary metrics for this datasource after import? (Typically yes if reporting sketch % overlap with datasource)\nYes\n"})}),"\n",(0,r.jsx)(n.p,{children:"The import process will:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"reproject your data to the WGS84 reference system, if not already (for ease of use with Turf.JS)"}),"\n",(0,r.jsxs)(n.li,{children:["split any features that cross the 180 degree ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/antimeridian",children:"antimeridian"})]}),"\n",(0,r.jsx)(n.li,{children:"reduce the source dataset down to only the necessary attributes (saving network bandwidth later)"}),"\n",(0,r.jsxs)(n.li,{children:["output a new file in the cloud-optimized flatgeobuf format to the ",(0,r.jsx)(n.code,{children:"data/dist"})," directory."]}),"\n",(0,r.jsxs)(n.li,{children:["register the datasource in ",(0,r.jsx)(n.code,{children:"project/datasources.json"}),", along with metadata. This allows you to:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["quickly access project datasources in your reports using the ",(0,r.jsx)(n.code,{children:"projectClient"})," (more on this later)"]}),"\n",(0,r.jsxs)(n.li,{children:["quickly reimport datasources using the ",(0,r.jsx)(n.code,{children:"reimport:data"})," command, without having to answer questions again."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Once finished you are ready to use your datasources for ",(0,r.jsx)(n.code,{children:"local"})," report development. Datasource publishing for ",(0,r.jsx)(n.code,{children:"production"})," use is covered later."]}),"\n",(0,r.jsxs)(n.p,{children:["You can add, edit, or delete records in datasources.json manually to meet your need as long as the records meet the expected ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#datasources",children:"schema"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If at any point the process of using ",(0,r.jsx)(n.code,{children:"data:import"}),", ",(0,r.jsx)(n.code,{children:"datasources.json"}),", and ",(0,r.jsx)(n.code,{children:"projectClient"})," doesn't meet your needs, you are welcome to create your own separate process, as long as it gets datasources to the ",(0,r.jsx)(n.code,{children:"data/dist"})," directory in the format (fgb) and projection (WGS84) required, ready to be published for production use."]}),"\n",(0,r.jsx)(n.h3,{id:"precalculation",children:"Precalculation"}),"\n",(0,r.jsx)(n.p,{children:"Next, you will create a standalone script to calculate the total area of the polygons in the reef extent datasource for use in the report. By doing this calculation ahead of time, you won't need to do it every time the geoprocessing function runs."}),"\n",(0,r.jsxs)(n.p,{children:["Create a new file with the following code and save it to ",(0,r.jsx)(n.code,{children:"scripts/coralReefPrecalc.ts"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'// Run the following command from the project root directory\n// npx tsx scripts/coralReefPrecalc.ts\n\nimport { area } from "@turf/turf";\nimport { geojson } from "flatgeobuf";\nimport { readFileSync } from "fs";\nimport fs from "fs-extra";\n\n// Fetch all reef features and calculate total area\nconst buffer = readFileSync(\n `${import.meta.dirname}/../data/dist/reefextent.fgb`,\n);\nconst reefFeatures = geojson.deserialize(new Uint8Array(buffer));\nconst totalArea = area(reefFeatures);\n\nconst reefPrecalc = {\n totalAreaSqMeters: totalArea,\n};\n\nfs.ensureDirSync(`${import.meta.dirname}/../data/precalc`);\nfs.writeJsonSync(\n `${import.meta.dirname}/../data/precalc/reefextent.json`,\n reefPrecalc,\n);\n'})}),"\n",(0,r.jsx)(n.p,{children:"Now run it:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npx tsx scripts/coralReefPrecalc.ts\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The script fetches all features from the reef extent flatgeobuf file, calculates their total area and writes it to ",(0,r.jsx)(n.code,{children:"data/precalc/reefextent.json"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:'{\n "totalArea": 716100906.2570591\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"We are going to use this precalculated value in a geoprocessing function in the next step."}),"\n",(0,r.jsx)(n.h3,{id:"geoprocessing-function",children:"Geoprocessing Function"}),"\n",(0,r.jsx)(n.p,{children:"To create a new geoprocessing function ready to build on, run the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run create:function\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Function type\nGeoprocessing - For sketch reports\n? Title for this function, in camelCase\ncoralReef\n? Describe what this function does\ncalculate sketch overlap with reef extent datasource\n? Choose an execution mode\nAsync - Better for long-running processes\n\n\u2714 created coralReef function in src/functions/\n\u2714 Registered function in project/geoprocessing.json\n\nGeoprocessing function: src/functions/coralReef.ts\nSmoke test: src/functions/coralReefSmoke.test.ts\n\nNext Steps:\n * Update the geoprocessing function with your analysis\n * Populate examples/sketches folder with sketches for smoke test to run against\n * 'npm test' to smoke test your new geoprocessing function against all example sketches\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.code,{children:"src/functions/coralReef.ts"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"You will now update this code answer the following questions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"What percentage of all coral reef is within the current sketch polygon (or sketch collection polygons)?"}),"\n",(0,r.jsx)(n.li,{children:"If it is a sketch collection, does it meet the planning objective of protecting 20% of all coral reef?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Replace the existing code with the following:"}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"src/functions/coralReef.ts"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'import {\n Sketch,\n SketchCollection,\n Polygon,\n MultiPolygon,\n GeoprocessingHandler,\n getFeaturesForSketchBBoxes,\n toSketchArray,\n clipMultiMerge,\n isSketchCollection,\n clip,\n Feature,\n} from "@seasketch/geoprocessing";\nimport project from "../../project/projectClient.js";\nimport { area, featureCollection } from "@turf/turf";\nimport reefPrecalc from "../../data/precalc/reefextent.json";\n\nexport interface CoralReefResults {\n /** area of all reef extent polygons in square meters */\n totalArea: number;\n /** area of reef extent within sketch or sketch collection in square meters */\n sketchArea: number;\n childSketchAreas: {\n /** Name of the sketch */\n name: string;\n /** Area of reef extent within child sketch in square meters */\n area: number | null;\n }[];\n}\n\n/**\n * Simple geoprocessing function with custom result payload\n */\nasync function coralReef(\n sketch:\n | Sketch\n | SketchCollection,\n): Promise {\n // Load just the reef features that intersect with the sketch bounding box\n // or in case of a sketch collection, the child sketch bounding boxes\n const ds = project.getInternalVectorDatasourceById("reefextent");\n const url = project.getDatasourceUrl(ds);\n const reefFeatures = await getFeaturesForSketchBBoxes(sketch, url);\n\n // Calculate overall sketch area\n const sketchArea = (() => {\n let clipFeature: Feature | null;\n if (reefFeatures.length === 0) {\n return 0;\n } else if (isSketchCollection(sketch)) {\n // account for sketch overlap by merging all sketches\n clipFeature = clip(sketch, "union");\n if (!clipFeature) {\n return 0; // No overlap\n }\n } else {\n clipFeature = sketch;\n }\n const sketchReefOverlap = clipMultiMerge(\n clipFeature,\n featureCollection(reefFeatures),\n "intersection",\n );\n return sketchReefOverlap ? area(sketchReefOverlap) : 0;\n })();\n\n // If sketch is collection, clip each child sketch with reef features and calculate its area\n let childSketchAreas: CoralReefResults["childSketchAreas"] = [];\n if (sketch.properties.isCollection) {\n childSketchAreas = toSketchArray(sketch).map((sketch) => {\n const sketchReefOverlap = clipMultiMerge(\n sketch,\n featureCollection(reefFeatures),\n "intersection",\n );\n return {\n name: sketch.properties.name,\n area: sketchReefOverlap ? area(sketchReefOverlap) : 0,\n };\n });\n }\n\n // Custom return type\n return {\n totalArea: reefPrecalc.totalAreaSqMeters,\n sketchArea: sketchArea,\n childSketchAreas,\n };\n}\n\nexport default new GeoprocessingHandler(coralReef, {\n title: "coralReef",\n description: "calculate sketch overlap with reef extent datasource",\n timeout: 60, // seconds\n memory: 1024, // megabytes\n executionMode: "async",\n});\n'})})]}),"\n",(0,r.jsx)(n.p,{children:"Notice that the code imports the totalArea value you precalculated and inserts it into the result payload, avoiding the need to recalculate it each time."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'import reefPrecalc from "../../data/precalc/reefextent.json";\n\nreefPrecalc.totalArea;\n'})}),"\n",(0,r.jsx)(n.p,{children:"Then it fetches only the reef features whose bounding box intersects with the sketch bounding box, or in case of a sketch collection, that intersects with each of its child sketch bounding boxes. This is more efficient than fetching the entire dataset, saving time and network bandwidth, and is done using the index built into the flatgeobuf format and use of http request range headers to fetch just the right portion of the file."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'const ds = project.getInternalVectorDatasourceById("reefextent");\nconst url = project.getDatasourceUrl(ds);\nconst sketchFeatures = await getFeaturesForSketchBBoxes(sketch, url);\nconst sketchArea = area(featureCollection(sketchFeatures));\n'})}),"\n",(0,r.jsx)(n.p,{children:"Finally it calculates the overall sketch area and the area for each of the child sketches if present."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'let childSketchAreas: CoralReefResults["childSketchAreas"] = [];\nif (sketch.properties.isCollection) {\n childSketchAreas = toSketchArray(sketch).map((sketch) => ({\n name: sketch.properties.name,\n area: area(sketch),\n }));\n}\n\n// Custom return type\nreturn {\n totalArea: reefPrecalc.totalArea,\n sketchArea: sketchArea,\n childSketchAreas,\n};\n'})}),"\n",(0,r.jsx)(n.p,{children:"Now run tests to generate updated output for each of the sample sketches:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run test\n"})}),"\n",(0,r.jsx)(n.p,{children:"Confirm that the output looks as expected."}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"Example output"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:'{\n "totalArea": 716100906.2570591,\n "sketchArea": 367734.86730626615,\n "childSketchAreas": [\n {\n "name": "sketchCollection1-1",\n "area": 428611581.5348215\n },\n {\n "name": "sketchCollection1-2",\n "area": 258701691.8012635\n },\n {\n "name": "sketchCollection1-3",\n "area": 599831752.2377243\n },\n {\n "name": "sketchCollection1-4",\n "area": 372585470.74404347\n },\n {\n "name": "sketchCollection1-5",\n "area": 562781719.588172\n },\n {\n "name": "sketchCollection1-6",\n "area": 528237794.83984125\n },\n {\n "name": "sketchCollection1-7",\n "area": 253970548.59694752\n },\n {\n "name": "sketchCollection1-8",\n "area": 376674659.1741572\n },\n {\n "name": "sketchCollection1-9",\n "area": 657788539.6501052\n },\n {\n "name": "sketchCollection1-10",\n "area": 712233449.0549812\n }\n ]\n}\n'})})]}),"\n",(0,r.jsx)(n.h3,{id:"report-client",children:"Report Client"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"npm run create:client\n"})}),"\n",(0,r.jsx)(n.p,{children:"Open src/components/CoralReefCard.tsx."}),"\n",(0,r.jsx)(n.p,{children:"You will now update this code to:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Display the % of total coral reef captured within this sketch"}),"\n",(0,r.jsxs)(n.li,{children:["If it is a sketch collection","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Indicate whether the objective of protecting 20% of all coral reef has been met."}),"\n",(0,r.jsx)(n.li,{children:"Display a collapsible area with a breakdown of the area and % area of coral reef within each individual sketch in the collection."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Replace the existing code with the following:"}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"src/components/CoralReefCard.tsx"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-javascript",children:'import React from "react";\nimport { Trans, useTranslation } from "react-i18next";\nimport {\n ResultsCard,\n useSketchProperties,\n HorizontalStackedBar,\n Collapse,\n Table,\n ObjectiveStatus,\n VerticalSpacer,\n} from "@seasketch/geoprocessing/client-ui";\nimport {\n percentWithEdge,\n roundDecimalFormat,\n squareMeterToKilometer,\n} from "@seasketch/geoprocessing/client-core";\n\n// Import CoralReefResults to type-check data access in ResultsCard render function\nimport { CoralReefResults } from "../functions/coralReef.js";\n\nexport const CoralReefCard = () => {\n const { t } = useTranslation();\n const [{ isCollection }] = useSketchProperties();\n const titleTrans = t("CoralReefCard title", "Coral Reef");\n return (\n <>\n \n {(data: CoralReefResults) => {\n const target = 0.2; // 20%\n const reefPerc = data.sketchArea / data.totalArea;\n const reefPercString = percentWithEdge(reefPerc);\n const targetPercString = percentWithEdge(target);\n\n const meetsObjective = reefPerc >= target;\n const chartRows = [[[reefPerc]]];\n\n const sketchTypeStr = isCollection\n ? t("sketch collection")\n : t("sketch");\n\n const meetsOrNotElement = meetsObjective ? (\n \n This {{ sketchTypeStr }} meets the objective of protecting{" "}\n {{ targetPercString }} of coral reef\n \n ) : (\n \n This {{ sketchTypeStr }} does not meet the objective of protecting{" "}\n {{ targetPercString }} of coral reef\n \n );\n\n return (\n <>\n \n \n {{ reefPercString }} of all Micronesia coral reef is within\n this {{ sketchTypeStr }}.\n \n
\n {isCollection && (\n \n )}\n\n \n percentWithEdge(value / 100)}\n max={4}\n target={20}\n targetValueFormatter={(targetValue) => (\n \n Target {{ targetValue: percentWithEdge(targetValue / 100) }}\n \n )}\n rowConfigs={[\n {\n title: t("Total coral reef"),\n },\n ]}\n blockGroupNames={[]}\n blockGroupStyles={[{ backgroundColor: "#64c2a6" }]}\n />\n {isCollection && (\n \n \n roundDecimalFormat(squareMeterToKilometer(row.area)),\n },\n {\n Header: t("% Reef within Sketch"),\n accessor: (row: any) =>\n percentWithEdge(row.area / data.totalArea),\n },\n ]}\n />\n \n )}\n >\n );\n }}\n \n >\n );\n};\n'})})]}),"\n",(0,r.jsx)(n.p,{children:"There are multiple things worth noticing:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"squareMeterToKilometer"})," conversion helper function is used"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"percentWithEdge"})," and ",(0,r.jsx)(n.code,{children:"roundDecimalFormat"})," helper functions are used to format values to be more human readable. Will use locale settings of the users browser when formatting decimal and percent."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"HorizontalStackedBar"})," and ",(0,r.jsx)(n.code,{children:"ObjectiveStatus"})," core UI components present information in a more visually interesting way that can be reused across reports. See core ",(0,r.jsx)(n.a,{href:"/storybook",children:"storybook"})," for more examples of their use."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Now, start storybook and view the result:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run storybook\n"})}),"\n",(0,r.jsx)(n.p,{children:"When viewing a sketch example, it should display the following:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"CoralReefCard sketch view",src:t(8847).A+"",width:"742",height:"291"})}),"\n",(0,r.jsx)(n.p,{children:"And when viewing a sketch collection example, it should display the additional components:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"CoralReefCard collection view",src:t(97287).A+"",width:"748",height:"928"})}),"\n",(0,r.jsx)(n.h3,{id:"add-to-tab-report",children:"Add to Tab Report"}),"\n",(0,r.jsx)(n.p,{children:"Now add the CoralReefCard as a new section to your top-level TabReport, on its ViabilityPage."}),"\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.code,{children:"src/components/ViabilityPage.tsx"})," and replace the code with the following:"]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"src/components/ViabilityPage.tsx"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'import React from "react";\nimport { SimpleCard } from "./SimpleCard.js";\nimport { SketchAttributesCard } from "@seasketch/geoprocessing/client-ui";\nimport { CoralReefCard } from "./CoralReefCard.js";\n\nexport const ViabilityPage = () => {\n return (\n <>\n \n \n \n >\n );\n};\n'})})]}),"\n",(0,r.jsx)(n.p,{children:"Storybook should update on save and display the following:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"CoralReefCard add to page",src:t(62848).A+"",width:"748",height:"631"})}),"\n",(0,r.jsx)(n.h2,{id:"benthic-habitat-report",children:"Benthic Habitat Report"}),"\n",(0,r.jsx)(n.p,{children:"This next section will demonstrate more advanced framework features for calculating polygon overlap and measuring progress towards planning objective targets. These features become more useful when you have multiple data classes that you want to report on at the same time."}),"\n",(0,r.jsx)(n.h3,{id:"import-data-1",children:"Import Data"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run import:data\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Type of data?\nVector\n? Enter path to src file (with filename)\ndata/src/benthic-rock.fgb\n? Select layer to import\nbenthic-rock\n? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename benthic-rock\n? Should multi-part geometries be split into single-part geometries?\nYes\n? Select feature properties that you want to group metrics by\nclass\n? Select additional feature properties to keep in final datasource\n[Press Enter to skip]\n? These formats are automatically created: fgb. Select any additional formats you want created\n[Press Enter to skip]\n? Will you be precalculating summary metrics for this datasource after import? (Typically yes if reporting sketch % overlap with datasource)\nYes\n"})}),"\n",(0,r.jsx)(n.p,{children:"The import will proceed. Once complete you will find:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The output file ",(0,r.jsx)(n.code,{children:"data/dist/benthic-rock.fgb"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["An updated ",(0,r.jsx)(n.code,{children:"project/datasources.json"})," new datasource record ",(0,r.jsx)(n.code,{children:"benthic-rock"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"If the import fails, start the import over and double check everything. It is most likely one of the following:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"You specified the wrong source file path."}),"\n",(0,r.jsx)(n.li,{children:"You specified the wrong layer name"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"add-metric-group",children:"Add Metric Group"}),"\n",(0,r.jsxs)(n.p,{children:["A metric group defines a metric to be measured, for one or more classes of data. A ",(0,r.jsx)(n.code,{children:"MetricGroup"})," ",(0,r.jsx)(n.strong,{children:"record"})," provides the information needed for a metric to be calculated (in a geoprocessing function) and to be displayed (in a report client). Let's create your first metric group by opening ",(0,r.jsx)(n.code,{children:"project/metrics.json"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The benthic dataset represents where different classes of benthic habitat are predicted to be present. Specifically is is a single vector datasource with multiple habitats defined by the ",(0,r.jsx)(n.code,{children:"class"})," attribute. While there are many types of habitats, we want to only focus on Sand, Rubble, and Rock. To do this, you'll add multiple class records, each with a unique ",(0,r.jsx)(n.code,{children:"classId"})," value to match on, and a ",(0,r.jsx)(n.code,{children:"classKey"})," that specific which feature attribute the classId values are found."]}),"\n",(0,r.jsxs)(n.p,{children:["Add the following record to the end of the array in ",(0,r.jsx)(n.code,{children:"project/metrics.json"})," and save the file."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "metricId": "benthicHabitat",\n "type": "areaOverlap",\n "classes": [\n {\n "classId": "Sand",\n "classKey": "class",\n "display": "Sand",\n "datasourceId": "benthic"\n },\n {\n "classId": "Rock",\n "classKey": "class",\n "display": "Rock",\n "datasourceId": "benthic"\n },\n {\n "classId": "Rubble",\n "classKey": "class",\n "display": "Rubble",\n "datasourceId": "benthic"\n }\n ]\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"The reef extent dataset simply tells you where there is reef present. Therefore, we represent it as a single class of data. You should end up with the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'[\n {\n "metricId": "coralReef",\n "type": "areaOverlap",\n "classes": [\n {\n "classId": "reefextent",\n "display": "Coral Reef",\n "datasourceId": "reefextent"\n }\n ]\n }\n]\n'})}),"\n",(0,r.jsxs)(n.p,{children:["To learn more about metric groups, visit the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#metric-group",children:"advanced concepts"})," page."]}),"\n",(0,r.jsx)(n.h3,{id:"create-report",children:"Create Report"}),"\n",(0,r.jsx)(n.p,{children:"Next you will create your first report using the metric group created in the previous step. Run the following command and answer the questions:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run create:report\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Type of report to create\nVector overlap report - calculates sketch overlap with vector datasources\n? Describe what this reports geoprocessing function will calculate (e.g.Calculate sketch overlap with boundary polygons)\nCalculate sketch overlap with reef extent\n? Choose an execution mode for the geoprocessing function for this report\nAsync - Better for long-running processes\n? Select the metric group to report on\ncoralReef\n\n\u2714 Created coralReef report\n\u2714 Registered report assets in project/geoprocessing.json\n\nGeoprocessing function: src/functions/coralReef.ts\nSmoke test: src/functions/coralReefSmoke.test.ts\nReport component: src/components/CoralReefCard.tsx\nStory generator: src/components/CoralReefCard.example-stories.ts\n\nNext Steps:\n * 'npm test' to run smoke tests against your new geoprocessing function\n * 'npm run storybook' to view your new report with smoke test output\n * Add to a top-level report client or page when ready\n"})}),"\n",(0,r.jsx)(n.p,{children:"As the output explains, 4 new files have been created for you including a geoprocessing function (coralReef.ts) and a"}),"\n",(0,r.jsx)(n.h3,{id:"create-report-1",children:"Create Report"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run create:report\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Type of report to create\nVector overlap report\n\n? Describe what this reports geoprocessing function will calculate\nCalculate sketch overlap with benthic habitats\n\n? Choose an execution mode for the geoprocessing function for this report\nAsync - Better for long-running processes\n\n? Select the metric group to report on\nbenthicHabitat\n"})}),"\n",(0,r.jsx)(n.p,{children:"Now:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Add your new component to the Viability Page"}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"npm run test"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"npm run storybook"})}),"\n",(0,r.jsx)(n.li,{children:"Verify report displays properly"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"octocoral-report",children:"Octocoral Report"}),"\n",(0,r.jsx)(n.h3,{id:"import-data-2",children:"Import Data"}),"\n",(0,r.jsx)(n.p,{children:"Now import the following additional datasources:"}),"\n",(0,r.jsx)(n.p,{children:"Octocorals - raster with 0/1 values representing predicted presence/absence of species."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Type of data?\nRaster\n? Enter path to src file (with filename)\ndata/src/yesson_octocorals.tif\n? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename\noctocorals\n? Select raster band to import\n1\n? What type of measurement is used for this raster data?\nQuantitative - values represent amounts, measurement of single thing\n? Will you be precalculating summary metrics for this datasource after import? (Typically yes if reporting sketch % overlap with datasource)\nYes\n"})}),"\n",(0,r.jsx)(n.h3,{id:"add-metric-group-1",children:"Add Metric Group"}),"\n",(0,r.jsx)(n.h3,{id:"create-report-2",children:"Create Report"}),"\n",(0,r.jsx)(n.h2,{id:"advanced-features",children:"Advanced Features"}),"\n",(0,r.jsx)(n.h3,{id:"add-planning-boundary",children:"Add Planning Boundary"}),"\n",(0,r.jsx)(n.h3,{id:"update-default-geography",children:"Update default Geography"}),"\n",(0,r.jsx)(n.p,{children:"Now change the projects default geography from the world, to your new planning boundary."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Open ",(0,r.jsx)(n.code,{children:"project/geographies.json"}),". You will see an array with one geography record called ",(0,r.jsx)(n.code,{children:"world"}),". This is the default geography and can be left here. You will disable its precalc and remove it from the ",(0,r.jsx)(n.code,{children:"default-boundary"})," group, then add a new geography record for your ",(0,r.jsx)(n.code,{children:"planning-boundary"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Replace the contents of the geographies file with the following and save it:"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'[\n {\n "geographyId": "world",\n "datasourceId": "world",\n "display": "World",\n "groups": [],\n "precalc": false\n },\n {\n "geographyId": "planning-boundary",\n "datasourceId": "planning-boundary",\n "display": "Planning Boundary",\n "groups": ["default-boundary"],\n "precalc": true\n }\n]\n'})}),"\n",(0,r.jsx)(n.h3,{id:"precalc-data",children:"Precalc Data"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"precalc"})," command calculates spatial statistics for the portion of each of your datasources that falls within each of your project's Geographies."]}),"\n",(0,r.jsx)(n.p,{children:"Geographies are simply geographic boundaries for your project, and the default Geography for this project is the entire World."}),"\n",(0,r.jsx)(n.p,{children:"Why do this?"}),"\n",(0,r.jsx)(n.p,{children:'One of the questions our report needs to answer is "what percentage of coral reef within the planning boundary are within my Sketch polygon?'}),"\n",(0,r.jsxs)(n.p,{children:["This is calculated as:\n",(0,r.jsx)(n.code,{children:"% area of coral reef in sketch = area of coral reef within sketch / area of coral reef within planning boundary"})]}),"\n",(0,r.jsx)(n.p,{children:"The numerator in this equation (area of reef within sketch) is relatively inexpensive to calculate and we will do it within a geoprocessing function where we have access to the sketch. But the denominator calculation can be expensive if the data is very large or complex. Thankfully we can calculate it ahead of time."}),"\n",(0,r.jsxs)(n.p,{children:["Since your datasources and geographies already have ",(0,r.jsx)(n.code,{children:"precalc: true"})," set, you are ready to start:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run precalc:data\n\n? Do you want to precalculate only a subset?\n Yes, by datasource\n Yes, by geography\n Yes, by both\n\u276f No, just precalculate everything (may take a while)\n"})}),"\n",(0,r.jsx)(n.p,{children:'Choose to "precalculate everything". Then press enter. The precalc process may take a while.'}),"\n",(0,r.jsxs)(n.p,{children:["What's happening is that the precalc script starts a local web server on port 8001 that serves up the datasources in ",(0,r.jsx)(n.code,{children:"data/dist"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The precalc script then gets all your project datasources with ",(0,r.jsx)(n.code,{children:"precalc: true"}),", and all your project geographies with ",(0,r.jsx)(n.code,{children:"precalc: true"}),", and then calculate ",(0,r.jsx)(n.code,{children:"area"}),", ",(0,r.jsx)(n.code,{children:"sum"}),", and ",(0,r.jsx)(n.code,{children:"count"})," metrics for each combination of datasource and geography."]}),"\n",(0,r.jsxs)(n.p,{children:["Once complete ",(0,r.jsx)(n.code,{children:"project/precalc.json"})," will have been updated with the new metric values."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["To learn more advanced use, see the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/precalc",children:"precalc"})," guide."]}),"\n",(0,r.jsxs)(n.li,{children:["To learn more about use of precalculated metrics, see the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/reportclient",children:"report client"})," guide."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"language-translation-1",children:"Language Translation"}),"\n",(0,r.jsx)(n.p,{children:"Run the following to extract the latest translations from all of you report clients and its underlying components."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run extract:translation\n"})}),"\n",(0,r.jsx)(n.h2,{id:"whats-next",children:"What's Next"}),"\n",(0,r.jsx)(n.p,{children:"You've now completed the sample tutorial. Your next step is to choose whether you would like to:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Setup an ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/tutorials/existingproject",children:"existing project to setup"}),", and re-deploy it."]}),"\n",(0,r.jsxs)(n.li,{children:["Create a ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/tutorials/newproject",children:"create a new project"}),", deploy it and integrate with SeaSketch."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},62848:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/coral-reef-card-add-to-page-acfb419983acedd6b1f2d576a422b175.jpg"},97287:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/coral-reef-card-collection-42587097890cc8cb14f0276d105af2b1.jpg"},8847:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/coral-reef-card-sketch-a752ef560d2ef81510dcc024f968b2b3.jpg"},81465:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/eez-bbox-eaed173f82fe29cdd6c06782e621ff43.jpg"},94616:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/eez-with-land-a17837dd0ade1b26dd289529dc938a38.jpg"},35162:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/reef-extent-c5b22beda714f8f21941e25144be67f2.jpg"},51899:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/simple-card-table-fb0438e81de84b2fabe0ab3a176cb0c5.jpg"},44424:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/simple-card-view-98fb13a0d5b08444c9a4aff7e8a980e3.jpg"},26730:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/storybook-one-5564fd0bc2a46d74d1c37746689fae7d.jpg"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>i});var r=t(96540);const s={},o=r.createContext(s);function a(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/e6688bcd.ddd0fa09.js b/assets/js/e6688bcd.ddd0fa09.js
new file mode 100644
index 0000000000..23bffa7a39
--- /dev/null
+++ b/assets/js/e6688bcd.ddd0fa09.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21895],{88794:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var r=t(74848),s=t(28453);const o={},a="Create Sample Project",i={id:"tutorials/sampleproject",title:"Create Sample Project",description:"This tutorial walks through creating a sample geoprocessing project for the Federated States of Micronesia. It demonstrates multiple methods for doing spatial analysis and creating reports, from low-level to high-level, so that you can engage with it at any/all of the levels needed for your project.",source:"@site/docs/tutorials/sampleproject.md",sourceDirName:"tutorials",slug:"/tutorials/sampleproject",permalink:"/geoprocessing/docs/next/tutorials/sampleproject",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/tutorials/sampleproject.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"System Setup",permalink:"/geoprocessing/docs/next/tutorials/"},next:{title:"Create New Project",permalink:"/geoprocessing/docs/next/tutorials/newproject"}},c={},l=[{value:"Initialize Geoprocessing Project",id:"initialize-geoprocessing-project",level:2},{value:"Connect Github repo and push",id:"connect-github-repo-and-push",level:2},{value:"Preprocessing",id:"preprocessing",level:2},{value:"Testing",id:"testing",level:3},{value:"Simple Report",id:"simple-report",level:2},{value:"simpleFunction",id:"simplefunction",level:3},{value:"SimpleReport",id:"simplereport",level:3},{value:"Language Translation",id:"language-translation",level:3},{value:"Generate Examples",id:"generate-examples",level:3},{value:"Run test suite",id:"run-test-suite",level:3},{value:"Storybook",id:"storybook",level:3},{value:"Simple Function Modifications",id:"simple-function-modifications",level:3},{value:"Simple Report Modification",id:"simple-report-modification",level:3},{value:"First Project Build",id:"first-project-build",level:3},{value:"Reef Report",id:"reef-report",level:2},{value:"Import Data",id:"import-data",level:3},{value:"Precalculation",id:"precalculation",level:3},{value:"Geoprocessing Function",id:"geoprocessing-function",level:3},{value:"Report Client",id:"report-client",level:3},{value:"Add to Tab Report",id:"add-to-tab-report",level:3},{value:"Benthic Habitat Report",id:"benthic-habitat-report",level:2},{value:"Import Data",id:"import-data-1",level:3},{value:"Add Metric Group",id:"add-metric-group",level:3},{value:"Create Report",id:"create-report",level:3},{value:"Create Report",id:"create-report-1",level:3},{value:"Octocoral Report",id:"octocoral-report",level:2},{value:"Import Data",id:"import-data-2",level:3},{value:"Add Metric Group",id:"add-metric-group-1",level:3},{value:"Create Report",id:"create-report-2",level:3},{value:"Advanced Features",id:"advanced-features",level:2},{value:"Add Planning Boundary",id:"add-planning-boundary",level:3},{value:"Update default Geography",id:"update-default-geography",level:3},{value:"Precalc Data",id:"precalc-data",level:3},{value:"Language Translation",id:"language-translation-1",level:3},{value:"What's Next",id:"whats-next",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components},{Details:o}=n;return o||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"create-sample-project",children:"Create Sample Project"})}),"\n",(0,r.jsx)(n.p,{children:"This tutorial walks through creating a sample geoprocessing project for the Federated States of Micronesia. It demonstrates multiple methods for doing spatial analysis and creating reports, from low-level to high-level, so that you can engage with it at any/all of the levels needed for your project."}),"\n",(0,r.jsx)(n.p,{children:"The planning area for this example is defined as the area extending from the baseline (coastline/shoreline) to the outer boundary of the Exclusive Economic Zone (200 nautical miles)."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"EEZ with land",src:t(94616).A+"",width:"2113",height:"1099"})}),"\n",(0,r.jsx)(n.p,{children:"This tutorial assumes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Your ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/tutorials/",children:"system setup"})," is complete"]}),"\n",(0,r.jsx)(n.li,{children:"Your geoprocessing virtual environment is running (Devcontainer or WSL)"}),"\n",(0,r.jsx)(n.li,{children:"You have VSCode open in your virtual environment with a terminal pane open"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Have questions along the way? Start a ",(0,r.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/discussions",children:"discussion"})," on Github"]}),"\n",(0,r.jsx)(n.h2,{id:"initialize-geoprocessing-project",children:"Initialize Geoprocessing Project"}),"\n",(0,r.jsxs)(n.p,{children:["Start the project ",(0,r.jsx)(n.code,{children:"init"})," process, which will download the framework, and collect required project metadata."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-sh",children:"cd /workspaces\nnpx @seasketch/geoprocessing@7.0.0-experimental-7x-docs.103 init 7.0.0-experimental-7x-docs.103\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Choose a name for your project\nfsm-reports-test\n? Please provide a short description of this project\nMicronesia reports\n? Source code repository location\n[LEAVE BLANK]\n? Your name\n[YOUR_NAME]\n? Your email\n[YOUR_EMAIL]\n? Organization name (optional)\nExample organization\n? What software license would you like to use?\nBSD-3-Clause\n? What AWS region would you like to deploy functions in?\nus-west-1\n? What languages will your reports be published in, other than English? (leave blank for none)\nChuukese\nKosraean\n"})}),"\n",(0,r.jsx)(n.p,{children:"After pressing Enter, your project will be created and all NodeJS software dependencies installed. If your language is not present, you will be able to add it later."}),"\n",(0,r.jsx)(n.p,{children:"Now, re-open VSCode one level deeper, in your project folder::"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"File -> Open Folder\nType /workspaces/fsm-reports-test/\nPress Ctrl-J or Ctrl-backtick to open a new terminal\n"})}),"\n",(0,r.jsx)(n.h2,{id:"connect-github-repo-and-push",children:"Connect Github repo and push"}),"\n",(0,r.jsx)(n.p,{children:"Before you continue, let's take a snapshot of your code now, at the starting point."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://github.com/new",children:"Create a remote Github repository"})," called ",(0,r.jsx)(n.code,{children:"fsm-reports-test"}),". Leave it empty, do not choose to initialize with a template, README, gitignore, or LICENSE."]}),"\n",(0,r.jsx)(n.p,{children:"Then connect your local repo and make your first code commit:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'git init\ngit add .\ngit commit -m "first commit"\ngit branch -M main\ngit remote add origin https://github.com/PUT_YOUR_GITHUB_ORG_OR_USERNAME_HERE/fsm-reports-test.git\ngit push -u origin main\n'})}),"\n",(0,r.jsx)(n.p,{children:"You should see your files successfuly pushed to Github."}),"\n",(0,r.jsx)(n.p,{children:"It may ask you if it can use the Github extension to sign you in using Github. It will open a browser tab and communicate with the Github website. If you are already logged in there, then it should be done quickly, otherwise it may have you login to Github."}),"\n",(0,r.jsxs)(n.p,{children:["After this point, you can continue using git commands in the terminal to stage code changes and commit them if that's what you know, or you can use VSCode's ",(0,r.jsx)(n.a,{href:"https://code.visualstudio.com/docs/sourcecontrol/overview",children:"built-in git support"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["You can learn more about your projects ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/structure",children:"folder structure"})]}),"\n",(0,r.jsx)(n.h2,{id:"preprocessing",children:"Preprocessing"}),"\n",(0,r.jsx)(n.p,{children:'Preprocessing function are invoked by the SeaSketch platform, on a user-drawn shape, right after the user finishes drawing it. It\'s a specialized function that validates a drawn shape and potentially modifies it, such as to remove portions of the shape outside the planning boundary. This "clipping" of the shape is useful in that it allows a user to overdraw beyond the planning boundary and it will be clipped right to the edge of that boundary.'}),"\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.code,{children:"src/functions"})," directory you will find four preprocessing functions that come with every project, and they are further configureable to meet your needs:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"validatePolygon"})," - verifies shape is not self-crossing, is at least 500 square meters in size, and no larger than 1 million square kilometers."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"clipToLand"})," - clips the shape to just the portion on land, as defined by OpenStreeMap land polygons. Includes validatePolygon."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"clipToOcean"})," - clips the shape to remove the portion on land, as defined by OpenStreetMap land polygons. Includes validatePolygon."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"clipToOceanEez"})," - clips the shape to keep the portion within the boundary from the coastline to the outer boundary of the EEZ. Includes validatePolygon."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"testing",children:"Testing"}),"\n",(0,r.jsx)(n.p,{children:"Each preprocessing function has its own unit test and smoke test file. For example:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Unit: ",(0,r.jsx)(n.code,{children:"src/functions/validatePolygon.test.ts"})]}),"\n",(0,r.jsxs)(n.li,{children:["Smoke: ",(0,r.jsx)(n.code,{children:"src/functions/validatePolygonSmoke.test.ts"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Unit tests"})," ensure the preprocessor produces exact output for very specific input features and configuration, and throws errors properly."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Smoke tests"}),' are about ensuring the preprocessor behaves properly for your project location, and that its results "look right" for a variety of input features. It does this by loading example shapes from the project ',(0,r.jsx)(n.code,{children:"examples/features"}),' directory. It then runs the preprocessing function on the examples, makes sure they produce "truthy" output, and saves them to ',(0,r.jsx)(n.code,{children:"examples/output"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"To test your preprocessing functions, we need to create example features within the extent of our Micronesian planning area. To do this, run the following script:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'npx tsx scripts/genRandomPolygon.ts --outDir examples/features --filename polygon1.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]"\nnpx tsx scripts/genRandomPolygon.ts --outDir examples/features --filename polygon2.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]"\n'})}),"\n",(0,r.jsxs)(n.p,{children:["This will output an example Feature and an example FeatureCollection to ",(0,r.jsx)(n.code,{children:"examples/features"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Now run the tests:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm test\n"})}),"\n",(0,r.jsxs)(n.p,{children:["You can now look at the geojson output in ",(0,r.jsx)(n.code,{children:"examples/output"}),", including visually by opening a file in QGIS or pasting it into geojson.io. This is the best way to verify the preprocessor worked as expected."]}),"\n",(0,r.jsx)(n.p,{children:"Commit the feature examples and their output files to your git repository so that you can track changes over time."}),"\n",(0,r.jsxs)(n.p,{children:["To learn more about preprocessing, check out the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/preprocessing",children:"guide"})]}),"\n",(0,r.jsx)(n.h2,{id:"simple-report",children:"Simple Report"}),"\n",(0,r.jsx)(n.p,{children:"Your new project comes with a simple report that calculates the area of a sketch or sketch collection and presents it in a human readable format. Let's look at the pieces that go into this report."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Simple Card View",src:t(44424).A+"",width:"775",height:"553"})}),"\n",(0,r.jsx)(n.h3,{id:"simplefunction",children:"simpleFunction"}),"\n",(0,r.jsxs)(n.p,{children:["The area calculation is done within a geoprocessing function in ",(0,r.jsx)(n.code,{children:"src/functions/simpleFunction.ts"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Open this file and you will notice this function defines a custom result payload called ",(0,r.jsx)(n.code,{children:"SimpleResults"}),", which in this case is an object with an ",(0,r.jsx)(n.code,{children:"area"})," number value."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"export interface SimpleResults {\n /** area of sketch within geography in square meters */\n area: number;\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"simpleFunction"})," starts off with the basic signature of a geoprocessing function. It accepts a ",(0,r.jsx)(n.code,{children:"sketch"})," parameter that is either a single ",(0,r.jsx)(n.code,{children:"Sketch"})," polygon or a ",(0,r.jsx)(n.code,{children:"SketchCollection"})," with multiple Sketch polygons. Unless your planning project only requires users to design single sketches and not collections, your geoprocessing function must be able to handle both."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"async function simpleFunction(\n sketch:\n | Sketch\n | SketchCollection,\n): Promise {\n"})}),"\n",(0,r.jsx)(n.p,{children:"The function then performs its analysis and returns the result."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"// Add analysis code\nconst sketchArea = area(sketch);\n\n// Custom return type\nreturn {\n area: sketchArea,\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Below that, a new ",(0,r.jsx)(n.code,{children:"GeoprocessingHandler"})," is instantiated, with simpleFunction passed into it. Behind the scenes, this wraps simpleFunction in an AWS Lambda handler function, which once deployed to AWS, allows the geoprocessing function to be invoked using an API call, by a report client running in a web browser."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'export default new GeoprocessingHandler(simpleFunction, {\n title: "simpleFunction",\n description: "Function description",\n timeout: 60, // seconds\n memory: 1024, // megabytes\n executionMode: "async",\n});\n'})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"GeoprocessingHandler"})," requires a ",(0,r.jsx)(n.code,{children:"title"})," and ",(0,r.jsx)(n.code,{children:"description"}),", which uniquely identifies the function that will be published by your project. It also accepts some additional parameters defining what resources the Lamda should have, and its behavior:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"timeout"}),": how many seconds the Lambda will run before it times out in error."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"memory"}),": memory allocated to the Lambda, can go up to 10,240 MB. Number of processors increase with memory size automatically."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"executionMode"}),": determines how the report client waits for geoprocessing function results, defaults to async. Sync - wait with connection open for immediate results, Async - wait for web socket message that results are ready, then fetch. Sync should only be used for very fast geoprocessing functions (1-2 seconds max). Think of it as a performance optimization."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"You can change all these parameter values to suit your needs, but the default values are suitable for now."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"simpleFunction"})," is already registered as a geoprocessing function in ",(0,r.jsx)(n.code,{children:"project/geoprocessing.json"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Now let's look at the browser report client that invokes this function."}),"\n",(0,r.jsx)(n.h3,{id:"simplereport",children:"SimpleReport"}),"\n",(0,r.jsxs)(n.p,{children:["A report client is a top-level React component for rendering a report in the users web browser. Report clients are located in the ",(0,r.jsx)(n.code,{children:"src/clients"})," directory and are responsible for the layout of one or more ",(0,r.jsx)(n.code,{children:"Card"})," components. Cards are able to invoke geoprocessing functions and display their results."]}),"\n",(0,r.jsx)(n.p,{children:"The two report clients that come with your project are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"SimpleReport.tsx"})," - simple one page report client containing a SketchAttributesCard and a SimpleCard."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"TabReport.tsx"})," - more complex multi-page report layout controlled by a tab switcher component, so that only one page is in view at a time."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Both these report clients are already registered in ",(0,r.jsx)(n.code,{children:"project/geoprocessing.json"}),". To start, let's focus on ",(0,r.jsx)(n.code,{children:"SimpleReport"})," and ",(0,r.jsx)(n.code,{children:"SimpleCard"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"export const SimpleReport = () => {\n return (\n \n \n \n \n );\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["SimpleReport renders two cards, ",(0,r.jsx)(n.code,{children:"SimpleCard"})," and ",(0,r.jsx)(n.code,{children:"SketchAttributesCard"}),", wrapping them in a languge ",(0,r.jsx)(n.code,{children:"Translator"})," component (you will learn more about this later)."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"SketchAttributes"})," card is a card component that displays the properties of the users Sketch. No geoprocessing function is needed to do its work."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"SimpleCard"})," is a card component that invokes simpleFunction and displays its results. Let's look at the full initial code:"]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"src/components/SimpleCard.tsx"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'import React from "react";\nimport { Trans, useTranslation } from "react-i18next";\nimport {\n ResultsCard,\n useSketchProperties,\n} from "@seasketch/geoprocessing/client-ui";\nimport { roundDecimalFormat } from "@seasketch/geoprocessing/client-core";\n// Import SimpleResults to type-check data access in ResultsCard render function\nimport { SimpleResults } from "../functions/simpleFunction.js";\n\nexport const SimpleCard = () => {\n const { t } = useTranslation();\n const [{ isCollection }] = useSketchProperties();\n const titleTrans = t("SimpleCard title", "Simple Report");\n return (\n <>\n \n {(data: SimpleResults) => {\n const areaSqKm = data.area / 1_000_000;\n const areaString = roundDecimalFormat(areaSqKm, 0, {\n keepSmallValues: true,\n });\n const sketchStr = isCollection ? t("sketch collection") : t("sketch");\n\n return (\n <>\n \n \n This {{ sketchStr }} is {{ areaString }} square kilometers.\n \n
\n >\n );\n }}\n \n >\n );\n};\n'})})]}),"\n",(0,r.jsxs)(n.p,{children:["The first thing to notice is that SimpleCard renders a ",(0,r.jsx)(n.code,{children:"ResultsCard"})," component. Behind the scenes ResultsCard invokes the geoprocessing function with the ",(0,r.jsx)(n.code,{children:"functionName"})," provided (simpleFunction)."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'\n'})}),"\n",(0,r.jsx)(n.p,{children:"ResultsCard then render function it is provided with the results."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"{\n (data: SimpleResults) => {\n // Render results here\n };\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["This render function takes an input parameter ",(0,r.jsx)(n.code,{children:"data"})," that has the same type (",(0,r.jsx)(n.code,{children:"SimpleResults"}),") as the return type of ",(0,r.jsx)(n.code,{children:"simpleFunction"}),". This gives you fully typed access to your report results."]}),"\n",(0,r.jsxs)(n.p,{children:["The code in this render function is the heart of each report card. This particular card takes the ",(0,r.jsx)(n.code,{children:"area"})," value it is given in square meters, and converts it to square kilometers. It then rounds it to a whole number, and formats it to make it more readable. Also notice that it renders a slightly different message depending on whether it is a single sketch or a sketch collection being reported on."]}),"\n",(0,r.jsx)(n.h3,{id:"language-translation",children:"Language Translation"}),"\n",(0,r.jsxs)(n.p,{children:["The last thing to notice is that SimpleCard contains a lot of boilerplate for language translation of its strings (using ",(0,r.jsx)(n.a,{href:"https://react.i18next.com/",children:(0,r.jsx)(n.code,{children:"react-i18next"})}),"). If your reports need to be multi-lingual you will need to to use these, otherwise you can drop them. Language translation is a multi-part process:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["First, a combination of ",(0,r.jsx)(n.code,{children:"useTranslation"}),", ",(0,r.jsx)(n.code,{children:"t"})," function, and ",(0,r.jsx)(n.code,{children:"Trans"})," components are used to establish which strings in your report client and components should be translated."]}),"\n",(0,r.jsxs)(n.li,{children:["Next, translateable strings are extracted using the ",(0,r.jsx)(n.code,{children:"extract:translation"})," command to ",(0,r.jsx)(n.code,{children:"src/i18n/lang/en/translation.json"}),". The strings extacted for SimpleCard are:"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:'{\n "sketch": "sketch",\n "sketch collection": "sketch collection",\n "SimpleCard sketch size message": "This {{sketchStr}} is {{areaString}} square kilometers.",\n}\n'})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Once the strings are translated to different languages (covered in a later tutorial), the ",(0,r.jsx)(n.code,{children:"Translator"})," component in our report client is responsible for inspecting the users language at runtime in the browser and swapping in strings for the appropriate language."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"generate-examples",children:"Generate Examples"}),"\n",(0,r.jsxs)(n.p,{children:["With a working geoprocessing function and report client already in place, you're ready to generate example sketches for testing them. We'll use the same ",(0,r.jsx)(n.code,{children:"genRandomPolygon"})," script as before. But let's look closer at how we figured out the bounding box extent of the Micronesian planning area. First, use ogrinfo to inspect the Micronesia EEZ polygon data layer in your data package."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"ogrinfo -so -json data/src/eez_withland_mr.fgb\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Deep in its output you will see a ",(0,r.jsx)(n.code,{children:"geometryFields"})," property, which contains the bounding box extent of the EEZ feature. Use the ",(0,r.jsx)(n.code,{children:"jq"})," utility to extract this extent:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"ogrinfo -so -json data/src/eez_withland_mr.fgb | jq -c .layers[0].geometryFields[0].extent\n[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]\n"})}),"\n",(0,r.jsx)(n.p,{children:"This will output an array with the extent of the EEZ. This is just one of multiple possible methods to get this extent. You are welcome to use the method that works best for you."}),"\n",(0,r.jsx)(n.p,{children:"Now run the genRandomPolygon script with this extent. The following examples will create a Sketch polygon, and then a SketchCollection containing 10 Sketch polygons."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'npx tsx scripts/genRandomPolygon.ts --outDir examples/sketches --filename sketch1.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]" --bboxShrinkFactor 5 --sketch\nnpx tsx scripts/genRandomPolygon.ts --outDir examples/sketches --filename sketchCollection1.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]" --bboxShrinkFactor 5 --sketch --numFeatures 10\n'})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"--bboxShrinkFactor"})," argument used shrinks the height and width of the given bbox by a factor of 5, and then generates random features that are within that reduced bbox. A suitable shrink factor value was discovered through trial and error. Simply visualize the resulting json file in QGIS or other software and find a value that produces polygons that are completely within the planning area polygon. (see image below)."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.img,{alt:"EEZ bbox",src:t(81465).A+"",width:"1278",height:"661"}),"\nImage: cluster of 10 random sketches (in orange) within Micronesia EEZ"]}),"\n",(0,r.jsxs)(n.p,{children:["Learn more about the options for ",(0,r.jsx)(n.code,{children:"genRandomPolygon"})," by running:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"npx tsx scripts/genRandomPolygon.ts --help\n"})}),"\n",(0,r.jsx)(n.h3,{id:"run-test-suite",children:"Run test suite"}),"\n",(0,r.jsxs)(n.p,{children:["Now that you have example features and sketches, you can test ",(0,r.jsx)(n.code,{children:"simpleFunction"}),". Run the test suite now:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm test\n"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Using ",(0,r.jsx)(n.code,{children:"simpleFunctionSmoke.test.ts"}),", simpleFunction will be run against all of the polygon Sketches in ",(0,r.jsx)(n.code,{children:"examples/sketches"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["The results of all smokes tests are output to the ",(0,r.jsx)(n.code,{children:"examples/output"})," directory."]}),"\n",(0,r.jsx)(n.li,{children:"You can inspect the output files, and see the calculated area values for each sketch input."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Commit the output files to your git repository at this time."}),"\n",(0,r.jsxs)(n.p,{children:["You can make changes to simpleFunction, then rerun tests to regenerate them at any time, and delete any that are stale and no longer needed. For advanced use, check out the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/testing",children:"testing"})," guide."]}),"\n",(0,r.jsx)(n.h3,{id:"storybook",children:"Storybook"}),"\n",(0,r.jsx)(n.p,{children:"Storybook is used to view your reports."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run storybook\n"})}),"\n",(0,r.jsx)(n.p,{children:"This will:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Generate a story for every combination of report client registered in ",(0,r.jsx)(n.code,{children:"project/geoprocessing.json"})," and sketch present in ",(0,r.jsx)(n.code,{children:"examples/sketches"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Load all of the smoke test output for every sketch (to load in stories instead of running geoprocessing functions)"}),"\n",(0,r.jsx)(n.li,{children:"Start the storybook server and give you the URL."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Open the storybook URL in your browser and click through the stories."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Storybook initial view",src:t(26730).A+"",width:"775",height:"340"})}),"\n",(0,r.jsx)(n.p,{children:"A powerful feature of Storybook is that when you save edits to your report client or component code, storybook will refresh the browser automatically with the changes. This lets you develop your reports and debug them more quickly."}),"\n",(0,r.jsxs)(n.p,{children:["If you later add more sketch examples to the ",(0,r.jsx)(n.code,{children:"examples/sketch"})," directory, will need to rerun the smoke tests to generate example output, and then stop and restart your storybook to re-generate all the stories."]}),"\n",(0,r.jsxs)(n.p,{children:["Learn more in the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/tutorials/storybook",children:"storybook guide"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"simple-function-modifications",children:"Simple Function Modifications"}),"\n",(0,r.jsx)(n.p,{children:"Let's enhance your simple geoprocessing function to calculate more detailed information when the report is run on a sketch collection. It should now also calculate the area of the entire collection, and the area of each child sketch in the collection."}),"\n",(0,r.jsxs)(n.p,{children:["First modify SimpleResults with an additional property ",(0,r.jsx)(n.code,{children:"childSketchAreas"})," that can store this information:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"export interface SimpleResults {\n /** area of reef within sketch in square meters */\n area: number;\n childSketchAreas: {\n /** Name of the sketch */\n name: string;\n /** Area of the sketch in square meters */\n area: number;\n }[];\n}\n"})}),"\n",(0,r.jsx)(n.p,{children:"Then calculate the additional values and return them in the result payload:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'// Add analysis code\nconst sketchArea = area(sketch);\n\nlet childSketchAreas: SimpleResults["childSketchAreas"] = [];\nif (sketch.properties.isCollection) {\n childSketchAreas = toSketchArray(sketch).map((sketch) => ({\n name: sketch.properties.name,\n area: area(sketch),\n }));\n}\n\n// Custom return type\nreturn {\n area: sketchArea,\n childSketchAreas,\n};\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Here's what the final ",(0,r.jsx)(n.code,{children:"simpleFunction"})," code should look like:"]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"src/functions/simpleFunction.ts"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'import {\n Sketch,\n SketchCollection,\n Polygon,\n MultiPolygon,\n GeoprocessingHandler,\n toSketchArray,\n} from "@seasketch/geoprocessing";\nimport { area } from "@turf/turf";\n\nexport interface SimpleResults {\n /** area of reef within sketch in square meters */\n area: number;\n childSketchAreas: {\n /** Name of the sketch */\n name: string;\n /** Area of the sketch in square meters */\n area: number;\n }[];\n}\n\n/**\n * Simple geoprocessing function with custom result payload\n */\nasync function simpleFunction(\n sketch:\n | Sketch\n | SketchCollection,\n): Promise {\n // Add analysis code\n const sketchArea = area(sketch);\n\n let childSketchAreas: SimpleResults["childSketchAreas"] = [];\n if (sketch.properties.isCollection) {\n childSketchAreas = toSketchArray(sketch).map((sketch) => ({\n name: sketch.properties.name,\n area: area(sketch),\n }));\n }\n\n // Custom return type\n return {\n area: sketchArea,\n childSketchAreas,\n };\n}\n\nexport default new GeoprocessingHandler(simpleFunction, {\n title: "simpleFunction",\n description: "Function description",\n timeout: 60, // seconds\n memory: 1024, // megabytes\n executionMode: "async",\n});\n'})})]}),"\n",(0,r.jsx)(n.p,{children:"Run your tests again to generate the new smoke test output:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run test\n"})}),"\n",(0,r.jsx)(n.h3,{id:"simple-report-modification",children:"Simple Report Modification"}),"\n",(0,r.jsxs)(n.p,{children:["Now let's modify SimpleReportCard to display the new data. You will add a new ",(0,r.jsx)(n.code,{children:"Collapse"})," section with a ",(0,r.jsx)(n.code,{children:"Table"})," component that lists out the sketch areas by name."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'\n \n This {{ sketchStr }} is {{ areaString }} km\xb2.\n \n
\n{isCollection && (\n \n \n roundDecimalFormat(row.area / 1_000_000, 0, {\n keepSmallValues: true,\n }),\n },\n ]}\n />\n \n)}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Here's what the final SimpleCard code should look like:"}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"src/components/SimpleCard.tsx"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'import React from "react";\nimport { Trans, useTranslation } from "react-i18next";\nimport {\n Collapse,\n ResultsCard,\n Table,\n useSketchProperties,\n} from "@seasketch/geoprocessing/client-ui";\n// Import SimpleResults to type-check data access in ResultsCard render function\nimport { SimpleResults } from "../functions/simpleFunction.js";\nimport { roundDecimalFormat } from "@seasketch/geoprocessing/client-core";\n\nexport const SimpleCard = () => {\n const { t } = useTranslation();\n const [{ isCollection }] = useSketchProperties();\n const titleTrans = t("SimpleCard title", "Simple Report");\n return (\n <>\n \n {(data: SimpleResults) => {\n const areaSqKm = data.area / 1_000_000;\n const areaString = roundDecimalFormat(areaSqKm, 0, {\n keepSmallValues: true,\n });\n const sketchStr = isCollection ? t("sketch collection") : t("sketch");\n\n return (\n <>\n \n \n This {{ sketchStr }} is {{ areaString }} km\xb2.\n \n
\n {isCollection && (\n \n \n roundDecimalFormat(row.area / 1_000_000, 0, {\n keepSmallValues: true,\n }),\n },\n ]}\n />\n \n )}\n >\n );\n }}\n \n >\n );\n};\n'})})]}),"\n",(0,r.jsx)(n.p,{children:"If your storybook is still running from last time, you will need to restart it to pick up the new smoke test output. In fact, anytime you rerun your smoke tests to generate new output, you will need to restart your storybook."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"Ctrl-C\nnpm run storybook\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Your updated report should have a new collapsible table, that when expanded looks like the following:\n",(0,r.jsx)(n.img,{alt:"Simple Card with table",src:t(51899).A+"",width:"747",height:"679"})]}),"\n",(0,r.jsx)(n.h3,{id:"first-project-build",children:"First Project Build"}),"\n",(0,r.jsxs)(n.p,{children:["Now that you have confirmed your function is working properly, and your report client displays properly for a variety of example sketches, you are ready to do your first build. The application ",(0,r.jsx)(n.code,{children:"build"})," proceess packages it for deployment. Specifically it:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Checks all the Typescript code to make sure it's valid and types are used properly."}),"\n",(0,r.jsx)(n.li,{children:"Transpiles all Typescript to Javascript"}),"\n",(0,r.jsxs)(n.li,{children:["Bundles UI report clients into the ",(0,r.jsx)(n.code,{children:".build-web"})," directory"]}),"\n",(0,r.jsxs)(n.li,{children:["Bundles geoprocessing and preprocessing functions into the ",(0,r.jsx)(n.code,{children:".build"})," directory."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"To build your application run the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run build\n"})}),"\n",(0,r.jsx)(n.p,{children:"Once your build is successful, you should stage and commit all your changes to git."}),"\n",(0,r.jsx)(n.h2,{id:"reef-report",children:"Reef Report"}),"\n",(0,r.jsx)(n.p,{children:"Next you will create a coral reef report that uses the reef extent dataset. Here is an image of it displayed in QGIS. Notice that the coral is entirely in shallow water around the island coastline and atolls."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Reef Extent",src:t(35162).A+"",width:"2053",height:"1024"})}),"\n",(0,r.jsx)(n.h3,{id:"import-data",children:"Import Data"}),"\n",(0,r.jsx)(n.p,{children:"To access this datasource, first download a data package prepared for FSM to your project space and unzip it:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"wget -P data/src https://github.com/user-attachments/files/17697992/FSM_MSP_Data_Example_V2.zip\nunzip data/src/FSM_MSP_Data_Example_V2.zip -d data/src\nrm data/src/FSM_MSP_Data_Example_V2.zip\n"})}),"\n",(0,r.jsx)(n.p,{children:"Now import the datasource to your project."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run import:data\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Type of data?\nVector\n? Enter path to src file (with filename)\ndata/src/reefextent.fgb\n? Select layer to import\nreefextent\n? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename\nreefextent\n? Should multi-part geometries be split into single-part geometries?\nYes\n? (Optional) additional formats to create (besides fgb)\n[Press enter to skip]\n? Select feature properties that you want to group metrics by\n[Press enter to skip]\n? Select additional feature properties to keep in final datasource\n[Press enter to skip]\n? These formats are automatically created: fgb. Select any additional formats you want created\n[Press enter to skip]\n? Will you be precalculating summary metrics for this datasource after import? (Typically yes if reporting sketch % overlap with datasource)\nYes\n"})}),"\n",(0,r.jsx)(n.p,{children:"The import process will:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"reproject your data to the WGS84 reference system, if not already (for ease of use with Turf.JS)"}),"\n",(0,r.jsxs)(n.li,{children:["split any features that cross the 180 degree ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/antimeridian",children:"antimeridian"})]}),"\n",(0,r.jsx)(n.li,{children:"reduce the source dataset down to only the necessary attributes (saving network bandwidth later)"}),"\n",(0,r.jsxs)(n.li,{children:["output a new file in the cloud-optimized flatgeobuf format to the ",(0,r.jsx)(n.code,{children:"data/dist"})," directory."]}),"\n",(0,r.jsxs)(n.li,{children:["register the datasource in ",(0,r.jsx)(n.code,{children:"project/datasources.json"}),", along with metadata. This allows you to:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["quickly access project datasources in your reports using the ",(0,r.jsx)(n.code,{children:"projectClient"})," (more on this later)"]}),"\n",(0,r.jsxs)(n.li,{children:["quickly reimport datasources using the ",(0,r.jsx)(n.code,{children:"reimport:data"})," command, without having to answer questions again."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Once finished you are ready to use your datasources for ",(0,r.jsx)(n.code,{children:"local"})," report development. Datasource publishing for ",(0,r.jsx)(n.code,{children:"production"})," use is covered later."]}),"\n",(0,r.jsxs)(n.p,{children:["You can add, edit, or delete records in datasources.json manually to meet your need as long as the records meet the expected ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#datasources",children:"schema"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If at any point the process of using ",(0,r.jsx)(n.code,{children:"data:import"}),", ",(0,r.jsx)(n.code,{children:"datasources.json"}),", and ",(0,r.jsx)(n.code,{children:"projectClient"})," doesn't meet your needs, you are welcome to create your own separate process, as long as it gets datasources to the ",(0,r.jsx)(n.code,{children:"data/dist"})," directory in the format (fgb) and projection (WGS84) required, ready to be published for production use."]}),"\n",(0,r.jsx)(n.h3,{id:"precalculation",children:"Precalculation"}),"\n",(0,r.jsx)(n.p,{children:"Next, you will create a standalone script to calculate the total area of the polygons in the reef extent datasource for use in the report. By doing this calculation ahead of time, you won't need to do it every time the geoprocessing function runs."}),"\n",(0,r.jsxs)(n.p,{children:["Create a new file with the following code and save it to ",(0,r.jsx)(n.code,{children:"scripts/coralReefPrecalc.ts"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'// Run the following command from the project root directory\n// npx tsx scripts/coralReefPrecalc.ts\n\nimport { area } from "@turf/turf";\nimport { geojson } from "flatgeobuf";\nimport { readFileSync } from "fs";\nimport fs from "fs-extra";\n\n// Fetch all reef features and calculate total area\nconst buffer = readFileSync(\n `${import.meta.dirname}/../data/dist/reefextent.fgb`,\n);\nconst reefFeatures = geojson.deserialize(new Uint8Array(buffer));\nconst totalArea = area(reefFeatures);\n\nconst reefPrecalc = {\n totalAreaSqMeters: totalArea,\n};\n\nfs.ensureDirSync(`${import.meta.dirname}/../data/precalc`);\nfs.writeJsonSync(\n `${import.meta.dirname}/../data/precalc/reefextent.json`,\n reefPrecalc,\n);\n'})}),"\n",(0,r.jsx)(n.p,{children:"Now run it:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npx tsx scripts/coralReefPrecalc.ts\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The script fetches all features from the reef extent flatgeobuf file, calculates their total area and writes it to ",(0,r.jsx)(n.code,{children:"data/precalc/reefextent.json"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:'{\n "totalArea": 716100906.2570591\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"We are going to use this precalculated value in a geoprocessing function in the next step."}),"\n",(0,r.jsx)(n.h3,{id:"geoprocessing-function",children:"Geoprocessing Function"}),"\n",(0,r.jsx)(n.p,{children:"To create a new geoprocessing function ready to build on, run the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run create:function\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Function type\nGeoprocessing - For sketch reports\n? Title for this function, in camelCase\ncoralReef\n? Describe what this function does\ncalculate sketch overlap with reef extent datasource\n? Choose an execution mode\nAsync - Better for long-running processes\n\n\u2714 created coralReef function in src/functions/\n\u2714 Registered function in project/geoprocessing.json\n\nGeoprocessing function: src/functions/coralReef.ts\nSmoke test: src/functions/coralReefSmoke.test.ts\n\nNext Steps:\n * Update the geoprocessing function with your analysis\n * Populate examples/sketches folder with sketches for smoke test to run against\n * 'npm test' to smoke test your new geoprocessing function against all example sketches\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.code,{children:"src/functions/coralReef.ts"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"You will now update this code answer the following questions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"What percentage of all coral reef is within the current sketch polygon (or sketch collection polygons)?"}),"\n",(0,r.jsx)(n.li,{children:"If it is a sketch collection, does it meet the planning objective of protecting 20% of all coral reef?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Replace the existing code with the following:"}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"src/functions/coralReef.ts"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'import {\n Sketch,\n SketchCollection,\n Polygon,\n MultiPolygon,\n GeoprocessingHandler,\n getFeaturesForSketchBBoxes,\n toSketchArray,\n clipMultiMerge,\n isSketchCollection,\n clip,\n Feature,\n} from "@seasketch/geoprocessing";\nimport project from "../../project/projectClient.js";\nimport { area, featureCollection } from "@turf/turf";\nimport reefPrecalc from "../../data/precalc/reefextent.json";\n\nexport interface CoralReefResults {\n /** area of all reef extent polygons in square meters */\n totalArea: number;\n /** area of reef extent within sketch or sketch collection in square meters */\n sketchArea: number;\n childSketchAreas: {\n /** Name of the sketch */\n name: string;\n /** Area of reef extent within child sketch in square meters */\n area: number | null;\n }[];\n}\n\n/**\n * Simple geoprocessing function with custom result payload\n */\nasync function coralReef(\n sketch:\n | Sketch\n | SketchCollection,\n): Promise {\n // Load just the reef features that intersect with the sketch bounding box\n // or in case of a sketch collection, the child sketch bounding boxes\n const ds = project.getInternalVectorDatasourceById("reefextent");\n const url = project.getDatasourceUrl(ds);\n const reefFeatures = await getFeaturesForSketchBBoxes(sketch, url);\n\n // Add analysis code\n\n // If sketch is collection, clip each child sketch with reef features and calculate its area\n let childSketchAreas: CoralReefResults["childSketchAreas"] = [];\n if (sketch.properties.isCollection) {\n childSketchAreas = toSketchArray(sketch).map((sketch) => {\n const sketchReefOverlap = clipMultiMerge(\n sketch,\n featureCollection(reefFeatures),\n "intersection",\n );\n return {\n name: sketch.properties.name,\n area: sketchReefOverlap ? area(sketchReefOverlap) : 0,\n };\n });\n }\n\n // Calculate overall sketch area\n const sketchArea = (() => {\n let clipFeature: Feature | null;\n if (reefFeatures.length === 0) {\n return 0;\n } else if (isSketchCollection(sketch)) {\n // account for sketch overlap with union of all sketches\n // rather than simple sum of child areas\n clipFeature = clip(sketch, "union");\n if (!clipFeature) {\n return 0; // No overlap\n }\n } else {\n clipFeature = sketch;\n }\n const sketchReefOverlap = clipMultiMerge(\n clipFeature,\n featureCollection(reefFeatures),\n "intersection",\n );\n return sketchReefOverlap ? area(sketchReefOverlap) : 0;\n })();\n\n // Custom return type\n return {\n totalArea: reefPrecalc.totalAreaSqMeters,\n sketchArea: sketchArea,\n childSketchAreas,\n };\n}\n\nexport default new GeoprocessingHandler(coralReef, {\n title: "coralReef",\n description: "calculate sketch overlap with reef extent datasource",\n timeout: 60, // seconds\n memory: 1024, // megabytes\n executionMode: "async",\n});\n'})})]}),"\n",(0,r.jsx)(n.p,{children:"Notice that the code imports the totalArea value you precalculated and inserts it into the result payload, avoiding the need to recalculate it each time."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'import reefPrecalc from "../../data/precalc/reefextent.json";\n\nreefPrecalc.totalArea;\n'})}),"\n",(0,r.jsx)(n.p,{children:"Then it fetches only the reef features whose bounding box intersects with the sketch bounding box, or in case of a sketch collection, that intersects with each of its child sketch bounding boxes. This is more efficient than fetching the entire reef dataset, saving time and network bandwidth."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'// Load just the reef features that intersect with the sketch bounding box\n// or in case of a sketch collection, the child sketch bounding boxes\nconst ds = project.getInternalVectorDatasourceById("reefextent");\nconst url = project.getDatasourceUrl(ds);\nconst reefFeatures = await getFeaturesForSketchBBoxes(sketch, url);\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Next, if the sketch is a collection, it calculates how much coral reef overlaps with each individual sketch. To do this, it needs to figure out the areas where the sketches and coral reef ",(0,r.jsx)(n.code,{children:"intersect"}),". This is calculated using the ",(0,r.jsx)(n.code,{children:"clipMultiMerge"})," function."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'// If sketch is collection, clip each child sketch with reef features and calculate its area\nlet childSketchAreas: CoralReefResults["childSketchAreas"] = [];\nif (sketch.properties.isCollection) {\n childSketchAreas = toSketchArray(sketch).map((sketch) => {\n const sketchReefOverlap = clipMultiMerge(\n sketch,\n featureCollection(reefFeatures),\n "intersection",\n );\n return {\n name: sketch.properties.name,\n area: sketchReefOverlap ? area(sketchReefOverlap) : 0,\n };\n });\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Finally, it calculates how much coral reef overlaps with the entire sketch/collection."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"If there is no overlap between the reef and sketch, then it simply returns zero."}),"\n",(0,r.jsxs)(n.li,{children:["If it's a sketch collection it first performs a ",(0,r.jsx)(n.code,{children:"union"})," operation that merges all of the sketches into a single Multipolygon, dissolving any overlap between the sketches so that area is not double counted."]}),"\n",(0,r.jsx)(n.li,{children:"If it's a single sketch polygon then it just calculates its area and returns it."}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'// Calculate overall sketch area\nconst sketchArea = (() => {\n let clipFeature: Feature | null;\n if (reefFeatures.length === 0) {\n return 0;\n } else if (isSketchCollection(sketch)) {\n // account for sketch overlap with union of all sketches\n // rather than simple sum of child areas\n clipFeature = clip(sketch, "union");\n if (!clipFeature) {\n return 0; // No overlap\n }\n } else {\n clipFeature = sketch;\n }\n const sketchReefOverlap = clipMultiMerge(\n clipFeature,\n featureCollection(reefFeatures),\n "intersection",\n );\n return sketchReefOverlap ? area(sketchReefOverlap) : 0;\n})();\n\n// Custom return type\nreturn {\n totalArea: reefPrecalc.totalAreaSqMeters,\n sketchArea: sketchArea,\n childSketchAreas,\n};\n'})}),"\n",(0,r.jsx)(n.p,{children:"Now run tests to generate updated output for each of the sample sketches:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run test\n"})}),"\n",(0,r.jsx)(n.p,{children:"Confirm that the output looks as expected."}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"Example output"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:'{\n "totalArea": 716100906.2570591,\n "sketchArea": 367734.86730626615,\n "childSketchAreas": [\n {\n "name": "sketchCollection1-1",\n "area": 428611581.5348215\n },\n {\n "name": "sketchCollection1-2",\n "area": 258701691.8012635\n },\n {\n "name": "sketchCollection1-3",\n "area": 599831752.2377243\n },\n {\n "name": "sketchCollection1-4",\n "area": 372585470.74404347\n },\n {\n "name": "sketchCollection1-5",\n "area": 562781719.588172\n },\n {\n "name": "sketchCollection1-6",\n "area": 528237794.83984125\n },\n {\n "name": "sketchCollection1-7",\n "area": 253970548.59694752\n },\n {\n "name": "sketchCollection1-8",\n "area": 376674659.1741572\n },\n {\n "name": "sketchCollection1-9",\n "area": 657788539.6501052\n },\n {\n "name": "sketchCollection1-10",\n "area": 712233449.0549812\n }\n ]\n}\n'})})]}),"\n",(0,r.jsx)(n.h3,{id:"report-client",children:"Report Client"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"npm run create:client\n"})}),"\n",(0,r.jsx)(n.p,{children:"Open src/components/CoralReefCard.tsx."}),"\n",(0,r.jsx)(n.p,{children:"You will now update this code to:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Display the % of total coral reef captured within this sketch"}),"\n",(0,r.jsxs)(n.li,{children:["If it is a sketch collection","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Indicate whether the objective of protecting 20% of all coral reef has been met."}),"\n",(0,r.jsx)(n.li,{children:"Display a collapsible area with a breakdown of the area and % area of coral reef within each individual sketch in the collection."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Replace the existing code with the following:"}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"src/components/CoralReefCard.tsx"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-javascript",children:'import React from "react";\nimport { Trans, useTranslation } from "react-i18next";\nimport {\n ResultsCard,\n useSketchProperties,\n HorizontalStackedBar,\n Collapse,\n Table,\n ObjectiveStatus,\n VerticalSpacer,\n} from "@seasketch/geoprocessing/client-ui";\nimport {\n percentWithEdge,\n roundDecimalFormat,\n squareMeterToKilometer,\n} from "@seasketch/geoprocessing/client-core";\n\n// Import CoralReefResults to type-check data access in ResultsCard render function\nimport { CoralReefResults } from "../functions/coralReef.js";\n\nexport const CoralReefCard = () => {\n const { t } = useTranslation();\n const [{ isCollection }] = useSketchProperties();\n const titleTrans = t("CoralReefCard title", "Coral Reef");\n return (\n <>\n \n {(data: CoralReefResults) => {\n const target = 0.2; // 20%\n const reefPerc = data.sketchArea / data.totalArea;\n const reefPercString = percentWithEdge(reefPerc);\n const targetPercString = percentWithEdge(target);\n\n const meetsObjective = reefPerc >= target;\n const chartRows = [[[reefPerc]]];\n\n const sketchTypeStr = isCollection\n ? t("sketch collection")\n : t("sketch");\n\n const meetsOrNotElement = meetsObjective ? (\n \n This {{ sketchTypeStr }} meets the objective of protecting{" "}\n {{ targetPercString }} of coral reef\n \n ) : (\n \n This {{ sketchTypeStr }} does not meet the objective of protecting{" "}\n {{ targetPercString }} of coral reef\n \n );\n\n return (\n <>\n \n \n {{ reefPercString }} of all Micronesia coral reef is within\n this {{ sketchTypeStr }}.\n \n
\n {isCollection && (\n \n )}\n\n \n percentWithEdge(value / 100)}\n max={4}\n target={20}\n targetValueFormatter={(targetValue) => (\n \n Target {{ targetValue: percentWithEdge(targetValue / 100) }}\n \n )}\n rowConfigs={[\n {\n title: t("Total coral reef"),\n },\n ]}\n blockGroupNames={[]}\n blockGroupStyles={[{ backgroundColor: "#64c2a6" }]}\n />\n {isCollection && (\n \n \n roundDecimalFormat(squareMeterToKilometer(row.area)),\n },\n {\n Header: t("% Reef within Sketch"),\n accessor: (row: any) =>\n percentWithEdge(row.area / data.totalArea),\n },\n ]}\n />\n \n )}\n >\n );\n }}\n \n >\n );\n};\n'})})]}),"\n",(0,r.jsx)(n.p,{children:"There are multiple things worth noticing:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"squareMeterToKilometer"})," conversion helper function is used"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"percentWithEdge"})," and ",(0,r.jsx)(n.code,{children:"roundDecimalFormat"})," helper functions are used to format values to be more human readable. Will use locale settings of the users browser when formatting decimal and percent."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"HorizontalStackedBar"})," and ",(0,r.jsx)(n.code,{children:"ObjectiveStatus"})," core UI components present information in a more visually interesting way that can be reused across reports. See core ",(0,r.jsx)(n.a,{href:"/storybook",children:"storybook"})," for more examples of their use."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Now, start storybook and view the result:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run storybook\n"})}),"\n",(0,r.jsx)(n.p,{children:"When viewing a sketch example, it should display the following:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"CoralReefCard sketch view",src:t(8847).A+"",width:"742",height:"291"})}),"\n",(0,r.jsx)(n.p,{children:"And when viewing a sketch collection example, it should display the additional components:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"CoralReefCard collection view",src:t(97287).A+"",width:"748",height:"928"})}),"\n",(0,r.jsx)(n.h3,{id:"add-to-tab-report",children:"Add to Tab Report"}),"\n",(0,r.jsx)(n.p,{children:"Now add the CoralReefCard as a new section to your top-level TabReport, on its ViabilityPage."}),"\n",(0,r.jsxs)(n.p,{children:["Open ",(0,r.jsx)(n.code,{children:"src/components/ViabilityPage.tsx"})," and replace the code with the following:"]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"src/components/ViabilityPage.tsx"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'import React from "react";\nimport { SimpleCard } from "./SimpleCard.js";\nimport { SketchAttributesCard } from "@seasketch/geoprocessing/client-ui";\nimport { CoralReefCard } from "./CoralReefCard.js";\n\nexport const ViabilityPage = () => {\n return (\n <>\n \n \n \n >\n );\n};\n'})})]}),"\n",(0,r.jsx)(n.p,{children:"Storybook should update on save and display the following:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"CoralReefCard add to page",src:t(62848).A+"",width:"748",height:"631"})}),"\n",(0,r.jsx)(n.h2,{id:"benthic-habitat-report",children:"Benthic Habitat Report"}),"\n",(0,r.jsx)(n.p,{children:"This next section will demonstrate more advanced framework features for calculating polygon overlap and measuring progress towards planning objective targets. These features become more useful when you have multiple data classes that you want to report on at the same time."}),"\n",(0,r.jsx)(n.h3,{id:"import-data-1",children:"Import Data"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run import:data\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Type of data?\nVector\n? Enter path to src file (with filename)\ndata/src/benthic-rock.fgb\n? Select layer to import\nbenthic-rock\n? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename benthic-rock\n? Should multi-part geometries be split into single-part geometries?\nYes\n? Select feature properties that you want to group metrics by\nclass\n? Select additional feature properties to keep in final datasource\n[Press Enter to skip]\n? These formats are automatically created: fgb. Select any additional formats you want created\n[Press Enter to skip]\n? Will you be precalculating summary metrics for this datasource after import? (Typically yes if reporting sketch % overlap with datasource)\nYes\n"})}),"\n",(0,r.jsx)(n.p,{children:"The import will proceed. Once complete you will find:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The output file ",(0,r.jsx)(n.code,{children:"data/dist/benthic-rock.fgb"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["An updated ",(0,r.jsx)(n.code,{children:"project/datasources.json"})," new datasource record ",(0,r.jsx)(n.code,{children:"benthic-rock"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"If the import fails, start the import over and double check everything. It is most likely one of the following:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"You specified the wrong source file path."}),"\n",(0,r.jsx)(n.li,{children:"You specified the wrong layer name"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"add-metric-group",children:"Add Metric Group"}),"\n",(0,r.jsxs)(n.p,{children:["A metric group defines a metric to be measured, for one or more classes of data. A ",(0,r.jsx)(n.code,{children:"MetricGroup"})," ",(0,r.jsx)(n.strong,{children:"record"})," provides the information needed for a metric to be calculated (in a geoprocessing function) and to be displayed (in a report client). Let's create your first metric group by opening ",(0,r.jsx)(n.code,{children:"project/metrics.json"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The benthic dataset represents where different classes of benthic habitat are predicted to be present. Specifically is is a single vector datasource with multiple habitats defined by the ",(0,r.jsx)(n.code,{children:"class"})," attribute. While there are many types of habitats, we want to only focus on Sand, Rubble, and Rock. To do this, you'll add multiple class records, each with a unique ",(0,r.jsx)(n.code,{children:"classId"})," value to match on, and a ",(0,r.jsx)(n.code,{children:"classKey"})," that specific which feature attribute the classId values are found."]}),"\n",(0,r.jsxs)(n.p,{children:["Add the following record to the end of the array in ",(0,r.jsx)(n.code,{children:"project/metrics.json"})," and save the file."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "metricId": "benthicHabitat",\n "type": "areaOverlap",\n "classes": [\n {\n "classId": "Sand",\n "classKey": "class",\n "display": "Sand",\n "datasourceId": "benthic"\n },\n {\n "classId": "Rock",\n "classKey": "class",\n "display": "Rock",\n "datasourceId": "benthic"\n },\n {\n "classId": "Rubble",\n "classKey": "class",\n "display": "Rubble",\n "datasourceId": "benthic"\n }\n ]\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"The reef extent dataset simply tells you where there is reef present. Therefore, we represent it as a single class of data. You should end up with the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'[\n {\n "metricId": "coralReef",\n "type": "areaOverlap",\n "classes": [\n {\n "classId": "reefextent",\n "display": "Coral Reef",\n "datasourceId": "reefextent"\n }\n ]\n }\n]\n'})}),"\n",(0,r.jsxs)(n.p,{children:["To learn more about metric groups, visit the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/concepts/AdvancedConcepts#metric-group",children:"advanced concepts"})," page."]}),"\n",(0,r.jsx)(n.h3,{id:"create-report",children:"Create Report"}),"\n",(0,r.jsx)(n.p,{children:"Next you will create your first report using the metric group created in the previous step. Run the following command and answer the questions:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run create:report\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Type of report to create\nVector overlap report - calculates sketch overlap with vector datasources\n? Describe what this reports geoprocessing function will calculate (e.g.Calculate sketch overlap with boundary polygons)\nCalculate sketch overlap with reef extent\n? Choose an execution mode for the geoprocessing function for this report\nAsync - Better for long-running processes\n? Select the metric group to report on\ncoralReef\n\n\u2714 Created coralReef report\n\u2714 Registered report assets in project/geoprocessing.json\n\nGeoprocessing function: src/functions/coralReef.ts\nSmoke test: src/functions/coralReefSmoke.test.ts\nReport component: src/components/CoralReefCard.tsx\nStory generator: src/components/CoralReefCard.example-stories.ts\n\nNext Steps:\n * 'npm test' to run smoke tests against your new geoprocessing function\n * 'npm run storybook' to view your new report with smoke test output\n * Add to a top-level report client or page when ready\n"})}),"\n",(0,r.jsx)(n.p,{children:"As the output explains, 4 new files have been created for you including a geoprocessing function (coralReef.ts) and a"}),"\n",(0,r.jsx)(n.h3,{id:"create-report-1",children:"Create Report"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run create:report\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Type of report to create\nVector overlap report\n\n? Describe what this reports geoprocessing function will calculate\nCalculate sketch overlap with benthic habitats\n\n? Choose an execution mode for the geoprocessing function for this report\nAsync - Better for long-running processes\n\n? Select the metric group to report on\nbenthicHabitat\n"})}),"\n",(0,r.jsx)(n.p,{children:"Now:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Add your new component to the Viability Page"}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"npm run test"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"npm run storybook"})}),"\n",(0,r.jsx)(n.li,{children:"Verify report displays properly"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"octocoral-report",children:"Octocoral Report"}),"\n",(0,r.jsx)(n.h3,{id:"import-data-2",children:"Import Data"}),"\n",(0,r.jsx)(n.p,{children:"Now import the following additional datasources:"}),"\n",(0,r.jsx)(n.p,{children:"Octocorals - raster with 0/1 values representing predicted presence/absence of species."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"? Type of data?\nRaster\n? Enter path to src file (with filename)\ndata/src/yesson_octocorals.tif\n? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename\noctocorals\n? Select raster band to import\n1\n? What type of measurement is used for this raster data?\nQuantitative - values represent amounts, measurement of single thing\n? Will you be precalculating summary metrics for this datasource after import? (Typically yes if reporting sketch % overlap with datasource)\nYes\n"})}),"\n",(0,r.jsx)(n.h3,{id:"add-metric-group-1",children:"Add Metric Group"}),"\n",(0,r.jsx)(n.h3,{id:"create-report-2",children:"Create Report"}),"\n",(0,r.jsx)(n.h2,{id:"advanced-features",children:"Advanced Features"}),"\n",(0,r.jsx)(n.h3,{id:"add-planning-boundary",children:"Add Planning Boundary"}),"\n",(0,r.jsx)(n.h3,{id:"update-default-geography",children:"Update default Geography"}),"\n",(0,r.jsx)(n.p,{children:"Now change the projects default geography from the world, to your new planning boundary."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Open ",(0,r.jsx)(n.code,{children:"project/geographies.json"}),". You will see an array with one geography record called ",(0,r.jsx)(n.code,{children:"world"}),". This is the default geography and can be left here. You will disable its precalc and remove it from the ",(0,r.jsx)(n.code,{children:"default-boundary"})," group, then add a new geography record for your ",(0,r.jsx)(n.code,{children:"planning-boundary"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Replace the contents of the geographies file with the following and save it:"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'[\n {\n "geographyId": "world",\n "datasourceId": "world",\n "display": "World",\n "groups": [],\n "precalc": false\n },\n {\n "geographyId": "planning-boundary",\n "datasourceId": "planning-boundary",\n "display": "Planning Boundary",\n "groups": ["default-boundary"],\n "precalc": true\n }\n]\n'})}),"\n",(0,r.jsx)(n.h3,{id:"precalc-data",children:"Precalc Data"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"precalc"})," command calculates spatial statistics for the portion of each of your datasources that falls within each of your project's Geographies."]}),"\n",(0,r.jsx)(n.p,{children:"Geographies are simply geographic boundaries for your project, and the default Geography for this project is the entire World."}),"\n",(0,r.jsx)(n.p,{children:"Why do this?"}),"\n",(0,r.jsx)(n.p,{children:'One of the questions our report needs to answer is "what percentage of coral reef within the planning boundary are within my Sketch polygon?'}),"\n",(0,r.jsxs)(n.p,{children:["This is calculated as:\n",(0,r.jsx)(n.code,{children:"% area of coral reef in sketch = area of coral reef within sketch / area of coral reef within planning boundary"})]}),"\n",(0,r.jsx)(n.p,{children:"The numerator in this equation (area of reef within sketch) is relatively inexpensive to calculate and we will do it within a geoprocessing function where we have access to the sketch. But the denominator calculation can be expensive if the data is very large or complex. Thankfully we can calculate it ahead of time."}),"\n",(0,r.jsxs)(n.p,{children:["Since your datasources and geographies already have ",(0,r.jsx)(n.code,{children:"precalc: true"})," set, you are ready to start:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run precalc:data\n\n? Do you want to precalculate only a subset?\n Yes, by datasource\n Yes, by geography\n Yes, by both\n\u276f No, just precalculate everything (may take a while)\n"})}),"\n",(0,r.jsx)(n.p,{children:'Choose to "precalculate everything". Then press enter. The precalc process may take a while.'}),"\n",(0,r.jsxs)(n.p,{children:["What's happening is that the precalc script starts a local web server on port 8001 that serves up the datasources in ",(0,r.jsx)(n.code,{children:"data/dist"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The precalc script then gets all your project datasources with ",(0,r.jsx)(n.code,{children:"precalc: true"}),", and all your project geographies with ",(0,r.jsx)(n.code,{children:"precalc: true"}),", and then calculate ",(0,r.jsx)(n.code,{children:"area"}),", ",(0,r.jsx)(n.code,{children:"sum"}),", and ",(0,r.jsx)(n.code,{children:"count"})," metrics for each combination of datasource and geography."]}),"\n",(0,r.jsxs)(n.p,{children:["Once complete ",(0,r.jsx)(n.code,{children:"project/precalc.json"})," will have been updated with the new metric values."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["To learn more advanced use, see the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/precalc",children:"precalc"})," guide."]}),"\n",(0,r.jsxs)(n.li,{children:["To learn more about use of precalculated metrics, see the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/reportclient",children:"report client"})," guide."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"language-translation-1",children:"Language Translation"}),"\n",(0,r.jsx)(n.p,{children:"Run the following to extract the latest translations from all of you report clients and its underlying components."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run extract:translation\n"})}),"\n",(0,r.jsx)(n.h2,{id:"whats-next",children:"What's Next"}),"\n",(0,r.jsx)(n.p,{children:"You've now completed the sample tutorial. Your next step is to choose whether you would like to:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Setup an ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/tutorials/existingproject",children:"existing project to setup"}),", and re-deploy it."]}),"\n",(0,r.jsxs)(n.li,{children:["Create a ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/tutorials/newproject",children:"create a new project"}),", deploy it and integrate with SeaSketch."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},62848:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/coral-reef-card-add-to-page-acfb419983acedd6b1f2d576a422b175.jpg"},97287:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/coral-reef-card-collection-42587097890cc8cb14f0276d105af2b1.jpg"},8847:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/coral-reef-card-sketch-a752ef560d2ef81510dcc024f968b2b3.jpg"},81465:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/eez-bbox-eaed173f82fe29cdd6c06782e621ff43.jpg"},94616:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/eez-with-land-a17837dd0ade1b26dd289529dc938a38.jpg"},35162:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/reef-extent-c5b22beda714f8f21941e25144be67f2.jpg"},51899:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/simple-card-table-fb0438e81de84b2fabe0ab3a176cb0c5.jpg"},44424:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/simple-card-view-98fb13a0d5b08444c9a4aff7e8a980e3.jpg"},26730:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/storybook-one-5564fd0bc2a46d74d1c37746689fae7d.jpg"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>i});var r=t(96540);const s={},o=r.createContext(s);function a(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/eb7f1393.35d5be31.js b/assets/js/eb7f1393.35d5be31.js
new file mode 100644
index 0000000000..ecf5a4ba35
--- /dev/null
+++ b/assets/js/eb7f1393.35d5be31.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77933],{86624:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>o,toc:()=>l});var r=s(74848),a=s(28453);const t={},i="Advanced Concepts",o={id:"concepts/AdvancedConcepts",title:"Advanced Concepts",description:"Sketching",source:"@site/docs/concepts/AdvancedConcepts.md",sourceDirName:"concepts",slug:"/concepts/AdvancedConcepts",permalink:"/geoprocessing/docs/next/concepts/AdvancedConcepts",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/concepts/AdvancedConcepts.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Concepts",permalink:"/geoprocessing/docs/next/concepts"},next:{title:"Architecture",permalink:"/geoprocessing/docs/next/architecture"}},c={},l=[{value:"Sketching",id:"sketching",level:2},{value:"Sketch",id:"sketch",level:3},{value:"Sketch Collection",id:"sketch-collection",level:3},{value:"Geographies",id:"geographies",level:2},{value:"Geography Properties",id:"geography-properties",level:3},{value:"Geography Switcher",id:"geography-switcher",level:3},{value:"Datasources",id:"datasources",level:2},{value:"Datasource Properties",id:"datasource-properties",level:3},{value:"External Datasources",id:"external-datasources",level:3},{value:"Internal Vector Datasource",id:"internal-vector-datasource",level:3},{value:"Internal Raster Datasource",id:"internal-raster-datasource",level:3},{value:"Metrics",id:"metrics",level:2},{value:"What can be measured?",id:"what-can-be-measured",level:3},{value:"Metric Group",id:"metric-group",level:3},{value:"Metric group with two data sources",id:"metric-group-with-two-data-sources",level:3},{value:"Metric group with quantitative raster data sources",id:"metric-group-with-quantitative-raster-data-sources",level:3},{value:"Metric group with categorical raster data sources",id:"metric-group-with-categorical-raster-data-sources",level:3},{value:"Objectives",id:"objectives",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"advanced-concepts",children:"Advanced Concepts"})}),"\n",(0,r.jsx)(n.h2,{id:"sketching",children:"Sketching"}),"\n",(0,r.jsx)(n.p,{children:"The core SeaSketch platform allows users to create and collaborate on the design of areas to be managed or used in a specific way. Sketches are the main input to a geoprocessing project for processing and display of reports."}),"\n",(0,r.jsx)(n.h3,{id:"sketch",children:"Sketch"}),"\n",(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.a,{href:"https://seasketch.github.io/geoprocessing/api/interfaces/geoprocessing.Sketch.html",children:"Sketch"})," is a user-drawn feature, typically a Polygon, that can be shared, further altered or put into a Sketch Collection. A Sketch is an extension of a GeoJSON ",(0,r.jsx)(n.a,{href:"https://www.rfc-editor.org/rfc/rfc7946#section-3.2",children:"Feature"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://seasketch.github.io/geoprocessing/api/interfaces/geoprocessing.SketchProperties.html",children:"Sketch Properties"})," are defined for both Sketches and SketchCollections and include key properties allowing sketches to be created and organized within a planning tool."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"id"})," - the unique UUID of this sketch."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"name"})," - the user-provided name"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"sketchClassId"})," - defines what type of sketch it is depending on the ",(0,r.jsx)(n.a,{href:"https://docs.google.com/document/d/1i0baxgK8JEUjtU8mnzFiG5VB_gO8lmxCrAtJ5rltk30/edit?usp=sharing",children:"classification system"})," used (e.g. Marine Reserve, Marine Sanctuary, High Protection MPA, Full Protection MPA)."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"userAttributes"})," - one or more attributes that the user can define on creation, for example a list of allowed activities in this area."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"createdAt"})," - timestamp of original creation"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"updatedAt"})," - timestamp of last edit"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"isCollection"})," - whether or not the object is a sketch or a collection"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"An example of a Sketch is as follows:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "type": "Feature",\n "properties": {\n "name": "fsm-east-west",\n "updatedAt": "2022-11-17T10:02:53.645Z",\n "sketchClassId": "123abc",\n "id": "abc123"\n },\n "geometry": {\n "type": "Polygon",\n "coordinates": [\n [\n [149.3793667126688, 7.033915089905491],\n [167.1102326219892, 7.196404501212555],\n [167.0449537138265, 7.671995147373664],\n [149.3384476090506, 7.40755063883897],\n [149.3793667126688, 7.033915089905491]\n ]\n ]\n }\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["This is a sketch with unique ID ",(0,r.jsx)(n.code,{children:"abc123"})," called ",(0,r.jsx)(n.code,{children:"fsm-east-west"})," because it is a long thin polygon that stretches across the entire EEZ from east to west. You can paste this sketch snippet into ",(0,r.jsx)(n.a,{href:"https://geojson.io",children:"geojson.io"})," and view it."]}),"\n",(0,r.jsx)(n.h3,{id:"sketch-collection",children:"Sketch Collection"}),"\n",(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.a,{href:"https://seasketch.github.io/geoprocessing/api/interfaces/geoprocessing.SketchCollection.html",children:"Sketch Collection"})," is a collection of user-drawn Sketches. It can be used to represent a proposed group of areas. It is an extension of a GeoJSON ",(0,r.jsx)(n.a,{href:"https://www.rfc-editor.org/rfc/rfc7946#section-3.3",children:"FeatureCollection"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "id": 10924,\n "type": "FeatureCollection",\n "features": [\n {\n "id": 10923,\n "bbox": [137.42888, 8.6295395, 138.27959, 9.424693],\n "type": "Feature",\n "geometry": {\n "type": "Polygon",\n "coordinates": [\n [\n [137.428882987, 8.929802778],\n [137.778280122, 8.959815644],\n [138.127677257, 8.629539565],\n [138.279589055, 8.77970155],\n [137.89980956, 9.229818944],\n [137.550412426, 9.424693174],\n [137.428882987, 8.929802778]\n ]\n ]\n },\n "properties": {\n "id": "10923",\n "name": "small-west",\n "createdAt": "2023-01-10T17:20:17.178528+00:00",\n "updatedAt": "2023-01-10T17:20:36.678816+00:00",\n "isCollection": false,\n "sketchClassId": "104",\n "userAttributes": [\n {\n "label": "Author(s)",\n "value": "Tim Welch",\n "exportId": "authors",\n "fieldType": "TextArea"\n },\n {\n "label": "Description",\n "value": "Test sketch",\n "exportId": "descriptionconsider_adding_a_ra",\n "fieldType": "TextArea"\n }\n ]\n }\n }\n ],\n "properties": {\n "id": "10924",\n "name": "yes-contig-ssn",\n "createdAt": "2023-01-10T17:20:33.668529+00:00",\n "updatedAt": "2023-01-10T17:21:07.432889+00:00",\n "description": null,\n "isCollection": true,\n "sketchClassId": "119",\n "userAttributes": [\n {\n "label": "Description",\n "value": "Test collection",\n "exportId": "description",\n "fieldType": "TextArea"\n },\n {\n "label": "Author(s)",\n "value": "Tim Welch",\n "exportId": "authors",\n "fieldType": "TextArea"\n }\n ]\n }\n}\n'})}),"\n",(0,r.jsx)(n.h2,{id:"geographies",children:"Geographies"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Geographies"})," identify polygon or multipolygon boundaries that serve specific purposes in your project. The main use case is to define planning boundaries for your project, if you have them."]}),"\n",(0,r.jsxs)(n.p,{children:["Geographies are contained in ",(0,r.jsx)(n.code,{children:"project/geographies.json"}),". The default Geography for a new project is the ",(0,r.jsx)(n.code,{children:"world"})," geography. It uses the ",(0,r.jsx)(n.code,{children:"world"})," datasource which is a polygon covering the entire extent of the world."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "geographyId": "world",\n "datasourceId": "world",\n "display": "World",\n "groups": ["default-boundary"],\n "precalc": true\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Here is an example of a project with the ",(0,r.jsx)(n.code,{children:"world"})," geography used as the outer boundary, and then 4 subregion geographies:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'[\n {\n "geographyId": "world",\n "datasourceId": "world",\n "display": "World",\n "groups": ["default-boundary"],\n "precalc": true\n },\n {\n "geographyId": "north_sr",\n "datasourceId": "north_sr",\n "display": "North Planning Region",\n "groups": [],\n "precalc": true\n },\n {\n "geographyId": "northcentral_sr",\n "datasourceId": "northcentral_sr",\n "display": "North Central Planning Region",\n "groups": [],\n "precalc": true\n },\n {\n "geographyId": "central_sr",\n "datasourceId": "central_sr",\n "display": "Central Planning Region",\n "groups": [],\n "precalc": true\n },\n {\n "geographyId": "south_sr",\n "datasourceId": "south_sr",\n "display": "South Planning Region",\n "groups": [],\n "precalc": true\n }\n]\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Here is an example of a more elaborate exclusive economic geography. Its boundary polygon(s) are uniquely identified within the larger global EEZ dataset using a ",(0,r.jsx)(n.code,{children:"propertyFilter"})," and ",(0,r.jsx)(n.code,{children:"bboxFilter"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "geographyId": "world",\n "datasourceId": "world",\n "display": "World",\n "groups": [],\n "precalc": false\n },\n {\n "geographyId": "eez",\n "datasourceId": "global-eez-mr-v12",\n "display": "Samoan EEZ",\n "propertyFilter": {\n "property": "GEONAME",\n "values": [\n "Samoan Exclusive Economic Zone"\n ]\n },\n "bboxFilter": [\n -174.51139447157757,\n -15.878383591829206,\n -170.54265693017294,\n -10.960825304544073\n ],\n "groups": [\n "default-boundary"\n ],\n "precalc": true\n }\n'})}),"\n",(0,r.jsx)(n.p,{children:"Once defined, geographies are used in the following ways:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"Preprocessing functions"})," - a preprocessing function can clip a user-drawn sketch to one or more geographies so that they are guaranteed to be within it."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"Precalc"}),' - the precalc command calculates overall metrics (total area, count, sum of value) within each geography for each datasource. These precalc metrics are used to report a sketches % overlap with a datasource "per geography".']}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"Geoprocessing functions"}),' - geoprocessing functions can perform spatial analysis and report results "per geography" by clipping a user-drawn sketch to each geography and doing the analysis once for each.']}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"Report clients"}),' - report clients are able to display metrics "per geography" and even allow the user to switch between geographies, viewing results for them one at a time.']}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"You are not required to use the Geographies feature, though it has first-class in the framework."}),"\n",(0,r.jsx)(n.h3,{id:"geography-properties",children:"Geography Properties"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"geographyId"})," (string) - unique ID of the geography"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"datasourceId"})," (string) - unique ID of the datasource containing Geography bondary"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"display"})," (string) - display name for the Geography. Can be used with GeographySwitcher to allow user to select a Geography."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"layerId"})," (string, optional) - unique ID of external layer for visualizing the Geography. Can be used with LayerSwitcher to send layer toggle event via iFrame."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"groups"})," (string[], optional) - allows geography to identify as a member of one or more ad-hoc groups. A default geography which identifies the planning boundary must be assigned to the ",(0,r.jsx)(n.code,{children:"default-boundary"})," group."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"precalc"})," (boolean) - whether or not datasources should be precalculated against this geography."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"propertyFilter"})," (object[], optional) - for vector datasources only, defines filter to constrain geography features, matches feature property having one or more specific values."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"property"})," (string) - name of vector feature property to use in filter"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"values"})," (string | number[]) - one or more values to match on to include features. For example you could match on one or more EEZ names, or one or more smaller planning boundaries."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"bboxFilter"})," ([number, number, number, number]) - constrain geography to only features within a bounding box"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"geography-switcher",children:"Geography Switcher"}),"\n",(0,r.jsxs)(n.p,{children:["By default, a report will only display results for one geography at a time if the geoprocessing functions are designed to only process one geography at a time. A ",(0,r.jsx)(n.code,{children:"GeographySwitcher"})," is typically used to provide the ability to switch geographies, which will run the geoprocessing functions with a different geography input."]}),"\n",(0,r.jsx)(n.p,{children:"You could write a geoprocessing function that processes all geographies in one run, you just have to take into consideration the processing time required to complete it."}),"\n",(0,r.jsx)(n.h2,{id:"datasources",children:"Datasources"}),"\n",(0,r.jsxs)(n.p,{children:["A datasource represents a spatial dataset, including what type it is, how to acces it, and optionally some key statistics for the whole dataset (count, sum, area). Datasources are a combination of ",(0,r.jsx)(n.code,{children:"vector"})," or ",(0,r.jsx)(n.code,{children:"raster"})," and ",(0,r.jsx)(n.code,{children:"internal"})," or ",(0,r.jsx)(n.code,{children:"external"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"datasource-properties",children:"Datasource Properties"}),"\n",(0,r.jsx)(n.p,{children:"Base:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"datasourceId"})," - unique string identifier for datasource."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"geo_type"})," - vector | raster"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/d633b20/packages/geoprocessing/src/types/datasource.ts#L11",children:"formats"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://flatgeobuf.org/",children:"fgb"})," - Flatgeobuf. Efficient file and network transfer size."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://geojson.org/",children:"json"})," - GeoJSON. Easy to use and human readable."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/seasketch/union-subdivided-polygons",children:"subdivided"})," - Subdivided polygons that can be unioned back together. Efficient file and network transfer size"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://www.cogeo.org/",children:"tif"})," - Cloud-optimized GeoTiff. Efficient network transfer size."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Vector:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"layerName"})," - name of layer within datasource to import, if format support multiple layers. Otherwise layername should match the ",(0,r.jsx)(n.code,{children:"src"})," dataset name, minus the extension (e.g. eez.shp has layerName of eez)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"classKeys"}),': names of properties that data classes will be created for (e.g. "reef_type" property with name of reef type feature represents.)']}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Raster:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"measurementType"})," - quantitative | categorical"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"band"})," - band number to import from source dataset"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"noDataValue"})," - value that if assigned to a raster cell, should not be counted as data."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"External:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"url"})," - url to access the datasource at"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Internal:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"src"})," - local file path to access the datasource at"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"external-datasources",children:"External Datasources"}),"\n",(0,r.jsxs)(n.p,{children:["External ",(0,r.jsx)(n.a,{href:"https://seasketch.github.io/geoprocessing/api/modules/geoprocessing.html#ExternalVectorDatasource",children:"vector"})," and ",(0,r.jsx)(n.a,{href:"https://seasketch.github.io/geoprocessing/api/modules/geoprocessing.html#ExternalRasterDatasource",children:"raster"})," datasources are published on the Internet, external to the geoprocessing project and its stack. This is commonly used for what are called ",(0,r.jsx)(n.code,{children:"global"})," datasets that any geoprocessing project can use."]}),"\n",(0,r.jsx)(n.p,{children:"Global datasets are published independently and available for use in each project. They include:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"eez_union_land"})," (version 3, based on EEZ version 11). This is the union of world country boundaries and Exclusive Economic Zones (EEZs) which are 200 nautical miles . This allows a polygon be clipped to the outer EEZ boundary without using the Marine Regions interpretation of the shoreline which can be very coarse - ",(0,r.jsx)(n.a,{href:"https://marineregions.org/downloads.php",children:"https://marineregions.org/downloads.php"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"osm_land"})," (latest snapshot at time of download). Derived from OpenStreetMap ways tagged with natural=coastline. Uses the OSMCoastline program to assembline a single contigous polygon dataset."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"internal-vector-datasource",children:"Internal Vector Datasource"}),"\n",(0,r.jsxs)(n.p,{children:["Internal ",(0,r.jsx)(n.a,{href:"https://seasketch.github.io/geoprocessing/api/modules/geoprocessing.html#InternalVectorDatasource",children:"vector"})," datasource have a ",(0,r.jsx)(n.code,{children:"src"})," path as well as optional ",(0,r.jsx)(n.code,{children:"layerName"})," and ",(0,r.jsx)(n.code,{children:"classKeys"})," properties."]}),"\n",(0,r.jsxs)(n.p,{children:["This example is for an ",(0,r.jsx)(n.code,{children:"eez"})," boundary datasets, that is imported from the ",(0,r.jsx)(n.code,{children:"current-vector"})," geopackage with layerName ",(0,r.jsx)(n.code,{children:"eez_mr_osm"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "datasourceId": "eez",\n "geo_type": "vector",\n "formats": ["fgb"],\n "layerName": "eez_mr_osm",\n "classKeys": [],\n "created": "2022-11-16T23:04:19.554Z",\n "lastUpdated": "2023-01-19T03:00:30.544Z",\n "src": "data/src/Analytics/current-vector.gpkg",\n "propertiesToKeep": []\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"internal-raster-datasource",children:"Internal Raster Datasource"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "datasourceId": "depth_zone_photic",\n "geo_type": "raster",\n "formats": ["tif"],\n "measurementType": "quantitative",\n "band": 1,\n "noDataValue": -3.3999999521443642e38,\n "created": "2022-11-21T21:44:08.941Z",\n "lastUpdated": "2023-01-19T03:00:39.518Z",\n "src": " data/src/Data_Received/EmLab/offshore/inputs/features/photic_zone.tif"\n}\n'})}),"\n",(0,r.jsx)(n.h2,{id:"metrics",children:"Metrics"}),"\n",(0,r.jsx)(n.p,{children:"Metrics are measurements, whether statistical, geometric, or something more qualitative."}),"\n",(0,r.jsxs)(n.p,{children:["In the geoprocessing framework a ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metric",children:"Metric"})," refers specifically to a single recorded ",(0,r.jsx)(n.code,{children:"value"}),", for one or more dimensions. A geoprocessing function might return an array with hundreds of ",(0,r.jsx)(n.code,{children:"Metric"})," values."]}),"\n",(0,r.jsx)(n.p,{children:"The following is an example of a single Metric object."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "metricId": "boundary-area",\n "sketchId": "abc123",\n "classId": "eez",\n "groupId": null,\n "geographyId": null,\n "value": 75066893245.88089,\n "extra": {\n "sketchName": "fsm-east-west"\n }\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["It's a metric measuring the area of boundaries for sketch ",(0,r.jsx)(n.code,{children:"abc123"}),", measuring an overlap of ",(0,r.jsx)(n.code,{children:"75066893245.88089 square meters"})," with the ",(0,r.jsx)(n.code,{children:"eez"})," boundary. There is no associated group or geography. The name of the sketch is additionally included for human readability."]}),"\n",(0,r.jsxs)(n.p,{children:["The base properties for a ",(0,r.jsx)(n.code,{children:"Metric"})," are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"metricId"})," - the unique id of the metric"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"value"})," - the numeric value of the measurement."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"extra"})," - additional properties that can be added as needed."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["A Metric has properties for one or more standard ",(0,r.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/d633b20/packages/geoprocessing/src/types/metrics.ts#L5",children:"dimensions"}),". These are used for ",(0,r.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Stratified_sampling",children:"stratifying"})," data. A ",(0,r.jsx)(n.code,{children:"null"})," value for an individual metric object property indicates the dimension does not apply."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"sketchId"})," - optional id of sketch this measurement is for."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"classId"})," - optional id of data class that this metric is for.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Example - boundary overlap metrics may be categorized by boundary type (e.g. eez, offshore, nearshore). This ID can often be used to represent informal geographic boundaries instead of formal ",(0,r.jsx)(n.code,{children:"Geographies"})," like with ",(0,r.jsx)(n.code,{children:"geographyId"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"groupId"})," - optional id of group that this metric is for. Groups are typically not defined by the datasource, but by the planning process.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Example - protections levels, where all of the sketches in a collection may be grouped by the protection level they achieve (low, high, full) and their metrics combined into an aggregate value for each level."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"geographyId"})," - optional id of a ",(0,r.jsx)(n.code,{children:"Geography"})," that this metric is for.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Example - you want to stratify by multiple jurisdictional boundaries (eez, nearshore, offshore) and you also want to stratify by multiple distinct environmental regions defined by natural clusterings of depth, species, seabottom, etc. (region 1, region 2, region 3). This allows you to answer for example how much does a sketch overlap with areas that are nearshore and environmental region 1? You can use classId for the jurisdictional boundaries and ",(0,r.jsx)(n.code,{children:"groupId"})," for the environmental regions."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"what-can-be-measured",children:"What can be measured?"}),"\n",(0,r.jsxs)(n.p,{children:["A number of metrics can be calculated by overlaying a sketch with a vector or raster datasource. See the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/geoprocessing",children:"geoprocessing"})," guide for more information. Common ",(0,r.jsx)(n.code,{children:"metricIds"})," include:"]}),"\n",(0,r.jsx)(n.p,{children:"Vector:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"/** Area of vector features in square meters */\narea: number;\n/** Number of vector features */\ncount: number;\n"})}),"\n",(0,r.jsx)(n.p,{children:"Raster:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"/** Number of cells that are not nodata */\nvalid?: number;\n/** Number of nodata cells in raster */\ninvalid?: number;\n/** Total number of cells in raster, valid or invalid */\ncount?: number;\n/** Area of valid cells in raster in square meters */\narea?: number;\n/** Minimum value of valid cells in raster */\nmin?: Nullable;\n/** Maximum value of any one valid cell in raster */\nmax?: Nullable;\n/** Mean average value of valid cells in raster */\nmean?: Nullable;\n/** Median average value of valid cells in raster */\nmedian?: Nullable;\n/** Mode of valid cells in raster */\nmode?: Nullable;\n/** Different between min and max value */\nrange?: Nullable;\n/** Sum of all valid cennls in raster */\nsum?: number;\n/** Standard deviation of valid cells in raster */\nstd?: Nullable;\n/** Statistical measurement of spread between values in raster */\nvariance?: Nullable;\n**/\n"})}),"\n",(0,r.jsx)(n.h3,{id:"metric-group",children:"Metric Group"}),"\n",(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metricGroup.ts#L11",children:"MetricGroup"})," defines a specific type of metric for your project, with a base metric type, and one or more data classes. Think of it as a unifying configuration object, that pulls everything together."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/dataclass.ts#L8",children:"DataClass"})," - represents a single class of data. It ties it to an underlying datasource, and holds attributes used for displaying the class in user interfaces."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"The following is an example of a MetricGroup object containing an array of DataClass objects:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "metricId": "boundary-area",\n "type": "areaOverlap",\n "classes": [\n {\n "classId": "eez",\n "display": "EEZ",\n "datasourceId": "eez",\n "objectiveId": "eez",\n "layerId": "607b3caa11ccf2303daf87c5"\n },\n {\n "classId": "offshore",\n "display": "Offshore",\n "datasourceId": "offshore",\n "objectiveId": "offshore",\n "layerId": "607b3caa11ccf2303daf87c7"\n },\n {\n "classId": "contiguous",\n "display": "Contiguous",\n "datasourceId": "12_24_nm_boundary",\n "objectiveId": "12_24_zone",\n "layerId": "607b3caa11ccf2303daf87c9"\n }\n ]\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["This defines a ",(0,r.jsx)(n.code,{children:"boundaryAreaOverlap"})," metric of type ",(0,r.jsx)(n.code,{children:"areaOverlap"}),", which we define to represent the area of overlap between a sketch and a given boundary polygon or multipolygon. In this case 3 different boundaries are configured as data classes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"eez - 0-200 nautical miles"}),"\n",(0,r.jsx)(n.li,{children:"offshore - typically 12-200 nautical miles"}),"\n",(0,r.jsx)(n.li,{children:"nearshore - typically 0-12 nautical miles, aka territorial sea boundary."}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Each data class points to its own datasource. And you can assume each of those datasources contain a single polygon boundary. It's also acceptable to have a single datasource, with 3 different boundaries in it, and an attribute to differentiate them, which would become the ",(0,r.jsx)(n.code,{children:"classId"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Each data ",(0,r.jsx)(n.code,{children:"class"})," can be tied to its own planning ",(0,r.jsx)(n.code,{children:"objective"}),", and its own map ",(0,r.jsx)(n.code,{children:"layer"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"metric-group-with-two-data-sources",children:"Metric group with two data sources"}),"\n",(0,r.jsx)(n.p,{children:"You can have a metric group where each class references a different datasource. If we wanted both the reef extent data and benthic habitat data in one report, the metric group can look as follows:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "metricId": "benthicHabitat",\n "type": "areaOverlap",\n "classes": [\n {\n "classId": "reefextent",\n "display": "Coral Reef",\n "datasourceId": "reefextent"\n },\n {\n "classId": "Sand",\n "classKey": "class",\n "display": "Sand",\n "datasourceId": "benthic"\n },\n {\n "classId": "Rock",\n "classKey": "class",\n "display": "Rock",\n "datasourceId": "benthic"\n },\n {\n "classId": "Rubble",\n "classKey": "class",\n "display": "Rubble",\n "datasourceId": "benthic"\n }\n ]\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"metric-group-with-quantitative-raster-data-sources",children:"Metric group with quantitative raster data sources"}),"\n",(0,r.jsxs)(n.p,{children:["An example of a metric group ",(0,r.jsx)(n.code,{children:"fishingEffort"})," which displays multiple quantitative raster data files. This report has been made using ",(0,r.jsx)(n.a,{href:"https://globalfishingwatch.org/dataset-and-code-fishing-effort/",children:"Global Fishing Watch Apparent Fishing Effort data"}),", which reports fishing effort in hours. To calculate for the sum of fishing effort within our plan, we would use ",(0,r.jsx)(n.code,{children:"type = valueOverlap"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "metricId": "fishingEffort",\n "type": "valueOverlap",\n "classes": [\n {\n "datasourceId": "all-fishing",\n "classId": "all-fishing",\n "display": "All Fishing 2019-2022"\n },\n {\n "datasourceId": "drifting-longlines",\n "classId": "drifting-longlines",\n "display": "Drifting Longline"\n },\n {\n "datasourceId": "pole-and-line",\n "classId": "pole-and-line",\n "display": "Pole and Line"\n },\n {\n "datasourceId": "set-longlines",\n "classId": "set-longlines",\n "display": "Set Longline"\n },\n {\n "datasourceId": "fixed-gear",\n "classId": "fixed-gear",\n "display": "Fixed Gear"\n }\n ]\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"metric-group-with-categorical-raster-data-sources",children:"Metric group with categorical raster data sources"}),"\n",(0,r.jsxs)(n.p,{children:["An example of a metric group ",(0,r.jsx)(n.code,{children:"fishRichness"})," which displays a categorical raster ",(0,r.jsx)(n.code,{children:"fishRichness.tif"}),". The raster data displays the number of key fish species present in each raster cell -- from 1 to 5 species. ",(0,r.jsx)(n.code,{children:"classId"})," should be set to the corresponding numerical value within the raster."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "metricId": "fishRichness",\n "type": "countOverlap",\n "classes": [\n {\n "datasourceId": "fishRichness",\n "classId": "1",\n "display": "1 species"\n },\n {\n "datasourceId": "fishRichness",\n "classId": "2",\n "display": "2 species"\n },\n {\n "datasourceId": "fishRichness",\n "classId": "3",\n "display": "3 species"\n },\n {\n "datasourceId": "fishRichness",\n "classId": "4",\n "display": "4 species"\n },\n {\n "datasourceId": "fixed-gear",\n "classId": "5",\n "display": "5 species"\n }\n ]\n}\n'})}),"\n",(0,r.jsx)(n.h2,{id:"objectives",children:"Objectives"}),"\n",(0,r.jsxs)(n.p,{children:["Each planning ",(0,r.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/d633b202a855689655032bdb290e036f2733b33d/packages/geoprocessing/src/types/objective.ts",children:"objective"})," defines a target and 1 or more protection levels that count towards that target. The default protection level is ",(0,r.jsx)(n.code,{children:"Fully Protected Area"})," which means no activities are allowed. You can learn more about MPA ",(0,r.jsx)(n.a,{href:"https://docs.google.com/document/d/1i0baxgK8JEUjtU8mnzFiG5VB_gO8lmxCrAtJ5rltk30/edit?usp=sharing",children:"classification schemes"})]}),"\n",(0,r.jsx)(n.p,{children:"In the geoprocessing framework, objectives are structured as follows:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "objectiveId": "eez",\n "shortDesc": "EEZ Objective",\n "target": 0.2,\n "countsToward": {\n "Fully Protected Area": "yes"\n }\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["This is an objective to target protection of at least ",(0,r.jsx)(n.code,{children:"20%"})," of the ",(0,r.jsx)(n.code,{children:"eez"})," boundary, which is defined as the shoreline out to 200 nautical miles. A proposed area must be classified as a ",(0,r.jsx)(n.code,{children:"Fully Protected Area"})," to count towards this objective."]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>o});var r=s(96540);const a={},t=r.createContext(a);function i(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/eb7f1393.db1f030c.js b/assets/js/eb7f1393.db1f030c.js
deleted file mode 100644
index 6aabb0c977..0000000000
--- a/assets/js/eb7f1393.db1f030c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77933],{86624:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>o,toc:()=>l});var r=s(74848),a=s(28453);const t={},i="Advanced Concepts",o={id:"concepts/AdvancedConcepts",title:"Advanced Concepts",description:"Sketching",source:"@site/docs/concepts/AdvancedConcepts.md",sourceDirName:"concepts",slug:"/concepts/AdvancedConcepts",permalink:"/geoprocessing/docs/next/concepts/AdvancedConcepts",draft:!1,unlisted:!1,editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/docs/concepts/AdvancedConcepts.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Skill Building",permalink:"/geoprocessing/docs/next/skills"},next:{title:"Link Project Data",permalink:"/geoprocessing/docs/next/linkData"}},c={},l=[{value:"Sketching",id:"sketching",level:2},{value:"Sketch",id:"sketch",level:3},{value:"Sketch Collection",id:"sketch-collection",level:3},{value:"Geographies",id:"geographies",level:2},{value:"Geography Properties",id:"geography-properties",level:3},{value:"Geography Switcher",id:"geography-switcher",level:3},{value:"Datasources",id:"datasources",level:2},{value:"Datasource Properties",id:"datasource-properties",level:3},{value:"External Datasources",id:"external-datasources",level:3},{value:"Internal Vector Datasource",id:"internal-vector-datasource",level:3},{value:"Internal Raster Datasource",id:"internal-raster-datasource",level:3},{value:"Metrics",id:"metrics",level:2},{value:"What can be measured?",id:"what-can-be-measured",level:3},{value:"Metric Group",id:"metric-group",level:3},{value:"Metric group with two data sources",id:"metric-group-with-two-data-sources",level:3},{value:"Metric group with quantitative raster data sources",id:"metric-group-with-quantitative-raster-data-sources",level:3},{value:"Metric group with categorical raster data sources",id:"metric-group-with-categorical-raster-data-sources",level:3},{value:"Objectives",id:"objectives",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"advanced-concepts",children:"Advanced Concepts"})}),"\n",(0,r.jsx)(n.h2,{id:"sketching",children:"Sketching"}),"\n",(0,r.jsx)(n.p,{children:"The core SeaSketch platform allows users to create and collaborate on the design of areas to be managed or used in a specific way. Sketches are the main input to a geoprocessing project for processing and display of reports."}),"\n",(0,r.jsx)(n.h3,{id:"sketch",children:"Sketch"}),"\n",(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.a,{href:"https://seasketch.github.io/geoprocessing/api/interfaces/geoprocessing.Sketch.html",children:"Sketch"})," is a user-drawn feature, typically a Polygon, that can be shared, further altered or put into a Sketch Collection. A Sketch is an extension of a GeoJSON ",(0,r.jsx)(n.a,{href:"https://www.rfc-editor.org/rfc/rfc7946#section-3.2",children:"Feature"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://seasketch.github.io/geoprocessing/api/interfaces/geoprocessing.SketchProperties.html",children:"Sketch Properties"})," are defined for both Sketches and SketchCollections and include key properties allowing sketches to be created and organized within a planning tool."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"id"})," - the unique UUID of this sketch."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"name"})," - the user-provided name"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"sketchClassId"})," - defines what type of sketch it is depending on the ",(0,r.jsx)(n.a,{href:"https://docs.google.com/document/d/1i0baxgK8JEUjtU8mnzFiG5VB_gO8lmxCrAtJ5rltk30/edit?usp=sharing",children:"classification system"})," used (e.g. Marine Reserve, Marine Sanctuary, High Protection MPA, Full Protection MPA)."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"userAttributes"})," - one or more attributes that the user can define on creation, for example a list of allowed activities in this area."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"createdAt"})," - timestamp of original creation"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"updatedAt"})," - timestamp of last edit"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"isCollection"})," - whether or not the object is a sketch or a collection"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"An example of a Sketch is as follows:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "type": "Feature",\n "properties": {\n "name": "fsm-east-west",\n "updatedAt": "2022-11-17T10:02:53.645Z",\n "sketchClassId": "123abc",\n "id": "abc123"\n },\n "geometry": {\n "type": "Polygon",\n "coordinates": [\n [\n [149.3793667126688, 7.033915089905491],\n [167.1102326219892, 7.196404501212555],\n [167.0449537138265, 7.671995147373664],\n [149.3384476090506, 7.40755063883897],\n [149.3793667126688, 7.033915089905491]\n ]\n ]\n }\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["This is a sketch with unique ID ",(0,r.jsx)(n.code,{children:"abc123"})," called ",(0,r.jsx)(n.code,{children:"fsm-east-west"})," because it is a long thin polygon that stretches across the entire EEZ from east to west. You can paste this sketch snippet into ",(0,r.jsx)(n.a,{href:"https://geojson.io",children:"geojson.io"})," and view it."]}),"\n",(0,r.jsx)(n.h3,{id:"sketch-collection",children:"Sketch Collection"}),"\n",(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.a,{href:"https://seasketch.github.io/geoprocessing/api/interfaces/geoprocessing.SketchCollection.html",children:"Sketch Collection"})," is a collection of user-drawn Sketches. It can be used to represent a proposed group of areas. It is an extension of a GeoJSON ",(0,r.jsx)(n.a,{href:"https://www.rfc-editor.org/rfc/rfc7946#section-3.3",children:"FeatureCollection"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "id": 10924,\n "type": "FeatureCollection",\n "features": [\n {\n "id": 10923,\n "bbox": [137.42888, 8.6295395, 138.27959, 9.424693],\n "type": "Feature",\n "geometry": {\n "type": "Polygon",\n "coordinates": [\n [\n [137.428882987, 8.929802778],\n [137.778280122, 8.959815644],\n [138.127677257, 8.629539565],\n [138.279589055, 8.77970155],\n [137.89980956, 9.229818944],\n [137.550412426, 9.424693174],\n [137.428882987, 8.929802778]\n ]\n ]\n },\n "properties": {\n "id": "10923",\n "name": "small-west",\n "createdAt": "2023-01-10T17:20:17.178528+00:00",\n "updatedAt": "2023-01-10T17:20:36.678816+00:00",\n "isCollection": false,\n "sketchClassId": "104",\n "userAttributes": [\n {\n "label": "Author(s)",\n "value": "Tim Welch",\n "exportId": "authors",\n "fieldType": "TextArea"\n },\n {\n "label": "Description",\n "value": "Test sketch",\n "exportId": "descriptionconsider_adding_a_ra",\n "fieldType": "TextArea"\n }\n ]\n }\n }\n ],\n "properties": {\n "id": "10924",\n "name": "yes-contig-ssn",\n "createdAt": "2023-01-10T17:20:33.668529+00:00",\n "updatedAt": "2023-01-10T17:21:07.432889+00:00",\n "description": null,\n "isCollection": true,\n "sketchClassId": "119",\n "userAttributes": [\n {\n "label": "Description",\n "value": "Test collection",\n "exportId": "description",\n "fieldType": "TextArea"\n },\n {\n "label": "Author(s)",\n "value": "Tim Welch",\n "exportId": "authors",\n "fieldType": "TextArea"\n }\n ]\n }\n}\n'})}),"\n",(0,r.jsx)(n.h2,{id:"geographies",children:"Geographies"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Geographies"})," identify polygon or multipolygon boundaries that serve specific purposes in your project. The main use case is to define planning boundaries for your project, if you have them."]}),"\n",(0,r.jsxs)(n.p,{children:["Geographies are contained in ",(0,r.jsx)(n.code,{children:"project/geographies.json"}),". The default Geography for a new project is the ",(0,r.jsx)(n.code,{children:"world"})," geography. It uses the ",(0,r.jsx)(n.code,{children:"world"})," datasource which is a polygon covering the entire extent of the world."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "geographyId": "world",\n "datasourceId": "world",\n "display": "World",\n "groups": ["default-boundary"],\n "precalc": true\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Here is an example of a project with the ",(0,r.jsx)(n.code,{children:"world"})," geography used as the outer boundary, and then 4 subregion geographies:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'[\n {\n "geographyId": "world",\n "datasourceId": "world",\n "display": "World",\n "groups": ["default-boundary"],\n "precalc": true\n },\n {\n "geographyId": "north_sr",\n "datasourceId": "north_sr",\n "display": "North Planning Region",\n "groups": [],\n "precalc": true\n },\n {\n "geographyId": "northcentral_sr",\n "datasourceId": "northcentral_sr",\n "display": "North Central Planning Region",\n "groups": [],\n "precalc": true\n },\n {\n "geographyId": "central_sr",\n "datasourceId": "central_sr",\n "display": "Central Planning Region",\n "groups": [],\n "precalc": true\n },\n {\n "geographyId": "south_sr",\n "datasourceId": "south_sr",\n "display": "South Planning Region",\n "groups": [],\n "precalc": true\n }\n]\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Here is an example of a more elaborate exclusive economic geography. Its boundary polygon(s) are uniquely identified within the larger global EEZ dataset using a ",(0,r.jsx)(n.code,{children:"propertyFilter"})," and ",(0,r.jsx)(n.code,{children:"bboxFilter"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "geographyId": "world",\n "datasourceId": "world",\n "display": "World",\n "groups": [],\n "precalc": false\n },\n {\n "geographyId": "eez",\n "datasourceId": "global-eez-mr-v12",\n "display": "Samoan EEZ",\n "propertyFilter": {\n "property": "GEONAME",\n "values": [\n "Samoan Exclusive Economic Zone"\n ]\n },\n "bboxFilter": [\n -174.51139447157757,\n -15.878383591829206,\n -170.54265693017294,\n -10.960825304544073\n ],\n "groups": [\n "default-boundary"\n ],\n "precalc": true\n }\n'})}),"\n",(0,r.jsx)(n.p,{children:"Once defined, geographies are used in the following ways:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"Preprocessing functions"})," - a preprocessing function can clip a user-drawn sketch to one or more geographies so that they are guaranteed to be within it."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"Precalc"}),' - the precalc command calculates overall metrics (total area, count, sum of value) within each geography for each datasource. These precalc metrics are used to report a sketches % overlap with a datasource "per geography".']}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"Geoprocessing functions"}),' - geoprocessing functions can perform spatial analysis and report results "per geography" by clipping a user-drawn sketch to each geography and doing the analysis once for each.']}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"Report clients"}),' - report clients are able to display metrics "per geography" and even allow the user to switch between geographies, viewing results for them one at a time.']}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"You are not required to use the Geographies feature, though it has first-class in the framework."}),"\n",(0,r.jsx)(n.h3,{id:"geography-properties",children:"Geography Properties"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"geographyId"})," (string) - unique ID of the geography"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"datasourceId"})," (string) - unique ID of the datasource containing Geography bondary"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"display"})," (string) - display name for the Geography. Can be used with GeographySwitcher to allow user to select a Geography."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"layerId"})," (string, optional) - unique ID of external layer for visualizing the Geography. Can be used with LayerSwitcher to send layer toggle event via iFrame."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"groups"})," (string[], optional) - allows geography to identify as a member of one or more ad-hoc groups. A default geography which identifies the planning boundary must be assigned to the ",(0,r.jsx)(n.code,{children:"default-boundary"})," group."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"precalc"})," (boolean) - whether or not datasources should be precalculated against this geography."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"propertyFilter"})," (object[], optional) - for vector datasources only, defines filter to constrain geography features, matches feature property having one or more specific values."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"property"})," (string) - name of vector feature property to use in filter"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"values"})," (string | number[]) - one or more values to match on to include features. For example you could match on one or more EEZ names, or one or more smaller planning boundaries."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"bboxFilter"})," ([number, number, number, number]) - constrain geography to only features within a bounding box"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"geography-switcher",children:"Geography Switcher"}),"\n",(0,r.jsxs)(n.p,{children:["By default, a report will only display results for one geography at a time if the geoprocessing functions are designed to only process one geography at a time. A ",(0,r.jsx)(n.code,{children:"GeographySwitcher"})," is typically used to provide the ability to switch geographies, which will run the geoprocessing functions with a different geography input."]}),"\n",(0,r.jsx)(n.p,{children:"You could write a geoprocessing function that processes all geographies in one run, you just have to take into consideration the processing time required to complete it."}),"\n",(0,r.jsx)(n.h2,{id:"datasources",children:"Datasources"}),"\n",(0,r.jsxs)(n.p,{children:["A datasource represents a spatial dataset, including what type it is, how to acces it, and optionally some key statistics for the whole dataset (count, sum, area). Datasources are a combination of ",(0,r.jsx)(n.code,{children:"vector"})," or ",(0,r.jsx)(n.code,{children:"raster"})," and ",(0,r.jsx)(n.code,{children:"internal"})," or ",(0,r.jsx)(n.code,{children:"external"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"datasource-properties",children:"Datasource Properties"}),"\n",(0,r.jsx)(n.p,{children:"Base:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"datasourceId"})," - unique string identifier for datasource."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"geo_type"})," - vector | raster"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/d633b20/packages/geoprocessing/src/types/datasource.ts#L11",children:"formats"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://flatgeobuf.org/",children:"fgb"})," - Flatgeobuf. Efficient file and network transfer size."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://geojson.org/",children:"json"})," - GeoJSON. Easy to use and human readable."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/seasketch/union-subdivided-polygons",children:"subdivided"})," - Subdivided polygons that can be unioned back together. Efficient file and network transfer size"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://www.cogeo.org/",children:"tif"})," - Cloud-optimized GeoTiff. Efficient network transfer size."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Vector:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"layerName"})," - name of layer within datasource to import, if format support multiple layers. Otherwise layername should match the ",(0,r.jsx)(n.code,{children:"src"})," dataset name, minus the extension (e.g. eez.shp has layerName of eez)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"classKeys"}),': names of properties that data classes will be created for (e.g. "reef_type" property with name of reef type feature represents.)']}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Raster:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"measurementType"})," - quantitative | categorical"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"band"})," - band number to import from source dataset"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"noDataValue"})," - value that if assigned to a raster cell, should not be counted as data."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"External:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"url"})," - url to access the datasource at"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Internal:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"src"})," - local file path to access the datasource at"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"external-datasources",children:"External Datasources"}),"\n",(0,r.jsxs)(n.p,{children:["External ",(0,r.jsx)(n.a,{href:"https://seasketch.github.io/geoprocessing/api/modules/geoprocessing.html#ExternalVectorDatasource",children:"vector"})," and ",(0,r.jsx)(n.a,{href:"https://seasketch.github.io/geoprocessing/api/modules/geoprocessing.html#ExternalRasterDatasource",children:"raster"})," datasources are published on the Internet, external to the geoprocessing project and its stack. This is commonly used for what are called ",(0,r.jsx)(n.code,{children:"global"})," datasets that any geoprocessing project can use."]}),"\n",(0,r.jsx)(n.p,{children:"Global datasets are published independently and available for use in each project. They include:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"eez_union_land"})," (version 3, based on EEZ version 11). This is the union of world country boundaries and Exclusive Economic Zones (EEZs) which are 200 nautical miles . This allows a polygon be clipped to the outer EEZ boundary without using the Marine Regions interpretation of the shoreline which can be very coarse - ",(0,r.jsx)(n.a,{href:"https://marineregions.org/downloads.php",children:"https://marineregions.org/downloads.php"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"osm_land"})," (latest snapshot at time of download). Derived from OpenStreetMap ways tagged with natural=coastline. Uses the OSMCoastline program to assembline a single contigous polygon dataset."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"internal-vector-datasource",children:"Internal Vector Datasource"}),"\n",(0,r.jsxs)(n.p,{children:["Internal ",(0,r.jsx)(n.a,{href:"https://seasketch.github.io/geoprocessing/api/modules/geoprocessing.html#InternalVectorDatasource",children:"vector"})," datasource have a ",(0,r.jsx)(n.code,{children:"src"})," path as well as optional ",(0,r.jsx)(n.code,{children:"layerName"})," and ",(0,r.jsx)(n.code,{children:"classKeys"})," properties."]}),"\n",(0,r.jsxs)(n.p,{children:["This example is for an ",(0,r.jsx)(n.code,{children:"eez"})," boundary datasets, that is imported from the ",(0,r.jsx)(n.code,{children:"current-vector"})," geopackage with layerName ",(0,r.jsx)(n.code,{children:"eez_mr_osm"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "datasourceId": "eez",\n "geo_type": "vector",\n "formats": ["fgb"],\n "layerName": "eez_mr_osm",\n "classKeys": [],\n "created": "2022-11-16T23:04:19.554Z",\n "lastUpdated": "2023-01-19T03:00:30.544Z",\n "src": "data/src/Analytics/current-vector.gpkg",\n "propertiesToKeep": []\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"internal-raster-datasource",children:"Internal Raster Datasource"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "datasourceId": "depth_zone_photic",\n "geo_type": "raster",\n "formats": ["tif"],\n "measurementType": "quantitative",\n "band": 1,\n "noDataValue": -3.3999999521443642e38,\n "created": "2022-11-21T21:44:08.941Z",\n "lastUpdated": "2023-01-19T03:00:39.518Z",\n "src": " data/src/Data_Received/EmLab/offshore/inputs/features/photic_zone.tif"\n}\n'})}),"\n",(0,r.jsx)(n.h2,{id:"metrics",children:"Metrics"}),"\n",(0,r.jsx)(n.p,{children:"Metrics are measurements, whether statistical, geometric, or something more qualitative."}),"\n",(0,r.jsxs)(n.p,{children:["In the geoprocessing framework a ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metric",children:"Metric"})," refers specifically to a single recorded ",(0,r.jsx)(n.code,{children:"value"}),", for one or more dimensions. A geoprocessing function might return an array with hundreds of ",(0,r.jsx)(n.code,{children:"Metric"})," values."]}),"\n",(0,r.jsx)(n.p,{children:"The following is an example of a single Metric object."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "metricId": "boundary-area",\n "sketchId": "abc123",\n "classId": "eez",\n "groupId": null,\n "geographyId": null,\n "value": 75066893245.88089,\n "extra": {\n "sketchName": "fsm-east-west"\n }\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["It's a metric measuring the area of boundaries for sketch ",(0,r.jsx)(n.code,{children:"abc123"}),", measuring an overlap of ",(0,r.jsx)(n.code,{children:"75066893245.88089 square meters"})," with the ",(0,r.jsx)(n.code,{children:"eez"})," boundary. There is no associated group or geography. The name of the sketch is additionally included for human readability."]}),"\n",(0,r.jsxs)(n.p,{children:["The base properties for a ",(0,r.jsx)(n.code,{children:"Metric"})," are:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"metricId"})," - the unique id of the metric"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"value"})," - the numeric value of the measurement."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"extra"})," - additional properties that can be added as needed."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["A Metric has properties for one or more standard ",(0,r.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/d633b20/packages/geoprocessing/src/types/metrics.ts#L5",children:"dimensions"}),". These are used for ",(0,r.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Stratified_sampling",children:"stratifying"})," data. A ",(0,r.jsx)(n.code,{children:"null"})," value for an individual metric object property indicates the dimension does not apply."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"sketchId"})," - optional id of sketch this measurement is for."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"classId"})," - optional id of data class that this metric is for.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Example - boundary overlap metrics may be categorized by boundary type (e.g. eez, offshore, nearshore). This ID can often be used to represent informal geographic boundaries instead of formal ",(0,r.jsx)(n.code,{children:"Geographies"})," like with ",(0,r.jsx)(n.code,{children:"geographyId"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"groupId"})," - optional id of group that this metric is for. Groups are typically not defined by the datasource, but by the planning process.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Example - protections levels, where all of the sketches in a collection may be grouped by the protection level they achieve (low, high, full) and their metrics combined into an aggregate value for each level."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"geographyId"})," - optional id of a ",(0,r.jsx)(n.code,{children:"Geography"})," that this metric is for.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Example - you want to stratify by multiple jurisdictional boundaries (eez, nearshore, offshore) and you also want to stratify by multiple distinct environmental regions defined by natural clusterings of depth, species, seabottom, etc. (region 1, region 2, region 3). This allows you to answer for example how much does a sketch overlap with areas that are nearshore and environmental region 1? You can use classId for the jurisdictional boundaries and ",(0,r.jsx)(n.code,{children:"groupId"})," for the environmental regions."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"what-can-be-measured",children:"What can be measured?"}),"\n",(0,r.jsxs)(n.p,{children:["A number of metrics can be calculated by overlaying a sketch with a vector or raster datasource. See the ",(0,r.jsx)(n.a,{href:"/geoprocessing/docs/next/geoprocessing",children:"geoprocessing"})," guide for more information. Common ",(0,r.jsx)(n.code,{children:"metricIds"})," include:"]}),"\n",(0,r.jsx)(n.p,{children:"Vector:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"/** Area of vector features in square meters */\narea: number;\n/** Number of vector features */\ncount: number;\n"})}),"\n",(0,r.jsx)(n.p,{children:"Raster:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:"/** Number of cells that are not nodata */\nvalid?: number;\n/** Number of nodata cells in raster */\ninvalid?: number;\n/** Total number of cells in raster, valid or invalid */\ncount?: number;\n/** Area of valid cells in raster in square meters */\narea?: number;\n/** Minimum value of valid cells in raster */\nmin?: Nullable;\n/** Maximum value of any one valid cell in raster */\nmax?: Nullable;\n/** Mean average value of valid cells in raster */\nmean?: Nullable;\n/** Median average value of valid cells in raster */\nmedian?: Nullable;\n/** Mode of valid cells in raster */\nmode?: Nullable;\n/** Different between min and max value */\nrange?: Nullable;\n/** Sum of all valid cennls in raster */\nsum?: number;\n/** Standard deviation of valid cells in raster */\nstd?: Nullable;\n/** Statistical measurement of spread between values in raster */\nvariance?: Nullable;\n**/\n"})}),"\n",(0,r.jsx)(n.h3,{id:"metric-group",children:"Metric Group"}),"\n",(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metricGroup.ts#L11",children:"MetricGroup"})," defines a specific type of metric for your project, with a base metric type, and one or more data classes. Think of it as a unifying configuration object, that pulls everything together."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/dataclass.ts#L8",children:"DataClass"})," - represents a single class of data. It ties it to an underlying datasource, and holds attributes used for displaying the class in user interfaces."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"The following is an example of a MetricGroup object containing an array of DataClass objects:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "metricId": "boundary-area",\n "type": "areaOverlap",\n "classes": [\n {\n "classId": "eez",\n "display": "EEZ",\n "datasourceId": "eez",\n "objectiveId": "eez",\n "layerId": "607b3caa11ccf2303daf87c5"\n },\n {\n "classId": "offshore",\n "display": "Offshore",\n "datasourceId": "offshore",\n "objectiveId": "offshore",\n "layerId": "607b3caa11ccf2303daf87c7"\n },\n {\n "classId": "contiguous",\n "display": "Contiguous",\n "datasourceId": "12_24_nm_boundary",\n "objectiveId": "12_24_zone",\n "layerId": "607b3caa11ccf2303daf87c9"\n }\n ]\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["This defines a ",(0,r.jsx)(n.code,{children:"boundaryAreaOverlap"})," metric of type ",(0,r.jsx)(n.code,{children:"areaOverlap"}),", which we define to represent the area of overlap between a sketch and a given boundary polygon or multipolygon. In this case 3 different boundaries are configured as data classes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"eez - 0-200 nautical miles"}),"\n",(0,r.jsx)(n.li,{children:"offshore - typically 12-200 nautical miles"}),"\n",(0,r.jsx)(n.li,{children:"nearshore - typically 0-12 nautical miles, aka territorial sea boundary."}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Each data class points to its own datasource. And you can assume each of those datasources contain a single polygon boundary. It's also acceptable to have a single datasource, with 3 different boundaries in it, and an attribute to differentiate them, which would become the ",(0,r.jsx)(n.code,{children:"classId"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Each data ",(0,r.jsx)(n.code,{children:"class"})," can be tied to its own planning ",(0,r.jsx)(n.code,{children:"objective"}),", and its own map ",(0,r.jsx)(n.code,{children:"layer"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"metric-group-with-two-data-sources",children:"Metric group with two data sources"}),"\n",(0,r.jsx)(n.p,{children:"You can have a metric group where each class references a different datasource. If we wanted both the reef extent data and benthic habitat data in one report, the metric group can look as follows:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "metricId": "benthicHabitat",\n "type": "areaOverlap",\n "classes": [\n {\n "classId": "reefextent",\n "display": "Coral Reef",\n "datasourceId": "reefextent"\n },\n {\n "classId": "Sand",\n "classKey": "class",\n "display": "Sand",\n "datasourceId": "benthic"\n },\n {\n "classId": "Rock",\n "classKey": "class",\n "display": "Rock",\n "datasourceId": "benthic"\n },\n {\n "classId": "Rubble",\n "classKey": "class",\n "display": "Rubble",\n "datasourceId": "benthic"\n }\n ]\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"metric-group-with-quantitative-raster-data-sources",children:"Metric group with quantitative raster data sources"}),"\n",(0,r.jsxs)(n.p,{children:["An example of a metric group ",(0,r.jsx)(n.code,{children:"fishingEffort"})," which displays multiple quantitative raster data files. This report has been made using ",(0,r.jsx)(n.a,{href:"https://globalfishingwatch.org/dataset-and-code-fishing-effort/",children:"Global Fishing Watch Apparent Fishing Effort data"}),", which reports fishing effort in hours. To calculate for the sum of fishing effort within our plan, we would use ",(0,r.jsx)(n.code,{children:"type = valueOverlap"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "metricId": "fishingEffort",\n "type": "valueOverlap",\n "classes": [\n {\n "datasourceId": "all-fishing",\n "classId": "all-fishing",\n "display": "All Fishing 2019-2022"\n },\n {\n "datasourceId": "drifting-longlines",\n "classId": "drifting-longlines",\n "display": "Drifting Longline"\n },\n {\n "datasourceId": "pole-and-line",\n "classId": "pole-and-line",\n "display": "Pole and Line"\n },\n {\n "datasourceId": "set-longlines",\n "classId": "set-longlines",\n "display": "Set Longline"\n },\n {\n "datasourceId": "fixed-gear",\n "classId": "fixed-gear",\n "display": "Fixed Gear"\n }\n ]\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"metric-group-with-categorical-raster-data-sources",children:"Metric group with categorical raster data sources"}),"\n",(0,r.jsxs)(n.p,{children:["An example of a metric group ",(0,r.jsx)(n.code,{children:"fishRichness"})," which displays a categorical raster ",(0,r.jsx)(n.code,{children:"fishRichness.tif"}),". The raster data displays the number of key fish species present in each raster cell -- from 1 to 5 species. ",(0,r.jsx)(n.code,{children:"classId"})," should be set to the corresponding numerical value within the raster."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "metricId": "fishRichness",\n "type": "countOverlap",\n "classes": [\n {\n "datasourceId": "fishRichness",\n "classId": "1",\n "display": "1 species"\n },\n {\n "datasourceId": "fishRichness",\n "classId": "2",\n "display": "2 species"\n },\n {\n "datasourceId": "fishRichness",\n "classId": "3",\n "display": "3 species"\n },\n {\n "datasourceId": "fishRichness",\n "classId": "4",\n "display": "4 species"\n },\n {\n "datasourceId": "fixed-gear",\n "classId": "5",\n "display": "5 species"\n }\n ]\n}\n'})}),"\n",(0,r.jsx)(n.h2,{id:"objectives",children:"Objectives"}),"\n",(0,r.jsxs)(n.p,{children:["Each planning ",(0,r.jsx)(n.a,{href:"https://github.com/seasketch/geoprocessing/blob/d633b202a855689655032bdb290e036f2733b33d/packages/geoprocessing/src/types/objective.ts",children:"objective"})," defines a target and 1 or more protection levels that count towards that target. The default protection level is ",(0,r.jsx)(n.code,{children:"Fully Protected Area"})," which means no activities are allowed. You can learn more about MPA ",(0,r.jsx)(n.a,{href:"https://docs.google.com/document/d/1i0baxgK8JEUjtU8mnzFiG5VB_gO8lmxCrAtJ5rltk30/edit?usp=sharing",children:"classification schemes"})]}),"\n",(0,r.jsx)(n.p,{children:"In the geoprocessing framework, objectives are structured as follows:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "objectiveId": "eez",\n "shortDesc": "EEZ Objective",\n "target": 0.2,\n "countsToward": {\n "Fully Protected Area": "yes"\n }\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["This is an objective to target protection of at least ",(0,r.jsx)(n.code,{children:"20%"})," of the ",(0,r.jsx)(n.code,{children:"eez"})," boundary, which is defined as the shoreline out to 200 nautical miles. A proposed area must be classified as a ",(0,r.jsx)(n.code,{children:"Fully Protected Area"})," to count towards this objective."]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>o});var r=s(96540);const a={},t=r.createContext(a);function i(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/main.e26edfb0.js b/assets/js/main.e26edfb0.js
deleted file mode 100644
index 4cdd352073..0000000000
--- a/assets/js/main.e26edfb0.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see main.e26edfb0.js.LICENSE.txt */
-(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[38792],{35947:(e,n,t)=>{"use strict";t.d(n,{A:()=>u});t(96540);var o=t(53259),s=t.n(o),i=t(84054);const c={"000edf12":[()=>t.e(37385).then(t.bind(t,86315)),"@site/docs/api/geoprocessing/variables/SUPPORTED_RASTER_STATS.md",86315],"00120f28":[()=>t.e(22798).then(t.bind(t,66060)),"@site/docs/api/geoprocessing/variables/datasourceFormatDescriptions.md",66060],"015a12ec":[()=>t.e(82381).then(t.bind(t,42951)),"@site/docs/api/client-ui/functions/RbcsMpaClassPanel.md",42951],"01d8ea8c":[()=>t.e(63771).then(t.bind(t,97112)),"@site/docs/api/geoprocessing/functions/isTruthyAttributeValue.md",97112],"02d98a17":[()=>t.e(70513).then(t.bind(t,456)),"@site/docs/tutorials/sketchAttributes.md",456],"0342ac2e":[()=>t.e(66253).then(t.bind(t,5408)),"@site/docs/api/geoprocessing/interfaces/FgBoundingBox.md",5408],"0353b5aa":[()=>t.e(58833).then(t.bind(t,59991)),"@site/docs/api/geoprocessing/functions/rasterStatsToMetrics.md",59991],"03ece191":[()=>t.e(69896).then(t.bind(t,96651)),"@site/docs/api/client-ui/interfaces/DataFormatters.md",96651],"047c1b55":[()=>t.e(71886).then(t.bind(t,35942)),"@site/docs/api/geoprocessing/functions/splitSketchAntimeridian.md",35942],"04b9c63d":[()=>t.e(20942).then(t.bind(t,78890)),"@site/docs/api/geoprocessing/functions/percentGoalWithEdge.md",78890],"0553e70a":[()=>t.e(22663).then(t.bind(t,30896)),"@site/docs/api/geoprocessing/variables/rbcsScores.md",30896],"057a4864":[()=>t.e(18232).then(t.bind(t,85553)),"@site/docs/api/client-ui/functions/IucnDesignationTable.md",85553],"05da8984":[()=>t.e(17530).then(t.bind(t,84983)),"@site/docs/api/geoprocessing/variables/importRasterDatasourceOptionsSchema.md",84983],"065977f7":[()=>t.e(4644).then(t.bind(t,71628)),"@site/docs/api/geoprocessing/variables/geographiesSchema.md",71628],"06d51d06":[()=>t.e(34761).then(t.bind(t,2322)),"@site/docs/api/geoprocessing/functions/booleanOverlap.md",2322],"06ebab54":[()=>t.e(67086).then(t.bind(t,49268)),"@site/docs/api/geoprocessing/interfaces/IucnActivity.md",49268],"08440b71":[()=>t.e(77481).then(t.bind(t,96172)),"@site/docs/api/client-core/index.md",96172],"08877af4":[()=>t.e(46906).then(t.bind(t,60723)),"@site/docs/api/geoprocessing/functions/getVectorDatasourceById.md",60723],"088da689":[()=>t.e(73943).then(t.bind(t,56345)),"@site/docs/api/geoprocessing/enumerations/GeoprocessingTaskStatus.md",56345],"091b5047":[()=>t.e(48095).then(t.bind(t,51771)),"@site/docs/api/client-ui/functions/EstimateLabel.md",51771],"093ef478":[()=>t.e(44125).then(t.bind(t,55971)),"@site/docs/api/geoprocessing/type-aliases/VectorDatasource.md",55971],"0aa7b0f6":[()=>t.e(54420).then(t.bind(t,78350)),"@site/docs/api/client-ui/interfaces/TableOptions.md",78350],"0b237cae":[()=>t.e(45848).then(t.bind(t,41587)),"@site/docs/api/client-ui/functions/DataDownload.md",41587],"0b8ab3bc":[()=>t.e(27360).then(t.bind(t,10981)),"@site/docs/api/geoprocessing/interfaces/DatasourceOptions.md",10981],"0cac68f9":[()=>t.e(95941).then(t.bind(t,25192)),"@site/docs/api/geoprocessing/type-aliases/SketchProperties.md",25192],"0cb38d7a":[()=>t.e(89601).then(t.bind(t,61223)),"@site/docs/tutorials/createGeoprocessing.md",61223],"0d00f88f":[()=>t.e(38811).then(t.bind(t,33863)),"@site/docs/api/geoprocessing/variables/metricsSchema.md",33863],"0e384e19":[()=>t.e(83976).then(t.bind(t,20619)),"@site/docs/intro.md",20619],"0e6005a4":[()=>t.e(65078).then(t.bind(t,85365)),"@site/docs/api/geoprocessing/type-aliases/MetricDimension.md",85365],"0e8eb251":[()=>t.e(50105).then(t.bind(t,7047)),"@site/docs/api/geoprocessing/functions/overlapRasterGroupMetrics.md",7047],"0e930aeb":[()=>t.e(13618).then(t.bind(t,91757)),"@site/docs/api/geoprocessing/functions/mpaClassMetric.md",91757],"0ef97a33":[()=>t.e(60503).then(t.bind(t,15333)),"@site/docs/linkData.md",15333],10035306:[()=>t.e(67293).then(t.bind(t,59323)),"@site/docs/api/client-ui/interfaces/IucnLevelCircleProps.md",59323],"1020312d":[()=>t.e(5820).then(t.bind(t,74559)),"@site/docs/api/geoprocessing/variables/iucnActivityCategories.md",74559],10852366:[()=>t.e(41604).then(t.bind(t,90161)),"@site/docs/api/geoprocessing/functions/metricsForSketch.md",90161],"114a55b5":[()=>t.e(80385).then(t.bind(t,17329)),"@site/docs/api/geoprocessing/functions/isSketch.md",17329],"117b8318":[()=>t.e(95734).then(t.bind(t,5440)),"@site/docs/api/client-ui/functions/RbcsZoneRegIcon.md",5440],"117cc3f1":[()=>t.e(97666).then(t.bind(t,34693)),"@site/docs/api/geoprocessing/type-aliases/GroupMetricSketchAgg.md",34693],"11b8c77a":[()=>t.e(32641).then(t.bind(t,15012)),"@site/docs/api/geoprocessing/variables/geographySchema.md",15012],"11c3f46d":[()=>t.e(68775).then(t.bind(t,46967)),"@site/docs/api/geoprocessing/functions/isPolygonAnyFeature.md",46967],"11dd256b":[()=>t.e(94298).then(t.bind(t,65381)),"@site/docs/api/client-ui/type-aliases/HorizontalStackedBarRow.md",65381],"11eaec78":[()=>t.e(28898).then(t.bind(t,51775)),"@site/docs/api/geoprocessing/type-aliases/max.md",51775],"126c431b":[()=>t.e(37785).then(t.bind(t,30100)),"@site/docs/api/geoprocessing/variables/datasourcesSchema.md",30100],"12d92307":[()=>t.e(85789).then(t.bind(t,49550)),"@site/docs/api/geoprocessing/functions/cleanCoords.md",49550],"13245b4f":[()=>t.e(4562).then(t.bind(t,13613)),"@site/docs/api/geoprocessing/functions/isRasterDatasource.md",13613],"13b1a3fa":[()=>t.e(88735).then(t.bind(t,3782)),"@site/docs/api/geoprocessing/functions/fetchGeoJSON.md",3782],"13d21b80":[()=>t.e(85460).then(t.bind(t,41494)),"@site/docs/api/geoprocessing/variables/OBJECTIVE_RED.md",41494],"14469aa3":[()=>t.e(83276).then(t.bind(t,9049)),"@site/docs/api/geoprocessing/interfaces/SeaSketchReportingVisibleLayersChangeEvent.md",9049],"145f0f2d":[()=>t.e(61521).then(t.bind(t,36326)),"@site/docs/api/geoprocessing/functions/isLineStringSketchCollection.md",36326],"15f9a01d":[()=>t.e(51298).then(t.bind(t,63027)),"@site/docs/api/client-ui/interfaces/StyledHorizontalStackedBarProps.md",63027],"160053eb":[()=>t.e(91603).then(t.bind(t,65143)),"@site/docs/api/geoprocessing/type-aliases/GeoprocessingJsonConfig.md",65143],"16cc8cf5":[()=>t.e(85268).then(t.bind(t,35205)),"@site/docs/api/geoprocessing/type-aliases/Objectives.md",35205],17896441:[()=>Promise.all([t.e(71869),t.e(39408),t.e(18401)]).then(t.bind(t,26795)),"@theme/DocItem",26795],"180f3b55":[()=>t.e(58827).then(t.bind(t,60735)),"@site/docs/api/geoprocessing/variables/measurementTypesSchema.md",60735],"18ad6322":[()=>t.e(95594).then(t.bind(t,13829)),"@site/docs/precalc.md",13829],"18b3c895":[()=>t.e(22910).then(t.bind(t,88243)),"@site/docs/api/geoprocessing/functions/isVectorDatasource.md",88243],"18c41134":[()=>t.e(69262).then(t.bind(t,13849)),"@site/docs/tutorial-basics/markdown-features.mdx",13849],"18ca75cf":[()=>t.e(6507).then(t.bind(t,53754)),"@site/docs/api/client-ui/functions/PointyCircle.md",53754],"18f8d593":[()=>t.e(28639).then(t.t.bind(t,26290,19)),"@generated/docusaurus-plugin-content-docs/default/p/geoprocessing-docs-880.json",26290],"191c6045":[()=>t.e(95686).then(t.bind(t,35389)),"@site/docs/api/geoprocessing/functions/roundDecimalFormat.md",35389],"19b0e798":[()=>t.e(61724).then(t.bind(t,36917)),"@site/docs/api/client-ui/functions/ReportChartFigure.md",36917],"19bc8eef":[()=>t.e(4748).then(t.bind(t,35028)),"@site/docs/api/client-ui/functions/ReportDecorator.md",35028],"19c161ed":[()=>t.e(11149).then(t.bind(t,43009)),"@site/docs/api/geoprocessing/variables/activityRanks.md",43009],"1aa6104b":[()=>t.e(75049).then(t.bind(t,64679)),"@site/docs/api/client-ui/interfaces/TooltipProps.md",64679],"1ad74611":[()=>t.e(60894).then(t.bind(t,69513)),"@site/docs/api/geoprocessing/interfaces/GeoprocessingProject.md",69513],"1b5fdf8a":[()=>t.e(48296).then(t.bind(t,48222)),"@site/docs/api/geoprocessing/functions/featureToSketchCollection.md",48222],"1b8ce8cc":[()=>t.e(94944).then(t.bind(t,52701)),"@site/docs/api/client-ui/interfaces/RbcsMpaObjectiveStatusProps.md",52701],"1c396d99":[()=>t.e(38343).then(t.bind(t,78479)),"@site/docs/api/client-ui/interfaces/ReportPageProps.md",78479],"1c94f36b":[()=>t.e(49981).then(t.bind(t,37486)),"@site/docs/api/geoprocessing/functions/removeSketchCollPolygonHoles.md",37486],"1cbe4596":[()=>t.e(15448).then(t.bind(t,65205)),"@site/docs/api/client-ui/interfaces/ObjectiveStatusProps.md",65205],"1d142a28":[()=>t.e(68522).then(t.bind(t,76589)),"@site/docs/api/geoprocessing/type-aliases/GEOBLAZE_RASTER_STAT.md",76589],"1d18b285":[()=>t.e(35894).then(t.bind(t,55248)),"@site/docs/api/geoprocessing/functions/getInternalRasterDatasourceById.md",55248],"1df93b7f":[()=>Promise.all([t.e(71869),t.e(34583)]).then(t.bind(t,25579)),"@site/src/pages/index.tsx",25579],"1e4232ab":[()=>t.e(81953).then(t.bind(t,13976)),"@site/docs/tutorial-basics/create-a-document.md",13976],"1f391b9e":[()=>Promise.all([t.e(71869),t.e(39408),t.e(66061)]).then(t.bind(t,67973)),"@theme/MDXPage",67973],"1f45bfa9":[()=>t.e(76629).then(t.bind(t,52952)),"@site/docs/api/geoprocessing/type-aliases/Stats-1.md",52952],"1ffd08f7":[()=>t.e(92401).then(t.bind(t,1901)),"@site/docs/api/geoprocessing/functions/genSampleSketchCollectionFromSketches.md",1901],"204e117e":[()=>t.e(6650).then(t.bind(t,92674)),"@site/docs/api/geoprocessing/type-aliases/ClientJsonConfig.md",92674],"206aceb6":[()=>t.e(46138).then(t.bind(t,41005)),"@site/docs/tutorials/extraParams.md",41005],"20a9eafe":[()=>t.e(53038).then(t.bind(t,14333)),"@site/docs/api/geoprocessing/type-aliases/DataClass.md",14333],"20b9b68d":[()=>t.e(99554).then(t.bind(t,18085)),"@site/docs/api/geoprocessing/functions/isPointFeature.md",18085],"20c30c76":[()=>t.e(3783).then(t.bind(t,42784)),"@site/docs/api/geoprocessing/functions/toSketchPropertiesArray.md",42784],"20c96d7f":[()=>t.e(69648).then(t.bind(t,33960)),"@site/docs/api/geoprocessing/interfaces/CalcStatsOptions.md",33960],"213749d1":[()=>t.e(70514).then(t.bind(t,21580)),"@site/docs/api/geoprocessing/type-aliases/IucnActivityRankId.md",21580],"21b0cdf7":[()=>t.e(19018).then(t.bind(t,12568)),"@site/docs/api/geoprocessing/type-aliases/TypedArray.md",12568],"21ed9df6":[()=>t.e(82428).then(t.bind(t,65850)),"@site/docs/api/geoprocessing/functions/genClipLoader.md",65850],22700033:[()=>t.e(92576).then(t.bind(t,5758)),"@site/docs/api/geoprocessing/functions/getMetricGroupObjectiveId.md",5758],"23e66fc6":[()=>t.e(45152).then(t.bind(t,18139)),"@site/docs/api/client-ui/interfaces/GroupCircleRowProps.md",18139],"2478852b":[()=>t.e(78049).then(t.bind(t,30080)),"@site/docs/api/geoprocessing/type-aliases/ObjectiveAnswerMap.md",30080],"2487ef53":[()=>t.e(97455).then(t.bind(t,71551)),"@site/docs/api/geoprocessing/functions/findAndUpdateMetricValue.md",71551],"25367aee":[()=>t.e(70341).then(t.bind(t,15169)),"@site/docs/api/geoprocessing/functions/getMinYesCountMap.md",15169],"254b07d4":[()=>t.e(76673).then(t.bind(t,85072)),"@site/docs/api/geoprocessing/functions/isMultiPolygonFeature.md",85072],"260793df":[()=>t.e(45182).then(t.bind(t,89218)),"@site/docs/api/client-ui/interfaces/RbcsPanelProps.md",89218],"266d7307":[()=>t.e(59576).then(t.bind(t,7932)),"@site/docs/dataimport.md",7932],"26a8165c":[()=>t.e(11093).then(t.bind(t,17422)),"@site/docs/api/geoprocessing/classes/ComplexityError.md",17422],"2737f74b":[()=>t.e(43155).then(t.bind(t,99484)),"@site/docs/api/geoprocessing/interfaces/ClipOptions.md",99484],"27580d35":[()=>t.e(33137).then(t.bind(t,5698)),"@site/versioned_docs/version-6.1.0/CLI.md",5698],"277b12d2":[()=>t.e(42970).then(t.bind(t,34333)),"@site/docs/api/geoprocessing/functions/genFeatureCollection.md",34333],"27bf54aa":[()=>t.e(42819).then(t.bind(t,54189)),"@site/docs/api/geoprocessing/functions/toChildProperties.md",54189],"281124ee":[()=>t.e(57971).then(t.bind(t,41253)),"@site/docs/api/geoprocessing/functions/getGeopackagePath.md",41253],"28543a21":[()=>t.e(10305).then(t.bind(t,92814)),"@site/docs/api/client-ui/interfaces/ResultsCardProps.md",92814],"28bea1e7":[()=>t.e(22308).then(t.bind(t,43302)),"@site/docs/api/geoprocessing/functions/loadCog.md",43302],"295604f4":[()=>t.e(22747).then(t.bind(t,57747)),"@site/docs/api/client-ui/type-aliases/RbcsNetworkObjectiveRenderMsgFunction.md",57747],"296a08bc":[()=>t.e(9670).then(t.bind(t,87866)),"@site/docs/api/geoprocessing/type-aliases/PartialReportContextValue.md",87866],"296a3842":[()=>t.e(4060).then(t.bind(t,43827)),"@site/docs/api/client-ui/interfaces/LegendProps.md",43827],"29b28278":[()=>t.e(39339).then(t.bind(t,49292)),"@site/docs/api/geoprocessing/functions/isNullSketchCollection.md",49292],"2b163177":[()=>t.e(14856).then(t.bind(t,26948)),"@site/docs/api/geoprocessing/functions/parseGeoraster.md",26948],"2b31bbe1":[()=>t.e(76573).then(t.bind(t,41918)),"@site/docs/api/geoprocessing/variables/internalImportSchema.md",41918],"2b85c0dc":[()=>t.e(58280).then(t.bind(t,59645)),"@site/docs/api/geoprocessing/functions/flattenSketchAllId.md",59645],"2bf4ec9b":[()=>t.e(22720).then(t.bind(t,79069)),"@site/docs/tutorials/updateDatasource.md",79069],"2cf7b004":[()=>t.e(92813).then(t.bind(t,4191)),"@site/docs/api/geoprocessing/type-aliases/median.md",4191],"2d91c4e0":[()=>t.e(87189).then(t.bind(t,48148)),"@site/docs/api/geoprocessing/variables/supportedFormatsSchema.md",48148],"2ede8631":[()=>t.e(68675).then(t.bind(t,74374)),"@site/docs/api/geoprocessing/type-aliases/GeoprocessingRequest.md",74374],"2f4d29f9":[()=>t.e(9451).then(t.bind(t,59252)),"@site/docs/api/client-ui/functions/RbcsIcon.md",59252],"2f95d118":[()=>t.e(69427).then(t.bind(t,99990)),"@site/docs/api/client-ui/functions/FilterSelectTableStyled.md",99990],"2f97ff33":[()=>t.e(28641).then(t.bind(t,87315)),"@site/docs/api/client-ui/interfaces/DataDownloadToolbarProps.md",87315],"301e080f":[()=>t.e(32222).then(t.bind(t,10656)),"@site/docs/api/geoprocessing/functions/toNullSketchArray.md",10656],"30330b8d":[()=>t.e(37602).then(t.bind(t,84452)),"@site/docs/api/geoprocessing/type-aliases/ZoneName.md",84452],"3036cc63":[()=>t.e(85894).then(t.bind(t,51166)),"@site/docs/api/geoprocessing/functions/zoneClassMetrics.md",51166],"3041404c":[()=>t.e(17284).then(t.bind(t,70608)),"@site/docs/api/geoprocessing/type-aliases/mean.md",70608],"304c2294":[()=>t.e(90054).then(t.bind(t,79475)),"@site/docs/api/geoprocessing/variables/DEFAULTS.md",79475],30837423:[()=>t.e(42477).then(t.bind(t,27662)),"@site/docs/api/geoprocessing/interfaces/Histogram.md",27662],"311ab9cf":[()=>t.e(10433).then(t.bind(t,45844)),"@site/docs/api/geoprocessing/functions/getParamStringArray.md",45844],"3182f957":[()=>t.e(71698).then(t.bind(t,85004)),"@site/docs/api/geoprocessing/type-aliases/ObjectiveAnswer.md",85004],"3223cc95":[()=>t.e(29305).then(t.bind(t,48545)),"@site/docs/api/geoprocessing/functions/toNullSketch.md",48545],"3267b9a3":[()=>t.e(22482).then(t.bind(t,70624)),"@site/docs/codespaces/codespaces.md",70624],"326d3e84":[()=>t.e(67306).then(t.bind(t,82334)),"@site/docs/api/geoprocessing/variables/OBJECTIVE_NO.md",82334],"3374161e":[()=>t.e(27055).then(t.bind(t,43775)),"@site/docs/api/geoprocessing/interfaces/NullSketch.md",43775],"339f6315":[()=>t.e(7955).then(t.bind(t,18114)),"@site/docs/thirdpartydata/thirdpartydata.md",18114],"34457c54":[()=>t.e(60010).then(t.bind(t,64315)),"@site/docs/api/geoprocessing/functions/zeroSketchCollection.md",64315],"3465e32b":[()=>t.e(31073).then(t.bind(t,58478)),"@site/docs/api/geoprocessing/functions/loadFgb.md",58478],"349819cc":[()=>t.e(97161).then(t.bind(t,33195)),"@site/docs/api/geoprocessing/variables/multipolygonSchema.md",33195],"34cab964":[()=>t.e(21319).then(t.bind(t,979)),"@site/versioned_docs/version-6.1.0/tutorial-basics/create-a-blog-post.md",979],"3508ba7b":[()=>t.e(46187).then(t.bind(t,47914)),"@site/versioned_docs/version-6.1.0/intro.md",47914],"351342bb":[()=>t.e(32897).then(t.bind(t,3455)),"@site/docs/api/geoprocessing/classes/ProjectClientBase.md",3455],"35709b3d":[()=>t.e(13786).then(t.bind(t,74193)),"@site/docs/api/client-ui/functions/useCheckboxes.md",74193],"35b544ea":[()=>t.e(39046).then(t.bind(t,11883)),"@site/docs/api/client-ui/functions/GroupPill.md",11883],"35d95d3a":[()=>t.e(87517).then(t.bind(t,48283)),"@site/docs/api/geoprocessing/functions/getIucnCategoryForSketches.md",48283],"3603a0ea":[()=>t.e(37138).then(t.bind(t,1903)),"@site/docs/api/geoprocessing/interfaces/NullSketchCollection.md",1903],"36d9a104":[()=>t.e(37587).then(t.bind(t,52105)),"@site/docs/api/geoprocessing/variables/objectiveSchema.md",52105],"3794302a":[()=>t.e(87152).then(t.bind(t,52801)),"@site/docs/api/client-ui/functions/Translator.md",52801],"37a91261":[()=>t.e(26833).then(t.bind(t,18040)),"@site/docs/api/client-ui/functions/Skeleton.md",18040],"3885774a":[()=>t.e(23940).then(t.bind(t,59046)),"@site/docs/api/geoprocessing/type-aliases/ZoneId.md",59046],"38a169f8":[()=>t.e(53841).then(t.bind(t,54436)),"@site/docs/api/geoprocessing/functions/getZoneClassificationName.md",54436],"38ace798":[()=>t.e(57765).then(t.bind(t,37287)),"@site/docs/api/client-ui/type-aliases/SUPPORTED_FORMAT.md",37287],"393be207":[()=>t.e(74134).then(t.bind(t,75943)),"@site/src/pages/markdown-page.md",75943],"39efb958":[()=>t.e(90878).then(t.bind(t,11220)),"@site/docs/api/geoprocessing/type-aliases/Datasource.md",11220],"3aa06708":[()=>t.e(48213).then(t.bind(t,34938)),"@site/docs/api/geoprocessing/variables/internalDatasourceSchema.md",34938],"3af2a197":[()=>t.e(55341).then(t.bind(t,21093)),"@site/docs/api/geoprocessing/interfaces/IucnCategory.md",21093],"3af33abc":[()=>t.e(89695).then(t.bind(t,91909)),"@site/docs/api/geoprocessing/type-aliases/EezLandUnion.md",91909],"3b062bbb":[()=>t.e(54062).then(t.bind(t,13990)),"@site/versioned_docs/version-6.1.0/tutorial-basics/deploy-your-site.md",13990],"3bb712cb":[()=>t.e(9159).then(t.bind(t,44357)),"@site/docs/api/client-ui/interfaces/RbcsLearnMoreProps.md",44357],"3c309f93":[()=>t.e(66161).then(t.bind(t,28028)),"@site/docs/api/client-ui/functions/Pill.md",28028],"3c5be31c":[()=>t.e(96524).then(t.bind(t,19976)),"@site/docs/api/geoprocessing/type-aliases/ZoneColor.md",19976],"3ca92a4f":[()=>t.e(58918).then(t.bind(t,33952)),"@site/docs/api/geoprocessing/type-aliases/UserAttribute.md",33952],"3db66c4a":[()=>t.e(42666).then(t.bind(t,83116)),"@site/docs/api/client-ui/interfaces/DataDownloadProps.md",83116],"3e19de0e":[()=>t.e(41321).then(t.bind(t,40003)),"@site/docs/api/geoprocessing/functions/genSketchCollection.md",40003],"3e510822":[()=>t.e(78809).then(t.bind(t,28467)),"@site/docs/api/geoprocessing/variables/EXTRA_RASTER_STATS.md",28467],"3e9cee20":[()=>t.e(70719).then(t.bind(t,93494)),"@site/docs/api/geoprocessing/functions/getMpaClassificationName.md",93494],"3eb03649":[()=>t.e(38743).then(t.bind(t,60807)),"@site/docs/api/geoprocessing/variables/iucnActivities.md",60807],"3f189bf2":[()=>t.e(41382).then(t.bind(t,62601)),"@site/docs/api/client-ui/interfaces/SketchAttributesCardProps.md",62601],"3f605b15":[()=>t.e(95705).then(t.bind(t,57516)),"@site/docs/api/geoprocessing/functions/getArea.md",57516],"3f655634":[()=>t.e(35563).then(t.bind(t,19701)),"@site/docs/api/geoprocessing/type-aliases/BaseDatasource.md",19701],"3ff000ec":[()=>t.e(25134).then(t.bind(t,18521)),"@site/docs/api/geoprocessing/functions/splitBBoxAntimeridian.md",18521],"3ff52dca":[()=>t.e(6949).then(t.bind(t,89500)),"@site/docs/api/client-ui/interfaces/CollapseGroupProps.md",89500],"400e5e05":[()=>t.e(82901).then(t.bind(t,90906)),"@site/docs/api/client-ui/functions/SimpleButtonStyled.md",90906],"404c31a1":[()=>t.e(36894).then(t.bind(t,44160)),"@site/docs/api/geoprocessing/interfaces/DatasourceClipOperation.md",44160],"406590f2":[()=>t.e(27479).then(t.bind(t,6038)),"@site/docs/api/geoprocessing/type-aliases/ImportVectorDatasourceOptions.md",6038],40895397:[()=>t.e(97610).then(t.bind(t,19179)),"@site/docs/api/geoprocessing/functions/maxWidth.md",19179],"40d5179d":[()=>t.e(54369).then(t.bind(t,80560)),"@site/docs/api/geoprocessing/classes/VectorDataSource.md",80560],42028749:[()=>t.e(50945).then(t.bind(t,91764)),"@site/docs/api/geoprocessing/interfaces/ReportContextValue.md",91764],"427536e0":[()=>t.e(53173).then(t.bind(t,20128)),"@site/docs/api/geoprocessing/functions/isMultiPolygonSketchCollection.md",20128],"427578a9":[()=>t.e(36614).then(t.bind(t,56257)),"@site/docs/api/geoprocessing/type-aliases/Metric.md",56257],"42c64eb9":[()=>t.e(23596).then(t.bind(t,65304)),"@site/docs/api/geoprocessing/functions/getIndexIconPerc.md",65304],"42d6648b":[()=>t.e(79075).then(t.bind(t,95567)),"@site/docs/api/client-ui/functions/IucnLevelPill.md",95567],"42ec3285":[()=>t.e(855).then(t.bind(t,50198)),"@site/docs/api/geoprocessing/variables/dataClassSchema.md",50198],"430ec093":[()=>t.e(72684).then(t.bind(t,48290)),"@site/docs/api/geoprocessing/type-aliases/ImportRasterDatasourceConfig.md",48290],"43f13aa6":[()=>t.e(65442).then(t.bind(t,15196)),"@site/docs/api/client-ui/functions/RbcsMpaObjectiveStatus.md",15196],"44234b90":[()=>t.e(97587).then(t.bind(t,59449)),"@site/docs/upgrade.md",59449],"443836b2":[()=>t.e(72457).then(t.bind(t,38475)),"@site/docs/CLI.md",38475],"4486aafe":[()=>t.e(96444).then(t.bind(t,53160)),"@site/docs/api/geoprocessing/variables/box3dSchema.md",53160],"449e4dc6":[()=>t.e(38).then(t.bind(t,23470)),"@site/docs/api/geoprocessing/functions/zeroSketchArray.md",23470],"450968d8":[()=>t.e(55709).then(t.bind(t,86769)),"@site/docs/api/geoprocessing/type-aliases/get.md",86769],"452aa042":[()=>t.e(15040).then(t.bind(t,68627)),"@site/docs/api/geoprocessing/functions/getClassificationLabel.md",68627],"45bfc0b8":[()=>t.e(46977).then(t.bind(t,58576)),"@site/docs/api/geoprocessing/interfaces/Georaster.md",58576],"467c34f2":[()=>t.e(77314).then(t.bind(t,63938)),"@site/docs/architecture/Architecture.md",63938],"46c06872":[()=>t.e(13829).then(t.bind(t,76845)),"@site/docs/api/geoprocessing/variables/metricGroupSchema.md",76845],"470cb80a":[()=>t.e(39588).then(t.bind(t,25209)),"@site/docs/api/geoprocessing/variables/internalVectorImportSchema.md",25209],47691619:[()=>t.e(43988).then(t.bind(t,77563)),"@site/versioned_docs/version-6.1.0/Tipsandtricks.md",77563],"47db13d9":[()=>t.e(45691).then(t.bind(t,34417)),"@site/docs/api/geoprocessing/functions/percentWithEdge.md",34417],"4871d8df":[()=>t.e(92373).then(t.bind(t,37790)),"@site/docs/api/geoprocessing/type-aliases/mode.md",37790],"48dd8fe6":[()=>t.e(84064).then(t.bind(t,96088)),"@site/docs/api/geoprocessing/interfaces/ReportResultBase.md",96088],49257947:[()=>t.e(27606).then(t.bind(t,36081)),"@site/docs/api/geoprocessing/functions/overlapFeatures.md",36081],"492daeac":[()=>t.e(66826).then(t.bind(t,58665)),"@site/docs/api/geoprocessing/interfaces/PreprocessingResponse.md",58665],"49ab270b":[()=>t.e(65960).then(t.bind(t,2264)),"@site/docs/api/geoprocessing/functions/valueFormatter.md",2264],"4a4fa746":[()=>t.e(17710).then(t.bind(t,58346)),"@site/docs/api/client-ui/functions/ObjectiveStatus.md",58346],"4ac6148f":[()=>t.e(76148).then(t.bind(t,25987)),"@site/docs/preprocessing.md",25987],"4ac9b518":[()=>t.e(86514).then(t.bind(t,92070)),"@site/docs/api/geoprocessing/interfaces/SeaSketchReportingToggleLayerVisibilityEvent.md",92070],"4b0140ca":[()=>t.e(86012).then(t.bind(t,83006)),"@site/docs/api/geoprocessing/variables/packageSchema.md",83006],"4c0b429a":[()=>t.e(47902).then(t.bind(t,90830)),"@site/docs/api/geoprocessing/functions/unpackMetrics.md",90830],"4c22038c":[()=>t.e(88788).then(t.bind(t,34785)),"@site/docs/api/client-ui/interfaces/ReportStoryLayoutProps.md",34785],"4c31e171":[()=>t.e(62094).then(t.bind(t,61020)),"@site/docs/api/geoprocessing/variables/defaultStatValues.md",61020],"4c776e9d":[()=>t.e(58246).then(t.bind(t,61871)),"@site/docs/api/geoprocessing/functions/getCogFilename.md",61871],"4cc3c8d8":[()=>t.e(47419).then(t.bind(t,49557)),"@site/docs/api/geoprocessing/functions/getMetricGroupObjectiveIds.md",49557],"4ced9953":[()=>t.e(4713).then(t.bind(t,55391)),"@site/docs/api/geoprocessing/functions/metricsWithClassId.md",55391],"4d7553bb":[()=>t.e(76927).then(t.bind(t,87407)),"@site/docs/api/geoprocessing/functions/overlapArea.md",87407],"4d8e6a66":[()=>t.e(78129).then(t.bind(t,84561)),"@site/docs/api/geoprocessing/functions/fgBoundingBox.md",84561],"4dce8c58":[()=>t.e(70107).then(t.bind(t,63509)),"@site/docs/api/geoprocessing/functions/isSketchCollection.md",63509],"4dd4eb46":[()=>t.e(25072).then(t.bind(t,84257)),"@site/docs/api/geoprocessing/variables/objectiveCountsColorMap.md",84257],"4e336666":[()=>t.e(39928).then(t.bind(t,72684)),"@site/docs/api/client-ui/functions/TableStyled.md",72684],"4e7e8c03":[()=>t.e(60586).then(t.bind(t,78942)),"@site/docs/api/geoprocessing/interfaces/SketchMap.md",78942],"4eaab309":[()=>t.e(56444).then(t.bind(t,98779)),"@site/docs/api/geoprocessing/functions/overlapAreaGroupMetrics.md",98779],"4eb66dc8":[()=>t.e(86577).then(t.bind(t,24385)),"@site/docs/api/client-ui/functions/finishTask.md",24385],"4f92df94":[()=>t.e(45449).then(t.bind(t,28660)),"@site/docs/api/geoprocessing/functions/genClipToPolygonDatasources.md",28660],"50662ffb":[()=>t.e(93364).then(t.bind(t,42305)),"@site/docs/tutorials/storybook.md",42305],"5072f88a":[()=>t.e(31904).then(t.bind(t,37713)),"@site/docs/api/client-ui/functions/DropdownItem.md",37713],"50efa68a":[()=>t.e(77321).then(t.bind(t,83149)),"@site/versioned_docs/version-6.1.0/EdgesAndLimits.md",83149],"5114cac7":[()=>t.e(71052).then(t.bind(t,79499)),"@site/docs/api/client-ui/interfaces/FilterSelectOption.md",79499],"51c12c5f":[()=>t.e(34321).then(t.bind(t,27812)),"@site/docs/api/geoprocessing/functions/clipMultiMerge.md",27812],"51c27797":[()=>t.e(26968).then(t.bind(t,23568)),"@site/docs/api/geoprocessing/functions/isMetricArray.md",23568],"51cf6fc8":[()=>t.e(36439).then(t.bind(t,39522)),"@site/docs/api/geoprocessing/variables/OBJECTIVE_YES.md",39522],"5287bb0d":[()=>t.e(61785).then(t.bind(t,54415)),"@site/docs/api/geoprocessing/type-aliases/Zone.md",54415],"533a09ca":[()=>t.e(3098).then(t.bind(t,64700)),"@site/docs/tutorial-basics/create-a-blog-post.md",64700],"539ea286":[()=>t.e(51030).then(t.bind(t,87772)),"@site/docs/api/geoprocessing/type-aliases/GeorasterMetadata.md",87772],"549db752":[()=>t.e(23543).then(t.bind(t,79763)),"@site/docs/api/geoprocessing/functions/packMetrics.md",79763],"54a3c5db":[()=>t.e(25910).then(t.bind(t,8205)),"@site/docs/api/geoprocessing/variables/featuresSchema.md",8205],"54ad080c":[()=>t.e(49176).then(t.bind(t,76465)),"@site/docs/api/geoprocessing/functions/getSketchCollectionChildIds.md",76465],"54e3ca7d":[()=>t.e(68985).then(t.bind(t,89239)),"@site/docs/api/geoprocessing/functions/genSampleUserAttributes.md",89239],"55110d5f":[()=>t.e(99990).then(t.bind(t,26342)),"@site/docs/api/geoprocessing/type-aliases/BBox.md",26342],56816773:[()=>t.e(59484).then(t.bind(t,98382)),"@site/docs/api/geoprocessing/functions/testWithinPerc.md",98382],"56a94e77":[()=>t.e(69963).then(t.bind(t,77418)),"@site/docs/api/geoprocessing/variables/datasourceConfig.md",77418],"575e5b46":[()=>t.e(88518).then(t.bind(t,84691)),"@site/docs/api/client-ui/functions/SmallReportTableStyled.md",84691],"5765ff9f":[()=>t.e(81413).then(t.bind(t,75198)),"@site/docs/api/geoprocessing/variables/globalDatasourcesById.md",75198],"57734c3e":[()=>t.e(53786).then(t.bind(t,4077)),"@site/docs/api/geoprocessing/functions/isGeometry.md",4077],"57b14e43":[()=>t.e(32218).then(t.bind(t,61255)),"@site/docs/api/client-ui/functions/ClassTable.md",61255],"57e60529":[()=>t.e(40632).then(t.bind(t,58900)),"@site/docs/api/geoprocessing/type-aliases/ImportRasterDatasourceOptions.md",58900],"58297ce8":[()=>t.e(39014).then(t.bind(t,28253)),"@site/docs/api/geoprocessing/type-aliases/GroupMetricAgg.md",28253],"583603b7":[()=>t.e(13).then(t.bind(t,13317)),"@site/docs/api/geoprocessing/functions/genSampleSketchCollection.md",13317],"58a05d9a":[()=>t.e(306).then(t.bind(t,41287)),"@site/docs/api/client-ui/functions/Table.md",41287],"58ef7c00":[()=>t.e(27375).then(t.bind(t,75611)),"@site/docs/api/geoprocessing/functions/overlapRasterClass.md",75611],"592f89b7":[()=>t.e(53989).then(t.bind(t,72381)),"@site/docs/api/geoprocessing/functions/squareMeterToMile.md",72381],"594c1392":[()=>t.e(44919).then(t.bind(t,91406)),"@site/docs/api/geoprocessing/type-aliases/InternalVectorDatasource.md",91406],"597c813f":[()=>t.e(44717).then(t.bind(t,91182)),"@site/docs/api/geoprocessing/type-aliases/Objective.md",91182],"598a57b2":[()=>t.e(97860).then(t.bind(t,80934)),"@site/docs/api/geoprocessing/functions/getIucnCategoryNameForSketches.md",80934],"599b8a50":[()=>t.e(61014).then(t.bind(t,12044)),"@site/docs/api/geoprocessing/type-aliases/SUPPORTED_RASTER_STAT.md",12044],"59a1ce31":[()=>t.e(38803).then(t.bind(t,69812)),"@site/docs/api/geoprocessing/interfaces/VectorDataSourceOptions.md",69812],"5a573055":[()=>t.e(47182).then(t.bind(t,86681)),"@site/docs/api/client-ui/functions/InfoStatus.md",86681],"5a69df3e":[()=>t.e(20552).then(t.bind(t,78422)),"@site/docs/api/client-ui/interfaces/TooltipContainerProps.md",78422],"5a71cf91":[()=>t.e(39092).then(t.bind(t,63437)),"@site/docs/api/client-ui/functions/HorizontalStackedBar.md",63437],"5a77b0d8":[()=>t.e(3053).then(t.bind(t,75088)),"@site/docs/api/client-ui/interfaces/TwoColorPointyCircleProps.md",75088],"5a91e8db":[()=>t.e(30414).then(t.bind(t,50007)),"@site/docs/api/geoprocessing/interfaces/RoundDecimalOptions.md",50007],"5a940ec9":[()=>t.e(73211).then(t.bind(t,48810)),"@site/docs/api/client-ui/interfaces/FilterSelect.md",48810],"5b483024":[()=>t.e(76373).then(t.bind(t,27674)),"@site/docs/api/geoprocessing/interfaces/GeoprocessingServiceMetadata.md",27674],"5b5a2815":[()=>t.e(80684).then(t.bind(t,15018)),"@site/docs/api/geoprocessing/functions/getInternalVectorDatasourceById.md",15018],"5b65a4a8":[()=>t.e(87793).then(t.bind(t,28769)),"@site/docs/api/geoprocessing/functions/genSampleSketch.md",28769],"5b725301":[()=>t.e(16824).then(t.bind(t,9379)),"@site/docs/api/geoprocessing/type-aliases/Geography.md",9379],"5bd7a5c6":[()=>t.e(98376).then(t.bind(t,45412)),"@site/docs/api/geoprocessing/classes/GeoprocessingHandler.md",45412],"5be9832d":[()=>t.e(19413).then(t.bind(t,93914)),"@site/docs/api/client-ui/functions/ReportStoryLayout.md",93914],"5bf3aef7":[()=>t.e(16100).then(t.bind(t,839)),"@site/docs/api/geoprocessing/interfaces/VectorFeature.md",839],"5c244a8a":[()=>t.e(93505).then(t.bind(t,21383)),"@site/docs/api/geoprocessing/type-aliases/ObjectiveId.md",21383],"5c25e40f":[()=>t.e(8745).then(t.bind(t,99408)),"@site/docs/api/geoprocessing/type-aliases/ExternalVectorDatasource.md",99408],"5c41f114":[()=>t.e(99126).then(t.bind(t,41539)),"@site/docs/api/geoprocessing/variables/UNPROTECTED_LEVEL.md",41539],"5c52f6e8":[()=>t.e(21489).then(t.bind(t,64085)),"@site/docs/api/client-ui/functions/FilterSelectTable.md",64085],"5c868d36":[()=>t.e(91974).then(t.bind(t,75254)),"@site/docs/tutorial-basics/create-a-page.md",75254],"5cbd25da":[()=>t.e(56479).then(t.bind(t,88376)),"@site/versioned_docs/version-6.1.0/tutorial-extras/manage-docs-versions.md",88376],"5cd6694a":[()=>t.e(52219).then(t.bind(t,4161)),"@site/docs/api/client-ui/functions/CollapseGroup.md",4161],"5d30da0c":[()=>t.e(86979).then(t.bind(t,60306)),"@site/docs/api/client-ui/classes/ReportError.md",60306],"5dce8dd1":[()=>t.e(73569).then(t.bind(t,37062)),"@site/docs/api/geoprocessing/interfaces/VectorPropertyFilter.md",37062],"5e411019":[()=>t.e(99609).then(t.bind(t,9501)),"@site/docs/api/geoprocessing/functions/overlapFeaturesGroupMetrics.md",9501],"5e8c322a":[()=>t.e(50594).then(t.bind(t,83478)),"@site/docs/api/index.md",83478],"5e95c892":[()=>t.e(9647).then(t.bind(t,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(t.bind(t,4784)),"@generated/docusaurus.config",4784],"5eed5665":[()=>t.e(34620).then(t.bind(t,42708)),"@site/docs/api/geoprocessing/type-aliases/ImportVectorDatasourceConfig.md",42708],"5f72403c":[()=>t.e(70467).then(t.bind(t,91119)),"@site/versioned_docs/version-6.1.0/concepts/Concepts.md",91119],"5fab0d7b":[()=>t.e(86180).then(t.bind(t,12754)),"@site/docs/EdgesAndLimits.md",12754],"5faf1f47":[()=>t.e(18185).then(t.bind(t,71884)),"@site/docs/api/client-ui/functions/ClassTableStyled.md",71884],"5fd2ca4b":[()=>t.e(30326).then(t.bind(t,90921)),"@site/docs/api/geoprocessing/functions/runLambdaWorker.md",90921],"60437e04":[()=>t.e(9430).then(t.bind(t,98256)),"@site/docs/api/client-ui/functions/StyledTwoColorPointyCircle.md",98256],"6069dc02":[()=>t.e(4763).then(t.bind(t,48225)),"@site/docs/api/geoprocessing/functions/clipToPolygonFeatures.md",48225],"6073880f":[()=>t.e(91945).then(t.bind(t,10268)),"@site/docs/api/client-ui/interfaces/ReportChartFigureProps.md",10268],"60c49928":[()=>t.e(83168).then(t.bind(t,16572)),"@site/docs/api/geoprocessing/variables/ReportContext.md",16572],"60d03e30":[()=>t.e(45560).then(t.bind(t,9526)),"@site/docs/api/geoprocessing/variables/rbcsConstants.md",9526],"60f65e51":[()=>t.e(29369).then(t.bind(t,81403)),"@site/docs/api/geoprocessing/type-aliases/GeoJsonProperties.md",81403],61695351:[()=>t.e(61993).then(t.bind(t,66330)),"@site/docs/concepts/Concepts.md",66330],"636e82b2":[()=>t.e(30343).then(t.bind(t,97265)),"@site/docs/api/geoprocessing/variables/fcSchema.md",97265],"63b9acb4":[()=>t.e(41039).then(t.bind(t,65642)),"@site/docs/api/client-ui/functions/RbcsActivitiesCard.md",65642],64866596:[()=>t.e(58213).then(t.bind(t,62721)),"@site/versioned_docs/version-6.1.0/gip/README.md",62721],"64dbaf0f":[()=>t.e(8016).then(t.bind(t,41960)),"@site/docs/api/geoprocessing/functions/scanTasks.md",41960],"6556adbb":[()=>t.e(84138).then(t.bind(t,98075)),"@site/docs/api/client-ui/functions/ToolbarStyled.md",98075],"660b2a78":[()=>t.e(17631).then(t.bind(t,28597)),"@site/docs/api/geoprocessing/functions/updateCommandsSync.md",28597],"672ed64a":[()=>t.e(15626).then(t.bind(t,87643)),"@site/docs/api/geoprocessing/functions/capitalize.md",87643],"673ec543":[()=>t.e(19761).then(t.bind(t,31423)),"@site/docs/api/client-ui/interfaces/PillColumnProps.md",31423],"678d861b":[()=>t.e(4965).then(t.bind(t,93306)),"@site/docs/api/geoprocessing/interfaces/MultiLineString.md",93306],"679dc2ab":[()=>t.e(63787).then(t.bind(t,35430)),"@site/docs/api/geoprocessing/functions/batchDeleteTasks.md",35430],"685db979":[()=>t.e(57829).then(t.bind(t,47446)),"@site/docs/api/geoprocessing/type-aliases/stats.md",47446],"687577ad":[()=>t.e(89052).then(t.bind(t,71386)),"@site/docs/api/geoprocessing/interfaces/FeatureCollection.md",71386],"6884bd1a":[()=>t.e(27521).then(t.bind(t,43731)),"@site/docs/api/geoprocessing/functions/isExternalDatasource.md",43731],"68bac681":[()=>t.e(94072).then(t.bind(t,38870)),"@site/versioned_docs/version-6.1.0/gip/GIP-1-i18n.md",38870],"69d4b55a":[()=>t.e(76597).then(t.bind(t,49862)),"@site/versioned_docs/version-6.1.0/Migrating.md",49862],"69e9e61b":[()=>t.e(41130).then(t.bind(t,38593)),"@site/docs/api/geoprocessing/variables/OBJECTIVE_YELLOW.md",38593],"6a3047b1":[()=>t.e(43333).then(t.bind(t,56382)),"@site/docs/api/geoprocessing/type-aliases/LoadedPackage.md",56382],"6a7304f2":[()=>t.e(57450).then(t.bind(t,88275)),"@site/docs/api/geoprocessing/type-aliases/OsmLandFeature.md",88275],"6a916855":[()=>t.e(63234).then(t.bind(t,31139)),"@site/docs/api/geoprocessing/interfaces/MetricPack.md",31139],"6aa3a25b":[()=>t.e(22248).then(t.bind(t,38710)),"@site/docs/api/client-ui/interfaces/VerticalSpacerProps.md",38710],"6b810897":[()=>t.e(31386).then(t.bind(t,83811)),"@site/docs/api/geoprocessing/variables/seaSketchReportingMessageEventType.md",83811],"6b9fd7ab":[()=>t.e(69328).then(t.bind(t,53599)),"@site/docs/api/geoprocessing/functions/toSketchArray.md",53599],"6cb9b8c5":[()=>t.e(511).then(t.bind(t,37369)),"@site/docs/api/geoprocessing/functions/getRasterDatasourceById.md",37369],"6cfde557":[()=>t.e(37906).then(t.bind(t,40990)),"@site/docs/api/geoprocessing/variables/objectivesSchema.md",40990],"6d296574":[()=>t.e(34016).then(t.bind(t,78392)),"@site/docs/api/client-ui/functions/Toolbar.md",78392],"6d612f6b":[()=>t.e(40650).then(t.bind(t,13651)),"@site/docs/api/geoprocessing/type-aliases/SupportedFormats.md",13651],"6d96b411":[()=>t.e(75272).then(t.bind(t,42462)),"@site/docs/api/client-ui/functions/GeographySwitcher.md",42462],"6dd78e99":[()=>t.e(44849).then(t.bind(t,30135)),"@site/docs/api/geoprocessing/index.md",30135],"6e02bca9":[()=>t.e(48369).then(t.bind(t,44117)),"@site/docs/api/geoprocessing/interfaces/BaseImportDatasourceConfig.md",44117],"6e26a28f":[()=>t.e(37627).then(t.bind(t,38141)),"@site/docs/api/client-ui/functions/IucnMatrix.md",38141],"6e2997f6":[()=>t.e(60047).then(t.bind(t,77626)),"@site/docs/api/geoprocessing/variables/metricGroupsSchema.md",77626],"6e7377a1":[()=>t.e(78190).then(t.bind(t,48688)),"@site/docs/api/client-ui/functions/App.md",48688],"6e8a13b0":[()=>t.e(1411).then(t.bind(t,94447)),"@site/docs/api/client-ui/interfaces/DropdownProps.md",94447],"6efe857f":[()=>t.e(8465).then(t.bind(t,32951)),"@site/docs/api/client-ui/functions/ResultsCard.md",32951],"6f53a749":[()=>t.e(18298).then(t.bind(t,86757)),"@site/docs/api/geoprocessing/functions/aquacultureScore.md",86757],"6f9fe69a":[()=>t.e(52637).then(t.bind(t,51145)),"@site/docs/api/geoprocessing/variables/version.md",51145],"707b92ce":[()=>t.e(77204).then(t.bind(t,25667)),"@site/docs/api/geoprocessing/variables/externalVectorDatasourceSchema.md",25667],"715df43e":[()=>t.e(1378).then(t.bind(t,80575)),"@site/docs/api/geoprocessing/variables/rbcsMpaProtectionLevels.md",80575],"718a249f":[()=>t.e(50577).then(t.bind(t,2340)),"@site/docs/api/client-ui/functions/DropdownTrigger.md",2340],"71bcdb39":[()=>t.e(69312).then(t.bind(t,39443)),"@site/docs/api/client-ui/functions/Circle.md",39443],"724437c1":[()=>t.e(48702).then(t.bind(t,92658)),"@site/docs/api/geoprocessing/functions/getIucnCategoryForActivities.md",92658],"739628b0":[()=>t.e(71436).then(t.bind(t,72468)),"@site/docs/api/geoprocessing/functions/classIdMapping.md",72468],"73e979b3":[()=>t.e(28590).then(t.bind(t,93216)),"@site/docs/api/client-ui/interfaces/FilterSelectTableOptions.md",93216],"73eb5afe":[()=>t.e(72061).then(t.bind(t,48444)),"@site/docs/api/geoprocessing/functions/isMetricPack.md",48444],"753493e0":[()=>t.e(36077).then(t.bind(t,32905)),"@site/docs/api/geoprocessing/type-aliases/load.md",32905],"7569ca31":[()=>t.e(90564).then(t.bind(t,83346)),"@site/docs/api/geoprocessing/functions/rekeyObject.md",83346],"76339d26":[()=>t.e(31149).then(t.bind(t,42993)),"@site/docs/api/geoprocessing/variables/importVectorDatasourceOptionsSchema.md",42993],"76b1649d":[()=>t.e(63822).then(t.bind(t,6545)),"@site/docs/api/geoprocessing/functions/isinternalDatasource.md",6545],"76d46aba":[()=>t.e(7336).then(t.bind(t,40267)),"@site/docs/api/geoprocessing/variables/planningAreaTypesSchema.md",40267],"76e51487":[()=>t.e(87294).then(t.bind(t,53253)),"@site/docs/api/geoprocessing/variables/OBJECTIVE_MAYBE.md",53253],"76f005df":[()=>t.e(72605).then(t.bind(t,95824)),"@site/docs/api/geoprocessing/type-aliases/GeoprocessingRequestParams.md",95824],"76f1a969":[()=>t.e(5814).then(t.bind(t,71920)),"@site/docs/api/client-ui/functions/createReportDecorator.md",71920],"77861e5d":[()=>t.e(26126).then(t.bind(t,93434)),"@site/docs/tutorials/deploy.md",93434],"77be8d48":[()=>t.e(85590).then(t.bind(t,29464)),"@site/docs/reportclient.md",29464],"782b2d66":[()=>t.e(93860).then(t.bind(t,94793)),"@site/docs/api/geoprocessing/type-aliases/MpaClassification.md",94793],"783965ce":[()=>t.e(86249).then(t.bind(t,23946)),"@site/docs/api/geoprocessing/interfaces/WindowOptions.md",23946],"795bd4c9":[()=>t.e(94878).then(t.bind(t,12410)),"@site/docs/api/geoprocessing/variables/metricSchema.md",12410],"79d1a076":[()=>t.e(25030).then(t.bind(t,75624)),"@site/docs/api/geoprocessing/functions/isRbcsProtectionLevel.md",75624],"7a0e7b59":[()=>t.e(25435).then(t.bind(t,99853)),"@site/docs/api/client-ui/functions/KeySection.md",99853],"7a5b6a82":[()=>t.e(30683).then(t.bind(t,1620)),"@site/docs/api/geoprocessing/functions/rekeyMetrics.md",1620],"7b202e13":[()=>t.e(29181).then(t.bind(t,96035)),"@site/docs/api/client-ui/interfaces/AppProps.md",96035],"7b2fdb8a":[()=>t.e(32387).then(t.bind(t,36490)),"@site/docs/api/geoprocessing/functions/gearTypeScore.md",36490],"7b505d62":[()=>t.e(84536).then(t.bind(t,62235)),"@site/docs/api/geoprocessing/variables/objectiveCountsAnswers.md",62235],"7ba7cfc0":[()=>t.e(44362).then(t.bind(t,79137)),"@site/docs/api/client-ui/interfaces/ToolbarCardProps.md",79137],"7bb51cbb":[()=>t.e(90799).then(t.bind(t,12543)),"@site/docs/projectclient.md",12543],"7bf88be3":[()=>t.e(38096).then(t.bind(t,40558)),"@site/docs/api/geoprocessing/type-aliases/bandArithmetic.md",40558],"7c49023e":[()=>t.e(41954).then(t.bind(t,45444)),"@site/docs/structure.md",45444],"7c4c7e94":[()=>t.e(65533).then(t.bind(t,32601)),"@site/docs/Testing.md",32601],"7d3c65f4":[()=>t.e(78625).then(t.bind(t,82617)),"@site/docs/api/geoprocessing/type-aliases/min.md",82617],"7d6c9398":[()=>t.e(36984).then(t.bind(t,79660)),"@site/docs/api/geoprocessing/type-aliases/SketchGeometryTypes.md",79660],"7ddc1705":[()=>t.e(5920).then(t.bind(t,26873)),"@site/docs/api/client-ui/functions/SimpleButton.md",26873],"7ded32e9":[()=>t.e(77220).then(t.bind(t,68684)),"@site/docs/api/geoprocessing/functions/isPolygonAllSketchCollection.md",68684],"7e272f4c":[()=>t.e(83673).then(t.bind(t,18939)),"@site/docs/api/client-ui/type-aliases/BlockGroup.md",18939],"7e41cfba":[()=>t.e(63062).then(t.bind(t,57370)),"@site/docs/api/client-ui/functions/ReportTableStyled.md",57370],"7e75397b":[()=>t.e(42280).then(t.bind(t,42312)),"@site/docs/api/geoprocessing/variables/polygonSchema.md",42312],"7e8901cb":[()=>t.e(94903).then(t.bind(t,2198)),"@site/docs/api/geoprocessing/variables/highColor.md",2198],"7fbe8658":[()=>t.e(58454).then(t.bind(t,43955)),"@site/docs/api/client-ui/functions/TooltipItem.md",43955],"81113f50":[()=>t.e(47024).then(t.bind(t,43846)),"@site/docs/api/client-ui/functions/RbcsLearnMore.md",43846],81384957:[()=>t.e(53666).then(t.bind(t,41139)),"@site/docs/api/geoprocessing/variables/defaultReportContext.md",41139],"81f057ea":[()=>t.e(9898).then(t.bind(t,74624)),"@site/docs/api/client-ui/functions/Tooltip.md",74624],"822bd8ab":[()=>t.e(2748).then(t.bind(t,98611)),"@site/docs/tutorial-basics/congratulations.md",98611],"831d0057":[()=>t.e(77091).then(t.bind(t,59758)),"@site/docs/api/client-ui/interfaces/DropdownContainerProps.md",59758],"835f7f11":[()=>t.e(46904).then(t.bind(t,93765)),"@site/docs/api/client-ui/functions/ReportTextDirection.md",93765],"838fb0b0":[()=>t.e(4186).then(t.bind(t,17190)),"@site/docs/api/client-ui/functions/LayerToggle.md",17190],"83a76d74":[()=>t.e(44291).then(t.bind(t,49492)),"@site/docs/api/client-ui/functions/CardDecorator.md",49492],"841863c4":[()=>t.e(44020).then(t.bind(t,21364)),"@site/docs/api/geoprocessing/type-aliases/MetricProperty.md",21364],"84ddff5f":[()=>t.e(98234).then(t.bind(t,51313)),"@site/docs/api/geoprocessing/functions/getFlatGeobufFilename.md",51313],"8517b31c":[()=>t.e(34639).then(t.bind(t,75384)),"@site/docs/api/geoprocessing/functions/rbcsZoneToMetric.md",75384],"853a55a9":[()=>t.e(67458).then(t.bind(t,89768)),"@site/docs/api/client-ui/functions/SketchAttributesCard.md",89768],"85ddfa3e":[()=>t.e(10317).then(t.bind(t,41840)),"@site/docs/api/geoprocessing/interfaces/PreprocessingHandlerOptions.md",41840],"8690fb5d":[()=>t.e(86409).then(t.bind(t,97386)),"@site/docs/api/geoprocessing/interfaces/PreprocessingServiceMetadata.md",97386],"87bfefef":[()=>t.e(75836).then(t.bind(t,2151)),"@site/docs/api/geoprocessing/functions/numberFormat.md",2151],"87eb9014":[()=>t.e(90033).then(t.bind(t,47363)),"@site/docs/api/geoprocessing/functions/genZodErrorMessage.md",47363],"87ef4734":[()=>t.e(24155).then(t.bind(t,13361)),"@site/docs/api/client-ui/type-aliases/RbcsMpaObjectiveRenderMsgFunction.md",13361],"88724c8f":[()=>t.e(43853).then(t.bind(t,25622)),"@site/docs/api/geoprocessing/variables/rasterDatasourceSchema.md",25622],"88adb28a":[()=>t.e(53253).then(t.bind(t,73029)),"@site/docs/api/geoprocessing/variables/FULLY_PROTECTED_LEVEL.md",73029],"88b032cb":[()=>t.e(54865).then(t.bind(t,3480)),"@site/docs/api/geoprocessing/variables/MetricProperties.md",3480],"897968e6":[()=>t.e(54557).then(t.bind(t,31708)),"@site/docs/api/geoprocessing/interfaces/PercentEdgeOptions.md",31708],"89b81506":[()=>t.e(63232).then(t.bind(t,56439)),"@site/docs/api/client-ui/interfaces/GroupCircleProps.md",56439],"8a5d79c1":[()=>t.e(49197).then(t.bind(t,51118)),"@site/docs/api/geoprocessing/functions/getJsonFilename.md",51118],"8b0f1c4e":[()=>t.e(19202).then(t.bind(t,26735)),"@site/versioned_docs/version-6.1.0/antimeridian/Antimeridian.md",26735],"8b417bc1":[()=>t.e(54299).then(t.bind(t,2704)),"@site/versioned_docs/version-6.1.0/Testing.md",2704],"8bc8919d":[()=>t.e(16253).then(t.bind(t,94833)),"@site/docs/api/client-ui/type-aliases/RowConfig.md",94833],"8bec7861":[()=>t.e(98451).then(t.bind(t,17208)),"@site/docs/api/geoprocessing/functions/isNullSketch.md",17208],"8bfd748a":[()=>t.e(73963).then(t.bind(t,43484)),"@site/docs/api/client-ui/interfaces/ClassTableProps.md",43484],"8c623740":[()=>t.e(79382).then(t.bind(t,16547)),"@site/docs/api/geoprocessing/type-aliases/GeoTypes.md",16547],"8cedeea9":[()=>t.e(5635).then(t.bind(t,22033)),"@site/docs/api/geoprocessing/functions/classifyZone.md",22033],"8cfa7b46":[()=>t.e(66310).then(t.bind(t,46766)),"@site/docs/api/geoprocessing/functions/byteSize.md",46766],"8dc88e6d":[()=>t.e(79929).then(t.bind(t,81059)),"@site/docs/skills.md",81059],"8e1e80f0":[()=>t.e(51050).then(t.bind(t,28184)),"@site/docs/api/geoprocessing/functions/firstMatching.md",28184],"8e52731f":[()=>t.e(27584).then(t.bind(t,33707)),"@site/versioned_docs/version-6.1.0/tutorial-extras/translate-your-site.md",33707],"8ebd9ccd":[()=>t.e(31493).then(t.bind(t,99332)),"@site/docs/api/geoprocessing/variables/externalDatasourceSchema.md",99332],"8ec0cf54":[()=>t.e(56783).then(t.bind(t,42478)),"@site/docs/api/client-ui/type-aliases/TargetFormatter.md",42478],"8ee52ef7":[()=>t.e(39598).then(t.bind(t,55434)),"@site/docs/api/geoprocessing/variables/extraParamsSchema.md",55434],"8f002d3e":[()=>t.e(60775).then(t.bind(t,2584)),"@site/docs/api/client-ui/functions/useFunction.md",2584],"8f797c1e":[()=>t.e(37341).then(t.bind(t,4349)),"@site/docs/api/client-ui/interfaces/DownloadOption.md",4349],"8f95f66c":[()=>t.e(6846).then(t.bind(t,21518)),"@site/docs/api/geoprocessing/type-aliases/ExternalRasterDatasource.md",21518],"91b6783f":[()=>t.e(7251).then(t.bind(t,21808)),"@site/docs/api/geoprocessing/interfaces/RasterStatsOptions.md",21808],"922b37a4":[()=>t.e(13095).then(t.bind(t,8975)),"@site/docs/api/geoprocessing/variables/objectiveAnswerSchema.md",8975],92734467:[()=>t.e(75857).then(t.bind(t,70516)),"@site/docs/api/client-ui/functions/IucnLevelCircle.md",70516],"9279e2ec":[()=>t.e(39019).then(t.bind(t,11138)),"@site/docs/api/geoprocessing/interfaces/IucnActivityRank.md",11138],"9312cbc6":[()=>t.e(40910).then(t.bind(t,40978)),"@site/docs/api/geoprocessing/type-aliases/MetricGroup.md",40978],"936e820e":[()=>t.e(30603).then(t.bind(t,47708)),"@site/docs/api/geoprocessing/interfaces/GeoprocessingRequestModel.md",47708],"94ad216f":[()=>t.e(81032).then(t.bind(t,23732)),"@site/versioned_docs/version-6.1.0/Extending.md",23732],"94e3e0e3":[()=>t.e(11407).then(t.bind(t,53428)),"@site/docs/api/client-ui/interfaces/CircleProps.md",53428],"9561be57":[()=>t.e(65561).then(t.bind(t,39003)),"@site/docs/tutorials/existingproject.md",39003],"95d7193c":[()=>t.e(73430).then(t.bind(t,89025)),"@site/docs/api/client-ui/index.md",89025],96060487:[()=>t.e(80407).then(t.bind(t,91684)),"@site/docs/api/geoprocessing/variables/geoTypesSchema.md",91684],"962e3ba3":[()=>t.e(95886).then(t.bind(t,22155)),"@site/docs/tutorials/Tutorials.md",22155],"9639b4bb":[()=>t.e(82664).then(t.bind(t,28241)),"@site/docs/api/client-ui/functions/VerticalSpacer.md",28241],"969ca81a":[()=>t.e(96983).then(t.bind(t,21681)),"@site/docs/api/client-ui/interfaces/RbcsNetworkObjectiveProps.md",21681],"96c08df1":[()=>t.e(92388).then(t.bind(t,15943)),"@site/docs/api/geoprocessing/functions/clip.md",15943],"96c6ab62":[()=>t.e(15908).then(t.bind(t,30792)),"@site/docs/api/geoprocessing/functions/mpaClassMetrics.md",30792],"9709e7cb":[()=>t.e(6673).then(t.bind(t,79634)),"@site/docs/api/geoprocessing/functions/getSketchFeatures.md",79634],"970de22d":[()=>t.e(36640).then(t.bind(t,88244)),"@site/docs/api/geoprocessing/functions/roundLower.md",88244],"976e56d2":[()=>t.e(90687).then(t.bind(t,95269)),"@site/docs/api/geoprocessing/variables/fullColor.md",95269],"9804dfdc":[()=>t.e(56813).then(t.bind(t,5319)),"@site/docs/api/geoprocessing/interfaces/GeoprocessingTask.md",5319],"98ab9f09":[()=>t.e(70925).then(t.bind(t,94481)),"@site/docs/api/geoprocessing/type-aliases/identify.md",94481],"98b8dd79":[()=>t.e(38130).then(t.bind(t,68919)),"@site/docs/api/client-ui/interfaces/IucnLevelCircleRowProps.md",68919],"994b54c0":[()=>t.e(60361).then(t.bind(t,20791)),"@site/docs/api/geoprocessing/variables/datasourceSchema.md",20791],"99df31ff":[()=>t.e(9035).then(t.bind(t,62350)),"@site/docs/api/client-ui/interfaces/RbcsMpaClassPanelProps.md",62350],"99fc20f8":[()=>t.e(43252).then(t.bind(t,44170)),"@site/docs/api/geoprocessing/functions/getObjectiveById.md",44170],"9a2bb2a0":[()=>t.e(68634).then(t.bind(t,65572)),"@site/docs/api/geoprocessing/type-aliases/Project.md",65572],"9a2ca7ca":[()=>t.e(60744).then(t.bind(t,26747)),"@site/docs/api/geoprocessing/variables/rbcsGearTypes.md",26747],"9a50c92d":[()=>t.e(12744).then(t.bind(t,545)),"@site/docs/api/geoprocessing/interfaces/GeogProp.md",545],"9a64398d":[()=>t.e(33967).then(t.bind(t,22131)),"@site/docs/api/geoprocessing/functions/flattenBySketchAllClass.md",22131],"9aca3dd5":[()=>t.e(65361).then(t.bind(t,1796)),"@site/docs/api/geoprocessing/type-aliases/ExecutionMode.md",1796],"9b2427a8":[()=>t.e(5562).then(t.bind(t,62473)),"@site/docs/api/geoprocessing/variables/classStatsSchema.md",62473],"9b757d58":[()=>t.e(339).then(t.bind(t,61326)),"@site/docs/api/geoprocessing/variables/geoprocessingConfigSchema.md",61326],"9b7a6760":[()=>t.e(77989).then(t.bind(t,63482)),"@site/docs/api/geoprocessing/variables/POORLY_PROTECTED_LEVEL.md",63482],"9bbbaa56":[()=>t.e(90597).then(t.bind(t,3823)),"@site/docs/api/geoprocessing/variables/MODERATELY_PROTECTED_LEVEL.md",3823],"9bc477a6":[()=>t.e(23120).then(t.bind(t,77020)),"@site/docs/api/geoprocessing/functions/firstMatchingMetric.md",77020],"9bd9506e":[()=>t.e(45547).then(t.bind(t,38114)),"@site/docs/api/geoprocessing/functions/getIucnLevelNameForSketches.md",38114],"9bdb307d":[()=>t.e(44512).then(t.bind(t,9858)),"@site/docs/api/geoprocessing/interfaces/Feature.md",9858],"9c1010f7":[()=>t.e(74646).then(t.bind(t,99763)),"@site/docs/api/geoprocessing/functions/getFlatGeobufPath.md",99763],"9c30c2c3":[()=>t.e(67511).then(t.bind(t,99874)),"@site/versioned_docs/version-6.1.0/Contributing.md",99874],"9c48eed6":[()=>t.e(67683).then(t.bind(t,7230)),"@site/docs/api/geoprocessing/type-aliases/JSONValue.md",7230],"9d05cd7d":[()=>t.e(8649).then(t.bind(t,53226)),"@site/docs/api/client-ui/functions/TooltipTrigger.md",53226],"9f1c9cfe":[()=>t.e(31437).then(t.bind(t,32482)),"@site/docs/api/geoprocessing/interfaces/HistogramOptions.md",32482],"9f6cf5fd":[()=>t.e(63950).then(t.bind(t,93988)),"@site/docs/api/geoprocessing/functions/metricsSketchIds.md",93988],"9f83c6f7":[()=>t.e(7435).then(t.bind(t,18185)),"@site/docs/api/geoprocessing/variables/externalRasterDatasourceSchema.md",18185],"9fe84de8":[()=>t.e(42).then(t.bind(t,41476)),"@site/docs/api/geoprocessing/interfaces/StatsObject.md",41476],a03c5edd:[()=>t.e(30648).then(t.bind(t,10858)),"@site/versioned_docs/version-6.1.0/introduction.md",10858],a067ac6d:[()=>t.e(29559).then(t.bind(t,52828)),"@site/docs/api/geoprocessing/functions/chunk.md",52828],a09c2993:[()=>t.e(5899).then(t.bind(t,49233)),"@site/docs/introduction.md",49233],a0a49e6e:[()=>t.e(81590).then(t.bind(t,39358)),"@site/docs/api/geoprocessing/functions/randomFloat.md",39358],a156e6ac:[()=>t.e(19029).then(t.bind(t,47220)),"@site/docs/api/client-ui/functions/Collapse.md",47220],a1650638:[()=>t.e(68777).then(t.bind(t,34232)),"@site/docs/api/client-ui/interfaces/ClassTableColumnConfig.md",34232],a1982cf6:[()=>t.e(48623).then(t.bind(t,30538)),"@site/docs/api/geoprocessing/variables/OBJECTIVE_GREEN.md",30538],a1a710c7:[()=>t.e(98064).then(t.bind(t,51830)),"@site/docs/api/client-ui/type-aliases/Block.md",51830],a1b14e0f:[()=>t.e(27417).then(t.bind(t,44494)),"@site/docs/api/client-ui/functions/LanguageSwitcher.md",44494],a1c3829e:[()=>t.e(12903).then(t.bind(t,7806)),"@site/docs/api/geoprocessing/functions/isInternalVectorDatasource.md",7806],a273324b:[()=>t.e(39057).then(t.bind(t,83052)),"@site/docs/api/client-ui/functions/SketchClassTableStyled.md",83052],a2b365cf:[()=>t.e(20647).then(t.bind(t,37526)),"@site/docs/api/client-ui/interfaces/CardProps.md",37526],a37cc2d1:[()=>t.e(69539).then(t.bind(t,9172)),"@site/docs/api/geoprocessing/type-aliases/rasterCalculator.md",9172],a39f65f3:[()=>t.e(49840).then(t.bind(t,81615)),"@site/docs/api/geoprocessing/functions/isFeatureCollection.md",81615],a3e64e69:[()=>t.e(42792).then(t.bind(t,86289)),"@site/docs/api/client-ui/functions/TooltipContainer.md",86289],a41bcd85:[()=>t.e(41945).then(t.bind(t,1150)),"@site/docs/api/geoprocessing/functions/rbcsMpaToMetric.md",1150],a4b70c0e:[()=>t.e(90031).then(t.bind(t,30861)),"@site/docs/api/client-ui/functions/Card.md",30861],a5000089:[()=>t.e(9248).then(t.bind(t,11995)),"@site/docs/api/geoprocessing/functions/genTaskCacheKey.md",11995],a5017b85:[()=>t.e(91074).then(t.bind(t,53333)),"@site/docs/api/client-ui/functions/useSketchProperties.md",53333],a58f4723:[()=>t.e(8489).then(t.bind(t,62961)),"@site/docs/api/geoprocessing/functions/rasterStats.md",62961],a6270d48:[()=>t.e(18331).then(t.bind(t,88999)),"@site/docs/api/client-ui/functions/StyledPill.md",88999],a698f61a:[()=>t.e(44099).then(t.bind(t,43796)),"@site/docs/api/geoprocessing/type-aliases/ClassificationId.md",43796],a6fab790:[()=>t.e(11807).then(t.bind(t,71234)),"@site/docs/api/geoprocessing/variables/seaSketchReportingVisibleLayersChangeEvent.md",71234],a72a19ab:[()=>t.e(83039).then(t.bind(t,71057)),"@site/docs/api/geoprocessing/interfaces/ReportResult.md",71057],a73c2a00:[()=>t.e(22166).then(t.bind(t,37251)),"@site/docs/api/geoprocessing/functions/toPercentMetric.md",37251],a745502a:[()=>t.e(33794).then(t.bind(t,42626)),"@site/docs/api/client-ui/functions/ChartLegend.md",42626],a7456010:[()=>t.e(61235).then(t.t.bind(t,88552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",88552],a74d2383:[()=>t.e(21241).then(t.bind(t,3619)),"@site/docs/api/geoprocessing/functions/overlapSubarea.md",3619],a7bd4aaa:[()=>t.e(67098).then(t.bind(t,31723)),"@theme/DocVersionRoot",31723],a7c88a93:[()=>t.e(88527).then(t.bind(t,21065)),"@site/docs/api/geoprocessing/variables/internalVectorDatasourceSchema.md",21065],a7e44d9e:[()=>t.e(80334).then(t.bind(t,69689)),"@site/docs/api/geoprocessing/functions/batchDelete.md",69689],a94703ab:[()=>Promise.all([t.e(71869),t.e(79048)]).then(t.bind(t,11377)),"@theme/DocRoot",11377],a9687b02:[()=>t.e(86090).then(t.bind(t,31802)),"@site/docs/api/client-ui/interfaces/HorizontalStackedBarProps.md",31802],a9e39b96:[()=>t.e(5277).then(t.bind(t,9904)),"@site/docs/api/geoprocessing/variables/featureSchema.md",9904],aa37aa09:[()=>t.e(45744).then(t.bind(t,46369)),"@site/docs/api/geoprocessing/interfaces/LineString.md",46369],aafb361c:[()=>t.e(23754).then(t.bind(t,58199)),"@site/docs/api/geoprocessing/functions/isPointSketchCollection.md",58199],ab0eb107:[()=>t.e(32839).then(t.bind(t,59893)),"@site/docs/api/geoprocessing/variables/rbcsAnchoringActivities.md",59893],ab208bf2:[()=>t.e(39874).then(t.bind(t,15736)),"@site/docs/api/client-ui/functions/WarningPill.md",15736],ab53dc1b:[()=>t.e(95020).then(t.bind(t,68104)),"@site/docs/api/geoprocessing/functions/toShortSketches.md",68104],ab71a14f:[()=>t.e(23970).then(t.bind(t,86180)),"@site/docs/api/geoprocessing/functions/isImportVectorDatasourceConfig.md",86180],aba21aa0:[()=>t.e(35742).then(t.t.bind(t,27093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",27093],abb5965e:[()=>t.e(90294).then(t.bind(t,27135)),"@site/docs/api/geoprocessing/type-aliases/MetricIdTypes.md",27135],ac398330:[()=>t.e(50753).then(t.bind(t,57941)),"@site/docs/api/geoprocessing/functions/randomInt.md",57941],ac5c11db:[()=>t.e(43359).then(t.bind(t,31493)),"@site/docs/api/geoprocessing/type-aliases/ISO8601Duration.md",31493],ad5d9006:[()=>t.e(4390).then(t.bind(t,25599)),"@site/docs/api/geoprocessing/functions/genClipToPolygonFeatures.md",25599],ada78d25:[()=>t.e(46139).then(t.bind(t,36513)),"@site/docs/tutorials/subdividing.md",36513],adf3778a:[()=>t.e(67666).then(t.bind(t,98722)),"@site/docs/api/geoprocessing/functions/includeVirtualSketch.md",98722],ae6af915:[()=>t.e(59207).then(t.bind(t,42728)),"@site/docs/api/geoprocessing/functions/genSampleNullSketch.md",42728],aefb526e:[()=>t.e(36811).then(t.bind(t,27195)),"@site/docs/api/client-ui/functions/TwoColorPointyCircle.md",27195],af847786:[()=>t.e(66934).then(t.bind(t,41054)),"@site/docs/api/geoprocessing/interfaces/GeometryCollection.md",41054],af937e88:[()=>t.e(54986).then(t.bind(t,93680)),"@site/src/pages/storybook.md",93680],b03a6809:[()=>t.e(99666).then(t.bind(t,75849)),"@site/docs/api/geoprocessing/type-aliases/TaskKey.md",75849],b0fe2760:[()=>t.e(4169).then(t.bind(t,47392)),"@site/docs/api/geoprocessing/variables/rbcsAquacultureActivities.md",47392],b19c47a1:[()=>t.e(45189).then(t.bind(t,23614)),"@site/docs/api/client-ui/functions/WatersDiagram.md",23614],b1abec39:[()=>t.e(749).then(t.bind(t,60518)),"@site/docs/api/client-ui/type-aliases/StringOrNumber.md",60518],b20ce122:[()=>t.e(94270).then(t.bind(t,87101)),"@site/docs/api/geoprocessing/variables/clientJsonConfigSchema.md",87101],b23c3530:[()=>t.e(52644).then(t.bind(t,96570)),"@site/docs/api/geoprocessing/functions/sketchToZone.md",96570],b260a133:[()=>t.e(37041).then(t.bind(t,74833)),"@site/docs/Contributing.md",74833],b34b854d:[()=>t.e(57349).then(t.bind(t,54016)),"@site/docs/api/geoprocessing/interfaces/PreprocessingService.md",54016],b35a4bab:[()=>t.e(11431).then(t.bind(t,24192)),"@site/docs/api/client-ui/functions/DataDownloadToolbar.md",24192],b3b449a4:[()=>t.e(56258).then(t.bind(t,2239)),"@site/docs/api/geoprocessing/functions/cleanBBox.md",2239],b4632e35:[()=>t.e(76847).then(t.bind(t,36487)),"@site/docs/api/geoprocessing/functions/toFeaturePolygonArray.md",36487],b498c8c4:[()=>t.e(53986).then(t.bind(t,88833)),"@site/docs/api/geoprocessing/type-aliases/MetricGroups.md",88833],b4ad6a28:[()=>t.e(32355).then(t.bind(t,87264)),"@site/docs/api/geoprocessing/functions/removeSketchPolygonHoles.md",87264],b570adc9:[()=>t.e(75922).then(t.bind(t,11409)),"@site/docs/api/geoprocessing/variables/iucnLevels.md",11409],b5927a7f:[()=>t.e(47006).then(t.bind(t,46654)),"@site/docs/api/geoprocessing/interfaces/SketchCollection.md",46654],b604b309:[()=>t.e(84943).then(t.bind(t,94556)),"@site/docs/api/geoprocessing/functions/getUserAttribute.md",94556],b6471e50:[()=>t.e(65725).then(t.bind(t,10546)),"@site/docs/api/geoprocessing/functions/isImportRasterDatasourceConfig.md",10546],b6f12020:[()=>t.e(85964).then(t.bind(t,80852)),"@site/docs/api/geoprocessing/classes/PreprocessingHandler.md",80852],b705015d:[()=>t.e(33777).then(t.bind(t,53590)),"@site/docs/gip/README.md",53590],b75d1943:[()=>t.e(19788).then(t.bind(t,35377)),"@site/docs/api/geoprocessing/functions/isMetric.md",35377],b79706ee:[()=>t.e(8326).then(t.bind(t,39824)),"@site/docs/api/geoprocessing/functions/getFeaturesForSketchBBoxes.md",39824],b8e8735c:[()=>t.e(74696).then(t.bind(t,11380)),"@site/docs/api/geoprocessing/interfaces/ProjectClientInterface.md",11380],b93181d8:[()=>t.e(96985).then(t.bind(t,74656)),"@site/docs/api/geoprocessing/functions/area.md",74656],b965fcf2:[()=>t.e(88614).then(t.bind(t,19621)),"@site/docs/api/client-ui/interfaces/PillProps.md",19621],bb47ce6c:[()=>t.e(31681).then(t.t.bind(t,92898,19)),"@generated/docusaurus-plugin-content-docs/default/p/geoprocessing-docs-next-79d.json",92898],bba702a1:[()=>t.e(64383).then(t.bind(t,39186)),"@site/docs/antimeridian/Antimeridian.md",39186],bbe5e087:[()=>t.e(56985).then(t.bind(t,27021)),"@site/docs/api/geoprocessing/interfaces/DefaultExtraParams.md",27021],bcb896d7:[()=>t.e(5558).then(t.bind(t,69863)),"@site/docs/api/geoprocessing/variables/projectSchema.md",69863],bcea90b8:[()=>t.e(81837).then(t.bind(t,81870)),"@site/docs/api/geoprocessing/interfaces/OverlapRasterOptions.md",81870],bd00d4f3:[()=>t.e(30068).then(t.bind(t,7471)),"@site/docs/geoprocessing.md",7471],bd35c30f:[()=>t.e(71153).then(t.bind(t,82439)),"@site/docs/api/geoprocessing/functions/getHistogram.md",82439],bda60f6c:[()=>t.e(43527).then(t.bind(t,14681)),"@site/docs/api/geoprocessing/variables/loadedPackageSchema.md",14681],bebddf70:[()=>t.e(97149).then(t.bind(t,20276)),"@site/docs/api/client-ui/interfaces/IucnActivityRank.md",20276],bed62a7f:[()=>t.e(27630).then(t.bind(t,28576)),"@site/docs/api/geoprocessing/functions/isExternalVectorDatasource.md",28576],c0043b6b:[()=>t.e(59253).then(t.bind(t,115)),"@site/docs/api/geoprocessing/functions/classifyMPA.md",115],c01f9689:[()=>t.e(55791).then(t.bind(t,63229)),"@site/docs/api/geoprocessing/type-aliases/Geometry.md",63229],c0295fc4:[()=>t.e(43101).then(t.bind(t,90246)),"@site/docs/api/geoprocessing/variables/globalDatasources.md",90246],c0953c5f:[()=>t.e(37879).then(t.bind(t,12310)),"@site/docs/api/geoprocessing/functions/sortMetricsDisplayOrder.md",12310],c0b36077:[()=>t.e(43891).then(t.bind(t,12767)),"@site/docs/api/geoprocessing/functions/bboxOverlap.md",12767],c0d9604c:[()=>t.e(9462).then(t.bind(t,33283)),"@site/docs/api/geoprocessing/functions/zeroSketch.md",33283],c30ad28c:[()=>t.e(52325).then(t.bind(t,97937)),"@site/docs/api/geoprocessing/variables/geoblazeDefaultStatValues.md",97937],c33184be:[()=>t.e(53618).then(t.bind(t,40619)),"@site/docs/api/geoprocessing/type-aliases/Geographies.md",40619],c3f53926:[()=>t.e(98766).then(t.bind(t,23659)),"@site/docs/api/client-ui/functions/ProgressBar.md",23659],c42a8406:[()=>t.e(53939).then(t.bind(t,99614)),"@site/docs/api/geoprocessing/functions/getJsonUserAttribute.md",99614],c45a4367:[()=>t.e(99458).then(t.bind(t,93211)),"@site/versioned_docs/version-6.1.0/architecture/Architecture.md",93211],c4703dab:[()=>t.e(95611).then(t.bind(t,33262)),"@site/docs/api/client-ui/interfaces/StyledLegendProps.md",33262],c4b7406e:[()=>t.e(74936).then(t.bind(t,83738)),"@site/docs/api/geoprocessing/functions/getExternalRasterDatasourceById.md",83738],c4be7b44:[()=>t.e(35402).then(t.bind(t,82403)),"@site/docs/api/geoprocessing/functions/getExternalVectorDatasourceById.md",82403],c533f048:[()=>t.e(31387).then(t.bind(t,80219)),"@site/docs/api/geoprocessing/interfaces/RegBasedClassificationMetric.md",80219],c5879d20:[()=>t.e(31429).then(t.bind(t,76254)),"@site/docs/tutorials/newproject.md",76254],c5b77b19:[()=>t.e(3575).then(t.bind(t,71191)),"@site/docs/api/client-ui/functions/CheckboxGroup.md",71191],c5f21ea6:[()=>t.e(80636).then(t.bind(t,77191)),"@site/docs/api/geoprocessing/variables/fixtures.md",77191],c60f0ca5:[()=>t.e(66203).then(t.bind(t,7950)),"@site/docs/api/client-ui/interfaces/Row.md",7950],c6109f2f:[()=>t.e(73114).then(t.bind(t,47109)),"@site/docs/api/geoprocessing/type-aliases/ClipOperations.md",47109],c65e3ea9:[()=>t.e(78328).then(t.bind(t,45051)),"@site/versioned_docs/version-6.1.0/tutorial-basics/create-a-page.md",45051],c6aca044:[()=>t.e(29295).then(t.bind(t,96198)),"@site/docs/api/geoprocessing/functions/getFeatures.md",96198],c6fb0e59:[()=>t.e(47467).then(t.bind(t,69072)),"@site/docs/api/geoprocessing/functions/hasOwnProperty.md",69072],c74d5e3d:[()=>t.e(76162).then(t.bind(t,51111)),"@site/docs/api/geoprocessing/functions/getSketchToMpaProtectionLevel.md",51111],c8f327b7:[()=>t.e(10535).then(t.bind(t,60380)),"@site/docs/api/geoprocessing/interfaces/MetricGroupItem.md",60380],c93ad82c:[()=>t.e(54522).then(t.bind(t,64267)),"@site/docs/api/client-ui/functions/runTask.md",64267],c9716e5b:[()=>t.e(4317).then(t.bind(t,98574)),"@site/docs/api/geoprocessing/variables/baseDatasourceSchema.md",98574],c9cc33ba:[()=>t.e(73044).then(t.bind(t,27260)),"@site/docs/api/geoprocessing/variables/jsonSchema.md",27260],c9d639a6:[()=>t.e(78544).then(t.bind(t,38682)),"@site/docs/api/geoprocessing/functions/isLineStringFeature.md",38682],c9f6b581:[()=>t.e(49205).then(t.bind(t,58116)),"@site/docs/api/geoprocessing/type-aliases/Metrics.md",58116],ca1aa266:[()=>t.e(14160).then(t.bind(t,52097)),"@site/docs/api/client-ui/interfaces/GeographySwitcherProps.md",52097],ca557eb8:[()=>t.e(66875).then(t.bind(t,95114)),"@site/versioned_docs/version-6.1.0/tutorial-basics/markdown-features.mdx",95114],ca83acbe:[()=>t.e(13579).then(t.bind(t,45772)),"@site/docs/api/geoprocessing/functions/isPolygonFeatureArray.md",45772],cae4d725:[()=>t.e(47964).then(t.bind(t,89197)),"@site/docs/api/geoprocessing/functions/fgbFetchAll.md",89197],cb42257b:[()=>t.e(44514).then(t.bind(t,71526)),"@site/docs/api/geoprocessing/variables/iucnCategoriesMap.md",71526],cb6adff9:[()=>t.e(16966).then(t.bind(t,25285)),"@site/docs/api/geoprocessing/functions/metricsWithSketchId.md",25285],cbfda352:[()=>t.e(88955).then(t.bind(t,86530)),"@site/docs/api/client-ui/functions/RbcsNetworkObjectiveStatus.md",86530],cbfe050e:[()=>t.e(56871).then(t.bind(t,4872)),"@site/docs/api/geoprocessing/type-aliases/RbcsMpaProtectionLevel.md",4872],cc189fd2:[()=>t.e(26945).then(t.bind(t,55124)),"@site/docs/devcontainer/devcontainer.md",55124],cc531d35:[()=>t.e(94506).then(t.bind(t,85908)),"@site/docs/api/geoprocessing/interfaces/VectorDataSourceDetails.md",85908],cce52400:[()=>t.e(12577).then(t.bind(t,79812)),"@site/docs/api/geoprocessing/variables/commonHeaders.md",79812],cd280042:[()=>t.e(16182).then(t.bind(t,87045)),"@site/docs/api/geoprocessing/type-aliases/Package.md",87045],cd64df70:[()=>t.e(97163).then(t.bind(t,63354)),"@site/docs/api/geoprocessing/functions/parseLambdaResponse.md",63354],cd822b78:[()=>t.e(54037).then(t.bind(t,91363)),"@site/docs/tutorials/createReport.md",91363],cdc57661:[()=>t.e(59926).then(t.bind(t,50210)),"@site/docs/api/geoprocessing/functions/genSampleSketchContext.md",50210],cdea44ef:[()=>t.e(10045).then(t.bind(t,22114)),"@site/docs/api/geoprocessing/variables/HIGHLY_PROTECTED_LEVEL.md",22114],cdec8630:[()=>t.e(2105).then(t.bind(t,48459)),"@site/docs/api/dataproviders/index.md",48459],ceb71161:[()=>t.e(17063).then(t.bind(t,51401)),"@site/docs/api/client-ui/type-aliases/Column.md",51401],cf1a380b:[()=>t.e(88345).then(t.bind(t,4933)),"@site/docs/api/geoprocessing/functions/minWidth.md",4933],cf65afab:[()=>t.e(34467).then(t.bind(t,58451)),"@site/docs/api/client-ui/functions/GreenPill.md",58451],cf8d0fcc:[()=>t.e(17288).then(t.bind(t,63955)),"@site/docs/api/client-ui/functions/IucnActivitiesCard.md",63955],d076dc84:[()=>t.e(52543).then(t.bind(t,60316)),"@site/docs/api/geoprocessing/type-aliases/Nullable.md",60316],d0b39ee5:[()=>t.e(68162).then(t.bind(t,64030)),"@site/docs/api/geoprocessing/interfaces/Sketch.md",64030],d0c3e410:[()=>t.e(63437).then(t.bind(t,54632)),"@site/docs/api/geoprocessing/functions/splitFeatureAntimeridian.md",54632],d10f84d4:[()=>t.e(784).then(t.bind(t,74736)),"@site/docs/api/geoprocessing/functions/squareMeterToKilometer.md",74736],d1227148:[()=>t.e(97146).then(t.bind(t,69277)),"@site/docs/api/geoprocessing/type-aliases/RasterDatasource.md",69277],d299e6a5:[()=>t.e(47420).then(t.bind(t,67674)),"@site/docs/api/geoprocessing/functions/nestMetrics.md",67674],d2a7cdae:[()=>t.e(33730).then(t.bind(t,11790)),"@site/docs/api/client-ui/interfaces/InfoStatusProps.md",11790],d2f7be51:[()=>t.e(96517).then(t.bind(t,27744)),"@site/docs/api/client-ui/interfaces/LabelProps.md",27744],d3818960:[()=>t.e(16978).then(t.bind(t,65376)),"@site/docs/api/geoprocessing/functions/getDatasetBucketName.md",65376],d39d81b4:[()=>t.e(16844).then(t.bind(t,42882)),"@site/versioned_docs/version-6.1.0/tutorial-basics/congratulations.md",42882],d3b48789:[()=>t.e(99908).then(t.bind(t,6784)),"@site/docs/api/geoprocessing/interfaces/GeoprocessingHandlerOptions.md",6784],d3bb98d0:[()=>t.e(29755).then(t.bind(t,23742)),"@site/docs/api/client-ui/functions/IucnLevelCircleRow.md",23742],d3d9fe11:[()=>t.e(49280).then(t.bind(t,92869)),"@site/docs/api/client-ui/functions/RbcsZoneClassPanel.md",92869],d3fa14af:[()=>t.e(20673).then(t.bind(t,48498)),"@site/docs/api/geoprocessing/functions/getSum.md",48498],d3fb262d:[()=>t.e(34).then(t.bind(t,73957)),"@site/docs/api/geoprocessing/variables/box2dSchema.md",73957],d466d172:[()=>t.e(801).then(t.bind(t,43241)),"@site/docs/api/client-ui/interfaces/StyledTwoColorPointyCircleProps.md",43241],d4813f73:[()=>t.e(90771).then(t.bind(t,25092)),"@site/docs/api/geoprocessing/functions/getJsonPath.md",25092],d54172bc:[()=>t.e(71253).then(t.bind(t,63168)),"@site/docs/api/geoprocessing/variables/PLANNING_AREA_TYPES.md",63168],d6d926f4:[()=>t.e(12094).then(t.bind(t,20130)),"@site/docs/api/geoprocessing/functions/overlapGroupMetrics.md",20130],d6fc3522:[()=>t.e(17608).then(t.bind(t,39790)),"@site/docs/api/client-ui/functions/Dropdown.md",39790],d761df68:[()=>t.e(9235).then(t.bind(t,84615)),"@site/docs/api/client-ui/interfaces/ToolbarProps.md",84615],d7790313:[()=>t.e(36043).then(t.bind(t,79476)),"@site/docs/api/geoprocessing/variables/lowColor.md",79476],d8107dcc:[()=>t.e(12443).then(t.bind(t,3121)),"@site/docs/api/geoprocessing/functions/zeroPolygon.md",3121],d82f874a:[()=>t.e(68269).then(t.bind(t,27002)),"@site/docs/api/geoprocessing/functions/flattenByGroupSketchAllClass.md",27002],d834047e:[()=>t.e(34426).then(t.bind(t,13753)),"@site/docs/api/geoprocessing/functions/genFeature.md",13753],d8e024af:[()=>t.e(48903).then(t.bind(t,46491)),"@site/docs/api/geoprocessing/interfaces/SeaSketchReportingToggleLanguageEvent.md",46491],d92ca8f5:[()=>t.e(12099).then(t.bind(t,66532)),"@site/docs/api/geoprocessing/variables/vectorDatasourceSchema.md",66532],d9d2bbd8:[()=>t.e(59076).then(t.bind(t,97270)),"@site/docs/api/client-ui/functions/ReportPage.md",97270],db98811b:[()=>t.e(88630).then(t.bind(t,29022)),"@site/docs/api/geoprocessing/functions/featureToSketch.md",29022],dba81e08:[()=>t.e(28524).then(t.bind(t,63302)),"@site/docs/api/geoprocessing/interfaces/FeatureTree.md",63302],dc5c6130:[()=>t.e(73250).then(t.bind(t,31090)),"@site/docs/api/geoprocessing/functions/getFirstFromParam.md",31090],dc7cfb41:[()=>t.e(34435).then(t.bind(t,34055)),"@site/docs/api/geoprocessing/functions/isPolygonSketchCollection.md",34055],dc8226a5:[()=>t.e(56528).then(t.bind(t,99268)),"@site/docs/api/geoprocessing/interfaces/ProjectClientConfig.md",99268],dccbc92c:[()=>t.e(61886).then(t.bind(t,24997)),"@site/docs/gip/GIP-1-i18n.md",24997],dd11fd39:[()=>t.e(85907).then(t.bind(t,91201)),"@site/docs/api/geoprocessing/variables/bboxSchema.md",91201],dd29fc44:[()=>t.e(50701).then(t.bind(t,89456)),"@site/docs/api/geoprocessing/functions/isInternalRasterDatasource.md",89456],dd844236:[()=>t.e(68402).then(t.bind(t,99412)),"@site/docs/api/geoprocessing/functions/isMultiPolygonSketch.md",99412],de02cc97:[()=>t.e(58382).then(t.bind(t,32453)),"@site/docs/api/geoprocessing/functions/createMetric.md",32453],de0ec296:[()=>t.e(6089).then(t.bind(t,61710)),"@site/docs/api/geoprocessing/type-aliases/sum.md",61710],de5cc829:[()=>t.e(91344).then(t.bind(t,2876)),"@site/docs/api/geoprocessing/functions/genSampleNullSketchCollection.md",2876],dedaee21:[()=>t.e(63682).then(t.bind(t,63462)),"@site/docs/api/client-ui/functions/ToolbarCard.md",63462],def76093:[()=>t.e(96057).then(t.bind(t,19514)),"@site/docs/api/client-ui/interfaces/SegmentControlProps.md",19514],df5a394e:[()=>t.e(90146).then(t.bind(t,34112)),"@site/docs/api/geoprocessing/functions/anchorScore.md",34112],df5aa7dd:[()=>t.e(587).then(t.bind(t,55532)),"@site/docs/api/geoprocessing/interfaces/SeaSketchReportingMessageEvent.md",55532],df943bb5:[()=>t.e(82486).then(t.bind(t,78951)),"@site/docs/api/geoprocessing/functions/groupBy.md",78951],dfbaa6ae:[()=>t.e(58441).then(t.bind(t,13362)),"@site/docs/multiBoundary/multiBoundary.md",13362],dff1c289:[()=>t.e(71724).then(t.bind(t,68043)),"@site/docs/tutorial-extras/manage-docs-versions.md",68043],e12be479:[()=>t.e(97942).then(t.bind(t,68096)),"@site/docs/api/geoprocessing/functions/sortMetrics.md",68096],e1b3512a:[()=>t.e(96753).then(t.bind(t,20056)),"@site/docs/api/geoprocessing/variables/GEOBLAZE_RASTER_STATS.md",20056],e1f1f5e5:[()=>t.e(51055).then(t.bind(t,27229)),"@site/docs/api/geoprocessing/functions/sketchToId.md",27229],e2104e2c:[()=>t.e(65713).then(t.bind(t,55815)),"@site/docs/api/client-ui/functions/SketchClassTable.md",55815],e276cf42:[()=>t.e(20100).then(t.bind(t,13907)),"@site/docs/api/geoprocessing/variables/objectiveAnswerMapSchema.md",13907],e2c2a025:[()=>t.e(34625).then(t.bind(t,48227)),"@site/docs/api/geoprocessing/functions/createMetrics.md",48227],e2dec549:[()=>t.e(70278).then(t.bind(t,59802)),"@site/docs/api/client-ui/interfaces/KeySectionProps.md",59802],e357afdb:[()=>t.e(46808).then(t.bind(t,83109)),"@site/docs/api/client-ui/interfaces/RbcsIconProps.md",83109],e37e0948:[()=>t.e(10578).then(t.bind(t,18361)),"@site/docs/api/geoprocessing/functions/collectionHasGeometry.md",18361],e4103a51:[()=>t.e(75949).then(t.bind(t,8264)),"@site/docs/api/client-ui/interfaces/SketchClassTableProps.md",8264],e442797e:[()=>t.e(5174).then(t.bind(t,34622)),"@site/docs/api/client-ui/functions/useLanguage.md",34622],e44a2883:[()=>t.e(24736).then(t.bind(t,48350)),"@site/docs/tutorial-extras/translate-your-site.md",48350],e5e12b34:[()=>t.e(41998).then(t.bind(t,55940)),"@site/docs/api/geoprocessing/type-aliases/EXTRA_RASTER_STAT.md",55940],e602906e:[()=>t.e(45140).then(t.bind(t,51573)),"@site/docs/api/geoprocessing/functions/getKeys.md",51573],e63c21e9:[()=>t.e(72433).then(t.bind(t,66077)),"@site/versioned_docs/version-6.1.0/tutorial-basics/create-a-document.md",66077],e6688bcd:[()=>t.e(21895).then(t.bind(t,88794)),"@site/docs/tutorials/sampleproject.md",88794],e740adc1:[()=>t.e(54724).then(t.bind(t,77647)),"@site/docs/api/geoprocessing/functions/genRandomPolygons.md",77647],e7a2ccdf:[()=>t.e(82706).then(t.bind(t,72400)),"@site/docs/api/geoprocessing/variables/MetricDimensions.md",72400],e7cfc72c:[()=>t.e(13615).then(t.bind(t,55459)),"@site/docs/api/geoprocessing/interfaces/MultiPolygon.md",55459],e83415f2:[()=>t.e(85499).then(t.bind(t,37182)),"@site/docs/api/geoprocessing/type-aliases/Position.md",37182],e88f1506:[()=>t.e(39546).then(t.bind(t,92978)),"@site/docs/api/geoprocessing/functions/clipToPolygonDatasources.md",92978],e8d3f6f9:[()=>t.e(34872).then(t.bind(t,1728)),"@site/docs/api/geoprocessing/type-aliases/InternalRasterDatasource.md",1728],e906e12e:[()=>t.e(61894).then(t.bind(t,65361)),"@site/docs/api/geoprocessing/variables/statsSchema.md",65361],e9524228:[()=>t.e(84968).then(t.bind(t,14975)),"@site/docs/api/geoprocessing/functions/isFeature.md",14975],e9a0ef15:[()=>t.e(29965).then(t.bind(t,37929)),"@site/docs/api/geoprocessing/type-aliases/FunctionExtraParams.md",37929],e9b84260:[()=>t.e(98275).then(t.bind(t,58962)),"@site/docs/api/geoprocessing/functions/isObject.md",58962],ea075918:[()=>t.e(77815).then(t.bind(t,61468)),"@site/docs/api/client-ui/interfaces/SimpleButtonProbs.md",61468],ea0e90af:[()=>t.e(35466).then(t.bind(t,66185)),"@site/docs/api/geoprocessing/interfaces/RbcsObjective.md",66185],eafe052e:[()=>t.e(72472).then(t.bind(t,58223)),"@site/docs/api/geoprocessing/classes/ValidationError.md",58223],eb7f1393:[()=>t.e(77933).then(t.bind(t,86624)),"@site/docs/concepts/AdvancedConcepts.md",86624],ec19e0a6:[()=>t.e(9067).then(t.bind(t,334)),"@site/docs/api/geoprocessing/type-aliases/ClassStats.md",334],ecaae4e2:[()=>t.e(53863).then(t.bind(t,62459)),"@site/docs/api/geoprocessing/interfaces/FeatureClipOperation.md",62459],ecfed5ec:[()=>t.e(18137).then(t.bind(t,62863)),"@site/docs/api/client-ui/functions/DropdownContainer.md",62863],ed4fae79:[()=>t.e(50232).then(t.bind(t,54949)),"@site/docs/api/geoprocessing/functions/sampleSketchReportContextValue.md",54949],ee7f1ebf:[()=>t.e(46188).then(t.bind(t,6098)),"@site/docs/api/client-ui/interfaces/ReportContextState.md",6098],ef57aa4c:[()=>t.e(2915).then(t.bind(t,4846)),"@site/docs/api/geoprocessing/interfaces/Point.md",4846],ef6674fe:[()=>t.e(16436).then(t.bind(t,61214)),"@site/docs/api/geoprocessing/functions/isExternalRasterDatasource.md",61214],efff1481:[()=>t.e(32952).then(t.bind(t,5597)),"@site/docs/api/geoprocessing/interfaces/PreprocessingRequest.md",5597],f0480ff1:[()=>t.e(42292).then(t.bind(t,77056)),"@site/docs/api/geoprocessing/functions/getRasterBoxSpherical.md",77056],f0ec41e8:[()=>t.e(43107).then(t.bind(t,28758)),"@site/docs/api/client-ui/interfaces/GroupPillProps.md",28758],f0f562a4:[()=>t.e(87785).then(t.bind(t,85770)),"@site/docs/api/client-ui/interfaces/IucnLevelPillProps.md",85770],f16a979a:[()=>t.e(84581).then(t.bind(t,67960)),"@site/docs/api/geoprocessing/variables/iucnCategoryNames.md",67960],f183e07b:[()=>t.e(26043).then(t.bind(t,36210)),"@site/docs/api/geoprocessing/interfaces/FeatureMap.md",36210],f1b17b9a:[()=>t.e(50566).then(t.bind(t,70593)),"@site/docs/api/client-ui/functions/SegmentControl.md",70593],f1cc8ddc:[()=>t.e(62865).then(t.bind(t,80981)),"@site/docs/api/geoprocessing/functions/isPolygonFeature.md",80981],f2a2f9b0:[()=>t.e(64243).then(t.bind(t,97526)),"@site/docs/api/geoprocessing/variables/seaSketchReportingLanguageChangeEvent.md",97526],f2f63246:[()=>t.e(55814).then(t.bind(t,3978)),"@site/docs/api/geoprocessing/interfaces/IucnCategoryCombined.md",3978],f3d56391:[()=>t.e(17840).then(t.bind(t,72538)),"@site/docs/workers.md",72538],f3e32ae2:[()=>t.e(12596).then(t.bind(t,93608)),"@site/docs/api/geoprocessing/functions/toRasterProjection.md",93608],f46cf07e:[()=>t.e(14646).then(t.bind(t,42539)),"@site/docs/api/geoprocessing/functions/genSketch.md",42539],f47f5b5c:[()=>t.e(21051).then(t.bind(t,11291)),"@site/docs/api/geoprocessing/functions/keyBy.md",11291],f52989a7:[()=>t.e(77925).then(t.bind(t,14899)),"@site/docs/api/geoprocessing/variables/internalRasterDatasourceSchema.md",14899],f55d3e7a:[()=>t.e(88863).then(t.bind(t,40745)),"@site/docs/tutorial-basics/deploy-your-site.md",40745],f567390f:[()=>t.e(21919).then(t.bind(t,46413)),"@site/docs/api/geoprocessing/variables/measurementScalesSchema.md",46413],f5720a8f:[()=>t.e(24652).then(t.bind(t,45468)),"@site/docs/api/geoprocessing/interfaces/Report.md",45468],f5e67f25:[()=>t.e(92997).then(t.bind(t,19830)),"@site/docs/api/geoprocessing/interfaces/Node.md",19830],f64fce26:[()=>t.e(19669).then(t.bind(t,26770)),"@site/docs/api/geoprocessing/type-aliases/RbcsMpaObjectiveAnswerMap.md",26770],f67fc0f1:[()=>t.e(47102).then(t.bind(t,34395)),"@site/docs/api/geoprocessing/interfaces/TestExampleOutput.md",34395],f71bca15:[()=>t.e(4969).then(t.bind(t,84471)),"@site/docs/api/geoprocessing/functions/isPolygonSketch.md",84471],f755a884:[()=>t.e(75807).then(t.bind(t,45180)),"@site/docs/api/client-ui/functions/StyledCircle.md",45180],f7cc2be3:[()=>t.e(99904).then(t.bind(t,9824)),"@site/docs/api/geoprocessing/type-aliases/ValueFormatter.md",9824],f7cc92e8:[()=>t.e(93306).then(t.bind(t,12005)),"@site/docs/Extending.md",12005],f80dd7b4:[()=>t.e(54044).then(t.bind(t,70201)),"@site/docs/api/client-ui/interfaces/CollapseProps.md",70201],f85cca3b:[()=>t.e(74146).then(t.bind(t,73060)),"@site/docs/api/geoprocessing/type-aliases/ISO8601DateTime.md",73060],f8abf08c:[()=>t.e(83197).then(t.bind(t,99764)),"@site/docs/api/geoprocessing/interfaces/RootTaskItem.md",99764],f8ca1226:[()=>t.e(61436).then(t.bind(t,37316)),"@site/docs/api/geoprocessing/functions/getDatasourceById.md",37316],f9377955:[()=>t.e(77800).then(t.bind(t,66583)),"@site/docs/api/geoprocessing/functions/ensureValidPolygon.md",66583],f9498ed2:[()=>t.e(85342).then(t.bind(t,15071)),"@site/versioned_docs/version-6.1.0/tutorials/Tutorials.md",15071],f988f039:[()=>t.e(64710).then(t.bind(t,66322)),"@site/docs/api/client-ui/functions/GroupCircleRow.md",66322],fa1e3c90:[()=>t.e(45131).then(t.bind(t,41123)),"@site/docs/api/geoprocessing/type-aliases/histogram.md",41123],facd25cf:[()=>t.e(39009).then(t.bind(t,86826)),"@site/docs/api/client-ui/functions/PillColumn.md",86826],fb7e9e31:[()=>t.e(41465).then(t.bind(t,12012)),"@site/docs/api/client-ui/functions/ProgressBarWrapper.md",12012],fbf479b9:[()=>t.e(76350).then(t.bind(t,34374)),"@site/docs/api/geoprocessing/interfaces/Polygon.md",34374],fc333af4:[()=>t.e(57986).then(t.bind(t,47599)),"@site/docs/api/geoprocessing/functions/rasterMetrics.md",47599],fe77d560:[()=>t.e(31145).then(t.bind(t,27792)),"@site/docs/api/client-ui/functions/GroupCircle.md",27792],fe853a6c:[()=>t.e(50332).then(t.bind(t,46254)),"@site/docs/api/geoprocessing/variables/iucnCategoriesList.md",46254],ff31178b:[()=>t.e(48589).then(t.bind(t,23450)),"@site/docs/api/geoprocessing/functions/flattenByGroupAllClass.md",23450],ff5f0538:[()=>t.e(71374).then(t.bind(t,49050)),"@site/docs/api/geoprocessing/functions/roundDecimal.md",49050],ffe5d85d:[()=>t.e(31046).then(t.bind(t,22611)),"@site/docs/api/geoprocessing/functions/toFeatureArray.md",22611]};var a=t(74848);function r(e){let{error:n,retry:t,pastDelay:o}=e;return n?(0,a.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,a.jsx)("p",{children:String(n)}),(0,a.jsx)("div",{children:(0,a.jsx)("button",{type:"button",onClick:t,children:"Retry"})})]}):o?(0,a.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,a.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,a.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,a.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,a.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,a.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,a.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,a.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,a.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,a.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,a.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,a.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,a.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var p=t(86921),l=t(53102);function g(e,n){if("*"===e)return s()({loading:r,loader:()=>t.e(82237).then(t.bind(t,82237)),modules:["@theme/NotFound"],webpack:()=>[82237],render(e,n){const t=e.default;return(0,a.jsx)(l.W,{value:{plugin:{name:"native",id:"default"}},children:(0,a.jsx)(t,{...n})})}});const o=i[`${e}-${n}`],g={},u=[],d=[],f=(0,p.A)(o);return Object.entries(f).forEach((e=>{let[n,t]=e;const o=c[t];o&&(g[n]=o[0],u.push(o[1]),d.push(o[2]))})),s().Map({loading:r,loader:g,modules:u,webpack:()=>d,render(n,t){const s=JSON.parse(JSON.stringify(o));Object.entries(n).forEach((n=>{let[t,o]=n;const i=o.default;if(!i)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 i&&"function"!=typeof i||Object.keys(o).filter((e=>"default"!==e)).forEach((e=>{i[e]=o[e]}));let c=s;const a=t.split(".");a.slice(0,-1).forEach((e=>{c=c[e]})),c[a[a.length-1]]=i}));const i=s.__comp;delete s.__comp;const c=s.__context;delete s.__context;const r=s.__props;return delete s.__props,(0,a.jsx)(l.W,{value:c,children:(0,a.jsx)(i,{...s,...r,...t})})}})}const u=[{path:"/geoprocessing/markdown-page/",component:g("/geoprocessing/markdown-page/","2d0"),exact:!0},{path:"/geoprocessing/storybook/",component:g("/geoprocessing/storybook/","146"),exact:!0},{path:"/geoprocessing/docs/",component:g("/geoprocessing/docs/","bd5"),routes:[{path:"/geoprocessing/docs/next/",component:g("/geoprocessing/docs/next/","25e"),routes:[{path:"/geoprocessing/docs/next/",component:g("/geoprocessing/docs/next/","7af"),routes:[{path:"/geoprocessing/docs/next/",component:g("/geoprocessing/docs/next/","32a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/antimeridian/",component:g("/geoprocessing/docs/next/antimeridian/","b82"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/api/",component:g("/geoprocessing/docs/next/api/","55e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/api/client-core/",component:g("/geoprocessing/docs/next/api/client-core/","162"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/",component:g("/geoprocessing/docs/next/api/client-ui/","112"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/classes/ReportError/",component:g("/geoprocessing/docs/next/api/client-ui/classes/ReportError/","6fb"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/App/",component:g("/geoprocessing/docs/next/api/client-ui/functions/App/","b87"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/Card/",component:g("/geoprocessing/docs/next/api/client-ui/functions/Card/","48b"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/CardDecorator/",component:g("/geoprocessing/docs/next/api/client-ui/functions/CardDecorator/","11f"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ChartLegend/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ChartLegend/","ce5"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/CheckboxGroup/",component:g("/geoprocessing/docs/next/api/client-ui/functions/CheckboxGroup/","b54"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/Circle/",component:g("/geoprocessing/docs/next/api/client-ui/functions/Circle/","f10"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ClassTable/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ClassTable/","a7a"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ClassTableStyled/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ClassTableStyled/","f70"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/Collapse/",component:g("/geoprocessing/docs/next/api/client-ui/functions/Collapse/","7f7"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/CollapseGroup/",component:g("/geoprocessing/docs/next/api/client-ui/functions/CollapseGroup/","b29"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/createReportDecorator/",component:g("/geoprocessing/docs/next/api/client-ui/functions/createReportDecorator/","6a2"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/DataDownload/",component:g("/geoprocessing/docs/next/api/client-ui/functions/DataDownload/","829"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/DataDownloadToolbar/",component:g("/geoprocessing/docs/next/api/client-ui/functions/DataDownloadToolbar/","55a"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/Dropdown/",component:g("/geoprocessing/docs/next/api/client-ui/functions/Dropdown/","589"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/DropdownContainer/",component:g("/geoprocessing/docs/next/api/client-ui/functions/DropdownContainer/","89e"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/DropdownItem/",component:g("/geoprocessing/docs/next/api/client-ui/functions/DropdownItem/","061"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/DropdownTrigger/",component:g("/geoprocessing/docs/next/api/client-ui/functions/DropdownTrigger/","5bf"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/EstimateLabel/",component:g("/geoprocessing/docs/next/api/client-ui/functions/EstimateLabel/","704"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/FilterSelectTable/",component:g("/geoprocessing/docs/next/api/client-ui/functions/FilterSelectTable/","f3d"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/FilterSelectTableStyled/",component:g("/geoprocessing/docs/next/api/client-ui/functions/FilterSelectTableStyled/","5ec"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/finishTask/",component:g("/geoprocessing/docs/next/api/client-ui/functions/finishTask/","c21"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/GeographySwitcher/",component:g("/geoprocessing/docs/next/api/client-ui/functions/GeographySwitcher/","4f6"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/GreenPill/",component:g("/geoprocessing/docs/next/api/client-ui/functions/GreenPill/","087"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/GroupCircle/",component:g("/geoprocessing/docs/next/api/client-ui/functions/GroupCircle/","fe3"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/GroupCircleRow/",component:g("/geoprocessing/docs/next/api/client-ui/functions/GroupCircleRow/","854"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/GroupPill/",component:g("/geoprocessing/docs/next/api/client-ui/functions/GroupPill/","76a"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/HorizontalStackedBar/",component:g("/geoprocessing/docs/next/api/client-ui/functions/HorizontalStackedBar/","8d5"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/InfoStatus/",component:g("/geoprocessing/docs/next/api/client-ui/functions/InfoStatus/","344"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/IucnActivitiesCard/",component:g("/geoprocessing/docs/next/api/client-ui/functions/IucnActivitiesCard/","39d"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/IucnDesignationTable/",component:g("/geoprocessing/docs/next/api/client-ui/functions/IucnDesignationTable/","412"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/IucnLevelCircle/",component:g("/geoprocessing/docs/next/api/client-ui/functions/IucnLevelCircle/","cae"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/IucnLevelCircleRow/",component:g("/geoprocessing/docs/next/api/client-ui/functions/IucnLevelCircleRow/","036"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/IucnLevelPill/",component:g("/geoprocessing/docs/next/api/client-ui/functions/IucnLevelPill/","4fc"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/IucnMatrix/",component:g("/geoprocessing/docs/next/api/client-ui/functions/IucnMatrix/","8cf"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/KeySection/",component:g("/geoprocessing/docs/next/api/client-ui/functions/KeySection/","3b4"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/LanguageSwitcher/",component:g("/geoprocessing/docs/next/api/client-ui/functions/LanguageSwitcher/","05a"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/LayerToggle/",component:g("/geoprocessing/docs/next/api/client-ui/functions/LayerToggle/","b75"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ObjectiveStatus/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ObjectiveStatus/","645"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/Pill/",component:g("/geoprocessing/docs/next/api/client-ui/functions/Pill/","326"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/PillColumn/",component:g("/geoprocessing/docs/next/api/client-ui/functions/PillColumn/","285"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/PointyCircle/",component:g("/geoprocessing/docs/next/api/client-ui/functions/PointyCircle/","a13"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ProgressBar/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ProgressBar/","767"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ProgressBarWrapper/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ProgressBarWrapper/","8cf"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/RbcsActivitiesCard/",component:g("/geoprocessing/docs/next/api/client-ui/functions/RbcsActivitiesCard/","705"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/RbcsIcon/",component:g("/geoprocessing/docs/next/api/client-ui/functions/RbcsIcon/","d6d"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/RbcsLearnMore/",component:g("/geoprocessing/docs/next/api/client-ui/functions/RbcsLearnMore/","756"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/RbcsMpaClassPanel/",component:g("/geoprocessing/docs/next/api/client-ui/functions/RbcsMpaClassPanel/","fba"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/RbcsMpaObjectiveStatus/",component:g("/geoprocessing/docs/next/api/client-ui/functions/RbcsMpaObjectiveStatus/","762"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/RbcsNetworkObjectiveStatus/",component:g("/geoprocessing/docs/next/api/client-ui/functions/RbcsNetworkObjectiveStatus/","611"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/RbcsZoneClassPanel/",component:g("/geoprocessing/docs/next/api/client-ui/functions/RbcsZoneClassPanel/","fab"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/RbcsZoneRegIcon/",component:g("/geoprocessing/docs/next/api/client-ui/functions/RbcsZoneRegIcon/","b0b"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ReportChartFigure/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ReportChartFigure/","eae"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ReportDecorator/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ReportDecorator/","806"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ReportPage/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ReportPage/","e11"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ReportStoryLayout/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ReportStoryLayout/","c45"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ReportTableStyled/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ReportTableStyled/","549"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ReportTextDirection/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ReportTextDirection/","34e"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ResultsCard/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ResultsCard/","b11"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/runTask/",component:g("/geoprocessing/docs/next/api/client-ui/functions/runTask/","ed3"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/SegmentControl/",component:g("/geoprocessing/docs/next/api/client-ui/functions/SegmentControl/","137"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/SimpleButton/",component:g("/geoprocessing/docs/next/api/client-ui/functions/SimpleButton/","842"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/SimpleButtonStyled/",component:g("/geoprocessing/docs/next/api/client-ui/functions/SimpleButtonStyled/","e22"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/Skeleton/",component:g("/geoprocessing/docs/next/api/client-ui/functions/Skeleton/","336"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/SketchAttributesCard/",component:g("/geoprocessing/docs/next/api/client-ui/functions/SketchAttributesCard/","d0a"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/SketchClassTable/",component:g("/geoprocessing/docs/next/api/client-ui/functions/SketchClassTable/","415"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/SketchClassTableStyled/",component:g("/geoprocessing/docs/next/api/client-ui/functions/SketchClassTableStyled/","052"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/SmallReportTableStyled/",component:g("/geoprocessing/docs/next/api/client-ui/functions/SmallReportTableStyled/","c8c"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/StyledCircle/",component:g("/geoprocessing/docs/next/api/client-ui/functions/StyledCircle/","98e"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/StyledPill/",component:g("/geoprocessing/docs/next/api/client-ui/functions/StyledPill/","072"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/StyledTwoColorPointyCircle/",component:g("/geoprocessing/docs/next/api/client-ui/functions/StyledTwoColorPointyCircle/","26a"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/Table/",component:g("/geoprocessing/docs/next/api/client-ui/functions/Table/","895"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/TableStyled/",component:g("/geoprocessing/docs/next/api/client-ui/functions/TableStyled/","9fc"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/Toolbar/",component:g("/geoprocessing/docs/next/api/client-ui/functions/Toolbar/","8ac"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ToolbarCard/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ToolbarCard/","1d4"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/ToolbarStyled/",component:g("/geoprocessing/docs/next/api/client-ui/functions/ToolbarStyled/","9f5"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/Tooltip/",component:g("/geoprocessing/docs/next/api/client-ui/functions/Tooltip/","c6f"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/TooltipContainer/",component:g("/geoprocessing/docs/next/api/client-ui/functions/TooltipContainer/","cce"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/TooltipItem/",component:g("/geoprocessing/docs/next/api/client-ui/functions/TooltipItem/","ab7"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/TooltipTrigger/",component:g("/geoprocessing/docs/next/api/client-ui/functions/TooltipTrigger/","39c"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/Translator/",component:g("/geoprocessing/docs/next/api/client-ui/functions/Translator/","bd9"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/TwoColorPointyCircle/",component:g("/geoprocessing/docs/next/api/client-ui/functions/TwoColorPointyCircle/","b56"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/useCheckboxes/",component:g("/geoprocessing/docs/next/api/client-ui/functions/useCheckboxes/","a93"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/useFunction/",component:g("/geoprocessing/docs/next/api/client-ui/functions/useFunction/","022"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/useLanguage/",component:g("/geoprocessing/docs/next/api/client-ui/functions/useLanguage/","a55"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/useSketchProperties/",component:g("/geoprocessing/docs/next/api/client-ui/functions/useSketchProperties/","1cc"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/VerticalSpacer/",component:g("/geoprocessing/docs/next/api/client-ui/functions/VerticalSpacer/","708"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/WarningPill/",component:g("/geoprocessing/docs/next/api/client-ui/functions/WarningPill/","d22"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/functions/WatersDiagram/",component:g("/geoprocessing/docs/next/api/client-ui/functions/WatersDiagram/","105"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/AppProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/AppProps/","6d2"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/CardProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/CardProps/","514"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/CircleProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/CircleProps/","580"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/ClassTableColumnConfig/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/ClassTableColumnConfig/","4ff"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/ClassTableProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/ClassTableProps/","2dd"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/CollapseGroupProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/CollapseGroupProps/","e46"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/CollapseProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/CollapseProps/","28c"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/DataDownloadProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/DataDownloadProps/","77c"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/DataDownloadToolbarProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/DataDownloadToolbarProps/","6bd"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/DataFormatters/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/DataFormatters/","167"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/DownloadOption/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/DownloadOption/","334"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/DropdownContainerProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/DropdownContainerProps/","14f"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/DropdownProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/DropdownProps/","648"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/FilterSelect/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/FilterSelect/","7a6"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/FilterSelectOption/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/FilterSelectOption/","403"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/FilterSelectTableOptions/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/FilterSelectTableOptions/","a0e"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/GeographySwitcherProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/GeographySwitcherProps/","5e4"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/GroupCircleProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/GroupCircleProps/","4ff"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/GroupCircleRowProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/GroupCircleRowProps/","695"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/GroupPillProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/GroupPillProps/","7b8"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/HorizontalStackedBarProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/HorizontalStackedBarProps/","343"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/InfoStatusProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/InfoStatusProps/","e3f"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/IucnActivityRank/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/IucnActivityRank/","1be"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/IucnLevelCircleProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/IucnLevelCircleProps/","049"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/IucnLevelCircleRowProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/IucnLevelCircleRowProps/","48a"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/IucnLevelPillProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/IucnLevelPillProps/","9c4"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/KeySectionProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/KeySectionProps/","a1a"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/LabelProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/LabelProps/","8b2"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/LegendProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/LegendProps/","c63"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/ObjectiveStatusProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/ObjectiveStatusProps/","72b"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/PillColumnProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/PillColumnProps/","84d"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/PillProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/PillProps/","794"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/RbcsIconProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/RbcsIconProps/","8c3"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/RbcsLearnMoreProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/RbcsLearnMoreProps/","1f4"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/RbcsMpaClassPanelProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/RbcsMpaClassPanelProps/","9d2"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/RbcsMpaObjectiveStatusProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/RbcsMpaObjectiveStatusProps/","82c"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/RbcsNetworkObjectiveProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/RbcsNetworkObjectiveProps/","386"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/RbcsPanelProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/RbcsPanelProps/","355"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/ReportChartFigureProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/ReportChartFigureProps/","3aa"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/ReportContextState/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/ReportContextState/","18d"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/ReportPageProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/ReportPageProps/","e1c"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/ReportStoryLayoutProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/ReportStoryLayoutProps/","f5d"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/ResultsCardProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/ResultsCardProps/","fb3"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/Row/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/Row/","42b"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/SegmentControlProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/SegmentControlProps/","b8b"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/SimpleButtonProbs/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/SimpleButtonProbs/","671"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/SketchAttributesCardProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/SketchAttributesCardProps/","f17"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/SketchClassTableProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/SketchClassTableProps/","00d"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/StyledHorizontalStackedBarProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/StyledHorizontalStackedBarProps/","8b9"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/StyledLegendProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/StyledLegendProps/","5a3"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/StyledTwoColorPointyCircleProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/StyledTwoColorPointyCircleProps/","7c2"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/TableOptions/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/TableOptions/","3d4"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/ToolbarCardProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/ToolbarCardProps/","5fb"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/ToolbarProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/ToolbarProps/","243"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/TooltipContainerProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/TooltipContainerProps/","eaf"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/TooltipProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/TooltipProps/","f60"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/TwoColorPointyCircleProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/TwoColorPointyCircleProps/","860"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/interfaces/VerticalSpacerProps/",component:g("/geoprocessing/docs/next/api/client-ui/interfaces/VerticalSpacerProps/","427"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/type-aliases/Block/",component:g("/geoprocessing/docs/next/api/client-ui/type-aliases/Block/","2e4"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/type-aliases/BlockGroup/",component:g("/geoprocessing/docs/next/api/client-ui/type-aliases/BlockGroup/","d7c"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/type-aliases/Column/",component:g("/geoprocessing/docs/next/api/client-ui/type-aliases/Column/","8d7"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/type-aliases/HorizontalStackedBarRow/",component:g("/geoprocessing/docs/next/api/client-ui/type-aliases/HorizontalStackedBarRow/","695"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/type-aliases/RbcsMpaObjectiveRenderMsgFunction/",component:g("/geoprocessing/docs/next/api/client-ui/type-aliases/RbcsMpaObjectiveRenderMsgFunction/","f60"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/type-aliases/RbcsNetworkObjectiveRenderMsgFunction/",component:g("/geoprocessing/docs/next/api/client-ui/type-aliases/RbcsNetworkObjectiveRenderMsgFunction/","3a8"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/type-aliases/RowConfig/",component:g("/geoprocessing/docs/next/api/client-ui/type-aliases/RowConfig/","669"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/type-aliases/StringOrNumber/",component:g("/geoprocessing/docs/next/api/client-ui/type-aliases/StringOrNumber/","9f1"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/type-aliases/SUPPORTED_FORMAT/",component:g("/geoprocessing/docs/next/api/client-ui/type-aliases/SUPPORTED_FORMAT/","c27"),exact:!0},{path:"/geoprocessing/docs/next/api/client-ui/type-aliases/TargetFormatter/",component:g("/geoprocessing/docs/next/api/client-ui/type-aliases/TargetFormatter/","02a"),exact:!0},{path:"/geoprocessing/docs/next/api/dataproviders/",component:g("/geoprocessing/docs/next/api/dataproviders/","771"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/",component:g("/geoprocessing/docs/next/api/geoprocessing/","f7f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/classes/ComplexityError/",component:g("/geoprocessing/docs/next/api/geoprocessing/classes/ComplexityError/","b22"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/classes/GeoprocessingHandler/",component:g("/geoprocessing/docs/next/api/geoprocessing/classes/GeoprocessingHandler/","9ff"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/classes/PreprocessingHandler/",component:g("/geoprocessing/docs/next/api/geoprocessing/classes/PreprocessingHandler/","e65"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/classes/ProjectClientBase/",component:g("/geoprocessing/docs/next/api/geoprocessing/classes/ProjectClientBase/","8d1"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/classes/ValidationError/",component:g("/geoprocessing/docs/next/api/geoprocessing/classes/ValidationError/","8d6"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/classes/VectorDataSource/",component:g("/geoprocessing/docs/next/api/geoprocessing/classes/VectorDataSource/","717"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/enumerations/GeoprocessingTaskStatus/",component:g("/geoprocessing/docs/next/api/geoprocessing/enumerations/GeoprocessingTaskStatus/","3c6"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/anchorScore/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/anchorScore/","0cf"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/aquacultureScore/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/aquacultureScore/","ebf"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/area/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/area/","d98"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/batchDelete/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/batchDelete/","938"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/batchDeleteTasks/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/batchDeleteTasks/","b44"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/bboxOverlap/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/bboxOverlap/","ab3"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/booleanOverlap/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/booleanOverlap/","ba2"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/byteSize/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/byteSize/","d16"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/capitalize/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/capitalize/","223"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/chunk/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/chunk/","8d6"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/classIdMapping/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/classIdMapping/","cb2"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/classifyMPA/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/classifyMPA/","632"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/classifyZone/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/classifyZone/","924"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/cleanBBox/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/cleanBBox/","5dc"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/cleanCoords/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/cleanCoords/","c0a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/clip/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/clip/","a8d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/clipMultiMerge/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/clipMultiMerge/","7aa"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/clipToPolygonDatasources/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/clipToPolygonDatasources/","c96"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/clipToPolygonFeatures/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/clipToPolygonFeatures/","ab7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/collectionHasGeometry/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/collectionHasGeometry/","070"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/createMetric/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/createMetric/","01f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/createMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/createMetrics/","143"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/ensureValidPolygon/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/ensureValidPolygon/","292"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/featureToSketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/featureToSketch/","f00"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/featureToSketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/featureToSketchCollection/","17f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/fetchGeoJSON/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/fetchGeoJSON/","763"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/fgbFetchAll/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/fgbFetchAll/","227"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/fgBoundingBox/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/fgBoundingBox/","660"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/findAndUpdateMetricValue/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/findAndUpdateMetricValue/","066"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/firstMatching/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/firstMatching/","e02"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/firstMatchingMetric/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/firstMatchingMetric/","174"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/flattenByGroupAllClass/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/flattenByGroupAllClass/","5f2"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/flattenByGroupSketchAllClass/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/flattenByGroupSketchAllClass/","629"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/flattenBySketchAllClass/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/flattenBySketchAllClass/","038"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/flattenSketchAllId/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/flattenSketchAllId/","c5d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/gearTypeScore/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/gearTypeScore/","795"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genClipLoader/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genClipLoader/","2d4"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genClipToPolygonDatasources/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genClipToPolygonDatasources/","5d7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genClipToPolygonFeatures/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genClipToPolygonFeatures/","732"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genFeature/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genFeature/","93b"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genFeatureCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genFeatureCollection/","cd8"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genRandomPolygons/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genRandomPolygons/","384"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleNullSketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genSampleNullSketch/","000"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleNullSketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genSampleNullSketchCollection/","be8"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketch/","886"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchCollection/","c1a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchCollectionFromSketches/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchCollectionFromSketches/","07b"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchContext/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchContext/","dba"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleUserAttributes/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genSampleUserAttributes/","65e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genSketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genSketch/","676"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genSketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genSketchCollection/","245"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genTaskCacheKey/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genTaskCacheKey/","8b7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/genZodErrorMessage/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/genZodErrorMessage/","760"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getArea/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getArea/","ad1"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getClassificationLabel/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getClassificationLabel/","0e9"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getCogFilename/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getCogFilename/","953"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getDatasetBucketName/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getDatasetBucketName/","97b"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getDatasourceById/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getDatasourceById/","931"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getExternalRasterDatasourceById/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getExternalRasterDatasourceById/","081"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getExternalVectorDatasourceById/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getExternalVectorDatasourceById/","3cf"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getFeatures/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getFeatures/","17c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getFeaturesForSketchBBoxes/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getFeaturesForSketchBBoxes/","6a8"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getFirstFromParam/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getFirstFromParam/","21c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getFlatGeobufFilename/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getFlatGeobufFilename/","07c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getFlatGeobufPath/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getFlatGeobufPath/","167"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getGeopackagePath/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getGeopackagePath/","3cb"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getHistogram/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getHistogram/","e88"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getIndexIconPerc/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getIndexIconPerc/","104"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getInternalRasterDatasourceById/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getInternalRasterDatasourceById/","d5f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getInternalVectorDatasourceById/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getInternalVectorDatasourceById/","59c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryForActivities/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryForActivities/","fe4"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryForSketches/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryForSketches/","632"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryNameForSketches/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryNameForSketches/","cd6"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnLevelNameForSketches/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getIucnLevelNameForSketches/","f04"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getJsonFilename/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getJsonFilename/","df7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getJsonPath/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getJsonPath/","ca2"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getJsonUserAttribute/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getJsonUserAttribute/","b31"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getKeys/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getKeys/","7d1"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getMetricGroupObjectiveId/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getMetricGroupObjectiveId/","1cc"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getMetricGroupObjectiveIds/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getMetricGroupObjectiveIds/","96c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getMinYesCountMap/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getMinYesCountMap/","0a5"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getMpaClassificationName/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getMpaClassificationName/","e53"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getObjectiveById/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getObjectiveById/","1ea"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getParamStringArray/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getParamStringArray/","80c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getRasterBoxSpherical/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getRasterBoxSpherical/","9a1"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getRasterDatasourceById/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getRasterDatasourceById/","ff8"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getSketchCollectionChildIds/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getSketchCollectionChildIds/","429"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getSketchFeatures/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getSketchFeatures/","1e4"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getSketchToMpaProtectionLevel/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getSketchToMpaProtectionLevel/","7ff"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getSum/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getSum/","34f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getUserAttribute/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getUserAttribute/","f8d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getVectorDatasourceById/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getVectorDatasourceById/","805"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/getZoneClassificationName/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/getZoneClassificationName/","13c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/groupBy/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/groupBy/","10c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/hasOwnProperty/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/hasOwnProperty/","36c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/includeVirtualSketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/includeVirtualSketch/","6cb"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isExternalDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isExternalDatasource/","8db"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isExternalRasterDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isExternalRasterDatasource/","633"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isExternalVectorDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isExternalVectorDatasource/","f32"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isFeature/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isFeature/","8e1"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isFeatureCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isFeatureCollection/","e3c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isGeometry/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isGeometry/","6f3"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isImportRasterDatasourceConfig/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isImportRasterDatasourceConfig/","5f9"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isImportVectorDatasourceConfig/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isImportVectorDatasourceConfig/","644"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isinternalDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isinternalDatasource/","66c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isInternalRasterDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isInternalRasterDatasource/","218"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isInternalVectorDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isInternalVectorDatasource/","7a8"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isLineStringFeature/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isLineStringFeature/","c2c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isLineStringSketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isLineStringSketchCollection/","e09"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isMetric/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isMetric/","24c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isMetricArray/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isMetricArray/","59a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isMetricPack/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isMetricPack/","408"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonFeature/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonFeature/","536"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonSketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonSketch/","ebb"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonSketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonSketchCollection/","9fd"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isNullSketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isNullSketch/","138"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isNullSketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isNullSketchCollection/","0cf"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isObject/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isObject/","4df"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isPointFeature/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isPointFeature/","641"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isPointSketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isPointSketchCollection/","edd"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonAllSketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonAllSketchCollection/","180"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonAnyFeature/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonAnyFeature/","aed"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonFeature/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonFeature/","a8d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonFeatureArray/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonFeatureArray/","951"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonSketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonSketch/","90a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonSketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonSketchCollection/","17d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isRasterDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isRasterDatasource/","d7a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isRbcsProtectionLevel/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isRbcsProtectionLevel/","9b6"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isSketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isSketch/","c27"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isSketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isSketchCollection/","276"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isTruthyAttributeValue/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isTruthyAttributeValue/","220"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/isVectorDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/isVectorDatasource/","5e9"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/keyBy/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/keyBy/","cbb"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/loadCog/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/loadCog/","b6d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/loadFgb/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/loadFgb/","e1b"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/maxWidth/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/maxWidth/","fc1"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/metricsForSketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/metricsForSketch/","ea2"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/metricsSketchIds/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/metricsSketchIds/","722"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/metricsWithClassId/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/metricsWithClassId/","b04"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/metricsWithSketchId/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/metricsWithSketchId/","521"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/minWidth/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/minWidth/","09a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/mpaClassMetric/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/mpaClassMetric/","e86"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/mpaClassMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/mpaClassMetrics/","dc0"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/nestMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/nestMetrics/","712"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/numberFormat/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/numberFormat/","21c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapArea/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/overlapArea/","c97"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapAreaGroupMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/overlapAreaGroupMetrics/","fb4"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapFeatures/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/overlapFeatures/","a60"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapFeaturesGroupMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/overlapFeaturesGroupMetrics/","794"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapGroupMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/overlapGroupMetrics/","dbe"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapRasterClass/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/overlapRasterClass/","72a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapRasterGroupMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/overlapRasterGroupMetrics/","209"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/overlapSubarea/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/overlapSubarea/","20c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/packMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/packMetrics/","c3b"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/parseGeoraster/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/parseGeoraster/","ac5"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/parseLambdaResponse/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/parseLambdaResponse/","9d9"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/percentGoalWithEdge/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/percentGoalWithEdge/","adc"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/percentWithEdge/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/percentWithEdge/","023"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/randomFloat/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/randomFloat/","d32"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/randomInt/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/randomInt/","d5f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/rasterMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/rasterMetrics/","d3f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/rasterStats/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/rasterStats/","e48"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/rasterStatsToMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/rasterStatsToMetrics/","dbf"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/rbcsMpaToMetric/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/rbcsMpaToMetric/","f8e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/rbcsZoneToMetric/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/rbcsZoneToMetric/","a8e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/rekeyMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/rekeyMetrics/","1dd"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/rekeyObject/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/rekeyObject/","5f7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/removeSketchCollPolygonHoles/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/removeSketchCollPolygonHoles/","02c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/removeSketchPolygonHoles/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/removeSketchPolygonHoles/","acf"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/roundDecimal/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/roundDecimal/","719"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/roundDecimalFormat/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/roundDecimalFormat/","633"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/roundLower/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/roundLower/","ee0"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/runLambdaWorker/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/runLambdaWorker/","919"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/sampleSketchReportContextValue/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/sampleSketchReportContextValue/","0f6"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/scanTasks/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/scanTasks/","c76"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/sketchToId/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/sketchToId/","71a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/sketchToZone/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/sketchToZone/","040"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/sortMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/sortMetrics/","d1a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/sortMetricsDisplayOrder/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/sortMetricsDisplayOrder/","7d7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/splitBBoxAntimeridian/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/splitBBoxAntimeridian/","ba6"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/splitFeatureAntimeridian/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/splitFeatureAntimeridian/","440"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/splitSketchAntimeridian/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/splitSketchAntimeridian/","9f1"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/squareMeterToKilometer/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/squareMeterToKilometer/","4d7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/squareMeterToMile/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/squareMeterToMile/","176"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/testWithinPerc/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/testWithinPerc/","793"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/toChildProperties/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/toChildProperties/","680"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/toFeatureArray/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/toFeatureArray/","8f8"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/toFeaturePolygonArray/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/toFeaturePolygonArray/","30f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/toNullSketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/toNullSketch/","0b6"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/toNullSketchArray/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/toNullSketchArray/","5bd"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/toPercentMetric/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/toPercentMetric/","da1"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/toRasterProjection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/toRasterProjection/","304"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/toShortSketches/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/toShortSketches/","a33"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/toSketchArray/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/toSketchArray/","7ab"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/toSketchPropertiesArray/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/toSketchPropertiesArray/","e8e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/unpackMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/unpackMetrics/","556"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/updateCommandsSync/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/updateCommandsSync/","fb0"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/valueFormatter/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/valueFormatter/","66e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/zeroPolygon/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/zeroPolygon/","b58"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketch/","6ca"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketchArray/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketchArray/","1ce"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketchCollection/","d9e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/functions/zoneClassMetrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/functions/zoneClassMetrics/","7cb"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/BaseImportDatasourceConfig/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/BaseImportDatasourceConfig/","01f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/CalcStatsOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/CalcStatsOptions/","432"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ClipOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/ClipOptions/","139"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/DatasourceClipOperation/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/DatasourceClipOperation/","a6f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/DatasourceOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/DatasourceOptions/","dea"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/DefaultExtraParams/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/DefaultExtraParams/","e10"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature/","8ed"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureClipOperation/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureClipOperation/","701"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureCollection/","d15"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureMap/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureMap/","1f7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureTree/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureTree/","cc6"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/FgBoundingBox/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/FgBoundingBox/","fd4"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeogProp/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/GeogProp/","eb6"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeometryCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/GeometryCollection/","5e0"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingHandlerOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingHandlerOptions/","7cb"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingProject/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingProject/","133"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingRequestModel/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingRequestModel/","87d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingServiceMetadata/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingServiceMetadata/","a2c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingTask/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingTask/","d33"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Georaster/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/Georaster/","e21"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Histogram/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/Histogram/","180"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/HistogramOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/HistogramOptions/","9af"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnActivity/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnActivity/","df7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnActivityRank/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnActivityRank/","d67"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnCategory/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnCategory/","59c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnCategoryCombined/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnCategoryCombined/","73f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/LineString/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/LineString/","6d9"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MetricGroupItem/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/MetricGroupItem/","588"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MetricPack/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/MetricPack/","05b"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiLineString/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiLineString/","c89"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon/","426"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Node/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/Node/","955"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/NullSketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/NullSketch/","fd1"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/NullSketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/NullSketchCollection/","1af"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/OverlapRasterOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/OverlapRasterOptions/","f93"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PercentEdgeOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/PercentEdgeOptions/","6a5"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Point/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/Point/","ebc"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon/","65d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingHandlerOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingHandlerOptions/","6a4"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingRequest/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingRequest/","ff8"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingResponse/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingResponse/","03a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingService/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingService/","e3f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingServiceMetadata/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingServiceMetadata/","4d9"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ProjectClientConfig/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/ProjectClientConfig/","57a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ProjectClientInterface/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/ProjectClientInterface/","024"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RasterStatsOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/RasterStatsOptions/","403"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RbcsObjective/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/RbcsObjective/","3d5"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RegBasedClassificationMetric/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/RegBasedClassificationMetric/","73d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Report/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/Report/","e1f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportContextValue/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportContextValue/","2fc"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportResult/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportResult/","3f5"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportResultBase/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportResultBase/","6f6"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RootTaskItem/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/RootTaskItem/","7b5"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/RoundDecimalOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/RoundDecimalOptions/","14f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingMessageEvent/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingMessageEvent/","d56"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingToggleLanguageEvent/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingToggleLanguageEvent/","d9b"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingToggleLayerVisibilityEvent/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingToggleLayerVisibilityEvent/","279"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingVisibleLayersChangeEvent/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingVisibleLayersChangeEvent/","2c7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/Sketch/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/Sketch/","97c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchCollection/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchCollection/","d2e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchMap/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchMap/","b22"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/StatsObject/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/StatsObject/","866"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/TestExampleOutput/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/TestExampleOutput/","788"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorDataSourceDetails/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorDataSourceDetails/","b0e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorDataSourceOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorDataSourceOptions/","72e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorFeature/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorFeature/","a64"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorPropertyFilter/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorPropertyFilter/","fa2"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/interfaces/WindowOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/interfaces/WindowOptions/","b3d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/bandArithmetic/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/bandArithmetic/","9e1"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/BaseDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/BaseDatasource/","5b3"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/BBox/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/BBox/","264"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClassificationId/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClassificationId/","fa0"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClassStats/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClassStats/","818"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClientJsonConfig/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClientJsonConfig/","45f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClipOperations/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClipOperations/","9c3"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/DataClass/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/DataClass/","e7c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Datasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Datasource/","48a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/EezLandUnion/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/EezLandUnion/","6cf"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExecutionMode/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExecutionMode/","e58"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExternalRasterDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExternalRasterDatasource/","4b8"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExternalVectorDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExternalVectorDatasource/","bff"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/EXTRA_RASTER_STAT/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/EXTRA_RASTER_STAT/","09f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/FunctionExtraParams/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/FunctionExtraParams/","c0e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GEOBLAZE_RASTER_STAT/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/GEOBLAZE_RASTER_STAT/","ebe"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geographies/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geographies/","415"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geography/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geography/","a22"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties/","64a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geometry/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geometry/","299"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingJsonConfig/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingJsonConfig/","a55"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingRequest/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingRequest/","892"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingRequestParams/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingRequestParams/","8ff"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeorasterMetadata/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeorasterMetadata/","f34"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoTypes/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoTypes/","6af"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/get/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/get/","a9f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GroupMetricAgg/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/GroupMetricAgg/","deb"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GroupMetricSketchAgg/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/GroupMetricSketchAgg/","545"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/histogram/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/histogram/","81d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/identify/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/identify/","e74"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportRasterDatasourceConfig/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportRasterDatasourceConfig/","4a3"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportRasterDatasourceOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportRasterDatasourceOptions/","581"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportVectorDatasourceConfig/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportVectorDatasourceConfig/","625"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportVectorDatasourceOptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportVectorDatasourceOptions/","904"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/InternalRasterDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/InternalRasterDatasource/","792"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/InternalVectorDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/InternalVectorDatasource/","3be"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ISO8601DateTime/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ISO8601DateTime/","84d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ISO8601Duration/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ISO8601Duration/","8fa"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/IucnActivityRankId/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/IucnActivityRankId/","00c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/JSONValue/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/JSONValue/","07b"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/load/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/load/","75e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/LoadedPackage/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/LoadedPackage/","94d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/max/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/max/","f72"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/mean/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/mean/","0ca"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/median/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/median/","67c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metric/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metric/","fc6"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricDimension/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricDimension/","5d9"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricGroup/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricGroup/","819"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricGroups/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricGroups/","5a5"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricIdTypes/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricIdTypes/","d75"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricProperty/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricProperty/","fdc"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metrics/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metrics/","510"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/min/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/min/","0c0"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/mode/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/mode/","901"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MpaClassification/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/MpaClassification/","75b"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Nullable/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Nullable/","d1c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Objective/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Objective/","33b"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveAnswer/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveAnswer/","fe9"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveAnswerMap/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveAnswerMap/","503"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveId/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveId/","a07"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Objectives/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Objectives/","6bf"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/OsmLandFeature/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/OsmLandFeature/","ea0"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Package/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Package/","e12"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/PartialReportContextValue/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/PartialReportContextValue/","2f7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Position/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Position/","0e0"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Project/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Project/","a65"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/rasterCalculator/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/rasterCalculator/","ed1"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/RasterDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/RasterDatasource/","b57"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/RbcsMpaObjectiveAnswerMap/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/RbcsMpaObjectiveAnswerMap/","77e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/RbcsMpaProtectionLevel/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/RbcsMpaProtectionLevel/","c81"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SketchGeometryTypes/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/SketchGeometryTypes/","3cb"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SketchProperties/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/SketchProperties/","0a9"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Stats-1/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Stats-1/","d92"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/stats/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/stats/","f02"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/sum/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/sum/","2ea"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SUPPORTED_RASTER_STAT/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/SUPPORTED_RASTER_STAT/","464"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SupportedFormats/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/SupportedFormats/","279"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/TaskKey/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/TaskKey/","132"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/TypedArray/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/TypedArray/","3ee"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/UserAttribute/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/UserAttribute/","2d7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ValueFormatter/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ValueFormatter/","7de"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/VectorDatasource/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/VectorDatasource/","494"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Zone/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/Zone/","432"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneColor/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneColor/","bf6"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneId/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneId/","e35"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneName/",component:g("/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneName/","982"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/activityRanks/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/activityRanks/","ff7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/baseDatasourceSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/baseDatasourceSchema/","58f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/bboxSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/bboxSchema/","6b8"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/box2dSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/box2dSchema/","c97"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/box3dSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/box3dSchema/","9e2"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/classStatsSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/classStatsSchema/","ce8"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/clientJsonConfigSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/clientJsonConfigSchema/","b8a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/commonHeaders/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/commonHeaders/","05c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/dataClassSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/dataClassSchema/","547"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/datasourceConfig/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/datasourceConfig/","ee0"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/datasourceFormatDescriptions/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/datasourceFormatDescriptions/","093"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/datasourceSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/datasourceSchema/","e2a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/datasourcesSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/datasourcesSchema/","e5f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/defaultReportContext/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/defaultReportContext/","d27"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/DEFAULTS/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/DEFAULTS/","f56"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/defaultStatValues/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/defaultStatValues/","f82"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/externalDatasourceSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/externalDatasourceSchema/","ba4"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/externalRasterDatasourceSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/externalRasterDatasourceSchema/","91c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/externalVectorDatasourceSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/externalVectorDatasourceSchema/","207"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/EXTRA_RASTER_STATS/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/EXTRA_RASTER_STATS/","1fb"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/extraParamsSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/extraParamsSchema/","aea"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/fcSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/fcSchema/","f36"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/featureSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/featureSchema/","3f4"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/featuresSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/featuresSchema/","92c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/fixtures/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/fixtures/","e81"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/fullColor/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/fullColor/","960"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/FULLY_PROTECTED_LEVEL/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/FULLY_PROTECTED_LEVEL/","f00"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/GEOBLAZE_RASTER_STATS/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/GEOBLAZE_RASTER_STATS/","90a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/geoblazeDefaultStatValues/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/geoblazeDefaultStatValues/","e80"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/geographiesSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/geographiesSchema/","306"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/geographySchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/geographySchema/","156"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/geoprocessingConfigSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/geoprocessingConfigSchema/","c64"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/geoTypesSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/geoTypesSchema/","990"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/globalDatasources/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/globalDatasources/","ea2"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/globalDatasourcesById/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/globalDatasourcesById/","c2f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/highColor/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/highColor/","403"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/HIGHLY_PROTECTED_LEVEL/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/HIGHLY_PROTECTED_LEVEL/","b33"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/importRasterDatasourceOptionsSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/importRasterDatasourceOptionsSchema/","705"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/importVectorDatasourceOptionsSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/importVectorDatasourceOptionsSchema/","a49"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/internalDatasourceSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/internalDatasourceSchema/","48e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/internalImportSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/internalImportSchema/","529"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/internalRasterDatasourceSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/internalRasterDatasourceSchema/","ab1"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/internalVectorDatasourceSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/internalVectorDatasourceSchema/","867"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/internalVectorImportSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/internalVectorImportSchema/","0aa"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnActivities/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/iucnActivities/","a54"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnActivityCategories/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/iucnActivityCategories/","edb"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoriesList/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoriesList/","15b"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoriesMap/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoriesMap/","e40"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoryNames/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoryNames/","e29"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/iucnLevels/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/iucnLevels/","d72"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/jsonSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/jsonSchema/","a84"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/loadedPackageSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/loadedPackageSchema/","cf0"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/lowColor/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/lowColor/","776"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/measurementScalesSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/measurementScalesSchema/","f06"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/measurementTypesSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/measurementTypesSchema/","6ba"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/MetricDimensions/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/MetricDimensions/","945"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/metricGroupSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/metricGroupSchema/","d81"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/metricGroupsSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/metricGroupsSchema/","48f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/MetricProperties/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/MetricProperties/","cd3"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/metricSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/metricSchema/","8e2"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/metricsSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/metricsSchema/","2c7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/MODERATELY_PROTECTED_LEVEL/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/MODERATELY_PROTECTED_LEVEL/","5bf"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/multipolygonSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/multipolygonSchema/","ee2"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_GREEN/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_GREEN/","24c"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_MAYBE/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_MAYBE/","9d7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_NO/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_NO/","915"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_RED/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_RED/","6fd"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_YELLOW/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_YELLOW/","29d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_YES/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_YES/","042"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveAnswerMapSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/objectiveAnswerMapSchema/","51a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveAnswerSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/objectiveAnswerSchema/","ac2"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveCountsAnswers/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/objectiveCountsAnswers/","5b4"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveCountsColorMap/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/objectiveCountsColorMap/","db4"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/objectiveSchema/","4c3"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/objectivesSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/objectivesSchema/","bc5"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/packageSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/packageSchema/","70f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/PLANNING_AREA_TYPES/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/PLANNING_AREA_TYPES/","b78"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/planningAreaTypesSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/planningAreaTypesSchema/","032"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/polygonSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/polygonSchema/","aab"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/POORLY_PROTECTED_LEVEL/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/POORLY_PROTECTED_LEVEL/","60e"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/projectSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/projectSchema/","319"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/rasterDatasourceSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/rasterDatasourceSchema/","1a9"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsAnchoringActivities/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/rbcsAnchoringActivities/","ff8"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsAquacultureActivities/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/rbcsAquacultureActivities/","ce7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsConstants/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/rbcsConstants/","c4a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsGearTypes/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/rbcsGearTypes/","9fd"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsMpaProtectionLevels/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/rbcsMpaProtectionLevels/","de7"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsScores/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/rbcsScores/","c7f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/ReportContext/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/ReportContext/","81d"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingLanguageChangeEvent/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingLanguageChangeEvent/","e42"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingMessageEventType/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingMessageEventType/","e3a"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingVisibleLayersChangeEvent/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingVisibleLayersChangeEvent/","aba"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/statsSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/statsSchema/","33f"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/SUPPORTED_RASTER_STATS/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/SUPPORTED_RASTER_STATS/","4b2"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/supportedFormatsSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/supportedFormatsSchema/","4e0"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/UNPROTECTED_LEVEL/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/UNPROTECTED_LEVEL/","093"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/vectorDatasourceSchema/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/vectorDatasourceSchema/","faf"),exact:!0},{path:"/geoprocessing/docs/next/api/geoprocessing/variables/version/",component:g("/geoprocessing/docs/next/api/geoprocessing/variables/version/","482"),exact:!0},{path:"/geoprocessing/docs/next/architecture/",component:g("/geoprocessing/docs/next/architecture/","775"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/cli/",component:g("/geoprocessing/docs/next/cli/","c4f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/codespaces/",component:g("/geoprocessing/docs/next/codespaces/","663"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/concepts/",component:g("/geoprocessing/docs/next/concepts/","a7c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/concepts/AdvancedConcepts/",component:g("/geoprocessing/docs/next/concepts/AdvancedConcepts/","be9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/contributing/",component:g("/geoprocessing/docs/next/contributing/","cd9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/dataimport/",component:g("/geoprocessing/docs/next/dataimport/","562"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/devcontainer/",component:g("/geoprocessing/docs/next/devcontainer/","f22"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/EdgesAndLimits/",component:g("/geoprocessing/docs/next/EdgesAndLimits/","f34"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/extending/",component:g("/geoprocessing/docs/next/extending/","f2b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/geoprocessing/",component:g("/geoprocessing/docs/next/geoprocessing/","8f7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/gip/",component:g("/geoprocessing/docs/next/gip/","0fc"),exact:!0},{path:"/geoprocessing/docs/next/gip/GIP-1-i18n/",component:g("/geoprocessing/docs/next/gip/GIP-1-i18n/","354"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/intro/",component:g("/geoprocessing/docs/next/intro/","11a"),exact:!0},{path:"/geoprocessing/docs/next/linkData/",component:g("/geoprocessing/docs/next/linkData/","2f9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/multiBoundary/",component:g("/geoprocessing/docs/next/multiBoundary/","cd0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/precalc/",component:g("/geoprocessing/docs/next/precalc/","005"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/preprocessing/",component:g("/geoprocessing/docs/next/preprocessing/","194"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/projectclient/",component:g("/geoprocessing/docs/next/projectclient/","62d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/reportclient/",component:g("/geoprocessing/docs/next/reportclient/","cc3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/skills/",component:g("/geoprocessing/docs/next/skills/","628"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/structure/",component:g("/geoprocessing/docs/next/structure/","2d1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/testing/",component:g("/geoprocessing/docs/next/testing/","508"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/thirdpartydata/",component:g("/geoprocessing/docs/next/thirdpartydata/","a1b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/tutorial-basics/congratulations/",component:g("/geoprocessing/docs/next/tutorial-basics/congratulations/","a10"),exact:!0},{path:"/geoprocessing/docs/next/tutorial-basics/create-a-blog-post/",component:g("/geoprocessing/docs/next/tutorial-basics/create-a-blog-post/","93c"),exact:!0},{path:"/geoprocessing/docs/next/tutorial-basics/create-a-document/",component:g("/geoprocessing/docs/next/tutorial-basics/create-a-document/","643"),exact:!0},{path:"/geoprocessing/docs/next/tutorial-basics/create-a-page/",component:g("/geoprocessing/docs/next/tutorial-basics/create-a-page/","6cf"),exact:!0},{path:"/geoprocessing/docs/next/tutorial-basics/deploy-your-site/",component:g("/geoprocessing/docs/next/tutorial-basics/deploy-your-site/","f0b"),exact:!0},{path:"/geoprocessing/docs/next/tutorial-basics/markdown-features/",component:g("/geoprocessing/docs/next/tutorial-basics/markdown-features/","935"),exact:!0},{path:"/geoprocessing/docs/next/tutorial-extras/manage-docs-versions/",component:g("/geoprocessing/docs/next/tutorial-extras/manage-docs-versions/","add"),exact:!0},{path:"/geoprocessing/docs/next/tutorial-extras/translate-your-site/",component:g("/geoprocessing/docs/next/tutorial-extras/translate-your-site/","aea"),exact:!0},{path:"/geoprocessing/docs/next/tutorials/",component:g("/geoprocessing/docs/next/tutorials/","10c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/tutorials/createGeoprocessing/",component:g("/geoprocessing/docs/next/tutorials/createGeoprocessing/","f7f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/tutorials/createReport/",component:g("/geoprocessing/docs/next/tutorials/createReport/","b71"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/tutorials/deploy/",component:g("/geoprocessing/docs/next/tutorials/deploy/","819"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/tutorials/existingproject/",component:g("/geoprocessing/docs/next/tutorials/existingproject/","333"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/tutorials/extraParams/",component:g("/geoprocessing/docs/next/tutorials/extraParams/","571"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/tutorials/newproject/",component:g("/geoprocessing/docs/next/tutorials/newproject/","661"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/tutorials/sampleproject/",component:g("/geoprocessing/docs/next/tutorials/sampleproject/","473"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/tutorials/sketchAttributes/",component:g("/geoprocessing/docs/next/tutorials/sketchAttributes/","3a7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/tutorials/storybook/",component:g("/geoprocessing/docs/next/tutorials/storybook/","ca3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/tutorials/subdividing/",component:g("/geoprocessing/docs/next/tutorials/subdividing/","2c0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/tutorials/updateDatasource/",component:g("/geoprocessing/docs/next/tutorials/updateDatasource/","91f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/upgrade/",component:g("/geoprocessing/docs/next/upgrade/","274"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/next/workers/",component:g("/geoprocessing/docs/next/workers/","fd3"),exact:!0,sidebar:"tutorialSidebar"}]}]},{path:"/geoprocessing/docs/",component:g("/geoprocessing/docs/","558"),routes:[{path:"/geoprocessing/docs/",component:g("/geoprocessing/docs/","4ed"),routes:[{path:"/geoprocessing/docs/",component:g("/geoprocessing/docs/","2f9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/antimeridian/",component:g("/geoprocessing/docs/antimeridian/","dda"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/architecture/",component:g("/geoprocessing/docs/architecture/","2c1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/cli/",component:g("/geoprocessing/docs/cli/","45a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/concepts/",component:g("/geoprocessing/docs/concepts/","f98"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/contributing/",component:g("/geoprocessing/docs/contributing/","a7f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/extending/",component:g("/geoprocessing/docs/extending/","422"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/gip/",component:g("/geoprocessing/docs/gip/","806"),exact:!0},{path:"/geoprocessing/docs/gip/GIP-1-i18n/",component:g("/geoprocessing/docs/gip/GIP-1-i18n/","a87"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/intro/",component:g("/geoprocessing/docs/intro/","531"),exact:!0},{path:"/geoprocessing/docs/limits/",component:g("/geoprocessing/docs/limits/","cf6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/Migrating/",component:g("/geoprocessing/docs/Migrating/","a5e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/testing/",component:g("/geoprocessing/docs/testing/","796"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/tipsandtricks/",component:g("/geoprocessing/docs/tipsandtricks/","b19"),exact:!0,sidebar:"tutorialSidebar"},{path:"/geoprocessing/docs/tutorial-basics/congratulations/",component:g("/geoprocessing/docs/tutorial-basics/congratulations/","240"),exact:!0},{path:"/geoprocessing/docs/tutorial-basics/create-a-blog-post/",component:g("/geoprocessing/docs/tutorial-basics/create-a-blog-post/","a44"),exact:!0},{path:"/geoprocessing/docs/tutorial-basics/create-a-document/",component:g("/geoprocessing/docs/tutorial-basics/create-a-document/","d11"),exact:!0},{path:"/geoprocessing/docs/tutorial-basics/create-a-page/",component:g("/geoprocessing/docs/tutorial-basics/create-a-page/","33c"),exact:!0},{path:"/geoprocessing/docs/tutorial-basics/deploy-your-site/",component:g("/geoprocessing/docs/tutorial-basics/deploy-your-site/","410"),exact:!0},{path:"/geoprocessing/docs/tutorial-basics/markdown-features/",component:g("/geoprocessing/docs/tutorial-basics/markdown-features/","bb0"),exact:!0},{path:"/geoprocessing/docs/tutorial-extras/manage-docs-versions/",component:g("/geoprocessing/docs/tutorial-extras/manage-docs-versions/","2dd"),exact:!0},{path:"/geoprocessing/docs/tutorial-extras/translate-your-site/",component:g("/geoprocessing/docs/tutorial-extras/translate-your-site/","1b7"),exact:!0},{path:"/geoprocessing/docs/tutorials/",component:g("/geoprocessing/docs/tutorials/","009"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/geoprocessing/",component:g("/geoprocessing/","3e0"),exact:!0},{path:"*",component:g("*")}]},6125:(e,n,t)=>{"use strict";t.d(n,{o:()=>i,x:()=>c});var o=t(96540),s=t(74848);const i=o.createContext(!1);function c(e){let{children:n}=e;const[t,c]=(0,o.useState)(!1);return(0,o.useEffect)((()=>{c(!0)}),[]),(0,s.jsx)(i.Provider,{value:t,children:n})}},77815:(e,n,t)=>{"use strict";var o=t(96540),s=t(5338),i=t(80545),c=t(54625),a=t(4784),r=t(38193);const p=[t(10119),t(26134),t(76294),t(51043)];var l=t(35947),g=t(56347),u=t(22831),d=t(74848);function f(e){let{children:n}=e;return(0,d.jsx)(d.Fragment,{children:n})}var m=t(5260),h=t(44586),b=t(86025),x=t(6342),y=t(1003),v=t(32131),S=t(14090);var _=t(70440),k=t(41463);function w(){const{i18n:{currentLocale:e,defaultLocale:n,localeConfigs:t}}=(0,h.A)(),o=(0,v.o)(),s=t[e].htmlLang,i=e=>e.replace("-","_");return(0,d.jsxs)(m.A,{children:[Object.entries(t).map((e=>{let[n,{htmlLang:t}]=e;return(0,d.jsx)("link",{rel:"alternate",href:o.createUrl({locale:n,fullyQualified:!0}),hrefLang:t},n)})),(0,d.jsx)("link",{rel:"alternate",href:o.createUrl({locale:n,fullyQualified:!0}),hrefLang:"x-default"}),(0,d.jsx)("meta",{property:"og:locale",content:i(s)}),Object.values(t).filter((e=>s!==e.htmlLang)).map((e=>(0,d.jsx)("meta",{property:"og:locale:alternate",content:i(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(e){let{permalink:n}=e;const{siteConfig:{url:t}}=(0,h.A)(),o=function(){const{siteConfig:{url:e,baseUrl:n,trailingSlash:t}}=(0,h.A)(),{pathname:o}=(0,g.zy)();return e+(0,_.Ks)((0,b.Ay)(o),{trailingSlash:t,baseUrl:n})}(),s=n?`${t}${n}`:o;return(0,d.jsxs)(m.A,{children:[(0,d.jsx)("meta",{property:"og:url",content:s}),(0,d.jsx)("link",{rel:"canonical",href:s})]})}function P(){const{i18n:{currentLocale:e}}=(0,h.A)(),{metadata:n,image:t}=(0,x.p)();return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(m.A,{children:[(0,d.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,d.jsx)("body",{className:S.w})]}),t&&(0,d.jsx)(y.be,{image:t}),(0,d.jsx)(C,{}),(0,d.jsx)(w,{}),(0,d.jsx)(k.A,{tag:"default",locale:e}),(0,d.jsx)(m.A,{children:n.map(((e,n)=>(0,d.jsx)("meta",{...e},n)))})]})}const T=new Map;var E=t(6125),R=t(26988),A=t(205);function D(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),o=1;o{const o=n.default?.[e]??n[e];return o?.(...t)}));return()=>s.forEach((e=>e?.()))}const O=function(e){let{children:n,location:t,previousLocation:o}=e;return(0,A.A)((()=>{o!==t&&(!function(e){let{location:n,previousLocation:t}=e;if(!t)return;const o=n.pathname===t.pathname,s=n.hash===t.hash,i=n.search===t.search;if(o&&s&&!i)return;const{hash:c}=n;if(c){const e=decodeURIComponent(c.substring(1)),n=document.getElementById(e);n?.scrollIntoView()}else window.scrollTo(0,0)}({location:t,previousLocation:o}),D("onRouteDidUpdate",{previousLocation:o,location:t}))}),[o,t]),n};function M(e){const n=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,u.u)(l.A,e))).flat();return Promise.all(n.map((e=>e.route.component.preload?.())))}class L extends o.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=r.A.canUseDOM?D("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,n){if(e.location===this.props.location)return n.nextRouteHasLoaded;const t=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=D("onRouteUpdate",{previousLocation:this.previousLocation,location:t}),M(t.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:n}=this.props;return(0,d.jsx)(O,{previousLocation:this.previousLocation,location:n,children:(0,d.jsx)(g.qh,{location:n,render:()=>e})})}}const I=L,j="__docusaurus-base-url-issue-banner-suggestion-container";function F(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 = '__docusaurus-base-url-issue-banner-container';\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(/{let{route:n}=e;return!0===n.exact})))return T.set(e.pathname,e.pathname),e;const n=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,n),{...e,pathname:n}}((0,g.zy)());return(0,d.jsx)(I,{location:e,children:$})}function q(){return(0,d.jsx)(z.A,{children:(0,d.jsx)(R.l,{children:(0,d.jsxs)(E.x,{children:[(0,d.jsxs)(f,{children:[(0,d.jsx)(G,{}),(0,d.jsx)(P,{}),(0,d.jsx)(B,{}),(0,d.jsx)(H,{})]}),(0,d.jsx)(U,{})]})})})}var W=t(84054);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((n,t)=>{if("undefined"==typeof document)return void t();const o=document.createElement("link");o.setAttribute("rel","prefetch"),o.setAttribute("href",e),o.onload=()=>n(),o.onerror=()=>t();const s=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;s?.appendChild(o)}))}:function(e){return new Promise(((n,t)=>{const o=new XMLHttpRequest;o.open("GET",e,!0),o.withCredentials=!0,o.onload=()=>{200===o.status?n():t()},o.send(null)}))};var J=t(86921);const Y=new Set,K=new Set,Q=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,X={prefetch:e=>{if(!(e=>!Q()&&!K.has(e)&&!Y.has(e))(e))return!1;Y.add(e);const n=(0,u.u)(l.A,e).flatMap((e=>{return n=e.route.path,Object.entries(W).filter((e=>{let[t]=e;return t.replace(/-[^-]+$/,"")===n})).flatMap((e=>{let[,n]=e;return Object.values((0,J.A)(n))}));var n}));return Promise.all(n.map((e=>{const n=t.gca(e);return n&&!n.includes("undefined")?Z(n).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!Q()&&!K.has(e))(e)&&(K.add(e),M(e))},ee=Object.freeze(X);function ne(e){let{children:n}=e;return"hash"===a.default.future.experimental_router?(0,d.jsx)(c.I9,{children:n}):(0,d.jsx)(c.Kd,{children:n})}const te=Boolean(!0);if(r.A.canUseDOM){window.docusaurus=ee;const e=document.getElementById("__docusaurus"),n=(0,d.jsx)(i.vd,{children:(0,d.jsx)(ne,{children:(0,d.jsx)(q,{})})}),t=(e,n)=>{console.error("Docusaurus React Root onRecoverableError:",e,n)},c=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(n);else if(te)window.docusaurusRoot=s.hydrateRoot(e,n,{onRecoverableError:t});else{const o=s.createRoot(e,{onRecoverableError:t});o.render(n),window.docusaurusRoot=o}};M(window.location.pathname).then((()=>{(0,o.startTransition)(c)}))}},26988:(e,n,t)=>{"use strict";t.d(n,{o:()=>g,l:()=>u});var o=t(96540),s=t(4784);const i=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/geoprocessing/docs","versions":[{"name":"current","label":"Next","isLast":false,"path":"/geoprocessing/docs/next","mainDocId":"introduction","docs":[{"id":"antimeridian/Antimeridian","path":"/geoprocessing/docs/next/antimeridian","sidebar":"tutorialSidebar"},{"id":"api/client-core/index","path":"/geoprocessing/docs/next/api/client-core/"},{"id":"api/client-ui/classes/ReportError","path":"/geoprocessing/docs/next/api/client-ui/classes/ReportError"},{"id":"api/client-ui/functions/App","path":"/geoprocessing/docs/next/api/client-ui/functions/App"},{"id":"api/client-ui/functions/Card","path":"/geoprocessing/docs/next/api/client-ui/functions/Card"},{"id":"api/client-ui/functions/CardDecorator","path":"/geoprocessing/docs/next/api/client-ui/functions/CardDecorator"},{"id":"api/client-ui/functions/ChartLegend","path":"/geoprocessing/docs/next/api/client-ui/functions/ChartLegend"},{"id":"api/client-ui/functions/CheckboxGroup","path":"/geoprocessing/docs/next/api/client-ui/functions/CheckboxGroup"},{"id":"api/client-ui/functions/Circle","path":"/geoprocessing/docs/next/api/client-ui/functions/Circle"},{"id":"api/client-ui/functions/ClassTable","path":"/geoprocessing/docs/next/api/client-ui/functions/ClassTable"},{"id":"api/client-ui/functions/ClassTableStyled","path":"/geoprocessing/docs/next/api/client-ui/functions/ClassTableStyled"},{"id":"api/client-ui/functions/Collapse","path":"/geoprocessing/docs/next/api/client-ui/functions/Collapse"},{"id":"api/client-ui/functions/CollapseGroup","path":"/geoprocessing/docs/next/api/client-ui/functions/CollapseGroup"},{"id":"api/client-ui/functions/createReportDecorator","path":"/geoprocessing/docs/next/api/client-ui/functions/createReportDecorator"},{"id":"api/client-ui/functions/DataDownload","path":"/geoprocessing/docs/next/api/client-ui/functions/DataDownload"},{"id":"api/client-ui/functions/DataDownloadToolbar","path":"/geoprocessing/docs/next/api/client-ui/functions/DataDownloadToolbar"},{"id":"api/client-ui/functions/Dropdown","path":"/geoprocessing/docs/next/api/client-ui/functions/Dropdown"},{"id":"api/client-ui/functions/DropdownContainer","path":"/geoprocessing/docs/next/api/client-ui/functions/DropdownContainer"},{"id":"api/client-ui/functions/DropdownItem","path":"/geoprocessing/docs/next/api/client-ui/functions/DropdownItem"},{"id":"api/client-ui/functions/DropdownTrigger","path":"/geoprocessing/docs/next/api/client-ui/functions/DropdownTrigger"},{"id":"api/client-ui/functions/EstimateLabel","path":"/geoprocessing/docs/next/api/client-ui/functions/EstimateLabel"},{"id":"api/client-ui/functions/FilterSelectTable","path":"/geoprocessing/docs/next/api/client-ui/functions/FilterSelectTable"},{"id":"api/client-ui/functions/FilterSelectTableStyled","path":"/geoprocessing/docs/next/api/client-ui/functions/FilterSelectTableStyled"},{"id":"api/client-ui/functions/finishTask","path":"/geoprocessing/docs/next/api/client-ui/functions/finishTask"},{"id":"api/client-ui/functions/GeographySwitcher","path":"/geoprocessing/docs/next/api/client-ui/functions/GeographySwitcher"},{"id":"api/client-ui/functions/GreenPill","path":"/geoprocessing/docs/next/api/client-ui/functions/GreenPill"},{"id":"api/client-ui/functions/GroupCircle","path":"/geoprocessing/docs/next/api/client-ui/functions/GroupCircle"},{"id":"api/client-ui/functions/GroupCircleRow","path":"/geoprocessing/docs/next/api/client-ui/functions/GroupCircleRow"},{"id":"api/client-ui/functions/GroupPill","path":"/geoprocessing/docs/next/api/client-ui/functions/GroupPill"},{"id":"api/client-ui/functions/HorizontalStackedBar","path":"/geoprocessing/docs/next/api/client-ui/functions/HorizontalStackedBar"},{"id":"api/client-ui/functions/InfoStatus","path":"/geoprocessing/docs/next/api/client-ui/functions/InfoStatus"},{"id":"api/client-ui/functions/IucnActivitiesCard","path":"/geoprocessing/docs/next/api/client-ui/functions/IucnActivitiesCard"},{"id":"api/client-ui/functions/IucnDesignationTable","path":"/geoprocessing/docs/next/api/client-ui/functions/IucnDesignationTable"},{"id":"api/client-ui/functions/IucnLevelCircle","path":"/geoprocessing/docs/next/api/client-ui/functions/IucnLevelCircle"},{"id":"api/client-ui/functions/IucnLevelCircleRow","path":"/geoprocessing/docs/next/api/client-ui/functions/IucnLevelCircleRow"},{"id":"api/client-ui/functions/IucnLevelPill","path":"/geoprocessing/docs/next/api/client-ui/functions/IucnLevelPill"},{"id":"api/client-ui/functions/IucnMatrix","path":"/geoprocessing/docs/next/api/client-ui/functions/IucnMatrix"},{"id":"api/client-ui/functions/KeySection","path":"/geoprocessing/docs/next/api/client-ui/functions/KeySection"},{"id":"api/client-ui/functions/LanguageSwitcher","path":"/geoprocessing/docs/next/api/client-ui/functions/LanguageSwitcher"},{"id":"api/client-ui/functions/LayerToggle","path":"/geoprocessing/docs/next/api/client-ui/functions/LayerToggle"},{"id":"api/client-ui/functions/ObjectiveStatus","path":"/geoprocessing/docs/next/api/client-ui/functions/ObjectiveStatus"},{"id":"api/client-ui/functions/Pill","path":"/geoprocessing/docs/next/api/client-ui/functions/Pill"},{"id":"api/client-ui/functions/PillColumn","path":"/geoprocessing/docs/next/api/client-ui/functions/PillColumn"},{"id":"api/client-ui/functions/PointyCircle","path":"/geoprocessing/docs/next/api/client-ui/functions/PointyCircle"},{"id":"api/client-ui/functions/ProgressBar","path":"/geoprocessing/docs/next/api/client-ui/functions/ProgressBar"},{"id":"api/client-ui/functions/ProgressBarWrapper","path":"/geoprocessing/docs/next/api/client-ui/functions/ProgressBarWrapper"},{"id":"api/client-ui/functions/RbcsActivitiesCard","path":"/geoprocessing/docs/next/api/client-ui/functions/RbcsActivitiesCard"},{"id":"api/client-ui/functions/RbcsIcon","path":"/geoprocessing/docs/next/api/client-ui/functions/RbcsIcon"},{"id":"api/client-ui/functions/RbcsLearnMore","path":"/geoprocessing/docs/next/api/client-ui/functions/RbcsLearnMore"},{"id":"api/client-ui/functions/RbcsMpaClassPanel","path":"/geoprocessing/docs/next/api/client-ui/functions/RbcsMpaClassPanel"},{"id":"api/client-ui/functions/RbcsMpaObjectiveStatus","path":"/geoprocessing/docs/next/api/client-ui/functions/RbcsMpaObjectiveStatus"},{"id":"api/client-ui/functions/RbcsNetworkObjectiveStatus","path":"/geoprocessing/docs/next/api/client-ui/functions/RbcsNetworkObjectiveStatus"},{"id":"api/client-ui/functions/RbcsZoneClassPanel","path":"/geoprocessing/docs/next/api/client-ui/functions/RbcsZoneClassPanel"},{"id":"api/client-ui/functions/RbcsZoneRegIcon","path":"/geoprocessing/docs/next/api/client-ui/functions/RbcsZoneRegIcon"},{"id":"api/client-ui/functions/ReportChartFigure","path":"/geoprocessing/docs/next/api/client-ui/functions/ReportChartFigure"},{"id":"api/client-ui/functions/ReportDecorator","path":"/geoprocessing/docs/next/api/client-ui/functions/ReportDecorator"},{"id":"api/client-ui/functions/ReportPage","path":"/geoprocessing/docs/next/api/client-ui/functions/ReportPage"},{"id":"api/client-ui/functions/ReportStoryLayout","path":"/geoprocessing/docs/next/api/client-ui/functions/ReportStoryLayout"},{"id":"api/client-ui/functions/ReportTableStyled","path":"/geoprocessing/docs/next/api/client-ui/functions/ReportTableStyled"},{"id":"api/client-ui/functions/ReportTextDirection","path":"/geoprocessing/docs/next/api/client-ui/functions/ReportTextDirection"},{"id":"api/client-ui/functions/ResultsCard","path":"/geoprocessing/docs/next/api/client-ui/functions/ResultsCard"},{"id":"api/client-ui/functions/runTask","path":"/geoprocessing/docs/next/api/client-ui/functions/runTask"},{"id":"api/client-ui/functions/SegmentControl","path":"/geoprocessing/docs/next/api/client-ui/functions/SegmentControl"},{"id":"api/client-ui/functions/SimpleButton","path":"/geoprocessing/docs/next/api/client-ui/functions/SimpleButton"},{"id":"api/client-ui/functions/SimpleButtonStyled","path":"/geoprocessing/docs/next/api/client-ui/functions/SimpleButtonStyled"},{"id":"api/client-ui/functions/Skeleton","path":"/geoprocessing/docs/next/api/client-ui/functions/Skeleton"},{"id":"api/client-ui/functions/SketchAttributesCard","path":"/geoprocessing/docs/next/api/client-ui/functions/SketchAttributesCard"},{"id":"api/client-ui/functions/SketchClassTable","path":"/geoprocessing/docs/next/api/client-ui/functions/SketchClassTable"},{"id":"api/client-ui/functions/SketchClassTableStyled","path":"/geoprocessing/docs/next/api/client-ui/functions/SketchClassTableStyled"},{"id":"api/client-ui/functions/SmallReportTableStyled","path":"/geoprocessing/docs/next/api/client-ui/functions/SmallReportTableStyled"},{"id":"api/client-ui/functions/StyledCircle","path":"/geoprocessing/docs/next/api/client-ui/functions/StyledCircle"},{"id":"api/client-ui/functions/StyledPill","path":"/geoprocessing/docs/next/api/client-ui/functions/StyledPill"},{"id":"api/client-ui/functions/StyledTwoColorPointyCircle","path":"/geoprocessing/docs/next/api/client-ui/functions/StyledTwoColorPointyCircle"},{"id":"api/client-ui/functions/Table","path":"/geoprocessing/docs/next/api/client-ui/functions/Table"},{"id":"api/client-ui/functions/TableStyled","path":"/geoprocessing/docs/next/api/client-ui/functions/TableStyled"},{"id":"api/client-ui/functions/Toolbar","path":"/geoprocessing/docs/next/api/client-ui/functions/Toolbar"},{"id":"api/client-ui/functions/ToolbarCard","path":"/geoprocessing/docs/next/api/client-ui/functions/ToolbarCard"},{"id":"api/client-ui/functions/ToolbarStyled","path":"/geoprocessing/docs/next/api/client-ui/functions/ToolbarStyled"},{"id":"api/client-ui/functions/Tooltip","path":"/geoprocessing/docs/next/api/client-ui/functions/Tooltip"},{"id":"api/client-ui/functions/TooltipContainer","path":"/geoprocessing/docs/next/api/client-ui/functions/TooltipContainer"},{"id":"api/client-ui/functions/TooltipItem","path":"/geoprocessing/docs/next/api/client-ui/functions/TooltipItem"},{"id":"api/client-ui/functions/TooltipTrigger","path":"/geoprocessing/docs/next/api/client-ui/functions/TooltipTrigger"},{"id":"api/client-ui/functions/Translator","path":"/geoprocessing/docs/next/api/client-ui/functions/Translator"},{"id":"api/client-ui/functions/TwoColorPointyCircle","path":"/geoprocessing/docs/next/api/client-ui/functions/TwoColorPointyCircle"},{"id":"api/client-ui/functions/useCheckboxes","path":"/geoprocessing/docs/next/api/client-ui/functions/useCheckboxes"},{"id":"api/client-ui/functions/useFunction","path":"/geoprocessing/docs/next/api/client-ui/functions/useFunction"},{"id":"api/client-ui/functions/useLanguage","path":"/geoprocessing/docs/next/api/client-ui/functions/useLanguage"},{"id":"api/client-ui/functions/useSketchProperties","path":"/geoprocessing/docs/next/api/client-ui/functions/useSketchProperties"},{"id":"api/client-ui/functions/VerticalSpacer","path":"/geoprocessing/docs/next/api/client-ui/functions/VerticalSpacer"},{"id":"api/client-ui/functions/WarningPill","path":"/geoprocessing/docs/next/api/client-ui/functions/WarningPill"},{"id":"api/client-ui/functions/WatersDiagram","path":"/geoprocessing/docs/next/api/client-ui/functions/WatersDiagram"},{"id":"api/client-ui/index","path":"/geoprocessing/docs/next/api/client-ui/"},{"id":"api/client-ui/interfaces/AppProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/AppProps"},{"id":"api/client-ui/interfaces/CardProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/CardProps"},{"id":"api/client-ui/interfaces/CircleProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/CircleProps"},{"id":"api/client-ui/interfaces/ClassTableColumnConfig","path":"/geoprocessing/docs/next/api/client-ui/interfaces/ClassTableColumnConfig"},{"id":"api/client-ui/interfaces/ClassTableProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/ClassTableProps"},{"id":"api/client-ui/interfaces/CollapseGroupProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/CollapseGroupProps"},{"id":"api/client-ui/interfaces/CollapseProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/CollapseProps"},{"id":"api/client-ui/interfaces/DataDownloadProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/DataDownloadProps"},{"id":"api/client-ui/interfaces/DataDownloadToolbarProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/DataDownloadToolbarProps"},{"id":"api/client-ui/interfaces/DataFormatters","path":"/geoprocessing/docs/next/api/client-ui/interfaces/DataFormatters"},{"id":"api/client-ui/interfaces/DownloadOption","path":"/geoprocessing/docs/next/api/client-ui/interfaces/DownloadOption"},{"id":"api/client-ui/interfaces/DropdownContainerProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/DropdownContainerProps"},{"id":"api/client-ui/interfaces/DropdownProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/DropdownProps"},{"id":"api/client-ui/interfaces/FilterSelect","path":"/geoprocessing/docs/next/api/client-ui/interfaces/FilterSelect"},{"id":"api/client-ui/interfaces/FilterSelectOption","path":"/geoprocessing/docs/next/api/client-ui/interfaces/FilterSelectOption"},{"id":"api/client-ui/interfaces/FilterSelectTableOptions","path":"/geoprocessing/docs/next/api/client-ui/interfaces/FilterSelectTableOptions"},{"id":"api/client-ui/interfaces/GeographySwitcherProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/GeographySwitcherProps"},{"id":"api/client-ui/interfaces/GroupCircleProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/GroupCircleProps"},{"id":"api/client-ui/interfaces/GroupCircleRowProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/GroupCircleRowProps"},{"id":"api/client-ui/interfaces/GroupPillProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/GroupPillProps"},{"id":"api/client-ui/interfaces/HorizontalStackedBarProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/HorizontalStackedBarProps"},{"id":"api/client-ui/interfaces/InfoStatusProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/InfoStatusProps"},{"id":"api/client-ui/interfaces/IucnActivityRank","path":"/geoprocessing/docs/next/api/client-ui/interfaces/IucnActivityRank"},{"id":"api/client-ui/interfaces/IucnLevelCircleProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/IucnLevelCircleProps"},{"id":"api/client-ui/interfaces/IucnLevelCircleRowProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/IucnLevelCircleRowProps"},{"id":"api/client-ui/interfaces/IucnLevelPillProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/IucnLevelPillProps"},{"id":"api/client-ui/interfaces/KeySectionProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/KeySectionProps"},{"id":"api/client-ui/interfaces/LabelProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/LabelProps"},{"id":"api/client-ui/interfaces/LegendProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/LegendProps"},{"id":"api/client-ui/interfaces/ObjectiveStatusProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/ObjectiveStatusProps"},{"id":"api/client-ui/interfaces/PillColumnProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/PillColumnProps"},{"id":"api/client-ui/interfaces/PillProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/PillProps"},{"id":"api/client-ui/interfaces/RbcsIconProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/RbcsIconProps"},{"id":"api/client-ui/interfaces/RbcsLearnMoreProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/RbcsLearnMoreProps"},{"id":"api/client-ui/interfaces/RbcsMpaClassPanelProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/RbcsMpaClassPanelProps"},{"id":"api/client-ui/interfaces/RbcsMpaObjectiveStatusProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/RbcsMpaObjectiveStatusProps"},{"id":"api/client-ui/interfaces/RbcsNetworkObjectiveProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/RbcsNetworkObjectiveProps"},{"id":"api/client-ui/interfaces/RbcsPanelProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/RbcsPanelProps"},{"id":"api/client-ui/interfaces/ReportChartFigureProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/ReportChartFigureProps"},{"id":"api/client-ui/interfaces/ReportContextState","path":"/geoprocessing/docs/next/api/client-ui/interfaces/ReportContextState"},{"id":"api/client-ui/interfaces/ReportPageProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/ReportPageProps"},{"id":"api/client-ui/interfaces/ReportStoryLayoutProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/ReportStoryLayoutProps"},{"id":"api/client-ui/interfaces/ResultsCardProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/ResultsCardProps"},{"id":"api/client-ui/interfaces/Row","path":"/geoprocessing/docs/next/api/client-ui/interfaces/Row"},{"id":"api/client-ui/interfaces/SegmentControlProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/SegmentControlProps"},{"id":"api/client-ui/interfaces/SimpleButtonProbs","path":"/geoprocessing/docs/next/api/client-ui/interfaces/SimpleButtonProbs"},{"id":"api/client-ui/interfaces/SketchAttributesCardProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/SketchAttributesCardProps"},{"id":"api/client-ui/interfaces/SketchClassTableProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/SketchClassTableProps"},{"id":"api/client-ui/interfaces/StyledHorizontalStackedBarProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/StyledHorizontalStackedBarProps"},{"id":"api/client-ui/interfaces/StyledLegendProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/StyledLegendProps"},{"id":"api/client-ui/interfaces/StyledTwoColorPointyCircleProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/StyledTwoColorPointyCircleProps"},{"id":"api/client-ui/interfaces/TableOptions","path":"/geoprocessing/docs/next/api/client-ui/interfaces/TableOptions"},{"id":"api/client-ui/interfaces/ToolbarCardProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/ToolbarCardProps"},{"id":"api/client-ui/interfaces/ToolbarProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/ToolbarProps"},{"id":"api/client-ui/interfaces/TooltipContainerProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/TooltipContainerProps"},{"id":"api/client-ui/interfaces/TooltipProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/TooltipProps"},{"id":"api/client-ui/interfaces/TwoColorPointyCircleProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/TwoColorPointyCircleProps"},{"id":"api/client-ui/interfaces/VerticalSpacerProps","path":"/geoprocessing/docs/next/api/client-ui/interfaces/VerticalSpacerProps"},{"id":"api/client-ui/type-aliases/Block","path":"/geoprocessing/docs/next/api/client-ui/type-aliases/Block"},{"id":"api/client-ui/type-aliases/BlockGroup","path":"/geoprocessing/docs/next/api/client-ui/type-aliases/BlockGroup"},{"id":"api/client-ui/type-aliases/Column","path":"/geoprocessing/docs/next/api/client-ui/type-aliases/Column"},{"id":"api/client-ui/type-aliases/HorizontalStackedBarRow","path":"/geoprocessing/docs/next/api/client-ui/type-aliases/HorizontalStackedBarRow"},{"id":"api/client-ui/type-aliases/RbcsMpaObjectiveRenderMsgFunction","path":"/geoprocessing/docs/next/api/client-ui/type-aliases/RbcsMpaObjectiveRenderMsgFunction"},{"id":"api/client-ui/type-aliases/RbcsNetworkObjectiveRenderMsgFunction","path":"/geoprocessing/docs/next/api/client-ui/type-aliases/RbcsNetworkObjectiveRenderMsgFunction"},{"id":"api/client-ui/type-aliases/RowConfig","path":"/geoprocessing/docs/next/api/client-ui/type-aliases/RowConfig"},{"id":"api/client-ui/type-aliases/StringOrNumber","path":"/geoprocessing/docs/next/api/client-ui/type-aliases/StringOrNumber"},{"id":"api/client-ui/type-aliases/SUPPORTED_FORMAT","path":"/geoprocessing/docs/next/api/client-ui/type-aliases/SUPPORTED_FORMAT"},{"id":"api/client-ui/type-aliases/TargetFormatter","path":"/geoprocessing/docs/next/api/client-ui/type-aliases/TargetFormatter"},{"id":"api/dataproviders/index","path":"/geoprocessing/docs/next/api/dataproviders/"},{"id":"api/geoprocessing/classes/ComplexityError","path":"/geoprocessing/docs/next/api/geoprocessing/classes/ComplexityError"},{"id":"api/geoprocessing/classes/GeoprocessingHandler","path":"/geoprocessing/docs/next/api/geoprocessing/classes/GeoprocessingHandler"},{"id":"api/geoprocessing/classes/PreprocessingHandler","path":"/geoprocessing/docs/next/api/geoprocessing/classes/PreprocessingHandler"},{"id":"api/geoprocessing/classes/ProjectClientBase","path":"/geoprocessing/docs/next/api/geoprocessing/classes/ProjectClientBase"},{"id":"api/geoprocessing/classes/ValidationError","path":"/geoprocessing/docs/next/api/geoprocessing/classes/ValidationError"},{"id":"api/geoprocessing/classes/VectorDataSource","path":"/geoprocessing/docs/next/api/geoprocessing/classes/VectorDataSource"},{"id":"api/geoprocessing/enumerations/GeoprocessingTaskStatus","path":"/geoprocessing/docs/next/api/geoprocessing/enumerations/GeoprocessingTaskStatus"},{"id":"api/geoprocessing/functions/anchorScore","path":"/geoprocessing/docs/next/api/geoprocessing/functions/anchorScore"},{"id":"api/geoprocessing/functions/aquacultureScore","path":"/geoprocessing/docs/next/api/geoprocessing/functions/aquacultureScore"},{"id":"api/geoprocessing/functions/area","path":"/geoprocessing/docs/next/api/geoprocessing/functions/area"},{"id":"api/geoprocessing/functions/batchDelete","path":"/geoprocessing/docs/next/api/geoprocessing/functions/batchDelete"},{"id":"api/geoprocessing/functions/batchDeleteTasks","path":"/geoprocessing/docs/next/api/geoprocessing/functions/batchDeleteTasks"},{"id":"api/geoprocessing/functions/bboxOverlap","path":"/geoprocessing/docs/next/api/geoprocessing/functions/bboxOverlap"},{"id":"api/geoprocessing/functions/booleanOverlap","path":"/geoprocessing/docs/next/api/geoprocessing/functions/booleanOverlap"},{"id":"api/geoprocessing/functions/byteSize","path":"/geoprocessing/docs/next/api/geoprocessing/functions/byteSize"},{"id":"api/geoprocessing/functions/capitalize","path":"/geoprocessing/docs/next/api/geoprocessing/functions/capitalize"},{"id":"api/geoprocessing/functions/chunk","path":"/geoprocessing/docs/next/api/geoprocessing/functions/chunk"},{"id":"api/geoprocessing/functions/classIdMapping","path":"/geoprocessing/docs/next/api/geoprocessing/functions/classIdMapping"},{"id":"api/geoprocessing/functions/classifyMPA","path":"/geoprocessing/docs/next/api/geoprocessing/functions/classifyMPA"},{"id":"api/geoprocessing/functions/classifyZone","path":"/geoprocessing/docs/next/api/geoprocessing/functions/classifyZone"},{"id":"api/geoprocessing/functions/cleanBBox","path":"/geoprocessing/docs/next/api/geoprocessing/functions/cleanBBox"},{"id":"api/geoprocessing/functions/cleanCoords","path":"/geoprocessing/docs/next/api/geoprocessing/functions/cleanCoords"},{"id":"api/geoprocessing/functions/clip","path":"/geoprocessing/docs/next/api/geoprocessing/functions/clip"},{"id":"api/geoprocessing/functions/clipMultiMerge","path":"/geoprocessing/docs/next/api/geoprocessing/functions/clipMultiMerge"},{"id":"api/geoprocessing/functions/clipToPolygonDatasources","path":"/geoprocessing/docs/next/api/geoprocessing/functions/clipToPolygonDatasources"},{"id":"api/geoprocessing/functions/clipToPolygonFeatures","path":"/geoprocessing/docs/next/api/geoprocessing/functions/clipToPolygonFeatures"},{"id":"api/geoprocessing/functions/collectionHasGeometry","path":"/geoprocessing/docs/next/api/geoprocessing/functions/collectionHasGeometry"},{"id":"api/geoprocessing/functions/createMetric","path":"/geoprocessing/docs/next/api/geoprocessing/functions/createMetric"},{"id":"api/geoprocessing/functions/createMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/createMetrics"},{"id":"api/geoprocessing/functions/ensureValidPolygon","path":"/geoprocessing/docs/next/api/geoprocessing/functions/ensureValidPolygon"},{"id":"api/geoprocessing/functions/featureToSketch","path":"/geoprocessing/docs/next/api/geoprocessing/functions/featureToSketch"},{"id":"api/geoprocessing/functions/featureToSketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/featureToSketchCollection"},{"id":"api/geoprocessing/functions/fetchGeoJSON","path":"/geoprocessing/docs/next/api/geoprocessing/functions/fetchGeoJSON"},{"id":"api/geoprocessing/functions/fgbFetchAll","path":"/geoprocessing/docs/next/api/geoprocessing/functions/fgbFetchAll"},{"id":"api/geoprocessing/functions/fgBoundingBox","path":"/geoprocessing/docs/next/api/geoprocessing/functions/fgBoundingBox"},{"id":"api/geoprocessing/functions/findAndUpdateMetricValue","path":"/geoprocessing/docs/next/api/geoprocessing/functions/findAndUpdateMetricValue"},{"id":"api/geoprocessing/functions/firstMatching","path":"/geoprocessing/docs/next/api/geoprocessing/functions/firstMatching"},{"id":"api/geoprocessing/functions/firstMatchingMetric","path":"/geoprocessing/docs/next/api/geoprocessing/functions/firstMatchingMetric"},{"id":"api/geoprocessing/functions/flattenByGroupAllClass","path":"/geoprocessing/docs/next/api/geoprocessing/functions/flattenByGroupAllClass"},{"id":"api/geoprocessing/functions/flattenByGroupSketchAllClass","path":"/geoprocessing/docs/next/api/geoprocessing/functions/flattenByGroupSketchAllClass"},{"id":"api/geoprocessing/functions/flattenBySketchAllClass","path":"/geoprocessing/docs/next/api/geoprocessing/functions/flattenBySketchAllClass"},{"id":"api/geoprocessing/functions/flattenSketchAllId","path":"/geoprocessing/docs/next/api/geoprocessing/functions/flattenSketchAllId"},{"id":"api/geoprocessing/functions/gearTypeScore","path":"/geoprocessing/docs/next/api/geoprocessing/functions/gearTypeScore"},{"id":"api/geoprocessing/functions/genClipLoader","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genClipLoader"},{"id":"api/geoprocessing/functions/genClipToPolygonDatasources","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genClipToPolygonDatasources"},{"id":"api/geoprocessing/functions/genClipToPolygonFeatures","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genClipToPolygonFeatures"},{"id":"api/geoprocessing/functions/genFeature","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genFeature"},{"id":"api/geoprocessing/functions/genFeatureCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genFeatureCollection"},{"id":"api/geoprocessing/functions/genRandomPolygons","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genRandomPolygons"},{"id":"api/geoprocessing/functions/genSampleNullSketch","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleNullSketch"},{"id":"api/geoprocessing/functions/genSampleNullSketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleNullSketchCollection"},{"id":"api/geoprocessing/functions/genSampleSketch","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketch"},{"id":"api/geoprocessing/functions/genSampleSketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchCollection"},{"id":"api/geoprocessing/functions/genSampleSketchCollectionFromSketches","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchCollectionFromSketches"},{"id":"api/geoprocessing/functions/genSampleSketchContext","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleSketchContext"},{"id":"api/geoprocessing/functions/genSampleUserAttributes","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genSampleUserAttributes"},{"id":"api/geoprocessing/functions/genSketch","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genSketch"},{"id":"api/geoprocessing/functions/genSketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genSketchCollection"},{"id":"api/geoprocessing/functions/genTaskCacheKey","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genTaskCacheKey"},{"id":"api/geoprocessing/functions/genZodErrorMessage","path":"/geoprocessing/docs/next/api/geoprocessing/functions/genZodErrorMessage"},{"id":"api/geoprocessing/functions/getArea","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getArea"},{"id":"api/geoprocessing/functions/getClassificationLabel","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getClassificationLabel"},{"id":"api/geoprocessing/functions/getCogFilename","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getCogFilename"},{"id":"api/geoprocessing/functions/getDatasetBucketName","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getDatasetBucketName"},{"id":"api/geoprocessing/functions/getDatasourceById","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getDatasourceById"},{"id":"api/geoprocessing/functions/getExternalRasterDatasourceById","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getExternalRasterDatasourceById"},{"id":"api/geoprocessing/functions/getExternalVectorDatasourceById","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getExternalVectorDatasourceById"},{"id":"api/geoprocessing/functions/getFeatures","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getFeatures"},{"id":"api/geoprocessing/functions/getFeaturesForSketchBBoxes","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getFeaturesForSketchBBoxes"},{"id":"api/geoprocessing/functions/getFirstFromParam","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getFirstFromParam"},{"id":"api/geoprocessing/functions/getFlatGeobufFilename","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getFlatGeobufFilename"},{"id":"api/geoprocessing/functions/getFlatGeobufPath","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getFlatGeobufPath"},{"id":"api/geoprocessing/functions/getGeopackagePath","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getGeopackagePath"},{"id":"api/geoprocessing/functions/getHistogram","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getHistogram"},{"id":"api/geoprocessing/functions/getIndexIconPerc","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getIndexIconPerc"},{"id":"api/geoprocessing/functions/getInternalRasterDatasourceById","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getInternalRasterDatasourceById"},{"id":"api/geoprocessing/functions/getInternalVectorDatasourceById","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getInternalVectorDatasourceById"},{"id":"api/geoprocessing/functions/getIucnCategoryForActivities","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryForActivities"},{"id":"api/geoprocessing/functions/getIucnCategoryForSketches","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryForSketches"},{"id":"api/geoprocessing/functions/getIucnCategoryNameForSketches","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnCategoryNameForSketches"},{"id":"api/geoprocessing/functions/getIucnLevelNameForSketches","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getIucnLevelNameForSketches"},{"id":"api/geoprocessing/functions/getJsonFilename","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getJsonFilename"},{"id":"api/geoprocessing/functions/getJsonPath","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getJsonPath"},{"id":"api/geoprocessing/functions/getJsonUserAttribute","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getJsonUserAttribute"},{"id":"api/geoprocessing/functions/getKeys","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getKeys"},{"id":"api/geoprocessing/functions/getMetricGroupObjectiveId","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getMetricGroupObjectiveId"},{"id":"api/geoprocessing/functions/getMetricGroupObjectiveIds","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getMetricGroupObjectiveIds"},{"id":"api/geoprocessing/functions/getMinYesCountMap","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getMinYesCountMap"},{"id":"api/geoprocessing/functions/getMpaClassificationName","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getMpaClassificationName"},{"id":"api/geoprocessing/functions/getObjectiveById","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getObjectiveById"},{"id":"api/geoprocessing/functions/getParamStringArray","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getParamStringArray"},{"id":"api/geoprocessing/functions/getRasterBoxSpherical","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getRasterBoxSpherical"},{"id":"api/geoprocessing/functions/getRasterDatasourceById","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getRasterDatasourceById"},{"id":"api/geoprocessing/functions/getSketchCollectionChildIds","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getSketchCollectionChildIds"},{"id":"api/geoprocessing/functions/getSketchFeatures","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getSketchFeatures"},{"id":"api/geoprocessing/functions/getSketchToMpaProtectionLevel","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getSketchToMpaProtectionLevel"},{"id":"api/geoprocessing/functions/getSum","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getSum"},{"id":"api/geoprocessing/functions/getUserAttribute","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getUserAttribute"},{"id":"api/geoprocessing/functions/getVectorDatasourceById","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getVectorDatasourceById"},{"id":"api/geoprocessing/functions/getZoneClassificationName","path":"/geoprocessing/docs/next/api/geoprocessing/functions/getZoneClassificationName"},{"id":"api/geoprocessing/functions/groupBy","path":"/geoprocessing/docs/next/api/geoprocessing/functions/groupBy"},{"id":"api/geoprocessing/functions/hasOwnProperty","path":"/geoprocessing/docs/next/api/geoprocessing/functions/hasOwnProperty"},{"id":"api/geoprocessing/functions/includeVirtualSketch","path":"/geoprocessing/docs/next/api/geoprocessing/functions/includeVirtualSketch"},{"id":"api/geoprocessing/functions/isExternalDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isExternalDatasource"},{"id":"api/geoprocessing/functions/isExternalRasterDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isExternalRasterDatasource"},{"id":"api/geoprocessing/functions/isExternalVectorDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isExternalVectorDatasource"},{"id":"api/geoprocessing/functions/isFeature","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isFeature"},{"id":"api/geoprocessing/functions/isFeatureCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isFeatureCollection"},{"id":"api/geoprocessing/functions/isGeometry","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isGeometry"},{"id":"api/geoprocessing/functions/isImportRasterDatasourceConfig","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isImportRasterDatasourceConfig"},{"id":"api/geoprocessing/functions/isImportVectorDatasourceConfig","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isImportVectorDatasourceConfig"},{"id":"api/geoprocessing/functions/isinternalDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isinternalDatasource"},{"id":"api/geoprocessing/functions/isInternalRasterDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isInternalRasterDatasource"},{"id":"api/geoprocessing/functions/isInternalVectorDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isInternalVectorDatasource"},{"id":"api/geoprocessing/functions/isLineStringFeature","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isLineStringFeature"},{"id":"api/geoprocessing/functions/isLineStringSketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isLineStringSketchCollection"},{"id":"api/geoprocessing/functions/isMetric","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isMetric"},{"id":"api/geoprocessing/functions/isMetricArray","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isMetricArray"},{"id":"api/geoprocessing/functions/isMetricPack","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isMetricPack"},{"id":"api/geoprocessing/functions/isMultiPolygonFeature","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonFeature"},{"id":"api/geoprocessing/functions/isMultiPolygonSketch","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonSketch"},{"id":"api/geoprocessing/functions/isMultiPolygonSketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isMultiPolygonSketchCollection"},{"id":"api/geoprocessing/functions/isNullSketch","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isNullSketch"},{"id":"api/geoprocessing/functions/isNullSketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isNullSketchCollection"},{"id":"api/geoprocessing/functions/isObject","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isObject"},{"id":"api/geoprocessing/functions/isPointFeature","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isPointFeature"},{"id":"api/geoprocessing/functions/isPointSketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isPointSketchCollection"},{"id":"api/geoprocessing/functions/isPolygonAllSketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonAllSketchCollection"},{"id":"api/geoprocessing/functions/isPolygonAnyFeature","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonAnyFeature"},{"id":"api/geoprocessing/functions/isPolygonFeature","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonFeature"},{"id":"api/geoprocessing/functions/isPolygonFeatureArray","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonFeatureArray"},{"id":"api/geoprocessing/functions/isPolygonSketch","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonSketch"},{"id":"api/geoprocessing/functions/isPolygonSketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isPolygonSketchCollection"},{"id":"api/geoprocessing/functions/isRasterDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isRasterDatasource"},{"id":"api/geoprocessing/functions/isRbcsProtectionLevel","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isRbcsProtectionLevel"},{"id":"api/geoprocessing/functions/isSketch","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isSketch"},{"id":"api/geoprocessing/functions/isSketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isSketchCollection"},{"id":"api/geoprocessing/functions/isTruthyAttributeValue","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isTruthyAttributeValue"},{"id":"api/geoprocessing/functions/isVectorDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/functions/isVectorDatasource"},{"id":"api/geoprocessing/functions/keyBy","path":"/geoprocessing/docs/next/api/geoprocessing/functions/keyBy"},{"id":"api/geoprocessing/functions/loadCog","path":"/geoprocessing/docs/next/api/geoprocessing/functions/loadCog"},{"id":"api/geoprocessing/functions/loadFgb","path":"/geoprocessing/docs/next/api/geoprocessing/functions/loadFgb"},{"id":"api/geoprocessing/functions/maxWidth","path":"/geoprocessing/docs/next/api/geoprocessing/functions/maxWidth"},{"id":"api/geoprocessing/functions/metricsForSketch","path":"/geoprocessing/docs/next/api/geoprocessing/functions/metricsForSketch"},{"id":"api/geoprocessing/functions/metricsSketchIds","path":"/geoprocessing/docs/next/api/geoprocessing/functions/metricsSketchIds"},{"id":"api/geoprocessing/functions/metricsWithClassId","path":"/geoprocessing/docs/next/api/geoprocessing/functions/metricsWithClassId"},{"id":"api/geoprocessing/functions/metricsWithSketchId","path":"/geoprocessing/docs/next/api/geoprocessing/functions/metricsWithSketchId"},{"id":"api/geoprocessing/functions/minWidth","path":"/geoprocessing/docs/next/api/geoprocessing/functions/minWidth"},{"id":"api/geoprocessing/functions/mpaClassMetric","path":"/geoprocessing/docs/next/api/geoprocessing/functions/mpaClassMetric"},{"id":"api/geoprocessing/functions/mpaClassMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/mpaClassMetrics"},{"id":"api/geoprocessing/functions/nestMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/nestMetrics"},{"id":"api/geoprocessing/functions/numberFormat","path":"/geoprocessing/docs/next/api/geoprocessing/functions/numberFormat"},{"id":"api/geoprocessing/functions/overlapArea","path":"/geoprocessing/docs/next/api/geoprocessing/functions/overlapArea"},{"id":"api/geoprocessing/functions/overlapAreaGroupMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/overlapAreaGroupMetrics"},{"id":"api/geoprocessing/functions/overlapFeatures","path":"/geoprocessing/docs/next/api/geoprocessing/functions/overlapFeatures"},{"id":"api/geoprocessing/functions/overlapFeaturesGroupMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/overlapFeaturesGroupMetrics"},{"id":"api/geoprocessing/functions/overlapGroupMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/overlapGroupMetrics"},{"id":"api/geoprocessing/functions/overlapRasterClass","path":"/geoprocessing/docs/next/api/geoprocessing/functions/overlapRasterClass"},{"id":"api/geoprocessing/functions/overlapRasterGroupMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/overlapRasterGroupMetrics"},{"id":"api/geoprocessing/functions/overlapSubarea","path":"/geoprocessing/docs/next/api/geoprocessing/functions/overlapSubarea"},{"id":"api/geoprocessing/functions/packMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/packMetrics"},{"id":"api/geoprocessing/functions/parseGeoraster","path":"/geoprocessing/docs/next/api/geoprocessing/functions/parseGeoraster"},{"id":"api/geoprocessing/functions/parseLambdaResponse","path":"/geoprocessing/docs/next/api/geoprocessing/functions/parseLambdaResponse"},{"id":"api/geoprocessing/functions/percentGoalWithEdge","path":"/geoprocessing/docs/next/api/geoprocessing/functions/percentGoalWithEdge"},{"id":"api/geoprocessing/functions/percentWithEdge","path":"/geoprocessing/docs/next/api/geoprocessing/functions/percentWithEdge"},{"id":"api/geoprocessing/functions/randomFloat","path":"/geoprocessing/docs/next/api/geoprocessing/functions/randomFloat"},{"id":"api/geoprocessing/functions/randomInt","path":"/geoprocessing/docs/next/api/geoprocessing/functions/randomInt"},{"id":"api/geoprocessing/functions/rasterMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/rasterMetrics"},{"id":"api/geoprocessing/functions/rasterStats","path":"/geoprocessing/docs/next/api/geoprocessing/functions/rasterStats"},{"id":"api/geoprocessing/functions/rasterStatsToMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/rasterStatsToMetrics"},{"id":"api/geoprocessing/functions/rbcsMpaToMetric","path":"/geoprocessing/docs/next/api/geoprocessing/functions/rbcsMpaToMetric"},{"id":"api/geoprocessing/functions/rbcsZoneToMetric","path":"/geoprocessing/docs/next/api/geoprocessing/functions/rbcsZoneToMetric"},{"id":"api/geoprocessing/functions/rekeyMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/rekeyMetrics"},{"id":"api/geoprocessing/functions/rekeyObject","path":"/geoprocessing/docs/next/api/geoprocessing/functions/rekeyObject"},{"id":"api/geoprocessing/functions/removeSketchCollPolygonHoles","path":"/geoprocessing/docs/next/api/geoprocessing/functions/removeSketchCollPolygonHoles"},{"id":"api/geoprocessing/functions/removeSketchPolygonHoles","path":"/geoprocessing/docs/next/api/geoprocessing/functions/removeSketchPolygonHoles"},{"id":"api/geoprocessing/functions/roundDecimal","path":"/geoprocessing/docs/next/api/geoprocessing/functions/roundDecimal"},{"id":"api/geoprocessing/functions/roundDecimalFormat","path":"/geoprocessing/docs/next/api/geoprocessing/functions/roundDecimalFormat"},{"id":"api/geoprocessing/functions/roundLower","path":"/geoprocessing/docs/next/api/geoprocessing/functions/roundLower"},{"id":"api/geoprocessing/functions/runLambdaWorker","path":"/geoprocessing/docs/next/api/geoprocessing/functions/runLambdaWorker"},{"id":"api/geoprocessing/functions/sampleSketchReportContextValue","path":"/geoprocessing/docs/next/api/geoprocessing/functions/sampleSketchReportContextValue"},{"id":"api/geoprocessing/functions/scanTasks","path":"/geoprocessing/docs/next/api/geoprocessing/functions/scanTasks"},{"id":"api/geoprocessing/functions/sketchToId","path":"/geoprocessing/docs/next/api/geoprocessing/functions/sketchToId"},{"id":"api/geoprocessing/functions/sketchToZone","path":"/geoprocessing/docs/next/api/geoprocessing/functions/sketchToZone"},{"id":"api/geoprocessing/functions/sortMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/sortMetrics"},{"id":"api/geoprocessing/functions/sortMetricsDisplayOrder","path":"/geoprocessing/docs/next/api/geoprocessing/functions/sortMetricsDisplayOrder"},{"id":"api/geoprocessing/functions/splitBBoxAntimeridian","path":"/geoprocessing/docs/next/api/geoprocessing/functions/splitBBoxAntimeridian"},{"id":"api/geoprocessing/functions/splitFeatureAntimeridian","path":"/geoprocessing/docs/next/api/geoprocessing/functions/splitFeatureAntimeridian"},{"id":"api/geoprocessing/functions/splitSketchAntimeridian","path":"/geoprocessing/docs/next/api/geoprocessing/functions/splitSketchAntimeridian"},{"id":"api/geoprocessing/functions/squareMeterToKilometer","path":"/geoprocessing/docs/next/api/geoprocessing/functions/squareMeterToKilometer"},{"id":"api/geoprocessing/functions/squareMeterToMile","path":"/geoprocessing/docs/next/api/geoprocessing/functions/squareMeterToMile"},{"id":"api/geoprocessing/functions/testWithinPerc","path":"/geoprocessing/docs/next/api/geoprocessing/functions/testWithinPerc"},{"id":"api/geoprocessing/functions/toChildProperties","path":"/geoprocessing/docs/next/api/geoprocessing/functions/toChildProperties"},{"id":"api/geoprocessing/functions/toFeatureArray","path":"/geoprocessing/docs/next/api/geoprocessing/functions/toFeatureArray"},{"id":"api/geoprocessing/functions/toFeaturePolygonArray","path":"/geoprocessing/docs/next/api/geoprocessing/functions/toFeaturePolygonArray"},{"id":"api/geoprocessing/functions/toNullSketch","path":"/geoprocessing/docs/next/api/geoprocessing/functions/toNullSketch"},{"id":"api/geoprocessing/functions/toNullSketchArray","path":"/geoprocessing/docs/next/api/geoprocessing/functions/toNullSketchArray"},{"id":"api/geoprocessing/functions/toPercentMetric","path":"/geoprocessing/docs/next/api/geoprocessing/functions/toPercentMetric"},{"id":"api/geoprocessing/functions/toRasterProjection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/toRasterProjection"},{"id":"api/geoprocessing/functions/toShortSketches","path":"/geoprocessing/docs/next/api/geoprocessing/functions/toShortSketches"},{"id":"api/geoprocessing/functions/toSketchArray","path":"/geoprocessing/docs/next/api/geoprocessing/functions/toSketchArray"},{"id":"api/geoprocessing/functions/toSketchPropertiesArray","path":"/geoprocessing/docs/next/api/geoprocessing/functions/toSketchPropertiesArray"},{"id":"api/geoprocessing/functions/unpackMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/unpackMetrics"},{"id":"api/geoprocessing/functions/updateCommandsSync","path":"/geoprocessing/docs/next/api/geoprocessing/functions/updateCommandsSync"},{"id":"api/geoprocessing/functions/valueFormatter","path":"/geoprocessing/docs/next/api/geoprocessing/functions/valueFormatter"},{"id":"api/geoprocessing/functions/zeroPolygon","path":"/geoprocessing/docs/next/api/geoprocessing/functions/zeroPolygon"},{"id":"api/geoprocessing/functions/zeroSketch","path":"/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketch"},{"id":"api/geoprocessing/functions/zeroSketchArray","path":"/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketchArray"},{"id":"api/geoprocessing/functions/zeroSketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/functions/zeroSketchCollection"},{"id":"api/geoprocessing/functions/zoneClassMetrics","path":"/geoprocessing/docs/next/api/geoprocessing/functions/zoneClassMetrics"},{"id":"api/geoprocessing/index","path":"/geoprocessing/docs/next/api/geoprocessing/"},{"id":"api/geoprocessing/interfaces/BaseImportDatasourceConfig","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/BaseImportDatasourceConfig"},{"id":"api/geoprocessing/interfaces/CalcStatsOptions","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/CalcStatsOptions"},{"id":"api/geoprocessing/interfaces/ClipOptions","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/ClipOptions"},{"id":"api/geoprocessing/interfaces/DatasourceClipOperation","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/DatasourceClipOperation"},{"id":"api/geoprocessing/interfaces/DatasourceOptions","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/DatasourceOptions"},{"id":"api/geoprocessing/interfaces/DefaultExtraParams","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/DefaultExtraParams"},{"id":"api/geoprocessing/interfaces/Feature","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/Feature"},{"id":"api/geoprocessing/interfaces/FeatureClipOperation","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureClipOperation"},{"id":"api/geoprocessing/interfaces/FeatureCollection","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureCollection"},{"id":"api/geoprocessing/interfaces/FeatureMap","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureMap"},{"id":"api/geoprocessing/interfaces/FeatureTree","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/FeatureTree"},{"id":"api/geoprocessing/interfaces/FgBoundingBox","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/FgBoundingBox"},{"id":"api/geoprocessing/interfaces/GeogProp","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeogProp"},{"id":"api/geoprocessing/interfaces/GeometryCollection","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeometryCollection"},{"id":"api/geoprocessing/interfaces/GeoprocessingHandlerOptions","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingHandlerOptions"},{"id":"api/geoprocessing/interfaces/GeoprocessingProject","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingProject"},{"id":"api/geoprocessing/interfaces/GeoprocessingRequestModel","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingRequestModel"},{"id":"api/geoprocessing/interfaces/GeoprocessingServiceMetadata","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingServiceMetadata"},{"id":"api/geoprocessing/interfaces/GeoprocessingTask","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/GeoprocessingTask"},{"id":"api/geoprocessing/interfaces/Georaster","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/Georaster"},{"id":"api/geoprocessing/interfaces/Histogram","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/Histogram"},{"id":"api/geoprocessing/interfaces/HistogramOptions","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/HistogramOptions"},{"id":"api/geoprocessing/interfaces/IucnActivity","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnActivity"},{"id":"api/geoprocessing/interfaces/IucnActivityRank","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnActivityRank"},{"id":"api/geoprocessing/interfaces/IucnCategory","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnCategory"},{"id":"api/geoprocessing/interfaces/IucnCategoryCombined","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/IucnCategoryCombined"},{"id":"api/geoprocessing/interfaces/LineString","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/LineString"},{"id":"api/geoprocessing/interfaces/MetricGroupItem","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/MetricGroupItem"},{"id":"api/geoprocessing/interfaces/MetricPack","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/MetricPack"},{"id":"api/geoprocessing/interfaces/MultiLineString","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiLineString"},{"id":"api/geoprocessing/interfaces/MultiPolygon","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/MultiPolygon"},{"id":"api/geoprocessing/interfaces/Node","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/Node"},{"id":"api/geoprocessing/interfaces/NullSketch","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/NullSketch"},{"id":"api/geoprocessing/interfaces/NullSketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/NullSketchCollection"},{"id":"api/geoprocessing/interfaces/OverlapRasterOptions","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/OverlapRasterOptions"},{"id":"api/geoprocessing/interfaces/PercentEdgeOptions","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/PercentEdgeOptions"},{"id":"api/geoprocessing/interfaces/Point","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/Point"},{"id":"api/geoprocessing/interfaces/Polygon","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/Polygon"},{"id":"api/geoprocessing/interfaces/PreprocessingHandlerOptions","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingHandlerOptions"},{"id":"api/geoprocessing/interfaces/PreprocessingRequest","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingRequest"},{"id":"api/geoprocessing/interfaces/PreprocessingResponse","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingResponse"},{"id":"api/geoprocessing/interfaces/PreprocessingService","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingService"},{"id":"api/geoprocessing/interfaces/PreprocessingServiceMetadata","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/PreprocessingServiceMetadata"},{"id":"api/geoprocessing/interfaces/ProjectClientConfig","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/ProjectClientConfig"},{"id":"api/geoprocessing/interfaces/ProjectClientInterface","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/ProjectClientInterface"},{"id":"api/geoprocessing/interfaces/RasterStatsOptions","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/RasterStatsOptions"},{"id":"api/geoprocessing/interfaces/RbcsObjective","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/RbcsObjective"},{"id":"api/geoprocessing/interfaces/RegBasedClassificationMetric","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/RegBasedClassificationMetric"},{"id":"api/geoprocessing/interfaces/Report","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/Report"},{"id":"api/geoprocessing/interfaces/ReportContextValue","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportContextValue"},{"id":"api/geoprocessing/interfaces/ReportResult","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportResult"},{"id":"api/geoprocessing/interfaces/ReportResultBase","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/ReportResultBase"},{"id":"api/geoprocessing/interfaces/RootTaskItem","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/RootTaskItem"},{"id":"api/geoprocessing/interfaces/RoundDecimalOptions","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/RoundDecimalOptions"},{"id":"api/geoprocessing/interfaces/SeaSketchReportingMessageEvent","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingMessageEvent"},{"id":"api/geoprocessing/interfaces/SeaSketchReportingToggleLanguageEvent","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingToggleLanguageEvent"},{"id":"api/geoprocessing/interfaces/SeaSketchReportingToggleLayerVisibilityEvent","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingToggleLayerVisibilityEvent"},{"id":"api/geoprocessing/interfaces/SeaSketchReportingVisibleLayersChangeEvent","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/SeaSketchReportingVisibleLayersChangeEvent"},{"id":"api/geoprocessing/interfaces/Sketch","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/Sketch"},{"id":"api/geoprocessing/interfaces/SketchCollection","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchCollection"},{"id":"api/geoprocessing/interfaces/SketchMap","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/SketchMap"},{"id":"api/geoprocessing/interfaces/StatsObject","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/StatsObject"},{"id":"api/geoprocessing/interfaces/TestExampleOutput","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/TestExampleOutput"},{"id":"api/geoprocessing/interfaces/VectorDataSourceDetails","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorDataSourceDetails"},{"id":"api/geoprocessing/interfaces/VectorDataSourceOptions","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorDataSourceOptions"},{"id":"api/geoprocessing/interfaces/VectorFeature","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorFeature"},{"id":"api/geoprocessing/interfaces/VectorPropertyFilter","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/VectorPropertyFilter"},{"id":"api/geoprocessing/interfaces/WindowOptions","path":"/geoprocessing/docs/next/api/geoprocessing/interfaces/WindowOptions"},{"id":"api/geoprocessing/type-aliases/bandArithmetic","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/bandArithmetic"},{"id":"api/geoprocessing/type-aliases/BaseDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/BaseDatasource"},{"id":"api/geoprocessing/type-aliases/BBox","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/BBox"},{"id":"api/geoprocessing/type-aliases/ClassificationId","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClassificationId"},{"id":"api/geoprocessing/type-aliases/ClassStats","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClassStats"},{"id":"api/geoprocessing/type-aliases/ClientJsonConfig","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClientJsonConfig"},{"id":"api/geoprocessing/type-aliases/ClipOperations","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ClipOperations"},{"id":"api/geoprocessing/type-aliases/DataClass","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/DataClass"},{"id":"api/geoprocessing/type-aliases/Datasource","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Datasource"},{"id":"api/geoprocessing/type-aliases/EezLandUnion","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/EezLandUnion"},{"id":"api/geoprocessing/type-aliases/ExecutionMode","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExecutionMode"},{"id":"api/geoprocessing/type-aliases/ExternalRasterDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExternalRasterDatasource"},{"id":"api/geoprocessing/type-aliases/ExternalVectorDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ExternalVectorDatasource"},{"id":"api/geoprocessing/type-aliases/EXTRA_RASTER_STAT","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/EXTRA_RASTER_STAT"},{"id":"api/geoprocessing/type-aliases/FunctionExtraParams","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/FunctionExtraParams"},{"id":"api/geoprocessing/type-aliases/GEOBLAZE_RASTER_STAT","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GEOBLAZE_RASTER_STAT"},{"id":"api/geoprocessing/type-aliases/Geographies","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geographies"},{"id":"api/geoprocessing/type-aliases/Geography","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geography"},{"id":"api/geoprocessing/type-aliases/GeoJsonProperties","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoJsonProperties"},{"id":"api/geoprocessing/type-aliases/Geometry","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Geometry"},{"id":"api/geoprocessing/type-aliases/GeoprocessingJsonConfig","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingJsonConfig"},{"id":"api/geoprocessing/type-aliases/GeoprocessingRequest","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingRequest"},{"id":"api/geoprocessing/type-aliases/GeoprocessingRequestParams","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoprocessingRequestParams"},{"id":"api/geoprocessing/type-aliases/GeorasterMetadata","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeorasterMetadata"},{"id":"api/geoprocessing/type-aliases/GeoTypes","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GeoTypes"},{"id":"api/geoprocessing/type-aliases/get","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/get"},{"id":"api/geoprocessing/type-aliases/GroupMetricAgg","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GroupMetricAgg"},{"id":"api/geoprocessing/type-aliases/GroupMetricSketchAgg","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/GroupMetricSketchAgg"},{"id":"api/geoprocessing/type-aliases/histogram","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/histogram"},{"id":"api/geoprocessing/type-aliases/identify","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/identify"},{"id":"api/geoprocessing/type-aliases/ImportRasterDatasourceConfig","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportRasterDatasourceConfig"},{"id":"api/geoprocessing/type-aliases/ImportRasterDatasourceOptions","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportRasterDatasourceOptions"},{"id":"api/geoprocessing/type-aliases/ImportVectorDatasourceConfig","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportVectorDatasourceConfig"},{"id":"api/geoprocessing/type-aliases/ImportVectorDatasourceOptions","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ImportVectorDatasourceOptions"},{"id":"api/geoprocessing/type-aliases/InternalRasterDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/InternalRasterDatasource"},{"id":"api/geoprocessing/type-aliases/InternalVectorDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/InternalVectorDatasource"},{"id":"api/geoprocessing/type-aliases/ISO8601DateTime","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ISO8601DateTime"},{"id":"api/geoprocessing/type-aliases/ISO8601Duration","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ISO8601Duration"},{"id":"api/geoprocessing/type-aliases/IucnActivityRankId","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/IucnActivityRankId"},{"id":"api/geoprocessing/type-aliases/JSONValue","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/JSONValue"},{"id":"api/geoprocessing/type-aliases/load","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/load"},{"id":"api/geoprocessing/type-aliases/LoadedPackage","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/LoadedPackage"},{"id":"api/geoprocessing/type-aliases/max","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/max"},{"id":"api/geoprocessing/type-aliases/mean","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/mean"},{"id":"api/geoprocessing/type-aliases/median","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/median"},{"id":"api/geoprocessing/type-aliases/Metric","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metric"},{"id":"api/geoprocessing/type-aliases/MetricDimension","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricDimension"},{"id":"api/geoprocessing/type-aliases/MetricGroup","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricGroup"},{"id":"api/geoprocessing/type-aliases/MetricGroups","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricGroups"},{"id":"api/geoprocessing/type-aliases/MetricIdTypes","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricIdTypes"},{"id":"api/geoprocessing/type-aliases/MetricProperty","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MetricProperty"},{"id":"api/geoprocessing/type-aliases/Metrics","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Metrics"},{"id":"api/geoprocessing/type-aliases/min","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/min"},{"id":"api/geoprocessing/type-aliases/mode","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/mode"},{"id":"api/geoprocessing/type-aliases/MpaClassification","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/MpaClassification"},{"id":"api/geoprocessing/type-aliases/Nullable","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Nullable"},{"id":"api/geoprocessing/type-aliases/Objective","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Objective"},{"id":"api/geoprocessing/type-aliases/ObjectiveAnswer","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveAnswer"},{"id":"api/geoprocessing/type-aliases/ObjectiveAnswerMap","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveAnswerMap"},{"id":"api/geoprocessing/type-aliases/ObjectiveId","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ObjectiveId"},{"id":"api/geoprocessing/type-aliases/Objectives","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Objectives"},{"id":"api/geoprocessing/type-aliases/OsmLandFeature","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/OsmLandFeature"},{"id":"api/geoprocessing/type-aliases/Package","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Package"},{"id":"api/geoprocessing/type-aliases/PartialReportContextValue","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/PartialReportContextValue"},{"id":"api/geoprocessing/type-aliases/Position","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Position"},{"id":"api/geoprocessing/type-aliases/Project","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Project"},{"id":"api/geoprocessing/type-aliases/rasterCalculator","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/rasterCalculator"},{"id":"api/geoprocessing/type-aliases/RasterDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/RasterDatasource"},{"id":"api/geoprocessing/type-aliases/RbcsMpaObjectiveAnswerMap","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/RbcsMpaObjectiveAnswerMap"},{"id":"api/geoprocessing/type-aliases/RbcsMpaProtectionLevel","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/RbcsMpaProtectionLevel"},{"id":"api/geoprocessing/type-aliases/SketchGeometryTypes","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SketchGeometryTypes"},{"id":"api/geoprocessing/type-aliases/SketchProperties","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SketchProperties"},{"id":"api/geoprocessing/type-aliases/stats","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/stats"},{"id":"api/geoprocessing/type-aliases/Stats-1","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Stats-1"},{"id":"api/geoprocessing/type-aliases/sum","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/sum"},{"id":"api/geoprocessing/type-aliases/SUPPORTED_RASTER_STAT","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SUPPORTED_RASTER_STAT"},{"id":"api/geoprocessing/type-aliases/SupportedFormats","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/SupportedFormats"},{"id":"api/geoprocessing/type-aliases/TaskKey","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/TaskKey"},{"id":"api/geoprocessing/type-aliases/TypedArray","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/TypedArray"},{"id":"api/geoprocessing/type-aliases/UserAttribute","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/UserAttribute"},{"id":"api/geoprocessing/type-aliases/ValueFormatter","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ValueFormatter"},{"id":"api/geoprocessing/type-aliases/VectorDatasource","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/VectorDatasource"},{"id":"api/geoprocessing/type-aliases/Zone","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/Zone"},{"id":"api/geoprocessing/type-aliases/ZoneColor","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneColor"},{"id":"api/geoprocessing/type-aliases/ZoneId","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneId"},{"id":"api/geoprocessing/type-aliases/ZoneName","path":"/geoprocessing/docs/next/api/geoprocessing/type-aliases/ZoneName"},{"id":"api/geoprocessing/variables/activityRanks","path":"/geoprocessing/docs/next/api/geoprocessing/variables/activityRanks"},{"id":"api/geoprocessing/variables/baseDatasourceSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/baseDatasourceSchema"},{"id":"api/geoprocessing/variables/bboxSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/bboxSchema"},{"id":"api/geoprocessing/variables/box2dSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/box2dSchema"},{"id":"api/geoprocessing/variables/box3dSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/box3dSchema"},{"id":"api/geoprocessing/variables/classStatsSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/classStatsSchema"},{"id":"api/geoprocessing/variables/clientJsonConfigSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/clientJsonConfigSchema"},{"id":"api/geoprocessing/variables/commonHeaders","path":"/geoprocessing/docs/next/api/geoprocessing/variables/commonHeaders"},{"id":"api/geoprocessing/variables/dataClassSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/dataClassSchema"},{"id":"api/geoprocessing/variables/datasourceConfig","path":"/geoprocessing/docs/next/api/geoprocessing/variables/datasourceConfig"},{"id":"api/geoprocessing/variables/datasourceFormatDescriptions","path":"/geoprocessing/docs/next/api/geoprocessing/variables/datasourceFormatDescriptions"},{"id":"api/geoprocessing/variables/datasourceSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/datasourceSchema"},{"id":"api/geoprocessing/variables/datasourcesSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/datasourcesSchema"},{"id":"api/geoprocessing/variables/defaultReportContext","path":"/geoprocessing/docs/next/api/geoprocessing/variables/defaultReportContext"},{"id":"api/geoprocessing/variables/DEFAULTS","path":"/geoprocessing/docs/next/api/geoprocessing/variables/DEFAULTS"},{"id":"api/geoprocessing/variables/defaultStatValues","path":"/geoprocessing/docs/next/api/geoprocessing/variables/defaultStatValues"},{"id":"api/geoprocessing/variables/externalDatasourceSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/externalDatasourceSchema"},{"id":"api/geoprocessing/variables/externalRasterDatasourceSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/externalRasterDatasourceSchema"},{"id":"api/geoprocessing/variables/externalVectorDatasourceSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/externalVectorDatasourceSchema"},{"id":"api/geoprocessing/variables/EXTRA_RASTER_STATS","path":"/geoprocessing/docs/next/api/geoprocessing/variables/EXTRA_RASTER_STATS"},{"id":"api/geoprocessing/variables/extraParamsSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/extraParamsSchema"},{"id":"api/geoprocessing/variables/fcSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/fcSchema"},{"id":"api/geoprocessing/variables/featureSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/featureSchema"},{"id":"api/geoprocessing/variables/featuresSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/featuresSchema"},{"id":"api/geoprocessing/variables/fixtures","path":"/geoprocessing/docs/next/api/geoprocessing/variables/fixtures"},{"id":"api/geoprocessing/variables/fullColor","path":"/geoprocessing/docs/next/api/geoprocessing/variables/fullColor"},{"id":"api/geoprocessing/variables/FULLY_PROTECTED_LEVEL","path":"/geoprocessing/docs/next/api/geoprocessing/variables/FULLY_PROTECTED_LEVEL"},{"id":"api/geoprocessing/variables/GEOBLAZE_RASTER_STATS","path":"/geoprocessing/docs/next/api/geoprocessing/variables/GEOBLAZE_RASTER_STATS"},{"id":"api/geoprocessing/variables/geoblazeDefaultStatValues","path":"/geoprocessing/docs/next/api/geoprocessing/variables/geoblazeDefaultStatValues"},{"id":"api/geoprocessing/variables/geographiesSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/geographiesSchema"},{"id":"api/geoprocessing/variables/geographySchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/geographySchema"},{"id":"api/geoprocessing/variables/geoprocessingConfigSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/geoprocessingConfigSchema"},{"id":"api/geoprocessing/variables/geoTypesSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/geoTypesSchema"},{"id":"api/geoprocessing/variables/globalDatasources","path":"/geoprocessing/docs/next/api/geoprocessing/variables/globalDatasources"},{"id":"api/geoprocessing/variables/globalDatasourcesById","path":"/geoprocessing/docs/next/api/geoprocessing/variables/globalDatasourcesById"},{"id":"api/geoprocessing/variables/highColor","path":"/geoprocessing/docs/next/api/geoprocessing/variables/highColor"},{"id":"api/geoprocessing/variables/HIGHLY_PROTECTED_LEVEL","path":"/geoprocessing/docs/next/api/geoprocessing/variables/HIGHLY_PROTECTED_LEVEL"},{"id":"api/geoprocessing/variables/importRasterDatasourceOptionsSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/importRasterDatasourceOptionsSchema"},{"id":"api/geoprocessing/variables/importVectorDatasourceOptionsSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/importVectorDatasourceOptionsSchema"},{"id":"api/geoprocessing/variables/internalDatasourceSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/internalDatasourceSchema"},{"id":"api/geoprocessing/variables/internalImportSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/internalImportSchema"},{"id":"api/geoprocessing/variables/internalRasterDatasourceSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/internalRasterDatasourceSchema"},{"id":"api/geoprocessing/variables/internalVectorDatasourceSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/internalVectorDatasourceSchema"},{"id":"api/geoprocessing/variables/internalVectorImportSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/internalVectorImportSchema"},{"id":"api/geoprocessing/variables/iucnActivities","path":"/geoprocessing/docs/next/api/geoprocessing/variables/iucnActivities"},{"id":"api/geoprocessing/variables/iucnActivityCategories","path":"/geoprocessing/docs/next/api/geoprocessing/variables/iucnActivityCategories"},{"id":"api/geoprocessing/variables/iucnCategoriesList","path":"/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoriesList"},{"id":"api/geoprocessing/variables/iucnCategoriesMap","path":"/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoriesMap"},{"id":"api/geoprocessing/variables/iucnCategoryNames","path":"/geoprocessing/docs/next/api/geoprocessing/variables/iucnCategoryNames"},{"id":"api/geoprocessing/variables/iucnLevels","path":"/geoprocessing/docs/next/api/geoprocessing/variables/iucnLevels"},{"id":"api/geoprocessing/variables/jsonSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/jsonSchema"},{"id":"api/geoprocessing/variables/loadedPackageSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/loadedPackageSchema"},{"id":"api/geoprocessing/variables/lowColor","path":"/geoprocessing/docs/next/api/geoprocessing/variables/lowColor"},{"id":"api/geoprocessing/variables/measurementScalesSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/measurementScalesSchema"},{"id":"api/geoprocessing/variables/measurementTypesSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/measurementTypesSchema"},{"id":"api/geoprocessing/variables/MetricDimensions","path":"/geoprocessing/docs/next/api/geoprocessing/variables/MetricDimensions"},{"id":"api/geoprocessing/variables/metricGroupSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/metricGroupSchema"},{"id":"api/geoprocessing/variables/metricGroupsSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/metricGroupsSchema"},{"id":"api/geoprocessing/variables/MetricProperties","path":"/geoprocessing/docs/next/api/geoprocessing/variables/MetricProperties"},{"id":"api/geoprocessing/variables/metricSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/metricSchema"},{"id":"api/geoprocessing/variables/metricsSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/metricsSchema"},{"id":"api/geoprocessing/variables/MODERATELY_PROTECTED_LEVEL","path":"/geoprocessing/docs/next/api/geoprocessing/variables/MODERATELY_PROTECTED_LEVEL"},{"id":"api/geoprocessing/variables/multipolygonSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/multipolygonSchema"},{"id":"api/geoprocessing/variables/OBJECTIVE_GREEN","path":"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_GREEN"},{"id":"api/geoprocessing/variables/OBJECTIVE_MAYBE","path":"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_MAYBE"},{"id":"api/geoprocessing/variables/OBJECTIVE_NO","path":"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_NO"},{"id":"api/geoprocessing/variables/OBJECTIVE_RED","path":"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_RED"},{"id":"api/geoprocessing/variables/OBJECTIVE_YELLOW","path":"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_YELLOW"},{"id":"api/geoprocessing/variables/OBJECTIVE_YES","path":"/geoprocessing/docs/next/api/geoprocessing/variables/OBJECTIVE_YES"},{"id":"api/geoprocessing/variables/objectiveAnswerMapSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveAnswerMapSchema"},{"id":"api/geoprocessing/variables/objectiveAnswerSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveAnswerSchema"},{"id":"api/geoprocessing/variables/objectiveCountsAnswers","path":"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveCountsAnswers"},{"id":"api/geoprocessing/variables/objectiveCountsColorMap","path":"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveCountsColorMap"},{"id":"api/geoprocessing/variables/objectiveSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/objectiveSchema"},{"id":"api/geoprocessing/variables/objectivesSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/objectivesSchema"},{"id":"api/geoprocessing/variables/packageSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/packageSchema"},{"id":"api/geoprocessing/variables/PLANNING_AREA_TYPES","path":"/geoprocessing/docs/next/api/geoprocessing/variables/PLANNING_AREA_TYPES"},{"id":"api/geoprocessing/variables/planningAreaTypesSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/planningAreaTypesSchema"},{"id":"api/geoprocessing/variables/polygonSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/polygonSchema"},{"id":"api/geoprocessing/variables/POORLY_PROTECTED_LEVEL","path":"/geoprocessing/docs/next/api/geoprocessing/variables/POORLY_PROTECTED_LEVEL"},{"id":"api/geoprocessing/variables/projectSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/projectSchema"},{"id":"api/geoprocessing/variables/rasterDatasourceSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/rasterDatasourceSchema"},{"id":"api/geoprocessing/variables/rbcsAnchoringActivities","path":"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsAnchoringActivities"},{"id":"api/geoprocessing/variables/rbcsAquacultureActivities","path":"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsAquacultureActivities"},{"id":"api/geoprocessing/variables/rbcsConstants","path":"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsConstants"},{"id":"api/geoprocessing/variables/rbcsGearTypes","path":"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsGearTypes"},{"id":"api/geoprocessing/variables/rbcsMpaProtectionLevels","path":"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsMpaProtectionLevels"},{"id":"api/geoprocessing/variables/rbcsScores","path":"/geoprocessing/docs/next/api/geoprocessing/variables/rbcsScores"},{"id":"api/geoprocessing/variables/ReportContext","path":"/geoprocessing/docs/next/api/geoprocessing/variables/ReportContext"},{"id":"api/geoprocessing/variables/seaSketchReportingLanguageChangeEvent","path":"/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingLanguageChangeEvent"},{"id":"api/geoprocessing/variables/seaSketchReportingMessageEventType","path":"/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingMessageEventType"},{"id":"api/geoprocessing/variables/seaSketchReportingVisibleLayersChangeEvent","path":"/geoprocessing/docs/next/api/geoprocessing/variables/seaSketchReportingVisibleLayersChangeEvent"},{"id":"api/geoprocessing/variables/statsSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/statsSchema"},{"id":"api/geoprocessing/variables/SUPPORTED_RASTER_STATS","path":"/geoprocessing/docs/next/api/geoprocessing/variables/SUPPORTED_RASTER_STATS"},{"id":"api/geoprocessing/variables/supportedFormatsSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/supportedFormatsSchema"},{"id":"api/geoprocessing/variables/UNPROTECTED_LEVEL","path":"/geoprocessing/docs/next/api/geoprocessing/variables/UNPROTECTED_LEVEL"},{"id":"api/geoprocessing/variables/vectorDatasourceSchema","path":"/geoprocessing/docs/next/api/geoprocessing/variables/vectorDatasourceSchema"},{"id":"api/geoprocessing/variables/version","path":"/geoprocessing/docs/next/api/geoprocessing/variables/version"},{"id":"api/index","path":"/geoprocessing/docs/next/api/","sidebar":"tutorialSidebar"},{"id":"architecture/Architecture","path":"/geoprocessing/docs/next/architecture","sidebar":"tutorialSidebar"},{"id":"CLI","path":"/geoprocessing/docs/next/cli","sidebar":"tutorialSidebar"},{"id":"codespaces/codespaces","path":"/geoprocessing/docs/next/codespaces/","sidebar":"tutorialSidebar"},{"id":"concepts/AdvancedConcepts","path":"/geoprocessing/docs/next/concepts/AdvancedConcepts","sidebar":"tutorialSidebar"},{"id":"concepts/Concepts","path":"/geoprocessing/docs/next/concepts","sidebar":"tutorialSidebar"},{"id":"Contributing","path":"/geoprocessing/docs/next/contributing","sidebar":"tutorialSidebar"},{"id":"dataimport","path":"/geoprocessing/docs/next/dataimport","sidebar":"tutorialSidebar"},{"id":"devcontainer/devcontainer","path":"/geoprocessing/docs/next/devcontainer/","sidebar":"tutorialSidebar"},{"id":"EdgesAndLimits","path":"/geoprocessing/docs/next/EdgesAndLimits","sidebar":"tutorialSidebar"},{"id":"Extending","path":"/geoprocessing/docs/next/extending","sidebar":"tutorialSidebar"},{"id":"geoprocessing","path":"/geoprocessing/docs/next/geoprocessing","sidebar":"tutorialSidebar"},{"id":"gip/GIP-1-i18n","path":"/geoprocessing/docs/next/gip/GIP-1-i18n","sidebar":"tutorialSidebar"},{"id":"gip/README","path":"/geoprocessing/docs/next/gip/"},{"id":"intro","path":"/geoprocessing/docs/next/intro"},{"id":"introduction","path":"/geoprocessing/docs/next/","sidebar":"tutorialSidebar"},{"id":"linkData","path":"/geoprocessing/docs/next/linkData","sidebar":"tutorialSidebar"},{"id":"multiBoundary/multiBoundary","path":"/geoprocessing/docs/next/multiBoundary/","sidebar":"tutorialSidebar"},{"id":"precalc","path":"/geoprocessing/docs/next/precalc","sidebar":"tutorialSidebar"},{"id":"preprocessing","path":"/geoprocessing/docs/next/preprocessing","sidebar":"tutorialSidebar"},{"id":"projectclient","path":"/geoprocessing/docs/next/projectclient","sidebar":"tutorialSidebar"},{"id":"reportclient","path":"/geoprocessing/docs/next/reportclient","sidebar":"tutorialSidebar"},{"id":"skills","path":"/geoprocessing/docs/next/skills","sidebar":"tutorialSidebar"},{"id":"structure","path":"/geoprocessing/docs/next/structure","sidebar":"tutorialSidebar"},{"id":"Testing","path":"/geoprocessing/docs/next/testing","sidebar":"tutorialSidebar"},{"id":"thirdpartydata/thirdpartydata","path":"/geoprocessing/docs/next/thirdpartydata/","sidebar":"tutorialSidebar"},{"id":"tutorial-basics/congratulations","path":"/geoprocessing/docs/next/tutorial-basics/congratulations"},{"id":"tutorial-basics/create-a-blog-post","path":"/geoprocessing/docs/next/tutorial-basics/create-a-blog-post"},{"id":"tutorial-basics/create-a-document","path":"/geoprocessing/docs/next/tutorial-basics/create-a-document"},{"id":"tutorial-basics/create-a-page","path":"/geoprocessing/docs/next/tutorial-basics/create-a-page"},{"id":"tutorial-basics/deploy-your-site","path":"/geoprocessing/docs/next/tutorial-basics/deploy-your-site"},{"id":"tutorial-basics/markdown-features","path":"/geoprocessing/docs/next/tutorial-basics/markdown-features"},{"id":"tutorial-extras/manage-docs-versions","path":"/geoprocessing/docs/next/tutorial-extras/manage-docs-versions"},{"id":"tutorial-extras/translate-your-site","path":"/geoprocessing/docs/next/tutorial-extras/translate-your-site"},{"id":"tutorials/createGeoprocessing","path":"/geoprocessing/docs/next/tutorials/createGeoprocessing","sidebar":"tutorialSidebar"},{"id":"tutorials/createReport","path":"/geoprocessing/docs/next/tutorials/createReport","sidebar":"tutorialSidebar"},{"id":"tutorials/deploy","path":"/geoprocessing/docs/next/tutorials/deploy","sidebar":"tutorialSidebar"},{"id":"tutorials/existingproject","path":"/geoprocessing/docs/next/tutorials/existingproject","sidebar":"tutorialSidebar"},{"id":"tutorials/extraParams","path":"/geoprocessing/docs/next/tutorials/extraParams","sidebar":"tutorialSidebar"},{"id":"tutorials/newproject","path":"/geoprocessing/docs/next/tutorials/newproject","sidebar":"tutorialSidebar"},{"id":"tutorials/sampleproject","path":"/geoprocessing/docs/next/tutorials/sampleproject","sidebar":"tutorialSidebar"},{"id":"tutorials/sketchAttributes","path":"/geoprocessing/docs/next/tutorials/sketchAttributes","sidebar":"tutorialSidebar"},{"id":"tutorials/storybook","path":"/geoprocessing/docs/next/tutorials/storybook","sidebar":"tutorialSidebar"},{"id":"tutorials/subdividing","path":"/geoprocessing/docs/next/tutorials/subdividing","sidebar":"tutorialSidebar"},{"id":"tutorials/Tutorials","path":"/geoprocessing/docs/next/tutorials/","sidebar":"tutorialSidebar"},{"id":"tutorials/updateDatasource","path":"/geoprocessing/docs/next/tutorials/updateDatasource","sidebar":"tutorialSidebar"},{"id":"upgrade","path":"/geoprocessing/docs/next/upgrade","sidebar":"tutorialSidebar"},{"id":"workers","path":"/geoprocessing/docs/next/workers","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/geoprocessing/docs/next/","label":"introduction"}}}},{"name":"6.1.0","label":"6.1.0","isLast":true,"path":"/geoprocessing/docs","mainDocId":"introduction","docs":[{"id":"antimeridian/Antimeridian","path":"/geoprocessing/docs/antimeridian","sidebar":"tutorialSidebar"},{"id":"architecture/Architecture","path":"/geoprocessing/docs/architecture","sidebar":"tutorialSidebar"},{"id":"CLI","path":"/geoprocessing/docs/cli","sidebar":"tutorialSidebar"},{"id":"concepts/Concepts","path":"/geoprocessing/docs/concepts","sidebar":"tutorialSidebar"},{"id":"Contributing","path":"/geoprocessing/docs/contributing","sidebar":"tutorialSidebar"},{"id":"EdgesAndLimits","path":"/geoprocessing/docs/limits","sidebar":"tutorialSidebar"},{"id":"Extending","path":"/geoprocessing/docs/extending","sidebar":"tutorialSidebar"},{"id":"gip/GIP-1-i18n","path":"/geoprocessing/docs/gip/GIP-1-i18n","sidebar":"tutorialSidebar"},{"id":"gip/README","path":"/geoprocessing/docs/gip/"},{"id":"intro","path":"/geoprocessing/docs/intro"},{"id":"introduction","path":"/geoprocessing/docs/","sidebar":"tutorialSidebar"},{"id":"Migrating","path":"/geoprocessing/docs/Migrating","sidebar":"tutorialSidebar"},{"id":"Testing","path":"/geoprocessing/docs/testing","sidebar":"tutorialSidebar"},{"id":"Tipsandtricks","path":"/geoprocessing/docs/tipsandtricks","sidebar":"tutorialSidebar"},{"id":"tutorial-basics/congratulations","path":"/geoprocessing/docs/tutorial-basics/congratulations"},{"id":"tutorial-basics/create-a-blog-post","path":"/geoprocessing/docs/tutorial-basics/create-a-blog-post"},{"id":"tutorial-basics/create-a-document","path":"/geoprocessing/docs/tutorial-basics/create-a-document"},{"id":"tutorial-basics/create-a-page","path":"/geoprocessing/docs/tutorial-basics/create-a-page"},{"id":"tutorial-basics/deploy-your-site","path":"/geoprocessing/docs/tutorial-basics/deploy-your-site"},{"id":"tutorial-basics/markdown-features","path":"/geoprocessing/docs/tutorial-basics/markdown-features"},{"id":"tutorial-extras/manage-docs-versions","path":"/geoprocessing/docs/tutorial-extras/manage-docs-versions"},{"id":"tutorial-extras/translate-your-site","path":"/geoprocessing/docs/tutorial-extras/translate-your-site"},{"id":"tutorials/Tutorials","path":"/geoprocessing/docs/tutorials","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/geoprocessing/docs/","label":"introduction"}}}}],"breadcrumbs":true}}}'),c=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var a=t(22654);const r=JSON.parse('{"docusaurusVersion":"3.5.2","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.5.2"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.5.2"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.5.2"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.5.2"},"docusaurus-plugin-typedoc":{"type":"package","name":"docusaurus-plugin-typedoc","version":"1.0.5"}}}');var p=t(74848);const l={siteConfig:s.default,siteMetadata:r,globalData:i,i18n:c,codeTranslations:a},g=o.createContext(l);function u(e){let{children:n}=e;return(0,p.jsx)(g.Provider,{value:l,children:n})}},67489:(e,n,t)=>{"use strict";t.d(n,{A:()=>m});var o=t(96540),s=t(38193),i=t(5260),c=t(70440),a=t(10781),r=t(53102),p=t(74848);function l(e){let{error:n,tryAgain:t}=e;return(0,p.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,p.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,p.jsx)("button",{type:"button",onClick:t,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,p.jsx)(g,{error:n})]})}function g(e){let{error:n}=e;const t=(0,c.rA)(n).map((e=>e.message)).join("\n\nCause:\n");return(0,p.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:t})}function u(e){let{children:n}=e;return(0,p.jsx)(r.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:n})}function d(e){let{error:n,tryAgain:t}=e;return(0,p.jsx)(u,{children:(0,p.jsxs)(m,{fallback:()=>(0,p.jsx)(l,{error:n,tryAgain:t}),children:[(0,p.jsx)(i.A,{children:(0,p.jsx)("title",{children:"Page Error"})}),(0,p.jsx)(a.A,{children:(0,p.jsx)(l,{error:n,tryAgain:t})})]})})}const f=e=>(0,p.jsx)(d,{...e});class m extends o.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){s.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:n}=this.state;if(n){const e={error:n,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??f)(e)}return e??null}}},38193:(e,n,t)=>{"use strict";t.d(n,{A:()=>s});const o="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,s={canUseDOM:o,canUseEventListeners:o&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:o&&"IntersectionObserver"in window,canUseViewport:o&&"screen"in window}},5260:(e,n,t)=>{"use strict";t.d(n,{A:()=>i});t(96540);var o=t(80545),s=t(74848);function i(e){return(0,s.jsx)(o.mg,{...e})}},28774:(e,n,t)=>{"use strict";t.d(n,{A:()=>d});var o=t(96540),s=t(54625),i=t(70440),c=t(44586),a=t(16654),r=t(38193),p=t(63427),l=t(86025),g=t(74848);function u(e,n){let{isNavLink:t,to:u,href:d,activeClassName:f,isActive:m,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...x}=e;const{siteConfig:y}=(0,c.A)(),{trailingSlash:v,baseUrl:S}=y,_=y.future.experimental_router,{withBaseUrl:k}=(0,l.hH)(),w=(0,p.A)(),C=(0,o.useRef)(null);(0,o.useImperativeHandle)(n,(()=>C.current));const P=u||d;const T=(0,a.A)(P),E=P?.replace("pathname://","");let R=void 0!==E?(A=E,b&&(e=>e.startsWith("/"))(A)?k(A):A):void 0;var A;"hash"===_&&R?.startsWith("./")&&(R=R?.slice(1)),R&&T&&(R=(0,i.Ks)(R,{trailingSlash:v,baseUrl:S}));const D=(0,o.useRef)(!1),O=t?s.k2:s.N_,M=r.A.canUseIntersectionObserver,L=(0,o.useRef)(),I=()=>{D.current||null==R||(window.docusaurus.preload(R),D.current=!0)};(0,o.useEffect)((()=>(!M&&T&&r.A.canUseDOM&&null!=R&&window.docusaurus.prefetch(R),()=>{M&&L.current&&L.current.disconnect()})),[L,R,M,T]);const j=R?.startsWith("#")??!1,F=!x.target||"_self"===x.target,N=!R||!T||!F||j&&"hash"!==_;h||!j&&N||w.collectLink(R),x.id&&w.collectAnchor(x.id);const B={};return N?(0,g.jsx)("a",{ref:C,href:R,...P&&!T&&{target:"_blank",rel:"noopener noreferrer"},...x,...B}):(0,g.jsx)(O,{...x,onMouseEnter:I,onTouchStart:I,innerRef:e=>{C.current=e,M&&e&&T&&(L.current=new window.IntersectionObserver((n=>{n.forEach((n=>{e===n.target&&(n.isIntersecting||n.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=R&&window.docusaurus.prefetch(R))}))})),L.current.observe(e))},to:R,...t&&{isActive:m,activeClassName:f},...B})}const d=o.forwardRef(u)},20418:(e,n,t)=>{"use strict";t.d(n,{A:()=>o});const o=()=>null},21312:(e,n,t)=>{"use strict";t.d(n,{A:()=>p,T:()=>r});var o=t(96540),s=t(74848);function i(e,n){const t=e.split(/(\{\w+\})/).map(((e,t)=>{if(t%2==1){const t=n?.[e.slice(1,-1)];if(void 0!==t)return t}return e}));return t.some((e=>(0,o.isValidElement)(e)))?t.map(((e,n)=>(0,o.isValidElement)(e)?o.cloneElement(e,{key:n}):e)).filter((e=>""!==e)):t.join("")}var c=t(22654);function a(e){let{id:n,message:t}=e;if(void 0===n&&void 0===t)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return c[n??t]??t??n}function r(e,n){let{message:t,id:o}=e;return i(a({message:t,id:o}),n)}function p(e){let{children:n,id:t,values:o}=e;if(n&&"string"!=typeof n)throw console.warn("Illegal children",n),new Error("The Docusaurus component only accept simple string values");const c=a({message:n,id:t});return(0,s.jsx)(s.Fragment,{children:i(c,o)})}},17065:(e,n,t)=>{"use strict";t.d(n,{W:()=>o});const o="default"},16654:(e,n,t)=>{"use strict";function o(e){return/^(?:\w*:|\/\/)/.test(e)}function s(e){return void 0!==e&&!o(e)}t.d(n,{A:()=>s,z:()=>o})},86025:(e,n,t)=>{"use strict";t.d(n,{Ay:()=>a,hH:()=>c});var o=t(96540),s=t(44586),i=t(16654);function c(){const{siteConfig:e}=(0,s.A)(),{baseUrl:n,url:t}=e,c=e.future.experimental_router,a=(0,o.useCallback)(((e,o)=>function(e){let{siteUrl:n,baseUrl:t,url:o,options:{forcePrependBaseUrl:s=!1,absolute:c=!1}={},router:a}=e;if(!o||o.startsWith("#")||(0,i.z)(o))return o;if("hash"===a)return o.startsWith("/")?`.${o}`:`./${o}`;if(s)return t+o.replace(/^\//,"");if(o===t.replace(/\/$/,""))return t;const r=o.startsWith(t)?o:t+o.replace(/^\//,"");return c?n+r:r}({siteUrl:t,baseUrl:n,url:e,options:o,router:c})),[t,n,c]);return{withBaseUrl:a}}function a(e,n){void 0===n&&(n={});const{withBaseUrl:t}=c();return t(e,n)}},63427:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var o=t(96540);t(74848);const s=o.createContext({collectAnchor:()=>{},collectLink:()=>{}}),i=()=>(0,o.useContext)(s);function c(){return i()}},44586:(e,n,t)=>{"use strict";t.d(n,{A:()=>i});var o=t(96540),s=t(26988);function i(){return(0,o.useContext)(s.o)}},92303:(e,n,t)=>{"use strict";t.d(n,{A:()=>i});var o=t(96540),s=t(6125);function i(){return(0,o.useContext)(s.o)}},205:(e,n,t)=>{"use strict";t.d(n,{A:()=>s});var o=t(96540);const s=t(38193).A.canUseDOM?o.useLayoutEffect:o.useEffect},86921:(e,n,t)=>{"use strict";t.d(n,{A:()=>s});const o=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function s(e){const n={};return function e(t,s){Object.entries(t).forEach((t=>{let[i,c]=t;const a=s?`${s}.${i}`:i;o(c)?e(c,a):n[a]=c}))}(e),n}},53102:(e,n,t)=>{"use strict";t.d(n,{W:()=>c,o:()=>i});var o=t(96540),s=t(74848);const i=o.createContext(null);function c(e){let{children:n,value:t}=e;const c=o.useContext(i),a=(0,o.useMemo)((()=>function(e){let{parent:n,value:t}=e;if(!n){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 o={...n.data,...t?.data};return{plugin:n.plugin,data:o}}({parent:c,value:t})),[c,t]);return(0,s.jsx)(i.Provider,{value:a,children:n})}},53886:(e,n,t)=>{"use strict";t.d(n,{VQ:()=>h,g1:()=>x});var o=t(96540),s=t(44070),i=t(17065),c=t(6342),a=t(70679),r=t(89532),p=t(74848);const l=e=>`docs-preferred-version-${e}`,g={save:(e,n,t)=>{(0,a.Wf)(l(e),{persistence:n}).set(t)},read:(e,n)=>(0,a.Wf)(l(e),{persistence:n}).get(),clear:(e,n)=>{(0,a.Wf)(l(e),{persistence:n}).del()}},u=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const d=o.createContext(null);function f(){const e=(0,s.Gy)(),n=(0,c.p)().docs.versionPersistence,t=(0,o.useMemo)((()=>Object.keys(e)),[e]),[i,a]=(0,o.useState)((()=>u(t)));(0,o.useEffect)((()=>{a(function(e){let{pluginIds:n,versionPersistence:t,allDocsData:o}=e;function s(e){const n=g.read(e,t);return o[e].versions.some((e=>e.name===n))?{preferredVersionName:n}:(g.clear(e,t),{preferredVersionName:null})}return Object.fromEntries(n.map((e=>[e,s(e)])))}({allDocsData:e,versionPersistence:n,pluginIds:t}))}),[e,n,t]);return[i,(0,o.useMemo)((()=>({savePreferredVersion:function(e,t){g.save(e,n,t),a((n=>({...n,[e]:{preferredVersionName:t}})))}})),[n])]}function m(e){let{children:n}=e;const t=f();return(0,p.jsx)(d.Provider,{value:t,children:n})}function h(e){let{children:n}=e;return(0,p.jsx)(m,{children:n})}function b(){const e=(0,o.useContext)(d);if(!e)throw new r.dV("DocsPreferredVersionContextProvider");return e}function x(e){void 0===e&&(e=i.W);const n=(0,s.ht)(e),[t,c]=b(),{preferredVersionName:a}=t[e];return{preferredVersion:n.versions.find((e=>e.name===a))??null,savePreferredVersionName:(0,o.useCallback)((n=>{c.savePreferredVersion(e,n)}),[c,e])}}},60609:(e,n,t)=>{"use strict";t.d(n,{V:()=>r,t:()=>p});var o=t(96540),s=t(89532),i=t(74848);const c=Symbol("EmptyContext"),a=o.createContext(c);function r(e){let{children:n,name:t,items:s}=e;const c=(0,o.useMemo)((()=>t&&s?{name:t,items:s}:null),[t,s]);return(0,i.jsx)(a.Provider,{value:c,children:n})}function p(){const e=(0,o.useContext)(a);if(e===c)throw new s.dV("DocsSidebarProvider");return e}},44718:(e,n,t)=>{"use strict";t.d(n,{Nr:()=>u,w8:()=>m,B5:()=>k,Vd:()=>v,QB:()=>_,fW:()=>S,OF:()=>y,Y:()=>b});var o=t(96540),s=t(56347),i=t(22831),c=t(44070),a=t(99169);function r(e){return Array.from(new Set(e))}var p=t(53886),l=t(23025),g=t(60609);function u(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const n of e.items){const e=u(n);if(e)return e}}(e):void 0:e.href}const d=(e,n)=>void 0!==e&&(0,a.ys)(e,n),f=(e,n)=>e.some((e=>m(e,n)));function m(e,n){return"link"===e.type?d(e.href,n):"category"===e.type&&(d(e.href,n)||f(e.items,n))}function h(e,n){switch(e.type){case"category":return m(e,n)||e.items.some((e=>h(e,n)));case"link":return!e.unlisted||m(e,n);default:return!0}}function b(e,n){return(0,o.useMemo)((()=>e.filter((e=>h(e,n)))),[e,n])}function x(e){let{sidebarItems:n,pathname:t,onlyCategories:o=!1}=e;const s=[];return function e(n){for(const i of n)if("category"===i.type&&((0,a.ys)(i.href,t)||e(i.items))||"link"===i.type&&(0,a.ys)(i.href,t)){return o&&"category"!==i.type||s.unshift(i),!0}return!1}(n),s}function y(){const e=(0,g.t)(),{pathname:n}=(0,s.zy)(),t=(0,c.vT)()?.pluginData.breadcrumbs;return!1!==t&&e?x({sidebarItems:e.items,pathname:n}):null}function v(e){const{activeVersion:n}=(0,c.zK)(e),{preferredVersion:t}=(0,p.g1)(e),s=(0,c.r7)(e);return(0,o.useMemo)((()=>r([n,t,s].filter(Boolean))),[n,t,s])}function S(e,n){const t=v(n);return(0,o.useMemo)((()=>{const n=t.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),o=n.find((n=>n[0]===e));if(!o)throw new Error(`Can't find any sidebar with id "${e}" in version${t.length>1?"s":""} ${t.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${n.map((e=>e[0])).join("\n- ")}`);return o[1]}),[e,t])}function _(e,n){const t=v(n);return(0,o.useMemo)((()=>{const n=t.flatMap((e=>e.docs)),o=n.find((n=>n.id===e));if(!o){if(t.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${t.length>1?"s":""} "${t.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${r(n.map((e=>e.id))).join("\n- ")}`)}return o}),[e,t])}function k(e){let{route:n}=e;const t=(0,s.zy)(),o=(0,l.r)(),c=n.routes,a=c.find((e=>(0,s.B6)(t.pathname,e)));if(!a)return null;const r=a.sidebar,p=r?o.docsSidebars[r]:void 0;return{docElement:(0,i.v)(c),sidebarName:r,sidebarItems:p}}},23025:(e,n,t)=>{"use strict";t.d(n,{n:()=>a,r:()=>r});var o=t(96540),s=t(89532),i=t(74848);const c=o.createContext(null);function a(e){let{children:n,version:t}=e;return(0,i.jsx)(c.Provider,{value:t,children:n})}function r(){const e=(0,o.useContext)(c);if(null===e)throw new s.dV("DocsVersionProvider");return e}},44070:(e,n,t)=>{"use strict";t.d(n,{zK:()=>m,vT:()=>u,Gy:()=>l,HW:()=>h,ht:()=>g,r7:()=>f,jh:()=>d});var o=t(56347),s=t(44586),i=t(17065);function c(e,n){void 0===n&&(n={});const t=function(){const{globalData:e}=(0,s.A)();return e}()[e];if(!t&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return t}const a=e=>e.versions.find((e=>e.isLast));function r(e,n){const t=function(e,n){return[...e.versions].sort(((e,n)=>e.path===n.path?0:e.path.includes(n.path)?-1:n.path.includes(e.path)?1:0)).find((e=>!!(0,o.B6)(n,{path:e.path,exact:!1,strict:!1})))}(e,n),s=t?.docs.find((e=>!!(0,o.B6)(n,{path:e.path,exact:!0,strict:!1})));return{activeVersion:t,activeDoc:s,alternateDocVersions:s?function(n){const t={};return e.versions.forEach((e=>{e.docs.forEach((o=>{o.id===n&&(t[e.name]=o)}))})),t}(s.id):{}}}const p={},l=()=>c("docusaurus-plugin-content-docs")??p,g=e=>{try{return function(e,n,t){void 0===n&&(n=i.W),void 0===t&&(t={});const o=c(e),s=o?.[n];if(!s&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${n}".`);return s}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(n){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:n})}};function u(e){void 0===e&&(e={});const n=l(),{pathname:t}=(0,o.zy)();return function(e,n,t){void 0===t&&(t={});const s=Object.entries(e).sort(((e,n)=>n[1].path.localeCompare(e[1].path))).find((e=>{let[,t]=e;return!!(0,o.B6)(n,{path:t.path,exact:!1,strict:!1})})),i=s?{pluginId:s[0],pluginData:s[1]}:void 0;if(!i&&t.failfast)throw new Error(`Can't find active docs plugin for "${n}" 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 i}(n,t,e)}function d(e){return g(e).versions}function f(e){const n=g(e);return a(n)}function m(e){const n=g(e),{pathname:t}=(0,o.zy)();return r(n,t)}function h(e){const n=g(e),{pathname:t}=(0,o.zy)();return function(e,n){const t=a(e);return{latestDocSuggestion:r(e,n).alternateDocVersions[t.name],latestVersionSuggestion:t}}(n,t)}},76294:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>i});var o=t(5947),s=t.n(o);s().configure({showSpinner:!1});const i={onRouteUpdate(e){let{location:n,previousLocation:t}=e;if(t&&n.pathname!==t.pathname){const e=window.setTimeout((()=>{s().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){s().done()}}},26134:(e,n,t)=>{"use strict";var o=t(71765),s=t(4784);!function(e){const{themeConfig:{prism:n}}=s.default,{additionalLanguages:o}=n;globalThis.Prism=e,o.forEach((e=>{"php"===e&&t(19700),t(18692)(`./prism-${e}`)})),delete globalThis.Prism}(o.My)},51107:(e,n,t)=>{"use strict";t.d(n,{A:()=>l});t(96540);var o=t(34164),s=t(21312),i=t(6342),c=t(28774),a=t(63427);const r={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var p=t(74848);function l(e){let{as:n,id:t,...l}=e;const g=(0,a.A)(),{navbar:{hideOnScroll:u}}=(0,i.p)();if("h1"===n||!t)return(0,p.jsx)(n,{...l,id:void 0});g.collectAnchor(t);const d=(0,s.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof l.children?l.children:t});return(0,p.jsxs)(n,{...l,className:(0,o.A)("anchor",u?r.anchorWithHideOnScrollNavbar:r.anchorWithStickyNavbar,l.className),id:t,children:[l.children,(0,p.jsx)(c.A,{className:"hash-link",to:`#${t}`,"aria-label":d,title:d,children:"\u200b"})]})}},43186:(e,n,t)=>{"use strict";t.d(n,{A:()=>i});t(96540);const o={iconExternalLink:"iconExternalLink_nPIU"};var s=t(74848);function i(e){let{width:n=13.5,height:t=13.5}=e;return(0,s.jsx)("svg",{width:n,height:t,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink,children:(0,s.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"})})}},10781:(e,n,t)=>{"use strict";t.d(n,{A:()=>fn});var o=t(96540),s=t(34164),i=t(67489),c=t(1003),a=t(56347),r=t(21312),p=t(75062),l=t(74848);const g="__docusaurus_skipToContent_fallback";function u(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function d(){const e=(0,o.useRef)(null),{action:n}=(0,a.W6)(),t=(0,o.useCallback)((e=>{e.preventDefault();const n=document.querySelector("main:first-of-type")??document.getElementById(g);n&&u(n)}),[]);return(0,p.$)((t=>{let{location:o}=t;e.current&&!o.hash&&"PUSH"===n&&u(e.current)})),{containerRef:e,onClick:t}}const f=(0,r.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const n=e.children??f,{containerRef:t,onClick:o}=d();return(0,l.jsx)("div",{ref:t,role:"region","aria-label":f,children:(0,l.jsx)("a",{...e,href:`#${g}`,onClick:o,children:n})})}var h=t(17559),b=t(14090);const x={skipToContent:"skipToContent_fXgn"};function y(){return(0,l.jsx)(m,{className:x.skipToContent})}var v=t(6342),S=t(65041);function _(e){let{width:n=21,height:t=21,color:o="currentColor",strokeWidth:s=1.2,className:i,...c}=e;return(0,l.jsx)("svg",{viewBox:"0 0 15 15",width:n,height:t,...c,children:(0,l.jsx)("g",{stroke:o,strokeWidth:s,children:(0,l.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const k={closeButton:"closeButton_CVFx"};function w(e){return(0,l.jsx)("button",{type:"button","aria-label":(0,r.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,s.A)("clean-btn close",k.closeButton,e.className),children:(0,l.jsx)(_,{width:14,height:14,strokeWidth:3.1})})}const C={content:"content_knG7"};function P(e){const{announcementBar:n}=(0,v.p)(),{content:t}=n;return(0,l.jsx)("div",{...e,className:(0,s.A)(C.content,e.className),dangerouslySetInnerHTML:{__html:t}})}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function E(){const{announcementBar:e}=(0,v.p)(),{isActive:n,close:t}=(0,S.M)();if(!n)return null;const{backgroundColor:o,textColor:s,isCloseable:i}=e;return(0,l.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:o,color:s},role:"banner",children:[i&&(0,l.jsx)("div",{className:T.announcementBarPlaceholder}),(0,l.jsx)(P,{className:T.announcementBarContent}),i&&(0,l.jsx)(w,{onClick:t,className:T.announcementBarClose})]})}var R=t(89876),A=t(23104);var D=t(89532),O=t(75600);const M=o.createContext(null);function L(e){let{children:n}=e;const t=function(){const e=(0,R.M)(),n=(0,O.YL)(),[t,s]=(0,o.useState)(!1),i=null!==n.component,c=(0,D.ZC)(i);return(0,o.useEffect)((()=>{i&&!c&&s(!0)}),[i,c]),(0,o.useEffect)((()=>{i?e.shown||s(!0):s(!1)}),[e.shown,i]),(0,o.useMemo)((()=>[t,s]),[t])}();return(0,l.jsx)(M.Provider,{value:t,children:n})}function I(e){if(e.component){const n=e.component;return(0,l.jsx)(n,{...e.props})}}function j(){const e=(0,o.useContext)(M);if(!e)throw new D.dV("NavbarSecondaryMenuDisplayProvider");const[n,t]=e,s=(0,o.useCallback)((()=>t(!1)),[t]),i=(0,O.YL)();return(0,o.useMemo)((()=>({shown:n,hide:s,content:I(i)})),[s,i,n])}function F(e){let{header:n,primaryMenu:t,secondaryMenu:o}=e;const{shown:i}=j();return(0,l.jsxs)("div",{className:"navbar-sidebar",children:[n,(0,l.jsxs)("div",{className:(0,s.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i}),children:[(0,l.jsx)("div",{className:"navbar-sidebar__item menu",children:t}),(0,l.jsx)("div",{className:"navbar-sidebar__item menu",children:o})]})]})}var N=t(95293),B=t(92303);function G(e){return(0,l.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,l.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 z(e){return(0,l.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,l.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 V={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function U(e){let{className:n,buttonClassName:t,value:o,onChange:i}=e;const c=(0,B.A)(),a=(0,r.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,r.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,r.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,l.jsx)("div",{className:(0,s.A)(V.toggle,n),children:(0,l.jsxs)("button",{className:(0,s.A)("clean-btn",V.toggleButton,!c&&V.toggleButtonDisabled,t),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!c,title:a,"aria-label":a,"aria-live":"polite",children:[(0,l.jsx)(G,{className:(0,s.A)(V.toggleIcon,V.lightToggleIcon)}),(0,l.jsx)(z,{className:(0,s.A)(V.toggleIcon,V.darkToggleIcon)})]})})}const $=o.memo(U),H={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function q(e){let{className:n}=e;const t=(0,v.p)().navbar.style,o=(0,v.p)().colorMode.disableSwitch,{colorMode:s,setColorMode:i}=(0,N.G)();return o?null:(0,l.jsx)($,{className:n,buttonClassName:"dark"===t?H.darkNavbarColorModeToggle:void 0,value:s,onChange:i})}var W=t(23465);function Z(){return(0,l.jsx)(W.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function J(){const e=(0,R.M)();return(0,l.jsx)("button",{type:"button","aria-label":(0,r.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,l.jsx)(_,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,l.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,l.jsx)(Z,{}),(0,l.jsx)(q,{className:"margin-right--md"}),(0,l.jsx)(J,{})]})}var K=t(28774),Q=t(86025),X=t(16654);function ee(e,n){return void 0!==e&&void 0!==n&&new RegExp(e,"gi").test(n)}var ne=t(43186);function te(e){let{activeBasePath:n,activeBaseRegex:t,to:o,href:s,label:i,html:c,isDropdownLink:a,prependBaseUrlToHref:r,...p}=e;const g=(0,Q.Ay)(o),u=(0,Q.Ay)(n),d=(0,Q.Ay)(s,{forcePrependBaseUrl:!0}),f=i&&s&&!(0,X.A)(s),m=c?{dangerouslySetInnerHTML:{__html:c}}:{children:(0,l.jsxs)(l.Fragment,{children:[i,f&&(0,l.jsx)(ne.A,{...a&&{width:12,height:12}})]})};return s?(0,l.jsx)(K.A,{href:r?d:s,...p,...m}):(0,l.jsx)(K.A,{to:g,isNavLink:!0,...(n||t)&&{isActive:(e,n)=>t?ee(t,n.pathname):n.pathname.startsWith(u)},...p,...m})}function oe(e){let{className:n,isDropdownItem:t=!1,...o}=e;const i=(0,l.jsx)(te,{className:(0,s.A)(t?"dropdown__link":"navbar__item navbar__link",n),isDropdownLink:t,...o});return t?(0,l.jsx)("li",{children:i}):i}function se(e){let{className:n,isDropdownItem:t,...o}=e;return(0,l.jsx)("li",{className:"menu__list-item",children:(0,l.jsx)(te,{className:(0,s.A)("menu__link",n),...o})})}function ie(e){let{mobile:n=!1,position:t,...o}=e;const s=n?se:oe;return(0,l.jsx)(s,{...o,activeClassName:o.activeClassName??(n?"menu__link--active":"navbar__link--active")})}var ce=t(41422),ae=t(99169),re=t(44586);const pe="dropdownNavbarItemMobile_S0Fm";function le(e,n){return e.some((e=>function(e,n){return!!(0,ae.ys)(e.to,n)||!!ee(e.activeBaseRegex,n)||!(!e.activeBasePath||!n.startsWith(e.activeBasePath))}(e,n)))}function ge(e){let{items:n,position:t,className:i,onClick:c,...a}=e;const r=(0,o.useRef)(null),[p,g]=(0,o.useState)(!1);return(0,o.useEffect)((()=>{const e=e=>{r.current&&!r.current.contains(e.target)&&g(!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)}}),[r]),(0,l.jsxs)("div",{ref:r,className:(0,s.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===t,"dropdown--show":p}),children:[(0,l.jsx)(te,{"aria-haspopup":"true","aria-expanded":p,role:"button",href:a.to?void 0:"#",className:(0,s.A)("navbar__link",i),...a,onClick:a.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),g(!p))},children:a.children??a.label}),(0,l.jsx)("ul",{className:"dropdown__menu",children:n.map(((e,n)=>(0,o.createElement)(Ce,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:n})))})]})}function ue(e){let{items:n,className:t,position:i,onClick:c,...r}=e;const p=function(){const{siteConfig:{baseUrl:e}}=(0,re.A)(),{pathname:n}=(0,a.zy)();return n.replace(e,"/")}(),g=le(n,p),{collapsed:u,toggleCollapsed:d,setCollapsed:f}=(0,ce.u)({initialState:()=>!g});return(0,o.useEffect)((()=>{g&&f(!g)}),[p,g,f]),(0,l.jsxs)("li",{className:(0,s.A)("menu__list-item",{"menu__list-item--collapsed":u}),children:[(0,l.jsx)(te,{role:"button",className:(0,s.A)(pe,"menu__link menu__link--sublist menu__link--sublist-caret",t),...r,onClick:e=>{e.preventDefault(),d()},children:r.children??r.label}),(0,l.jsx)(ce.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:u,children:n.map(((e,n)=>(0,o.createElement)(Ce,{mobile:!0,isDropdownItem:!0,onClick:c,activeClassName:"menu__link--active",...e,key:n})))})]})}function de(e){let{mobile:n=!1,...t}=e;const o=n?ue:ge;return(0,l.jsx)(o,{...t})}var fe=t(32131);function me(e){let{width:n=20,height:t=20,...o}=e;return(0,l.jsx)("svg",{viewBox:"0 0 24 24",width:n,height:t,"aria-hidden":!0,...o,children:(0,l.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 be=t(20418);const xe={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ye(e){let{children:n,className:t}=e;return(0,l.jsx)("div",{className:(0,s.A)(t,xe.navbarSearchContainer),children:n})}var ve=t(44070),Se=t(44718);var _e=t(53886);function ke(e,n){return n.alternateDocVersions[e.name]??function(e){return e.docs.find((n=>n.id===e.mainDocId))}(e)}const we={default:ie,localeDropdown:function(e){let{mobile:n,dropdownItemsBefore:t,dropdownItemsAfter:o,queryString:s="",...i}=e;const{i18n:{currentLocale:c,locales:p,localeConfigs:g}}=(0,re.A)(),u=(0,fe.o)(),{search:d,hash:f}=(0,a.zy)(),m=[...t,...p.map((e=>{const t=`${`pathname://${u.createUrl({locale:e,fullyQualified:!1})}`}${d}${f}${s}`;return{label:g[e].label,lang:g[e].htmlLang,to:t,target:"_self",autoAddBaseUrl:!1,className:e===c?n?"menu__link--active":"dropdown__link--active":""}})),...o],h=n?(0,r.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):g[c].label;return(0,l.jsx)(de,{...i,mobile:n,label:(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(me,{className:he}),h]}),items:m})},search:function(e){let{mobile:n,className:t}=e;return n?null:(0,l.jsx)(ye,{className:t,children:(0,l.jsx)(be.A,{})})},dropdown:de,html:function(e){let{value:n,className:t,mobile:o=!1,isDropdownItem:i=!1}=e;const c=i?"li":"div";return(0,l.jsx)(c,{className:(0,s.A)({navbar__item:!o&&!i,"menu__list-item":o},t),dangerouslySetInnerHTML:{__html:n}})},doc:function(e){let{docId:n,label:t,docsPluginId:o,...s}=e;const{activeDoc:i}=(0,ve.zK)(o),c=(0,Se.QB)(n,o),a=i?.path===c?.path;return null===c||c.unlisted&&!a?null:(0,l.jsx)(ie,{exact:!0,...s,isActive:()=>a||!!i?.sidebar&&i.sidebar===c.sidebar,label:t??c.id,to:c.path})},docSidebar:function(e){let{sidebarId:n,label:t,docsPluginId:o,...s}=e;const{activeDoc:i}=(0,ve.zK)(o),c=(0,Se.fW)(n,o).link;if(!c)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${n}" doesn't have anything to be linked to.`);return(0,l.jsx)(ie,{exact:!0,...s,isActive:()=>i?.sidebar===n,label:t??c.label,to:c.path})},docsVersion:function(e){let{label:n,to:t,docsPluginId:o,...s}=e;const i=(0,Se.Vd)(o)[0],c=n??i.label,a=t??(e=>e.docs.find((n=>n.id===e.mainDocId)))(i).path;return(0,l.jsx)(ie,{...s,label:c,to:a})},docsVersionDropdown:function(e){let{mobile:n,docsPluginId:t,dropdownActiveClassDisabled:o,dropdownItemsBefore:s,dropdownItemsAfter:i,...c}=e;const{search:p,hash:g}=(0,a.zy)(),u=(0,ve.zK)(t),d=(0,ve.jh)(t),{savePreferredVersionName:f}=(0,_e.g1)(t),m=[...s,...d.map((function(e){const n=ke(e,u);return{label:e.label,to:`${n.path}${p}${g}`,isActive:()=>e===u.activeVersion,onClick:()=>f(e.name)}})),...i],h=(0,Se.Vd)(t)[0],b=n&&m.length>1?(0,r.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,x=n&&m.length>1?void 0:ke(h,u).path;return m.length<=1?(0,l.jsx)(ie,{...c,mobile:n,label:b,to:x,isActive:o?()=>!1:void 0}):(0,l.jsx)(de,{...c,mobile:n,label:b,to:x,items:m,isActive:o?()=>!1:void 0})}};function Ce(e){let{type:n,...t}=e;const o=function(e,n){return e&&"default"!==e?e:"items"in n?"dropdown":"default"}(n,t),s=we[o];if(!s)throw new Error(`No NavbarItem component found for type "${n}".`);return(0,l.jsx)(s,{...t})}function Pe(){const e=(0,R.M)(),n=(0,v.p)().navbar.items;return(0,l.jsx)("ul",{className:"menu__list",children:n.map(((n,t)=>(0,o.createElement)(Ce,{mobile:!0,...n,onClick:()=>e.toggle(),key:t})))})}function Te(e){return(0,l.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,l.jsx)(r.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ee(){const e=0===(0,v.p)().navbar.items.length,n=j();return(0,l.jsxs)(l.Fragment,{children:[!e&&(0,l.jsx)(Te,{onClick:()=>n.hide()}),n.content]})}function Re(){const e=(0,R.M)();var n;return void 0===(n=e.shown)&&(n=!0),(0,o.useEffect)((()=>(document.body.style.overflow=n?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[n]),e.shouldRender?(0,l.jsx)(F,{header:(0,l.jsx)(Y,{}),primaryMenu:(0,l.jsx)(Pe,{}),secondaryMenu:(0,l.jsx)(Ee,{})}):null}const Ae={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function De(e){return(0,l.jsx)("div",{role:"presentation",...e,className:(0,s.A)("navbar-sidebar__backdrop",e.className)})}function Oe(e){let{children:n}=e;const{navbar:{hideOnScroll:t,style:i}}=(0,v.p)(),c=(0,R.M)(),{navbarRef:a,isNavbarVisible:g}=function(e){const[n,t]=(0,o.useState)(e),s=(0,o.useRef)(!1),i=(0,o.useRef)(0),c=(0,o.useCallback)((e=>{null!==e&&(i.current=e.getBoundingClientRect().height)}),[]);return(0,A.Mq)(((n,o)=>{let{scrollY:c}=n;if(!e)return;if(c=a?t(!1):c+p{if(!e)return;const o=n.location.hash;if(o?document.getElementById(o.substring(1)):void 0)return s.current=!0,void t(!1);t(!0)})),{navbarRef:c,isNavbarVisible:n}}(t);return(0,l.jsxs)("nav",{ref:a,"aria-label":(0,r.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,s.A)("navbar","navbar--fixed-top",t&&[Ae.navbarHideable,!g&&Ae.navbarHidden],{"navbar--dark":"dark"===i,"navbar--primary":"primary"===i,"navbar-sidebar--show":c.shown}),children:[n,(0,l.jsx)(De,{onClick:c.toggle}),(0,l.jsx)(Re,{})]})}var Me=t(70440);const Le={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Ie(e){return(0,l.jsx)("button",{type:"button",...e,children:(0,l.jsx)(r.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function je(e){let{error:n}=e;const t=(0,Me.rA)(n).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{className:Le.errorBoundaryError,children:t})}class Fe extends o.Component{componentDidCatch(e,n){throw this.props.onError(e,n)}render(){return this.props.children}}const Ne="right";function Be(e){let{width:n=30,height:t=30,className:o,...s}=e;return(0,l.jsx)("svg",{className:o,width:n,height:t,viewBox:"0 0 30 30","aria-hidden":"true",...s,children:(0,l.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Ge(){const{toggle:e,shown:n}=(0,R.M)();return(0,l.jsx)("button",{onClick:e,"aria-label":(0,r.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":n,className:"navbar__toggle clean-btn",type:"button",children:(0,l.jsx)(Be,{})})}const ze={colorModeToggle:"colorModeToggle_DEke"};function Ve(e){let{items:n}=e;return(0,l.jsx)(l.Fragment,{children:n.map(((e,n)=>(0,l.jsx)(Fe,{onError:n=>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:n}),children:(0,l.jsx)(Ce,{...e})},n)))})}function Ue(e){let{left:n,right:t}=e;return(0,l.jsxs)("div",{className:"navbar__inner",children:[(0,l.jsx)("div",{className:"navbar__items",children:n}),(0,l.jsx)("div",{className:"navbar__items navbar__items--right",children:t})]})}function $e(){const e=(0,R.M)(),n=(0,v.p)().navbar.items,[t,o]=function(e){function n(e){return"left"===(e.position??Ne)}return[e.filter(n),e.filter((e=>!n(e)))]}(n),s=n.find((e=>"search"===e.type));return(0,l.jsx)(Ue,{left:(0,l.jsxs)(l.Fragment,{children:[!e.disabled&&(0,l.jsx)(Ge,{}),(0,l.jsx)(Z,{}),(0,l.jsx)(Ve,{items:t})]}),right:(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(Ve,{items:o}),(0,l.jsx)(q,{className:ze.colorModeToggle}),!s&&(0,l.jsx)(ye,{children:(0,l.jsx)(be.A,{})})]})})}function He(){return(0,l.jsx)(Oe,{children:(0,l.jsx)($e,{})})}function qe(e){let{item:n}=e;const{to:t,href:o,label:s,prependBaseUrlToHref:i,...c}=n,a=(0,Q.Ay)(t),r=(0,Q.Ay)(o,{forcePrependBaseUrl:!0});return(0,l.jsxs)(K.A,{className:"footer__link-item",...o?{href:i?r:o}:{to:a},...c,children:[s,o&&!(0,X.A)(o)&&(0,l.jsx)(ne.A,{})]})}function We(e){let{item:n}=e;return n.html?(0,l.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:n.html}}):(0,l.jsx)("li",{className:"footer__item",children:(0,l.jsx)(qe,{item:n})},n.href??n.to)}function Ze(e){let{column:n}=e;return(0,l.jsxs)("div",{className:"col footer__col",children:[(0,l.jsx)("div",{className:"footer__title",children:n.title}),(0,l.jsx)("ul",{className:"footer__items clean-list",children:n.items.map(((e,n)=>(0,l.jsx)(We,{item:e},n)))})]})}function Je(e){let{columns:n}=e;return(0,l.jsx)("div",{className:"row footer__links",children:n.map(((e,n)=>(0,l.jsx)(Ze,{column:e},n)))})}function Ye(){return(0,l.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ke(e){let{item:n}=e;return n.html?(0,l.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:n.html}}):(0,l.jsx)(qe,{item:n})}function Qe(e){let{links:n}=e;return(0,l.jsx)("div",{className:"footer__links text--center",children:(0,l.jsx)("div",{className:"footer__links",children:n.map(((e,t)=>(0,l.jsxs)(o.Fragment,{children:[(0,l.jsx)(Ke,{item:e}),n.length!==t+1&&(0,l.jsx)(Ye,{})]},t)))})})}function Xe(e){let{links:n}=e;return function(e){return"title"in e[0]}(n)?(0,l.jsx)(Je,{columns:n}):(0,l.jsx)(Qe,{links:n})}var en=t(21122);const nn="footerLogoLink_BH7S";function tn(e){let{logo:n}=e;const{withBaseUrl:t}=(0,Q.hH)(),o={light:t(n.src),dark:t(n.srcDark??n.src)};return(0,l.jsx)(en.A,{className:(0,s.A)("footer__logo",n.className),alt:n.alt,sources:o,width:n.width,height:n.height,style:n.style})}function on(e){let{logo:n}=e;return n.href?(0,l.jsx)(K.A,{href:n.href,className:nn,target:n.target,children:(0,l.jsx)(tn,{logo:n})}):(0,l.jsx)(tn,{logo:n})}function sn(e){let{copyright:n}=e;return(0,l.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:n}})}function cn(e){let{style:n,links:t,logo:o,copyright:i}=e;return(0,l.jsx)("footer",{className:(0,s.A)("footer",{"footer--dark":"dark"===n}),children:(0,l.jsxs)("div",{className:"container container-fluid",children:[t,(o||i)&&(0,l.jsxs)("div",{className:"footer__bottom text--center",children:[o&&(0,l.jsx)("div",{className:"margin-bottom--sm",children:o}),i]})]})})}function an(){const{footer:e}=(0,v.p)();if(!e)return null;const{copyright:n,links:t,logo:o,style:s}=e;return(0,l.jsx)(cn,{style:s,links:t&&t.length>0&&(0,l.jsx)(Xe,{links:t}),logo:o&&(0,l.jsx)(on,{logo:o}),copyright:n&&(0,l.jsx)(sn,{copyright:n})})}const rn=o.memo(an),pn=(0,D.fM)([N.a,S.o,A.Tv,_e.VQ,c.Jx,function(e){let{children:n}=e;return(0,l.jsx)(O.y_,{children:(0,l.jsx)(R.e,{children:(0,l.jsx)(L,{children:n})})})}]);function ln(e){let{children:n}=e;return(0,l.jsx)(pn,{children:n})}var gn=t(51107);function un(e){let{error:n,tryAgain:t}=e;return(0,l.jsx)("main",{className:"container margin-vert--xl",children:(0,l.jsx)("div",{className:"row",children:(0,l.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,l.jsx)(gn.A,{as:"h1",className:"hero__title",children:(0,l.jsx)(r.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,l.jsx)("div",{className:"margin-vert--lg",children:(0,l.jsx)(Ie,{onClick:t,className:"button button--primary shadow--lw"})}),(0,l.jsx)("hr",{}),(0,l.jsx)("div",{className:"margin-vert--md",children:(0,l.jsx)(je,{error:n})})]})})})}const dn={mainWrapper:"mainWrapper_z2l0"};function fn(e){const{children:n,noFooter:t,wrapperClassName:o,title:a,description:r}=e;return(0,b.J)(),(0,l.jsxs)(ln,{children:[(0,l.jsx)(c.be,{title:a,description:r}),(0,l.jsx)(y,{}),(0,l.jsx)(E,{}),(0,l.jsx)(He,{}),(0,l.jsx)("div",{id:g,className:(0,s.A)(h.G.wrapper.main,dn.mainWrapper,o),children:(0,l.jsx)(i.A,{fallback:e=>(0,l.jsx)(un,{...e}),children:n})}),!t&&(0,l.jsx)(rn,{})]})}},23465:(e,n,t)=>{"use strict";t.d(n,{A:()=>l});t(96540);var o=t(28774),s=t(86025),i=t(44586),c=t(6342),a=t(21122),r=t(74848);function p(e){let{logo:n,alt:t,imageClassName:o}=e;const i={light:(0,s.Ay)(n.src),dark:(0,s.Ay)(n.srcDark||n.src)},c=(0,r.jsx)(a.A,{className:n.className,sources:i,height:n.height,width:n.width,alt:t,style:n.style});return o?(0,r.jsx)("div",{className:o,children:c}):c}function l(e){const{siteConfig:{title:n}}=(0,i.A)(),{navbar:{title:t,logo:a}}=(0,c.p)(),{imageClassName:l,titleClassName:g,...u}=e,d=(0,s.Ay)(a?.href||"/"),f=t?"":n,m=a?.alt??f;return(0,r.jsxs)(o.A,{to:d,...u,...a?.target&&{target:a.target},children:[a&&(0,r.jsx)(p,{logo:a,alt:m,imageClassName:l}),null!=t&&(0,r.jsx)("b",{className:g,children:t})]})}},41463:(e,n,t)=>{"use strict";t.d(n,{A:()=>i});t(96540);var o=t(5260),s=t(74848);function i(e){let{locale:n,version:t,tag:i}=e;const c=n;return(0,s.jsxs)(o.A,{children:[n&&(0,s.jsx)("meta",{name:"docusaurus_locale",content:n}),t&&(0,s.jsx)("meta",{name:"docusaurus_version",content:t}),i&&(0,s.jsx)("meta",{name:"docusaurus_tag",content:i}),c&&(0,s.jsx)("meta",{name:"docsearch:language",content:c}),t&&(0,s.jsx)("meta",{name:"docsearch:version",content:t}),i&&(0,s.jsx)("meta",{name:"docsearch:docusaurus_tag",content:i})]})}},21122:(e,n,t)=>{"use strict";t.d(n,{A:()=>l});var o=t(96540),s=t(34164),i=t(92303),c=t(95293);const a={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var r=t(74848);function p(e){let{className:n,children:t}=e;const p=(0,i.A)(),{colorMode:l}=(0,c.G)();return(0,r.jsx)(r.Fragment,{children:(p?"dark"===l?["dark"]:["light"]:["light","dark"]).map((e=>{const i=t({theme:e,className:(0,s.A)(n,a.themedComponent,a[`themedComponent--${e}`])});return(0,r.jsx)(o.Fragment,{children:i},e)}))})}function l(e){const{sources:n,className:t,alt:o,...s}=e;return(0,r.jsx)(p,{className:t,children:e=>{let{theme:t,className:i}=e;return(0,r.jsx)("img",{src:n[t],alt:o,className:i,...s})}})}},41422:(e,n,t)=>{"use strict";t.d(n,{N:()=>b,u:()=>p});var o=t(96540),s=t(38193),i=t(205),c=t(53109),a=t(74848);const r="ease-in-out";function p(e){let{initialState:n}=e;const[t,s]=(0,o.useState)(n??!1),i=(0,o.useCallback)((()=>{s((e=>!e))}),[]);return{collapsed:t,setCollapsed:s,toggleCollapsed:i}}const l={display:"none",overflow:"hidden",height:"0px"},g={display:"block",overflow:"visible",height:"auto"};function u(e,n){const t=n?l:g;e.style.display=t.display,e.style.overflow=t.overflow,e.style.height=t.height}function d(e){let{collapsibleRef:n,collapsed:t,animation:s}=e;const i=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=n.current;function o(){const n=e.scrollHeight,t=s?.duration??function(e){if((0,c.O)())return 1;const n=e/36;return Math.round(10*(4+15*n**.25+n/5))}(n);return{transition:`height ${t}ms ${s?.easing??r}`,height:`${n}px`}}function a(){const n=o();e.style.transition=n.transition,e.style.height=n.height}if(!i.current)return u(e,t),void(i.current=!0);return e.style.willChange="height",function(){const n=requestAnimationFrame((()=>{t?(a(),requestAnimationFrame((()=>{e.style.height=l.height,e.style.overflow=l.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{a()})))}));return()=>cancelAnimationFrame(n)}()}),[n,t,s])}function f(e){if(!s.A.canUseDOM)return e?l:g}function m(e){let{as:n="div",collapsed:t,children:s,animation:i,onCollapseTransitionEnd:c,className:r,disableSSRStyle:p}=e;const l=(0,o.useRef)(null);return d({collapsibleRef:l,collapsed:t,animation:i}),(0,a.jsx)(n,{ref:l,style:p?void 0:f(t),onTransitionEnd:e=>{"height"===e.propertyName&&(u(l.current,t),c?.(t))},className:r,children:s})}function h(e){let{collapsed:n,...t}=e;const[s,c]=(0,o.useState)(!n),[r,p]=(0,o.useState)(n);return(0,i.A)((()=>{n||c(!0)}),[n]),(0,i.A)((()=>{s&&p(n)}),[s,n]),s?(0,a.jsx)(m,{...t,collapsed:r}):null}function b(e){let{lazy:n,...t}=e;const o=n?h:m;return(0,a.jsx)(o,{...t})}},65041:(e,n,t)=>{"use strict";t.d(n,{M:()=>m,o:()=>f});var o=t(96540),s=t(92303),i=t(70679),c=t(89532),a=t(6342),r=t(74848);const p=(0,i.Wf)("docusaurus.announcement.dismiss"),l=(0,i.Wf)("docusaurus.announcement.id"),g=()=>"true"===p.get(),u=e=>p.set(String(e)),d=o.createContext(null);function f(e){let{children:n}=e;const t=function(){const{announcementBar:e}=(0,a.p)(),n=(0,s.A)(),[t,i]=(0,o.useState)((()=>!!n&&g()));(0,o.useEffect)((()=>{i(g())}),[]);const c=(0,o.useCallback)((()=>{u(!0),i(!0)}),[]);return(0,o.useEffect)((()=>{if(!e)return;const{id:n}=e;let t=l.get();"annoucement-bar"===t&&(t="announcement-bar");const o=n!==t;l.set(n),o&&u(!1),!o&&g()||i(!1)}),[e]),(0,o.useMemo)((()=>({isActive:!!e&&!t,close:c})),[e,t,c])}();return(0,r.jsx)(d.Provider,{value:t,children:n})}function m(){const e=(0,o.useContext)(d);if(!e)throw new c.dV("AnnouncementBarProvider");return e}},95293:(e,n,t)=>{"use strict";t.d(n,{G:()=>b,a:()=>h});var o=t(96540),s=t(38193),i=t(89532),c=t(70679),a=t(6342),r=t(74848);const p=o.createContext(void 0),l="theme",g=(0,c.Wf)(l),u={light:"light",dark:"dark"},d=e=>e===u.dark?u.dark:u.light,f=e=>s.A.canUseDOM?d(document.documentElement.getAttribute("data-theme")):d(e),m=e=>{g.set(d(e))};function h(e){let{children:n}=e;const t=function(){const{colorMode:{defaultMode:e,disableSwitch:n,respectPrefersColorScheme:t}}=(0,a.p)(),[s,i]=(0,o.useState)(f(e));(0,o.useEffect)((()=>{n&&g.del()}),[n]);const c=(0,o.useCallback)((function(n,o){void 0===o&&(o={});const{persist:s=!0}=o;n?(i(n),s&&m(n)):(i(t?window.matchMedia("(prefers-color-scheme: dark)").matches?u.dark:u.light:e),g.del())}),[t,e]);(0,o.useEffect)((()=>{document.documentElement.setAttribute("data-theme",d(s))}),[s]),(0,o.useEffect)((()=>{if(n)return;const e=e=>{if(e.key!==l)return;const n=g.get();null!==n&&c(d(n))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[n,c]);const r=(0,o.useRef)(!1);return(0,o.useEffect)((()=>{if(n&&!t)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),o=()=>{window.matchMedia("print").matches||r.current?r.current=window.matchMedia("print").matches:c(null)};return e.addListener(o),()=>e.removeListener(o)}),[c,n,t]),(0,o.useMemo)((()=>({colorMode:s,setColorMode:c,get isDarkTheme(){return s===u.dark},setLightTheme(){c(u.light)},setDarkTheme(){c(u.dark)}})),[s,c])}();return(0,r.jsx)(p.Provider,{value:t,children:n})}function b(){const e=(0,o.useContext)(p);if(null==e)throw new i.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},89876:(e,n,t)=>{"use strict";t.d(n,{e:()=>d,M:()=>f});var o=t(96540),s=t(75600),i=t(24581),c=t(56347),a=t(89532);function r(e){!function(e){const n=(0,c.W6)(),t=(0,a._q)(e);(0,o.useEffect)((()=>n.block(((e,n)=>t(e,n)))),[n,t])}(((n,t)=>{if("POP"===t)return e(n,t)}))}var p=t(6342),l=t(74848);const g=o.createContext(void 0);function u(){const e=function(){const e=(0,s.YL)(),{items:n}=(0,p.p)().navbar;return 0===n.length&&!e.component}(),n=(0,i.l)(),t=!e&&"mobile"===n,[c,a]=(0,o.useState)(!1);r((()=>{if(c)return a(!1),!1}));const l=(0,o.useCallback)((()=>{a((e=>!e))}),[]);return(0,o.useEffect)((()=>{"desktop"===n&&a(!1)}),[n]),(0,o.useMemo)((()=>({disabled:e,shouldRender:t,toggle:l,shown:c})),[e,t,l,c])}function d(e){let{children:n}=e;const t=u();return(0,l.jsx)(g.Provider,{value:t,children:n})}function f(){const e=o.useContext(g);if(void 0===e)throw new a.dV("NavbarMobileSidebarProvider");return e}},75600:(e,n,t)=>{"use strict";t.d(n,{GX:()=>p,YL:()=>r,y_:()=>a});var o=t(96540),s=t(89532),i=t(74848);const c=o.createContext(null);function a(e){let{children:n}=e;const t=(0,o.useState)({component:null,props:null});return(0,i.jsx)(c.Provider,{value:t,children:n})}function r(){const e=(0,o.useContext)(c);if(!e)throw new s.dV("NavbarSecondaryMenuContentProvider");return e[0]}function p(e){let{component:n,props:t}=e;const i=(0,o.useContext)(c);if(!i)throw new s.dV("NavbarSecondaryMenuContentProvider");const[,a]=i,r=(0,s.Be)(t);return(0,o.useEffect)((()=>{a({component:n,props:r})}),[a,n,r]),(0,o.useEffect)((()=>()=>a({component:null,props:null})),[a]),null}},14090:(e,n,t)=>{"use strict";t.d(n,{w:()=>s,J:()=>i});var o=t(96540);const s="navigation-with-keyboard";function i(){(0,o.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(s),"mousedown"===e.type&&document.body.classList.remove(s)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(s),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},24581:(e,n,t)=>{"use strict";t.d(n,{l:()=>a});var o=t(96540),s=t(38193);const i={desktop:"desktop",mobile:"mobile",ssr:"ssr"},c=996;function a(e){let{desktopBreakpoint:n=c}=void 0===e?{}:e;const[t,a]=(0,o.useState)((()=>"ssr"));return(0,o.useEffect)((()=>{function e(){a(function(e){if(!s.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?i.desktop:i.mobile}(n))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[n]),t}},17559:(e,n,t)=>{"use strict";t.d(n,{G:()=>o});const o={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",blogAuthorsListPage:"blog-authors-list-page",blogAuthorsPostsPage:"blog-authors-posts-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",draftBanner:"theme-draft-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"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},53109:(e,n,t)=>{"use strict";function o(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}t.d(n,{O:()=>o})},1003:(e,n,t)=>{"use strict";t.d(n,{e3:()=>d,be:()=>g,Jx:()=>f});var o=t(96540),s=t(34164),i=t(5260),c=t(53102);function a(){const e=o.useContext(c.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var r=t(86025),p=t(44586);var l=t(74848);function g(e){let{title:n,description:t,keywords:o,image:s,children:c}=e;const a=function(e){const{siteConfig:n}=(0,p.A)(),{title:t,titleDelimiter:o}=n;return e?.trim().length?`${e.trim()} ${o} ${t}`:t}(n),{withBaseUrl:g}=(0,r.hH)(),u=s?g(s,{absolute:!0}):void 0;return(0,l.jsxs)(i.A,{children:[n&&(0,l.jsx)("title",{children:a}),n&&(0,l.jsx)("meta",{property:"og:title",content:a}),t&&(0,l.jsx)("meta",{name:"description",content:t}),t&&(0,l.jsx)("meta",{property:"og:description",content:t}),o&&(0,l.jsx)("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),u&&(0,l.jsx)("meta",{property:"og:image",content:u}),u&&(0,l.jsx)("meta",{name:"twitter:image",content:u}),c]})}const u=o.createContext(void 0);function d(e){let{className:n,children:t}=e;const c=o.useContext(u),a=(0,s.A)(c,n);return(0,l.jsxs)(u.Provider,{value:a,children:[(0,l.jsx)(i.A,{children:(0,l.jsx)("html",{className:a})}),t]})}function f(e){let{children:n}=e;const t=a(),o=`plugin-${t.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${t.plugin.id}`;return(0,l.jsx)(d,{className:(0,s.A)(o,i),children:n})}},89532:(e,n,t)=>{"use strict";t.d(n,{Be:()=>p,ZC:()=>a,_q:()=>c,dV:()=>r,fM:()=>l});var o=t(96540),s=t(205),i=t(74848);function c(e){const n=(0,o.useRef)(e);return(0,s.A)((()=>{n.current=e}),[e]),(0,o.useCallback)((function(){return n.current(...arguments)}),[])}function a(e){const n=(0,o.useRef)();return(0,s.A)((()=>{n.current=e})),n.current}class r extends Error{constructor(e,n){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${n??""}`}}function p(e){const n=Object.entries(e);return n.sort(((e,n)=>e[0].localeCompare(n[0]))),(0,o.useMemo)((()=>e),n.flat())}function l(e){return n=>{let{children:t}=n;return(0,i.jsx)(i.Fragment,{children:e.reduceRight(((e,n)=>(0,i.jsx)(n,{children:e})),t)})}}},99169:(e,n,t)=>{"use strict";t.d(n,{Dt:()=>a,ys:()=>c});var o=t(96540),s=t(35947),i=t(44586);function c(e,n){const t=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return t(e)===t(n)}function a(){const{baseUrl:e}=(0,i.A)().siteConfig;return(0,o.useMemo)((()=>function(e){let{baseUrl:n,routes:t}=e;function o(e){return e.path===n&&!0===e.exact}function s(e){return e.path===n&&!e.exact}return function e(n){if(0===n.length)return;return n.find(o)||e(n.filter(s).flatMap((e=>e.routes??[])))}(t)}({routes:s.A,baseUrl:e})),[e])}},23104:(e,n,t)=>{"use strict";t.d(n,{Mq:()=>u,Tv:()=>p,gk:()=>d});var o=t(96540),s=t(38193),i=t(92303),c=(t(205),t(89532)),a=t(74848);const r=o.createContext(void 0);function p(e){let{children:n}=e;const t=function(){const e=(0,o.useRef)(!0);return(0,o.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,a.jsx)(r.Provider,{value:t,children:n})}function l(){const e=(0,o.useContext)(r);if(null==e)throw new c.dV("ScrollControllerProvider");return e}const g=()=>s.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function u(e,n){void 0===n&&(n=[]);const{scrollEventsEnabledRef:t}=l(),s=(0,o.useRef)(g()),i=(0,c._q)(e);(0,o.useEffect)((()=>{const e=()=>{if(!t.current)return;const e=g();i(e,s.current),s.current=e},n={passive:!0};return e(),window.addEventListener("scroll",e,n),()=>window.removeEventListener("scroll",e,n)}),[i,t,...n])}function d(){const e=(0,o.useRef)(null),n=(0,i.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:t=>{e.current=n?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(t):function(e){let n=null;const t=document.documentElement.scrollTop>e;return function o(){const s=document.documentElement.scrollTop;(t&&s>e||!t&&sn&&cancelAnimationFrame(n)}(t)},cancelScroll:()=>e.current?.()}}},70679:(e,n,t)=>{"use strict";t.d(n,{Wf:()=>p});t(96540);const o=JSON.parse('{"N":"localStorage","M":""}'),s=o.N;function i(e){let{key:n,oldValue:t,newValue:o,storage:s}=e;if(t===o)return;const i=document.createEvent("StorageEvent");i.initStorageEvent("storage",!1,!1,n,t,o,window.location.href,s),window.dispatchEvent(i)}function c(e){if(void 0===e&&(e=s),"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(t){return n=t,a||(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.",n),a=!0),null}var n}let a=!1;const r={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function p(e,n){const t=`${e}${o.M}`;if("undefined"==typeof window)return function(e){function n(){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:n,set:n,del:n,listen:n}}(t);const s=c(n?.persistence);return null===s?r:{get:()=>{try{return s.getItem(t)}catch(e){return console.error(`Docusaurus storage error, can't get key=${t}`,e),null}},set:e=>{try{const n=s.getItem(t);s.setItem(t,e),i({key:t,oldValue:n,newValue:e,storage:s})}catch(n){console.error(`Docusaurus storage error, can't set ${t}=${e}`,n)}},del:()=>{try{const e=s.getItem(t);s.removeItem(t),i({key:t,oldValue:e,newValue:null,storage:s})}catch(e){console.error(`Docusaurus storage error, can't delete key=${t}`,e)}},listen:e=>{try{const n=n=>{n.storageArea===s&&n.key===t&&e(n)};return window.addEventListener("storage",n),()=>window.removeEventListener("storage",n)}catch(n){return console.error(`Docusaurus storage error, can't listen for changes of key=${t}`,n),()=>{}}}}}},32131:(e,n,t)=>{"use strict";t.d(n,{o:()=>c});var o=t(44586),s=t(56347),i=t(70440);function c(){const{siteConfig:{baseUrl:e,url:n,trailingSlash:t},i18n:{defaultLocale:c,currentLocale:a}}=(0,o.A)(),{pathname:r}=(0,s.zy)(),p=(0,i.Ks)(r,{trailingSlash:t,baseUrl:e}),l=a===c?e:e.replace(`/${a}/`,"/"),g=p.replace(e,"");return{createUrl:function(e){let{locale:t,fullyQualified:o}=e;return`${o?n:""}${function(e){return e===c?`${l}`:`${l}${e}/`}(t)}${g}`}}}},75062:(e,n,t)=>{"use strict";t.d(n,{$:()=>c});var o=t(96540),s=t(56347),i=t(89532);function c(e){const n=(0,s.zy)(),t=(0,i.ZC)(n),c=(0,i._q)(e);(0,o.useEffect)((()=>{t&&n!==t&&c({location:n,previousLocation:t})}),[c,n,t])}},6342:(e,n,t)=>{"use strict";t.d(n,{p:()=>s});var o=t(44586);function s(){return(0,o.A)().siteConfig.themeConfig}},12983:(e,n,t)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.addTrailingSlash=s,n.default=function(e,n){const{trailingSlash:t,baseUrl:o}=n;if(e.startsWith("#"))return e;if(void 0===t)return e;const[c]=e.split(/[#?]/),a="/"===c||c===o?c:(r=c,p=t,p?s(r):i(r));var r,p;return e.replace(c,a)},n.addLeadingSlash=function(e){return(0,o.addPrefix)(e,"/")},n.removeTrailingSlash=i;const o=t(42566);function s(e){return e.endsWith("/")?e:`${e}/`}function i(e){return(0,o.removeSuffix)(e,"/")}},80253:(e,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.getErrorCausalChain=function e(n){if(n.cause)return[n,...e(n.cause)];return[n]}},70440:(e,n,t)=>{"use strict";n.rA=n.Ks=void 0;const o=t(31635);var s=t(12983);Object.defineProperty(n,"Ks",{enumerable:!0,get:function(){return o.__importDefault(s).default}});var i=t(42566);var c=t(80253);Object.defineProperty(n,"rA",{enumerable:!0,get:function(){return c.getErrorCausalChain}})},42566:(e,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.addPrefix=function(e,n){return e.startsWith(n)?e:`${n}${e}`},n.removeSuffix=function(e,n){if(""===n)return e;return e.endsWith(n)?e.slice(0,-n.length):e},n.addSuffix=function(e,n){return e.endsWith(n)?e:`${e}${n}`},n.removePrefix=function(e,n){return e.startsWith(n)?e.slice(n.length):e}},31513:(e,n,t)=>{"use strict";t.d(n,{zR:()=>v,TM:()=>P,yJ:()=>d,sC:()=>E,AO:()=>u});var o=t(58168);function s(e){return"/"===e.charAt(0)}function i(e,n){for(var t=n,o=t+1,s=e.length;o=0;u--){var d=c[u];"."===d?i(c,u):".."===d?(i(c,u),g++):g&&(i(c,u),g--)}if(!p)for(;g--;g)c.unshift("..");!p||""===c[0]||c[0]&&s(c[0])||c.unshift("");var f=c.join("/");return t&&"/"!==f.substr(-1)&&(f+="/"),f};var a=t(11561);function r(e){return"/"===e.charAt(0)?e:"/"+e}function p(e){return"/"===e.charAt(0)?e.substr(1):e}function l(e,n){return function(e,n){return 0===e.toLowerCase().indexOf(n.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(n.length))}(e,n)?e.substr(n.length):e}function g(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function u(e){var n=e.pathname,t=e.search,o=e.hash,s=n||"/";return t&&"?"!==t&&(s+="?"===t.charAt(0)?t:"?"+t),o&&"#"!==o&&(s+="#"===o.charAt(0)?o:"#"+o),s}function d(e,n,t,s){var i;"string"==typeof e?(i=function(e){var n=e||"/",t="",o="",s=n.indexOf("#");-1!==s&&(o=n.substr(s),n=n.substr(0,s));var i=n.indexOf("?");return-1!==i&&(t=n.substr(i),n=n.substr(0,i)),{pathname:n,search:"?"===t?"":t,hash:"#"===o?"":o}}(e),i.state=n):(void 0===(i=(0,o.A)({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==n&&void 0===i.state&&(i.state=n));try{i.pathname=decodeURI(i.pathname)}catch(a){throw a instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):a}return t&&(i.key=t),s?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=c(i.pathname,s.pathname)):i.pathname=s.pathname:i.pathname||(i.pathname="/"),i}function f(){var e=null;var n=[];return{setPrompt:function(n){return e=n,function(){e===n&&(e=null)}},confirmTransitionTo:function(n,t,o,s){if(null!=e){var i="function"==typeof e?e(n,t):e;"string"==typeof i?"function"==typeof o?o(i,s):s(!0):s(!1!==i)}else s(!0)},appendListener:function(e){var t=!0;function o(){t&&e.apply(void 0,arguments)}return n.push(o),function(){t=!1,n=n.filter((function(e){return e!==o}))}},notifyListeners:function(){for(var e=arguments.length,t=new Array(e),o=0;on?t.splice(n,t.length-n,s):t.push(s),g({action:o,location:s,index:n,entries:t})}}))},replace:function(e,n){var o="REPLACE",s=d(e,n,m(),v.location);l.confirmTransitionTo(s,o,t,(function(e){e&&(v.entries[v.index]=s,g({action:o,location:s}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var n=v.index+e;return n>=0&&n{"use strict";var o=t(44363),s={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},c={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},a={};function r(e){return o.isMemo(e)?c:a[e.$$typeof]||s}a[o.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},a[o.Memo]=c;var p=Object.defineProperty,l=Object.getOwnPropertyNames,g=Object.getOwnPropertySymbols,u=Object.getOwnPropertyDescriptor,d=Object.getPrototypeOf,f=Object.prototype;e.exports=function e(n,t,o){if("string"!=typeof t){if(f){var s=d(t);s&&s!==f&&e(n,s,o)}var c=l(t);g&&(c=c.concat(g(t)));for(var a=r(n),m=r(t),h=0;h{"use strict";e.exports=function(e,n,t,o,s,i,c,a){if(!e){var r;if(void 0===n)r=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var p=[t,o,s,i,c,a],l=0;(r=new Error(n.replace(/%s/g,(function(){return p[l++]})))).name="Invariant Violation"}throw r.framesToPop=1,r}}},64634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},10119:(e,n,t)=>{"use strict";t.r(n)},51043:(e,n,t)=>{"use strict";t.r(n)},5947:function(e,n,t){var o,s;o=function(){var e,n,t={version:"0.2.0"},o=t.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 s(e,n,t){return et?t:e}function i(e){return 100*(-1+e)}function c(e,n,t){var s;return(s="translate3d"===o.positionUsing?{transform:"translate3d("+i(e)+"%,0,0)"}:"translate"===o.positionUsing?{transform:"translate("+i(e)+"%,0)"}:{"margin-left":i(e)+"%"}).transition="all "+n+"ms "+t,s}t.configure=function(e){var n,t;for(n in e)void 0!==(t=e[n])&&e.hasOwnProperty(n)&&(o[n]=t);return this},t.status=null,t.set=function(e){var n=t.isStarted();e=s(e,o.minimum,1),t.status=1===e?null:e;var i=t.render(!n),p=i.querySelector(o.barSelector),l=o.speed,g=o.easing;return i.offsetWidth,a((function(n){""===o.positionUsing&&(o.positionUsing=t.getPositioningCSS()),r(p,c(e,l,g)),1===e?(r(i,{transition:"none",opacity:1}),i.offsetWidth,setTimeout((function(){r(i,{transition:"all "+l+"ms linear",opacity:0}),setTimeout((function(){t.remove(),n()}),l)}),l)):setTimeout(n,l)})),this},t.isStarted=function(){return"number"==typeof t.status},t.start=function(){t.status||t.set(0);var e=function(){setTimeout((function(){t.status&&(t.trickle(),e())}),o.trickleSpeed)};return o.trickle&&e(),this},t.done=function(e){return e||t.status?t.inc(.3+.5*Math.random()).set(1):this},t.inc=function(e){var n=t.status;return n?("number"!=typeof e&&(e=(1-n)*s(Math.random()*n,.1,.95)),n=s(n+e,0,.994),t.set(n)):t.start()},t.trickle=function(){return t.inc(Math.random()*o.trickleRate)},e=0,n=0,t.promise=function(o){return o&&"resolved"!==o.state()?(0===n&&t.start(),e++,n++,o.always((function(){0==--n?(e=0,t.done()):t.set((e-n)/e)})),this):this},t.render=function(e){if(t.isRendered())return document.getElementById("nprogress");l(document.documentElement,"nprogress-busy");var n=document.createElement("div");n.id="nprogress",n.innerHTML=o.template;var s,c=n.querySelector(o.barSelector),a=e?"-100":i(t.status||0),p=document.querySelector(o.parent);return r(c,{transition:"all 0 linear",transform:"translate3d("+a+"%,0,0)"}),o.showSpinner||(s=n.querySelector(o.spinnerSelector))&&d(s),p!=document.body&&l(p,"nprogress-custom-parent"),p.appendChild(n),n},t.remove=function(){g(document.documentElement,"nprogress-busy"),g(document.querySelector(o.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&d(e)},t.isRendered=function(){return!!document.getElementById("nprogress")},t.getPositioningCSS=function(){var e=document.body.style,n="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return n+"Perspective"in e?"translate3d":n+"Transform"in e?"translate":"margin"};var a=function(){var e=[];function n(){var t=e.shift();t&&t(n)}return function(t){e.push(t),1==e.length&&n()}}(),r=function(){var e=["Webkit","O","Moz","ms"],n={};function t(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,n){return n.toUpperCase()}))}function o(n){var t=document.body.style;if(n in t)return n;for(var o,s=e.length,i=n.charAt(0).toUpperCase()+n.slice(1);s--;)if((o=e[s]+i)in t)return o;return n}function s(e){return e=t(e),n[e]||(n[e]=o(e))}function i(e,n,t){n=s(n),e.style[n]=t}return function(e,n){var t,o,s=arguments;if(2==s.length)for(t in n)void 0!==(o=n[t])&&n.hasOwnProperty(t)&&i(e,t,o);else i(e,s[1],s[2])}}();function p(e,n){return("string"==typeof e?e:u(e)).indexOf(" "+n+" ")>=0}function l(e,n){var t=u(e),o=t+n;p(t,n)||(e.className=o.substring(1))}function g(e,n){var t,o=u(e);p(e,n)&&(t=o.replace(" "+n+" "," "),e.className=t.substring(1,t.length-1))}function u(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function d(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return t},void 0===(s="function"==typeof o?o.call(n,t,n,e):o)||(e.exports=s)},35302:(e,n,t)=>{var o=t(64634);e.exports=f,e.exports.parse=i,e.exports.compile=function(e,n){return r(i(e,n),n)},e.exports.tokensToFunction=r,e.exports.tokensToRegExp=d;var s=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function i(e,n){for(var t,o=[],i=0,a=0,r="",p=n&&n.delimiter||"/";null!=(t=s.exec(e));){var g=t[0],u=t[1],d=t.index;if(r+=e.slice(a,d),a=d+g.length,u)r+=u[1];else{var f=e[a],m=t[2],h=t[3],b=t[4],x=t[5],y=t[6],v=t[7];r&&(o.push(r),r="");var S=null!=m&&null!=f&&f!==m,_="+"===y||"*"===y,k="?"===y||"*"===y,w=m||p,C=b||x,P=m||("string"==typeof o[o.length-1]?o[o.length-1]:"");o.push({name:h||i++,prefix:m||"",delimiter:w,optional:k,repeat:_,partial:S,asterisk:!!v,pattern:C?l(C):v?".*":c(w,P)})}}return a-1?"[^"+p(e)+"]+?":p(n)+"|(?:(?!"+p(n)+")[^"+p(e)+"])+?"}function a(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function r(e,n){for(var t=new Array(e.length),s=0;s{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment
can become .namespace--comment
) or replace them with your defined ones (like .editor__comment
). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll
and highlightAllUnder
methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},8722:(e,n,t)=>{const o=t(6969),s=t(98380),i=new Set;function c(e){void 0===e?e=Object.keys(o.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const n=[...i,...Object.keys(Prism.languages)];s(o,e,n).load((e=>{if(!(e in o.languages))return void(c.silent||console.warn("Language does not exist: "+e));const n="./prism-"+e;delete t.c[t(63157).resolve(n)],delete Prism.languages[e],t(63157)(n),i.add(e)}))}c.silent=!1,e.exports=c},19700:()=>{!function(e){function n(e,n){return"___"+e.toUpperCase()+n+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(t,o,s,i){if(t.language===o){var c=t.tokenStack=[];t.code=t.code.replace(s,(function(e){if("function"==typeof i&&!i(e))return e;for(var s,a=c.length;-1!==t.code.indexOf(s=n(o,a));)++a;return c[a]=e,s})),t.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(t,o){if(t.language===o&&t.tokenStack){t.grammar=e.languages[o];var s=0,i=Object.keys(t.tokenStack);!function c(a){for(var r=0;r=i.length);r++){var p=a[r];if("string"==typeof p||p.content&&"string"==typeof p.content){var l=i[s],g=t.tokenStack[l],u="string"==typeof p?p:p.content,d=n(o,l),f=u.indexOf(d);if(f>-1){++s;var m=u.substring(0,f),h=new e.Token(o,e.tokenize(g,t.grammar),"language-"+o,g),b=u.substring(f+d.length),x=[];m&&x.push.apply(x,c([m])),x.push(h),b&&x.push.apply(x,c([b])),"string"==typeof p?a.splice.apply(a,[r,1].concat(x)):p.content=x}}else p.content&&c(p.content)}return a}(t.tokens)}}}})}(Prism)},18692:(e,n,t)=>{var o={"./":8722};function s(e){var n=i(e);return t(n)}function i(e){if(!t.o(o,e)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return o[e]}s.keys=function(){return Object.keys(o)},s.resolve=i,e.exports=s,s.id=18692},63157:(e,n,t)=>{var o={"./":8722};function s(e){var n=i(e);return t(n)}function i(e){if(!t.o(o,e)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return o[e]}s.keys=function(){return Object.keys(o)},s.resolve=i,e.exports=s,s.id=63157},98380:e=>{"use strict";var n=function(){var e=function(){};function n(e,n){Array.isArray(e)?e.forEach(n):null!=e&&n(e,0)}function t(e){for(var n={},t=0,o=e.length;t "));var a={},r=e[o];if(r){function p(n){if(!(n in e))throw new Error(o+" depends on an unknown component "+n);if(!(n in a))for(var c in s(n,i),a[n]=!0,t[n])a[c]=!0}n(r.require,p),n(r.optional,p),n(r.modify,p)}t[o]=a,i.pop()}}return function(e){var n=t[e];return n||(s(e,o),n=t[e]),n}}function s(e){for(var n in e)return!0;return!1}return function(i,c,a){var r=function(e){var n={};for(var t in e){var o=e[t];for(var s in o)if("meta"!=s){var i=o[s];n[s]="string"==typeof i?{title:i}:i}}return n}(i),p=function(e){var t;return function(o){if(o in e)return o;if(!t)for(var s in t={},e){var i=e[s];n(i&&i.alias,(function(n){if(n in t)throw new Error(n+" cannot be alias for both "+s+" and "+t[n]);if(n in e)throw new Error(n+" cannot be alias of "+s+" because it is a component.");t[n]=s}))}return t[o]||o}}(r);c=c.map(p),a=(a||[]).map(p);var l=t(c),g=t(a);c.forEach((function e(t){var o=r[t];n(o&&o.require,(function(n){n in g||(l[n]=!0,e(n))}))}));for(var u,d=o(r),f=l;s(f);){for(var m in u={},f){var h=r[m];n(h&&h.modify,(function(e){e in g&&(u[e]=!0)}))}for(var b in g)if(!(b in l))for(var x in d(b))if(x in l){u[b]=!0;break}for(var y in f=u)l[y]=!0}var v={getIds:function(){var e=[];return v.load((function(n){e.push(n)})),e},load:function(n,t){return function(n,t,o,s){var i=s?s.series:void 0,c=s?s.parallel:e,a={},r={};function p(e){if(e in a)return a[e];r[e]=!0;var s,l=[];for(var g in n(e))g in t&&l.push(g);if(0===l.length)s=o(e);else{var u=c(l.map((function(e){var n=p(e);return delete r[e],n})));i?s=i(u,(function(){return o(e)})):o(e)}return a[e]=s}for(var l in t)p(l);var g=[];for(var u in r)g.push(a[u]);return c(g)}(d,l,n,t)}};return v}}();e.exports=n},2694:(e,n,t)=>{"use strict";var o=t(6925);function s(){}function i(){}i.resetWarningCache=s,e.exports=function(){function e(e,n,t,s,i,c){if(c!==o){var a=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 a.name="Invariant Violation",a}}function n(){return e}e.isRequired=e;var t={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:n,element:e,elementType:e,instanceOf:n,node:e,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:i,resetWarningCache:s};return t.PropTypes=t,t}},5556:(e,n,t)=>{e.exports=t(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},22551:(e,n,t)=>{"use strict";var o=t(96540),s=t(69982);function i(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;tn}return!1}(n,t,s,o)&&(t=null),o||null===s?function(e){return!!g.call(f,e)||!g.call(d,e)&&(u.test(e)?f[e]=!0:(d[e]=!0,!1))}(n)&&(null===t?e.removeAttribute(n):e.setAttribute(n,""+t)):s.mustUseProperty?e[s.propertyName]=null===t?3!==s.type&&"":t:(n=s.attributeName,o=s.attributeNamespace,null===t?e.removeAttribute(n):(t=3===(s=s.type)||4===s&&!0===t?"":""+t,o?e.setAttributeNS(o,n,t):e.setAttribute(n,t))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var n=e.replace(b,x);h[n]=new m(n,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var n=e.replace(b,x);h[n]=new m(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var n=e.replace(b,x);h[n]=new m(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){h[e]=new m(e,1,!1,e.toLowerCase(),null,!1,!1)})),h.xlinkHref=new m("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){h[e]=new m(e,1,!1,e.toLowerCase(),null,!0,!0)}));var v=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,S=Symbol.for("react.element"),_=Symbol.for("react.portal"),k=Symbol.for("react.fragment"),w=Symbol.for("react.strict_mode"),C=Symbol.for("react.profiler"),P=Symbol.for("react.provider"),T=Symbol.for("react.context"),E=Symbol.for("react.forward_ref"),R=Symbol.for("react.suspense"),A=Symbol.for("react.suspense_list"),D=Symbol.for("react.memo"),O=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var M=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var L=Symbol.iterator;function I(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=L&&e[L]||e["@@iterator"])?e:null}var j,F=Object.assign;function N(e){if(void 0===j)try{throw Error()}catch(t){var n=t.stack.trim().match(/\n( *(at )?)/);j=n&&n[1]||""}return"\n"+j+e}var B=!1;function G(e,n){if(!e||B)return"";B=!0;var t=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(n)if(n=function(){throw Error()},Object.defineProperty(n.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(n,[])}catch(p){var o=p}Reflect.construct(e,[],n)}else{try{n.call()}catch(p){o=p}e.call(n.prototype)}else{try{throw Error()}catch(p){o=p}e()}}catch(p){if(p&&o&&"string"==typeof p.stack){for(var s=p.stack.split("\n"),i=o.stack.split("\n"),c=s.length-1,a=i.length-1;1<=c&&0<=a&&s[c]!==i[a];)a--;for(;1<=c&&0<=a;c--,a--)if(s[c]!==i[a]){if(1!==c||1!==a)do{if(c--,0>--a||s[c]!==i[a]){var r="\n"+s[c].replace(" at new "," at ");return e.displayName&&r.includes("")&&(r=r.replace("",e.displayName)),r}}while(1<=c&&0<=a);break}}}finally{B=!1,Error.prepareStackTrace=t}return(e=e?e.displayName||e.name:"")?N(e):""}function z(e){switch(e.tag){case 5:return N(e.type);case 16:return N("Lazy");case 13:return N("Suspense");case 19:return N("SuspenseList");case 0:case 2:case 15:return e=G(e.type,!1);case 11:return e=G(e.type.render,!1);case 1:return e=G(e.type,!0);default:return""}}function V(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case k:return"Fragment";case _:return"Portal";case C:return"Profiler";case w:return"StrictMode";case R:return"Suspense";case A:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case T:return(e.displayName||"Context")+".Consumer";case P:return(e._context.displayName||"Context")+".Provider";case E:var n=e.render;return(e=e.displayName)||(e=""!==(e=n.displayName||n.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case D:return null!==(n=e.displayName||null)?n:V(e.type)||"Memo";case O:n=e._payload,e=e._init;try{return V(e(n))}catch(t){}}return null}function U(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=n.render).displayName||e.name||"",n.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return V(n);case 8:return n===w?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof n)return n.displayName||n.name||null;if("string"==typeof n)return n}return null}function $(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function H(e){var n=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===n||"radio"===n)}function q(e){e._valueTracker||(e._valueTracker=function(e){var n=H(e)?"checked":"value",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),o=""+e[n];if(!e.hasOwnProperty(n)&&void 0!==t&&"function"==typeof t.get&&"function"==typeof t.set){var s=t.get,i=t.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return s.call(this)},set:function(e){o=""+e,i.call(this,e)}}),Object.defineProperty(e,n,{enumerable:t.enumerable}),{getValue:function(){return o},setValue:function(e){o=""+e},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}(e))}function W(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var t=n.getValue(),o="";return e&&(o=H(e)?e.checked?"true":"false":e.value),(e=o)!==t&&(n.setValue(e),!0)}function Z(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(n){return e.body}}function J(e,n){var t=n.checked;return F({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=t?t:e._wrapperState.initialChecked})}function Y(e,n){var t=null==n.defaultValue?"":n.defaultValue,o=null!=n.checked?n.checked:n.defaultChecked;t=$(null!=n.value?n.value:t),e._wrapperState={initialChecked:o,initialValue:t,controlled:"checkbox"===n.type||"radio"===n.type?null!=n.checked:null!=n.value}}function K(e,n){null!=(n=n.checked)&&y(e,"checked",n,!1)}function Q(e,n){K(e,n);var t=$(n.value),o=n.type;if(null!=t)"number"===o?(0===t&&""===e.value||e.value!=t)&&(e.value=""+t):e.value!==""+t&&(e.value=""+t);else if("submit"===o||"reset"===o)return void e.removeAttribute("value");n.hasOwnProperty("value")?ee(e,n.type,t):n.hasOwnProperty("defaultValue")&&ee(e,n.type,$(n.defaultValue)),null==n.checked&&null!=n.defaultChecked&&(e.defaultChecked=!!n.defaultChecked)}function X(e,n,t){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var o=n.type;if(!("submit"!==o&&"reset"!==o||void 0!==n.value&&null!==n.value))return;n=""+e._wrapperState.initialValue,t||n===e.value||(e.value=n),e.defaultValue=n}""!==(t=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==t&&(e.name=t)}function ee(e,n,t){"number"===n&&Z(e.ownerDocument)===e||(null==t?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+t&&(e.defaultValue=""+t))}var ne=Array.isArray;function te(e,n,t,o){if(e=e.options,n){n={};for(var s=0;s"+n.valueOf().toString()+"",n=pe.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,n,t,o){MSApp.execUnsafeLocalFunction((function(){return le(e,n)}))}:le);function ue(e,n){if(n){var t=e.firstChild;if(t&&t===e.lastChild&&3===t.nodeType)return void(t.nodeValue=n)}e.textContent=n}var de={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},fe=["Webkit","ms","Moz","O"];function me(e,n,t){return null==n||"boolean"==typeof n||""===n?"":t||"number"!=typeof n||0===n||de.hasOwnProperty(e)&&de[e]?(""+n).trim():n+"px"}function he(e,n){for(var t in e=e.style,n)if(n.hasOwnProperty(t)){var o=0===t.indexOf("--"),s=me(t,n[t],o);"float"===t&&(t="cssFloat"),o?e.setProperty(t,s):e[t]=s}}Object.keys(de).forEach((function(e){fe.forEach((function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),de[n]=de[e]}))}));var be=F({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function xe(e,n){if(n){if(be[e]&&(null!=n.children||null!=n.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=n.dangerouslySetInnerHTML){if(null!=n.children)throw Error(i(60));if("object"!=typeof n.dangerouslySetInnerHTML||!("__html"in n.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=n.style&&"object"!=typeof n.style)throw Error(i(62))}}function ye(e,n){if(-1===e.indexOf("-"))return"string"==typeof n.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ve=null;function Se(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var _e=null,ke=null,we=null;function Ce(e){if(e=vs(e)){if("function"!=typeof _e)throw Error(i(280));var n=e.stateNode;n&&(n=_s(n),_e(e.stateNode,e.type,n))}}function Pe(e){ke?we?we.push(e):we=[e]:ke=e}function Te(){if(ke){var e=ke,n=we;if(we=ke=null,Ce(e),n)for(e=0;e>>=0,0===e?32:31-(rn(e)/pn|0)|0},rn=Math.log,pn=Math.LN2;var ln=64,gn=4194304;function un(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function dn(e,n){var t=e.pendingLanes;if(0===t)return 0;var o=0,s=e.suspendedLanes,i=e.pingedLanes,c=268435455&t;if(0!==c){var a=c&~s;0!==a?o=un(a):0!==(i&=c)&&(o=un(i))}else 0!==(c=t&~s)?o=un(c):0!==i&&(o=un(i));if(0===o)return 0;if(0!==n&&n!==o&&!(n&s)&&((s=o&-o)>=(i=n&-n)||16===s&&4194240&i))return n;if(4&o&&(o|=16&t),0!==(n=e.entangledLanes))for(e=e.entanglements,n&=o;0t;t++)n.push(e);return n}function xn(e,n,t){e.pendingLanes|=n,536870912!==n&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[n=31-an(n)]=t}function yn(e,n){var t=e.entangledLanes|=n;for(e=e.entanglements;t;){var o=31-an(t),s=1<=It),Nt=String.fromCharCode(32),Bt=!1;function Gt(e,n){switch(e){case"keyup":return-1!==Mt.indexOf(n.keyCode);case"keydown":return 229!==n.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function zt(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Vt=!1;var Ut={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function $t(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===n?!!Ut[e.type]:"textarea"===n}function Ht(e,n,t,o){Pe(o),0<(n=Wo(n,"onChange")).length&&(t=new lt("onChange","change",null,t,o),e.push({event:t,listeners:n}))}var qt=null,Wt=null;function Zt(e){Bo(e,0)}function Jt(e){if(W(Ss(e)))return e}function Yt(e,n){if("change"===e)return n}var Kt=!1;if(l){var Qt;if(l){var Xt="oninput"in document;if(!Xt){var eo=document.createElement("div");eo.setAttribute("oninput","return;"),Xt="function"==typeof eo.oninput}Qt=Xt}else Qt=!1;Kt=Qt&&(!document.documentMode||9=n)return{node:o,offset:n-e};e=t}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=po(o)}}function go(e,n){return!(!e||!n)&&(e===n||(!e||3!==e.nodeType)&&(n&&3===n.nodeType?go(e,n.parentNode):"contains"in e?e.contains(n):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(n))))}function uo(){for(var e=window,n=Z();n instanceof e.HTMLIFrameElement;){try{var t="string"==typeof n.contentWindow.location.href}catch(o){t=!1}if(!t)break;n=Z((e=n.contentWindow).document)}return n}function fo(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&("input"===n&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===n||"true"===e.contentEditable)}function mo(e){var n=uo(),t=e.focusedElem,o=e.selectionRange;if(n!==t&&t&&t.ownerDocument&&go(t.ownerDocument.documentElement,t)){if(null!==o&&fo(t))if(n=o.start,void 0===(e=o.end)&&(e=n),"selectionStart"in t)t.selectionStart=n,t.selectionEnd=Math.min(e,t.value.length);else if((e=(n=t.ownerDocument||document)&&n.defaultView||window).getSelection){e=e.getSelection();var s=t.textContent.length,i=Math.min(o.start,s);o=void 0===o.end?i:Math.min(o.end,s),!e.extend&&i>o&&(s=o,o=i,i=s),s=lo(t,i);var c=lo(t,o);s&&c&&(1!==e.rangeCount||e.anchorNode!==s.node||e.anchorOffset!==s.offset||e.focusNode!==c.node||e.focusOffset!==c.offset)&&((n=n.createRange()).setStart(s.node,s.offset),e.removeAllRanges(),i>o?(e.addRange(n),e.extend(c.node,c.offset)):(n.setEnd(c.node,c.offset),e.addRange(n)))}for(n=[],e=t;e=e.parentNode;)1===e.nodeType&&n.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof t.focus&&t.focus(),t=0;t=document.documentMode,bo=null,xo=null,yo=null,vo=!1;function So(e,n,t){var o=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;vo||null==bo||bo!==Z(o)||("selectionStart"in(o=bo)&&fo(o)?o={start:o.selectionStart,end:o.selectionEnd}:o={anchorNode:(o=(o.ownerDocument&&o.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:o.anchorOffset,focusNode:o.focusNode,focusOffset:o.focusOffset},yo&&ro(yo,o)||(yo=o,0<(o=Wo(xo,"onSelect")).length&&(n=new lt("onSelect","select",null,n,t),e.push({event:n,listeners:o}),n.target=bo)))}function _o(e,n){var t={};return t[e.toLowerCase()]=n.toLowerCase(),t["Webkit"+e]="webkit"+n,t["Moz"+e]="moz"+n,t}var ko={animationend:_o("Animation","AnimationEnd"),animationiteration:_o("Animation","AnimationIteration"),animationstart:_o("Animation","AnimationStart"),transitionend:_o("Transition","TransitionEnd")},wo={},Co={};function Po(e){if(wo[e])return wo[e];if(!ko[e])return e;var n,t=ko[e];for(n in t)if(t.hasOwnProperty(n)&&n in Co)return wo[e]=t[n];return e}l&&(Co=document.createElement("div").style,"AnimationEvent"in window||(delete ko.animationend.animation,delete ko.animationiteration.animation,delete ko.animationstart.animation),"TransitionEvent"in window||delete ko.transitionend.transition);var To=Po("animationend"),Eo=Po("animationiteration"),Ro=Po("animationstart"),Ao=Po("transitionend"),Do=new Map,Oo="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Mo(e,n){Do.set(e,n),r(n,[e])}for(var Lo=0;Lows||(e.current=ks[ws],ks[ws]=null,ws--)}function Ts(e,n){ws++,ks[ws]=e.current,e.current=n}var Es={},Rs=Cs(Es),As=Cs(!1),Ds=Es;function Os(e,n){var t=e.type.contextTypes;if(!t)return Es;var o=e.stateNode;if(o&&o.__reactInternalMemoizedUnmaskedChildContext===n)return o.__reactInternalMemoizedMaskedChildContext;var s,i={};for(s in t)i[s]=n[s];return o&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=i),i}function Ms(e){return null!=(e=e.childContextTypes)}function Ls(){Ps(As),Ps(Rs)}function Is(e,n,t){if(Rs.current!==Es)throw Error(i(168));Ts(Rs,n),Ts(As,t)}function js(e,n,t){var o=e.stateNode;if(n=n.childContextTypes,"function"!=typeof o.getChildContext)return t;for(var s in o=o.getChildContext())if(!(s in n))throw Error(i(108,U(e)||"Unknown",s));return F({},t,o)}function Fs(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Es,Ds=Rs.current,Ts(Rs,e),Ts(As,As.current),!0}function Ns(e,n,t){var o=e.stateNode;if(!o)throw Error(i(169));t?(e=js(e,n,Ds),o.__reactInternalMemoizedMergedChildContext=e,Ps(As),Ps(Rs),Ts(Rs,e)):Ps(As),Ts(As,t)}var Bs=null,Gs=!1,zs=!1;function Vs(e){null===Bs?Bs=[e]:Bs.push(e)}function Us(){if(!zs&&null!==Bs){zs=!0;var e=0,n=vn;try{var t=Bs;for(vn=1;e>=c,s-=c,Ks=1<<32-an(n)+s|t<m?(h=g,g=null):h=g.sibling;var b=d(s,g,a[m],r);if(null===b){null===g&&(g=h);break}e&&g&&null===b.alternate&&n(s,g),i=c(b,i,m),null===l?p=b:l.sibling=b,l=b,g=h}if(m===a.length)return t(s,g),ii&&Xs(s,m),p;if(null===g){for(;mh?(b=m,m=null):b=m.sibling;var y=d(s,m,x.value,p);if(null===y){null===m&&(m=b);break}e&&m&&null===y.alternate&&n(s,m),a=c(y,a,h),null===g?l=y:g.sibling=y,g=y,m=b}if(x.done)return t(s,m),ii&&Xs(s,h),l;if(null===m){for(;!x.done;h++,x=r.next())null!==(x=u(s,x.value,p))&&(a=c(x,a,h),null===g?l=x:g.sibling=x,g=x);return ii&&Xs(s,h),l}for(m=o(s,m);!x.done;h++,x=r.next())null!==(x=f(m,s,h,x.value,p))&&(e&&null!==x.alternate&&m.delete(null===x.key?h:x.key),a=c(x,a,h),null===g?l=x:g.sibling=x,g=x);return e&&m.forEach((function(e){return n(s,e)})),ii&&Xs(s,h),l}return function e(o,i,c,r){if("object"==typeof c&&null!==c&&c.type===k&&null===c.key&&(c=c.props.children),"object"==typeof c&&null!==c){switch(c.$$typeof){case S:e:{for(var p=c.key,l=i;null!==l;){if(l.key===p){if((p=c.type)===k){if(7===l.tag){t(o,l.sibling),(i=s(l,c.props.children)).return=o,o=i;break e}}else if(l.elementType===p||"object"==typeof p&&null!==p&&p.$$typeof===O&&yi(p)===l.type){t(o,l.sibling),(i=s(l,c.props)).ref=bi(o,l,c),i.return=o,o=i;break e}t(o,l);break}n(o,l),l=l.sibling}c.type===k?((i=Ip(c.props.children,o.mode,r,c.key)).return=o,o=i):((r=Lp(c.type,c.key,c.props,null,o.mode,r)).ref=bi(o,i,c),r.return=o,o=r)}return a(o);case _:e:{for(l=c.key;null!==i;){if(i.key===l){if(4===i.tag&&i.stateNode.containerInfo===c.containerInfo&&i.stateNode.implementation===c.implementation){t(o,i.sibling),(i=s(i,c.children||[])).return=o,o=i;break e}t(o,i);break}n(o,i),i=i.sibling}(i=Np(c,o.mode,r)).return=o,o=i}return a(o);case O:return e(o,i,(l=c._init)(c._payload),r)}if(ne(c))return m(o,i,c,r);if(I(c))return h(o,i,c,r);xi(o,c)}return"string"==typeof c&&""!==c||"number"==typeof c?(c=""+c,null!==i&&6===i.tag?(t(o,i.sibling),(i=s(i,c)).return=o,o=i):(t(o,i),(i=Fp(c,o.mode,r)).return=o,o=i),a(o)):t(o,i)}}var Si=vi(!0),_i=vi(!1),ki=Cs(null),wi=null,Ci=null,Pi=null;function Ti(){Pi=Ci=wi=null}function Ei(e){var n=ki.current;Ps(ki),e._currentValue=n}function Ri(e,n,t){for(;null!==e;){var o=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,null!==o&&(o.childLanes|=n)):null!==o&&(o.childLanes&n)!==n&&(o.childLanes|=n),e===t)break;e=e.return}}function Ai(e,n){wi=e,Pi=Ci=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(!!(e.lanes&n)&&(ya=!0),e.firstContext=null)}function Di(e){var n=e._currentValue;if(Pi!==e)if(e={context:e,memoizedValue:n,next:null},null===Ci){if(null===wi)throw Error(i(308));Ci=e,wi.dependencies={lanes:0,firstContext:e}}else Ci=Ci.next=e;return n}var Oi=null;function Mi(e){null===Oi?Oi=[e]:Oi.push(e)}function Li(e,n,t,o){var s=n.interleaved;return null===s?(t.next=t,Mi(n)):(t.next=s.next,s.next=t),n.interleaved=t,Ii(e,o)}function Ii(e,n){e.lanes|=n;var t=e.alternate;for(null!==t&&(t.lanes|=n),t=e,e=e.return;null!==e;)e.childLanes|=n,null!==(t=e.alternate)&&(t.childLanes|=n),t=e,e=e.return;return 3===t.tag?t.stateNode:null}var ji=!1;function Fi(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Ni(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Bi(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function Gi(e,n,t){var o=e.updateQueue;if(null===o)return null;if(o=o.shared,2&Er){var s=o.pending;return null===s?n.next=n:(n.next=s.next,s.next=n),o.pending=n,Ii(e,t)}return null===(s=o.interleaved)?(n.next=n,Mi(o)):(n.next=s.next,s.next=n),o.interleaved=n,Ii(e,t)}function zi(e,n,t){if(null!==(n=n.updateQueue)&&(n=n.shared,4194240&t)){var o=n.lanes;t|=o&=e.pendingLanes,n.lanes=t,yn(e,t)}}function Vi(e,n){var t=e.updateQueue,o=e.alternate;if(null!==o&&t===(o=o.updateQueue)){var s=null,i=null;if(null!==(t=t.firstBaseUpdate)){do{var c={eventTime:t.eventTime,lane:t.lane,tag:t.tag,payload:t.payload,callback:t.callback,next:null};null===i?s=i=c:i=i.next=c,t=t.next}while(null!==t);null===i?s=i=n:i=i.next=n}else s=i=n;return t={baseState:o.baseState,firstBaseUpdate:s,lastBaseUpdate:i,shared:o.shared,effects:o.effects},void(e.updateQueue=t)}null===(e=t.lastBaseUpdate)?t.firstBaseUpdate=n:e.next=n,t.lastBaseUpdate=n}function Ui(e,n,t,o){var s=e.updateQueue;ji=!1;var i=s.firstBaseUpdate,c=s.lastBaseUpdate,a=s.shared.pending;if(null!==a){s.shared.pending=null;var r=a,p=r.next;r.next=null,null===c?i=p:c.next=p,c=r;var l=e.alternate;null!==l&&((a=(l=l.updateQueue).lastBaseUpdate)!==c&&(null===a?l.firstBaseUpdate=p:a.next=p,l.lastBaseUpdate=r))}if(null!==i){var g=s.baseState;for(c=0,l=p=r=null,a=i;;){var u=a.lane,d=a.eventTime;if((o&u)===u){null!==l&&(l=l.next={eventTime:d,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var f=e,m=a;switch(u=n,d=t,m.tag){case 1:if("function"==typeof(f=m.payload)){g=f.call(d,g,u);break e}g=f;break e;case 3:f.flags=-65537&f.flags|128;case 0:if(null==(u="function"==typeof(f=m.payload)?f.call(d,g,u):f))break e;g=F({},g,u);break e;case 2:ji=!0}}null!==a.callback&&0!==a.lane&&(e.flags|=64,null===(u=s.effects)?s.effects=[a]:u.push(a))}else d={eventTime:d,lane:u,tag:a.tag,payload:a.payload,callback:a.callback,next:null},null===l?(p=l=d,r=g):l=l.next=d,c|=u;if(null===(a=a.next)){if(null===(a=s.shared.pending))break;a=(u=a).next,u.next=null,s.lastBaseUpdate=u,s.shared.pending=null}}if(null===l&&(r=g),s.baseState=r,s.firstBaseUpdate=p,s.lastBaseUpdate=l,null!==(n=s.shared.interleaved)){s=n;do{c|=s.lane,s=s.next}while(s!==n)}else null===i&&(s.shared.lanes=0);jr|=c,e.lanes=c,e.memoizedState=g}}function $i(e,n,t){if(e=n.effects,n.effects=null,null!==e)for(n=0;nt?t:4,e(!0);var o=ic.transition;ic.transition={};try{e(!1),n()}finally{vn=t,ic.transition=o}}function qc(){return yc().memoizedState}function Wc(e,n,t){var o=np(e);if(t={lane:o,action:t,hasEagerState:!1,eagerState:null,next:null},Jc(e))Yc(n,t);else if(null!==(t=Li(e,n,t,o))){tp(t,e,o,ep()),Kc(t,n,o)}}function Zc(e,n,t){var o=np(e),s={lane:o,action:t,hasEagerState:!1,eagerState:null,next:null};if(Jc(e))Yc(n,s);else{var i=e.alternate;if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=n.lastRenderedReducer))try{var c=n.lastRenderedState,a=i(c,t);if(s.hasEagerState=!0,s.eagerState=a,ao(a,c)){var r=n.interleaved;return null===r?(s.next=s,Mi(n)):(s.next=r.next,r.next=s),void(n.interleaved=s)}}catch(p){}null!==(t=Li(e,n,s,o))&&(tp(t,e,o,s=ep()),Kc(t,n,o))}}function Jc(e){var n=e.alternate;return e===ac||null!==n&&n===ac}function Yc(e,n){gc=lc=!0;var t=e.pending;null===t?n.next=n:(n.next=t.next,t.next=n),e.pending=n}function Kc(e,n,t){if(4194240&t){var o=n.lanes;t|=o&=e.pendingLanes,n.lanes=t,yn(e,t)}}var Qc={readContext:Di,useCallback:fc,useContext:fc,useEffect:fc,useImperativeHandle:fc,useInsertionEffect:fc,useLayoutEffect:fc,useMemo:fc,useReducer:fc,useRef:fc,useState:fc,useDebugValue:fc,useDeferredValue:fc,useTransition:fc,useMutableSource:fc,useSyncExternalStore:fc,useId:fc,unstable_isNewReconciler:!1},Xc={readContext:Di,useCallback:function(e,n){return xc().memoizedState=[e,void 0===n?null:n],e},useContext:Di,useEffect:Ic,useImperativeHandle:function(e,n,t){return t=null!=t?t.concat([e]):null,Mc(4194308,4,Bc.bind(null,n,e),t)},useLayoutEffect:function(e,n){return Mc(4194308,4,e,n)},useInsertionEffect:function(e,n){return Mc(4,2,e,n)},useMemo:function(e,n){var t=xc();return n=void 0===n?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var o=xc();return n=void 0!==t?t(n):n,o.memoizedState=o.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},o.queue=e,e=e.dispatch=Wc.bind(null,ac,e),[o.memoizedState,e]},useRef:function(e){return e={current:e},xc().memoizedState=e},useState:Ac,useDebugValue:zc,useDeferredValue:function(e){return xc().memoizedState=e},useTransition:function(){var e=Ac(!1),n=e[0];return e=Hc.bind(null,e[1]),xc().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,t){var o=ac,s=xc();if(ii){if(void 0===t)throw Error(i(407));t=t()}else{if(t=n(),null===Rr)throw Error(i(349));30&cc||Cc(o,n,t)}s.memoizedState=t;var c={value:t,getSnapshot:n};return s.queue=c,Ic(Tc.bind(null,o,c,e),[e]),o.flags|=2048,Dc(9,Pc.bind(null,o,c,t,n),void 0,null),t},useId:function(){var e=xc(),n=Rr.identifierPrefix;if(ii){var t=Qs;n=":"+n+"R"+(t=(Ks&~(1<<32-an(Ks)-1)).toString(32)+t),0<(t=uc++)&&(n+="H"+t.toString(32)),n+=":"}else n=":"+n+"r"+(t=dc++).toString(32)+":";return e.memoizedState=n},unstable_isNewReconciler:!1},ea={readContext:Di,useCallback:Vc,useContext:Di,useEffect:jc,useImperativeHandle:Gc,useInsertionEffect:Fc,useLayoutEffect:Nc,useMemo:Uc,useReducer:Sc,useRef:Oc,useState:function(){return Sc(vc)},useDebugValue:zc,useDeferredValue:function(e){return $c(yc(),rc.memoizedState,e)},useTransition:function(){return[Sc(vc)[0],yc().memoizedState]},useMutableSource:kc,useSyncExternalStore:wc,useId:qc,unstable_isNewReconciler:!1},na={readContext:Di,useCallback:Vc,useContext:Di,useEffect:jc,useImperativeHandle:Gc,useInsertionEffect:Fc,useLayoutEffect:Nc,useMemo:Uc,useReducer:_c,useRef:Oc,useState:function(){return _c(vc)},useDebugValue:zc,useDeferredValue:function(e){var n=yc();return null===rc?n.memoizedState=e:$c(n,rc.memoizedState,e)},useTransition:function(){return[_c(vc)[0],yc().memoizedState]},useMutableSource:kc,useSyncExternalStore:wc,useId:qc,unstable_isNewReconciler:!1};function ta(e,n){if(e&&e.defaultProps){for(var t in n=F({},n),e=e.defaultProps)void 0===n[t]&&(n[t]=e[t]);return n}return n}function oa(e,n,t,o){t=null==(t=t(o,n=e.memoizedState))?n:F({},n,t),e.memoizedState=t,0===e.lanes&&(e.updateQueue.baseState=t)}var sa={isMounted:function(e){return!!(e=e._reactInternals)&&Ve(e)===e},enqueueSetState:function(e,n,t){e=e._reactInternals;var o=ep(),s=np(e),i=Bi(o,s);i.payload=n,null!=t&&(i.callback=t),null!==(n=Gi(e,i,s))&&(tp(n,e,s,o),zi(n,e,s))},enqueueReplaceState:function(e,n,t){e=e._reactInternals;var o=ep(),s=np(e),i=Bi(o,s);i.tag=1,i.payload=n,null!=t&&(i.callback=t),null!==(n=Gi(e,i,s))&&(tp(n,e,s,o),zi(n,e,s))},enqueueForceUpdate:function(e,n){e=e._reactInternals;var t=ep(),o=np(e),s=Bi(t,o);s.tag=2,null!=n&&(s.callback=n),null!==(n=Gi(e,s,o))&&(tp(n,e,o,t),zi(n,e,o))}};function ia(e,n,t,o,s,i,c){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(o,i,c):!n.prototype||!n.prototype.isPureReactComponent||(!ro(t,o)||!ro(s,i))}function ca(e,n,t){var o=!1,s=Es,i=n.contextType;return"object"==typeof i&&null!==i?i=Di(i):(s=Ms(n)?Ds:Rs.current,i=(o=null!=(o=n.contextTypes))?Os(e,s):Es),n=new n(t,i),e.memoizedState=null!==n.state&&void 0!==n.state?n.state:null,n.updater=sa,e.stateNode=n,n._reactInternals=e,o&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=s,e.__reactInternalMemoizedMaskedChildContext=i),n}function aa(e,n,t,o){e=n.state,"function"==typeof n.componentWillReceiveProps&&n.componentWillReceiveProps(t,o),"function"==typeof n.UNSAFE_componentWillReceiveProps&&n.UNSAFE_componentWillReceiveProps(t,o),n.state!==e&&sa.enqueueReplaceState(n,n.state,null)}function ra(e,n,t,o){var s=e.stateNode;s.props=t,s.state=e.memoizedState,s.refs={},Fi(e);var i=n.contextType;"object"==typeof i&&null!==i?s.context=Di(i):(i=Ms(n)?Ds:Rs.current,s.context=Os(e,i)),s.state=e.memoizedState,"function"==typeof(i=n.getDerivedStateFromProps)&&(oa(e,n,i,t),s.state=e.memoizedState),"function"==typeof n.getDerivedStateFromProps||"function"==typeof s.getSnapshotBeforeUpdate||"function"!=typeof s.UNSAFE_componentWillMount&&"function"!=typeof s.componentWillMount||(n=s.state,"function"==typeof s.componentWillMount&&s.componentWillMount(),"function"==typeof s.UNSAFE_componentWillMount&&s.UNSAFE_componentWillMount(),n!==s.state&&sa.enqueueReplaceState(s,s.state,null),Ui(e,t,s,o),s.state=e.memoizedState),"function"==typeof s.componentDidMount&&(e.flags|=4194308)}function pa(e,n){try{var t="",o=n;do{t+=z(o),o=o.return}while(o);var s=t}catch(i){s="\nError generating stack: "+i.message+"\n"+i.stack}return{value:e,source:n,stack:s,digest:null}}function la(e,n,t){return{value:e,source:null,stack:null!=t?t:null,digest:null!=n?n:null}}function ga(e,n){try{console.error(n.value)}catch(t){setTimeout((function(){throw t}))}}var ua="function"==typeof WeakMap?WeakMap:Map;function da(e,n,t){(t=Bi(-1,t)).tag=3,t.payload={element:null};var o=n.value;return t.callback=function(){$r||($r=!0,Hr=o),ga(0,n)},t}function fa(e,n,t){(t=Bi(-1,t)).tag=3;var o=e.type.getDerivedStateFromError;if("function"==typeof o){var s=n.value;t.payload=function(){return o(s)},t.callback=function(){ga(0,n)}}var i=e.stateNode;return null!==i&&"function"==typeof i.componentDidCatch&&(t.callback=function(){ga(0,n),"function"!=typeof o&&(null===qr?qr=new Set([this]):qr.add(this));var e=n.stack;this.componentDidCatch(n.value,{componentStack:null!==e?e:""})}),t}function ma(e,n,t){var o=e.pingCache;if(null===o){o=e.pingCache=new ua;var s=new Set;o.set(n,s)}else void 0===(s=o.get(n))&&(s=new Set,o.set(n,s));s.has(t)||(s.add(t),e=Cp.bind(null,e,n,t),n.then(e,e))}function ha(e){do{var n;if((n=13===e.tag)&&(n=null===(n=e.memoizedState)||null!==n.dehydrated),n)return e;e=e.return}while(null!==e);return null}function ba(e,n,t,o,s){return 1&e.mode?(e.flags|=65536,e.lanes=s,e):(e===n?e.flags|=65536:(e.flags|=128,t.flags|=131072,t.flags&=-52805,1===t.tag&&(null===t.alternate?t.tag=17:((n=Bi(-1,1)).tag=2,Gi(t,n,1))),t.lanes|=1),e)}var xa=v.ReactCurrentOwner,ya=!1;function va(e,n,t,o){n.child=null===e?_i(n,null,t,o):Si(n,e.child,t,o)}function Sa(e,n,t,o,s){t=t.render;var i=n.ref;return Ai(n,s),o=hc(e,n,t,o,i,s),t=bc(),null===e||ya?(ii&&t&&ni(n),n.flags|=1,va(e,n,o,s),n.child):(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~s,$a(e,n,s))}function _a(e,n,t,o,s){if(null===e){var i=t.type;return"function"!=typeof i||Op(i)||void 0!==i.defaultProps||null!==t.compare||void 0!==t.defaultProps?((e=Lp(t.type,null,o,n,n.mode,s)).ref=n.ref,e.return=n,n.child=e):(n.tag=15,n.type=i,ka(e,n,i,o,s))}if(i=e.child,!(e.lanes&s)){var c=i.memoizedProps;if((t=null!==(t=t.compare)?t:ro)(c,o)&&e.ref===n.ref)return $a(e,n,s)}return n.flags|=1,(e=Mp(i,o)).ref=n.ref,e.return=n,n.child=e}function ka(e,n,t,o,s){if(null!==e){var i=e.memoizedProps;if(ro(i,o)&&e.ref===n.ref){if(ya=!1,n.pendingProps=o=i,!(e.lanes&s))return n.lanes=e.lanes,$a(e,n,s);131072&e.flags&&(ya=!0)}}return Pa(e,n,t,o,s)}function wa(e,n,t){var o=n.pendingProps,s=o.children,i=null!==e?e.memoizedState:null;if("hidden"===o.mode)if(1&n.mode){if(!(1073741824&t))return e=null!==i?i.baseLanes|t:t,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null,transitions:null},n.updateQueue=null,Ts(Mr,Or),Or|=e,null;n.memoizedState={baseLanes:0,cachePool:null,transitions:null},o=null!==i?i.baseLanes:t,Ts(Mr,Or),Or|=o}else n.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ts(Mr,Or),Or|=t;else null!==i?(o=i.baseLanes|t,n.memoizedState=null):o=t,Ts(Mr,Or),Or|=o;return va(e,n,s,t),n.child}function Ca(e,n){var t=n.ref;(null===e&&null!==t||null!==e&&e.ref!==t)&&(n.flags|=512,n.flags|=2097152)}function Pa(e,n,t,o,s){var i=Ms(t)?Ds:Rs.current;return i=Os(n,i),Ai(n,s),t=hc(e,n,t,o,i,s),o=bc(),null===e||ya?(ii&&o&&ni(n),n.flags|=1,va(e,n,t,s),n.child):(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~s,$a(e,n,s))}function Ta(e,n,t,o,s){if(Ms(t)){var i=!0;Fs(n)}else i=!1;if(Ai(n,s),null===n.stateNode)Ua(e,n),ca(n,t,o),ra(n,t,o,s),o=!0;else if(null===e){var c=n.stateNode,a=n.memoizedProps;c.props=a;var r=c.context,p=t.contextType;"object"==typeof p&&null!==p?p=Di(p):p=Os(n,p=Ms(t)?Ds:Rs.current);var l=t.getDerivedStateFromProps,g="function"==typeof l||"function"==typeof c.getSnapshotBeforeUpdate;g||"function"!=typeof c.UNSAFE_componentWillReceiveProps&&"function"!=typeof c.componentWillReceiveProps||(a!==o||r!==p)&&aa(n,c,o,p),ji=!1;var u=n.memoizedState;c.state=u,Ui(n,o,c,s),r=n.memoizedState,a!==o||u!==r||As.current||ji?("function"==typeof l&&(oa(n,t,l,o),r=n.memoizedState),(a=ji||ia(n,t,a,o,u,r,p))?(g||"function"!=typeof c.UNSAFE_componentWillMount&&"function"!=typeof c.componentWillMount||("function"==typeof c.componentWillMount&&c.componentWillMount(),"function"==typeof c.UNSAFE_componentWillMount&&c.UNSAFE_componentWillMount()),"function"==typeof c.componentDidMount&&(n.flags|=4194308)):("function"==typeof c.componentDidMount&&(n.flags|=4194308),n.memoizedProps=o,n.memoizedState=r),c.props=o,c.state=r,c.context=p,o=a):("function"==typeof c.componentDidMount&&(n.flags|=4194308),o=!1)}else{c=n.stateNode,Ni(e,n),a=n.memoizedProps,p=n.type===n.elementType?a:ta(n.type,a),c.props=p,g=n.pendingProps,u=c.context,"object"==typeof(r=t.contextType)&&null!==r?r=Di(r):r=Os(n,r=Ms(t)?Ds:Rs.current);var d=t.getDerivedStateFromProps;(l="function"==typeof d||"function"==typeof c.getSnapshotBeforeUpdate)||"function"!=typeof c.UNSAFE_componentWillReceiveProps&&"function"!=typeof c.componentWillReceiveProps||(a!==g||u!==r)&&aa(n,c,o,r),ji=!1,u=n.memoizedState,c.state=u,Ui(n,o,c,s);var f=n.memoizedState;a!==g||u!==f||As.current||ji?("function"==typeof d&&(oa(n,t,d,o),f=n.memoizedState),(p=ji||ia(n,t,p,o,u,f,r)||!1)?(l||"function"!=typeof c.UNSAFE_componentWillUpdate&&"function"!=typeof c.componentWillUpdate||("function"==typeof c.componentWillUpdate&&c.componentWillUpdate(o,f,r),"function"==typeof c.UNSAFE_componentWillUpdate&&c.UNSAFE_componentWillUpdate(o,f,r)),"function"==typeof c.componentDidUpdate&&(n.flags|=4),"function"==typeof c.getSnapshotBeforeUpdate&&(n.flags|=1024)):("function"!=typeof c.componentDidUpdate||a===e.memoizedProps&&u===e.memoizedState||(n.flags|=4),"function"!=typeof c.getSnapshotBeforeUpdate||a===e.memoizedProps&&u===e.memoizedState||(n.flags|=1024),n.memoizedProps=o,n.memoizedState=f),c.props=o,c.state=f,c.context=r,o=p):("function"!=typeof c.componentDidUpdate||a===e.memoizedProps&&u===e.memoizedState||(n.flags|=4),"function"!=typeof c.getSnapshotBeforeUpdate||a===e.memoizedProps&&u===e.memoizedState||(n.flags|=1024),o=!1)}return Ea(e,n,t,o,i,s)}function Ea(e,n,t,o,s,i){Ca(e,n);var c=!!(128&n.flags);if(!o&&!c)return s&&Ns(n,t,!1),$a(e,n,i);o=n.stateNode,xa.current=n;var a=c&&"function"!=typeof t.getDerivedStateFromError?null:o.render();return n.flags|=1,null!==e&&c?(n.child=Si(n,e.child,null,i),n.child=Si(n,null,a,i)):va(e,n,a,i),n.memoizedState=o.state,s&&Ns(n,t,!0),n.child}function Ra(e){var n=e.stateNode;n.pendingContext?Is(0,n.pendingContext,n.pendingContext!==n.context):n.context&&Is(0,n.context,!1),Yi(e,n.containerInfo)}function Aa(e,n,t,o,s){return fi(),mi(s),n.flags|=256,va(e,n,t,o),n.child}var Da,Oa,Ma,La,Ia={dehydrated:null,treeContext:null,retryLane:0};function ja(e){return{baseLanes:e,cachePool:null,transitions:null}}function Fa(e,n,t){var o,s=n.pendingProps,c=ec.current,a=!1,r=!!(128&n.flags);if((o=r)||(o=(null===e||null!==e.memoizedState)&&!!(2&c)),o?(a=!0,n.flags&=-129):null!==e&&null===e.memoizedState||(c|=1),Ts(ec,1&c),null===e)return li(n),null!==(e=n.memoizedState)&&null!==(e=e.dehydrated)?(1&n.mode?"$!"===e.data?n.lanes=8:n.lanes=1073741824:n.lanes=1,null):(r=s.children,e=s.fallback,a?(s=n.mode,a=n.child,r={mode:"hidden",children:r},1&s||null===a?a=jp(r,s,0,null):(a.childLanes=0,a.pendingProps=r),e=Ip(e,s,t,null),a.return=n,e.return=n,a.sibling=e,n.child=a,n.child.memoizedState=ja(t),n.memoizedState=Ia,e):Na(n,r));if(null!==(c=e.memoizedState)&&null!==(o=c.dehydrated))return function(e,n,t,o,s,c,a){if(t)return 256&n.flags?(n.flags&=-257,Ba(e,n,a,o=la(Error(i(422))))):null!==n.memoizedState?(n.child=e.child,n.flags|=128,null):(c=o.fallback,s=n.mode,o=jp({mode:"visible",children:o.children},s,0,null),(c=Ip(c,s,a,null)).flags|=2,o.return=n,c.return=n,o.sibling=c,n.child=o,1&n.mode&&Si(n,e.child,null,a),n.child.memoizedState=ja(a),n.memoizedState=Ia,c);if(!(1&n.mode))return Ba(e,n,a,null);if("$!"===s.data){if(o=s.nextSibling&&s.nextSibling.dataset)var r=o.dgst;return o=r,Ba(e,n,a,o=la(c=Error(i(419)),o,void 0))}if(r=!!(a&e.childLanes),ya||r){if(null!==(o=Rr)){switch(a&-a){case 4:s=2;break;case 16:s=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:s=32;break;case 536870912:s=268435456;break;default:s=0}0!==(s=s&(o.suspendedLanes|a)?0:s)&&s!==c.retryLane&&(c.retryLane=s,Ii(e,s),tp(o,e,s,-1))}return mp(),Ba(e,n,a,o=la(Error(i(421))))}return"$?"===s.data?(n.flags|=128,n.child=e.child,n=Tp.bind(null,e),s._reactRetry=n,null):(e=c.treeContext,si=ls(s.nextSibling),oi=n,ii=!0,ci=null,null!==e&&(Zs[Js++]=Ks,Zs[Js++]=Qs,Zs[Js++]=Ys,Ks=e.id,Qs=e.overflow,Ys=n),n=Na(n,o.children),n.flags|=4096,n)}(e,n,r,s,o,c,t);if(a){a=s.fallback,r=n.mode,o=(c=e.child).sibling;var p={mode:"hidden",children:s.children};return 1&r||n.child===c?(s=Mp(c,p)).subtreeFlags=14680064&c.subtreeFlags:((s=n.child).childLanes=0,s.pendingProps=p,n.deletions=null),null!==o?a=Mp(o,a):(a=Ip(a,r,t,null)).flags|=2,a.return=n,s.return=n,s.sibling=a,n.child=s,s=a,a=n.child,r=null===(r=e.child.memoizedState)?ja(t):{baseLanes:r.baseLanes|t,cachePool:null,transitions:r.transitions},a.memoizedState=r,a.childLanes=e.childLanes&~t,n.memoizedState=Ia,s}return e=(a=e.child).sibling,s=Mp(a,{mode:"visible",children:s.children}),!(1&n.mode)&&(s.lanes=t),s.return=n,s.sibling=null,null!==e&&(null===(t=n.deletions)?(n.deletions=[e],n.flags|=16):t.push(e)),n.child=s,n.memoizedState=null,s}function Na(e,n){return(n=jp({mode:"visible",children:n},e.mode,0,null)).return=e,e.child=n}function Ba(e,n,t,o){return null!==o&&mi(o),Si(n,e.child,null,t),(e=Na(n,n.pendingProps.children)).flags|=2,n.memoizedState=null,e}function Ga(e,n,t){e.lanes|=n;var o=e.alternate;null!==o&&(o.lanes|=n),Ri(e.return,n,t)}function za(e,n,t,o,s){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:o,tail:t,tailMode:s}:(i.isBackwards=n,i.rendering=null,i.renderingStartTime=0,i.last=o,i.tail=t,i.tailMode=s)}function Va(e,n,t){var o=n.pendingProps,s=o.revealOrder,i=o.tail;if(va(e,n,o.children,t),2&(o=ec.current))o=1&o|2,n.flags|=128;else{if(null!==e&&128&e.flags)e:for(e=n.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Ga(e,t,n);else if(19===e.tag)Ga(e,t,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===n)break e;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}o&=1}if(Ts(ec,o),1&n.mode)switch(s){case"forwards":for(t=n.child,s=null;null!==t;)null!==(e=t.alternate)&&null===nc(e)&&(s=t),t=t.sibling;null===(t=s)?(s=n.child,n.child=null):(s=t.sibling,t.sibling=null),za(n,!1,s,t,i);break;case"backwards":for(t=null,s=n.child,n.child=null;null!==s;){if(null!==(e=s.alternate)&&null===nc(e)){n.child=s;break}e=s.sibling,s.sibling=t,t=s,s=e}za(n,!0,t,null,i);break;case"together":za(n,!1,null,null,void 0);break;default:n.memoizedState=null}else n.memoizedState=null;return n.child}function Ua(e,n){!(1&n.mode)&&null!==e&&(e.alternate=null,n.alternate=null,n.flags|=2)}function $a(e,n,t){if(null!==e&&(n.dependencies=e.dependencies),jr|=n.lanes,!(t&n.childLanes))return null;if(null!==e&&n.child!==e.child)throw Error(i(153));if(null!==n.child){for(t=Mp(e=n.child,e.pendingProps),n.child=t,t.return=n;null!==e.sibling;)e=e.sibling,(t=t.sibling=Mp(e,e.pendingProps)).return=n;t.sibling=null}return n.child}function Ha(e,n){if(!ii)switch(e.tailMode){case"hidden":n=e.tail;for(var t=null;null!==n;)null!==n.alternate&&(t=n),n=n.sibling;null===t?e.tail=null:t.sibling=null;break;case"collapsed":t=e.tail;for(var o=null;null!==t;)null!==t.alternate&&(o=t),t=t.sibling;null===o?n||null===e.tail?e.tail=null:e.tail.sibling=null:o.sibling=null}}function qa(e){var n=null!==e.alternate&&e.alternate.child===e.child,t=0,o=0;if(n)for(var s=e.child;null!==s;)t|=s.lanes|s.childLanes,o|=14680064&s.subtreeFlags,o|=14680064&s.flags,s.return=e,s=s.sibling;else for(s=e.child;null!==s;)t|=s.lanes|s.childLanes,o|=s.subtreeFlags,o|=s.flags,s.return=e,s=s.sibling;return e.subtreeFlags|=o,e.childLanes=t,n}function Wa(e,n,t){var o=n.pendingProps;switch(ti(n),n.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return qa(n),null;case 1:case 17:return Ms(n.type)&&Ls(),qa(n),null;case 3:return o=n.stateNode,Ki(),Ps(As),Ps(Rs),oc(),o.pendingContext&&(o.context=o.pendingContext,o.pendingContext=null),null!==e&&null!==e.child||(ui(n)?n.flags|=4:null===e||e.memoizedState.isDehydrated&&!(256&n.flags)||(n.flags|=1024,null!==ci&&(cp(ci),ci=null))),Oa(e,n),qa(n),null;case 5:Xi(n);var s=Ji(Zi.current);if(t=n.type,null!==e&&null!=n.stateNode)Ma(e,n,t,o,s),e.ref!==n.ref&&(n.flags|=512,n.flags|=2097152);else{if(!o){if(null===n.stateNode)throw Error(i(166));return qa(n),null}if(e=Ji(qi.current),ui(n)){o=n.stateNode,t=n.type;var c=n.memoizedProps;switch(o[ds]=n,o[fs]=c,e=!!(1&n.mode),t){case"dialog":Go("cancel",o),Go("close",o);break;case"iframe":case"object":case"embed":Go("load",o);break;case"video":case"audio":for(s=0;s<\/script>",e=e.removeChild(e.firstChild)):"string"==typeof o.is?e=r.createElement(t,{is:o.is}):(e=r.createElement(t),"select"===t&&(r=e,o.multiple?r.multiple=!0:o.size&&(r.size=o.size))):e=r.createElementNS(e,t),e[ds]=n,e[fs]=o,Da(e,n,!1,!1),n.stateNode=e;e:{switch(r=ye(t,o),t){case"dialog":Go("cancel",e),Go("close",e),s=o;break;case"iframe":case"object":case"embed":Go("load",e),s=o;break;case"video":case"audio":for(s=0;sVr&&(n.flags|=128,o=!0,Ha(c,!1),n.lanes=4194304)}else{if(!o)if(null!==(e=nc(r))){if(n.flags|=128,o=!0,null!==(t=e.updateQueue)&&(n.updateQueue=t,n.flags|=4),Ha(c,!0),null===c.tail&&"hidden"===c.tailMode&&!r.alternate&&!ii)return qa(n),null}else 2*Ke()-c.renderingStartTime>Vr&&1073741824!==t&&(n.flags|=128,o=!0,Ha(c,!1),n.lanes=4194304);c.isBackwards?(r.sibling=n.child,n.child=r):(null!==(t=c.last)?t.sibling=r:n.child=r,c.last=r)}return null!==c.tail?(n=c.tail,c.rendering=n,c.tail=n.sibling,c.renderingStartTime=Ke(),n.sibling=null,t=ec.current,Ts(ec,o?1&t|2:1&t),n):(qa(n),null);case 22:case 23:return gp(),o=null!==n.memoizedState,null!==e&&null!==e.memoizedState!==o&&(n.flags|=8192),o&&1&n.mode?!!(1073741824&Or)&&(qa(n),6&n.subtreeFlags&&(n.flags|=8192)):qa(n),null;case 24:case 25:return null}throw Error(i(156,n.tag))}function Za(e,n){switch(ti(n),n.tag){case 1:return Ms(n.type)&&Ls(),65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 3:return Ki(),Ps(As),Ps(Rs),oc(),65536&(e=n.flags)&&!(128&e)?(n.flags=-65537&e|128,n):null;case 5:return Xi(n),null;case 13:if(Ps(ec),null!==(e=n.memoizedState)&&null!==e.dehydrated){if(null===n.alternate)throw Error(i(340));fi()}return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 19:return Ps(ec),null;case 4:return Ki(),null;case 10:return Ei(n.type._context),null;case 22:case 23:return gp(),null;default:return null}}Da=function(e,n){for(var t=n.child;null!==t;){if(5===t.tag||6===t.tag)e.appendChild(t.stateNode);else if(4!==t.tag&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===n)break;for(;null===t.sibling;){if(null===t.return||t.return===n)return;t=t.return}t.sibling.return=t.return,t=t.sibling}},Oa=function(){},Ma=function(e,n,t,o){var s=e.memoizedProps;if(s!==o){e=n.stateNode,Ji(qi.current);var i,c=null;switch(t){case"input":s=J(e,s),o=J(e,o),c=[];break;case"select":s=F({},s,{value:void 0}),o=F({},o,{value:void 0}),c=[];break;case"textarea":s=oe(e,s),o=oe(e,o),c=[];break;default:"function"!=typeof s.onClick&&"function"==typeof o.onClick&&(e.onclick=es)}for(l in xe(t,o),t=null,s)if(!o.hasOwnProperty(l)&&s.hasOwnProperty(l)&&null!=s[l])if("style"===l){var r=s[l];for(i in r)r.hasOwnProperty(i)&&(t||(t={}),t[i]="")}else"dangerouslySetInnerHTML"!==l&&"children"!==l&&"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(a.hasOwnProperty(l)?c||(c=[]):(c=c||[]).push(l,null));for(l in o){var p=o[l];if(r=null!=s?s[l]:void 0,o.hasOwnProperty(l)&&p!==r&&(null!=p||null!=r))if("style"===l)if(r){for(i in r)!r.hasOwnProperty(i)||p&&p.hasOwnProperty(i)||(t||(t={}),t[i]="");for(i in p)p.hasOwnProperty(i)&&r[i]!==p[i]&&(t||(t={}),t[i]=p[i])}else t||(c||(c=[]),c.push(l,t)),t=p;else"dangerouslySetInnerHTML"===l?(p=p?p.__html:void 0,r=r?r.__html:void 0,null!=p&&r!==p&&(c=c||[]).push(l,p)):"children"===l?"string"!=typeof p&&"number"!=typeof p||(c=c||[]).push(l,""+p):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&(a.hasOwnProperty(l)?(null!=p&&"onScroll"===l&&Go("scroll",e),c||r===p||(c=[])):(c=c||[]).push(l,p))}t&&(c=c||[]).push("style",t);var l=c;(n.updateQueue=l)&&(n.flags|=4)}},La=function(e,n,t,o){t!==o&&(n.flags|=4)};var Ja=!1,Ya=!1,Ka="function"==typeof WeakSet?WeakSet:Set,Qa=null;function Xa(e,n){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(o){wp(e,n,o)}else t.current=null}function er(e,n,t){try{t()}catch(o){wp(e,n,o)}}var nr=!1;function tr(e,n,t){var o=n.updateQueue;if(null!==(o=null!==o?o.lastEffect:null)){var s=o=o.next;do{if((s.tag&e)===e){var i=s.destroy;s.destroy=void 0,void 0!==i&&er(n,t,i)}s=s.next}while(s!==o)}}function or(e,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var t=n=n.next;do{if((t.tag&e)===e){var o=t.create;t.destroy=o()}t=t.next}while(t!==n)}}function sr(e){var n=e.ref;if(null!==n){var t=e.stateNode;e.tag,e=t,"function"==typeof n?n(e):n.current=e}}function ir(e){var n=e.alternate;null!==n&&(e.alternate=null,ir(n)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(n=e.stateNode)&&(delete n[ds],delete n[fs],delete n[hs],delete n[bs],delete n[xs])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function cr(e){return 5===e.tag||3===e.tag||4===e.tag}function ar(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||cr(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function rr(e,n,t){var o=e.tag;if(5===o||6===o)e=e.stateNode,n?8===t.nodeType?t.parentNode.insertBefore(e,n):t.insertBefore(e,n):(8===t.nodeType?(n=t.parentNode).insertBefore(e,t):(n=t).appendChild(e),null!=(t=t._reactRootContainer)||null!==n.onclick||(n.onclick=es));else if(4!==o&&null!==(e=e.child))for(rr(e,n,t),e=e.sibling;null!==e;)rr(e,n,t),e=e.sibling}function pr(e,n,t){var o=e.tag;if(5===o||6===o)e=e.stateNode,n?t.insertBefore(e,n):t.appendChild(e);else if(4!==o&&null!==(e=e.child))for(pr(e,n,t),e=e.sibling;null!==e;)pr(e,n,t),e=e.sibling}var lr=null,gr=!1;function ur(e,n,t){for(t=t.child;null!==t;)dr(e,n,t),t=t.sibling}function dr(e,n,t){if(cn&&"function"==typeof cn.onCommitFiberUnmount)try{cn.onCommitFiberUnmount(sn,t)}catch(a){}switch(t.tag){case 5:Ya||Xa(t,n);case 6:var o=lr,s=gr;lr=null,ur(e,n,t),gr=s,null!==(lr=o)&&(gr?(e=lr,t=t.stateNode,8===e.nodeType?e.parentNode.removeChild(t):e.removeChild(t)):lr.removeChild(t.stateNode));break;case 18:null!==lr&&(gr?(e=lr,t=t.stateNode,8===e.nodeType?ps(e.parentNode,t):1===e.nodeType&&ps(e,t),Un(e)):ps(lr,t.stateNode));break;case 4:o=lr,s=gr,lr=t.stateNode.containerInfo,gr=!0,ur(e,n,t),lr=o,gr=s;break;case 0:case 11:case 14:case 15:if(!Ya&&(null!==(o=t.updateQueue)&&null!==(o=o.lastEffect))){s=o=o.next;do{var i=s,c=i.destroy;i=i.tag,void 0!==c&&(2&i||4&i)&&er(t,n,c),s=s.next}while(s!==o)}ur(e,n,t);break;case 1:if(!Ya&&(Xa(t,n),"function"==typeof(o=t.stateNode).componentWillUnmount))try{o.props=t.memoizedProps,o.state=t.memoizedState,o.componentWillUnmount()}catch(a){wp(t,n,a)}ur(e,n,t);break;case 21:ur(e,n,t);break;case 22:1&t.mode?(Ya=(o=Ya)||null!==t.memoizedState,ur(e,n,t),Ya=o):ur(e,n,t);break;default:ur(e,n,t)}}function fr(e){var n=e.updateQueue;if(null!==n){e.updateQueue=null;var t=e.stateNode;null===t&&(t=e.stateNode=new Ka),n.forEach((function(n){var o=Ep.bind(null,e,n);t.has(n)||(t.add(n),n.then(o,o))}))}}function mr(e,n){var t=n.deletions;if(null!==t)for(var o=0;os&&(s=a),o&=~c}if(o=s,10<(o=(120>(o=Ke()-o)?120:480>o?480:1080>o?1080:1920>o?1920:3e3>o?3e3:4320>o?4320:1960*wr(o/1960))-o)){e.timeoutHandle=ss(Sp.bind(null,e,Gr,Ur),o);break}Sp(e,Gr,Ur);break;default:throw Error(i(329))}}}return op(e,Ke()),e.callbackNode===t?sp.bind(null,e):null}function ip(e,n){var t=Br;return e.current.memoizedState.isDehydrated&&(up(e,n).flags|=256),2!==(e=hp(e,n))&&(n=Gr,Gr=t,null!==n&&cp(n)),e}function cp(e){null===Gr?Gr=e:Gr.push.apply(Gr,e)}function ap(e,n){for(n&=~Nr,n&=~Fr,e.suspendedLanes|=n,e.pingedLanes&=~n,e=e.expirationTimes;0e?16:e,null===Zr)var o=!1;else{if(e=Zr,Zr=null,Jr=0,6&Er)throw Error(i(331));var s=Er;for(Er|=4,Qa=e.current;null!==Qa;){var c=Qa,a=c.child;if(16&Qa.flags){var r=c.deletions;if(null!==r){for(var p=0;pKe()-zr?up(e,0):Nr|=t),op(e,n)}function Pp(e,n){0===n&&(1&e.mode?(n=gn,!(130023424&(gn<<=1))&&(gn=4194304)):n=1);var t=ep();null!==(e=Ii(e,n))&&(xn(e,n,t),op(e,t))}function Tp(e){var n=e.memoizedState,t=0;null!==n&&(t=n.retryLane),Pp(e,t)}function Ep(e,n){var t=0;switch(e.tag){case 13:var o=e.stateNode,s=e.memoizedState;null!==s&&(t=s.retryLane);break;case 19:o=e.stateNode;break;default:throw Error(i(314))}null!==o&&o.delete(n),Pp(e,t)}function Rp(e,n){return We(e,n)}function Ap(e,n,t,o){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=o,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Dp(e,n,t,o){return new Ap(e,n,t,o)}function Op(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Mp(e,n){var t=e.alternate;return null===t?((t=Dp(e.tag,n,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=14680064&e.flags,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Lp(e,n,t,o,s,c){var a=2;if(o=e,"function"==typeof e)Op(e)&&(a=1);else if("string"==typeof e)a=5;else e:switch(e){case k:return Ip(t.children,s,c,n);case w:a=8,s|=8;break;case C:return(e=Dp(12,t,n,2|s)).elementType=C,e.lanes=c,e;case R:return(e=Dp(13,t,n,s)).elementType=R,e.lanes=c,e;case A:return(e=Dp(19,t,n,s)).elementType=A,e.lanes=c,e;case M:return jp(t,s,c,n);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case P:a=10;break e;case T:a=9;break e;case E:a=11;break e;case D:a=14;break e;case O:a=16,o=null;break e}throw Error(i(130,null==e?e:typeof e,""))}return(n=Dp(a,t,n,s)).elementType=e,n.type=o,n.lanes=c,n}function Ip(e,n,t,o){return(e=Dp(7,e,o,n)).lanes=t,e}function jp(e,n,t,o){return(e=Dp(22,e,o,n)).elementType=M,e.lanes=t,e.stateNode={isHidden:!1},e}function Fp(e,n,t){return(e=Dp(6,e,null,n)).lanes=t,e}function Np(e,n,t){return(n=Dp(4,null!==e.children?e.children:[],e.key,n)).lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function Bp(e,n,t,o,s){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=bn(0),this.expirationTimes=bn(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=bn(0),this.identifierPrefix=o,this.onRecoverableError=s,this.mutableSourceEagerHydrationData=null}function Gp(e,n,t,o,s,i,c,a,r){return e=new Bp(e,n,t,a,r),1===n?(n=1,!0===i&&(n|=8)):n=0,i=Dp(3,null,null,n),e.current=i,i.stateNode=e,i.memoizedState={element:o,isDehydrated:t,cache:null,transitions:null,pendingSuspenseBoundaries:null},Fi(i),e}function zp(e){if(!e)return Es;e:{if(Ve(e=e._reactInternals)!==e||1!==e.tag)throw Error(i(170));var n=e;do{switch(n.tag){case 3:n=n.stateNode.context;break e;case 1:if(Ms(n.type)){n=n.stateNode.__reactInternalMemoizedMergedChildContext;break e}}n=n.return}while(null!==n);throw Error(i(171))}if(1===e.tag){var t=e.type;if(Ms(t))return js(e,t,n)}return n}function Vp(e,n,t,o,s,i,c,a,r){return(e=Gp(t,o,!0,e,0,i,0,a,r)).context=zp(null),t=e.current,(i=Bi(o=ep(),s=np(t))).callback=null!=n?n:null,Gi(t,i,s),e.current.lanes=s,xn(e,s,o),op(e,o),e}function Up(e,n,t,o){var s=n.current,i=ep(),c=np(s);return t=zp(t),null===n.context?n.context=t:n.pendingContext=t,(n=Bi(i,c)).payload={element:e},null!==(o=void 0===o?null:o)&&(n.callback=o),null!==(e=Gi(s,n,c))&&(tp(e,s,c,i),zi(e,s,c)),c}function $p(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Hp(e,n){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var t=e.retryLane;e.retryLane=0!==t&&t{"use strict";var o=t(40961);n.createRoot=o.createRoot,n.hydrateRoot=o.hydrateRoot},40961:(e,n,t)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}(),e.exports=t(22551)},30115:e=>{var n="undefined"!=typeof Element,t="function"==typeof Map,o="function"==typeof Set,s="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function i(e,c){if(e===c)return!0;if(e&&c&&"object"==typeof e&&"object"==typeof c){if(e.constructor!==c.constructor)return!1;var a,r,p,l;if(Array.isArray(e)){if((a=e.length)!=c.length)return!1;for(r=a;0!=r--;)if(!i(e[r],c[r]))return!1;return!0}if(t&&e instanceof Map&&c instanceof Map){if(e.size!==c.size)return!1;for(l=e.entries();!(r=l.next()).done;)if(!c.has(r.value[0]))return!1;for(l=e.entries();!(r=l.next()).done;)if(!i(r.value[1],c.get(r.value[0])))return!1;return!0}if(o&&e instanceof Set&&c instanceof Set){if(e.size!==c.size)return!1;for(l=e.entries();!(r=l.next()).done;)if(!c.has(r.value[0]))return!1;return!0}if(s&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(c)){if((a=e.length)!=c.length)return!1;for(r=a;0!=r--;)if(e[r]!==c[r])return!1;return!0}if(e.constructor===RegExp)return e.source===c.source&&e.flags===c.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof c.valueOf)return e.valueOf()===c.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof c.toString)return e.toString()===c.toString();if((a=(p=Object.keys(e)).length)!==Object.keys(c).length)return!1;for(r=a;0!=r--;)if(!Object.prototype.hasOwnProperty.call(c,p[r]))return!1;if(n&&e instanceof Element)return!1;for(r=a;0!=r--;)if(("_owner"!==p[r]&&"__v"!==p[r]&&"__o"!==p[r]||!e.$$typeof)&&!i(e[p[r]],c[p[r]]))return!1;return!0}return e!=e&&c!=c}e.exports=function(e,n){try{return i(e,n)}catch(t){if((t.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw t}}},80545:(e,n,t)=>{"use strict";t.d(n,{mg:()=>X,vd:()=>H});var o=t(96540),s=t(5556),i=t.n(s),c=t(30115),a=t.n(c),r=t(20311),p=t.n(r),l=t(2833),g=t.n(l);function u(){return u=Object.assign||function(e){for(var n=1;n=0||(s[t]=e[t]);return s}var h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},x={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},v=Object.keys(h).map((function(e){return h[e]})),S={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},_=Object.keys(S).reduce((function(e,n){return e[S[n]]=n,e}),{}),k=function(e,n){for(var t=e.length-1;t>=0;t-=1){var o=e[t];if(Object.prototype.hasOwnProperty.call(o,n))return o[n]}return null},w=function(e){var n=k(e,h.TITLE),t=k(e,"titleTemplate");if(Array.isArray(n)&&(n=n.join("")),t&&n)return t.replace(/%s/g,(function(){return n}));var o=k(e,"defaultTitle");return n||o||void 0},C=function(e){return k(e,"onChangeClientState")||function(){}},P=function(e,n){return n.filter((function(n){return void 0!==n[e]})).map((function(n){return n[e]})).reduce((function(e,n){return u({},e,n)}),{})},T=function(e,n){return n.filter((function(e){return void 0!==e[h.BASE]})).map((function(e){return e[h.BASE]})).reverse().reduce((function(n,t){if(!n.length)for(var o=Object.keys(t),s=0;s/g,">").replace(/"/g,""").replace(/'/g,"'")},I=function(e){return Object.keys(e).reduce((function(n,t){var o=void 0!==e[t]?t+'="'+e[t]+'"':""+t;return n?n+" "+o:o}),"")},j=function(e,n){return void 0===n&&(n={}),Object.keys(e).reduce((function(n,t){return n[S[t]||t]=e[t],n}),n)},F=function(e,n){return n.map((function(n,t){var s,i=((s={key:t})["data-rh"]=!0,s);return Object.keys(n).forEach((function(e){var t=S[e]||e;"innerHTML"===t||"cssText"===t?i.dangerouslySetInnerHTML={__html:n.innerHTML||n.cssText}:i[t]=n[e]})),o.createElement(e,i)}))},N=function(e,n,t){switch(e){case h.TITLE:return{toComponent:function(){return t=n.titleAttributes,(s={key:e=n.title})["data-rh"]=!0,i=j(t,s),[o.createElement(h.TITLE,i,e)];var e,t,s,i},toString:function(){return function(e,n,t,o){var s=I(t),i=A(n);return s?"<"+e+' data-rh="true" '+s+">"+L(i,o)+""+e+">":"<"+e+' data-rh="true">'+L(i,o)+""+e+">"}(e,n.title,n.titleAttributes,t)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return j(n)},toString:function(){return I(n)}};default:return{toComponent:function(){return F(e,n)},toString:function(){return function(e,n,t){return n.reduce((function(n,o){var s=Object.keys(o).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,n){var s=void 0===o[n]?n:n+'="'+L(o[n],t)+'"';return e?e+" "+s:s}),""),i=o.innerHTML||o.cssText||"",c=-1===M.indexOf(e);return n+"<"+e+' data-rh="true" '+s+(c?"/>":">"+i+""+e+">")}),"")}(e,n,t)}}}},B=function(e){var n=e.baseTag,t=e.bodyAttributes,o=e.encode,s=e.htmlAttributes,i=e.noscriptTags,c=e.styleTags,a=e.title,r=void 0===a?"":a,p=e.titleAttributes,l=e.linkTags,g=e.metaTags,u=e.scriptTags,d={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var f=function(e){var n=e.linkTags,t=e.scriptTags,o=e.encode,s=D(e.metaTags,y),i=D(n,b),c=D(t,x);return{priorityMethods:{toComponent:function(){return[].concat(F(h.META,s.priority),F(h.LINK,i.priority),F(h.SCRIPT,c.priority))},toString:function(){return N(h.META,s.priority,o)+" "+N(h.LINK,i.priority,o)+" "+N(h.SCRIPT,c.priority,o)}},metaTags:s.default,linkTags:i.default,scriptTags:c.default}}(e);d=f.priorityMethods,l=f.linkTags,g=f.metaTags,u=f.scriptTags}return{priority:d,base:N(h.BASE,n,o),bodyAttributes:N("bodyAttributes",t,o),htmlAttributes:N("htmlAttributes",s,o),link:N(h.LINK,l,o),meta:N(h.META,g,o),noscript:N(h.NOSCRIPT,i,o),script:N(h.SCRIPT,u,o),style:N(h.STYLE,c,o),title:N(h.TITLE,{title:r,titleAttributes:p},o)}},G=[],z=function(e,n){var t=this;void 0===n&&(n="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){t.context.helmet=e},helmetInstances:{get:function(){return t.canUseDOM?G:t.instances},add:function(e){(t.canUseDOM?G:t.instances).push(e)},remove:function(e){var n=(t.canUseDOM?G:t.instances).indexOf(e);(t.canUseDOM?G:t.instances).splice(n,1)}}},this.context=e,this.canUseDOM=n,n||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},V=o.createContext({}),U=i().shape({setHelmet:i().func,helmetInstances:i().shape({get:i().func,add:i().func,remove:i().func})}),$="undefined"!=typeof document,H=function(e){function n(t){var o;return(o=e.call(this,t)||this).helmetData=new z(o.props.context,n.canUseDOM),o}return d(n,e),n.prototype.render=function(){return o.createElement(V.Provider,{value:this.helmetData.value},this.props.children)},n}(o.Component);H.canUseDOM=$,H.propTypes={context:i().shape({helmet:i().shape()}),children:i().node.isRequired},H.defaultProps={context:{}},H.displayName="HelmetProvider";var q=function(e,n){var t,o=document.head||document.querySelector(h.HEAD),s=o.querySelectorAll(e+"[data-rh]"),i=[].slice.call(s),c=[];return n&&n.length&&n.forEach((function(n){var o=document.createElement(e);for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&("innerHTML"===s?o.innerHTML=n.innerHTML:"cssText"===s?o.styleSheet?o.styleSheet.cssText=n.cssText:o.appendChild(document.createTextNode(n.cssText)):o.setAttribute(s,void 0===n[s]?"":n[s]));o.setAttribute("data-rh","true"),i.some((function(e,n){return t=n,o.isEqualNode(e)}))?i.splice(t,1):c.push(o)})),i.forEach((function(e){return e.parentNode.removeChild(e)})),c.forEach((function(e){return o.appendChild(e)})),{oldTags:i,newTags:c}},W=function(e,n){var t=document.getElementsByTagName(e)[0];if(t){for(var o=t.getAttribute("data-rh"),s=o?o.split(","):[],i=[].concat(s),c=Object.keys(n),a=0;a=0;g-=1)t.removeAttribute(i[g]);s.length===i.length?t.removeAttribute("data-rh"):t.getAttribute("data-rh")!==c.join(",")&&t.setAttribute("data-rh",c.join(","))}},Z=function(e,n){var t=e.baseTag,o=e.htmlAttributes,s=e.linkTags,i=e.metaTags,c=e.noscriptTags,a=e.onChangeClientState,r=e.scriptTags,p=e.styleTags,l=e.title,g=e.titleAttributes;W(h.BODY,e.bodyAttributes),W(h.HTML,o),function(e,n){void 0!==e&&document.title!==e&&(document.title=A(e)),W(h.TITLE,n)}(l,g);var u={baseTag:q(h.BASE,t),linkTags:q(h.LINK,s),metaTags:q(h.META,i),noscriptTags:q(h.NOSCRIPT,c),scriptTags:q(h.SCRIPT,r),styleTags:q(h.STYLE,p)},d={},f={};Object.keys(u).forEach((function(e){var n=u[e],t=n.newTags,o=n.oldTags;t.length&&(d[e]=t),o.length&&(f[e]=u[e].oldTags)})),n&&n(),a(e,d,f)},J=null,Y=function(e){function n(){for(var n,t=arguments.length,o=new Array(t),s=0;s elements are self-closing and can not contain children. Refer to our API for more information.")}},t.flattenArrayTypeChildren=function(e){var n,t=e.child,o=e.arrayTypeChildren;return u({},o,((n={})[t.type]=[].concat(o[t.type]||[],[u({},e.newChildProps,this.mapNestedChildrenToProps(t,e.nestedChildren))]),n))},t.mapObjectTypeChildren=function(e){var n,t,o=e.child,s=e.newProps,i=e.newChildProps,c=e.nestedChildren;switch(o.type){case h.TITLE:return u({},s,((n={})[o.type]=c,n.titleAttributes=u({},i),n));case h.BODY:return u({},s,{bodyAttributes:u({},i)});case h.HTML:return u({},s,{htmlAttributes:u({},i)});default:return u({},s,((t={})[o.type]=u({},i),t))}},t.mapArrayTypeChildrenToProps=function(e,n){var t=u({},n);return Object.keys(e).forEach((function(n){var o;t=u({},t,((o={})[n]=e[n],o))})),t},t.warnOnInvalidChildren=function(e,n){return p()(v.some((function(n){return e.type===n})),"function"==typeof e.type?"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+v.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),p()(!n||"string"==typeof n||Array.isArray(n)&&!n.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}"+e.type+"> ) Refer to our API for more information."),!0},t.mapChildrenToProps=function(e,n){var t=this,s={};return o.Children.forEach(e,(function(e){if(e&&e.props){var o=e.props,i=o.children,c=m(o,K),a=Object.keys(c).reduce((function(e,n){return e[_[n]||n]=c[n],e}),{}),r=e.type;switch("symbol"==typeof r?r=r.toString():t.warnOnInvalidChildren(e,i),r){case h.FRAGMENT:n=t.mapChildrenToProps(i,n);break;case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:s=t.flattenArrayTypeChildren({child:e,arrayTypeChildren:s,newChildProps:a,nestedChildren:i});break;default:n=t.mapObjectTypeChildren({child:e,newProps:n,newChildProps:a,nestedChildren:i})}}})),this.mapArrayTypeChildrenToProps(s,n)},t.render=function(){var e=this.props,n=e.children,t=m(e,Q),s=u({},t),i=t.helmetData;return n&&(s=this.mapChildrenToProps(n,s)),!i||i instanceof z||(i=new z(i.context,i.instances)),i?o.createElement(Y,u({},s,{context:i.value,helmetData:void 0})):o.createElement(V.Consumer,null,(function(e){return o.createElement(Y,u({},s,{context:e}))}))},n}(o.Component);X.propTypes={base:i().object,bodyAttributes:i().object,children:i().oneOfType([i().arrayOf(i().node),i().node]),defaultTitle:i().string,defer:i().bool,encodeSpecialCharacters:i().bool,htmlAttributes:i().object,link:i().arrayOf(i().object),meta:i().arrayOf(i().object),noscript:i().arrayOf(i().object),onChangeClientState:i().func,script:i().arrayOf(i().object),style:i().arrayOf(i().object),title:i().string,titleAttributes:i().object,titleTemplate:i().string,prioritizeSeoTags:i().bool,helmetData:i().object},X.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},X.displayName="Helmet"},22799:(e,n)=>{"use strict";var t="function"==typeof Symbol&&Symbol.for,o=t?Symbol.for("react.element"):60103,s=t?Symbol.for("react.portal"):60106,i=t?Symbol.for("react.fragment"):60107,c=t?Symbol.for("react.strict_mode"):60108,a=t?Symbol.for("react.profiler"):60114,r=t?Symbol.for("react.provider"):60109,p=t?Symbol.for("react.context"):60110,l=t?Symbol.for("react.async_mode"):60111,g=t?Symbol.for("react.concurrent_mode"):60111,u=t?Symbol.for("react.forward_ref"):60112,d=t?Symbol.for("react.suspense"):60113,f=t?Symbol.for("react.suspense_list"):60120,m=t?Symbol.for("react.memo"):60115,h=t?Symbol.for("react.lazy"):60116,b=t?Symbol.for("react.block"):60121,x=t?Symbol.for("react.fundamental"):60117,y=t?Symbol.for("react.responder"):60118,v=t?Symbol.for("react.scope"):60119;function S(e){if("object"==typeof e&&null!==e){var n=e.$$typeof;switch(n){case o:switch(e=e.type){case l:case g:case i:case a:case c:case d:return e;default:switch(e=e&&e.$$typeof){case p:case u:case h:case m:case r:return e;default:return n}}case s:return n}}}function _(e){return S(e)===g}n.AsyncMode=l,n.ConcurrentMode=g,n.ContextConsumer=p,n.ContextProvider=r,n.Element=o,n.ForwardRef=u,n.Fragment=i,n.Lazy=h,n.Memo=m,n.Portal=s,n.Profiler=a,n.StrictMode=c,n.Suspense=d,n.isAsyncMode=function(e){return _(e)||S(e)===l},n.isConcurrentMode=_,n.isContextConsumer=function(e){return S(e)===p},n.isContextProvider=function(e){return S(e)===r},n.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===o},n.isForwardRef=function(e){return S(e)===u},n.isFragment=function(e){return S(e)===i},n.isLazy=function(e){return S(e)===h},n.isMemo=function(e){return S(e)===m},n.isPortal=function(e){return S(e)===s},n.isProfiler=function(e){return S(e)===a},n.isStrictMode=function(e){return S(e)===c},n.isSuspense=function(e){return S(e)===d},n.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===i||e===g||e===a||e===c||e===d||e===f||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===m||e.$$typeof===r||e.$$typeof===p||e.$$typeof===u||e.$$typeof===x||e.$$typeof===y||e.$$typeof===v||e.$$typeof===b)},n.typeOf=S},44363:(e,n,t)=>{"use strict";e.exports=t(22799)},53259:(e,n,t)=>{"use strict";function o(e,n){e.prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n}function s(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(){return c=Object.assign||function(e){for(var n=1;n{"use strict";t.d(n,{u:()=>c,v:()=>a});var o=t(56347),s=t(58168),i=t(96540);function c(e,n,t){return void 0===t&&(t=[]),e.some((function(e){var s=e.path?(0,o.B6)(n,e):t.length?t[t.length-1].match:o.Ix.computeRootMatch(n);return s&&(t.push({route:e,match:s}),e.routes&&c(e.routes,n,t)),s})),t}function a(e,n,t){return void 0===n&&(n={}),void 0===t&&(t={}),e?i.createElement(o.dO,t,e.map((function(e,t){return i.createElement(o.qh,{key:e.key||t,path:e.path,exact:e.exact,strict:e.strict,render:function(t){return e.render?e.render((0,s.A)({},t,{},n,{route:e})):i.createElement(e.component,(0,s.A)({},t,n,{route:e}))}})}))):null}},54625:(e,n,t)=>{"use strict";t.d(n,{I9:()=>g,Kd:()=>l,N_:()=>b,k2:()=>v});var o=t(56347),s=t(42892),i=t(96540),c=t(31513),a=t(58168),r=t(98587),p=t(11561),l=function(e){function n(){for(var n,t=arguments.length,o=new Array(t),s=0;s{"use strict";t.d(n,{B6:()=>k,Ix:()=>y,W6:()=>O,XZ:()=>x,dO:()=>A,qh:()=>w,zy:()=>M});var o=t(42892),s=t(96540),i=t(5556),c=t.n(i),a=t(31513),r=t(11561),p=t(58168),l=t(35302),g=t.n(l),u=(t(44363),t(98587)),d=(t(4146),1073741823),f="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==t.g?t.g:{};var m=s.createContext||function(e,n){var t,i,a="__create-react-context-"+function(){var e="__global_unique_id__";return f[e]=(f[e]||0)+1}()+"__",r=function(e){function t(){for(var n,t,o,s=arguments.length,i=new Array(s),c=0;c{"use strict";var o=t(96540),s=Symbol.for("react.element"),i=Symbol.for("react.fragment"),c=Object.prototype.hasOwnProperty,a=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,r={key:!0,ref:!0,__self:!0,__source:!0};function p(e,n,t){var o,i={},p=null,l=null;for(o in void 0!==t&&(p=""+t),void 0!==n.key&&(p=""+n.key),void 0!==n.ref&&(l=n.ref),n)c.call(n,o)&&!r.hasOwnProperty(o)&&(i[o]=n[o]);if(e&&e.defaultProps)for(o in n=e.defaultProps)void 0===i[o]&&(i[o]=n[o]);return{$$typeof:s,type:e,key:p,ref:l,props:i,_owner:a.current}}n.Fragment=i,n.jsx=p,n.jsxs=p},15287:(e,n)=>{"use strict";var t=Symbol.for("react.element"),o=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),c=Symbol.for("react.profiler"),a=Symbol.for("react.provider"),r=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),l=Symbol.for("react.suspense"),g=Symbol.for("react.memo"),u=Symbol.for("react.lazy"),d=Symbol.iterator;var f={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,h={};function b(e,n,t){this.props=e,this.context=n,this.refs=h,this.updater=t||f}function x(){}function y(e,n,t){this.props=e,this.context=n,this.refs=h,this.updater=t||f}b.prototype.isReactComponent={},b.prototype.setState=function(e,n){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,n,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},x.prototype=b.prototype;var v=y.prototype=new x;v.constructor=y,m(v,b.prototype),v.isPureReactComponent=!0;var S=Array.isArray,_=Object.prototype.hasOwnProperty,k={current:null},w={key:!0,ref:!0,__self:!0,__source:!0};function C(e,n,o){var s,i={},c=null,a=null;if(null!=n)for(s in void 0!==n.ref&&(a=n.ref),void 0!==n.key&&(c=""+n.key),n)_.call(n,s)&&!w.hasOwnProperty(s)&&(i[s]=n[s]);var r=arguments.length-2;if(1===r)i.children=o;else if(1{"use strict";e.exports=t(15287)},74848:(e,n,t)=>{"use strict";e.exports=t(21020)},7463:(e,n)=>{"use strict";function t(e,n){var t=e.length;e.push(n);e:for(;0>>1,s=e[o];if(!(0>>1;oi(r,t))pi(l,r)?(e[o]=l,e[p]=t,o=p):(e[o]=r,e[a]=t,o=a);else{if(!(pi(l,t)))break e;e[o]=l,e[p]=t,o=p}}}return n}function i(e,n){var t=e.sortIndex-n.sortIndex;return 0!==t?t:e.id-n.id}if("object"==typeof performance&&"function"==typeof performance.now){var c=performance;n.unstable_now=function(){return c.now()}}else{var a=Date,r=a.now();n.unstable_now=function(){return a.now()-r}}var p=[],l=[],g=1,u=null,d=3,f=!1,m=!1,h=!1,b="function"==typeof setTimeout?setTimeout:null,x="function"==typeof clearTimeout?clearTimeout:null,y="undefined"!=typeof setImmediate?setImmediate:null;function v(e){for(var n=o(l);null!==n;){if(null===n.callback)s(l);else{if(!(n.startTime<=e))break;s(l),n.sortIndex=n.expirationTime,t(p,n)}n=o(l)}}function S(e){if(h=!1,v(e),!m)if(null!==o(p))m=!0,M(_);else{var n=o(l);null!==n&&L(S,n.startTime-e)}}function _(e,t){m=!1,h&&(h=!1,x(P),P=-1),f=!0;var i=d;try{for(v(t),u=o(p);null!==u&&(!(u.expirationTime>t)||e&&!R());){var c=u.callback;if("function"==typeof c){u.callback=null,d=u.priorityLevel;var a=c(u.expirationTime<=t);t=n.unstable_now(),"function"==typeof a?u.callback=a:u===o(p)&&s(p),v(t)}else s(p);u=o(p)}if(null!==u)var r=!0;else{var g=o(l);null!==g&&L(S,g.startTime-t),r=!1}return r}finally{u=null,d=i,f=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var k,w=!1,C=null,P=-1,T=5,E=-1;function R(){return!(n.unstable_now()-Ee||125c?(e.sortIndex=i,t(l,e),null===o(p)&&e===o(l)&&(h?(x(P),P=-1):h=!0,L(S,i-c))):(e.sortIndex=a,t(p,e),m||f||(m=!0,M(_))),e},n.unstable_shouldYield=R,n.unstable_wrapCallback=function(e){var n=d;return function(){var t=d;d=n;try{return e.apply(this,arguments)}finally{d=t}}}},69982:(e,n,t)=>{"use strict";e.exports=t(7463)},2833:e=>{e.exports=function(e,n,t,o){var s=t?t.call(o,e,n):void 0;if(void 0!==s)return!!s;if(e===n)return!0;if("object"!=typeof e||!e||"object"!=typeof n||!n)return!1;var i=Object.keys(e),c=Object.keys(n);if(i.length!==c.length)return!1;for(var a=Object.prototype.hasOwnProperty.bind(n),r=0;r{"use strict";t.r(n),t.d(n,{default:()=>o});const o={title:"SeaSketch Geoprocessing",tagline:"Spatial analysis and reporting framework for the SeaSketch platform",favicon:"img/favicon.ico",url:"https://seasketch.github.io",baseUrl:"/geoprocessing/",organizationName:"seasketch",projectName:"geoprocessing",trailingSlash:!0,onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},plugins:[["docusaurus-plugin-typedoc",{entryPoints:["../packages/geoprocessing/src/index.ts","../packages/geoprocessing/client-ui.ts","../packages/geoprocessing/client-core.ts","../packages/geoprocessing/dataproviders.ts"],tsconfig:"../packages/geoprocessing/tsconfig.json",plugin:["./typedoc-plugin.mjs"],readme:"none",indexFormat:"table",disableSources:!0,groupOrder:["Classes","Interfaces","Enums"],sidebar:{pretty:!0},textContentMappings:{"title.indexPage":"Typescript API","title.memberPage":"{name}"},parametersFormat:"table",enumMembersFormat:"table",useCodeBlocks:!0}]],presets:[["classic",{docs:{sidebarPath:"./sidebars.ts",editUrl:"https://github.com/seasketch/geoprocessing/tree/main/website/templates/shared/"},blog:!1,theme:{customCss:"./src/css/custom.css"}}]],themeConfig:{image:"img/docusaurus-social-card.jpg",navbar:{title:"Geoprocessing",logo:{alt:"Site Logo",src:"img/ss-logo.png"},items:[{type:"docSidebar",sidebarId:"tutorialSidebar",position:"left",label:"Docs",to:"/docs"},{to:"/storybook",label:"Storybook",position:"left"},{type:"docsVersionDropdown",position:"right",dropdownActiveClassDisabled:!0,dropdownItemsBefore:[],dropdownItemsAfter:[]},{href:"https://github.com/seasketch/geoprocessing",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Getting Started",to:"/docs"},{label:"Contributing",to:"/docs/contributing"}]},{title:"More",items:[{label:"UI Component Library",href:"https://seasketch.github.io/geoprocessing/storybook/index.html"},{label:"GitHub",href:"https://github.com/seasketch/geoprocessing"},{label:"SeaSketch",href:"https://seasketch.org"},{label:"SeaSketch GitHub",href:"https://github.com/seasketch/next"}]}],copyright:"Copyright \xa9 2024 The Regents of the University of California."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:[],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},blog:{sidebar:{groupByYear:!0}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},baseUrlIssueBanner:!0,future:{experimental_storage:{type:"localStorage",namespace:!1},experimental_router:"browser"},onBrokenAnchors:"warn",onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{format:"mdx",mermaid:!1,mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0},anchors:{maintainCase:!1}}}},58168:(e,n,t)=>{"use strict";function o(){return o=Object.assign?Object.assign.bind():function(e){for(var n=1;no})},42892:(e,n,t)=>{"use strict";function o(e,n){return o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,n){return e.__proto__=n,e},o(e,n)}function s(e,n){e.prototype=Object.create(n.prototype),e.prototype.constructor=e,o(e,n)}t.d(n,{A:()=>s})},98587:(e,n,t)=>{"use strict";function o(e,n){if(null==e)return{};var t={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(n.includes(o))continue;t[o]=e[o]}return t}t.d(n,{A:()=>o})},34164:(e,n,t)=>{"use strict";function o(e){var n,t,s="";if("string"==typeof e||"number"==typeof e)s+=e;else if("object"==typeof e)if(Array.isArray(e)){var i=e.length;for(n=0;ns});const s=function(){for(var e,n,t=0,s="",i=arguments.length;t{"use strict";t.d(n,{My:()=>T,f4:()=>te});var o,s,i,c,a,r,p,l=t(96540),g=t(34164),u=Object.create,d=Object.defineProperty,f=Object.defineProperties,m=Object.getOwnPropertyDescriptor,h=Object.getOwnPropertyDescriptors,b=Object.getOwnPropertyNames,x=Object.getOwnPropertySymbols,y=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty,S=Object.prototype.propertyIsEnumerable,_=(e,n,t)=>n in e?d(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,k=(e,n)=>{for(var t in n||(n={}))v.call(n,t)&&_(e,t,n[t]);if(x)for(var t of x(n))S.call(n,t)&&_(e,t,n[t]);return e},w=(e,n)=>f(e,h(n)),C=(e,n)=>{var t={};for(var o in e)v.call(e,o)&&n.indexOf(o)<0&&(t[o]=e[o]);if(null!=e&&x)for(var o of x(e))n.indexOf(o)<0&&S.call(e,o)&&(t[o]=e[o]);return t},P=(o={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,n){var t=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,t={},o={util:{encode:function e(n){return n instanceof s?new s(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=g.reach);k+=_.value.length,_=_.next){var w=_.value;if(n.length>e.length)return;if(!(w instanceof s)){var C,P=1;if(x){if(!(C=i(S,k,e,b))||C.index>=e.length)break;var T=C.index,E=C.index+C[0].length,R=k;for(R+=_.value.length;T>=R;)R+=(_=_.next).value.length;if(k=R-=_.value.length,_.value instanceof s)continue;for(var A=_;A!==n.tail&&(Rg.reach&&(g.reach=L);var I=_.prev;if(O&&(I=r(n,I,O),k+=O.length),p(n,I,P),_=r(n,I,new s(u,h?o.tokenize(D,h):D,y,D)),M&&r(n,_,M),P>1){var j={cause:u+","+f,reach:L};c(e,n,t,_.prev,k,j),g&&j.reach>g.reach&&(g.reach=j.reach)}}}}}}function a(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function r(e,n,t){var o=n.next,s={value:t,prev:n,next:o};return n.next=s,o.prev=s,e.length++,s}function p(e,n,t){for(var o=n.next,s=0;s"+i.content+""+i.tag+">"},o}();n.exports=t,t.default=t}},function(){return s||(0,o[b(o)[0]])((s={exports:{}}).exports,s),s.exports}),T=((e,n,t)=>(t=null!=e?u(y(e)):{},((e,n,t,o)=>{if(n&&"object"==typeof n||"function"==typeof n)for(let s of b(n))v.call(e,s)||s===t||d(e,s,{get:()=>n[s],enumerable:!(o=m(n,s))||o.enumerable});return e})(!n&&e&&e.__esModule?t:d(t,"default",{value:e,enumerable:!0}),e)))(P());T.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/?[\da-f]{1,8};/i]},T.languages.markup.tag.inside["attr-value"].inside.entity=T.languages.markup.entity,T.languages.markup.doctype.inside["internal-subset"].inside=T.languages.markup,T.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(T.languages.markup.tag,"addInlined",{value:function(e,n){var t;(n=((t=((t={})["language-"+n]={pattern:/(^$)/i,lookbehind:!0,inside:T.languages[n]},t.cdata=/^$/i,{"included-cdata":{pattern://i,inside:t}}))["language-"+n]={pattern:/[\s\S]+/,inside:T.languages[n]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:t},T.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(T.languages.markup.tag,"addAttribute",{value:function(e,n){T.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:T.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),T.languages.html=T.languages.markup,T.languages.mathml=T.languages.markup,T.languages.svg=T.languages.markup,T.languages.xml=T.languages.extend("markup",{}),T.languages.ssml=T.languages.xml,T.languages.atom=T.languages.xml,T.languages.rss=T.languages.xml,i=T,c={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},r="(?:[^\\\\-]|"+(a=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/).source+")",r=RegExp(r+"-"+r),p={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"},i.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:r,inside:{escape:a,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":c,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:a}},"special-escape":c,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":p}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:a,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":p}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}},T.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},T.languages.javascript=T.languages.extend("clike",{"class-name":[T.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),T.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,T.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:T.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:T.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:T.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:T.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:T.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),T.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:T.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),T.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),T.languages.markup&&(T.languages.markup.tag.addInlined("script","javascript"),T.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),T.languages.js=T.languages.javascript,T.languages.actionscript=T.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<|>>?>?|[!=]=?)=?|[~?@]/}),T.languages.actionscript["class-name"].alias="function",delete T.languages.actionscript.parameter,delete T.languages.actionscript["literal-property"],T.languages.markup&&T.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:T.languages.markup}}),function(e){var n=/#(?!\{).+/,t={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:n,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:t}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:n,interpolation:t}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:t}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(T),function(e){var n=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(n,"addSupport",{value:function(n,t){(n="string"==typeof n?[n]:n).forEach((function(n){var o=function(e){e.inside||(e.inside={}),e.inside.rest=t},s="doc-comment";if(i=e.languages[n]){var i,c=i[s];if((c=c||(i=e.languages.insertBefore(n,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[s])instanceof RegExp&&(c=i[s]={pattern:c}),Array.isArray(c))for(var a=0,r=c.length;a|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=n,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:n,number:t,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:n,number:t})}(T),function(e){var n=/[*&][^\s[\]{},]+/,t=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,o="(?:"+t.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+t.source+")?)",s=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),i=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function c(e,n){n=(n||"").replace(/m/g,"")+"m";var t=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return o})).replace(/<>/g,(function(){return e}));return RegExp(t,n)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return o}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return o})).replace(/<>/g,(function(){return"(?:"+s+"|"+i+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:c(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:c(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:c(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:c(i),lookbehind:!0,greedy:!0},number:{pattern:c(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:t,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(T),function(e){var n=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function t(e){return e=e.replace(//g,(function(){return n})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var o=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,s=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return o})),i=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,c=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+s+i+"(?:"+s+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+s+i+")(?:"+s+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(o),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+s+")"+i+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+s+"$"),inside:{"table-header":{pattern:RegExp(o),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:t(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:t(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:t(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:t(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(n){["url","bold","italic","strike","code-snippet"].forEach((function(t){n!==t&&(e.languages.markdown[n].inside.content.inside[t]=e.languages.markdown[t])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(n){if(n&&"string"!=typeof n)for(var t=0,o=n.length;t",quot:'"'},r=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(T),T.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:T.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},T.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var n=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),t=0;t?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var n=e.languages.javascript["template-string"],t=n.pattern.source,o=n.inside.interpolation,s=o.inside["interpolation-punctuation"],i=o.pattern.source;function c(n,o){if(e.languages[n])return{pattern:RegExp("((?:"+o+")\\s*)"+t),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:n}}}}function a(n,t,o){return n={code:n,grammar:t,language:o},e.hooks.run("before-tokenize",n),n.tokens=e.tokenize(n.code,n.grammar),e.hooks.run("after-tokenize",n),n.tokens}function r(n,t,c){var r=e.tokenize(n,{interpolation:{pattern:RegExp(i),lookbehind:!0}}),p=0,l={},g=(r=a(r.map((function(e){if("string"==typeof e)return e;var t,o;for(e=e.content;-1!==n.indexOf((o=p++,t="___"+c.toUpperCase()+"_"+o+"___")););return l[t]=e,t})).join(""),t,c),Object.keys(l));return p=0,function n(t){for(var i=0;i=g.length)return;var c,r,u,d,f,m,h,b=t[i];"string"==typeof b||"string"==typeof b.content?(c=g[p],-1!==(h=(m="string"==typeof b?b:b.content).indexOf(c))&&(++p,r=m.substring(0,h),f=l[c],u=void 0,(d={})["interpolation-punctuation"]=s,3===(d=e.tokenize(f,d)).length&&((u=[1,1]).push.apply(u,a(d[1],e.languages.javascript,"javascript")),d.splice.apply(d,u)),u=new e.Token("interpolation",d,o.alias,f),d=m.substring(h+c.length),f=[],r&&f.push(r),f.push(u),d&&(n(m=[d]),f.push.apply(f,m)),"string"==typeof b?(t.splice.apply(t,[i,1].concat(f)),i+=f.length-1):b.content=f)):(h=b.content,Array.isArray(h)?n(h):n([h]))}}(r),new e.Token(c,r,"language-"+c,n)}e.languages.javascript["template-string"]=[c("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),c("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),c("svg",/\bsvg/.source),c("markdown",/\b(?:markdown|md)/.source),c("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),c("sql",/\bsql/.source),n].filter(Boolean);var p={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function l(e){return"string"==typeof e?e:Array.isArray(e)?e.map(l).join(""):l(e.content)}e.hooks.add("after-tokenize",(function(n){n.language in p&&function n(t){for(var o=0,s=t.length;o]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var n=e.languages.extend("typescript",{});delete n["class-name"],e.languages.typescript["class-name"].inside=n,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:n}}}}),e.languages.ts=e.languages.typescript}(T),function(e){var n=e.languages.javascript,t=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,o="(@(?:arg|argument|param|property)\\s+(?:"+t+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(o+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(o+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:n,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(//g,(function(){return t}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+t),lookbehind:!0,inside:{string:n.string,number:n.number,boolean:n.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:n,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(T),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(T),T.languages.n4js=T.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),T.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),T.languages.n4jsd=T.languages.n4js,function(e){function n(e,n){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),n)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:n(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:n(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:n(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var t=["function","function-variable","method","method-variable","property-access"],o=0;o*\.{3}(?:[^{}]|)*\})/.source;function i(e,n){return e=e.replace(//g,(function(){return t})).replace(//g,(function(){return o})).replace(//g,(function(){return s})),RegExp(e,n)}function c(n){for(var t=[],o=0;o"!==s.content[s.content.length-1].content&&t.push({tagName:a(s.content[0].content[1]),openedBraces:0}):0+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=n.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:i(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:i(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var a=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(a).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||c(e.tokens)}))}(T),function(e){var n=e.util.clone(e.languages.typescript);(n=(e.languages.tsx=e.languages.extend("jsx",n),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(T),T.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},T.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=T.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var n={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:n},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:n},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(T),T.languages.c=T.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),T.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),T.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},T.languages.c.string],char:T.languages.c.char,comment:T.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:T.languages.c}}}}),T.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete T.languages.c.boolean,T.languages.objectivec=T.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete T.languages.objectivec["class-name"],T.languages.objc=T.languages.objectivec,T.languages.reason=T.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),T.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete T.languages.reason.function,function(e){for(var n=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|)*\*\//.source,t=0;t<2;t++)n=n.replace(/