PageSourceSearch

https://cartographer.io/assets/pricing-BXH67WDk.js

js cartographer.io collected 2026-10-02 15:34:52 UTC 35,511 bytes, 78 lines download raw bytes

1import{j as jsxRuntimeExports}from"./jsx-runtime-Df6ggGJy.js";import{r as reactExports}from"./components-CKwlQZll.js";import{C as Container}from"./Container-D4JM-Zpl.js";import{c as classNames,D as DemoLink,M as MenuBar,F as Footer}from"./MenuBar-CHwv5768.js";import{d as defaultOutdent}from"./index-BxBVU389.js";import{M as Markdown}from"./index-CPudyNhY.js";const contours="/img/backgrounds/contours.png";function Contours(t){const{className:r,children:e}=t;return jsxRuntimeExports.jsx("div",{className:classNames(["bg-blue-900 text-white",r]),style:{backgroundImage:`url(${contours})`},children:e})}function LinkTarget({id:t}){return jsxRuntimeExports.jsx("span",{id:t,className:"link-target"})}function plan(t){return t}function publicPrice(t,r,e=0,u=0){return{pricingType:"public",unitType:t,unitAmount:r,flatAmount:e,inclusiveUnits:u}}const premiumPrice={pricingType:"premium"},commercialStarter={id:"Starter",title:"Starter",price:publicPrice("free",0),limits:{maxUsers:2,maxProjects:1},features:{projectsAndUsers:{teams:!1},dataEntry:{uploadDataAndFiles:!0,exportAtAnyTime:!0,webSite:!0,mobileApp:!1,offlineModeOnMobile:!1},locationEntry:{clickOnMap:!0,clickOnAerialPhoto:!0,geolocation:!0,gpsOrNgr:!0,what3words:!1,preDefinedSites:!1},maps:{mapWidgets:!0,offlineMapsOnMobile:!1,whiteLabelMaps:!1},integrations:{arcgisOnline:!1,googleDrive:!1,mailchimp:!1,custom:!1},rca:{rca:!0},billingAndSupport:{nonProfitPricing:!0,setupAssistance:!0,payByInvoice:!1,standardSupport:!0,prioritySupport:!1,premiumSupport:!1}}},commercialStandard={id:"Standard",title:"Standard",price:publicPrice("user",25),limits:{maxUsers:null,maxProjects:null},features:{projectsAndUsers:{teams:!1},dataEntry:{uploadDataAndFiles:!0,exportAtAnyTime:!0,webSite:!0,mobileApp:!0,offlineModeOnMobile:!1},locationEntry:{clickOnMap:!0,clickOnAerialPhoto:!0,geolocation:!0,gpsOrNgr:!0,what3words:!1,preDefinedSites:!1},maps:{mapWidgets:!0,whiteLabelMaps:!1},integrations:{arcgisOnline:!1,googleDrive:!1,mailchimp:!1,custom:!1},rca:{rca:!0},billingAndSupport:{nonProfitPricing:!0,setupAssistance:!0,payByInvoice:!1,standardSupport:!0,prioritySupport:!1,premiumSupport:!1}}},commercialPlus={id:"Plus",title:"Plus",price:publicPrice("user",30),limits:{maxUsers:null,maxProjects:null},features:{projectsAndUsers:{teams:!1},dataEntry:{uploadDataAndFiles:!0,exportAtAnyTime:!0,webSite:!0,mobileApp:!0,offlineModeOnMobile:!0},locationEntry:{clickOnMap:!0,clickOnAerialPhoto:!0,geolocation:!0,gpsOrNgr:!0,what3words:!0,preDefinedSites:!0},maps:{mapWidgets:!0,offlineMapsOnMobile:!0,whiteLabelMaps:!1},integrations:{arcgisOnline:!0,googleDrive:!0,mailchimp:!0,custom:!1},rca:{rca:!0},billingAndSupport:{nonProfitPricing:!0,setupAssistance:!0,payByInvoice:!0,standardSupport:!1,prioritySupport:!0,premiumSupport:!1}}},commercialPremium={id:"Premium",title:"Premium",price:premiumPrice,limits:{maxUsers:null,maxProjects:null},features:{projectsAndUsers:{teams:!0},dataEntry:{uploadDataAndFiles:!0,exportAtAnyTime:!0,webSite:!0,mobileApp:!0,offlineModeOnMobile:!0},locationEntry:{clickOnMap:!0,clickOnAerialPhoto:!0,geolocation:!0,gpsOrNgr:!0,what3words:!0,preDefinedSites:!0},maps:{mapWidgets:!0,whiteLabelMaps:!0},integrations:{arcgisOnline:!0,googleDrive:!0,mailchimp:!0,custom:!0},rca:{rca:!0},billingAndSupport:{nonProfitPricing:!0,setupAssistance:!0,payByInvoice:!0,standardSupport:!1,prioritySupport:!1,premiumSupport:!0}}},nonCommercialStandard={id:"NcStandard",title:"Standard",price:publicPrice("project",50,100,1),limits:{maxUsers:null,maxProjects:null},features:{projectsAndUsers:{teams:!1},dataEntry:{uploadDataAndFiles:!0,exportAtAnyTime:!0,webSite:!0,mobileApp:!0,offlineModeOnMobile:!1},locationEntry:{clickOnMap:!0,clickOnAerialPhoto:!0,geolocation:!0,gpsOrNgr:!0,what3words:!1,preDefinedSites:!1},maps:{mapWidgets:!0,whiteLabelMaps:!1},integrations:{arcgisOnline:!1,googleDrive:!1,mailchimp:!1,custom:!1},rca:{rca:!1},billingAndSupport:{nonProfitPricing:!1,setupAssistance:!0,payByInvoice:!1,standardSupport:!0,prioritySupport:!1,premiumSupport:!1}}},nonCommercialPlus={id:"NcPlus",title:"Plus",price:publicPrice("project",50,150,3),limits:{maxUsers:null,maxProjects:null},features:{projectsAndUsers:{teams:!1},dataEntry:{uploadDataAndFiles:!0,exportAtAnyTime:!0,webSite:!0,mobileAp
1p:!0,offlineModeOnMobile:!0},locationEntry:{clickOnMap:!0,clickOnAerialPhoto:!0,geolocation:!0,gpsOrNgr:!0,what3words:!0,preDefinedSites:!0},maps:{mapWidgets:!0,whiteLabelMaps:!1},integrations:{arcgisOnline:!0,googleDrive:!0,mailchimp:!0,custom:!1},rca:{rca:!1},billingAndSupport:{nonProfitPricing:!1,setupAssistance:!0,payByInvoice:!1,standardSupport:!1,prioritySupport:!0,premiumSupport:!1}}},nonCommercialPremium={id:"NsPremium",title:"Premium",price:premiumPrice,limits:{maxUsers:null,maxProjects:null},features:{projectsAndUsers:{teams:!0},dataEntry:{uploadDataAndFiles:!0,exportAtAnyTime:!0,webSite:!0,mobileApp:!0,offlineModeOnMobile:!0},locationEntry:{clickOnMap:!0,clickOnAerialPhoto:!0,geolocation:!0,gpsOrNgr:!0,what3words:!0,preDefinedSites:!0},maps:{mapWidgets:!0,whiteLabelMaps:!0},integrations:{arcgisOnline:!0,googleDrive:!0,mailchimp:!0,custom:!0},rca:{rca:!1},billingAndSupport:{nonProfitPricing:!1,setupAssistance:!0,payByInvoice:!0,standardSupport:!1,prioritySupport:!1,premiumSupport:!0}}},projectsAndUsersFeatures={teams:{title:"Local Teams",label:"Local teams",description:defaultOutdent`
2    Split large-scale national and multi-national projects into
3    semi-autonomous teams. Grant admin rights to local
4    and regional coordinators without giving them national-level control.
5    `}},dataEntryFeatures={uploadDataAndFiles:{title:"Unlimited Data",label:"Unlimited data",description:defaultOutdent`
6    Upload as many surveys and photographs as you like without paying extra.
7    We don't limit the amount of data you can enter on Cartographer.
8    `},exportAtAnyTime:{title:"Export at Any Time",label:"Export at any time",description:defaultOutdent`
9    There's no such thing as vendor lock-in with Cartographer. We
10    provide comprehensive downloads of all survey data you’ve recorded.
11    You can download everything at any time in a variety of useful
12    formats.
13    `}
13,webSite:{title:"Data Entry on Web",label:"Data entry on web",description:defaultOutdent`
14    Enter data using our web site.
15    `},mobileApp:{title:"Data Entry on Mobile",label:"Data entry on mobile",description:defaultOutdent`
16    Enter data in the field using our mobile app,
17    including in areas with no network connection.
18    `},offlineModeOnMobile:{title:"Offline Maps on Mobile",label:"Offline maps on mobile",description:defaultOutdent`
19    Pre-download map data so you can see your location
20    in the field without a network connection.
21    `}},locationEntryFeatures={clickOnMap:{title:"Click on Map",label:"Click on map",description:defaultOutdent`
22    The simplest way to record your location is to click on a map.
23    We provide detailed terrain maps for the whole globe.
24    `},clickOnAerialPhoto:{title:"Click on Aerial Photo",label:"Click on aerial photo",description:defaultOutdent`
25    We also provide an aerial photograph view for those rural areas
26    where standard maps don't quite give the detail you need.
27    `},geolocation:{title:"Geolocation",description:defaultOutdent`
28    Our web site and mobile app both support geolocation.
29    Click (or tap) a button and Cartographer will zoom
30    straight to your current location.
31    `},gpsOrNgr:{title:"GPS/NGR",description:defaultOutdent`
32    Enter locations as GPS coordinates or 10-digit National Grid References (NGRs).
33    `},what3words:{title:"what3words",comingSoon:!0,description:defaultOutdent`
34    Enter locations using [what3words'](https://what3words.com)
35    memorable three-word coordinate system.
36    `},preDefinedSites:{title:"Select Pre-Defined Sites",label:"Select pre-defined sites",description:defaultOutdent`
37    For more advanced use cases we also provide the ability to select
38    locations from a set of existing sample sites. Either set up sites
39    within Cartographer, or import locations from a reference map hosted
40    on third party GIS service.
41    `}},mapsFeatures={mapWidgets:{title:"Embed Maps on Your Site",label:"Embed maps on your site",description:defaultOutdent`
42    Embed a fully interactive Cartographer map on your web site
43    to communicate with your audience.
44    `},whiteLabelMaps:{title:"Remove Our Branding",label:"Remove our branding",description:defaultOutdent`
45    Remove the Cartographer logo from map widgets embedded on your web site.
46    `}},integrationsFeatures={arcgisOnline:{title:"ArcGIS Online",description:defaultOutdent`
47    Set up live-links between Cartographer and ArcGIS Online.
48    Visualise and analyse your data using ESRI tools such as StoryMaps.
49    Cartographer keeps ArcGIS up-to-date automatically without you having to lift a finger.
50    `},googleDrive:{title:"Google Drive",comingSoon:!0,description:defaultOutdent`
51    Send newly recorded survey data to Google Drive,
52    either as a backup or to share with colleagues.
53    `},mailchimp:{title:"MailChimp",comingSoon:!0,description:defaultOutdent`
54    Keep the list of users in a project or team synchronised with MailChimp,
55    so you can reach out to them at any time.
56    `},custom:{title:"Custom Integrations",label:"Custom integrations",comingSoon:!0,description:defaultOutdent`
57    Integrate Cartographer with your own apps, web sites, and infrastructure.
58    Chat to our development team to find out more!
59    `}},billingAndSupportFeatures={nonProfitPricing:{title:"Discounts for Non-Profits",label:"Discounts for non-profits",description:defaultOutdent`
60    We have discounted pricing for non-profits
61    including NGOs and public sector organizations.
62    Please get in touch to find out more.
63    `,hideIfUnsupported:!0},setupAssistance:{title:"Assistance with Setup",label:"Assistance with setup",description:defaultOutdent`
64    We roll out the red carpet for every new customer.
65    Our team will help you get set up on Cartographer,
66    taking all of your requirements into account
67    and configuring everything just right before you go live with your project.
68    `},standardSupport:{title:"Standard Support",label:"Standard support",description:defaultOutdent`
69    Contact our support team via email during normal office hours.
70    `,hideIfUnsupported:!0}
70,prioritySupport:{title:"Priority Support",label:"Priority support",description:defaultOutdent`
71    Jump to the front of the support queue and add telephone support to the mix.
72    `,hideIfUnsupported:!0},premiumSupport:{title:"Premium Support",label:"Premium support",description:defaultOutdent`
73    Jump to the front of the support queue and get additional help from our team,
74    including custom integrations and SLAs.
75    `,hideIfUnsupported:!0},payByInvoice:{title:"Pay by PO / Invoice",label:"Pay by PO / invoice",description:defaultOutdent`
76    Issue Purchase Orders and pay bills by invoice.
77    This is only available on annual billing to workspace with 10+ members.
78    `,footnote:"Annual billing, min 10 users"}};function PlanSection({title:t,className:r,children:e}){return jsxRuntimeExports.jsxs("div",{className:classNames("flex flex-col gap-2",r),children:[jsxRuntimeExports.jsx("div",{className:"text-black font-bold",children:t}),e]})}function PlanFeatures(t){const{features:r,support:e,hiddenFeatures:u=[]}=t;return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:Object.entries(r).map(([n,{title:s,label:o,comingSoon:a=!1,hideIfUnsupported:l=!1,footnote:c}],d)=>{const p=e[n];return(u.includes(n)?!1:l?p:!0)?jsxRuntimeExports.jsxs("span",{className:"flex flex-row gap-2 text-sm",children:[jsxRuntimeExports.jsx(Checkmark,{checked:p}),jsxRuntimeExports.jsx(Label,{value:n,label:o??s,comingSoon:a,footnote:p?c:void 0})]},d):null})})}function Checkmark({checked:t}){return jsxRuntimeExports.jsx("span",{className:"flex-0",children:t?"✅":"❌"})}function Label(t){const{value:r,label:e,comingSoon:u,footnote:n}=t;return jsxRuntimeExports.jsx("span",{className:"flex-1",children:jsxRuntimeExports.jsxs("a",{className:"text-black hover:underline",href:`#feature-${r}`,children:[e," ",u||n!=null?"*":""]})})}function PlanLimits(t){const{price:r,limits:e,showUserLimit:u,showProjectLimit:n}=t,s=r.pricingType==="public"&&r.unitType==="project"?r.inclusiveUnits:0,o=r.pricingType==="public"&&r.unitType==="user"?r.inclusiveUnits:0,a=reactExports.useMemo(()=>{const c={};return u&&(c.users={title:e.maxUsers===1?`${e.maxUsers} user`:e.maxUsers!=null?`Up to ${e.maxUsers} users`:o===0?"Unlimited users":o===1?`${o} user included *`:`${o} users included *`,description:""}),n&&(c.projects={title:e.maxProjects===1?`${e.maxProjects} project`:e.maxProjects!=null?`Up to ${e.maxProjects} projects`:s===0?"Unlimited projects":s===1?`${s} project included *`:`${s} projects included *`,description:""}),c},[u,n,s,o]),l=reactExports.useMemo(()=>({projects:!0,users:!0}),[]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx(PlanFeatures,{features:a,support:l})})}var dist={},checkExhausted={},prettyPrintJson={},cycle$1={exports:{}},cycle=cycle$1.exports,hasRequiredCycle;function requireCycle(){return hasRequiredCycle||(hasRequiredCycle=1,function(module){(function(t,r){module.exports?module.exports=r:t.json=r})(cycle,function(){function decycle(t){var r=[],e=[];return function u(n,s){var o,a,l,c=n;try{c=n.toJSON()}catch{}if(typeof c=="object"&&c){for(o=0;o<r.length;o+=1)if(r[o]===c)return{$ref:e[o]};if(r.push(c),e.push(s),Object.prototype.toString.apply(c)==="[object Array]")for(l=[],o=0;o<c.length;o+=1)l[o]=u(c[o],s+"["+o+"]");else{l={};for(a in c)Object.prototype.hasOwnProperty.call(c,a)&&(l[a]=u(c[a],s+"["+JSON.stringify(a)+"]"))}return l}return c}(t,"$")}function retrocycle($){var px=/^\$(?:\[(?:\d+|\"(?:[^\\\"\u0000-\u001f]|\\([\\\"\/bfnrt]|u[0-9a-zA-Z]{4}))*\")\])*$/;return function rez(value){var i,item,name,path;if(value&&typeof value=="object")if(Object.prototype.toString.apply(value)==="[object Array]")for(i=0;i<value.length;i+=1)item=value[i],item&&typeof item=="object"&&(path=item.$ref,typeof path=="string"&&px.test(path)?value[i]=eval(path):rez(item));else for(name in value)typeof value[name]=="object"&&(item=value[name],item&&(path=item.$ref,typeof path=="string"&&px.test(path)?value[name]=eval(path):rez(item)))}($),$}return{decycle,retrocycle,stringify:function(t,r,e){return JSON.stringify(decycle(t),r,e)}
78,parse:function(t,r){return retrocycle(JSON.parse(t,r))}}}())}(cycle$1)),cycle$1.exports}var sortJson={},hasRequiredSortJson;function requireSortJson(){if(hasRequiredSortJson)return sortJson;hasRequiredSortJson=1,Object.defineProperty(sortJson,"__esModule",{value:!0}),sortJson.sortJson=void 0;var t=["type","id"];function r(u){if(u!=null)return function(n,s){var o=u.indexOf(n),a=u.indexOf(s);return o>=0?a>=0?o-a:-1:a>=0?1:n<s?-1:1}}function e(u,n){n===void 0&&(n={});var s=n.initialKeys,o=s===void 0?t:s;if(Array.isArray(u))return u.map(function(l){return e(l,n)});if(typeof u=="object"&&u!=null){var a={};return Object.keys(u).sort(r(o)).forEach(function(l){a[l]=e(u[l],n)}),a}else return u}return sortJson.sortJson=e,sortJson}var hasRequiredPrettyPrintJson;function requirePrettyPrintJson(){if(hasRequiredPrettyPrintJson)return prettyPrintJson;hasRequiredPrettyPrintJson=1,Object.defineProperty(prettyPrintJson,"__esModule",{value:!0}),prettyPrintJson.prettyPrintJson=void 0;var t=requireCycle(),r=requireSortJson();function e(u,n){n===void 0&&(n={});var s=n.sort,o=s===void 0?void 0:s,a=n.removeCycles,l=a===void 0?!0:a;return JSON.stringify(l?(0,r.sortJson)((0,t.decycle)(u),o):(0,r.sortJson)(u,o),null,2)}return prettyPrintJson.prettyPrintJson=e,prettyPrintJson}var hasRequiredCheckExhausted;function requireCheckExhausted(){if(hasRequiredCheckExhausted)return checkExhausted;hasRequiredCheckExhausted=1,Object.defineProperty(checkExhausted,"__esModule",{value:!0}),checkExhausted.checkExhausted=void 0;var t=requirePrettyPrintJson();function r(e){throw new Error("Exhaustive switch failed: ".concat((0,t.prettyPrintJson)(e)))}return checkExhausted.checkExhausted=r,checkExhausted}var dirname={},hasRequiredDirname;function requireDirname(){if(hasRequiredDirname)return dirname;hasRequiredDirname=1,Object.defineProperty(dirname,"__esModule",{value:!0}),dirname.dirname=void 0;function t(r){var e=r.split(/[/\\]/g);if(e.length>=1)return e.slice(0,e.length-1).join("/");throw new Error("dirname: bad argument: ".concat(r))}return dirname.dirname=t,dirname}var _enum={},raise={},hasRequiredRaise;function requireRaise(){if(hasRequiredRaise)return raise;hasRequiredRaise=1,Object.defineProperty(raise,"__esModule",{value:!0}),raise.raise=void 0;function t(r){throw r}return raise.raise=t,raise}var hasRequired_enum;function require_enum(){if(hasRequired_enum)return _enum;hasRequired_enum=1;var t=_enum&&_enum.__read||function(n,s){var o=typeof Symbol=="function"&&n[Symbol.iterator];if(!o)return n;var a=o.call(n),l,c=[],d;try{for(;(s===void 0||s-- >0)&&!(l=a.next()).done;)c.push(l.value)}catch(p){d={error:p}}finally{try{l&&!l.done&&(o=a.return)&&o.call(a)}finally{if(d)throw d.error}}return c};
78Object.defineProperty(_enum,"__esModule",{value:!0}),_enum.createEnum=void 0;var r=requireRaise();function e(n,s){throw new Error("Enum value not found: ".concat(s," was not a value of ").concat(n))}function u(n,s){var o=s.map(function(m){return m[0]}),a=s.map(function(m){return m[1]}),l=s.map(function(m){var f=t(m,2),x=f[0],g=f[1];return{value:x,label:g}});function c(m){return o.includes(m)}function d(m){var f;return(f=l.find(function(x){return x.value===m}))!==null&&f!==void 0?f:(0,r.raise)(e(n,m))}function p(m){var f,x;return(x=(f=l.find(function(g){return g.value===m}))===null||f===void 0?void 0:f.label)!==null&&x!==void 0?x:(0,r.raise)(e(n,m))}return{name:n,values:o,labels:a,entries:l,isValue:c,entryOf:d,labelOf:p}}return _enum.createEnum=u,_enum}var envvar={},hasRequiredEnvvar;function requireEnvvar(){if(hasRequiredEnvvar)return envvar;hasRequiredEnvvar=1;var t={};Object.defineProperty(envvar,"__esModule",{value:!0}),envvar.envvarOrDefault=envvar.optEnvvar=envvar.envvar=void 0;var r=requireRaise();function e(s){var o;return(o=t[s])!==null&&o!==void 0?o:(0,r.raise)("envvar not defined: ".concat(s))}envvar.envvar=e;function u(s){return t[s]}envvar.optEnvvar=u;function n(s,o){var a;return(a=u(s))!==null&&a!==void 0?a:o}return envvar.envvarOrDefault=n,envvar}var filterAndMap={},hasRequiredFilterAndMap;function requireFilterAndMap(){if(hasRequiredFilterAndMap)return filterAndMap;hasRequiredFilterAndMap=1;var t=filterAndMap&&filterAndMap.__values||function(e){var u=typeof Symbol=="function"&&Symbol.iterator,n=u&&e[u],s=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&s>=e.length&&(e=void 0),{value:e&&e[s++],done:!e}}};throw new TypeError(u?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(filterAndMap,"__esModule",{value:!0}),filterAndMap.filterAndMap=void 0;function r(e,u){var n,s,o=[];try{for(var a=t(e),l=a.next();!l.done;l=a.next()){var c=l.value,d=u(c);d!=null&&o.push(d)}}catch(p){n={error:p}}finally{try{l&&!l.done&&(s=a.return)&&s.call(a)}finally{if(n)throw n.error}}return o}return filterAndMap.filterAndMap=r,filterAndMap}var findAndMap={},hasRequiredFindAndMap;function requireFindAndMap(){if(hasRequiredFindAndMap)return findAndMap;hasRequiredFindAndMap=1;var t=findAndMap&&findAndMap.__values||function(e){var u=typeof Symbol=="function"&&Symbol.iterator,n=u&&e[u],s=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&s>=e.length&&(e=void 0),{value:e&&e[s++],done:!e}}};throw new TypeError(u?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(findAndMap,"__esModule",{value:!0}),findAndMap.findAndMap=void 0;function r(e,u){var n,s;try{for(var o=t(e),a=o.next();!a.done;a=o.next()){var l=a.value,c=u(l);if(c!=null)return c}}catch(d){n={error:d}}finally{try{a&&!a.done&&(s=o.return)&&s.call(o)}finally{if(n)throw n.error}}return null}return findAndMap.findAndMap=r,findAndMap}var labeled={},hasRequiredLabeled;function requireLabeled(){if(hasRequiredLabeled)return labeled;hasRequiredLabeled=1;var t=labeled&&labeled.__assign||function(){return t=Object.assign||function(n){for(var s,o=1,a=arguments.length;o<a;o++){s=arguments[o];for(var l in s)Object.prototype.hasOwnProperty.call(s,l)&&(n[l]=s[l])}return n},t.apply(this,arguments)},r=labeled&&labeled.__rest||function(n,s){var o={};for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&s.indexOf(a)<0&&(o[a]=n[a]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var l=0,a=Object.getOwnPropertySymbols(n);l<a.length;l++)s.indexOf(a[l])<0&&Object.prototype.propertyIsEnumerable.call(n,a[l])&&(o[a[l]]=n[a[l]]);return o};Object.defineProperty(labeled,"__esModule",{value:!0}),labeled.unlabeled=labeled.labeled=void 0;function e(n,s){return t(t({},s),{type:n})}labeled.labeled=e;function u(n){n.type;var s=r(n,["type"]);return s}return labeled.unlabeled=u,labeled}var nonEmptyArray={},hasRequiredNonEmptyArray;function requireNonEmptyArray(){return hasRequiredNonEmptyArray||(hasRequiredNonEmptyArray=1,Object.defineProperty(nonEmptyArray,"__esModule",{value:!0})),nonEmptyArray}var tagged={},hasRequiredTagged;function requireTagged(){if(hasRequiredTagged)return tagged;hasRequiredTagged=1,Object.defineProperty(tagged,"__esModule",{value:!0}),tagged.bridgesIsTaggedHack=tagged.unsafeTag=tagged.untag=tagged.unsafeIsTagged=void 0;function t(n){return typeof n=="string"}tagged.unsafeIsTagged=t;function r(n){return n}tagged.untag=r;function e(n){return n}tagged.unsafeTag=e;function u(n){return function(s){return typeof s=="string"}}return tagged.bridgesIsTaggedHack=u,tagged}var taggedNumber={},hasRequiredTaggedNumber;function requireTaggedNumber(){if(hasRequiredTaggedNumber)return taggedNumber;hasRequiredTaggedNumber=1,Object.defineProperty(taggedNumber,"__esMo
78dule",{value:!0}),taggedNumber.bridgesIsTaggedNumberHack=taggedNumber.unsafeTagNumber=taggedNumber.untagNumber=taggedNumber.unsafeIsTaggedNumber=void 0;function t(n){return typeof n=="number"}taggedNumber.unsafeIsTaggedNumber=t;function r(n){return n}taggedNumber.untagNumber=r;function e(n){return n}taggedNumber.unsafeTagNumber=e;function u(n){return function(s){return typeof s=="number"}}return taggedNumber.bridgesIsTaggedNumberHack=u,taggedNumber}var titleCase={},hasRequiredTitleCase;function requireTitleCase(){if(hasRequiredTitleCase)return titleCase;hasRequiredTitleCase=1,Object.defineProperty(titleCase,"__esModule",{value:!0}),titleCase.titleCase=void 0;function t(r){return r.replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})}return titleCase.titleCase=t,titleCase}var tuple={},hasRequiredTuple;function requireTuple(){if(hasRequiredTuple)return tuple;hasRequiredTuple=1,Object.defineProperty(tuple,"__esModule",{value:!0}),tuple.tuple=void 0;function t(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return r}return tuple.tuple=t,tuple}var hasRequiredDist;function requireDist(){return hasRequiredDist||(hasRequiredDist=1,function(t){var r=dist&&dist.__createBinding||(Object.create?function(u,n,s,o){o===void 0&&(o=s);var a=Object.getOwnPropertyDescriptor(n,s);(!a||("get"in a?!n.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return n[s]}}),Object.defineProperty(u,o,a)}:function(u,n,s,o){o===void 0&&(o=s),u[o]=n[s]}),e=dist&&dist.__exportStar||function(u,n){for(var s in u)s!=="default"&&!Object.prototype.hasOwnProperty.call(n,s)&&r(n,u,s)};Object.defineProperty(t,"__esModule",{value:!0}),e(requireCheckExhausted(),t),e(requireDirname(),t),e(require_enum(),t),e(requireEnvvar(),t),e(requireFilterAndMap(),t),e(requireFindAndMap(),t),e(requireLabeled(),t),e(requireNonEmptyArray(),t),e(requirePrettyPrintJson(),t),e(requireRaise(),t),e(requireSortJson(),t),e(requireTagged(),t),e(requireTaggedNumber(),t),e(requireTitleCase(),t),e(requireTuple(),t)}(dist)),dist}var distExports=requireDist();function PlanFootnotes({className:t,features:r,support:e,children:u}){const n=Object.values(r).some(a=>a.comingSoon),s=Object.values(r).some(a=>a.commercialOnly),o=Object.entries(r).map(([a,l])=>e[a]?l.footnote:void 0).filter(a=>!!a);return jsxRuntimeExports.jsxs("ul",{className:classNames("text-gray-500 text-sm pl-3",t),children:[n&&jsxRuntimeExports.jsx("li",{className:"footnote",children:"Coming soon"}),s&&jsxRuntimeExports.jsx("li",{className:"footnote",children:"Commercial plans only"}),s&&jsxRuntimeExports.jsx("li",{className:"footnote",children:"Commercial plans only"}),o.map((a,l)=>jsxRuntimeExports.jsx("li",{className:"footnote",children:a},l)),u]})}function PlanLimitsFootnotes(t){const{price:r,billingInterval:e}=t;switch(r.pricingType){case"public":{const u=e==="monthly"?r.unitAmount:Math.round(r.unitAmount*10),n=e==="monthly"?"month":"year";return r.inclusiveUnits>0&&jsxRuntimeExports.jsx(PlanFootnotes,{children:jsxRuntimeExports.jsx("div",{className:"flex flex-col gap-1",children:jsxRuntimeExports.jsxs("p",{children:["* +£",u,r.unitType==="user"?`/${n} per extra user`:`/${n} per extra project`]})})})}case"premium":return null;default:return distExports.checkExhausted(r)}}function PlanPrices(t){const{price:r,billingInterval:e}=t;switch(r.pricingType){case"public":{const{unitType:u}=r,n=e==="monthly"?r.flatAmount:Math.round(r.flatAmount*10),s=e==="monthly"?r.unitAmount:Math.round(r.unitAmount*10),o=e==="monthly"?"month":"year";return r.flatAmount>0?jsxRuntimeExports.jsxs("div",{className:"flex flex-row flex-wrap justify-center items-baseline",children:[jsxRuntimeExports.jsxs("span",{className:"text-3xl phone:text-2xl font-bold",children:["£",n]}),jsxRuntimeExports.jsxs("span",{className:"text-2xl",children:["/",o]})]}):jsxRuntimeExports.jsx("div",{className:"flex flex-row flex-wrap justify-center items-baseline",children:u==="free"?jsxRuntimeExports.jsx("span",{className:"text-3xl phone:text-2xl font-bold",children:"Free"}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("span",{className:"text-3xl phone:text-2xl font-bold",children:["£",s]}),jsxRuntimeExports.jsxs("span",{className:"text-2xl",children:["/",u,"/",o]})]})})}case"premium":return jsxRuntimeExports.jsx("div",{className:"flex flex-col gap-2",children:jsxRuntimeExports.jsx("div",{className:"flex flex-row flex-wrap justify-center items-baseline",children:jsxRuntimeExports.jsx("span",{className:"text-3xl phone:text-2xl font-bold",children:"Custom"})})});default:return distExports.checkExhausted(r)}}function PlanTitle({title:t}){return jsxRuntimeExports.jsx("h1",{className:"flex-0 px-8 text-2xl text-center text-orange-500",children:t})}
78const hiddenProjectsAndUsersFeatures=["teams"];function PlanColumn(t){const{plan:r,billingInterval:e,showUserLimit:u,showProjectLimit:n,isLeft:s,emphasise:o,isRight:a}=t,{title:l,price:c,limits:d,features:p}=r;return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(PlanColumnTop,{isLeft:s,emphasise:o,isRight:a}),jsxRuntimeExports.jsx(PlanColumnCell,{isLeft:s,emphasise:o,isRight:a,children:jsxRuntimeExports.jsx(PlanTitle,{title:l})}),jsxRuntimeExports.jsx(PlanColumnCell,{isLeft:s,emphasise:o,isRight:a,children:jsxRuntimeExports.jsx(PlanPrices,{price:c,billingInterval:e})}),jsxRuntimeExports.jsx(PlanColumnCell,{isLeft:s,emphasise:o,isRight:a,children:jsxRuntimeExports.jsxs(PlanSection,{title:"Users and Projects",children:[jsxRuntimeExports.jsx(PlanLimits,{price:c,limits:d,showUserLimit:u,showProjectLimit:n}),jsxRuntimeExports.jsx(PlanFeatures,{features:projectsAndUsersFeatures,support:p.projectsAndUsers,hiddenFeatures:hiddenProjectsAndUsersFeatures}),jsxRuntimeExports.jsx(PlanLimitsFootnotes,{price:c,billingInterval:e})]})}),jsxRuntimeExports.jsx(PlanColumnCell,{isLeft:s,emphasise:o,isRight:a,children:jsxRuntimeExports.jsx(PlanSection,{title:"Data Entry",children:jsxRuntimeExports.jsx(PlanFeatures,{features:dataEntryFeatures,support:p.dataEntry})})}),jsxRuntimeExports.jsx(PlanColumnCell,{isLeft:s,emphasise:o,isRight:a,children:jsxRuntimeExports.jsxs(PlanSection,{title:"Location Entry",children:[jsxRuntimeExports.jsx(PlanFeatures,{features:locationEntryFeatures,support:p.locationEntry}),jsxRuntimeExports.jsx(PlanFootnotes,{features:integrationsFeatures,support:p.integrations})]})}),jsxRuntimeExports.jsx(PlanColumnCell,{isLeft:s,emphasise:o,isRight:a,children:jsxRuntimeExports.jsx(PlanSection,{title:"Map",children:jsxRuntimeExports.jsx(PlanFeatures,{features:mapsFeatures,support:p.maps})})}),jsxRuntimeExports.jsx(PlanColumnCell,{isLeft:s,emphasise:o,isRight:a,children:jsxRuntimeExports.jsxs(PlanSection,{title:"Integration",children:[jsxRuntimeExports.jsx(PlanFeatures,{features:integrationsFeatures,support:p.integrations}),jsxRuntimeExports.jsx(PlanFootnotes,{features:integrationsFeatures,support:p.integrations})]})}),jsxRuntimeExports.jsx(PlanColumnCell,{isLeft:s,emphasise:o,isRight:a,children:jsxRuntimeExports.jsxs(PlanSection,{title:"Billing and Support",children:[jsxRuntimeExports.jsx(PlanFeatures,{features:billingAndSupportFeatures,support:p.billingAndSupport}),jsxRuntimeExports.jsx(PlanFootnotes,{features:billingAndSupportFeatures,support:p.billingAndSupport})]})}),jsxRuntimeExports.jsx(PlanColumnCell,{isLeft:s,emphasise:o,isRight:a,children:jsxRuntimeExports.jsx(DemoLink,{className:"w-full btn btn-orange btn-md text-center mt-2",children:"Get In Touch"})}),jsxRuntimeExports.jsx(PlanColumnBottom,{isLeft:s,emphasise:o,isRight:a})]})}function PlanColumnCell(t){const{isLeft:r,emphasise:e,isRight:u,children:n}=t;return jsxRuntimeExports.jsx("div",{className:classNames(["bg-white shadow-xl py-4 px-4",e?"z-10":"z-0"]),children:n})}function PlanColumnTop(t){const{isLeft:r,emphasise:e,isRight:u}=t;return jsxRuntimeExports.jsx("div",{className:classNames(["flex flex-col gap-8 px-8","bg-white rounded-t-lg shadow-xl",r||e?null:"tablet:rounded-l-none",u||e?null:"tablet:rounded-r-none",e?"z-10 pt-12":"mt-6 pt-6 bg-white z-0"])})}function PlanColumnBottom(t){const{isLeft:r,emphasise:e,isRight:u}=t;return jsxRuntimeExports.jsx("div",{className:classNames(["flex flex-col gap-8 px-8","bg-white rounded-b-lg shadow-xl",r||e?null:"tablet:rounded-l-none",u||e?null:"tablet:rounded-r-none",e?"z-10 pb-12":"mb-6 pb-6 bg-white z-0"])})}const GRID_ROWS=11;function PlanGrid(t){const{plans:r,emphasise:e=-1,billingInterval:u,showUserLimit:n,showProjectLimit:s}=t;return jsxRuntimeExports.jsx("div",{className:classNames("grid","grid-flow-col grid-rows-11","phone:grid-flow-row phone:grid-cols-1 phone:grid-rows-none phone:max-w-md phone:mx-auto","text-black",r.length===4?"grid-cols-plans-4 phone:grid-cols-plans-1":"grid-cols-plans-3 phone:grid-cols-plans-1"),
78children:r.map((o,a)=>{const l=r.length===4?a===0||a===1:a===0,c=r.length===4&&a===0||a===r.length-1,d=r.length===4&&a===0?reactExports.createElement(reactExports.Fragment,{},...fillArray(GRID_ROWS,jsxRuntimeExports.jsx("div",{}))):null;return jsxRuntimeExports.jsxs(reactExports.Fragment,{children:[jsxRuntimeExports.jsx(PlanColumn,{plan:o,billingInterval:u,showUserLimit:n,showProjectLimit:s,isLeft:l,emphasise:o.id===e,isRight:c}),d]},a)})})}function fillArray(t,r){const e=new Array(t);for(let u=0;u<e.length;u++)e[u]=r;return e}function BillingIntervalSwitcher(t){const{className:r,billingInterval:e,onBillingIntervalChange:u}=t;return jsxRuntimeExports.jsx("div",{className:classNames(["flex flex-row justify-center",r]),children:jsxRuntimeExports.jsxs("div",{className:"btn-group btn-group-white btn-group-md mx-2",children:[jsxRuntimeExports.jsx("button",{type:"button",onClick:()=>u("yearly"),className:classNames("btn",e==="yearly"?"active":null),children:"Billed Annually"})," ",jsxRuntimeExports.jsx("button",{type:"button",onClick:()=>u("monthly"),className:classNames("btn",e==="monthly"?"active":null),children:"Billed Monthly"})]})})}function Spaced(t){const{gap:r="4",my:e="0",className:u,children:n}=t,s=classNames(`flex flex-col gap-${r} my-${e}`,u);return jsxRuntimeExports.jsx("div",{className:s,children:n})}const commercialColumns=[commercialStarter,commercialStandard,commercialPlus,commercialPremium],nonCommercialColumns=[nonCommercialStandard,nonCommercialPlus,nonCommercialPremium],meta=()=>[{title:"Pricing - Cartographer"}];function PricingPage(){const[t,r]=reactExports.useState("commercial"),[e,u]=reactExports.useState("yearly"),n=reactExports.useMemo(()=>t==="commercial"?commercialColumns:nonCommercialColumns,[t]),s=reactExports.useMemo(()=>t==="commercial"?"Plus":"NcPlus",[t]);return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(MenuBar,{light:!0}),jsxRuntimeExports.jsx(Contours,{className:"bg-bottom",children:jsxRuntimeExports.jsx(Container,{children:jsxRuntimeExports.jsxs(Spaced,{gap:"8",className:"menu-bar-spacer pb-8",children:[jsxRuntimeExports.jsx("h1",{className:"text-4xl leading-12 text-teal-400",children:"Pricing"}),jsxRuntimeExports.jsx(BillingIntervalSwitcher,{billingInterval:e,onBillingIntervalChange:u})]})})}),jsxRuntimeExports.jsx("div",{className:"relative z-0 bg-white pb-8",children:jsxRuntimeExports.jsx(Contours,{className:"bg-top",children:jsxRuntimeExports.jsx(Container,{className:"py-8",children:jsxRuntimeExports.jsx(PlanGrid,{plans:n,emphasise:s,billingInterval:e,showUserLimit:!0,showProjectLimit:!1})})})}),jsxRuntimeExports.jsx("section",{className:"bg-white",children:jsxRuntimeExports.jsxs(Container,{className:"text-black py-12 px-8 flex flex-col gap-4",style:{maxWidth:"60ch"},children:[jsxRuntimeExports.jsx(SectionHeading,{children:"Plan Features"}),jsxRuntimeExports.jsx(SubsectionHeading,{id:"projects",children:"Projects"}),jsxRuntimeExports.jsx("p",{children:"Organise your work into multiple projects, each with its own people and data. Start with one project and add more over time as you expand to new types of monitoring."}),jsxRuntimeExports.jsx(SubsectionHeading,{id:"users",children:"Users"}),jsxRuntimeExports.jsx("p",{children:"Invite colleagues and volunteers to contribute data to your projects. Each user can be involved in as many projects as you like, with different levels of access to each project."}),jsxRuntimeExports.jsx(FeatureDescriptions,{features:projectsAndUsersFeatures}),jsxRuntimeExports.jsx(FeatureDescriptions,{features:dataEntryFeatures}),jsxRuntimeExports.jsx(FeatureDescriptions,{features:locationEntryFeatures}),jsxRuntimeExports.jsx(FeatureDescriptions,{features:mapsFeatures}),jsxRuntimeExports.jsx(FeatureDescriptions,{features:integrationsFeatures}),jsxRuntimeExports.jsx(FeatureDescriptions,{features:billingAndSupportFeatures})]})}),jsxRuntimeExports.jsx(Footer,{})]})}function SectionHeading({children:t}){return jsxRuntimeExports.jsx("h1",{className:"mt-6 text-xl text-orange-500",children:t})}function SubsectionHeading({id:t,children:r}){return jsxRuntimeExports.jsxs("h2",{className:"mt-4 text-lg text-orange-500",children:[jsxRuntimeExports.jsx(LinkTarget,{id:`feature-${t}`}),r]})}function FeatureDescriptions({features:t}){return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:Object.entries(t).map(([r,e])=>jsxRuntimeExports.jsx(FeatureDescription,{id:r,feature:e},r))})}function FeatureDescription({id:t,feature:r}){return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(SubsectionHeading,{id:t,children:r.title}),jsxRuntimeExports.jsx(Markdown,{children:r.description})]})}export{PricingPage as default,meta};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.