diff --git a/index.html b/index.html
index eaece5b3b..bfd746563 100644
--- a/index.html
+++ b/index.html
@@ -1 +1 @@
-
STAC Browser
\ No newline at end of file
+STAC Browser
\ No newline at end of file
diff --git a/js/6312.728e8dee.js b/js/6312.5c2c4410.js
similarity index 97%
rename from js/6312.728e8dee.js
rename to js/6312.5c2c4410.js
index 2aad11fa8..4eb59112a 100644
--- a/js/6312.728e8dee.js
+++ b/js/6312.5c2c4410.js
@@ -1,2 +1,2 @@
-"use strict";(self["webpackChunk_radiantearth_stac_browser"]=self["webpackChunk_radiantearth_stac_browser"]||[]).push([[6312,505],{11224:function(t,e,a){a.r(e),a.d(e,{default:function(){return b}});var i=function(){var t=this,e=t._self._c;return e("main",{staticClass:"search d-flex flex-column"},[t.parent?t.searchLink?e("b-row",[e("b-col",{staticClass:"left"},[e("b-tabs",{model:{value:t.activeSearch,callback:function(e){t.activeSearch=e},expression:"activeSearch"}},[t.collectionSearch?e("b-tab",{attrs:{title:t.$t("search.tabs.collections")}},[e("SearchFilter",{attrs:{parent:t.parent,title:"",value:t.collectionFilters,type:"Collections"},on:{input:t.setFilters}})],1):t._e(),t.itemSearch?e("b-tab",{attrs:{title:t.$t("search.tabs.items")}},[e("SearchFilter",{attrs:{parent:t.parent,title:"",value:t.itemFilters,type:"Global"},on:{input:t.setFilters}})],1):t._e()],1)],1),e("b-col",{staticClass:"right"},[t.error?e("b-alert",{attrs:{variant:"error",show:""}},[t._v(t._s(t.error))]):!t.data&&t.loading?e("Loading",{attrs:{fill:"",top:""}}):null===t.data?e("b-alert",{attrs:{variant:"info",show:""}},[t._v(t._s(t.$t("search.modifyCriteria")))]):0===t.results.length?e("b-alert",{attrs:{variant:"warning",show:""}},[t._v(t._s(t.$t("search.noItemsFound")))]):[t.itemCollection?e("div",{attrs:{id:"search-map"}},[e("Map",{attrs:{stac:t.stac,stacLayerData:t.itemCollection,scrollWheelZoom:"",popover:""}})],1):t._e(),t.isCollectionSearch?e("Catalogs",{attrs:{catalogs:t.results,collectionsOnly:"",pagination:t.pagination,loading:t.loading,count:t.totalCount},on:{paginate:t.loadResults},scopedSlots:t._u([{key:"catalogFooter",fn:function(a){return[t.itemSearch||t.canFilterItems(a.data)?e("b-button-group",{attrs:{vertical:"",size:"sm"}},[t.itemSearch?e("b-button",{attrs:{variant:"outline-primary",pressed:t.selectedCollections[a.data.id]},on:{click:function(e){return t.selectForItemSearch(a.data)}}},[t.selectedCollections[a.data.id]?e("b-icon-check-square"):e("b-icon-square"),e("span",{staticClass:"ml-2"},[t._v(t._s(t.$t("search.selectForItemSearch")))])],1):t._e(),e("StacLink",{attrs:{button:{variant:"outline-primary",disabled:!t.canFilterItems(a.data)},data:a.data,title:t.$t("search.filterCollection"),state:{itemFilterOpen:1}}})],1):t._e()]}}],null,!1,970447694)}):e("Items",{attrs:{stac:t.stac,items:t.results,api:!0,allowFilter:!1,pagination:t.pagination,loading:t.loading,count:t.totalCount},on:{paginate:t.loadResults}})]],2)],1):e("b-alert",{attrs:{variant:"danger",show:""}},[t._v(t._s(t.$t("search.notSupported")))]):e("Loading",{attrs:{stretch:""}}),t.selectedCollectionCount>0?e("b-alert",{staticClass:"selected-collections-action",attrs:{show:"",variant:"dark"}},[e("b-button",{attrs:{variant:"primary",size:"lg"},on:{click:t.openItemSearch}},[t._v(" "+t._s(t.$tc("search.useInItemSearch",t.selectedCollectionCount,{count:t.selectedCollectionCount}))+" ")])],1):t._e()],1)},s=[],r=a(95353),l=a(2566),n=a(33951),o=a(39773),c=a(31831),h=a(82948),u=a(63405),d=a(95050),p=a(33484),m={name:"Search",components:{BIconCheckSquare:h.z68,BIconSquare:h.Hcz,BTab:u.a,BTabs:d.r,Catalogs:()=>Promise.resolve().then(a.bind(a,18353)),Loading:o.A,Items:()=>Promise.resolve().then(a.bind(a,49728)),Map:()=>a.e(4701).then(a.bind(a,74701)),SearchFilter:n["default"],StacLink:()=>Promise.resolve().then(a.bind(a,58581))},props:{loadParent:{type:String,default:null}},data(){return{parent:null,error:null,link:null,loading:!1,data:null,itemFilters:{},collectionFilters:{},activeSearch:0,selectedCollections:{}}},computed:{...(0,r.aH)(["catalogUrl","catalogTitle","itemsPerPage"]),...(0,r.L8)(["canSearchItems","canSearchCollections","getStac","root","collectionLink","parentLink","fromBrowserPath","toBrowserPath"]),selectedCollectionCount(){return l.Ay.size(this.selectedCollections)},totalCount(){return"number"===typeof this.data.numberMatched?this.data.numberMatched:null},stac(){return this.parent instanceof c.A?this.parent:null},searchLink(){return this.isCollectionSearch?this.collectionSearch:this.itemSearch},collectionSearch(){return this.canSearchCollections&&this.parent instanceof c.A&&this.parent.getApiCollectionsLink()},itemSearch(){return this.canSearchItems&&this.parent instanceof c.A&&this.parent.getSearchLink()},itemCollection(){return this.isCollectionSearch?null:{type:"FeatureCollection",features:this.results,links:[]}},results(){if(0===l.Ay.size(this.data))return[];let t=this.isCollectionSearch?this.data.collections:this.data.features,e=this.isCollectionSearch?"Collection":"Feature";return Array.isArray(t)?t.map((t=>{try{if(!l.Ay.isObject(t)||t.type!==e)return null;let a,i=l.Ay.getLinkWithRel(t.links,"self");null!==i&&void 0!==i&&i.href&&(a=l.Ay.toAbsolute(i.href,this.link.href));let s=new c.A(t,a,this.toBrowserPath(a));return s=(0,p.Pj)(this.$store.state,s),s}catch(a){return console.error(a),null}})).filter((t=>t instanceof c.A)):[]},pagination(){return l.Ay.getPaginationLinks(this.data)},filters(){return this.isCollectionSearch?this.collectionFilters:this.itemFilters},isCollectionSearch(){return this.collectionSearch&&0===this.activeSearch},pageDescription(){let t=c.A.getDisplayTitle([this.collectionLink,this.parentLink,this.root],this.catalogTitle);return this.$t("search.metaDescription",{title:t})}},watch:{activeSearch(){this.data=null},searchLink:{immediate:!0,handler(){this.searchLink&&this.showPage()}}},async created(){let t=this.catalogUrl;this.loadParent?(t=this.fromBrowserPath(this.loadParent),this.parent=this.getStac(t)):this.parent=this.root,this.parent||(await this.$store.dispatch("load",{url:t}),this.root||this.$store.commit("config",{catalogUrl:t}),this.parent=this.getStac(t),this.showPage())},methods:{openItemSearch(){this.$set(this.itemFilters,"collections",Object.keys(this.selectedCollections)),this.activeSearch=1,this.selectedCollections={}},selectForItemSearch(t){this.selectedCollections[t.id]?this.$delete(this.selectedCollections,t.id):this.$set(this.selectedCollections,t.id,!0)},canFilterItems(t){return t instanceof c.A&&Boolean(t.getApiItemsLink())},async loadResults(t){this.error=null,this.loading=!0;try{this.link=l.Ay.addFiltersToLink(t,this.filters,this.itemsPerPage);let e=this.isCollectionSearch?"collections":"features",a=await(0,p.FF)(this.$store,this.link);a&&this.showPage(a.config.url),l.Ay.isObject(a.data)&&Array.isArray(a.data[e])?this.data=a.data:(this.data={},this.error=this.$t(this.isCollectionSearch?"errors.invalidStacCollections":"errors.invalidStacItems"))}catch(e){this.data={},this.error=e.message}finally{this.loading=!1}},async setFilters(t,e=!1){this.isCollectionSearch?this.collectionFilters=t:this.itemFilters=t,e?this.data=null:await this.loadResults(this.searchLink)},showPage(t){this.$store.commit("showPage",{title:this.$t("search.title"),description:this.pageDescription,url:t})}}},g=m,S=a(81656),C=(0,S.A)(g,i,s,!1,null,null,null),b=C.exports}}]);
-//# sourceMappingURL=6312.728e8dee.js.map
\ No newline at end of file
+"use strict";(self["webpackChunk_radiantearth_stac_browser"]=self["webpackChunk_radiantearth_stac_browser"]||[]).push([[6312,505],{11224:function(t,e,a){a.r(e),a.d(e,{default:function(){return b}});var i=function(){var t=this,e=t._self._c;return e("main",{staticClass:"search d-flex flex-column"},[t.parent?t.searchLink?e("b-row",[e("b-col",{staticClass:"left"},[e("b-tabs",{model:{value:t.activeSearch,callback:function(e){t.activeSearch=e},expression:"activeSearch"}},[t.collectionSearch?e("b-tab",{attrs:{title:t.$t("search.tabs.collections")}},[e("SearchFilter",{attrs:{parent:t.parent,title:"",value:t.collectionFilters,type:"Collections"},on:{input:t.setFilters}})],1):t._e(),t.itemSearch?e("b-tab",{attrs:{title:t.$t("search.tabs.items")}},[e("SearchFilter",{attrs:{parent:t.parent,title:"",value:t.itemFilters,type:"Global"},on:{input:t.setFilters}})],1):t._e()],1)],1),e("b-col",{staticClass:"right"},[t.error?e("b-alert",{attrs:{variant:"error",show:""}},[t._v(t._s(t.error))]):!t.data&&t.loading?e("Loading",{attrs:{fill:"",top:""}}):null===t.data?e("b-alert",{attrs:{variant:"info",show:""}},[t._v(t._s(t.$t("search.modifyCriteria")))]):0===t.results.length?e("b-alert",{attrs:{variant:"warning",show:""}},[t._v(t._s(t.$t("search.noItemsFound")))]):[t.itemCollection?e("div",{attrs:{id:"search-map"}},[e("Map",{attrs:{stac:t.stac,stacLayerData:t.itemCollection,scrollWheelZoom:"",popover:""}})],1):t._e(),t.isCollectionSearch?e("Catalogs",{attrs:{catalogs:t.results,collectionsOnly:"",pagination:t.pagination,loading:t.loading,count:t.totalCount},on:{paginate:t.loadResults},scopedSlots:t._u([{key:"catalogFooter",fn:function(a){return[t.itemSearch||t.canFilterItems(a.data)?e("b-button-group",{attrs:{vertical:"",size:"sm"}},[t.itemSearch?e("b-button",{attrs:{variant:"outline-primary",pressed:t.selectedCollections[a.data.id]},on:{click:function(e){return t.selectForItemSearch(a.data)}}},[t.selectedCollections[a.data.id]?e("b-icon-check-square"):e("b-icon-square"),e("span",{staticClass:"ml-2"},[t._v(t._s(t.$t("search.selectForItemSearch")))])],1):t._e(),e("StacLink",{attrs:{button:{variant:"outline-primary",disabled:!t.canFilterItems(a.data)},data:a.data,title:t.$t("search.filterCollection"),state:{itemFilterOpen:1}}})],1):t._e()]}}],null,!1,970447694)}):e("Items",{attrs:{stac:t.stac,items:t.results,api:!0,allowFilter:!1,pagination:t.pagination,loading:t.loading,count:t.totalCount},on:{paginate:t.loadResults}})]],2)],1):e("b-alert",{attrs:{variant:"danger",show:""}},[t._v(t._s(t.$t("search.notSupported")))]):e("Loading",{attrs:{stretch:""}}),t.selectedCollectionCount>0?e("b-alert",{staticClass:"selected-collections-action",attrs:{show:"",variant:"dark"}},[e("b-button",{attrs:{variant:"primary",size:"lg"},on:{click:t.openItemSearch}},[t._v(" "+t._s(t.$tc("search.useInItemSearch",t.selectedCollectionCount,{count:t.selectedCollectionCount}))+" ")])],1):t._e()],1)},s=[],r=a(95353),l=a(2566),n=a(33951),o=a(39773),c=a(31831),h=a(82948),u=a(63405),d=a(95050),p=a(33484),m={name:"Search",components:{BIconCheckSquare:h.z68,BIconSquare:h.Hcz,BTab:u.a,BTabs:d.r,Catalogs:()=>Promise.resolve().then(a.bind(a,21797)),Loading:o.A,Items:()=>Promise.resolve().then(a.bind(a,49728)),Map:()=>a.e(4701).then(a.bind(a,74701)),SearchFilter:n["default"],StacLink:()=>Promise.resolve().then(a.bind(a,58581))},props:{loadParent:{type:String,default:null}},data(){return{parent:null,error:null,link:null,loading:!1,data:null,itemFilters:{},collectionFilters:{},activeSearch:0,selectedCollections:{}}},computed:{...(0,r.aH)(["catalogUrl","catalogTitle","itemsPerPage"]),...(0,r.L8)(["canSearchItems","canSearchCollections","getStac","root","collectionLink","parentLink","fromBrowserPath","toBrowserPath"]),selectedCollectionCount(){return l.Ay.size(this.selectedCollections)},totalCount(){return"number"===typeof this.data.numberMatched?this.data.numberMatched:null},stac(){return this.parent instanceof c.A?this.parent:null},searchLink(){return this.isCollectionSearch?this.collectionSearch:this.itemSearch},collectionSearch(){return this.canSearchCollections&&this.parent instanceof c.A&&this.parent.getApiCollectionsLink()},itemSearch(){return this.canSearchItems&&this.parent instanceof c.A&&this.parent.getSearchLink()},itemCollection(){return this.isCollectionSearch?null:{type:"FeatureCollection",features:this.results,links:[]}},results(){if(0===l.Ay.size(this.data))return[];let t=this.isCollectionSearch?this.data.collections:this.data.features,e=this.isCollectionSearch?"Collection":"Feature";return Array.isArray(t)?t.map((t=>{try{if(!l.Ay.isObject(t)||t.type!==e)return null;let a,i=l.Ay.getLinkWithRel(t.links,"self");null!==i&&void 0!==i&&i.href&&(a=l.Ay.toAbsolute(i.href,this.link.href));let s=new c.A(t,a,this.toBrowserPath(a));return s=(0,p.Pj)(this.$store.state,s),s}catch(a){return console.error(a),null}})).filter((t=>t instanceof c.A)):[]},pagination(){return l.Ay.getPaginationLinks(this.data)},filters(){return this.isCollectionSearch?this.collectionFilters:this.itemFilters},isCollectionSearch(){return this.collectionSearch&&0===this.activeSearch},pageDescription(){let t=c.A.getDisplayTitle([this.collectionLink,this.parentLink,this.root],this.catalogTitle);return this.$t("search.metaDescription",{title:t})}},watch:{activeSearch(){this.data=null},searchLink:{immediate:!0,handler(){this.searchLink&&this.showPage()}}},async created(){let t=this.catalogUrl;this.loadParent?(t=this.fromBrowserPath(this.loadParent),this.parent=this.getStac(t)):this.parent=this.root,this.parent||(await this.$store.dispatch("load",{url:t}),this.root||this.$store.commit("config",{catalogUrl:t}),this.parent=this.getStac(t),this.showPage())},methods:{openItemSearch(){this.$set(this.itemFilters,"collections",Object.keys(this.selectedCollections)),this.activeSearch=1,this.selectedCollections={}},selectForItemSearch(t){this.selectedCollections[t.id]?this.$delete(this.selectedCollections,t.id):this.$set(this.selectedCollections,t.id,!0)},canFilterItems(t){return t instanceof c.A&&Boolean(t.getApiItemsLink())},async loadResults(t){this.error=null,this.loading=!0;try{this.link=l.Ay.addFiltersToLink(t,this.filters,this.itemsPerPage);let e=this.isCollectionSearch?"collections":"features",a=await(0,p.FF)(this.$store,this.link);a&&this.showPage(a.config.url),l.Ay.isObject(a.data)&&Array.isArray(a.data[e])?this.data=a.data:(this.data={},this.error=this.$t(this.isCollectionSearch?"errors.invalidStacCollections":"errors.invalidStacItems"))}catch(e){this.data={},this.error=e.message}finally{this.loading=!1}},async setFilters(t,e=!1){this.isCollectionSearch?this.collectionFilters=t:this.itemFilters=t,e?this.data=null:await this.loadResults(this.searchLink)},showPage(t){this.$store.commit("showPage",{title:this.$t("search.title"),description:this.pageDescription,url:t})}}},g=m,S=a(81656),C=(0,S.A)(g,i,s,!1,null,null,null),b=C.exports}}]);
+//# sourceMappingURL=6312.5c2c4410.js.map
\ No newline at end of file
diff --git a/js/6312.728e8dee.js.map b/js/6312.5c2c4410.js.map
similarity index 99%
rename from js/6312.728e8dee.js.map
rename to js/6312.5c2c4410.js.map
index 07de49366..20069d084 100644
--- a/js/6312.728e8dee.js.map
+++ b/js/6312.5c2c4410.js.map
@@ -1 +1 @@
-{"version":3,"file":"js/6312.728e8dee.js","mappings":"sMAAA,IAAIA,EAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAO,CAACE,YAAY,6BAA6B,CAAGJ,EAAIK,OAA+CL,EAAIM,WAAiHJ,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,YAAY,QAAQ,CAACF,EAAG,SAAS,CAACK,MAAM,CAACC,MAAOR,EAAIS,aAAcC,SAAS,SAAUC,GAAMX,EAAIS,aAAaE,CAAG,EAAEC,WAAW,iBAAiB,CAAEZ,EAAIa,iBAAkBX,EAAG,QAAQ,CAACY,MAAM,CAAC,MAAQd,EAAIe,GAAG,6BAA6B,CAACb,EAAG,eAAe,CAACY,MAAM,CAAC,OAASd,EAAIK,OAAO,MAAQ,GAAG,MAAQL,EAAIgB,kBAAkB,KAAO,eAAeC,GAAG,CAAC,MAAQjB,EAAIkB,eAAe,GAAGlB,EAAImB,KAAMnB,EAAIoB,WAAYlB,EAAG,QAAQ,CAACY,MAAM,CAAC,MAAQd,EAAIe,GAAG,uBAAuB,CAACb,EAAG,eAAe,CAACY,MAAM,CAAC,OAASd,EAAIK,OAAO,MAAQ,GAAG,MAAQL,EAAIqB,YAAY,KAAO,UAAUJ,GAAG,CAAC,MAAQjB,EAAIkB,eAAe,GAAGlB,EAAImB,MAAM,IAAI,GAAGjB,EAAG,QAAQ,CAACE,YAAY,SAAS,CAAEJ,EAAIsB,MAAOpB,EAAG,UAAU,CAACY,MAAM,CAAC,QAAU,QAAQ,KAAO,KAAK,CAACd,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAIsB,WAAYtB,EAAIyB,MAAQzB,EAAI0B,QAASxB,EAAG,UAAU,CAACY,MAAM,CAAC,KAAO,GAAG,IAAM,MAAoB,OAAbd,EAAIyB,KAAevB,EAAG,UAAU,CAACY,MAAM,CAAC,QAAU,OAAO,KAAO,KAAK,CAACd,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAIe,GAAG,6BAAqD,IAAvBf,EAAI2B,QAAQC,OAAc1B,EAAG,UAAU,CAACY,MAAM,CAAC,QAAU,UAAU,KAAO,KAAK,CAACd,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAIe,GAAG,2BAA2B,CAAEf,EAAI6B,eAAgB3B,EAAG,MAAM,CAACY,MAAM,CAAC,GAAK,eAAe,CAACZ,EAAG,MAAM,CAACY,MAAM,CAAC,KAAOd,EAAI8B,KAAK,cAAgB9B,EAAI6B,eAAe,gBAAkB,GAAG,QAAU,OAAO,GAAG7B,EAAImB,KAAMnB,EAAI+B,mBAAoB7B,EAAG,WAAW,CAACY,MAAM,CAAC,SAAWd,EAAI2B,QAAQ,gBAAkB,GAAG,WAAa3B,EAAIgC,WAAW,QAAUhC,EAAI0B,QAAQ,MAAQ1B,EAAIiC,YAAYhB,GAAG,CAAC,SAAWjB,EAAIkC,aAAaC,YAAYnC,EAAIoC,GAAG,CAAC,CAACC,IAAI,gBAAgBC,GAAG,SAASC,GAAM,MAAO,CAAEvC,EAAIoB,YAAcpB,EAAIwC,eAAeD,EAAKd,MAAOvB,EAAG,iBAAiB,CAACY,MAAM,CAAC,SAAW,GAAG,KAAO,OAAO,CAAEd,EAAIoB,WAAYlB,EAAG,WAAW,CAACY,MAAM,CAAC,QAAU,kBAAkB,QAAUd,EAAIyC,oBAAoBF,EAAKd,KAAKiB,KAAKzB,GAAG,CAAC,MAAQ,SAAS0B,GAAQ,OAAO3C,EAAI4C,oBAAoBL,EAAKd,KAAK,IAAI,CAAEzB,EAAIyC,oBAAoBF,EAAKd,KAAKiB,IAAKxC,EAAG,uBAAuBA,EAAG,iBAAiBA,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACJ,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAIe,GAAG,mCAAmC,GAAGf,EAAImB,KAAKjB,EAAG,WAAW,CAACY,MAAM,CAAC,OAAS,CAAC+B,QAAS,kBAAmBC,UAAW9C,EAAIwC,eAAeD,EAAKd,OAAO,KAAOc,EAAKd,KAAK,MAAQzB,EAAIe,GAAG,2BAA2B,MAAQ,CAACgC,eAAgB,OAAO,GAAG/C,EAAImB,KAAK,IAAI,MAAK,EAAM,aAAajB,EAAG,QAAQ,CAACY,MAAM,CAAC,KAAOd,EAAI8B,KAAK,MAAQ9B,EAAI2B,QAAQ,KAAM,EAAK,aAAc,EAAM,WAAa3B,EAAIgC,WAAW,QAAUhC,EAAI0B,QAAQ,MAAQ1B,EAAIiC,YAAYhB,GAAG,CAAC,SAAWjB,EAAIkC,iBAAiB,IAAI,GAAv+EhC,EAAG,UAAU,CAACY,MAAM,CAAC,QAAU,SAAS,KAAO,KAAK,CAACd,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAIe,GAAG,2BAAjIb,EAAG,UAAU,CAACY,MAAM,CAAC,QAAU,MAAmgFd,EAAIgD,wBAA0B,EAAG9C,EAAG,UAAU,CAACE,YAAY,8BAA8BU,MAAM,CAAC,KAAO,GAAG,QAAU,SAAS,CAACZ,EAAG,WAAW,CAACY,MAAM,CAAC,QAAU,UAAU,KAAO,MAAMG,GAAG,CAAC,MAAQjB,EAAIiD,iBAAiB,CAACjD,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGxB,EAAIkD,IAAI,yBAA0BlD,EAAIgD,wBAAyB,CAACG,MAAOnD,EAAIgD,2BAA2B,QAAQ,GAAGhD,EAAImB,MAAM,EAC5gG,EACIiC,EAAkB,G,kGCsEtB,GACAC,KAAA,SACAC,WAAA,CACAC,iBAAA,MACAC,YAAA,MACAC,KAAA,IACAC,MAAA,IACAC,SAAAA,IAAA,wCACAC,QAAA,IACAC,MAAAA,IAAA,wCACAC,IAAAA,IAAA,gCACAC,aAAA,aACAC,SAAAA,IAAA,yCAEAC,MAAA,CACAC,WAAA,CACAC,KAAAC,OACAC,QAAA,OAGA5C,IAAAA,GACA,OACApB,OAAA,KAEAiB,MAAA,KACAgD,KAAA,KACA5C,SAAA,EACAD,KAAA,KAEAJ,YAAA,GACAL,kBAAA,GACAP,aAAA,EACAgC,oBAAA,GAEA,EACA8B,SAAA,KACAC,EAAAA,EAAAA,IAAA,kDACAC,EAAAA,EAAAA,IAAA,4HACAzB,uBAAAA,GACA,OAAA0B,EAAAA,GAAAC,KAAA,KAAAlC,oBACA,EACAR,UAAAA,GACA,6BAAAR,KAAAmD,cACA,KAAAnD,KAAAmD,cAEA,IACA,EACA9C,IAAAA,GACA,YAAAzB,kBAAAwE,EAAAA,EACA,KAAAxE,OAEA,IACA,EACAC,UAAAA,GACA,YAAAyB,mBAAA,KAAAlB,iBAAA,KAAAO,UACA,EACAP,gBAAAA,GACA,YAAAiE,sBAAA,KAAAzE,kBAAAwE,EAAAA,GAAA,KAAAxE,OAAA0E,uBACA,EACA3D,UAAAA,GACA,YAAA4D,gBAAA,KAAA3E,kBAAAwE,EAAAA,GAAA,KAAAxE,OAAA4E,eACA,EACApD,cAAAA,GACA,YAAAE,mBACA,KAEA,CACAoC,KAAA,oBACAe,SAAA,KAAAvD,QACAwD,MAAA,GAEA,EACAxD,OAAAA,GACA,OAAA+C,EAAAA,GAAAC,KAAA,KAAAlD,MACA,SAEA,IAAA2D,EAAA,KAAArD,mBAAA,KAAAN,KAAA4D,YAAA,KAAA5D,KAAAyD,SACAf,EAAA,KAAApC,mBAAA,uBACA,OAAAuD,MAAAC,QAAAH,GAGAA,EACAI,KAAAC,IACA,IACA,IAAAf,EAAAA,GAAAgB,SAAAD,IAAAA,EAAAtB,OAAAA,EACA,YAEA,IACAwB,EADAC,EAAAlB,EAAAA,GAAAmB,eAAAJ,EAAAN,MAAA,QAEA,OAAAS,QAAA,IAAAA,GAAAA,EAAAE,OACAH,EAAAjB,EAAAA,GAAAqB,WAAAH,EAAAE,KAAA,KAAAxB,KAAAwB,OAEA,IAAAhE,EAAA,IAAA+C,EAAAA,EAAAY,EAAAE,EAAA,KAAAK,cAAAL,IAEA,OADA7D,GAAAmE,EAAAA,EAAAA,IAAA,KAAAC,OAAAC,MAAArE,GACAA,CACA,OAAAR,GAEA,OADA8E,QAAA9E,MAAAA,GACA,IACA,KAEA+E,QAAAZ,GAAAA,aAAAZ,EAAAA,IArBA,EAsBA,EACA7C,UAAAA,GACA,OAAA0C,EAAAA,GAAA4B,mBAAA,KAAA7E,KACA,EACA8E,OAAAA,GACA,YAAAxE,mBAAA,KAAAf,kBAAA,KAAAK,WACA,EACAU,kBAAAA,GACA,YAAAlB,kBAAA,SAAAJ,YACA,EACA+F,eAAAA,GACA,IAAAC,EAAA5B,EAAAA,EAAA6B,gBAAA,MAAAC,eAAA,KAAAC,WAAA,KAAAC,MAAA,KAAAC,cACA,YAAA/F,GAAA,0BAAA0F,SACA,GAEAM,MAAA,CACAtG,YAAAA,GACA,KAAAgB,KAAA,IACA,EACAnB,WAAA,CACA0G,WAAA,EACAC,OAAAA,GACA,KAAA3G,YACA,KAAA4G,UAEA,IAGA,aAAAC,GACA,IAAAxB,EAAA,KAAAyB,WACA,KAAAlD,YACAyB,EAAA,KAAA0B,gBAAA,KAAAnD,YACA,KAAA7D,OAAA,KAAAiH,QAAA3B,IAGA,KAAAtF,OAAA,KAAAwG,KAEA,KAAAxG,eACA,KAAA6F,OAAAqB,SAAA,QAAA5B,QACA,KAAAkB,MACA,KAAAX,OAAAsB,OAAA,UAAAJ,WAAAzB,IAEA,KAAAtF,OAAA,KAAAiH,QAAA3B,GACA,KAAAuB,WAEA,EACAO,QAAA,CACAxE,cAAAA,GACA,KAAAyE,KAAA,KAAArG,YAAA,cAAAsG,OAAAC,KAAA,KAAAnF,sBACA,KAAAhC,aAAA,EACA,KAAAgC,oBAAA,EACA,EACAG,mBAAAA,CAAAiF,GACA,KAAApF,oBAAAoF,EAAAnF,IACA,KAAAoF,QAAA,KAAArF,oBAAAoF,EAAAnF,IAGA,KAAAgF,KAAA,KAAAjF,oBAAAoF,EAAAnF,IAAA,EAEA,EACAF,cAAAA,CAAAf,GACA,OAAAA,aAAAoD,EAAAA,GACAkD,QAAAtG,EAAAuG,kBAGA,EACA,iBAAA9F,CAAAoC,GACA,KAAAhD,MAAA,KACA,KAAAI,SAAA,EACA,IACA,KAAA4C,KAAAI,EAAAA,GAAAuD,iBAAA3D,EAAA,KAAAiC,QAAA,KAAA2B,cAEA,IAAA7F,EAAA,KAAAN,mBAAA,yBACAoG,QAAAC,EAAAA,EAAAA,IAAA,KAAAlC,OAAA,KAAA5B,MACA6D,GACA,KAAAjB,SAAAiB,EAAAE,OAAA1C,KAEAjB,EAAAA,GAAAgB,SAAAyC,EAAA1G,OAAA6D,MAAAC,QAAA4C,EAAA1G,KAAAY,IAKA,KAAAZ,KAAA0G,EAAA1G,MAJA,KAAAA,KAAA,GACA,KAAAH,MAAA,KAAAP,GAAA,KAAAgB,mBAAA,2DAKA,OAAAT,GACA,KAAAG,KAAA,GACA,KAAAH,MAAAA,EAAAgH,OACA,SACA,KAAA5G,SAAA,CACA,CACA,EACA,gBAAAR,CAAAqF,EAAAgC,GAAA,GACA,KAAAxG,mBACA,KAAAf,kBAAAuF,EAGA,KAAAlF,YAAAkF,EAEAgC,EACA,KAAA9G,KAAA,WAGA,KAAAS,YAAA,KAAA5B,WAEA,EACA4G,QAAAA,CAAAvB,GACA,KAAAO,OAAAsB,OAAA,YACAf,MAAA,KAAA1F,GAAA,gBACAyH,YAAA,KAAAhC,gBACAb,OAEA,IC5RqP,I,WCQjP8C,GAAY,OACd,EACA1I,EACAqD,GACA,EACA,KACA,KACA,MAIF,EAAeqF,EAAiB,O","sources":["webpack://@radiantearth/stac-browser/./src/views/Search.vue","webpack://@radiantearth/stac-browser/src/views/Search.vue","webpack://@radiantearth/stac-browser/./src/views/Search.vue?713d","webpack://@radiantearth/stac-browser/./src/views/Search.vue?1f58"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('main',{staticClass:\"search d-flex flex-column\"},[(!_vm.parent)?_c('Loading',{attrs:{\"stretch\":\"\"}}):(!_vm.searchLink)?_c('b-alert',{attrs:{\"variant\":\"danger\",\"show\":\"\"}},[_vm._v(_vm._s(_vm.$t('search.notSupported')))]):_c('b-row',[_c('b-col',{staticClass:\"left\"},[_c('b-tabs',{model:{value:(_vm.activeSearch),callback:function ($$v) {_vm.activeSearch=$$v},expression:\"activeSearch\"}},[(_vm.collectionSearch)?_c('b-tab',{attrs:{\"title\":_vm.$t('search.tabs.collections')}},[_c('SearchFilter',{attrs:{\"parent\":_vm.parent,\"title\":\"\",\"value\":_vm.collectionFilters,\"type\":\"Collections\"},on:{\"input\":_vm.setFilters}})],1):_vm._e(),(_vm.itemSearch)?_c('b-tab',{attrs:{\"title\":_vm.$t('search.tabs.items')}},[_c('SearchFilter',{attrs:{\"parent\":_vm.parent,\"title\":\"\",\"value\":_vm.itemFilters,\"type\":\"Global\"},on:{\"input\":_vm.setFilters}})],1):_vm._e()],1)],1),_c('b-col',{staticClass:\"right\"},[(_vm.error)?_c('b-alert',{attrs:{\"variant\":\"error\",\"show\":\"\"}},[_vm._v(_vm._s(_vm.error))]):(!_vm.data && _vm.loading)?_c('Loading',{attrs:{\"fill\":\"\",\"top\":\"\"}}):(_vm.data === null)?_c('b-alert',{attrs:{\"variant\":\"info\",\"show\":\"\"}},[_vm._v(_vm._s(_vm.$t('search.modifyCriteria')))]):(_vm.results.length === 0)?_c('b-alert',{attrs:{\"variant\":\"warning\",\"show\":\"\"}},[_vm._v(_vm._s(_vm.$t('search.noItemsFound')))]):[(_vm.itemCollection)?_c('div',{attrs:{\"id\":\"search-map\"}},[_c('Map',{attrs:{\"stac\":_vm.stac,\"stacLayerData\":_vm.itemCollection,\"scrollWheelZoom\":\"\",\"popover\":\"\"}})],1):_vm._e(),(_vm.isCollectionSearch)?_c('Catalogs',{attrs:{\"catalogs\":_vm.results,\"collectionsOnly\":\"\",\"pagination\":_vm.pagination,\"loading\":_vm.loading,\"count\":_vm.totalCount},on:{\"paginate\":_vm.loadResults},scopedSlots:_vm._u([{key:\"catalogFooter\",fn:function(slot){return [(_vm.itemSearch || _vm.canFilterItems(slot.data))?_c('b-button-group',{attrs:{\"vertical\":\"\",\"size\":\"sm\"}},[(_vm.itemSearch)?_c('b-button',{attrs:{\"variant\":\"outline-primary\",\"pressed\":_vm.selectedCollections[slot.data.id]},on:{\"click\":function($event){return _vm.selectForItemSearch(slot.data)}}},[(_vm.selectedCollections[slot.data.id])?_c('b-icon-check-square'):_c('b-icon-square'),_c('span',{staticClass:\"ml-2\"},[_vm._v(_vm._s(_vm.$t('search.selectForItemSearch')))])],1):_vm._e(),_c('StacLink',{attrs:{\"button\":{variant: 'outline-primary', disabled: !_vm.canFilterItems(slot.data)},\"data\":slot.data,\"title\":_vm.$t('search.filterCollection'),\"state\":{itemFilterOpen: 1}}})],1):_vm._e()]}}],null,false,970447694)}):_c('Items',{attrs:{\"stac\":_vm.stac,\"items\":_vm.results,\"api\":true,\"allowFilter\":false,\"pagination\":_vm.pagination,\"loading\":_vm.loading,\"count\":_vm.totalCount},on:{\"paginate\":_vm.loadResults}})]],2)],1),(_vm.selectedCollectionCount > 0)?_c('b-alert',{staticClass:\"selected-collections-action\",attrs:{\"show\":\"\",\"variant\":\"dark\"}},[_c('b-button',{attrs:{\"variant\":\"primary\",\"size\":\"lg\"},on:{\"click\":_vm.openItemSearch}},[_vm._v(\" \"+_vm._s(_vm.$tc('search.useInItemSearch', _vm.selectedCollectionCount, {count: _vm.selectedCollectionCount}))+\" \")])],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n {{ $t('search.notSupported') }}\n \n \n \n \n \n \n \n \n \n \n \n \n {{ error }}\n \n {{ $t('search.modifyCriteria') }}\n {{ $t('search.noItemsFound') }}\n \n \n \n
\n \n \n \n \n \n \n {{ $t('search.selectForItemSearch') }}\n \n \n \n \n \n \n \n \n \n 0\" show variant=\"dark\" class=\"selected-collections-action\">\n \n {{ $tc('search.useInItemSearch', selectedCollectionCount, {count: selectedCollectionCount}) }}\n \n \n \n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Search.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Search.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Search.vue?vue&type=template&id=3fba11f1\"\nimport script from \"./Search.vue?vue&type=script&lang=js\"\nexport * from \"./Search.vue?vue&type=script&lang=js\"\nimport style0 from \"./Search.vue?vue&type=style&index=0&id=3fba11f1&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"names":["render","_vm","this","_c","_self","staticClass","parent","searchLink","model","value","activeSearch","callback","$$v","expression","collectionSearch","attrs","$t","collectionFilters","on","setFilters","_e","itemSearch","itemFilters","error","_v","_s","data","loading","results","length","itemCollection","stac","isCollectionSearch","pagination","totalCount","loadResults","scopedSlots","_u","key","fn","slot","canFilterItems","selectedCollections","id","$event","selectForItemSearch","variant","disabled","itemFilterOpen","selectedCollectionCount","openItemSearch","$tc","count","staticRenderFns","name","components","BIconCheckSquare","BIconSquare","BTab","BTabs","Catalogs","Loading","Items","Map","SearchFilter","StacLink","props","loadParent","type","String","default","link","computed","mapState","mapGetters","Utils","size","numberMatched","STAC","canSearchCollections","getApiCollectionsLink","canSearchItems","getSearchLink","features","links","list","collections","Array","isArray","map","obj","isObject","url","selfLink","getLinkWithRel","href","toAbsolute","toBrowserPath","processSTAC","$store","state","console","filter","getPaginationLinks","filters","pageDescription","title","getDisplayTitle","collectionLink","parentLink","root","catalogTitle","watch","immediate","handler","showPage","created","catalogUrl","fromBrowserPath","getStac","dispatch","commit","methods","$set","Object","keys","collection","$delete","Boolean","getApiItemsLink","addFiltersToLink","itemsPerPage","response","stacRequest","config","message","reset","description","component"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"js/6312.5c2c4410.js","mappings":"sMAAA,IAAIA,EAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,OAAO,CAACE,YAAY,6BAA6B,CAAGJ,EAAIK,OAA+CL,EAAIM,WAAiHJ,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,YAAY,QAAQ,CAACF,EAAG,SAAS,CAACK,MAAM,CAACC,MAAOR,EAAIS,aAAcC,SAAS,SAAUC,GAAMX,EAAIS,aAAaE,CAAG,EAAEC,WAAW,iBAAiB,CAAEZ,EAAIa,iBAAkBX,EAAG,QAAQ,CAACY,MAAM,CAAC,MAAQd,EAAIe,GAAG,6BAA6B,CAACb,EAAG,eAAe,CAACY,MAAM,CAAC,OAASd,EAAIK,OAAO,MAAQ,GAAG,MAAQL,EAAIgB,kBAAkB,KAAO,eAAeC,GAAG,CAAC,MAAQjB,EAAIkB,eAAe,GAAGlB,EAAImB,KAAMnB,EAAIoB,WAAYlB,EAAG,QAAQ,CAACY,MAAM,CAAC,MAAQd,EAAIe,GAAG,uBAAuB,CAACb,EAAG,eAAe,CAACY,MAAM,CAAC,OAASd,EAAIK,OAAO,MAAQ,GAAG,MAAQL,EAAIqB,YAAY,KAAO,UAAUJ,GAAG,CAAC,MAAQjB,EAAIkB,eAAe,GAAGlB,EAAImB,MAAM,IAAI,GAAGjB,EAAG,QAAQ,CAACE,YAAY,SAAS,CAAEJ,EAAIsB,MAAOpB,EAAG,UAAU,CAACY,MAAM,CAAC,QAAU,QAAQ,KAAO,KAAK,CAACd,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAIsB,WAAYtB,EAAIyB,MAAQzB,EAAI0B,QAASxB,EAAG,UAAU,CAACY,MAAM,CAAC,KAAO,GAAG,IAAM,MAAoB,OAAbd,EAAIyB,KAAevB,EAAG,UAAU,CAACY,MAAM,CAAC,QAAU,OAAO,KAAO,KAAK,CAACd,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAIe,GAAG,6BAAqD,IAAvBf,EAAI2B,QAAQC,OAAc1B,EAAG,UAAU,CAACY,MAAM,CAAC,QAAU,UAAU,KAAO,KAAK,CAACd,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAIe,GAAG,2BAA2B,CAAEf,EAAI6B,eAAgB3B,EAAG,MAAM,CAACY,MAAM,CAAC,GAAK,eAAe,CAACZ,EAAG,MAAM,CAACY,MAAM,CAAC,KAAOd,EAAI8B,KAAK,cAAgB9B,EAAI6B,eAAe,gBAAkB,GAAG,QAAU,OAAO,GAAG7B,EAAImB,KAAMnB,EAAI+B,mBAAoB7B,EAAG,WAAW,CAACY,MAAM,CAAC,SAAWd,EAAI2B,QAAQ,gBAAkB,GAAG,WAAa3B,EAAIgC,WAAW,QAAUhC,EAAI0B,QAAQ,MAAQ1B,EAAIiC,YAAYhB,GAAG,CAAC,SAAWjB,EAAIkC,aAAaC,YAAYnC,EAAIoC,GAAG,CAAC,CAACC,IAAI,gBAAgBC,GAAG,SAASC,GAAM,MAAO,CAAEvC,EAAIoB,YAAcpB,EAAIwC,eAAeD,EAAKd,MAAOvB,EAAG,iBAAiB,CAACY,MAAM,CAAC,SAAW,GAAG,KAAO,OAAO,CAAEd,EAAIoB,WAAYlB,EAAG,WAAW,CAACY,MAAM,CAAC,QAAU,kBAAkB,QAAUd,EAAIyC,oBAAoBF,EAAKd,KAAKiB,KAAKzB,GAAG,CAAC,MAAQ,SAAS0B,GAAQ,OAAO3C,EAAI4C,oBAAoBL,EAAKd,KAAK,IAAI,CAAEzB,EAAIyC,oBAAoBF,EAAKd,KAAKiB,IAAKxC,EAAG,uBAAuBA,EAAG,iBAAiBA,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACJ,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAIe,GAAG,mCAAmC,GAAGf,EAAImB,KAAKjB,EAAG,WAAW,CAACY,MAAM,CAAC,OAAS,CAAC+B,QAAS,kBAAmBC,UAAW9C,EAAIwC,eAAeD,EAAKd,OAAO,KAAOc,EAAKd,KAAK,MAAQzB,EAAIe,GAAG,2BAA2B,MAAQ,CAACgC,eAAgB,OAAO,GAAG/C,EAAImB,KAAK,IAAI,MAAK,EAAM,aAAajB,EAAG,QAAQ,CAACY,MAAM,CAAC,KAAOd,EAAI8B,KAAK,MAAQ9B,EAAI2B,QAAQ,KAAM,EAAK,aAAc,EAAM,WAAa3B,EAAIgC,WAAW,QAAUhC,EAAI0B,QAAQ,MAAQ1B,EAAIiC,YAAYhB,GAAG,CAAC,SAAWjB,EAAIkC,iBAAiB,IAAI,GAAv+EhC,EAAG,UAAU,CAACY,MAAM,CAAC,QAAU,SAAS,KAAO,KAAK,CAACd,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAIe,GAAG,2BAAjIb,EAAG,UAAU,CAACY,MAAM,CAAC,QAAU,MAAmgFd,EAAIgD,wBAA0B,EAAG9C,EAAG,UAAU,CAACE,YAAY,8BAA8BU,MAAM,CAAC,KAAO,GAAG,QAAU,SAAS,CAACZ,EAAG,WAAW,CAACY,MAAM,CAAC,QAAU,UAAU,KAAO,MAAMG,GAAG,CAAC,MAAQjB,EAAIiD,iBAAiB,CAACjD,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGxB,EAAIkD,IAAI,yBAA0BlD,EAAIgD,wBAAyB,CAACG,MAAOnD,EAAIgD,2BAA2B,QAAQ,GAAGhD,EAAImB,MAAM,EAC5gG,EACIiC,EAAkB,G,kGCsEtB,GACAC,KAAA,SACAC,WAAA,CACAC,iBAAA,MACAC,YAAA,MACAC,KAAA,IACAC,MAAA,IACAC,SAAAA,IAAA,wCACAC,QAAA,IACAC,MAAAA,IAAA,wCACAC,IAAAA,IAAA,gCACAC,aAAA,aACAC,SAAAA,IAAA,yCAEAC,MAAA,CACAC,WAAA,CACAC,KAAAC,OACAC,QAAA,OAGA5C,IAAAA,GACA,OACApB,OAAA,KAEAiB,MAAA,KACAgD,KAAA,KACA5C,SAAA,EACAD,KAAA,KAEAJ,YAAA,GACAL,kBAAA,GACAP,aAAA,EACAgC,oBAAA,GAEA,EACA8B,SAAA,KACAC,EAAAA,EAAAA,IAAA,kDACAC,EAAAA,EAAAA,IAAA,4HACAzB,uBAAAA,GACA,OAAA0B,EAAAA,GAAAC,KAAA,KAAAlC,oBACA,EACAR,UAAAA,GACA,6BAAAR,KAAAmD,cACA,KAAAnD,KAAAmD,cAEA,IACA,EACA9C,IAAAA,GACA,YAAAzB,kBAAAwE,EAAAA,EACA,KAAAxE,OAEA,IACA,EACAC,UAAAA,GACA,YAAAyB,mBAAA,KAAAlB,iBAAA,KAAAO,UACA,EACAP,gBAAAA,GACA,YAAAiE,sBAAA,KAAAzE,kBAAAwE,EAAAA,GAAA,KAAAxE,OAAA0E,uBACA,EACA3D,UAAAA,GACA,YAAA4D,gBAAA,KAAA3E,kBAAAwE,EAAAA,GAAA,KAAAxE,OAAA4E,eACA,EACApD,cAAAA,GACA,YAAAE,mBACA,KAEA,CACAoC,KAAA,oBACAe,SAAA,KAAAvD,QACAwD,MAAA,GAEA,EACAxD,OAAAA,GACA,OAAA+C,EAAAA,GAAAC,KAAA,KAAAlD,MACA,SAEA,IAAA2D,EAAA,KAAArD,mBAAA,KAAAN,KAAA4D,YAAA,KAAA5D,KAAAyD,SACAf,EAAA,KAAApC,mBAAA,uBACA,OAAAuD,MAAAC,QAAAH,GAGAA,EACAI,KAAAC,IACA,IACA,IAAAf,EAAAA,GAAAgB,SAAAD,IAAAA,EAAAtB,OAAAA,EACA,YAEA,IACAwB,EADAC,EAAAlB,EAAAA,GAAAmB,eAAAJ,EAAAN,MAAA,QAEA,OAAAS,QAAA,IAAAA,GAAAA,EAAAE,OACAH,EAAAjB,EAAAA,GAAAqB,WAAAH,EAAAE,KAAA,KAAAxB,KAAAwB,OAEA,IAAAhE,EAAA,IAAA+C,EAAAA,EAAAY,EAAAE,EAAA,KAAAK,cAAAL,IAEA,OADA7D,GAAAmE,EAAAA,EAAAA,IAAA,KAAAC,OAAAC,MAAArE,GACAA,CACA,OAAAR,GAEA,OADA8E,QAAA9E,MAAAA,GACA,IACA,KAEA+E,QAAAZ,GAAAA,aAAAZ,EAAAA,IArBA,EAsBA,EACA7C,UAAAA,GACA,OAAA0C,EAAAA,GAAA4B,mBAAA,KAAA7E,KACA,EACA8E,OAAAA,GACA,YAAAxE,mBAAA,KAAAf,kBAAA,KAAAK,WACA,EACAU,kBAAAA,GACA,YAAAlB,kBAAA,SAAAJ,YACA,EACA+F,eAAAA,GACA,IAAAC,EAAA5B,EAAAA,EAAA6B,gBAAA,MAAAC,eAAA,KAAAC,WAAA,KAAAC,MAAA,KAAAC,cACA,YAAA/F,GAAA,0BAAA0F,SACA,GAEAM,MAAA,CACAtG,YAAAA,GACA,KAAAgB,KAAA,IACA,EACAnB,WAAA,CACA0G,WAAA,EACAC,OAAAA,GACA,KAAA3G,YACA,KAAA4G,UAEA,IAGA,aAAAC,GACA,IAAAxB,EAAA,KAAAyB,WACA,KAAAlD,YACAyB,EAAA,KAAA0B,gBAAA,KAAAnD,YACA,KAAA7D,OAAA,KAAAiH,QAAA3B,IAGA,KAAAtF,OAAA,KAAAwG,KAEA,KAAAxG,eACA,KAAA6F,OAAAqB,SAAA,QAAA5B,QACA,KAAAkB,MACA,KAAAX,OAAAsB,OAAA,UAAAJ,WAAAzB,IAEA,KAAAtF,OAAA,KAAAiH,QAAA3B,GACA,KAAAuB,WAEA,EACAO,QAAA,CACAxE,cAAAA,GACA,KAAAyE,KAAA,KAAArG,YAAA,cAAAsG,OAAAC,KAAA,KAAAnF,sBACA,KAAAhC,aAAA,EACA,KAAAgC,oBAAA,EACA,EACAG,mBAAAA,CAAAiF,GACA,KAAApF,oBAAAoF,EAAAnF,IACA,KAAAoF,QAAA,KAAArF,oBAAAoF,EAAAnF,IAGA,KAAAgF,KAAA,KAAAjF,oBAAAoF,EAAAnF,IAAA,EAEA,EACAF,cAAAA,CAAAf,GACA,OAAAA,aAAAoD,EAAAA,GACAkD,QAAAtG,EAAAuG,kBAGA,EACA,iBAAA9F,CAAAoC,GACA,KAAAhD,MAAA,KACA,KAAAI,SAAA,EACA,IACA,KAAA4C,KAAAI,EAAAA,GAAAuD,iBAAA3D,EAAA,KAAAiC,QAAA,KAAA2B,cAEA,IAAA7F,EAAA,KAAAN,mBAAA,yBACAoG,QAAAC,EAAAA,EAAAA,IAAA,KAAAlC,OAAA,KAAA5B,MACA6D,GACA,KAAAjB,SAAAiB,EAAAE,OAAA1C,KAEAjB,EAAAA,GAAAgB,SAAAyC,EAAA1G,OAAA6D,MAAAC,QAAA4C,EAAA1G,KAAAY,IAKA,KAAAZ,KAAA0G,EAAA1G,MAJA,KAAAA,KAAA,GACA,KAAAH,MAAA,KAAAP,GAAA,KAAAgB,mBAAA,2DAKA,OAAAT,GACA,KAAAG,KAAA,GACA,KAAAH,MAAAA,EAAAgH,OACA,SACA,KAAA5G,SAAA,CACA,CACA,EACA,gBAAAR,CAAAqF,EAAAgC,GAAA,GACA,KAAAxG,mBACA,KAAAf,kBAAAuF,EAGA,KAAAlF,YAAAkF,EAEAgC,EACA,KAAA9G,KAAA,WAGA,KAAAS,YAAA,KAAA5B,WAEA,EACA4G,QAAAA,CAAAvB,GACA,KAAAO,OAAAsB,OAAA,YACAf,MAAA,KAAA1F,GAAA,gBACAyH,YAAA,KAAAhC,gBACAb,OAEA,IC5RqP,I,WCQjP8C,GAAY,OACd,EACA1I,EACAqD,GACA,EACA,KACA,KACA,MAIF,EAAeqF,EAAiB,O","sources":["webpack://@radiantearth/stac-browser/./src/views/Search.vue","webpack://@radiantearth/stac-browser/src/views/Search.vue","webpack://@radiantearth/stac-browser/./src/views/Search.vue?713d","webpack://@radiantearth/stac-browser/./src/views/Search.vue?1f58"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('main',{staticClass:\"search d-flex flex-column\"},[(!_vm.parent)?_c('Loading',{attrs:{\"stretch\":\"\"}}):(!_vm.searchLink)?_c('b-alert',{attrs:{\"variant\":\"danger\",\"show\":\"\"}},[_vm._v(_vm._s(_vm.$t('search.notSupported')))]):_c('b-row',[_c('b-col',{staticClass:\"left\"},[_c('b-tabs',{model:{value:(_vm.activeSearch),callback:function ($$v) {_vm.activeSearch=$$v},expression:\"activeSearch\"}},[(_vm.collectionSearch)?_c('b-tab',{attrs:{\"title\":_vm.$t('search.tabs.collections')}},[_c('SearchFilter',{attrs:{\"parent\":_vm.parent,\"title\":\"\",\"value\":_vm.collectionFilters,\"type\":\"Collections\"},on:{\"input\":_vm.setFilters}})],1):_vm._e(),(_vm.itemSearch)?_c('b-tab',{attrs:{\"title\":_vm.$t('search.tabs.items')}},[_c('SearchFilter',{attrs:{\"parent\":_vm.parent,\"title\":\"\",\"value\":_vm.itemFilters,\"type\":\"Global\"},on:{\"input\":_vm.setFilters}})],1):_vm._e()],1)],1),_c('b-col',{staticClass:\"right\"},[(_vm.error)?_c('b-alert',{attrs:{\"variant\":\"error\",\"show\":\"\"}},[_vm._v(_vm._s(_vm.error))]):(!_vm.data && _vm.loading)?_c('Loading',{attrs:{\"fill\":\"\",\"top\":\"\"}}):(_vm.data === null)?_c('b-alert',{attrs:{\"variant\":\"info\",\"show\":\"\"}},[_vm._v(_vm._s(_vm.$t('search.modifyCriteria')))]):(_vm.results.length === 0)?_c('b-alert',{attrs:{\"variant\":\"warning\",\"show\":\"\"}},[_vm._v(_vm._s(_vm.$t('search.noItemsFound')))]):[(_vm.itemCollection)?_c('div',{attrs:{\"id\":\"search-map\"}},[_c('Map',{attrs:{\"stac\":_vm.stac,\"stacLayerData\":_vm.itemCollection,\"scrollWheelZoom\":\"\",\"popover\":\"\"}})],1):_vm._e(),(_vm.isCollectionSearch)?_c('Catalogs',{attrs:{\"catalogs\":_vm.results,\"collectionsOnly\":\"\",\"pagination\":_vm.pagination,\"loading\":_vm.loading,\"count\":_vm.totalCount},on:{\"paginate\":_vm.loadResults},scopedSlots:_vm._u([{key:\"catalogFooter\",fn:function(slot){return [(_vm.itemSearch || _vm.canFilterItems(slot.data))?_c('b-button-group',{attrs:{\"vertical\":\"\",\"size\":\"sm\"}},[(_vm.itemSearch)?_c('b-button',{attrs:{\"variant\":\"outline-primary\",\"pressed\":_vm.selectedCollections[slot.data.id]},on:{\"click\":function($event){return _vm.selectForItemSearch(slot.data)}}},[(_vm.selectedCollections[slot.data.id])?_c('b-icon-check-square'):_c('b-icon-square'),_c('span',{staticClass:\"ml-2\"},[_vm._v(_vm._s(_vm.$t('search.selectForItemSearch')))])],1):_vm._e(),_c('StacLink',{attrs:{\"button\":{variant: 'outline-primary', disabled: !_vm.canFilterItems(slot.data)},\"data\":slot.data,\"title\":_vm.$t('search.filterCollection'),\"state\":{itemFilterOpen: 1}}})],1):_vm._e()]}}],null,false,970447694)}):_c('Items',{attrs:{\"stac\":_vm.stac,\"items\":_vm.results,\"api\":true,\"allowFilter\":false,\"pagination\":_vm.pagination,\"loading\":_vm.loading,\"count\":_vm.totalCount},on:{\"paginate\":_vm.loadResults}})]],2)],1),(_vm.selectedCollectionCount > 0)?_c('b-alert',{staticClass:\"selected-collections-action\",attrs:{\"show\":\"\",\"variant\":\"dark\"}},[_c('b-button',{attrs:{\"variant\":\"primary\",\"size\":\"lg\"},on:{\"click\":_vm.openItemSearch}},[_vm._v(\" \"+_vm._s(_vm.$tc('search.useInItemSearch', _vm.selectedCollectionCount, {count: _vm.selectedCollectionCount}))+\" \")])],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n {{ $t('search.notSupported') }}\n \n \n \n \n \n \n \n \n \n \n \n \n {{ error }}\n \n {{ $t('search.modifyCriteria') }}\n {{ $t('search.noItemsFound') }}\n \n \n \n
\n \n \n \n \n \n \n {{ $t('search.selectForItemSearch') }}\n \n \n \n \n \n \n \n \n \n 0\" show variant=\"dark\" class=\"selected-collections-action\">\n \n {{ $tc('search.useInItemSearch', selectedCollectionCount, {count: selectedCollectionCount}) }}\n \n \n \n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Search.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Search.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Search.vue?vue&type=template&id=3fba11f1\"\nimport script from \"./Search.vue?vue&type=script&lang=js\"\nexport * from \"./Search.vue?vue&type=script&lang=js\"\nimport style0 from \"./Search.vue?vue&type=style&index=0&id=3fba11f1&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"names":["render","_vm","this","_c","_self","staticClass","parent","searchLink","model","value","activeSearch","callback","$$v","expression","collectionSearch","attrs","$t","collectionFilters","on","setFilters","_e","itemSearch","itemFilters","error","_v","_s","data","loading","results","length","itemCollection","stac","isCollectionSearch","pagination","totalCount","loadResults","scopedSlots","_u","key","fn","slot","canFilterItems","selectedCollections","id","$event","selectForItemSearch","variant","disabled","itemFilterOpen","selectedCollectionCount","openItemSearch","$tc","count","staticRenderFns","name","components","BIconCheckSquare","BIconSquare","BTab","BTabs","Catalogs","Loading","Items","Map","SearchFilter","StacLink","props","loadParent","type","String","default","link","computed","mapState","mapGetters","Utils","size","numberMatched","STAC","canSearchCollections","getApiCollectionsLink","canSearchItems","getSearchLink","features","links","list","collections","Array","isArray","map","obj","isObject","url","selfLink","getLinkWithRel","href","toAbsolute","toBrowserPath","processSTAC","$store","state","console","filter","getPaginationLinks","filters","pageDescription","title","getDisplayTitle","collectionLink","parentLink","root","catalogTitle","watch","immediate","handler","showPage","created","catalogUrl","fromBrowserPath","getStac","dispatch","commit","methods","$set","Object","keys","collection","$delete","Boolean","getApiItemsLink","addFiltersToLink","itemsPerPage","response","stacRequest","config","message","reset","description","component"],"sourceRoot":""}
\ No newline at end of file
diff --git a/js/app.2760bdf7.js b/js/app.2760bdf7.js
deleted file mode 100644
index d4091d7f4..000000000
--- a/js/app.2760bdf7.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(function(){var t={44774:function(t,e,a){"use strict";a.d(e,{A:function(){return g}});var s=function(){var t=this,e=t._self._c;return e("b-card",{directives:[{name:"b-visible",rawName:"v-b-visible.400",value:t.load,expression:"load",modifiers:{400:!0}}],class:t.classes,attrs:{"no-body":"","img-right":t.isList}},[t.hasImage?e("b-card-img-lazy",t._b({staticClass:"thumbnail",attrs:{offset:"200"}},"b-card-img-lazy",t.thumbnail,!1)):t._e(),e("b-card-body",[e("b-card-title",[e("StacLink",{staticClass:"stretched-link",attrs:{data:[t.data,t.catalog]}})],1),t.data&&(t.fileFormats.length>0||t.data.description||t.data.deprecated)?e("b-card-text",{staticClass:"intro"},[t.data.deprecated?e("b-badge",{staticClass:"mr-1 mt-1 deprecated",attrs:{variant:"warning"}},[t._v(t._s(t.$t("deprecated")))]):t._e(),t._l(t.fileFormats,(function(a){return e("b-badge",{key:a,staticClass:"mr-1 mt-1 fileformat",attrs:{variant:"secondary"}},[t._v(t._s(t._f("formatMediaType")(a)))])})),t._v(" "+t._s(t._f("summarize")(t.data.description))+" ")],2):t._e(),t.temporalExtent?e("b-card-text",{staticClass:"datetime"},[e("small",{domProps:{innerHTML:t._s(t.temporalExtent)}})]):t._e()],1),e("b-card-footer",[t._t("footer",null,{data:t.data})],2)],1)},r=[],i=(a(44114),a(95353)),n=a(67467),o=a(97685),l=a(58581),c=a(31831),u=a(50735),d=a(2566),h={name:"Catalog",components:{StacLink:l["default"]},filters:{summarize:t=>d.Ay.summarizeMd(t,300),formatMediaType:t=>(0,u.formatMediaType)(t,null,{shorten:!0})},mixins:[o.A,(0,n.A)({formatTemporalExtent:u.formatTemporalExtent})],props:{catalog:{type:Object,required:!0}},computed:{...(0,i.L8)(["getStac"]),classes(){let t=["catalog-card"];return this.data||t.push("queued"),this.data&&this.data.deprecated&&t.push("deprecated"),this.hasImage&&t.push("has-thumbnail"),this.temporalExtent&&t.push("has-extent"),t},data(){return this.getStac(this.catalog)},temporalExtent(){var t,e,a;if(null!==(t=this.data)&&void 0!==t&&t.isCollection()&&(null===(e=this.data.extent)||void 0===e||null===(a=e.temporal)||void 0===a?void 0:a.interval.length)>0){let t=this.data.extent.temporal.interval[0];if(Array.isArray(t)&&("string"===typeof t[0]||"string"===typeof t[1]))return this.formatTemporalExtent(this.data.extent.temporal.interval[0],!0)}return null},fileFormats(){return this.data?this.data.getFileFormats():[]}},methods:{load(t){this.catalog instanceof c.A||this.$store.commit(t?"queue":"unqueue",this.catalog.href)}}},p=h,f=a(81656),m=(0,f.A)(p,s,r,!1,null,null,null),g=m.exports},18353:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return _}});var s=function(){var t=this,e=t._self._c;return e("section",{staticClass:"catalogs mb-4"},[e("header",[e("h2",{staticClass:"title mr-2"},[t._v(t._s(t.title))]),null!==t.catalogCount?e("b-badge",{staticClass:"mr-4",attrs:{pill:"",variant:"secondary"}},[t._v(t._s(t.catalogCount))]):t._e(),e("ViewButtons",{staticClass:"mr-2",model:{value:t.view,callback:function(e){t.view=e},expression:"view"}}),t.isComplete&&t.catalogs.length>1?e("SortButtons",{model:{value:t.sort,callback:function(e){t.sort=e},expression:"sort"}}):t._e()],1),t.isComplete&&t.catalogs.length>1?e("SearchBox",{staticClass:"mt-1 mb-1",attrs:{placeholder:t.filterPlaceholder},model:{value:t.searchTerm,callback:function(e){t.searchTerm=e},expression:"searchTerm"}}):t._e(),t.showPagination?e("Pagination",{ref:"topPagination",attrs:{pagination:t.pagination,placement:"top"},on:{paginate:t.paginate}}):t._e(),t.searchTerm&&0===t.catalogView.length?e("b-alert",{attrs:{variant:"warning",show:""}},[t._v(t._s(t.$t("catalogs.noMatches")))]):t._e(),e("section",{staticClass:"list"},[t.loading?e("Loading",{attrs:{fill:"",top:""}}):t._e(),e(t.cardsComponent,t._b({tag:"component"},"component",t.cardsComponentProps,!1),t._l(t.catalogView,(function(a){return e("Catalog",{key:a.href,attrs:{catalog:a},scopedSlots:t._u([{key:"footer",fn:function({data:e}){return[t._t("catalogFooter",null,{data:e})]}}],null,!0)})})),1)],1),t.showPagination?e("Pagination",{attrs:{pagination:t.pagination},on:{paginate:t.paginate}}):t.hasMore?e("b-button",{directives:[{name:"b-visible",rawName:"v-b-visible.300",value:t.loadMore,expression:"loadMore",modifiers:{300:!0}}],attrs:{variant:"primary"},on:{click:t.loadMore}},[t._v(t._s(t.$t("catalogs.loadMore")))]):t._e()],1)},r=[],i=(a(44114),a(95353)),n=a(44774),o=a(39773),l=a(31831),c=function(){var t=this,e=t._self._c;return e("b-button-group",{attrs:{title:t.$t("view.title"),size:"sm"}},[e("b-button",{attrs:{title:t.$t("view.tiles.title"),variant:"outline-primary",pressed:"cards"===t.value},on:{click:function(e){return t.toggle("cards")}}},[e("b-icon-bricks"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("view.tiles.label")))])],1),e("b-button",{attrs:{title:t.$t("view.list.title"),variant:"outline-primary",pressed:"list"===t.value},on:{click:function(e){return t.toggle("list")}}},[e("b-icon-list-task"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("view.list.label")))])],1)],1)},u=[],d=a(82948),h={id:"SortButtons",components:{BIconBricks:d.Muv,BIconListTask:d.Xjw},props:{value:{type:String,default:"cards"}},methods:{toggle(t){this.value!==t&&this.$emit("input",t)}}},p=h,f=a(81656),m=(0,f.A)(p,c,u,!1,null,null,null),g=m.exports,b={components:{ViewButtons:g},computed:{cardsComponent(){return"list"===this.view?"div":"b-card-group"},cardsComponentProps(){return"list"===this.view?{class:["card-list"]}:{columns:!0}},view:{get(){return this.$store.state.cardViewMode},set(t){this.$store.commit("config",{cardViewMode:t})}}}},y=a(2566),A={name:"Catalogs",components:{Catalog:n.A,Loading:o.A,Pagination:()=>Promise.resolve().then(a.bind(a,70678)),SearchBox:()=>a.e(9363).then(a.bind(a,79363)),SortButtons:()=>a.e(771).then(a.bind(a,40771))},mixins:[b],props:{catalogs:{type:Array,required:!0},collectionsOnly:{type:Boolean,required:!1},loading:{type:Boolean,default:!1},hasMore:{type:Boolean,default:!1},pagination:{type:Object,default:()=>({})},count:{type:Number,default:null}},data(){return{searchTerm:"",sort:0}},computed:{...(0,i.aH)(["cardViewSort","uiLanguage"]),...(0,i.L8)(["getStac"]),catalogCount(){return this.catalogs.length!==this.catalogView.length?this.catalogView.length+"/"+this.catalogs.length:null!==this.count?this.count:this.isComplete?this.catalogs.length:null},title(){return this.collectionsOnly?this.$tc("stacCollection",this.catalogs.length):this.$tc("stacCatalog",this.catalogs.length)},isComplete(){return!this.hasMore&&!this.showPagination},filterPlaceholder(){return this.isComplete?this.$t("catalogs.filterByTitle"):this.$t("catalogs.filterByTitleAndMore")},showPagination(){return Object.values(this.pagination).some((t=>!!t))},catalogView(){if(this.hasMore)return this.catalogs;let t=this.catalogs.map((t=>{let e=this.getStac(t);return e||t}));return this.searchTerm&&(t=t.filter((t=>{let e=[t.title];return t instanceof l.A?(e.push(t.id),Array.isArray(t.keywords)&&(e=e.concat(t.keywords))):e.push(t.href),y.Ay.search(this.searchTerm,e)}))),this.hasMore||0===this.sort||(t=t.slice(0).sort(((t,e)=>l.A.getDisplayTitle(t).localeCompare(l.A.getDisplayTitle(e),this.uiLanguage))),-1===this.sort&&(t=t.reverse())),t}},created(){this.sort=this.cardViewSort},methods:{loadMore(t=!0){t&&(this.sort=0,this.$emit("loadMore"))},paginate(t,e){"bottom"===e&&this.$refs.topPagination&&y.Ay.scrollTo(this.$refs.topPagination.$el),this.$emit("paginate",t)}}},v=A,w=(0,f.A)(v,s,r,!1,null,null,null),_=w.exports},22356:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return d}});var s=function(){var t=this,e=t._self._c;return e("b-button",t._b({staticClass:"copy-button",attrs:{variant:t.copyColor,title:t.$t("copy")},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.copy.apply(null,arguments)}}},"b-button",t.buttonProps,!1),[e(t.copyIcon,{tag:"component"}),t._t("default")],2)},r=[],i=a(82948),n=a(14405),o={name:"CopyButton",components:{BIconClipboard:i.ceV,BIconClipboardCheck:i.mD4,BIconClipboardX:i.A6N},props:{copyText:{type:String,required:!0},variant:{type:String,default:"primary"},buttonProps:{type:Object,default:()=>({})}},data(){return{status:null}},computed:{copyColor(){let t=this.variant;return!0===this.status?t="success":!1===this.status&&(t="danger"),this.variant.startsWith("outline-")&&(t="outline-"+t),t},copyIcon(){return!0===this.status?"b-icon-clipboard-check":!1===this.status?"b-icon-clipboard-x":"b-icon-clipboard"}},methods:{async copy(){try{let t=document.activeElement;await n.B.copy(this.copyText),t.focus(),this.status=!0}catch(t){console.error(t),this.status=!1}setTimeout((()=>this.status=null),2500)}}},l=o,c=a(81656),u=(0,c.A)(l,s,r,!1,null,null,null),d=u.exports},41526:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return u}});var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"styled-description",class:{compact:t.compact,inline:t.inline},domProps:{innerHTML:t._s(t.markup(t.description))}})},r=[],i=a(30855),n={name:"Description",props:{description:{type:String,default:""},compact:{type:Boolean,default:!1},inline:{type:Boolean,default:!1},allowHTML:{type:Boolean,default:!1}},methods:{markup(t){if("string"!==typeof t)return"";var e=new i.iX,a=new i.j6({safe:!this.allowHTML,smart:!0}),s=e.parse(t);return a.render(s)}}},o=n,l=a(81656),c=(0,l.A)(o,s,r,!1,null,null,null),u=c.exports},98598:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return b}});var s=function(){var t=this,e=t._self._c;return e("b-card",{directives:[{name:"b-visible",rawName:"v-b-visible.400",value:t.load,expression:"load",modifiers:{400:!0}}],staticClass:"item-card",class:{queued:!t.data,deprecated:t.isDeprecated,description:t.hasDescription},attrs:{"no-body":""}},[t.hasImage?e("b-card-img-lazy",t._b({staticClass:"thumbnail",attrs:{offset:"200"}},"b-card-img-lazy",t.thumbnail,!1)):t._e(),e("b-card-body",[e("b-card-title",[e("StacLink",{staticClass:"stretched-link",attrs:{data:[t.data,t.item]}})],1),t.fileFormats.length>0||t.hasDescription||t.isDeprecated?e("b-card-text",{staticClass:"intro"},[t.isDeprecated?e("b-badge",{staticClass:"mr-1 mt-1 deprecated",attrs:{variant:"warning"}},[t._v(t._s(t.$t("deprecated")))]):t._e(),t._l(t.fileFormats,(function(a){return e("b-badge",{key:a,staticClass:"mr-1 mt-1 fileformat",attrs:{variant:"secondary"}},[t._v(t._s(t._f("formatMediaType")(a)))])})),t.hasDescription?[t._v(t._s(t._f("summarize")(t.data.properties.description)))]:t._e()],2):t._e(),e("b-card-text",[e("small",{staticClass:"text-muted"},[t.extent?[t._v(t._s(t._f("formatTemporalExtent")(t.extent)))]:t.data&&t.data.properties.datetime?[t._v(t._s(t._f("formatTimestamp")(t.data.properties.datetime)))]:[t._v(t._s(t.$t("items.noTime")))]],2)])],1)],1)},r=[],i=a(95353),n=a(97685),o=a(58581),l=a(31831),c=a(50735),u=a(19087),d=a.n(u),h=a(2566);d().addDependency("content-type",a(58597));var p={name:"Item",components:{StacLink:o["default"]},filters:{summarize:t=>h.Ay.summarizeMd(t,150),formatMediaType:t=>(0,c.formatMediaType)(t,null,{shorten:!0}),formatTemporalExtent:c.formatTemporalExtent,formatTimestamp:c.formatTimestamp},mixins:[n.A],props:{item:{type:Object,required:!0}},computed:{...(0,i.L8)(["getStac"]),data(){return this.getStac(this.item)},extent(){return this.data&&(this.data.properties.start_datetime||this.data.properties.end_datetime)?[this.data.properties.start_datetime,this.data.properties.end_datetime]:null},fileFormats(){return this.data?this.data.getFileFormats():[]},isDeprecated(){return this.data instanceof l.A&&Boolean(this.data.properties.deprecated)},hasDescription(){return this.data instanceof l.A&&h.Ay.hasText(this.data.properties.description)}},methods:{load(t){this.item instanceof l.A||this.$store.commit(t?"queue":"unqueue",this.item.href)}}},f=p,m=a(81656),g=(0,m.A)(f,s,r,!1,null,null,null),b=g.exports},49728:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return b}});var s=function(){var t=this,e=t._self._c;return e("section",{staticClass:"items mb-4"},[e("header",[e("h2",{staticClass:"title mr-2"},[t._v(t._s(t.$tc("stacItem",t.items.length)))]),null!==t.itemCount?e("b-badge",{staticClass:"mr-4",attrs:{pill:"",variant:"secondary"}},[t._v(t._s(t.itemCount))]):t._e(),!t.api&&t.items.length>1?e("SortButtons",{model:{value:t.sort,callback:function(e){t.sort=e},expression:"sort"}}):t._e()],1),t.showPagination?e("Pagination",{ref:"topPagination",attrs:{pagination:t.pagination,placement:"top"},on:{paginate:t.paginate}}):t._e(),t.allowFilter?[t.api?e("b-button",{directives:[{name:"b-toggle",rawName:"v-b-toggle.itemFilter",modifiers:{itemFilter:!0}}],staticClass:"mb-4 mt-2",class:{"ml-3":t.showPagination},attrs:{variant:t.hasFilters&&!t.filtersOpen?"primary":"outline-primary"}},[e("b-icon-search"),t._v(" "+t._s(t.filtersOpen?t.$t("items.hideFilter"):t.$t("items.showFilter"))+" "),t.hasFilters&&!t.filtersOpen?e("b-badge",{attrs:{variant:"dark"}},[t._v(t._s(t.filterCount))]):t._e()],1):t._e(),e("b-collapse",{attrs:{id:"itemFilter"},model:{value:t.filtersOpen,callback:function(e){t.filtersOpen=e},expression:"filtersOpen"}},[e("SearchFilter",{attrs:{type:"Items",title:t.$t("items.filter"),parent:t.stac,value:t.apiFilters},on:{input:t.emitFilter}})],1)]:t._e(),e("section",{staticClass:"list"},[t.loading?e("Loading",{attrs:{fill:"",top:""}}):t._e(),t.chunkedItems.length>0?e("b-card-group",{attrs:{columns:""}},t._l(t.chunkedItems,(function(t){return e("Item",{key:t.href,attrs:{item:t}})})),1):e("b-alert",{attrs:{variant:t.hasFilters?"warning":"info",show:""}},[t.hasFilters?[t._v(t._s(t.$t("search.noItemsFound")))]:[t._v(t._s(t.$t("items.noneAvailableForCollection")))]],2)],1),t.showPagination?e("Pagination",{attrs:{pagination:t.pagination},on:{paginate:t.paginate}}):t.hasMore?e("b-button",{directives:[{name:"b-visible",rawName:"v-b-visible.300",value:t.showMore,expression:"showMore",modifiers:{300:!0}}],attrs:{variant:"primary"},on:{click:t.showMore}},[t._v(t._s(t.$t("showMore")))]):t._e()],2)},r=[],i=a(98598),n=a(39773),o=a(70678),l=a(48883),c=a(82948),u=a(2566),d=a(31831),h=a(95353),p={name:"Items",components:{BCollapse:l.K,BIconSearch:c.S8S,Item:i["default"],SearchFilter:()=>Promise.all([a.e(537),a.e(3951),a.e(505)]).then(a.bind(a,33951)),Loading:n.A,Pagination:o["default"],SortButtons:()=>a.e(771).then(a.bind(a,40771))},props:{items:{type:Array,required:!0},loading:{type:Boolean,default:!1},stac:{type:Object,required:!0},api:{type:Boolean,default:!1},allowFilter:{type:Boolean,default:!0},showFilters:{type:Boolean,default:!1},apiFilters:{type:Object,default:()=>({})},pagination:{type:Object,default:()=>({})},chunkSize:{type:Number,default:90},count:{type:Number,default:null}},data(){return{shownItems:this.chunkSize,filtersOpen:this.showFilters,sort:0}},computed:{...(0,h.aH)(["cardViewSort","uiLanguage"]),itemCount(){return null!==this.count?this.count:!this.api&&this.items.length>0?this.items.length:null},hasMore(){return this.items.length>this.shownItems},filterCount(){return Object.values(this.apiFilters).filter((t=>!(null===t||0===u.Ay.size(t)))).length},hasFilters(){return this.filterCount>0},chunkedItems(){let t=this.items;return 0!==this.sort&&(t=t.slice(0).sort(((t,e)=>d.A.getDisplayTitle(t).localeCompare(d.A.getDisplayTitle(e),this.uiLanguage))),-1===this.sort&&(t=t.reverse())),!this.api&&this.items.length>this.chunkSize?t.slice(0,this.shownItems):t},showPagination(){if(this.api){if(this.hasFilters)return!0;if(this.items.length>0)return Object.values(this.pagination).some((t=>!!t))}return!1}},watch:{showFilters(){this.filter=this.showFilters},filtersOpen(){this.$emit("filtersShown",this.filtersOpen)}},created(){this.sort=this.cardViewSort},mounted(){this.showFilters&&setTimeout((()=>u.Ay.scrollTo(this.$el)),250)},methods:{emitFilter(t,e){this.$emit("filterItems",t,e)},showMore(){this.shownItems+=this.chunkSize},paginate(t,e){"bottom"===e&&this.$refs.topPagination&&u.Ay.scrollTo(this.$refs.topPagination.$el),this.$emit("paginate",t)}}},f=p,m=a(81656),g=(0,m.A)(f,s,r,!1,null,null,null),b=g.exports},39773:function(t,e,a){"use strict";a.d(e,{A:function(){return c}});var s=function(){var t=this,e=t._self._c;return e("div",{class:t.classes},[e("b-spinner",{attrs:{label:t.$t("loading"),small:t.small}})],1)},r=[],i=(a(44114),{name:"Loading",props:{fill:{type:Boolean,default:!1},stretch:{type:Boolean,default:!1},small:{type:Boolean,default:!1},top:{type:Boolean,default:!1}},computed:{classes(){let t=["loading"];return this.fill?t.push("loading-fill"):this.stretch&&t.push("loading-stretch"),this.top&&t.push("top"),t}}}),n=i,o=a(81656),l=(0,o.A)(n,s,r,!1,null,"67931bb8",null),c=l.exports},70678:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return c}});var s=function(){var t=this,e=t._self._c;return e("b-button-group",{class:t.classes},[e("b-button",{attrs:{disabled:!t.pagination.first,variant:"primary"},on:{click:function(e){return t.paginate(t.pagination.first)}}},[t._v(t._s(t.$t("pagination.first")))]),e("b-button",{attrs:{disabled:!t.pagination.prev,variant:"primary"},on:{click:function(e){return t.paginate(t.pagination.prev)}}},[t._v(t._s(t.$t("pagination.previous")))]),e("b-button",{attrs:{disabled:!t.pagination.next,variant:"primary"},on:{click:function(e){return t.paginate(t.pagination.next)}}},[t._v(t._s(t.$t("pagination.next")))]),t.pagination.last?e("b-button",{attrs:{variant:"primary"},on:{click:function(e){return t.paginate(t.pagination.last)}}},[t._v(t._s(t.$t("pagination.last")))]):t._e()],1)},r=[],i={name:"Pagination",props:{pagination:{type:Object,default:()=>({})},placement:{type:String,default:"bottom"}},computed:{classes(){return"top"===this.placement?"mb-4 mt-2":"mb-2 mt-2"}},methods:{paginate(t){this.$emit("paginate",t,this.placement)}}},n=i,o=a(81656),l=(0,o.A)(n,s,r,!1,null,null,null),c=l.exports},58581:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return m}});var s=function(){var t=this,e=t._self._c;return e(t.component,t._b({tag:"component",staticClass:"stac-link",attrs:{title:t.tooltip}},"component",t.attributes,!1),[t.icon?[e("img",{staticClass:"icon mr-2",attrs:{src:t.icon.href,alt:t.icon.title,title:t.icon.title}})]:t._e(),e("span",{staticClass:"title"},[t._v(t._s(t.displayTitle))])],2)},r=[],i=a(95353),n=a(59203),o=a(2566),l=a(31831),c=a(84193),u=a.n(c),d={name:"StacLink",props:{data:{type:[Object,Array],default:null},title:{type:String,default:null},fallbackTitle:{type:[String,Function],default:null},tooltip:{type:String,default:null},button:{type:[Boolean,Object],default:!1},state:{type:Object,default:null}},computed:{...(0,i.aH)(["allowExternalAccess","privateQueryParameters"]),...(0,i.L8)(["toBrowserPath","getRequestUrl","isExternalUrl"]),icon(){if(this.stac){let t=this.stac.getIcons();if(t.length>0)return t[0]}return null},stac(){return this.data instanceof l.A?this.data:Array.isArray(this.data)?this.data.find((t=>t instanceof l.A)):null},link(){return this.isLink(this.data)?this.data:Array.isArray(this.data)&&this.data.find((t=>this.isLink(t)))||{}},isStacBrowserLink(){return!!this.stac||!!o.Ay.isStacMediaType(this.link.type,!0)&&(!(!this.allowExternalAccess&&this.isExternalUrl(this.link.href))&&n.Bv.includes(this.link.rel))},attributes(){if(this.isStacBrowserLink||this.button){let t={to:this.href,rel:this.rel};return o.Ay.isObject(this.button)&&Object.assign(t,this.button),t}return{href:this.href,target:"_blank",rel:this.rel}},component(){return this.button?"b-button":this.isStacBrowserLink?"router-link":"a"},href(){if(this.stac||this.isStacBrowserLink){let t;if(t=this.stac?this.stac.getBrowserPath():this.toBrowserPath(this.link.href),t.startsWith("/")||(t="/"+t),o.Ay.size(this.privateQueryParameters)>0||o.Ay.size(this.state)>0){let e=u()(t),a=(t,a)=>{for(let s in t){let r=`${a}${s}`;e.hasQuery(r)||e.addQuery(r,t[s])}};a(this.privateQueryParameters,"~"),a(this.state,"."),t=e.toString()}return t}return this.getRequestUrl(this.link.href)},displayTitle(){if(this.title)return this.title;let t="function"===typeof this.fallbackTitle?this.fallbackTitle():this.fallbackTitle;return l.A.getDisplayTitle(this.data,t)}},methods:{isLink(t){return o.Ay.isObject(t)&&!(t instanceof l.A)}}},h=d,p=a(81656),f=(0,p.A)(h,s,r,!1,null,null,null),m=f.exports},19306:function(t){t.exports={catalogUrl:null,catalogTitle:"STAC Browser",allowExternalAccess:!0,allowedDomains:[],detectLocaleFromBrowser:!0,storeLocale:!0,locale:"en",fallbackLocale:"en",supportedLocales:["de","es","en","fr","it","ro"],apiCatalogPriority:null,useTileLayerAsFallback:!0,displayGeoTiffByDefault:!1,buildTileUrlTemplate:({href:t,asset:e})=>"https://tiles.rdnt.io/tiles/{z}/{x}/{y}@2x?url="+encodeURIComponent(e.href.startsWith("/vsi")?e.href:t),stacProxyUrl:null,pathPrefix:"/",historyMode:"history",cardViewMode:"cards",cardViewSort:"asc",showThumbnailsAsAssets:!1,stacLint:!0,geoTiffResolution:128,redirectLegacyUrls:!1,itemsPerPage:12,defaultThumbnailSize:null,maxPreviewsOnMap:50,crossOriginMedia:null,requestHeaders:{},requestQueryParameters:{},preprocessSTAC:null,authConfig:null}},78561:function(t,e,a){"use strict";a.d(e,{Q:function(){return o}});var s=a(95353);const r=["https://api.stacspec.org/v1.*/item-search#filter:cql-text","http://www.opengis.net/spec/cql2/1.*/conf/cql2-text"],i=["https://api.stacspec.org/v1.*/item-search#filter:cql-json","http://www.opengis.net/spec/cql2/1.*/conf/cql2-json"],n=["http://www.opengis.net/spec/cql2/1.*/req/advanced-comparison-operators"],o={Items:{BasicFilters:["https://api.stacspec.org/v1.*/ogcapi-features","http://www.opengis.net/spec/ogcapi-features-1/1.*/conf/core"],CollectionIdFilter:!1,ItemIdFilter:!1,CqlFilters:["http://www.opengis.net/spec/ogcapi-features-3/1.*/*/features-filter"],Sort:["https://api.stacspec.org/v1.*/ogcapi-features#sort","http://www.opengis.net/spec/ogcapi-records-1/1.*/conf/sorting"],FreeText:["https://api.stacspec.org/v1.*/ogcapi-features#free-text"]},Global:{BasicFilters:!0,CollectionIdFilter:!0,ItemIdFilter:!0,CqlFilters:["https://api.stacspec.org/v1.*/item-search#filter"],Sort:["https://api.stacspec.org/v1.*/item-search#sort"],FreeText:["https://api.stacspec.org/v1.*/item-search#free-text"]},Collections:{BasicFilters:["https://api.stacspec.org/v1.*/collection-search"],CollectionIdFilter:!1,ItemIdFilter:!1,CqlFilters:["https://api.stacspec.org/v1.*/collection-search#filter"],Sort:["https://api.stacspec.org/v1.*/collection-search#sort"],FreeText:["https://api.stacspec.org/v1.*/collection-search#free-text"]}};e.A={props:{type:{type:String,required:!0}},computed:{...(0,s.L8)(["supportsConformance"]),conformances(){return o[this.type]},canSort(){return this.supportsConformance(this.conformances.Sort)},canFilterExtents(){return this.supportsConformance(this.conformances.BasicFilters)},canFilterFreeText(){return this.supportsConformance(this.conformances.FreeText)},cql(){if(!this.supportsConformance(this.conformances.CqlFilters))return null;let t=this.supportsConformance(r),e=this.supportsConformance(i);return t||e?{textMode:t,jsonMode:e,advancedComparison:this.supportsConformance(n)}:null}}}},67467:function(t,e,a){"use strict";var s=a(95353);e.A=t=>{let e={computed:{...(0,s.aH)(["uiLanguage"])},methods:{}};for(let a in t){let s=t[a];e.methods[a]=function(){return this.uiLanguage,s(...arguments)}}return e}},97685:function(t,e,a){"use strict";var s=a(95353);e.A={props:{showThumbnail:{type:Boolean,default:!0}},computed:{...(0,s.aH)(["cardViewMode","crossOriginMedia","defaultThumbnailSize"]),isList(){return this.data&&!this.data.isItem()&&"list"===this.cardViewMode},hasImage(){return this.showThumbnail&&this.thumbnail},thumbnail(){if(this.data){let t=this.data.getThumbnails(!0,"thumbnail");if(t.length>0){let e,a,s=t[0];return Array.isArray(s["proj:shape"])&&2===s["proj:shape"].length?[a,e]=s["proj:shape"]:Array.isArray(this.defaultThumbnailSize)&&2===this.defaultThumbnailSize.length&&([a,e]=this.defaultThumbnailSize),{src:s.href,alt:s.title,crossorigin:this.crossOriginMedia,right:this.isList,blankColor:"rgba(0, 0, 0, 0.125)",width:e,height:a,"blank-width":e,"blank-height":a}}}return null}}}},50737:function(t,e,a){"use strict";let s;s=a(19306),e.A=Object.assign(s,{pathPrefix:"/stac-browser",historyMode:"hash"},window.STAC_BROWSER_CONFIG)},48907:function(t,e,a){"use strict";a.d(e,{Aj:function(){return c},Qm:function(){return p},_:function(){return m},fH:function(){return f}});var s=a(85471),r=a(64765),i=a(50737),n=a(14540),o=a.n(n),l=a(2566);s.Ay.use(r.A);const c=["https://api.stacspec.org/v1.*/language"],u={};function d(){for(let e of i.A.supportedLocales)u[e]=a(97991)(`./${e}/config.json`);const t={};for(let e in u)t[e]={languages:u};return t}const h=new r.A({locale:i.A.locale,fallbackLocale:i.A.fallbackLocale,messages:d()});function p(){return Promise.all([f(i.A.locale),f(i.A.fallbackLocale)])}async function f(t){if(l.Ay.size(h.messages[t])>1)return;const e=(await a(33545)(`./${t}/default.js`)).default;h.mergeLocaleMessage(t,e)}function m(t,e=null){if("string"!==typeof t||0===t.length)return t;let a=`fields.${t}`;return h.te(a)?h.t(a,null,e):o().format(t,e)}e.Ay=h},39071:function(t,e,a){"use strict";a.d(e,{E0:function(){return r},f5:function(){return i}});a(44114);function s(t){if(!t)return;const e=String(t),a=e.indexOf("@"),s=-1!==a?e.substr(a+1):void 0,r=-1!==a?e.substr(0,a):e,i=String(r).replace(/-/g,"_").split("_");if(!i.length||i.length>4)return;const n=i.shift();if(!n)return;const o={keyword:s,language:n.toLowerCase()};if(!i.length)return o;if(3===i.length){const t=i.pop();t&&(o.variant=t.toUpperCase())}let l=i.pop();if(l.length>3&&(o.keyword=l,l=i.pop()),l&&(o.country=l.toUpperCase()),!i.length)return o;const c=i.pop();return"string"===typeof c&&c.length>=1&&(o.script=c[0].toUpperCase()+c.substring(1).toLowerCase()),o}function r(t){const e={};return t.forEach((t=>{const{language:a,country:r}=s(t);if(!a)throw new Error(`Locale ${t} is not parsable`);e[a]||(e[a]={countries:{},firstCountry:void 0,main:void 0});const i=e[a];r?(i.countries[r]=t,i.firstCountry||(i.firstCountry=t)):i.main=t})),e}function i(t,e,a,n){const o=Array.isArray(t)?r(t):t;if(!e&&a)return i(t,a,void 0,n);if(!e)return;const{language:l,country:c}=s(e);if(!l)return a;if(!o[l]){if(e===a)return;return i(t,a,null,n)}const{countries:u,main:d=a,firstCountry:h}=o[l];return u&&c?n&&h?u[c]?u[c]:h:u[c]?u[c]:d:n&&h?h:d}},87654:function(t,e,a){"use strict";var s=a(85471),r=function(){var t=this,e=t._self._c;return e("b-container",{attrs:{id:"stac-browser"}},[t.doAuth.length>0?e("Authentication"):t._e(),t.globalError?e("ErrorAlert",t._b({staticClass:"global-error",on:{close:t.hideError}},"ErrorAlert",t.globalError,!1)):t._e(),t.sidebar?e("Sidebar"):t._e(),e("header",[e("div",{staticClass:"logo"},[t._v(t._s(t.displayCatalogTitle))]),e("StacHeader",{on:{enableSidebar:function(e){t.sidebar=!0}}})],1),e("router-view"),e("footer",[e("i18n",{staticClass:"poweredby text-muted",attrs:{tag:"small",path:"poweredBy"},scopedSlots:t._u([{key:"link",fn:function(){return[e("a",{attrs:{href:"https://github.com/radiantearth/stac-browser",target:"_blank"}},[t._v("STAC Browser")]),t._v(" "+t._s(t.browserVersion)+" ")]},proxy:!0}])})],1)],1)},i=[],n=(a(44114),a(40173)),o=a(95353),l=a(50737),c=function(){var t=this,e=t._self._c;return e("main",{staticClass:"browse d-flex flex-column"},[!t.allowExternalAccess&&t.isExternal?e("b-alert",{attrs:{show:""}},[t._v(t._s(t.$t("errors.noExternalAccess")))]):t.error?e("ErrorAlert",{attrs:{dismissible:!1,url:t.url,description:t.errorDescription,id:t.errorId}}):t.loading?e("Loading",{attrs:{stretch:""}}):e(t.component,{tag:"component"})],1)},u=[],d=function(){var t=this,e=t._self._c;return e("b-alert",{attrs:{variant:"danger",show:"",dismissible:t.dismissible},on:{dismissed:function(e){return t.$emit("close")}}},[e("p",{staticClass:"message"},[t._v(t._s(t.message||t.$t("errors.default")))]),t.error&&t.error.message?e("dl",{staticClass:"error"},[e("dt",[t._v(t._s(t.$t("errors.labels.cause")))]),e("dd",[t._v(t._s(t.error.message))])]):t._e(),t.description?e("dl",{staticClass:"description"},[e("dt",[t._v(t._s(t.$t("errors.labels.reason")))]),e("dd",[t._v(t._s(t.description))])]):t._e(),t.id?e("dl",{staticClass:"id"},[e("dt",[t._v(t._s(t.$t("errors.labels.code")))]),e("dd",[e("code",[t._v(t._s(t.id))])])]):t._e(),t.url?e("dl",{staticClass:"url"},[e("dt",[t._v(t._s(t.$t("errors.labels.requestURL")))]),e("dd",[e("code",[t._v(t._s(t.url))])])]):t._e()])},h=[],p={name:"ErrorAlert",props:{message:{type:String,default:null},description:{type:String,default:""},error:{type:[Object,Error],default:null},id:{type:[String,Number],default:null},url:{type:String,default:""},dismissible:{type:Boolean,default:!0}}},f=p,m=a(81656),g=(0,m.A)(f,d,h,!1,null,"09bb7d1b",null),b=g.exports,y=a(39773),A=function(){var t=this,e=t._self._c;return e("div",{key:t.data.id,staticClass:"item"},[e("b-row",[e("b-col",{staticClass:"left"},[e("section",{staticClass:"mb-4"},[e("b-card",{staticClass:"maps-preview",attrs:{"no-body":""}},[e("b-tabs",{ref:"tabs",attrs:{card:"",pills:"",vertical:"",end:""},model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[e("b-tab",{attrs:{title:t.$t("map"),"no-body":""}},[e("Map",{attrs:{stac:t.data,stacLayerData:t.selectedAsset,scrollWheelZoom:""},on:{dataChanged:t.dataChanged}})],1),t.thumbnails.length>0?e("b-tab",{attrs:{title:t.$t("thumbnails"),"no-body":""}},[e("Thumbnails",{attrs:{thumbnails:t.thumbnails}})],1):t._e()],1)],1)],1),t.hasAssets?e("Assets",{attrs:{assets:t.assets,context:t.data,shown:t.shownAssets},on:{showAsset:t.showAsset}}):t._e(),t.additionalLinks.length>0?e("Links",{attrs:{title:t.$t("additionalResources"),links:t.additionalLinks}}):t._e()],1),e("b-col",{staticClass:"right"},[e("section",{staticClass:"intro"},[t.data.properties.description?e("h2",[t._v(t._s(t.$t("description")))]):t._e(),t.data.properties.deprecated?e("DeprecationNotice",{attrs:{data:t.data}}):t._e(),t.data.properties["anon:warning"]?e("AnonymizedNotice",{attrs:{warning:t.data.properties["anon:warning"]}}):t._e(),t.data.properties.description?e("ReadMore",{attrs:{lines:10,text:t.$t("read.more"),"text-less":t.$t("read.less")}},[e("Description",{attrs:{description:t.data.properties.description}})],1):t._e(),Array.isArray(t.data.properties.keywords)&&t.data.properties.keywords.length>0?e("Keywords",{attrs:{keywords:t.data.properties.keywords}}):t._e()],1),t.collectionLink?e("CollectionLink",{attrs:{link:t.collectionLink}}):t._e(),t.data.properties.providers?e("Providers",{attrs:{providers:t.data.properties.providers}}):t._e(),e("Metadata",{attrs:{data:t.data,type:"Item",ignoreFields:t.ignoredMetadataFields}})],1)],1)],1)},v=[],w=a(41526),_=a(6841),C=a.n(_),k=a(2566),L={data(){return{shownAssetsOnMap:[],shownBandsOnMap:[],tab:null,selectedAsset:null,selectedAssetKey:null}},computed:{...(0,o.L8)(["thumbnails","hasAssets","assets"]),shownAssets(){if(0===this.tab)return this.shownAssetsOnMap;if(1===this.tab||null===this.tab&&this.thumbnails.length>0){let t=[],e=this.thumbnails.map((t=>t.href));for(let a in this.assets){let s=this.assets[a];e.includes(s.href)&&t.push(a)}return t}return[]}},methods:{showAsset(t,e,a){a?this.tab=1:(this.tab=0,this.selectedAsset=t,this.selectedAssetKey=e),this.$refs.tabs&&k.Ay.scrollTo(this.$refs.tabs.$el)},dataChanged(t){k.Ay.isObject(t)?t.assets||t.bands?(k.Ay.size(t.assets)>0&&(this.selectedAssetKey?this.shownAssetsOnMap=[this.selectedAssetKey]:this.shownAssetsOnMap=t.assets.map((t=>t.key))),k.Ay.size(t.bands)>0&&(this.shownBandsOnMap=t.bands)):this.selectedAssetKey&&(this.shownAssetsOnMap=[this.selectedAssetKey]):(this.shownBandsOnMap=[],this.shownAssetsOnMap=[])}}},x=a(95050),T=a(63405),S=a(31831),O=a(84193),$=a.n(O),j=a(48907);function I(t,e){let a=e.getters.toBrowserPath(t),s=$()(window.location.origin.toString());return"hash"===e.state.historyMode?(s.path(e.state.pathPrefix),s.fragment(a)):s.path(e.state.pathPrefix.replace(/\/$/,"")+a),s.toString()}function P(t,e){Array.isArray(e)&&e.length>=4&&(t.spatialCoverage={"@type":"Place",geo:{"@type":"GeoShape",box:(e||[]).join(" ")}})}function B(t){return!Array.isArray(t)||2!==t.length||"string"!==typeof t[0]&&"string"!==typeof t[1]?null:t.map((t=>t||"..")).join("/")}function F(t){return k.Ay.size(t.assets)>0?Object.values(t.assets).map((e=>({"@type":"DataDownload",contentUrl:k.Ay.toAbsolute(e.href,t.getAbsoluteUrl()),encodingFormat:e.type,name:e.title}))):[]}function M(t,e,a,s="DataCatalog"){return t.map((t=>{let r,i;t instanceof S.A?(r=S.A.getDisplayTitle(t),i=t.getAbsoluteUrl()):(r=t.title,i=k.Ay.toAbsolute(t.href,e.getAbsoluteUrl()));let n={"@type":s,name:r,url:I(i,a),isBasedOn:i};return"Dataset"===s&&(n.description=U(t,a)),n}))}function E(t,e){return t.filter((t=>k.Ay.isObject(t)&&Array.isArray(t.roles)&&t.roles.includes(e))).map((t=>({"@type":"Organization",name:t.name,description:t.description,url:t.url,email:t.email||t.mail})))}function U(t,e){let a,s;if(t instanceof S.A?(a=t.isItem()?"Item":t.type,s=t.collection):k.Ay.isObject(t)&&"item"===t.rel&&(a="Item"),a){let r=j.Ay.tc(`stac${a}`),i=j.Ay.t("in",{catalog:s||e.catalogTitle});return`SpatioTemporal Asset Catalog (STAC)\n${r} - ${t.id} ${i}`}}function D(t,e,a){var s;let r,i=S.A.getDisplayTitle(t),n=t.getAbsoluteUrl(),o=I(n,a),l=null===(s=t.getMetadata("language"))||void 0===s?void 0:s.code,c=t.getThumbnails(!0);c.length>0&&(r=k.Ay.toAbsolute(c[0].href,t.getAbsoluteUrl()));let u=t.getMetadata("license");var d;u&&"proprietary"!==u&&"various"!==u?u=`https://spdx.org/licenses/${u}.html`:u=null===(d=t.getLinkWithRel("license"))||void 0===d?void 0:d.href;u&&(u=k.Ay.toAbsolute(u,t.getAbsoluteUrl()));let h,p,f,m,g=t.getMetadata("providers");return k.Ay.size(g)>0&&(h=E(g,"licensor"),p=E(g,"producer"),f=E(g,"host"),m=E(g,"processor")),{"@context":"https://schema.org/","@type":e,name:i,description:t.getMetadata("description")||U(t,a),citation:t.getMetadata("sci:citation"),identifier:t.getMetadata("sci:doi")||t.id,keywords:t.getMetadata("keywords"),license:u,url:o,isBasedOn:n,dateCreated:t.getMetadata("created"),dateModified:t.getMetadata("updated"),datePublished:t.getMetadata("published"),expires:t.getMetadata("expires"),inLanguage:l,thumbnailUrl:r,version:t.getMetadata("version"),image:r,copyrightHolder:h,producer:p,provider:f,creator:m}}function q(t,e,a){if(!(t instanceof S.A))return null;e=e.filter((t=>k.Ay.isObject(t))),e.length>1&&(e=e.filter(((t,a)=>e.findIndex((e=>e.isBasedOn===t.isBasedOn))!==a)));let s=D(t,"DataCatalog",a);var r,i,n,o;t.isCollection()&&((null===(r=t.extent)||void 0===r||null===(i=r.temporal)||void 0===i?void 0:i.interval.length)>0&&(s.temporalCoverage=B(t.extent.temporal.interval[0])),(null===(n=t.extent)||void 0===n||null===(o=n.spatial)||void 0===o?void 0:o.bbox.length)>0&&P(s,t.extent.spatial.bbox[0]),s.associatedMedia=F(t));return s.hasPart=M(a.getters.catalogs,t,a),s.dataset=M(a.getters.items,t,a,"Dataset"),s.isPartOf=M(e,t,a),s}function R(t,e,a){if(!(t instanceof S.A))return null;e=e.filter((t=>k.Ay.isObject(t)));let s=D(t,"Dataset",a);s.includedInDataCatalog=M(e,t,a);let r=t.getMetadata("start_datetime"),i=t.getMetadata("end_datetime");return s.temporalCoverage=r||i?B([r,i]):t.getMetadata("datetime"),P(s,t.bbox),s.distribution=F(t),s}function z(t,e){let a="schema-org",s=t.getElementById(a);s||(s=t.createElement("script"),s.type="application/ld+json",s.id=a,t.head.appendChild(s)),s.innerText=JSON.stringify(e)}var W={name:"Item",components:{AnonymizedNotice:()=>a.e(7457).then(a.bind(a,47457)),Assets:()=>a.e(2059).then(a.bind(a,32059)),BTabs:x.r,BTab:T.a,CollectionLink:()=>a.e(9891).then(a.bind(a,89891)),Description:w["default"],DeprecationNotice:()=>a.e(7341).then(a.bind(a,57341)),Keywords:()=>a.e(1089).then(a.bind(a,71089)),Links:()=>Promise.all([a.e(537),a.e(4870),a.e(5867)]).then(a.bind(a,25867)),Map:()=>a.e(4701).then(a.bind(a,74701)),Metadata:()=>Promise.all([a.e(537),a.e(4870),a.e(9091)]).then(a.bind(a,59091)),Providers:()=>a.e(635).then(a.bind(a,80635)),ReadMore:C(),Thumbnails:()=>a.e(8648).then(a.bind(a,48648))},mixins:[L],data(){return{ignoredMetadataFields:["description","keywords","providers","title","deprecated","proj:bbox","proj:geometry","anon:warning"]}},computed:{...(0,o.aH)(["data","url"]),...(0,o.L8)(["additionalLinks","collectionLink","parentLink"])},watch:{data:{immediate:!0,handler(t){try{let e=R(t,[this.collectionLink,this.parentLink],this.$store);z(document,e)}catch(e){console.error(e)}}}}},N=W,Q=(0,m.A)(N,A,v,!1,null,null,null),V=Q.exports,H=function(){var t=this,e=t._self._c;return e("div",{key:t.data.id,class:{cc:!0,[t.data.type.toLowerCase()]:!0,mixed:t.hasCatalogs&&t.hasItems,empty:!t.hasCatalogs&&!t.hasItems}},[e("b-row",[e("b-col",{staticClass:"meta"},[e("section",{staticClass:"intro"},[e("h2",[t._v(t._s(t.$t("description")))]),t.data.deprecated?e("DeprecationNotice",{attrs:{data:t.data}}):t._e(),t.data["anon:warning"]?e("AnonymizedNotice",{attrs:{warning:t.data["anon:warning"]}}):t._e(),t.data.description?e("ReadMore",{attrs:{lines:10,text:t.$t("read.more"),"text-less":t.$t("read.less")}},[e("Description",{attrs:{description:t.data.description}})],1):t._e(),Array.isArray(t.data.keywords)&&t.data.keywords.length>0?e("Keywords",{attrs:{keywords:t.data.keywords}}):t._e(),t.isCollection?e("section",{staticClass:"metadata mb-4"},[t.licenses?e("b-row",[e("b-col",{staticClass:"label",attrs:{md:"4"}},[t._v(t._s(t.$t("catalog.license")))]),e("b-col",{staticClass:"value",attrs:{md:"8"}},[e("span",{domProps:{innerHTML:t._s(t.licenses)}})])],1):t._e(),t.temporalExtents?e("b-row",[e("b-col",{staticClass:"label",attrs:{md:"4"}},[t._v(t._s(t.$t("catalog.temporalExtent")))]),e("b-col",{staticClass:"value",attrs:{md:"8"}},[e("span",{domProps:{innerHTML:t._s(t.temporalExtents)}})])],1):t._e()],1):t._e(),"left"===t.linkPosition?e("Links",{attrs:{title:t.$t("additionalResources"),links:t.additionalLinks}}):t._e()],1),t.isCollection||t.hasThumbnails?e("section",{staticClass:"mb-4"},[e("b-card",{staticClass:"maps-preview",attrs:{"no-body":""}},[e("b-tabs",{ref:"tabs",attrs:{pills:"",card:"",vertical:"",end:""},model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[t.isCollection?e("b-tab",{attrs:{title:t.$t("map"),"no-body":""}},[e("Map",{attrs:{stac:t.data,stacLayerData:t.mapData,fitBoundsOnce:"",popover:""},on:{dataChanged:t.dataChanged}})],1):t._e(),t.hasThumbnails?e("b-tab",{attrs:{title:t.$t("thumbnails"),"no-body":""}},[e("Thumbnails",{attrs:{thumbnails:t.thumbnails}})],1):t._e()],1)],1)],1):t._e(),t.hasAssets?e("Assets",{attrs:{assets:t.assets,context:t.data,shown:t.shownAssets},on:{showAsset:t.showAsset}}):t._e(),t.hasItemAssets&&!t.hasItems?e("Assets",{attrs:{assets:t.data.item_assets,definition:!0}}):t._e(),t.providers?e("Providers",{attrs:{providers:t.providers}}):t._e(),e("Metadata",{staticClass:"mb-4",attrs:{type:t.data.type,data:t.data,ignoreFields:t.ignoredMetadataFields}}),t.collectionLink?e("CollectionLink",{attrs:{link:t.collectionLink}}):t._e(),"right"===t.linkPosition?e("Links",{attrs:{title:t.$t("additionalResources"),links:t.additionalLinks}}):t._e()],1),t.hasCatalogs?e("b-col",{staticClass:"catalogs-container"},[e("Catalogs",{attrs:{catalogs:t.catalogs,hasMore:!!t.nextCollectionsLink},on:{loadMore:t.loadMoreCollections}})],1):t._e(),t.hasItems?e("b-col",{staticClass:"items-container"},[e("Items",{attrs:{stac:t.data,items:t.items,api:t.isApi,showFilters:t.showFilters,apiFilters:t.filters,pagination:t.itemPages,loading:t.apiItemsLoading},on:{paginate:t.paginateItems,filterItems:t.filterItems,filtersShown:t.filtersShown}}),t.hasItemAssets?e("Assets",{attrs:{assets:t.data.item_assets,definition:!0}}):t._e()],1):t._e()],1)],1)},G=[],X=a(18353),J=a(49728),K=a(67467),Y=a(50735),Z={name:"Catalog",components:{AnonymizedNotice:()=>a.e(7457).then(a.bind(a,47457)),Assets:()=>a.e(2059).then(a.bind(a,32059)),BTabs:x.r,BTab:T.a,Catalogs:X["default"],CollectionLink:()=>a.e(9891).then(a.bind(a,89891)),DeprecationNotice:()=>a.e(7341).then(a.bind(a,57341)),Description:w["default"],Items:J["default"],Keywords:()=>a.e(1089).then(a.bind(a,71089)),Links:()=>Promise.all([a.e(537),a.e(4870),a.e(5867)]).then(a.bind(a,25867)),Map:()=>a.e(4701).then(a.bind(a,74701)),Metadata:()=>Promise.all([a.e(537),a.e(4870),a.e(9091)]).then(a.bind(a,59091)),Providers:()=>a.e(635).then(a.bind(a,80635)),ReadMore:C(),Thumbnails:()=>a.e(8648).then(a.bind(a,48648))},mixins:[L,(0,K.A)({formatLicense:Y.formatLicense,formatTemporalExtents:Y.formatTemporalExtents})],data(){return{filters:{},ignoredMetadataFields:["stac_version","stac_extensions","id","type","title","description","keywords","providers","license","extent","summaries","links","assets","item_assets","proj:bbox","proj:geometry","conformsTo","deprecated","anon:warning","stats:catalogs","stats:collections","stats:items","stac_browser"]}},computed:{...(0,o.aH)(["data","url","apiItems","apiItemsLink","apiItemsPagination","nextCollectionsLink","stateQueryParameters"]),...(0,o.L8)(["additionalLinks","catalogs","collectionLink","isCollection","items","getApiItemsLoading","parentLink","rootLink"]),showFilters(){return Boolean(this.stateQueryParameters["itemFilterOpen"])},hasThumbnails(){return this.thumbnails.length>0},linkPosition(){return 0===this.additionalLinks.length?null:this.isCollection||!this.hasThumbnails?"right":"left"},apiItemsLoading(){return this.getApiItemsLoading(this.data)},licenses(){return this.isCollection&&this.data.license?this.formatLicense(this.data.license,null,null,this.data):null},providers(){let t=[];return Array.isArray(this.data.providers)&&this.data.providers.length>0?t=this.data.providers:this.isCollection&&k.Ay.isObject(this.data.summaries)&&Array.isArray(this.data.summaries.providers)&&(t=this.data.summaries.providers),t.length>0?t:null},temporalExtents(){if(this.isCollection&&this.data.extent.temporal.interval.length>0){let t=this.data.extent.temporal.interval;return t.length>1&&(t=t.slice(1)),this.formatTemporalExtents(t)}return null},hasItemAssets(){var t;return k.Ay.size(null===(t=this.data)||void 0===t?void 0:t.item_assets)>0},itemPages(){let t=Object.assign({},this.apiItemsPagination);return!t.first&&this.data&&this.apiItemsLink&&"items"!==this.apiItemsLink.rel&&(t.first=k.Ay.addFiltersToLink(this.data.getApiItemsLink(),this.filters)),t},isApi(){return Boolean(this.apiItemsLink)},hasItems(){return this.items.length>0||this.isApi},hasCatalogs(){return this.catalogs.length>0},mapData(){return this.selectedAsset?this.selectedAsset:{type:"FeatureCollection",features:this.items}}},watch:{data:{immediate:!0,handler(t){try{let e=q(t,[this.parentLink,this.rootLink],this.$store);z(document,e)}catch(e){console.error(e)}}}},methods:{filtersShown(t){this.$store.commit("updateState",{type:"itemFilterOpen",value:t?1:null})},loadMoreCollections(){this.$store.dispatch("loadNextApiCollections",{show:!0})},async paginateItems(t){try{await this.$store.dispatch("loadApiItems",{link:t,show:!0,filters:this.filters})}catch(e){this.$root.$emit("error",e,this.$t("errors.loadItems"))}},async filterItems(t,e){this.filters=t,e&&this.$store.commit("resetApiItems",this.data.getApiItemsLink());try{await this.$store.dispatch("loadApiItems",{link:this.apiItemsLink,show:!0,filters:t})}catch(a){let t=e?this.$t("errors.loadItems"):this.$t("errors.loadFilteredItems");this.$root.$emit("error",a,t)}}}},tt=Z,et=(0,m.A)(tt,H,G,!1,null,null,null),at=et.exports,st={name:"Browse",components:{ErrorAlert:b,Loading:y.A,Catalog:at,Item:V},props:{path:{type:String,default:""}},computed:{...(0,o.aH)(["allowExternalAccess","url","data","redirectLegacyUrls"]),...(0,o.L8)(["fromBrowserPath","isItem","error","loading"]),errorId(){if(this.error instanceof Error&&this.error.isAxiosError&&k.Ay.isObject(this.error.response)){let t=this.error.response;return k.Ay.isObject(t.data)&&t.data.code?t.data.code:t.status}return null},errorDescription(){if(this.error instanceof Error&&this.error.isAxiosError&&k.Ay.isObject(this.error.response)){let t=this.error.response;if(k.Ay.isObject(t.data)&&"string"===typeof t.data.description)return t.data.description;if(401===t.status)return this.$t("errors.unauthorized");if(403===t.status)return this.$t("errors.forbidden");if(404===t.status)return this.$t("errors.notFound");if(t.status>500)return this.$t("errors.serverError");if(t.status>400)return this.$t("errors.badRequest")}else if(this.error instanceof k.fe)return this.error.message;return this.$t("errors.networkError")},component(){return this.isItem?"Item":"Catalog"},isExternal(){return $()(this.path).is("absolute")}},watch:{path:{immediate:!0,async handler(t,e){if(t===e)return;if(!this.allowExternalAccess&&this.isExternal)return;if(this.redirectLegacyUrls&&await this.redirectLegacyUrl(t))return;let a=this.fromBrowserPath(t||"/");this.$store.dispatch("load",{url:a,show:!0,loadApi:!0})}}},methods:{async redirectLegacyUrl(t){if(!t||"/"===t)return!1;let e=t.split("/").filter((t=>t.length>0&&"item"!==t&&"collection"!==t));if(e.length>0&&e.every((t=>t.match(/^[123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ]+$/)))){const{decode:t}=await a.e(6763).then(a.t.bind(a,16763,23));let s=t(e[e.length-1]).toString();if(s){let t=$()(s);return this.$router.replace({path:"/"+t.path().replace(/(collections|items)\/?$/,""),query:t.query(!0)}),!0}}return!1}}},rt=st,it=(0,m.A)(rt,c,u,!1,null,null,null),nt=it.exports;function ot(t){let e=[];return t.allowExternalAccess&&e.push({path:"/external/(.*)",name:"browseExternal",component:nt,props:t=>({path:`/external/${t.params.pathMatch}`})}),t.catalogUrl?e.push({path:"/search",name:"search",component:()=>Promise.all([a.e(537),a.e(3951),a.e(6312)]).then(a.bind(a,11224))}):(e.push({path:"/",name:"select",component:()=>a.e(967).then(a.bind(a,60967))}),e.push({path:"/search/external/(.*)",name:"search",component:()=>Promise.all([a.e(537),a.e(3951),a.e(6312)]).then(a.bind(a,11224)),props:t=>({loadParent:`/external/${t.params.pathMatch}`})})),e.push({path:"/(.*)",name:"browse",component:nt,props:t=>({path:t.params.pathMatch})}),e}var lt=ot,ct=a(91250),ut=a(59203),dt=a(33484),ht=a(39071),pt=a(78561);function ft(t,e){const a=()=>({url:"",title:t.catalogTitle,description:null,data:null,valid:null,parents:null,globalError:null,localRequestQueryParameters:{},stateQueryParameters:{language:null,asset:[],itemdef:[]},apiItems:[],apiItemsLink:null,apiItemsPagination:{}}),r=()=>({queue:[],privateQueryParameters:{},authData:null,doAuth:[],conformsTo:[],dataLanguage:null,dataLanguages:[],apiCollections:[],apiItemsLoading:{},nextCollectionsLink:null});return new o.Ay.Store({strict:!0,state:Object.assign({},t,a(),r(),{database:{},allowSelectCatalog:!t.catalogUrl,globalRequestQueryParameters:t.requestQueryParameters,uiLanguage:t.locale}),getters:{loading:t=>!t.url||!t.data||t.database[t.url]instanceof dt.Rh,getApiItemsLoading:t=>e=>{let a="";return e instanceof dt.Rh||(e instanceof S.A?a=e.id:"string"===typeof e&&(a=e),t.apiItemsLoading[a]||!1)},error:t=>t.database[t.url]instanceof Error?t.database[t.url]:null,getStac:t=>(e,a=!1)=>{if(e instanceof S.A)return e;if(k.Ay.isObject(e)&&k.Ay.hasText(e.href)&&(e=e.href),!k.Ay.hasText(e))return null;let s=k.Ay.toAbsolute(e,t.url),r=t.database[s];return r instanceof S.A||a&&r instanceof Error?r:null},displayCatalogTitle:(t,e)=>S.A.getDisplayTitle(e.root,t.catalogTitle),isCollection:t=>{var e;return(null===(e=t.data)||void 0===e?void 0:e.isCollection())||!1},isCatalog:t=>{var e;return(null===(e=t.data)||void 0===e?void 0:e.isCatalog())||!1},isCatalogLike:t=>{var e;return(null===(e=t.data)||void 0===e?void 0:e.isCatalogLike())||!1},isItem:t=>{var e;return(null===(e=t.data)||void 0===e?void 0:e.isItem())||!1},root:(t,e)=>e.getStac(e.rootLink),rootLink:t=>{var e;let a=null===(e=t.data)||void 0===e?void 0:e.getStacLinkWithRel("root");if(a)return a;if(t.catalogUrl)return k.Ay.createLink(t.catalogUrl,"root");if(t.url&&t.data instanceof S.A&&t.data.getLinksWithRels(["conformance","service-desc","service-doc","data","search"]).length>0)return k.Ay.createLink(t.url,"root");if(t.url){let e=$()(t.url),a=e.segment(-2);if(["collections","items"].includes(a))return e.segment(-1,""),e.segment(-1,""),"items"===a&&(e.segment(-1,""),e.segment(-1,"")),k.Ay.createLink(e.toString(),"root")}return null},parentLink:t=>{if(t.data instanceof S.A){let e=t.data.getStacLinkWithRel("parent");if(e)return e}if(t.url){let e=$()(t.url),a=e.segment(-2);if(["collections","items"].includes(a))return e.segment(-1,""),e.segment(-1,""),k.Ay.createLink(e.toString(),"parent")}return null},collectionLink:t=>{if(t.data instanceof S.A){var e;let a=null===(e=t.data)||void 0===e?void 0:e.getStacLinkWithRel("collection");if(a)return a}if(t.url){let e=$()(t.url),a=e.segment(-2);if("items"==a)return e.segment(-1,""),e.segment(-1,""),k.Ay.createLink(e.toString(),"collection")}return null},supportsConformance:t=>e=>{if(!Array.isArray(e))return e;let a=e.map((t=>t.replaceAll("*","[^/]+").replace(/\/?#/,"/?#"))).join("|"),s=new RegExp("^("+a+")$");return Boolean(t.conformsTo.find((t=>t.match(s))))},supportsExtension:t=>e=>k.Ay.supportsExtension(t.data,e),canSearch:(t,e)=>e.canSearchCollections||e.canSearchItems,canSearchItems:(t,e)=>e.supportsConformance(pt.Q.Items.BasicFilters),canSearchCollections:(t,e)=>e.supportsConformance(pt.Q.Collections.BasicFilters),items:t=>t.apiItems.length>0?t.apiItems:t.data?t.data.getStacLinksWithRel("item"):[],catalogs:t=>{let e=Boolean(t.data instanceof S.A&&t.data.getApiCollectionsLink()&&t.apiCollections.length>0),a=Boolean(t.data instanceof S.A),s=!t.apiCatalogPriority||"collections"===t.apiCatalogPriority,r=!t.apiCatalogPriority||"childs"===t.apiCatalogPriority,i=[];return e&&s&&(i=i.concat(t.apiCollections)),a&&r&&(i=S.A.addMissingChildren(i,t.data)),i},hasAssets:(t,e)=>Boolean(Object.values(e.assets).find((t=>k.Ay.isObject(t)&&"string"===typeof t.href))),assets:(t,e)=>{var a;if(k.Ay.isObject(null===(a=t.data)||void 0===a?void 0:a.assets)){if(t.showThumbnailsAsAssets)return t.data.assets;{let a={},s=e.thumbnails;for(let e in t.data.assets){let r=t.data.assets[e];s.includes(r)||(a[e]=r)}return a}}return{}},thumbnails:t=>t.data?t.data.getThumbnails(!0):[],additionalLinks:t=>t.data?t.data.getLinksWithOtherRels(ut.ol).filter((t=>"preview"!==t.rel||!k.Ay.canBrowserDisplayImage(t))):[],toBrowserPath:(t,e)=>a=>{k.Ay.hasText(a)||(a="/");let s,r=k.Ay.toAbsolute((0,dt.rM)(a,t.stacProxyUrl),t.url,!1);if(!t.allowSelectCatalog&&t.catalogUrl&&(s=r.relativeTo(t.catalogUrl)),"undefined"===typeof s||e.isExternalUrl(r,!1)){if(!t.allowExternalAccess)return r.toString();let e=["/external"],a=r.protocol();"https"!==a&&e.push(a+":"),e.push(r.authority()),e.push(r.path().replace(/^\//,""));let s=e.join("/"),i=r.query();return i&&(s+=`?${i}`),s}return"/"+s.toString()},fromBrowserPath:(t,e)=>a=>{const s=/^\/(search\/)?external\//;if(k.Ay.hasText(a)&&"/"!==a)if(a.match(s)){let t,e=a.replace(s,"").split("/");t=e[0].endsWith(":")?e.shift():"https:",a=`${t}//${e.join("/")}`}else!t.allowSelectCatalog&&t.catalogUrl&&(a=k.Ay.toAbsolute(a,t.catalogUrl,!1));else a=t.catalogUrl;return e.getRequestUrl(a,null,!0)},isExternalUrl:t=>(e,a=!0)=>{if(!t.catalogUrl)return!1;if(e instanceof $()||(e=$()(e)),a&&Array.isArray(t.allowedDomains)&&t.allowedDomains.includes(e.domain()))return!1;let s;if(e.is("relative"))s=e;else if(s=e.relativeTo(t.catalogUrl),s.equals(e))return!0;let r=s.toString();return r.startsWith("//")||r.startsWith("../")},getRequestUrl:(t,e)=>(a,s=null,r=!1)=>{let i=k.Ay.toAbsolute((0,dt.sd)(a,t.stacProxyUrl),s||t.url,!1);return e.isExternalUrl(i)||((0,dt.mA)(i,t.privateQueryParameters),(0,dt.mA)(i,t.globalRequestQueryParameters),r&&(0,dt.mA)(i,t.localRequestQueryParameters)),i.toString()},acceptedLanguages:t=>{const e={en:.1};return Array.isArray(t.supportedLocales)&&t.supportedLocales.forEach((t=>e[t]=.2)),k.Ay.hasText(t.fallbackLocale)&&(e[t.fallbackLocale]=.5),Array.isArray(navigator.languages)&&navigator.languages.forEach((t=>e[t]=.7)),k.Ay.hasText(t.locale)&&(e[t.locale]=1),Object.entries(e).sort(((t,e)=>t[1]>e[1]?-1:t[1]e>=1?t:`${t};q=${e}`)).join(",")}},mutations:{config(t,e){for(let a in e){let s=e[a];switch(a){case"catalogTitle":t.catalogTitle=s;break;case"catalogUrl":"function"===typeof s?t.catalogUrl=s():"string"===typeof s&&(t.catalogUrl=s);break;case"crossOriginMedia":t.crossOriginMedia=["anonymous","use-credentials"].includes(s)?s:null;break;case"cardViewSort":switch(s){case"asc":t.cardViewSort=1;break;case"desc":t.cardViewSort=-1;break;default:t.cardViewSort=0}break;default:t[a]=s}}},languages(t,{uiLanguage:e,dataLanguage:a}){t.dataLanguage=a||null,t.uiLanguage=e||null},setQueryParameter(t,{type:e,key:a,value:r}){e=`${e}QueryParameters`,"undefined"===typeof r?s.Ay.delete(t[e],a):s.Ay.set(t[e],a,r)},setRequestHeader(t,{key:e,value:a}){"undefined"===typeof a?s.Ay.delete(t.requestHeaders,e):s.Ay.set(t.requestHeaders,e,a)},requestAuth(t,e){"function"===typeof e?t.doAuth.push(e):t.doAuth=[]},setAuthData(t,e){t.authData=e},state(t,e){t.stateQueryParameters=e},updateState(t,{type:e,value:a}){null===a||"undefined"===typeof a?s.Ay.delete(t.stateQueryParameters,e):s.Ay.set(t.stateQueryParameters,e,a)},openCollapsible(t,{type:e,uid:a}){const s=t.stateQueryParameters[e].indexOf(a);-1===s&&t.stateQueryParameters[e].push(a)},closeCollapsible(t,{type:e,uid:a}){const r=t.stateQueryParameters[e].indexOf(a);r>-1&&s.Ay.delete(t.stateQueryParameters[e],r)},updateLoading(t,{url:e,show:a,loadApi:r}){let i=t.database[e];s.Ay.set(i,"show",a||i.show),s.Ay.set(i,"loadApi",r||i.loadApi)},loading(t,{url:e,loading:a}){s.Ay.set(t.database,e,a),a.show&&(t.url=e)},loaded(t,{url:e,data:a}){s.Ay.set(t.database,e,(0,dt.Pj)(t,a))},clear(t,e){s.Ay.delete(t.database,e)},resetCatalog(e,s){Object.assign(e,r()),Object.assign(e,a()),e.supportedLocales.includes(e.locale)||(e.locale=t.locale),s&&(e.catalogUrl=t.catalogUrl,e.catalogTitle=t.catalogTitle,e.database={})},resetPage(t){Object.assign(t,a())},showPage(t,{url:e,title:a,description:s,stac:r}){if(r||(r=t.database[e]||null),t.url=e||null,t.data=r instanceof S.A?r:null,t.valid=null,t.description=s,a)t.title=a;else if(t.title=S.A.getDisplayTitle(t.data,t.catalogTitle),t.data){let e=t.data.getMetadata("description");k.Ay.hasText(e)&&(t.description=e)}if(t.data){let e=t.data.isItem()?t.data.properties:t.data,a=Array.isArray(e.languages)?e.languages.slice():[];k.Ay.isObject(e.language)&&a.unshift(e.language),t.dataLanguages=a.filter((t=>k.Ay.isObject(t)&&"string"===typeof t.code))}},errored(t,{url:e,error:a}){a instanceof Error||(a=new Error(a)),s.Ay.set(t.database,e,a)},valid(t,e){t.valid=e},queue(t,e){t.queue.push(e)},unqueue(t,e){let a=t.queue.indexOf(e);-1!==a&&t.queue.splice(a,1)},removeFromQueue(t,e){t.queue.splice(0,e)},setConformanceClasses(t,e){Array.isArray(e)&&(t.conformsTo=e)},setApiItemsLink(t,e){t.apiItemsLink=e},toggleApiItemsLoading(t,e=""){t.apiItemsLoading[e]?s.Ay.delete(t.apiItemsLoading,e):s.Ay.set(t.apiItemsLoading,e,!0)},setApiItems(t,{data:e,stac:a,show:s}){if(!k.Ay.isObject(e)||!Array.isArray(e.features))return;let r=e.features.map((e=>(0,dt.Pj)(t,e)));s&&(t.apiItems=r);let i=k.Ay.getPaginationLinks(e);s&&(t.apiItemsPagination=i),a instanceof S.A&&a.setApiData(r,i.next,i.prev)},addApiCollections(t,{data:e,stac:a,show:s}){if(!k.Ay.isObject(e)||!Array.isArray(e.collections))return;let r=e.collections.map((e=>(0,dt.Pj)(t,e))),i=k.Ay.getLinkWithRel(e.links,"next");s&&(t.nextCollectionsLink=i,t.apiCollections=t.apiCollections.concat(r)),a instanceof S.A&&a.setApiData(r,i)},resetApiItems(t,e){t.apiItems=[],t.apiItemsLink=e,t.apiItemsPagination={}},parents(t,e){t.parents=e},showGlobalError(t,e){console.error(e),t.globalError=e}},actions:{async switchLocale(t,{locale:e,userSelected:a}){if(t.commit("config",{locale:e}),t.state.storeLocale&&a)try{window.localStorage.setItem("locale",e)}catch(o){console.error(o)}let s=(0,ht.f5)(t.state.supportedLocales,e,t.state.fallbackLocale),r=t.state.dataLanguages.map((t=>t.code)),i=t.state.dataLanguages.length>0?t.state.dataLanguages[0].code:s,n=(0,ht.f5)(r,e,i);t.commit("languages",{dataLanguage:n,uiLanguage:s}),t.commit("setQueryParameter",{type:"state",key:"language",value:e})},async setAuth(t,e){k.Ay.hasText(e)||(e=null),t.commit("setAuthData",e);let a=t.state.authConfig,s=a.key;e&&("Bearer"===a.formatter?e=`Bearer ${e}`:"function"===typeof a.formatter&&(e=a.formatter(e))),k.Ay.hasText(e)||(e=void 0),"query"===a.type?t.commit("setQueryParameter",{type:"private",key:s,value:e}):"header"===a.type&&t.commit("setRequestHeader",{key:s,value:e})},async loadBackground(t,e){let a=t.state.queue.slice(0,e);if(a.length>0){let s=[];for(let e of a)s.push(t.dispatch("load",{url:e}));return t.commit("removeFromQueue",e),await Promise.all(s)}},async loadParents(t){if(!(t.state.data instanceof S.A))return void t.commit("parents",[]);let e=[],a=t.state.data;while(a){let s=a.getLinkWithRel("parent")||a.getLinkWithRel("root");if(!s)break;let r=k.Ay.toAbsolute(s.href,a.getAbsoluteUrl());await t.dispatch("load",{url:r,loadApi:!0});let i=t.getters.getStac(r,!0);if(i instanceof Error)return void t.commit("parents",i);if(i===a)break;e.push(i),a=i}t.commit("parents",e)},async load(t,a){let{url:s,show:r,loadApi:i,loadRoot:n,force:o}=a,l=t.getters.toBrowserPath(s);s=k.Ay.toAbsolute(s,t.state.url),n||"/"===l||!t.state.catalogUrl||t.getters.getStac(t.state.catalogUrl)||await t.dispatch("load",{url:t.state.catalogUrl,loadApi:!0,loadRoot:!0}),o&&t.commit("clear",s);let c=new dt.Rh(r,i),u=t.state.database[s];if(u instanceof dt.Rh)t.commit("updateLoading",{url:s,show:r,loadApi:i});else{if(!u||u instanceof S.A&&u.isPotentiallyIncomplete()){t.commit("loading",{url:s,loading:c});try{let a=await(0,dt.FF)(t,s);if(!k.Ay.isObject(a.data))throw new k.fe(j.Ay.t("errors.invalidJsonObject"));if(u=new S.A(a.data,s,l),r){let a=u.getLocaleLink(t.state.dataLanguage);if(a)return void e.replace(t.getters.toBrowserPath(a.href))}if(t.commit("loaded",{url:s,data:u}),!t.getters.root){let e=u.getLinkWithRel("root");e&&t.commit("config",{catalogUrl:k.Ay.toAbsolute(e.href,s)})}let i=u.getStacLinkWithRel("conformance");Array.isArray(u.conformsTo)&&u.conformsTo.length>0?t.commit("setConformanceClasses",u.conformsTo):i&&await t.dispatch("loadOgcApiConformance",i)}catch(d){if(t.state.authConfig&&(0,dt.HD)(d))return t.commit("clear",s),void t.commit("requestAuth",(()=>t.dispatch("load",a)));console.error(d),t.commit("errored",{url:s,error:d})}}if(c.loadApi&&u instanceof S.A){if(u.getApiCollectionsLink()){let e={stac:u,show:c.show};try{await t.dispatch("loadNextApiCollections",e)}catch(d){t.state.authConfig&&(0,dt.HD)(d)?t.commit("requestAuth",(()=>t.dispatch("loadNextApiCollections",e))):t.commit("showGlobalError",{message:j.Ay.t("errors.loadApiCollectionsFailed"),error:d})}}if(u.getApiItemsLink()){let e={stac:u,show:c.show};try{await t.dispatch("loadApiItems",e)}catch(d){t.state.authConfig&&(0,dt.HD)(d)?t.commit("requestAuth",(()=>t.dispatch("loadApiItems",e))):t.commit("showGlobalError",{message:j.Ay.t("errors.loadApiItemsFailed"),error:d})}}}c.show&&t.commit("showPage",{url:s})}},async loadApiItems(t,{link:e,stac:a,show:s,filters:r}){let i=a instanceof S.A?a.id:"";t.commit("toggleApiItemsLoading",i);try{let n=t.state.url;a instanceof S.A&&(e=a.getApiItemsLink(),n=a.getAbsoluteUrl()),e=k.Ay.addFiltersToLink(e,r,t.state.itemsPerPage);let o=await(0,dt.FF)(t,e);if(k.Ay.isObject(o.data)&&Array.isArray(o.data.features))return o.data.features=o.data.features.map((e=>{try{if(!k.Ay.isObject(e)||"Feature"!==e.type)return null;let s,r=k.Ay.getLinkWithRel(e.links,"self");if(null!==r&&void 0!==r&&r.href)s=k.Ay.toAbsolute(r.href,n);else{if("undefined"===typeof e.id)return null;{var a;let r=null===(a=t.getters.root)||void 0===a?void 0:a.getApiCollectionsLink();if(n)s=k.Ay.toAbsolute(`items/${e.id}`,n);else if(r)s=k.Ay.toAbsolute(`${i}/items/${e.id}`,r.href);else{if(!t.state.catalogUrl)return null;s=k.Ay.toAbsolute(`collections/${i}/items/${e.id}`,t.state.catalogUrl)}}}let o=t.getters.getStac(s);return o||(o=new S.A(e,s,t.getters.toBrowserPath(s)),o.markPotentiallyIncomplete(),t.commit("loaded",{data:o,url:s}),o)}catch(s){return console.error(s),null}})).filter((t=>t instanceof S.A)),s&&t.commit("setApiItemsLink",e),t.commit("setApiItems",{data:o.data,stac:a,show:s}),t.commit("toggleApiItemsLoading",i),o;throw new k.fe(j.Ay.t("errors.invalidStacItems"))}catch(n){throw t.commit("toggleApiItemsLoading",i),n}},async loadNextApiCollections(t,{stac:e,show:a}){let s;if(e){if(t.state.apiCollections.length>0)return;s=e.getLinkWithRel("data")}else e=t.state.data,s=t.state.nextCollectionsLink;if(!s)return;let r=await(0,dt.FF)(t,s);if(!k.Ay.isObject(r.data)||!Array.isArray(r.data.collections))throw new k.fe(j.Ay.t("errors.invalidStacCollections"));r.data.collections=r.data.collections.map((a=>{let s,r=k.Ay.getLinkWithRel(a.links,"self");s=null!==r&&void 0!==r&&r.href?k.Ay.toAbsolute(r.href,t.state.url||e.getAbsoluteUrl()):k.Ay.toAbsolute(`collections/${a.id}`,t.state.catalogUrl||e.getAbsoluteUrl());let i=t.getters.getStac(s);return i||(i=new S.A(a,s,t.getters.toBrowserPath(s)),i.markPotentiallyIncomplete(),t.commit("loaded",{data:i,url:s}),i)})),t.commit("addApiCollections",{data:r.data,stac:e,show:a})},async loadOgcApiConformance(t,e){let a=await(0,dt.FF)(t,e);k.Ay.isObject(a.data)&&Array.isArray(a.data.conformsTo)&&t.commit("setConformanceClasses",a.data.conformsTo)},async loadGeoJson(t,e){try{let a=await(0,dt.FF)(t,e);return a.data}catch(a){return null}},async retryAfterAuth(t){let e=e=>t.commit("showGlobalError",{error:e,message:j.Ay.t("errors.authFailed")});for(let s of t.state.doAuth)try{let t=s();t instanceof Promise&&t.catch(e)}catch(a){e(a)}},async validate(t,e){if("boolean"!==typeof t.state.valid)try{var a,s;let r=$()("https://api.staclint.com/url");r.addSearch("stac_url",e);let i=await ct.A.get(r.toString());t.commit("valid",Boolean(null===(a=i.data)||void 0===a||null===(s=a.body)||void 0===s?void 0:s.valid_stac))}catch(r){t.commit("valid",r)}}}})}var mt=ft,gt=a(78933),bt=a(92999),yt=a(12670),At=a(1169),vt=a(19680),wt=a(35915),_t=a(69058),Ct=a(80262),kt=a(93444),Lt=(a(59313),function(){var t=this,e=t._self._c;return e("b-row",[e("b-col",{attrs:{md:"12"}},[e("Source",{staticClass:"float-right",attrs:{title:t.title,stacUrl:t.url,stac:t.data}}),e("h1",[t.icon?[e("img",{staticClass:"icon mr-2",attrs:{src:t.icon.href,alt:t.icon.title,title:t.icon.title}})]:t._e(),e("span",{staticClass:"title"},[t._v(t._s(t.title))])],2),t.url||t.isSearchPage()?e("p",{staticClass:"lead"},[t.containerLink?e("i18n",{staticClass:"in mr-3",attrs:{tag:"span",path:"in"},scopedSlots:t._u([{key:"catalog",fn:function(){return[e("StacLink",{attrs:{data:t.containerLink}})]},proxy:!0}],null,!1,1458487365)}):t._e(),e("b-button-group",[t.parentLink?e("b-button",{attrs:{to:t.toBrowserPath(t.parentLink.href),title:t.parentLinkTitle,variant:"outline-primary",size:"sm"}},[e("b-icon-arrow-90deg-up"),t._v(" "),e("span",{staticClass:"button-label prio"},[t._v(t._s(t.$t("goToParent.label")))])],1):t._e(),t.collectionLink?e("b-button",{attrs:{to:t.toBrowserPath(t.collectionLink.href),title:t.collectionLinkTitle,variant:"outline-primary",size:"sm"}},[e("b-icon-folder-symlink"),t._v(" "),e("span",{staticClass:"button-label prio"},[t._v(t._s(t.$t("goToCollection.label")))])],1):t._e(),e("b-button",{directives:[{name:"b-toggle",rawName:"v-b-toggle.sidebar",modifiers:{sidebar:!0}}],attrs:{variant:"outline-primary",size:"sm",title:t.$t("browse")},on:{click:function(e){return t.$emit("enableSidebar")}}},[e("b-icon-book"),t._v(" "),e("span",{staticClass:"button-label prio"},[t._v(t._s(t.$t("browse")))])],1),t.canSearch?e("b-button",{attrs:{variant:"outline-primary",size:"sm",to:t.searchBrowserLink,title:t.$t("search.title"),pressed:t.isSearchPage()}},[e("b-icon-search"),t._v(" "),e("span",{staticClass:"button-label prio"},[t._v(t._s(t.$t("search.title")))])],1):t._e(),t.authConfig?e("b-button",{attrs:{variant:"outline-primary",size:"sm",title:t.$t("authentication.button.title")},on:{click:t.auth}},[t.authData?[e("b-icon-lock"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("authentication.button.authenticated")))])]:[e("b-icon-unlock"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("authentication.button.authenticate")))])]],2):t._e()],1)],1):t._e()],1)],1)}),xt=[],Tt=function(){var t=this,e=t._self._c;return e("div",{staticClass:"share mt-1"},[e("b-button-group",[t.showRoot?e("b-button",{attrs:{size:"sm",variant:"outline-primary",id:"popover-root-btn"}},[e("b-icon-box"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.rootTitle))])],1):t._e(),t.stacUrl?e("b-button",{attrs:{size:"sm",variant:"outline-primary",id:"popover-link-btn",title:t.$t("source.detailsAboutSource")}},[e("b-icon-link"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("source.label")))])],1):t._e(),e("b-button",{attrs:{size:"sm",variant:"outline-primary",id:"popover-share-btn",title:t.$t("source.share.withOthers")}},[e("b-icon-share"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("source.share.label")))])],1),e("b-dropdown",{attrs:{size:"sm",variant:"outline-primary",right:"",title:t.$t("source.language.switch")},scopedSlots:t._u([{key:"button-content",fn:function(){return[e("b-icon-flag"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("source.language.label",{currentLanguage:t.currentLanguage})))])]},proxy:!0}])},t._l(t.languages,(function(a){return e("b-dropdown-item",{key:a.code,staticClass:"lang-item",on:{click:function(e){return t.switchLocale({locale:a.code,userSelected:!0})}}},[t.locale===a.code?e("b-icon-check"):e("b-icon-blank"),e("span",{staticClass:"title"},[t._v(" "+t._s(a.native)+" "),a.global&&a.global!==a.native?[t._v(" / "+t._s(a.global))]:t._e()],2),!t.supportsLanguageExt||a.ui&&a.data?t._e():e("b-icon-exclamation-triangle",{staticClass:"ml-2",attrs:{title:a.ui?t.$t("source.language.onlyUI"):t.$t("source.language.onlyData")}})],1)})),1)],1),t.showRoot?e("b-popover",{attrs:{id:"popover-root",target:"popover-root-btn",triggers:"focus",placement:"bottom",container:"stac-browser",title:t.rootTitle}},[e("RootStats")],1):t._e(),t.stacUrl?e("b-popover",{attrs:{id:"popover-link",target:"popover-link-btn",triggers:"focus",placement:"bottom",container:"stac-browser",title:t.$t("source.title")},on:{show:t.validate}},[t.stac?[t.stacId?e("b-row",{staticClass:"stac-id"},[e("b-col",{attrs:{cols:"4"}},[t._v(t._s(t.$t("source.id")))]),e("b-col",[e("code",[t._v(t._s(t.stacId))]),e("CopyButton",{staticClass:"ml-2",attrs:{copyText:t.stacId,"button-props":{size:"sm"},variant:"primary"}})],1)],1):t._e(),t.stacVersion?e("b-row",{staticClass:"stac-version"},[e("b-col",{attrs:{cols:"4"}},[t._v(t._s(t.$t("source.stacVersion")))]),e("b-col",[t._v(t._s(t.stacVersion))])],1):t._e(),t.canValidate?e("b-row",{staticClass:"validation"},[e("b-col",{attrs:{cols:"4"}},[t._v(t._s(t.$t("source.valid")))]),e("b-col",[null===t.valid?e("b-spinner",{attrs:{label:t.$t("source.validating"),small:""}}):!0===t.valid?[t._v("✔️")]:!1===t.valid?[t._v("❌")]:[t._v(t._s(t.$t("source.validationNA")))]],2)],1):t._e(),e("hr")]:t._e(),e("Url",{attrs:{id:"stacUrl",url:t.stacUrl,label:t.$t("source.locatedAt")}})],2):t._e(),e("b-popover",{attrs:{id:"popover-share",target:"popover-share-btn",triggers:"focus",placement:"bottom",container:"stac-browser",title:t.$t("source.share.title")}},[e("Url",{attrs:{id:"browserUrl",url:t.browserUrl(),label:t.$t("source.share.sharePageWithOthers"),open:!1}}),e("hr"),e("b-button",{staticClass:"twitter mr-1",attrs:{href:t.twitterUrl}},[e("b-icon-twitter"),t._v(" "+t._s(t.$t("source.share.twitter")))],1),e("b-button",{attrs:{variant:"dark",href:t.mailTo}},[e("b-icon-envelope"),t._v(" "+t._s(t.$t("source.share.email")))],1)],1)],1)},St=[],Ot=a(15378),$t=a(9656),jt=a(82948),It=a(30278),Pt=function(){var t=this,e=t._self._c;return e("b-form-group",{attrs:{label:t.label,"label-for":t.id}},[e("b-input-group",{attrs:{size:"sm"}},[e("b-form-input",{ref:"input",attrs:{id:t.id,value:t.url,readonly:""}}),e("b-input-group-append",[e("CopyButton",{attrs:{copyText:t.url,variant:"primary"}}),t.open?e("b-button",{attrs:{href:t.url,target:"_blank",variant:"primary",title:t.$t("open")}},[e("b-icon-arrow-up-right-square")],1):t._e()],1)],1)],1)},Bt=[],Ft=a(69771),Mt=a(19115),Et=a(89576),Ut=a(16167),Dt={name:"Share",components:{BFormGroup:Ft.a,BFormInput:Mt.b,BIconArrowUpRightSquare:jt.xur,BInputGroup:Et.Y,BInputGroupAppend:Ut.G,CopyButton:()=>Promise.resolve().then(a.bind(a,22356))},props:{id:{type:String,required:!0},url:{type:String,required:!0},label:{type:String,required:!0},open:{type:Boolean,default:!0}}},qt=Dt,Rt=(0,m.A)(qt,Pt,Bt,!1,null,"74684ede",null),zt=Rt.exports,Wt=a(22356);const Nt="https://stac-extensions.github.io/language/v1.*/schema.json";var Qt={name:"Source",components:{BDropdown:Ot.U,BDropdownItem:$t.H,BIconBlank:jt.ufk,BIconBox:jt.H$j,BIconCheck:jt.GSz,BIconEnvelope:jt.EXn,BIconExclamationTriangle:jt.T12,BIconFlag:jt.c_U,BIconLink:jt.IfX,BIconShare:jt.v6r,BIconTwitter:jt.FrH,BPopover:It.u,RootStats:()=>a.e(143).then(a.bind(a,40143)),Url:zt,CopyButton:Wt["default"]},props:{title:{type:String,required:!0},stacUrl:{type:String,default:null},stac:{type:Object,default:null}},computed:{...(0,o.aH)(["conformsTo","dataLanguages","locale","privateQueryParameters","supportedLocales","stacLint","stacProxyUrl","uiLanguage","valid"]),...(0,o.L8)(["supportsExtension","root"]),stacVersion(){var t;return null===(t=this.stac)||void 0===t?void 0:t.stac_version},stacId(){var t;return null===(t=this.stac)||void 0===t?void 0:t.id},showRoot(){return!!this.root&&(Array.isArray(this.conformsTo)&&this.conformsTo.length>0||k.Ay.isObject(this.root["stats:collections"])||k.Ay.isObject(this.root["stats:catalogs"])||k.Ay.isObject(this.root["stats:items"]))},rootTitle(){return Array.isArray(this.conformsTo)&&this.conformsTo.length>0?this.$t("index.api"):this.$t("index.catalog")},currentLanguage(){let t=this.languages.find((t=>t.code===this.locale));return t?t.native:"-"},canValidate(){if(!this.stacLint||"string"!==typeof this.stacUrl)return!1;if(k.Ay.size(this.privateQueryParameters)>0)return!1;if(Array.isArray(this.stacProxyUrl))return!1;let t=$()(this.stacUrl),e=t.hostname().toLowerCase();return"localhost"!==e&&!e.startsWith("127.")&&"::1"!==e},message(){return this.$t("source.share.message",{title:this.title,url:this.browserUrl()})},twitterUrl(){let t=encodeURIComponent(this.message);return`https://twitter.com/intent/tweet?text=${t}`},mailTo(){let t=encodeURIComponent(this.title),e=encodeURIComponent(this.message);return`mailto:?subject=${t}&body=${e}`},supportsLanguageExt(){return this.supportsExtension(Nt)},languages(){let t=[];for(let e of this.supportedLocales)t.push({code:e,native:this.$t(`languages.${e}.native`),global:this.$t(`languages.${e}.global`),ui:!0});for(let e of this.dataLanguages){if(!k.Ay.isObject(e)||!e.code||this.supportedLocales.includes(e.code))continue;let a={code:e.code};a.native=e.name||e.alternate||e.code,a.global=e.alternate||e.name||e.code,a.data=!0,t.push(a)}if(this.supportsExtension(Nt)){const e=(0,ht.E0)(this.supportedLocales),a=(0,ht.E0)(this.dataLanguages.map((t=>t.code)));for(let s of t)s.ui||(s.ui=Boolean((0,ht.f5)(e,s.code,null))),s.data||(s.data=Boolean((0,ht.f5)(a,s.code,null)))}return t.sort(((t,e)=>t.global.localeCompare(e.global,this.uiLanguage)))}},methods:{...(0,o.i0)(["switchLocale"]),async validate(){this.canValidate&&await this.$store.dispatch("validate",this.stacUrl)},browserUrl(){return window.location.toString()}}},Vt=Qt,Ht=(0,m.A)(Vt,Tt,St,!1,null,"714ef03c",null),Gt=Ht.exports,Xt=a(58581),Jt={name:"StacHeader",components:{BIconArrow90degUp:jt.JK4,BIconBook:jt.VOl,BIconFolderSymlink:jt.P_X,BIconSearch:jt.S8S,BIconLock:jt.D8r,BIconUnlock:jt.a_V,StacLink:Xt["default"],Source:Gt},computed:{...(0,o.aH)(["allowSelectCatalog","authConfig","authData","catalogUrl","data","url","title"]),...(0,o.L8)(["canSearch","root","parentLink","collectionLink","toBrowserPath"]),collectionLinkTitle(){return this.collectionLink&&k.Ay.hasText(this.collectionLink.title)?this.$t("goToCollection.descriptionWithTitle",this.collectionLink):this.$t("goToCollection.description")},parentLinkTitle(){return this.parentLink&&k.Ay.hasText(this.parentLink.title)?this.$t("goToParent.descriptionWithTitle",this.parentLink):this.$t("goToParent.description")},icon(){if(this.data instanceof S.A){let t=this.data.getIcons();if(t.length>0)return t[0]}return null},searchBrowserLink(){if(!this.canSearch)return null;let t;return this.data instanceof S.A&&!this.data.equals(this.root)&&(t=this.data.getSearchLink()),t?`/search${this.data.getBrowserPath()}`:this.root&&this.allowSelectCatalog?`/search${this.root.getBrowserPath()}`:"/search"},containerLink(){return this.catalogUrl&&this.url===this.catalogUrl?null:this.root?k.Ay.equalUrl(this.root.getAbsoluteUrl(),this.url)?null:{href:this.root.getAbsoluteUrl(),rel:"root",title:S.A.getDisplayTitle(this.root)}:this.collectionLink||this.parentLink}},methods:{isSearchPage(){return"search"===this.$router.currentRoute.name},auth(){this.$store.commit("requestAuth",(()=>this.$store.dispatch("load",{url:this.url,loadApi:!0,show:!0,force:!0})))}}},Kt=Jt,Yt=(0,m.A)(Kt,Lt,xt,!1,null,"e9cfbf72",null),Zt=Yt.exports,te=a(14540),ee=a.n(te);s.Ay.use(gt.q),s.Ay.use(bt.p),s.Ay.use(yt.sG),s.Ay.use(At.z),s.Ay.use(vt.qc),s.Ay.use(wt.CG),s.Ay.use(_t.z),s.Ay.directive("b-toggle",Ct.z),s.Ay.directive("b-visible",kt.p),s.Ay.use(n.Ay);const ae=new n.Ay({mode:l.A.historyMode,base:l.A.pathPrefix,routes:lt(l.A)});s.Ay.use(o.Ay);const se=mt(l.A,ae);let re={},ie={};for(let de in l.A)re[de]={default:["object","function"].includes(typeof l.A[de])?()=>l.A[de]:l.A[de]},ie[de]={immediate:!0,handler:function(t){this.$store.commit("config",{[de]:t})}};var ne={name:"StacBrowser",router:ae,store:se,components:{Authentication:()=>a.e(5788).then(a.bind(a,15788)),ErrorAlert:b,Sidebar:()=>a.e(8940).then(a.bind(a,38940)),StacHeader:Zt},props:{...re},data(){return{sidebar:!1,error:null,onDataLoaded:null}},computed:{...(0,o.aH)(["allowSelectCatalog","data","dataLanguage","description","doAuth","globalError","stateQueryParameters","title","uiLanguage","url"]),...(0,o.aH)({catalogUrlFromVueX:"catalogUrl",detectLocaleFromBrowserFromVueX:"detectLocaleFromBrowser",fallbackLocaleFromVueX:"fallbackLocale",supportedLocalesFromVueX:"supportedLocales",storeLocaleFromVueX:"storeLocale"}),...(0,o.L8)(["displayCatalogTitle","fromBrowserPath","isExternalUrl","root","supportsConformance","toBrowserPath"]),browserVersion(){return"3.1.0"}},watch:{...ie,title(t){document.title=t},description(t){let e=document.getElementById("meta-description");e&&e.setAttribute("content",k.Ay.summarizeMd(t,200))},uiLanguage:{immediate:!0,async handler(t){t&&(ee().locales=[t],ee().translate=j._,await(0,j.fH)(t),this.$root.$i18n.locale=t,document.documentElement.setAttribute("lang",t))}},dataLanguage:{immediate:!0,async handler(t){if(t&&this.data instanceof S.A){let e=this.data.getLocaleLink(t);if(e){let t=Object.assign({},this.stateQueryParameters);this.$router.push(this.toBrowserPath(e.href)),this.$store.commit("state",t)}else if(this.supportsConformance(j.Aj)){let t=this.url;this.$store.commit("resetCatalog",!0),await this.$store.dispatch("load",{url:t,loadApi:!0,show:!0})}}}},catalogUrlFromVueX(t){t&&this.$store.dispatch("load",{url:t,loadApi:!0})},stateQueryParameters:{deep:!0,handler(){let t={};for(const[e,a]of Object.entries(this.$route.query))e.startsWith(".")||(t[e]=a);for(const[e,a]of Object.entries(this.stateQueryParameters)){let s=`.${e}`;Array.isArray(a)?a.length>0&&(t[s]=a.join(",")):null!==a&&(t[s]=a)}this.$router.replace({query:t}).catch((t=>{if(!n.Ay.isNavigationFailure(t,n.Ay.NavigationFailureType.duplicated))throw Error(t)}))}},root(t,e){const a=["apiCatalogPriority","authConfig","cardViewMode","cardViewSort","crossOriginMedia","defaultThumbnailSize","displayGeoTiffByDefault","showThumbnailsAsAssets","stacLint"];let s=!t||e&&k.Ay.isObject(e["stac_browser"]),r=t&&k.Ay.isObject(t["stac_browser"]);for(let i of a){let e;s&&(e=l.A[i]),r&&"undefined"!==typeof t["stac_browser"][i]&&(e=t["stac_browser"][i]),("stacLint"!==i||l.A.stacLint)&&("undefined"!==typeof e&&this.$store.commit("config",{[i]:e}))}},data(t){this.onDataLoaded&&t instanceof S.A&&this.onDataLoaded()}},created(){this.$router.onReady((()=>{this.detectLocale(),this.parseQuery(this.$route)})),this.$router.afterEach(((t,e)=>{if(t.path===e.path)return;let a="resetPage";if(this.allowSelectCatalog&&t.path){let e=this.fromBrowserPath(t.path);this.isExternalUrl(e)&&(a="resetCatalog")}this.$store.commit(a),this.parseQuery(t)}))},mounted(){this.$root.$on("error",this.showError),setInterval((()=>this.$store.dispatch("loadBackground",3)),200)},methods:{...(0,o.i0)(["switchLocale"]),detectLocale(){let t;if(this.storeLocaleFromVueX)try{t=window.localStorage.getItem("locale")}catch(e){console.error(e)}if(!t&&this.detectLocaleFromBrowserFromVueX&&Array.isArray(navigator.languages)){const e=(0,ht.E0)(this.supportedLocalesFromVueX);for(let a of navigator.languages){const s=(0,ht.f5)(e,a,null);if(s){t=s;break}}}t&&this.supportedLocalesFromVueX.includes(t)&&(this.switchLocale({locale:t}),this.data||(this.onDataLoaded=()=>{this.switchLocale({locale:t}),this.onDataLoaded=null}))},parseQuery(t){var e;let a={};if("history"===this.historyMode){let e=$()(t.hash.replace(/^#/,""));a=e.query(!0)}let s=Object.assign({},t.query,a),r={};for(let i in s){let t=s[i];if(i.startsWith("~"))r.private=k.Ay.isObject(r.private)?r.private:{},r.private[i.substr(1)]=t,delete s[i];else if(i.startsWith(".")){let e=i.substr(1);r.state=k.Ay.isObject(r.state)?r.state:{},Array.isArray(this.stateQueryParameters[e])&&!Array.isArray(t)&&(t=t.split(",")),r.state[e]=t}else k.Ay.isObject(r.localRequest)||(r.localRequest={}),r.localRequest[i]=t}if(k.Ay.size(r)>0)for(let i in r)for(let t in r[i])this.$store.commit("setQueryParameter",{type:i,key:t,value:r[i][t]});null!==r&&void 0!==r&&null!==(e=r.state)&&void 0!==e&&e.language&&this.switchLocale({locale:r.state.language}),k.Ay.size(r.private)>0&&this.$router.replace({query:s})},showError(t,e){this.$store.commit("showGlobalError",{error:t,message:e})},hideError(){this.$store.commit("showGlobalError",null)}}},oe=ne,le=(0,m.A)(oe,r,i,!1,null,null,null),ce=le.exports;function ue(){return(0,j.Qm)().then((()=>new s.Ay({i18n:j.Ay,render:t=>t(ce)}).$mount("#stac-browser")))}s.Ay.config.productionTip=!1,ue()},31831:function(t,e,a){"use strict";a(44114);var s=a(2566),r=a(71321),i=a.n(r),n=a(39071);let o=0;class l{constructor(t,e,a,s=!0){this._id=o++,this._url=e,this._path=a,this._apiChildrenListeners={},this._incomplete=!1,this._apiChildren={list:[],prev:!1,next:!1},s&&("FeatureCollection"===t.type?t.features=t.features.map((t=>i().item(t,!1))):t=i().stac(t,!1));for(let r in t)"undefined"===typeof this[r]&&(this[r]=t[r])}isPotentiallyIncomplete(){return this._incomplete}markPotentiallyIncomplete(){this._incomplete=!0}isItem(){return"Feature"===this.type}isCatalog(){return"Catalog"===this.type}isCatalogLike(){return this.isCatalog()||this.isCollection()}isCollection(){return"Collection"===this.type}isItemCollection(){return"FeatureCollection"===this.type}hasApiData(){return this._apiChildren.list.length>0}setApiDataListener(t,e=null){"function"===typeof e?this._apiChildrenListeners[t]=e:delete this._apiChildrenListeners[t]}setApiData(t,e=null,a=null){a&&(this._apiChildren.prev=a),e&&(this._apiChildren.next=e),this._apiChildren.list=t;for(let r in this._apiChildrenListeners)try{this._apiChildrenListeners[r](this._apiChildren)}catch(s){console.error(s)}}getFileFormats(){let t=[];return(this.isItem()||this.isCollection())&&s.Ay.isObject(this.assets)&&(t=t.concat(Object.values(this.assets))),this.isCollection()&&s.Ay.isObject(this.item_assets)&&(t=t.concat(Object.values(this.item_assets))),t.filter((t=>Array.isArray(t.roles)&&t.roles.includes("data")&&"string"===typeof t.type)).map((t=>t.type)).filter(((t,e,a)=>a.indexOf(t)===e))}getChildren(t=null){if(!this.isCatalogLike())return[];let e=!t||"collections"===t,a=!t||"childs"===t,s=[];return e&&this._apiChildren.prev&&s.push(this._apiChildren.prev),e&&this._apiChildren.list.length>0&&(s=this._apiChildren.list.slice(0)),a&&(s=l.addMissingChildren(s,this).concat(this.getLinksWithRels(["item"]))),e&&this._apiChildren.next&&s.push(this._apiChildren.next),s}static addMissingChildren(t,e){let a=e.getStacLinksWithRel("child").filter((a=>{let r=s.Ay.toAbsolute(a.href,e.getAbsoluteUrl());return!t.find((t=>t.getAbsoluteUrl()===r))}));return a.concat(t)}getSearchLink(){let t=s.Ay.getLinksWithRels(this.links,["search"]).filter((t=>s.Ay.isMediaType(t.type,s.oV))).map((t=>Object.assign({},t,{href:s.Ay.toAbsolute(t.href,this._url)}))),e=t.find((t=>s.Ay.hasText(t.method)&&"POST"===t.method.toUpperCase()));return e||t[0]||null}getApiCollectionsLink(){return this.getStacLinkWithRel("data")}getApiItemsLink(){return this.getStacLinkWithRel("items")}getMetadata(t){return this.isItem()?this.properties[t]:this.isCatalogLike()?this[t]:null}getBrowserPath(){return this._path}getAbsoluteUrl(){return this._url}getLocaleLink(t,e=null){let a,r=this.getStacLinksWithRel("alternate").filter((t=>s.Ay.hasText(t.hreflang)));a=Array.isArray(this.languages)?this.languages.map((t=>t.code)):r.map((t=>t.hreflang));let i=(0,n.f5)(a,t,e);return r.find((t=>t.hreflang===i))||null}getStacLinksWithRel(t,e=!0){return s.Ay.getLinksWithRels(this.links,[t]).filter((t=>s.Ay.isStacMediaType(t.type,e)))}getStacLinkWithRel(t,e=!0){const a=this.getStacLinksWithRel(t,e);return a.length>0?a[0]:null}getLinkWithRel(t){return s.Ay.getLinkWithRel(this.links,t)}getLinksWithRels(t){return s.Ay.getLinksWithRels(this.links,t)}getLinksWithOtherRels(t){return s.Ay.getLinksWithOtherRels(this.links,t)}getAssetsWithRoles(t){let e=[];if(s.Ay.isObject(this.assets))for(let a in this.assets){let r=this.assets[a];s.Ay.isObject(r)&&"string"===typeof r.href&&Array.isArray(r.roles)&&r.roles.find((e=>t.includes(e)))&&e.push(r)}return e}static getDisplayTitle(t,e=null){Array.isArray(t)||(t=[t]);let a=t.find((t=>t instanceof l)),r=t.find((t=>s.Ay.isObject(t)&&!(t instanceof l)));return a&&s.Ay.hasText(a.getTitle())?a.getTitle():r&&s.Ay.hasText(r.title)?r.title:a&&s.Ay.hasText(a.id)?a.id:s.Ay.hasText(e)?e:a?s.Ay.titleForHref(a.getAbsoluteUrl(),!0):r&&s.Ay.hasText(r.href)?s.Ay.titleForHref(r.href,!0):"Untitled"}getTitle(){return this.getMetadata("title")}_linkToAbsolute(t){return Object.assign({},t,{href:s.Ay.toAbsolute(t.href,this.getAbsoluteUrl())})}getIcons(){return this.getLinksWithRels(["icon"]).filter((t=>s.Ay.canBrowserDisplayImage(t))).map((t=>this._linkToAbsolute(t)))}getThumbnails(t=!1,e=null){let a=this.getAssetsWithRoles(["thumbnail","overview"]);if(0===a.length&&(a=this.getLinksWithRels(["preview"])),0===a.length&&s.Ay.isObject(this.assets)&&s.Ay.isObject(this.assets.thumbnail)&&(a=[this.assets.thumbnail]),t&&(a=a.filter((t=>s.Ay.canBrowserDisplayImage(t)))),e&&a.length>1){let t=t=>t.roles.includes(e);a=a.filter(t).concat(a.filter((e=>!t(e))))}return a.map((t=>this._linkToAbsolute(t)))}equals(t){return!!s.Ay.isObject(t)&&(this===t||this.id===t.id&&this.type==t.type)}}e.A=l},59203:function(t,e,a){"use strict";a.d(e,{Bv:function(){return n},Eg:function(){return r},ZQ:function(){return i},dL:function(){return l},ol:function(){return o}});const s=["child","collection","item","parent","root","self"],r=["first","last","next","prev","previous"],i=["queryables","http://www.opengis.net/def/rel/ogc/1.0/queryables","ogc-rel:queryables"],n=["canonical","related","derived_from","latest-version","predecessor-version","successor-version","source","alternate"].concat(s).concat(r),o=["conformance","data","items","search","icon","license"].concat(s).concat(r).concat(i),l="http://www.opengis.net/def/rel/ogc/1.0/"},33484:function(t,e,a){"use strict";a.d(e,{FF:function(){return l},HD:function(){return h},Pj:function(){return d},Rh:function(){return o},mA:function(){return p},rM:function(){return c},sd:function(){return u}});var s=a(91250),r=a(84193),i=a.n(r),n=a(2566);class o{constructor(t=!1,e=!1){this.show=Boolean(t),this.loadApi=Boolean(e)}}async function l(t,e){let a,r={"Accept-Language":t.getters.acceptedLanguages};if(n.Ay.isObject(e)){let s="string"===typeof e.method?e.method.toLowerCase():"get",i=t.getters.getRequestUrl(e.href);n.Ay.hasText(e.type)&&(r.Accept=e.type),t.getters.isExternalUrl(i)||Object.assign(r,t.state.requestHeaders),n.Ay.isObject(e.headers)&&Object.assign(r,e.headers),a={method:s,url:i,headers:r,data:e.body}}else if("string"===typeof e){let s=t.getters.getRequestUrl(e);t.getters.isExternalUrl(s)||Object.assign(r,t.state.requestHeaders),a={method:"get",url:s,headers:r}}else a=e;return await(0,s.A)(a)}function c(t,e){return t instanceof i()&&(t=t.toString()),"string"===typeof t&&Array.isArray(e)?t.replace(e[1],e[0]):t}function u(t,e){return t instanceof i()&&(t=t.toString()),"string"===typeof t&&Array.isArray(e)?t.replace(e[0],e[1]):t}function d(t,e){return"function"===typeof t.preprocessSTAC&&(e=t.preprocessSTAC(e,t)),Object.freeze(e)}function h(t){var e;return[401,403].includes(null===t||void 0===t||null===(e=t.response)||void 0===e?void 0:e.status)}function p(t,e){if(0==n.Ay.size(e))return t;for(let a in e)t.hasQuery(a)||t.addQuery(a,e[a]);return t}},2566:function(t,e,a){"use strict";a.d(e,{Ay:function(){return A},C8:function(){return b},I5:function(){return m},Yq:function(){return u},df:function(){return g},fe:function(){return y},oV:function(){return c}});var s=a(84193),r=a.n(s),i=a(58481),n=a.n(i),o=a(59203);const l=["catalog","collection","item"],c="application/geo+json",u="application/schema+json",d=["application/json",c,"text/json"],h=["image/gif","image/jpg","image/jpeg","image/apng","image/png","image/webp"],p=["image/tiff; application=geotiff; profile=cloud-optimized","image/vnd.stac.geotiff; cloud-optimized=true"],f=["application/geotiff","image/tiff; application=geotiff","image/vnd.stac.geotiff"].concat(p),m=["http","https"],g=h.concat(f),b=g.concat([c]);class y extends Error{constructor(t){super(t)}}class A{static isObject(t){return"object"===typeof t&&t===Object(t)&&!Array.isArray(t)}static size(t){return"object"===typeof t&&null!==t?Array.isArray(t)?t.length:Object.keys(t).length:0}static isStacMediaType(t,e=!1){return A.isMediaType(t,d,e)}static isMediaType(t,e,a=!1){return Array.isArray(e)||(e=[e]),!(!a||t)||"string"===typeof t&&e.includes(t.toLowerCase())}static hasText(t){return"string"===typeof t&&t.length>0}static shortenTitle(t,e,a="…"){if(t.length<=e)return t;let s=a.length,r=e-s,i=Math.ceil(r/2),n=Math.floor(r/2);return t.substr(0,i)+a+t.substr(t.length-n)}static isGdalVfsUri(t){return"string"===typeof t&&t.startsWith("/vsi")&&!t.startsWith("/vsicurl/")}static toAbsolute(t,e,a=!0){return A.normalizeUri(t,e,!1,a)}static normalizeUri(t,e=null,a=!1,s=!0){"string"===typeof t&&t.startsWith("/vsicurl/")&&(t=t.replace(/^\/vsicurl\//,""));let i=r()(t);return e&&i.is("relative")&&!A.isGdalVfsUri(t)&&(i=i.absoluteTo(e)),i.normalize(),a&&(i.query(""),i.fragment("")),s?i.toString():i}static getLinkWithRel(t,e){return Array.isArray(t)?t.find((t=>A.isObject(t)&&A.hasText(t.href)&&t.rel===e)):null}static getLinksWithRels(t,e){return Array.isArray(t)?t.filter((t=>A.isObject(t)&&A.hasText(t.href)&&e.includes(t.rel))):[]}static getLinksWithOtherRels(t,e){return Array.isArray(t)?t.filter((t=>A.isObject(t)&&A.hasText(t.href)&&!e.includes(t.rel))):[]}static equalUrl(t,e){try{let a=r()(t),s=r()(e);return a.path(a.path().replace(/\/$/,"")),s.path(s.path().replace(/\/$/,"")),a.equals(s)}catch(a){return!1}}static summarizeMd(t,e=null){return A.hasText(t)?(t=n()(t).replaceAll(/[\r\n]+/g," "),e>0&&t.length>e&&(t=t.substr(0,e)+"…"),t):""}static scrollTo(t){if(t){var e=t.getBoundingClientRect(),a=e.top=0;a||t.scrollIntoView({behavior:"smooth",block:"start"})}}static dateFromUTC(t){if(t instanceof Date){const e=new Date(t),a=e.getTimezoneOffset();t=new Date(e.getTime()+60*a*1e3)}return t}static dateToUTC(t){if(t instanceof Date){const e=(new Date).getTimezoneOffset();return new Date(t.getTime()-60*e*1e3)}return t}static formatDatetimeQuery(t){return t.map((t=>t instanceof Date?t.toISOString():t||"..")).join("/")}static formatSortbyForPOST(t){const e={field:"",direction:"asc"};return t.startsWith("-")?(e.field=t.substring(1),e.direction="desc"):e.field=t,[e]}static getPaginationLinks(t){let e={};if(A.isObject(t)){let a=A.getLinksWithRels(t.links,o.Eg);for(let t of a){let a="previous"===t.rel?"prev":t.rel;e[a]=t}}return e}static addFiltersToLink(t,e={},a=null){let s=t=>null===t||"number"===typeof t&&!Number.isFinite(t)||"string"===typeof t&&0===t.length||"object"===typeof t&&0===A.size(t);if(e=A.isObject(e)?Object.assign({},e):{},"number"!==typeof e.limit&&"number"===typeof a&&(e.limit=a),A.hasText(t.method)&&"POST"===t.method.toUpperCase()){let a=Object.assign({},t.body);for(let t in e){let r=e[t];if(s(r))delete a[t];else{if("sortby"===t)r=A.formatSortbyForPOST(r);else if("datetime"===t)r=A.formatDatetimeQuery(r);else if("filters"===t){Object.assign(a,r.toJSON());continue}a[t]=r}}return Object.assign({},t,{body:a})}{let a=r()(t.href);for(let t in e){let r=e[t];if(s(r))a.removeQuery(t);else{if("datetime"===t)r=A.formatDatetimeQuery(r);else if("bbox"===t)r=r.join(",");else if("collections"===t||"ids"===t||"q"===t)r=r.join(",");else if("filters"===t){let t=r.toText();a.setQuery(t);continue}a.setQuery(t,r)}}return Object.assign({},t,{href:a.toString()})}}static titleForHref(t,e=!1){let a=r()(t),s=a.authority(),i=a.filename().replace(/^(.{1,})\.\w+$/,"$1"),n=a.directory().replace(/^\//,"");if(s&&i&&!e){let t=a.path().replace(/^\//,"");return"doi.org"===s&&t.startsWith("10.")?`DOI ${t}`:`${i} (${s})`}return i&&!l.includes(i)?i:s||(n||t)}static canBrowserDisplayImage(t){if("string"!==typeof t.href)return!1;let e=r()(t.href),a=e.protocol().toLowerCase();return!(a&&!m.includes(a))&&(!!h.includes(t.type)||(!!h.includes("image/"+e.suffix().toLowerCase())||!t.type))}static getValueFromObjectUsingPath(t,e){if(null!==t&&"object"===typeof t)return t=t[e[0]],"undefined"!==typeof t&&e.length>1?this.getValueFromObjectUsingPath(t,e.slice(1)):t}static search(t,e,a=!0){if("string"!==typeof t||0===t.length)return!1;if(A.isObject(e)?e=Object.values(e):"string"===typeof e&&(e=[e]),!Array.isArray(e))return!1;let s=/[\s.,;!&({[)}]]+/g;t=t.toLowerCase().split(s),e=e.filter((t=>"string"===typeof t)).join(" ").replace(s," ").toLowerCase();let r=a?"every":"some";return t[r]((t=>e.includes(t)))}static createLink(t,e){return{href:t,rel:e}}static supportsExtension(t,e){if(!A.isObject(t)||!Array.isArray(t["stac_extensions"]))return!1;let a=new RegExp("^"+e.replaceAll("*","[^/]+")+"$");return Boolean(t["stac_extensions"].find((t=>a.test(t))))}static mergeDeep(t,...e){if(!e.length)return t;const a=e.shift();if(A.isObject(t)&&A.isObject(a))for(const s in a)A.isObject(a[s])?(t[s]||Object.assign(t,{[s]:{}}),A.mergeDeep(t[s],a[s])):Object.assign(t,{[s]:a[s]});return A.mergeDeep(t,...e)}}},33545:function(t,e,a){var s={"./de-CH/default.js":[968,2963,968],"./de/default.js":[62862,2963,2862],"./en/default.js":[56886,6886],"./es/default.js":[89113,9113],"./fr-CA/default.js":[71082,6380,1082],"./fr-CH/default.js":[44545,6380,4545],"./fr/default.js":[1589,6380,1589],"./it-CH/default.js":[77638,3137,7638],"./it/default.js":[23108,3137,3108],"./ro/default.js":[63022,3022]};function r(t){if(!a.o(s,t))return Promise.resolve().then((function(){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}));var e=s[t],r=e[0];return Promise.all(e.slice(1).map(a.e)).then((function(){return a(r)}))}r.keys=function(){return Object.keys(s)},r.id=33545,t.exports=r},97991:function(t,e,a){var s={"./de-CH/config.json":79933,"./de/config.json":28417,"./en/config.json":11401,"./es/config.json":17212,"./fr-CA/config.json":20995,"./fr-CH/config.json":1738,"./fr/config.json":37748,"./it-CH/config.json":16835,"./it/config.json":37295,"./ro/config.json":99069};function r(t){var e=i(t);return a(e)}function i(t){if(!a.o(s,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return s[t]}r.keys=function(){return Object.keys(s)},r.resolve=i,t.exports=r,r.id=97991},79933:function(t){"use strict";t.exports=JSON.parse('{"native":"Deutsch (Schweiz)","global":"German (Switzerland)"}')},28417:function(t){"use strict";t.exports=JSON.parse('{"native":"Deutsch","global":"German"}')},11401:function(t){"use strict";t.exports=JSON.parse('{"native":"English","global":"English"}')},17212:function(t){"use strict";t.exports=JSON.parse('{"native":"Español","global":"Spanish"}')},20995:function(t){"use strict";t.exports=JSON.parse('{"native":"Français (Canada)","global":"French (Canada)"}')},1738:function(t){"use strict";t.exports=JSON.parse('{"native":"Français (Suisse)","global":"French (Switzerland)"}')},37748:function(t){"use strict";t.exports=JSON.parse('{"native":"Français","global":"French"}')},16835:function(t){"use strict";t.exports=JSON.parse('{"native":"Italiano (Svizzera)","global":"Italian (Switzerland)"}')},37295:function(t){"use strict";t.exports=JSON.parse('{"native":"Italiano","global":"Italian"}')},99069:function(t){"use strict";t.exports=JSON.parse('{"native":"Română","global":"Romanian"}')}},e={};function a(s){var r=e[s];if(void 0!==r)return r.exports;var i=e[s]={id:s,loaded:!1,exports:{}};return t[s].call(i.exports,i,i.exports,a),i.loaded=!0,i.exports}a.m=t,function(){var t=[];a.O=function(e,s,r,i){if(!s){var n=1/0;for(u=0;u=i)&&Object.keys(a.O).every((function(t){return a.O[t](s[l])}))?s.splice(l--,1):(o=!1,i0&&t[u-1][2]>i;u--)t[u]=t[u-1];t[u]=[s,r,i]}}(),function(){a.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return a.d(e,{a:e}),e}}(),function(){var t,e=Object.getPrototypeOf?function(t){return Object.getPrototypeOf(t)}:function(t){return t.__proto__};a.t=function(s,r){if(1&r&&(s=this(s)),8&r)return s;if("object"===typeof s&&s){if(4&r&&s.__esModule)return s;if(16&r&&"function"===typeof s.then)return s}var i=Object.create(null);a.r(i);var n={};t=t||[null,e({}),e([]),e(e)];for(var o=2&r&&s;"object"==typeof o&&!~t.indexOf(o);o=e(o))Object.getOwnPropertyNames(o).forEach((function(t){n[t]=function(){return s[t]}}));return n["default"]=function(){return s},a.d(i,n),i}}(),function(){a.d=function(t,e){for(var s in e)a.o(e,s)&&!a.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})}}(),function(){a.f={},a.e=function(t){return Promise.all(Object.keys(a.f).reduce((function(e,s){return a.f[s](t,e),e}),[]))}}(),function(){a.u=function(t){return"js/"+t+"."+{143:"7f6f3fa8",259:"96a9695f",505:"9b27e85d",537:"a7230af9",572:"0051ce9e",635:"6fc95d56",771:"0a499824",895:"9df2c567",967:"60693480",968:"45862efe",1082:"641a4ded",1089:"3afadfa9",1456:"455ff1ff",1472:"0cc6acab",1589:"8543b614",1802:"28366912",1865:"a89e4fd6",2059:"df97d1d1",2618:"309d922b",2862:"3784b33d",2929:"b8f4ed6f",2963:"c2488848",3022:"dc381752",3108:"72563005",3137:"56d1cb83",3481:"c36f57de",3627:"6fb10df8",3658:"65f83aa3",3951:"e4c88502",4312:"3a73a74c",4511:"dbf1a889",4527:"037219df",4545:"8da5bd53",4567:"692c4d29",4701:"a9cb1c23",4801:"7432db17",4870:"f1c787ea",5500:"1186a797",5583:"f40d6a97",5788:"3ae84088",5867:"2a0a5946",5876:"85c8fc65",6046:"5fb5794b",6147:"e54ddd79",6247:"68905912",6312:"728e8dee",6380:"a68c3ec3",6750:"55927985",6763:"2bcd8962",6780:"af1d3dbd",6855:"2973c006",6866:"1bffa637",6886:"9fadbd28",6997:"bd003843",7003:"0b200468",7036:"31f16bc9",7286:"3f8bab3a",7341:"28b1f4a5",7457:"3c3e3e10",7638:"bc9ae5ec",7905:"d3bb665d",8648:"99f841e2",8940:"3ca6214b",9091:"9ee95dc6",9113:"a2a931ee",9363:"f665e83d",9637:"2eb45629",9738:"8d0014a9",9891:"22c48a69",9930:"3cdaaf38"}[t]+".js"}}(),function(){a.miniCssF=function(t){return"css/"+t+"."+{143:"ac728857",505:"0530e224",635:"f849b3f1",967:"72c8c98f",1472:"45781634",1802:"32ec082e",2059:"5747ca0b",2618:"6fac7cd8",4701:"4149415b",5788:"a94c9ca6",5867:"1c2a69b4",6312:"ea261962",6780:"0780c10b",6866:"081b4583",7341:"c9b64985",8648:"4b50bc38",8940:"f418fe25",9091:"45781634",9363:"6ad781a6"}[t]+".css"}}(),function(){a.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"===typeof window)return window}}()}(),function(){a.hmd=function(t){return t=Object.create(t),t.children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:function(){throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t}}(),function(){a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}}(),function(){var t={},e="@radiantearth/stac-browser:";a.l=function(s,r,i,n){if(t[s])t[s].push(r);else{var o,l;if(void 0!==i)for(var c=document.getElementsByTagName("script"),u=0;u 0 || _vm.data.description || _vm.data.deprecated))?_c('b-card-text',{staticClass:\"intro\"},[(_vm.data.deprecated)?_c('b-badge',{staticClass:\"mr-1 mt-1 deprecated\",attrs:{\"variant\":\"warning\"}},[_vm._v(_vm._s(_vm.$t('deprecated')))]):_vm._e(),_vm._l((_vm.fileFormats),function(format){return _c('b-badge',{key:format,staticClass:\"mr-1 mt-1 fileformat\",attrs:{\"variant\":\"secondary\"}},[_vm._v(_vm._s(_vm._f(\"formatMediaType\")(format)))])}),_vm._v(\" \"+_vm._s(_vm._f(\"summarize\")(_vm.data.description))+\" \")],2):_vm._e(),(_vm.temporalExtent)?_c('b-card-text',{staticClass:\"datetime\"},[_c('small',{domProps:{\"innerHTML\":_vm._s(_vm.temporalExtent)}})]):_vm._e()],1),_c('b-card-footer',[_vm._t(\"footer\",null,{\"data\":_vm.data})],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n \n \n 0 || data.description || data.deprecated)\" class=\"intro\">\n {{ $t('deprecated') }}\n {{ format | formatMediaType }}\n {{ data.description | summarize }}\n \n \n \n \n \n \n \n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Catalog.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Catalog.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Catalog.vue?vue&type=template&id=481d2869\"\nimport script from \"./Catalog.vue?vue&type=script&lang=js\"\nexport * from \"./Catalog.vue?vue&type=script&lang=js\"\nimport style0 from \"./Catalog.vue?vue&type=style&index=0&id=481d2869&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',{staticClass:\"catalogs mb-4\"},[_c('header',[_c('h2',{staticClass:\"title mr-2\"},[_vm._v(_vm._s(_vm.title))]),(_vm.catalogCount !== null)?_c('b-badge',{staticClass:\"mr-4\",attrs:{\"pill\":\"\",\"variant\":\"secondary\"}},[_vm._v(_vm._s(_vm.catalogCount))]):_vm._e(),_c('ViewButtons',{staticClass:\"mr-2\",model:{value:(_vm.view),callback:function ($$v) {_vm.view=$$v},expression:\"view\"}}),(_vm.isComplete && _vm.catalogs.length > 1)?_c('SortButtons',{model:{value:(_vm.sort),callback:function ($$v) {_vm.sort=$$v},expression:\"sort\"}}):_vm._e()],1),(_vm.isComplete && _vm.catalogs.length > 1)?_c('SearchBox',{staticClass:\"mt-1 mb-1\",attrs:{\"placeholder\":_vm.filterPlaceholder},model:{value:(_vm.searchTerm),callback:function ($$v) {_vm.searchTerm=$$v},expression:\"searchTerm\"}}):_vm._e(),(_vm.showPagination)?_c('Pagination',{ref:\"topPagination\",attrs:{\"pagination\":_vm.pagination,\"placement\":\"top\"},on:{\"paginate\":_vm.paginate}}):_vm._e(),(_vm.searchTerm && _vm.catalogView.length === 0)?_c('b-alert',{attrs:{\"variant\":\"warning\",\"show\":\"\"}},[_vm._v(_vm._s(_vm.$t('catalogs.noMatches')))]):_vm._e(),_c('section',{staticClass:\"list\"},[(_vm.loading)?_c('Loading',{attrs:{\"fill\":\"\",\"top\":\"\"}}):_vm._e(),_c(_vm.cardsComponent,_vm._b({tag:\"component\"},'component',_vm.cardsComponentProps,false),_vm._l((_vm.catalogView),function(catalog){return _c('Catalog',{key:catalog.href,attrs:{\"catalog\":catalog},scopedSlots:_vm._u([{key:\"footer\",fn:function({data}){return [_vm._t(\"catalogFooter\",null,{\"data\":data})]}}],null,true)})}),1)],1),(_vm.showPagination)?_c('Pagination',{attrs:{\"pagination\":_vm.pagination},on:{\"paginate\":_vm.paginate}}):(_vm.hasMore)?_c('b-button',{directives:[{name:\"b-visible\",rawName:\"v-b-visible.300\",value:(_vm.loadMore),expression:\"loadMore\",modifiers:{\"300\":true}}],attrs:{\"variant\":\"primary\"},on:{\"click\":_vm.loadMore}},[_vm._v(_vm._s(_vm.$t('catalogs.loadMore')))]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-button-group',{attrs:{\"title\":_vm.$t('view.title'),\"size\":\"sm\"}},[_c('b-button',{attrs:{\"title\":_vm.$t('view.tiles.title'),\"variant\":\"outline-primary\",\"pressed\":_vm.value === 'cards'},on:{\"click\":function($event){return _vm.toggle('cards')}}},[_c('b-icon-bricks'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('view.tiles.label')))])],1),_c('b-button',{attrs:{\"title\":_vm.$t('view.list.title'),\"variant\":\"outline-primary\",\"pressed\":_vm.value === 'list'},on:{\"click\":function($event){return _vm.toggle('list')}}},[_c('b-icon-list-task'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('view.list.label')))])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n {{ $t('view.tiles.label') }}\n \n \n {{ $t('view.list.label') }}\n \n \n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ViewButtons.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ViewButtons.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ViewButtons.vue?vue&type=template&id=6a51668d\"\nimport script from \"./ViewButtons.vue?vue&type=script&lang=js\"\nexport * from \"./ViewButtons.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import ViewButtons from './ViewButtons.vue';\n\nexport default {\n components: {\n ViewButtons\n },\n computed: {\n cardsComponent() {\n return (this.view === 'list') ? 'div' : 'b-card-group';\n },\n cardsComponentProps() {\n if (this.view === 'list') {\n return {\n class: [\n 'card-list'\n ]\n };\n }\n else {\n return {\n columns: true\n };\n }\n },\n view: {\n get() {\n return this.$store.state.cardViewMode;\n },\n set(cardViewMode) {\n this.$store.commit('config', { cardViewMode });\n }\n }\n }\n};","\n \n \n {{ title }}
\n {{ catalogCount }}\n \n 1\" v-model=\"sort\" />\n \n 1\" class=\"mt-1 mb-1\" v-model=\"searchTerm\" :placeholder=\"filterPlaceholder\" />\n \n {{ $t('catalogs.noMatches') }}\n \n \n \n \n \n \n \n \n \n \n \n {{ $t('catalogs.loadMore') }}\n \n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Catalogs.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Catalogs.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Catalogs.vue?vue&type=template&id=14b33b99\"\nimport script from \"./Catalogs.vue?vue&type=script&lang=js\"\nexport * from \"./Catalogs.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-button',_vm._b({staticClass:\"copy-button\",attrs:{\"variant\":_vm.copyColor,\"title\":_vm.$t('copy')},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.copy.apply(null, arguments)}}},'b-button',_vm.buttonProps,false),[_c(_vm.copyIcon,{tag:\"component\"}),_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CopyButton.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CopyButton.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./CopyButton.vue?vue&type=template&id=033681c8\"\nimport script from \"./CopyButton.vue?vue&type=script&lang=js\"\nexport * from \"./CopyButton.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"styled-description\",class:{compact: _vm.compact, inline: _vm.inline},domProps:{\"innerHTML\":_vm._s(_vm.markup(_vm.description))}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Description.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Description.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Description.vue?vue&type=template&id=77c4c56a\"\nimport script from \"./Description.vue?vue&type=script&lang=js\"\nexport * from \"./Description.vue?vue&type=script&lang=js\"\nimport style0 from \"./Description.vue?vue&type=style&index=0&id=77c4c56a&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-card',{directives:[{name:\"b-visible\",rawName:\"v-b-visible.400\",value:(_vm.load),expression:\"load\",modifiers:{\"400\":true}}],staticClass:\"item-card\",class:{queued: !_vm.data, deprecated: _vm.isDeprecated, description: _vm.hasDescription},attrs:{\"no-body\":\"\"}},[(_vm.hasImage)?_c('b-card-img-lazy',_vm._b({staticClass:\"thumbnail\",attrs:{\"offset\":\"200\"}},'b-card-img-lazy',_vm.thumbnail,false)):_vm._e(),_c('b-card-body',[_c('b-card-title',[_c('StacLink',{staticClass:\"stretched-link\",attrs:{\"data\":[_vm.data, _vm.item]}})],1),(_vm.fileFormats.length > 0 || _vm.hasDescription || _vm.isDeprecated)?_c('b-card-text',{staticClass:\"intro\"},[(_vm.isDeprecated)?_c('b-badge',{staticClass:\"mr-1 mt-1 deprecated\",attrs:{\"variant\":\"warning\"}},[_vm._v(_vm._s(_vm.$t('deprecated')))]):_vm._e(),_vm._l((_vm.fileFormats),function(format){return _c('b-badge',{key:format,staticClass:\"mr-1 mt-1 fileformat\",attrs:{\"variant\":\"secondary\"}},[_vm._v(_vm._s(_vm._f(\"formatMediaType\")(format)))])}),(_vm.hasDescription)?[_vm._v(_vm._s(_vm._f(\"summarize\")(_vm.data.properties.description)))]:_vm._e()],2):_vm._e(),_c('b-card-text',[_c('small',{staticClass:\"text-muted\"},[(_vm.extent)?[_vm._v(_vm._s(_vm._f(\"formatTemporalExtent\")(_vm.extent)))]:(_vm.data && _vm.data.properties.datetime)?[_vm._v(_vm._s(_vm._f(\"formatTimestamp\")(_vm.data.properties.datetime)))]:[_vm._v(_vm._s(_vm.$t('items.noTime')))]],2)])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n \n \n 0 || hasDescription || isDeprecated\" class=\"intro\">\n {{ $t('deprecated') }}\n {{ format | formatMediaType }}\n {{ data.properties.description | summarize }}\n \n \n \n {{ extent | formatTemporalExtent }}\n {{ data.properties.datetime | formatTimestamp }}\n {{ $t('items.noTime') }}\n \n \n \n \n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Item.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Item.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Item.vue?vue&type=template&id=038776d6\"\nimport script from \"./Item.vue?vue&type=script&lang=js\"\nexport * from \"./Item.vue?vue&type=script&lang=js\"\nimport style0 from \"./Item.vue?vue&type=style&index=0&id=038776d6&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',{staticClass:\"items mb-4\"},[_c('header',[_c('h2',{staticClass:\"title mr-2\"},[_vm._v(_vm._s(_vm.$tc('stacItem', _vm.items.length )))]),(_vm.itemCount !== null)?_c('b-badge',{staticClass:\"mr-4\",attrs:{\"pill\":\"\",\"variant\":\"secondary\"}},[_vm._v(_vm._s(_vm.itemCount))]):_vm._e(),(!_vm.api && _vm.items.length > 1)?_c('SortButtons',{model:{value:(_vm.sort),callback:function ($$v) {_vm.sort=$$v},expression:\"sort\"}}):_vm._e()],1),(_vm.showPagination)?_c('Pagination',{ref:\"topPagination\",attrs:{\"pagination\":_vm.pagination,\"placement\":\"top\"},on:{\"paginate\":_vm.paginate}}):_vm._e(),(_vm.allowFilter)?[(_vm.api)?_c('b-button',{directives:[{name:\"b-toggle\",rawName:\"v-b-toggle.itemFilter\",modifiers:{\"itemFilter\":true}}],staticClass:\"mb-4 mt-2\",class:{'ml-3': _vm.showPagination},attrs:{\"variant\":_vm.hasFilters && !_vm.filtersOpen ? 'primary' : 'outline-primary'}},[_c('b-icon-search'),_vm._v(\" \"+_vm._s(_vm.filtersOpen ? _vm.$t('items.hideFilter') : _vm.$t('items.showFilter'))+\" \"),(_vm.hasFilters && !_vm.filtersOpen)?_c('b-badge',{attrs:{\"variant\":\"dark\"}},[_vm._v(_vm._s(_vm.filterCount))]):_vm._e()],1):_vm._e(),_c('b-collapse',{attrs:{\"id\":\"itemFilter\"},model:{value:(_vm.filtersOpen),callback:function ($$v) {_vm.filtersOpen=$$v},expression:\"filtersOpen\"}},[_c('SearchFilter',{attrs:{\"type\":\"Items\",\"title\":_vm.$t('items.filter'),\"parent\":_vm.stac,\"value\":_vm.apiFilters},on:{\"input\":_vm.emitFilter}})],1)]:_vm._e(),_c('section',{staticClass:\"list\"},[(_vm.loading)?_c('Loading',{attrs:{\"fill\":\"\",\"top\":\"\"}}):_vm._e(),(_vm.chunkedItems.length > 0)?_c('b-card-group',{attrs:{\"columns\":\"\"}},_vm._l((_vm.chunkedItems),function(item){return _c('Item',{key:item.href,attrs:{\"item\":item}})}),1):_c('b-alert',{attrs:{\"variant\":_vm.hasFilters ? 'warning' : 'info',\"show\":\"\"}},[(_vm.hasFilters)?[_vm._v(_vm._s(_vm.$t('search.noItemsFound')))]:[_vm._v(_vm._s(_vm.$t('items.noneAvailableForCollection')))]],2)],1),(_vm.showPagination)?_c('Pagination',{attrs:{\"pagination\":_vm.pagination},on:{\"paginate\":_vm.paginate}}):(_vm.hasMore)?_c('b-button',{directives:[{name:\"b-visible\",rawName:\"v-b-visible.300\",value:(_vm.showMore),expression:\"showMore\",modifiers:{\"300\":true}}],attrs:{\"variant\":\"primary\"},on:{\"click\":_vm.showMore}},[_vm._v(_vm._s(_vm.$t('showMore')))]):_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n {{ $tc('stacItem', items.length ) }}
\n {{ itemCount }}\n 1\" v-model=\"sort\" />\n \n\n \n \n \n \n {{ filtersOpen ? $t('items.hideFilter') : $t('items.showFilter') }}\n {{ filterCount }}\n \n \n \n \n \n\n \n \n 0\" columns>\n \n \n \n {{ $t('search.noItemsFound') }}\n {{ $t('items.noneAvailableForCollection') }}\n \n \n\n \n {{ $t('showMore') }}\n \n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Items.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Items.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Items.vue?vue&type=template&id=b7e27f22\"\nimport script from \"./Items.vue?vue&type=script&lang=js\"\nexport * from \"./Items.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:_vm.classes},[_c('b-spinner',{attrs:{\"label\":_vm.$t('loading'),\"small\":_vm.small}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n
\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Loading.vue?vue&type=template&id=67931bb8&scoped=true\"\nimport script from \"./Loading.vue?vue&type=script&lang=js\"\nexport * from \"./Loading.vue?vue&type=script&lang=js\"\nimport style0 from \"./Loading.vue?vue&type=style&index=0&id=67931bb8&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"67931bb8\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-button-group',{class:_vm.classes},[_c('b-button',{attrs:{\"disabled\":!_vm.pagination.first,\"variant\":\"primary\"},on:{\"click\":function($event){return _vm.paginate(_vm.pagination.first)}}},[_vm._v(_vm._s(_vm.$t('pagination.first')))]),_c('b-button',{attrs:{\"disabled\":!_vm.pagination.prev,\"variant\":\"primary\"},on:{\"click\":function($event){return _vm.paginate(_vm.pagination.prev)}}},[_vm._v(_vm._s(_vm.$t('pagination.previous')))]),_c('b-button',{attrs:{\"disabled\":!_vm.pagination.next,\"variant\":\"primary\"},on:{\"click\":function($event){return _vm.paginate(_vm.pagination.next)}}},[_vm._v(_vm._s(_vm.$t('pagination.next')))]),(_vm.pagination.last)?_c('b-button',{attrs:{\"variant\":\"primary\"},on:{\"click\":function($event){return _vm.paginate(_vm.pagination.last)}}},[_vm._v(_vm._s(_vm.$t('pagination.last')))]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n {{ $t('pagination.first') }}\n {{ $t('pagination.previous') }}\n {{ $t('pagination.next') }}\n {{ $t('pagination.last') }}\n \n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Pagination.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Pagination.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Pagination.vue?vue&type=template&id=56aa2ed6\"\nimport script from \"./Pagination.vue?vue&type=script&lang=js\"\nexport * from \"./Pagination.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.component,_vm._b({tag:\"component\",staticClass:\"stac-link\",attrs:{\"title\":_vm.tooltip}},'component',_vm.attributes,false),[(_vm.icon)?[_c('img',{staticClass:\"icon mr-2\",attrs:{\"src\":_vm.icon.href,\"alt\":_vm.icon.title,\"title\":_vm.icon.title}})]:_vm._e(),_c('span',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.displayTitle))])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n {{ displayTitle }}\n \n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StacLink.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StacLink.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./StacLink.vue?vue&type=template&id=935ce1da\"\nimport script from \"./StacLink.vue?vue&type=script&lang=js\"\nexport * from \"./StacLink.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","module.exports = {\n catalogUrl: null,\n catalogTitle: \"STAC Browser\",\n allowExternalAccess: true, // Must be true if catalogUrl is not given\n allowedDomains: [],\n detectLocaleFromBrowser: true,\n storeLocale: true,\n locale: \"en\",\n fallbackLocale: \"en\",\n supportedLocales: [\n \"de\",\n// \"de-CH\",\n \"es\",\n \"en\",\n \"fr\",\n// \"fr-CA\",\n// \"fr-CH\",\n \"it\",\n// \"it-CH\",\n \"ro\"\n ],\n apiCatalogPriority: null,\n useTileLayerAsFallback: true,\n displayGeoTiffByDefault: false,\n buildTileUrlTemplate: ({href, asset}) => \"https://tiles.rdnt.io/tiles/{z}/{x}/{y}@2x?url=\" + encodeURIComponent(asset.href.startsWith(\"/vsi\") ? asset.href : href),\n stacProxyUrl: null,\n pathPrefix: \"/\",\n historyMode: \"history\",\n cardViewMode: \"cards\",\n cardViewSort: \"asc\",\n showThumbnailsAsAssets: false,\n stacLint: true,\n geoTiffResolution: 128,\n redirectLegacyUrls: false,\n itemsPerPage: 12,\n defaultThumbnailSize: null,\n maxPreviewsOnMap: 50,\n crossOriginMedia: null,\n requestHeaders: {},\n requestQueryParameters: {},\n preprocessSTAC: null,\n authConfig: null\n};\n","// Add deprecated CQL conformance classes for stac-fastapi:\n// https://github.com/stac-utils/stac-fastapi/issues/539\nconst CQL_TEXT = [\n 'https://api.stacspec.org/v1.*/item-search#filter:cql-text', // deprecated\n 'http://www.opengis.net/spec/cql2/1.*/conf/cql2-text'\n];\nconst CQL_JSON = [\n 'https://api.stacspec.org/v1.*/item-search#filter:cql-json', // deprecated\n 'http://www.opengis.net/spec/cql2/1.*/conf/cql2-json'\n];\n\nconst CQL_ADV_COMPARISON = ['http://www.opengis.net/spec/cql2/1.*/req/advanced-comparison-operators'];\n\nimport { mapGetters } from \"vuex\";\n\nexport const TYPES = {\n // OGC / STAC API - Features\n Items: {\n BasicFilters: [\n 'https://api.stacspec.org/v1.*/ogcapi-features',\n 'http://www.opengis.net/spec/ogcapi-features-1/1.*/conf/core'\n ],\n CollectionIdFilter: false,\n ItemIdFilter: false,\n // It seems some conformance classes use conf (correct) and some req (deprecated?) after the version number\n CqlFilters: ['http://www.opengis.net/spec/ogcapi-features-3/1.*/*/features-filter'],\n Sort: [\n 'https://api.stacspec.org/v1.*/ogcapi-features#sort',\n 'http://www.opengis.net/spec/ogcapi-records-1/1.*/conf/sorting'\n ],\n FreeText: ['https://api.stacspec.org/v1.*/ogcapi-features#free-text']\n },\n // STAC API - Item Search\n Global: {\n BasicFilters: true,\n CollectionIdFilter: true,\n ItemIdFilter: true,\n CqlFilters: ['https://api.stacspec.org/v1.*/item-search#filter'],\n Sort: ['https://api.stacspec.org/v1.*/item-search#sort'],\n FreeText: ['https://api.stacspec.org/v1.*/item-search#free-text']\n },\n // OGC / STAC API - Collections\n Collections: {\n BasicFilters: ['https://api.stacspec.org/v1.*/collection-search'],\n CollectionIdFilter: false,\n ItemIdFilter: false,\n CqlFilters: ['https://api.stacspec.org/v1.*/collection-search#filter'],\n Sort: ['https://api.stacspec.org/v1.*/collection-search#sort'],\n FreeText: ['https://api.stacspec.org/v1.*/collection-search#free-text']\n }\n};\n\nexport default {\n props: {\n type: {\n type: String,\n required: true\n }\n },\n computed: {\n ...mapGetters(['supportsConformance']),\n\n conformances() {\n return TYPES[this.type];\n },\n\n canSort() {\n return this.supportsConformance(this.conformances.Sort);\n },\n canFilterExtents() {\n return this.supportsConformance(this.conformances.BasicFilters);\n },\n canFilterFreeText() {\n return this.supportsConformance(this.conformances.FreeText);\n },\n cql() {\n if (!this.supportsConformance(this.conformances.CqlFilters)) {\n return null;\n }\n let textMode = this.supportsConformance(CQL_TEXT);\n let jsonMode = this.supportsConformance(CQL_JSON);\n if (!textMode && !jsonMode) {\n return null;\n }\n\n return {\n textMode,\n jsonMode,\n advancedComparison: this.supportsConformance(CQL_ADV_COMPARISON)\n };\n }\n }\n};\n","import { mapState } from 'vuex';\n\nexport default functions => {\n let mixin = {\n computed: {\n ...mapState(['uiLanguage'])\n },\n methods: {}\n };\n for(let name in functions) {\n let fn = functions[name];\n mixin.methods[name] = function() {\n // We call uiLanguage once so that it's a dependency for the computed property\n // which makes the computed property to re-render when uiLanguage changes.\n this.uiLanguage;\n return fn(...arguments);\n };\n }\n return mixin;\n};","import { mapState } from 'vuex';\n\nexport default {\n props: {\n showThumbnail: {\n type: Boolean,\n default: true\n }\n },\n computed: {\n ...mapState(['cardViewMode', 'crossOriginMedia', 'defaultThumbnailSize']),\n isList() {\n return this.data && !this.data.isItem() && this.cardViewMode === 'list';\n },\n hasImage() {\n return this.showThumbnail && this.thumbnail;\n },\n thumbnail() {\n if (this.data) {\n let thumbnails = this.data.getThumbnails(true, 'thumbnail');\n if (thumbnails.length > 0) {\n let t = thumbnails[0];\n let width, height;\n if (Array.isArray(t['proj:shape']) && t['proj:shape'].length === 2) {\n [height, width] = t['proj:shape'];\n }\n else if (Array.isArray(this.defaultThumbnailSize) && this.defaultThumbnailSize.length === 2) {\n [height, width] = this.defaultThumbnailSize;\n }\n return {\n src: t.href,\n alt: t.title,\n crossorigin: this.crossOriginMedia,\n right: this.isList,\n blankColor: \"rgba(0, 0, 0, 0.125)\",\n width,\n height,\n // for b-card-img-lazy\n \"blank-width\": width,\n \"blank-height\": height\n };\n }\n }\n return null;\n }\n }\n};","let config;\nif (typeof CONFIG_PATH === 'undefined') {\n config = require('../config');\n}\nelse {\n config = require(CONFIG_PATH);\n}\n\nexport default Object.assign(config, CONFIG_CLI, window.STAC_BROWSER_CONFIG);","import Vue from 'vue';\nimport VueI18n from 'vue-i18n';\nimport CONFIG from './config';\nimport {default as Fields} from '@radiantearth/stac-fields/I18N';\nimport Utils from './utils';\n\nVue.use(VueI18n);\n\nexport const API_LANGUAGE_CONFORMANCE = ['https://api.stacspec.org/v1.*/language'];\n\nconst LOCALE_CONFIG = {};\n\nfunction loadLocaleConfig() {\n // Load locale config\n for(let locale of CONFIG.supportedLocales) {\n LOCALE_CONFIG[locale] = require(`./locales/${locale}/config.json`);\n }\n const messages = {};\n // Add language names all other languages\n for(let locale in LOCALE_CONFIG) {\n messages[locale] = {\n languages: LOCALE_CONFIG\n };\n }\n return messages;\n}\n\nconst i18n = new VueI18n({\n locale: CONFIG.locale,\n fallbackLocale: CONFIG.fallbackLocale,\n messages: loadLocaleConfig()\n});\nexport default i18n;\n\nexport function loadDefaultMessages() {\n return Promise.all([\n loadMessages(CONFIG.locale),\n loadMessages(CONFIG.fallbackLocale)\n ]);\n}\n\nexport async function loadMessages(locale) {\n // Check whether the language has already been loaded\n // Note that a languages key is already present thus check >1 and not >0\n if (Utils.size(i18n.messages[locale]) > 1) {\n return;\n }\n const messages = (await import(`./locales/${locale}/default.js`)).default;\n i18n.mergeLocaleMessage(locale, messages);\n}\n\nexport function translateFields(value, vars = null) {\n if (typeof value !== 'string' || value.length === 0) {\n return value;\n }\n let key = `fields.${value}`;\n if (i18n.te(key)) {\n return i18n.t(key, null, vars);\n }\n return Fields.format(value, vars);\n}","// This code is based on https://github.com/cherry-projects/locale-id\n// Due to the \"heavy\" dependencies, it has been slimmed down\n\n// http://userguide.icu-project.org/locale\nexport default function parse(locale) {\n if (!locale) {\n return undefined;\n }\n\n // extract keyword\n const stringLocale = String(locale);\n const keywordPos = stringLocale.indexOf('@');\n\n const keyword = keywordPos !== -1\n ? stringLocale.substr(keywordPos + 1)\n : undefined;\n\n const localeWithoutKeyword = keywordPos !== -1\n ? stringLocale.substr(0, keywordPos)\n : stringLocale;\n\n // en-us => en_us\n const parts = String(localeWithoutKeyword)\n .replace(/-/g, '_')\n .split('_');\n\n if (!parts.length || parts.length > 4) {\n return undefined;\n }\n\n const language = parts.shift();\n if (!language) {\n return undefined;\n }\n\n const retVar = {\n keyword,\n language: language.toLowerCase(),\n };\n\n if (!parts.length) {\n return retVar;\n }\n\n if (parts.length === 3) {\n const variant = parts.pop();\n if (variant) {\n retVar.variant = variant.toUpperCase();\n }\n }\n\n let country = parts.pop();\n if (country.length > 3) {\n retVar.keyword = country;\n\n country = parts.pop();\n }\n\n if (country) {\n retVar.country = country.toUpperCase();\n }\n\n if (!parts.length) {\n return retVar;\n }\n\n const script = parts.pop();\n if (typeof script === 'string' && script.length >= 1) {\n retVar.script = script[0].toUpperCase() + script.substring(1).toLowerCase();\n }\n\n return retVar;\n}\n\nexport function normalize(locale, delimeter = '_') {\n const obj = parse(locale);\n if (!obj) {\n return obj;\n }\n\n let result = obj.language;\n\n if (obj.script) {\n result += `${delimeter}${obj.script}`;\n }\n\n if (obj.country) {\n result += `${delimeter}${obj.country}`;\n }\n\n return result;\n}\n\nconst splitAcceptLanguageRegEx = /([a-z]{1,8}(-[a-z]{1,8})?)\\s*(;\\s*q\\s*=\\s*(1|0\\.[0-9]+))?/ig;\nconst acceptLanguageItemRegEx = /^([a-z]{1,8}(-[a-z]{1,8})?)/i;\n\nexport function normalizeAcceptLanguage(acceptLanguage) {\n const returnItems = [];\n if (!acceptLanguage) {\n return returnItems;\n }\n\n const items = acceptLanguage.match(splitAcceptLanguageRegEx) || [];\n items.forEach(acceptLanguageItem => {\n const matches = acceptLanguageItem.match(acceptLanguageItemRegEx) || [];\n const locale = normalize(matches[0]);\n if (locale) {\n returnItems.push(locale);\n }\n });\n\n return returnItems;\n}\n\nexport function prepareSupported(supported) {\n const lgs = {};\n\n supported.forEach(supportedLocale => {\n const { language, country } = parse(supportedLocale);\n if (!language) {\n throw new Error(`Locale ${supportedLocale} is not parsable`);\n }\n\n if (!lgs[language]) {\n lgs[language] = {\n countries: {},\n firstCountry: undefined,\n main: undefined,\n };\n }\n\n const lg = lgs[language];\n if (country) {\n lg.countries[country] = supportedLocale;\n\n if (!lg.firstCountry) {\n lg.firstCountry = supportedLocale;\n }\n } else {\n lg.main = supportedLocale;\n }\n });\n\n return lgs;\n}\n\nexport function getBest(supported, locale, defaultLocale, getAnyCountry) {\n const lgs = Array.isArray(supported) ? prepareSupported(supported) : supported;\n\n // return defaultLocale if current locale is undefined\n if (!locale && defaultLocale) {\n return getBest(supported, defaultLocale, undefined, getAnyCountry);\n }\n\n if (!locale) {\n return undefined;\n }\n\n const { language, country } = parse(locale);\n if (!language) {\n return defaultLocale;\n }\n\n // selected locale is not supported\n if (!lgs[language]) {\n if (locale === defaultLocale) {\n return undefined;\n }\n\n return getBest(supported, defaultLocale, null, getAnyCountry);\n }\n\n const { countries, main = defaultLocale, firstCountry } = lgs[language];\n if (!countries || !country) {\n if (getAnyCountry && firstCountry) {\n return firstCountry;\n }\n\n return main;\n }\n\n if (getAnyCountry && firstCountry) {\n return countries[country] ? countries[country] : firstCountry;\n }\n\n return countries[country] ? countries[country] : main;\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-container',{attrs:{\"id\":\"stac-browser\"}},[(_vm.doAuth.length > 0)?_c('Authentication'):_vm._e(),(_vm.globalError)?_c('ErrorAlert',_vm._b({staticClass:\"global-error\",on:{\"close\":_vm.hideError}},'ErrorAlert',_vm.globalError,false)):_vm._e(),(_vm.sidebar)?_c('Sidebar'):_vm._e(),_c('header',[_c('div',{staticClass:\"logo\"},[_vm._v(_vm._s(_vm.displayCatalogTitle))]),_c('StacHeader',{on:{\"enableSidebar\":function($event){_vm.sidebar = true}}})],1),_c('router-view'),_c('footer',[_c('i18n',{staticClass:\"poweredby text-muted\",attrs:{\"tag\":\"small\",\"path\":\"poweredBy\"},scopedSlots:_vm._u([{key:\"link\",fn:function(){return [_c('a',{attrs:{\"href\":\"https://github.com/radiantearth/stac-browser\",\"target\":\"_blank\"}},[_vm._v(\"STAC Browser\")]),_vm._v(\" \"+_vm._s(_vm.browserVersion)+\" \")]},proxy:true}])})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('main',{staticClass:\"browse d-flex flex-column\"},[(!_vm.allowExternalAccess && _vm.isExternal)?_c('b-alert',{attrs:{\"show\":\"\"}},[_vm._v(_vm._s(_vm.$t('errors.noExternalAccess')))]):(_vm.error)?_c('ErrorAlert',{attrs:{\"dismissible\":false,\"url\":_vm.url,\"description\":_vm.errorDescription,\"id\":_vm.errorId}}):(_vm.loading)?_c('Loading',{attrs:{\"stretch\":\"\"}}):_c(_vm.component,{tag:\"component\"})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-alert',{attrs:{\"variant\":\"danger\",\"show\":\"\",\"dismissible\":_vm.dismissible},on:{\"dismissed\":function($event){return _vm.$emit('close')}}},[_c('p',{staticClass:\"message\"},[_vm._v(_vm._s(_vm.message || _vm.$t('errors.default')))]),(_vm.error && _vm.error.message)?_c('dl',{staticClass:\"error\"},[_c('dt',[_vm._v(_vm._s(_vm.$t('errors.labels.cause')))]),_c('dd',[_vm._v(_vm._s(_vm.error.message))])]):_vm._e(),(_vm.description)?_c('dl',{staticClass:\"description\"},[_c('dt',[_vm._v(_vm._s(_vm.$t('errors.labels.reason')))]),_c('dd',[_vm._v(_vm._s(_vm.description))])]):_vm._e(),(_vm.id)?_c('dl',{staticClass:\"id\"},[_c('dt',[_vm._v(_vm._s(_vm.$t('errors.labels.code')))]),_c('dd',[_c('code',[_vm._v(_vm._s(_vm.id))])])]):_vm._e(),(_vm.url)?_c('dl',{staticClass:\"url\"},[_c('dt',[_vm._v(_vm._s(_vm.$t('errors.labels.requestURL')))]),_c('dd',[_c('code',[_vm._v(_vm._s(_vm.url))])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n {{ message || $t('errors.default') }}
\n \n - {{ $t('errors.labels.cause') }}
\n - {{ error.message }}
\n
\n \n - {{ $t('errors.labels.reason') }}
\n - {{ description }}
\n
\n \n - {{ $t('errors.labels.code') }}
\n {{ id }}
\n
\n \n - {{ $t('errors.labels.requestURL') }}
\n {{ url }}
\n
\n \n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ErrorAlert.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ErrorAlert.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ErrorAlert.vue?vue&type=template&id=09bb7d1b&scoped=true\"\nimport script from \"./ErrorAlert.vue?vue&type=script&lang=js\"\nexport * from \"./ErrorAlert.vue?vue&type=script&lang=js\"\nimport style0 from \"./ErrorAlert.vue?vue&type=style&index=0&id=09bb7d1b&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"09bb7d1b\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{key:_vm.data.id,staticClass:\"item\"},[_c('b-row',[_c('b-col',{staticClass:\"left\"},[_c('section',{staticClass:\"mb-4\"},[_c('b-card',{staticClass:\"maps-preview\",attrs:{\"no-body\":\"\"}},[_c('b-tabs',{ref:\"tabs\",attrs:{\"card\":\"\",\"pills\":\"\",\"vertical\":\"\",\"end\":\"\"},model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},[_c('b-tab',{attrs:{\"title\":_vm.$t('map'),\"no-body\":\"\"}},[_c('Map',{attrs:{\"stac\":_vm.data,\"stacLayerData\":_vm.selectedAsset,\"scrollWheelZoom\":\"\"},on:{\"dataChanged\":_vm.dataChanged}})],1),(_vm.thumbnails.length > 0)?_c('b-tab',{attrs:{\"title\":_vm.$t('thumbnails'),\"no-body\":\"\"}},[_c('Thumbnails',{attrs:{\"thumbnails\":_vm.thumbnails}})],1):_vm._e()],1)],1)],1),(_vm.hasAssets)?_c('Assets',{attrs:{\"assets\":_vm.assets,\"context\":_vm.data,\"shown\":_vm.shownAssets},on:{\"showAsset\":_vm.showAsset}}):_vm._e(),(_vm.additionalLinks.length > 0)?_c('Links',{attrs:{\"title\":_vm.$t('additionalResources'),\"links\":_vm.additionalLinks}}):_vm._e()],1),_c('b-col',{staticClass:\"right\"},[_c('section',{staticClass:\"intro\"},[(_vm.data.properties.description)?_c('h2',[_vm._v(_vm._s(_vm.$t('description')))]):_vm._e(),(_vm.data.properties.deprecated)?_c('DeprecationNotice',{attrs:{\"data\":_vm.data}}):_vm._e(),(_vm.data.properties['anon:warning'])?_c('AnonymizedNotice',{attrs:{\"warning\":_vm.data.properties['anon:warning']}}):_vm._e(),(_vm.data.properties.description)?_c('ReadMore',{attrs:{\"lines\":10,\"text\":_vm.$t('read.more'),\"text-less\":_vm.$t('read.less')}},[_c('Description',{attrs:{\"description\":_vm.data.properties.description}})],1):_vm._e(),(Array.isArray(_vm.data.properties.keywords) && _vm.data.properties.keywords.length > 0)?_c('Keywords',{attrs:{\"keywords\":_vm.data.properties.keywords}}):_vm._e()],1),(_vm.collectionLink)?_c('CollectionLink',{attrs:{\"link\":_vm.collectionLink}}):_vm._e(),(_vm.data.properties.providers)?_c('Providers',{attrs:{\"providers\":_vm.data.properties.providers}}):_vm._e(),_c('Metadata',{attrs:{\"data\":_vm.data,\"type\":\"Item\",\"ignoreFields\":_vm.ignoredMetadataFields}})],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Utils from '../utils';\nimport { mapGetters } from 'vuex';\n\nexport default {\n data() {\n return {\n shownAssetsOnMap: [],\n shownBandsOnMap: [],\n tab: null,\n selectedAsset: null,\n selectedAssetKey: null\n };\n },\n computed: {\n ...mapGetters(['thumbnails', 'hasAssets', 'assets']),\n shownAssets() {\n if (this.tab === 0) {\n return this.shownAssetsOnMap;\n }\n else if (this.tab === 1 || (this.tab === null && this.thumbnails.length > 0)) {\n let keys = [];\n let thumbnailRefs = this.thumbnails.map(t => t.href);\n for(let key in this.assets) {\n let asset = this.assets[key];\n if (thumbnailRefs.includes(asset.href)) {\n keys.push(key);\n }\n }\n return keys;\n }\n return [];\n }\n },\n methods: {\n showAsset(asset, id, isThumbnail) {\n if (isThumbnail) {\n this.tab = 1;\n }\n else {\n this.tab = 0;\n this.selectedAsset = asset;\n this.selectedAssetKey = id;\n }\n if (this.$refs.tabs) {\n Utils.scrollTo(this.$refs.tabs.$el);\n }\n },\n dataChanged(data) {\n if (!Utils.isObject(data)) {\n this.shownBandsOnMap = [];\n this.shownAssetsOnMap = [];\n }\n else if (data.assets || data.bands) {\n if (Utils.size(data.assets) > 0) {\n if (this.selectedAssetKey) {\n this.shownAssetsOnMap = [this.selectedAssetKey];\n }\n else {\n this.shownAssetsOnMap = data.assets.map(meta => meta.key);\n }\n }\n if (Utils.size(data.bands) > 0) {\n this.shownBandsOnMap = data.bands;\n }\n }\n else if (this.selectedAssetKey) {\n this.shownAssetsOnMap = [this.selectedAssetKey];\n }\n }\n }\n};","import Utils from './utils';\nimport STAC from './models/stac';\nimport URI from 'urijs';\nimport i18n from './i18n';\n\nfunction toBrowserUrl(url, store) {\n let path = store.getters.toBrowserPath(url);\n let uri = URI(window.location.origin.toString());\n if (store.state.historyMode === 'hash') {\n uri.path(store.state.pathPrefix);\n uri.fragment(path);\n }\n else {\n uri.path(store.state.pathPrefix.replace(/\\/$/, '') + path);\n }\n return uri.toString();\n}\n\nfunction addSpatialCoverage(schema, bbox) {\n if (Array.isArray(bbox) && bbox.length >= 4) {\n schema.spatialCoverage = {\n \"@type\": \"Place\",\n geo: {\n \"@type\": \"GeoShape\",\n box: (bbox || []).join(\" \")\n }\n };\n }\n}\n\nfunction formatTemporalCoverage(dates) {\n if (Array.isArray(dates) && dates.length === 2 && (typeof dates[0] === 'string' || typeof dates[1] === 'string')) {\n return dates.map(dt => dt ? dt : '..').join('/');\n }\n return null;\n}\n\nfunction makeAssets(data) {\n if (Utils.size(data.assets) > 0) {\n return Object.values(data.assets).map(a => ({\n \"@type\": \"DataDownload\",\n contentUrl: Utils.toAbsolute(a.href, data.getAbsoluteUrl()),\n encodingFormat: a.type,\n name: a.title\n }));\n }\n return [];\n}\n\nfunction makeLinks(links, data, store, type = \"DataCatalog\") {\n return links.map(link => {\n let name, isBasedOn;\n if (link instanceof STAC) {\n name = STAC.getDisplayTitle(link);\n isBasedOn = link.getAbsoluteUrl();\n }\n else {\n name = link.title;\n isBasedOn = Utils.toAbsolute(link.href, data.getAbsoluteUrl());\n }\n let obj = {\n \"@type\": type,\n name,\n url: toBrowserUrl(isBasedOn, store),\n isBasedOn\n };\n if (type === 'Dataset') {\n obj.description = fallbackDescription(link, store);\n }\n return obj;\n });\n}\n\nfunction makeProvider(providers, role) {\n return providers\n .filter(p => Utils.isObject(p) && Array.isArray(p.roles) && p.roles.includes(role))\n .map(p => ({\n \"@type\": \"Organization\",\n \"name\": p.name,\n \"description\": p.description,\n \"url\": p.url,\n \"email\": p.email || p.mail,\n }));\n}\n\nfunction fallbackDescription(data, store) {\n let stacType, container;\n if (data instanceof STAC) {\n stacType = data.isItem() ? \"Item\" : data.type;\n container = data.collection;\n }\n else if (Utils.isObject(data) && data.rel === 'item') {\n stacType = \"Item\";\n }\n if (stacType) {\n let type = i18n.tc(`stac${stacType}`);\n let inX = i18n.t('in', {catalog: container || store.catalogTitle});\n return `SpatioTemporal Asset Catalog (STAC)\\n${type} - ${data.id} ${inX}`;\n }\n}\n\nfunction createBaseSchema(data, type, store) {\n let name = STAC.getDisplayTitle(data);\n let stacUrl = data.getAbsoluteUrl();\n let url = toBrowserUrl(stacUrl, store);\n let inLanguage = data.getMetadata('language')?.code;\n let thumbnails = data.getThumbnails(true);\n let thumbnailUrl;\n if (thumbnails.length > 0) {\n thumbnailUrl = Utils.toAbsolute(thumbnails[0].href, data.getAbsoluteUrl());\n }\n let license = data.getMetadata('license');\n if (license && license !== 'proprietary' && license !== 'various') {\n license = `https://spdx.org/licenses/${license}.html`;\n }\n else {\n license = data.getLinkWithRel('license')?.href;\n }\n if (license) {\n license = Utils.toAbsolute(license, data.getAbsoluteUrl());\n }\n\n let providers = data.getMetadata('providers');\n let copyrightHolder; // licensor\n let producer; // producer\n let provider; // host\n let creator; // processor\n if (Utils.size(providers) > 0) {\n copyrightHolder = makeProvider(providers, \"licensor\");\n producer = makeProvider(providers, \"producer\");\n provider = makeProvider(providers, \"host\");\n creator = makeProvider(providers, \"processor\");\n }\n\n return {\n \"@context\": \"https://schema.org/\",\n \"@type\": type,\n name,\n description: data.getMetadata(\"description\") || fallbackDescription(data, store),\n citation: data.getMetadata(\"sci:citation\"),\n identifier: data.getMetadata(\"sci:doi\") || data.id,\n keywords: data.getMetadata(\"keywords\"),\n license,\n url,\n isBasedOn: stacUrl,\n dateCreated: data.getMetadata('created'),\n dateModified: data.getMetadata('updated'),\n datePublished: data.getMetadata('published'),\n expires: data.getMetadata('expires'),\n inLanguage,\n thumbnailUrl,\n version: data.getMetadata('version'),\n image: thumbnailUrl,\n copyrightHolder,\n producer,\n provider,\n creator\n };\n}\n\nexport function createCatalogSchema(data, parents, store) {\n if (!(data instanceof STAC)) {\n return null;\n }\n // Remove invalid links\n parents = parents.filter(link => Utils.isObject(link));\n if (parents.length > 1) {\n // Remove duplicates\n parents = parents.filter((link, i) => parents.findIndex(p => p.isBasedOn === link.isBasedOn) !== i);\n }\n\n let schema = createBaseSchema(data, 'DataCatalog', store);\n\n if (data.isCollection()) {\n if (data.extent?.temporal?.interval.length > 0) {\n schema.temporalCoverage = formatTemporalCoverage(data.extent.temporal.interval[0]);\n }\n\n if (data.extent?.spatial?.bbox.length > 0) {\n addSpatialCoverage(schema, data.extent.spatial.bbox[0]);\n }\n schema.associatedMedia = makeAssets(data);\n }\n\n schema.hasPart = makeLinks(store.getters.catalogs, data, store);\n schema.dataset = makeLinks(store.getters.items, data, store, \"Dataset\");\n schema.isPartOf = makeLinks(parents, data, store);\n\n return schema;\n}\n\nexport function createItemSchema(data, parents, store) {\n if (!(data instanceof STAC)) {\n return null;\n }\n parents = parents.filter(link => Utils.isObject(link));\n\n let schema = createBaseSchema(data, 'Dataset', store);\n\n schema.includedInDataCatalog = makeLinks(parents, data, store);\n\n let start = data.getMetadata('start_datetime');\n let end = data.getMetadata('end_datetime');\n if (start || end) {\n schema.temporalCoverage = formatTemporalCoverage([start, end]);\n }\n else {\n schema.temporalCoverage = data.getMetadata('datetime');\n }\n\n addSpatialCoverage(schema, data.bbox);\n schema.distribution = makeAssets(data);\n\n return schema;\n}\n\nexport function addSchemaToDocument(doc, schema) {\n let id = 'schema-org';\n let element = doc.getElementById(id);\n if (!element) {\n element = doc.createElement('script');\n element.type = 'application/ld+json';\n element.id = id;\n doc.head.appendChild(element);\n }\n element.innerText = JSON.stringify(schema);\n}","\n \n
\n \n \n \n \n \n \n \n 0\" :title=\"$t('thumbnails')\" no-body>\n \n \n \n \n \n \n 0\" :title=\"$t('additionalResources')\" :links=\"additionalLinks\" />\n \n \n \n {{ $t('description') }}
\n \n \n \n \n \n 0\" :keywords=\"data.properties.keywords\" />\n \n \n \n \n \n \n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Item.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Item.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Item.vue?vue&type=template&id=2f4e5e1a\"\nimport script from \"./Item.vue?vue&type=script&lang=js\"\nexport * from \"./Item.vue?vue&type=script&lang=js\"\nimport style0 from \"./Item.vue?vue&type=style&index=0&id=2f4e5e1a&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{key:_vm.data.id,class:{cc: true, [_vm.data.type.toLowerCase()]: true, mixed: _vm.hasCatalogs && _vm.hasItems, empty: !_vm.hasCatalogs && !_vm.hasItems}},[_c('b-row',[_c('b-col',{staticClass:\"meta\"},[_c('section',{staticClass:\"intro\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('description')))]),(_vm.data.deprecated)?_c('DeprecationNotice',{attrs:{\"data\":_vm.data}}):_vm._e(),(_vm.data['anon:warning'])?_c('AnonymizedNotice',{attrs:{\"warning\":_vm.data['anon:warning']}}):_vm._e(),(_vm.data.description)?_c('ReadMore',{attrs:{\"lines\":10,\"text\":_vm.$t('read.more'),\"text-less\":_vm.$t('read.less')}},[_c('Description',{attrs:{\"description\":_vm.data.description}})],1):_vm._e(),(Array.isArray(_vm.data.keywords) && _vm.data.keywords.length > 0)?_c('Keywords',{attrs:{\"keywords\":_vm.data.keywords}}):_vm._e(),(_vm.isCollection)?_c('section',{staticClass:\"metadata mb-4\"},[(_vm.licenses)?_c('b-row',[_c('b-col',{staticClass:\"label\",attrs:{\"md\":\"4\"}},[_vm._v(_vm._s(_vm.$t('catalog.license')))]),_c('b-col',{staticClass:\"value\",attrs:{\"md\":\"8\"}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.licenses)}})])],1):_vm._e(),(_vm.temporalExtents)?_c('b-row',[_c('b-col',{staticClass:\"label\",attrs:{\"md\":\"4\"}},[_vm._v(_vm._s(_vm.$t('catalog.temporalExtent')))]),_c('b-col',{staticClass:\"value\",attrs:{\"md\":\"8\"}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.temporalExtents)}})])],1):_vm._e()],1):_vm._e(),(_vm.linkPosition === 'left')?_c('Links',{attrs:{\"title\":_vm.$t('additionalResources'),\"links\":_vm.additionalLinks}}):_vm._e()],1),(_vm.isCollection || _vm.hasThumbnails)?_c('section',{staticClass:\"mb-4\"},[_c('b-card',{staticClass:\"maps-preview\",attrs:{\"no-body\":\"\"}},[_c('b-tabs',{ref:\"tabs\",attrs:{\"pills\":\"\",\"card\":\"\",\"vertical\":\"\",\"end\":\"\"},model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},[(_vm.isCollection)?_c('b-tab',{attrs:{\"title\":_vm.$t('map'),\"no-body\":\"\"}},[_c('Map',{attrs:{\"stac\":_vm.data,\"stacLayerData\":_vm.mapData,\"fitBoundsOnce\":\"\",\"popover\":\"\"},on:{\"dataChanged\":_vm.dataChanged}})],1):_vm._e(),(_vm.hasThumbnails)?_c('b-tab',{attrs:{\"title\":_vm.$t('thumbnails'),\"no-body\":\"\"}},[_c('Thumbnails',{attrs:{\"thumbnails\":_vm.thumbnails}})],1):_vm._e()],1)],1)],1):_vm._e(),(_vm.hasAssets)?_c('Assets',{attrs:{\"assets\":_vm.assets,\"context\":_vm.data,\"shown\":_vm.shownAssets},on:{\"showAsset\":_vm.showAsset}}):_vm._e(),(_vm.hasItemAssets && !_vm.hasItems)?_c('Assets',{attrs:{\"assets\":_vm.data.item_assets,\"definition\":true}}):_vm._e(),(_vm.providers)?_c('Providers',{attrs:{\"providers\":_vm.providers}}):_vm._e(),_c('Metadata',{staticClass:\"mb-4\",attrs:{\"type\":_vm.data.type,\"data\":_vm.data,\"ignoreFields\":_vm.ignoredMetadataFields}}),(_vm.collectionLink)?_c('CollectionLink',{attrs:{\"link\":_vm.collectionLink}}):_vm._e(),(_vm.linkPosition === 'right')?_c('Links',{attrs:{\"title\":_vm.$t('additionalResources'),\"links\":_vm.additionalLinks}}):_vm._e()],1),(_vm.hasCatalogs)?_c('b-col',{staticClass:\"catalogs-container\"},[_c('Catalogs',{attrs:{\"catalogs\":_vm.catalogs,\"hasMore\":!!_vm.nextCollectionsLink},on:{\"loadMore\":_vm.loadMoreCollections}})],1):_vm._e(),(_vm.hasItems)?_c('b-col',{staticClass:\"items-container\"},[_c('Items',{attrs:{\"stac\":_vm.data,\"items\":_vm.items,\"api\":_vm.isApi,\"showFilters\":_vm.showFilters,\"apiFilters\":_vm.filters,\"pagination\":_vm.itemPages,\"loading\":_vm.apiItemsLoading},on:{\"paginate\":_vm.paginateItems,\"filterItems\":_vm.filterItems,\"filtersShown\":_vm.filtersShown}}),(_vm.hasItemAssets)?_c('Assets',{attrs:{\"assets\":_vm.data.item_assets,\"definition\":true}}):_vm._e()],1):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n
\n \n \n {{ $t('description') }}
\n \n \n \n \n \n 0\" :keywords=\"data.keywords\" />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Catalog.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Catalog.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Catalog.vue?vue&type=template&id=4e4a3bbb\"\nimport script from \"./Catalog.vue?vue&type=script&lang=js\"\nexport * from \"./Catalog.vue?vue&type=script&lang=js\"\nimport style0 from \"./Catalog.vue?vue&type=style&index=0&id=4e4a3bbb&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n \n {{ $t('errors.noExternalAccess') }}\n \n \n \n \n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Browse.vue?vue&type=template&id=b70f9318\"\nimport script from \"./Browse.vue?vue&type=script&lang=js\"\nexport * from \"./Browse.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Browse from '../views/Browse.vue';\n\nfunction getRoutes(config) {\n let routes = [];\n\n if (config.allowExternalAccess) {\n routes.push({\n path: \"/external/(.*)\",\n name: \"browseExternal\",\n component: Browse,\n props: route => {\n return {\n path: `/external/${route.params.pathMatch}`\n };\n }\n });\n }\n\n if (!config.catalogUrl) {\n routes.push({\n path: \"/\",\n name: \"select\",\n component: () => import(\"../views/SelectDataSource.vue\")\n });\n routes.push({\n path: \"/search/external/(.*)\",\n name: \"search\",\n component: () => import(\"../views/Search.vue\"),\n props: route => {\n return {\n loadParent: `/external/${route.params.pathMatch}`\n };\n }\n });\n }\n else {\n routes.push({\n path: \"/search\",\n name: \"search\",\n component: () => import(\"../views/Search.vue\")\n });\n }\n\n routes.push({\n path: \"/(.*)\",\n name: \"browse\",\n component: Browse,\n props: route => {\n return {\n path: route.params.pathMatch\n };\n }\n });\n\n return routes;\n}\n\nexport default getRoutes;","import Vue from \"vue\";\nimport Vuex from \"vuex\";\n\nimport axios from \"axios\";\nimport URI from \"urijs\";\n\nimport i18n from '../i18n';\nimport { stacBrowserSpecialHandling } from \"../rels\";\nimport Utils, { BrowserError } from '../utils';\nimport STAC from '../models/stac';\n\nimport { addQueryIfNotExists, isAuthenticationError, Loading, processSTAC, proxyUrl, unproxyUrl, stacRequest } from './utils';\nimport { getBest } from '../locale-id';\nimport { TYPES } from \"../components/ApiCapabilitiesMixin\";\n\nfunction getStore(config, router) {\n // Local settings (e.g. for currently loaded STAC entity)\n const localDefaults = () => ({\n url: '',\n title: config.catalogTitle,\n description: null,\n data: null,\n valid: null,\n parents: null,\n globalError: null,\n\n localRequestQueryParameters: {},\n stateQueryParameters: {\n language: null,\n asset: [],\n itemdef: []\n },\n\n apiItems: [],\n apiItemsLink: null,\n apiItemsPagination: {}\n });\n\n const catalogDefaults = () => ({\n queue: [],\n privateQueryParameters: {},\n authData: null,\n doAuth: [],\n conformsTo: [],\n dataLanguage: null,\n dataLanguages: [],\n\n apiCollections: [],\n apiItemsLoading: {},\n nextCollectionsLink: null\n });\n\n return new Vuex.Store({\n strict: true,\n state: Object.assign({}, config, localDefaults(), catalogDefaults(), {\n // Global settings\n database: {}, // STAC object, Error object or Loading object or Promise (when loading)\n allowSelectCatalog: !config.catalogUrl,\n globalRequestQueryParameters: config.requestQueryParameters,\n uiLanguage: config.locale\n }),\n getters: {\n loading: state => !state.url || !state.data || state.database[state.url] instanceof Loading,\n getApiItemsLoading: state => data => {\n let id = '';\n if (data instanceof Loading) {\n return true;\n }\n else if (data instanceof STAC) {\n id = data.id;\n }\n else if (typeof data === 'string') {\n id = data;\n }\n return state.apiItemsLoading[id] || false;\n },\n error: state => state.database[state.url] instanceof Error ? state.database[state.url] : null,\n getStac: state => (source, returnErrorObject = false) => {\n if (source instanceof STAC) {\n return source;\n }\n if (Utils.isObject(source) && Utils.hasText(source.href)) {\n source = source.href;\n }\n if (!Utils.hasText(source)) {\n return null;\n }\n let absoluteUrl = Utils.toAbsolute(source, state.url);\n let data = state.database[absoluteUrl];\n if (data instanceof STAC || (returnErrorObject && data instanceof Error)) {\n return data;\n }\n else {\n return null;\n }\n },\n\n displayCatalogTitle: (state, getters) => STAC.getDisplayTitle(getters.root, state.catalogTitle),\n\n isCollection: state => state.data?.isCollection() || false,\n isCatalog: state => state.data?.isCatalog() || false,\n isCatalogLike: state => state.data?.isCatalogLike() || false,\n isItem: state => state.data?.isItem() || false,\n\n root: (_, getters) => getters.getStac(getters.rootLink),\n\n rootLink: state => {\n let link = state.data?.getStacLinkWithRel('root');\n if (link) {\n return link;\n }\n else if (state.catalogUrl) {\n return Utils.createLink(state.catalogUrl, 'root');\n }\n else if (state.url && state.data instanceof STAC && state.data.getLinksWithRels(['conformance', 'service-desc', 'service-doc', 'data', 'search']).length > 0) {\n return Utils.createLink(state.url, 'root');\n }\n else if (state.url) {\n // Fallback: If we detect OGC API like paths, try to guess the paths\n let uri = URI(state.url);\n let path = uri.segment(-2);\n if (['collections', 'items'].includes(path)) {\n uri.segment(-1, \"\");\n uri.segment(-1, \"\");\n if (path === 'items') {\n uri.segment(-1, \"\");\n uri.segment(-1, \"\");\n }\n return Utils.createLink(uri.toString(), 'root');\n }\n }\n return null;\n },\n parentLink: state => {\n if (state.data instanceof STAC) {\n let link = state.data.getStacLinkWithRel('parent');\n if (link) {\n return link;\n }\n }\n\n // Fallback: If we detect OGC API like paths, try to guess the paths\n if (state.url) {\n let uri = URI(state.url);\n let path = uri.segment(-2);\n if (['collections', 'items'].includes(path)) {\n uri.segment(-1, \"\");\n uri.segment(-1, \"\");\n return Utils.createLink(uri.toString(), 'parent');\n }\n }\n\n return null;\n },\n collectionLink: state => {\n if (state.data instanceof STAC) {\n let link = state.data?.getStacLinkWithRel('collection');\n if (link) {\n return link;\n }\n }\n\n // Fallback: If we detect OGC API like paths, try to guess the paths\n if (state.url) {\n let uri = URI(state.url);\n let path = uri.segment(-2);\n if (path == 'items') {\n uri.segment(-1, \"\");\n uri.segment(-1, \"\");\n return Utils.createLink(uri.toString(), 'collection');\n }\n }\n\n return null;\n },\n supportsConformance: state => classes => {\n if(!Array.isArray(classes)) {\n return classes;\n }\n let classRegexp = classes\n .map(c => c.replaceAll('*', '[^/]+').replace(/\\/?#/, '/?#'))\n .join('|');\n let regexp = new RegExp('^(' + classRegexp + ')$');\n return Boolean(state.conformsTo.find(uri => uri.match(regexp)));\n },\n supportsExtension: state => schemaUri => {\n return Utils.supportsExtension(state.data, schemaUri);\n },\n\n canSearch: (state, getters) => {\n return getters.canSearchCollections || getters.canSearchItems;\n },\n canSearchItems: (state, getters) => {\n return getters.supportsConformance(TYPES.Items.BasicFilters);\n },\n canSearchCollections: (state, getters) => {\n return getters.supportsConformance(TYPES.Collections.BasicFilters);\n },\n\n items: state => {\n if (state.apiItems.length > 0) {\n return state.apiItems;\n }\n else if (state.data) {\n return state.data.getStacLinksWithRel('item');\n }\n return [];\n },\n catalogs: state => {\n let hasCollections = Boolean(state.data instanceof STAC && state.data.getApiCollectionsLink() && state.apiCollections.length > 0);\n let hasChilds = Boolean(state.data instanceof STAC);\n let showCollections = !state.apiCatalogPriority || state.apiCatalogPriority === 'collections';\n let showChilds = !state.apiCatalogPriority || state.apiCatalogPriority === 'childs';\n let catalogs = [];\n if (hasCollections && showCollections) {\n catalogs = catalogs.concat(state.apiCollections);\n }\n if (hasChilds && showChilds) {\n catalogs = STAC.addMissingChildren(catalogs, state.data);\n }\n return catalogs;\n },\n\n // hasAsset also checks whether the assets have a href and thus are not item asset definitions\n hasAssets: (state, getters) => Boolean(Object.values(getters.assets).find(asset => Utils.isObject(asset) && typeof asset.href === 'string')),\n assets: (state, getters) => {\n if (!Utils.isObject(state.data?.assets)) {\n return {};\n }\n else if (state.showThumbnailsAsAssets) {\n return state.data.assets;\n }\n else {\n let assets = {};\n let thumbnails = getters.thumbnails;\n for (let key in state.data.assets) {\n let asset = state.data.assets[key];\n if (!thumbnails.includes(asset)) {\n assets[key] = asset;\n }\n }\n return assets;\n }\n },\n thumbnails: state => state.data ? state.data.getThumbnails(true) : [],\n additionalLinks: state => state.data ? state.data.getLinksWithOtherRels(stacBrowserSpecialHandling).filter(link => link.rel !== 'preview' || !Utils.canBrowserDisplayImage(link)) : [],\n\n toBrowserPath: (state, getters) => url => {\n if (!Utils.hasText(url)) {\n url = '/';\n }\n\n let absolute = Utils.toAbsolute(unproxyUrl(url, state.stacProxyUrl), state.url, false);\n let relative;\n if (!state.allowSelectCatalog && state.catalogUrl) {\n relative = absolute.relativeTo(state.catalogUrl);\n }\n\n if (typeof relative === 'undefined' || getters.isExternalUrl(absolute, false)) {\n if (!state.allowExternalAccess) {\n return absolute.toString();\n }\n let parts = ['/external'];\n let protocol = absolute.protocol();\n if (protocol !== 'https') {\n parts.push(protocol + ':');\n }\n parts.push(absolute.authority());\n parts.push(absolute.path().replace(/^\\//, ''));\n let path = parts.join('/');\n let q = absolute.query();\n if (q) {\n path += `?${q}`;\n }\n return path;\n }\n else {\n return '/' + relative.toString();\n }\n },\n fromBrowserPath: (state, getters) => url => {\n const externalRE = /^\\/(search\\/)?external\\//;\n if (!Utils.hasText(url) || url === '/') {\n url = state.catalogUrl;\n }\n else if (url.match(externalRE)) {\n let parts = url.replace(externalRE, '').split('/');\n let protocol;\n if (!parts[0].endsWith(':')) {\n protocol = 'https:';\n }\n else {\n protocol = parts.shift();\n }\n url = `${protocol}//${parts.join('/')}`;\n }\n else if (!state.allowSelectCatalog && state.catalogUrl) {\n url = Utils.toAbsolute(url, state.catalogUrl, false);\n }\n return getters.getRequestUrl(url, null, true);\n },\n isExternalUrl: state => (absoluteUrl, whitelist = true) => {\n if (!state.catalogUrl) {\n return false;\n }\n if (!(absoluteUrl instanceof URI)) {\n absoluteUrl = URI(absoluteUrl);\n }\n if (whitelist && Array.isArray(state.allowedDomains) && state.allowedDomains.includes(absoluteUrl.domain())) {\n return false;\n }\n let relative;\n if (absoluteUrl.is(\"relative\")) {\n relative = absoluteUrl;\n }\n else {\n relative = absoluteUrl.relativeTo(state.catalogUrl);\n if (relative.equals(absoluteUrl)) {\n return true;\n }\n }\n let relativeStr = relative.toString();\n return relativeStr.startsWith('//') || relativeStr.startsWith('../');\n },\n getRequestUrl: (state, getters) => (url, baseUrl = null, addLocalQueryParams = false) => {\n let absoluteUrl = Utils.toAbsolute(proxyUrl(url, state.stacProxyUrl), baseUrl ? baseUrl : state.url, false);\n if (!getters.isExternalUrl(absoluteUrl)) {\n // Check whether private params are present and add them if the URL is part of the catalog\n addQueryIfNotExists(absoluteUrl, state.privateQueryParameters);\n // Check if we need to add global request params\n addQueryIfNotExists(absoluteUrl, state.globalRequestQueryParameters);\n if (addLocalQueryParams) {\n // Check if we need to add local request params\n addQueryIfNotExists(absoluteUrl, state.localRequestQueryParameters);\n }\n }\n // If we are proxying a STAC Catalog, replace any URI with the proxied address.\n return absoluteUrl.toString();\n },\n\n acceptedLanguages: state => {\n const languages = {};\n // Implement in ascending order:\n languages['en'] = 0.1;\n if (Array.isArray(state.supportedLocales)) {\n state.supportedLocales.forEach(locale => languages[locale] = 0.2);\n }\n if (Utils.hasText(state.fallbackLocale)) {\n languages[state.fallbackLocale] = 0.5;\n }\n if (Array.isArray(navigator.languages)) {\n navigator.languages.forEach(locale => languages[locale] = 0.7);\n }\n if (Utils.hasText(state.locale)) {\n languages[state.locale] = 1;\n }\n return Object.entries(languages)\n .sort((a,b) => {\n if (a[1] > b[1]) {\n return -1;\n }\n else if (a[1] < b[1]) {\n return 1;\n }\n return 0;\n })\n .map(([l, q]) => q >= 1 ? l : `${l};q=${q}`)\n .join(',');\n }\n },\n mutations: {\n config(state, config) {\n for (let key in config) {\n let value = config[key];\n switch (key) {\n case 'catalogTitle':\n state.catalogTitle = value;\n break;\n case 'catalogUrl':\n if (typeof value === 'function') {\n state.catalogUrl = value();\n }\n else if (typeof value === 'string') {\n state.catalogUrl = value;\n }\n break;\n case 'crossOriginMedia':\n state.crossOriginMedia = ['anonymous', 'use-credentials'].includes(value) ? value : null;\n break;\n case 'cardViewSort':\n switch(value) {\n case 'asc':\n state.cardViewSort = 1;\n break;\n case 'desc':\n state.cardViewSort = -1;\n break;\n default:\n state.cardViewSort = 0;\n }\n break;\n default:\n state[key] = value;\n }\n }\n },\n languages(state, {uiLanguage, dataLanguage}) {\n state.dataLanguage = dataLanguage || null;\n state.uiLanguage = uiLanguage || null;\n },\n setQueryParameter(state, { type, key, value }) {\n type = `${type}QueryParameters`;\n if (typeof value === 'undefined') {\n Vue.delete(state[type], key);\n }\n else {\n Vue.set(state[type], key, value);\n }\n },\n setRequestHeader(state, { key, value }) {\n if (typeof value === 'undefined') {\n Vue.delete(state.requestHeaders, key);\n }\n else {\n Vue.set(state.requestHeaders, key, value);\n }\n },\n requestAuth(state, callback) {\n if (typeof callback === 'function') {\n state.doAuth.push(callback);\n }\n else {\n state.doAuth = [];\n }\n },\n setAuthData(state, value) {\n state.authData = value;\n },\n state(state, newState) {\n state.stateQueryParameters = newState;\n },\n updateState(state, {type, value}) {\n if (value === null || typeof value === 'undefined') {\n Vue.delete(state.stateQueryParameters, type);\n }\n else {\n Vue.set(state.stateQueryParameters, type, value);\n }\n },\n openCollapsible(state, { type, uid }) {\n const idx = state.stateQueryParameters[type].indexOf(uid);\n // need to prevent duplicates because of the way the collapse v-model works\n if (idx === -1) {\n state.stateQueryParameters[type].push(uid);\n }\n },\n closeCollapsible(state, { type, uid }) {\n const idx = state.stateQueryParameters[type].indexOf(uid);\n if (idx > -1) {\n Vue.delete(state.stateQueryParameters[type], idx);\n }\n },\n updateLoading(state, { url, show, loadApi }) {\n let data = state.database[url];\n Vue.set(data, 'show', show || data.show);\n Vue.set(data, 'loadApi', loadApi || data.loadApi);\n },\n loading(state, { url, loading }) {\n Vue.set(state.database, url, loading);\n if (loading.show) {\n state.url = url;\n }\n },\n loaded(state, { url, data }) {\n Vue.set(state.database, url, processSTAC(state, data));\n },\n clear(state, url) {\n Vue.delete(state.database, url);\n },\n resetCatalog(state, clearAll) {\n Object.assign(state, catalogDefaults());\n Object.assign(state, localDefaults());\n if (!state.supportedLocales.includes(state.locale)) {\n state.locale = config.locale;\n }\n if (clearAll) {\n state.catalogUrl = config.catalogUrl;\n state.catalogTitle = config.catalogTitle;\n state.database = {};\n }\n },\n resetPage(state) {\n Object.assign(state, localDefaults());\n },\n showPage(state, { url, title, description, stac }) {\n if (!stac) {\n stac = state.database[url] || null;\n }\n state.url = url || null;\n state.data = stac instanceof STAC ? stac : null;\n state.valid = null;\n state.description = description;\n\n // Set title\n if (title) {\n state.title = title;\n }\n else {\n state.title = STAC.getDisplayTitle(state.data, state.catalogTitle);\n if (state.data) {\n let description = state.data.getMetadata('description');\n if (Utils.hasText(description)) {\n state.description = description;\n }\n }\n }\n\n if (state.data) {\n let source = state.data.isItem() ? state.data.properties : state.data;\n let languages = Array.isArray(source.languages) ? source.languages.slice() : [];\n if (Utils.isObject(source.language)) {\n languages.unshift(source.language);\n }\n state.dataLanguages = languages.filter(lang => Utils.isObject(lang) && typeof lang.code === 'string');\n }\n },\n errored(state, { url, error }) {\n if (!(error instanceof Error)) {\n error = new Error(error);\n }\n Vue.set(state.database, url, error);\n },\n valid(state, valid) {\n state.valid = valid;\n },\n queue(state, url) {\n state.queue.push(url);\n },\n unqueue(state, url) {\n let i = state.queue.indexOf(url);\n if (i !== -1) {\n state.queue.splice(i, 1);\n }\n },\n removeFromQueue(state, num) {\n state.queue.splice(0, num);\n },\n setConformanceClasses(state, classes) {\n if (Array.isArray(classes)) {\n state.conformsTo = classes;\n }\n },\n setApiItemsLink(state, link) {\n state.apiItemsLink = link;\n },\n toggleApiItemsLoading(state, collectionId = '') {\n if (state.apiItemsLoading[collectionId]) {\n Vue.delete(state.apiItemsLoading, collectionId);\n }\n else {\n Vue.set(state.apiItemsLoading, collectionId, true);\n }\n },\n setApiItems(state, { data, stac, show }) {\n if (!Utils.isObject(data) || !Array.isArray(data.features)) {\n return;\n }\n let apiItems = data.features.map(feature => processSTAC(state, feature));\n\n if (show) {\n state.apiItems = apiItems;\n }\n\n // Handle pagination links\n let pages = Utils.getPaginationLinks(data);\n\n if (show) {\n state.apiItemsPagination = pages;\n }\n\n if (stac instanceof STAC) {\n // ToDo: Prev link only required when state.apiItems is not cached(?) -> cache apiItems?\n stac.setApiData(apiItems, pages.next, pages.prev);\n }\n },\n addApiCollections(state, { data, stac, show }) {\n if (!Utils.isObject(data) || !Array.isArray(data.collections)) {\n return;\n }\n\n let collections = data.collections.map(collection => processSTAC(state, collection));\n let nextLink = Utils.getLinkWithRel(data.links, 'next');\n if (show) {\n state.nextCollectionsLink = nextLink;\n state.apiCollections = state.apiCollections.concat(collections);\n }\n if (stac instanceof STAC) {\n stac.setApiData(collections, nextLink);\n }\n },\n resetApiItems(state, link) {\n state.apiItems = [];\n state.apiItemsLink = link;\n state.apiItemsPagination = {};\n },\n parents(state, parents) {\n state.parents = parents;\n },\n showGlobalError(state, error) {\n console.error(error);\n state.globalError = error;\n }\n },\n actions: {\n async switchLocale(cx, {locale, userSelected}) {\n cx.commit('config', {locale});\n\n if (cx.state.storeLocale && userSelected) {\n try {\n window.localStorage.setItem('locale', locale);\n } catch (error) {\n console.error(error);\n }\n }\n\n // Locale for UI\n let uiLanguage = getBest(cx.state.supportedLocales, locale, cx.state.fallbackLocale);\n // Locale for data\n let dataLanguageCodes = cx.state.dataLanguages.map(l => l.code);\n let dataLanguageFallback = cx.state.dataLanguages.length > 0 ? cx.state.dataLanguages[0].code : uiLanguage;\n let dataLanguage = getBest(dataLanguageCodes, locale, dataLanguageFallback);\n\n cx.commit('languages', {dataLanguage, uiLanguage});\n cx.commit('setQueryParameter', { type: 'state', key: 'language', value: locale });\n },\n async setAuth(cx, value) {\n if (!Utils.hasText(value)) {\n value = null;\n }\n // Set the value the user has provided separately\n cx.commit('setAuthData', value);\n\n // Format the value and add it to query parameters or headers\n let authConfig = cx.state.authConfig;\n let key = authConfig.key;\n if (value) {\n if (authConfig.formatter === 'Bearer') {\n value = `Bearer ${value}`;\n }\n else if (typeof authConfig.formatter === 'function') {\n value = authConfig.formatter(value);\n }\n }\n if (!Utils.hasText(value)) {\n value = undefined;\n }\n if (authConfig.type === 'query') {\n cx.commit('setQueryParameter', {type: 'private', key, value});\n }\n else if (authConfig.type === 'header') {\n cx.commit('setRequestHeader', {key, value});\n }\n },\n async loadBackground(cx, count) {\n let urls = cx.state.queue.slice(0, count);\n if (urls.length > 0) {\n let promises = [];\n for (let url of urls) {\n promises.push(cx.dispatch('load', { url }));\n }\n cx.commit('removeFromQueue', count);\n return await Promise.all(promises);\n }\n },\n async loadParents(cx) {\n if (!(cx.state.data instanceof STAC)) {\n cx.commit('parents', []);\n return;\n }\n\n let parents = [];\n let stac = cx.state.data;\n while (stac) {\n let parentLink = stac.getLinkWithRel('parent') || stac.getLinkWithRel('root');\n if (!parentLink) {\n break;\n }\n let url = Utils.toAbsolute(parentLink.href, stac.getAbsoluteUrl());\n await cx.dispatch('load', { url, loadApi: true });\n let parentStac = cx.getters.getStac(url, true);\n if (parentStac instanceof Error) {\n cx.commit('parents', parentStac);\n return;\n }\n if (parentStac === stac) {\n break;\n }\n parents.push(parentStac);\n stac = parentStac;\n }\n cx.commit('parents', parents);\n },\n async load(cx, args) {\n let { url, show, loadApi, loadRoot, force } = args;\n\n let path = cx.getters.toBrowserPath(url);\n url = Utils.toAbsolute(url, cx.state.url);\n\n // Load the root catalog data if not available (e.g. after page refresh or external access)\n if (!loadRoot && path !== '/' && cx.state.catalogUrl && !cx.getters.getStac(cx.state.catalogUrl)) {\n await cx.dispatch(\"load\", { url: cx.state.catalogUrl, loadApi: true, loadRoot: true });\n }\n\n if (force) {\n cx.commit('clear', url);\n }\n\n let loading = new Loading(show, loadApi);\n let data = cx.state.database[url];\n if (data instanceof Loading) {\n cx.commit('updateLoading', { url, show, loadApi });\n return;\n }\n else if (!data || (data instanceof STAC && data.isPotentiallyIncomplete())) {\n cx.commit('loading', { url, loading });\n try {\n let response = await stacRequest(cx, url);\n if (!Utils.isObject(response.data)) {\n throw new BrowserError(i18n.t('errors.invalidJsonObject'));\n }\n data = new STAC(response.data, url, path);\n if (show) {\n // If we prefer another language abort redirect to the new language\n let localeLink = data.getLocaleLink(cx.state.dataLanguage);\n if (localeLink) {\n router.replace(cx.getters.toBrowserPath(localeLink.href));\n return;\n }\n }\n\n cx.commit('loaded', { url, data });\n\n if (!cx.getters.root) {\n let root = data.getLinkWithRel('root');\n if (root) {\n cx.commit('config', { catalogUrl: Utils.toAbsolute(root.href, url) });\n }\n }\n\n let conformanceLink = data.getStacLinkWithRel('conformance');\n if (Array.isArray(data.conformsTo) && data.conformsTo.length > 0) {\n cx.commit('setConformanceClasses', data.conformsTo);\n }\n else if (conformanceLink) {\n await cx.dispatch('loadOgcApiConformance', conformanceLink);\n }\n } catch (error) {\n if (cx.state.authConfig && isAuthenticationError(error)) {\n cx.commit('clear', url);\n cx.commit('requestAuth', () => cx.dispatch('load', args));\n return;\n }\n console.error(error);\n cx.commit('errored', { url, error });\n }\n }\n\n if (loading.loadApi && data instanceof STAC) {\n // Load API Collections\n if (data.getApiCollectionsLink()) {\n let args = { stac: data, show: loading.show };\n try {\n await cx.dispatch('loadNextApiCollections', args);\n } catch (error) {\n if (cx.state.authConfig && isAuthenticationError(error)) {\n cx.commit('requestAuth', () => cx.dispatch('loadNextApiCollections', args));\n }\n else {\n cx.commit('showGlobalError', {\n message: i18n.t('errors.loadApiCollectionsFailed'),\n error\n });\n }\n }\n }\n // Load API Items\n if (data.getApiItemsLink()) {\n let args = { stac: data, show: loading.show };\n try {\n await cx.dispatch('loadApiItems', args);\n } catch (error) {\n if (cx.state.authConfig && isAuthenticationError(error)) {\n cx.commit('requestAuth', () => cx.dispatch('loadApiItems', args));\n }\n else {\n cx.commit('showGlobalError', {\n message: i18n.t('errors.loadApiItemsFailed'),\n error\n });\n }\n }\n }\n }\n\n if (loading.show) {\n cx.commit('showPage', { url });\n }\n },\n async loadApiItems(cx, { link, stac, show, filters }) {\n let collectionId = stac instanceof STAC ? stac.id : '';\n cx.commit('toggleApiItemsLoading', collectionId);\n\n try {\n let baseUrl = cx.state.url;\n if (stac instanceof STAC) {\n link = stac.getApiItemsLink();\n baseUrl = stac.getAbsoluteUrl();\n }\n\n link = Utils.addFiltersToLink(link, filters, cx.state.itemsPerPage);\n\n let response = await stacRequest(cx, link);\n if (!Utils.isObject(response.data) || !Array.isArray(response.data.features)) {\n throw new BrowserError(i18n.t('errors.invalidStacItems'));\n }\n else {\n response.data.features = response.data.features.map(item => {\n try {\n if (!Utils.isObject(item) || item.type !== 'Feature') {\n return null;\n }\n let selfLink = Utils.getLinkWithRel(item.links, 'self');\n let url;\n if (selfLink?.href) {\n url = Utils.toAbsolute(selfLink.href, baseUrl);\n }\n else if (typeof item.id !== 'undefined') {\n let apiCollectionsLink = cx.getters.root?.getApiCollectionsLink();\n if (baseUrl) {\n url = Utils.toAbsolute(`items/${item.id}`, baseUrl);\n }\n else if (apiCollectionsLink) {\n url = Utils.toAbsolute(`${collectionId}/items/${item.id}`, apiCollectionsLink.href);\n }\n else if (cx.state.catalogUrl) {\n url = Utils.toAbsolute(`collections/${collectionId}/items/${item.id}`, cx.state.catalogUrl);\n }\n else {\n return null;\n }\n }\n else {\n return null;\n }\n let data = cx.getters.getStac(url);\n if (data) {\n return data;\n }\n else {\n data = new STAC(item, url, cx.getters.toBrowserPath(url));\n data.markPotentiallyIncomplete();\n cx.commit('loaded', { data, url });\n return data;\n }\n } catch (error) {\n console.error(error);\n return null;\n }\n }).filter(item => item instanceof STAC);\n if (show) {\n cx.commit('setApiItemsLink', link);\n }\n cx.commit('setApiItems', { data: response.data, stac, show });\n cx.commit('toggleApiItemsLoading', collectionId);\n return response;\n }\n } catch (error) {\n cx.commit('toggleApiItemsLoading', collectionId);\n throw error;\n }\n },\n async loadNextApiCollections(cx, { stac, show }) {\n let link;\n if (stac) {\n // First page\n if (cx.state.apiCollections.length > 0) {\n // If we have already loaded collections, skip loading the first page\n return;\n }\n link = stac.getLinkWithRel('data');\n }\n else {\n // Second page and after\n stac = cx.state.data;\n link = cx.state.nextCollectionsLink;\n }\n if (!link) {\n return;\n }\n let response = await stacRequest(cx, link);\n if (!Utils.isObject(response.data) || !Array.isArray(response.data.collections)) {\n throw new BrowserError(i18n.t('errors.invalidStacCollections'));\n }\n else {\n response.data.collections = response.data.collections.map(collection => {\n let selfLink = Utils.getLinkWithRel(collection.links, 'self');\n let url;\n if (selfLink?.href) {\n url = Utils.toAbsolute(selfLink.href, cx.state.url || stac.getAbsoluteUrl());\n }\n else {\n url = Utils.toAbsolute(`collections/${collection.id}`, cx.state.catalogUrl || stac.getAbsoluteUrl());\n }\n let data = cx.getters.getStac(url);\n if (data) {\n return data;\n }\n else {\n data = new STAC(collection, url, cx.getters.toBrowserPath(url));\n data.markPotentiallyIncomplete();\n cx.commit('loaded', { data, url });\n return data;\n }\n });\n cx.commit('addApiCollections', { data: response.data, stac, show });\n }\n },\n async loadOgcApiConformance(cx, link) {\n let response = await stacRequest(cx, link);\n if (Utils.isObject(response.data) && Array.isArray(response.data.conformsTo)) {\n cx.commit('setConformanceClasses', response.data.conformsTo);\n }\n },\n async loadGeoJson(cx, link) {\n try {\n let response = await stacRequest(cx, link);\n return response.data; // Use data with $refs included as fallback anyway\n } catch (error) {\n return null;\n }\n },\n async retryAfterAuth(cx) {\n let errorFn = error => cx.commit('showGlobalError', {\n error,\n message: i18n.t('errors.authFailed')\n });\n\n for (let callback of cx.state.doAuth) {\n try {\n let p = callback();\n if (p instanceof Promise) {\n p.catch(errorFn);\n }\n } catch (error) {\n errorFn(error);\n }\n }\n },\n async validate(cx, url) {\n if (typeof cx.state.valid === 'boolean') {\n return;\n }\n try {\n let uri = URI('https://api.staclint.com/url');\n uri.addSearch('stac_url', url);\n let response = await axios.get(uri.toString());\n cx.commit('valid', Boolean(response.data?.body?.valid_stac));\n } catch (error) {\n cx.commit('valid', error);\n }\n }\n },\n });\n}\n\nexport default getStore;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-row',[_c('b-col',{attrs:{\"md\":\"12\"}},[_c('Source',{staticClass:\"float-right\",attrs:{\"title\":_vm.title,\"stacUrl\":_vm.url,\"stac\":_vm.data}}),_c('h1',[(_vm.icon)?[_c('img',{staticClass:\"icon mr-2\",attrs:{\"src\":_vm.icon.href,\"alt\":_vm.icon.title,\"title\":_vm.icon.title}})]:_vm._e(),_c('span',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.title))])],2),(_vm.url || _vm.isSearchPage())?_c('p',{staticClass:\"lead\"},[(_vm.containerLink)?_c('i18n',{staticClass:\"in mr-3\",attrs:{\"tag\":\"span\",\"path\":\"in\"},scopedSlots:_vm._u([{key:\"catalog\",fn:function(){return [_c('StacLink',{attrs:{\"data\":_vm.containerLink}})]},proxy:true}],null,false,1458487365)}):_vm._e(),_c('b-button-group',[(_vm.parentLink)?_c('b-button',{attrs:{\"to\":_vm.toBrowserPath(_vm.parentLink.href),\"title\":_vm.parentLinkTitle,\"variant\":\"outline-primary\",\"size\":\"sm\"}},[_c('b-icon-arrow-90deg-up'),_vm._v(\" \"),_c('span',{staticClass:\"button-label prio\"},[_vm._v(_vm._s(_vm.$t('goToParent.label')))])],1):_vm._e(),(_vm.collectionLink)?_c('b-button',{attrs:{\"to\":_vm.toBrowserPath(_vm.collectionLink.href),\"title\":_vm.collectionLinkTitle,\"variant\":\"outline-primary\",\"size\":\"sm\"}},[_c('b-icon-folder-symlink'),_vm._v(\" \"),_c('span',{staticClass:\"button-label prio\"},[_vm._v(_vm._s(_vm.$t('goToCollection.label')))])],1):_vm._e(),_c('b-button',{directives:[{name:\"b-toggle\",rawName:\"v-b-toggle.sidebar\",modifiers:{\"sidebar\":true}}],attrs:{\"variant\":\"outline-primary\",\"size\":\"sm\",\"title\":_vm.$t('browse')},on:{\"click\":function($event){return _vm.$emit('enableSidebar')}}},[_c('b-icon-book'),_vm._v(\" \"),_c('span',{staticClass:\"button-label prio\"},[_vm._v(_vm._s(_vm.$t('browse')))])],1),(_vm.canSearch)?_c('b-button',{attrs:{\"variant\":\"outline-primary\",\"size\":\"sm\",\"to\":_vm.searchBrowserLink,\"title\":_vm.$t('search.title'),\"pressed\":_vm.isSearchPage()}},[_c('b-icon-search'),_vm._v(\" \"),_c('span',{staticClass:\"button-label prio\"},[_vm._v(_vm._s(_vm.$t('search.title')))])],1):_vm._e(),(_vm.authConfig)?_c('b-button',{attrs:{\"variant\":\"outline-primary\",\"size\":\"sm\",\"title\":_vm.$t('authentication.button.title')},on:{\"click\":_vm.auth}},[(_vm.authData)?[_c('b-icon-lock'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('authentication.button.authenticated')))])]:[_c('b-icon-unlock'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('authentication.button.authenticate')))])]],2):_vm._e()],1)],1):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"share mt-1\"},[_c('b-button-group',[(_vm.showRoot)?_c('b-button',{attrs:{\"size\":\"sm\",\"variant\":\"outline-primary\",\"id\":\"popover-root-btn\"}},[_c('b-icon-box'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.rootTitle))])],1):_vm._e(),(_vm.stacUrl)?_c('b-button',{attrs:{\"size\":\"sm\",\"variant\":\"outline-primary\",\"id\":\"popover-link-btn\",\"title\":_vm.$t('source.detailsAboutSource')}},[_c('b-icon-link'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('source.label')))])],1):_vm._e(),_c('b-button',{attrs:{\"size\":\"sm\",\"variant\":\"outline-primary\",\"id\":\"popover-share-btn\",\"title\":_vm.$t('source.share.withOthers')}},[_c('b-icon-share'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('source.share.label')))])],1),_c('b-dropdown',{attrs:{\"size\":\"sm\",\"variant\":\"outline-primary\",\"right\":\"\",\"title\":_vm.$t('source.language.switch')},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_c('b-icon-flag'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('source.language.label', {currentLanguage: _vm.currentLanguage})))])]},proxy:true}])},_vm._l((_vm.languages),function(l){return _c('b-dropdown-item',{key:l.code,staticClass:\"lang-item\",on:{\"click\":function($event){return _vm.switchLocale({locale: l.code, userSelected: true})}}},[(_vm.locale === l.code)?_c('b-icon-check'):_c('b-icon-blank'),_c('span',{staticClass:\"title\"},[_vm._v(\" \"+_vm._s(l.native)+\" \"),(l.global && l.global !== l.native)?[_vm._v(\" / \"+_vm._s(l.global))]:_vm._e()],2),(_vm.supportsLanguageExt && (!l.ui || !l.data))?_c('b-icon-exclamation-triangle',{staticClass:\"ml-2\",attrs:{\"title\":l.ui ? _vm.$t('source.language.onlyUI') : _vm.$t('source.language.onlyData')}}):_vm._e()],1)}),1)],1),(_vm.showRoot)?_c('b-popover',{attrs:{\"id\":\"popover-root\",\"target\":\"popover-root-btn\",\"triggers\":\"focus\",\"placement\":\"bottom\",\"container\":\"stac-browser\",\"title\":_vm.rootTitle}},[_c('RootStats')],1):_vm._e(),(_vm.stacUrl)?_c('b-popover',{attrs:{\"id\":\"popover-link\",\"target\":\"popover-link-btn\",\"triggers\":\"focus\",\"placement\":\"bottom\",\"container\":\"stac-browser\",\"title\":_vm.$t('source.title')},on:{\"show\":_vm.validate}},[(_vm.stac)?[(_vm.stacId)?_c('b-row',{staticClass:\"stac-id\"},[_c('b-col',{attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(_vm.$t('source.id')))]),_c('b-col',[_c('code',[_vm._v(_vm._s(_vm.stacId))]),_c('CopyButton',{staticClass:\"ml-2\",attrs:{\"copyText\":_vm.stacId,\"button-props\":{size: 'sm'},\"variant\":\"primary\"}})],1)],1):_vm._e(),(_vm.stacVersion)?_c('b-row',{staticClass:\"stac-version\"},[_c('b-col',{attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(_vm.$t('source.stacVersion')))]),_c('b-col',[_vm._v(_vm._s(_vm.stacVersion))])],1):_vm._e(),(_vm.canValidate)?_c('b-row',{staticClass:\"validation\"},[_c('b-col',{attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(_vm.$t('source.valid')))]),_c('b-col',[(_vm.valid === null)?_c('b-spinner',{attrs:{\"label\":_vm.$t('source.validating'),\"small\":\"\"}}):(_vm.valid === true)?[_vm._v(\"✔️\")]:(_vm.valid === false)?[_vm._v(\"❌\")]:[_vm._v(_vm._s(_vm.$t('source.validationNA')))]],2)],1):_vm._e(),_c('hr')]:_vm._e(),_c('Url',{attrs:{\"id\":\"stacUrl\",\"url\":_vm.stacUrl,\"label\":_vm.$t('source.locatedAt')}})],2):_vm._e(),_c('b-popover',{attrs:{\"id\":\"popover-share\",\"target\":\"popover-share-btn\",\"triggers\":\"focus\",\"placement\":\"bottom\",\"container\":\"stac-browser\",\"title\":_vm.$t('source.share.title')}},[_c('Url',{attrs:{\"id\":\"browserUrl\",\"url\":_vm.browserUrl(),\"label\":_vm.$t('source.share.sharePageWithOthers'),\"open\":false}}),_c('hr'),_c('b-button',{staticClass:\"twitter mr-1\",attrs:{\"href\":_vm.twitterUrl}},[_c('b-icon-twitter'),_vm._v(\" \"+_vm._s(_vm.$t('source.share.twitter')))],1),_c('b-button',{attrs:{\"variant\":\"dark\",\"href\":_vm.mailTo}},[_c('b-icon-envelope'),_vm._v(\" \"+_vm._s(_vm.$t('source.share.email')))],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-form-group',{attrs:{\"label\":_vm.label,\"label-for\":_vm.id}},[_c('b-input-group',{attrs:{\"size\":\"sm\"}},[_c('b-form-input',{ref:\"input\",attrs:{\"id\":_vm.id,\"value\":_vm.url,\"readonly\":\"\"}}),_c('b-input-group-append',[_c('CopyButton',{attrs:{\"copyText\":_vm.url,\"variant\":\"primary\"}}),(_vm.open)?_c('b-button',{attrs:{\"href\":_vm.url,\"target\":\"_blank\",\"variant\":\"primary\",\"title\":_vm.$t('open')}},[_c('b-icon-arrow-up-right-square')],1):_vm._e()],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n \n \n \n \n \n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Url.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Url.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Url.vue?vue&type=template&id=74684ede&scoped=true\"\nimport script from \"./Url.vue?vue&type=script&lang=js\"\nexport * from \"./Url.vue?vue&type=script&lang=js\"\nimport style0 from \"./Url.vue?vue&type=style&index=0&id=74684ede&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"74684ede\",\n null\n \n)\n\nexport default component.exports","\n \n \n \n {{ rootTitle }}\n \n \n {{ $t('source.label') }}\n \n \n {{ $t('source.share.label') }}\n \n \n \n {{ $t('source.language.label', {currentLanguage}) }}\n \n \n \n \n \n {{ l.native }}\n / {{ l.global }}\n \n \n \n \n \n\n \n \n \n\n \n \n \n {{ $t('source.id') }}\n \n {{ stacId }}
\n \n \n \n \n {{ $t('source.stacVersion') }}\n {{ stacVersion }}\n \n \n {{ $t('source.valid') }}\n \n \n ✔️\n ❌\n {{ $t('source.validationNA') }}\n \n \n
\n \n \n \n\n \n \n
\n \n {{ $t('source.share.email') }}\n \n
\n\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Source.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Source.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Source.vue?vue&type=template&id=714ef03c&scoped=true\"\nimport script from \"./Source.vue?vue&type=script&lang=js\"\nexport * from \"./Source.vue?vue&type=script&lang=js\"\nimport style0 from \"./Source.vue?vue&type=style&index=0&id=714ef03c&prod&lang=scss\"\nimport style1 from \"./Source.vue?vue&type=style&index=1&id=714ef03c&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"714ef03c\",\n null\n \n)\n\nexport default component.exports","\n \n \n \n \n \n \n \n {{ title }}\n
\n \n \n \n \n \n \n {{ $t('goToParent.label') }}\n \n \n {{ $t('goToCollection.label') }}\n \n \n {{ $t('browse') }}\n \n \n {{ $t('search.title') }}\n \n \n \n {{ $t('authentication.button.authenticated') }}\n \n \n {{ $t('authentication.button.authenticate') }}\n \n \n \n
\n \n \n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StacHeader.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StacHeader.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./StacHeader.vue?vue&type=template&id=e9cfbf72&scoped=true\"\nimport script from \"./StacHeader.vue?vue&type=script&lang=js\"\nexport * from \"./StacHeader.vue?vue&type=script&lang=js\"\nimport style0 from \"./StacHeader.vue?vue&type=style&index=0&id=e9cfbf72&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e9cfbf72\",\n null\n \n)\n\nexport default component.exports","\n \n 0\" />\n \n \n \n \n \n \n \n \n\n\n\n\n","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StacBrowser.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StacBrowser.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./StacBrowser.vue?vue&type=template&id=272308a9\"\nimport script from \"./StacBrowser.vue?vue&type=script&lang=js\"\nexport * from \"./StacBrowser.vue?vue&type=script&lang=js\"\nimport style0 from \"./StacBrowser.vue?vue&type=style&index=0&id=272308a9&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\";\nimport StacBrowser from \"./StacBrowser.vue\";\nimport i18n, { loadDefaultMessages } from './i18n';\n\nexport default function init() {\n return loadDefaultMessages().then(() => {\n return new Vue({\n i18n,\n render: h => h(StacBrowser)\n }).$mount(\"#stac-browser\");\n });\n}\n","import Vue from \"vue\";\nimport init from \"./init\";\n\nVue.config.productionTip = false;\n\ninit();\n","import Utils, { geojsonMediaType } from \"../utils\";\nimport Migrate from '@radiantearth/stac-migrate';\nimport { getBest } from '../locale-id';\n\nlet stacObjCounter = 0;\n\n// STAC Entity\nclass STAC {\n\n constructor(data, url, path, migrate = true) {\n this._id = stacObjCounter++;\n this._url = url;\n this._path = path;\n this._apiChildrenListeners = {};\n this._incomplete = false;\n this._apiChildren = {\n list: [],\n prev: false,\n next: false\n };\n\n if (migrate) {\n // Uncomment this line if the old checksum: fields should be converted\n // This is usually not needed so it's not enabled by default to shrink the bundle size\n // Migrate.enableMultihash(require('multihashes'));\n if (data.type === 'FeatureCollection') {\n data.features = data.features.map(item => Migrate.item(item, false));\n }\n else {\n data = Migrate.stac(data, false);\n }\n }\n for (let key in data) {\n if (typeof this[key] === 'undefined') {\n this[key] = data[key];\n }\n }\n }\n\n isPotentiallyIncomplete() {\n return this._incomplete;\n }\n\n markPotentiallyIncomplete() {\n this._incomplete = true;\n }\n\n isItem() {\n return this.type === 'Feature';\n }\n\n isCatalog() {\n return this.type === 'Catalog';\n }\n\n isCatalogLike() {\n return this.isCatalog() || this.isCollection();\n }\n\n isCollection() {\n return this.type === 'Collection';\n }\n\n isItemCollection() {\n return this.type === 'FeatureCollection';\n }\n\n hasApiData() {\n return this._apiChildren.list.length > 0;\n }\n\n setApiDataListener(id, listener = null) {\n if (typeof listener === 'function') {\n this._apiChildrenListeners[id] = listener;\n }\n else {\n delete this._apiChildrenListeners[id];\n }\n }\n\n setApiData(list, next = null, prev = null) {\n if (prev) {\n this._apiChildren.prev = prev;\n }\n if (next) {\n this._apiChildren.next = next;\n }\n this._apiChildren.list = list;\n\n for (let id in this._apiChildrenListeners) {\n try {\n this._apiChildrenListeners[id](this._apiChildren);\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n getFileFormats() {\n let assets = [];\n if ((this.isItem() || this.isCollection()) && Utils.isObject(this.assets)) {\n assets = assets.concat(Object.values(this.assets));\n }\n if (this.isCollection() && Utils.isObject(this.item_assets)) {\n assets = assets.concat(Object.values(this.item_assets));\n }\n return assets\n .filter(asset => Array.isArray(asset.roles) && asset.roles.includes('data') && typeof asset.type === 'string') // Look for data files\n .map(asset => asset.type) // Array shall only contain media types\n .filter((v, i, a) => a.indexOf(v) === i); // Unique values\n }\n\n getChildren(priority = null) {\n if (!this.isCatalogLike()) {\n return [];\n }\n\n let showCollections = !priority || priority === 'collections';\n let showChilds = !priority || priority === 'childs';\n\n let children = [];\n if (showCollections && this._apiChildren.prev) {\n children.push(this._apiChildren.prev);\n }\n if (showCollections && this._apiChildren.list.length > 0) {\n children = this._apiChildren.list.slice(0);\n }\n if (showChilds) {\n children = STAC.addMissingChildren(children, this).concat(this.getLinksWithRels(['item']));\n }\n if (showCollections && this._apiChildren.next) {\n children.push(this._apiChildren.next);\n }\n return children;\n }\n\n static addMissingChildren(catalogs, stac) {\n let links = stac.getStacLinksWithRel('child').filter(link => {\n // Don't add links that are already in collections: https://github.com/radiantearth/stac-browser/issues/103\n // ToDo: The runtime of this can probably be improved\n let absoluteUrl = Utils.toAbsolute(link.href, stac.getAbsoluteUrl());\n return !catalogs.find(collection => collection.getAbsoluteUrl() === absoluteUrl);\n });\n // place the children first to avoid conflicts with the paginated collections\n // where the children are always at the end and can never be reached due to infinite scrolling\n return links.concat(catalogs);\n }\n\n getSearchLink() {\n // The search link MUST be 'application/geo+json' as otherwise it's likely not STAC\n // See https://github.com/opengeospatial/ogcapi-features/issues/832\n let links = Utils.getLinksWithRels(this.links, ['search'])\n .filter(link => Utils.isMediaType(link.type, geojsonMediaType))\n .map(link => Object.assign({}, link, {href: Utils.toAbsolute(link.href, this._url)}));\n // Prefer POST if present\n let post = links.find(link => Utils.hasText(link.method) && link.method.toUpperCase() === 'POST');\n return post || links[0] || null;\n }\n\n getApiCollectionsLink() {\n return this.getStacLinkWithRel('data');\n }\n\n getApiItemsLink() {\n return this.getStacLinkWithRel('items');\n }\n\n getMetadata(field) {\n if (this.isItem()) {\n return this.properties[field];\n }\n else if (this.isCatalogLike()) {\n return this[field];\n }\n return null;\n }\n\n getBrowserPath() {\n return this._path;\n }\n\n getAbsoluteUrl() {\n return this._url;\n }\n\n getLocaleLink(locale, fallbackLocale = null) {\n let links = this.getStacLinksWithRel('alternate')\n .filter(link => Utils.hasText(link.hreflang));\n \n let available;\n if (Array.isArray(this.languages)) {\n available = this.languages.map(l => l.code);\n }\n else {\n available = links.map(link => link.hreflang);\n }\n \n let best = getBest(available, locale, fallbackLocale);\n return links.find(link => link.hreflang === best) || null;\n }\n\n getStacLinksWithRel(rel, allowEmpty = true) {\n return Utils.getLinksWithRels(this.links, [rel])\n .filter(link => Utils.isStacMediaType(link.type, allowEmpty));\n }\n\n getStacLinkWithRel(rel, allowEmpty = true) {\n const links = this.getStacLinksWithRel(rel, allowEmpty);\n if (links.length > 0) {\n return links[0];\n }\n else {\n return null;\n }\n }\n\n getLinkWithRel(rel) {\n return Utils.getLinkWithRel(this.links, rel);\n }\n\n getLinksWithRels(rels) {\n return Utils.getLinksWithRels(this.links, rels);\n }\n\n getLinksWithOtherRels(rels) {\n return Utils.getLinksWithOtherRels(this.links, rels);\n }\n\n getAssetsWithRoles(roles) {\n let matches = [];\n if (Utils.isObject(this.assets)) {\n for (let key in this.assets) {\n let asset = this.assets[key];\n if (Utils.isObject(asset) && typeof asset.href === 'string' && Array.isArray(asset.roles) && asset.roles.find(role => roles.includes(role))) {\n matches.push(asset);\n }\n }\n }\n return matches;\n }\n\n static getDisplayTitle(sources, fallbackTitle = null) {\n if (!Array.isArray(sources)) {\n sources = [sources];\n }\n let stac = sources.find(o => o instanceof STAC);\n let link = sources.find(o => Utils.isObject(o) && !(o instanceof STAC));\n // Get title from STAC item/catalog/collection\n if (stac && Utils.hasText(stac.getTitle())) {\n return stac.getTitle();\n }\n // Get title from link\n else if (link && Utils.hasText(link.title)) {\n return link.title;\n }\n // Use id from STAC item/catalog/collection instead of titles\n else if (stac && Utils.hasText(stac.id)) {\n return stac.id;\n }\n // Use fallback title\n else if (Utils.hasText(fallbackTitle)) {\n return fallbackTitle;\n }\n // Use file or directory name from STAC as title\n else if (stac) {\n return Utils.titleForHref(stac.getAbsoluteUrl(), true);\n }\n // Use file or directory name from link as title\n else if (link && Utils.hasText(link.href)) {\n return Utils.titleForHref(link.href, true);\n }\n // Nothing available, return \"untitled\"\n else {\n return \"Untitled\";\n }\n }\n\n getTitle() {\n return this.getMetadata(\"title\");\n }\n\n _linkToAbsolute(link) {\n return Object.assign({}, link, { href: Utils.toAbsolute(link.href, this.getAbsoluteUrl()) });\n }\n\n getIcons() {\n return this.getLinksWithRels(['icon'])\n .filter(img => Utils.canBrowserDisplayImage(img))\n .map(img => this._linkToAbsolute(img));\n }\n\n /**\n * Get the thumbnails from the assets and links in a STAC entity.\n * \n * @param {boolean} browserOnly - Return only images that can be shown in a browser natively (PNG/JPG/GIF/WEBP).\n * @param {?string} prefer - If not `null` (default), prefers a role over the other. Either `thumbnail` or `overview`.\n * @returns \n */\n getThumbnails(browserOnly = false, prefer = null) { // prefer can be either \n let thumbnails = this.getAssetsWithRoles(['thumbnail', 'overview']);\n // Get from links only if no assets are available as they should usually be the same as in assets\n if (thumbnails.length === 0) {\n thumbnails = this.getLinksWithRels(['preview']);\n }\n // Some old catalogs use just a asset key\n if (thumbnails.length === 0 && Utils.isObject(this.assets) && Utils.isObject(this.assets.thumbnail)) {\n thumbnails = [this.assets.thumbnail];\n }\n if (browserOnly) {\n // Remove all images that can't be displayed in a browser\n thumbnails = thumbnails.filter(img => Utils.canBrowserDisplayImage(img));\n }\n if (prefer && thumbnails.length > 1) {\n // Prefer one role over the other.\n // The two step approach with two filters ensures the same sort bevahiour across all browsers:\n // see https://github.com/radiantearth/stac-browser/issues/370\n let filter = img => img.roles.includes(prefer);\n thumbnails = thumbnails\n .filter(filter)\n .concat(thumbnails.filter(img => !filter(img)));\n }\n return thumbnails.map(img => this._linkToAbsolute(img));\n }\n\n equals(other) {\n if (!Utils.isObject(other)) {\n return false;\n }\n if (this === other) {\n return true;\n }\n if (this.id === other.id && this.type == other.type) {\n return true;\n }\n return false;\n }\n\n}\n\nexport default STAC;\n","// STAC relation types\n\n// STAC hierarchical\nexport const stacHierarchy = [\n 'child',\n 'collection',\n 'item',\n 'parent',\n 'root',\n 'self',\n];\n\n// STAC API Pagination\nexport const stacPagination = [\n 'first',\n 'last',\n 'next',\n 'prev',\n 'previous',\n];\n\n// Queryables\nexport const ogcQueryables = [\n 'queryables', // Old way in STAC (deprecated)\n 'http://www.opengis.net/def/rel/ogc/1.0/queryables', // STAC and OGC APIs\n 'ogc-rel:queryables' // Alternative in OGC APIs\n];\n\n// Rels that STAC Browser can navigate to and display natively (i.e. Collections, Catalogs and Items)\nexport const stacBrowserNavigatesTo = [\n 'canonical', // Links to other catalogs or items v\n 'related',\n 'derived_from',\n 'latest-version', // version extension v\n 'predecessor-version',\n 'successor-version',\n 'source', // label extension,\n 'alternate' // language extension\n].concat(stacHierarchy).concat(stacPagination);\n\n// Rels that are handled in a special way and should not be shown in the link list\nexport const stacBrowserSpecialHandling = [\n 'conformance', // API related v\n 'data',\n 'items',\n 'search',\n 'icon', // Other v\n 'license',\n].concat(stacHierarchy).concat(stacPagination).concat(ogcQueryables);\n\n// OGC APIs\nexport const ogcRelPrefix = 'http://www.opengis.net/def/rel/ogc/1.0/';\n","import axios from \"axios\";\nimport URI from \"urijs\";\nimport Utils from \"../utils\";\n\nexport class Loading {\n\n constructor(show = false, loadApi = false) {\n this.show = Boolean(show);\n this.loadApi = Boolean(loadApi);\n }\n\n}\n\nexport async function stacRequest(cx, link) {\n let opts;\n let headers = {\n 'Accept-Language': cx.getters.acceptedLanguages\n };\n if (Utils.isObject(link)) {\n let method = typeof link.method === 'string' ? link.method.toLowerCase() : 'get';\n let url = cx.getters.getRequestUrl(link.href);\n if (Utils.hasText(link.type)) {\n headers.Accept = link.type;\n }\n if (!cx.getters.isExternalUrl(url)) {\n Object.assign(headers, cx.state.requestHeaders);\n }\n if (Utils.isObject(link.headers)) {\n Object.assign(headers, link.headers);\n }\n opts = {\n method,\n url,\n headers,\n data: link.body\n // ToDo: Support for merge property from STAC API\n };\n }\n else if (typeof link === 'string') {\n let url = cx.getters.getRequestUrl(link);\n if (!cx.getters.isExternalUrl(url)) {\n Object.assign(headers, cx.state.requestHeaders);\n }\n opts = {\n method: 'get',\n url,\n headers\n };\n }\n else {\n opts = link;\n }\n return await axios(opts);\n}\n\n\nexport function unproxyUrl(absoluteUrl, proxy) {\n if (absoluteUrl instanceof URI) {\n absoluteUrl = absoluteUrl.toString();\n }\n if (typeof absoluteUrl === 'string' && Array.isArray(proxy)) {\n return absoluteUrl.replace(proxy[1], proxy[0]);\n }\n return absoluteUrl;\n}\n\nexport function proxyUrl(absoluteUrl, proxy) {\n if (absoluteUrl instanceof URI) {\n absoluteUrl = absoluteUrl.toString();\n }\n if (typeof absoluteUrl === 'string' && Array.isArray(proxy)) {\n return absoluteUrl.replace(proxy[0], proxy[1]);\n }\n return absoluteUrl;\n}\n\nexport function processSTAC(state, stac) {\n if (typeof state.preprocessSTAC === 'function') {\n stac = state.preprocessSTAC(stac, state);\n }\n return Object.freeze(stac);\n}\n\nexport function isAuthenticationError(error) {\n return [401, 403].includes(error?.response?.status);\n}\n\nexport function addQueryIfNotExists(uri, query) {\n if (Utils.size(query) == 0) {\n return uri;\n }\n for (let key in query) {\n if (!uri.hasQuery(key)) {\n uri.addQuery(key, query[key]);\n }\n }\n return uri;\n}","import URI from 'urijs';\nimport removeMd from 'remove-markdown';\nimport { stacPagination } from \"./rels\";\n\nexport const commonFileNames = ['catalog', 'collection', 'item'];\n\nexport const geojsonMediaType = \"application/geo+json\";\n\nexport const schemaMediaType = \"application/schema+json\";\n\nexport const stacMediaTypes = [\n 'application/json',\n geojsonMediaType,\n 'text/json'\n];\n\nexport const browserImageTypes = [\n 'image/gif',\n 'image/jpg',\n 'image/jpeg',\n 'image/apng',\n 'image/png',\n 'image/webp'\n];\n\nexport const cogMediaTypes = [\n \"image/tiff; application=geotiff; profile=cloud-optimized\",\n \"image/vnd.stac.geotiff; cloud-optimized=true\"\n];\n\nexport const geotiffMediaTypes = [\n \"application/geotiff\",\n \"image/tiff; application=geotiff\",\n \"image/vnd.stac.geotiff\",\n].concat(cogMediaTypes);\n\nexport const browserProtocols = [\n 'http',\n 'https'\n];\n\nexport const imageMediaTypes = browserImageTypes.concat(geotiffMediaTypes);\nexport const mapMediaTypes = imageMediaTypes.concat([geojsonMediaType]);\n\nexport class BrowserError extends Error {\n constructor(message) {\n super(message);\n }\n}\n\n/**\n * General utilities\n * \n * @class\n */\nexport default class Utils {\n\n /**\n * Checks whether a variable is a real object or not.\n * \n * This is a more strict version of `typeof x === 'object'` as this example would also succeeds for arrays and `null`.\n * This function only returns `true` for real objects and not for arrays, `null` or any other data types.\n * \n * @param {*} obj - A variable to check.\n * @returns {boolean} - `true` is the given variable is an object, `false` otherwise.\n */\n static isObject(obj) {\n return (typeof obj === 'object' && obj === Object(obj) && !Array.isArray(obj));\n }\n\n /**\n * Computes the size of an array (number of array elements) or object (number of key-value-pairs).\n * \n * Returns 0 for all other data types.\n * \n * @param {*} obj \n * @returns {integer}\n */\n static size(obj) {\n if (typeof obj === 'object' && obj !== null) {\n if (Array.isArray(obj)) {\n return obj.length;\n }\n else {\n return Object.keys(obj).length;\n }\n }\n return 0;\n }\n\n static isStacMediaType(type, allowEmpty = false) {\n return Utils.isMediaType(type, stacMediaTypes, allowEmpty);\n }\n\n static isMediaType(type, types, allowEmpty = false) {\n if (!Array.isArray(types)) {\n types = [types];\n }\n if (allowEmpty && !type) {\n return true;\n }\n else if (typeof type !== 'string') {\n return false;\n }\n else {\n return types.includes(type.toLowerCase());\n }\n }\n\n /**\n * Checks whether a variable is a string and contains at least one character.\n * \n * @param {*} string - A variable to check.\n * @returns {boolean} - `true` is the given variable is an string with length > 0, `false` otherwise.\n */\n static hasText(string) {\n return (typeof string === 'string' && string.length > 0);\n }\n\n static shortenTitle(fullStr, strLen, separator = '…') {\n if (fullStr.length <= strLen) {\n return fullStr;\n }\n\n let sepLen = separator.length;\n let charsToShow = strLen - sepLen;\n let frontChars = Math.ceil(charsToShow/2);\n let backChars = Math.floor(charsToShow/2);\n return fullStr.substr(0, frontChars) + \n separator + \n fullStr.substr(fullStr.length - backChars);\n }\n\n static isGdalVfsUri(url) {\n return typeof url === 'string' && url.startsWith('/vsi') && !url.startsWith('/vsicurl/');\n }\n\n static toAbsolute(href, baseUrl, stringify = true) {\n return Utils.normalizeUri(href, baseUrl, false, stringify);\n }\n\n static normalizeUri(href, baseUrl = null, noParams = false, stringify = true) {\n // Convert vsicurl URLs to normal URLs\n if (typeof href === 'string' && href.startsWith('/vsicurl/')) {\n href = href.replace(/^\\/vsicurl\\//, '');\n }\n // Parse URL and make absolute, if required\n let uri = URI(href);\n // Don't convert GDAL VFS URIs: https://github.com/radiantearth/stac-browser/issues/116\n if (baseUrl && uri.is(\"relative\") && !Utils.isGdalVfsUri(href)) {\n uri = uri.absoluteTo(baseUrl);\n }\n uri.normalize();\n if (noParams) {\n uri.query(\"\");\n uri.fragment(\"\");\n }\n return stringify ? uri.toString() : uri;\n }\n\n static getLinkWithRel(links, rel) {\n return Array.isArray(links) ? links.find(link => Utils.isObject(link) && Utils.hasText(link.href) && link.rel === rel) : null;\n }\n\n static getLinksWithRels(links, rels) {\n return Array.isArray(links) ? links.filter(link => Utils.isObject(link) && Utils.hasText(link.href) && rels.includes(link.rel)) : [];\n }\n\n static getLinksWithOtherRels(links, rels) {\n return Array.isArray(links) ? links.filter(link => Utils.isObject(link) && Utils.hasText(link.href) && !rels.includes(link.rel)) : [];\n }\n\n static equalUrl(a, b) {\n try {\n let uri1 = URI(a);\n let uri2 = URI(b);\n // Ignore trailing slash in URL paths\n uri1.path(uri1.path().replace(/\\/$/, ''));\n uri2.path(uri2.path().replace(/\\/$/, ''));\n return uri1.equals(uri2);\n } catch (error) {\n return false;\n }\n }\n\n static summarizeMd(text, maxLength = null) {\n if (!Utils.hasText(text)) {\n return '';\n }\n // Best-effort approach to remove some CommonMark (Markdown).\n // Likely not perfect, but seems good enough for most cases.\n text = removeMd(text).replaceAll(/[\\r\\n]+/g, ' ');\n if (maxLength > 0 && text.length > maxLength) {\n text = text.substr(0, maxLength) + '…';\n }\n return text;\n }\n\n static scrollTo(el) {\n if (!el) {\n return;\n }\n var rect = el.getBoundingClientRect();\n var isVisible = rect.top < window.innerHeight && rect.bottom >= 0;\n if (!isVisible) {\n el.scrollIntoView({\n behavior: \"smooth\",\n block: \"start\"\n });\n }\n }\n\n // Convert from UTC to locale time (needed for vue2-datetimepicker)\n // see https://github.com/mengxiong10/vue2-datepicker/issues/388\n static dateFromUTC(dt) {\n if (dt instanceof Date) {\n const value = new Date(dt);\n const offset = value.getTimezoneOffset();\n dt = new Date(value.getTime() + offset * 60 * 1000);\n }\n return dt;\n }\n\n static dateToUTC(dt) {\n if (dt instanceof Date) {\n const offset = new Date().getTimezoneOffset();\n return new Date(dt.getTime() - offset * 60 * 1000);\n }\n return dt;\n }\n\n static formatDatetimeQuery(value) {\n return value.map(dt => {\n if (dt instanceof Date) {\n return dt.toISOString();\n }\n else if (dt) {\n return dt;\n }\n else {\n return '..';\n }\n }).join('/');\n }\n\n static formatSortbyForPOST(value) {\n // POST search requires sortby to be an array of objects containing a property name and sort direction.\n // See spec here: https://api.stacspec.org/v1.0.0-rc.1/item-search/#tag/Item-Search/operation/postItemSearch\n // This function converts the property name to the desired format.\n const sortby = {\n field: '',\n direction: 'asc'\n };\n \n // Check if the value starts with a minus sign (\"-\")\n if (value.startsWith('-')) {\n // sort by descending order\n sortby.field = value.substring(1);\n sortby.direction = 'desc';\n } else {\n //sort by ascending order\n sortby.field = value;\n }\n \n // Put the object in an array\n return [sortby];\n }\n\n static getPaginationLinks(data) {\n let pages = {};\n if (Utils.isObject(data)) {\n let pageLinks = Utils.getLinksWithRels(data.links, stacPagination);\n for (let pageLink of pageLinks) {\n let rel = pageLink.rel === 'previous' ? 'prev' : pageLink.rel;\n pages[rel] = pageLink;\n }\n }\n return pages;\n }\n\n static addFiltersToLink(link, filters = {}, itemsPerPage = null) {\n let isEmpty = value => {\n return (value === null\n || (typeof value === 'number' && !Number.isFinite(value))\n || (typeof value === 'string' && value.length === 0)\n || (typeof value === 'object' && Utils.size(value) === 0));\n };\n\n if (!Utils.isObject(filters)) {\n filters = {};\n }\n else {\n filters = Object.assign({}, filters);\n }\n\n if (typeof filters.limit !== 'number' && typeof itemsPerPage === 'number') {\n filters.limit = itemsPerPage;\n }\n\n if (Utils.hasText(link.method) && link.method.toUpperCase() === 'POST') {\n let body = Object.assign({}, link.body);\n\n for (let key in filters) {\n let value = filters[key];\n if (isEmpty(value)) {\n delete body[key];\n continue;\n }\n\n if (key === 'sortby') {\n value = Utils.formatSortbyForPOST(value);\n }\n else if (key === 'datetime') {\n value = Utils.formatDatetimeQuery(value);\n }\n else if (key === 'filters') {\n Object.assign(body, value.toJSON());\n continue;\n }\n\n body[key] = value;\n }\n return Object.assign({}, link, { body });\n }\n else { // GET\n // Construct new link with search params\n let url = URI(link.href);\n\n for (let key in filters) {\n let value = filters[key];\n if (isEmpty(value)) {\n url.removeQuery(key);\n continue;\n }\n\n if (key === 'datetime') {\n value = Utils.formatDatetimeQuery(value);\n }\n else if (key === 'bbox') {\n value = value.join(',');\n }\n else if ((key === 'collections' || key === 'ids' || key === 'q')) {\n value = value.join(',');\n }\n else if (key === 'filters') {\n let params = value.toText();\n url.setQuery(params);\n continue;\n }\n\n url.setQuery(key, value);\n }\n\n return Object.assign({}, link, { href: url.toString() });\n }\n }\n\n static titleForHref(href, preferFileName = false) {\n let uri = URI(href);\n let auth = uri.authority();\n let file = uri.filename().replace(/^(.{1,})\\.\\w+$/, '$1');\n let dir = uri.directory().replace(/^\\//, '');\n if (auth && file && !preferFileName) {\n let path = uri.path().replace(/^\\//, '');\n if (auth === 'doi.org' && path.startsWith('10.')) {\n return `DOI ${path}`;\n }\n else {\n return `${file} (${auth})`;\n }\n }\n else if (file && !commonFileNames.includes(file)) {\n return file;\n }\n else if (auth) {\n return auth;\n }\n else if (dir) {\n return dir;\n }\n else {\n return href;\n }\n }\n\n static canBrowserDisplayImage(img) {\n if (typeof img.href !== 'string') {\n return false;\n }\n let uri = URI(img.href);\n let protocol = uri.protocol().toLowerCase();\n if (protocol && !browserProtocols.includes(protocol)) {\n return false;\n }\n else if (browserImageTypes.includes(img.type)) {\n return true;\n }\n else if (browserImageTypes.includes('image/' + uri.suffix().toLowerCase())) {\n return true;\n }\n else if (img.type) {\n return false;\n }\n else {\n return true; // If no img.type is given, try to load it anyway: https://github.com/radiantearth/stac-browser/issues/147\n }\n }\n\n // Gets the value at path of object.\n // Drop in replacement for lodash.get\n static getValueFromObjectUsingPath(object, path) {\n if (object === null || typeof object !== 'object') {\n return;\n }\n object = object[path[0]];\n if (typeof object !== 'undefined' && path.length > 1) {\n return this.getValueFromObjectUsingPath(object, path.slice(1));\n }\n return object;\n }\n\n static search(searchterm, target, and = true) {\n if (typeof searchterm !== 'string' || searchterm.length === 0) {\n return false;\n }\n if (Utils.isObject(target)) {\n target = Object.values(target);\n }\n else if (typeof target === 'string') {\n target = [target];\n }\n\n if (!Array.isArray(target)) {\n return false;\n }\n\n let splitChars = /[\\s.,;!&({[)}]]+/g;\n\n // Prepare search terms\n searchterm = searchterm.toLowerCase().split(splitChars);\n\n // Prepare text to search in\n target = target\n .filter(s => typeof s === 'string') // Remove non-strings\n .join(' ') // Merge into a single string\n .replace(splitChars, ' ') // replace split chars with white spaces\n .toLowerCase(); // Lowercase\n\n // Search with \"and\" or \"or\"\n let fn = and ? 'every' : 'some';\n return searchterm[fn](term => target.includes(term));\n }\n\n static createLink(href, rel) {\n return { href, rel };\n }\n\n static supportsExtension(data, pattern) {\n if (!Utils.isObject(data) || !Array.isArray(data['stac_extensions'])) {\n return false;\n }\n let regexp = new RegExp('^' + pattern.replaceAll('*', '[^/]+') + '$');\n return Boolean(data['stac_extensions'].find(uri => regexp.test(uri)));\n }\n\n /**\n * Deep merge two objects.\n * @param target\n * @param ...sources\n */\n static mergeDeep(target, ...sources) {\n if (!sources.length) {\n return target;\n }\n const source = sources.shift();\n\n if (Utils.isObject(target) && Utils.isObject(source)) {\n for (const key in source) {\n if (Utils.isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n Utils.mergeDeep(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return Utils.mergeDeep(target, ...sources);\n }\n\n}","var map = {\n\t\"./de-CH/default.js\": [\n\t\t968,\n\t\t2963,\n\t\t968\n\t],\n\t\"./de/default.js\": [\n\t\t62862,\n\t\t2963,\n\t\t2862\n\t],\n\t\"./en/default.js\": [\n\t\t56886,\n\t\t6886\n\t],\n\t\"./es/default.js\": [\n\t\t89113,\n\t\t9113\n\t],\n\t\"./fr-CA/default.js\": [\n\t\t71082,\n\t\t6380,\n\t\t1082\n\t],\n\t\"./fr-CH/default.js\": [\n\t\t44545,\n\t\t6380,\n\t\t4545\n\t],\n\t\"./fr/default.js\": [\n\t\t1589,\n\t\t6380,\n\t\t1589\n\t],\n\t\"./it-CH/default.js\": [\n\t\t77638,\n\t\t3137,\n\t\t7638\n\t],\n\t\"./it/default.js\": [\n\t\t23108,\n\t\t3137,\n\t\t3108\n\t],\n\t\"./ro/default.js\": [\n\t\t63022,\n\t\t3022\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 33545;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./de-CH/config.json\": 79933,\n\t\"./de/config.json\": 28417,\n\t\"./en/config.json\": 11401,\n\t\"./es/config.json\": 17212,\n\t\"./fr-CA/config.json\": 20995,\n\t\"./fr-CH/config.json\": 1738,\n\t\"./fr/config.json\": 37748,\n\t\"./it-CH/config.json\": 16835,\n\t\"./it/config.json\": 37295,\n\t\"./ro/config.json\": 99069\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 97991;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"143\":\"7f6f3fa8\",\"259\":\"96a9695f\",\"505\":\"9b27e85d\",\"537\":\"a7230af9\",\"572\":\"0051ce9e\",\"635\":\"6fc95d56\",\"771\":\"0a499824\",\"895\":\"9df2c567\",\"967\":\"60693480\",\"968\":\"45862efe\",\"1082\":\"641a4ded\",\"1089\":\"3afadfa9\",\"1456\":\"455ff1ff\",\"1472\":\"0cc6acab\",\"1589\":\"8543b614\",\"1802\":\"28366912\",\"1865\":\"a89e4fd6\",\"2059\":\"df97d1d1\",\"2618\":\"309d922b\",\"2862\":\"3784b33d\",\"2929\":\"b8f4ed6f\",\"2963\":\"c2488848\",\"3022\":\"dc381752\",\"3108\":\"72563005\",\"3137\":\"56d1cb83\",\"3481\":\"c36f57de\",\"3627\":\"6fb10df8\",\"3658\":\"65f83aa3\",\"3951\":\"e4c88502\",\"4312\":\"3a73a74c\",\"4511\":\"dbf1a889\",\"4527\":\"037219df\",\"4545\":\"8da5bd53\",\"4567\":\"692c4d29\",\"4701\":\"a9cb1c23\",\"4801\":\"7432db17\",\"4870\":\"f1c787ea\",\"5500\":\"1186a797\",\"5583\":\"f40d6a97\",\"5788\":\"3ae84088\",\"5867\":\"2a0a5946\",\"5876\":\"85c8fc65\",\"6046\":\"5fb5794b\",\"6147\":\"e54ddd79\",\"6247\":\"68905912\",\"6312\":\"728e8dee\",\"6380\":\"a68c3ec3\",\"6750\":\"55927985\",\"6763\":\"2bcd8962\",\"6780\":\"af1d3dbd\",\"6855\":\"2973c006\",\"6866\":\"1bffa637\",\"6886\":\"9fadbd28\",\"6997\":\"bd003843\",\"7003\":\"0b200468\",\"7036\":\"31f16bc9\",\"7286\":\"3f8bab3a\",\"7341\":\"28b1f4a5\",\"7457\":\"3c3e3e10\",\"7638\":\"bc9ae5ec\",\"7905\":\"d3bb665d\",\"8648\":\"99f841e2\",\"8940\":\"3ca6214b\",\"9091\":\"9ee95dc6\",\"9113\":\"a2a931ee\",\"9363\":\"f665e83d\",\"9637\":\"2eb45629\",\"9738\":\"8d0014a9\",\"9891\":\"22c48a69\",\"9930\":\"3cdaaf38\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"143\":\"ac728857\",\"505\":\"0530e224\",\"635\":\"f849b3f1\",\"967\":\"72c8c98f\",\"1472\":\"45781634\",\"1802\":\"32ec082e\",\"2059\":\"5747ca0b\",\"2618\":\"6fac7cd8\",\"4701\":\"4149415b\",\"5788\":\"a94c9ca6\",\"5867\":\"1c2a69b4\",\"6312\":\"ea261962\",\"6780\":\"0780c10b\",\"6866\":\"081b4583\",\"7341\":\"c9b64985\",\"8648\":\"4b50bc38\",\"8940\":\"f418fe25\",\"9091\":\"45781634\",\"9363\":\"6ad781a6\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = function(module) {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: function() {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"@radiantearth/stac-browser:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/stac-browser/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function(chunkId, fullhref, oldTag, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"143\":1,\"505\":1,\"635\":1,\"967\":1,\"1472\":1,\"1802\":1,\"2059\":1,\"2618\":1,\"4701\":1,\"5788\":1,\"5867\":1,\"6312\":1,\"6780\":1,\"6866\":1,\"7341\":1,\"8648\":1,\"8940\":1,\"9091\":1,\"9363\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(505 != chunkId) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_radiantearth_stac_browser\"] = self[\"webpackChunk_radiantearth_stac_browser\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(87654); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["render","_vm","this","_c","_self","directives","name","rawName","value","load","expression","modifiers","class","classes","attrs","isList","hasImage","_b","staticClass","thumbnail","_e","data","catalog","fileFormats","length","description","deprecated","_v","_s","$t","_l","format","key","_f","temporalExtent","domProps","_t","staticRenderFns","components","StacLink","filters","summarize","text","Utils","summarizeMd","formatMediaType","shorten","mixins","ThumbnailCardMixin","StacFieldsMixin","formatTemporalExtent","props","type","Object","required","computed","mapGetters","push","getStac","_this$data","_this$data$extent","_this$data$extent$tem","isCollection","extent","temporal","interval","Array","isArray","getFileFormats","methods","visible","STAC","$store","commit","href","component","title","catalogCount","model","view","callback","$$v","isComplete","catalogs","sort","filterPlaceholder","searchTerm","showPagination","ref","pagination","on","paginate","catalogView","loading","cardsComponent","tag","cardsComponentProps","scopedSlots","_u","fn","hasMore","loadMore","$event","toggle","id","BIconBricks","BIconListTask","String","default","selectedValue","$emit","ViewButtons","columns","get","state","cardViewMode","set","Catalog","Loading","Pagination","SearchBox","SortButtons","ViewMixin","collectionsOnly","Boolean","count","Number","mapState","$tc","values","some","link","map","stac","filter","haystack","keywords","concat","search","slice","a","b","getDisplayTitle","localeCompare","uiLanguage","reverse","created","cardViewSort","placement","$refs","topPagination","scrollTo","$el","copyColor","preventDefault","stopPropagation","copy","apply","arguments","buttonProps","copyIcon","BIconClipboard","BIconClipboardCheck","BIconClipboardX","copyText","variant","status","startsWith","focus","document","activeElement","Clipboard","error","console","setTimeout","compact","inline","markup","allowHTML","reader","commonmark","writer","safe","smart","parsed","parse","queued","isDeprecated","hasDescription","item","properties","datetime","Registry","require","formatTimestamp","start_datetime","end_datetime","hasText","items","itemCount","api","allowFilter","hasFilters","filtersOpen","filterCount","apiFilters","emitFilter","chunkedItems","showMore","BCollapse","BIconSearch","Item","SearchFilter","showFilters","chunkSize","shownItems","size","watch","mounted","reset","small","fill","stretch","top","first","prev","next","last","tooltip","attributes","icon","displayTitle","fallbackTitle","Function","button","icons","getIcons","find","o","isLink","isStacBrowserLink","isStacMediaType","allowExternalAccess","isExternalUrl","stacBrowserNavigatesTo","includes","rel","obj","to","isObject","assign","target","getBrowserPath","toBrowserPath","privateQueryParameters","uri","URI","addParameters","prefix","queryKey","hasQuery","addQuery","toString","getRequestUrl","fallback","module","exports","catalogUrl","catalogTitle","allowedDomains","detectLocaleFromBrowser","storeLocale","locale","fallbackLocale","supportedLocales","apiCatalogPriority","useTileLayerAsFallback","displayGeoTiffByDefault","buildTileUrlTemplate","asset","encodeURIComponent","stacProxyUrl","pathPrefix","historyMode","showThumbnailsAsAssets","stacLint","geoTiffResolution","redirectLegacyUrls","itemsPerPage","defaultThumbnailSize","maxPreviewsOnMap","crossOriginMedia","requestHeaders","requestQueryParameters","preprocessSTAC","authConfig","CQL_TEXT","CQL_JSON","CQL_ADV_COMPARISON","TYPES","Items","BasicFilters","CollectionIdFilter","ItemIdFilter","CqlFilters","Sort","FreeText","Global","Collections","conformances","canSort","supportsConformance","canFilterExtents","canFilterFreeText","cql","textMode","jsonMode","advancedComparison","functions","mixin","showThumbnail","isItem","thumbnails","getThumbnails","width","height","t","src","alt","crossorigin","right","blankColor","config","CONFIG_PATH","CONFIG_CLI","window","STAC_BROWSER_CONFIG","Vue","use","VueI18n","API_LANGUAGE_CONFORMANCE","LOCALE_CONFIG","loadLocaleConfig","CONFIG","messages","languages","i18n","loadDefaultMessages","Promise","all","loadMessages","async","mergeLocaleMessage","translateFields","vars","te","Fields","stringLocale","keywordPos","indexOf","keyword","substr","undefined","localeWithoutKeyword","parts","replace","split","language","shift","retVar","toLowerCase","pop","toUpperCase","country","script","substring","prepareSupported","supported","lgs","forEach","supportedLocale","Error","countries","firstCountry","main","lg","getBest","defaultLocale","getAnyCountry","doAuth","globalError","hideError","sidebar","displayCatalogTitle","browserVersion","proxy","isExternal","url","errorDescription","errorId","dismissible","message","tab","selectedAsset","dataChanged","hasAssets","assets","shownAssets","showAsset","additionalLinks","collectionLink","providers","ignoredMetadataFields","shownAssetsOnMap","shownBandsOnMap","selectedAssetKey","keys","thumbnailRefs","isThumbnail","tabs","bands","meta","toBrowserUrl","store","path","getters","location","origin","fragment","addSpatialCoverage","schema","bbox","spatialCoverage","geo","box","join","formatTemporalCoverage","dates","dt","makeAssets","contentUrl","toAbsolute","getAbsoluteUrl","encodingFormat","makeLinks","links","isBasedOn","fallbackDescription","makeProvider","role","p","roles","email","mail","stacType","container","collection","tc","inX","createBaseSchema","_data$getMetadata","thumbnailUrl","stacUrl","inLanguage","getMetadata","code","license","_data$getLinkWithRel","getLinkWithRel","copyrightHolder","producer","provider","creator","citation","identifier","dateCreated","dateModified","datePublished","expires","version","image","createCatalogSchema","parents","i","findIndex","_data$extent","_data$extent$temporal","_data$extent2","_data$extent2$spatial","temporalCoverage","spatial","associatedMedia","hasPart","dataset","isPartOf","createItemSchema","includedInDataCatalog","start","end","distribution","addSchemaToDocument","doc","element","getElementById","createElement","head","appendChild","innerText","JSON","stringify","AnonymizedNotice","Assets","BTabs","BTab","CollectionLink","Description","DeprecationNotice","Keywords","Links","Map","Metadata","Providers","ReadMore","Thumbnails","ShowAssetMixin","immediate","handler","parentLink","cc","mixed","hasCatalogs","hasItems","empty","licenses","temporalExtents","linkPosition","hasThumbnails","mapData","hasItemAssets","item_assets","nextCollectionsLink","loadMoreCollections","isApi","itemPages","apiItemsLoading","paginateItems","filterItems","filtersShown","Catalogs","formatLicense","formatTemporalExtents","stateQueryParameters","getApiItemsLoading","summaries","extents","pages","apiItemsPagination","apiItemsLink","addFiltersToLink","getApiItemsLink","features","rootLink","show","dispatch","$root","msg","ErrorAlert","isAxiosError","response","res","BrowserError","is","oldPath","redirectLegacyUrl","fromBrowserPath","loadApi","part","every","match","decode","newPath","$router","query","getRoutes","routes","Browse","route","params","pathMatch","loadParent","getStore","router","localDefaults","valid","localRequestQueryParameters","itemdef","apiItems","catalogDefaults","queue","authData","conformsTo","dataLanguage","dataLanguages","apiCollections","Vuex","strict","database","allowSelectCatalog","globalRequestQueryParameters","source","returnErrorObject","absoluteUrl","root","_state$data","isCatalog","_state$data2","isCatalogLike","_state$data3","_state$data4","_","_state$data5","getStacLinkWithRel","createLink","getLinksWithRels","segment","_state$data6","classRegexp","c","replaceAll","regexp","RegExp","supportsExtension","schemaUri","canSearch","canSearchCollections","canSearchItems","getStacLinksWithRel","hasCollections","getApiCollectionsLink","hasChilds","showCollections","showChilds","addMissingChildren","_state$data7","getLinksWithOtherRels","stacBrowserSpecialHandling","canBrowserDisplayImage","relative","absolute","unproxyUrl","relativeTo","protocol","authority","q","externalRE","endsWith","whitelist","domain","equals","relativeStr","baseUrl","addLocalQueryParams","proxyUrl","addQueryIfNotExists","acceptedLanguages","navigator","entries","l","mutations","setQueryParameter","delete","setRequestHeader","requestAuth","setAuthData","newState","updateState","openCollapsible","uid","idx","closeCollapsible","updateLoading","loaded","processSTAC","clear","resetCatalog","clearAll","resetPage","showPage","unshift","lang","errored","unqueue","splice","removeFromQueue","num","setConformanceClasses","setApiItemsLink","toggleApiItemsLoading","collectionId","setApiItems","feature","getPaginationLinks","setApiData","addApiCollections","collections","nextLink","resetApiItems","showGlobalError","actions","switchLocale","cx","userSelected","localStorage","setItem","dataLanguageCodes","dataLanguageFallback","setAuth","formatter","loadBackground","urls","promises","loadParents","parentStac","args","loadRoot","force","isPotentiallyIncomplete","stacRequest","localeLink","getLocaleLink","conformanceLink","isAuthenticationError","loadApiItems","selfLink","_cx$getters$root","apiCollectionsLink","markPotentiallyIncomplete","loadNextApiCollections","loadOgcApiConformance","loadGeoJson","retryAfterAuth","errorFn","catch","validate","_response$data","_response$data$body","addSearch","axios","body","valid_stac","isSearchPage","containerLink","parentLinkTitle","collectionLinkTitle","searchBrowserLink","auth","showRoot","rootTitle","currentLanguage","native","global","supportsLanguageExt","ui","stacId","stacVersion","canValidate","browserUrl","twitterUrl","mailTo","label","open","BFormGroup","BFormInput","BIconArrowUpRightSquare","BInputGroup","BInputGroupAppend","CopyButton","LANGUAGE_EXT","BDropdown","BDropdownItem","BIconBlank","BIconBox","BIconCheck","BIconEnvelope","BIconExclamationTriangle","BIconFlag","BIconLink","BIconShare","BIconTwitter","BPopover","RootStats","Url","_this$stac","stac_version","_this$stac2","host","hostname","newLang","alternate","uiSupported","dataSupported","mapActions","BIconArrow90degUp","BIconBook","BIconFolderSymlink","BIconLock","BIconUnlock","Source","dataLink","getSearchLink","equalUrl","currentRoute","AlertPlugin","ButtonGroupPlugin","ButtonPlugin","BadgePlugin","CardPlugin","LayoutPlugin","SpinnerPlugin","directive","VBToggle","VBVisible","VueRouter","mode","base","Props","Watchers","newValue","Authentication","Sidebar","StacHeader","onDataLoaded","catalogUrlFromVueX","detectLocaleFromBrowserFromVueX","fallbackLocaleFromVueX","supportedLocalesFromVueX","storeLocaleFromVueX","STAC_BROWSER_VERSION","setAttribute","I18N","$i18n","documentElement","deep","$route","duplicated","oldRoot","canChange","doReset","doSet","onReady","detectLocale","parseQuery","afterEach","from","resetOp","$on","showError","setInterval","getItem","best","_params$state","privateFromHash","hash","private","realKey","localRequest","init","then","h","StacBrowser","$mount","productionTip","stacObjCounter","constructor","migrate","_id","_url","_path","_apiChildrenListeners","_incomplete","_apiChildren","list","Migrate","isItemCollection","hasApiData","setApiDataListener","listener","v","getChildren","priority","children","isMediaType","geojsonMediaType","post","method","field","available","hreflang","allowEmpty","rels","getAssetsWithRoles","matches","sources","getTitle","titleForHref","_linkToAbsolute","img","browserOnly","prefer","other","stacHierarchy","stacPagination","ogcQueryables","ogcRelPrefix","opts","headers","Accept","freeze","_error$response","commonFileNames","schemaMediaType","stacMediaTypes","browserImageTypes","cogMediaTypes","geotiffMediaTypes","browserProtocols","imageMediaTypes","mapMediaTypes","super","types","string","shortenTitle","fullStr","strLen","separator","sepLen","charsToShow","frontChars","Math","ceil","backChars","floor","isGdalVfsUri","normalizeUri","noParams","absoluteTo","normalize","uri1","uri2","maxLength","removeMd","el","rect","getBoundingClientRect","isVisible","innerHeight","bottom","scrollIntoView","behavior","block","dateFromUTC","Date","offset","getTimezoneOffset","getTime","dateToUTC","formatDatetimeQuery","toISOString","formatSortbyForPOST","sortby","direction","pageLinks","pageLink","isEmpty","isFinite","limit","toJSON","removeQuery","toText","setQuery","preferFileName","file","filename","dir","directory","suffix","getValueFromObjectUsingPath","object","searchterm","and","splitChars","s","term","pattern","test","mergeDeep","webpackAsyncContext","req","__webpack_require__","resolve","e","ids","webpackContext","webpackContextResolve","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","call","m","deferred","O","result","chunkIds","notFulfilled","Infinity","fulfilled","j","r","n","getter","__esModule","d","leafPrototypes","getProto","getPrototypeOf","__proto__","ns","create","def","current","getOwnPropertyNames","definition","defineProperty","enumerable","f","chunkId","reduce","u","miniCssF","g","globalThis","hmd","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","done","needAttach","scripts","getElementsByTagName","getAttribute","charset","timeout","nc","onScriptComplete","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","Symbol","toStringTag","nmd","paths","createStylesheet","fullhref","oldTag","reject","linkTag","nonce","onLinkComplete","errorType","realHref","err","request","insertBefore","nextSibling","findStylesheet","existingLinkTags","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
diff --git a/js/app.94faa770.js b/js/app.94faa770.js
new file mode 100644
index 000000000..d795fb8d1
--- /dev/null
+++ b/js/app.94faa770.js
@@ -0,0 +1,2 @@
+(function(){var t={44774:function(t,e,a){"use strict";a.d(e,{A:function(){return g}});var s=function(){var t=this,e=t._self._c;return e("b-card",{directives:[{name:"b-visible",rawName:"v-b-visible.400",value:t.load,expression:"load",modifiers:{400:!0}}],class:t.classes,attrs:{"no-body":"","img-right":t.isList}},[t.hasImage?e("b-card-img-lazy",t._b({staticClass:"thumbnail",attrs:{offset:"200"}},"b-card-img-lazy",t.thumbnail,!1)):t._e(),e("b-card-body",[e("b-card-title",[e("StacLink",{staticClass:"stretched-link",attrs:{data:[t.data,t.catalog]}})],1),t.data&&(t.fileFormats.length>0||t.data.description||t.data.deprecated)?e("b-card-text",{staticClass:"intro"},[t.data.deprecated?e("b-badge",{staticClass:"mr-1 mt-1 deprecated",attrs:{variant:"warning"}},[t._v(t._s(t.$t("deprecated")))]):t._e(),t._l(t.fileFormats,(function(a){return e("b-badge",{key:a,staticClass:"mr-1 mt-1 fileformat",attrs:{variant:"secondary"}},[t._v(t._s(t._f("formatMediaType")(a)))])})),t._v(" "+t._s(t._f("summarize")(t.data.description))+" ")],2):t._e(),t.temporalExtent?e("b-card-text",{staticClass:"datetime"},[e("small",{domProps:{innerHTML:t._s(t.temporalExtent)}})]):t._e()],1),e("b-card-footer",[t._t("footer",null,{data:t.data})],2)],1)},r=[],i=(a(44114),a(95353)),n=a(67467),o=a(97685),l=a(58581),c=a(31831),u=a(50735),d=a(2566),h={name:"Catalog",components:{StacLink:l["default"]},filters:{summarize:t=>d.Ay.summarizeMd(t,300),formatMediaType:t=>(0,u.formatMediaType)(t,null,{shorten:!0})},mixins:[o.A,(0,n.A)({formatTemporalExtent:u.formatTemporalExtent})],props:{catalog:{type:Object,required:!0}},computed:{...(0,i.L8)(["getStac"]),classes(){let t=["catalog-card"];return this.data||t.push("queued"),this.data&&this.data.deprecated&&t.push("deprecated"),this.hasImage&&t.push("has-thumbnail"),this.temporalExtent&&t.push("has-extent"),t},data(){return this.getStac(this.catalog)},temporalExtent(){var t,e,a;if(null!==(t=this.data)&&void 0!==t&&t.isCollection()&&(null===(e=this.data.extent)||void 0===e||null===(a=e.temporal)||void 0===a?void 0:a.interval.length)>0){let t=this.data.extent.temporal.interval[0];if(Array.isArray(t)&&("string"===typeof t[0]||"string"===typeof t[1]))return this.formatTemporalExtent(this.data.extent.temporal.interval[0],!0)}return null},fileFormats(){return this.data?this.data.getFileFormats():[]}},methods:{load(t){this.catalog instanceof c.A||this.$store.commit(t?"queue":"unqueue",this.catalog.href)}}},p=h,f=a(81656),m=(0,f.A)(p,s,r,!1,null,null,null),g=m.exports},21797:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return _}});var s=function(){var t=this,e=t._self._c;return e("section",{staticClass:"catalogs mb-4"},[e("header",[e("h2",{staticClass:"title mr-2"},[t._v(t._s(t.title))]),null!==t.catalogCount?e("b-badge",{staticClass:"mr-4",attrs:{pill:"",variant:"secondary"}},[t._v(t._s(t.catalogCount))]):t._e(),e("ViewButtons",{staticClass:"mr-2",model:{value:t.view,callback:function(e){t.view=e},expression:"view"}}),t.isComplete&&t.catalogs.length>1?e("SortButtons",{model:{value:t.sort,callback:function(e){t.sort=e},expression:"sort"}}):t._e()],1),t.isComplete&&t.catalogs.length>1?e("SearchBox",{staticClass:"mt-1 mb-1",attrs:{placeholder:t.filterPlaceholder},model:{value:t.searchTerm,callback:function(e){t.searchTerm=e},expression:"searchTerm"}}):t._e(),t.showPagination?e("Pagination",{ref:"topPagination",attrs:{pagination:t.pagination,placement:"top"},on:{paginate:t.paginate}}):t._e(),t.searchTerm&&0===t.catalogView.length?e("b-alert",{attrs:{variant:"warning",show:""}},[t._v(t._s(t.$t("catalogs.noMatches")))]):t._e(),e("section",{staticClass:"list"},[t.loading?e("Loading",{attrs:{fill:"",top:""}}):t._e(),e(t.cardsComponent,t._b({tag:"component"},"component",t.cardsComponentProps,!1),t._l(t.catalogView,(function(a){return e("Catalog",{key:a.href,attrs:{catalog:a},scopedSlots:t._u([{key:"footer",fn:function({data:e}){return[t._t("catalogFooter",null,{data:e})]}}],null,!0)})})),1)],1),t.showPagination?e("Pagination",{attrs:{pagination:t.pagination},on:{paginate:t.paginate}}):t.hasMore?e("b-button",{directives:[{name:"b-visible",rawName:"v-b-visible.300",value:t.loadMore,expression:"loadMore",modifiers:{300:!0}}],attrs:{variant:"primary"},on:{click:t.loadMore}},[t._v(t._s(t.$t("catalogs.loadMore")))]):t._e()],1)},r=[],i=(a(44114),a(95353)),n=a(44774),o=a(39773),l=a(31831),c=function(){var t=this,e=t._self._c;return e("b-button-group",{attrs:{title:t.$t("view.title"),size:"sm"}},[e("b-button",{attrs:{title:t.$t("view.tiles.title"),variant:"outline-primary",pressed:"cards"===t.value},on:{click:function(e){return t.toggle("cards")}}},[e("b-icon-bricks"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("view.tiles.label")))])],1),e("b-button",{attrs:{title:t.$t("view.list.title"),variant:"outline-primary",pressed:"list"===t.value},on:{click:function(e){return t.toggle("list")}}},[e("b-icon-list-task"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("view.list.label")))])],1)],1)},u=[],d=a(82948),h={id:"SortButtons",components:{BIconBricks:d.Muv,BIconListTask:d.Xjw},props:{value:{type:String,default:"cards"}},methods:{toggle(t){this.value!==t&&this.$emit("input",t)}}},p=h,f=a(81656),m=(0,f.A)(p,c,u,!1,null,null,null),g=m.exports,b={components:{ViewButtons:g},computed:{cardsComponent(){return"list"===this.view?"div":"b-card-group"},cardsComponentProps(){return"list"===this.view?{class:["card-list"]}:{columns:!0}},view:{get(){return this.$store.state.cardViewMode},set(t){this.$store.commit("config",{cardViewMode:t})}}}},y=a(2566),A={name:"Catalogs",components:{Catalog:n.A,Loading:o.A,Pagination:()=>Promise.resolve().then(a.bind(a,70678)),SearchBox:()=>a.e(9363).then(a.bind(a,79363)),SortButtons:()=>a.e(771).then(a.bind(a,40771))},mixins:[b],props:{catalogs:{type:Array,required:!0},collectionsOnly:{type:Boolean,required:!1},loading:{type:Boolean,default:!1},hasMore:{type:Boolean,default:!1},pagination:{type:Object,default:()=>({})},count:{type:Number,default:null}},data(){return{searchTerm:"",sort:0}},computed:{...(0,i.aH)(["cardViewSort","uiLanguage"]),...(0,i.L8)(["getStac"]),catalogCount(){return this.catalogs.length!==this.catalogView.length?this.catalogView.length+"/"+this.catalogs.length:null!==this.count?this.count:this.isComplete?this.catalogs.length:null},title(){return this.collectionsOnly?this.$tc("stacCollection",this.catalogs.length):this.$tc("stacCatalog",this.catalogs.length)},isComplete(){return!this.hasMore&&!this.showPagination},filterPlaceholder(){return this.isComplete?this.$t("catalogs.filterByTitle"):this.$t("catalogs.filterByTitleAndMore")},showPagination(){return Object.values(this.pagination).some((t=>!!t))},catalogView(){if(this.hasMore)return this.catalogs;let t=this.catalogs.map((t=>{let e=this.getStac(t);return e||t}));return this.searchTerm&&(t=t.filter((t=>{let e=[t.title];return t instanceof l.A&&this.isComplete&&(e.push(t.id),Array.isArray(t.keywords)&&(e=e.concat(t.keywords))),y.Ay.search(this.searchTerm,e)}))),this.hasMore||0===this.sort||(t=t.slice(0).sort(((t,e)=>l.A.getDisplayTitle(t).localeCompare(l.A.getDisplayTitle(e),this.uiLanguage))),-1===this.sort&&(t=t.reverse())),t}},created(){this.sort=this.cardViewSort},methods:{loadMore(t=!0){t&&(this.sort=0,this.$emit("loadMore"))},paginate(t,e){"bottom"===e&&this.$refs.topPagination&&y.Ay.scrollTo(this.$refs.topPagination.$el),this.$emit("paginate",t)}}},v=A,w=(0,f.A)(v,s,r,!1,null,null,null),_=w.exports},22356:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return d}});var s=function(){var t=this,e=t._self._c;return e("b-button",t._b({staticClass:"copy-button",attrs:{variant:t.copyColor,title:t.$t("copy")},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.copy.apply(null,arguments)}}},"b-button",t.buttonProps,!1),[e(t.copyIcon,{tag:"component"}),t._t("default")],2)},r=[],i=a(82948),n=a(14405),o={name:"CopyButton",components:{BIconClipboard:i.ceV,BIconClipboardCheck:i.mD4,BIconClipboardX:i.A6N},props:{copyText:{type:String,required:!0},variant:{type:String,default:"primary"},buttonProps:{type:Object,default:()=>({})}},data(){return{status:null}},computed:{copyColor(){let t=this.variant;return!0===this.status?t="success":!1===this.status&&(t="danger"),this.variant.startsWith("outline-")&&(t="outline-"+t),t},copyIcon(){return!0===this.status?"b-icon-clipboard-check":!1===this.status?"b-icon-clipboard-x":"b-icon-clipboard"}},methods:{async copy(){try{let t=document.activeElement;await n.B.copy(this.copyText),t.focus(),this.status=!0}catch(t){console.error(t),this.status=!1}setTimeout((()=>this.status=null),2500)}}},l=o,c=a(81656),u=(0,c.A)(l,s,r,!1,null,null,null),d=u.exports},41526:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return u}});var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"styled-description",class:{compact:t.compact,inline:t.inline},domProps:{innerHTML:t._s(t.markup(t.description))}})},r=[],i=a(30855),n={name:"Description",props:{description:{type:String,default:""},compact:{type:Boolean,default:!1},inline:{type:Boolean,default:!1},allowHTML:{type:Boolean,default:!1}},methods:{markup(t){if("string"!==typeof t)return"";var e=new i.iX,a=new i.j6({safe:!this.allowHTML,smart:!0}),s=e.parse(t);return a.render(s)}}},o=n,l=a(81656),c=(0,l.A)(o,s,r,!1,null,null,null),u=c.exports},98598:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return b}});var s=function(){var t=this,e=t._self._c;return e("b-card",{directives:[{name:"b-visible",rawName:"v-b-visible.400",value:t.load,expression:"load",modifiers:{400:!0}}],staticClass:"item-card",class:{queued:!t.data,deprecated:t.isDeprecated,description:t.hasDescription},attrs:{"no-body":""}},[t.hasImage?e("b-card-img-lazy",t._b({staticClass:"thumbnail",attrs:{offset:"200"}},"b-card-img-lazy",t.thumbnail,!1)):t._e(),e("b-card-body",[e("b-card-title",[e("StacLink",{staticClass:"stretched-link",attrs:{data:[t.data,t.item]}})],1),t.fileFormats.length>0||t.hasDescription||t.isDeprecated?e("b-card-text",{staticClass:"intro"},[t.isDeprecated?e("b-badge",{staticClass:"mr-1 mt-1 deprecated",attrs:{variant:"warning"}},[t._v(t._s(t.$t("deprecated")))]):t._e(),t._l(t.fileFormats,(function(a){return e("b-badge",{key:a,staticClass:"mr-1 mt-1 fileformat",attrs:{variant:"secondary"}},[t._v(t._s(t._f("formatMediaType")(a)))])})),t.hasDescription?[t._v(t._s(t._f("summarize")(t.data.properties.description)))]:t._e()],2):t._e(),e("b-card-text",[e("small",{staticClass:"text-muted"},[t.extent?[t._v(t._s(t._f("formatTemporalExtent")(t.extent)))]:t.data&&t.data.properties.datetime?[t._v(t._s(t._f("formatTimestamp")(t.data.properties.datetime)))]:[t._v(t._s(t.$t("items.noTime")))]],2)])],1)],1)},r=[],i=a(95353),n=a(97685),o=a(58581),l=a(31831),c=a(50735),u=a(19087),d=a.n(u),h=a(2566);d().addDependency("content-type",a(58597));var p={name:"Item",components:{StacLink:o["default"]},filters:{summarize:t=>h.Ay.summarizeMd(t,150),formatMediaType:t=>(0,c.formatMediaType)(t,null,{shorten:!0}),formatTemporalExtent:c.formatTemporalExtent,formatTimestamp:c.formatTimestamp},mixins:[n.A],props:{item:{type:Object,required:!0}},computed:{...(0,i.L8)(["getStac"]),data(){return this.getStac(this.item)},extent(){return this.data&&(this.data.properties.start_datetime||this.data.properties.end_datetime)?[this.data.properties.start_datetime,this.data.properties.end_datetime]:null},fileFormats(){return this.data?this.data.getFileFormats():[]},isDeprecated(){return this.data instanceof l.A&&Boolean(this.data.properties.deprecated)},hasDescription(){return this.data instanceof l.A&&h.Ay.hasText(this.data.properties.description)}},methods:{load(t){this.item instanceof l.A||this.$store.commit(t?"queue":"unqueue",this.item.href)}}},f=p,m=a(81656),g=(0,m.A)(f,s,r,!1,null,null,null),b=g.exports},49728:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return b}});var s=function(){var t=this,e=t._self._c;return e("section",{staticClass:"items mb-4"},[e("header",[e("h2",{staticClass:"title mr-2"},[t._v(t._s(t.$tc("stacItem",t.items.length)))]),null!==t.itemCount?e("b-badge",{staticClass:"mr-4",attrs:{pill:"",variant:"secondary"}},[t._v(t._s(t.itemCount))]):t._e(),!t.api&&t.items.length>1?e("SortButtons",{model:{value:t.sort,callback:function(e){t.sort=e},expression:"sort"}}):t._e()],1),t.showPagination?e("Pagination",{ref:"topPagination",attrs:{pagination:t.pagination,placement:"top"},on:{paginate:t.paginate}}):t._e(),t.allowFilter?[t.api?e("b-button",{directives:[{name:"b-toggle",rawName:"v-b-toggle.itemFilter",modifiers:{itemFilter:!0}}],staticClass:"mb-4 mt-2",class:{"ml-3":t.showPagination},attrs:{variant:t.hasFilters&&!t.filtersOpen?"primary":"outline-primary"}},[e("b-icon-search"),t._v(" "+t._s(t.filtersOpen?t.$t("items.hideFilter"):t.$t("items.showFilter"))+" "),t.hasFilters&&!t.filtersOpen?e("b-badge",{attrs:{variant:"dark"}},[t._v(t._s(t.filterCount))]):t._e()],1):t._e(),e("b-collapse",{attrs:{id:"itemFilter"},model:{value:t.filtersOpen,callback:function(e){t.filtersOpen=e},expression:"filtersOpen"}},[e("SearchFilter",{attrs:{type:"Items",title:t.$t("items.filter"),parent:t.stac,value:t.apiFilters},on:{input:t.emitFilter}})],1)]:t._e(),e("section",{staticClass:"list"},[t.loading?e("Loading",{attrs:{fill:"",top:""}}):t._e(),t.chunkedItems.length>0?e("b-card-group",{attrs:{columns:""}},t._l(t.chunkedItems,(function(t){return e("Item",{key:t.href,attrs:{item:t}})})),1):e("b-alert",{attrs:{variant:t.hasFilters?"warning":"info",show:""}},[t.hasFilters?[t._v(t._s(t.$t("search.noItemsFound")))]:[t._v(t._s(t.$t("items.noneAvailableForCollection")))]],2)],1),t.showPagination?e("Pagination",{attrs:{pagination:t.pagination},on:{paginate:t.paginate}}):t.hasMore?e("b-button",{directives:[{name:"b-visible",rawName:"v-b-visible.300",value:t.showMore,expression:"showMore",modifiers:{300:!0}}],attrs:{variant:"primary"},on:{click:t.showMore}},[t._v(t._s(t.$t("showMore")))]):t._e()],2)},r=[],i=a(98598),n=a(39773),o=a(70678),l=a(48883),c=a(82948),u=a(2566),d=a(31831),h=a(95353),p={name:"Items",components:{BCollapse:l.K,BIconSearch:c.S8S,Item:i["default"],SearchFilter:()=>Promise.all([a.e(537),a.e(3951),a.e(505)]).then(a.bind(a,33951)),Loading:n.A,Pagination:o["default"],SortButtons:()=>a.e(771).then(a.bind(a,40771))},props:{items:{type:Array,required:!0},loading:{type:Boolean,default:!1},stac:{type:Object,required:!0},api:{type:Boolean,default:!1},allowFilter:{type:Boolean,default:!0},showFilters:{type:Boolean,default:!1},apiFilters:{type:Object,default:()=>({})},pagination:{type:Object,default:()=>({})},chunkSize:{type:Number,default:90},count:{type:Number,default:null}},data(){return{shownItems:this.chunkSize,filtersOpen:this.showFilters,sort:0}},computed:{...(0,h.aH)(["cardViewSort","uiLanguage"]),itemCount(){return null!==this.count?this.count:!this.api&&this.items.length>0?this.items.length:null},hasMore(){return this.items.length>this.shownItems},filterCount(){return Object.values(this.apiFilters).filter((t=>!(null===t||0===u.Ay.size(t)))).length},hasFilters(){return this.filterCount>0},chunkedItems(){let t=this.items;return 0!==this.sort&&(t=t.slice(0).sort(((t,e)=>d.A.getDisplayTitle(t).localeCompare(d.A.getDisplayTitle(e),this.uiLanguage))),-1===this.sort&&(t=t.reverse())),!this.api&&this.items.length>this.chunkSize?t.slice(0,this.shownItems):t},showPagination(){if(this.api){if(this.hasFilters)return!0;if(this.items.length>0)return Object.values(this.pagination).some((t=>!!t))}return!1}},watch:{showFilters(){this.filter=this.showFilters},filtersOpen(){this.$emit("filtersShown",this.filtersOpen)}},created(){this.sort=this.cardViewSort},mounted(){this.showFilters&&setTimeout((()=>u.Ay.scrollTo(this.$el)),250)},methods:{emitFilter(t,e){this.$emit("filterItems",t,e)},showMore(){this.shownItems+=this.chunkSize},paginate(t,e){"bottom"===e&&this.$refs.topPagination&&u.Ay.scrollTo(this.$refs.topPagination.$el),this.$emit("paginate",t)}}},f=p,m=a(81656),g=(0,m.A)(f,s,r,!1,null,null,null),b=g.exports},39773:function(t,e,a){"use strict";a.d(e,{A:function(){return c}});var s=function(){var t=this,e=t._self._c;return e("div",{class:t.classes},[e("b-spinner",{attrs:{label:t.$t("loading"),small:t.small}})],1)},r=[],i=(a(44114),{name:"Loading",props:{fill:{type:Boolean,default:!1},stretch:{type:Boolean,default:!1},small:{type:Boolean,default:!1},top:{type:Boolean,default:!1}},computed:{classes(){let t=["loading"];return this.fill?t.push("loading-fill"):this.stretch&&t.push("loading-stretch"),this.top&&t.push("top"),t}}}),n=i,o=a(81656),l=(0,o.A)(n,s,r,!1,null,"67931bb8",null),c=l.exports},70678:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return c}});var s=function(){var t=this,e=t._self._c;return e("b-button-group",{class:t.classes},[e("b-button",{attrs:{disabled:!t.pagination.first,variant:"primary"},on:{click:function(e){return t.paginate(t.pagination.first)}}},[t._v(t._s(t.$t("pagination.first")))]),e("b-button",{attrs:{disabled:!t.pagination.prev,variant:"primary"},on:{click:function(e){return t.paginate(t.pagination.prev)}}},[t._v(t._s(t.$t("pagination.previous")))]),e("b-button",{attrs:{disabled:!t.pagination.next,variant:"primary"},on:{click:function(e){return t.paginate(t.pagination.next)}}},[t._v(t._s(t.$t("pagination.next")))]),t.pagination.last?e("b-button",{attrs:{variant:"primary"},on:{click:function(e){return t.paginate(t.pagination.last)}}},[t._v(t._s(t.$t("pagination.last")))]):t._e()],1)},r=[],i={name:"Pagination",props:{pagination:{type:Object,default:()=>({})},placement:{type:String,default:"bottom"}},computed:{classes(){return"top"===this.placement?"mb-4 mt-2":"mb-2 mt-2"}},methods:{paginate(t){this.$emit("paginate",t,this.placement)}}},n=i,o=a(81656),l=(0,o.A)(n,s,r,!1,null,null,null),c=l.exports},58581:function(t,e,a){"use strict";a.r(e),a.d(e,{default:function(){return m}});var s=function(){var t=this,e=t._self._c;return e(t.component,t._b({tag:"component",staticClass:"stac-link",attrs:{title:t.tooltip}},"component",t.attributes,!1),[t.icon?[e("img",{staticClass:"icon mr-2",attrs:{src:t.icon.href,alt:t.icon.title,title:t.icon.title}})]:t._e(),e("span",{staticClass:"title"},[t._v(t._s(t.displayTitle))])],2)},r=[],i=a(95353),n=a(59203),o=a(2566),l=a(31831),c=a(84193),u=a.n(c),d={name:"StacLink",props:{data:{type:[Object,Array],default:null},title:{type:String,default:null},fallbackTitle:{type:[String,Function],default:null},tooltip:{type:String,default:null},button:{type:[Boolean,Object],default:!1},state:{type:Object,default:null}},computed:{...(0,i.aH)(["allowExternalAccess","privateQueryParameters"]),...(0,i.L8)(["toBrowserPath","getRequestUrl","isExternalUrl"]),icon(){if(this.stac){let t=this.stac.getIcons();if(t.length>0)return t[0]}return null},stac(){return this.data instanceof l.A?this.data:Array.isArray(this.data)?this.data.find((t=>t instanceof l.A)):null},link(){return this.isLink(this.data)?this.data:Array.isArray(this.data)&&this.data.find((t=>this.isLink(t)))||{}},isStacBrowserLink(){return!!this.stac||!!o.Ay.isStacMediaType(this.link.type,!0)&&(!(!this.allowExternalAccess&&this.isExternalUrl(this.link.href))&&n.Bv.includes(this.link.rel))},attributes(){if(this.isStacBrowserLink||this.button){let t={to:this.href,rel:this.rel};return o.Ay.isObject(this.button)&&Object.assign(t,this.button),t}return{href:this.href,target:"_blank",rel:this.rel}},component(){return this.button?"b-button":this.isStacBrowserLink?"router-link":"a"},href(){if(this.stac||this.isStacBrowserLink){let t;if(t=this.stac?this.stac.getBrowserPath():this.toBrowserPath(this.link.href),t.startsWith("/")||(t="/"+t),o.Ay.size(this.privateQueryParameters)>0||o.Ay.size(this.state)>0){let e=u()(t),a=(t,a)=>{for(let s in t){let r=`${a}${s}`;e.hasQuery(r)||e.addQuery(r,t[s])}};a(this.privateQueryParameters,"~"),a(this.state,"."),t=e.toString()}return t}return this.getRequestUrl(this.link.href)},displayTitle(){if(this.title)return this.title;let t="function"===typeof this.fallbackTitle?this.fallbackTitle():this.fallbackTitle;return l.A.getDisplayTitle(this.data,t)}},methods:{isLink(t){return o.Ay.isObject(t)&&!(t instanceof l.A)}}},h=d,p=a(81656),f=(0,p.A)(h,s,r,!1,null,null,null),m=f.exports},19306:function(t){t.exports={catalogUrl:null,catalogTitle:"STAC Browser",allowExternalAccess:!0,allowedDomains:[],detectLocaleFromBrowser:!0,storeLocale:!0,locale:"en",fallbackLocale:"en",supportedLocales:["de","es","en","fr","it","ro"],apiCatalogPriority:null,useTileLayerAsFallback:!0,displayGeoTiffByDefault:!1,buildTileUrlTemplate:({href:t,asset:e})=>"https://tiles.rdnt.io/tiles/{z}/{x}/{y}@2x?url="+encodeURIComponent(e.href.startsWith("/vsi")?e.href:t),stacProxyUrl:null,pathPrefix:"/",historyMode:"history",cardViewMode:"cards",cardViewSort:"asc",showThumbnailsAsAssets:!1,stacLint:!0,geoTiffResolution:128,redirectLegacyUrls:!1,itemsPerPage:12,defaultThumbnailSize:null,maxPreviewsOnMap:50,crossOriginMedia:null,requestHeaders:{},requestQueryParameters:{},preprocessSTAC:null,authConfig:null}},78561:function(t,e,a){"use strict";a.d(e,{Q:function(){return o}});var s=a(95353);const r=["https://api.stacspec.org/v1.*/item-search#filter:cql-text","http://www.opengis.net/spec/cql2/1.*/conf/cql2-text"],i=["https://api.stacspec.org/v1.*/item-search#filter:cql-json","http://www.opengis.net/spec/cql2/1.*/conf/cql2-json"],n=["http://www.opengis.net/spec/cql2/1.*/req/advanced-comparison-operators"],o={Items:{BasicFilters:["https://api.stacspec.org/v1.*/ogcapi-features","http://www.opengis.net/spec/ogcapi-features-1/1.*/conf/core"],CollectionIdFilter:!1,ItemIdFilter:!1,CqlFilters:["http://www.opengis.net/spec/ogcapi-features-3/1.*/*/features-filter"],Sort:["https://api.stacspec.org/v1.*/ogcapi-features#sort","http://www.opengis.net/spec/ogcapi-records-1/1.*/conf/sorting"],FreeText:["https://api.stacspec.org/v1.*/ogcapi-features#free-text"]},Global:{BasicFilters:!0,CollectionIdFilter:!0,ItemIdFilter:!0,CqlFilters:["https://api.stacspec.org/v1.*/item-search#filter"],Sort:["https://api.stacspec.org/v1.*/item-search#sort"],FreeText:["https://api.stacspec.org/v1.*/item-search#free-text"]},Collections:{BasicFilters:["https://api.stacspec.org/v1.*/collection-search"],CollectionIdFilter:!1,ItemIdFilter:!1,CqlFilters:["https://api.stacspec.org/v1.*/collection-search#filter"],Sort:["https://api.stacspec.org/v1.*/collection-search#sort"],FreeText:["https://api.stacspec.org/v1.*/collection-search#free-text"]}};e.A={props:{type:{type:String,required:!0}},computed:{...(0,s.L8)(["supportsConformance"]),conformances(){return o[this.type]},canSort(){return this.supportsConformance(this.conformances.Sort)},canFilterExtents(){return this.supportsConformance(this.conformances.BasicFilters)},canFilterFreeText(){return this.supportsConformance(this.conformances.FreeText)},cql(){if(!this.supportsConformance(this.conformances.CqlFilters))return null;let t=this.supportsConformance(r),e=this.supportsConformance(i);return t||e?{textMode:t,jsonMode:e,advancedComparison:this.supportsConformance(n)}:null}}}},67467:function(t,e,a){"use strict";var s=a(95353);e.A=t=>{let e={computed:{...(0,s.aH)(["uiLanguage"])},methods:{}};for(let a in t){let s=t[a];e.methods[a]=function(){return this.uiLanguage,s(...arguments)}}return e}},97685:function(t,e,a){"use strict";var s=a(95353);e.A={props:{showThumbnail:{type:Boolean,default:!0}},computed:{...(0,s.aH)(["cardViewMode","crossOriginMedia","defaultThumbnailSize"]),isList(){return this.data&&!this.data.isItem()&&"list"===this.cardViewMode},hasImage(){return this.showThumbnail&&this.thumbnail},thumbnail(){if(this.data){let t=this.data.getThumbnails(!0,"thumbnail");if(t.length>0){let e,a,s=t[0];return Array.isArray(s["proj:shape"])&&2===s["proj:shape"].length?[a,e]=s["proj:shape"]:Array.isArray(this.defaultThumbnailSize)&&2===this.defaultThumbnailSize.length&&([a,e]=this.defaultThumbnailSize),{src:s.href,alt:s.title,crossorigin:this.crossOriginMedia,right:this.isList,blankColor:"rgba(0, 0, 0, 0.125)",width:e,height:a,"blank-width":e,"blank-height":a}}}return null}}}},50737:function(t,e,a){"use strict";let s;s=a(19306),e.A=Object.assign(s,{pathPrefix:"/stac-browser",historyMode:"hash"},window.STAC_BROWSER_CONFIG)},48907:function(t,e,a){"use strict";a.d(e,{Aj:function(){return c},Qm:function(){return p},_:function(){return m},fH:function(){return f}});var s=a(85471),r=a(64765),i=a(50737),n=a(14540),o=a.n(n),l=a(2566);s.Ay.use(r.A);const c=["https://api.stacspec.org/v1.*/language"],u={};function d(){for(let e of i.A.supportedLocales)u[e]=a(97991)(`./${e}/config.json`);const t={};for(let e in u)t[e]={languages:u};return t}const h=new r.A({locale:i.A.locale,fallbackLocale:i.A.fallbackLocale,messages:d()});function p(){return Promise.all([f(i.A.locale),f(i.A.fallbackLocale)])}async function f(t){if(l.Ay.size(h.messages[t])>1)return;const e=(await a(33545)(`./${t}/default.js`)).default;h.mergeLocaleMessage(t,e)}function m(t,e=null){if("string"!==typeof t||0===t.length)return t;let a=`fields.${t}`;return h.te(a)?h.t(a,null,e):o().format(t,e)}e.Ay=h},39071:function(t,e,a){"use strict";a.d(e,{E0:function(){return r},f5:function(){return i}});a(44114);function s(t){if(!t)return;const e=String(t),a=e.indexOf("@"),s=-1!==a?e.substr(a+1):void 0,r=-1!==a?e.substr(0,a):e,i=String(r).replace(/-/g,"_").split("_");if(!i.length||i.length>4)return;const n=i.shift();if(!n)return;const o={keyword:s,language:n.toLowerCase()};if(!i.length)return o;if(3===i.length){const t=i.pop();t&&(o.variant=t.toUpperCase())}let l=i.pop();if(l.length>3&&(o.keyword=l,l=i.pop()),l&&(o.country=l.toUpperCase()),!i.length)return o;const c=i.pop();return"string"===typeof c&&c.length>=1&&(o.script=c[0].toUpperCase()+c.substring(1).toLowerCase()),o}function r(t){const e={};return t.forEach((t=>{const{language:a,country:r}=s(t);if(!a)throw new Error(`Locale ${t} is not parsable`);e[a]||(e[a]={countries:{},firstCountry:void 0,main:void 0});const i=e[a];r?(i.countries[r]=t,i.firstCountry||(i.firstCountry=t)):i.main=t})),e}function i(t,e,a,n){const o=Array.isArray(t)?r(t):t;if(!e&&a)return i(t,a,void 0,n);if(!e)return;const{language:l,country:c}=s(e);if(!l)return a;if(!o[l]){if(e===a)return;return i(t,a,null,n)}const{countries:u,main:d=a,firstCountry:h}=o[l];return u&&c?n&&h?u[c]?u[c]:h:u[c]?u[c]:d:n&&h?h:d}},87654:function(t,e,a){"use strict";var s=a(85471),r=function(){var t=this,e=t._self._c;return e("b-container",{attrs:{id:"stac-browser"}},[t.doAuth.length>0?e("Authentication"):t._e(),t.globalError?e("ErrorAlert",t._b({staticClass:"global-error",on:{close:t.hideError}},"ErrorAlert",t.globalError,!1)):t._e(),t.sidebar?e("Sidebar"):t._e(),e("header",[e("div",{staticClass:"logo"},[t._v(t._s(t.displayCatalogTitle))]),e("StacHeader",{on:{enableSidebar:function(e){t.sidebar=!0}}})],1),e("router-view"),e("footer",[e("i18n",{staticClass:"poweredby text-muted",attrs:{tag:"small",path:"poweredBy"},scopedSlots:t._u([{key:"link",fn:function(){return[e("a",{attrs:{href:"https://github.com/radiantearth/stac-browser",target:"_blank"}},[t._v("STAC Browser")]),t._v(" "+t._s(t.browserVersion)+" ")]},proxy:!0}])})],1)],1)},i=[],n=(a(44114),a(40173)),o=a(95353),l=a(50737),c=function(){var t=this,e=t._self._c;return e("main",{staticClass:"browse d-flex flex-column"},[!t.allowExternalAccess&&t.isExternal?e("b-alert",{attrs:{show:""}},[t._v(t._s(t.$t("errors.noExternalAccess")))]):t.error?e("ErrorAlert",{attrs:{dismissible:!1,url:t.url,description:t.errorDescription,id:t.errorId}}):t.loading?e("Loading",{attrs:{stretch:""}}):e(t.component,{tag:"component"})],1)},u=[],d=function(){var t=this,e=t._self._c;return e("b-alert",{attrs:{variant:"danger",show:"",dismissible:t.dismissible},on:{dismissed:function(e){return t.$emit("close")}}},[e("p",{staticClass:"message"},[t._v(t._s(t.message||t.$t("errors.default")))]),t.error&&t.error.message?e("dl",{staticClass:"error"},[e("dt",[t._v(t._s(t.$t("errors.labels.cause")))]),e("dd",[t._v(t._s(t.error.message))])]):t._e(),t.description?e("dl",{staticClass:"description"},[e("dt",[t._v(t._s(t.$t("errors.labels.reason")))]),e("dd",[t._v(t._s(t.description))])]):t._e(),t.id?e("dl",{staticClass:"id"},[e("dt",[t._v(t._s(t.$t("errors.labels.code")))]),e("dd",[e("code",[t._v(t._s(t.id))])])]):t._e(),t.url?e("dl",{staticClass:"url"},[e("dt",[t._v(t._s(t.$t("errors.labels.requestURL")))]),e("dd",[e("code",[t._v(t._s(t.url))])])]):t._e()])},h=[],p={name:"ErrorAlert",props:{message:{type:String,default:null},description:{type:String,default:""},error:{type:[Object,Error],default:null},id:{type:[String,Number],default:null},url:{type:String,default:""},dismissible:{type:Boolean,default:!0}}},f=p,m=a(81656),g=(0,m.A)(f,d,h,!1,null,"09bb7d1b",null),b=g.exports,y=a(39773),A=function(){var t=this,e=t._self._c;return e("div",{key:t.data.id,staticClass:"item"},[e("b-row",[e("b-col",{staticClass:"left"},[e("section",{staticClass:"mb-4"},[e("b-card",{staticClass:"maps-preview",attrs:{"no-body":""}},[e("b-tabs",{ref:"tabs",attrs:{card:"",pills:"",vertical:"",end:""},model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[e("b-tab",{attrs:{title:t.$t("map"),"no-body":""}},[e("Map",{attrs:{stac:t.data,stacLayerData:t.selectedAsset,scrollWheelZoom:""},on:{dataChanged:t.dataChanged}})],1),t.thumbnails.length>0?e("b-tab",{attrs:{title:t.$t("thumbnails"),"no-body":""}},[e("Thumbnails",{attrs:{thumbnails:t.thumbnails}})],1):t._e()],1)],1)],1),t.hasAssets?e("Assets",{attrs:{assets:t.assets,context:t.data,shown:t.shownAssets},on:{showAsset:t.showAsset}}):t._e(),t.additionalLinks.length>0?e("Links",{attrs:{title:t.$t("additionalResources"),links:t.additionalLinks}}):t._e()],1),e("b-col",{staticClass:"right"},[e("section",{staticClass:"intro"},[t.data.properties.description?e("h2",[t._v(t._s(t.$t("description")))]):t._e(),t.data.properties.deprecated?e("DeprecationNotice",{attrs:{data:t.data}}):t._e(),t.data.properties["anon:warning"]?e("AnonymizedNotice",{attrs:{warning:t.data.properties["anon:warning"]}}):t._e(),t.data.properties.description?e("ReadMore",{attrs:{lines:10,text:t.$t("read.more"),"text-less":t.$t("read.less")}},[e("Description",{attrs:{description:t.data.properties.description}})],1):t._e(),Array.isArray(t.data.properties.keywords)&&t.data.properties.keywords.length>0?e("Keywords",{attrs:{keywords:t.data.properties.keywords}}):t._e()],1),t.collectionLink?e("CollectionLink",{attrs:{link:t.collectionLink}}):t._e(),t.data.properties.providers?e("Providers",{attrs:{providers:t.data.properties.providers}}):t._e(),e("Metadata",{attrs:{data:t.data,type:"Item",ignoreFields:t.ignoredMetadataFields}})],1)],1)],1)},v=[],w=a(41526),_=a(6841),C=a.n(_),k=a(2566),L={data(){return{shownAssetsOnMap:[],shownBandsOnMap:[],tab:null,selectedAsset:null,selectedAssetKey:null}},computed:{...(0,o.L8)(["thumbnails","hasAssets","assets"]),shownAssets(){if(0===this.tab)return this.shownAssetsOnMap;if(1===this.tab||null===this.tab&&this.thumbnails.length>0){let t=[],e=this.thumbnails.map((t=>t.href));for(let a in this.assets){let s=this.assets[a];e.includes(s.href)&&t.push(a)}return t}return[]}},methods:{showAsset(t,e,a){a?this.tab=1:(this.tab=0,this.selectedAsset=t,this.selectedAssetKey=e),this.$refs.tabs&&k.Ay.scrollTo(this.$refs.tabs.$el)},dataChanged(t){k.Ay.isObject(t)?t.assets||t.bands?(k.Ay.size(t.assets)>0&&(this.selectedAssetKey?this.shownAssetsOnMap=[this.selectedAssetKey]:this.shownAssetsOnMap=t.assets.map((t=>t.key))),k.Ay.size(t.bands)>0&&(this.shownBandsOnMap=t.bands)):this.selectedAssetKey&&(this.shownAssetsOnMap=[this.selectedAssetKey]):(this.shownBandsOnMap=[],this.shownAssetsOnMap=[])}}},x=a(95050),T=a(63405),S=a(31831),O=a(84193),$=a.n(O),j=a(48907);function I(t,e){let a=e.getters.toBrowserPath(t),s=$()(window.location.origin.toString());return"hash"===e.state.historyMode?(s.path(e.state.pathPrefix),s.fragment(a)):s.path(e.state.pathPrefix.replace(/\/$/,"")+a),s.toString()}function P(t,e){Array.isArray(e)&&e.length>=4&&(t.spatialCoverage={"@type":"Place",geo:{"@type":"GeoShape",box:(e||[]).join(" ")}})}function B(t){return!Array.isArray(t)||2!==t.length||"string"!==typeof t[0]&&"string"!==typeof t[1]?null:t.map((t=>t||"..")).join("/")}function F(t){return k.Ay.size(t.assets)>0?Object.values(t.assets).map((e=>({"@type":"DataDownload",contentUrl:k.Ay.toAbsolute(e.href,t.getAbsoluteUrl()),encodingFormat:e.type,name:e.title}))):[]}function M(t,e,a,s="DataCatalog"){return t.map((t=>{let r,i;t instanceof S.A?(r=S.A.getDisplayTitle(t),i=t.getAbsoluteUrl()):(r=t.title,i=k.Ay.toAbsolute(t.href,e.getAbsoluteUrl()));let n={"@type":s,name:r,url:I(i,a),isBasedOn:i};return"Dataset"===s&&(n.description=U(t,a)),n}))}function E(t,e){return t.filter((t=>k.Ay.isObject(t)&&Array.isArray(t.roles)&&t.roles.includes(e))).map((t=>({"@type":"Organization",name:t.name,description:t.description,url:t.url,email:t.email||t.mail})))}function U(t,e){let a,s;if(t instanceof S.A?(a=t.isItem()?"Item":t.type,s=t.collection):k.Ay.isObject(t)&&"item"===t.rel&&(a="Item"),a){let r=j.Ay.tc(`stac${a}`),i=j.Ay.t("in",{catalog:s||e.catalogTitle});return`SpatioTemporal Asset Catalog (STAC)\n${r} - ${t.id} ${i}`}}function D(t,e,a){var s;let r,i=S.A.getDisplayTitle(t),n=t.getAbsoluteUrl(),o=I(n,a),l=null===(s=t.getMetadata("language"))||void 0===s?void 0:s.code,c=t.getThumbnails(!0);c.length>0&&(r=k.Ay.toAbsolute(c[0].href,t.getAbsoluteUrl()));let u=t.getMetadata("license");var d;u&&"proprietary"!==u&&"various"!==u?u=`https://spdx.org/licenses/${u}.html`:u=null===(d=t.getLinkWithRel("license"))||void 0===d?void 0:d.href;u&&(u=k.Ay.toAbsolute(u,t.getAbsoluteUrl()));let h,p,f,m,g=t.getMetadata("providers");return k.Ay.size(g)>0&&(h=E(g,"licensor"),p=E(g,"producer"),f=E(g,"host"),m=E(g,"processor")),{"@context":"https://schema.org/","@type":e,name:i,description:t.getMetadata("description")||U(t,a),citation:t.getMetadata("sci:citation"),identifier:t.getMetadata("sci:doi")||t.id,keywords:t.getMetadata("keywords"),license:u,url:o,isBasedOn:n,dateCreated:t.getMetadata("created"),dateModified:t.getMetadata("updated"),datePublished:t.getMetadata("published"),expires:t.getMetadata("expires"),inLanguage:l,thumbnailUrl:r,version:t.getMetadata("version"),image:r,copyrightHolder:h,producer:p,provider:f,creator:m}}function q(t,e,a){if(!(t instanceof S.A))return null;e=e.filter((t=>k.Ay.isObject(t))),e.length>1&&(e=e.filter(((t,a)=>e.findIndex((e=>e.isBasedOn===t.isBasedOn))!==a)));let s=D(t,"DataCatalog",a);var r,i,n,o;t.isCollection()&&((null===(r=t.extent)||void 0===r||null===(i=r.temporal)||void 0===i?void 0:i.interval.length)>0&&(s.temporalCoverage=B(t.extent.temporal.interval[0])),(null===(n=t.extent)||void 0===n||null===(o=n.spatial)||void 0===o?void 0:o.bbox.length)>0&&P(s,t.extent.spatial.bbox[0]),s.associatedMedia=F(t));return s.hasPart=M(a.getters.catalogs,t,a),s.dataset=M(a.getters.items,t,a,"Dataset"),s.isPartOf=M(e,t,a),s}function R(t,e,a){if(!(t instanceof S.A))return null;e=e.filter((t=>k.Ay.isObject(t)));let s=D(t,"Dataset",a);s.includedInDataCatalog=M(e,t,a);let r=t.getMetadata("start_datetime"),i=t.getMetadata("end_datetime");return s.temporalCoverage=r||i?B([r,i]):t.getMetadata("datetime"),P(s,t.bbox),s.distribution=F(t),s}function z(t,e){let a="schema-org",s=t.getElementById(a);s||(s=t.createElement("script"),s.type="application/ld+json",s.id=a,t.head.appendChild(s)),s.innerText=JSON.stringify(e)}var W={name:"Item",components:{AnonymizedNotice:()=>a.e(7457).then(a.bind(a,47457)),Assets:()=>a.e(2059).then(a.bind(a,32059)),BTabs:x.r,BTab:T.a,CollectionLink:()=>a.e(9891).then(a.bind(a,89891)),Description:w["default"],DeprecationNotice:()=>a.e(7341).then(a.bind(a,57341)),Keywords:()=>a.e(1089).then(a.bind(a,71089)),Links:()=>Promise.all([a.e(537),a.e(4870),a.e(5867)]).then(a.bind(a,25867)),Map:()=>a.e(4701).then(a.bind(a,74701)),Metadata:()=>Promise.all([a.e(537),a.e(4870),a.e(9091)]).then(a.bind(a,59091)),Providers:()=>a.e(635).then(a.bind(a,80635)),ReadMore:C(),Thumbnails:()=>a.e(8648).then(a.bind(a,48648))},mixins:[L],data(){return{ignoredMetadataFields:["description","keywords","providers","title","deprecated","proj:bbox","proj:geometry","anon:warning"]}},computed:{...(0,o.aH)(["data","url"]),...(0,o.L8)(["additionalLinks","collectionLink","parentLink"])},watch:{data:{immediate:!0,handler(t){try{let e=R(t,[this.collectionLink,this.parentLink],this.$store);z(document,e)}catch(e){console.error(e)}}}}},N=W,Q=(0,m.A)(N,A,v,!1,null,null,null),V=Q.exports,H=function(){var t=this,e=t._self._c;return e("div",{key:t.data.id,class:{cc:!0,[t.data.type.toLowerCase()]:!0,mixed:t.hasCatalogs&&t.hasItems,empty:!t.hasCatalogs&&!t.hasItems}},[e("b-row",[e("b-col",{staticClass:"meta"},[e("section",{staticClass:"intro"},[e("h2",[t._v(t._s(t.$t("description")))]),t.data.deprecated?e("DeprecationNotice",{attrs:{data:t.data}}):t._e(),t.data["anon:warning"]?e("AnonymizedNotice",{attrs:{warning:t.data["anon:warning"]}}):t._e(),t.data.description?e("ReadMore",{attrs:{lines:10,text:t.$t("read.more"),"text-less":t.$t("read.less")}},[e("Description",{attrs:{description:t.data.description}})],1):t._e(),Array.isArray(t.data.keywords)&&t.data.keywords.length>0?e("Keywords",{attrs:{keywords:t.data.keywords}}):t._e(),t.isCollection?e("section",{staticClass:"metadata mb-4"},[t.licenses?e("b-row",[e("b-col",{staticClass:"label",attrs:{md:"4"}},[t._v(t._s(t.$t("catalog.license")))]),e("b-col",{staticClass:"value",attrs:{md:"8"}},[e("span",{domProps:{innerHTML:t._s(t.licenses)}})])],1):t._e(),t.temporalExtents?e("b-row",[e("b-col",{staticClass:"label",attrs:{md:"4"}},[t._v(t._s(t.$t("catalog.temporalExtent")))]),e("b-col",{staticClass:"value",attrs:{md:"8"}},[e("span",{domProps:{innerHTML:t._s(t.temporalExtents)}})])],1):t._e()],1):t._e(),"left"===t.linkPosition?e("Links",{attrs:{title:t.$t("additionalResources"),links:t.additionalLinks}}):t._e()],1),t.isCollection||t.hasThumbnails?e("section",{staticClass:"mb-4"},[e("b-card",{staticClass:"maps-preview",attrs:{"no-body":""}},[e("b-tabs",{ref:"tabs",attrs:{pills:"",card:"",vertical:"",end:""},model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[t.isCollection?e("b-tab",{attrs:{title:t.$t("map"),"no-body":""}},[e("Map",{attrs:{stac:t.data,stacLayerData:t.mapData,fitBoundsOnce:"",popover:""},on:{dataChanged:t.dataChanged}})],1):t._e(),t.hasThumbnails?e("b-tab",{attrs:{title:t.$t("thumbnails"),"no-body":""}},[e("Thumbnails",{attrs:{thumbnails:t.thumbnails}})],1):t._e()],1)],1)],1):t._e(),t.hasAssets?e("Assets",{attrs:{assets:t.assets,context:t.data,shown:t.shownAssets},on:{showAsset:t.showAsset}}):t._e(),t.hasItemAssets&&!t.hasItems?e("Assets",{attrs:{assets:t.data.item_assets,definition:!0}}):t._e(),t.providers?e("Providers",{attrs:{providers:t.providers}}):t._e(),e("Metadata",{staticClass:"mb-4",attrs:{type:t.data.type,data:t.data,ignoreFields:t.ignoredMetadataFields}}),t.collectionLink?e("CollectionLink",{attrs:{link:t.collectionLink}}):t._e(),"right"===t.linkPosition?e("Links",{attrs:{title:t.$t("additionalResources"),links:t.additionalLinks}}):t._e()],1),t.hasCatalogs?e("b-col",{staticClass:"catalogs-container"},[e("Catalogs",{attrs:{catalogs:t.catalogs,hasMore:!!t.nextCollectionsLink},on:{loadMore:t.loadMoreCollections}})],1):t._e(),t.hasItems?e("b-col",{staticClass:"items-container"},[e("Items",{attrs:{stac:t.data,items:t.items,api:t.isApi,showFilters:t.showFilters,apiFilters:t.filters,pagination:t.itemPages,loading:t.apiItemsLoading},on:{paginate:t.paginateItems,filterItems:t.filterItems,filtersShown:t.filtersShown}}),t.hasItemAssets?e("Assets",{attrs:{assets:t.data.item_assets,definition:!0}}):t._e()],1):t._e()],1)],1)},G=[],X=a(21797),J=a(49728),K=a(67467),Y=a(50735),Z={name:"Catalog",components:{AnonymizedNotice:()=>a.e(7457).then(a.bind(a,47457)),Assets:()=>a.e(2059).then(a.bind(a,32059)),BTabs:x.r,BTab:T.a,Catalogs:X["default"],CollectionLink:()=>a.e(9891).then(a.bind(a,89891)),DeprecationNotice:()=>a.e(7341).then(a.bind(a,57341)),Description:w["default"],Items:J["default"],Keywords:()=>a.e(1089).then(a.bind(a,71089)),Links:()=>Promise.all([a.e(537),a.e(4870),a.e(5867)]).then(a.bind(a,25867)),Map:()=>a.e(4701).then(a.bind(a,74701)),Metadata:()=>Promise.all([a.e(537),a.e(4870),a.e(9091)]).then(a.bind(a,59091)),Providers:()=>a.e(635).then(a.bind(a,80635)),ReadMore:C(),Thumbnails:()=>a.e(8648).then(a.bind(a,48648))},mixins:[L,(0,K.A)({formatLicense:Y.formatLicense,formatTemporalExtents:Y.formatTemporalExtents})],data(){return{filters:{},ignoredMetadataFields:["stac_version","stac_extensions","id","type","title","description","keywords","providers","license","extent","summaries","links","assets","item_assets","proj:bbox","proj:geometry","conformsTo","deprecated","anon:warning","stats:catalogs","stats:collections","stats:items","stac_browser"]}},computed:{...(0,o.aH)(["data","url","apiItems","apiItemsLink","apiItemsPagination","nextCollectionsLink","stateQueryParameters"]),...(0,o.L8)(["additionalLinks","catalogs","collectionLink","isCollection","items","getApiItemsLoading","parentLink","rootLink"]),showFilters(){return Boolean(this.stateQueryParameters["itemFilterOpen"])},hasThumbnails(){return this.thumbnails.length>0},linkPosition(){return 0===this.additionalLinks.length?null:this.isCollection||!this.hasThumbnails?"right":"left"},apiItemsLoading(){return this.getApiItemsLoading(this.data)},licenses(){return this.isCollection&&this.data.license?this.formatLicense(this.data.license,null,null,this.data):null},providers(){let t=[];return Array.isArray(this.data.providers)&&this.data.providers.length>0?t=this.data.providers:this.isCollection&&k.Ay.isObject(this.data.summaries)&&Array.isArray(this.data.summaries.providers)&&(t=this.data.summaries.providers),t.length>0?t:null},temporalExtents(){if(this.isCollection&&this.data.extent.temporal.interval.length>0){let t=this.data.extent.temporal.interval;return t.length>1&&(t=t.slice(1)),this.formatTemporalExtents(t)}return null},hasItemAssets(){var t;return k.Ay.size(null===(t=this.data)||void 0===t?void 0:t.item_assets)>0},itemPages(){let t=Object.assign({},this.apiItemsPagination);return!t.first&&this.data&&this.apiItemsLink&&"items"!==this.apiItemsLink.rel&&(t.first=k.Ay.addFiltersToLink(this.data.getApiItemsLink(),this.filters)),t},isApi(){return Boolean(this.apiItemsLink)},hasItems(){return this.items.length>0||this.isApi},hasCatalogs(){return this.catalogs.length>0},mapData(){return this.selectedAsset?this.selectedAsset:{type:"FeatureCollection",features:this.items}}},watch:{data:{immediate:!0,handler(t){try{let e=q(t,[this.parentLink,this.rootLink],this.$store);z(document,e)}catch(e){console.error(e)}}}},methods:{filtersShown(t){this.$store.commit("updateState",{type:"itemFilterOpen",value:t?1:null})},loadMoreCollections(){this.$store.dispatch("loadNextApiCollections",{show:!0})},async paginateItems(t){try{await this.$store.dispatch("loadApiItems",{link:t,show:!0,filters:this.filters})}catch(e){this.$root.$emit("error",e,this.$t("errors.loadItems"))}},async filterItems(t,e){this.filters=t,e&&this.$store.commit("resetApiItems",this.data.getApiItemsLink());try{await this.$store.dispatch("loadApiItems",{link:this.apiItemsLink,show:!0,filters:t})}catch(a){let t=e?this.$t("errors.loadItems"):this.$t("errors.loadFilteredItems");this.$root.$emit("error",a,t)}}}},tt=Z,et=(0,m.A)(tt,H,G,!1,null,null,null),at=et.exports,st={name:"Browse",components:{ErrorAlert:b,Loading:y.A,Catalog:at,Item:V},props:{path:{type:String,default:""}},computed:{...(0,o.aH)(["allowExternalAccess","url","data","redirectLegacyUrls"]),...(0,o.L8)(["fromBrowserPath","isItem","error","loading"]),errorId(){if(this.error instanceof Error&&this.error.isAxiosError&&k.Ay.isObject(this.error.response)){let t=this.error.response;return k.Ay.isObject(t.data)&&t.data.code?t.data.code:t.status}return null},errorDescription(){if(this.error instanceof Error&&this.error.isAxiosError&&k.Ay.isObject(this.error.response)){let t=this.error.response;if(k.Ay.isObject(t.data)&&"string"===typeof t.data.description)return t.data.description;if(401===t.status)return this.$t("errors.unauthorized");if(403===t.status)return this.$t("errors.forbidden");if(404===t.status)return this.$t("errors.notFound");if(t.status>500)return this.$t("errors.serverError");if(t.status>400)return this.$t("errors.badRequest")}else if(this.error instanceof k.fe)return this.error.message;return this.$t("errors.networkError")},component(){return this.isItem?"Item":"Catalog"},isExternal(){return $()(this.path).is("absolute")}},watch:{path:{immediate:!0,async handler(t,e){if(t===e)return;if(!this.allowExternalAccess&&this.isExternal)return;if(this.redirectLegacyUrls&&await this.redirectLegacyUrl(t))return;let a=this.fromBrowserPath(t||"/");this.$store.dispatch("load",{url:a,show:!0,loadApi:!0})}}},methods:{async redirectLegacyUrl(t){if(!t||"/"===t)return!1;let e=t.split("/").filter((t=>t.length>0&&"item"!==t&&"collection"!==t));if(e.length>0&&e.every((t=>t.match(/^[123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ]+$/)))){const{decode:t}=await a.e(6763).then(a.t.bind(a,16763,23));let s=t(e[e.length-1]).toString();if(s){let t=$()(s);return this.$router.replace({path:"/"+t.path().replace(/(collections|items)\/?$/,""),query:t.query(!0)}),!0}}return!1}}},rt=st,it=(0,m.A)(rt,c,u,!1,null,null,null),nt=it.exports;function ot(t){let e=[];return t.allowExternalAccess&&e.push({path:"/external/(.*)",name:"browseExternal",component:nt,props:t=>({path:`/external/${t.params.pathMatch}`})}),t.catalogUrl?e.push({path:"/search",name:"search",component:()=>Promise.all([a.e(537),a.e(3951),a.e(6312)]).then(a.bind(a,11224))}):(e.push({path:"/",name:"select",component:()=>a.e(967).then(a.bind(a,60967))}),e.push({path:"/search/external/(.*)",name:"search",component:()=>Promise.all([a.e(537),a.e(3951),a.e(6312)]).then(a.bind(a,11224)),props:t=>({loadParent:`/external/${t.params.pathMatch}`})})),e.push({path:"/(.*)",name:"browse",component:nt,props:t=>({path:t.params.pathMatch})}),e}var lt=ot,ct=a(91250),ut=a(59203),dt=a(33484),ht=a(39071),pt=a(78561);function ft(t,e){const a=()=>({url:"",title:t.catalogTitle,description:null,data:null,valid:null,parents:null,globalError:null,localRequestQueryParameters:{},stateQueryParameters:{language:null,asset:[],itemdef:[]},apiItems:[],apiItemsLink:null,apiItemsPagination:{}}),r=()=>({queue:[],privateQueryParameters:{},authData:null,doAuth:[],conformsTo:[],dataLanguage:null,dataLanguages:[],apiCollections:[],apiItemsLoading:{},nextCollectionsLink:null});return new o.Ay.Store({strict:!0,state:Object.assign({},t,a(),r(),{database:{},allowSelectCatalog:!t.catalogUrl,globalRequestQueryParameters:t.requestQueryParameters,uiLanguage:t.locale}),getters:{loading:t=>!t.url||!t.data||t.database[t.url]instanceof dt.Rh,getApiItemsLoading:t=>e=>{let a="";return e instanceof dt.Rh||(e instanceof S.A?a=e.id:"string"===typeof e&&(a=e),t.apiItemsLoading[a]||!1)},error:t=>t.database[t.url]instanceof Error?t.database[t.url]:null,getStac:t=>(e,a=!1)=>{if(e instanceof S.A)return e;if(k.Ay.isObject(e)&&k.Ay.hasText(e.href)&&(e=e.href),!k.Ay.hasText(e))return null;let s=k.Ay.toAbsolute(e,t.url),r=t.database[s];return r instanceof S.A||a&&r instanceof Error?r:null},displayCatalogTitle:(t,e)=>S.A.getDisplayTitle(e.root,t.catalogTitle),isCollection:t=>{var e;return(null===(e=t.data)||void 0===e?void 0:e.isCollection())||!1},isCatalog:t=>{var e;return(null===(e=t.data)||void 0===e?void 0:e.isCatalog())||!1},isCatalogLike:t=>{var e;return(null===(e=t.data)||void 0===e?void 0:e.isCatalogLike())||!1},isItem:t=>{var e;return(null===(e=t.data)||void 0===e?void 0:e.isItem())||!1},root:(t,e)=>e.getStac(e.rootLink),rootLink:t=>{var e;let a=null===(e=t.data)||void 0===e?void 0:e.getStacLinkWithRel("root");if(a)return a;if(t.catalogUrl)return k.Ay.createLink(t.catalogUrl,"root");if(t.url&&t.data instanceof S.A&&t.data.getLinksWithRels(["conformance","service-desc","service-doc","data","search"]).length>0)return k.Ay.createLink(t.url,"root");if(t.url){let e=$()(t.url),a=e.segment(-2);if(["collections","items"].includes(a))return e.segment(-1,""),e.segment(-1,""),"items"===a&&(e.segment(-1,""),e.segment(-1,"")),k.Ay.createLink(e.toString(),"root")}return null},parentLink:t=>{if(t.data instanceof S.A){let e=t.data.getStacLinkWithRel("parent");if(e)return e}if(t.url){let e=$()(t.url),a=e.segment(-2);if(["collections","items"].includes(a))return e.segment(-1,""),e.segment(-1,""),k.Ay.createLink(e.toString(),"parent")}return null},collectionLink:t=>{if(t.data instanceof S.A){var e;let a=null===(e=t.data)||void 0===e?void 0:e.getStacLinkWithRel("collection");if(a)return a}if(t.url){let e=$()(t.url),a=e.segment(-2);if("items"==a)return e.segment(-1,""),e.segment(-1,""),k.Ay.createLink(e.toString(),"collection")}return null},supportsConformance:t=>e=>{if(!Array.isArray(e))return e;let a=e.map((t=>t.replaceAll("*","[^/]+").replace(/\/?#/,"/?#"))).join("|"),s=new RegExp("^("+a+")$");return Boolean(t.conformsTo.find((t=>t.match(s))))},supportsExtension:t=>e=>k.Ay.supportsExtension(t.data,e),canSearch:(t,e)=>e.canSearchCollections||e.canSearchItems,canSearchItems:(t,e)=>e.supportsConformance(pt.Q.Items.BasicFilters),canSearchCollections:(t,e)=>e.supportsConformance(pt.Q.Collections.BasicFilters),items:t=>t.apiItems.length>0?t.apiItems:t.data?t.data.getStacLinksWithRel("item"):[],catalogs:t=>{let e=Boolean(t.data instanceof S.A&&t.data.getApiCollectionsLink()&&t.apiCollections.length>0),a=Boolean(t.data instanceof S.A),s=!t.apiCatalogPriority||"collections"===t.apiCatalogPriority,r=!t.apiCatalogPriority||"childs"===t.apiCatalogPriority,i=[];return e&&s&&(i=i.concat(t.apiCollections)),a&&r&&(i=S.A.addMissingChildren(i,t.data)),i},hasAssets:(t,e)=>Boolean(Object.values(e.assets).find((t=>k.Ay.isObject(t)&&"string"===typeof t.href))),assets:(t,e)=>{var a;if(k.Ay.isObject(null===(a=t.data)||void 0===a?void 0:a.assets)){if(t.showThumbnailsAsAssets)return t.data.assets;{let a={},s=e.thumbnails;for(let e in t.data.assets){let r=t.data.assets[e];s.includes(r)||(a[e]=r)}return a}}return{}},thumbnails:t=>t.data?t.data.getThumbnails(!0):[],additionalLinks:t=>t.data?t.data.getLinksWithOtherRels(ut.ol).filter((t=>"preview"!==t.rel||!k.Ay.canBrowserDisplayImage(t))):[],toBrowserPath:(t,e)=>a=>{k.Ay.hasText(a)||(a="/");let s,r=k.Ay.toAbsolute((0,dt.rM)(a,t.stacProxyUrl),t.url,!1);if(!t.allowSelectCatalog&&t.catalogUrl&&(s=r.relativeTo(t.catalogUrl)),"undefined"===typeof s||e.isExternalUrl(r,!1)){if(!t.allowExternalAccess)return r.toString();let e=["/external"],a=r.protocol();"https"!==a&&e.push(a+":"),e.push(r.authority()),e.push(r.path().replace(/^\//,""));let s=e.join("/"),i=r.query();return i&&(s+=`?${i}`),s}return"/"+s.toString()},fromBrowserPath:(t,e)=>a=>{const s=/^\/(search\/)?external\//;if(k.Ay.hasText(a)&&"/"!==a)if(a.match(s)){let t,e=a.replace(s,"").split("/");t=e[0].endsWith(":")?e.shift():"https:",a=`${t}//${e.join("/")}`}else!t.allowSelectCatalog&&t.catalogUrl&&(a=k.Ay.toAbsolute(a,t.catalogUrl,!1));else a=t.catalogUrl;return e.getRequestUrl(a,null,!0)},isExternalUrl:t=>(e,a=!0)=>{if(!t.catalogUrl)return!1;if(e instanceof $()||(e=$()(e)),a&&Array.isArray(t.allowedDomains)&&t.allowedDomains.includes(e.domain()))return!1;let s;if(e.is("relative"))s=e;else if(s=e.relativeTo(t.catalogUrl),s.equals(e))return!0;let r=s.toString();return r.startsWith("//")||r.startsWith("../")},getRequestUrl:(t,e)=>(a,s=null,r=!1)=>{let i=k.Ay.toAbsolute((0,dt.sd)(a,t.stacProxyUrl),s||t.url,!1);return e.isExternalUrl(i)||((0,dt.mA)(i,t.privateQueryParameters),(0,dt.mA)(i,t.globalRequestQueryParameters),r&&(0,dt.mA)(i,t.localRequestQueryParameters)),i.toString()},acceptedLanguages:t=>{const e={en:.1};return Array.isArray(t.supportedLocales)&&t.supportedLocales.forEach((t=>e[t]=.2)),k.Ay.hasText(t.fallbackLocale)&&(e[t.fallbackLocale]=.5),Array.isArray(navigator.languages)&&navigator.languages.forEach((t=>e[t]=.7)),k.Ay.hasText(t.locale)&&(e[t.locale]=1),Object.entries(e).sort(((t,e)=>t[1]>e[1]?-1:t[1]e>=1?t:`${t};q=${e}`)).join(",")}},mutations:{config(t,e){for(let a in e){let s=e[a];switch(a){case"catalogTitle":t.catalogTitle=s;break;case"catalogUrl":"function"===typeof s?t.catalogUrl=s():"string"===typeof s&&(t.catalogUrl=s);break;case"crossOriginMedia":t.crossOriginMedia=["anonymous","use-credentials"].includes(s)?s:null;break;case"cardViewSort":switch(s){case"asc":t.cardViewSort=1;break;case"desc":t.cardViewSort=-1;break;default:t.cardViewSort=0}break;default:t[a]=s}}},languages(t,{uiLanguage:e,dataLanguage:a}){t.dataLanguage=a||null,t.uiLanguage=e||null},setQueryParameter(t,{type:e,key:a,value:r}){e=`${e}QueryParameters`,"undefined"===typeof r?s.Ay.delete(t[e],a):s.Ay.set(t[e],a,r)},setRequestHeader(t,{key:e,value:a}){"undefined"===typeof a?s.Ay.delete(t.requestHeaders,e):s.Ay.set(t.requestHeaders,e,a)},requestAuth(t,e){"function"===typeof e?t.doAuth.push(e):t.doAuth=[]},setAuthData(t,e){t.authData=e},state(t,e){t.stateQueryParameters=e},updateState(t,{type:e,value:a}){null===a||"undefined"===typeof a?s.Ay.delete(t.stateQueryParameters,e):s.Ay.set(t.stateQueryParameters,e,a)},openCollapsible(t,{type:e,uid:a}){const s=t.stateQueryParameters[e].indexOf(a);-1===s&&t.stateQueryParameters[e].push(a)},closeCollapsible(t,{type:e,uid:a}){const r=t.stateQueryParameters[e].indexOf(a);r>-1&&s.Ay.delete(t.stateQueryParameters[e],r)},updateLoading(t,{url:e,show:a,loadApi:r}){let i=t.database[e];s.Ay.set(i,"show",a||i.show),s.Ay.set(i,"loadApi",r||i.loadApi)},loading(t,{url:e,loading:a}){s.Ay.set(t.database,e,a),a.show&&(t.url=e)},loaded(t,{url:e,data:a}){s.Ay.set(t.database,e,(0,dt.Pj)(t,a))},clear(t,e){s.Ay.delete(t.database,e)},resetCatalog(e,s){Object.assign(e,r()),Object.assign(e,a()),e.supportedLocales.includes(e.locale)||(e.locale=t.locale),s&&(e.catalogUrl=t.catalogUrl,e.catalogTitle=t.catalogTitle,e.database={})},resetPage(t){Object.assign(t,a())},showPage(t,{url:e,title:a,description:s,stac:r}){if(r||(r=t.database[e]||null),t.url=e||null,t.data=r instanceof S.A?r:null,t.valid=null,t.description=s,a)t.title=a;else if(t.title=S.A.getDisplayTitle(t.data,t.catalogTitle),t.data){let e=t.data.getMetadata("description");k.Ay.hasText(e)&&(t.description=e)}if(t.data){let e=t.data.isItem()?t.data.properties:t.data,a=Array.isArray(e.languages)?e.languages.slice():[];k.Ay.isObject(e.language)&&a.unshift(e.language),t.dataLanguages=a.filter((t=>k.Ay.isObject(t)&&"string"===typeof t.code))}},errored(t,{url:e,error:a}){a instanceof Error||(a=new Error(a)),s.Ay.set(t.database,e,a)},valid(t,e){t.valid=e},queue(t,e){t.queue.push(e)},unqueue(t,e){let a=t.queue.indexOf(e);-1!==a&&t.queue.splice(a,1)},removeFromQueue(t,e){t.queue.splice(0,e)},setConformanceClasses(t,e){Array.isArray(e)&&(t.conformsTo=e)},setApiItemsLink(t,e){t.apiItemsLink=e},toggleApiItemsLoading(t,e=""){t.apiItemsLoading[e]?s.Ay.delete(t.apiItemsLoading,e):s.Ay.set(t.apiItemsLoading,e,!0)},setApiItems(t,{data:e,stac:a,show:s}){if(!k.Ay.isObject(e)||!Array.isArray(e.features))return;let r=e.features.map((e=>(0,dt.Pj)(t,e)));s&&(t.apiItems=r);let i=k.Ay.getPaginationLinks(e);s&&(t.apiItemsPagination=i),a instanceof S.A&&a.setApiData(r,i.next,i.prev)},addApiCollections(t,{data:e,stac:a,show:s}){if(!k.Ay.isObject(e)||!Array.isArray(e.collections))return;let r=e.collections.map((e=>(0,dt.Pj)(t,e))),i=k.Ay.getLinkWithRel(e.links,"next");s&&(t.nextCollectionsLink=i,t.apiCollections=t.apiCollections.concat(r)),a instanceof S.A&&a.setApiData(r,i)},resetApiItems(t,e){t.apiItems=[],t.apiItemsLink=e,t.apiItemsPagination={}},parents(t,e){t.parents=e},showGlobalError(t,e){console.error(e),t.globalError=e}},actions:{async switchLocale(t,{locale:e,userSelected:a}){if(t.commit("config",{locale:e}),t.state.storeLocale&&a)try{window.localStorage.setItem("locale",e)}catch(o){console.error(o)}let s=(0,ht.f5)(t.state.supportedLocales,e,t.state.fallbackLocale),r=t.state.dataLanguages.map((t=>t.code)),i=t.state.dataLanguages.length>0?t.state.dataLanguages[0].code:s,n=(0,ht.f5)(r,e,i);t.commit("languages",{dataLanguage:n,uiLanguage:s}),t.commit("setQueryParameter",{type:"state",key:"language",value:e})},async setAuth(t,e){k.Ay.hasText(e)||(e=null),t.commit("setAuthData",e);let a=t.state.authConfig,s=a.key;e&&("Bearer"===a.formatter?e=`Bearer ${e}`:"function"===typeof a.formatter&&(e=a.formatter(e))),k.Ay.hasText(e)||(e=void 0),"query"===a.type?t.commit("setQueryParameter",{type:"private",key:s,value:e}):"header"===a.type&&t.commit("setRequestHeader",{key:s,value:e})},async loadBackground(t,e){let a=t.state.queue.slice(0,e);if(a.length>0){let s=[];for(let e of a)s.push(t.dispatch("load",{url:e}));return t.commit("removeFromQueue",e),await Promise.all(s)}},async loadParents(t){if(!(t.state.data instanceof S.A))return void t.commit("parents",[]);let e=[],a=t.state.data;while(a){let s=a.getLinkWithRel("parent")||a.getLinkWithRel("root");if(!s)break;let r=k.Ay.toAbsolute(s.href,a.getAbsoluteUrl());await t.dispatch("load",{url:r,loadApi:!0});let i=t.getters.getStac(r,!0);if(i instanceof Error)return void t.commit("parents",i);if(i===a)break;e.push(i),a=i}t.commit("parents",e)},async load(t,a){let{url:s,show:r,loadApi:i,loadRoot:n,force:o}=a,l=t.getters.toBrowserPath(s);s=k.Ay.toAbsolute(s,t.state.url),n||"/"===l||!t.state.catalogUrl||t.getters.getStac(t.state.catalogUrl)||await t.dispatch("load",{url:t.state.catalogUrl,loadApi:!0,loadRoot:!0}),o&&t.commit("clear",s);let c=new dt.Rh(r,i),u=t.state.database[s];if(u instanceof dt.Rh)t.commit("updateLoading",{url:s,show:r,loadApi:i});else{if(!u||u instanceof S.A&&u.isPotentiallyIncomplete()){t.commit("loading",{url:s,loading:c});try{let a=await(0,dt.FF)(t,s);if(!k.Ay.isObject(a.data))throw new k.fe(j.Ay.t("errors.invalidJsonObject"));if(u=new S.A(a.data,s,l),r){let a=u.getLocaleLink(t.state.dataLanguage);if(a)return void e.replace(t.getters.toBrowserPath(a.href))}if(t.commit("loaded",{url:s,data:u}),!t.getters.root){let e=u.getLinkWithRel("root");e&&t.commit("config",{catalogUrl:k.Ay.toAbsolute(e.href,s)})}let i=u.getStacLinkWithRel("conformance");Array.isArray(u.conformsTo)&&u.conformsTo.length>0?t.commit("setConformanceClasses",u.conformsTo):i&&await t.dispatch("loadOgcApiConformance",i)}catch(d){if(t.state.authConfig&&(0,dt.HD)(d))return t.commit("clear",s),void t.commit("requestAuth",(()=>t.dispatch("load",a)));console.error(d),t.commit("errored",{url:s,error:d})}}if(c.loadApi&&u instanceof S.A){if(u.getApiCollectionsLink()){let e={stac:u,show:c.show};try{await t.dispatch("loadNextApiCollections",e)}catch(d){t.state.authConfig&&(0,dt.HD)(d)?t.commit("requestAuth",(()=>t.dispatch("loadNextApiCollections",e))):t.commit("showGlobalError",{message:j.Ay.t("errors.loadApiCollectionsFailed"),error:d})}}if(u.getApiItemsLink()){let e={stac:u,show:c.show};try{await t.dispatch("loadApiItems",e)}catch(d){t.state.authConfig&&(0,dt.HD)(d)?t.commit("requestAuth",(()=>t.dispatch("loadApiItems",e))):t.commit("showGlobalError",{message:j.Ay.t("errors.loadApiItemsFailed"),error:d})}}}c.show&&t.commit("showPage",{url:s})}},async loadApiItems(t,{link:e,stac:a,show:s,filters:r}){let i=a instanceof S.A?a.id:"";t.commit("toggleApiItemsLoading",i);try{let n=t.state.url;a instanceof S.A&&(e=a.getApiItemsLink(),n=a.getAbsoluteUrl()),e=k.Ay.addFiltersToLink(e,r,t.state.itemsPerPage);let o=await(0,dt.FF)(t,e);if(k.Ay.isObject(o.data)&&Array.isArray(o.data.features))return o.data.features=o.data.features.map((e=>{try{if(!k.Ay.isObject(e)||"Feature"!==e.type)return null;let s,r=k.Ay.getLinkWithRel(e.links,"self");if(null!==r&&void 0!==r&&r.href)s=k.Ay.toAbsolute(r.href,n);else{if("undefined"===typeof e.id)return null;{var a;let r=null===(a=t.getters.root)||void 0===a?void 0:a.getApiCollectionsLink();if(n)s=k.Ay.toAbsolute(`items/${e.id}`,n);else if(r)s=k.Ay.toAbsolute(`${i}/items/${e.id}`,r.href);else{if(!t.state.catalogUrl)return null;s=k.Ay.toAbsolute(`collections/${i}/items/${e.id}`,t.state.catalogUrl)}}}let o=t.getters.getStac(s);return o||(o=new S.A(e,s,t.getters.toBrowserPath(s)),o.markPotentiallyIncomplete(),t.commit("loaded",{data:o,url:s}),o)}catch(s){return console.error(s),null}})).filter((t=>t instanceof S.A)),s&&t.commit("setApiItemsLink",e),t.commit("setApiItems",{data:o.data,stac:a,show:s}),t.commit("toggleApiItemsLoading",i),o;throw new k.fe(j.Ay.t("errors.invalidStacItems"))}catch(n){throw t.commit("toggleApiItemsLoading",i),n}},async loadNextApiCollections(t,{stac:e,show:a}){let s;if(e){if(t.state.apiCollections.length>0)return;s=e.getLinkWithRel("data")}else e=t.state.data,s=t.state.nextCollectionsLink;if(!s)return;let r=await(0,dt.FF)(t,s);if(!k.Ay.isObject(r.data)||!Array.isArray(r.data.collections))throw new k.fe(j.Ay.t("errors.invalidStacCollections"));r.data.collections=r.data.collections.map((a=>{let s,r=k.Ay.getLinkWithRel(a.links,"self");s=null!==r&&void 0!==r&&r.href?k.Ay.toAbsolute(r.href,t.state.url||e.getAbsoluteUrl()):k.Ay.toAbsolute(`collections/${a.id}`,t.state.catalogUrl||e.getAbsoluteUrl());let i=t.getters.getStac(s);return i||(i=new S.A(a,s,t.getters.toBrowserPath(s)),i.markPotentiallyIncomplete(),t.commit("loaded",{data:i,url:s}),i)})),t.commit("addApiCollections",{data:r.data,stac:e,show:a})},async loadOgcApiConformance(t,e){let a=await(0,dt.FF)(t,e);k.Ay.isObject(a.data)&&Array.isArray(a.data.conformsTo)&&t.commit("setConformanceClasses",a.data.conformsTo)},async loadGeoJson(t,e){try{let a=await(0,dt.FF)(t,e);return a.data}catch(a){return null}},async retryAfterAuth(t){let e=e=>t.commit("showGlobalError",{error:e,message:j.Ay.t("errors.authFailed")});for(let s of t.state.doAuth)try{let t=s();t instanceof Promise&&t.catch(e)}catch(a){e(a)}},async validate(t,e){if("boolean"!==typeof t.state.valid)try{var a,s;let r=$()("https://api.staclint.com/url");r.addSearch("stac_url",e);let i=await ct.A.get(r.toString());t.commit("valid",Boolean(null===(a=i.data)||void 0===a||null===(s=a.body)||void 0===s?void 0:s.valid_stac))}catch(r){t.commit("valid",r)}}}})}var mt=ft,gt=a(78933),bt=a(92999),yt=a(12670),At=a(1169),vt=a(19680),wt=a(35915),_t=a(69058),Ct=a(80262),kt=a(93444),Lt=(a(59313),function(){var t=this,e=t._self._c;return e("b-row",[e("b-col",{attrs:{md:"12"}},[e("Source",{staticClass:"float-right",attrs:{title:t.title,stacUrl:t.url,stac:t.data}}),e("h1",[t.icon?[e("img",{staticClass:"icon mr-2",attrs:{src:t.icon.href,alt:t.icon.title,title:t.icon.title}})]:t._e(),e("span",{staticClass:"title"},[t._v(t._s(t.title))])],2),t.url||t.isSearchPage()?e("p",{staticClass:"lead"},[t.containerLink?e("i18n",{staticClass:"in mr-3",attrs:{tag:"span",path:"in"},scopedSlots:t._u([{key:"catalog",fn:function(){return[e("StacLink",{attrs:{data:t.containerLink}})]},proxy:!0}],null,!1,1458487365)}):t._e(),e("b-button-group",[t.parentLink?e("b-button",{attrs:{to:t.toBrowserPath(t.parentLink.href),title:t.parentLinkTitle,variant:"outline-primary",size:"sm"}},[e("b-icon-arrow-90deg-up"),t._v(" "),e("span",{staticClass:"button-label prio"},[t._v(t._s(t.$t("goToParent.label")))])],1):t._e(),t.collectionLink?e("b-button",{attrs:{to:t.toBrowserPath(t.collectionLink.href),title:t.collectionLinkTitle,variant:"outline-primary",size:"sm"}},[e("b-icon-folder-symlink"),t._v(" "),e("span",{staticClass:"button-label prio"},[t._v(t._s(t.$t("goToCollection.label")))])],1):t._e(),e("b-button",{directives:[{name:"b-toggle",rawName:"v-b-toggle.sidebar",modifiers:{sidebar:!0}}],attrs:{variant:"outline-primary",size:"sm",title:t.$t("browse")},on:{click:function(e){return t.$emit("enableSidebar")}}},[e("b-icon-book"),t._v(" "),e("span",{staticClass:"button-label prio"},[t._v(t._s(t.$t("browse")))])],1),t.canSearch?e("b-button",{attrs:{variant:"outline-primary",size:"sm",to:t.searchBrowserLink,title:t.$t("search.title"),pressed:t.isSearchPage()}},[e("b-icon-search"),t._v(" "),e("span",{staticClass:"button-label prio"},[t._v(t._s(t.$t("search.title")))])],1):t._e(),t.authConfig?e("b-button",{attrs:{variant:"outline-primary",size:"sm",title:t.$t("authentication.button.title")},on:{click:t.auth}},[t.authData?[e("b-icon-lock"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("authentication.button.authenticated")))])]:[e("b-icon-unlock"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("authentication.button.authenticate")))])]],2):t._e()],1)],1):t._e()],1)],1)}),xt=[],Tt=function(){var t=this,e=t._self._c;return e("div",{staticClass:"share mt-1"},[e("b-button-group",[t.showRoot?e("b-button",{attrs:{size:"sm",variant:"outline-primary",id:"popover-root-btn"}},[e("b-icon-box"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.rootTitle))])],1):t._e(),t.stacUrl?e("b-button",{attrs:{size:"sm",variant:"outline-primary",id:"popover-link-btn",title:t.$t("source.detailsAboutSource")}},[e("b-icon-link"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("source.label")))])],1):t._e(),e("b-button",{attrs:{size:"sm",variant:"outline-primary",id:"popover-share-btn",title:t.$t("source.share.withOthers")}},[e("b-icon-share"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("source.share.label")))])],1),e("b-dropdown",{attrs:{size:"sm",variant:"outline-primary",right:"",title:t.$t("source.language.switch")},scopedSlots:t._u([{key:"button-content",fn:function(){return[e("b-icon-flag"),t._v(" "),e("span",{staticClass:"button-label"},[t._v(t._s(t.$t("source.language.label",{currentLanguage:t.currentLanguage})))])]},proxy:!0}])},t._l(t.languages,(function(a){return e("b-dropdown-item",{key:a.code,staticClass:"lang-item",on:{click:function(e){return t.switchLocale({locale:a.code,userSelected:!0})}}},[t.locale===a.code?e("b-icon-check"):e("b-icon-blank"),e("span",{staticClass:"title"},[t._v(" "+t._s(a.native)+" "),a.global&&a.global!==a.native?[t._v(" / "+t._s(a.global))]:t._e()],2),!t.supportsLanguageExt||a.ui&&a.data?t._e():e("b-icon-exclamation-triangle",{staticClass:"ml-2",attrs:{title:a.ui?t.$t("source.language.onlyUI"):t.$t("source.language.onlyData")}})],1)})),1)],1),t.showRoot?e("b-popover",{attrs:{id:"popover-root",target:"popover-root-btn",triggers:"focus",placement:"bottom",container:"stac-browser",title:t.rootTitle}},[e("RootStats")],1):t._e(),t.stacUrl?e("b-popover",{attrs:{id:"popover-link",target:"popover-link-btn",triggers:"focus",placement:"bottom",container:"stac-browser",title:t.$t("source.title")},on:{show:t.validate}},[t.stac?[t.stacId?e("b-row",{staticClass:"stac-id"},[e("b-col",{attrs:{cols:"4"}},[t._v(t._s(t.$t("source.id")))]),e("b-col",[e("code",[t._v(t._s(t.stacId))]),e("CopyButton",{staticClass:"ml-2",attrs:{copyText:t.stacId,"button-props":{size:"sm"},variant:"primary"}})],1)],1):t._e(),t.stacVersion?e("b-row",{staticClass:"stac-version"},[e("b-col",{attrs:{cols:"4"}},[t._v(t._s(t.$t("source.stacVersion")))]),e("b-col",[t._v(t._s(t.stacVersion))])],1):t._e(),t.canValidate?e("b-row",{staticClass:"validation"},[e("b-col",{attrs:{cols:"4"}},[t._v(t._s(t.$t("source.valid")))]),e("b-col",[null===t.valid?e("b-spinner",{attrs:{label:t.$t("source.validating"),small:""}}):!0===t.valid?[t._v("✔️")]:!1===t.valid?[t._v("❌")]:[t._v(t._s(t.$t("source.validationNA")))]],2)],1):t._e(),e("hr")]:t._e(),e("Url",{attrs:{id:"stacUrl",url:t.stacUrl,label:t.$t("source.locatedAt")}})],2):t._e(),e("b-popover",{attrs:{id:"popover-share",target:"popover-share-btn",triggers:"focus",placement:"bottom",container:"stac-browser",title:t.$t("source.share.title")}},[e("Url",{attrs:{id:"browserUrl",url:t.browserUrl(),label:t.$t("source.share.sharePageWithOthers"),open:!1}}),e("hr"),e("b-button",{staticClass:"twitter mr-1",attrs:{href:t.twitterUrl}},[e("b-icon-twitter"),t._v(" "+t._s(t.$t("source.share.twitter")))],1),e("b-button",{attrs:{variant:"dark",href:t.mailTo}},[e("b-icon-envelope"),t._v(" "+t._s(t.$t("source.share.email")))],1)],1)],1)},St=[],Ot=a(15378),$t=a(9656),jt=a(82948),It=a(30278),Pt=function(){var t=this,e=t._self._c;return e("b-form-group",{attrs:{label:t.label,"label-for":t.id}},[e("b-input-group",{attrs:{size:"sm"}},[e("b-form-input",{ref:"input",attrs:{id:t.id,value:t.url,readonly:""}}),e("b-input-group-append",[e("CopyButton",{attrs:{copyText:t.url,variant:"primary"}}),t.open?e("b-button",{attrs:{href:t.url,target:"_blank",variant:"primary",title:t.$t("open")}},[e("b-icon-arrow-up-right-square")],1):t._e()],1)],1)],1)},Bt=[],Ft=a(69771),Mt=a(19115),Et=a(89576),Ut=a(16167),Dt={name:"Share",components:{BFormGroup:Ft.a,BFormInput:Mt.b,BIconArrowUpRightSquare:jt.xur,BInputGroup:Et.Y,BInputGroupAppend:Ut.G,CopyButton:()=>Promise.resolve().then(a.bind(a,22356))},props:{id:{type:String,required:!0},url:{type:String,required:!0},label:{type:String,required:!0},open:{type:Boolean,default:!0}}},qt=Dt,Rt=(0,m.A)(qt,Pt,Bt,!1,null,"74684ede",null),zt=Rt.exports,Wt=a(22356);const Nt="https://stac-extensions.github.io/language/v1.*/schema.json";var Qt={name:"Source",components:{BDropdown:Ot.U,BDropdownItem:$t.H,BIconBlank:jt.ufk,BIconBox:jt.H$j,BIconCheck:jt.GSz,BIconEnvelope:jt.EXn,BIconExclamationTriangle:jt.T12,BIconFlag:jt.c_U,BIconLink:jt.IfX,BIconShare:jt.v6r,BIconTwitter:jt.FrH,BPopover:It.u,RootStats:()=>a.e(143).then(a.bind(a,40143)),Url:zt,CopyButton:Wt["default"]},props:{title:{type:String,required:!0},stacUrl:{type:String,default:null},stac:{type:Object,default:null}},computed:{...(0,o.aH)(["conformsTo","dataLanguages","locale","privateQueryParameters","supportedLocales","stacLint","stacProxyUrl","uiLanguage","valid"]),...(0,o.L8)(["supportsExtension","root"]),stacVersion(){var t;return null===(t=this.stac)||void 0===t?void 0:t.stac_version},stacId(){var t;return null===(t=this.stac)||void 0===t?void 0:t.id},showRoot(){return!!this.root&&(Array.isArray(this.conformsTo)&&this.conformsTo.length>0||k.Ay.isObject(this.root["stats:collections"])||k.Ay.isObject(this.root["stats:catalogs"])||k.Ay.isObject(this.root["stats:items"]))},rootTitle(){return Array.isArray(this.conformsTo)&&this.conformsTo.length>0?this.$t("index.api"):this.$t("index.catalog")},currentLanguage(){let t=this.languages.find((t=>t.code===this.locale));return t?t.native:"-"},canValidate(){if(!this.stacLint||"string"!==typeof this.stacUrl)return!1;if(k.Ay.size(this.privateQueryParameters)>0)return!1;if(Array.isArray(this.stacProxyUrl))return!1;let t=$()(this.stacUrl),e=t.hostname().toLowerCase();return"localhost"!==e&&!e.startsWith("127.")&&"::1"!==e},message(){return this.$t("source.share.message",{title:this.title,url:this.browserUrl()})},twitterUrl(){let t=encodeURIComponent(this.message);return`https://twitter.com/intent/tweet?text=${t}`},mailTo(){let t=encodeURIComponent(this.title),e=encodeURIComponent(this.message);return`mailto:?subject=${t}&body=${e}`},supportsLanguageExt(){return this.supportsExtension(Nt)},languages(){let t=[];for(let e of this.supportedLocales)t.push({code:e,native:this.$t(`languages.${e}.native`),global:this.$t(`languages.${e}.global`),ui:!0});for(let e of this.dataLanguages){if(!k.Ay.isObject(e)||!e.code||this.supportedLocales.includes(e.code))continue;let a={code:e.code};a.native=e.name||e.alternate||e.code,a.global=e.alternate||e.name||e.code,a.data=!0,t.push(a)}if(this.supportsExtension(Nt)){const e=(0,ht.E0)(this.supportedLocales),a=(0,ht.E0)(this.dataLanguages.map((t=>t.code)));for(let s of t)s.ui||(s.ui=Boolean((0,ht.f5)(e,s.code,null))),s.data||(s.data=Boolean((0,ht.f5)(a,s.code,null)))}return t.sort(((t,e)=>t.global.localeCompare(e.global,this.uiLanguage)))}},methods:{...(0,o.i0)(["switchLocale"]),async validate(){this.canValidate&&await this.$store.dispatch("validate",this.stacUrl)},browserUrl(){return window.location.toString()}}},Vt=Qt,Ht=(0,m.A)(Vt,Tt,St,!1,null,"714ef03c",null),Gt=Ht.exports,Xt=a(58581),Jt={name:"StacHeader",components:{BIconArrow90degUp:jt.JK4,BIconBook:jt.VOl,BIconFolderSymlink:jt.P_X,BIconSearch:jt.S8S,BIconLock:jt.D8r,BIconUnlock:jt.a_V,StacLink:Xt["default"],Source:Gt},computed:{...(0,o.aH)(["allowSelectCatalog","authConfig","authData","catalogUrl","data","url","title"]),...(0,o.L8)(["canSearch","root","parentLink","collectionLink","toBrowserPath"]),collectionLinkTitle(){return this.collectionLink&&k.Ay.hasText(this.collectionLink.title)?this.$t("goToCollection.descriptionWithTitle",this.collectionLink):this.$t("goToCollection.description")},parentLinkTitle(){return this.parentLink&&k.Ay.hasText(this.parentLink.title)?this.$t("goToParent.descriptionWithTitle",this.parentLink):this.$t("goToParent.description")},icon(){if(this.data instanceof S.A){let t=this.data.getIcons();if(t.length>0)return t[0]}return null},searchBrowserLink(){if(!this.canSearch)return null;let t;return this.data instanceof S.A&&!this.data.equals(this.root)&&(t=this.data.getSearchLink()),t?`/search${this.data.getBrowserPath()}`:this.root&&this.allowSelectCatalog?`/search${this.root.getBrowserPath()}`:"/search"},containerLink(){return this.catalogUrl&&this.url===this.catalogUrl?null:this.root?k.Ay.equalUrl(this.root.getAbsoluteUrl(),this.url)?null:{href:this.root.getAbsoluteUrl(),rel:"root",title:S.A.getDisplayTitle(this.root)}:this.collectionLink||this.parentLink}},methods:{isSearchPage(){return"search"===this.$router.currentRoute.name},auth(){this.$store.commit("requestAuth",(()=>this.$store.dispatch("load",{url:this.url,loadApi:!0,show:!0,force:!0})))}}},Kt=Jt,Yt=(0,m.A)(Kt,Lt,xt,!1,null,"e9cfbf72",null),Zt=Yt.exports,te=a(14540),ee=a.n(te);s.Ay.use(gt.q),s.Ay.use(bt.p),s.Ay.use(yt.sG),s.Ay.use(At.z),s.Ay.use(vt.qc),s.Ay.use(wt.CG),s.Ay.use(_t.z),s.Ay.directive("b-toggle",Ct.z),s.Ay.directive("b-visible",kt.p),s.Ay.use(n.Ay);const ae=new n.Ay({mode:l.A.historyMode,base:l.A.pathPrefix,routes:lt(l.A)});s.Ay.use(o.Ay);const se=mt(l.A,ae);let re={},ie={};for(let de in l.A)re[de]={default:["object","function"].includes(typeof l.A[de])?()=>l.A[de]:l.A[de]},ie[de]={immediate:!0,handler:function(t){this.$store.commit("config",{[de]:t})}};var ne={name:"StacBrowser",router:ae,store:se,components:{Authentication:()=>a.e(5788).then(a.bind(a,15788)),ErrorAlert:b,Sidebar:()=>a.e(8940).then(a.bind(a,38940)),StacHeader:Zt},props:{...re},data(){return{sidebar:!1,error:null,onDataLoaded:null}},computed:{...(0,o.aH)(["allowSelectCatalog","data","dataLanguage","description","doAuth","globalError","stateQueryParameters","title","uiLanguage","url"]),...(0,o.aH)({catalogUrlFromVueX:"catalogUrl",detectLocaleFromBrowserFromVueX:"detectLocaleFromBrowser",fallbackLocaleFromVueX:"fallbackLocale",supportedLocalesFromVueX:"supportedLocales",storeLocaleFromVueX:"storeLocale"}),...(0,o.L8)(["displayCatalogTitle","fromBrowserPath","isExternalUrl","root","supportsConformance","toBrowserPath"]),browserVersion(){return"3.1.0"}},watch:{...ie,title(t){document.title=t},description(t){let e=document.getElementById("meta-description");e&&e.setAttribute("content",k.Ay.summarizeMd(t,200))},uiLanguage:{immediate:!0,async handler(t){t&&(ee().locales=[t],ee().translate=j._,await(0,j.fH)(t),this.$root.$i18n.locale=t,document.documentElement.setAttribute("lang",t))}},dataLanguage:{immediate:!0,async handler(t){if(t&&this.data instanceof S.A){let e=this.data.getLocaleLink(t);if(e){let t=Object.assign({},this.stateQueryParameters);this.$router.push(this.toBrowserPath(e.href)),this.$store.commit("state",t)}else if(this.supportsConformance(j.Aj)){let t=this.url;this.$store.commit("resetCatalog",!0),await this.$store.dispatch("load",{url:t,loadApi:!0,show:!0})}}}},catalogUrlFromVueX(t){t&&this.$store.dispatch("load",{url:t,loadApi:!0})},stateQueryParameters:{deep:!0,handler(){let t={};for(const[e,a]of Object.entries(this.$route.query))e.startsWith(".")||(t[e]=a);for(const[e,a]of Object.entries(this.stateQueryParameters)){let s=`.${e}`;Array.isArray(a)?a.length>0&&(t[s]=a.join(",")):null!==a&&(t[s]=a)}this.$router.replace({query:t}).catch((t=>{if(!n.Ay.isNavigationFailure(t,n.Ay.NavigationFailureType.duplicated))throw Error(t)}))}},root(t,e){const a=["apiCatalogPriority","authConfig","cardViewMode","cardViewSort","crossOriginMedia","defaultThumbnailSize","displayGeoTiffByDefault","showThumbnailsAsAssets","stacLint"];let s=!t||e&&k.Ay.isObject(e["stac_browser"]),r=t&&k.Ay.isObject(t["stac_browser"]);for(let i of a){let e;s&&(e=l.A[i]),r&&"undefined"!==typeof t["stac_browser"][i]&&(e=t["stac_browser"][i]),("stacLint"!==i||l.A.stacLint)&&("undefined"!==typeof e&&this.$store.commit("config",{[i]:e}))}},data(t){this.onDataLoaded&&t instanceof S.A&&this.onDataLoaded()}},created(){this.$router.onReady((()=>{this.detectLocale(),this.parseQuery(this.$route)})),this.$router.afterEach(((t,e)=>{if(t.path===e.path)return;let a="resetPage";if(this.allowSelectCatalog&&t.path){let e=this.fromBrowserPath(t.path);this.isExternalUrl(e)&&(a="resetCatalog")}this.$store.commit(a),this.parseQuery(t)}))},mounted(){this.$root.$on("error",this.showError),setInterval((()=>this.$store.dispatch("loadBackground",3)),200)},methods:{...(0,o.i0)(["switchLocale"]),detectLocale(){let t;if(this.storeLocaleFromVueX)try{t=window.localStorage.getItem("locale")}catch(e){console.error(e)}if(!t&&this.detectLocaleFromBrowserFromVueX&&Array.isArray(navigator.languages)){const e=(0,ht.E0)(this.supportedLocalesFromVueX);for(let a of navigator.languages){const s=(0,ht.f5)(e,a,null);if(s){t=s;break}}}t&&this.supportedLocalesFromVueX.includes(t)&&(this.switchLocale({locale:t}),this.data||(this.onDataLoaded=()=>{this.switchLocale({locale:t}),this.onDataLoaded=null}))},parseQuery(t){var e;let a={};if("history"===this.historyMode){let e=$()(t.hash.replace(/^#/,""));a=e.query(!0)}let s=Object.assign({},t.query,a),r={};for(let i in s){let t=s[i];if(i.startsWith("~"))r.private=k.Ay.isObject(r.private)?r.private:{},r.private[i.substr(1)]=t,delete s[i];else if(i.startsWith(".")){let e=i.substr(1);r.state=k.Ay.isObject(r.state)?r.state:{},Array.isArray(this.stateQueryParameters[e])&&!Array.isArray(t)&&(t=t.split(",")),r.state[e]=t}else k.Ay.isObject(r.localRequest)||(r.localRequest={}),r.localRequest[i]=t}if(k.Ay.size(r)>0)for(let i in r)for(let t in r[i])this.$store.commit("setQueryParameter",{type:i,key:t,value:r[i][t]});null!==r&&void 0!==r&&null!==(e=r.state)&&void 0!==e&&e.language&&this.switchLocale({locale:r.state.language}),k.Ay.size(r.private)>0&&this.$router.replace({query:s})},showError(t,e){this.$store.commit("showGlobalError",{error:t,message:e})},hideError(){this.$store.commit("showGlobalError",null)}}},oe=ne,le=(0,m.A)(oe,r,i,!1,null,null,null),ce=le.exports;function ue(){return(0,j.Qm)().then((()=>new s.Ay({i18n:j.Ay,render:t=>t(ce)}).$mount("#stac-browser")))}s.Ay.config.productionTip=!1,ue()},31831:function(t,e,a){"use strict";a(44114);var s=a(2566),r=a(71321),i=a.n(r),n=a(39071);let o=0;class l{constructor(t,e,a,s=!0){this._id=o++,this._url=e,this._path=a,this._apiChildrenListeners={},this._incomplete=!1,this._apiChildren={list:[],prev:!1,next:!1},s&&("FeatureCollection"===t.type?t.features=t.features.map((t=>i().item(t,!1))):t=i().stac(t,!1));for(let r in t)"undefined"===typeof this[r]&&(this[r]=t[r])}isPotentiallyIncomplete(){return this._incomplete}markPotentiallyIncomplete(){this._incomplete=!0}isItem(){return"Feature"===this.type}isCatalog(){return"Catalog"===this.type}isCatalogLike(){return this.isCatalog()||this.isCollection()}isCollection(){return"Collection"===this.type}isItemCollection(){return"FeatureCollection"===this.type}hasApiData(){return this._apiChildren.list.length>0}setApiDataListener(t,e=null){"function"===typeof e?this._apiChildrenListeners[t]=e:delete this._apiChildrenListeners[t]}setApiData(t,e=null,a=null){a&&(this._apiChildren.prev=a),e&&(this._apiChildren.next=e),this._apiChildren.list=t;for(let r in this._apiChildrenListeners)try{this._apiChildrenListeners[r](this._apiChildren)}catch(s){console.error(s)}}getFileFormats(){let t=[];return(this.isItem()||this.isCollection())&&s.Ay.isObject(this.assets)&&(t=t.concat(Object.values(this.assets))),this.isCollection()&&s.Ay.isObject(this.item_assets)&&(t=t.concat(Object.values(this.item_assets))),t.filter((t=>Array.isArray(t.roles)&&t.roles.includes("data")&&"string"===typeof t.type)).map((t=>t.type)).filter(((t,e,a)=>a.indexOf(t)===e))}getChildren(t=null){if(!this.isCatalogLike())return[];let e=!t||"collections"===t,a=!t||"childs"===t,s=[];return e&&this._apiChildren.prev&&s.push(this._apiChildren.prev),e&&this._apiChildren.list.length>0&&(s=this._apiChildren.list.slice(0)),a&&(s=l.addMissingChildren(s,this).concat(this.getLinksWithRels(["item"]))),e&&this._apiChildren.next&&s.push(this._apiChildren.next),s}static addMissingChildren(t,e){let a=e.getStacLinksWithRel("child").filter((a=>{let r=s.Ay.toAbsolute(a.href,e.getAbsoluteUrl());return!t.find((t=>t.getAbsoluteUrl()===r))}));return a.concat(t)}getSearchLink(){let t=s.Ay.getLinksWithRels(this.links,["search"]).filter((t=>s.Ay.isMediaType(t.type,s.oV))).map((t=>Object.assign({},t,{href:s.Ay.toAbsolute(t.href,this._url)}))),e=t.find((t=>s.Ay.hasText(t.method)&&"POST"===t.method.toUpperCase()));return e||t[0]||null}getApiCollectionsLink(){return this.getStacLinkWithRel("data")}getApiItemsLink(){return this.getStacLinkWithRel("items")}getMetadata(t){return this.isItem()?this.properties[t]:this.isCatalogLike()?this[t]:null}getBrowserPath(){return this._path}getAbsoluteUrl(){return this._url}getLocaleLink(t,e=null){let a,r=this.getStacLinksWithRel("alternate").filter((t=>s.Ay.hasText(t.hreflang)));a=Array.isArray(this.languages)?this.languages.map((t=>t.code)):r.map((t=>t.hreflang));let i=(0,n.f5)(a,t,e);return r.find((t=>t.hreflang===i))||null}getStacLinksWithRel(t,e=!0){return s.Ay.getLinksWithRels(this.links,[t]).filter((t=>s.Ay.isStacMediaType(t.type,e)))}getStacLinkWithRel(t,e=!0){const a=this.getStacLinksWithRel(t,e);return a.length>0?a[0]:null}getLinkWithRel(t){return s.Ay.getLinkWithRel(this.links,t)}getLinksWithRels(t){return s.Ay.getLinksWithRels(this.links,t)}getLinksWithOtherRels(t){return s.Ay.getLinksWithOtherRels(this.links,t)}getAssetsWithRoles(t){let e=[];if(s.Ay.isObject(this.assets))for(let a in this.assets){let r=this.assets[a];s.Ay.isObject(r)&&"string"===typeof r.href&&Array.isArray(r.roles)&&r.roles.find((e=>t.includes(e)))&&e.push(r)}return e}static getDisplayTitle(t,e=null){Array.isArray(t)||(t=[t]);let a=t.find((t=>t instanceof l)),r=t.find((t=>s.Ay.isObject(t)&&!(t instanceof l)));return a&&s.Ay.hasText(a.getTitle())?a.getTitle():r&&s.Ay.hasText(r.title)?r.title:a&&s.Ay.hasText(a.id)?a.id:s.Ay.hasText(e)?e:a?s.Ay.titleForHref(a.getAbsoluteUrl(),!0):r&&s.Ay.hasText(r.href)?s.Ay.titleForHref(r.href,!0):"Untitled"}getTitle(){return this.getMetadata("title")}_linkToAbsolute(t){return Object.assign({},t,{href:s.Ay.toAbsolute(t.href,this.getAbsoluteUrl())})}getIcons(){return this.getLinksWithRels(["icon"]).filter((t=>s.Ay.canBrowserDisplayImage(t))).map((t=>this._linkToAbsolute(t)))}getThumbnails(t=!1,e=null){let a=this.getAssetsWithRoles(["thumbnail","overview"]);if(0===a.length&&(a=this.getLinksWithRels(["preview"])),0===a.length&&s.Ay.isObject(this.assets)&&s.Ay.isObject(this.assets.thumbnail)&&(a=[this.assets.thumbnail]),t&&(a=a.filter((t=>s.Ay.canBrowserDisplayImage(t)))),e&&a.length>1){let t=t=>t.roles.includes(e);a=a.filter(t).concat(a.filter((e=>!t(e))))}return a.map((t=>this._linkToAbsolute(t)))}equals(t){return!!s.Ay.isObject(t)&&(this===t||this.id===t.id&&this.type==t.type)}}e.A=l},59203:function(t,e,a){"use strict";a.d(e,{Bv:function(){return n},Eg:function(){return r},ZQ:function(){return i},dL:function(){return l},ol:function(){return o}});const s=["child","collection","item","parent","root","self"],r=["first","last","next","prev","previous"],i=["queryables","http://www.opengis.net/def/rel/ogc/1.0/queryables","ogc-rel:queryables"],n=["canonical","related","derived_from","latest-version","predecessor-version","successor-version","source","alternate"].concat(s).concat(r),o=["conformance","data","items","search","icon","license"].concat(s).concat(r).concat(i),l="http://www.opengis.net/def/rel/ogc/1.0/"},33484:function(t,e,a){"use strict";a.d(e,{FF:function(){return l},HD:function(){return h},Pj:function(){return d},Rh:function(){return o},mA:function(){return p},rM:function(){return c},sd:function(){return u}});var s=a(91250),r=a(84193),i=a.n(r),n=a(2566);class o{constructor(t=!1,e=!1){this.show=Boolean(t),this.loadApi=Boolean(e)}}async function l(t,e){let a,r={"Accept-Language":t.getters.acceptedLanguages};if(n.Ay.isObject(e)){let s="string"===typeof e.method?e.method.toLowerCase():"get",i=t.getters.getRequestUrl(e.href);n.Ay.hasText(e.type)&&(r.Accept=e.type),t.getters.isExternalUrl(i)||Object.assign(r,t.state.requestHeaders),n.Ay.isObject(e.headers)&&Object.assign(r,e.headers),a={method:s,url:i,headers:r,data:e.body}}else if("string"===typeof e){let s=t.getters.getRequestUrl(e);t.getters.isExternalUrl(s)||Object.assign(r,t.state.requestHeaders),a={method:"get",url:s,headers:r}}else a=e;return await(0,s.A)(a)}function c(t,e){return t instanceof i()&&(t=t.toString()),"string"===typeof t&&Array.isArray(e)?t.replace(e[1],e[0]):t}function u(t,e){return t instanceof i()&&(t=t.toString()),"string"===typeof t&&Array.isArray(e)?t.replace(e[0],e[1]):t}function d(t,e){return"function"===typeof t.preprocessSTAC&&(e=t.preprocessSTAC(e,t)),Object.freeze(e)}function h(t){var e;return[401,403].includes(null===t||void 0===t||null===(e=t.response)||void 0===e?void 0:e.status)}function p(t,e){if(0==n.Ay.size(e))return t;for(let a in e)t.hasQuery(a)||t.addQuery(a,e[a]);return t}},2566:function(t,e,a){"use strict";a.d(e,{Ay:function(){return A},C8:function(){return b},I5:function(){return m},Yq:function(){return u},df:function(){return g},fe:function(){return y},oV:function(){return c}});var s=a(84193),r=a.n(s),i=a(58481),n=a.n(i),o=a(59203);const l=["catalog","collection","item"],c="application/geo+json",u="application/schema+json",d=["application/json",c,"text/json"],h=["image/gif","image/jpg","image/jpeg","image/apng","image/png","image/webp"],p=["image/tiff; application=geotiff; profile=cloud-optimized","image/vnd.stac.geotiff; cloud-optimized=true"],f=["application/geotiff","image/tiff; application=geotiff","image/vnd.stac.geotiff"].concat(p),m=["http","https"],g=h.concat(f),b=g.concat([c]);class y extends Error{constructor(t){super(t)}}class A{static isObject(t){return"object"===typeof t&&t===Object(t)&&!Array.isArray(t)}static size(t){return"object"===typeof t&&null!==t?Array.isArray(t)?t.length:Object.keys(t).length:0}static isStacMediaType(t,e=!1){return A.isMediaType(t,d,e)}static isMediaType(t,e,a=!1){return Array.isArray(e)||(e=[e]),!(!a||t)||"string"===typeof t&&e.includes(t.toLowerCase())}static hasText(t){return"string"===typeof t&&t.length>0}static shortenTitle(t,e,a="…"){if(t.length<=e)return t;let s=a.length,r=e-s,i=Math.ceil(r/2),n=Math.floor(r/2);return t.substr(0,i)+a+t.substr(t.length-n)}static isGdalVfsUri(t){return"string"===typeof t&&t.startsWith("/vsi")&&!t.startsWith("/vsicurl/")}static toAbsolute(t,e,a=!0){return A.normalizeUri(t,e,!1,a)}static normalizeUri(t,e=null,a=!1,s=!0){"string"===typeof t&&t.startsWith("/vsicurl/")&&(t=t.replace(/^\/vsicurl\//,""));let i=r()(t);return e&&i.is("relative")&&!A.isGdalVfsUri(t)&&(i=i.absoluteTo(e)),i.normalize(),a&&(i.query(""),i.fragment("")),s?i.toString():i}static getLinkWithRel(t,e){return Array.isArray(t)?t.find((t=>A.isObject(t)&&A.hasText(t.href)&&t.rel===e)):null}static getLinksWithRels(t,e){return Array.isArray(t)?t.filter((t=>A.isObject(t)&&A.hasText(t.href)&&e.includes(t.rel))):[]}static getLinksWithOtherRels(t,e){return Array.isArray(t)?t.filter((t=>A.isObject(t)&&A.hasText(t.href)&&!e.includes(t.rel))):[]}static equalUrl(t,e){try{let a=r()(t),s=r()(e);return a.path(a.path().replace(/\/$/,"")),s.path(s.path().replace(/\/$/,"")),a.equals(s)}catch(a){return!1}}static summarizeMd(t,e=null){return A.hasText(t)?(t=n()(t).replaceAll(/[\r\n]+/g," "),e>0&&t.length>e&&(t=t.substr(0,e)+"…"),t):""}static scrollTo(t){if(t){var e=t.getBoundingClientRect(),a=e.top=0;a||t.scrollIntoView({behavior:"smooth",block:"start"})}}static dateFromUTC(t){if(t instanceof Date){const e=new Date(t),a=e.getTimezoneOffset();t=new Date(e.getTime()+60*a*1e3)}return t}static dateToUTC(t){if(t instanceof Date){const e=(new Date).getTimezoneOffset();return new Date(t.getTime()-60*e*1e3)}return t}static formatDatetimeQuery(t){return t.map((t=>t instanceof Date?t.toISOString():t||"..")).join("/")}static formatSortbyForPOST(t){const e={field:"",direction:"asc"};return t.startsWith("-")?(e.field=t.substring(1),e.direction="desc"):e.field=t,[e]}static getPaginationLinks(t){let e={};if(A.isObject(t)){let a=A.getLinksWithRels(t.links,o.Eg);for(let t of a){let a="previous"===t.rel?"prev":t.rel;e[a]=t}}return e}static addFiltersToLink(t,e={},a=null){let s=t=>null===t||"number"===typeof t&&!Number.isFinite(t)||"string"===typeof t&&0===t.length||"object"===typeof t&&0===A.size(t);if(e=A.isObject(e)?Object.assign({},e):{},"number"!==typeof e.limit&&"number"===typeof a&&(e.limit=a),A.hasText(t.method)&&"POST"===t.method.toUpperCase()){let a=Object.assign({},t.body);for(let t in e){let r=e[t];if(s(r))delete a[t];else{if("sortby"===t)r=A.formatSortbyForPOST(r);else if("datetime"===t)r=A.formatDatetimeQuery(r);else if("filters"===t){Object.assign(a,r.toJSON());continue}a[t]=r}}return Object.assign({},t,{body:a})}{let a=r()(t.href);for(let t in e){let r=e[t];if(s(r))a.removeQuery(t);else{if("datetime"===t)r=A.formatDatetimeQuery(r);else if("bbox"===t)r=r.join(",");else if("collections"===t||"ids"===t||"q"===t)r=r.join(",");else if("filters"===t){let t=r.toText();a.setQuery(t);continue}a.setQuery(t,r)}}return Object.assign({},t,{href:a.toString()})}}static titleForHref(t,e=!1){let a=r()(t),s=a.authority(),i=a.filename().replace(/^(.{1,})\.\w+$/,"$1"),n=a.directory().replace(/^\//,"");if(s&&i&&!e){let t=a.path().replace(/^\//,"");return"doi.org"===s&&t.startsWith("10.")?`DOI ${t}`:`${i} (${s})`}return i&&!l.includes(i)?i:s||(n||t)}static canBrowserDisplayImage(t){if("string"!==typeof t.href)return!1;let e=r()(t.href),a=e.protocol().toLowerCase();return!(a&&!m.includes(a))&&(!!h.includes(t.type)||(!!h.includes("image/"+e.suffix().toLowerCase())||!t.type))}static getValueFromObjectUsingPath(t,e){if(null!==t&&"object"===typeof t)return t=t[e[0]],"undefined"!==typeof t&&e.length>1?this.getValueFromObjectUsingPath(t,e.slice(1)):t}static search(t,e,a=!0){if("string"!==typeof t||0===t.length)return!1;if(A.isObject(e)?e=Object.values(e):"string"===typeof e&&(e=[e]),!Array.isArray(e))return!1;let s=/[\s.,;!&({[)}]]+/g;t=t.toLowerCase().split(s),e=e.filter((t=>"string"===typeof t)).join(" ").replace(s," ").toLowerCase();let r=a?"every":"some";return t[r]((t=>e.includes(t)))}static createLink(t,e){return{href:t,rel:e}}static supportsExtension(t,e){if(!A.isObject(t)||!Array.isArray(t["stac_extensions"]))return!1;let a=new RegExp("^"+e.replaceAll("*","[^/]+")+"$");return Boolean(t["stac_extensions"].find((t=>a.test(t))))}static mergeDeep(t,...e){if(!e.length)return t;const a=e.shift();if(A.isObject(t)&&A.isObject(a))for(const s in a)A.isObject(a[s])?(t[s]||Object.assign(t,{[s]:{}}),A.mergeDeep(t[s],a[s])):Object.assign(t,{[s]:a[s]});return A.mergeDeep(t,...e)}}},33545:function(t,e,a){var s={"./de-CH/default.js":[968,2963,968],"./de/default.js":[62862,2963,2862],"./en/default.js":[56886,6886],"./es/default.js":[89113,9113],"./fr-CA/default.js":[71082,6380,1082],"./fr-CH/default.js":[44545,6380,4545],"./fr/default.js":[1589,6380,1589],"./it-CH/default.js":[77638,3137,7638],"./it/default.js":[23108,3137,3108],"./ro/default.js":[63022,3022]};function r(t){if(!a.o(s,t))return Promise.resolve().then((function(){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}));var e=s[t],r=e[0];return Promise.all(e.slice(1).map(a.e)).then((function(){return a(r)}))}r.keys=function(){return Object.keys(s)},r.id=33545,t.exports=r},97991:function(t,e,a){var s={"./de-CH/config.json":79933,"./de/config.json":28417,"./en/config.json":11401,"./es/config.json":17212,"./fr-CA/config.json":20995,"./fr-CH/config.json":1738,"./fr/config.json":37748,"./it-CH/config.json":16835,"./it/config.json":37295,"./ro/config.json":99069};function r(t){var e=i(t);return a(e)}function i(t){if(!a.o(s,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return s[t]}r.keys=function(){return Object.keys(s)},r.resolve=i,t.exports=r,r.id=97991},79933:function(t){"use strict";t.exports=JSON.parse('{"native":"Deutsch (Schweiz)","global":"German (Switzerland)"}')},28417:function(t){"use strict";t.exports=JSON.parse('{"native":"Deutsch","global":"German"}')},11401:function(t){"use strict";t.exports=JSON.parse('{"native":"English","global":"English"}')},17212:function(t){"use strict";t.exports=JSON.parse('{"native":"Español","global":"Spanish"}')},20995:function(t){"use strict";t.exports=JSON.parse('{"native":"Français (Canada)","global":"French (Canada)"}')},1738:function(t){"use strict";t.exports=JSON.parse('{"native":"Français (Suisse)","global":"French (Switzerland)"}')},37748:function(t){"use strict";t.exports=JSON.parse('{"native":"Français","global":"French"}')},16835:function(t){"use strict";t.exports=JSON.parse('{"native":"Italiano (Svizzera)","global":"Italian (Switzerland)"}')},37295:function(t){"use strict";t.exports=JSON.parse('{"native":"Italiano","global":"Italian"}')},99069:function(t){"use strict";t.exports=JSON.parse('{"native":"Română","global":"Romanian"}')}},e={};function a(s){var r=e[s];if(void 0!==r)return r.exports;var i=e[s]={id:s,loaded:!1,exports:{}};return t[s].call(i.exports,i,i.exports,a),i.loaded=!0,i.exports}a.m=t,function(){var t=[];a.O=function(e,s,r,i){if(!s){var n=1/0;for(u=0;u=i)&&Object.keys(a.O).every((function(t){return a.O[t](s[l])}))?s.splice(l--,1):(o=!1,i0&&t[u-1][2]>i;u--)t[u]=t[u-1];t[u]=[s,r,i]}}(),function(){a.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return a.d(e,{a:e}),e}}(),function(){var t,e=Object.getPrototypeOf?function(t){return Object.getPrototypeOf(t)}:function(t){return t.__proto__};a.t=function(s,r){if(1&r&&(s=this(s)),8&r)return s;if("object"===typeof s&&s){if(4&r&&s.__esModule)return s;if(16&r&&"function"===typeof s.then)return s}var i=Object.create(null);a.r(i);var n={};t=t||[null,e({}),e([]),e(e)];for(var o=2&r&&s;"object"==typeof o&&!~t.indexOf(o);o=e(o))Object.getOwnPropertyNames(o).forEach((function(t){n[t]=function(){return s[t]}}));return n["default"]=function(){return s},a.d(i,n),i}}(),function(){a.d=function(t,e){for(var s in e)a.o(e,s)&&!a.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})}}(),function(){a.f={},a.e=function(t){return Promise.all(Object.keys(a.f).reduce((function(e,s){return a.f[s](t,e),e}),[]))}}(),function(){a.u=function(t){return"js/"+t+"."+{143:"7f6f3fa8",259:"96a9695f",505:"9b27e85d",537:"a7230af9",572:"0051ce9e",635:"6fc95d56",771:"0a499824",895:"9df2c567",967:"60693480",968:"45862efe",1082:"641a4ded",1089:"3afadfa9",1456:"455ff1ff",1472:"0cc6acab",1589:"8543b614",1802:"28366912",1865:"a89e4fd6",2059:"df97d1d1",2618:"309d922b",2862:"3784b33d",2929:"b8f4ed6f",2963:"c2488848",3022:"dc381752",3108:"72563005",3137:"56d1cb83",3481:"c36f57de",3627:"6fb10df8",3658:"65f83aa3",3951:"e4c88502",4312:"3a73a74c",4511:"dbf1a889",4527:"037219df",4545:"8da5bd53",4567:"692c4d29",4701:"a9cb1c23",4801:"7432db17",4870:"f1c787ea",5500:"1186a797",5583:"f40d6a97",5788:"3ae84088",5867:"2a0a5946",5876:"85c8fc65",6046:"5fb5794b",6147:"e54ddd79",6247:"68905912",6312:"5c2c4410",6380:"a68c3ec3",6750:"55927985",6763:"2bcd8962",6780:"af1d3dbd",6855:"2973c006",6866:"1bffa637",6886:"9fadbd28",6997:"bd003843",7003:"0b200468",7036:"31f16bc9",7286:"3f8bab3a",7341:"28b1f4a5",7457:"3c3e3e10",7638:"bc9ae5ec",7905:"d3bb665d",8648:"99f841e2",8940:"3ca6214b",9091:"9ee95dc6",9113:"a2a931ee",9363:"f665e83d",9637:"2eb45629",9738:"8d0014a9",9891:"22c48a69",9930:"3cdaaf38"}[t]+".js"}}(),function(){a.miniCssF=function(t){return"css/"+t+"."+{143:"ac728857",505:"0530e224",635:"f849b3f1",967:"72c8c98f",1472:"45781634",1802:"32ec082e",2059:"5747ca0b",2618:"6fac7cd8",4701:"4149415b",5788:"a94c9ca6",5867:"1c2a69b4",6312:"ea261962",6780:"0780c10b",6866:"081b4583",7341:"c9b64985",8648:"4b50bc38",8940:"f418fe25",9091:"45781634",9363:"6ad781a6"}[t]+".css"}}(),function(){a.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"===typeof window)return window}}()}(),function(){a.hmd=function(t){return t=Object.create(t),t.children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:function(){throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t}}(),function(){a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}}(),function(){var t={},e="@radiantearth/stac-browser:";a.l=function(s,r,i,n){if(t[s])t[s].push(r);else{var o,l;if(void 0!==i)for(var c=document.getElementsByTagName("script"),u=0;u 0 || _vm.data.description || _vm.data.deprecated))?_c('b-card-text',{staticClass:\"intro\"},[(_vm.data.deprecated)?_c('b-badge',{staticClass:\"mr-1 mt-1 deprecated\",attrs:{\"variant\":\"warning\"}},[_vm._v(_vm._s(_vm.$t('deprecated')))]):_vm._e(),_vm._l((_vm.fileFormats),function(format){return _c('b-badge',{key:format,staticClass:\"mr-1 mt-1 fileformat\",attrs:{\"variant\":\"secondary\"}},[_vm._v(_vm._s(_vm._f(\"formatMediaType\")(format)))])}),_vm._v(\" \"+_vm._s(_vm._f(\"summarize\")(_vm.data.description))+\" \")],2):_vm._e(),(_vm.temporalExtent)?_c('b-card-text',{staticClass:\"datetime\"},[_c('small',{domProps:{\"innerHTML\":_vm._s(_vm.temporalExtent)}})]):_vm._e()],1),_c('b-card-footer',[_vm._t(\"footer\",null,{\"data\":_vm.data})],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n \n \n 0 || data.description || data.deprecated)\" class=\"intro\">\n {{ $t('deprecated') }}\n {{ format | formatMediaType }}\n {{ data.description | summarize }}\n \n \n \n \n \n \n \n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Catalog.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Catalog.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Catalog.vue?vue&type=template&id=481d2869\"\nimport script from \"./Catalog.vue?vue&type=script&lang=js\"\nexport * from \"./Catalog.vue?vue&type=script&lang=js\"\nimport style0 from \"./Catalog.vue?vue&type=style&index=0&id=481d2869&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',{staticClass:\"catalogs mb-4\"},[_c('header',[_c('h2',{staticClass:\"title mr-2\"},[_vm._v(_vm._s(_vm.title))]),(_vm.catalogCount !== null)?_c('b-badge',{staticClass:\"mr-4\",attrs:{\"pill\":\"\",\"variant\":\"secondary\"}},[_vm._v(_vm._s(_vm.catalogCount))]):_vm._e(),_c('ViewButtons',{staticClass:\"mr-2\",model:{value:(_vm.view),callback:function ($$v) {_vm.view=$$v},expression:\"view\"}}),(_vm.isComplete && _vm.catalogs.length > 1)?_c('SortButtons',{model:{value:(_vm.sort),callback:function ($$v) {_vm.sort=$$v},expression:\"sort\"}}):_vm._e()],1),(_vm.isComplete && _vm.catalogs.length > 1)?_c('SearchBox',{staticClass:\"mt-1 mb-1\",attrs:{\"placeholder\":_vm.filterPlaceholder},model:{value:(_vm.searchTerm),callback:function ($$v) {_vm.searchTerm=$$v},expression:\"searchTerm\"}}):_vm._e(),(_vm.showPagination)?_c('Pagination',{ref:\"topPagination\",attrs:{\"pagination\":_vm.pagination,\"placement\":\"top\"},on:{\"paginate\":_vm.paginate}}):_vm._e(),(_vm.searchTerm && _vm.catalogView.length === 0)?_c('b-alert',{attrs:{\"variant\":\"warning\",\"show\":\"\"}},[_vm._v(_vm._s(_vm.$t('catalogs.noMatches')))]):_vm._e(),_c('section',{staticClass:\"list\"},[(_vm.loading)?_c('Loading',{attrs:{\"fill\":\"\",\"top\":\"\"}}):_vm._e(),_c(_vm.cardsComponent,_vm._b({tag:\"component\"},'component',_vm.cardsComponentProps,false),_vm._l((_vm.catalogView),function(catalog){return _c('Catalog',{key:catalog.href,attrs:{\"catalog\":catalog},scopedSlots:_vm._u([{key:\"footer\",fn:function({data}){return [_vm._t(\"catalogFooter\",null,{\"data\":data})]}}],null,true)})}),1)],1),(_vm.showPagination)?_c('Pagination',{attrs:{\"pagination\":_vm.pagination},on:{\"paginate\":_vm.paginate}}):(_vm.hasMore)?_c('b-button',{directives:[{name:\"b-visible\",rawName:\"v-b-visible.300\",value:(_vm.loadMore),expression:\"loadMore\",modifiers:{\"300\":true}}],attrs:{\"variant\":\"primary\"},on:{\"click\":_vm.loadMore}},[_vm._v(_vm._s(_vm.$t('catalogs.loadMore')))]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-button-group',{attrs:{\"title\":_vm.$t('view.title'),\"size\":\"sm\"}},[_c('b-button',{attrs:{\"title\":_vm.$t('view.tiles.title'),\"variant\":\"outline-primary\",\"pressed\":_vm.value === 'cards'},on:{\"click\":function($event){return _vm.toggle('cards')}}},[_c('b-icon-bricks'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('view.tiles.label')))])],1),_c('b-button',{attrs:{\"title\":_vm.$t('view.list.title'),\"variant\":\"outline-primary\",\"pressed\":_vm.value === 'list'},on:{\"click\":function($event){return _vm.toggle('list')}}},[_c('b-icon-list-task'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('view.list.label')))])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n {{ $t('view.tiles.label') }}\n \n \n {{ $t('view.list.label') }}\n \n \n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ViewButtons.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ViewButtons.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ViewButtons.vue?vue&type=template&id=6a51668d\"\nimport script from \"./ViewButtons.vue?vue&type=script&lang=js\"\nexport * from \"./ViewButtons.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import ViewButtons from './ViewButtons.vue';\n\nexport default {\n components: {\n ViewButtons\n },\n computed: {\n cardsComponent() {\n return (this.view === 'list') ? 'div' : 'b-card-group';\n },\n cardsComponentProps() {\n if (this.view === 'list') {\n return {\n class: [\n 'card-list'\n ]\n };\n }\n else {\n return {\n columns: true\n };\n }\n },\n view: {\n get() {\n return this.$store.state.cardViewMode;\n },\n set(cardViewMode) {\n this.$store.commit('config', { cardViewMode });\n }\n }\n }\n};","\n \n \n {{ title }}
\n {{ catalogCount }}\n \n 1\" v-model=\"sort\" />\n \n 1\" class=\"mt-1 mb-1\" v-model=\"searchTerm\" :placeholder=\"filterPlaceholder\" />\n \n {{ $t('catalogs.noMatches') }}\n \n \n \n \n \n \n \n \n \n \n \n {{ $t('catalogs.loadMore') }}\n \n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Catalogs.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Catalogs.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Catalogs.vue?vue&type=template&id=34dd9202\"\nimport script from \"./Catalogs.vue?vue&type=script&lang=js\"\nexport * from \"./Catalogs.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-button',_vm._b({staticClass:\"copy-button\",attrs:{\"variant\":_vm.copyColor,\"title\":_vm.$t('copy')},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.copy.apply(null, arguments)}}},'b-button',_vm.buttonProps,false),[_c(_vm.copyIcon,{tag:\"component\"}),_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CopyButton.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CopyButton.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./CopyButton.vue?vue&type=template&id=033681c8\"\nimport script from \"./CopyButton.vue?vue&type=script&lang=js\"\nexport * from \"./CopyButton.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"styled-description\",class:{compact: _vm.compact, inline: _vm.inline},domProps:{\"innerHTML\":_vm._s(_vm.markup(_vm.description))}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Description.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Description.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Description.vue?vue&type=template&id=77c4c56a\"\nimport script from \"./Description.vue?vue&type=script&lang=js\"\nexport * from \"./Description.vue?vue&type=script&lang=js\"\nimport style0 from \"./Description.vue?vue&type=style&index=0&id=77c4c56a&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-card',{directives:[{name:\"b-visible\",rawName:\"v-b-visible.400\",value:(_vm.load),expression:\"load\",modifiers:{\"400\":true}}],staticClass:\"item-card\",class:{queued: !_vm.data, deprecated: _vm.isDeprecated, description: _vm.hasDescription},attrs:{\"no-body\":\"\"}},[(_vm.hasImage)?_c('b-card-img-lazy',_vm._b({staticClass:\"thumbnail\",attrs:{\"offset\":\"200\"}},'b-card-img-lazy',_vm.thumbnail,false)):_vm._e(),_c('b-card-body',[_c('b-card-title',[_c('StacLink',{staticClass:\"stretched-link\",attrs:{\"data\":[_vm.data, _vm.item]}})],1),(_vm.fileFormats.length > 0 || _vm.hasDescription || _vm.isDeprecated)?_c('b-card-text',{staticClass:\"intro\"},[(_vm.isDeprecated)?_c('b-badge',{staticClass:\"mr-1 mt-1 deprecated\",attrs:{\"variant\":\"warning\"}},[_vm._v(_vm._s(_vm.$t('deprecated')))]):_vm._e(),_vm._l((_vm.fileFormats),function(format){return _c('b-badge',{key:format,staticClass:\"mr-1 mt-1 fileformat\",attrs:{\"variant\":\"secondary\"}},[_vm._v(_vm._s(_vm._f(\"formatMediaType\")(format)))])}),(_vm.hasDescription)?[_vm._v(_vm._s(_vm._f(\"summarize\")(_vm.data.properties.description)))]:_vm._e()],2):_vm._e(),_c('b-card-text',[_c('small',{staticClass:\"text-muted\"},[(_vm.extent)?[_vm._v(_vm._s(_vm._f(\"formatTemporalExtent\")(_vm.extent)))]:(_vm.data && _vm.data.properties.datetime)?[_vm._v(_vm._s(_vm._f(\"formatTimestamp\")(_vm.data.properties.datetime)))]:[_vm._v(_vm._s(_vm.$t('items.noTime')))]],2)])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n \n \n 0 || hasDescription || isDeprecated\" class=\"intro\">\n {{ $t('deprecated') }}\n {{ format | formatMediaType }}\n {{ data.properties.description | summarize }}\n \n \n \n {{ extent | formatTemporalExtent }}\n {{ data.properties.datetime | formatTimestamp }}\n {{ $t('items.noTime') }}\n \n \n \n \n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Item.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Item.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Item.vue?vue&type=template&id=038776d6\"\nimport script from \"./Item.vue?vue&type=script&lang=js\"\nexport * from \"./Item.vue?vue&type=script&lang=js\"\nimport style0 from \"./Item.vue?vue&type=style&index=0&id=038776d6&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',{staticClass:\"items mb-4\"},[_c('header',[_c('h2',{staticClass:\"title mr-2\"},[_vm._v(_vm._s(_vm.$tc('stacItem', _vm.items.length )))]),(_vm.itemCount !== null)?_c('b-badge',{staticClass:\"mr-4\",attrs:{\"pill\":\"\",\"variant\":\"secondary\"}},[_vm._v(_vm._s(_vm.itemCount))]):_vm._e(),(!_vm.api && _vm.items.length > 1)?_c('SortButtons',{model:{value:(_vm.sort),callback:function ($$v) {_vm.sort=$$v},expression:\"sort\"}}):_vm._e()],1),(_vm.showPagination)?_c('Pagination',{ref:\"topPagination\",attrs:{\"pagination\":_vm.pagination,\"placement\":\"top\"},on:{\"paginate\":_vm.paginate}}):_vm._e(),(_vm.allowFilter)?[(_vm.api)?_c('b-button',{directives:[{name:\"b-toggle\",rawName:\"v-b-toggle.itemFilter\",modifiers:{\"itemFilter\":true}}],staticClass:\"mb-4 mt-2\",class:{'ml-3': _vm.showPagination},attrs:{\"variant\":_vm.hasFilters && !_vm.filtersOpen ? 'primary' : 'outline-primary'}},[_c('b-icon-search'),_vm._v(\" \"+_vm._s(_vm.filtersOpen ? _vm.$t('items.hideFilter') : _vm.$t('items.showFilter'))+\" \"),(_vm.hasFilters && !_vm.filtersOpen)?_c('b-badge',{attrs:{\"variant\":\"dark\"}},[_vm._v(_vm._s(_vm.filterCount))]):_vm._e()],1):_vm._e(),_c('b-collapse',{attrs:{\"id\":\"itemFilter\"},model:{value:(_vm.filtersOpen),callback:function ($$v) {_vm.filtersOpen=$$v},expression:\"filtersOpen\"}},[_c('SearchFilter',{attrs:{\"type\":\"Items\",\"title\":_vm.$t('items.filter'),\"parent\":_vm.stac,\"value\":_vm.apiFilters},on:{\"input\":_vm.emitFilter}})],1)]:_vm._e(),_c('section',{staticClass:\"list\"},[(_vm.loading)?_c('Loading',{attrs:{\"fill\":\"\",\"top\":\"\"}}):_vm._e(),(_vm.chunkedItems.length > 0)?_c('b-card-group',{attrs:{\"columns\":\"\"}},_vm._l((_vm.chunkedItems),function(item){return _c('Item',{key:item.href,attrs:{\"item\":item}})}),1):_c('b-alert',{attrs:{\"variant\":_vm.hasFilters ? 'warning' : 'info',\"show\":\"\"}},[(_vm.hasFilters)?[_vm._v(_vm._s(_vm.$t('search.noItemsFound')))]:[_vm._v(_vm._s(_vm.$t('items.noneAvailableForCollection')))]],2)],1),(_vm.showPagination)?_c('Pagination',{attrs:{\"pagination\":_vm.pagination},on:{\"paginate\":_vm.paginate}}):(_vm.hasMore)?_c('b-button',{directives:[{name:\"b-visible\",rawName:\"v-b-visible.300\",value:(_vm.showMore),expression:\"showMore\",modifiers:{\"300\":true}}],attrs:{\"variant\":\"primary\"},on:{\"click\":_vm.showMore}},[_vm._v(_vm._s(_vm.$t('showMore')))]):_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n {{ $tc('stacItem', items.length ) }}
\n {{ itemCount }}\n 1\" v-model=\"sort\" />\n \n\n \n \n \n \n {{ filtersOpen ? $t('items.hideFilter') : $t('items.showFilter') }}\n {{ filterCount }}\n \n \n \n \n \n\n \n \n 0\" columns>\n \n \n \n {{ $t('search.noItemsFound') }}\n {{ $t('items.noneAvailableForCollection') }}\n \n \n\n \n {{ $t('showMore') }}\n \n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Items.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Items.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Items.vue?vue&type=template&id=b7e27f22\"\nimport script from \"./Items.vue?vue&type=script&lang=js\"\nexport * from \"./Items.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:_vm.classes},[_c('b-spinner',{attrs:{\"label\":_vm.$t('loading'),\"small\":_vm.small}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n
\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Loading.vue?vue&type=template&id=67931bb8&scoped=true\"\nimport script from \"./Loading.vue?vue&type=script&lang=js\"\nexport * from \"./Loading.vue?vue&type=script&lang=js\"\nimport style0 from \"./Loading.vue?vue&type=style&index=0&id=67931bb8&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"67931bb8\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-button-group',{class:_vm.classes},[_c('b-button',{attrs:{\"disabled\":!_vm.pagination.first,\"variant\":\"primary\"},on:{\"click\":function($event){return _vm.paginate(_vm.pagination.first)}}},[_vm._v(_vm._s(_vm.$t('pagination.first')))]),_c('b-button',{attrs:{\"disabled\":!_vm.pagination.prev,\"variant\":\"primary\"},on:{\"click\":function($event){return _vm.paginate(_vm.pagination.prev)}}},[_vm._v(_vm._s(_vm.$t('pagination.previous')))]),_c('b-button',{attrs:{\"disabled\":!_vm.pagination.next,\"variant\":\"primary\"},on:{\"click\":function($event){return _vm.paginate(_vm.pagination.next)}}},[_vm._v(_vm._s(_vm.$t('pagination.next')))]),(_vm.pagination.last)?_c('b-button',{attrs:{\"variant\":\"primary\"},on:{\"click\":function($event){return _vm.paginate(_vm.pagination.last)}}},[_vm._v(_vm._s(_vm.$t('pagination.last')))]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n {{ $t('pagination.first') }}\n {{ $t('pagination.previous') }}\n {{ $t('pagination.next') }}\n {{ $t('pagination.last') }}\n \n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Pagination.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Pagination.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Pagination.vue?vue&type=template&id=56aa2ed6\"\nimport script from \"./Pagination.vue?vue&type=script&lang=js\"\nexport * from \"./Pagination.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.component,_vm._b({tag:\"component\",staticClass:\"stac-link\",attrs:{\"title\":_vm.tooltip}},'component',_vm.attributes,false),[(_vm.icon)?[_c('img',{staticClass:\"icon mr-2\",attrs:{\"src\":_vm.icon.href,\"alt\":_vm.icon.title,\"title\":_vm.icon.title}})]:_vm._e(),_c('span',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.displayTitle))])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n {{ displayTitle }}\n \n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StacLink.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StacLink.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./StacLink.vue?vue&type=template&id=935ce1da\"\nimport script from \"./StacLink.vue?vue&type=script&lang=js\"\nexport * from \"./StacLink.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","module.exports = {\n catalogUrl: null,\n catalogTitle: \"STAC Browser\",\n allowExternalAccess: true, // Must be true if catalogUrl is not given\n allowedDomains: [],\n detectLocaleFromBrowser: true,\n storeLocale: true,\n locale: \"en\",\n fallbackLocale: \"en\",\n supportedLocales: [\n \"de\",\n// \"de-CH\",\n \"es\",\n \"en\",\n \"fr\",\n// \"fr-CA\",\n// \"fr-CH\",\n \"it\",\n// \"it-CH\",\n \"ro\"\n ],\n apiCatalogPriority: null,\n useTileLayerAsFallback: true,\n displayGeoTiffByDefault: false,\n buildTileUrlTemplate: ({href, asset}) => \"https://tiles.rdnt.io/tiles/{z}/{x}/{y}@2x?url=\" + encodeURIComponent(asset.href.startsWith(\"/vsi\") ? asset.href : href),\n stacProxyUrl: null,\n pathPrefix: \"/\",\n historyMode: \"history\",\n cardViewMode: \"cards\",\n cardViewSort: \"asc\",\n showThumbnailsAsAssets: false,\n stacLint: true,\n geoTiffResolution: 128,\n redirectLegacyUrls: false,\n itemsPerPage: 12,\n defaultThumbnailSize: null,\n maxPreviewsOnMap: 50,\n crossOriginMedia: null,\n requestHeaders: {},\n requestQueryParameters: {},\n preprocessSTAC: null,\n authConfig: null\n};\n","// Add deprecated CQL conformance classes for stac-fastapi:\n// https://github.com/stac-utils/stac-fastapi/issues/539\nconst CQL_TEXT = [\n 'https://api.stacspec.org/v1.*/item-search#filter:cql-text', // deprecated\n 'http://www.opengis.net/spec/cql2/1.*/conf/cql2-text'\n];\nconst CQL_JSON = [\n 'https://api.stacspec.org/v1.*/item-search#filter:cql-json', // deprecated\n 'http://www.opengis.net/spec/cql2/1.*/conf/cql2-json'\n];\n\nconst CQL_ADV_COMPARISON = ['http://www.opengis.net/spec/cql2/1.*/req/advanced-comparison-operators'];\n\nimport { mapGetters } from \"vuex\";\n\nexport const TYPES = {\n // OGC / STAC API - Features\n Items: {\n BasicFilters: [\n 'https://api.stacspec.org/v1.*/ogcapi-features',\n 'http://www.opengis.net/spec/ogcapi-features-1/1.*/conf/core'\n ],\n CollectionIdFilter: false,\n ItemIdFilter: false,\n // It seems some conformance classes use conf (correct) and some req (deprecated?) after the version number\n CqlFilters: ['http://www.opengis.net/spec/ogcapi-features-3/1.*/*/features-filter'],\n Sort: [\n 'https://api.stacspec.org/v1.*/ogcapi-features#sort',\n 'http://www.opengis.net/spec/ogcapi-records-1/1.*/conf/sorting'\n ],\n FreeText: ['https://api.stacspec.org/v1.*/ogcapi-features#free-text']\n },\n // STAC API - Item Search\n Global: {\n BasicFilters: true,\n CollectionIdFilter: true,\n ItemIdFilter: true,\n CqlFilters: ['https://api.stacspec.org/v1.*/item-search#filter'],\n Sort: ['https://api.stacspec.org/v1.*/item-search#sort'],\n FreeText: ['https://api.stacspec.org/v1.*/item-search#free-text']\n },\n // OGC / STAC API - Collections\n Collections: {\n BasicFilters: ['https://api.stacspec.org/v1.*/collection-search'],\n CollectionIdFilter: false,\n ItemIdFilter: false,\n CqlFilters: ['https://api.stacspec.org/v1.*/collection-search#filter'],\n Sort: ['https://api.stacspec.org/v1.*/collection-search#sort'],\n FreeText: ['https://api.stacspec.org/v1.*/collection-search#free-text']\n }\n};\n\nexport default {\n props: {\n type: {\n type: String,\n required: true\n }\n },\n computed: {\n ...mapGetters(['supportsConformance']),\n\n conformances() {\n return TYPES[this.type];\n },\n\n canSort() {\n return this.supportsConformance(this.conformances.Sort);\n },\n canFilterExtents() {\n return this.supportsConformance(this.conformances.BasicFilters);\n },\n canFilterFreeText() {\n return this.supportsConformance(this.conformances.FreeText);\n },\n cql() {\n if (!this.supportsConformance(this.conformances.CqlFilters)) {\n return null;\n }\n let textMode = this.supportsConformance(CQL_TEXT);\n let jsonMode = this.supportsConformance(CQL_JSON);\n if (!textMode && !jsonMode) {\n return null;\n }\n\n return {\n textMode,\n jsonMode,\n advancedComparison: this.supportsConformance(CQL_ADV_COMPARISON)\n };\n }\n }\n};\n","import { mapState } from 'vuex';\n\nexport default functions => {\n let mixin = {\n computed: {\n ...mapState(['uiLanguage'])\n },\n methods: {}\n };\n for(let name in functions) {\n let fn = functions[name];\n mixin.methods[name] = function() {\n // We call uiLanguage once so that it's a dependency for the computed property\n // which makes the computed property to re-render when uiLanguage changes.\n this.uiLanguage;\n return fn(...arguments);\n };\n }\n return mixin;\n};","import { mapState } from 'vuex';\n\nexport default {\n props: {\n showThumbnail: {\n type: Boolean,\n default: true\n }\n },\n computed: {\n ...mapState(['cardViewMode', 'crossOriginMedia', 'defaultThumbnailSize']),\n isList() {\n return this.data && !this.data.isItem() && this.cardViewMode === 'list';\n },\n hasImage() {\n return this.showThumbnail && this.thumbnail;\n },\n thumbnail() {\n if (this.data) {\n let thumbnails = this.data.getThumbnails(true, 'thumbnail');\n if (thumbnails.length > 0) {\n let t = thumbnails[0];\n let width, height;\n if (Array.isArray(t['proj:shape']) && t['proj:shape'].length === 2) {\n [height, width] = t['proj:shape'];\n }\n else if (Array.isArray(this.defaultThumbnailSize) && this.defaultThumbnailSize.length === 2) {\n [height, width] = this.defaultThumbnailSize;\n }\n return {\n src: t.href,\n alt: t.title,\n crossorigin: this.crossOriginMedia,\n right: this.isList,\n blankColor: \"rgba(0, 0, 0, 0.125)\",\n width,\n height,\n // for b-card-img-lazy\n \"blank-width\": width,\n \"blank-height\": height\n };\n }\n }\n return null;\n }\n }\n};","let config;\nif (typeof CONFIG_PATH === 'undefined') {\n config = require('../config');\n}\nelse {\n config = require(CONFIG_PATH);\n}\n\nexport default Object.assign(config, CONFIG_CLI, window.STAC_BROWSER_CONFIG);","import Vue from 'vue';\nimport VueI18n from 'vue-i18n';\nimport CONFIG from './config';\nimport {default as Fields} from '@radiantearth/stac-fields/I18N';\nimport Utils from './utils';\n\nVue.use(VueI18n);\n\nexport const API_LANGUAGE_CONFORMANCE = ['https://api.stacspec.org/v1.*/language'];\n\nconst LOCALE_CONFIG = {};\n\nfunction loadLocaleConfig() {\n // Load locale config\n for(let locale of CONFIG.supportedLocales) {\n LOCALE_CONFIG[locale] = require(`./locales/${locale}/config.json`);\n }\n const messages = {};\n // Add language names all other languages\n for(let locale in LOCALE_CONFIG) {\n messages[locale] = {\n languages: LOCALE_CONFIG\n };\n }\n return messages;\n}\n\nconst i18n = new VueI18n({\n locale: CONFIG.locale,\n fallbackLocale: CONFIG.fallbackLocale,\n messages: loadLocaleConfig()\n});\nexport default i18n;\n\nexport function loadDefaultMessages() {\n return Promise.all([\n loadMessages(CONFIG.locale),\n loadMessages(CONFIG.fallbackLocale)\n ]);\n}\n\nexport async function loadMessages(locale) {\n // Check whether the language has already been loaded\n // Note that a languages key is already present thus check >1 and not >0\n if (Utils.size(i18n.messages[locale]) > 1) {\n return;\n }\n const messages = (await import(`./locales/${locale}/default.js`)).default;\n i18n.mergeLocaleMessage(locale, messages);\n}\n\nexport function translateFields(value, vars = null) {\n if (typeof value !== 'string' || value.length === 0) {\n return value;\n }\n let key = `fields.${value}`;\n if (i18n.te(key)) {\n return i18n.t(key, null, vars);\n }\n return Fields.format(value, vars);\n}","// This code is based on https://github.com/cherry-projects/locale-id\n// Due to the \"heavy\" dependencies, it has been slimmed down\n\n// http://userguide.icu-project.org/locale\nexport default function parse(locale) {\n if (!locale) {\n return undefined;\n }\n\n // extract keyword\n const stringLocale = String(locale);\n const keywordPos = stringLocale.indexOf('@');\n\n const keyword = keywordPos !== -1\n ? stringLocale.substr(keywordPos + 1)\n : undefined;\n\n const localeWithoutKeyword = keywordPos !== -1\n ? stringLocale.substr(0, keywordPos)\n : stringLocale;\n\n // en-us => en_us\n const parts = String(localeWithoutKeyword)\n .replace(/-/g, '_')\n .split('_');\n\n if (!parts.length || parts.length > 4) {\n return undefined;\n }\n\n const language = parts.shift();\n if (!language) {\n return undefined;\n }\n\n const retVar = {\n keyword,\n language: language.toLowerCase(),\n };\n\n if (!parts.length) {\n return retVar;\n }\n\n if (parts.length === 3) {\n const variant = parts.pop();\n if (variant) {\n retVar.variant = variant.toUpperCase();\n }\n }\n\n let country = parts.pop();\n if (country.length > 3) {\n retVar.keyword = country;\n\n country = parts.pop();\n }\n\n if (country) {\n retVar.country = country.toUpperCase();\n }\n\n if (!parts.length) {\n return retVar;\n }\n\n const script = parts.pop();\n if (typeof script === 'string' && script.length >= 1) {\n retVar.script = script[0].toUpperCase() + script.substring(1).toLowerCase();\n }\n\n return retVar;\n}\n\nexport function normalize(locale, delimeter = '_') {\n const obj = parse(locale);\n if (!obj) {\n return obj;\n }\n\n let result = obj.language;\n\n if (obj.script) {\n result += `${delimeter}${obj.script}`;\n }\n\n if (obj.country) {\n result += `${delimeter}${obj.country}`;\n }\n\n return result;\n}\n\nconst splitAcceptLanguageRegEx = /([a-z]{1,8}(-[a-z]{1,8})?)\\s*(;\\s*q\\s*=\\s*(1|0\\.[0-9]+))?/ig;\nconst acceptLanguageItemRegEx = /^([a-z]{1,8}(-[a-z]{1,8})?)/i;\n\nexport function normalizeAcceptLanguage(acceptLanguage) {\n const returnItems = [];\n if (!acceptLanguage) {\n return returnItems;\n }\n\n const items = acceptLanguage.match(splitAcceptLanguageRegEx) || [];\n items.forEach(acceptLanguageItem => {\n const matches = acceptLanguageItem.match(acceptLanguageItemRegEx) || [];\n const locale = normalize(matches[0]);\n if (locale) {\n returnItems.push(locale);\n }\n });\n\n return returnItems;\n}\n\nexport function prepareSupported(supported) {\n const lgs = {};\n\n supported.forEach(supportedLocale => {\n const { language, country } = parse(supportedLocale);\n if (!language) {\n throw new Error(`Locale ${supportedLocale} is not parsable`);\n }\n\n if (!lgs[language]) {\n lgs[language] = {\n countries: {},\n firstCountry: undefined,\n main: undefined,\n };\n }\n\n const lg = lgs[language];\n if (country) {\n lg.countries[country] = supportedLocale;\n\n if (!lg.firstCountry) {\n lg.firstCountry = supportedLocale;\n }\n } else {\n lg.main = supportedLocale;\n }\n });\n\n return lgs;\n}\n\nexport function getBest(supported, locale, defaultLocale, getAnyCountry) {\n const lgs = Array.isArray(supported) ? prepareSupported(supported) : supported;\n\n // return defaultLocale if current locale is undefined\n if (!locale && defaultLocale) {\n return getBest(supported, defaultLocale, undefined, getAnyCountry);\n }\n\n if (!locale) {\n return undefined;\n }\n\n const { language, country } = parse(locale);\n if (!language) {\n return defaultLocale;\n }\n\n // selected locale is not supported\n if (!lgs[language]) {\n if (locale === defaultLocale) {\n return undefined;\n }\n\n return getBest(supported, defaultLocale, null, getAnyCountry);\n }\n\n const { countries, main = defaultLocale, firstCountry } = lgs[language];\n if (!countries || !country) {\n if (getAnyCountry && firstCountry) {\n return firstCountry;\n }\n\n return main;\n }\n\n if (getAnyCountry && firstCountry) {\n return countries[country] ? countries[country] : firstCountry;\n }\n\n return countries[country] ? countries[country] : main;\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-container',{attrs:{\"id\":\"stac-browser\"}},[(_vm.doAuth.length > 0)?_c('Authentication'):_vm._e(),(_vm.globalError)?_c('ErrorAlert',_vm._b({staticClass:\"global-error\",on:{\"close\":_vm.hideError}},'ErrorAlert',_vm.globalError,false)):_vm._e(),(_vm.sidebar)?_c('Sidebar'):_vm._e(),_c('header',[_c('div',{staticClass:\"logo\"},[_vm._v(_vm._s(_vm.displayCatalogTitle))]),_c('StacHeader',{on:{\"enableSidebar\":function($event){_vm.sidebar = true}}})],1),_c('router-view'),_c('footer',[_c('i18n',{staticClass:\"poweredby text-muted\",attrs:{\"tag\":\"small\",\"path\":\"poweredBy\"},scopedSlots:_vm._u([{key:\"link\",fn:function(){return [_c('a',{attrs:{\"href\":\"https://github.com/radiantearth/stac-browser\",\"target\":\"_blank\"}},[_vm._v(\"STAC Browser\")]),_vm._v(\" \"+_vm._s(_vm.browserVersion)+\" \")]},proxy:true}])})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('main',{staticClass:\"browse d-flex flex-column\"},[(!_vm.allowExternalAccess && _vm.isExternal)?_c('b-alert',{attrs:{\"show\":\"\"}},[_vm._v(_vm._s(_vm.$t('errors.noExternalAccess')))]):(_vm.error)?_c('ErrorAlert',{attrs:{\"dismissible\":false,\"url\":_vm.url,\"description\":_vm.errorDescription,\"id\":_vm.errorId}}):(_vm.loading)?_c('Loading',{attrs:{\"stretch\":\"\"}}):_c(_vm.component,{tag:\"component\"})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-alert',{attrs:{\"variant\":\"danger\",\"show\":\"\",\"dismissible\":_vm.dismissible},on:{\"dismissed\":function($event){return _vm.$emit('close')}}},[_c('p',{staticClass:\"message\"},[_vm._v(_vm._s(_vm.message || _vm.$t('errors.default')))]),(_vm.error && _vm.error.message)?_c('dl',{staticClass:\"error\"},[_c('dt',[_vm._v(_vm._s(_vm.$t('errors.labels.cause')))]),_c('dd',[_vm._v(_vm._s(_vm.error.message))])]):_vm._e(),(_vm.description)?_c('dl',{staticClass:\"description\"},[_c('dt',[_vm._v(_vm._s(_vm.$t('errors.labels.reason')))]),_c('dd',[_vm._v(_vm._s(_vm.description))])]):_vm._e(),(_vm.id)?_c('dl',{staticClass:\"id\"},[_c('dt',[_vm._v(_vm._s(_vm.$t('errors.labels.code')))]),_c('dd',[_c('code',[_vm._v(_vm._s(_vm.id))])])]):_vm._e(),(_vm.url)?_c('dl',{staticClass:\"url\"},[_c('dt',[_vm._v(_vm._s(_vm.$t('errors.labels.requestURL')))]),_c('dd',[_c('code',[_vm._v(_vm._s(_vm.url))])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n {{ message || $t('errors.default') }}
\n \n - {{ $t('errors.labels.cause') }}
\n - {{ error.message }}
\n
\n \n - {{ $t('errors.labels.reason') }}
\n - {{ description }}
\n
\n \n - {{ $t('errors.labels.code') }}
\n {{ id }}
\n
\n \n - {{ $t('errors.labels.requestURL') }}
\n {{ url }}
\n
\n \n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ErrorAlert.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ErrorAlert.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ErrorAlert.vue?vue&type=template&id=09bb7d1b&scoped=true\"\nimport script from \"./ErrorAlert.vue?vue&type=script&lang=js\"\nexport * from \"./ErrorAlert.vue?vue&type=script&lang=js\"\nimport style0 from \"./ErrorAlert.vue?vue&type=style&index=0&id=09bb7d1b&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"09bb7d1b\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{key:_vm.data.id,staticClass:\"item\"},[_c('b-row',[_c('b-col',{staticClass:\"left\"},[_c('section',{staticClass:\"mb-4\"},[_c('b-card',{staticClass:\"maps-preview\",attrs:{\"no-body\":\"\"}},[_c('b-tabs',{ref:\"tabs\",attrs:{\"card\":\"\",\"pills\":\"\",\"vertical\":\"\",\"end\":\"\"},model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},[_c('b-tab',{attrs:{\"title\":_vm.$t('map'),\"no-body\":\"\"}},[_c('Map',{attrs:{\"stac\":_vm.data,\"stacLayerData\":_vm.selectedAsset,\"scrollWheelZoom\":\"\"},on:{\"dataChanged\":_vm.dataChanged}})],1),(_vm.thumbnails.length > 0)?_c('b-tab',{attrs:{\"title\":_vm.$t('thumbnails'),\"no-body\":\"\"}},[_c('Thumbnails',{attrs:{\"thumbnails\":_vm.thumbnails}})],1):_vm._e()],1)],1)],1),(_vm.hasAssets)?_c('Assets',{attrs:{\"assets\":_vm.assets,\"context\":_vm.data,\"shown\":_vm.shownAssets},on:{\"showAsset\":_vm.showAsset}}):_vm._e(),(_vm.additionalLinks.length > 0)?_c('Links',{attrs:{\"title\":_vm.$t('additionalResources'),\"links\":_vm.additionalLinks}}):_vm._e()],1),_c('b-col',{staticClass:\"right\"},[_c('section',{staticClass:\"intro\"},[(_vm.data.properties.description)?_c('h2',[_vm._v(_vm._s(_vm.$t('description')))]):_vm._e(),(_vm.data.properties.deprecated)?_c('DeprecationNotice',{attrs:{\"data\":_vm.data}}):_vm._e(),(_vm.data.properties['anon:warning'])?_c('AnonymizedNotice',{attrs:{\"warning\":_vm.data.properties['anon:warning']}}):_vm._e(),(_vm.data.properties.description)?_c('ReadMore',{attrs:{\"lines\":10,\"text\":_vm.$t('read.more'),\"text-less\":_vm.$t('read.less')}},[_c('Description',{attrs:{\"description\":_vm.data.properties.description}})],1):_vm._e(),(Array.isArray(_vm.data.properties.keywords) && _vm.data.properties.keywords.length > 0)?_c('Keywords',{attrs:{\"keywords\":_vm.data.properties.keywords}}):_vm._e()],1),(_vm.collectionLink)?_c('CollectionLink',{attrs:{\"link\":_vm.collectionLink}}):_vm._e(),(_vm.data.properties.providers)?_c('Providers',{attrs:{\"providers\":_vm.data.properties.providers}}):_vm._e(),_c('Metadata',{attrs:{\"data\":_vm.data,\"type\":\"Item\",\"ignoreFields\":_vm.ignoredMetadataFields}})],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Utils from '../utils';\nimport { mapGetters } from 'vuex';\n\nexport default {\n data() {\n return {\n shownAssetsOnMap: [],\n shownBandsOnMap: [],\n tab: null,\n selectedAsset: null,\n selectedAssetKey: null\n };\n },\n computed: {\n ...mapGetters(['thumbnails', 'hasAssets', 'assets']),\n shownAssets() {\n if (this.tab === 0) {\n return this.shownAssetsOnMap;\n }\n else if (this.tab === 1 || (this.tab === null && this.thumbnails.length > 0)) {\n let keys = [];\n let thumbnailRefs = this.thumbnails.map(t => t.href);\n for(let key in this.assets) {\n let asset = this.assets[key];\n if (thumbnailRefs.includes(asset.href)) {\n keys.push(key);\n }\n }\n return keys;\n }\n return [];\n }\n },\n methods: {\n showAsset(asset, id, isThumbnail) {\n if (isThumbnail) {\n this.tab = 1;\n }\n else {\n this.tab = 0;\n this.selectedAsset = asset;\n this.selectedAssetKey = id;\n }\n if (this.$refs.tabs) {\n Utils.scrollTo(this.$refs.tabs.$el);\n }\n },\n dataChanged(data) {\n if (!Utils.isObject(data)) {\n this.shownBandsOnMap = [];\n this.shownAssetsOnMap = [];\n }\n else if (data.assets || data.bands) {\n if (Utils.size(data.assets) > 0) {\n if (this.selectedAssetKey) {\n this.shownAssetsOnMap = [this.selectedAssetKey];\n }\n else {\n this.shownAssetsOnMap = data.assets.map(meta => meta.key);\n }\n }\n if (Utils.size(data.bands) > 0) {\n this.shownBandsOnMap = data.bands;\n }\n }\n else if (this.selectedAssetKey) {\n this.shownAssetsOnMap = [this.selectedAssetKey];\n }\n }\n }\n};","import Utils from './utils';\nimport STAC from './models/stac';\nimport URI from 'urijs';\nimport i18n from './i18n';\n\nfunction toBrowserUrl(url, store) {\n let path = store.getters.toBrowserPath(url);\n let uri = URI(window.location.origin.toString());\n if (store.state.historyMode === 'hash') {\n uri.path(store.state.pathPrefix);\n uri.fragment(path);\n }\n else {\n uri.path(store.state.pathPrefix.replace(/\\/$/, '') + path);\n }\n return uri.toString();\n}\n\nfunction addSpatialCoverage(schema, bbox) {\n if (Array.isArray(bbox) && bbox.length >= 4) {\n schema.spatialCoverage = {\n \"@type\": \"Place\",\n geo: {\n \"@type\": \"GeoShape\",\n box: (bbox || []).join(\" \")\n }\n };\n }\n}\n\nfunction formatTemporalCoverage(dates) {\n if (Array.isArray(dates) && dates.length === 2 && (typeof dates[0] === 'string' || typeof dates[1] === 'string')) {\n return dates.map(dt => dt ? dt : '..').join('/');\n }\n return null;\n}\n\nfunction makeAssets(data) {\n if (Utils.size(data.assets) > 0) {\n return Object.values(data.assets).map(a => ({\n \"@type\": \"DataDownload\",\n contentUrl: Utils.toAbsolute(a.href, data.getAbsoluteUrl()),\n encodingFormat: a.type,\n name: a.title\n }));\n }\n return [];\n}\n\nfunction makeLinks(links, data, store, type = \"DataCatalog\") {\n return links.map(link => {\n let name, isBasedOn;\n if (link instanceof STAC) {\n name = STAC.getDisplayTitle(link);\n isBasedOn = link.getAbsoluteUrl();\n }\n else {\n name = link.title;\n isBasedOn = Utils.toAbsolute(link.href, data.getAbsoluteUrl());\n }\n let obj = {\n \"@type\": type,\n name,\n url: toBrowserUrl(isBasedOn, store),\n isBasedOn\n };\n if (type === 'Dataset') {\n obj.description = fallbackDescription(link, store);\n }\n return obj;\n });\n}\n\nfunction makeProvider(providers, role) {\n return providers\n .filter(p => Utils.isObject(p) && Array.isArray(p.roles) && p.roles.includes(role))\n .map(p => ({\n \"@type\": \"Organization\",\n \"name\": p.name,\n \"description\": p.description,\n \"url\": p.url,\n \"email\": p.email || p.mail,\n }));\n}\n\nfunction fallbackDescription(data, store) {\n let stacType, container;\n if (data instanceof STAC) {\n stacType = data.isItem() ? \"Item\" : data.type;\n container = data.collection;\n }\n else if (Utils.isObject(data) && data.rel === 'item') {\n stacType = \"Item\";\n }\n if (stacType) {\n let type = i18n.tc(`stac${stacType}`);\n let inX = i18n.t('in', {catalog: container || store.catalogTitle});\n return `SpatioTemporal Asset Catalog (STAC)\\n${type} - ${data.id} ${inX}`;\n }\n}\n\nfunction createBaseSchema(data, type, store) {\n let name = STAC.getDisplayTitle(data);\n let stacUrl = data.getAbsoluteUrl();\n let url = toBrowserUrl(stacUrl, store);\n let inLanguage = data.getMetadata('language')?.code;\n let thumbnails = data.getThumbnails(true);\n let thumbnailUrl;\n if (thumbnails.length > 0) {\n thumbnailUrl = Utils.toAbsolute(thumbnails[0].href, data.getAbsoluteUrl());\n }\n let license = data.getMetadata('license');\n if (license && license !== 'proprietary' && license !== 'various') {\n license = `https://spdx.org/licenses/${license}.html`;\n }\n else {\n license = data.getLinkWithRel('license')?.href;\n }\n if (license) {\n license = Utils.toAbsolute(license, data.getAbsoluteUrl());\n }\n\n let providers = data.getMetadata('providers');\n let copyrightHolder; // licensor\n let producer; // producer\n let provider; // host\n let creator; // processor\n if (Utils.size(providers) > 0) {\n copyrightHolder = makeProvider(providers, \"licensor\");\n producer = makeProvider(providers, \"producer\");\n provider = makeProvider(providers, \"host\");\n creator = makeProvider(providers, \"processor\");\n }\n\n return {\n \"@context\": \"https://schema.org/\",\n \"@type\": type,\n name,\n description: data.getMetadata(\"description\") || fallbackDescription(data, store),\n citation: data.getMetadata(\"sci:citation\"),\n identifier: data.getMetadata(\"sci:doi\") || data.id,\n keywords: data.getMetadata(\"keywords\"),\n license,\n url,\n isBasedOn: stacUrl,\n dateCreated: data.getMetadata('created'),\n dateModified: data.getMetadata('updated'),\n datePublished: data.getMetadata('published'),\n expires: data.getMetadata('expires'),\n inLanguage,\n thumbnailUrl,\n version: data.getMetadata('version'),\n image: thumbnailUrl,\n copyrightHolder,\n producer,\n provider,\n creator\n };\n}\n\nexport function createCatalogSchema(data, parents, store) {\n if (!(data instanceof STAC)) {\n return null;\n }\n // Remove invalid links\n parents = parents.filter(link => Utils.isObject(link));\n if (parents.length > 1) {\n // Remove duplicates\n parents = parents.filter((link, i) => parents.findIndex(p => p.isBasedOn === link.isBasedOn) !== i);\n }\n\n let schema = createBaseSchema(data, 'DataCatalog', store);\n\n if (data.isCollection()) {\n if (data.extent?.temporal?.interval.length > 0) {\n schema.temporalCoverage = formatTemporalCoverage(data.extent.temporal.interval[0]);\n }\n\n if (data.extent?.spatial?.bbox.length > 0) {\n addSpatialCoverage(schema, data.extent.spatial.bbox[0]);\n }\n schema.associatedMedia = makeAssets(data);\n }\n\n schema.hasPart = makeLinks(store.getters.catalogs, data, store);\n schema.dataset = makeLinks(store.getters.items, data, store, \"Dataset\");\n schema.isPartOf = makeLinks(parents, data, store);\n\n return schema;\n}\n\nexport function createItemSchema(data, parents, store) {\n if (!(data instanceof STAC)) {\n return null;\n }\n parents = parents.filter(link => Utils.isObject(link));\n\n let schema = createBaseSchema(data, 'Dataset', store);\n\n schema.includedInDataCatalog = makeLinks(parents, data, store);\n\n let start = data.getMetadata('start_datetime');\n let end = data.getMetadata('end_datetime');\n if (start || end) {\n schema.temporalCoverage = formatTemporalCoverage([start, end]);\n }\n else {\n schema.temporalCoverage = data.getMetadata('datetime');\n }\n\n addSpatialCoverage(schema, data.bbox);\n schema.distribution = makeAssets(data);\n\n return schema;\n}\n\nexport function addSchemaToDocument(doc, schema) {\n let id = 'schema-org';\n let element = doc.getElementById(id);\n if (!element) {\n element = doc.createElement('script');\n element.type = 'application/ld+json';\n element.id = id;\n doc.head.appendChild(element);\n }\n element.innerText = JSON.stringify(schema);\n}","\n \n
\n \n \n \n \n \n \n \n 0\" :title=\"$t('thumbnails')\" no-body>\n \n \n \n \n \n \n 0\" :title=\"$t('additionalResources')\" :links=\"additionalLinks\" />\n \n \n \n {{ $t('description') }}
\n \n \n \n \n \n 0\" :keywords=\"data.properties.keywords\" />\n \n \n \n \n \n \n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Item.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Item.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Item.vue?vue&type=template&id=2f4e5e1a\"\nimport script from \"./Item.vue?vue&type=script&lang=js\"\nexport * from \"./Item.vue?vue&type=script&lang=js\"\nimport style0 from \"./Item.vue?vue&type=style&index=0&id=2f4e5e1a&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{key:_vm.data.id,class:{cc: true, [_vm.data.type.toLowerCase()]: true, mixed: _vm.hasCatalogs && _vm.hasItems, empty: !_vm.hasCatalogs && !_vm.hasItems}},[_c('b-row',[_c('b-col',{staticClass:\"meta\"},[_c('section',{staticClass:\"intro\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('description')))]),(_vm.data.deprecated)?_c('DeprecationNotice',{attrs:{\"data\":_vm.data}}):_vm._e(),(_vm.data['anon:warning'])?_c('AnonymizedNotice',{attrs:{\"warning\":_vm.data['anon:warning']}}):_vm._e(),(_vm.data.description)?_c('ReadMore',{attrs:{\"lines\":10,\"text\":_vm.$t('read.more'),\"text-less\":_vm.$t('read.less')}},[_c('Description',{attrs:{\"description\":_vm.data.description}})],1):_vm._e(),(Array.isArray(_vm.data.keywords) && _vm.data.keywords.length > 0)?_c('Keywords',{attrs:{\"keywords\":_vm.data.keywords}}):_vm._e(),(_vm.isCollection)?_c('section',{staticClass:\"metadata mb-4\"},[(_vm.licenses)?_c('b-row',[_c('b-col',{staticClass:\"label\",attrs:{\"md\":\"4\"}},[_vm._v(_vm._s(_vm.$t('catalog.license')))]),_c('b-col',{staticClass:\"value\",attrs:{\"md\":\"8\"}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.licenses)}})])],1):_vm._e(),(_vm.temporalExtents)?_c('b-row',[_c('b-col',{staticClass:\"label\",attrs:{\"md\":\"4\"}},[_vm._v(_vm._s(_vm.$t('catalog.temporalExtent')))]),_c('b-col',{staticClass:\"value\",attrs:{\"md\":\"8\"}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.temporalExtents)}})])],1):_vm._e()],1):_vm._e(),(_vm.linkPosition === 'left')?_c('Links',{attrs:{\"title\":_vm.$t('additionalResources'),\"links\":_vm.additionalLinks}}):_vm._e()],1),(_vm.isCollection || _vm.hasThumbnails)?_c('section',{staticClass:\"mb-4\"},[_c('b-card',{staticClass:\"maps-preview\",attrs:{\"no-body\":\"\"}},[_c('b-tabs',{ref:\"tabs\",attrs:{\"pills\":\"\",\"card\":\"\",\"vertical\":\"\",\"end\":\"\"},model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},[(_vm.isCollection)?_c('b-tab',{attrs:{\"title\":_vm.$t('map'),\"no-body\":\"\"}},[_c('Map',{attrs:{\"stac\":_vm.data,\"stacLayerData\":_vm.mapData,\"fitBoundsOnce\":\"\",\"popover\":\"\"},on:{\"dataChanged\":_vm.dataChanged}})],1):_vm._e(),(_vm.hasThumbnails)?_c('b-tab',{attrs:{\"title\":_vm.$t('thumbnails'),\"no-body\":\"\"}},[_c('Thumbnails',{attrs:{\"thumbnails\":_vm.thumbnails}})],1):_vm._e()],1)],1)],1):_vm._e(),(_vm.hasAssets)?_c('Assets',{attrs:{\"assets\":_vm.assets,\"context\":_vm.data,\"shown\":_vm.shownAssets},on:{\"showAsset\":_vm.showAsset}}):_vm._e(),(_vm.hasItemAssets && !_vm.hasItems)?_c('Assets',{attrs:{\"assets\":_vm.data.item_assets,\"definition\":true}}):_vm._e(),(_vm.providers)?_c('Providers',{attrs:{\"providers\":_vm.providers}}):_vm._e(),_c('Metadata',{staticClass:\"mb-4\",attrs:{\"type\":_vm.data.type,\"data\":_vm.data,\"ignoreFields\":_vm.ignoredMetadataFields}}),(_vm.collectionLink)?_c('CollectionLink',{attrs:{\"link\":_vm.collectionLink}}):_vm._e(),(_vm.linkPosition === 'right')?_c('Links',{attrs:{\"title\":_vm.$t('additionalResources'),\"links\":_vm.additionalLinks}}):_vm._e()],1),(_vm.hasCatalogs)?_c('b-col',{staticClass:\"catalogs-container\"},[_c('Catalogs',{attrs:{\"catalogs\":_vm.catalogs,\"hasMore\":!!_vm.nextCollectionsLink},on:{\"loadMore\":_vm.loadMoreCollections}})],1):_vm._e(),(_vm.hasItems)?_c('b-col',{staticClass:\"items-container\"},[_c('Items',{attrs:{\"stac\":_vm.data,\"items\":_vm.items,\"api\":_vm.isApi,\"showFilters\":_vm.showFilters,\"apiFilters\":_vm.filters,\"pagination\":_vm.itemPages,\"loading\":_vm.apiItemsLoading},on:{\"paginate\":_vm.paginateItems,\"filterItems\":_vm.filterItems,\"filtersShown\":_vm.filtersShown}}),(_vm.hasItemAssets)?_c('Assets',{attrs:{\"assets\":_vm.data.item_assets,\"definition\":true}}):_vm._e()],1):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n
\n \n \n {{ $t('description') }}
\n \n \n \n \n \n 0\" :keywords=\"data.keywords\" />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Catalog.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Catalog.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Catalog.vue?vue&type=template&id=4e4a3bbb\"\nimport script from \"./Catalog.vue?vue&type=script&lang=js\"\nexport * from \"./Catalog.vue?vue&type=script&lang=js\"\nimport style0 from \"./Catalog.vue?vue&type=style&index=0&id=4e4a3bbb&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n \n {{ $t('errors.noExternalAccess') }}\n \n \n \n \n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Browse.vue?vue&type=template&id=b70f9318\"\nimport script from \"./Browse.vue?vue&type=script&lang=js\"\nexport * from \"./Browse.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Browse from '../views/Browse.vue';\n\nfunction getRoutes(config) {\n let routes = [];\n\n if (config.allowExternalAccess) {\n routes.push({\n path: \"/external/(.*)\",\n name: \"browseExternal\",\n component: Browse,\n props: route => {\n return {\n path: `/external/${route.params.pathMatch}`\n };\n }\n });\n }\n\n if (!config.catalogUrl) {\n routes.push({\n path: \"/\",\n name: \"select\",\n component: () => import(\"../views/SelectDataSource.vue\")\n });\n routes.push({\n path: \"/search/external/(.*)\",\n name: \"search\",\n component: () => import(\"../views/Search.vue\"),\n props: route => {\n return {\n loadParent: `/external/${route.params.pathMatch}`\n };\n }\n });\n }\n else {\n routes.push({\n path: \"/search\",\n name: \"search\",\n component: () => import(\"../views/Search.vue\")\n });\n }\n\n routes.push({\n path: \"/(.*)\",\n name: \"browse\",\n component: Browse,\n props: route => {\n return {\n path: route.params.pathMatch\n };\n }\n });\n\n return routes;\n}\n\nexport default getRoutes;","import Vue from \"vue\";\nimport Vuex from \"vuex\";\n\nimport axios from \"axios\";\nimport URI from \"urijs\";\n\nimport i18n from '../i18n';\nimport { stacBrowserSpecialHandling } from \"../rels\";\nimport Utils, { BrowserError } from '../utils';\nimport STAC from '../models/stac';\n\nimport { addQueryIfNotExists, isAuthenticationError, Loading, processSTAC, proxyUrl, unproxyUrl, stacRequest } from './utils';\nimport { getBest } from '../locale-id';\nimport { TYPES } from \"../components/ApiCapabilitiesMixin\";\n\nfunction getStore(config, router) {\n // Local settings (e.g. for currently loaded STAC entity)\n const localDefaults = () => ({\n url: '',\n title: config.catalogTitle,\n description: null,\n data: null,\n valid: null,\n parents: null,\n globalError: null,\n\n localRequestQueryParameters: {},\n stateQueryParameters: {\n language: null,\n asset: [],\n itemdef: []\n },\n\n apiItems: [],\n apiItemsLink: null,\n apiItemsPagination: {}\n });\n\n const catalogDefaults = () => ({\n queue: [],\n privateQueryParameters: {},\n authData: null,\n doAuth: [],\n conformsTo: [],\n dataLanguage: null,\n dataLanguages: [],\n\n apiCollections: [],\n apiItemsLoading: {},\n nextCollectionsLink: null\n });\n\n return new Vuex.Store({\n strict: true,\n state: Object.assign({}, config, localDefaults(), catalogDefaults(), {\n // Global settings\n database: {}, // STAC object, Error object or Loading object or Promise (when loading)\n allowSelectCatalog: !config.catalogUrl,\n globalRequestQueryParameters: config.requestQueryParameters,\n uiLanguage: config.locale\n }),\n getters: {\n loading: state => !state.url || !state.data || state.database[state.url] instanceof Loading,\n getApiItemsLoading: state => data => {\n let id = '';\n if (data instanceof Loading) {\n return true;\n }\n else if (data instanceof STAC) {\n id = data.id;\n }\n else if (typeof data === 'string') {\n id = data;\n }\n return state.apiItemsLoading[id] || false;\n },\n error: state => state.database[state.url] instanceof Error ? state.database[state.url] : null,\n getStac: state => (source, returnErrorObject = false) => {\n if (source instanceof STAC) {\n return source;\n }\n if (Utils.isObject(source) && Utils.hasText(source.href)) {\n source = source.href;\n }\n if (!Utils.hasText(source)) {\n return null;\n }\n let absoluteUrl = Utils.toAbsolute(source, state.url);\n let data = state.database[absoluteUrl];\n if (data instanceof STAC || (returnErrorObject && data instanceof Error)) {\n return data;\n }\n else {\n return null;\n }\n },\n\n displayCatalogTitle: (state, getters) => STAC.getDisplayTitle(getters.root, state.catalogTitle),\n\n isCollection: state => state.data?.isCollection() || false,\n isCatalog: state => state.data?.isCatalog() || false,\n isCatalogLike: state => state.data?.isCatalogLike() || false,\n isItem: state => state.data?.isItem() || false,\n\n root: (_, getters) => getters.getStac(getters.rootLink),\n\n rootLink: state => {\n let link = state.data?.getStacLinkWithRel('root');\n if (link) {\n return link;\n }\n else if (state.catalogUrl) {\n return Utils.createLink(state.catalogUrl, 'root');\n }\n else if (state.url && state.data instanceof STAC && state.data.getLinksWithRels(['conformance', 'service-desc', 'service-doc', 'data', 'search']).length > 0) {\n return Utils.createLink(state.url, 'root');\n }\n else if (state.url) {\n // Fallback: If we detect OGC API like paths, try to guess the paths\n let uri = URI(state.url);\n let path = uri.segment(-2);\n if (['collections', 'items'].includes(path)) {\n uri.segment(-1, \"\");\n uri.segment(-1, \"\");\n if (path === 'items') {\n uri.segment(-1, \"\");\n uri.segment(-1, \"\");\n }\n return Utils.createLink(uri.toString(), 'root');\n }\n }\n return null;\n },\n parentLink: state => {\n if (state.data instanceof STAC) {\n let link = state.data.getStacLinkWithRel('parent');\n if (link) {\n return link;\n }\n }\n\n // Fallback: If we detect OGC API like paths, try to guess the paths\n if (state.url) {\n let uri = URI(state.url);\n let path = uri.segment(-2);\n if (['collections', 'items'].includes(path)) {\n uri.segment(-1, \"\");\n uri.segment(-1, \"\");\n return Utils.createLink(uri.toString(), 'parent');\n }\n }\n\n return null;\n },\n collectionLink: state => {\n if (state.data instanceof STAC) {\n let link = state.data?.getStacLinkWithRel('collection');\n if (link) {\n return link;\n }\n }\n\n // Fallback: If we detect OGC API like paths, try to guess the paths\n if (state.url) {\n let uri = URI(state.url);\n let path = uri.segment(-2);\n if (path == 'items') {\n uri.segment(-1, \"\");\n uri.segment(-1, \"\");\n return Utils.createLink(uri.toString(), 'collection');\n }\n }\n\n return null;\n },\n supportsConformance: state => classes => {\n if(!Array.isArray(classes)) {\n return classes;\n }\n let classRegexp = classes\n .map(c => c.replaceAll('*', '[^/]+').replace(/\\/?#/, '/?#'))\n .join('|');\n let regexp = new RegExp('^(' + classRegexp + ')$');\n return Boolean(state.conformsTo.find(uri => uri.match(regexp)));\n },\n supportsExtension: state => schemaUri => {\n return Utils.supportsExtension(state.data, schemaUri);\n },\n\n canSearch: (state, getters) => {\n return getters.canSearchCollections || getters.canSearchItems;\n },\n canSearchItems: (state, getters) => {\n return getters.supportsConformance(TYPES.Items.BasicFilters);\n },\n canSearchCollections: (state, getters) => {\n return getters.supportsConformance(TYPES.Collections.BasicFilters);\n },\n\n items: state => {\n if (state.apiItems.length > 0) {\n return state.apiItems;\n }\n else if (state.data) {\n return state.data.getStacLinksWithRel('item');\n }\n return [];\n },\n catalogs: state => {\n let hasCollections = Boolean(state.data instanceof STAC && state.data.getApiCollectionsLink() && state.apiCollections.length > 0);\n let hasChilds = Boolean(state.data instanceof STAC);\n let showCollections = !state.apiCatalogPriority || state.apiCatalogPriority === 'collections';\n let showChilds = !state.apiCatalogPriority || state.apiCatalogPriority === 'childs';\n let catalogs = [];\n if (hasCollections && showCollections) {\n catalogs = catalogs.concat(state.apiCollections);\n }\n if (hasChilds && showChilds) {\n catalogs = STAC.addMissingChildren(catalogs, state.data);\n }\n return catalogs;\n },\n\n // hasAsset also checks whether the assets have a href and thus are not item asset definitions\n hasAssets: (state, getters) => Boolean(Object.values(getters.assets).find(asset => Utils.isObject(asset) && typeof asset.href === 'string')),\n assets: (state, getters) => {\n if (!Utils.isObject(state.data?.assets)) {\n return {};\n }\n else if (state.showThumbnailsAsAssets) {\n return state.data.assets;\n }\n else {\n let assets = {};\n let thumbnails = getters.thumbnails;\n for (let key in state.data.assets) {\n let asset = state.data.assets[key];\n if (!thumbnails.includes(asset)) {\n assets[key] = asset;\n }\n }\n return assets;\n }\n },\n thumbnails: state => state.data ? state.data.getThumbnails(true) : [],\n additionalLinks: state => state.data ? state.data.getLinksWithOtherRels(stacBrowserSpecialHandling).filter(link => link.rel !== 'preview' || !Utils.canBrowserDisplayImage(link)) : [],\n\n toBrowserPath: (state, getters) => url => {\n if (!Utils.hasText(url)) {\n url = '/';\n }\n\n let absolute = Utils.toAbsolute(unproxyUrl(url, state.stacProxyUrl), state.url, false);\n let relative;\n if (!state.allowSelectCatalog && state.catalogUrl) {\n relative = absolute.relativeTo(state.catalogUrl);\n }\n\n if (typeof relative === 'undefined' || getters.isExternalUrl(absolute, false)) {\n if (!state.allowExternalAccess) {\n return absolute.toString();\n }\n let parts = ['/external'];\n let protocol = absolute.protocol();\n if (protocol !== 'https') {\n parts.push(protocol + ':');\n }\n parts.push(absolute.authority());\n parts.push(absolute.path().replace(/^\\//, ''));\n let path = parts.join('/');\n let q = absolute.query();\n if (q) {\n path += `?${q}`;\n }\n return path;\n }\n else {\n return '/' + relative.toString();\n }\n },\n fromBrowserPath: (state, getters) => url => {\n const externalRE = /^\\/(search\\/)?external\\//;\n if (!Utils.hasText(url) || url === '/') {\n url = state.catalogUrl;\n }\n else if (url.match(externalRE)) {\n let parts = url.replace(externalRE, '').split('/');\n let protocol;\n if (!parts[0].endsWith(':')) {\n protocol = 'https:';\n }\n else {\n protocol = parts.shift();\n }\n url = `${protocol}//${parts.join('/')}`;\n }\n else if (!state.allowSelectCatalog && state.catalogUrl) {\n url = Utils.toAbsolute(url, state.catalogUrl, false);\n }\n return getters.getRequestUrl(url, null, true);\n },\n isExternalUrl: state => (absoluteUrl, whitelist = true) => {\n if (!state.catalogUrl) {\n return false;\n }\n if (!(absoluteUrl instanceof URI)) {\n absoluteUrl = URI(absoluteUrl);\n }\n if (whitelist && Array.isArray(state.allowedDomains) && state.allowedDomains.includes(absoluteUrl.domain())) {\n return false;\n }\n let relative;\n if (absoluteUrl.is(\"relative\")) {\n relative = absoluteUrl;\n }\n else {\n relative = absoluteUrl.relativeTo(state.catalogUrl);\n if (relative.equals(absoluteUrl)) {\n return true;\n }\n }\n let relativeStr = relative.toString();\n return relativeStr.startsWith('//') || relativeStr.startsWith('../');\n },\n getRequestUrl: (state, getters) => (url, baseUrl = null, addLocalQueryParams = false) => {\n let absoluteUrl = Utils.toAbsolute(proxyUrl(url, state.stacProxyUrl), baseUrl ? baseUrl : state.url, false);\n if (!getters.isExternalUrl(absoluteUrl)) {\n // Check whether private params are present and add them if the URL is part of the catalog\n addQueryIfNotExists(absoluteUrl, state.privateQueryParameters);\n // Check if we need to add global request params\n addQueryIfNotExists(absoluteUrl, state.globalRequestQueryParameters);\n if (addLocalQueryParams) {\n // Check if we need to add local request params\n addQueryIfNotExists(absoluteUrl, state.localRequestQueryParameters);\n }\n }\n // If we are proxying a STAC Catalog, replace any URI with the proxied address.\n return absoluteUrl.toString();\n },\n\n acceptedLanguages: state => {\n const languages = {};\n // Implement in ascending order:\n languages['en'] = 0.1;\n if (Array.isArray(state.supportedLocales)) {\n state.supportedLocales.forEach(locale => languages[locale] = 0.2);\n }\n if (Utils.hasText(state.fallbackLocale)) {\n languages[state.fallbackLocale] = 0.5;\n }\n if (Array.isArray(navigator.languages)) {\n navigator.languages.forEach(locale => languages[locale] = 0.7);\n }\n if (Utils.hasText(state.locale)) {\n languages[state.locale] = 1;\n }\n return Object.entries(languages)\n .sort((a,b) => {\n if (a[1] > b[1]) {\n return -1;\n }\n else if (a[1] < b[1]) {\n return 1;\n }\n return 0;\n })\n .map(([l, q]) => q >= 1 ? l : `${l};q=${q}`)\n .join(',');\n }\n },\n mutations: {\n config(state, config) {\n for (let key in config) {\n let value = config[key];\n switch (key) {\n case 'catalogTitle':\n state.catalogTitle = value;\n break;\n case 'catalogUrl':\n if (typeof value === 'function') {\n state.catalogUrl = value();\n }\n else if (typeof value === 'string') {\n state.catalogUrl = value;\n }\n break;\n case 'crossOriginMedia':\n state.crossOriginMedia = ['anonymous', 'use-credentials'].includes(value) ? value : null;\n break;\n case 'cardViewSort':\n switch(value) {\n case 'asc':\n state.cardViewSort = 1;\n break;\n case 'desc':\n state.cardViewSort = -1;\n break;\n default:\n state.cardViewSort = 0;\n }\n break;\n default:\n state[key] = value;\n }\n }\n },\n languages(state, {uiLanguage, dataLanguage}) {\n state.dataLanguage = dataLanguage || null;\n state.uiLanguage = uiLanguage || null;\n },\n setQueryParameter(state, { type, key, value }) {\n type = `${type}QueryParameters`;\n if (typeof value === 'undefined') {\n Vue.delete(state[type], key);\n }\n else {\n Vue.set(state[type], key, value);\n }\n },\n setRequestHeader(state, { key, value }) {\n if (typeof value === 'undefined') {\n Vue.delete(state.requestHeaders, key);\n }\n else {\n Vue.set(state.requestHeaders, key, value);\n }\n },\n requestAuth(state, callback) {\n if (typeof callback === 'function') {\n state.doAuth.push(callback);\n }\n else {\n state.doAuth = [];\n }\n },\n setAuthData(state, value) {\n state.authData = value;\n },\n state(state, newState) {\n state.stateQueryParameters = newState;\n },\n updateState(state, {type, value}) {\n if (value === null || typeof value === 'undefined') {\n Vue.delete(state.stateQueryParameters, type);\n }\n else {\n Vue.set(state.stateQueryParameters, type, value);\n }\n },\n openCollapsible(state, { type, uid }) {\n const idx = state.stateQueryParameters[type].indexOf(uid);\n // need to prevent duplicates because of the way the collapse v-model works\n if (idx === -1) {\n state.stateQueryParameters[type].push(uid);\n }\n },\n closeCollapsible(state, { type, uid }) {\n const idx = state.stateQueryParameters[type].indexOf(uid);\n if (idx > -1) {\n Vue.delete(state.stateQueryParameters[type], idx);\n }\n },\n updateLoading(state, { url, show, loadApi }) {\n let data = state.database[url];\n Vue.set(data, 'show', show || data.show);\n Vue.set(data, 'loadApi', loadApi || data.loadApi);\n },\n loading(state, { url, loading }) {\n Vue.set(state.database, url, loading);\n if (loading.show) {\n state.url = url;\n }\n },\n loaded(state, { url, data }) {\n Vue.set(state.database, url, processSTAC(state, data));\n },\n clear(state, url) {\n Vue.delete(state.database, url);\n },\n resetCatalog(state, clearAll) {\n Object.assign(state, catalogDefaults());\n Object.assign(state, localDefaults());\n if (!state.supportedLocales.includes(state.locale)) {\n state.locale = config.locale;\n }\n if (clearAll) {\n state.catalogUrl = config.catalogUrl;\n state.catalogTitle = config.catalogTitle;\n state.database = {};\n }\n },\n resetPage(state) {\n Object.assign(state, localDefaults());\n },\n showPage(state, { url, title, description, stac }) {\n if (!stac) {\n stac = state.database[url] || null;\n }\n state.url = url || null;\n state.data = stac instanceof STAC ? stac : null;\n state.valid = null;\n state.description = description;\n\n // Set title\n if (title) {\n state.title = title;\n }\n else {\n state.title = STAC.getDisplayTitle(state.data, state.catalogTitle);\n if (state.data) {\n let description = state.data.getMetadata('description');\n if (Utils.hasText(description)) {\n state.description = description;\n }\n }\n }\n\n if (state.data) {\n let source = state.data.isItem() ? state.data.properties : state.data;\n let languages = Array.isArray(source.languages) ? source.languages.slice() : [];\n if (Utils.isObject(source.language)) {\n languages.unshift(source.language);\n }\n state.dataLanguages = languages.filter(lang => Utils.isObject(lang) && typeof lang.code === 'string');\n }\n },\n errored(state, { url, error }) {\n if (!(error instanceof Error)) {\n error = new Error(error);\n }\n Vue.set(state.database, url, error);\n },\n valid(state, valid) {\n state.valid = valid;\n },\n queue(state, url) {\n state.queue.push(url);\n },\n unqueue(state, url) {\n let i = state.queue.indexOf(url);\n if (i !== -1) {\n state.queue.splice(i, 1);\n }\n },\n removeFromQueue(state, num) {\n state.queue.splice(0, num);\n },\n setConformanceClasses(state, classes) {\n if (Array.isArray(classes)) {\n state.conformsTo = classes;\n }\n },\n setApiItemsLink(state, link) {\n state.apiItemsLink = link;\n },\n toggleApiItemsLoading(state, collectionId = '') {\n if (state.apiItemsLoading[collectionId]) {\n Vue.delete(state.apiItemsLoading, collectionId);\n }\n else {\n Vue.set(state.apiItemsLoading, collectionId, true);\n }\n },\n setApiItems(state, { data, stac, show }) {\n if (!Utils.isObject(data) || !Array.isArray(data.features)) {\n return;\n }\n let apiItems = data.features.map(feature => processSTAC(state, feature));\n\n if (show) {\n state.apiItems = apiItems;\n }\n\n // Handle pagination links\n let pages = Utils.getPaginationLinks(data);\n\n if (show) {\n state.apiItemsPagination = pages;\n }\n\n if (stac instanceof STAC) {\n // ToDo: Prev link only required when state.apiItems is not cached(?) -> cache apiItems?\n stac.setApiData(apiItems, pages.next, pages.prev);\n }\n },\n addApiCollections(state, { data, stac, show }) {\n if (!Utils.isObject(data) || !Array.isArray(data.collections)) {\n return;\n }\n\n let collections = data.collections.map(collection => processSTAC(state, collection));\n let nextLink = Utils.getLinkWithRel(data.links, 'next');\n if (show) {\n state.nextCollectionsLink = nextLink;\n state.apiCollections = state.apiCollections.concat(collections);\n }\n if (stac instanceof STAC) {\n stac.setApiData(collections, nextLink);\n }\n },\n resetApiItems(state, link) {\n state.apiItems = [];\n state.apiItemsLink = link;\n state.apiItemsPagination = {};\n },\n parents(state, parents) {\n state.parents = parents;\n },\n showGlobalError(state, error) {\n console.error(error);\n state.globalError = error;\n }\n },\n actions: {\n async switchLocale(cx, {locale, userSelected}) {\n cx.commit('config', {locale});\n\n if (cx.state.storeLocale && userSelected) {\n try {\n window.localStorage.setItem('locale', locale);\n } catch (error) {\n console.error(error);\n }\n }\n\n // Locale for UI\n let uiLanguage = getBest(cx.state.supportedLocales, locale, cx.state.fallbackLocale);\n // Locale for data\n let dataLanguageCodes = cx.state.dataLanguages.map(l => l.code);\n let dataLanguageFallback = cx.state.dataLanguages.length > 0 ? cx.state.dataLanguages[0].code : uiLanguage;\n let dataLanguage = getBest(dataLanguageCodes, locale, dataLanguageFallback);\n\n cx.commit('languages', {dataLanguage, uiLanguage});\n cx.commit('setQueryParameter', { type: 'state', key: 'language', value: locale });\n },\n async setAuth(cx, value) {\n if (!Utils.hasText(value)) {\n value = null;\n }\n // Set the value the user has provided separately\n cx.commit('setAuthData', value);\n\n // Format the value and add it to query parameters or headers\n let authConfig = cx.state.authConfig;\n let key = authConfig.key;\n if (value) {\n if (authConfig.formatter === 'Bearer') {\n value = `Bearer ${value}`;\n }\n else if (typeof authConfig.formatter === 'function') {\n value = authConfig.formatter(value);\n }\n }\n if (!Utils.hasText(value)) {\n value = undefined;\n }\n if (authConfig.type === 'query') {\n cx.commit('setQueryParameter', {type: 'private', key, value});\n }\n else if (authConfig.type === 'header') {\n cx.commit('setRequestHeader', {key, value});\n }\n },\n async loadBackground(cx, count) {\n let urls = cx.state.queue.slice(0, count);\n if (urls.length > 0) {\n let promises = [];\n for (let url of urls) {\n promises.push(cx.dispatch('load', { url }));\n }\n cx.commit('removeFromQueue', count);\n return await Promise.all(promises);\n }\n },\n async loadParents(cx) {\n if (!(cx.state.data instanceof STAC)) {\n cx.commit('parents', []);\n return;\n }\n\n let parents = [];\n let stac = cx.state.data;\n while (stac) {\n let parentLink = stac.getLinkWithRel('parent') || stac.getLinkWithRel('root');\n if (!parentLink) {\n break;\n }\n let url = Utils.toAbsolute(parentLink.href, stac.getAbsoluteUrl());\n await cx.dispatch('load', { url, loadApi: true });\n let parentStac = cx.getters.getStac(url, true);\n if (parentStac instanceof Error) {\n cx.commit('parents', parentStac);\n return;\n }\n if (parentStac === stac) {\n break;\n }\n parents.push(parentStac);\n stac = parentStac;\n }\n cx.commit('parents', parents);\n },\n async load(cx, args) {\n let { url, show, loadApi, loadRoot, force } = args;\n\n let path = cx.getters.toBrowserPath(url);\n url = Utils.toAbsolute(url, cx.state.url);\n\n // Load the root catalog data if not available (e.g. after page refresh or external access)\n if (!loadRoot && path !== '/' && cx.state.catalogUrl && !cx.getters.getStac(cx.state.catalogUrl)) {\n await cx.dispatch(\"load\", { url: cx.state.catalogUrl, loadApi: true, loadRoot: true });\n }\n\n if (force) {\n cx.commit('clear', url);\n }\n\n let loading = new Loading(show, loadApi);\n let data = cx.state.database[url];\n if (data instanceof Loading) {\n cx.commit('updateLoading', { url, show, loadApi });\n return;\n }\n else if (!data || (data instanceof STAC && data.isPotentiallyIncomplete())) {\n cx.commit('loading', { url, loading });\n try {\n let response = await stacRequest(cx, url);\n if (!Utils.isObject(response.data)) {\n throw new BrowserError(i18n.t('errors.invalidJsonObject'));\n }\n data = new STAC(response.data, url, path);\n if (show) {\n // If we prefer another language abort redirect to the new language\n let localeLink = data.getLocaleLink(cx.state.dataLanguage);\n if (localeLink) {\n router.replace(cx.getters.toBrowserPath(localeLink.href));\n return;\n }\n }\n\n cx.commit('loaded', { url, data });\n\n if (!cx.getters.root) {\n let root = data.getLinkWithRel('root');\n if (root) {\n cx.commit('config', { catalogUrl: Utils.toAbsolute(root.href, url) });\n }\n }\n\n let conformanceLink = data.getStacLinkWithRel('conformance');\n if (Array.isArray(data.conformsTo) && data.conformsTo.length > 0) {\n cx.commit('setConformanceClasses', data.conformsTo);\n }\n else if (conformanceLink) {\n await cx.dispatch('loadOgcApiConformance', conformanceLink);\n }\n } catch (error) {\n if (cx.state.authConfig && isAuthenticationError(error)) {\n cx.commit('clear', url);\n cx.commit('requestAuth', () => cx.dispatch('load', args));\n return;\n }\n console.error(error);\n cx.commit('errored', { url, error });\n }\n }\n\n if (loading.loadApi && data instanceof STAC) {\n // Load API Collections\n if (data.getApiCollectionsLink()) {\n let args = { stac: data, show: loading.show };\n try {\n await cx.dispatch('loadNextApiCollections', args);\n } catch (error) {\n if (cx.state.authConfig && isAuthenticationError(error)) {\n cx.commit('requestAuth', () => cx.dispatch('loadNextApiCollections', args));\n }\n else {\n cx.commit('showGlobalError', {\n message: i18n.t('errors.loadApiCollectionsFailed'),\n error\n });\n }\n }\n }\n // Load API Items\n if (data.getApiItemsLink()) {\n let args = { stac: data, show: loading.show };\n try {\n await cx.dispatch('loadApiItems', args);\n } catch (error) {\n if (cx.state.authConfig && isAuthenticationError(error)) {\n cx.commit('requestAuth', () => cx.dispatch('loadApiItems', args));\n }\n else {\n cx.commit('showGlobalError', {\n message: i18n.t('errors.loadApiItemsFailed'),\n error\n });\n }\n }\n }\n }\n\n if (loading.show) {\n cx.commit('showPage', { url });\n }\n },\n async loadApiItems(cx, { link, stac, show, filters }) {\n let collectionId = stac instanceof STAC ? stac.id : '';\n cx.commit('toggleApiItemsLoading', collectionId);\n\n try {\n let baseUrl = cx.state.url;\n if (stac instanceof STAC) {\n link = stac.getApiItemsLink();\n baseUrl = stac.getAbsoluteUrl();\n }\n\n link = Utils.addFiltersToLink(link, filters, cx.state.itemsPerPage);\n\n let response = await stacRequest(cx, link);\n if (!Utils.isObject(response.data) || !Array.isArray(response.data.features)) {\n throw new BrowserError(i18n.t('errors.invalidStacItems'));\n }\n else {\n response.data.features = response.data.features.map(item => {\n try {\n if (!Utils.isObject(item) || item.type !== 'Feature') {\n return null;\n }\n let selfLink = Utils.getLinkWithRel(item.links, 'self');\n let url;\n if (selfLink?.href) {\n url = Utils.toAbsolute(selfLink.href, baseUrl);\n }\n else if (typeof item.id !== 'undefined') {\n let apiCollectionsLink = cx.getters.root?.getApiCollectionsLink();\n if (baseUrl) {\n url = Utils.toAbsolute(`items/${item.id}`, baseUrl);\n }\n else if (apiCollectionsLink) {\n url = Utils.toAbsolute(`${collectionId}/items/${item.id}`, apiCollectionsLink.href);\n }\n else if (cx.state.catalogUrl) {\n url = Utils.toAbsolute(`collections/${collectionId}/items/${item.id}`, cx.state.catalogUrl);\n }\n else {\n return null;\n }\n }\n else {\n return null;\n }\n let data = cx.getters.getStac(url);\n if (data) {\n return data;\n }\n else {\n data = new STAC(item, url, cx.getters.toBrowserPath(url));\n data.markPotentiallyIncomplete();\n cx.commit('loaded', { data, url });\n return data;\n }\n } catch (error) {\n console.error(error);\n return null;\n }\n }).filter(item => item instanceof STAC);\n if (show) {\n cx.commit('setApiItemsLink', link);\n }\n cx.commit('setApiItems', { data: response.data, stac, show });\n cx.commit('toggleApiItemsLoading', collectionId);\n return response;\n }\n } catch (error) {\n cx.commit('toggleApiItemsLoading', collectionId);\n throw error;\n }\n },\n async loadNextApiCollections(cx, { stac, show }) {\n let link;\n if (stac) {\n // First page\n if (cx.state.apiCollections.length > 0) {\n // If we have already loaded collections, skip loading the first page\n return;\n }\n link = stac.getLinkWithRel('data');\n }\n else {\n // Second page and after\n stac = cx.state.data;\n link = cx.state.nextCollectionsLink;\n }\n if (!link) {\n return;\n }\n let response = await stacRequest(cx, link);\n if (!Utils.isObject(response.data) || !Array.isArray(response.data.collections)) {\n throw new BrowserError(i18n.t('errors.invalidStacCollections'));\n }\n else {\n response.data.collections = response.data.collections.map(collection => {\n let selfLink = Utils.getLinkWithRel(collection.links, 'self');\n let url;\n if (selfLink?.href) {\n url = Utils.toAbsolute(selfLink.href, cx.state.url || stac.getAbsoluteUrl());\n }\n else {\n url = Utils.toAbsolute(`collections/${collection.id}`, cx.state.catalogUrl || stac.getAbsoluteUrl());\n }\n let data = cx.getters.getStac(url);\n if (data) {\n return data;\n }\n else {\n data = new STAC(collection, url, cx.getters.toBrowserPath(url));\n data.markPotentiallyIncomplete();\n cx.commit('loaded', { data, url });\n return data;\n }\n });\n cx.commit('addApiCollections', { data: response.data, stac, show });\n }\n },\n async loadOgcApiConformance(cx, link) {\n let response = await stacRequest(cx, link);\n if (Utils.isObject(response.data) && Array.isArray(response.data.conformsTo)) {\n cx.commit('setConformanceClasses', response.data.conformsTo);\n }\n },\n async loadGeoJson(cx, link) {\n try {\n let response = await stacRequest(cx, link);\n return response.data; // Use data with $refs included as fallback anyway\n } catch (error) {\n return null;\n }\n },\n async retryAfterAuth(cx) {\n let errorFn = error => cx.commit('showGlobalError', {\n error,\n message: i18n.t('errors.authFailed')\n });\n\n for (let callback of cx.state.doAuth) {\n try {\n let p = callback();\n if (p instanceof Promise) {\n p.catch(errorFn);\n }\n } catch (error) {\n errorFn(error);\n }\n }\n },\n async validate(cx, url) {\n if (typeof cx.state.valid === 'boolean') {\n return;\n }\n try {\n let uri = URI('https://api.staclint.com/url');\n uri.addSearch('stac_url', url);\n let response = await axios.get(uri.toString());\n cx.commit('valid', Boolean(response.data?.body?.valid_stac));\n } catch (error) {\n cx.commit('valid', error);\n }\n }\n },\n });\n}\n\nexport default getStore;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-row',[_c('b-col',{attrs:{\"md\":\"12\"}},[_c('Source',{staticClass:\"float-right\",attrs:{\"title\":_vm.title,\"stacUrl\":_vm.url,\"stac\":_vm.data}}),_c('h1',[(_vm.icon)?[_c('img',{staticClass:\"icon mr-2\",attrs:{\"src\":_vm.icon.href,\"alt\":_vm.icon.title,\"title\":_vm.icon.title}})]:_vm._e(),_c('span',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.title))])],2),(_vm.url || _vm.isSearchPage())?_c('p',{staticClass:\"lead\"},[(_vm.containerLink)?_c('i18n',{staticClass:\"in mr-3\",attrs:{\"tag\":\"span\",\"path\":\"in\"},scopedSlots:_vm._u([{key:\"catalog\",fn:function(){return [_c('StacLink',{attrs:{\"data\":_vm.containerLink}})]},proxy:true}],null,false,1458487365)}):_vm._e(),_c('b-button-group',[(_vm.parentLink)?_c('b-button',{attrs:{\"to\":_vm.toBrowserPath(_vm.parentLink.href),\"title\":_vm.parentLinkTitle,\"variant\":\"outline-primary\",\"size\":\"sm\"}},[_c('b-icon-arrow-90deg-up'),_vm._v(\" \"),_c('span',{staticClass:\"button-label prio\"},[_vm._v(_vm._s(_vm.$t('goToParent.label')))])],1):_vm._e(),(_vm.collectionLink)?_c('b-button',{attrs:{\"to\":_vm.toBrowserPath(_vm.collectionLink.href),\"title\":_vm.collectionLinkTitle,\"variant\":\"outline-primary\",\"size\":\"sm\"}},[_c('b-icon-folder-symlink'),_vm._v(\" \"),_c('span',{staticClass:\"button-label prio\"},[_vm._v(_vm._s(_vm.$t('goToCollection.label')))])],1):_vm._e(),_c('b-button',{directives:[{name:\"b-toggle\",rawName:\"v-b-toggle.sidebar\",modifiers:{\"sidebar\":true}}],attrs:{\"variant\":\"outline-primary\",\"size\":\"sm\",\"title\":_vm.$t('browse')},on:{\"click\":function($event){return _vm.$emit('enableSidebar')}}},[_c('b-icon-book'),_vm._v(\" \"),_c('span',{staticClass:\"button-label prio\"},[_vm._v(_vm._s(_vm.$t('browse')))])],1),(_vm.canSearch)?_c('b-button',{attrs:{\"variant\":\"outline-primary\",\"size\":\"sm\",\"to\":_vm.searchBrowserLink,\"title\":_vm.$t('search.title'),\"pressed\":_vm.isSearchPage()}},[_c('b-icon-search'),_vm._v(\" \"),_c('span',{staticClass:\"button-label prio\"},[_vm._v(_vm._s(_vm.$t('search.title')))])],1):_vm._e(),(_vm.authConfig)?_c('b-button',{attrs:{\"variant\":\"outline-primary\",\"size\":\"sm\",\"title\":_vm.$t('authentication.button.title')},on:{\"click\":_vm.auth}},[(_vm.authData)?[_c('b-icon-lock'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('authentication.button.authenticated')))])]:[_c('b-icon-unlock'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('authentication.button.authenticate')))])]],2):_vm._e()],1)],1):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"share mt-1\"},[_c('b-button-group',[(_vm.showRoot)?_c('b-button',{attrs:{\"size\":\"sm\",\"variant\":\"outline-primary\",\"id\":\"popover-root-btn\"}},[_c('b-icon-box'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.rootTitle))])],1):_vm._e(),(_vm.stacUrl)?_c('b-button',{attrs:{\"size\":\"sm\",\"variant\":\"outline-primary\",\"id\":\"popover-link-btn\",\"title\":_vm.$t('source.detailsAboutSource')}},[_c('b-icon-link'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('source.label')))])],1):_vm._e(),_c('b-button',{attrs:{\"size\":\"sm\",\"variant\":\"outline-primary\",\"id\":\"popover-share-btn\",\"title\":_vm.$t('source.share.withOthers')}},[_c('b-icon-share'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('source.share.label')))])],1),_c('b-dropdown',{attrs:{\"size\":\"sm\",\"variant\":\"outline-primary\",\"right\":\"\",\"title\":_vm.$t('source.language.switch')},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_c('b-icon-flag'),_vm._v(\" \"),_c('span',{staticClass:\"button-label\"},[_vm._v(_vm._s(_vm.$t('source.language.label', {currentLanguage: _vm.currentLanguage})))])]},proxy:true}])},_vm._l((_vm.languages),function(l){return _c('b-dropdown-item',{key:l.code,staticClass:\"lang-item\",on:{\"click\":function($event){return _vm.switchLocale({locale: l.code, userSelected: true})}}},[(_vm.locale === l.code)?_c('b-icon-check'):_c('b-icon-blank'),_c('span',{staticClass:\"title\"},[_vm._v(\" \"+_vm._s(l.native)+\" \"),(l.global && l.global !== l.native)?[_vm._v(\" / \"+_vm._s(l.global))]:_vm._e()],2),(_vm.supportsLanguageExt && (!l.ui || !l.data))?_c('b-icon-exclamation-triangle',{staticClass:\"ml-2\",attrs:{\"title\":l.ui ? _vm.$t('source.language.onlyUI') : _vm.$t('source.language.onlyData')}}):_vm._e()],1)}),1)],1),(_vm.showRoot)?_c('b-popover',{attrs:{\"id\":\"popover-root\",\"target\":\"popover-root-btn\",\"triggers\":\"focus\",\"placement\":\"bottom\",\"container\":\"stac-browser\",\"title\":_vm.rootTitle}},[_c('RootStats')],1):_vm._e(),(_vm.stacUrl)?_c('b-popover',{attrs:{\"id\":\"popover-link\",\"target\":\"popover-link-btn\",\"triggers\":\"focus\",\"placement\":\"bottom\",\"container\":\"stac-browser\",\"title\":_vm.$t('source.title')},on:{\"show\":_vm.validate}},[(_vm.stac)?[(_vm.stacId)?_c('b-row',{staticClass:\"stac-id\"},[_c('b-col',{attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(_vm.$t('source.id')))]),_c('b-col',[_c('code',[_vm._v(_vm._s(_vm.stacId))]),_c('CopyButton',{staticClass:\"ml-2\",attrs:{\"copyText\":_vm.stacId,\"button-props\":{size: 'sm'},\"variant\":\"primary\"}})],1)],1):_vm._e(),(_vm.stacVersion)?_c('b-row',{staticClass:\"stac-version\"},[_c('b-col',{attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(_vm.$t('source.stacVersion')))]),_c('b-col',[_vm._v(_vm._s(_vm.stacVersion))])],1):_vm._e(),(_vm.canValidate)?_c('b-row',{staticClass:\"validation\"},[_c('b-col',{attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(_vm.$t('source.valid')))]),_c('b-col',[(_vm.valid === null)?_c('b-spinner',{attrs:{\"label\":_vm.$t('source.validating'),\"small\":\"\"}}):(_vm.valid === true)?[_vm._v(\"✔️\")]:(_vm.valid === false)?[_vm._v(\"❌\")]:[_vm._v(_vm._s(_vm.$t('source.validationNA')))]],2)],1):_vm._e(),_c('hr')]:_vm._e(),_c('Url',{attrs:{\"id\":\"stacUrl\",\"url\":_vm.stacUrl,\"label\":_vm.$t('source.locatedAt')}})],2):_vm._e(),_c('b-popover',{attrs:{\"id\":\"popover-share\",\"target\":\"popover-share-btn\",\"triggers\":\"focus\",\"placement\":\"bottom\",\"container\":\"stac-browser\",\"title\":_vm.$t('source.share.title')}},[_c('Url',{attrs:{\"id\":\"browserUrl\",\"url\":_vm.browserUrl(),\"label\":_vm.$t('source.share.sharePageWithOthers'),\"open\":false}}),_c('hr'),_c('b-button',{staticClass:\"twitter mr-1\",attrs:{\"href\":_vm.twitterUrl}},[_c('b-icon-twitter'),_vm._v(\" \"+_vm._s(_vm.$t('source.share.twitter')))],1),_c('b-button',{attrs:{\"variant\":\"dark\",\"href\":_vm.mailTo}},[_c('b-icon-envelope'),_vm._v(\" \"+_vm._s(_vm.$t('source.share.email')))],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-form-group',{attrs:{\"label\":_vm.label,\"label-for\":_vm.id}},[_c('b-input-group',{attrs:{\"size\":\"sm\"}},[_c('b-form-input',{ref:\"input\",attrs:{\"id\":_vm.id,\"value\":_vm.url,\"readonly\":\"\"}}),_c('b-input-group-append',[_c('CopyButton',{attrs:{\"copyText\":_vm.url,\"variant\":\"primary\"}}),(_vm.open)?_c('b-button',{attrs:{\"href\":_vm.url,\"target\":\"_blank\",\"variant\":\"primary\",\"title\":_vm.$t('open')}},[_c('b-icon-arrow-up-right-square')],1):_vm._e()],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n \n \n \n \n \n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Url.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Url.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Url.vue?vue&type=template&id=74684ede&scoped=true\"\nimport script from \"./Url.vue?vue&type=script&lang=js\"\nexport * from \"./Url.vue?vue&type=script&lang=js\"\nimport style0 from \"./Url.vue?vue&type=style&index=0&id=74684ede&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"74684ede\",\n null\n \n)\n\nexport default component.exports","\n \n \n \n {{ rootTitle }}\n \n \n {{ $t('source.label') }}\n \n \n {{ $t('source.share.label') }}\n \n \n \n {{ $t('source.language.label', {currentLanguage}) }}\n \n \n \n \n \n {{ l.native }}\n / {{ l.global }}\n \n \n \n \n \n\n \n \n \n\n \n \n \n {{ $t('source.id') }}\n \n {{ stacId }}
\n \n \n \n \n {{ $t('source.stacVersion') }}\n {{ stacVersion }}\n \n \n {{ $t('source.valid') }}\n \n \n ✔️\n ❌\n {{ $t('source.validationNA') }}\n \n \n
\n \n \n \n\n \n \n
\n \n {{ $t('source.share.email') }}\n \n
\n\n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Source.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Source.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Source.vue?vue&type=template&id=714ef03c&scoped=true\"\nimport script from \"./Source.vue?vue&type=script&lang=js\"\nexport * from \"./Source.vue?vue&type=script&lang=js\"\nimport style0 from \"./Source.vue?vue&type=style&index=0&id=714ef03c&prod&lang=scss\"\nimport style1 from \"./Source.vue?vue&type=style&index=1&id=714ef03c&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"714ef03c\",\n null\n \n)\n\nexport default component.exports","\n \n \n \n \n \n \n \n {{ title }}\n
\n \n \n \n \n \n \n {{ $t('goToParent.label') }}\n \n \n {{ $t('goToCollection.label') }}\n \n \n {{ $t('browse') }}\n \n \n {{ $t('search.title') }}\n \n \n \n {{ $t('authentication.button.authenticated') }}\n \n \n {{ $t('authentication.button.authenticate') }}\n \n \n \n
\n \n \n\n\n\n\n\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StacHeader.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StacHeader.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./StacHeader.vue?vue&type=template&id=e9cfbf72&scoped=true\"\nimport script from \"./StacHeader.vue?vue&type=script&lang=js\"\nexport * from \"./StacHeader.vue?vue&type=script&lang=js\"\nimport style0 from \"./StacHeader.vue?vue&type=style&index=0&id=e9cfbf72&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e9cfbf72\",\n null\n \n)\n\nexport default component.exports","\n \n 0\" />\n \n \n \n \n \n \n \n \n\n\n\n\n","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StacBrowser.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StacBrowser.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./StacBrowser.vue?vue&type=template&id=272308a9\"\nimport script from \"./StacBrowser.vue?vue&type=script&lang=js\"\nexport * from \"./StacBrowser.vue?vue&type=script&lang=js\"\nimport style0 from \"./StacBrowser.vue?vue&type=style&index=0&id=272308a9&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\";\nimport StacBrowser from \"./StacBrowser.vue\";\nimport i18n, { loadDefaultMessages } from './i18n';\n\nexport default function init() {\n return loadDefaultMessages().then(() => {\n return new Vue({\n i18n,\n render: h => h(StacBrowser)\n }).$mount(\"#stac-browser\");\n });\n}\n","import Vue from \"vue\";\nimport init from \"./init\";\n\nVue.config.productionTip = false;\n\ninit();\n","import Utils, { geojsonMediaType } from \"../utils\";\nimport Migrate from '@radiantearth/stac-migrate';\nimport { getBest } from '../locale-id';\n\nlet stacObjCounter = 0;\n\n// STAC Entity\nclass STAC {\n\n constructor(data, url, path, migrate = true) {\n this._id = stacObjCounter++;\n this._url = url;\n this._path = path;\n this._apiChildrenListeners = {};\n this._incomplete = false;\n this._apiChildren = {\n list: [],\n prev: false,\n next: false\n };\n\n if (migrate) {\n // Uncomment this line if the old checksum: fields should be converted\n // This is usually not needed so it's not enabled by default to shrink the bundle size\n // Migrate.enableMultihash(require('multihashes'));\n if (data.type === 'FeatureCollection') {\n data.features = data.features.map(item => Migrate.item(item, false));\n }\n else {\n data = Migrate.stac(data, false);\n }\n }\n for (let key in data) {\n if (typeof this[key] === 'undefined') {\n this[key] = data[key];\n }\n }\n }\n\n isPotentiallyIncomplete() {\n return this._incomplete;\n }\n\n markPotentiallyIncomplete() {\n this._incomplete = true;\n }\n\n isItem() {\n return this.type === 'Feature';\n }\n\n isCatalog() {\n return this.type === 'Catalog';\n }\n\n isCatalogLike() {\n return this.isCatalog() || this.isCollection();\n }\n\n isCollection() {\n return this.type === 'Collection';\n }\n\n isItemCollection() {\n return this.type === 'FeatureCollection';\n }\n\n hasApiData() {\n return this._apiChildren.list.length > 0;\n }\n\n setApiDataListener(id, listener = null) {\n if (typeof listener === 'function') {\n this._apiChildrenListeners[id] = listener;\n }\n else {\n delete this._apiChildrenListeners[id];\n }\n }\n\n setApiData(list, next = null, prev = null) {\n if (prev) {\n this._apiChildren.prev = prev;\n }\n if (next) {\n this._apiChildren.next = next;\n }\n this._apiChildren.list = list;\n\n for (let id in this._apiChildrenListeners) {\n try {\n this._apiChildrenListeners[id](this._apiChildren);\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n getFileFormats() {\n let assets = [];\n if ((this.isItem() || this.isCollection()) && Utils.isObject(this.assets)) {\n assets = assets.concat(Object.values(this.assets));\n }\n if (this.isCollection() && Utils.isObject(this.item_assets)) {\n assets = assets.concat(Object.values(this.item_assets));\n }\n return assets\n .filter(asset => Array.isArray(asset.roles) && asset.roles.includes('data') && typeof asset.type === 'string') // Look for data files\n .map(asset => asset.type) // Array shall only contain media types\n .filter((v, i, a) => a.indexOf(v) === i); // Unique values\n }\n\n getChildren(priority = null) {\n if (!this.isCatalogLike()) {\n return [];\n }\n\n let showCollections = !priority || priority === 'collections';\n let showChilds = !priority || priority === 'childs';\n\n let children = [];\n if (showCollections && this._apiChildren.prev) {\n children.push(this._apiChildren.prev);\n }\n if (showCollections && this._apiChildren.list.length > 0) {\n children = this._apiChildren.list.slice(0);\n }\n if (showChilds) {\n children = STAC.addMissingChildren(children, this).concat(this.getLinksWithRels(['item']));\n }\n if (showCollections && this._apiChildren.next) {\n children.push(this._apiChildren.next);\n }\n return children;\n }\n\n static addMissingChildren(catalogs, stac) {\n let links = stac.getStacLinksWithRel('child').filter(link => {\n // Don't add links that are already in collections: https://github.com/radiantearth/stac-browser/issues/103\n // ToDo: The runtime of this can probably be improved\n let absoluteUrl = Utils.toAbsolute(link.href, stac.getAbsoluteUrl());\n return !catalogs.find(collection => collection.getAbsoluteUrl() === absoluteUrl);\n });\n // place the children first to avoid conflicts with the paginated collections\n // where the children are always at the end and can never be reached due to infinite scrolling\n return links.concat(catalogs);\n }\n\n getSearchLink() {\n // The search link MUST be 'application/geo+json' as otherwise it's likely not STAC\n // See https://github.com/opengeospatial/ogcapi-features/issues/832\n let links = Utils.getLinksWithRels(this.links, ['search'])\n .filter(link => Utils.isMediaType(link.type, geojsonMediaType))\n .map(link => Object.assign({}, link, {href: Utils.toAbsolute(link.href, this._url)}));\n // Prefer POST if present\n let post = links.find(link => Utils.hasText(link.method) && link.method.toUpperCase() === 'POST');\n return post || links[0] || null;\n }\n\n getApiCollectionsLink() {\n return this.getStacLinkWithRel('data');\n }\n\n getApiItemsLink() {\n return this.getStacLinkWithRel('items');\n }\n\n getMetadata(field) {\n if (this.isItem()) {\n return this.properties[field];\n }\n else if (this.isCatalogLike()) {\n return this[field];\n }\n return null;\n }\n\n getBrowserPath() {\n return this._path;\n }\n\n getAbsoluteUrl() {\n return this._url;\n }\n\n getLocaleLink(locale, fallbackLocale = null) {\n let links = this.getStacLinksWithRel('alternate')\n .filter(link => Utils.hasText(link.hreflang));\n \n let available;\n if (Array.isArray(this.languages)) {\n available = this.languages.map(l => l.code);\n }\n else {\n available = links.map(link => link.hreflang);\n }\n \n let best = getBest(available, locale, fallbackLocale);\n return links.find(link => link.hreflang === best) || null;\n }\n\n getStacLinksWithRel(rel, allowEmpty = true) {\n return Utils.getLinksWithRels(this.links, [rel])\n .filter(link => Utils.isStacMediaType(link.type, allowEmpty));\n }\n\n getStacLinkWithRel(rel, allowEmpty = true) {\n const links = this.getStacLinksWithRel(rel, allowEmpty);\n if (links.length > 0) {\n return links[0];\n }\n else {\n return null;\n }\n }\n\n getLinkWithRel(rel) {\n return Utils.getLinkWithRel(this.links, rel);\n }\n\n getLinksWithRels(rels) {\n return Utils.getLinksWithRels(this.links, rels);\n }\n\n getLinksWithOtherRels(rels) {\n return Utils.getLinksWithOtherRels(this.links, rels);\n }\n\n getAssetsWithRoles(roles) {\n let matches = [];\n if (Utils.isObject(this.assets)) {\n for (let key in this.assets) {\n let asset = this.assets[key];\n if (Utils.isObject(asset) && typeof asset.href === 'string' && Array.isArray(asset.roles) && asset.roles.find(role => roles.includes(role))) {\n matches.push(asset);\n }\n }\n }\n return matches;\n }\n\n static getDisplayTitle(sources, fallbackTitle = null) {\n if (!Array.isArray(sources)) {\n sources = [sources];\n }\n let stac = sources.find(o => o instanceof STAC);\n let link = sources.find(o => Utils.isObject(o) && !(o instanceof STAC));\n // Get title from STAC item/catalog/collection\n if (stac && Utils.hasText(stac.getTitle())) {\n return stac.getTitle();\n }\n // Get title from link\n else if (link && Utils.hasText(link.title)) {\n return link.title;\n }\n // Use id from STAC item/catalog/collection instead of titles\n else if (stac && Utils.hasText(stac.id)) {\n return stac.id;\n }\n // Use fallback title\n else if (Utils.hasText(fallbackTitle)) {\n return fallbackTitle;\n }\n // Use file or directory name from STAC as title\n else if (stac) {\n return Utils.titleForHref(stac.getAbsoluteUrl(), true);\n }\n // Use file or directory name from link as title\n else if (link && Utils.hasText(link.href)) {\n return Utils.titleForHref(link.href, true);\n }\n // Nothing available, return \"untitled\"\n else {\n return \"Untitled\";\n }\n }\n\n getTitle() {\n return this.getMetadata(\"title\");\n }\n\n _linkToAbsolute(link) {\n return Object.assign({}, link, { href: Utils.toAbsolute(link.href, this.getAbsoluteUrl()) });\n }\n\n getIcons() {\n return this.getLinksWithRels(['icon'])\n .filter(img => Utils.canBrowserDisplayImage(img))\n .map(img => this._linkToAbsolute(img));\n }\n\n /**\n * Get the thumbnails from the assets and links in a STAC entity.\n * \n * @param {boolean} browserOnly - Return only images that can be shown in a browser natively (PNG/JPG/GIF/WEBP).\n * @param {?string} prefer - If not `null` (default), prefers a role over the other. Either `thumbnail` or `overview`.\n * @returns \n */\n getThumbnails(browserOnly = false, prefer = null) { // prefer can be either \n let thumbnails = this.getAssetsWithRoles(['thumbnail', 'overview']);\n // Get from links only if no assets are available as they should usually be the same as in assets\n if (thumbnails.length === 0) {\n thumbnails = this.getLinksWithRels(['preview']);\n }\n // Some old catalogs use just a asset key\n if (thumbnails.length === 0 && Utils.isObject(this.assets) && Utils.isObject(this.assets.thumbnail)) {\n thumbnails = [this.assets.thumbnail];\n }\n if (browserOnly) {\n // Remove all images that can't be displayed in a browser\n thumbnails = thumbnails.filter(img => Utils.canBrowserDisplayImage(img));\n }\n if (prefer && thumbnails.length > 1) {\n // Prefer one role over the other.\n // The two step approach with two filters ensures the same sort bevahiour across all browsers:\n // see https://github.com/radiantearth/stac-browser/issues/370\n let filter = img => img.roles.includes(prefer);\n thumbnails = thumbnails\n .filter(filter)\n .concat(thumbnails.filter(img => !filter(img)));\n }\n return thumbnails.map(img => this._linkToAbsolute(img));\n }\n\n equals(other) {\n if (!Utils.isObject(other)) {\n return false;\n }\n if (this === other) {\n return true;\n }\n if (this.id === other.id && this.type == other.type) {\n return true;\n }\n return false;\n }\n\n}\n\nexport default STAC;\n","// STAC relation types\n\n// STAC hierarchical\nexport const stacHierarchy = [\n 'child',\n 'collection',\n 'item',\n 'parent',\n 'root',\n 'self',\n];\n\n// STAC API Pagination\nexport const stacPagination = [\n 'first',\n 'last',\n 'next',\n 'prev',\n 'previous',\n];\n\n// Queryables\nexport const ogcQueryables = [\n 'queryables', // Old way in STAC (deprecated)\n 'http://www.opengis.net/def/rel/ogc/1.0/queryables', // STAC and OGC APIs\n 'ogc-rel:queryables' // Alternative in OGC APIs\n];\n\n// Rels that STAC Browser can navigate to and display natively (i.e. Collections, Catalogs and Items)\nexport const stacBrowserNavigatesTo = [\n 'canonical', // Links to other catalogs or items v\n 'related',\n 'derived_from',\n 'latest-version', // version extension v\n 'predecessor-version',\n 'successor-version',\n 'source', // label extension,\n 'alternate' // language extension\n].concat(stacHierarchy).concat(stacPagination);\n\n// Rels that are handled in a special way and should not be shown in the link list\nexport const stacBrowserSpecialHandling = [\n 'conformance', // API related v\n 'data',\n 'items',\n 'search',\n 'icon', // Other v\n 'license',\n].concat(stacHierarchy).concat(stacPagination).concat(ogcQueryables);\n\n// OGC APIs\nexport const ogcRelPrefix = 'http://www.opengis.net/def/rel/ogc/1.0/';\n","import axios from \"axios\";\nimport URI from \"urijs\";\nimport Utils from \"../utils\";\n\nexport class Loading {\n\n constructor(show = false, loadApi = false) {\n this.show = Boolean(show);\n this.loadApi = Boolean(loadApi);\n }\n\n}\n\nexport async function stacRequest(cx, link) {\n let opts;\n let headers = {\n 'Accept-Language': cx.getters.acceptedLanguages\n };\n if (Utils.isObject(link)) {\n let method = typeof link.method === 'string' ? link.method.toLowerCase() : 'get';\n let url = cx.getters.getRequestUrl(link.href);\n if (Utils.hasText(link.type)) {\n headers.Accept = link.type;\n }\n if (!cx.getters.isExternalUrl(url)) {\n Object.assign(headers, cx.state.requestHeaders);\n }\n if (Utils.isObject(link.headers)) {\n Object.assign(headers, link.headers);\n }\n opts = {\n method,\n url,\n headers,\n data: link.body\n // ToDo: Support for merge property from STAC API\n };\n }\n else if (typeof link === 'string') {\n let url = cx.getters.getRequestUrl(link);\n if (!cx.getters.isExternalUrl(url)) {\n Object.assign(headers, cx.state.requestHeaders);\n }\n opts = {\n method: 'get',\n url,\n headers\n };\n }\n else {\n opts = link;\n }\n return await axios(opts);\n}\n\n\nexport function unproxyUrl(absoluteUrl, proxy) {\n if (absoluteUrl instanceof URI) {\n absoluteUrl = absoluteUrl.toString();\n }\n if (typeof absoluteUrl === 'string' && Array.isArray(proxy)) {\n return absoluteUrl.replace(proxy[1], proxy[0]);\n }\n return absoluteUrl;\n}\n\nexport function proxyUrl(absoluteUrl, proxy) {\n if (absoluteUrl instanceof URI) {\n absoluteUrl = absoluteUrl.toString();\n }\n if (typeof absoluteUrl === 'string' && Array.isArray(proxy)) {\n return absoluteUrl.replace(proxy[0], proxy[1]);\n }\n return absoluteUrl;\n}\n\nexport function processSTAC(state, stac) {\n if (typeof state.preprocessSTAC === 'function') {\n stac = state.preprocessSTAC(stac, state);\n }\n return Object.freeze(stac);\n}\n\nexport function isAuthenticationError(error) {\n return [401, 403].includes(error?.response?.status);\n}\n\nexport function addQueryIfNotExists(uri, query) {\n if (Utils.size(query) == 0) {\n return uri;\n }\n for (let key in query) {\n if (!uri.hasQuery(key)) {\n uri.addQuery(key, query[key]);\n }\n }\n return uri;\n}","import URI from 'urijs';\nimport removeMd from 'remove-markdown';\nimport { stacPagination } from \"./rels\";\n\nexport const commonFileNames = ['catalog', 'collection', 'item'];\n\nexport const geojsonMediaType = \"application/geo+json\";\n\nexport const schemaMediaType = \"application/schema+json\";\n\nexport const stacMediaTypes = [\n 'application/json',\n geojsonMediaType,\n 'text/json'\n];\n\nexport const browserImageTypes = [\n 'image/gif',\n 'image/jpg',\n 'image/jpeg',\n 'image/apng',\n 'image/png',\n 'image/webp'\n];\n\nexport const cogMediaTypes = [\n \"image/tiff; application=geotiff; profile=cloud-optimized\",\n \"image/vnd.stac.geotiff; cloud-optimized=true\"\n];\n\nexport const geotiffMediaTypes = [\n \"application/geotiff\",\n \"image/tiff; application=geotiff\",\n \"image/vnd.stac.geotiff\",\n].concat(cogMediaTypes);\n\nexport const browserProtocols = [\n 'http',\n 'https'\n];\n\nexport const imageMediaTypes = browserImageTypes.concat(geotiffMediaTypes);\nexport const mapMediaTypes = imageMediaTypes.concat([geojsonMediaType]);\n\nexport class BrowserError extends Error {\n constructor(message) {\n super(message);\n }\n}\n\n/**\n * General utilities\n * \n * @class\n */\nexport default class Utils {\n\n /**\n * Checks whether a variable is a real object or not.\n * \n * This is a more strict version of `typeof x === 'object'` as this example would also succeeds for arrays and `null`.\n * This function only returns `true` for real objects and not for arrays, `null` or any other data types.\n * \n * @param {*} obj - A variable to check.\n * @returns {boolean} - `true` is the given variable is an object, `false` otherwise.\n */\n static isObject(obj) {\n return (typeof obj === 'object' && obj === Object(obj) && !Array.isArray(obj));\n }\n\n /**\n * Computes the size of an array (number of array elements) or object (number of key-value-pairs).\n * \n * Returns 0 for all other data types.\n * \n * @param {*} obj \n * @returns {integer}\n */\n static size(obj) {\n if (typeof obj === 'object' && obj !== null) {\n if (Array.isArray(obj)) {\n return obj.length;\n }\n else {\n return Object.keys(obj).length;\n }\n }\n return 0;\n }\n\n static isStacMediaType(type, allowEmpty = false) {\n return Utils.isMediaType(type, stacMediaTypes, allowEmpty);\n }\n\n static isMediaType(type, types, allowEmpty = false) {\n if (!Array.isArray(types)) {\n types = [types];\n }\n if (allowEmpty && !type) {\n return true;\n }\n else if (typeof type !== 'string') {\n return false;\n }\n else {\n return types.includes(type.toLowerCase());\n }\n }\n\n /**\n * Checks whether a variable is a string and contains at least one character.\n * \n * @param {*} string - A variable to check.\n * @returns {boolean} - `true` is the given variable is an string with length > 0, `false` otherwise.\n */\n static hasText(string) {\n return (typeof string === 'string' && string.length > 0);\n }\n\n static shortenTitle(fullStr, strLen, separator = '…') {\n if (fullStr.length <= strLen) {\n return fullStr;\n }\n\n let sepLen = separator.length;\n let charsToShow = strLen - sepLen;\n let frontChars = Math.ceil(charsToShow/2);\n let backChars = Math.floor(charsToShow/2);\n return fullStr.substr(0, frontChars) + \n separator + \n fullStr.substr(fullStr.length - backChars);\n }\n\n static isGdalVfsUri(url) {\n return typeof url === 'string' && url.startsWith('/vsi') && !url.startsWith('/vsicurl/');\n }\n\n static toAbsolute(href, baseUrl, stringify = true) {\n return Utils.normalizeUri(href, baseUrl, false, stringify);\n }\n\n static normalizeUri(href, baseUrl = null, noParams = false, stringify = true) {\n // Convert vsicurl URLs to normal URLs\n if (typeof href === 'string' && href.startsWith('/vsicurl/')) {\n href = href.replace(/^\\/vsicurl\\//, '');\n }\n // Parse URL and make absolute, if required\n let uri = URI(href);\n // Don't convert GDAL VFS URIs: https://github.com/radiantearth/stac-browser/issues/116\n if (baseUrl && uri.is(\"relative\") && !Utils.isGdalVfsUri(href)) {\n uri = uri.absoluteTo(baseUrl);\n }\n uri.normalize();\n if (noParams) {\n uri.query(\"\");\n uri.fragment(\"\");\n }\n return stringify ? uri.toString() : uri;\n }\n\n static getLinkWithRel(links, rel) {\n return Array.isArray(links) ? links.find(link => Utils.isObject(link) && Utils.hasText(link.href) && link.rel === rel) : null;\n }\n\n static getLinksWithRels(links, rels) {\n return Array.isArray(links) ? links.filter(link => Utils.isObject(link) && Utils.hasText(link.href) && rels.includes(link.rel)) : [];\n }\n\n static getLinksWithOtherRels(links, rels) {\n return Array.isArray(links) ? links.filter(link => Utils.isObject(link) && Utils.hasText(link.href) && !rels.includes(link.rel)) : [];\n }\n\n static equalUrl(a, b) {\n try {\n let uri1 = URI(a);\n let uri2 = URI(b);\n // Ignore trailing slash in URL paths\n uri1.path(uri1.path().replace(/\\/$/, ''));\n uri2.path(uri2.path().replace(/\\/$/, ''));\n return uri1.equals(uri2);\n } catch (error) {\n return false;\n }\n }\n\n static summarizeMd(text, maxLength = null) {\n if (!Utils.hasText(text)) {\n return '';\n }\n // Best-effort approach to remove some CommonMark (Markdown).\n // Likely not perfect, but seems good enough for most cases.\n text = removeMd(text).replaceAll(/[\\r\\n]+/g, ' ');\n if (maxLength > 0 && text.length > maxLength) {\n text = text.substr(0, maxLength) + '…';\n }\n return text;\n }\n\n static scrollTo(el) {\n if (!el) {\n return;\n }\n var rect = el.getBoundingClientRect();\n var isVisible = rect.top < window.innerHeight && rect.bottom >= 0;\n if (!isVisible) {\n el.scrollIntoView({\n behavior: \"smooth\",\n block: \"start\"\n });\n }\n }\n\n // Convert from UTC to locale time (needed for vue2-datetimepicker)\n // see https://github.com/mengxiong10/vue2-datepicker/issues/388\n static dateFromUTC(dt) {\n if (dt instanceof Date) {\n const value = new Date(dt);\n const offset = value.getTimezoneOffset();\n dt = new Date(value.getTime() + offset * 60 * 1000);\n }\n return dt;\n }\n\n static dateToUTC(dt) {\n if (dt instanceof Date) {\n const offset = new Date().getTimezoneOffset();\n return new Date(dt.getTime() - offset * 60 * 1000);\n }\n return dt;\n }\n\n static formatDatetimeQuery(value) {\n return value.map(dt => {\n if (dt instanceof Date) {\n return dt.toISOString();\n }\n else if (dt) {\n return dt;\n }\n else {\n return '..';\n }\n }).join('/');\n }\n\n static formatSortbyForPOST(value) {\n // POST search requires sortby to be an array of objects containing a property name and sort direction.\n // See spec here: https://api.stacspec.org/v1.0.0-rc.1/item-search/#tag/Item-Search/operation/postItemSearch\n // This function converts the property name to the desired format.\n const sortby = {\n field: '',\n direction: 'asc'\n };\n \n // Check if the value starts with a minus sign (\"-\")\n if (value.startsWith('-')) {\n // sort by descending order\n sortby.field = value.substring(1);\n sortby.direction = 'desc';\n } else {\n //sort by ascending order\n sortby.field = value;\n }\n \n // Put the object in an array\n return [sortby];\n }\n\n static getPaginationLinks(data) {\n let pages = {};\n if (Utils.isObject(data)) {\n let pageLinks = Utils.getLinksWithRels(data.links, stacPagination);\n for (let pageLink of pageLinks) {\n let rel = pageLink.rel === 'previous' ? 'prev' : pageLink.rel;\n pages[rel] = pageLink;\n }\n }\n return pages;\n }\n\n static addFiltersToLink(link, filters = {}, itemsPerPage = null) {\n let isEmpty = value => {\n return (value === null\n || (typeof value === 'number' && !Number.isFinite(value))\n || (typeof value === 'string' && value.length === 0)\n || (typeof value === 'object' && Utils.size(value) === 0));\n };\n\n if (!Utils.isObject(filters)) {\n filters = {};\n }\n else {\n filters = Object.assign({}, filters);\n }\n\n if (typeof filters.limit !== 'number' && typeof itemsPerPage === 'number') {\n filters.limit = itemsPerPage;\n }\n\n if (Utils.hasText(link.method) && link.method.toUpperCase() === 'POST') {\n let body = Object.assign({}, link.body);\n\n for (let key in filters) {\n let value = filters[key];\n if (isEmpty(value)) {\n delete body[key];\n continue;\n }\n\n if (key === 'sortby') {\n value = Utils.formatSortbyForPOST(value);\n }\n else if (key === 'datetime') {\n value = Utils.formatDatetimeQuery(value);\n }\n else if (key === 'filters') {\n Object.assign(body, value.toJSON());\n continue;\n }\n\n body[key] = value;\n }\n return Object.assign({}, link, { body });\n }\n else { // GET\n // Construct new link with search params\n let url = URI(link.href);\n\n for (let key in filters) {\n let value = filters[key];\n if (isEmpty(value)) {\n url.removeQuery(key);\n continue;\n }\n\n if (key === 'datetime') {\n value = Utils.formatDatetimeQuery(value);\n }\n else if (key === 'bbox') {\n value = value.join(',');\n }\n else if ((key === 'collections' || key === 'ids' || key === 'q')) {\n value = value.join(',');\n }\n else if (key === 'filters') {\n let params = value.toText();\n url.setQuery(params);\n continue;\n }\n\n url.setQuery(key, value);\n }\n\n return Object.assign({}, link, { href: url.toString() });\n }\n }\n\n static titleForHref(href, preferFileName = false) {\n let uri = URI(href);\n let auth = uri.authority();\n let file = uri.filename().replace(/^(.{1,})\\.\\w+$/, '$1');\n let dir = uri.directory().replace(/^\\//, '');\n if (auth && file && !preferFileName) {\n let path = uri.path().replace(/^\\//, '');\n if (auth === 'doi.org' && path.startsWith('10.')) {\n return `DOI ${path}`;\n }\n else {\n return `${file} (${auth})`;\n }\n }\n else if (file && !commonFileNames.includes(file)) {\n return file;\n }\n else if (auth) {\n return auth;\n }\n else if (dir) {\n return dir;\n }\n else {\n return href;\n }\n }\n\n static canBrowserDisplayImage(img) {\n if (typeof img.href !== 'string') {\n return false;\n }\n let uri = URI(img.href);\n let protocol = uri.protocol().toLowerCase();\n if (protocol && !browserProtocols.includes(protocol)) {\n return false;\n }\n else if (browserImageTypes.includes(img.type)) {\n return true;\n }\n else if (browserImageTypes.includes('image/' + uri.suffix().toLowerCase())) {\n return true;\n }\n else if (img.type) {\n return false;\n }\n else {\n return true; // If no img.type is given, try to load it anyway: https://github.com/radiantearth/stac-browser/issues/147\n }\n }\n\n // Gets the value at path of object.\n // Drop in replacement for lodash.get\n static getValueFromObjectUsingPath(object, path) {\n if (object === null || typeof object !== 'object') {\n return;\n }\n object = object[path[0]];\n if (typeof object !== 'undefined' && path.length > 1) {\n return this.getValueFromObjectUsingPath(object, path.slice(1));\n }\n return object;\n }\n\n static search(searchterm, target, and = true) {\n if (typeof searchterm !== 'string' || searchterm.length === 0) {\n return false;\n }\n if (Utils.isObject(target)) {\n target = Object.values(target);\n }\n else if (typeof target === 'string') {\n target = [target];\n }\n\n if (!Array.isArray(target)) {\n return false;\n }\n\n let splitChars = /[\\s.,;!&({[)}]]+/g;\n\n // Prepare search terms\n searchterm = searchterm.toLowerCase().split(splitChars);\n\n // Prepare text to search in\n target = target\n .filter(s => typeof s === 'string') // Remove non-strings\n .join(' ') // Merge into a single string\n .replace(splitChars, ' ') // replace split chars with white spaces\n .toLowerCase(); // Lowercase\n\n // Search with \"and\" or \"or\"\n let fn = and ? 'every' : 'some';\n return searchterm[fn](term => target.includes(term));\n }\n\n static createLink(href, rel) {\n return { href, rel };\n }\n\n static supportsExtension(data, pattern) {\n if (!Utils.isObject(data) || !Array.isArray(data['stac_extensions'])) {\n return false;\n }\n let regexp = new RegExp('^' + pattern.replaceAll('*', '[^/]+') + '$');\n return Boolean(data['stac_extensions'].find(uri => regexp.test(uri)));\n }\n\n /**\n * Deep merge two objects.\n * @param target\n * @param ...sources\n */\n static mergeDeep(target, ...sources) {\n if (!sources.length) {\n return target;\n }\n const source = sources.shift();\n\n if (Utils.isObject(target) && Utils.isObject(source)) {\n for (const key in source) {\n if (Utils.isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n Utils.mergeDeep(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return Utils.mergeDeep(target, ...sources);\n }\n\n}","var map = {\n\t\"./de-CH/default.js\": [\n\t\t968,\n\t\t2963,\n\t\t968\n\t],\n\t\"./de/default.js\": [\n\t\t62862,\n\t\t2963,\n\t\t2862\n\t],\n\t\"./en/default.js\": [\n\t\t56886,\n\t\t6886\n\t],\n\t\"./es/default.js\": [\n\t\t89113,\n\t\t9113\n\t],\n\t\"./fr-CA/default.js\": [\n\t\t71082,\n\t\t6380,\n\t\t1082\n\t],\n\t\"./fr-CH/default.js\": [\n\t\t44545,\n\t\t6380,\n\t\t4545\n\t],\n\t\"./fr/default.js\": [\n\t\t1589,\n\t\t6380,\n\t\t1589\n\t],\n\t\"./it-CH/default.js\": [\n\t\t77638,\n\t\t3137,\n\t\t7638\n\t],\n\t\"./it/default.js\": [\n\t\t23108,\n\t\t3137,\n\t\t3108\n\t],\n\t\"./ro/default.js\": [\n\t\t63022,\n\t\t3022\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 33545;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./de-CH/config.json\": 79933,\n\t\"./de/config.json\": 28417,\n\t\"./en/config.json\": 11401,\n\t\"./es/config.json\": 17212,\n\t\"./fr-CA/config.json\": 20995,\n\t\"./fr-CH/config.json\": 1738,\n\t\"./fr/config.json\": 37748,\n\t\"./it-CH/config.json\": 16835,\n\t\"./it/config.json\": 37295,\n\t\"./ro/config.json\": 99069\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 97991;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"143\":\"7f6f3fa8\",\"259\":\"96a9695f\",\"505\":\"9b27e85d\",\"537\":\"a7230af9\",\"572\":\"0051ce9e\",\"635\":\"6fc95d56\",\"771\":\"0a499824\",\"895\":\"9df2c567\",\"967\":\"60693480\",\"968\":\"45862efe\",\"1082\":\"641a4ded\",\"1089\":\"3afadfa9\",\"1456\":\"455ff1ff\",\"1472\":\"0cc6acab\",\"1589\":\"8543b614\",\"1802\":\"28366912\",\"1865\":\"a89e4fd6\",\"2059\":\"df97d1d1\",\"2618\":\"309d922b\",\"2862\":\"3784b33d\",\"2929\":\"b8f4ed6f\",\"2963\":\"c2488848\",\"3022\":\"dc381752\",\"3108\":\"72563005\",\"3137\":\"56d1cb83\",\"3481\":\"c36f57de\",\"3627\":\"6fb10df8\",\"3658\":\"65f83aa3\",\"3951\":\"e4c88502\",\"4312\":\"3a73a74c\",\"4511\":\"dbf1a889\",\"4527\":\"037219df\",\"4545\":\"8da5bd53\",\"4567\":\"692c4d29\",\"4701\":\"a9cb1c23\",\"4801\":\"7432db17\",\"4870\":\"f1c787ea\",\"5500\":\"1186a797\",\"5583\":\"f40d6a97\",\"5788\":\"3ae84088\",\"5867\":\"2a0a5946\",\"5876\":\"85c8fc65\",\"6046\":\"5fb5794b\",\"6147\":\"e54ddd79\",\"6247\":\"68905912\",\"6312\":\"5c2c4410\",\"6380\":\"a68c3ec3\",\"6750\":\"55927985\",\"6763\":\"2bcd8962\",\"6780\":\"af1d3dbd\",\"6855\":\"2973c006\",\"6866\":\"1bffa637\",\"6886\":\"9fadbd28\",\"6997\":\"bd003843\",\"7003\":\"0b200468\",\"7036\":\"31f16bc9\",\"7286\":\"3f8bab3a\",\"7341\":\"28b1f4a5\",\"7457\":\"3c3e3e10\",\"7638\":\"bc9ae5ec\",\"7905\":\"d3bb665d\",\"8648\":\"99f841e2\",\"8940\":\"3ca6214b\",\"9091\":\"9ee95dc6\",\"9113\":\"a2a931ee\",\"9363\":\"f665e83d\",\"9637\":\"2eb45629\",\"9738\":\"8d0014a9\",\"9891\":\"22c48a69\",\"9930\":\"3cdaaf38\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"143\":\"ac728857\",\"505\":\"0530e224\",\"635\":\"f849b3f1\",\"967\":\"72c8c98f\",\"1472\":\"45781634\",\"1802\":\"32ec082e\",\"2059\":\"5747ca0b\",\"2618\":\"6fac7cd8\",\"4701\":\"4149415b\",\"5788\":\"a94c9ca6\",\"5867\":\"1c2a69b4\",\"6312\":\"ea261962\",\"6780\":\"0780c10b\",\"6866\":\"081b4583\",\"7341\":\"c9b64985\",\"8648\":\"4b50bc38\",\"8940\":\"f418fe25\",\"9091\":\"45781634\",\"9363\":\"6ad781a6\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = function(module) {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: function() {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"@radiantearth/stac-browser:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/stac-browser/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function(chunkId, fullhref, oldTag, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"143\":1,\"505\":1,\"635\":1,\"967\":1,\"1472\":1,\"1802\":1,\"2059\":1,\"2618\":1,\"4701\":1,\"5788\":1,\"5867\":1,\"6312\":1,\"6780\":1,\"6866\":1,\"7341\":1,\"8648\":1,\"8940\":1,\"9091\":1,\"9363\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t3524: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(505 != chunkId) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_radiantearth_stac_browser\"] = self[\"webpackChunk_radiantearth_stac_browser\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(87654); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["render","_vm","this","_c","_self","directives","name","rawName","value","load","expression","modifiers","class","classes","attrs","isList","hasImage","_b","staticClass","thumbnail","_e","data","catalog","fileFormats","length","description","deprecated","_v","_s","$t","_l","format","key","_f","temporalExtent","domProps","_t","staticRenderFns","components","StacLink","filters","summarize","text","Utils","summarizeMd","formatMediaType","shorten","mixins","ThumbnailCardMixin","StacFieldsMixin","formatTemporalExtent","props","type","Object","required","computed","mapGetters","push","getStac","_this$data","_this$data$extent","_this$data$extent$tem","isCollection","extent","temporal","interval","Array","isArray","getFileFormats","methods","visible","STAC","$store","commit","href","component","title","catalogCount","model","view","callback","$$v","isComplete","catalogs","sort","filterPlaceholder","searchTerm","showPagination","ref","pagination","on","paginate","catalogView","loading","cardsComponent","tag","cardsComponentProps","scopedSlots","_u","fn","hasMore","loadMore","$event","toggle","id","BIconBricks","BIconListTask","String","default","selectedValue","$emit","ViewButtons","columns","get","state","cardViewMode","set","Catalog","Loading","Pagination","SearchBox","SortButtons","ViewMixin","collectionsOnly","Boolean","count","Number","mapState","$tc","values","some","link","map","stac","filter","haystack","keywords","concat","search","slice","a","b","getDisplayTitle","localeCompare","uiLanguage","reverse","created","cardViewSort","placement","$refs","topPagination","scrollTo","$el","copyColor","preventDefault","stopPropagation","copy","apply","arguments","buttonProps","copyIcon","BIconClipboard","BIconClipboardCheck","BIconClipboardX","copyText","variant","status","startsWith","focus","document","activeElement","Clipboard","error","console","setTimeout","compact","inline","markup","allowHTML","reader","commonmark","writer","safe","smart","parsed","parse","queued","isDeprecated","hasDescription","item","properties","datetime","Registry","require","formatTimestamp","start_datetime","end_datetime","hasText","items","itemCount","api","allowFilter","hasFilters","filtersOpen","filterCount","apiFilters","emitFilter","chunkedItems","showMore","BCollapse","BIconSearch","Item","SearchFilter","showFilters","chunkSize","shownItems","size","watch","mounted","reset","small","fill","stretch","top","first","prev","next","last","tooltip","attributes","icon","displayTitle","fallbackTitle","Function","button","icons","getIcons","find","o","isLink","isStacBrowserLink","isStacMediaType","allowExternalAccess","isExternalUrl","stacBrowserNavigatesTo","includes","rel","obj","to","isObject","assign","target","getBrowserPath","toBrowserPath","privateQueryParameters","uri","URI","addParameters","prefix","queryKey","hasQuery","addQuery","toString","getRequestUrl","fallback","module","exports","catalogUrl","catalogTitle","allowedDomains","detectLocaleFromBrowser","storeLocale","locale","fallbackLocale","supportedLocales","apiCatalogPriority","useTileLayerAsFallback","displayGeoTiffByDefault","buildTileUrlTemplate","asset","encodeURIComponent","stacProxyUrl","pathPrefix","historyMode","showThumbnailsAsAssets","stacLint","geoTiffResolution","redirectLegacyUrls","itemsPerPage","defaultThumbnailSize","maxPreviewsOnMap","crossOriginMedia","requestHeaders","requestQueryParameters","preprocessSTAC","authConfig","CQL_TEXT","CQL_JSON","CQL_ADV_COMPARISON","TYPES","Items","BasicFilters","CollectionIdFilter","ItemIdFilter","CqlFilters","Sort","FreeText","Global","Collections","conformances","canSort","supportsConformance","canFilterExtents","canFilterFreeText","cql","textMode","jsonMode","advancedComparison","functions","mixin","showThumbnail","isItem","thumbnails","getThumbnails","width","height","t","src","alt","crossorigin","right","blankColor","config","CONFIG_PATH","CONFIG_CLI","window","STAC_BROWSER_CONFIG","Vue","use","VueI18n","API_LANGUAGE_CONFORMANCE","LOCALE_CONFIG","loadLocaleConfig","CONFIG","messages","languages","i18n","loadDefaultMessages","Promise","all","loadMessages","async","mergeLocaleMessage","translateFields","vars","te","Fields","stringLocale","keywordPos","indexOf","keyword","substr","undefined","localeWithoutKeyword","parts","replace","split","language","shift","retVar","toLowerCase","pop","toUpperCase","country","script","substring","prepareSupported","supported","lgs","forEach","supportedLocale","Error","countries","firstCountry","main","lg","getBest","defaultLocale","getAnyCountry","doAuth","globalError","hideError","sidebar","displayCatalogTitle","browserVersion","proxy","isExternal","url","errorDescription","errorId","dismissible","message","tab","selectedAsset","dataChanged","hasAssets","assets","shownAssets","showAsset","additionalLinks","collectionLink","providers","ignoredMetadataFields","shownAssetsOnMap","shownBandsOnMap","selectedAssetKey","keys","thumbnailRefs","isThumbnail","tabs","bands","meta","toBrowserUrl","store","path","getters","location","origin","fragment","addSpatialCoverage","schema","bbox","spatialCoverage","geo","box","join","formatTemporalCoverage","dates","dt","makeAssets","contentUrl","toAbsolute","getAbsoluteUrl","encodingFormat","makeLinks","links","isBasedOn","fallbackDescription","makeProvider","role","p","roles","email","mail","stacType","container","collection","tc","inX","createBaseSchema","_data$getMetadata","thumbnailUrl","stacUrl","inLanguage","getMetadata","code","license","_data$getLinkWithRel","getLinkWithRel","copyrightHolder","producer","provider","creator","citation","identifier","dateCreated","dateModified","datePublished","expires","version","image","createCatalogSchema","parents","i","findIndex","_data$extent","_data$extent$temporal","_data$extent2","_data$extent2$spatial","temporalCoverage","spatial","associatedMedia","hasPart","dataset","isPartOf","createItemSchema","includedInDataCatalog","start","end","distribution","addSchemaToDocument","doc","element","getElementById","createElement","head","appendChild","innerText","JSON","stringify","AnonymizedNotice","Assets","BTabs","BTab","CollectionLink","Description","DeprecationNotice","Keywords","Links","Map","Metadata","Providers","ReadMore","Thumbnails","ShowAssetMixin","immediate","handler","parentLink","cc","mixed","hasCatalogs","hasItems","empty","licenses","temporalExtents","linkPosition","hasThumbnails","mapData","hasItemAssets","item_assets","nextCollectionsLink","loadMoreCollections","isApi","itemPages","apiItemsLoading","paginateItems","filterItems","filtersShown","Catalogs","formatLicense","formatTemporalExtents","stateQueryParameters","getApiItemsLoading","summaries","extents","pages","apiItemsPagination","apiItemsLink","addFiltersToLink","getApiItemsLink","features","rootLink","show","dispatch","$root","msg","ErrorAlert","isAxiosError","response","res","BrowserError","is","oldPath","redirectLegacyUrl","fromBrowserPath","loadApi","part","every","match","decode","newPath","$router","query","getRoutes","routes","Browse","route","params","pathMatch","loadParent","getStore","router","localDefaults","valid","localRequestQueryParameters","itemdef","apiItems","catalogDefaults","queue","authData","conformsTo","dataLanguage","dataLanguages","apiCollections","Vuex","strict","database","allowSelectCatalog","globalRequestQueryParameters","source","returnErrorObject","absoluteUrl","root","_state$data","isCatalog","_state$data2","isCatalogLike","_state$data3","_state$data4","_","_state$data5","getStacLinkWithRel","createLink","getLinksWithRels","segment","_state$data6","classRegexp","c","replaceAll","regexp","RegExp","supportsExtension","schemaUri","canSearch","canSearchCollections","canSearchItems","getStacLinksWithRel","hasCollections","getApiCollectionsLink","hasChilds","showCollections","showChilds","addMissingChildren","_state$data7","getLinksWithOtherRels","stacBrowserSpecialHandling","canBrowserDisplayImage","relative","absolute","unproxyUrl","relativeTo","protocol","authority","q","externalRE","endsWith","whitelist","domain","equals","relativeStr","baseUrl","addLocalQueryParams","proxyUrl","addQueryIfNotExists","acceptedLanguages","navigator","entries","l","mutations","setQueryParameter","delete","setRequestHeader","requestAuth","setAuthData","newState","updateState","openCollapsible","uid","idx","closeCollapsible","updateLoading","loaded","processSTAC","clear","resetCatalog","clearAll","resetPage","showPage","unshift","lang","errored","unqueue","splice","removeFromQueue","num","setConformanceClasses","setApiItemsLink","toggleApiItemsLoading","collectionId","setApiItems","feature","getPaginationLinks","setApiData","addApiCollections","collections","nextLink","resetApiItems","showGlobalError","actions","switchLocale","cx","userSelected","localStorage","setItem","dataLanguageCodes","dataLanguageFallback","setAuth","formatter","loadBackground","urls","promises","loadParents","parentStac","args","loadRoot","force","isPotentiallyIncomplete","stacRequest","localeLink","getLocaleLink","conformanceLink","isAuthenticationError","loadApiItems","selfLink","_cx$getters$root","apiCollectionsLink","markPotentiallyIncomplete","loadNextApiCollections","loadOgcApiConformance","loadGeoJson","retryAfterAuth","errorFn","catch","validate","_response$data","_response$data$body","addSearch","axios","body","valid_stac","isSearchPage","containerLink","parentLinkTitle","collectionLinkTitle","searchBrowserLink","auth","showRoot","rootTitle","currentLanguage","native","global","supportsLanguageExt","ui","stacId","stacVersion","canValidate","browserUrl","twitterUrl","mailTo","label","open","BFormGroup","BFormInput","BIconArrowUpRightSquare","BInputGroup","BInputGroupAppend","CopyButton","LANGUAGE_EXT","BDropdown","BDropdownItem","BIconBlank","BIconBox","BIconCheck","BIconEnvelope","BIconExclamationTriangle","BIconFlag","BIconLink","BIconShare","BIconTwitter","BPopover","RootStats","Url","_this$stac","stac_version","_this$stac2","host","hostname","newLang","alternate","uiSupported","dataSupported","mapActions","BIconArrow90degUp","BIconBook","BIconFolderSymlink","BIconLock","BIconUnlock","Source","dataLink","getSearchLink","equalUrl","currentRoute","AlertPlugin","ButtonGroupPlugin","ButtonPlugin","BadgePlugin","CardPlugin","LayoutPlugin","SpinnerPlugin","directive","VBToggle","VBVisible","VueRouter","mode","base","Props","Watchers","newValue","Authentication","Sidebar","StacHeader","onDataLoaded","catalogUrlFromVueX","detectLocaleFromBrowserFromVueX","fallbackLocaleFromVueX","supportedLocalesFromVueX","storeLocaleFromVueX","STAC_BROWSER_VERSION","setAttribute","I18N","$i18n","documentElement","deep","$route","duplicated","oldRoot","canChange","doReset","doSet","onReady","detectLocale","parseQuery","afterEach","from","resetOp","$on","showError","setInterval","getItem","best","_params$state","privateFromHash","hash","private","realKey","localRequest","init","then","h","StacBrowser","$mount","productionTip","stacObjCounter","constructor","migrate","_id","_url","_path","_apiChildrenListeners","_incomplete","_apiChildren","list","Migrate","isItemCollection","hasApiData","setApiDataListener","listener","v","getChildren","priority","children","isMediaType","geojsonMediaType","post","method","field","available","hreflang","allowEmpty","rels","getAssetsWithRoles","matches","sources","getTitle","titleForHref","_linkToAbsolute","img","browserOnly","prefer","other","stacHierarchy","stacPagination","ogcQueryables","ogcRelPrefix","opts","headers","Accept","freeze","_error$response","commonFileNames","schemaMediaType","stacMediaTypes","browserImageTypes","cogMediaTypes","geotiffMediaTypes","browserProtocols","imageMediaTypes","mapMediaTypes","super","types","string","shortenTitle","fullStr","strLen","separator","sepLen","charsToShow","frontChars","Math","ceil","backChars","floor","isGdalVfsUri","normalizeUri","noParams","absoluteTo","normalize","uri1","uri2","maxLength","removeMd","el","rect","getBoundingClientRect","isVisible","innerHeight","bottom","scrollIntoView","behavior","block","dateFromUTC","Date","offset","getTimezoneOffset","getTime","dateToUTC","formatDatetimeQuery","toISOString","formatSortbyForPOST","sortby","direction","pageLinks","pageLink","isEmpty","isFinite","limit","toJSON","removeQuery","toText","setQuery","preferFileName","file","filename","dir","directory","suffix","getValueFromObjectUsingPath","object","searchterm","and","splitChars","s","term","pattern","test","mergeDeep","webpackAsyncContext","req","__webpack_require__","resolve","e","ids","webpackContext","webpackContextResolve","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","call","m","deferred","O","result","chunkIds","notFulfilled","Infinity","fulfilled","j","r","n","getter","__esModule","d","leafPrototypes","getProto","getPrototypeOf","__proto__","ns","create","def","current","getOwnPropertyNames","definition","defineProperty","enumerable","f","chunkId","reduce","u","miniCssF","g","globalThis","hmd","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","done","needAttach","scripts","getElementsByTagName","getAttribute","charset","timeout","nc","onScriptComplete","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","Symbol","toStringTag","nmd","paths","createStylesheet","fullhref","oldTag","reject","linkTag","nonce","onLinkComplete","errorType","realHref","err","request","insertBefore","nextSibling","findStylesheet","existingLinkTags","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file