diff --git a/.env b/.env index ab436e79..972ff3e6 100644 --- a/.env +++ b/.env @@ -1,3 +1,12 @@ +# Proxy urls VITE_USE_PROXYURL=true VITE_PROXYURL_WMS="https://map.geoportail.lu/ogcproxywms" VITE_PROXYURL_REMOTE="https://map.geoportail.lu/httpsproxy" + +# Urls for vectortiles +VITE_VECTORTILES_URL="https://vectortiles.geoportail.lu" + +# Paths for MVT styles +VITE_MVTSTYLES_PATH_GET="/getvtstyle" +VITE_MVTSTYLES_PATH_UPLOAD="/uploadvtstyle" +VITE_MVTSTYLES_PATH_DELETE="/deletevtstyle" diff --git a/.env.staging b/.env.staging new file mode 100644 index 00000000..af95510b --- /dev/null +++ b/.env.staging @@ -0,0 +1,12 @@ +# Proxy urls +VITE_USE_PROXYURL=true +VITE_PROXYURL_WMS="https://map.geoportail.lu/ogcproxywms" +VITE_PROXYURL_REMOTE="https://map.geoportail.lu/httpsproxy" + +# Urls for vectortiles +VITE_VECTORTILES_URL="https://vectortiles-staging.geoportail.lu" + +# Paths for MVT styles +VITE_MVTSTYLES_PATH_GET="https://migration.geoportail.lu/getvtstyle" +VITE_MVTSTYLES_PATH_UPLOAD="https://migration.geoportail.lu/uploadvtstyle" +VITE_MVTSTYLES_PATH_DELETE="https://migration.geoportail.lu/deletevtstyle" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2802fa92..f7e3f3fd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,7 +53,7 @@ jobs: shell: bash run: echo "VITE_DEPLOY_GHPAGES=true" >> $GITHUB_ENV - - run: npm run build-only -- --base=${{env.LUX_BASE}} + - run: npm run build-only -- --base=${{env.LUX_BASE}} --mode=staging - name: deploy to gh pages run: | diff --git a/.prettierignore b/.prettierignore index 707cadea..2b81ba70 100644 --- a/.prettierignore +++ b/.prettierignore @@ -27,6 +27,7 @@ /out-tsc/ .parcel-cache .env +.env.* # fixtures /src/__fixtures__/ diff --git a/README.md b/README.md index 1f4c3b3a..2083964c 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,8 @@ RUN mkdir /etc/static-ngeo/web-components \ ### Initialize app settings +#### 1. Proxy and remote urls + Configure your proxy urls, otherwise, layers may not display correctly. ```js @@ -165,6 +167,20 @@ const remoteProxyWms = 'https://map.geoportail.lu/httpsproxy' proxyUrlHelper.init(proxyWmsUrl, remoteProxyWms) ``` +#### 2. Vector tiles url + +Configure url for vector tiles (see `.env`, `.env-staging` files). + +```bash +# Urls for vectortiles to be used in prod +VITE_VECTORTILES_URL="https://vectortiles.geoportail.lu" + +# OR Urls for vectortiles to be used in staging/dev mode +VITE_VECTORTILES_URL="https://vectortiles-staging.geoportail.lu" +``` + +💡 For more info about styling, see `src/composables/mvt-styles/README.md` + ### Use components, services, stores, composables To use components, services, stores or composables in you application, all these should explicitely exported in the lib. diff --git a/bundle/lux.dist.js b/bundle/lux.dist.js index b2903576..ccb797b4 100644 --- a/bundle/lux.dist.js +++ b/bundle/lux.dist.js @@ -1,31 +1,31 @@ -"use strict";require("core-js/modules/es.symbol.async-iterator.js");Object.defineProperty(exports,"__esModule",{value:true});exports.HeaderBar=exports.FooterBar=exports.DropdownList=exports.BackgroundSelector=exports.App=exports.AlertNotifications=void 0;exports.I18NextVue=w2;exports.createElementInstance=exports.backend=exports.app=exports.VueDOMPurifyHTML=exports.StyleSelector=exports.SliderComparator=exports.RemoteLayers=exports.MapLibreLayer=exports.MapContainer=exports.LayerPanel=exports.LayerMetadata=void 0;exports.createPinia=Iw;exports.defineCustomElement=wN;exports.statePersistorThemeService=exports.statePersistorStyleService=exports.statePersistorMyMapService=exports.statePersistorLayersService=exports.statePersistorLayersOpenService=exports.statePersistorBgLayerService=exports.proxyUrlHelper=exports.i18next=void 0;exports.storeToRefs=He;exports.useAppStore=exports.themeSelectorService=void 0;exports.useBackgroundLayer=n_;exports.useLayers=Kn;exports.useMap=Vr;exports.useMapStore=void 0;exports.useMvtStyles=la;exports.useOpenLayers=t_;exports.useThemeStore=exports.useStyleStore=void 0;exports.useThemes=ss;exports.watch=et;require("core-js/modules/es.symbol.js");require("core-js/modules/es.symbol.description.js");require("core-js/modules/es.symbol.iterator.js");require("core-js/modules/es.symbol.to-primitive.js");require("core-js/modules/es.symbol.to-string-tag.js");require("core-js/modules/es.array.concat.js");require("core-js/modules/es.array.every.js");require("core-js/modules/es.array.fill.js");require("core-js/modules/es.array.filter.js");require("core-js/modules/es.array.find.js");require("core-js/modules/es.array.find-index.js");require("core-js/modules/es.array.flat-map.js");require("core-js/modules/es.array.for-each.js");require("core-js/modules/es.array.from.js");require("core-js/modules/es.array.includes.js");require("core-js/modules/es.array.index-of.js");require("core-js/modules/es.array.is-array.js");require("core-js/modules/es.array.iterator.js");require("core-js/modules/es.array.join.js");require("core-js/modules/es.array.map.js");require("core-js/modules/es.array.reduce.js");require("core-js/modules/es.array.reduce-right.js");require("core-js/modules/es.array.reverse.js");require("core-js/modules/es.array.slice.js");require("core-js/modules/es.array.some.js");require("core-js/modules/es.array.sort.js");require("core-js/modules/es.array.splice.js");require("core-js/modules/es.array.unscopables.flat-map.js");require("core-js/modules/es.array-buffer.constructor.js");require("core-js/modules/es.array-buffer.is-view.js");require("core-js/modules/es.array-buffer.slice.js");require("core-js/modules/es.data-view.js");require("core-js/modules/es.date.now.js");require("core-js/modules/es.date.to-iso-string.js");require("core-js/modules/es.date.to-json.js");require("core-js/modules/es.date.to-primitive.js");require("core-js/modules/es.date.to-string.js");require("core-js/modules/es.function.bind.js");require("core-js/modules/es.function.name.js");require("core-js/modules/es.json.to-string-tag.js");require("core-js/modules/es.map.js");require("core-js/modules/es.math.to-string-tag.js");require("core-js/modules/es.math.trunc.js");require("core-js/modules/es.number.constructor.js");require("core-js/modules/es.number.is-finite.js");require("core-js/modules/es.number.is-integer.js");require("core-js/modules/es.number.is-nan.js");require("core-js/modules/es.number.parse-int.js");require("core-js/modules/es.object.assign.js");require("core-js/modules/es.object.create.js");require("core-js/modules/es.object.define-properties.js");require("core-js/modules/es.object.define-property.js");require("core-js/modules/es.object.entries.js");require("core-js/modules/es.object.freeze.js");require("core-js/modules/es.object.get-own-property-descriptor.js");require("core-js/modules/es.object.get-own-property-descriptors.js");require("core-js/modules/es.object.get-own-property-names.js");require("core-js/modules/es.object.get-prototype-of.js");require("core-js/modules/es.object.is.js");require("core-js/modules/es.object.is-extensible.js");require("core-js/modules/es.object.is-frozen.js");require("core-js/modules/es.object.keys.js");require("core-js/modules/es.object.seal.js");require("core-js/modules/es.object.set-prototype-of.js");require("core-js/modules/es.object.to-string.js");require("core-js/modules/es.object.values.js");require("core-js/modules/es.parse-float.js");require("core-js/modules/es.parse-int.js");require("core-js/modules/es.promise.js");require("core-js/modules/es.promise.finally.js");require("core-js/modules/es.reflect.apply.js");require("core-js/modules/es.reflect.construct.js");require("core-js/modules/es.reflect.define-property.js");require("core-js/modules/es.reflect.delete-property.js");require("core-js/modules/es.reflect.get.js");require("core-js/modules/es.reflect.get-prototype-of.js");require("core-js/modules/es.reflect.has.js");require("core-js/modules/es.reflect.own-keys.js");require("core-js/modules/es.reflect.set.js");require("core-js/modules/es.regexp.constructor.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.regexp.to-string.js");require("core-js/modules/es.set.js");require("core-js/modules/es.string.code-point-at.js");require("core-js/modules/es.string.ends-with.js");require("core-js/modules/es.string.from-code-point.js");require("core-js/modules/es.string.includes.js");require("core-js/modules/es.string.iterator.js");require("core-js/modules/es.string.match.js");require("core-js/modules/es.string.pad-start.js");require("core-js/modules/es.string.repeat.js");require("core-js/modules/es.string.replace.js");require("core-js/modules/es.string.search.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.string.starts-with.js");require("core-js/modules/es.string.trim.js");require("core-js/modules/es.string.anchor.js");require("core-js/modules/es.string.fixed.js");require("core-js/modules/es.string.link.js");require("core-js/modules/es.typed-array.uint8-array.js");require("core-js/modules/es.typed-array.copy-within.js");require("core-js/modules/es.typed-array.every.js");require("core-js/modules/es.typed-array.fill.js");require("core-js/modules/es.typed-array.filter.js");require("core-js/modules/es.typed-array.find.js");require("core-js/modules/es.typed-array.find-index.js");require("core-js/modules/es.typed-array.for-each.js");require("core-js/modules/es.typed-array.includes.js");require("core-js/modules/es.typed-array.index-of.js");require("core-js/modules/es.typed-array.iterator.js");require("core-js/modules/es.typed-array.join.js");require("core-js/modules/es.typed-array.last-index-of.js");require("core-js/modules/es.typed-array.map.js");require("core-js/modules/es.typed-array.reduce.js");require("core-js/modules/es.typed-array.reduce-right.js");require("core-js/modules/es.typed-array.reverse.js");require("core-js/modules/es.typed-array.set.js");require("core-js/modules/es.typed-array.slice.js");require("core-js/modules/es.typed-array.some.js");require("core-js/modules/es.typed-array.sort.js");require("core-js/modules/es.typed-array.subarray.js");require("core-js/modules/es.typed-array.to-locale-string.js");require("core-js/modules/es.typed-array.to-string.js");require("core-js/modules/es.weak-map.js");require("core-js/modules/es.weak-set.js");require("core-js/modules/esnext.global-this.js");require("core-js/modules/web.dom-collections.for-each.js");require("core-js/modules/web.dom-collections.iterator.js");require("core-js/modules/web.timers.js");require("core-js/modules/web.url.js");require("core-js/modules/web.url.to-json.js");require("core-js/modules/web.url-search-params.js");var _proj=require("ol/proj");var _proj2=require("ol/proj/proj4");var _Map=_interopRequireDefault(require("ol/Map"));var _View=_interopRequireDefault(require("ol/View"));var _Image=_interopRequireDefault(require("ol/layer/Image"));var _ImageWMS=_interopRequireDefault(require("ol/source/ImageWMS"));var _Tile=_interopRequireDefault(require("ol/layer/Tile"));var _WMTS=_interopRequireDefault(require("ol/source/WMTS"));var _WMTS2=_interopRequireDefault(require("ol/tilegrid/WMTS"));var _extent=require("ol/extent");var _Layer=_interopRequireDefault(require("ol/layer/Layer"));var _math=require("ol/math");var _proj3=require("ol/proj.js");var _mapboxGl=_interopRequireDefault(require("mapbox-gl"));var gd=_interopRequireWildcard(require("ol/events"));var _ObjectEventType=_interopRequireDefault(require("ol/ObjectEventType"));var _css=require("ol/css");var _Control=_interopRequireDefault(require("ol/control/Control"));var _FullScreen=_interopRequireDefault(require("ol/control/FullScreen"));var _Zoom=_interopRequireDefault(require("ol/control/Zoom"));var _ZoomToExtent=_interopRequireDefault(require("ol/control/ZoomToExtent"));var _WMTSCapabilities=_interopRequireDefault(require("ol/format/WMTSCapabilities.js"));var _render=require("ol/render");var _Observable=require("ol/Observable");var _EventType=_interopRequireDefault(require("ol/render/EventType"));var _Group=_interopRequireDefault(require("ol/layer/Group.js"));var _excluded=["base"],_excluded2=["padTo","floor"];var _ph;function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap(),t=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(e){return e?t:r;})(e);}function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=_typeof(e)&&"function"!=typeof e)return{"default":e};var t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&{}.hasOwnProperty.call(e,u)){var i=a?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(n,u,i):n[u]=e[u];}return n["default"]=e,t&&t.set(e,n),n;}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj};}function _get(){if(typeof Reflect!=="undefined"&&Reflect.get){_get=Reflect.get.bind();}else{_get=function _get(target,property,receiver){var base=_superPropBase(target,property);if(!base)return;var desc=Object.getOwnPropertyDescriptor(base,property);if(desc.get){return desc.get.call(arguments.length<3?target:receiver);}return desc.value;};}return _get.apply(this,arguments);}function _superPropBase(object,property){while(!Object.prototype.hasOwnProperty.call(object,property)){object=_getPrototypeOf(object);if(object===null)break;}return object;}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key];}}return target;}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){if(excluded.indexOf(key)>=0)continue;target[key]=source[key];}}return target;}function _wrapNativeSuper(Class){var _cache=typeof Map==="function"?new Map():undefined;_wrapNativeSuper=function _wrapNativeSuper(Class){if(Class===null||!_isNativeFunction(Class))return Class;if(typeof Class!=="function"){throw new TypeError("Super expression must either be null or a function");}if(typeof _cache!=="undefined"){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper);}function Wrapper(){return _construct(Class,arguments,_getPrototypeOf(this).constructor);}Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:false,writable:true,configurable:true}});return _setPrototypeOf(Wrapper,Class);};return _wrapNativeSuper(Class);}function _construct(t,e,r){if(_isNativeReflectConstruct())return Reflect.construct.apply(null,arguments);var o=[null];o.push.apply(o,e);var p=new(t.bind.apply(t,o))();return r&&_setPrototypeOf(p,r.prototype),p;}function _isNativeFunction(fn){try{return Function.toString.call(fn).indexOf("[native code]")!==-1;}catch(e){return typeof fn==="function";}}function _regeneratorRuntime(){"use strict";/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */_regeneratorRuntime=function _regeneratorRuntime(){return e;};var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value;},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function define(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e];}try{define({},"");}catch(t){define=function define(t,e,r){return t[e]=r;};}function wrap(t,e,r,n){var i=e&&e.prototype instanceof Generator?e:Generator,a=Object.create(i.prototype),c=new Context(n||[]);return o(a,"_invoke",{value:makeInvokeMethod(t,r,c)}),a;}function tryCatch(t,e,r){try{return{type:"normal",arg:t.call(e,r)};}catch(t){return{type:"throw",arg:t};}}e.wrap=wrap;var h="suspendedStart",l="suspendedYield",f="executing",s="completed",y={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}var p={};define(p,a,function(){return this;});var d=Object.getPrototypeOf,v=d&&d(d(values([])));v&&v!==r&&n.call(v,a)&&(p=v);var g=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(p);function defineIteratorMethods(t){["next","throw","return"].forEach(function(e){define(t,e,function(t){return this._invoke(e,t);});});}function AsyncIterator(t,e){function invoke(r,o,i,a){var c=tryCatch(t[r],t,o);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==_typeof(h)&&n.call(h,"__await")?e.resolve(h.__await).then(function(t){invoke("next",t,i,a);},function(t){invoke("throw",t,i,a);}):e.resolve(h).then(function(t){u.value=t,i(u);},function(t){return invoke("throw",t,i,a);});}a(c.arg);}var r;o(this,"_invoke",{value:function value(t,n){function callInvokeWithMethodAndArg(){return new e(function(e,r){invoke(t,n,e,r);});}return r=r?r.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg();}});}function makeInvokeMethod(e,r,n){var o=h;return function(i,a){if(o===f)throw Error("Generator is already running");if(o===s){if("throw"===i)throw a;return{value:t,done:!0};}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=maybeInvokeDelegate(c,n);if(u){if(u===y)continue;return u;}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===h)throw o=s,n.arg;n.dispatchException(n.arg);}else"return"===n.method&&n.abrupt("return",n.arg);o=f;var p=tryCatch(e,r,n);if("normal"===p.type){if(o=n.done?s:l,p.arg===y)continue;return{value:p.arg,done:n.done};}"throw"===p.type&&(o=s,n.method="throw",n.arg=p.arg);}};}function maybeInvokeDelegate(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator["return"]&&(r.method="return",r.arg=t,maybeInvokeDelegate(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),y;var i=tryCatch(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,y;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,y):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,y);}function pushTryEntry(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e);}function resetTryEntry(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e;}function Context(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(pushTryEntry,this),this.reset(!0);}function values(e){if(e||""===e){var r=e[a];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function next(){for(;++o=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return handle("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),y;}},"catch":function _catch(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;resetTryEntry(r);}return o;}}throw Error("illegal catch attempt");},delegateYield:function delegateYield(e,r,n){return this.delegate={iterator:values(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),y;}},e;}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value;}catch(error){reject(error);return;}if(info.done){resolve(value);}else{Promise.resolve(value).then(_next,_throw);}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value);}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err);}_next(undefined);});};}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e));}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}else if(call!==void 0){throw new TypeError("Derived constructors may only return object or undefined");}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});Object.defineProperty(subClass,"prototype",{writable:false});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createForOfIteratorHelper(o,allowArrayLike){var it=typeof Symbol!=="undefined"&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]};},e:function e(_e12){throw _e12;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o);},n:function n(){var step=it.next();normalCompletion=step.done;return step;},e:function e(_e13){didErr=true;err=_e13;},f:function f(){try{if(!normalCompletion&&it["return"]!=null)it["return"]();}finally{if(didErr)throw err;}}};}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;iarr.length)len=arr.length;for(var i=0,arr2=new Array(len);i=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key];}}return target;}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){if(excluded.indexOf(key)>=0)continue;target[key]=source[key];}}return target;}function _wrapNativeSuper(Class){var _cache=typeof Map==="function"?new Map():undefined;_wrapNativeSuper=function _wrapNativeSuper(Class){if(Class===null||!_isNativeFunction(Class))return Class;if(typeof Class!=="function"){throw new TypeError("Super expression must either be null or a function");}if(typeof _cache!=="undefined"){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper);}function Wrapper(){return _construct(Class,arguments,_getPrototypeOf(this).constructor);}Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:false,writable:true,configurable:true}});return _setPrototypeOf(Wrapper,Class);};return _wrapNativeSuper(Class);}function _construct(t,e,r){if(_isNativeReflectConstruct())return Reflect.construct.apply(null,arguments);var o=[null];o.push.apply(o,e);var p=new(t.bind.apply(t,o))();return r&&_setPrototypeOf(p,r.prototype),p;}function _isNativeFunction(fn){try{return Function.toString.call(fn).indexOf("[native code]")!==-1;}catch(e){return typeof fn==="function";}}function _regeneratorRuntime(){"use strict";/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */_regeneratorRuntime=function _regeneratorRuntime(){return e;};var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value;},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function define(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e];}try{define({},"");}catch(t){define=function define(t,e,r){return t[e]=r;};}function wrap(t,e,r,n){var i=e&&e.prototype instanceof Generator?e:Generator,a=Object.create(i.prototype),c=new Context(n||[]);return o(a,"_invoke",{value:makeInvokeMethod(t,r,c)}),a;}function tryCatch(t,e,r){try{return{type:"normal",arg:t.call(e,r)};}catch(t){return{type:"throw",arg:t};}}e.wrap=wrap;var h="suspendedStart",l="suspendedYield",f="executing",s="completed",y={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}var p={};define(p,a,function(){return this;});var d=Object.getPrototypeOf,v=d&&d(d(values([])));v&&v!==r&&n.call(v,a)&&(p=v);var g=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(p);function defineIteratorMethods(t){["next","throw","return"].forEach(function(e){define(t,e,function(t){return this._invoke(e,t);});});}function AsyncIterator(t,e){function invoke(r,o,i,a){var c=tryCatch(t[r],t,o);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==_typeof(h)&&n.call(h,"__await")?e.resolve(h.__await).then(function(t){invoke("next",t,i,a);},function(t){invoke("throw",t,i,a);}):e.resolve(h).then(function(t){u.value=t,i(u);},function(t){return invoke("throw",t,i,a);});}a(c.arg);}var r;o(this,"_invoke",{value:function value(t,n){function callInvokeWithMethodAndArg(){return new e(function(e,r){invoke(t,n,e,r);});}return r=r?r.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg();}});}function makeInvokeMethod(e,r,n){var o=h;return function(i,a){if(o===f)throw Error("Generator is already running");if(o===s){if("throw"===i)throw a;return{value:t,done:!0};}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=maybeInvokeDelegate(c,n);if(u){if(u===y)continue;return u;}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===h)throw o=s,n.arg;n.dispatchException(n.arg);}else"return"===n.method&&n.abrupt("return",n.arg);o=f;var p=tryCatch(e,r,n);if("normal"===p.type){if(o=n.done?s:l,p.arg===y)continue;return{value:p.arg,done:n.done};}"throw"===p.type&&(o=s,n.method="throw",n.arg=p.arg);}};}function maybeInvokeDelegate(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator["return"]&&(r.method="return",r.arg=t,maybeInvokeDelegate(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),y;var i=tryCatch(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,y;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,y):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,y);}function pushTryEntry(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e);}function resetTryEntry(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e;}function Context(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(pushTryEntry,this),this.reset(!0);}function values(e){if(e||""===e){var r=e[a];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function next(){for(;++o=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return handle("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),y;}},"catch":function _catch(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;resetTryEntry(r);}return o;}}throw Error("illegal catch attempt");},delegateYield:function delegateYield(e,r,n){return this.delegate={iterator:values(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),y;}},e;}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value;}catch(error){reject(error);return;}if(info.done){resolve(value);}else{Promise.resolve(value).then(_next,_throw);}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value);}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err);}_next(undefined);});};}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e));}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}else if(call!==void 0){throw new TypeError("Derived constructors may only return object or undefined");}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});Object.defineProperty(subClass,"prototype",{writable:false});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createForOfIteratorHelper(o,allowArrayLike){var it=typeof Symbol!=="undefined"&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]};},e:function e(_e12){throw _e12;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o);},n:function n(){var step=it.next();normalCompletion=step.done;return step;},e:function e(_e13){didErr=true;err=_e13;},f:function f(){try{if(!normalCompletion&&it["return"]!=null)it["return"]();}finally{if(didErr)throw err;}}};}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;iarr.length)len=arr.length;for(var i=0,arr2=new Array(len);i122||t.charCodeAt(2)<97);},Gl=function Gl(t){return t.startsWith("onUpdate:");},Qe=Object.assign,ah=function ah(t,e){var n=t.indexOf(e);n>-1&&t.splice(n,1);},yb=Object.prototype.hasOwnProperty,Ae=function Ae(t,e){return yb.call(t,e);},le=Array.isArray,Ji=function Ji(t){return Pu(t)==="[object Map]";},Lg=function Lg(t){return Pu(t)==="[object Set]";},me=function me(t){return typeof t=="function";},rt=function rt(t){return typeof t=="string";},ds=function ds(t){return _typeof(t)=="symbol";},Be=function Be(t){return t!==null&&_typeof(t)=="object";},oh=function oh(t){return(Be(t)||me(t))&&me(t.then)&&me(t["catch"]);},Pg=Object.prototype.toString,Pu=function Pu(t){return Pg.call(t);},lh=function lh(t){return Pu(t).slice(8,-1);},kg=function kg(t){return Pu(t)==="[object Object]";},uh=function uh(t){return rt(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t;},Pa=/* @__PURE__ */qr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),vb=/* @__PURE__ */qr("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),ku=function ku(t){var e=/* @__PURE__ */Object.create(null);return function(n){return e[n]||(e[n]=t(n));};},_b=/-(\w)/g,gn=ku(function(t){return t.replace(_b,function(e,n){return n?n.toUpperCase():"";});}),bb=/\B([A-Z])/g,un=ku(function(t){return t.replace(bb,"-$1").toLowerCase();}),as=ku(function(t){return t.charAt(0).toUpperCase()+t.slice(1);}),Hi=ku(function(t){return t?"on".concat(as(t)):"";}),xi=function xi(t,e){return!Object.is(t,e);},ca=function ca(t,e){for(var n=0;n1&&(e[r[0].trim()]=r[1].trim());}}),e;}function ke(t){var e="";if(rt(t))e=t;else if(le(t))for(var n=0;n"]=i,n;},{})):Lg(e)?_defineProperty({},"Set(".concat(e.size,")"),_toConsumableArray(e.values()).map(function(n){return lc(n);})):ds(e)?lc(e):Be(e)&&!le(e)&&!kg(e)?String(e):e;},lc=function lc(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";var n;return ds(t)?"Symbol(".concat((n=t.description)!=null?n:e,")"):t;};/** +**/ /*! #__NO_SIDE_EFFECTS__ */function qr(t,e){var n=new Set(t.split(","));return e?function(r){return n.has(r.toLowerCase());}:function(r){return n.has(r);};}var Ke=process.env.NODE_ENV!=="production"?Object.freeze({}):{},Gs=process.env.NODE_ENV!=="production"?Object.freeze([]):[],yt=function yt(){},yb=function yb(){return!1;},po=function po(t){return t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97);},Wl=function Wl(t){return t.startsWith("onUpdate:");},Qe=Object.assign,oh=function oh(t,e){var n=t.indexOf(e);n>-1&&t.splice(n,1);},vb=Object.prototype.hasOwnProperty,De=function De(t,e){return vb.call(t,e);},le=Array.isArray,Qi=function Qi(t){return Du(t)==="[object Map]";},Pg=function Pg(t){return Du(t)==="[object Set]";},pe=function pe(t){return typeof t=="function";},rt=function rt(t){return typeof t=="string";},ms=function ms(t){return _typeof(t)=="symbol";},Be=function Be(t){return t!==null&&_typeof(t)=="object";},lh=function lh(t){return(Be(t)||pe(t))&&pe(t.then)&&pe(t["catch"]);},Ag=Object.prototype.toString,Du=function Du(t){return Ag.call(t);},uh=function uh(t){return Du(t).slice(8,-1);},Dg=function Dg(t){return Du(t)==="[object Object]";},ch=function ch(t){return rt(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t;},Da=/* @__PURE__ */qr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),_b=/* @__PURE__ */qr("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),ku=function ku(t){var e=/* @__PURE__ */Object.create(null);return function(n){return e[n]||(e[n]=t(n));};},bb=/-(\w)/g,gn=ku(function(t){return t.replace(bb,function(e,n){return n?n.toUpperCase():"";});}),Eb=/\B([A-Z])/g,un=ku(function(t){return t.replace(Eb,"-$1").toLowerCase();}),ls=ku(function(t){return t.charAt(0).toUpperCase()+t.slice(1);}),Hi=ku(function(t){return t?"on".concat(ls(t)):"";}),xi=function xi(t,e){return!Object.is(t,e);},ha=function ha(t,e){for(var n=0;n1&&(e[r[0].trim()]=r[1].trim());}}),e;}function Ae(t){var e="";if(rt(t))e=t;else if(le(t))for(var n=0;n"]=i,n;},{})):Pg(e)?_defineProperty({},"Set(".concat(e.size,")"),_toConsumableArray(e.values()).map(function(n){return cc(n);})):ms(e)?cc(e):Be(e)&&!le(e)&&!Dg(e)?String(e):e;},cc=function cc(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";var n;return ms(t)?"Symbol(".concat((n=t.description)!=null?n:e,")"):t;};/** * @vue/reactivity v3.4.25 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function _r(t){var _console;for(var _len=arguments.length,e=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){e[_key-1]=arguments[_key];}(_console=console).warn.apply(_console,["[Vue warn] ".concat(t)].concat(e));}var dn;var Rg=/*#__PURE__*/function(){function Rg(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:!1;_classCallCheck(this,Rg);this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=dn,!e&&dn&&(this.index=(dn.scopes||(dn.scopes=[])).push(this)-1);}return _createClass(Rg,[{key:"active",get:function get(){return this._active;}},{key:"run",value:function run(e){if(this._active){var n=dn;try{return dn=this,e();}finally{dn=n;}}else process.env.NODE_ENV!=="production"&&_r("cannot run an inactive effect scope.");}},{key:"on",value:function on(){dn=this;}},{key:"off",value:function off(){dn=this.parent;}},{key:"stop",value:function stop(e){if(this._active){var n,r;for(n=0,r=this.effects.length;n1&&arguments[1]!==undefined?arguments[1]:dn;e&&e.active&&e.effects.push(t);}function Fg(){return dn;}function Ib(t){dn?dn.cleanups.push(t):process.env.NODE_ENV!=="production"&&_r("onScopeDispose() is called when there is no active effect scope to be associated with.");}var Qi;var ch=/*#__PURE__*/function(){function ch(e,n,r,i){_classCallCheck(this,ch);this.fn=e,this.trigger=n,this.scheduler=r,this.active=!0,this.deps=[],this._dirtyLevel=4,this._trackId=0,this._runnings=0,this._shouldSchedule=!1,this._depsLength=0,Db(this,i);}return _createClass(ch,[{key:"dirty",get:function get(){if(this._dirtyLevel===2||this._dirtyLevel===3){this._dirtyLevel=1,Hr();for(var e=0;e=4))break;}this._dirtyLevel===1&&(this._dirtyLevel=0),zr();}return this._dirtyLevel>=4;},set:function set(e){this._dirtyLevel=e?4:0;}},{key:"run",value:function run(){if(this._dirtyLevel=0,!this.active)return this.fn();var e=yi,n=Qi;try{return yi=!0,Qi=this,this._runnings++,_d(this),this.fn();}finally{bd(this),this._runnings--,Qi=n,yi=e;}}},{key:"stop",value:function stop(){var e;this.active&&(_d(this),bd(this),(e=this.onStop)==null||e.call(this),this.active=!1);}}]);}();function Rb(t){return t.value;}function _d(t){t._trackId++,t._depsLength=0;}function bd(t){if(t.deps.length>t._depsLength){for(var e=t._depsLength;e=l)&&o.push(u);});}else switch(n!==void 0&&o.push(a.get(n)),e){case"add":le(t)?uh(n)&&o.push(a.get("length")):(o.push(a.get(es)),Ji(t)&&o.push(a.get(uf)));break;case"delete":le(t)||(o.push(a.get(es)),Ji(t)&&o.push(a.get(uf)));break;case"set":Ji(t)&&o.push(a.get(es));break;}fh();var _iterator2=_createForOfIteratorHelper(o),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var _l2=_step2.value;_l2&&Ug(_l2,4,process.env.NODE_ENV!=="production"?{target:t,type:e,key:n,newValue:r,oldValue:i,oldTarget:s}:void 0);}}catch(err){_iterator2.e(err);}finally{_iterator2.f();}hh();}function $b(t,e){var n;return(n=Ul.get(t))==null?void 0:n.get(e);}var Fb=/* @__PURE__ */qr("__proto__,__v_isRef,__isVue"),Wg=new Set(/* @__PURE__ */Object.getOwnPropertyNames(Symbol).filter(function(t){return t!=="arguments"&&t!=="caller";}).map(function(t){return Symbol[t];}).filter(ds)),Ed=/* @__PURE__ */Vb();function Vb(){var t={};return["includes","indexOf","lastIndexOf"].forEach(function(e){t[e]=function(){var r=_e(this);for(var s=0,a=this.length;s0&&arguments[0]!==undefined?arguments[0]:!1;var n=arguments.length>1&&arguments[1]!==undefined?arguments[1]:!1;_classCallCheck(this,qg);this._isReadonly=e,this._isShallow=n;}return _createClass(qg,[{key:"get",value:function get(e,n,r){var i=this._isReadonly,s=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return s;if(n==="__v_raw")return r===(i?s?Jg:Zg:s?Kg:Xg).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(r)?e:void 0;var a=le(e);if(!i){if(a&&Ae(Ed,n))return Reflect.get(Ed,n,r);if(n==="hasOwnProperty")return jb;}var o=Reflect.get(e,n,r);return(ds(n)?Wg.has(n):Fb(n))||(i||It(e,"get",n),s)?o:Ye(o)?a&&uh(n)?o:o.value:Be(o)?i?Qg(o):Ru(o):o;}}]);}();var Hg=/*#__PURE__*/function(_qg){function Hg(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:!1;_classCallCheck(this,Hg);return _callSuper(this,Hg,[!1,e]);}_inherits(Hg,_qg);return _createClass(Hg,[{key:"set",value:function set(e,n,r,i){var s=e[n];if(!this._isShallow){var l=os(s);if(!ts(r)&&!os(r)&&(s=_e(s),r=_e(r)),!le(e)&&Ye(s)&&!Ye(r))return l?!1:(s.value=r,!0);}var a=le(e)&&uh(n)?Number(n)0&&arguments[0]!==undefined?arguments[0]:!1;_classCallCheck(this,zg);return _callSuper(this,zg,[!0,e]);}_inherits(zg,_qg2);return _createClass(zg,[{key:"set",value:function set(e,n){return process.env.NODE_ENV!=="production"&&_r("Set operation on key \"".concat(String(n),"\" failed: target is readonly."),e),!0;}},{key:"deleteProperty",value:function deleteProperty(e,n){return process.env.NODE_ENV!=="production"&&_r("Delete operation on key \"".concat(String(n),"\" failed: target is readonly."),e),!0;}}]);}(qg);var Gb=/* @__PURE__ */new Hg(),Ub=/* @__PURE__ */new zg(),Bb=/* @__PURE__ */new Hg(!0),Wb=/* @__PURE__ */new zg(!0),dh=function dh(t){return t;},Du=function Du(t){return Reflect.getPrototypeOf(t);};function $o(t,e){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:!1;var r=arguments.length>3&&arguments[3]!==undefined?arguments[3]:!1;t=t.__v_raw;var i=_e(t),s=_e(e);n||(xi(e,s)&&It(i,"get",e),It(i,"get",s));var _Du=Du(i),a=_Du.has,o=r?dh:n?mh:Xa;if(a.call(i,e))return o(t.get(e));if(a.call(i,s))return o(t.get(s));t!==i&&t.get(e);}function Fo(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:!1;var n=this.__v_raw,r=_e(n),i=_e(t);return e||(xi(t,i)&&It(r,"has",t),It(r,"has",i)),t===i?n.has(t):n.has(t)||n.has(i);}function Vo(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:!1;return t=t.__v_raw,!e&&It(_e(t),"iterate",es),Reflect.get(t,"size",t);}function Sd(t){t=_e(t);var e=_e(this);return Du(e).has.call(e,t)||(e.add(t),fr(e,"add",t,t)),this;}function wd(t,e){e=_e(e);var n=_e(this),_Du2=Du(n),r=_Du2.has,i=_Du2.get;var s=r.call(n,t);s?process.env.NODE_ENV!=="production"&&Yg(n,r,t):(t=_e(t),s=r.call(n,t));var a=i.call(n,t);return n.set(t,e),s?xi(e,a)&&fr(n,"set",t,e,a):fr(n,"add",t,e),this;}function xd(t){var e=_e(this),_Du3=Du(e),n=_Du3.has,r=_Du3.get;var i=n.call(e,t);i?process.env.NODE_ENV!=="production"&&Yg(e,n,t):(t=_e(t),i=n.call(e,t));var s=r?r.call(e,t):void 0,a=e["delete"](t);return i&&fr(e,"delete",t,void 0,s),a;}function Od(){var t=_e(this),e=t.size!==0,n=process.env.NODE_ENV!=="production"?Ji(t)?new Map(t):new Set(t):void 0,r=t.clear();return e&&fr(t,"clear",void 0,void 0,n),r;}function jo(t,e){return function(r,i){var s=this,a=s.__v_raw,o=_e(a),l=e?dh:t?mh:Xa;return!t&&It(o,"iterate",es),a.forEach(function(u,f){return r.call(i,l(u),l(f),s);});};}function Go(t,e,n){return function(){var i=this.__v_raw,s=_e(i),a=Ji(s),o=t==="entries"||t===Symbol.iterator&&a,l=t==="keys"&&a,u=i[t].apply(i,arguments),f=n?dh:e?mh:Xa;return!e&&It(s,"iterate",l?uf:es),_defineProperty({next:function next(){var _u$next=u.next(),c=_u$next.value,h=_u$next.done;return h?{value:c,done:h}:{value:o?[f(c[0]),f(c[1])]:f(c),done:h};}},Symbol.iterator,function(){return this;});};}function Zr(t){return function(){if(process.env.NODE_ENV!=="production"){var n=(arguments.length<=0?undefined:arguments[0])?"on key \"".concat(arguments.length<=0?undefined:arguments[0],"\" "):"";_r("".concat(as(t)," operation ").concat(n,"failed: target is readonly."),_e(this));}return t==="delete"?!1:t==="clear"?void 0:this;};}function qb(){var t={get:function get(s){return $o(this,s);},get size(){return Vo(this);},has:Fo,add:Sd,set:wd,"delete":xd,clear:Od,forEach:jo(!1,!1)},e={get:function get(s){return $o(this,s,!1,!0);},get size(){return Vo(this);},has:Fo,add:Sd,set:wd,"delete":xd,clear:Od,forEach:jo(!1,!0)},n={get:function get(s){return $o(this,s,!0);},get size(){return Vo(this,!0);},has:function has(s){return Fo.call(this,s,!0);},add:Zr("add"),set:Zr("set"),"delete":Zr("delete"),clear:Zr("clear"),forEach:jo(!0,!1)},r={get:function get(s){return $o(this,s,!0,!0);},get size(){return Vo(this,!0);},has:function has(s){return Fo.call(this,s,!0);},add:Zr("add"),set:Zr("set"),"delete":Zr("delete"),clear:Zr("clear"),forEach:jo(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(function(s){t[s]=Go(s,!1,!1),n[s]=Go(s,!0,!1),e[s]=Go(s,!1,!0),r[s]=Go(s,!0,!0);}),[t,n,e,r];}var _qb=/* @__PURE__ */qb(),_qb2=_slicedToArray(_qb,4),Hb=_qb2[0],zb=_qb2[1],Yb=_qb2[2],Xb=_qb2[3];function Iu(t,e){var n=e?t?Xb:Yb:t?zb:Hb;return function(r,i,s){return i==="__v_isReactive"?!t:i==="__v_isReadonly"?t:i==="__v_raw"?r:Reflect.get(Ae(n,i)&&i in r?n:r,i,s);};}var Kb={get:/* @__PURE__ */Iu(!1,!1)},Zb={get:/* @__PURE__ */Iu(!1,!0)},Jb={get:/* @__PURE__ */Iu(!0,!1)},Qb={get:/* @__PURE__ */Iu(!0,!0)};function Yg(t,e,n){var r=_e(n);if(r!==n&&e.call(t,r)){var i=lh(t);_r("Reactive ".concat(i," contains both the raw and reactive versions of the same object").concat(i==="Map"?" as keys":"",", which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible."));}}var Xg=/* @__PURE__ */new WeakMap(),Kg=/* @__PURE__ */new WeakMap(),Zg=/* @__PURE__ */new WeakMap(),Jg=/* @__PURE__ */new WeakMap();function e1(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0;}}function t1(t){return t.__v_skip||!Object.isExtensible(t)?0:e1(lh(t));}function Ru(t){return os(t)?t:$u(t,!1,Gb,Kb,Xg);}function n1(t){return $u(t,!1,Bb,Zb,Kg);}function Qg(t){return $u(t,!0,Ub,Jb,Zg);}function $r(t){return $u(t,!0,Wb,Qb,Jg);}function $u(t,e,n,r,i){if(!Be(t))return process.env.NODE_ENV!=="production"&&_r("value cannot be made reactive: ".concat(String(t))),t;if(t.__v_raw&&!(e&&t.__v_isReactive))return t;var s=i.get(t);if(s)return s;var a=t1(t);if(a===0)return t;var o=new Proxy(t,a===2?r:n);return i.set(t,o),o;}function hr(t){return os(t)?hr(t.__v_raw):!!(t&&t.__v_isReactive);}function os(t){return!!(t&&t.__v_isReadonly);}function ts(t){return!!(t&&t.__v_isShallow);}function Bl(t){return t?!!t.__v_raw:!1;}function _e(t){var e=t&&t.__v_raw;return e?_e(e):t;}function mi(t){return Object.isExtensible(t)&&Ag(t,"__v_skip",!0),t;}var Xa=function Xa(t){return Be(t)?Ru(t):t;},mh=function mh(t){return Be(t)?Qg(t):t;},r1="Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided. Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free";var ey=/*#__PURE__*/function(){function ey(e,n,r,i){var _this=this;_classCallCheck(this,ey);this.getter=e,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new ch(function(){return e(_this._value);},function(){return yl(_this,_this.effect._dirtyLevel===2?2:3);}),this.effect.computed=this,this.effect.active=this._cacheable=!i,this.__v_isReadonly=r;}return _createClass(ey,[{key:"value",get:function get(){var e=_e(this);return(!e._cacheable||e.effect.dirty)&&xi(e._value,e._value=e.effect.run())&&yl(e,4),ty(e),e.effect._dirtyLevel>=2&&(process.env.NODE_ENV!=="production"&&this._warnRecursive&&_r(r1,"\n\ngetter: ",this.getter),yl(e,2)),e._value;},set:function set(e){this._setter(e);}},{key:"_dirty",get:function get(){return this.effect.dirty;},set:function set(e){this.effect.dirty=e;}}]);}();function i1(t,e){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:!1;var r,i;var s=me(t);s?(r=t,i=process.env.NODE_ENV!=="production"?function(){_r("Write operation failed: computed value is readonly");}:yt):(r=t.get,i=t.set);var a=new ey(r,i,s||!i,n);return process.env.NODE_ENV!=="production"&&e&&!n&&(a.effect.onTrack=e.onTrack,a.effect.onTrigger=e.onTrigger),a;}function ty(t){var e;yi&&Qi&&(t=_e(t),Gg(Qi,(e=t.dep)!=null?e:t.dep=Bg(function(){return t.dep=void 0;},t instanceof ey?t:void 0),process.env.NODE_ENV!=="production"?{target:t,type:"get",key:"value"}:void 0));}function yl(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:4;var n=arguments.length>2?arguments[2]:undefined;t=_e(t);var r=t.dep;r&&Ug(r,e,process.env.NODE_ENV!=="production"?{target:t,type:"set",key:"value",newValue:n}:void 0);}function Ye(t){return!!(t&&t.__v_isRef===!0);}function we(t){return ny(t,!1);}function tt(t){return ny(t,!0);}function ny(t,e){return Ye(t)?t:new s1(t,e);}var s1=/*#__PURE__*/function(){function s1(e,n){_classCallCheck(this,s1);this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?e:_e(e),this._value=n?e:Xa(e);}return _createClass(s1,[{key:"value",get:function get(){return ty(this),this._value;},set:function set(e){var n=this.__v_isShallow||ts(e)||os(e);e=n?e:_e(e),xi(e,this._rawValue)&&(this._rawValue=e,this._value=n?e:Xa(e),yl(this,4,e));}}]);}();function x(t){return Ye(t)?t.value:t;}var a1={get:function get(t,e,n){return x(Reflect.get(t,e,n));},set:function set(t,e,n,r){var i=t[e];return Ye(i)&&!Ye(n)?(i.value=n,!0):Reflect.set(t,e,n,r);}};function ry(t){return hr(t)?t:new Proxy(t,a1);}function cf(t){process.env.NODE_ENV!=="production"&&!Bl(t)&&_r("toRefs() expects a reactive object but received a plain one.");var e=le(t)?new Array(t.length):{};for(var n in t)e[n]=iy(t,n);return e;}var o1=/*#__PURE__*/function(){function o1(e,n,r){_classCallCheck(this,o1);this._object=e,this._key=n,this._defaultValue=r,this.__v_isRef=!0;}return _createClass(o1,[{key:"value",get:function get(){var e=this._object[this._key];return e===void 0?this._defaultValue:e;},set:function set(e){this._object[this._key]=e;}},{key:"dep",get:function get(){return $b(_e(this._object),this._key);}}]);}();var l1=/*#__PURE__*/function(){function l1(e){_classCallCheck(this,l1);this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0;}return _createClass(l1,[{key:"value",get:function get(){return this._getter();}}]);}();function vl(t,e,n){return Ye(t)?t:me(t)?new l1(t):Be(t)&&arguments.length>1?iy(t,e,n):we(t);}function iy(t,e,n){var r=t[e];return Ye(r)?r:new o1(t,e,n);}/** +**/function vr(t){var _console;for(var _len=arguments.length,e=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){e[_key-1]=arguments[_key];}(_console=console).warn.apply(_console,["[Vue warn] ".concat(t)].concat(e));}var dn;var $g=/*#__PURE__*/function(){function $g(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:!1;_classCallCheck(this,$g);this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=dn,!e&&dn&&(this.index=(dn.scopes||(dn.scopes=[])).push(this)-1);}return _createClass($g,[{key:"active",get:function get(){return this._active;}},{key:"run",value:function run(e){if(this._active){var n=dn;try{return dn=this,e();}finally{dn=n;}}else process.env.NODE_ENV!=="production"&&vr("cannot run an inactive effect scope.");}},{key:"on",value:function on(){dn=this;}},{key:"off",value:function off(){dn=this.parent;}},{key:"stop",value:function stop(e){if(this._active){var n,r;for(n=0,r=this.effects.length;n1&&arguments[1]!==undefined?arguments[1]:dn;e&&e.active&&e.effects.push(t);}function Vg(){return dn;}function Rb(t){dn?dn.cleanups.push(t):process.env.NODE_ENV!=="production"&&vr("onScopeDispose() is called when there is no active effect scope to be associated with.");}var es;var fh=/*#__PURE__*/function(){function fh(e,n,r,i){_classCallCheck(this,fh);this.fn=e,this.trigger=n,this.scheduler=r,this.active=!0,this.deps=[],this._dirtyLevel=4,this._trackId=0,this._runnings=0,this._shouldSchedule=!1,this._depsLength=0,Ib(this,i);}return _createClass(fh,[{key:"dirty",get:function get(){if(this._dirtyLevel===2||this._dirtyLevel===3){this._dirtyLevel=1,Hr();for(var e=0;e=4))break;}this._dirtyLevel===1&&(this._dirtyLevel=0),zr();}return this._dirtyLevel>=4;},set:function set(e){this._dirtyLevel=e?4:0;}},{key:"run",value:function run(){if(this._dirtyLevel=0,!this.active)return this.fn();var e=yi,n=es;try{return yi=!0,es=this,this._runnings++,bd(this),this.fn();}finally{Ed(this),this._runnings--,es=n,yi=e;}}},{key:"stop",value:function stop(){var e;this.active&&(bd(this),Ed(this),(e=this.onStop)==null||e.call(this),this.active=!1);}}]);}();function $b(t){return t.value;}function bd(t){t._trackId++,t._depsLength=0;}function Ed(t){if(t.deps.length>t._depsLength){for(var e=t._depsLength;e=l)&&o.push(u);});}else switch(n!==void 0&&o.push(a.get(n)),e){case"add":le(t)?ch(n)&&o.push(a.get("length")):(o.push(a.get(ts)),Qi(t)&&o.push(a.get(cf)));break;case"delete":le(t)||(o.push(a.get(ts)),Qi(t)&&o.push(a.get(cf)));break;case"set":Qi(t)&&o.push(a.get(ts));break;}hh();var _iterator2=_createForOfIteratorHelper(o),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var _l2=_step2.value;_l2&&Bg(_l2,4,process.env.NODE_ENV!=="production"?{target:t,type:e,key:n,newValue:r,oldValue:i,oldTarget:s}:void 0);}}catch(err){_iterator2.e(err);}finally{_iterator2.f();}dh();}function Fb(t,e){var n;return(n=ql.get(t))==null?void 0:n.get(e);}var Vb=/* @__PURE__ */qr("__proto__,__v_isRef,__isVue"),qg=new Set(/* @__PURE__ */Object.getOwnPropertyNames(Symbol).filter(function(t){return t!=="arguments"&&t!=="caller";}).map(function(t){return Symbol[t];}).filter(ms)),Sd=/* @__PURE__ */jb();function jb(){var t={};return["includes","indexOf","lastIndexOf"].forEach(function(e){t[e]=function(){var r=_e(this);for(var s=0,a=this.length;s0&&arguments[0]!==undefined?arguments[0]:!1;var n=arguments.length>1&&arguments[1]!==undefined?arguments[1]:!1;_classCallCheck(this,Hg);this._isReadonly=e,this._isShallow=n;}return _createClass(Hg,[{key:"get",value:function get(e,n,r){var i=this._isReadonly,s=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return s;if(n==="__v_raw")return r===(i?s?Qg:Jg:s?Zg:Kg).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(r)?e:void 0;var a=le(e);if(!i){if(a&&De(Sd,n))return Reflect.get(Sd,n,r);if(n==="hasOwnProperty")return Gb;}var o=Reflect.get(e,n,r);return(ms(n)?qg.has(n):Vb(n))||(i||It(e,"get",n),s)?o:Ye(o)?a&&ch(n)?o:o.value:Be(o)?i?ey(o):Fu(o):o;}}]);}();var zg=/*#__PURE__*/function(_Hg){function zg(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:!1;_classCallCheck(this,zg);return _callSuper(this,zg,[!1,e]);}_inherits(zg,_Hg);return _createClass(zg,[{key:"set",value:function set(e,n,r,i){var s=e[n];if(!this._isShallow){var l=us(s);if(!ns(r)&&!us(r)&&(s=_e(s),r=_e(r)),!le(e)&&Ye(s)&&!Ye(r))return l?!1:(s.value=r,!0);}var a=le(e)&&ch(n)?Number(n)0&&arguments[0]!==undefined?arguments[0]:!1;_classCallCheck(this,Yg);return _callSuper(this,Yg,[!0,e]);}_inherits(Yg,_Hg2);return _createClass(Yg,[{key:"set",value:function set(e,n){return process.env.NODE_ENV!=="production"&&vr("Set operation on key \"".concat(String(n),"\" failed: target is readonly."),e),!0;}},{key:"deleteProperty",value:function deleteProperty(e,n){return process.env.NODE_ENV!=="production"&&vr("Delete operation on key \"".concat(String(n),"\" failed: target is readonly."),e),!0;}}]);}(Hg);var Ub=/* @__PURE__ */new zg(),Bb=/* @__PURE__ */new Yg(),Wb=/* @__PURE__ */new zg(!0),qb=/* @__PURE__ */new Yg(!0),ph=function ph(t){return t;},Ru=function Ru(t){return Reflect.getPrototypeOf(t);};function jo(t,e){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:!1;var r=arguments.length>3&&arguments[3]!==undefined?arguments[3]:!1;t=t.__v_raw;var i=_e(t),s=_e(e);n||(xi(e,s)&&It(i,"get",e),It(i,"get",s));var _Ru=Ru(i),a=_Ru.has,o=r?ph:n?mh:Za;if(a.call(i,e))return o(t.get(e));if(a.call(i,s))return o(t.get(s));t!==i&&t.get(e);}function Go(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:!1;var n=this.__v_raw,r=_e(n),i=_e(t);return e||(xi(t,i)&&It(r,"has",t),It(r,"has",i)),t===i?n.has(t):n.has(t)||n.has(i);}function Uo(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:!1;return t=t.__v_raw,!e&&It(_e(t),"iterate",ts),Reflect.get(t,"size",t);}function wd(t){t=_e(t);var e=_e(this);return Ru(e).has.call(e,t)||(e.add(t),cr(e,"add",t,t)),this;}function xd(t,e){e=_e(e);var n=_e(this),_Ru2=Ru(n),r=_Ru2.has,i=_Ru2.get;var s=r.call(n,t);s?process.env.NODE_ENV!=="production"&&Xg(n,r,t):(t=_e(t),s=r.call(n,t));var a=i.call(n,t);return n.set(t,e),s?xi(e,a)&&cr(n,"set",t,e,a):cr(n,"add",t,e),this;}function Od(t){var e=_e(this),_Ru3=Ru(e),n=_Ru3.has,r=_Ru3.get;var i=n.call(e,t);i?process.env.NODE_ENV!=="production"&&Xg(e,n,t):(t=_e(t),i=n.call(e,t));var s=r?r.call(e,t):void 0,a=e["delete"](t);return i&&cr(e,"delete",t,void 0,s),a;}function Md(){var t=_e(this),e=t.size!==0,n=process.env.NODE_ENV!=="production"?Qi(t)?new Map(t):new Set(t):void 0,r=t.clear();return e&&cr(t,"clear",void 0,void 0,n),r;}function Bo(t,e){return function(r,i){var s=this,a=s.__v_raw,o=_e(a),l=e?ph:t?mh:Za;return!t&&It(o,"iterate",ts),a.forEach(function(u,f){return r.call(i,l(u),l(f),s);});};}function Wo(t,e,n){return function(){var i=this.__v_raw,s=_e(i),a=Qi(s),o=t==="entries"||t===Symbol.iterator&&a,l=t==="keys"&&a,u=i[t].apply(i,arguments),f=n?ph:e?mh:Za;return!e&&It(s,"iterate",l?cf:ts),_defineProperty({next:function next(){var _u$next=u.next(),c=_u$next.value,h=_u$next.done;return h?{value:c,done:h}:{value:o?[f(c[0]),f(c[1])]:f(c),done:h};}},Symbol.iterator,function(){return this;});};}function Zr(t){return function(){if(process.env.NODE_ENV!=="production"){var n=(arguments.length<=0?undefined:arguments[0])?"on key \"".concat(arguments.length<=0?undefined:arguments[0],"\" "):"";vr("".concat(ls(t)," operation ").concat(n,"failed: target is readonly."),_e(this));}return t==="delete"?!1:t==="clear"?void 0:this;};}function Hb(){var t={get:function get(s){return jo(this,s);},get size(){return Uo(this);},has:Go,add:wd,set:xd,"delete":Od,clear:Md,forEach:Bo(!1,!1)},e={get:function get(s){return jo(this,s,!1,!0);},get size(){return Uo(this);},has:Go,add:wd,set:xd,"delete":Od,clear:Md,forEach:Bo(!1,!0)},n={get:function get(s){return jo(this,s,!0);},get size(){return Uo(this,!0);},has:function has(s){return Go.call(this,s,!0);},add:Zr("add"),set:Zr("set"),"delete":Zr("delete"),clear:Zr("clear"),forEach:Bo(!0,!1)},r={get:function get(s){return jo(this,s,!0,!0);},get size(){return Uo(this,!0);},has:function has(s){return Go.call(this,s,!0);},add:Zr("add"),set:Zr("set"),"delete":Zr("delete"),clear:Zr("clear"),forEach:Bo(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(function(s){t[s]=Wo(s,!1,!1),n[s]=Wo(s,!0,!1),e[s]=Wo(s,!1,!0),r[s]=Wo(s,!0,!0);}),[t,n,e,r];}var _Hb=/* @__PURE__ */Hb(),_Hb2=_slicedToArray(_Hb,4),zb=_Hb2[0],Yb=_Hb2[1],Xb=_Hb2[2],Kb=_Hb2[3];function $u(t,e){var n=e?t?Kb:Xb:t?Yb:zb;return function(r,i,s){return i==="__v_isReactive"?!t:i==="__v_isReadonly"?t:i==="__v_raw"?r:Reflect.get(De(n,i)&&i in r?n:r,i,s);};}var Zb={get:/* @__PURE__ */$u(!1,!1)},Jb={get:/* @__PURE__ */$u(!1,!0)},Qb={get:/* @__PURE__ */$u(!0,!1)},e1={get:/* @__PURE__ */$u(!0,!0)};function Xg(t,e,n){var r=_e(n);if(r!==n&&e.call(t,r)){var i=uh(t);vr("Reactive ".concat(i," contains both the raw and reactive versions of the same object").concat(i==="Map"?" as keys":"",", which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible."));}}var Kg=/* @__PURE__ */new WeakMap(),Zg=/* @__PURE__ */new WeakMap(),Jg=/* @__PURE__ */new WeakMap(),Qg=/* @__PURE__ */new WeakMap();function t1(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0;}}function n1(t){return t.__v_skip||!Object.isExtensible(t)?0:t1(uh(t));}function Fu(t){return us(t)?t:Vu(t,!1,Ub,Zb,Kg);}function r1(t){return Vu(t,!1,Wb,Jb,Zg);}function ey(t){return Vu(t,!0,Bb,Qb,Jg);}function Rr(t){return Vu(t,!0,qb,e1,Qg);}function Vu(t,e,n,r,i){if(!Be(t))return process.env.NODE_ENV!=="production"&&vr("value cannot be made reactive: ".concat(String(t))),t;if(t.__v_raw&&!(e&&t.__v_isReactive))return t;var s=i.get(t);if(s)return s;var a=n1(t);if(a===0)return t;var o=new Proxy(t,a===2?r:n);return i.set(t,o),o;}function fr(t){return us(t)?fr(t.__v_raw):!!(t&&t.__v_isReactive);}function us(t){return!!(t&&t.__v_isReadonly);}function ns(t){return!!(t&&t.__v_isShallow);}function Hl(t){return t?!!t.__v_raw:!1;}function _e(t){var e=t&&t.__v_raw;return e?_e(e):t;}function pi(t){return Object.isExtensible(t)&&kg(t,"__v_skip",!0),t;}var Za=function Za(t){return Be(t)?Fu(t):t;},mh=function mh(t){return Be(t)?ey(t):t;},i1="Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided. Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free";var ty=/*#__PURE__*/function(){function ty(e,n,r,i){var _this=this;_classCallCheck(this,ty);this.getter=e,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new fh(function(){return e(_this._value);},function(){return bl(_this,_this.effect._dirtyLevel===2?2:3);}),this.effect.computed=this,this.effect.active=this._cacheable=!i,this.__v_isReadonly=r;}return _createClass(ty,[{key:"value",get:function get(){var e=_e(this);return(!e._cacheable||e.effect.dirty)&&xi(e._value,e._value=e.effect.run())&&bl(e,4),ny(e),e.effect._dirtyLevel>=2&&(process.env.NODE_ENV!=="production"&&this._warnRecursive&&vr(i1,"\n\ngetter: ",this.getter),bl(e,2)),e._value;},set:function set(e){this._setter(e);}},{key:"_dirty",get:function get(){return this.effect.dirty;},set:function set(e){this.effect.dirty=e;}}]);}();function s1(t,e){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:!1;var r,i;var s=pe(t);s?(r=t,i=process.env.NODE_ENV!=="production"?function(){vr("Write operation failed: computed value is readonly");}:yt):(r=t.get,i=t.set);var a=new ty(r,i,s||!i,n);return process.env.NODE_ENV!=="production"&&e&&!n&&(a.effect.onTrack=e.onTrack,a.effect.onTrigger=e.onTrigger),a;}function ny(t){var e;yi&&es&&(t=_e(t),Ug(es,(e=t.dep)!=null?e:t.dep=Wg(function(){return t.dep=void 0;},t instanceof ty?t:void 0),process.env.NODE_ENV!=="production"?{target:t,type:"get",key:"value"}:void 0));}function bl(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:4;var n=arguments.length>2?arguments[2]:undefined;t=_e(t);var r=t.dep;r&&Bg(r,e,process.env.NODE_ENV!=="production"?{target:t,type:"set",key:"value",newValue:n}:void 0);}function Ye(t){return!!(t&&t.__v_isRef===!0);}function we(t){return ry(t,!1);}function nt(t){return ry(t,!0);}function ry(t,e){return Ye(t)?t:new a1(t,e);}var a1=/*#__PURE__*/function(){function a1(e,n){_classCallCheck(this,a1);this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?e:_e(e),this._value=n?e:Za(e);}return _createClass(a1,[{key:"value",get:function get(){return ny(this),this._value;},set:function set(e){var n=this.__v_isShallow||ns(e)||us(e);e=n?e:_e(e),xi(e,this._rawValue)&&(this._rawValue=e,this._value=n?e:Za(e),bl(this,4,e));}}]);}();function M(t){return Ye(t)?t.value:t;}var o1={get:function get(t,e,n){return M(Reflect.get(t,e,n));},set:function set(t,e,n,r){var i=t[e];return Ye(i)&&!Ye(n)?(i.value=n,!0):Reflect.set(t,e,n,r);}};function iy(t){return fr(t)?t:new Proxy(t,o1);}function ff(t){process.env.NODE_ENV!=="production"&&!Hl(t)&&vr("toRefs() expects a reactive object but received a plain one.");var e=le(t)?new Array(t.length):{};for(var n in t)e[n]=sy(t,n);return e;}var l1=/*#__PURE__*/function(){function l1(e,n,r){_classCallCheck(this,l1);this._object=e,this._key=n,this._defaultValue=r,this.__v_isRef=!0;}return _createClass(l1,[{key:"value",get:function get(){var e=this._object[this._key];return e===void 0?this._defaultValue:e;},set:function set(e){this._object[this._key]=e;}},{key:"dep",get:function get(){return Fb(_e(this._object),this._key);}}]);}();var u1=/*#__PURE__*/function(){function u1(e){_classCallCheck(this,u1);this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0;}return _createClass(u1,[{key:"value",get:function get(){return this._getter();}}]);}();function El(t,e,n){return Ye(t)?t:pe(t)?new u1(t):Be(t)&&arguments.length>1?sy(t,e,n):we(t);}function sy(t,e,n){var r=t[e];return Ye(r)?r:new l1(t,e,n);}/** * @vue/runtime-core v3.4.25 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/var ns=[];function _l(t){ns.push(t);}function bl(){ns.pop();}function q(t){Hr();var n=ns.length?ns[ns.length-1].component:null,r=n&&n.appContext.config.warnHandler,i=u1();for(var _len4=arguments.length,e=new Array(_len4>1?_len4-1:0),_key4=1;_key4<_len4;_key4++){e[_key4-1]=arguments[_key4];}if(r)Fr(r,n,11,[t+e.map(function(s){var a,o;return(o=(a=s.toString)==null?void 0:a.call(s))!=null?o:JSON.stringify(s);}).join(""),n&&n.proxy,i.map(function(_ref3){var s=_ref3.vnode;return"at <".concat(Bu(n,s.type),">");}).join("\n"),i]);else{var _console2;var s=["[Vue warn]: ".concat(t)].concat(e);i.length&&s.push.apply(s,["\n"].concat(_toConsumableArray(c1(i)))),(_console2=console).warn.apply(_console2,_toConsumableArray(s));}zr();}function u1(){var t=ns[ns.length-1];if(!t)return[];var e=[];for(;t;){var n=e[0];n&&n.vnode===t?n.recurseCount++:e.push({vnode:t,recurseCount:0});var r=t.component&&t.component.parent;t=r&&r.vnode;}return e;}function c1(t){var e=[];return t.forEach(function(n,r){e.push.apply(e,_toConsumableArray(r===0?[]:["\n"]).concat(_toConsumableArray(f1(n))));}),e;}function f1(_ref4){var t=_ref4.vnode,e=_ref4.recurseCount;var n=e>0?"... (".concat(e," recursive calls)"):"",r=t.component?t.component.parent==null:!1,i=" at <".concat(Bu(t.component,t.type,r)),s=">"+n;return t.props?[i].concat(_toConsumableArray(h1(t.props)),[s]):[i+s];}function h1(t){var e=[],n=Object.keys(t);return n.slice(0,3).forEach(function(r){e.push.apply(e,_toConsumableArray(sy(r,t[r])));}),n.length>3&&e.push(" ..."),e;}function sy(t,e,n){return rt(e)?(e=JSON.stringify(e),n?e:["".concat(t,"=").concat(e)]):typeof e=="number"||typeof e=="boolean"||e==null?n?e:["".concat(t,"=").concat(e)]:Ye(e)?(e=sy(t,_e(e.value),!0),n?e:["".concat(t,"=Ref<"),e,">"]):me(e)?["".concat(t,"=fn").concat(e.name?"<".concat(e.name,">"):"")]:(e=_e(e),n?e:["".concat(t,"="),e]);}function d1(t,e){process.env.NODE_ENV!=="production"&&t!==void 0&&(typeof t!="number"?q("".concat(e," is not a valid number - got ").concat(JSON.stringify(t),".")):isNaN(t)&&q("".concat(e," is NaN - the duration expression might be incorrect.")));}var ph=(_ph={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook"},_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ph,0,"setup function"),1,"render function"),2,"watcher getter"),3,"watcher callback"),4,"watcher cleanup function"),5,"native event handler"),6,"component event handler"),7,"vnode hook"),8,"directive hook"),9,"transition hook"),_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ph,10,"app errorHandler"),11,"app warnHandler"),12,"ref function"),13,"async component loader"),14,"scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core ."));function Fr(t,e,n,r){try{return r?t.apply(void 0,_toConsumableArray(r)):t();}catch(i){fo(i,e,n);}}function Cn(t,e,n,r){if(me(t)){var i=Fr(t,e,n,r);return i&&oh(i)&&i["catch"](function(s){fo(s,e,n);}),i;}if(le(t)){var _i2=[];for(var s=0;s3&&arguments[3]!==undefined?arguments[3]:!0;var i=e?e.vnode:null;if(e){var s=e.parent;var a=e.proxy,o=process.env.NODE_ENV!=="production"?ph[n]:"https://vuejs.org/error-reference/#runtime-".concat(n);for(;s;){var u=s.ec;if(u){for(var f=0;f3&&arguments[3]!==undefined?arguments[3]:!0;if(process.env.NODE_ENV!=="production"){var i=ph[e];if(n&&_l(n),q("Unhandled error".concat(i?" during execution of ".concat(i):"")),n&&bl(),r)throw t;console.error(t);}else console.error(t);}var Ka=!1,ff=!1;var Bt=[];var sr=0;var Vs=[];var Ir=null,ii=0;var ay=/* @__PURE__ */Promise.resolve();var gh=null;var p1=100;function Wl(t){var e=gh||ay;return t?e.then(this?t.bind(this):t):e;}function g1(t){var e=sr+1,n=Bt.length;for(;e>>1,i=Bt[r],s=Za(i);ssr&&Bt.splice(e,1);}function ly(t){le(t)?Vs.push.apply(Vs,_toConsumableArray(t)):(!Ir||!Ir.includes(t,t.allowRecurse?ii+1:ii))&&Vs.push(t),oy();}function Md(t,e){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:Ka?sr+1:0;for(process.env.NODE_ENV!=="production"&&(e=e||/* @__PURE__ */new Map());np1){var r=e.ownerInstance,i=r&&Th(r.type);return fo("Maximum recursive updates exceeded".concat(i?" in component <".concat(i,">"):"",". This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function."),null,10),!0;}else t.set(e,n+1);}}var vi=!1;var Ns=/* @__PURE__ */new Set();process.env.NODE_ENV!=="production"&&(Au().__VUE_HMR_RUNTIME__={createRecord:uc(fy),rerender:uc(E1),reload:uc(S1)});var ls=/* @__PURE__ */new Map();function _1(t){var e=t.type.__hmrId;var n=ls.get(e);n||(fy(e,t.type),n=ls.get(e)),n.instances.add(t);}function b1(t){ls.get(t.type.__hmrId).instances["delete"](t);}function fy(t,e){return ls.has(t)?!1:(ls.set(t,{initialDef:ka(e),instances:/* @__PURE__ */new Set()}),!0);}function ka(t){return Xy(t)?t.__vccOpts:t;}function E1(t,e){var n=ls.get(t);!n||(n.initialDef.render=e,_toConsumableArray(n.instances).forEach(function(r){e&&(r.render=e,ka(r.type).render=e),r.renderCache=[],vi=!0,r.effect.dirty=!0,r.update(),vi=!1;}));}function S1(t,e){var n=ls.get(t);if(!n)return;e=ka(e),Td(n.initialDef,e);var r=_toConsumableArray(n.instances);var _iterator3=_createForOfIteratorHelper(r),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var i=_step3.value;var s=ka(i.type);Ns.has(s)||(s!==n.initialDef&&Td(s,e),Ns.add(s)),i.appContext.propsCache["delete"](i.type),i.appContext.emitsCache["delete"](i.type),i.appContext.optionsCache["delete"](i.type),i.ceReload?(Ns.add(s),i.ceReload(e.styles),Ns["delete"](s)):i.parent?(i.parent.effect.dirty=!0,Fu(i.parent.update)):i.appContext.reload?i.appContext.reload():(typeof window==="undefined"?"undefined":_typeof(window))<"u"?window.location.reload():console.warn("[HMR] Root or manually mounted instance modified. Full reload required.");}}catch(err){_iterator3.e(err);}finally{_iterator3.f();}ly(function(){var _iterator4=_createForOfIteratorHelper(r),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var i=_step4.value;Ns["delete"](ka(i.type));}}catch(err){_iterator4.e(err);}finally{_iterator4.f();}});}function Td(t,e){Qe(t,e);for(var n in t)n!=="__file"&&!(n in e)&&delete t[n];}function uc(t){return function(e,n){try{return t(e,n);}catch(r){console.error(r),console.warn("[HMR] Something went wrong during Vue component hot-reload. Full reload required.");}};}var qn,ba=[],hf=!1;function ho(t){var _qn;for(var _len5=arguments.length,e=new Array(_len5>1?_len5-1:0),_key5=1;_key5<_len5;_key5++){e[_key5-1]=arguments[_key5];}qn?(_qn=qn).emit.apply(_qn,[t].concat(e)):hf||ba.push({event:t,args:e});}function vh(t,e){var n,r;qn=t,qn?(qn.enabled=!0,ba.forEach(function(_ref5){var _qn2;var i=_ref5.event,s=_ref5.args;return(_qn2=qn).emit.apply(_qn2,[i].concat(_toConsumableArray(s)));}),ba=[]):(typeof window==="undefined"?"undefined":_typeof(window))<"u"&&window.HTMLElement&&!((r=(n=window.navigator)==null?void 0:n.userAgent)!=null&&r.includes("jsdom"))?((e.__VUE_DEVTOOLS_HOOK_REPLAY__=e.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(function(s){vh(s,e);}),setTimeout(function(){qn||(e.__VUE_DEVTOOLS_HOOK_REPLAY__=null,hf=!0,ba=[]);},3e3)):(hf=!0,ba=[]);}function w1(t,e){ho("app:init",t,e,{Fragment:Ge,Text:po,Comment:Nt,Static:El});}function x1(t){ho("app:unmount",t);}var O1=/* @__PURE__ */_h("component:added"),hy=/* @__PURE__ */_h("component:updated"),M1=/* @__PURE__ */_h("component:removed"),T1=function T1(t){qn&&typeof qn.cleanupBuffer=="function"&&!qn.cleanupBuffer(t)&&M1(t);};/*! #__NO_SIDE_EFFECTS__ */function _h(t){return function(e){ho(t,e.appContext.app,e.uid,e.parent?e.parent.uid:void 0,e);};}var N1=/* @__PURE__ */dy("perf:start"),C1=/* @__PURE__ */dy("perf:end");function dy(t){return function(e,n,r){ho(t,e.appContext.app,e.uid,e,n,r);};}function L1(t,e,n){ho("component:emit",t.appContext.app,t,e,n);}function P1(t,e){if(t.isUnmounted)return;var r=t.vnode.props||Ke;for(var _len6=arguments.length,n=new Array(_len6>2?_len6-2:0),_key6=2;_key6<_len6;_key6++){n[_key6-2]=arguments[_key6];}if(process.env.NODE_ENV!=="production"){var f=t.emitsOptions,_t$propsOptions=_slicedToArray(t.propsOptions,1),c=_t$propsOptions[0];if(f)if(!(e in f))(!c||!(Hi(e)in c))&&q("Component emitted event \"".concat(e,"\" but it is neither declared in the emits option nor as an \"").concat(Hi(e),"\" prop."));else{var h=f[e];me(h)&&(h.apply(void 0,n)||q("Invalid event arguments: event validation failed for event \"".concat(e,"\".")));}}var i=n;var s=e.startsWith("update:"),a=s&&e.slice(7);if(a&&a in r){var _f2="".concat(a==="modelValue"?"model":a,"Modifiers"),_ref6=r[_f2]||Ke,_c2=_ref6.number,_h2=_ref6.trim;_h2&&(i=n.map(function(d){return rt(d)?d.trim():d;})),_c2&&(i=n.map(Eb));}if(process.env.NODE_ENV!=="production"&&L1(t,e,i),process.env.NODE_ENV!=="production"){var _f3=e.toLowerCase();_f3!==e&&r[Hi(_f3)]&&q("Event \"".concat(_f3,"\" is emitted in component ").concat(Bu(t,t.type)," but the handler is registered for \"").concat(e,"\". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use \"").concat(un(e),"\" instead of \"").concat(e,"\"."));}var o,l=r[o=Hi(e)]||r[o=Hi(gn(e))];!l&&s&&(l=r[o=Hi(un(e))]),l&&Cn(l,t,6,i);var u=r[o+"Once"];if(u){if(!t.emitted)t.emitted={};else if(t.emitted[o])return;t.emitted[o]=!0,Cn(u,t,6,i);}}function my(t,e){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:!1;var r=e.emitsCache,i=r.get(t);if(i!==void 0)return i;var s=t.emits;var a={},o=!1;if(!me(t)){var l=function l(u){var f=my(u,e,!0);f&&(o=!0,Qe(a,f));};!n&&e.mixins.length&&e.mixins.forEach(l),t["extends"]&&l(t["extends"]),t.mixins&&t.mixins.forEach(l);}return!s&&!o?(Be(t)&&r.set(t,null),null):(le(s)?s.forEach(function(l){return a[l]=null;}):Qe(a,s),Be(t)&&r.set(t,a),a);}function Vu(t,e){return!t||!co(e)?!1:(e=e.slice(2).replace(/Once$/,""),Ae(t,e[0].toLowerCase()+e.slice(1))||Ae(t,un(e))||Ae(t,e));}var ht=null,py=null;function ql(t){var e=ht;return ht=t,py=t&&t.type.__scopeId||null,e;}function _i(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:ht;var n=arguments.length>2?arguments[2]:undefined;if(!e||t._n)return t;var r=function r(){r._d&&Bd(-1);var s=ql(e);var a;try{a=t.apply(void 0,arguments);}finally{ql(s),r._d&&Bd(1);}return process.env.NODE_ENV!=="production"&&hy(e),a;};return r._n=!0,r._c=!0,r._d=!0,r;}var df=!1;function Hl(){df=!0;}function cc(t){var _gy,_gy2;var e=t.type,n=t.vnode,r=t.proxy,i=t.withProxy,_t$propsOptions2=_slicedToArray(t.propsOptions,1),s=_t$propsOptions2[0],a=t.slots,o=t.attrs,l=t.emit,u=t.render,f=t.renderCache,c=t.props,h=t.data,d=t.setupState,m=t.ctx,p=t.inheritAttrs,g=ql(t);var y,v;process.env.NODE_ENV!=="production"&&(df=!1);try{if(n.shapeFlag&4){var O=i||r,N=process.env.NODE_ENV!=="production"&&d.__isScriptSetup?new Proxy(O,{get:function get(M,P,I){return q("Property '".concat(String(P),"' was accessed via 'this'. Avoid using 'this' in templates.")),Reflect.get(M,P,I);}}):O;y=Wn(u.call(N,O,f,process.env.NODE_ENV!=="production"?$r(c):c,d,h,m)),v=o;}else{var _O2=e;process.env.NODE_ENV!=="production"&&o===c&&Hl(),y=Wn(_O2.length>1?_O2(process.env.NODE_ENV!=="production"?$r(c):c,process.env.NODE_ENV!=="production"?{get attrs(){return Hl(),o;},slots:a,emit:l}:{attrs:o,slots:a,emit:l}):_O2(process.env.NODE_ENV!=="production"?$r(c):c,null)),v=e.props?o:k1(o);}}catch(O){Ia.length=0,fo(O,t,1),y=ie(Nt);}var b=y,E;if(process.env.NODE_ENV!=="production"&&y.patchFlag>0&&y.patchFlag&2048&&(_gy=gy(y),_gy2=_slicedToArray(_gy,2),b=_gy2[0],E=_gy2[1],_gy),v&&p!==!1){var _O3=Object.keys(v),_b2=b,_N2=_b2.shapeFlag;if(_O3.length){if(_N2&7)s&&_O3.some(Gl)&&(v=A1(v,s)),b=br(b,v);else if(process.env.NODE_ENV!=="production"&&!df&&b.type!==Nt){var M=Object.keys(o),P=[],I=[];for(var C=0,R=M.length;C renders non-element root node that cannot be animated."),b.transition=n.transition),process.env.NODE_ENV!=="production"&&E?E(b):y=b,ql(g),y;}var gy=function gy(t){var e=t.children,n=t.dynamicChildren,r=bh(e,!1);if(r){if(process.env.NODE_ENV!=="production"&&r.patchFlag>0&&r.patchFlag&2048)return gy(r);}else return[t,void 0];var i=e.indexOf(r),s=n?n.indexOf(r):-1,a=function a(o){e[i]=o,n&&(s>-1?n[s]=o:o.patchFlag>0&&(t.dynamicChildren=[].concat(_toConsumableArray(n),[o])));};return[Wn(r),a];};function bh(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:!0;var n;for(var r=0;r0&&n.patchFlag&2048)return bh(n.children);}}else return;}return n;}var k1=function k1(t){var e;for(var n in t)(n==="class"||n==="style"||co(n))&&((e||(e={}))[n]=t[n]);return e;},A1=function A1(t,e){var n={};for(var r in t)(!Gl(r)||!(r.slice(9)in e))&&(n[r]=t[r]);return n;},Nd=function Nd(t){return t.shapeFlag&7||t.type===Nt;};function D1(t,e,n){var r=t.props,i=t.children,s=t.component,a=e.props,o=e.children,l=e.patchFlag,u=s.emitsOptions;if(process.env.NODE_ENV!=="production"&&(i||o)&&vi||e.dirs||e.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return r?Cd(r,a,u):!!a;if(l&8){var f=e.dynamicProps;for(var c=0;c2&&arguments[2]!==undefined?arguments[2]:!0;var r=arguments.length>3&&arguments[3]!==undefined?arguments[3]:!1;var i=ht||St;if(i){var s=i.type;if(t===mf){var o=Th(s,!1);if(o&&(o===e||o===gn(e)||o===as(gn(e))))return s;}var a=Ld(i[t]||s[t],e)||Ld(i.appContext[t],e);if(!a&&r)return s;if(process.env.NODE_ENV!=="production"&&n&&!a){var _o2=t===mf?"\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.":"";q("Failed to resolve ".concat(t.slice(0,-1),": ").concat(e).concat(_o2));}return a;}else process.env.NODE_ENV!=="production"&&q("resolve".concat(as(t.slice(0,-1))," can only be used in render() or setup()."));}function Ld(t,e){return t&&(t[e]||t[gn(e)]||t[as(gn(e))]);}var V1=function V1(t){return t.__isSuspense;};function j1(t,e){var _e$effects;e&&e.pendingBranch?le(t)?(_e$effects=e.effects).push.apply(_e$effects,_toConsumableArray(t)):e.effects.push(t):ly(t);}var G1=Symbol["for"]("v-scx"),U1=function U1(){{var t=Gs(G1);return t||process.env.NODE_ENV!=="production"&&q("Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build."),t;}};function vn(t,e){return Sh(t,null,e);}var Uo={};function et(t,e,n){return process.env.NODE_ENV!=="production"&&!me(e)&&q("`watch(fn, options?)` signature has been moved to a separate API. Use `watchEffect(fn, options?)` instead. `watch` now only supports `watch(source, cb, options?) signature."),Sh(t,e,n);}function Sh(t,e){var _ref8=arguments.length>2&&arguments[2]!==undefined?arguments[2]:Ke,n=_ref8.immediate,r=_ref8.deep,i=_ref8.flush,s=_ref8.once,a=_ref8.onTrack,o=_ref8.onTrigger;if(e&&s){var M=e;e=function e(){M.apply(void 0,arguments),N();};}process.env.NODE_ENV!=="production"&&r!==void 0&&typeof r=="number"&&q('watch() "deep" option with number value will be used as watch depth in future versions. Please use a boolean instead to avoid potential breakage.'),process.env.NODE_ENV!=="production"&&!e&&(n!==void 0&&q('watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.'),r!==void 0&&q('watch() "deep" option is only respected when using the watch(source, callback, options?) signature.'),s!==void 0&&q('watch() "once" option is only respected when using the watch(source, callback, options?) signature.'));var l=function l(M){q("Invalid watch source: ",M,"A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.");},u=St,f=function f(M){return r===!0?M:Ki(M,r===!1?1:void 0);};var c,h=!1,d=!1;if(Ye(t)?(c=function c(){return t.value;},h=ts(t)):hr(t)?(c=function c(){return f(t);},h=!0):le(t)?(d=!0,h=t.some(function(M){return hr(M)||ts(M);}),c=function c(){return t.map(function(M){if(Ye(M))return M.value;if(hr(M))return f(M);if(me(M))return Fr(M,u,2);process.env.NODE_ENV!=="production"&&l(M);});}):me(t)?e?c=function c(){return Fr(t,u,2);}:c=function c(){return m&&m(),Cn(t,u,3,[p]);}:(c=yt,process.env.NODE_ENV!=="production"&&l(t)),e&&r){var _M2=c;c=function c(){return Ki(_M2());};}var m,p=function p(M){m=E.onStop=function(){Fr(M,u,4),m=E.onStop=void 0;};},g;if(Gu)if(p=yt,e?n&&Cn(e,u,3,[c(),d?[]:void 0,p]):c(),i==="sync"){var _M3=U1();g=_M3.__watcherHandles||(_M3.__watcherHandles=[]);}else return yt;var y=d?new Array(t.length).fill(Uo):Uo;var v=function v(){if(!(!E.active||!E.dirty))if(e){var _M4=E.run();(r||h||(d?_M4.some(function(P,I){return xi(P,y[I]);}):xi(_M4,y)))&&(m&&m(),Cn(e,u,3,[_M4,y===Uo?void 0:d&&y[0]===Uo?[]:y,p]),y=_M4);}else E.run();};v.allowRecurse=!!e;var b;i==="sync"?b=v:i==="post"?b=function b(){return on(v,u&&u.suspense);}:(v.pre=!0,u&&(v.id=u.uid),b=function b(){return Fu(v);});var E=new ch(c,yt,b),O=Fg(),N=function N(){E.stop(),O&&ah(O.effects,E);};return process.env.NODE_ENV!=="production"&&(E.onTrack=a,E.onTrigger=o),e?n?v():y=E.run():i==="post"?on(E.run.bind(E),u&&u.suspense):E.run(),g&&g.push(N),N;}function B1(t,e,n){var r=this.proxy,i=rt(t)?t.includes(".")?vy(r,t):function(){return r[t];}:t.bind(r,r);var s;me(e)?s=e:(s=e.handler,n=e);var a=yo(this),o=Sh(i,s.bind(r),n);return a(),o;}function vy(t,e){var n=e.split(".");return function(){var r=t;for(var i=0;i2&&arguments[2]!==undefined?arguments[2]:0;var r=arguments.length>3?arguments[3]:undefined;if(!Be(t)||t.__v_skip)return t;if(e&&e>0){if(n>=e)return t;n++;}if(r=r||/* @__PURE__ */new Set(),r.has(t))return t;if(r.add(t),Ye(t))Ki(t.value,e,n,r);else if(le(t))for(var i=0;i1){var h=!1;var _iterator5=_createForOfIteratorHelper(i),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var d=_step5.value;if(d.type!==Nt){if(process.env.NODE_ENV!=="production"&&h){q(" can only be used on a single element or component. Use for lists.");break;}if(s=d,h=!0,process.env.NODE_ENV==="production")break;}}}catch(err){_iterator5.e(err);}finally{_iterator5.f();}}var a=_e(t),o=a.mode;if(process.env.NODE_ENV!=="production"&&o&&o!=="in-out"&&o!=="out-in"&&o!=="default"&&q("invalid mode: ".concat(o)),r.isLeaving)return fc(s);var l=Pd(s);if(!l)return fc(s);var u=pf(l,a,r,n);gf(l,u);var f=n.subTree,c=f&&Pd(f);if(c&&c.type!==Nt&&!Xi(l,c)){var _h3=pf(c,a,r,n);if(gf(c,_h3),o==="out-in")return r.isLeaving=!0,_h3.afterLeave=function(){r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update());},fc(s);o==="in-out"&&l.type!==Nt&&(_h3.delayLeave=function(d,m,p){var g=Ey(r,c);g[String(c.key)]=c,d[si]=function(){m(),d[si]=void 0,delete u.delayedLeave;},u.delayedLeave=p;});}return s;};}},H1=q1;function Ey(t,e){var n=t.leavingVNodes;var r=n.get(e.type);return r||(r=/* @__PURE__ */Object.create(null),n.set(e.type,r)),r;}function pf(t,e,n,r){var i=e.appear,s=e.mode,_e$persisted=e.persisted,a=_e$persisted===void 0?!1:_e$persisted,o=e.onBeforeEnter,l=e.onEnter,u=e.onAfterEnter,f=e.onEnterCancelled,c=e.onBeforeLeave,h=e.onLeave,d=e.onAfterLeave,m=e.onLeaveCancelled,p=e.onBeforeAppear,g=e.onAppear,y=e.onAfterAppear,v=e.onAppearCancelled,b=String(t.key),E=Ey(n,t),O=function O(P,I){P&&Cn(P,r,9,I);},N=function N(P,I){var C=I[1];O(P,I),le(P)?P.every(function(R){return R.length<=1;})&&C():P.length<=1&&C();},M={mode:s,persisted:a,beforeEnter:function beforeEnter(P){var I=o;if(!n.isMounted)if(i)I=p||o;else return;P[si]&&P[si](!0);var C=E[b];C&&Xi(t,C)&&C.el[si]&&C.el[si](),O(I,[P]);},enter:function enter(P){var I=l,C=u,R=f;if(!n.isMounted)if(i)I=g||l,C=y||u,R=v||f;else return;var D=!1;var Q=P[Bo]=function(ve){D||(D=!0,ve?O(R,[P]):O(C,[P]),M.delayedLeave&&M.delayedLeave(),P[Bo]=void 0);};I?N(I,[P,Q]):Q();},leave:function leave(P,I){var C=String(t.key);if(P[Bo]&&P[Bo](!0),n.isUnmounting)return I();O(c,[P]);var R=!1;var D=P[si]=function(Q){R||(R=!0,I(),Q?O(m,[P]):O(d,[P]),P[si]=void 0,E[C]===t&&delete E[C]);};E[C]=t,h?N(h,[P,D]):D();},clone:function clone(P){return pf(P,e,n,r);}};return M;}function fc(t){if(mo(t))return t=br(t),t.children=null,t;}function Pd(t){if(!mo(t))return t;if(process.env.NODE_ENV!=="production"&&t.component)return t.component.subTree;var e=t.shapeFlag,n=t.children;if(n){if(e&16)return n[0];if(e&32&&me(n["default"]))return n["default"]();}}function gf(t,e){t.shapeFlag&6&&t.component?gf(t.component.subTree,e):t.shapeFlag&128?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e;}function Sy(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:!1;var n=arguments.length>2?arguments[2]:undefined;var r=[],i=0;for(var s=0;s1)for(var _s2=0;_s22&&arguments[2]!==undefined?arguments[2]:St;var r=t.__wdc||(t.__wdc=function(){var i=n;for(;i;){if(i.isDeactivated)return;i=i.parent;}return t();});if(ju(e,r,n),n){var i=n.parent;for(;i&&i.parent;)mo(i.parent.vnode)&&X1(r,e,n,i),i=i.parent;}}function X1(t,e,n,r){var i=ju(e,t,r,!0);Li(function(){ah(r[e],i);},n);}function ju(t,e){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:St;var r=arguments.length>3&&arguments[3]!==undefined?arguments[3]:!1;if(n){var i=n[t]||(n[t]=[]),s=e.__weh||(e.__weh=function(){if(n.isUnmounted)return;Hr();for(var _len7=arguments.length,a=new Array(_len7),_key7=0;_key7<_len7;_key7++){a[_key7]=arguments[_key7];}var o=yo(n),l=Cn(e,n,t,a);return o(),zr(),l;});return r?i.unshift(s):i.push(s),s;}else if(process.env.NODE_ENV!=="production"){var _i4=Hi(ph[t].replace(/ hook$/,""));q("".concat(_i4," is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement."));}}var Yr=function Yr(t){return function(e){var n=arguments.length>1&&arguments[1]!==undefined?arguments[1]:St;return(!Gu||t==="sp")&&ju(t,function(){return e.apply(void 0,arguments);},n);};},K1=Yr("bm"),_n=Yr("m"),Z1=Yr("bu"),J1=Yr("u"),xy=Yr("bum"),Li=Yr("um"),Q1=Yr("sp"),eE=Yr("rtg"),tE=Yr("rtc");function nE(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:St;ju("ec",t,e);}function kn(t,e,n,r){var i;var s=n&&n[r];if(le(t)||rt(t)){i=new Array(t.length);for(var a=0,o=t.length;a2&&arguments[2]!==undefined?arguments[2]:{};var r=arguments.length>3?arguments[3]:undefined;var i=arguments.length>4?arguments[4]:undefined;if(ht.isCE||ht.parent&&Aa(ht.parent)&&ht.parent.isCE)return e!=="default"&&(n.name=e),ie("slot",n,r&&r());var s=t[e];process.env.NODE_ENV!=="production"&&s&&s.length>1&&(q("SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template."),s=function s(){return[];}),s&&s._c&&(s._d=!1),k();var a=s&&My(s(n)),o=Ue(Ge,{key:n.key||a&&a.key||"_".concat(e)},a||(r?r():[]),a&&t._===1?64:-2);return!i&&o.scopeId&&(o.slotScopeIds=[o.scopeId+"-s"]),s&&s._c&&(s._d=!0),o;}function My(t){return t.some(function(e){return Zs(e)?!(e.type===Nt||e.type===Ge&&!My(e.children)):!0;})?t:null;}var yf=function yf(t){return t?zy(t)?Uu(t)||t.proxy:yf(t.parent):null;},rs=/* @__PURE__ */Qe(/* @__PURE__ */Object.create(null),{$:function $(t){return t;},$el:function $el(t){return t.vnode.el;},$data:function $data(t){return t.data;},$props:function $props(t){return process.env.NODE_ENV!=="production"?$r(t.props):t.props;},$attrs:function $attrs(t){return process.env.NODE_ENV!=="production"?$r(t.attrs):t.attrs;},$slots:function $slots(t){return process.env.NODE_ENV!=="production"?$r(t.slots):t.slots;},$refs:function $refs(t){return process.env.NODE_ENV!=="production"?$r(t.refs):t.refs;},$parent:function $parent(t){return yf(t.parent);},$root:function $root(t){return yf(t.root);},$emit:function $emit(t){return t.emit;},$options:function $options(t){return xh(t);},$forceUpdate:function $forceUpdate(t){return t.f||(t.f=function(){t.effect.dirty=!0,Fu(t.update);});},$nextTick:function $nextTick(t){return t.n||(t.n=Wl.bind(t.proxy));},$watch:function $watch(t){return B1.bind(t);}}),wh=function wh(t){return t==="_"||t==="$";},hc=function hc(t,e){return t!==Ke&&!t.__isScriptSetup&&Ae(t,e);},Ty={get:function get(_ref10,e){var t=_ref10._;if(e==="__v_skip")return!0;var n=t.ctx,r=t.setupState,i=t.data,s=t.props,a=t.accessCache,o=t.type,l=t.appContext;if(process.env.NODE_ENV!=="production"&&e==="__isVue")return!0;var u;if(e[0]!=="$"){var d=a[e];if(d!==void 0)switch(d){case 1:return r[e];case 2:return i[e];case 4:return n[e];case 3:return s[e];}else{if(hc(r,e))return a[e]=1,r[e];if(i!==Ke&&Ae(i,e))return a[e]=2,i[e];if((u=t.propsOptions[0])&&Ae(u,e))return a[e]=3,s[e];if(n!==Ke&&Ae(n,e))return a[e]=4,n[e];vf&&(a[e]=0);}}var f=rs[e];var c,h;if(f)return e==="$attrs"?(It(t.attrs,"get",""),process.env.NODE_ENV!=="production"&&Hl()):process.env.NODE_ENV!=="production"&&e==="$slots"&&It(t,"get",e),f(t);if((c=o.__cssModules)&&(c=c[e]))return c;if(n!==Ke&&Ae(n,e))return a[e]=4,n[e];if(h=l.config.globalProperties,Ae(h,e))return h[e];process.env.NODE_ENV!=="production"&&ht&&(!rt(e)||e.indexOf("__v")!==0)&&(i!==Ke&&wh(e[0])&&Ae(i,e)?q("Property ".concat(JSON.stringify(e)," must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.")):t===ht&&q("Property ".concat(JSON.stringify(e)," was accessed during render but is not defined on instance.")));},set:function set(_ref11,e,n){var t=_ref11._;var r=t.data,i=t.setupState,s=t.ctx;return hc(i,e)?(i[e]=n,!0):process.env.NODE_ENV!=="production"&&i.__isScriptSetup&&Ae(i,e)?(q("Cannot mutate diff --git a/src/composables/background-layer/background-layer.composable.ts b/src/composables/background-layer/background-layer.composable.ts index cf6b2b39..a25eaad2 100644 --- a/src/composables/background-layer/background-layer.composable.ts +++ b/src/composables/background-layer/background-layer.composable.ts @@ -13,6 +13,7 @@ import { BgLayerDefaultsType, } from '@/composables/background-layer/background-layer.model' import useThemes from '@/composables/themes/themes.composable' +import { LayerTypeValue } from '../themes/themes.model' export default function useBackgroundLayer() { const appStore = useAppStore() @@ -42,15 +43,19 @@ export default function useBackgroundLayer() { function setMapBackground(bgLayer: Layer | null) { if (bgLayer) { - if (bgLayer.type === 'WMTS' || bgLayer.type === 'BG WMTS') { - bgLayer.type = 'BG WMTS' - } else if (bgLayer.type === 'BG MVT') { + if ( + bgLayer.type === LayerTypeValue.WMTS || + bgLayer.type === LayerTypeValue.BG_WMTS + ) { + bgLayer.type = 'BG WMTS' // <= ???? + } else if (bgLayer.type === LayerTypeValue.BG_MVT) { console.log(`passed through MVT layer ${bgLayer.name}`) } else { throw new Error( `Only WMTS and MVT BG layers are currently implemented (not ${bgLayer.type} for ${bgLayer.name})` ) } + layers.handleExclusionLayers(bgLayer) mapStore.setBgLayer(layers.initLayer(bgLayer)) } else { diff --git a/src/composables/map/ol.synchronizer.ts b/src/composables/map/ol.synchronizer.ts index 6d8745f2..67533aff 100644 --- a/src/composables/map/ol.synchronizer.ts +++ b/src/composables/map/ol.synchronizer.ts @@ -89,11 +89,11 @@ export class OlSynchronizer { watch(appliedStyle, (style: StyleSpecification) => { if (styleStore.bgStyle === null && !styleStore.isExpertStyleActive) { styleService - .unregisterStyle(styleStore.styleSerial, styleStore.registerUrls) + .unregisterStyle(styleStore.styleSerial) .then((styleStore.styleSerial = null)) } else { styleService - .registerStyle(style, styleStore.styleSerial, styleStore.registerUrls) + .registerStyle(style, styleStore.styleSerial) .then(serial => { styleStore.styleSerial = serial const id = mapStore?.bgLayer?.id diff --git a/src/composables/mvt-styles/README.md b/src/composables/mvt-styles/README.md new file mode 100644 index 00000000..22e18de9 --- /dev/null +++ b/src/composables/mvt-styles/README.md @@ -0,0 +1,118 @@ +## Styling Vector Tiles + +## Introduction + +In the Luxembourg geoportal, map background styles can be customized by the user through the three components of the `style-selector`: + +- one component for simple mode, +- one for medium mode, +- and a final one for expert mode + +The styles modified by the user are saved or reloaded via `/getvtstyle`, `/uploadvtstyle`, `/deletevtstyle` and `vectortilesurl` requests. + +⚠️ Users styles are stored using file system on the luxembourg geoportal server https://map.geoportail.lu into a shared directory `VT_DIR`. The tile server https://vectortiles.geoportail.lu is able to retrieve styling info from this shared directory. + +This processing is done on the backend side, see legacy v3 code for more info: +🔗 [Geoportail-Luxembourg/geoportailv3](https://github.com/Geoportail-Luxembourg/geoportailv3/blob/18ab23ff9cf1ac7fce4fc6a19cae71f1b94e0715/geoportal/geoportailv3_geoportal/views/upload.py#L18) + +⚠️ The https://vectortiles.geoportail.lu is mandatory to make the print and the 3D map work because both functionalities need raster images. + +⚠️ For dev purposes, we will be using https://migration.geoportail.lu and https://vectortiles-staging.geoportail.lu plateform instead. + +## 💡 How it works + +### Default styles `style.json` + +First, default styles are loaded for each vector background layers (currently, there are 3 background layers available), eg: + +- https://vectortiles.geoportail.lu/styles/roadmap/style.json +- https://vectortiles.geoportail.lu/styles/topomap/style.json +- https://vectortiles.geoportail.lu/styles/topomap_gray/style.json + +### User' styles + +- `/uploadvtstyle`: each time the user changes the vector tile style, the frontend sends the new style to the server. The new style is saved and a **new id is created and associated to this new style**. +- `/getvtstyle`: given a style id, get the style content from the server. +- `/deletevtstyle`: remove the associated style content from the server. + +## 🔧 Configure styles urls + +`/getvtstyle`, `/uploadvtstyle`, `/deletevtstyle` requests can be configured through `.env` (or `.env-staging`) variables: `VITE_MVTSTYLES_PATH_GET`, `VITE_MVTSTYLES_PATH_UPLOAD`, `VITE_MVTSTYLES_PATH_DELETE`. See below for details about .env configuration. + +It is also possible to override theses values by settings new urls using `useMvtStyles().setRegisterUrl_v3()`. This function is meant to be used by the legacy v3 version of Luxembourg geoportal. + +```js +// MainController.js +// Override urls on legacy v3 side: +const mvtStyles = useMvtStyles() +mvtStyles.setRegisterUrl_v3({ + get: 'https://migration.geoportail.lu/getvtstyle', + upload: 'https://migration.geoportail.lu/uploadvtstyle', + delete: 'https://migration.geoportail.lu/deletevtstyle', + vectortiles: 'https://vectortiles-staging.geoportail.lu', +}) +``` + +### Save styles on local dev server + +Style files will be saved on local dev server (v3 in docker environment). + +```sh +# Urls for vectortiles +VITE_VECTORTILES_URL="https://vectortiles-staging.geoportail.lu" + +# Paths for MVT styles +VITE_MVTSTYLES_PATH_GET="https://localhost:8080/getvtstyle" +VITE_MVTSTYLES_PATH_UPLOAD="https://localhost:8080//uploadvtstyle" +VITE_MVTSTYLES_PATH_DELETE="https://localhost:8080/deletevtstyle" +``` + +same as using relative urls: + +```sh +# Urls for vectortiles +VITE_VECTORTILES_URL="https://vectortiles-staging.geoportail.lu" # ⚠️ NO VECTORTILES SERVER ON LOCAL DEV + +# Paths for MVT styles +VITE_MVTSTYLES_PATH_GET="/getvtstyle" +VITE_MVTSTYLES_PATH_UPLOAD="/uploadvtstyle" +VITE_MVTSTYLES_PATH_DELETE="/deletevtstyle" +``` + +NB. Using relative urls is possible because proxy urls are defined in `vite.config.ts`. + +⚠️ There is no vectortiles server providing default `style.json` nor raster images on local dev, this is why you should always use `VITE_VECTORTILES_URL="https://vectortiles-staging.geoportail.lu"`. Raster images are used for 3D and printing. + +### Save styles on staging server + +```sh +# Urls for vectortiles +VITE_VECTORTILES_URL="https://vectortiles-staging.geoportail.lu" + +# Paths for MVT styles +VITE_MVTSTYLES_PATH_GET="https://migration.geoportail.lu/getvtstyle" +VITE_MVTSTYLES_PATH_UPLOAD="https://migration.geoportail.lu/uploadvtstyle" +VITE_MVTSTYLES_PATH_DELETE="https://migration.geoportail.lu/deletevtstyle" +``` + +### Save styles on production server + +```sh +# Urls for vectortiles +VITE_VECTORTILES_URL="https://vectortiles.geoportail.lu" + +# Paths for MVT styles +VITE_MVTSTYLES_PATH_GET="https://map.geoportail.lu/getvtstyle" +VITE_MVTSTYLES_PATH_UPLOAD="https://map.geoportail.lu/uploadvtstyle" +VITE_MVTSTYLES_PATH_DELETE="https://map.geoportail.lu/deletevtstyle" +``` + +### Relative urls + +You can also use relative urls if your environment allows it. + +```sh +VITE_MVTSTYLES_PATH_GET="/getvtstyle" +VITE_MVTSTYLES_PATH_UPLOAD="/uploadvtstyle" +VITE_MVTSTYLES_PATH_DELETE="/deletevtstyle" +``` diff --git a/src/composables/mvt-styles/mvt-styles.composable.ts b/src/composables/mvt-styles/mvt-styles.composable.ts index cce0e5c4..95c114b0 100644 --- a/src/composables/mvt-styles/mvt-styles.composable.ts +++ b/src/composables/mvt-styles/mvt-styles.composable.ts @@ -1,3 +1,4 @@ +import BaseLayer from 'ol/layer/Base' import { SimpleStyle, StyleItem, @@ -11,21 +12,67 @@ import { import { useStyleStore } from '@/stores/style.store' import type { Layer } from '@/stores/map.store.model' import { bgConfigFixture } from '@/__fixtures__/background.config.fixture' -import BaseLayer from 'ol/layer/Base' +import { urlStorage } from '@/services/state-persistor/storage/url-storage' +import { + SP_KEY_EMBEDDED_SERVER, + SP_KEY_EMBEDDED_SERVER_PROTOCOL, + SP_KEY_SERIAL, + SP_KEY_SERIAL_LAYERS, +} from '@/services/state-persistor/state-persistor.model' export default function useMvtStyles() { + // TODO: When v4 fully ready, remove setRegisterUrl_v3 and move below vars outside the function + let VECTORTILES_URL = import.meta.env.VITE_VECTORTILES_URL + let MVTSTYLES_PATH_GET = import.meta.env.VITE_MVTSTYLES_PATH_GET + let MVTSTYLES_PATH_UPLOAD = import.meta.env.VITE_MVTSTYLES_PATH_UPLOAD + let MVTSTYLES_PATH_DELETE = import.meta.env.VITE_MVTSTYLES_PATH_DELETE + + /** + * Use this function in v3 to configure MvtRegister's urls and vectortiles url. + * + * @param registeredUrls An object to set all urls (get, upload, delete, and vectortiles) + * @deprecated use env var instead (this function is meant to be removed when v4 is fully operational) + */ + function setRegisterUrl_v3(registeredUrls: { + get?: string + upload?: string + delete?: string + vectortiles?: string + }) { + if (registeredUrls.get) { + MVTSTYLES_PATH_GET = registeredUrls.get + } + + if (registeredUrls.upload) { + MVTSTYLES_PATH_UPLOAD = registeredUrls.upload + } + + if (registeredUrls.delete) { + MVTSTYLES_PATH_DELETE = registeredUrls.delete + } + + if (registeredUrls.vectortiles) { + VECTORTILES_URL = registeredUrls.vectortiles + } + + if (import.meta.env.MODE !== 'prod') { + console.warn( + 'Deprecated: useMvtStyles().setRegisterUrl_v3() is meant to be removed when v4 is fully operational' + ) + } + } + function getDefaultMapBoxStyleUrl(label: string | undefined) { - const searchParams = new URLSearchParams(document.location.search) - const server = searchParams.get('embeddedserver') - const proto = searchParams.get('embeddedserverprotocol') || 'http' + const server = urlStorage.getItem(SP_KEY_EMBEDDED_SERVER) + const proto = urlStorage.getItem(SP_KEY_EMBEDDED_SERVER_PROTOCOL) || 'http' const url = - (server ? `${proto}://${server}` : 'https://vectortiles.geoportail.lu') + + (server ? `${proto}://${server}` : VECTORTILES_URL) + `/styles/${label}/style.json` return url } function getDefaultMapBoxStyleXYZ(label: string | undefined) { - return `https://vectortiles.geoportail.lu/styles/${label}/{z}/{x}/{y}.png` + return `${VECTORTILES_URL}/styles/${label}/{z}/{x}/{y}.png` } function isValidSerial(serial: string) { @@ -34,11 +81,12 @@ export default function useMvtStyles() { return isValidUUIDv4Regex.test(serial) } - const styleStore = useStyleStore() function setCustomStyleSerial( bgLayer: Layer | undefined | null, serial: string ) { + const styleStore = useStyleStore() + if (bgLayer === null || bgLayer === undefined) return const newVectorSources: VectorSourceDict = new Map() styleStore.bgVectorSources.forEach((vectorSource, key) => { @@ -57,6 +105,7 @@ export default function useMvtStyles() { keyword: string, isAuthenticated: boolean = false ) { + // TODO: -CLEAN STYLE- xyz_custom not used?????? // let lsData = JSON.parse(window.localStorage.getItem(label)); const xyz_custom = '' // undefined; // if (!!lsData && lsData.serial) { @@ -75,14 +124,13 @@ export default function useMvtStyles() { style: defaultMapBoxStyle, } - const serial = new URLSearchParams(window.location.search).get('serial') - const serialLayer = new URLSearchParams(window.location.search).get( - 'serialLayer' - ) + const serial = urlStorage.getItem(SP_KEY_SERIAL) + const serialLayer = urlStorage.getItem(SP_KEY_SERIAL_LAYERS) + if (serial) { if (isValidSerial(serial)) { - console.log(serialLayer) - } + console.log(serialLayer) // TODO: -CLEAN STYLE- why console log? + } // TODO: -CLEAN STYLE- clean comments... // // if serial is number id, retrieve style form it // if (isValidSerial(serial)) { // // if label and serialLayer are equal, or fallback to roadmap layer if serialLayer is null @@ -219,24 +267,17 @@ export default function useMvtStyles() { return baseStyle } - function unregisterStyle( - styleId: String | null, - registerUrls: Map - ) { + function unregisterStyle(styleId: String | null) { if (styleId === null) { return Promise.resolve() } else { - const url = `${registerUrls.get('delete')}?id=${styleId}` + const url = `${MVTSTYLES_PATH_DELETE}?id=${styleId}` return fetch(url).catch(() => '') } } - function registerStyle( - style: StyleSpecification, - oldStyleId: String | null, - registerUrls: Map - ) { - return unregisterStyle(oldStyleId, registerUrls).then(() => { + function registerStyle(style: StyleSpecification, oldStyleId: String | null) { + return unregisterStyle(oldStyleId).then(() => { const formData = new FormData() const data = JSON.stringify(style) const blob = new Blob([data], { type: 'application/json' }) @@ -245,7 +286,7 @@ export default function useMvtStyles() { method: 'POST', body: formData, } - return fetch(registerUrls.get('upload') || '', options) + return fetch(MVTSTYLES_PATH_UPLOAD, options) .then(response => response.json()) .then(result => { return result.id @@ -270,26 +311,26 @@ export default function useMvtStyles() { } } + function getBgLayerDef( + bgLayer: Layer | undefined | null + ): BgLayerDef | undefined { + return bgConfigFixture().bg_layers.find(l => l.id == bgLayer?.id) + } + function getVectorId(bgLayer: Layer | undefined | null): string | undefined { - const bgLayerDef: BgLayerDef | undefined = bgConfigFixture().bg_layers.find( - l => l.id == bgLayer?.id - ) + const bgLayerDef = getBgLayerDef(bgLayer) return bgLayerDef?.vector_id } function isLayerStyleEditable(bgLayer: Layer | undefined | null): boolean { - const bgLayerDef: BgLayerDef | undefined = bgConfigFixture().bg_layers.find( - l => l.id == bgLayer?.id - ) + const bgLayerDef = getBgLayerDef(bgLayer) return bgLayerDef?.vector_id !== undefined } function getStyleCapabilitiesFromLayer( bgLayer: Layer | undefined | null ): StyleCapabilities { - const bgLayerDef: BgLayerDef | undefined = bgConfigFixture().bg_layers.find( - l => l.id == bgLayer?.id - ) + const bgLayerDef = getBgLayerDef(bgLayer) return { isEditable: bgLayerDef?.vector_id !== undefined, hasSimpleStyle: bgLayerDef?.simple_style_class !== undefined, @@ -312,6 +353,10 @@ export default function useMvtStyles() { } return { + MVTSTYLES_PATH_GET, + MVTSTYLES_PATH_UPLOAD, + MVTSTYLES_PATH_DELETE, + setRegisterUrl_v3, getDefaultMapBoxStyleUrl, getDefaultMapBoxStyleXYZ, setConfigForLayer, diff --git a/src/composables/themes/themes.model.ts b/src/composables/themes/themes.model.ts index 8836e170..d3ec1ca6 100644 --- a/src/composables/themes/themes.model.ts +++ b/src/composables/themes/themes.model.ts @@ -53,7 +53,16 @@ export type Metadata = Partial<{ hasRetina: boolean }> -export type LayerType = 'WMS' | 'WFS' | 'WMTS' | 'BG WMTS' | 'BG MVT' | '3D' +export enum LayerTypeValue { + WMS = 'WMS', + WFS = 'WFS', + WMTS = 'WMTS', + BG_WMTS = 'BG WMTS', + BG_MVT = 'BG MVT', + '3D' = '3D', +} + +export type LayerType = `${LayerTypeValue}` export interface ThemeNodeModel { id: number diff --git a/src/services/ol-layer/ol-layer-factory.service.ts b/src/services/ol-layer/ol-layer-factory.service.ts index c302dbb5..9f223d34 100644 --- a/src/services/ol-layer/ol-layer-factory.service.ts +++ b/src/services/ol-layer/ol-layer-factory.service.ts @@ -2,10 +2,20 @@ import useLayers from '@/composables/layers/layers.composable' import { VectorSourceDict } from '@/composables/mvt-styles/mvt-styles.model' import { Layer } from '@/stores/map.store.model' -import { OlLayer } from './ol-layer.model' +import { + OLLAYER_PROP_CURRENT_TIME, + OLLAYER_PROP_ID, + OLLAYER_PROP_LABEL, + OLLAYER_PROP_LAYER_NAME, + OLLAYER_PROP_METADATA, + OLLAYER_PROP_QUERYABLE_ID, + OLLAYER_PROP_TIME, + OlLayer, +} from './ol-layer.model' import olLayerWmsHelper from './ol-layer-wms.helper' import olLayerWmtsHelper from './ol-layer-wmts.helper' import olLayerVectorHelper from './ol-layer-vector.helper' +import { LayerTypeValue } from '@/composables/themes/themes.model' export class OlLayerFactoryService { createOlLayer(layer: Layer, vectorSources?: VectorSourceDict): OlLayer { @@ -19,11 +29,11 @@ export class OlLayerFactoryService { // If no vector layer has been created, add raster layer if (!olLayer) { switch (layer.type) { - case 'WMS': + case LayerTypeValue.WMS: olLayer = olLayerWmsHelper.createOlLayer(layer) break - case 'WMTS': - case 'BG WMTS': + case LayerTypeValue.WMTS: + case LayerTypeValue.BG_WMTS: olLayer = olLayerWmtsHelper.createOlLayer(layer) break default: @@ -31,13 +41,16 @@ export class OlLayerFactoryService { } } - olLayer.set('id', layer.id) - olLayer.set('label', layer.name) - olLayer.set('layer_name', layer.name) // for v3 compatibility (search) - olLayer.set('metadata', layer.metadata) // Used for setLayerTime in ol-layer-wmts.helper, maybe do it with layer.name comming from spec instead - olLayer.set('queryable_id', layer.id) - olLayer.set('current_time', useLayers().getLayerCurrentTime(layer)) // Legacy for v3 - olLayer.set('time', layer.time) + olLayer.set(OLLAYER_PROP_ID, layer.id) + olLayer.set(OLLAYER_PROP_LABEL, layer.name) + olLayer.set(OLLAYER_PROP_LAYER_NAME, layer.name) // for v3 compatibility (search) + olLayer.set(OLLAYER_PROP_METADATA, layer.metadata) // Used for setLayerTime in ol-layer-wmts.helper, maybe do it with layer.name comming from spec instead + olLayer.set(OLLAYER_PROP_QUERYABLE_ID, layer.id) + olLayer.set( + OLLAYER_PROP_CURRENT_TIME, + useLayers().getLayerCurrentTime(layer) + ) // Legacy for v3 + olLayer.set(OLLAYER_PROP_TIME, layer.time) olLayer.setOpacity(layer.opacity as number) return olLayer diff --git a/src/services/ol-layer/ol-layer-vector.helper.ts b/src/services/ol-layer/ol-layer-vector.helper.ts index c007b3b6..3612738f 100644 --- a/src/services/ol-layer/ol-layer-vector.helper.ts +++ b/src/services/ol-layer/ol-layer-vector.helper.ts @@ -2,16 +2,17 @@ import { VectorSourceDict } from '@/composables/mvt-styles/mvt-styles.model' import useMap from '@/composables/map/map.composable' import { Layer } from '@/stores/map.store.model' import { useStyleStore } from '@/stores/style.store' -import { OlLayer } from './ol-layer.model' +import { OLLAYER_PROP_DEFAULT_MAPBOX_STYLE, OlLayer } from './ol-layer.model' // For the time being, legacy mapbox is used instead of maplibre, but the naming "maplibre" is kept import MapLibreLayer from '@/lib/ol-mapbox-layer' +import useMvtStyles from '@/composables/mvt-styles/mvt-styles.composable' // TODO: find another name for this wrapper, maybe "MapCustomSDK"? Don't keep the names "MapBox" VS "MapLibre"... class OlLayerVectorHelper { createOlLayer( layer: Layer, - vectorSources: VectorSourceDict // TODO: this comes from a store, use direct access here? + vectorSources: VectorSourceDict // TODO: -CLEAN STYLE- this comes from a store, use direct access here? ): OlLayer | undefined { const mapService = useMap() const { id, metadata, name } = layer @@ -33,17 +34,23 @@ class OlLayerVectorHelper { metadata, }) const styleStore = useStyleStore() + const styleService = useMvtStyles() - if (olLayer?.getMapLibreMap().loaded()) { - styleStore.setBaseStyle(id, olLayer?.getMapLibreMap().getStyle()) + if (olLayer.getMapLibreMap().loaded()) { + styleStore.setBaseStyle(id, olLayer.getMapLibreMap().getStyle()) } else { new Promise(resolve => - olLayer?.getMapLibreMap().once('data', resolve) + olLayer.getMapLibreMap().once('data', resolve) ).then(() => - styleStore.setBaseStyle(id, olLayer?.getMapLibreMap().getStyle()) + styleStore.setBaseStyle(id, olLayer.getMapLibreMap().getStyle()) ) } + olLayer.set( + OLLAYER_PROP_DEFAULT_MAPBOX_STYLE, + styleService.getDefaultMapBoxStyleUrl(styleService.getVectorId(layer)) + ) // for v3 compatibility + return olLayer } } diff --git a/src/services/ol-layer/ol-layer.model.ts b/src/services/ol-layer/ol-layer.model.ts index a3fa29b4..25fc553a 100644 --- a/src/services/ol-layer/ol-layer.model.ts +++ b/src/services/ol-layer/ol-layer.model.ts @@ -6,3 +6,12 @@ import WMTS from 'ol/source/WMTS' import MapBoxLayer from '@/lib/ol-mapbox-layer' export type OlLayer = ImageLayer | TileLayer | MapBoxLayer + +export const OLLAYER_PROP_ID = 'id' +export const OLLAYER_PROP_LABEL = 'label' +export const OLLAYER_PROP_LAYER_NAME = 'layer_name' +export const OLLAYER_PROP_METADATA = 'metadata' +export const OLLAYER_PROP_QUERYABLE_ID = 'queryable_id' +export const OLLAYER_PROP_CURRENT_TIME = 'current_time' +export const OLLAYER_PROP_TIME = 'time' +export const OLLAYER_PROP_DEFAULT_MAPBOX_STYLE = 'defaultMapBoxStyle' diff --git a/src/services/state-persistor/state-persistor.model.ts b/src/services/state-persistor/state-persistor.model.ts index a4554ffa..5fa0fa62 100644 --- a/src/services/state-persistor/state-persistor.model.ts +++ b/src/services/state-persistor/state-persistor.model.ts @@ -1,13 +1,15 @@ import { UrlStorage } from './storage/url-storage' export const SP_KEY_IPV6 = 'ipv6' // TODO: +export const SP_KEY_ADDRESS = 'address' export const SP_KEY_APPLOGIN = 'applogin' // TODO: export const SP_KEY_LOCALFORAGE = 'localforage' // TODO: export const SP_KEY_DEBUG = 'debug' // TODO: +export const SP_KEY_EMBEDDED_SERVER = 'embeddedserver' +export const SP_KEY_EMBEDDED_SERVER_PROTOCOL = 'embeddedserverprotocol' export const SP_KEY_FID = 'fid' // TODO: export const SP_KEY_LANG = 'lang' export const SP_KEY_LAYERS_OPEN = 'layersOpen' -export const SP_KEY_ADDRESS = 'address' export const SP_KEY_VERSION = 'version' export const SP_KEY_MAPID = 'map_id' // TODO: export const SP_KEY_LAYERS = 'layers' @@ -20,6 +22,7 @@ export const SP_KEY_SRS = 'SRS' // TODO: export const SP_KEY_X = 'X' export const SP_KEY_Y = 'Y' export const SP_KEY_SERIAL = 'serial' +export const SP_KEY_SERIAL_LAYERS = 'serialLayer' export const SP_KEYS_STYLE = [ 'basemap_2015_global', 'topogr_global', diff --git a/src/stores/style.store.ts b/src/stores/style.store.ts index 56074f3b..e24f61f0 100644 --- a/src/stores/style.store.ts +++ b/src/stores/style.store.ts @@ -25,14 +25,8 @@ export const useStyleStore = defineStore( const styleSerial: ShallowRef = shallowRef(null) const appliedStyle: ShallowRef = shallowRef() - const registerUrls: ShallowRef> = shallowRef( - new Map([ - ['get', '/getvtstyle'], - ['upload', '/uploadvtstyle'], - ['delete', '/deletevtstyle'], - ]) - ) + // TODO: -CLEAN STYLE- put code below in a function eg. initBglayers(), plus move this init outside the store const promises: Promise<{ id: LayerId; config: IMvtConfig }>[] = [] bgConfigFixture().bg_layers.forEach(bgLayer => { if (bgLayer.vector_id) { @@ -53,10 +47,6 @@ export const useStyleStore = defineStore( bgVectorSources.value = vectorDict }) - function setRegisterUrl(key: string, url: string) { - registerUrls.value.set(key, url) - } - function setBgVectorSources(vectorDict: VectorSourceDict) { bgVectorSources.value = vectorDict } @@ -105,13 +95,11 @@ export const useStyleStore = defineStore( removeBaseStyle, setBaseStyle, setBgVectorSources, - setRegisterUrl, setSimpleStyle, setStyle, disableExpertStyle, enableExpertStyle, styleSerial, - registerUrls, } }, {} diff --git a/vite-dist.config.ts b/vite-dist.config.ts index aa87d084..8e283661 100644 --- a/vite-dist.config.ts +++ b/vite-dist.config.ts @@ -13,7 +13,7 @@ function removeDataTestAttrs(node: RootNode | TemplateChildNode) { } } -export default defineConfig((/*{ command, mode }*/) => { +export default defineConfig(({ mode }) => { const base: UserConfig = { plugins: [ vue({ @@ -54,6 +54,7 @@ export default defineConfig((/*{ command, mode }*/) => { }, }, }, + minify: mode === 'production', } return base