{"version":3,"file":"appointment-form.umd.cjs","sources":["../node_modules/v-click-outside/dist/v-click-outside.umd.js","../node_modules/vue-date-pick/dist/vueDatePick.js","../src/constants/calendar.js","../src/components/v-calendar.vue","../src/services/time-slot.js","../src/components/v-times.vue","../src/components/drop-down.vue","../src/components/SlotPicker/index.vue","../node_modules/@floating-ui/core/dist/floating-ui.core.esm.js","../node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js","../node_modules/@floating-ui/vue/node_modules/vue-demi/lib/index.mjs","../node_modules/@floating-ui/vue/dist/floating-ui.vue.esm.js","../node_modules/@vueuse/shared/node_modules/vue-demi/lib/index.mjs","../node_modules/@vueuse/shared/index.mjs","../node_modules/@vueuse/core/node_modules/vue-demi/lib/index.mjs","../node_modules/@vueuse/core/index.mjs","../src/components/ReasonSelect/index.vue","../src/components/Checkbox.vue","../node_modules/destr/dist/index.mjs","../node_modules/ufo/dist/index.mjs","../node_modules/ofetch/dist/shared/ofetch.5cb01515.mjs","../node_modules/ofetch/dist/index.mjs","../src/services/api.js","../src/index.vue","../src/lib.js"],"sourcesContent":["!function(e,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(e||self)[\"v-click-outside\"]=n()}(this,function(){var e=\"__v-click-outside\",n=\"undefined\"!=typeof window,t=\"undefined\"!=typeof navigator,r=n&&(\"ontouchstart\"in window||t&&navigator.msMaxTouchPoints>0)?[\"touchstart\"]:[\"click\"];function i(e){var n=e.event,t=e.handler;(0,e.middleware)(n)&&t(n)}function a(n,t){var a=function(e){var n=\"function\"==typeof e;if(!n&&\"object\"!=typeof e)throw new Error(\"v-click-outside: Binding value must be a function or an object\");return{handler:n?e:e.handler,middleware:e.middleware||function(e){return e},events:e.events||r,isActive:!(!1===e.isActive),detectIframe:!(!1===e.detectIframe),capture:!!e.capture}}(t.value),d=a.handler,o=a.middleware,c=a.detectIframe,u=a.capture;if(a.isActive){if(n[e]=a.events.map(function(e){return{event:e,srcTarget:document.documentElement,handler:function(e){return function(e){var n=e.el,t=e.event,r=e.handler,a=e.middleware,d=t.composedPath&&t.composedPath()||t.path;(d?d.indexOf(n)<0:!n.contains(t.target))&&i({event:t,handler:r,middleware:a})}({el:n,event:e,handler:d,middleware:o})},capture:u}}),c){var l={event:\"blur\",srcTarget:window,handler:function(e){return function(e){var n=e.el,t=e.event,r=e.handler,a=e.middleware;setTimeout(function(){var e=document.activeElement;e&&\"IFRAME\"===e.tagName&&!n.contains(e)&&i({event:t,handler:r,middleware:a})},0)}({el:n,event:e,handler:d,middleware:o})},capture:u};n[e]=[].concat(n[e],[l])}n[e].forEach(function(t){var r=t.event,i=t.srcTarget,a=t.handler;return setTimeout(function(){n[e]&&i.addEventListener(r,a,u)},0)})}}function d(n){(n[e]||[]).forEach(function(e){return e.srcTarget.removeEventListener(e.event,e.handler,e.capture)}),delete n[e]}var o=n?{bind:a,update:function(e,n){var t=n.value,r=n.oldValue;JSON.stringify(t)!==JSON.stringify(r)&&(d(e),a(e,{value:t}))},unbind:d}:{};return{install:function(e){e.directive(\"click-outside\",o)},directive:o}});\n//# sourceMappingURL=v-click-outside.umd.js.map\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.VueDatePick=e():t.VueDatePick=e()}(\"undefined\"!=typeof self?self:this,function(){return n=[function(t,e,n){},function(t,e,n){\"use strict\";n(0)},function(t,e,n){\"use strict\";n.r(e);function h(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null!=n){var i,r,o=[],s=!0,a=!1;try{for(n=n.call(t);!(s=(i=n.next()).done)&&(o.push(i.value),!e||o.length!==e);s=!0);}catch(t){a=!0,r=t}finally{try{s||null==n.return||n.return()}finally{if(a)throw r}}return o}}(t,e)||function(t,e){var n;if(t)return\"string\"==typeof t?i(t,e):\"Map\"===(n=\"Object\"===(n=Object.prototype.toString.call(t).slice(8,-1))&&t.constructor?t.constructor.name:n)||\"Set\"===n?Array.from(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(t,e):void 0}(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function r(t){return(r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}var f=/,|\\.|-| |:|\\/|\\\\/,v=/D+/,m=/M+/,y=/Y+/,g=/h+/i,b=/m+/,_=/s+/,o=/A/;function C(t,e){return void 0!==t?t.toString().length>e?t:new Array(e-t.toString().length+1).join(\"0\")+t:void 0}function D(t,e){return t.getDate()===e.getDate()&&t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()}function s(t,e){for(var n=[],i=t;i<=e;i++)n.push(i);return n}function a(t){t%=12;return 0==t?12:t}function u(t,e,n){return Math.min(Math.max(t,e),n)}var l={props:{value:{type:String,default:\"\"},format:{type:String,default:\"YYYY-MM-DD\"},displayFormat:{type:String},editable:{type:Boolean,default:!0},hasInputElement:{type:Boolean,default:!0},inputAttributes:{type:Object},selectableYearRange:{type:[Number,Object,Function],default:40},startPeriod:{type:Object},parseDate:{type:Function},formatDate:{type:Function},pickTime:{type:Boolean,default:!1},pickMinutes:{type:Boolean,default:!0},pickSeconds:{type:Boolean,default:!1},use12HourClock:{type:Boolean,default:!1},isDateDisabled:{type:Function,default:function(){return!1}},nextMonthCaption:{type:String,default:\"Next month\"},prevMonthCaption:{type:String,default:\"Previous month\"},setTimeCaption:{type:String,default:\"Set time:\"},mobileBreakpointWidth:{type:Number,default:500},weekdays:{type:Array,default:function(){return[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"]}},months:{type:Array,default:function(){return[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]}},startWeekOnSunday:{type:Boolean,default:!1}},data:function(){return{inputValue:this.valueToInputFormat(this.value),direction:void 0,positionClass:void 0,opened:!this.hasInputElement,currentPeriod:this.startPeriod||this.getPeriodFromValue(this.value,this.format)}},computed:{valueDate:function(){var t=this.value,e=this.format;return t?this.parseDateString(t,e):void 0},isReadOnly:function(){return!this.editable||this.inputAttributes&&this.inputAttributes.readonly},isValidValue:function(){var t=this.valueDate;return!this.value||Boolean(t)},currentPeriodDates:function(){var e=this,t=this.currentPeriod,n=t.year,i=t.month,r=[],o=new Date(n,i,1),s=new Date,t=o.getDay(),n=this.startWeekOnSunday?t:0===t?6:t-1;if(n)for(var a=n;0<a;a--){var u=new Date(o);u.setDate(-(a-1)),r.push({outOfRange:!0,date:u})}for(;o.getMonth()===i;)r.push({date:new Date(o)}),o.setDate(o.getDate()+1);t=r.length%7;if(0<t)for(var l=7-t,c=1;c<=l;c++){var d=new Date(o);d.setDate(c),r.push({outOfRange:!0,date:d})}r.forEach(function(t){t.disabled=e.isDateDisabled(t.date),t.today=D(t.date,s),t.dateKey=[t.date.getFullYear(),t.date.getMonth()+1,t.date.getDate()].join(\"-\"),t.selected=!!e.valueDate&&D(t.date,e.valueDate)});for(var p=r,h=7,f=[];p.length;)f.push(p.splice(0,h));return f},yearRange:function(){var t=this.currentPeriod.year,e=this.selectableYearRange,n=r(e),i=[];return\"number\"===n?i=s(t-e,t+e):\"object\"===n?i=s(e.from,e.to):\"function\"===n&&(i=e(this)),i.indexOf(t)<0&&(i.push(t),i=i.sort()),i},currentTime:function(){var t,e,n=this.valueDate;if(n)return{hours:t=n.getHours(),minutes:e=n.getMinutes(),seconds:n=n.getSeconds(),isPM:12<=t,hoursFormatted:(this.use12HourClock?a(t):t).toString(),minutesFormatted:C(e,2),secondsFormatted:C(n,2)}},directionClass:function(){return this.direction?\"vdp\".concat(this.direction,\"Direction\"):void 0},weekdaysSorted:function(){var t;return this.startWeekOnSunday?((t=this.weekdays.slice()).unshift(t.pop()),t):this.weekdays}},watch:{value:function(t){this.isValidValue&&(this.inputValue=this.valueToInputFormat(t),this.currentPeriod=this.getPeriodFromValue(t,this.format))},currentPeriod:function(t,e){var n=new Date(t.year,t.month).getTime(),e=new Date(e.year,e.month).getTime();this.direction=n!==e?e<n?\"Next\":\"Prev\":void 0,n!==e&&this.$emit(\"periodChange\",{year:t.year,month:t.month})}},beforeDestroy:function(){this.removeCloseEvents(),this.teardownPosition()},methods:{valueToInputFormat:function(t){return this.displayFormat&&this.formatDateToString(this.parseDateString(t,this.format),this.displayFormat)||t},getPeriodFromValue:function(t,e){t=this.parseDateString(t,e)||new Date;return{month:t.getMonth(),year:t.getFullYear()}},parseDateString:function(t,e){return t?this.parseDate?this.parseDate(t,e):this.parseSimpleDateString(t,e):void 0},formatDateToString:function(t,e){return t?this.formatDate?this.formatDate(t,e):this.formatSimpleDateToString(t,e):\"\"},parseSimpleDateString:function(t,e){for(var n,i,r,o,s,a,u=t.split(f),l=e.split(f),c=l.length,d=0;d<c;d++)l[d].match(v)?n=parseInt(u[d],10):l[d].match(m)?i=parseInt(u[d],10):l[d].match(y)?r=parseInt(u[d],10):l[d].match(g)?o=parseInt(u[d],10):l[d].match(b)?s=parseInt(u[d],10):l[d].match(_)&&(a=parseInt(u[d],10));var p,t=new Date([C(r,4),C(i,2),C(n,2)].join(\"-\"));if(!isNaN(t))return p=new Date(r,i-1,n),[[r,\"setFullYear\"],[o,\"setHours\"],[s,\"setMinutes\"],[a,\"setSeconds\"]].forEach(function(t){var t=h(t,2),e=t[0],t=t[1];void 0!==e&&p[t](e)}),p},formatSimpleDateToString:function(e,n){return n.replace(y,function(t){return Number(e.getFullYear().toString().slice(-t.length))}).replace(m,function(t){return C(e.getMonth()+1,t.length)}).replace(v,function(t){return C(e.getDate(),t.length)}).replace(g,function(t){return C(o.test(n)?a(e.getHours()):e.getHours(),t.length)}).replace(b,function(t){return C(e.getMinutes(),t.length)}).replace(_,function(t){return C(e.getSeconds(),t.length)}).replace(o,function(t){return 12<=e.getHours()?\"PM\":\"AM\"})},incrementMonth:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:1,e=new Date(this.currentPeriod.year,this.currentPeriod.month),e=new Date(e.getFullYear(),e.getMonth()+t);this.currentPeriod={month:e.getMonth(),year:e.getFullYear()}},processUserInput:function(t){var e=this.parseDateString(t,this.displayFormat||this.format);this.inputValue=t,this.$emit(\"input\",e?this.formatDateToString(e,this.format):t)},toggle:function(){return this.opened?this.close():this.open()},open:function(){this.opened||(this.opened=!0,this.currentPeriod=this.startPeriod||this.getPeriodFromValue(this.value,this.format),this.addCloseEvents(),this.setupPosition()),this.direction=void 0},close:function(){this.opened&&(this.opened=!1,this.direction=void 0,this.removeCloseEvents(),this.teardownPosition())},closeViaOverlay:function(t){this.hasInputElement&&t.target===this.$refs.outerWrap&&this.close()},addCloseEvents:function(){var e=this;this.closeEventListener||(this.closeEventListener=function(t){return e.inspectCloseEvent(t)},[\"click\",\"keyup\",\"focusin\"].forEach(function(t){return document.addEventListener(t,e.closeEventListener)}))},inspectCloseEvent:function(t){t.keyCode?27===t.keyCode&&this.close():t.target===this.$el||this.$el.contains(t.target)||this.close()},removeCloseEvents:function(){var e=this;this.closeEventListener&&([\"click\",\"keyup\",\"focusin\"].forEach(function(t){return document.removeEventListener(t,e.closeEventListener)}),delete this.closeEventListener)},setupPosition:function(){var t=this;this.positionEventListener||(this.positionEventListener=function(){return t.positionFloater()},window.addEventListener(\"resize\",this.positionEventListener)),this.positionFloater()},positionFloater:function(){function t(){var t=(e=n.$refs.outerWrap.getBoundingClientRect()).height,e=e.width;window.innerWidth>n.mobileBreakpointWidth?(i.top+i.height+t>window.innerHeight&&0<i.top-t&&(r=\"vdpPositionBottom\"),i.left+e>window.innerWidth&&(o=\"vdpPositionRight\"),n.positionClass=[\"vdpPositionReady\",r,o].join(\" \")):n.positionClass=\"vdpPositionFixed\"}var n=this,i=this.$el.getBoundingClientRect(),r=\"vdpPositionTop\",o=\"vdpPositionLeft\";this.$refs.outerWrap?t():this.$nextTick(t)},teardownPosition:function(){this.positionEventListener&&(this.positionClass=void 0,window.removeEventListener(\"resize\",this.positionEventListener),delete this.positionEventListener)},clear:function(){this.$emit(\"input\",\"\")},selectDateItem:function(t){t.disabled||(t=new Date(t.date),this.currentTime&&(t.setHours(this.currentTime.hours),t.setMinutes(this.currentTime.minutes),t.setSeconds(this.currentTime.seconds)),this.$emit(\"input\",this.formatDateToString(t,this.format)),this.hasInputElement&&!this.pickTime&&this.close())},set12HourClock:function(t){var e=new Date(this.valueDate),n=e.getHours();e.setHours(\"PM\"===t?n+12:n-12),this.$emit(\"input\",this.formatDateToString(e,this.format))},inputHours:function(t){var e,n=new Date(this.valueDate),i=n.getHours(),r=u(parseInt(t.target.value,10)||0,this.use12HourClock?1:0,this.use12HourClock?12:23);n.setHours(this.use12HourClock?(e=r,12<=i?12===e?e:e+12:12===e?0:e):r),t.target.value=C(r,1),this.$emit(\"input\",this.formatDateToString(n,this.format))},inputTime:function(t,e){var n=new Date(this.valueDate),i=u(parseInt(e.target.value)||0,0,59);e.target.value=C(i,2),n[t](i),this.$emit(\"input\",this.formatDateToString(n,this.format))},onTimeInputFocus:function(t){t.target.select&&t.target.select()}}};n(1);n=function(){var n=this,i=n._self._c;return i(\"div\",{staticClass:\"vdpComponent\",class:{vdpWithInput:n.hasInputElement}},[n._t(\"default\",function(){return[n.hasInputElement?i(\"input\",n._b({attrs:{type:\"text\",readonly:n.isReadOnly},domProps:{value:n.inputValue},on:{input:function(t){n.editable&&n.processUserInput(t.target.value)},focus:function(t){n.editable&&n.open()},click:function(t){n.editable&&n.open()}}},\"input\",n.inputAttributes,!1)):n._e(),n._v(\" \"),n.editable&&n.hasInputElement&&n.inputValue?i(\"button\",{staticClass:\"vdpClearInput\",attrs:{type:\"button\"},on:{click:n.clear}}):n._e()]},{open:n.open,close:n.close,toggle:n.toggle,inputValue:n.inputValue,processUserInput:n.processUserInput,valueToInputFormat:n.valueToInputFormat}),n._v(\" \"),i(\"transition\",{attrs:{name:\"vdp-toggle-calendar\"}},[n.opened?i(\"div\",{ref:\"outerWrap\",staticClass:\"vdpOuterWrap\",class:[n.positionClass,{vdpFloating:n.hasInputElement}],on:{click:n.closeViaOverlay}},[i(\"div\",{staticClass:\"vdpInnerWrap\"},[i(\"header\",{staticClass:\"vdpHeader\"},[i(\"button\",{staticClass:\"vdpArrow vdpArrowPrev\",attrs:{title:n.prevMonthCaption,type:\"button\"},on:{click:function(t){return n.incrementMonth(-1)}}},[n._v(n._s(n.prevMonthCaption))]),n._v(\" \"),i(\"button\",{staticClass:\"vdpArrow vdpArrowNext\",attrs:{type:\"button\",title:n.nextMonthCaption},on:{click:function(t){return n.incrementMonth(1)}}},[n._v(n._s(n.nextMonthCaption))]),n._v(\" \"),i(\"div\",{staticClass:\"vdpPeriodControls\"},[i(\"div\",{staticClass:\"vdpPeriodControl\"},[i(\"button\",{key:n.currentPeriod.month,class:n.directionClass,attrs:{type:\"button\"}},[n._v(\"\\n                                \"+n._s(n.months[n.currentPeriod.month])+\"\\n                            \")]),n._v(\" \"),i(\"select\",{directives:[{name:\"model\",rawName:\"v-model\",value:n.currentPeriod.month,expression:\"currentPeriod.month\"}],on:{change:function(t){var e=Array.prototype.filter.call(t.target.options,function(t){return t.selected}).map(function(t){return\"_value\"in t?t._value:t.value});n.$set(n.currentPeriod,\"month\",t.target.multiple?e:e[0])}}},n._l(n.months,function(t,e){return i(\"option\",{key:t,domProps:{value:e}},[n._v(\"\\n                                    \"+n._s(t)+\"\\n                                \")])}),0)]),n._v(\" \"),i(\"div\",{staticClass:\"vdpPeriodControl\"},[i(\"button\",{key:n.currentPeriod.year,class:n.directionClass,attrs:{type:\"button\"}},[n._v(\"\\n                                \"+n._s(n.currentPeriod.year)+\"\\n                            \")]),n._v(\" \"),i(\"select\",{directives:[{name:\"model\",rawName:\"v-model\",value:n.currentPeriod.year,expression:\"currentPeriod.year\"}],on:{change:function(t){var e=Array.prototype.filter.call(t.target.options,function(t){return t.selected}).map(function(t){return\"_value\"in t?t._value:t.value});n.$set(n.currentPeriod,\"year\",t.target.multiple?e:e[0])}}},n._l(n.yearRange,function(t){return i(\"option\",{key:t,domProps:{value:t}},[n._v(\"\\n                                    \"+n._s(t)+\"\\n                                \")])}),0)])])]),n._v(\" \"),i(\"table\",{staticClass:\"vdpTable\"},[i(\"thead\",[i(\"tr\",n._l(n.weekdaysSorted,function(t,e){return i(\"th\",{key:e,staticClass:\"vdpHeadCell\"},[i(\"span\",{staticClass:\"vdpHeadCellContent\"},[n._v(n._s(t))])])}),0)]),n._v(\" \"),i(\"tbody\",{key:n.currentPeriod.year+\"-\"+n.currentPeriod.month,class:n.directionClass},n._l(n.currentPeriodDates,function(t,e){return i(\"tr\",{key:e,staticClass:\"vdpRow\"},n._l(t,function(e){return i(\"td\",{key:e.dateKey,staticClass:\"vdpCell\",class:{selectable:n.editable&&!e.disabled,selected:e.selected,disabled:e.disabled,today:e.today,outOfRange:e.outOfRange},attrs:{\"data-id\":e.dateKey},on:{click:function(t){n.editable&&n.selectDateItem(e)}}},[n._t(\"cellContent\",function(){return[i(\"div\",{staticClass:\"vdpCellContent\"},[n._v(n._s(e.date.getDate()))])]},{item:e})],2)}),0)}),0)]),n._v(\" \"),n.pickTime&&n.currentTime?i(\"div\",{staticClass:\"vdpTimeControls\"},[i(\"span\",{staticClass:\"vdpTimeCaption\"},[n._v(n._s(n.setTimeCaption))]),n._v(\" \"),i(\"div\",{staticClass:\"vdpTimeUnit\"},[i(\"pre\",[i(\"span\",[n._v(n._s(n.currentTime.hoursFormatted))]),i(\"br\")]),n._v(\" \"),i(\"input\",{staticClass:\"vdpHoursInput\",attrs:{type:\"number\",pattern:\"\\\\d*\",disabled:!n.editable},domProps:{value:n.currentTime.hoursFormatted},on:{input:function(t){return t.preventDefault(),n.inputHours.apply(null,arguments)},focusin:n.onTimeInputFocus}})]),n._v(\" \"),n.pickMinutes?i(\"span\",{staticClass:\"vdpTimeSeparator\"},[n._v(\":\")]):n._e(),n._v(\" \"),n.pickMinutes?i(\"div\",{staticClass:\"vdpTimeUnit\"},[i(\"pre\",[i(\"span\",[n._v(n._s(n.currentTime.minutesFormatted))]),i(\"br\")]),n._v(\" \"),n.pickMinutes?i(\"input\",{staticClass:\"vdpMinutesInput\",attrs:{type:\"number\",pattern:\"\\\\d*\",disabled:!n.editable},domProps:{value:n.currentTime.minutesFormatted},on:{input:function(t){return n.inputTime(\"setMinutes\",t)},focusin:n.onTimeInputFocus}}):n._e()]):n._e(),n._v(\" \"),n.pickSeconds?i(\"span\",{staticClass:\"vdpTimeSeparator\"},[n._v(\":\")]):n._e(),n._v(\" \"),n.pickSeconds?i(\"div\",{staticClass:\"vdpTimeUnit\"},[i(\"pre\",[i(\"span\",[n._v(n._s(n.currentTime.secondsFormatted))]),i(\"br\")]),n._v(\" \"),n.pickSeconds?i(\"input\",{staticClass:\"vdpSecondsInput\",attrs:{type:\"number\",pattern:\"\\\\d*\",disabled:!n.editable},domProps:{value:n.currentTime.secondsFormatted},on:{input:function(t){return n.inputTime(\"setSeconds\",t)},focusin:n.onTimeInputFocus}}):n._e()]):n._e(),n._v(\" \"),n.use12HourClock?i(\"button\",{staticClass:\"vdp12HourToggleBtn\",attrs:{type:\"button\",disabled:!n.editable},on:{click:function(t){return n.set12HourClock(n.currentTime.isPM?\"AM\":\"PM\")}}},[n._v(\"\\n                        \"+n._s(n.currentTime.isPM?\"PM\":\"AM\")+\"\\n                    \")]):n._e()]):n._e()])]):n._e()])],2)},c=!(M=[]),S=p=d=null,w=\"function\"==typeof(l=l)?l.options:l,n&&(w.render=n,w.staticRenderFns=M,w._compiled=!0),c&&(w.functional=!0),p&&(w._scopeId=\"data-v-\"+p),S?(T=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),d&&d.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(S)},w._ssrRegister=T):d&&(T=P?function(){d.call(this,(w.functional?this.parent:this).$root.$options.shadowRoot)}:d),T&&(w.functional?(w._injectStyles=T,k=w.render,w.render=function(t,e){return T.call(e),k(t,e)}):(n=w.beforeCreate,w.beforeCreate=n?[].concat(n,T):[T]));var c,d,p,S,P,T,k,w,M={exports:l,options:w};e.default=M.exports}],i={},r.m=n,r.c=i,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,\"a\",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p=\"\",r(r.s=2).default;function r(t){var e;return(i[t]||(e=i[t]={i:t,l:!1,exports:{}},n[t].call(e.exports,e,e.exports,r),e.l=!0,e)).exports}var n,i});","export const WEEKS = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];\nexport const WEEKS_LONG = [\n  'Понедельник',\n  'Вторник',\n  'Среда',\n  'Четверг',\n  'Пятница',\n  'Суббота',\n  'Воскресенье'\n];\nexport const MONTHS = [\n  'Январь',\n  'Февраль',\n  'Март',\n  'Апрель',\n  'Май',\n  'Июнь',\n  'Июль',\n  'Август',\n  'Сентябрь',\n  'Октябрь',\n  'Ноябрь',\n  'Декабрь'\n];\nexport const AVAILABLE_TIMES = [\n  '10:00',\n  '10:30',\n  '11:00',\n  '11:30',\n  '12:00',\n  '12:30',\n  '13:00',\n  '13:30',\n  '14:00',\n  '14:30',\n  '15:00',\n  '15:30',\n  '16:00',\n  '16:30',\n  '17:00',\n  '17:30',\n  '18:00',\n  '18:30',\n  '19:00',\n  '19:30'\n];\n","<template>\n  <date-pick\n    v-model=\"innerDate\"\n    :is-date-disabled=\"checkDateIsUnavailable\"\n    :has-input-element=\"false\"\n    :weekdays=\"WEEKS\"\n    :months=\"MONTHS\"\n    :format=\"'DD.MM.YYYY'\"\n\n    @input=\"onInput\"\n  />\n</template>\n\n<script>\nimport DatePick from 'vue-date-pick';\nimport {\n  WEEKS,\n  WEEKS_LONG,\n  MONTHS,\n} from '@/src/constants/calendar';\n\nconst DATE = new Date();\n\nexport default {\n  name: 'VCalendar',\n\n  components: {\n    DatePick,\n  },\n\n  model: {\n    prop: 'date',\n    event: 'update:date',\n  },\n\n  props: {\n    date: {\n      type: [String, Date],\n      default: DATE.toLocaleDateString(),\n    },\n\n    timeSlotList: {\n      type: Object,\n      default: () => ({}),\n    },\n  },\n\n  data() {\n    return {\n      WEEKS,\n      MONTHS,\n      innerDate: this.date ? this.date.toLocaleDateString() : null,\n    };\n  },\n\n  computed: {\n    dateInstance() {\n      if (!this.date) {\n        return null;\n      }\n\n      return new Date(this.date.replace(/(\\d{2}).(\\d{2}).(\\d{4})/, '$2/$1/$3'));\n    },\n  },\n\n  watch: {\n    date(value) {\n      const date = value ? value.toLocaleDateString() : value;\n\n      if (+date === +this.innerDate) {\n        return;\n      }\n\n      this.$set(this, 'innerDate', date);\n    },\n  },\n\n  methods: {\n    checkDateIsUnavailable(date) {\n      if (!this.timeSlotList) {\n        return true;\n      }\n\n      const dateString = date.toLocaleDateString();\n      const availableSlots = this.timeSlotList[dateString];\n\n      return !availableSlots || [].every.call(availableSlots, (slot) => !slot.isFree || slot.checkIsArchived());\n    },\n\n    onInput(value) {\n      const date = new Date(value.replace(/(\\d{2}).(\\d{2}).(\\d{4})/, '$2/$1/$3'));\n\n      this.$emit('update:date', date);\n    },\n  },\n};\n</script>\n","import { WEEKS, WEEKS_LONG } from '@/src/constants/calendar';\n\nexport default class TimeSlot {\n  constructor(slotData) {\n    this.id = slotData.id;\n    this.datetime = new Date(slotData.datetime);\n    this.rawDateTime = slotData.datetime;\n    this.isFree = slotData.is_free;\n    this.notary = slotData.notary;\n  }\n\n  getTime() {\n    return this.datetime.toTimeString().substring(0, 5);\n  }\n\n  getDate() {\n    return this.datetime.toLocaleDateString();\n  }\n\n  setDate(datetime) {\n    this.datetime = new Date(datetime);\n  }\n\n  getDay() {\n    return this.datetime.toLocaleString('ru', {\n      month: 'long',\n      day: 'numeric',\n    });\n  }\n\n  getWeekDay() {\n    const weekDayIndex = this.dateTime.getDay();\n\n    return {\n      index: weekDayIndex,\n      short: WEEKS[weekDayIndex],\n      long: WEEKS_LONG[weekDayIndex],\n    };\n  }\n\n  checkIsArchived() {\n    const now = new Date();\n    const timeLeft = this.datetime - now;\n    return timeLeft < 0;\n  }\n}\n","<template>\n  <div class=\"time-phase\">\n    <button\n      class=\"time-phase__back-button back-button\"\n      type=\"button\"\n\n      @click=\"$emit('back')\"\n    >\n      <svg\n        class=\"back-button__glyph\"\n        width=\"7\"\n        height=\"12\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <use xlink:href=\"#glyph--angle-left\" />\n      </svg>\n      Назад к датам\n    </button>\n\n    <div class=\"time-phase__date\">\n      <span class=\"time-phase__date-label\">{{ date.toLocaleString('ru', { month: 'long', day: 'numeric' }) }}</span>\n      <button\n        type=\"button\"\n        class=\"time-phase__date-switch-button date-switch-button date-switch-button_prev\"\n        @click=\"$emit('change-date', -1)\"\n      >\n        <svg\n          class=\"date-switch-button__glyph\"\n          width=\"4\"\n          height=\"8\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <use xlink:href=\"#glyph--triangle-left\" />\n        </svg>\n      </button>\n      <button\n        type=\"button\"\n        class=\"time-phase__date-switch-button date-switch-button date-switch-button_next\"\n        @click=\"$emit('change-date', 1)\"\n      >\n        <svg\n          class=\"date-switch-button__glyph\"\n          width=\"4\"\n          height=\"8\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <use\n            xlink:href=\"#glyph--triangle-left\"\n            transform=\"rotate(180, 2, 4)\"\n          />\n        </svg>\n      </button>\n    </div>\n\n    <div\n      v-if=\"slotList && slotList.length\"\n      class=\"times\"\n    >\n      <label\n        v-for=\"timeslot in slotList\"\n        :key=\"timeslot.id\"\n        class=\"times__slot slot\"\n      >\n        <input\n          v-model=\"slotId\"\n          type=\"radio\"\n          name=\"appointment_time\"\n          :value=\"timeslot.id\"\n          class=\"slot__radio\"\n          :disabled=\"!timeslot.isFree || timeslot.checkIsArchived()\"\n        >\n        <span class=\"slot__caption\">{{ timeslot.getTime() }}</span>\n      </label>\n    </div>\n    <p\n      v-else\n      class=\"no-times\"\n    >\n      К сожалению, нет доступного для записи времени.\n    </p>\n  </div>\n</template>\n\n<script>\nimport TimeSlot from '@/src/services/time-slot';\n\nexport default {\n  name: 'VTimes',\n\n  props: {\n    date: {\n      type: Date,\n      required: true,\n    },\n\n    timeSlotList: {\n      type: Object,\n      default: () => ({}),\n    },\n\n    timeSlot: {\n      type: TimeSlot,\n      default: null,\n    },\n  },\n\n  data() {\n    return {\n      innerTimeSlot: this.timeSlot,\n      slotId: this.timeSlot ? this.timeSlot.id : null,\n    };\n  },\n\n  computed: {\n    slotList() {\n      const key = this.date.toLocaleDateString();\n\n      if (!this.timeSlotList || !this.timeSlotList[key]) {\n        return [];\n      }\n\n      return this.timeSlotList[key];\n    },\n  },\n\n  watch: {\n    timeSlot(value) {\n      if (this.innerTimeSlot && this.innerTimeSlot.id === value.id) {\n        return;\n      }\n\n      this.$set(this, 'innerTimeSlot', value);\n    },\n\n    innerTimeSlot(value) {\n      if (this.timeSlot && this.timeSlot.id === value.id) {\n        return;\n      }\n\n      this.$emit('update:time-slot', value);\n    },\n\n    slotId(value) {\n      const timeSlot = this.slotList.find((timeSlot) => timeSlot.id === value);\n      this.$set(this, 'innerTimeSlot', timeSlot);\n    },\n  },\n};\n</script>\n\n<style lang=\"sass\" scoped>\n@use 'sass:math'\n\n.time-phase__back-button,\n.time-phase__date-switch-button\n  @include clear-button\n\n.back-button\n  display: inline-flex\n  align-items: center\n  color: $blue\n  height: 2rem\n  margin-bottom: 1.125rem\n\n.back-button__glyph\n  display: inline-block\n  width: (math.div(7, 16) * 1rem)\n  height: (math.div(12, 16) * 1rem)\n  margin: auto (math.div(14, 16) * 1rem) auto (math.div(3, 16) * 1rem)\n\n.time-phase__date\n  display: flex\n  height: 2rem\n  margin-bottom: 1.125rem\n  align-items: center\n  margin-right: math.div(10, 16) * 1rem\n  width: calc(100% + #{math.div(10, 16) * 1rem})\n\n.time-phase__date-label\n  margin-right: auto\n\n.date-switch-button\n  display: inline-flex\n  align-items: center\n  justify-content: center\n  width: (math.div(24, 16) * 1rem)\n  height: 100%\n\n.times\n  display: flex\n  flex-wrap: wrap\n  color: $gray-dark\n\n.slot\n  display: block\n  width: calc((100% - #{$gap * ($times-per-row - 1)}) / #{$times-per-row})\n  margin: math.div($gap, 2)\n\n  &:nth-child(#{$times-per-row}n)\n    margin-right: 0\n\n  &:nth-child(#{$times-per-row}n + 1)\n    margin-left: 0\n\n.slot__radio\n  display: none\n\n.slot__caption\n  display: flex\n  align-items: center\n  justify-content: center\n  border: 1px solid $blue\n  box-sizing: border-box\n  height: $slot-height\n  cursor: pointer\n  border-radius: 3px\n  user-select: none\n\n  .slot__radio:disabled ~ &,\n  .slot__radio:disabled ~ &:hover\n    color: $gray-border\n    cursor: default\n    border: none\n    background: none\n\n  .slot__radio:checked ~ &,\n  &:hover\n    color: $white\n    background-color: $blue\n\n.no-times\n  margin: 2.5rem auto\n  text-align: center\n  color: $gray-border\n</style>\n","<template>\n  <div class=\"drop-down\">\n    <v-calendar\n      v-if=\"phase === 'date'\"\n      :date=\"innerDate\"\n      :time-slot-list=\"timeSlotList\"\n      @update:date=\"onDateSelected\"\n    />\n\n    <v-times\n      v-if=\"phase === 'time'\"\n      :date=\"innerDate\"\n      :time-slot-list=\"timeSlotList\"\n      :time-slot.sync=\"innerTimeSlot\"\n\n      @back=\"phase = 'date'\"\n      @change-date=\"changeDate\"\n    />\n  </div>\n</template>\n\n<script>\nimport VCalendar from '@/src/components/v-calendar.vue';\nimport VTimes from '@/src/components/v-times.vue';\nimport TimeSlot from '@/src/services/time-slot';\n\nexport default {\n  name: 'DropDown',\n  components: {\n    VCalendar,\n    VTimes,\n  },\n\n  props: {\n    timeSlotList: {\n      type: Object,\n      defatult: () => ({}),\n    },\n\n    timeSlot: {\n      type: TimeSlot,\n      default: null,\n    },\n  },\n\n  data() {\n    return {\n      innerDate: null,\n      innerTimeSlot: this.timeSlot,\n      phase: this.time ? 'time' : 'date',\n    };\n  },\n\n  watch: {\n    timeSlot(value) {\n      if (this.innerTimeSlot && this.innerTimeSlot.id === value.id) {\n        return;\n      }\n\n      this.$set(this, 'innerTimeSlot', value);\n    },\n\n    // innerDate(value) {\n    //   if (value === this.date) {\n    //     return;\n    //   }\n    //   this.$emit('update:date', value);\n    // },\n\n    innerTimeSlot(value) {\n      if (this.timeSlot && this.timeSlot.id === value.id) {\n        return;\n      }\n      this.$emit('update:time-slot', value);\n    },\n  },\n\n  methods: {\n    onDateSelected(date) {\n      this.$set(this, 'innerDate', date);\n      this.phase = 'time';\n    },\n\n    changeDate(days = 0) {\n      const date = new Date(this.innerDate);\n      date.setDate(date.getDate() + days);\n      this.$set(this, 'innerDate', date);\n    },\n  },\n};\n</script>\n\n<style lang=\"sass\" scoped>\n.drop-down\n  background-color: $white\n  padding:  0 1.25rem 1.25rem\n</style>\n","<template>\n  <div\n    v-click-outside=\"onOutsideClick\"\n    class=\"slot-picker\"\n    :class=\"{\n      'slot-picker_active': isActive,\n    }\"\n  >\n    <!-- hidden inbput for a value -->\n    <input\n      type=\"text\"\n      v-bind=\"$attrs\"\n      hidden\n      :name=\"name\"\n      :value=\"value\"\n    >\n\n    <!-- should looks like input -->\n    <div\n      class=\"slot-picker__label label\"\n\n      :class=\"[\n        { 'label_active': isActive },\n      ]\"\n      tabindex=\"0\"\n      @focus=\"isActive = true\"\n    >\n      <span\n        class=\"label__span\"\n        :class=\"[\n          { 'label__span_placeholder': !value },\n        ]\"\n      >{{ value ? displayedValue : placeholder }}</span>\n      <svg\n        class=\"label__glyph\"\n        width=\"13\"\n        height=\"13\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <use xlink:href=\"#glyph--calendar\" />\n      </svg>\n    </div>\n\n    <keep-alive>\n      <drop-down\n        v-if=\"isActive\"\n        class=\"slot-picker__drop-down\"\n        :time-slot-list=\"timeSlotList\"\n        :time-slot.sync=\"timeSlot\"\n      />\n    </keep-alive>\n\n    <svg\n      class=\"slot-picker__svg-defs\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <defs>\n        <symbol\n          id=\"glyph--calendar\"\n          viewBox=\"0 0 13 13\"\n        >\n          <path\n            d=\"M12.5 12.5H0.5V2.5H12.5V12.5Z\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n          />\n          <path\n            d=\"M12.5 5.5H0.5V2.5H12.5V5.5Z\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n          />\n          <path\n            d=\"M3 2V0\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n          />\n          <path\n            d=\"M10 2V0\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n          />\n        </symbol>\n\n        <symbol\n          id=\"glyph--angle-left\"\n          viewBox=\"0 0 7 12\"\n        >\n          <path\n            d=\"M6 11L0.999999 6L6 1\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n          />\n        </symbol>\n\n        <svg\n          id=\"glyph--triangle-left\"\n          viewBox=\"0 0 4 8\"\n        >\n          <path\n            d=\"M2.99603e-07 3.89743L4 1.11464e-07L4 8L2.99603e-07 3.89743Z\"\n            fill=\"currentColor\"\n          />\n        </svg>\n      </defs>\n    </svg>\n  </div>\n</template>\n\n<script>\nimport vClickOutside from 'v-click-outside';\nimport DropDown from '@/src/components/drop-down.vue';\nimport TimeSlot from '@/src/services/time-slot';\n\nexport default {\n  name: 'SlotPicker',\n\n  directives: {\n    clickOutside: vClickOutside.directive,\n  },\n\n  components: {\n    DropDown,\n  },\n\n\n  model: {\n    prop: 'model',\n    event: 'update:model',\n  },\n\n  props: {\n    placeholder: {\n      type: String,\n      default: 'Выберите время',\n    },\n\n    notaryId: {\n      type: Number,\n      default: 0,\n    },\n\n    name: {\n      type: String,\n      default: 'timeslot',\n    },\n\n    onChange: {\n      type: Function,\n      default: null,\n    },\n\n    availableDates: Array,\n\n  },\n\n  data() {\n    return {\n      isActive: false,\n      timeSlot: null,\n      // timeSlotList: {},\n    };\n  },\n\n  computed: {\n    value() {\n      if (!this.timeSlot) {\n        return null;\n      }\n      return this.timeSlot.rawDateTime;\n    },\n\n    displayedValue() {\n      if (!this.timeSlot) {\n        return null;\n      }\n\n      return this.timeSlot.datetime.toLocaleString('ru', {\n        month: 'long',\n        day: 'numeric',\n        hour: 'numeric',\n        minute: 'numeric',\n      });\n    },\n\n    timeSlotList() {\n      if (!this.availableDates) {\n        return null;\n      }\n\n      return this.adaptTimeSlots(this.availableDates);\n    }\n  },\n\n  watch: {\n    timeSlot(value) {\n      this.$emit('update:model', value);\n\n      if (value) {\n        this.isActive = false;\n      }\n    },\n  },\n\n  methods: {\n    onOutsideClick() {\n      this.isActive = false;\n    },\n\n    adaptTimeSlots(availableDates) {\n      const timeSlotList = availableDates.reduce((timeSlotList, slot) => {\n        const timeSlot = new TimeSlot(slot);\n        const date = timeSlot.getDate();\n\n        if (timeSlotList[date]) {\n          timeSlotList[date].push(timeSlot);\n        } else {\n          timeSlotList[date] = [timeSlot];\n        }\n\n        return timeSlotList;\n      }, {/* timeSlotList == new object */});\n\n      return timeSlotList;\n    },\n  },\n};\n</script>\n\n<style lang=\"sass\" scoped>\n@use 'sass:math'\n// wrapper\n.slot-picker\n  position: relative\n  z-index: 0\n  box-sizing: border-box\n\n.slot-picker_active\n  z-index: 2\n\n// caption / placeholder\n.label\n  display: flex\n  box-sizing: border-box\n  height: 3.75rem\n  border: 1px solid $gray-border\n  border-radius: 0.3125rem\n  padding: 0 1.25rem\n  font-size: 1.125rem\n  align-items: center\n\n  &:focus\n    border-color: $gray-dark\n\n.label_active\n  border-color: $gray-dark\n  border-bottom-color: transparent\n  border-bottom-left-radius: 0\n  border-bottom-right-radius: 0\n\n.label__span\n  //\n.label__span_placeholder\n  color: $gray-dark\n\n.label__glyph\n  position: absolute\n  display: block\n  width:  math.div(13, 16) * 1rem\n  height:  math.div(13, 16) * 1rem\n  right: 1rem\n\n.slot-picker__drop-down\n  position: absolute\n  z-index: 1\n  top: calc(100% - 2px)\n  left: 0\n  right: 0\n  border: 1px solid $gray-dark\n  border-radius: 0.3125rem\n  border-top-left-radius: 0\n  border-top-right-radius: 0\n  border-top-color: transparent\n  transform: translateZ(0)\n  // width: 100%\n\n.slot-picker__svg-defs\n  display: none\n</style>\n","function getAlignment(placement) {\n  return placement.split('-')[1];\n}\n\nfunction getLengthFromAxis(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\n\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\n\nfunction getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'x' : 'y';\n}\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const mainAxis = getMainAxisFromPlacement(placement);\n  const length = getLengthFromAxis(mainAxis);\n  const commonAlign = reference[length] / 2 - floating[length] / 2;\n  const side = getSide(placement);\n  const isVertical = mainAxis === 'x';\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[mainAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[mainAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain positioning strategy.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  if (process.env.NODE_ENV !== \"production\") {\n    if (platform == null) {\n      console.error(['Floating UI: `platform` property was not passed to config. If you', 'want to use Floating UI on the web, install @floating-ui/dom', 'instead of the /core package. Otherwise, you can create your own', '`platform`: https://floating-ui.com/docs/platform'].join(' '));\n    }\n    if (validMiddleware.filter(_ref => {\n      let {\n        name\n      } = _ref;\n      return name === 'autoPlacement' || name === 'flip';\n    }).length > 1) {\n      throw new Error(['Floating UI: duplicate `flip` and/or `autoPlacement` middleware', 'detected. This will lead to an infinite loop. Ensure only one of', 'either has been passed to the `middleware` array.'].join(' '));\n    }\n    if (!reference || !floating) {\n      console.error(['Floating UI: The reference and/or floating element was not defined', 'when `computePosition()` was called. Ensure that both elements have', 'been created and can be measured.'].join(' '));\n    }\n  }\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (process.env.NODE_ENV !== \"production\") {\n      if (resetCount > 50) {\n        console.warn(['Floating UI: The middleware lifecycle appears to be running in an', 'infinite loop. This is usually caused by a `reset` continually', 'being returned without a break condition.'].join(' '));\n      }\n    }\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n      continue;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\n\nfunction getSideObjectFromPadding(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\n\nfunction rectToClientRect(rect) {\n  return {\n    ...rect,\n    top: rect.y,\n    left: rect.x,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(middlewareArguments, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = middlewareArguments;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = options;\n  const paddingObject = getSideObjectFromPadding(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    ...rects.floating,\n    x,\n    y\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  if (process.env.NODE_ENV !== \"production\") ;\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\nconst min = Math.min;\nconst max = Math.max;\n\nfunction within(min$1, value, max$1) {\n  return max(min$1, min(value, max$1));\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered\n * to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(middlewareArguments) {\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = options || {};\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform\n    } = middlewareArguments;\n    if (element == null) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.warn('Floating UI: No `element` was passed to the `arrow` middleware.');\n      }\n      return {};\n    }\n    const paddingObject = getSideObjectFromPadding(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getMainAxisFromPlacement(placement);\n    const length = getLengthFromAxis(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const minProp = axis === 'y' ? 'top' : 'left';\n    const maxProp = axis === 'y' ? 'bottom' : 'right';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    if (clientSize === 0) {\n      clientSize = rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min = paddingObject[minProp];\n    const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = within(min, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. This stops `shift()` from taking action, but can\n    // be worked around by calling it again after the `arrow()` if desired.\n    const shouldAddOffset = getAlignment(placement) != null && center != offset && rects.reference[length] / 2 - (center < min ? paddingObject[minProp] : paddingObject[maxProp]) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min ? min - center : max - center : 0;\n    return {\n      [axis]: coords[axis] - alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset\n      }\n    };\n  }\n});\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst allPlacements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-start\", side + \"-end\"), []);\n\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\n\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const mainAxis = getMainAxisFromPlacement(placement);\n  const length = getLengthFromAxis(mainAxis);\n  let mainAlignmentSide = mainAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return {\n    main: mainAlignmentSide,\n    cross: getOppositePlacement(mainAlignmentSide)\n  };\n}\n\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Automatically chooses the `placement` which has the most space available.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(middlewareArguments) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsSortedByLe;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = middlewareArguments;\n      const {\n        alignment,\n        allowedPlacements = allPlacements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = options;\n      const placements = alignment !== undefined || allowedPlacements === allPlacements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const {\n        main,\n        cross\n      } = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[main], overflow[cross]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByLeastOverflow = allOverflows.slice().sort((a, b) => a.overflows[0] - b.overflows[0]);\n      const placementThatFitsOnAllSides = (_placementsSortedByLe = placementsSortedByLeastOverflow.find(_ref => {\n        let {\n          overflows\n        } = _ref;\n        return overflows.every(overflow => overflow <= 0);\n      })) == null ? void 0 : _placementsSortedByLe.placement;\n      const resetPlacement = placementThatFitsOnAllSides || placementsSortedByLeastOverflow[0].placement;\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\n\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\n\n/**\n * Changes the placement of the floating element to one that will fit if the\n * initially specified `placement` does not.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(middlewareArguments) {\n      var _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = middlewareArguments;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = options;\n      const side = getSide(placement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const {\n          main,\n          cross\n        } = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[main], overflow[cross]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$find;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          // Try next placement and re-run the lifecycle.\n          return {\n            data: {\n              index: nextIndex,\n              overflows: overflowsData\n            },\n            reset: {\n              placement: nextPlacement\n            }\n          };\n        }\n\n        // First, try to use the one that fits on mainAxis side of overflow.\n        let resetPlacement = (_overflowsData$find = overflowsData.find(d => d.overflows[0] <= 0)) == null ? void 0 : _overflowsData$find.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$map$so;\n                const placement = (_overflowsData$map$so = overflowsData.map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(middlewareArguments) {\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = options;\n      const {\n        rects\n      } = middlewareArguments;\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(middlewareArguments, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(middlewareArguments, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(middlewareArguments) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = middlewareArguments;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = options;\n      const fallback = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n        rect: rects.reference,\n        offsetParent: await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating)),\n        strategy\n      }) : rects.reference);\n      const clientRects = (await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || [];\n      const paddingObject = getSideObjectFromPadding(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getMainAxisFromPlacement(placement) === 'x') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nasync function convertValueToCoords(middlewareArguments, value) {\n  const {\n    placement,\n    platform,\n    elements\n  } = middlewareArguments;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getMainAxisFromPlacement(placement) === 'x';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = typeof value === 'function' ? value(middlewareArguments) : value;\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: 0,\n    crossAxis: 0,\n    alignmentAxis: null,\n    ...rawValue\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Displaces the floating element from its reference element.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (value) {\n  if (value === void 0) {\n    value = 0;\n  }\n  return {\n    name: 'offset',\n    options: value,\n    async fn(middlewareArguments) {\n      const {\n        x,\n        y\n      } = middlewareArguments;\n      const diffCoords = await convertValueToCoords(middlewareArguments, value);\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: diffCoords\n      };\n    }\n  };\n};\n\nfunction getCrossAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\n\n/**\n * Shifts the floating element in order to keep it in view when it will overflow\n * a clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(middlewareArguments) {\n      const {\n        x,\n        y,\n        placement\n      } = middlewareArguments;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = options;\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n      const mainAxis = getMainAxisFromPlacement(getSide(placement));\n      const crossAxis = getCrossAxis(mainAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = within(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = within(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...middlewareArguments,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(middlewareArguments) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = middlewareArguments;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = options;\n      const coords = {\n        x,\n        y\n      };\n      const mainAxis = getMainAxisFromPlacement(placement);\n      const crossAxis = getCrossAxis(mainAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = typeof offset === 'function' ? offset(middlewareArguments) : offset;\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data to change the size of the floating element. For instance,\n * prevent it from overflowing its clipping boundary or match the width of the\n * reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(middlewareArguments) {\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = middlewareArguments;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = options;\n      const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const xMin = max(overflow.left, 0);\n      const xMax = max(overflow.right, 0);\n      const yMin = max(overflow.top, 0);\n      const yMax = max(overflow.bottom, 0);\n      const dimensions = {\n        availableHeight: rects.floating.height - (['left', 'right'].includes(placement) ? 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)) : overflow[heightSide]),\n        availableWidth: rects.floating.width - (['top', 'bottom'].includes(placement) ? 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)) : overflow[widthSide])\n      };\n      await apply({\n        ...middlewareArguments,\n        ...dimensions\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (rects.floating.width !== nextDimensions.width || rects.floating.height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, rectToClientRect, shift, size };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\n\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\n\nfunction getComputedStyle$1(element) {\n  return getWindow(element).getComputedStyle(element);\n}\n\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle$1(element);\n  let width = parseFloat(css.width);\n  let height = parseFloat(css.height);\n  const offsetWidth = element.offsetWidth;\n  const offsetHeight = element.offsetHeight;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    fallback: shouldFallback\n  };\n}\n\nfunction getNodeName(node) {\n  return isNode(node) ? (node.nodeName || '').toLowerCase() : '';\n}\n\nlet uaString;\nfunction getUAString() {\n  if (uaString) {\n    return uaString;\n  }\n  const uaData = navigator.userAgentData;\n  if (uaData && Array.isArray(uaData.brands)) {\n    uaString = uaData.brands.map(item => item.brand + \"/\" + item.version).join(' ');\n    return uaString;\n  }\n  return navigator.userAgent;\n}\n\nfunction isHTMLElement(value) {\n  return value instanceof getWindow(value).HTMLElement;\n}\nfunction isElement(value) {\n  return value instanceof getWindow(value).Element;\n}\nfunction isNode(value) {\n  return value instanceof getWindow(value).Node;\n}\nfunction isShadowRoot(node) {\n  // Browsers without `ShadowRoot` support.\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  const OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle$1(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n  // TODO: Try to use feature detection here instead.\n  const isFirefox = /firefox/i.test(getUAString());\n  const css = getComputedStyle$1(element);\n  const backdropFilter = css.backdropFilter || css.WebkitBackdropFilter;\n\n  // This is non-exhaustive but covers the most common CSS properties that\n  // create a containing block.\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  return css.transform !== 'none' || css.perspective !== 'none' || (backdropFilter ? backdropFilter !== 'none' : false) || isFirefox && css.willChange === 'filter' || isFirefox && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective'].some(value => css.willChange.includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => {\n    // Add type check for old browsers.\n    const contain = css.contain;\n    return contain != null ? contain.includes(value) : false;\n  });\n}\nfunction isLayoutViewport() {\n  // TODO: Try to use feature detection here instead. Feature detection for\n  // this can fail in various ways, making the userAgent check the most:\n  // reliable:\n  // • Always-visible scrollbar or not\n  // • Width of <html>\n\n  // Not Safari.\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nconst FALLBACK_SCALE = {\n  x: 1,\n  y: 1\n};\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return FALLBACK_SCALE;\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    fallback\n  } = getCssDimensions(domElement);\n  let x = (fallback ? round(rect.width) : rect.width) / width;\n  let y = (fallback ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  var _win$visualViewport, _win$visualViewport2;\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = FALLBACK_SCALE;\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const win = domElement ? getWindow(domElement) : window;\n  const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  let x = (clientRect.left + (addVisualOffsets ? ((_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) || 0 : 0)) / scale.x;\n  let y = (clientRect.top + (addVisualOffsets ? ((_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) || 0 : 0)) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentIFrame = win.frameElement;\n    while (currentIFrame && offsetParent && offsetWin !== win) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      iframeRect.x += (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      iframeRect.y += (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += iframeRect.x;\n      y += iframeRect.y;\n      currentIFrame = getWindow(currentIFrame).frameElement;\n    }\n  }\n  return {\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x,\n    y\n  };\n}\n\nfunction getDocumentElement(node) {\n  return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;\n}\n\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.pageXOffset,\n    scrollTop: element.pageYOffset\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  if (offsetParent === documentElement) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = {\n    x: 1,\n    y: 1\n  };\n  const offsets = {\n    x: 0,\n    y: 0\n  };\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n  };\n}\n\nfunction getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle$1(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\n\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    // `getParentNode` will never return a `Document` due to the fallback\n    // check, so it's either the <html> or <body> element.\n    return parentNode.ownerDocument.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\n\nfunction getOverflowAncestors(node, list) {\n  var _node$ownerDocument;\n  if (list === void 0) {\n    list = [];\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor));\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const layoutViewport = isLayoutViewport();\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : {\n    x: 1,\n    y: 1\n  };\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  if (clippingAncestor === 'viewport') {\n    return rectToClientRect(getViewportRect(element, strategy));\n  }\n  if (isElement(clippingAncestor)) {\n    return rectToClientRect(getInnerBoundingClientRect(clippingAncestor, strategy));\n  }\n  return rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle$1(currentNode);\n    const containingBlock = isContainingBlock(currentNode);\n    const shouldDropCurrentNode = elementIsFixed ? !containingBlock && !currentContainingBlockComputedStyle : !containingBlock && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  if (isHTMLElement(element)) {\n    return getCssDimensions(element);\n  }\n  return element.getBoundingClientRect();\n}\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n    return null;\n  }\n  return element.offsetParent;\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else {\n      currentNode = getParentNode(currentNode);\n    }\n  }\n  return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element) {\n  const window = getWindow(element);\n  let offsetParent = getTrueOffsetParent(element);\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n    return window;\n  }\n  return offsetParent || getContainingBlock(element) || window;\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const rect = getBoundingClientRect(element, true, strategy === 'fixed', offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = {\n    x: 0,\n    y: 0\n  };\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent, true);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nconst platform = {\n  getClippingRect,\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  isElement,\n  getDimensions,\n  getOffsetParent,\n  getDocumentElement,\n  getScale,\n  async getElementRects(_ref) {\n    let {\n      reference,\n      floating,\n      strategy\n    } = _ref;\n    const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n    const getDimensionsFn = this.getDimensions;\n    return {\n      reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),\n      floating: {\n        x: 0,\n        y: 0,\n        ...(await getDimensionsFn(floating))\n      }\n    };\n  },\n  getClientRects: element => Array.from(element.getClientRects()),\n  isRTL: element => getComputedStyle$1(element).direction === 'rtl'\n};\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll: _ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = true,\n    animationFrame = false\n  } = options;\n  const ancestorScroll = _ancestorScroll && !animationFrame;\n  const ancestors = ancestorScroll || ancestorResize ? [...(isElement(reference) ? getOverflowAncestors(reference) : reference.contextElement ? getOverflowAncestors(reference.contextElement) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  let observer = null;\n  if (elementResize) {\n    let initialUpdate = true;\n    observer = new ResizeObserver(() => {\n      if (!initialUpdate) {\n        update();\n      }\n      initialUpdate = false;\n    });\n    isElement(reference) && !animationFrame && observer.observe(reference);\n    if (!isElement(reference) && reference.contextElement && !animationFrame) {\n      observer.observe(reference.contextElement);\n    }\n    observer.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _observer;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    (_observer = observer) == null ? void 0 : _observer.disconnect();\n    observer = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain CSS positioning\n * strategy.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { autoUpdate, computePosition, getOverflowAncestors, platform };\n","import Vue from 'vue'\n\nvar isVue2 = true\nvar isVue3 = false\nvar Vue2 = Vue\nvar warn = Vue.util.warn\n\nfunction install() {}\n\n// createApp polyfill\nexport function createApp(rootComponent, rootProps) {\n  var vm\n  var provide = {}\n  var app = {\n    config: Vue.config,\n    use: Vue.use.bind(Vue),\n    mixin: Vue.mixin.bind(Vue),\n    component: Vue.component.bind(Vue),\n    provide: function (key, value) {\n      provide[key] = value\n      return this\n    },\n    directive: function (name, dir) {\n      if (dir) {\n        Vue.directive(name, dir)\n        return app\n      } else {\n        return Vue.directive(name)\n      }\n    },\n    mount: function (el, hydrating) {\n      if (!vm) {\n        vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))\n        vm.$mount(el, hydrating)\n        return vm\n      } else {\n        return vm\n      }\n    },\n    unmount: function () {\n      if (vm) {\n        vm.$destroy()\n        vm = undefined\n      }\n    },\n  }\n  return app\n}\n\nexport { Vue, Vue2, isVue2, isVue3, install, warn }\nexport * from 'vue'\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport * from '@floating-ui/dom';\nimport { unref, computed, ref, shallowRef, watch, getCurrentScope, onScopeDispose, shallowReadonly } from 'vue-demi';\n\nfunction unwrapElement(element) {\n  var _$el;\n  return (_$el = element == null ? void 0 : element.$el) != null ? _$el : element;\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered to the reference element.\n * @param options The arrow options.\n * @see https://floating-ui.com/docs/arrow\n */\nfunction arrow(options) {\n  return {\n    name: 'arrow',\n    options,\n    fn(args) {\n      const element = unwrapElement(unref(options.element));\n      if (element == null) {\n        return {};\n      }\n      return arrow$1({\n        element,\n        padding: options.padding\n      }).fn(args);\n    }\n  };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element next to a reference element when it is given a certain CSS positioning strategy.\n * @param reference The reference template ref.\n * @param floating The floating template ref.\n * @param options The floating options.\n * @see https://floating-ui.com/docs/vue\n */\nfunction useFloating(reference, floating, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const whileElementsMountedOption = options.whileElementsMounted;\n  const openOption = computed(() => {\n    var _unref;\n    return (_unref = unref(options.open)) != null ? _unref : true;\n  });\n  const middlewareOption = computed(() => unref(options.middleware));\n  const placementOption = computed(() => {\n    var _unref2;\n    return (_unref2 = unref(options.placement)) != null ? _unref2 : 'bottom';\n  });\n  const strategyOption = computed(() => {\n    var _unref3;\n    return (_unref3 = unref(options.strategy)) != null ? _unref3 : 'absolute';\n  });\n  const referenceElement = computed(() => unwrapElement(reference.value));\n  const floatingElement = computed(() => unwrapElement(floating.value));\n  const x = ref(null);\n  const y = ref(null);\n  const strategy = ref(strategyOption.value);\n  const placement = ref(placementOption.value);\n  const middlewareData = shallowRef({});\n  const isPositioned = ref(false);\n  let whileElementsMountedCleanup;\n  function update() {\n    if (referenceElement.value == null || floatingElement.value == null) {\n      return;\n    }\n    computePosition(referenceElement.value, floatingElement.value, {\n      middleware: middlewareOption.value,\n      placement: placementOption.value,\n      strategy: strategyOption.value\n    }).then(position => {\n      x.value = position.x;\n      y.value = position.y;\n      strategy.value = position.strategy;\n      placement.value = position.placement;\n      middlewareData.value = position.middlewareData;\n      isPositioned.value = true;\n    });\n  }\n  function cleanup() {\n    if (typeof whileElementsMountedCleanup === 'function') {\n      whileElementsMountedCleanup();\n      whileElementsMountedCleanup = undefined;\n    }\n  }\n  function attach() {\n    cleanup();\n    if (whileElementsMountedOption === undefined) {\n      update();\n      return;\n    }\n    if (referenceElement.value != null && floatingElement.value != null) {\n      whileElementsMountedCleanup = whileElementsMountedOption(referenceElement.value, floatingElement.value, update);\n      return;\n    }\n  }\n  function reset() {\n    if (!openOption.value) {\n      isPositioned.value = false;\n    }\n  }\n  watch([middlewareOption, placementOption, strategyOption], update, {\n    flush: 'sync'\n  });\n  watch([referenceElement, floatingElement], attach, {\n    flush: 'sync'\n  });\n  watch(openOption, reset, {\n    flush: 'sync'\n  });\n  if (getCurrentScope()) {\n    onScopeDispose(cleanup);\n  }\n  return {\n    x: shallowReadonly(x),\n    y: shallowReadonly(y),\n    strategy: shallowReadonly(strategy),\n    placement: shallowReadonly(placement),\n    middlewareData: shallowReadonly(middlewareData),\n    isPositioned: shallowReadonly(isPositioned),\n    update\n  };\n}\n\nexport { arrow, useFloating };\n","import Vue from 'vue'\n\nvar isVue2 = true\nvar isVue3 = false\nvar Vue2 = Vue\nvar warn = Vue.util.warn\n\nfunction install() {}\n\n// createApp polyfill\nexport function createApp(rootComponent, rootProps) {\n  var vm\n  var provide = {}\n  var app = {\n    config: Vue.config,\n    use: Vue.use.bind(Vue),\n    mixin: Vue.mixin.bind(Vue),\n    component: Vue.component.bind(Vue),\n    provide: function (key, value) {\n      provide[key] = value\n      return this\n    },\n    directive: function (name, dir) {\n      if (dir) {\n        Vue.directive(name, dir)\n        return app\n      } else {\n        return Vue.directive(name)\n      }\n    },\n    mount: function (el, hydrating) {\n      if (!vm) {\n        vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))\n        vm.$mount(el, hydrating)\n        return vm\n      } else {\n        return vm\n      }\n    },\n    unmount: function () {\n      if (vm) {\n        vm.$destroy()\n        vm = undefined\n      }\n    },\n  }\n  return app\n}\n\nexport { Vue, Vue2, isVue2, isVue3, install, warn }\nexport * from 'vue'\n","import { shallowRef, watchEffect, readonly, unref, ref, isVue3, version, watch, customRef, getCurrentScope, onScopeDispose, effectScope, provide, inject, isRef, computed, reactive, toRefs as toRefs$1, toRef, isVue2, set as set$1, getCurrentInstance, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$b.call(b, prop))\n      __defNormalProp$9(a, prop, b[prop]);\n  if (__getOwnPropSymbols$b)\n    for (var prop of __getOwnPropSymbols$b(b)) {\n      if (__propIsEnum$b.call(b, prop))\n        __defNormalProp$9(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction computedEager(fn, options) {\n  var _a;\n  const result = shallowRef();\n  watchEffect(() => {\n    result.value = fn();\n  }, __spreadProps$6(__spreadValues$9({}, options), {\n    flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n  }));\n  return readonly(result);\n}\n\nvar _a;\nconst isClient = typeof window !== \"undefined\";\nconst isDef = (val) => typeof val !== \"undefined\";\nconst assert = (condition, ...infos) => {\n  if (!condition)\n    console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isBoolean = (val) => typeof val === \"boolean\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isNumber = (val) => typeof val === \"number\";\nconst isString = (val) => typeof val === \"string\";\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst isWindow = (val) => typeof window !== \"undefined\" && toString.call(val) === \"[object Window]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent);\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\n\nfunction resolveUnref(r) {\n  return typeof r === \"function\" ? r() : unref(r);\n}\n\nfunction createFilterWrapper(filter, fn) {\n  function wrapper(...args) {\n    return new Promise((resolve, reject) => {\n      Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n    });\n  }\n  return wrapper;\n}\nconst bypassFilter = (invoke) => {\n  return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n  let timer;\n  let maxTimer;\n  let lastRejector = noop;\n  const _clearTimeout = (timer2) => {\n    clearTimeout(timer2);\n    lastRejector();\n    lastRejector = noop;\n  };\n  const filter = (invoke) => {\n    const duration = resolveUnref(ms);\n    const maxDuration = resolveUnref(options.maxWait);\n    if (timer)\n      _clearTimeout(timer);\n    if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n      if (maxTimer) {\n        _clearTimeout(maxTimer);\n        maxTimer = null;\n      }\n      return Promise.resolve(invoke());\n    }\n    return new Promise((resolve, reject) => {\n      lastRejector = options.rejectOnCancel ? reject : resolve;\n      if (maxDuration && !maxTimer) {\n        maxTimer = setTimeout(() => {\n          if (timer)\n            _clearTimeout(timer);\n          maxTimer = null;\n          resolve(invoke());\n        }, maxDuration);\n      }\n      timer = setTimeout(() => {\n        if (maxTimer)\n          _clearTimeout(maxTimer);\n        maxTimer = null;\n        resolve(invoke());\n      }, duration);\n    });\n  };\n  return filter;\n}\nfunction throttleFilter(ms, trailing = true, leading = true, rejectOnCancel = false) {\n  let lastExec = 0;\n  let timer;\n  let isLeading = true;\n  let lastRejector = noop;\n  let lastValue;\n  const clear = () => {\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n      lastRejector();\n      lastRejector = noop;\n    }\n  };\n  const filter = (_invoke) => {\n    const duration = resolveUnref(ms);\n    const elapsed = Date.now() - lastExec;\n    const invoke = () => {\n      return lastValue = _invoke();\n    };\n    clear();\n    if (duration <= 0) {\n      lastExec = Date.now();\n      return invoke();\n    }\n    if (elapsed > duration && (leading || !isLeading)) {\n      lastExec = Date.now();\n      invoke();\n    } else if (trailing) {\n      return new Promise((resolve, reject) => {\n        lastRejector = rejectOnCancel ? reject : resolve;\n        timer = setTimeout(() => {\n          lastExec = Date.now();\n          isLeading = true;\n          resolve(invoke());\n          clear();\n        }, duration - elapsed);\n      });\n    }\n    if (!leading && !timer)\n      timer = setTimeout(() => isLeading = true, duration);\n    isLeading = false;\n    return lastValue;\n  };\n  return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n  const isActive = ref(true);\n  function pause() {\n    isActive.value = false;\n  }\n  function resume() {\n    isActive.value = true;\n  }\n  const eventFilter = (...args) => {\n    if (isActive.value)\n      extendFilter(...args);\n  };\n  return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nfunction __onlyVue3(name = \"this function\") {\n  if (isVue3)\n    return;\n  throw new Error(`[VueUse] ${name} is only works on Vue 3.`);\n}\nfunction __onlyVue27Plus(name = \"this function\") {\n  if (isVue3 || version.startsWith(\"2.7.\"))\n    return;\n  throw new Error(`[VueUse] ${name} is only works on Vue 2.7 or above.`);\n}\nconst directiveHooks = {\n  mounted: isVue3 ? \"mounted\" : \"inserted\",\n  updated: isVue3 ? \"updated\" : \"componentUpdated\",\n  unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n  return new Promise((resolve, reject) => {\n    if (throwOnTimeout)\n      setTimeout(() => reject(reason), ms);\n    else\n      setTimeout(resolve, ms);\n  });\n}\nfunction identity(arg) {\n  return arg;\n}\nfunction createSingletonPromise(fn) {\n  let _promise;\n  function wrapper() {\n    if (!_promise)\n      _promise = fn();\n    return _promise;\n  }\n  wrapper.reset = async () => {\n    const _prev = _promise;\n    _promise = void 0;\n    if (_prev)\n      await _prev;\n  };\n  return wrapper;\n}\nfunction invoke(fn) {\n  return fn();\n}\nfunction containsProp(obj, ...props) {\n  return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n  var _a;\n  if (typeof target === \"number\")\n    return target + delta;\n  const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n  const unit = target.slice(value.length);\n  const result = parseFloat(value) + delta;\n  if (Number.isNaN(result))\n    return target;\n  return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n  return keys.reduce((n, k) => {\n    if (k in obj) {\n      if (!omitUndefined || obj[k] !== void 0)\n        n[k] = obj[k];\n    }\n    return n;\n  }, {});\n}\n\nfunction computedWithControl(source, fn) {\n  let v = void 0;\n  let track;\n  let trigger;\n  const dirty = ref(true);\n  const update = () => {\n    dirty.value = true;\n    trigger();\n  };\n  watch(source, update, { flush: \"sync\" });\n  const get = isFunction(fn) ? fn : fn.get;\n  const set = isFunction(fn) ? void 0 : fn.set;\n  const result = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        if (dirty.value) {\n          v = get();\n          dirty.value = false;\n        }\n        track();\n        return v;\n      },\n      set(v2) {\n        set == null ? void 0 : set(v2);\n      }\n    };\n  });\n  if (Object.isExtensible(result))\n    result.trigger = update;\n  return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n  if (getCurrentScope()) {\n    onScopeDispose(fn);\n    return true;\n  }\n  return false;\n}\n\nfunction createEventHook() {\n  const fns = [];\n  const off = (fn) => {\n    const index = fns.indexOf(fn);\n    if (index !== -1)\n      fns.splice(index, 1);\n  };\n  const on = (fn) => {\n    fns.push(fn);\n    const offFn = () => off(fn);\n    tryOnScopeDispose(offFn);\n    return {\n      off: offFn\n    };\n  };\n  const trigger = (param) => {\n    fns.forEach((fn) => fn(param));\n  };\n  return {\n    on,\n    off,\n    trigger\n  };\n}\n\nfunction createGlobalState(stateFactory) {\n  let initialized = false;\n  let state;\n  const scope = effectScope(true);\n  return () => {\n    if (!initialized) {\n      state = scope.run(stateFactory);\n      initialized = true;\n    }\n    return state;\n  };\n}\n\nfunction createInjectionState(composable) {\n  const key = Symbol(\"InjectionState\");\n  const useProvidingState = (...args) => {\n    const state = composable(...args);\n    provide(key, state);\n    return state;\n  };\n  const useInjectedState = () => inject(key);\n  return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n  let subscribers = 0;\n  let state;\n  let scope;\n  const dispose = () => {\n    subscribers -= 1;\n    if (scope && subscribers <= 0) {\n      scope.stop();\n      state = void 0;\n      scope = void 0;\n    }\n  };\n  return (...args) => {\n    subscribers += 1;\n    if (!state) {\n      scope = effectScope(true);\n      state = scope.run(() => composable(...args));\n    }\n    tryOnScopeDispose(dispose);\n    return state;\n  };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n  __onlyVue27Plus();\n  for (const [key, value] of Object.entries(extend)) {\n    if (key === \"value\")\n      continue;\n    if (isRef(value) && unwrap) {\n      Object.defineProperty(ref, key, {\n        get() {\n          return value.value;\n        },\n        set(v) {\n          value.value = v;\n        },\n        enumerable\n      });\n    } else {\n      Object.defineProperty(ref, key, { value, enumerable });\n    }\n  }\n  return ref;\n}\n\nfunction get(obj, key) {\n  if (key == null)\n    return unref(obj);\n  return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n  return unref(v) != null;\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$a.call(b, prop))\n      __defNormalProp$8(a, prop, b[prop]);\n  if (__getOwnPropSymbols$a)\n    for (var prop of __getOwnPropSymbols$a(b)) {\n      if (__propIsEnum$a.call(b, prop))\n        __defNormalProp$8(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction makeDestructurable(obj, arr) {\n  if (typeof Symbol !== \"undefined\") {\n    const clone = __spreadValues$8({}, obj);\n    Object.defineProperty(clone, Symbol.iterator, {\n      enumerable: false,\n      value() {\n        let index = 0;\n        return {\n          next: () => ({\n            value: arr[index++],\n            done: index > arr.length\n          })\n        };\n      }\n    });\n    return clone;\n  } else {\n    return Object.assign([...arr], obj);\n  }\n}\n\nfunction reactify(fn, options) {\n  const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : resolveUnref;\n  return function(...args) {\n    return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n  };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n  let keys = [];\n  let options;\n  if (Array.isArray(optionsOrKeys)) {\n    keys = optionsOrKeys;\n  } else {\n    options = optionsOrKeys;\n    const { includeOwnProperties = true } = optionsOrKeys;\n    keys.push(...Object.keys(obj));\n    if (includeOwnProperties)\n      keys.push(...Object.getOwnPropertyNames(obj));\n  }\n  return Object.fromEntries(keys.map((key) => {\n    const value = obj[key];\n    return [\n      key,\n      typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n    ];\n  }));\n}\n\nfunction toReactive(objectRef) {\n  if (!isRef(objectRef))\n    return reactive(objectRef);\n  const proxy = new Proxy({}, {\n    get(_, p, receiver) {\n      return unref(Reflect.get(objectRef.value, p, receiver));\n    },\n    set(_, p, value) {\n      if (isRef(objectRef.value[p]) && !isRef(value))\n        objectRef.value[p].value = value;\n      else\n        objectRef.value[p] = value;\n      return true;\n    },\n    deleteProperty(_, p) {\n      return Reflect.deleteProperty(objectRef.value, p);\n    },\n    has(_, p) {\n      return Reflect.has(objectRef.value, p);\n    },\n    ownKeys() {\n      return Object.keys(objectRef.value);\n    },\n    getOwnPropertyDescriptor() {\n      return {\n        enumerable: true,\n        configurable: true\n      };\n    }\n  });\n  return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n  return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n  const flatKeys = keys.flat();\n  return reactiveComputed(() => Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nfunction reactivePick(obj, ...keys) {\n  const flatKeys = keys.flat();\n  return reactive(Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n  return customRef((track, trigger) => {\n    let value = defaultValue;\n    let timer;\n    const resetAfter = () => setTimeout(() => {\n      value = defaultValue;\n      trigger();\n    }, resolveUnref(afterMs));\n    tryOnScopeDispose(() => {\n      clearTimeout(timer);\n    });\n    return {\n      get() {\n        track();\n        return value;\n      },\n      set(newValue) {\n        value = newValue;\n        trigger();\n        clearTimeout(timer);\n        timer = resetAfter();\n      }\n    };\n  });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n  return createFilterWrapper(debounceFilter(ms, options), fn);\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n  const debounced = ref(value.value);\n  const updater = useDebounceFn(() => {\n    debounced.value = value.value;\n  }, ms, options);\n  watch(value, () => updater());\n  return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n  return computed({\n    get() {\n      var _a;\n      return (_a = source.value) != null ? _a : defaultValue;\n    },\n    set(value) {\n      source.value = value;\n    }\n  });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n  return createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n  if (delay <= 0)\n    return value;\n  const throttled = ref(value.value);\n  const updater = useThrottleFn(() => {\n    throttled.value = value.value;\n  }, delay, trailing, leading);\n  watch(value, () => updater());\n  return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n  let source = initial;\n  let track;\n  let trigger;\n  const ref = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        return get();\n      },\n      set(v) {\n        set(v);\n      }\n    };\n  });\n  function get(tracking = true) {\n    if (tracking)\n      track();\n    return source;\n  }\n  function set(value, triggering = true) {\n    var _a, _b;\n    if (value === source)\n      return;\n    const old = source;\n    if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n      return;\n    source = value;\n    (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n    if (triggering)\n      trigger();\n  }\n  const untrackedGet = () => get(false);\n  const silentSet = (v) => set(v, false);\n  const peek = () => get(false);\n  const lay = (v) => set(v, false);\n  return extendRef(ref, {\n    get,\n    set,\n    untrackedGet,\n    silentSet,\n    peek,\n    lay\n  }, { enumerable: true });\n}\nconst controlledRef = refWithControl;\n\nfunction resolveRef(r) {\n  return typeof r === \"function\" ? computed(r) : ref(r);\n}\n\nfunction set(...args) {\n  if (args.length === 2) {\n    const [ref, value] = args;\n    ref.value = value;\n  }\n  if (args.length === 3) {\n    if (isVue2) {\n      set$1(...args);\n    } else {\n      const [target, key, value] = args;\n      target[key] = value;\n    }\n  }\n}\n\nfunction syncRef(left, right, options = {}) {\n  var _a, _b;\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true,\n    direction = \"both\",\n    transform = {}\n  } = options;\n  let watchLeft;\n  let watchRight;\n  const transformLTR = (_a = transform.ltr) != null ? _a : (v) => v;\n  const transformRTL = (_b = transform.rtl) != null ? _b : (v) => v;\n  if (direction === \"both\" || direction === \"ltr\") {\n    watchLeft = watch(left, (newValue) => right.value = transformLTR(newValue), { flush, deep, immediate });\n  }\n  if (direction === \"both\" || direction === \"rtl\") {\n    watchRight = watch(right, (newValue) => left.value = transformRTL(newValue), { flush, deep, immediate });\n  }\n  return () => {\n    watchLeft == null ? void 0 : watchLeft();\n    watchRight == null ? void 0 : watchRight();\n  };\n}\n\nfunction syncRefs(source, targets, options = {}) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true\n  } = options;\n  if (!Array.isArray(targets))\n    targets = [targets];\n  return watch(source, (newValue) => targets.forEach((target) => target.value = newValue), { flush, deep, immediate });\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$9.call(b, prop))\n      __defNormalProp$7(a, prop, b[prop]);\n  if (__getOwnPropSymbols$9)\n    for (var prop of __getOwnPropSymbols$9(b)) {\n      if (__propIsEnum$9.call(b, prop))\n        __defNormalProp$7(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction toRefs(objectRef) {\n  if (!isRef(objectRef))\n    return toRefs$1(objectRef);\n  const result = Array.isArray(objectRef.value) ? new Array(objectRef.value.length) : {};\n  for (const key in objectRef.value) {\n    result[key] = customRef(() => ({\n      get() {\n        return objectRef.value[key];\n      },\n      set(v) {\n        if (Array.isArray(objectRef.value)) {\n          const copy = [...objectRef.value];\n          copy[key] = v;\n          objectRef.value = copy;\n        } else {\n          const newObject = __spreadProps$5(__spreadValues$7({}, objectRef.value), { [key]: v });\n          Object.setPrototypeOf(newObject, objectRef.value);\n          objectRef.value = newObject;\n        }\n      }\n    }));\n  }\n  return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true) {\n  if (getCurrentInstance())\n    onBeforeMount(fn);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn) {\n  if (getCurrentInstance())\n    onBeforeUnmount(fn);\n}\n\nfunction tryOnMounted(fn, sync = true) {\n  if (getCurrentInstance())\n    onMounted(fn);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn) {\n  if (getCurrentInstance())\n    onUnmounted(fn);\n}\n\nfunction createUntil(r, isNot = false) {\n  function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(r, (v) => {\n        if (condition(v) !== isNot) {\n          stop == null ? void 0 : stop();\n          resolve(v);\n        }\n      }, {\n        flush,\n        deep,\n        immediate: true\n      });\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => stop == null ? void 0 : stop()));\n    }\n    return Promise.race(promises);\n  }\n  function toBe(value, options) {\n    if (!isRef(value))\n      return toMatch((v) => v === value, options);\n    const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch([r, value], ([v1, v2]) => {\n        if (isNot !== (v1 === v2)) {\n          stop == null ? void 0 : stop();\n          resolve(v1);\n        }\n      }, {\n        flush,\n        deep,\n        immediate: true\n      });\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => {\n        stop == null ? void 0 : stop();\n        return resolveUnref(r);\n      }));\n    }\n    return Promise.race(promises);\n  }\n  function toBeTruthy(options) {\n    return toMatch((v) => Boolean(v), options);\n  }\n  function toBeNull(options) {\n    return toBe(null, options);\n  }\n  function toBeUndefined(options) {\n    return toBe(void 0, options);\n  }\n  function toBeNaN(options) {\n    return toMatch(Number.isNaN, options);\n  }\n  function toContains(value, options) {\n    return toMatch((v) => {\n      const array = Array.from(v);\n      return array.includes(value) || array.includes(resolveUnref(value));\n    }, options);\n  }\n  function changed(options) {\n    return changedTimes(1, options);\n  }\n  function changedTimes(n = 1, options) {\n    let count = -1;\n    return toMatch(() => {\n      count += 1;\n      return count >= n;\n    }, options);\n  }\n  if (Array.isArray(resolveUnref(r))) {\n    const instance = {\n      toMatch,\n      toContains,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  } else {\n    const instance = {\n      toMatch,\n      toBe,\n      toBeTruthy,\n      toBeNull,\n      toBeNaN,\n      toBeUndefined,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  }\n}\nfunction until(r) {\n  return createUntil(r);\n}\n\nfunction useArrayEvery(list, fn) {\n  return computed(() => resolveUnref(list).every((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n  return computed(() => resolveUnref(resolveUnref(list).find((element, index, array) => fn(resolveUnref(element), index, array))));\n}\n\nfunction useArrayFindIndex(list, fn) {\n  return computed(() => resolveUnref(list).findIndex((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayJoin(list, separator) {\n  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).join(resolveUnref(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n  const reduceCallback = (sum, value, index) => reducer(resolveUnref(sum), resolveUnref(value), index);\n  return computed(() => {\n    const resolved = resolveUnref(list);\n    return args.length ? resolved.reduce(reduceCallback, resolveUnref(args[0])) : resolved.reduce(reduceCallback);\n  });\n}\n\nfunction useArraySome(list, fn) {\n  return computed(() => resolveUnref(list).some((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayUnique(list) {\n  return computed(() => [...new Set(resolveUnref(list).map((element) => resolveUnref(element)))]);\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n  const count = ref(initialValue);\n  const {\n    max = Infinity,\n    min = -Infinity\n  } = options;\n  const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);\n  const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);\n  const get = () => count.value;\n  const set = (val) => count.value = Math.max(min, Math.min(max, val));\n  const reset = (val = initialValue) => {\n    initialValue = val;\n    return set(val);\n  };\n  return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nconst defaultMeridiem = (hours, minutes, isLowercase, hasPeriod) => {\n  let m = hours < 12 ? \"AM\" : \"PM\";\n  if (hasPeriod)\n    m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n  return isLowercase ? m.toLowerCase() : m;\n};\nconst formatDate = (date, formatStr, options = {}) => {\n  var _a;\n  const years = date.getFullYear();\n  const month = date.getMonth();\n  const days = date.getDate();\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const seconds = date.getSeconds();\n  const milliseconds = date.getMilliseconds();\n  const day = date.getDay();\n  const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n  const matches = {\n    YY: () => String(years).slice(-2),\n    YYYY: () => years,\n    M: () => month + 1,\n    MM: () => `${month + 1}`.padStart(2, \"0\"),\n    MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n    MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n    D: () => String(days),\n    DD: () => `${days}`.padStart(2, \"0\"),\n    H: () => String(hours),\n    HH: () => `${hours}`.padStart(2, \"0\"),\n    h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n    hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n    m: () => String(minutes),\n    mm: () => `${minutes}`.padStart(2, \"0\"),\n    s: () => String(seconds),\n    ss: () => `${seconds}`.padStart(2, \"0\"),\n    SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n    d: () => day,\n    dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n    ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n    dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n    A: () => meridiem(hours, minutes),\n    AA: () => meridiem(hours, minutes, false, true),\n    a: () => meridiem(hours, minutes, true),\n    aa: () => meridiem(hours, minutes, true, true)\n  };\n  return formatStr.replace(REGEX_FORMAT, (match, $1) => $1 || matches[match]());\n};\nconst normalizeDate = (date) => {\n  if (date === null)\n    return new Date(NaN);\n  if (date === void 0)\n    return new Date();\n  if (date instanceof Date)\n    return new Date(date);\n  if (typeof date === \"string\" && !/Z$/i.test(date)) {\n    const d = date.match(REGEX_PARSE);\n    if (d) {\n      const m = d[2] - 1 || 0;\n      const ms = (d[7] || \"0\").substring(0, 3);\n      return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n    }\n  }\n  return new Date(date);\n};\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n  return computed(() => formatDate(normalizeDate(resolveUnref(date)), resolveUnref(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n  const {\n    immediate = true,\n    immediateCallback = false\n  } = options;\n  let timer = null;\n  const isActive = ref(false);\n  function clean() {\n    if (timer) {\n      clearInterval(timer);\n      timer = null;\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    clean();\n  }\n  function resume() {\n    const intervalValue = resolveUnref(interval);\n    if (intervalValue <= 0)\n      return;\n    isActive.value = true;\n    if (immediateCallback)\n      cb();\n    clean();\n    timer = setInterval(cb, intervalValue);\n  }\n  if (immediate && isClient)\n    resume();\n  if (isRef(interval) || isFunction(interval)) {\n    const stopWatch = watch(interval, () => {\n      if (isActive.value && isClient)\n        resume();\n    });\n    tryOnScopeDispose(stopWatch);\n  }\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$8.call(b, prop))\n      __defNormalProp$6(a, prop, b[prop]);\n  if (__getOwnPropSymbols$8)\n    for (var prop of __getOwnPropSymbols$8(b)) {\n      if (__propIsEnum$8.call(b, prop))\n        __defNormalProp$6(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useInterval(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    immediate = true,\n    callback\n  } = options;\n  const counter = ref(0);\n  const update = () => counter.value += 1;\n  const controls = useIntervalFn(callback ? () => {\n    update();\n    callback(counter.value);\n  } : update, interval, { immediate });\n  if (exposeControls) {\n    return __spreadValues$6({\n      counter\n    }, controls);\n  } else {\n    return counter;\n  }\n}\n\nfunction useLastChanged(source, options = {}) {\n  var _a;\n  const ms = ref((_a = options.initialValue) != null ? _a : null);\n  watch(source, () => ms.value = timestamp(), options);\n  return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n  const {\n    immediate = true\n  } = options;\n  const isPending = ref(false);\n  let timer = null;\n  function clear() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function stop() {\n    isPending.value = false;\n    clear();\n  }\n  function start(...args) {\n    clear();\n    isPending.value = true;\n    timer = setTimeout(() => {\n      isPending.value = false;\n      timer = null;\n      cb(...args);\n    }, resolveUnref(interval));\n  }\n  if (immediate) {\n    isPending.value = true;\n    if (isClient)\n      start();\n  }\n  tryOnScopeDispose(stop);\n  return {\n    isPending: readonly(isPending),\n    start,\n    stop\n  };\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$7.call(b, prop))\n      __defNormalProp$5(a, prop, b[prop]);\n  if (__getOwnPropSymbols$7)\n    for (var prop of __getOwnPropSymbols$7(b)) {\n      if (__propIsEnum$7.call(b, prop))\n        __defNormalProp$5(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useTimeout(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    callback\n  } = options;\n  const controls = useTimeoutFn(callback != null ? callback : noop, interval, options);\n  const ready = computed(() => !controls.isPending.value);\n  if (exposeControls) {\n    return __spreadValues$5({\n      ready\n    }, controls);\n  } else {\n    return ready;\n  }\n}\n\nfunction useToNumber(value, options = {}) {\n  const {\n    method = \"parseFloat\",\n    radix,\n    nanToZero\n  } = options;\n  return computed(() => {\n    let resolved = resolveUnref(value);\n    if (typeof resolved === \"string\")\n      resolved = Number[method](resolved, radix);\n    if (nanToZero && isNaN(resolved))\n      resolved = 0;\n    return resolved;\n  });\n}\n\nfunction useToString(value) {\n  return computed(() => `${resolveUnref(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n  const {\n    truthyValue = true,\n    falsyValue = false\n  } = options;\n  const valueIsRef = isRef(initialValue);\n  const _value = ref(initialValue);\n  function toggle(value) {\n    if (arguments.length) {\n      _value.value = value;\n      return _value.value;\n    } else {\n      const truthy = resolveUnref(truthyValue);\n      _value.value = _value.value === truthy ? resolveUnref(falsyValue) : truthy;\n      return _value.value;\n    }\n  }\n  if (valueIsRef)\n    return toggle;\n  else\n    return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n  let oldList = (options == null ? void 0 : options.immediate) ? [] : [\n    ...source instanceof Function ? source() : Array.isArray(source) ? source : unref(source)\n  ];\n  return watch(source, (newList, _, onCleanup) => {\n    const oldListRemains = new Array(oldList.length);\n    const added = [];\n    for (const obj of newList) {\n      let found = false;\n      for (let i = 0; i < oldList.length; i++) {\n        if (!oldListRemains[i] && obj === oldList[i]) {\n          oldListRemains[i] = true;\n          found = true;\n          break;\n        }\n      }\n      if (!found)\n        added.push(obj);\n    }\n    const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n    cb(newList, oldList, added, removed, onCleanup);\n    oldList = [...newList];\n  }, options);\n}\n\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __objRest$5 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$6)\n    for (var prop of __getOwnPropSymbols$6(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchWithFilter(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter = bypassFilter\n  } = _a, watchOptions = __objRest$5(_a, [\n    \"eventFilter\"\n  ]);\n  return watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __objRest$4 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$5.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$5)\n    for (var prop of __getOwnPropSymbols$5(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$5.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchAtMost(source, cb, options) {\n  const _a = options, {\n    count\n  } = _a, watchOptions = __objRest$4(_a, [\n    \"count\"\n  ]);\n  const current = ref(0);\n  const stop = watchWithFilter(source, (...args) => {\n    current.value += 1;\n    if (current.value >= resolveUnref(count))\n      nextTick(() => stop());\n    cb(...args);\n  }, watchOptions);\n  return { count: current, stop };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$4.call(b, prop))\n      __defNormalProp$4(a, prop, b[prop]);\n  if (__getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(b)) {\n      if (__propIsEnum$4.call(b, prop))\n        __defNormalProp$4(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nvar __objRest$3 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchDebounced(source, cb, options = {}) {\n  const _a = options, {\n    debounce = 0,\n    maxWait = void 0\n  } = _a, watchOptions = __objRest$3(_a, [\n    \"debounce\",\n    \"maxWait\"\n  ]);\n  return watchWithFilter(source, cb, __spreadProps$4(__spreadValues$4({}, watchOptions), {\n    eventFilter: debounceFilter(debounce, { maxWait })\n  }));\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$3.call(b, prop))\n      __defNormalProp$3(a, prop, b[prop]);\n  if (__getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(b)) {\n      if (__propIsEnum$3.call(b, prop))\n        __defNormalProp$3(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nvar __objRest$2 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$3.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$3.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchIgnorable(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter = bypassFilter\n  } = _a, watchOptions = __objRest$2(_a, [\n    \"eventFilter\"\n  ]);\n  const filteredCb = createFilterWrapper(eventFilter, cb);\n  let ignoreUpdates;\n  let ignorePrevAsyncUpdates;\n  let stop;\n  if (watchOptions.flush === \"sync\") {\n    const ignore = ref(false);\n    ignorePrevAsyncUpdates = () => {\n    };\n    ignoreUpdates = (updater) => {\n      ignore.value = true;\n      updater();\n      ignore.value = false;\n    };\n    stop = watch(source, (...args) => {\n      if (!ignore.value)\n        filteredCb(...args);\n    }, watchOptions);\n  } else {\n    const disposables = [];\n    const ignoreCounter = ref(0);\n    const syncCounter = ref(0);\n    ignorePrevAsyncUpdates = () => {\n      ignoreCounter.value = syncCounter.value;\n    };\n    disposables.push(watch(source, () => {\n      syncCounter.value++;\n    }, __spreadProps$3(__spreadValues$3({}, watchOptions), { flush: \"sync\" })));\n    ignoreUpdates = (updater) => {\n      const syncCounterPrev = syncCounter.value;\n      updater();\n      ignoreCounter.value += syncCounter.value - syncCounterPrev;\n    };\n    disposables.push(watch(source, (...args) => {\n      const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n      ignoreCounter.value = 0;\n      syncCounter.value = 0;\n      if (ignore)\n        return;\n      filteredCb(...args);\n    }, watchOptions));\n    stop = () => {\n      disposables.forEach((fn) => fn());\n    };\n  }\n  return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchOnce(source, cb, options) {\n  const stop = watch(source, (...args) => {\n    nextTick(() => stop());\n    return cb(...args);\n  }, options);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$2.call(b, prop))\n      __defNormalProp$2(a, prop, b[prop]);\n  if (__getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(b)) {\n      if (__propIsEnum$2.call(b, prop))\n        __defNormalProp$2(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nvar __objRest$1 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchPausable(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter: filter\n  } = _a, watchOptions = __objRest$1(_a, [\n    \"eventFilter\"\n  ]);\n  const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n  const stop = watchWithFilter(source, cb, __spreadProps$2(__spreadValues$2({}, watchOptions), {\n    eventFilter\n  }));\n  return { stop, pause, resume, isActive };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$1.call(b, prop))\n      __defNormalProp$1(a, prop, b[prop]);\n  if (__getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(b)) {\n      if (__propIsEnum$1.call(b, prop))\n        __defNormalProp$1(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchThrottled(source, cb, options = {}) {\n  const _a = options, {\n    throttle = 0,\n    trailing = true,\n    leading = true\n  } = _a, watchOptions = __objRest(_a, [\n    \"throttle\",\n    \"trailing\",\n    \"leading\"\n  ]);\n  return watchWithFilter(source, cb, __spreadProps$1(__spreadValues$1({}, watchOptions), {\n    eventFilter: throttleFilter(throttle, trailing, leading)\n  }));\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction watchTriggerable(source, cb, options = {}) {\n  let cleanupFn;\n  function onEffect() {\n    if (!cleanupFn)\n      return;\n    const fn = cleanupFn;\n    cleanupFn = void 0;\n    fn();\n  }\n  function onCleanup(callback) {\n    cleanupFn = callback;\n  }\n  const _cb = (value, oldValue) => {\n    onEffect();\n    return cb(value, oldValue, onCleanup);\n  };\n  const res = watchIgnorable(source, _cb, options);\n  const { ignoreUpdates } = res;\n  const trigger = () => {\n    let res2;\n    ignoreUpdates(() => {\n      res2 = _cb(getWatchSources(source), getOldValue(source));\n    });\n    return res2;\n  };\n  return __spreadProps(__spreadValues({}, res), {\n    trigger\n  });\n}\nfunction getWatchSources(sources) {\n  if (isReactive(sources))\n    return sources;\n  if (Array.isArray(sources))\n    return sources.map((item) => getOneWatchSource(item));\n  return getOneWatchSource(sources);\n}\nfunction getOneWatchSource(source) {\n  return typeof source === \"function\" ? source() : unref(source);\n}\nfunction getOldValue(source) {\n  return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n  return watch(source, (v, ov, onInvalidate) => {\n    if (v)\n      cb(v, ov, onInvalidate);\n  }, options);\n}\n\nexport { __onlyVue27Plus, __onlyVue3, assert, refAutoReset as autoResetRef, bypassFilter, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, hasOwn, identity, watchIgnorable as ignorableWatch, increaseWithUnit, invoke, isBoolean, isClient, isDef, isDefined, isFunction, isIOS, isNumber, isObject, isString, isWindow, makeDestructurable, noop, normalizeDate, now, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchIgnorable, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import Vue from 'vue'\n\nvar isVue2 = true\nvar isVue3 = false\nvar Vue2 = Vue\nvar warn = Vue.util.warn\n\nfunction install() {}\n\n// createApp polyfill\nexport function createApp(rootComponent, rootProps) {\n  var vm\n  var provide = {}\n  var app = {\n    config: Vue.config,\n    use: Vue.use.bind(Vue),\n    mixin: Vue.mixin.bind(Vue),\n    component: Vue.component.bind(Vue),\n    provide: function (key, value) {\n      provide[key] = value\n      return this\n    },\n    directive: function (name, dir) {\n      if (dir) {\n        Vue.directive(name, dir)\n        return app\n      } else {\n        return Vue.directive(name)\n      }\n    },\n    mount: function (el, hydrating) {\n      if (!vm) {\n        vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))\n        vm.$mount(el, hydrating)\n        return vm\n      } else {\n        return vm\n      }\n    },\n    unmount: function () {\n      if (vm) {\n        vm.$destroy()\n        vm = undefined\n      }\n    },\n  }\n  return app\n}\n\nexport { Vue, Vue2, isVue2, isVue3, install, warn }\nexport * from 'vue'\n","import { noop, resolveUnref, isClient, isString, tryOnScopeDispose, tryOnMounted, computedWithControl, promiseTimeout, isFunction, resolveRef, increaseWithUnit, useTimeoutFn, pausableWatch, createEventHook, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, createSingletonPromise, toRefs, containsProp, until, hasOwn, isDef, throttleFilter, useDebounceFn, useThrottleFn, isObject, isNumber, useIntervalFn, clamp, syncRef, objectPick, tryOnUnmounted, isIOS, watchWithFilter, identity } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, unref, watch, getCurrentInstance, customRef, onUpdated, reactive, nextTick, onMounted, markRaw, readonly, getCurrentScope, isVue2, set, del, onBeforeUpdate } from 'vue-demi';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n  let options;\n  if (isRef(optionsOrRef)) {\n    options = {\n      evaluating: optionsOrRef\n    };\n  } else {\n    options = optionsOrRef || {};\n  }\n  const {\n    lazy = false,\n    evaluating = void 0,\n    shallow = false,\n    onError = noop\n  } = options;\n  const started = ref(!lazy);\n  const current = shallow ? shallowRef(initialState) : ref(initialState);\n  let counter = 0;\n  watchEffect(async (onInvalidate) => {\n    if (!started.value)\n      return;\n    counter++;\n    const counterAtBeginning = counter;\n    let hasFinished = false;\n    if (evaluating) {\n      Promise.resolve().then(() => {\n        evaluating.value = true;\n      });\n    }\n    try {\n      const result = await evaluationCallback((cancelCallback) => {\n        onInvalidate(() => {\n          if (evaluating)\n            evaluating.value = false;\n          if (!hasFinished)\n            cancelCallback();\n        });\n      });\n      if (counterAtBeginning === counter)\n        current.value = result;\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (evaluating && counterAtBeginning === counter)\n        evaluating.value = false;\n      hasFinished = true;\n    }\n  });\n  if (lazy) {\n    return computed(() => {\n      started.value = true;\n      return current.value;\n    });\n  } else {\n    return current;\n  }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n  let source = inject(key);\n  if (defaultSource)\n    source = inject(key, defaultSource);\n  if (treatDefaultAsFactory)\n    source = inject(key, defaultSource, treatDefaultAsFactory);\n  if (typeof options === \"function\") {\n    return computed((ctx) => options(source, ctx));\n  } else {\n    return computed({\n      get: (ctx) => options.get(source, ctx),\n      set: options.set\n    });\n  }\n}\n\nconst createUnrefFn = (fn) => {\n  return function(...args) {\n    return fn.apply(this, args.map((i) => unref(i)));\n  };\n};\n\nfunction unrefElement(elRef) {\n  var _a;\n  const plain = resolveUnref(elRef);\n  return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction useEventListener(...args) {\n  let target;\n  let events;\n  let listeners;\n  let options;\n  if (isString(args[0]) || Array.isArray(args[0])) {\n    [events, listeners, options] = args;\n    target = defaultWindow;\n  } else {\n    [target, events, listeners, options] = args;\n  }\n  if (!target)\n    return noop;\n  if (!Array.isArray(events))\n    events = [events];\n  if (!Array.isArray(listeners))\n    listeners = [listeners];\n  const cleanups = [];\n  const cleanup = () => {\n    cleanups.forEach((fn) => fn());\n    cleanups.length = 0;\n  };\n  const register = (el, event, listener) => {\n    el.addEventListener(event, listener, options);\n    return () => el.removeEventListener(event, listener, options);\n  };\n  const stopWatch = watch(() => unrefElement(target), (el) => {\n    cleanup();\n    if (!el)\n      return;\n    cleanups.push(...events.flatMap((event) => {\n      return listeners.map((listener) => register(el, event, listener));\n    }));\n  }, { immediate: true, flush: \"post\" });\n  const stop = () => {\n    stopWatch();\n    cleanup();\n  };\n  tryOnScopeDispose(stop);\n  return stop;\n}\n\nfunction onClickOutside(target, handler, options = {}) {\n  const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n  if (!window)\n    return;\n  let shouldListen = true;\n  let fallback;\n  const shouldIgnore = (event) => {\n    return ignore.some((target2) => {\n      if (typeof target2 === \"string\") {\n        return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n      } else {\n        const el = unrefElement(target2);\n        return el && (event.target === el || event.composedPath().includes(el));\n      }\n    });\n  };\n  const listener = (event) => {\n    window.clearTimeout(fallback);\n    const el = unrefElement(target);\n    if (!el || el === event.target || event.composedPath().includes(el))\n      return;\n    if (event.detail === 0)\n      shouldListen = !shouldIgnore(event);\n    if (!shouldListen) {\n      shouldListen = true;\n      return;\n    }\n    handler(event);\n  };\n  const cleanup = [\n    useEventListener(window, \"click\", listener, { passive: true, capture }),\n    useEventListener(window, \"pointerdown\", (e) => {\n      const el = unrefElement(target);\n      if (el)\n        shouldListen = !e.composedPath().includes(el) && !shouldIgnore(e);\n    }, { passive: true }),\n    useEventListener(window, \"pointerup\", (e) => {\n      if (e.button === 0) {\n        const path = e.composedPath();\n        e.composedPath = () => path;\n        fallback = window.setTimeout(() => listener(e), 50);\n      }\n    }, { passive: true }),\n    detectIframe && useEventListener(window, \"blur\", (event) => {\n      var _a;\n      const el = unrefElement(target);\n      if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement)))\n        handler(event);\n    })\n  ].filter(Boolean);\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nvar __defProp$m = Object.defineProperty;\nvar __defProps$9 = Object.defineProperties;\nvar __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$o = Object.getOwnPropertySymbols;\nvar __hasOwnProp$o = Object.prototype.hasOwnProperty;\nvar __propIsEnum$o = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$m = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$m = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$o.call(b, prop))\n      __defNormalProp$m(a, prop, b[prop]);\n  if (__getOwnPropSymbols$o)\n    for (var prop of __getOwnPropSymbols$o(b)) {\n      if (__propIsEnum$o.call(b, prop))\n        __defNormalProp$m(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));\nconst createKeyPredicate = (keyFilter) => {\n  if (typeof keyFilter === \"function\")\n    return keyFilter;\n  else if (typeof keyFilter === \"string\")\n    return (event) => event.key === keyFilter;\n  else if (Array.isArray(keyFilter))\n    return (event) => keyFilter.includes(event.key);\n  return () => true;\n};\nfunction onKeyStroke(...args) {\n  let key;\n  let handler;\n  let options = {};\n  if (args.length === 3) {\n    key = args[0];\n    handler = args[1];\n    options = args[2];\n  } else if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      key = true;\n      handler = args[0];\n      options = args[1];\n    } else {\n      key = args[0];\n      handler = args[1];\n    }\n  } else {\n    key = true;\n    handler = args[0];\n  }\n  const { target = defaultWindow, eventName = \"keydown\", passive = false } = options;\n  const predicate = createKeyPredicate(key);\n  const listener = (e) => {\n    if (predicate(e))\n      handler(e);\n  };\n  return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n  return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$m({}, options), { eventName: \"keydown\" }));\n}\nfunction onKeyPressed(key, handler, options = {}) {\n  return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$m({}, options), { eventName: \"keypress\" }));\n}\nfunction onKeyUp(key, handler, options = {}) {\n  return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$m({}, options), { eventName: \"keyup\" }));\n}\n\nconst DEFAULT_DELAY = 500;\nfunction onLongPress(target, handler, options) {\n  var _a, _b;\n  const elementRef = computed(() => unrefElement(target));\n  let timeout;\n  function clear() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = void 0;\n    }\n  }\n  function onDown(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    clear();\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    timeout = setTimeout(() => handler(ev), (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY);\n  }\n  const listenerOptions = {\n    capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n    once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n  };\n  useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions);\n  useEventListener(elementRef, \"pointerup\", clear, listenerOptions);\n  useEventListener(elementRef, \"pointerleave\", clear, listenerOptions);\n}\n\nconst isFocusedElementEditable = () => {\n  const { activeElement, body } = document;\n  if (!activeElement)\n    return false;\n  if (activeElement === body)\n    return false;\n  switch (activeElement.tagName) {\n    case \"INPUT\":\n    case \"TEXTAREA\":\n      return true;\n  }\n  return activeElement.hasAttribute(\"contenteditable\");\n};\nconst isTypedCharValid = ({\n  keyCode,\n  metaKey,\n  ctrlKey,\n  altKey\n}) => {\n  if (metaKey || ctrlKey || altKey)\n    return false;\n  if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105)\n    return true;\n  if (keyCode >= 65 && keyCode <= 90)\n    return true;\n  return false;\n};\nfunction onStartTyping(callback, options = {}) {\n  const { document: document2 = defaultDocument } = options;\n  const keydown = (event) => {\n    !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);\n  };\n  if (document2)\n    useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n  const instance = getCurrentInstance();\n  let _trigger = () => {\n  };\n  const element = customRef((track, trigger) => {\n    _trigger = trigger;\n    return {\n      get() {\n        var _a, _b;\n        track();\n        return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n      },\n      set() {\n      }\n    };\n  });\n  tryOnMounted(_trigger);\n  onUpdated(_trigger);\n  return element;\n}\n\nfunction useActiveElement(options = {}) {\n  var _a;\n  const { window = defaultWindow } = options;\n  const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n  const activeElement = computedWithControl(() => null, () => document == null ? void 0 : document.activeElement);\n  if (window) {\n    useEventListener(window, \"blur\", (event) => {\n      if (event.relatedTarget !== null)\n        return;\n      activeElement.trigger();\n    }, true);\n    useEventListener(window, \"focus\", activeElement.trigger, true);\n  }\n  return activeElement;\n}\n\nfunction useAsyncQueue(tasks, options = {}) {\n  const {\n    interrupt = true,\n    onError = noop,\n    onFinished = noop\n  } = options;\n  const promiseState = {\n    pending: \"pending\",\n    rejected: \"rejected\",\n    fulfilled: \"fulfilled\"\n  };\n  const initialResult = Array.from(new Array(tasks.length), () => ({ state: promiseState.pending, data: null }));\n  const result = reactive(initialResult);\n  const activeIndex = ref(-1);\n  if (!tasks || tasks.length === 0) {\n    onFinished();\n    return {\n      activeIndex,\n      result\n    };\n  }\n  function updateResult(state, res) {\n    activeIndex.value++;\n    result[activeIndex.value].data = res;\n    result[activeIndex.value].state = state;\n  }\n  tasks.reduce((prev, curr) => {\n    return prev.then((prevRes) => {\n      var _a;\n      if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n        onFinished();\n        return;\n      }\n      return curr(prevRes).then((currentRes) => {\n        updateResult(promiseState.fulfilled, currentRes);\n        activeIndex.value === tasks.length - 1 && onFinished();\n        return currentRes;\n      });\n    }).catch((e) => {\n      updateResult(promiseState.rejected, e);\n      onError();\n      return e;\n    });\n  }, Promise.resolve());\n  return {\n    activeIndex,\n    result\n  };\n}\n\nfunction useAsyncState(promise, initialState, options) {\n  const {\n    immediate = true,\n    delay = 0,\n    onError = noop,\n    onSuccess = noop,\n    resetOnExecute = true,\n    shallow = true,\n    throwError\n  } = options != null ? options : {};\n  const state = shallow ? shallowRef(initialState) : ref(initialState);\n  const isReady = ref(false);\n  const isLoading = ref(false);\n  const error = ref(void 0);\n  async function execute(delay2 = 0, ...args) {\n    if (resetOnExecute)\n      state.value = initialState;\n    error.value = void 0;\n    isReady.value = false;\n    isLoading.value = true;\n    if (delay2 > 0)\n      await promiseTimeout(delay2);\n    const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n    try {\n      const data = await _promise;\n      state.value = data;\n      isReady.value = true;\n      onSuccess(data);\n    } catch (e) {\n      error.value = e;\n      onError(e);\n      if (throwError)\n        throw error;\n    } finally {\n      isLoading.value = false;\n    }\n    return state.value;\n  }\n  if (immediate)\n    execute(delay);\n  return {\n    state,\n    isReady,\n    isLoading,\n    error,\n    execute\n  };\n}\n\nconst defaults = {\n  array: (v) => JSON.stringify(v),\n  object: (v) => JSON.stringify(v),\n  set: (v) => JSON.stringify(Array.from(v)),\n  map: (v) => JSON.stringify(Object.fromEntries(v)),\n  null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n  if (!target)\n    return defaults.null;\n  if (target instanceof Map)\n    return defaults.map;\n  else if (target instanceof Set)\n    return defaults.set;\n  else if (Array.isArray(target))\n    return defaults.array;\n  else\n    return defaults.object;\n}\n\nfunction useBase64(target, options) {\n  const base64 = ref(\"\");\n  const promise = ref();\n  function execute() {\n    if (!isClient)\n      return;\n    promise.value = new Promise((resolve, reject) => {\n      try {\n        const _target = resolveUnref(target);\n        if (_target == null) {\n          resolve(\"\");\n        } else if (typeof _target === \"string\") {\n          resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n        } else if (_target instanceof Blob) {\n          resolve(blobToBase64(_target));\n        } else if (_target instanceof ArrayBuffer) {\n          resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n        } else if (_target instanceof HTMLCanvasElement) {\n          resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n        } else if (_target instanceof HTMLImageElement) {\n          const img = _target.cloneNode(false);\n          img.crossOrigin = \"Anonymous\";\n          imgLoaded(img).then(() => {\n            const canvas = document.createElement(\"canvas\");\n            const ctx = canvas.getContext(\"2d\");\n            canvas.width = img.width;\n            canvas.height = img.height;\n            ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n            resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n          }).catch(reject);\n        } else if (typeof _target === \"object\") {\n          const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n          const serialized = _serializeFn(_target);\n          return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n        } else {\n          reject(new Error(\"target is unsupported types\"));\n        }\n      } catch (error) {\n        reject(error);\n      }\n    });\n    promise.value.then((res) => base64.value = res);\n    return promise.value;\n  }\n  if (isRef(target) || isFunction(target))\n    watch(target, execute, { immediate: true });\n  else\n    execute();\n  return {\n    base64,\n    promise,\n    execute\n  };\n}\nfunction imgLoaded(img) {\n  return new Promise((resolve, reject) => {\n    if (!img.complete) {\n      img.onload = () => {\n        resolve();\n      };\n      img.onerror = reject;\n    } else {\n      resolve();\n    }\n  });\n}\nfunction blobToBase64(blob) {\n  return new Promise((resolve, reject) => {\n    const fr = new FileReader();\n    fr.onload = (e) => {\n      resolve(e.target.result);\n    };\n    fr.onerror = reject;\n    fr.readAsDataURL(blob);\n  });\n}\n\nfunction useSupported(callback, sync = false) {\n  const isSupported = ref();\n  const update = () => isSupported.value = Boolean(callback());\n  update();\n  tryOnMounted(update, sync);\n  return isSupported;\n}\n\nfunction useBattery({ navigator = defaultNavigator } = {}) {\n  const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n  const isSupported = useSupported(() => navigator && \"getBattery\" in navigator);\n  const charging = ref(false);\n  const chargingTime = ref(0);\n  const dischargingTime = ref(0);\n  const level = ref(1);\n  let battery;\n  function updateBatteryInfo() {\n    charging.value = this.charging;\n    chargingTime.value = this.chargingTime || 0;\n    dischargingTime.value = this.dischargingTime || 0;\n    level.value = this.level;\n  }\n  if (isSupported.value) {\n    navigator.getBattery().then((_battery) => {\n      battery = _battery;\n      updateBatteryInfo.call(battery);\n      for (const event of events)\n        useEventListener(battery, event, updateBatteryInfo, { passive: true });\n    });\n  }\n  return {\n    isSupported,\n    charging,\n    chargingTime,\n    dischargingTime,\n    level\n  };\n}\n\nfunction useBluetooth(options) {\n  let {\n    acceptAllDevices = false\n  } = options || {};\n  const {\n    filters = void 0,\n    optionalServices = void 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n  const device = shallowRef(void 0);\n  const error = shallowRef(null);\n  watch(device, () => {\n    connectToBluetoothGATTServer();\n  });\n  async function requestDevice() {\n    if (!isSupported.value)\n      return;\n    error.value = null;\n    if (filters && filters.length > 0)\n      acceptAllDevices = false;\n    try {\n      device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n        acceptAllDevices,\n        filters,\n        optionalServices\n      }));\n    } catch (err) {\n      error.value = err;\n    }\n  }\n  const server = ref();\n  const isConnected = computed(() => {\n    var _a;\n    return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n  });\n  async function connectToBluetoothGATTServer() {\n    error.value = null;\n    if (device.value && device.value.gatt) {\n      device.value.addEventListener(\"gattserverdisconnected\", () => {\n      });\n      try {\n        server.value = await device.value.gatt.connect();\n      } catch (err) {\n        error.value = err;\n      }\n    }\n  }\n  tryOnMounted(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.connect();\n  });\n  tryOnScopeDispose(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n  });\n  return {\n    isSupported,\n    isConnected,\n    device,\n    requestDevice,\n    server,\n    error\n  };\n}\n\nfunction useMediaQuery(query, options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n  let mediaQuery;\n  const matches = ref(false);\n  const cleanup = () => {\n    if (!mediaQuery)\n      return;\n    if (\"removeEventListener\" in mediaQuery)\n      mediaQuery.removeEventListener(\"change\", update);\n    else\n      mediaQuery.removeListener(update);\n  };\n  const update = () => {\n    if (!isSupported.value)\n      return;\n    cleanup();\n    mediaQuery = window.matchMedia(resolveRef(query).value);\n    matches.value = mediaQuery.matches;\n    if (\"addEventListener\" in mediaQuery)\n      mediaQuery.addEventListener(\"change\", update);\n    else\n      mediaQuery.addListener(update);\n  };\n  watchEffect(update);\n  tryOnScopeDispose(() => cleanup());\n  return matches;\n}\n\nconst breakpointsTailwind = {\n  \"sm\": 640,\n  \"md\": 768,\n  \"lg\": 1024,\n  \"xl\": 1280,\n  \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1400\n};\nconst breakpointsVuetify = {\n  xs: 600,\n  sm: 960,\n  md: 1264,\n  lg: 1904\n};\nconst breakpointsAntDesign = {\n  xs: 480,\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1600\n};\nconst breakpointsQuasar = {\n  xs: 600,\n  sm: 1024,\n  md: 1440,\n  lg: 1920\n};\nconst breakpointsSematic = {\n  mobileS: 320,\n  mobileM: 375,\n  mobileL: 425,\n  tablet: 768,\n  laptop: 1024,\n  laptopL: 1440,\n  desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n  \"3xs\": 360,\n  \"2xs\": 480,\n  \"xs\": 600,\n  \"sm\": 768,\n  \"md\": 1024,\n  \"lg\": 1280,\n  \"xl\": 1440,\n  \"2xl\": 1600,\n  \"3xl\": 1920,\n  \"4xl\": 2560\n};\n\nvar __defProp$l = Object.defineProperty;\nvar __getOwnPropSymbols$n = Object.getOwnPropertySymbols;\nvar __hasOwnProp$n = Object.prototype.hasOwnProperty;\nvar __propIsEnum$n = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$l = (obj, key, value) => key in obj ? __defProp$l(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$l = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$n.call(b, prop))\n      __defNormalProp$l(a, prop, b[prop]);\n  if (__getOwnPropSymbols$n)\n    for (var prop of __getOwnPropSymbols$n(b)) {\n      if (__propIsEnum$n.call(b, prop))\n        __defNormalProp$l(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useBreakpoints(breakpoints, options = {}) {\n  function getValue(k, delta) {\n    let v = breakpoints[k];\n    if (delta != null)\n      v = increaseWithUnit(v, delta);\n    if (typeof v === \"number\")\n      v = `${v}px`;\n    return v;\n  }\n  const { window = defaultWindow } = options;\n  function match(query) {\n    if (!window)\n      return false;\n    return window.matchMedia(query).matches;\n  }\n  const greaterOrEqual = (k) => {\n    return useMediaQuery(`(min-width: ${getValue(k)})`, options);\n  };\n  const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n    Object.defineProperty(shortcuts, k, {\n      get: () => greaterOrEqual(k),\n      enumerable: true,\n      configurable: true\n    });\n    return shortcuts;\n  }, {});\n  return __spreadValues$l({\n    greater(k) {\n      return useMediaQuery(`(min-width: ${getValue(k, 0.1)})`, options);\n    },\n    greaterOrEqual,\n    smaller(k) {\n      return useMediaQuery(`(max-width: ${getValue(k, -0.1)})`, options);\n    },\n    smallerOrEqual(k) {\n      return useMediaQuery(`(max-width: ${getValue(k)})`, options);\n    },\n    between(a, b) {\n      return useMediaQuery(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n    },\n    isGreater(k) {\n      return match(`(min-width: ${getValue(k, 0.1)})`);\n    },\n    isGreaterOrEqual(k) {\n      return match(`(min-width: ${getValue(k)})`);\n    },\n    isSmaller(k) {\n      return match(`(max-width: ${getValue(k, -0.1)})`);\n    },\n    isSmallerOrEqual(k) {\n      return match(`(max-width: ${getValue(k)})`);\n    },\n    isInBetween(a, b) {\n      return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n    }\n  }, shortcutMethods);\n}\n\nconst useBroadcastChannel = (options) => {\n  const {\n    name,\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n  const isClosed = ref(false);\n  const channel = ref();\n  const data = ref();\n  const error = ref(null);\n  const post = (data2) => {\n    if (channel.value)\n      channel.value.postMessage(data2);\n  };\n  const close = () => {\n    if (channel.value)\n      channel.value.close();\n    isClosed.value = true;\n  };\n  if (isSupported.value) {\n    tryOnMounted(() => {\n      error.value = null;\n      channel.value = new BroadcastChannel(name);\n      channel.value.addEventListener(\"message\", (e) => {\n        data.value = e.data;\n      }, { passive: true });\n      channel.value.addEventListener(\"messageerror\", (e) => {\n        error.value = e;\n      }, { passive: true });\n      channel.value.addEventListener(\"close\", () => {\n        isClosed.value = true;\n      });\n    });\n  }\n  tryOnScopeDispose(() => {\n    close();\n  });\n  return {\n    isSupported,\n    channel,\n    data,\n    post,\n    close,\n    error,\n    isClosed\n  };\n};\n\nfunction useBrowserLocation({ window = defaultWindow } = {}) {\n  const buildState = (trigger) => {\n    const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n    const { hash, host, hostname, href, origin, pathname, port, protocol, search } = (window == null ? void 0 : window.location) || {};\n    return {\n      trigger,\n      state: state2,\n      length,\n      hash,\n      host,\n      hostname,\n      href,\n      origin,\n      pathname,\n      port,\n      protocol,\n      search\n    };\n  };\n  const state = ref(buildState(\"load\"));\n  if (window) {\n    useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n    useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n  }\n  return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n  const cachedValue = ref(refValue.value);\n  watch(() => refValue.value, (value) => {\n    if (!comparator(value, cachedValue.value))\n      cachedValue.value = value;\n  }, watchOptions);\n  return cachedValue;\n}\n\nfunction useClipboard(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    read = false,\n    source,\n    copiedDuring = 1500,\n    legacy = false\n  } = options;\n  const events = [\"copy\", \"cut\"];\n  const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n  const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n  const text = ref(\"\");\n  const copied = ref(false);\n  const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n  function updateText() {\n    if (isClipboardApiSupported.value) {\n      navigator.clipboard.readText().then((value) => {\n        text.value = value;\n      });\n    } else {\n      text.value = legacyRead();\n    }\n  }\n  if (isSupported.value && read) {\n    for (const event of events)\n      useEventListener(event, updateText);\n  }\n  async function copy(value = resolveUnref(source)) {\n    if (isSupported.value && value != null) {\n      if (isClipboardApiSupported.value)\n        await navigator.clipboard.writeText(value);\n      else\n        legacyCopy(value);\n      text.value = value;\n      copied.value = true;\n      timeout.start();\n    }\n  }\n  function legacyCopy(value) {\n    const ta = document.createElement(\"textarea\");\n    ta.value = value != null ? value : \"\";\n    ta.style.position = \"absolute\";\n    ta.style.opacity = \"0\";\n    document.body.appendChild(ta);\n    ta.select();\n    document.execCommand(\"copy\");\n    ta.remove();\n  }\n  function legacyRead() {\n    var _a, _b, _c;\n    return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n  }\n  return {\n    isSupported,\n    text,\n    copied,\n    copy\n  };\n}\n\nvar __defProp$k = Object.defineProperty;\nvar __defProps$8 = Object.defineProperties;\nvar __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$m = Object.getOwnPropertySymbols;\nvar __hasOwnProp$m = Object.prototype.hasOwnProperty;\nvar __propIsEnum$m = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$k = (obj, key, value) => key in obj ? __defProp$k(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$k = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$m.call(b, prop))\n      __defNormalProp$k(a, prop, b[prop]);\n  if (__getOwnPropSymbols$m)\n    for (var prop of __getOwnPropSymbols$m(b)) {\n      if (__propIsEnum$m.call(b, prop))\n        __defNormalProp$k(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));\nfunction cloneFnJSON(source) {\n  return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n  const cloned = ref({});\n  const {\n    manual,\n    clone = cloneFnJSON,\n    deep = true,\n    immediate = true\n  } = options;\n  function sync() {\n    cloned.value = clone(unref(source));\n  }\n  if (!manual && isRef(source)) {\n    watch(source, sync, __spreadProps$8(__spreadValues$k({}, options), {\n      deep,\n      immediate\n    }));\n  } else {\n    sync();\n  }\n  return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\n_global[globalKey] = _global[globalKey] || {};\nconst handlers = _global[globalKey];\nfunction getSSRHandler(key, fallback) {\n  return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n  handlers[key] = fn;\n}\n\nfunction guessSerializerType(rawInit) {\n  return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nvar __defProp$j = Object.defineProperty;\nvar __getOwnPropSymbols$l = Object.getOwnPropertySymbols;\nvar __hasOwnProp$l = Object.prototype.hasOwnProperty;\nvar __propIsEnum$l = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$j = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$l.call(b, prop))\n      __defNormalProp$j(a, prop, b[prop]);\n  if (__getOwnPropSymbols$l)\n    for (var prop of __getOwnPropSymbols$l(b)) {\n      if (__propIsEnum$l.call(b, prop))\n        __defNormalProp$j(a, prop, b[prop]);\n    }\n  return a;\n};\nconst StorageSerializers = {\n  boolean: {\n    read: (v) => v === \"true\",\n    write: (v) => String(v)\n  },\n  object: {\n    read: (v) => JSON.parse(v),\n    write: (v) => JSON.stringify(v)\n  },\n  number: {\n    read: (v) => Number.parseFloat(v),\n    write: (v) => String(v)\n  },\n  any: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  string: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  map: {\n    read: (v) => new Map(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v.entries()))\n  },\n  set: {\n    read: (v) => new Set(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v))\n  },\n  date: {\n    read: (v) => new Date(v),\n    write: (v) => v.toISOString()\n  }\n};\nfunction useStorage(key, defaults, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const data = (shallow ? shallowRef : ref)(defaults);\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorage\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  if (!storage)\n    return data;\n  const rawInit = resolveUnref(defaults);\n  const type = guessSerializerType(rawInit);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(data, () => write(data.value), { flush, deep, eventFilter });\n  if (window && listenToStorageChanges)\n    useEventListener(window, \"storage\", update);\n  update();\n  return data;\n  function write(v) {\n    try {\n      if (v == null) {\n        storage.removeItem(key);\n      } else {\n        const serialized = serializer.write(v);\n        const oldValue = storage.getItem(key);\n        if (oldValue !== serialized) {\n          storage.setItem(key, serialized);\n          if (window) {\n            window == null ? void 0 : window.dispatchEvent(new StorageEvent(\"storage\", {\n              key,\n              oldValue,\n              newValue: serialized,\n              storageArea: storage\n            }));\n          }\n        }\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  function read(event) {\n    const rawValue = event ? event.newValue : storage.getItem(key);\n    if (rawValue == null) {\n      if (writeDefaults && rawInit !== null)\n        storage.setItem(key, serializer.write(rawInit));\n      return rawInit;\n    } else if (!event && mergeDefaults) {\n      const value = serializer.read(rawValue);\n      if (isFunction(mergeDefaults))\n        return mergeDefaults(value, rawInit);\n      else if (type === \"object\" && !Array.isArray(value))\n        return __spreadValues$j(__spreadValues$j({}, rawInit), value);\n      return value;\n    } else if (typeof rawValue !== \"string\") {\n      return rawValue;\n    } else {\n      return serializer.read(rawValue);\n    }\n  }\n  function update(event) {\n    if (event && event.storageArea !== storage)\n      return;\n    if (event && event.key == null) {\n      data.value = rawInit;\n      return;\n    }\n    if (event && event.key !== key)\n      return;\n    pauseWatch();\n    try {\n      data.value = read(event);\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (event)\n        nextTick(resumeWatch);\n      else\n        resumeWatch();\n    }\n  }\n}\n\nfunction usePreferredDark(options) {\n  return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nvar __defProp$i = Object.defineProperty;\nvar __getOwnPropSymbols$k = Object.getOwnPropertySymbols;\nvar __hasOwnProp$k = Object.prototype.hasOwnProperty;\nvar __propIsEnum$k = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$i = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$k.call(b, prop))\n      __defNormalProp$i(a, prop, b[prop]);\n  if (__getOwnPropSymbols$k)\n    for (var prop of __getOwnPropSymbols$k(b)) {\n      if (__propIsEnum$k.call(b, prop))\n        __defNormalProp$i(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useColorMode(options = {}) {\n  const {\n    selector = \"html\",\n    attribute = \"class\",\n    initialValue = \"auto\",\n    window = defaultWindow,\n    storage,\n    storageKey = \"vueuse-color-scheme\",\n    listenToStorageChanges = true,\n    storageRef,\n    emitAuto\n  } = options;\n  const modes = __spreadValues$i({\n    auto: \"\",\n    light: \"light\",\n    dark: \"dark\"\n  }, options.modes || {});\n  const preferredDark = usePreferredDark({ window });\n  const preferredMode = computed(() => preferredDark.value ? \"dark\" : \"light\");\n  const store = storageRef || (storageKey == null ? ref(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n  const state = computed({\n    get() {\n      return store.value === \"auto\" && !emitAuto ? preferredMode.value : store.value;\n    },\n    set(v) {\n      store.value = v;\n    }\n  });\n  const updateHTMLAttrs = getSSRHandler(\"updateHTMLAttrs\", (selector2, attribute2, value) => {\n    const el = window == null ? void 0 : window.document.querySelector(selector2);\n    if (!el)\n      return;\n    if (attribute2 === \"class\") {\n      const current = value.split(/\\s/g);\n      Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n        if (current.includes(v))\n          el.classList.add(v);\n        else\n          el.classList.remove(v);\n      });\n    } else {\n      el.setAttribute(attribute2, value);\n    }\n  });\n  function defaultOnChanged(mode) {\n    var _a;\n    const resolvedMode = mode === \"auto\" ? preferredMode.value : mode;\n    updateHTMLAttrs(selector, attribute, (_a = modes[resolvedMode]) != null ? _a : resolvedMode);\n  }\n  function onChanged(mode) {\n    if (options.onChanged)\n      options.onChanged(mode, defaultOnChanged);\n    else\n      defaultOnChanged(mode);\n  }\n  watch(state, onChanged, { flush: \"post\", immediate: true });\n  if (emitAuto)\n    watch(preferredMode, () => onChanged(state.value), { flush: \"post\" });\n  tryOnMounted(() => onChanged(state.value));\n  return state;\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n  const confirmHook = createEventHook();\n  const cancelHook = createEventHook();\n  const revealHook = createEventHook();\n  let _resolve = noop;\n  const reveal = (data) => {\n    revealHook.trigger(data);\n    revealed.value = true;\n    return new Promise((resolve) => {\n      _resolve = resolve;\n    });\n  };\n  const confirm = (data) => {\n    revealed.value = false;\n    confirmHook.trigger(data);\n    _resolve({ data, isCanceled: false });\n  };\n  const cancel = (data) => {\n    revealed.value = false;\n    cancelHook.trigger(data);\n    _resolve({ data, isCanceled: true });\n  };\n  return {\n    isRevealed: computed(() => revealed.value),\n    reveal,\n    confirm,\n    cancel,\n    onReveal: revealHook.on,\n    onConfirm: confirmHook.on,\n    onCancel: cancelHook.on\n  };\n}\n\nfunction useCssVar(prop, target, { window = defaultWindow, initialValue = \"\" } = {}) {\n  const variable = ref(initialValue);\n  const elRef = computed(() => {\n    var _a;\n    return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n  });\n  watch([elRef, () => resolveUnref(prop)], ([el, prop2]) => {\n    var _a;\n    if (el && window) {\n      const value = (_a = window.getComputedStyle(el).getPropertyValue(prop2)) == null ? void 0 : _a.trim();\n      variable.value = value || initialValue;\n    }\n  }, { immediate: true });\n  watch(variable, (val) => {\n    var _a;\n    if ((_a = elRef.value) == null ? void 0 : _a.style)\n      elRef.value.style.setProperty(resolveUnref(prop), val);\n  });\n  return variable;\n}\n\nfunction useCurrentElement() {\n  const vm = getCurrentInstance();\n  const currentElement = computedWithControl(() => null, () => vm.proxy.$el);\n  onUpdated(currentElement.trigger);\n  onMounted(currentElement.trigger);\n  return currentElement;\n}\n\nfunction useCycleList(list, options) {\n  var _a;\n  const state = shallowRef((_a = options == null ? void 0 : options.initialValue) != null ? _a : list[0]);\n  const index = computed({\n    get() {\n      var _a2;\n      let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, list) : list.indexOf(state.value);\n      if (index2 < 0)\n        index2 = (_a2 = options == null ? void 0 : options.fallbackIndex) != null ? _a2 : 0;\n      return index2;\n    },\n    set(v) {\n      set(v);\n    }\n  });\n  function set(i) {\n    const length = list.length;\n    const index2 = (i % length + length) % length;\n    const value = list[index2];\n    state.value = value;\n    return value;\n  }\n  function shift(delta = 1) {\n    return set(index.value + delta);\n  }\n  function next(n = 1) {\n    return shift(n);\n  }\n  function prev(n = 1) {\n    return shift(-n);\n  }\n  return {\n    state,\n    index,\n    next,\n    prev\n  };\n}\n\nvar __defProp$h = Object.defineProperty;\nvar __defProps$7 = Object.defineProperties;\nvar __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$j = Object.getOwnPropertySymbols;\nvar __hasOwnProp$j = Object.prototype.hasOwnProperty;\nvar __propIsEnum$j = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$h = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$j.call(b, prop))\n      __defNormalProp$h(a, prop, b[prop]);\n  if (__getOwnPropSymbols$j)\n    for (var prop of __getOwnPropSymbols$j(b)) {\n      if (__propIsEnum$j.call(b, prop))\n        __defNormalProp$h(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));\nfunction useDark(options = {}) {\n  const {\n    valueDark = \"dark\",\n    valueLight = \"\",\n    window = defaultWindow\n  } = options;\n  const mode = useColorMode(__spreadProps$7(__spreadValues$h({}, options), {\n    onChanged: (mode2, defaultHandler) => {\n      var _a;\n      if (options.onChanged)\n        (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\");\n      else\n        defaultHandler(mode2);\n    },\n    modes: {\n      dark: valueDark,\n      light: valueLight\n    }\n  }));\n  const preferredDark = usePreferredDark({ window });\n  const isDark = computed({\n    get() {\n      return mode.value === \"dark\";\n    },\n    set(v) {\n      if (v === preferredDark.value)\n        mode.value = \"auto\";\n      else\n        mode.value = v ? \"dark\" : \"light\";\n    }\n  });\n  return isDark;\n}\n\nconst fnBypass = (v) => v;\nconst fnSetSource = (source, value) => source.value = value;\nfunction defaultDump(clone) {\n  return clone ? isFunction(clone) ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n  return clone ? isFunction(clone) ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n  const {\n    clone = false,\n    dump = defaultDump(clone),\n    parse = defaultParse(clone),\n    setSource = fnSetSource\n  } = options;\n  function _createHistoryRecord() {\n    return markRaw({\n      snapshot: dump(source.value),\n      timestamp: timestamp()\n    });\n  }\n  const last = ref(_createHistoryRecord());\n  const undoStack = ref([]);\n  const redoStack = ref([]);\n  const _setSource = (record) => {\n    setSource(source, parse(record.snapshot));\n    last.value = record;\n  };\n  const commit = () => {\n    undoStack.value.unshift(last.value);\n    last.value = _createHistoryRecord();\n    if (options.capacity && undoStack.value.length > options.capacity)\n      undoStack.value.splice(options.capacity, Infinity);\n    if (redoStack.value.length)\n      redoStack.value.splice(0, redoStack.value.length);\n  };\n  const clear = () => {\n    undoStack.value.splice(0, undoStack.value.length);\n    redoStack.value.splice(0, redoStack.value.length);\n  };\n  const undo = () => {\n    const state = undoStack.value.shift();\n    if (state) {\n      redoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const redo = () => {\n    const state = redoStack.value.shift();\n    if (state) {\n      undoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const reset = () => {\n    _setSource(last.value);\n  };\n  const history = computed(() => [last.value, ...undoStack.value]);\n  const canUndo = computed(() => undoStack.value.length > 0);\n  const canRedo = computed(() => redoStack.value.length > 0);\n  return {\n    source,\n    undoStack,\n    redoStack,\n    last,\n    history,\n    canUndo,\n    canRedo,\n    clear,\n    commit,\n    reset,\n    undo,\n    redo\n  };\n}\n\nvar __defProp$g = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$i = Object.getOwnPropertySymbols;\nvar __hasOwnProp$i = Object.prototype.hasOwnProperty;\nvar __propIsEnum$i = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$g = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$i.call(b, prop))\n      __defNormalProp$g(a, prop, b[prop]);\n  if (__getOwnPropSymbols$i)\n    for (var prop of __getOwnPropSymbols$i(b)) {\n      if (__propIsEnum$i.call(b, prop))\n        __defNormalProp$g(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction useRefHistory(source, options = {}) {\n  const {\n    deep = false,\n    flush = \"pre\",\n    eventFilter\n  } = options;\n  const {\n    eventFilter: composedFilter,\n    pause,\n    resume: resumeTracking,\n    isActive: isTracking\n  } = pausableFilter(eventFilter);\n  const {\n    ignoreUpdates,\n    ignorePrevAsyncUpdates,\n    stop\n  } = watchIgnorable(source, commit, { deep, flush, eventFilter: composedFilter });\n  function setSource(source2, value) {\n    ignorePrevAsyncUpdates();\n    ignoreUpdates(() => {\n      source2.value = value;\n    });\n  }\n  const manualHistory = useManualRefHistory(source, __spreadProps$6(__spreadValues$g({}, options), { clone: options.clone || deep, setSource }));\n  const { clear, commit: manualCommit } = manualHistory;\n  function commit() {\n    ignorePrevAsyncUpdates();\n    manualCommit();\n  }\n  function resume(commitNow) {\n    resumeTracking();\n    if (commitNow)\n      commit();\n  }\n  function batch(fn) {\n    let canceled = false;\n    const cancel = () => canceled = true;\n    ignoreUpdates(() => {\n      fn(cancel);\n    });\n    if (!canceled)\n      commit();\n  }\n  function dispose() {\n    stop();\n    clear();\n  }\n  return __spreadProps$6(__spreadValues$g({}, manualHistory), {\n    isTracking,\n    pause,\n    resume,\n    commit,\n    batch,\n    dispose\n  });\n}\n\nvar __defProp$f = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$h = Object.getOwnPropertySymbols;\nvar __hasOwnProp$h = Object.prototype.hasOwnProperty;\nvar __propIsEnum$h = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$f = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$h.call(b, prop))\n      __defNormalProp$f(a, prop, b[prop]);\n  if (__getOwnPropSymbols$h)\n    for (var prop of __getOwnPropSymbols$h(b)) {\n      if (__propIsEnum$h.call(b, prop))\n        __defNormalProp$f(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction useDebouncedRefHistory(source, options = {}) {\n  const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n  const history = useRefHistory(source, __spreadProps$5(__spreadValues$f({}, options), { eventFilter: filter }));\n  return __spreadValues$f({}, history);\n}\n\nfunction useDeviceMotion(options = {}) {\n  const {\n    window = defaultWindow,\n    eventFilter = bypassFilter\n  } = options;\n  const acceleration = ref({ x: null, y: null, z: null });\n  const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n  const interval = ref(0);\n  const accelerationIncludingGravity = ref({\n    x: null,\n    y: null,\n    z: null\n  });\n  if (window) {\n    const onDeviceMotion = createFilterWrapper(eventFilter, (event) => {\n      acceleration.value = event.acceleration;\n      accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n      rotationRate.value = event.rotationRate;\n      interval.value = event.interval;\n    });\n    useEventListener(window, \"devicemotion\", onDeviceMotion);\n  }\n  return {\n    acceleration,\n    accelerationIncludingGravity,\n    rotationRate,\n    interval\n  };\n}\n\nfunction useDeviceOrientation(options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n  const isAbsolute = ref(false);\n  const alpha = ref(null);\n  const beta = ref(null);\n  const gamma = ref(null);\n  if (window && isSupported.value) {\n    useEventListener(window, \"deviceorientation\", (event) => {\n      isAbsolute.value = event.absolute;\n      alpha.value = event.alpha;\n      beta.value = event.beta;\n      gamma.value = event.gamma;\n    });\n  }\n  return {\n    isSupported,\n    isAbsolute,\n    alpha,\n    beta,\n    gamma\n  };\n}\n\nfunction useDevicePixelRatio({\n  window = defaultWindow\n} = {}) {\n  if (!window) {\n    return {\n      pixelRatio: ref(1)\n    };\n  }\n  const pixelRatio = ref(1);\n  const cleanups = [];\n  const cleanup = () => {\n    cleanups.map((i) => i());\n    cleanups.length = 0;\n  };\n  const observe = () => {\n    pixelRatio.value = window.devicePixelRatio;\n    cleanup();\n    const media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n    media.addEventListener(\"change\", observe, { once: true });\n    cleanups.push(() => {\n      media.removeEventListener(\"change\", observe);\n    });\n  };\n  observe();\n  tryOnScopeDispose(cleanup);\n  return { pixelRatio };\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n  const {\n    controls = false,\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n  let permissionStatus;\n  const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n  const state = ref();\n  const onChange = () => {\n    if (permissionStatus)\n      state.value = permissionStatus.state;\n  };\n  const query = createSingletonPromise(async () => {\n    if (!isSupported.value)\n      return;\n    if (!permissionStatus) {\n      try {\n        permissionStatus = await navigator.permissions.query(desc);\n        useEventListener(permissionStatus, \"change\", onChange);\n        onChange();\n      } catch (e) {\n        state.value = \"prompt\";\n      }\n    }\n    return permissionStatus;\n  });\n  query();\n  if (controls) {\n    return {\n      state,\n      isSupported,\n      query\n    };\n  } else {\n    return state;\n  }\n}\n\nfunction useDevicesList(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    requestPermissions = false,\n    constraints = { audio: true, video: true },\n    onUpdated\n  } = options;\n  const devices = ref([]);\n  const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n  const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n  const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n  const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n  const permissionGranted = ref(false);\n  async function update() {\n    if (!isSupported.value)\n      return;\n    devices.value = await navigator.mediaDevices.enumerateDevices();\n    onUpdated == null ? void 0 : onUpdated(devices.value);\n  }\n  async function ensurePermissions() {\n    if (!isSupported.value)\n      return false;\n    if (permissionGranted.value)\n      return true;\n    const { state, query } = usePermission(\"camera\", { controls: true });\n    await query();\n    if (state.value !== \"granted\") {\n      const stream = await navigator.mediaDevices.getUserMedia(constraints);\n      stream.getTracks().forEach((t) => t.stop());\n      update();\n      permissionGranted.value = true;\n    } else {\n      permissionGranted.value = true;\n    }\n    return permissionGranted.value;\n  }\n  if (isSupported.value) {\n    if (requestPermissions)\n      ensurePermissions();\n    useEventListener(navigator.mediaDevices, \"devicechange\", update);\n    update();\n  }\n  return {\n    devices,\n    ensurePermissions,\n    permissionGranted,\n    videoInputs,\n    audioInputs,\n    audioOutputs,\n    isSupported\n  };\n}\n\nfunction useDisplayMedia(options = {}) {\n  var _a;\n  const enabled = ref((_a = options.enabled) != null ? _a : false);\n  const video = options.video;\n  const audio = options.audio;\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n  });\n  const constraint = { audio, video };\n  const stream = shallowRef();\n  async function _start() {\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n    return stream.value;\n  }\n  async function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  watch(enabled, (v) => {\n    if (v)\n      _start();\n    else\n      _stop();\n  }, { immediate: true });\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    enabled\n  };\n}\n\nfunction useDocumentVisibility({ document = defaultDocument } = {}) {\n  if (!document)\n    return ref(\"visible\");\n  const visibility = ref(document.visibilityState);\n  useEventListener(document, \"visibilitychange\", () => {\n    visibility.value = document.visibilityState;\n  });\n  return visibility;\n}\n\nvar __defProp$e = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$g = Object.getOwnPropertySymbols;\nvar __hasOwnProp$g = Object.prototype.hasOwnProperty;\nvar __propIsEnum$g = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$e = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$g.call(b, prop))\n      __defNormalProp$e(a, prop, b[prop]);\n  if (__getOwnPropSymbols$g)\n    for (var prop of __getOwnPropSymbols$g(b)) {\n      if (__propIsEnum$g.call(b, prop))\n        __defNormalProp$e(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nfunction useDraggable(target, options = {}) {\n  var _a, _b, _c;\n  const draggingElement = (_a = options.draggingElement) != null ? _a : defaultWindow;\n  const draggingHandle = (_b = options.handle) != null ? _b : target;\n  const position = ref((_c = resolveUnref(options.initialValue)) != null ? _c : { x: 0, y: 0 });\n  const pressedDelta = ref();\n  const filterEvent = (e) => {\n    if (options.pointerTypes)\n      return options.pointerTypes.includes(e.pointerType);\n    return true;\n  };\n  const handleEvent = (e) => {\n    if (resolveUnref(options.preventDefault))\n      e.preventDefault();\n    if (resolveUnref(options.stopPropagation))\n      e.stopPropagation();\n  };\n  const start = (e) => {\n    var _a2;\n    if (!filterEvent(e))\n      return;\n    if (resolveUnref(options.exact) && e.target !== resolveUnref(target))\n      return;\n    const rect = resolveUnref(target).getBoundingClientRect();\n    const pos = {\n      x: e.clientX - rect.left,\n      y: e.clientY - rect.top\n    };\n    if (((_a2 = options.onStart) == null ? void 0 : _a2.call(options, pos, e)) === false)\n      return;\n    pressedDelta.value = pos;\n    handleEvent(e);\n  };\n  const move = (e) => {\n    var _a2;\n    if (!filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    position.value = {\n      x: e.clientX - pressedDelta.value.x,\n      y: e.clientY - pressedDelta.value.y\n    };\n    (_a2 = options.onMove) == null ? void 0 : _a2.call(options, position.value, e);\n    handleEvent(e);\n  };\n  const end = (e) => {\n    var _a2;\n    if (!filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    pressedDelta.value = void 0;\n    (_a2 = options.onEnd) == null ? void 0 : _a2.call(options, position.value, e);\n    handleEvent(e);\n  };\n  if (isClient) {\n    useEventListener(draggingHandle, \"pointerdown\", start, true);\n    useEventListener(draggingElement, \"pointermove\", move, true);\n    useEventListener(draggingElement, \"pointerup\", end, true);\n  }\n  return __spreadProps$4(__spreadValues$e({}, toRefs(position)), {\n    position,\n    isDragging: computed(() => !!pressedDelta.value),\n    style: computed(() => `left:${position.value.x}px;top:${position.value.y}px;`)\n  });\n}\n\nfunction useDropZone(target, onDrop) {\n  const isOverDropZone = ref(false);\n  let counter = 0;\n  if (isClient) {\n    useEventListener(target, \"dragenter\", (event) => {\n      event.preventDefault();\n      counter += 1;\n      isOverDropZone.value = true;\n    });\n    useEventListener(target, \"dragover\", (event) => {\n      event.preventDefault();\n    });\n    useEventListener(target, \"dragleave\", (event) => {\n      event.preventDefault();\n      counter -= 1;\n      if (counter === 0)\n        isOverDropZone.value = false;\n    });\n    useEventListener(target, \"drop\", (event) => {\n      var _a, _b;\n      event.preventDefault();\n      counter = 0;\n      isOverDropZone.value = false;\n      const files = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);\n      onDrop == null ? void 0 : onDrop(files.length === 0 ? null : files);\n    });\n  }\n  return {\n    isOverDropZone\n  };\n}\n\nvar __getOwnPropSymbols$f = Object.getOwnPropertySymbols;\nvar __hasOwnProp$f = Object.prototype.hasOwnProperty;\nvar __propIsEnum$f = Object.prototype.propertyIsEnumerable;\nvar __objRest$2 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$f.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$f)\n    for (var prop of __getOwnPropSymbols$f(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$f.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction useResizeObserver(target, callback, options = {}) {\n  const _a = options, { window = defaultWindow } = _a, observerOptions = __objRest$2(_a, [\"window\"]);\n  let observer;\n  const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const stopWatch = watch(() => unrefElement(target), (el) => {\n    cleanup();\n    if (isSupported.value && window && el) {\n      observer = new ResizeObserver(callback);\n      observer.observe(el, observerOptions);\n    }\n  }, { immediate: true, flush: \"post\" });\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nfunction useElementBounding(target, options = {}) {\n  const {\n    reset = true,\n    windowResize = true,\n    windowScroll = true,\n    immediate = true\n  } = options;\n  const height = ref(0);\n  const bottom = ref(0);\n  const left = ref(0);\n  const right = ref(0);\n  const top = ref(0);\n  const width = ref(0);\n  const x = ref(0);\n  const y = ref(0);\n  function update() {\n    const el = unrefElement(target);\n    if (!el) {\n      if (reset) {\n        height.value = 0;\n        bottom.value = 0;\n        left.value = 0;\n        right.value = 0;\n        top.value = 0;\n        width.value = 0;\n        x.value = 0;\n        y.value = 0;\n      }\n      return;\n    }\n    const rect = el.getBoundingClientRect();\n    height.value = rect.height;\n    bottom.value = rect.bottom;\n    left.value = rect.left;\n    right.value = rect.right;\n    top.value = rect.top;\n    width.value = rect.width;\n    x.value = rect.x;\n    y.value = rect.y;\n  }\n  useResizeObserver(target, update);\n  watch(() => unrefElement(target), (ele) => !ele && update());\n  if (windowScroll)\n    useEventListener(\"scroll\", update, { capture: true, passive: true });\n  if (windowResize)\n    useEventListener(\"resize\", update, { passive: true });\n  tryOnMounted(() => {\n    if (immediate)\n      update();\n  });\n  return {\n    height,\n    bottom,\n    left,\n    right,\n    top,\n    width,\n    x,\n    y,\n    update\n  };\n}\n\nfunction useRafFn(fn, options = {}) {\n  const {\n    immediate = true,\n    window = defaultWindow\n  } = options;\n  const isActive = ref(false);\n  let previousFrameTimestamp = 0;\n  let rafId = null;\n  function loop(timestamp) {\n    if (!isActive.value || !window)\n      return;\n    const delta = timestamp - previousFrameTimestamp;\n    fn({ delta, timestamp });\n    previousFrameTimestamp = timestamp;\n    rafId = window.requestAnimationFrame(loop);\n  }\n  function resume() {\n    if (!isActive.value && window) {\n      isActive.value = true;\n      rafId = window.requestAnimationFrame(loop);\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    if (rafId != null && window) {\n      window.cancelAnimationFrame(rafId);\n      rafId = null;\n    }\n  }\n  if (immediate)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive: readonly(isActive),\n    pause,\n    resume\n  };\n}\n\nvar __defProp$d = Object.defineProperty;\nvar __getOwnPropSymbols$e = Object.getOwnPropertySymbols;\nvar __hasOwnProp$e = Object.prototype.hasOwnProperty;\nvar __propIsEnum$e = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$d = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$e.call(b, prop))\n      __defNormalProp$d(a, prop, b[prop]);\n  if (__getOwnPropSymbols$e)\n    for (var prop of __getOwnPropSymbols$e(b)) {\n      if (__propIsEnum$e.call(b, prop))\n        __defNormalProp$d(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useElementByPoint(options) {\n  const element = ref(null);\n  const { x, y, document = defaultDocument } = options;\n  const controls = useRafFn(() => {\n    element.value = (document == null ? void 0 : document.elementFromPoint(resolveUnref(x), resolveUnref(y))) || null;\n  });\n  return __spreadValues$d({\n    element\n  }, controls);\n}\n\nfunction useElementHover(el) {\n  const isHovered = ref(false);\n  useEventListener(el, \"mouseenter\", () => isHovered.value = true);\n  useEventListener(el, \"mouseleave\", () => isHovered.value = false);\n  return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n  const { window = defaultWindow, box = \"content-box\" } = options;\n  const isSVG = computed(() => {\n    var _a, _b;\n    return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n  });\n  const width = ref(initialSize.width);\n  const height = ref(initialSize.height);\n  useResizeObserver(target, ([entry]) => {\n    const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n    if (window && isSVG.value) {\n      const $elem = unrefElement(target);\n      if ($elem) {\n        const styles = window.getComputedStyle($elem);\n        width.value = parseFloat(styles.width);\n        height.value = parseFloat(styles.height);\n      }\n    } else {\n      if (boxSize) {\n        const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n        width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n        height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n      } else {\n        width.value = entry.contentRect.width;\n        height.value = entry.contentRect.height;\n      }\n    }\n  }, options);\n  watch(() => unrefElement(target), (ele) => {\n    width.value = ele ? initialSize.width : 0;\n    height.value = ele ? initialSize.height : 0;\n  });\n  return {\n    width,\n    height\n  };\n}\n\nfunction useElementVisibility(element, { window = defaultWindow, scrollTarget } = {}) {\n  const elementIsVisible = ref(false);\n  const testBounding = () => {\n    if (!window)\n      return;\n    const document = window.document;\n    const el = unrefElement(element);\n    if (!el) {\n      elementIsVisible.value = false;\n    } else {\n      const rect = el.getBoundingClientRect();\n      elementIsVisible.value = rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.left <= (window.innerWidth || document.documentElement.clientWidth) && rect.bottom >= 0 && rect.right >= 0;\n    }\n  };\n  watch(() => unrefElement(element), () => testBounding(), { immediate: true, flush: \"post\" });\n  if (window) {\n    useEventListener(scrollTarget || window, \"scroll\", testBounding, {\n      capture: false,\n      passive: true\n    });\n  }\n  return elementIsVisible;\n}\n\nconst events = new Map();\n\nfunction useEventBus(key) {\n  const scope = getCurrentScope();\n  function on(listener) {\n    var _a;\n    const listeners = events.get(key) || [];\n    listeners.push(listener);\n    events.set(key, listeners);\n    const _off = () => off(listener);\n    (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n    return _off;\n  }\n  function once(listener) {\n    function _listener(...args) {\n      off(_listener);\n      listener(...args);\n    }\n    return on(_listener);\n  }\n  function off(listener) {\n    const listeners = events.get(key);\n    if (!listeners)\n      return;\n    const index = listeners.indexOf(listener);\n    if (index > -1)\n      listeners.splice(index, 1);\n    if (!listeners.length)\n      events.delete(key);\n  }\n  function reset() {\n    events.delete(key);\n  }\n  function emit(event, payload) {\n    var _a;\n    (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n  }\n  return { on, once, off, emit, reset };\n}\n\nfunction useEventSource(url, events = [], options = {}) {\n  const event = ref(null);\n  const data = ref(null);\n  const status = ref(\"CONNECTING\");\n  const eventSource = ref(null);\n  const error = ref(null);\n  const {\n    withCredentials = false\n  } = options;\n  const close = () => {\n    if (eventSource.value) {\n      eventSource.value.close();\n      eventSource.value = null;\n      status.value = \"CLOSED\";\n    }\n  };\n  const es = new EventSource(url, { withCredentials });\n  eventSource.value = es;\n  es.onopen = () => {\n    status.value = \"OPEN\";\n    error.value = null;\n  };\n  es.onerror = (e) => {\n    status.value = \"CLOSED\";\n    error.value = e;\n  };\n  es.onmessage = (e) => {\n    event.value = null;\n    data.value = e.data;\n  };\n  for (const event_name of events) {\n    useEventListener(es, event_name, (e) => {\n      event.value = event_name;\n      data.value = e.data || null;\n    });\n  }\n  tryOnScopeDispose(() => {\n    close();\n  });\n  return {\n    eventSource,\n    event,\n    data,\n    status,\n    error,\n    close\n  };\n}\n\nfunction useEyeDropper(options = {}) {\n  const { initialValue = \"\" } = options;\n  const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n  const sRGBHex = ref(initialValue);\n  async function open(openOptions) {\n    if (!isSupported.value)\n      return;\n    const eyeDropper = new window.EyeDropper();\n    const result = await eyeDropper.open(openOptions);\n    sRGBHex.value = result.sRGBHex;\n    return result;\n  }\n  return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n  const {\n    baseUrl = \"\",\n    rel = \"icon\",\n    document = defaultDocument\n  } = options;\n  const favicon = resolveRef(newIcon);\n  const applyIcon = (icon) => {\n    document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`).forEach((el) => el.href = `${baseUrl}${icon}`);\n  };\n  watch(favicon, (i, o) => {\n    if (isString(i) && i !== o)\n      applyIcon(i);\n  }, { immediate: true });\n  return favicon;\n}\n\nvar __defProp$c = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$d = Object.getOwnPropertySymbols;\nvar __hasOwnProp$d = Object.prototype.hasOwnProperty;\nvar __propIsEnum$d = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$c = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$d.call(b, prop))\n      __defNormalProp$c(a, prop, b[prop]);\n  if (__getOwnPropSymbols$d)\n    for (var prop of __getOwnPropSymbols$d(b)) {\n      if (__propIsEnum$d.call(b, prop))\n        __defNormalProp$c(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nconst payloadMapping = {\n  json: \"application/json\",\n  text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n  return containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\");\n}\nfunction isAbsoluteURL(url) {\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\nfunction headersToObject(headers) {\n  if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n    return Object.fromEntries([...headers.entries()]);\n  return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n  if (combination === \"overwrite\") {\n    return async (ctx) => {\n      const callback = callbacks[callbacks.length - 1];\n      if (callback !== void 0)\n        await callback(ctx);\n      return ctx;\n    };\n  } else {\n    return async (ctx) => {\n      await callbacks.reduce((prevCallback, callback) => prevCallback.then(async () => {\n        if (callback)\n          ctx = __spreadValues$c(__spreadValues$c({}, ctx), await callback(ctx));\n      }), Promise.resolve());\n      return ctx;\n    };\n  }\n}\nfunction createFetch(config = {}) {\n  const _combination = config.combination || \"chain\";\n  const _options = config.options || {};\n  const _fetchOptions = config.fetchOptions || {};\n  function useFactoryFetch(url, ...args) {\n    const computedUrl = computed(() => {\n      const baseUrl = resolveUnref(config.baseUrl);\n      const targetUrl = resolveUnref(url);\n      return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n    });\n    let options = _options;\n    let fetchOptions = _fetchOptions;\n    if (args.length > 0) {\n      if (isFetchOptions(args[0])) {\n        options = __spreadProps$3(__spreadValues$c(__spreadValues$c({}, options), args[0]), {\n          beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n          afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n          onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n        });\n      } else {\n        fetchOptions = __spreadProps$3(__spreadValues$c(__spreadValues$c({}, fetchOptions), args[0]), {\n          headers: __spreadValues$c(__spreadValues$c({}, headersToObject(fetchOptions.headers) || {}), headersToObject(args[0].headers) || {})\n        });\n      }\n    }\n    if (args.length > 1 && isFetchOptions(args[1])) {\n      options = __spreadProps$3(__spreadValues$c(__spreadValues$c({}, options), args[1]), {\n        beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n        afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n        onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n      });\n    }\n    return useFetch(computedUrl, fetchOptions, options);\n  }\n  return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n  var _a;\n  const supportsAbort = typeof AbortController === \"function\";\n  let fetchOptions = {};\n  let options = { immediate: true, refetch: false, timeout: 0 };\n  const config = {\n    method: \"GET\",\n    type: \"text\",\n    payload: void 0\n  };\n  if (args.length > 0) {\n    if (isFetchOptions(args[0]))\n      options = __spreadValues$c(__spreadValues$c({}, options), args[0]);\n    else\n      fetchOptions = args[0];\n  }\n  if (args.length > 1) {\n    if (isFetchOptions(args[1]))\n      options = __spreadValues$c(__spreadValues$c({}, options), args[1]);\n  }\n  const {\n    fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n    initialData,\n    timeout\n  } = options;\n  const responseEvent = createEventHook();\n  const errorEvent = createEventHook();\n  const finallyEvent = createEventHook();\n  const isFinished = ref(false);\n  const isFetching = ref(false);\n  const aborted = ref(false);\n  const statusCode = ref(null);\n  const response = shallowRef(null);\n  const error = shallowRef(null);\n  const data = shallowRef(initialData);\n  const canAbort = computed(() => supportsAbort && isFetching.value);\n  let controller;\n  let timer;\n  const abort = () => {\n    if (supportsAbort && controller)\n      controller.abort();\n  };\n  const loading = (isLoading) => {\n    isFetching.value = isLoading;\n    isFinished.value = !isLoading;\n  };\n  if (timeout)\n    timer = useTimeoutFn(abort, timeout, { immediate: false });\n  const execute = async (throwOnFailed = false) => {\n    var _a2;\n    loading(true);\n    error.value = null;\n    statusCode.value = null;\n    aborted.value = false;\n    controller = void 0;\n    if (supportsAbort) {\n      controller = new AbortController();\n      controller.signal.onabort = () => aborted.value = true;\n      fetchOptions = __spreadProps$3(__spreadValues$c({}, fetchOptions), {\n        signal: controller.signal\n      });\n    }\n    const defaultFetchOptions = {\n      method: config.method,\n      headers: {}\n    };\n    if (config.payload) {\n      const headers = headersToObject(defaultFetchOptions.headers);\n      if (config.payloadType)\n        headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n      const payload = resolveUnref(config.payload);\n      defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n    }\n    let isCanceled = false;\n    const context = {\n      url: resolveUnref(url),\n      options: __spreadValues$c(__spreadValues$c({}, defaultFetchOptions), fetchOptions),\n      cancel: () => {\n        isCanceled = true;\n      }\n    };\n    if (options.beforeFetch)\n      Object.assign(context, await options.beforeFetch(context));\n    if (isCanceled || !fetch) {\n      loading(false);\n      return Promise.resolve(null);\n    }\n    let responseData = null;\n    if (timer)\n      timer.start();\n    return new Promise((resolve, reject) => {\n      var _a3;\n      fetch(context.url, __spreadProps$3(__spreadValues$c(__spreadValues$c({}, defaultFetchOptions), context.options), {\n        headers: __spreadValues$c(__spreadValues$c({}, headersToObject(defaultFetchOptions.headers)), headersToObject((_a3 = context.options) == null ? void 0 : _a3.headers))\n      })).then(async (fetchResponse) => {\n        response.value = fetchResponse;\n        statusCode.value = fetchResponse.status;\n        responseData = await fetchResponse[config.type]();\n        if (options.afterFetch && statusCode.value >= 200 && statusCode.value < 300)\n          ({ data: responseData } = await options.afterFetch({ data: responseData, response: fetchResponse }));\n        data.value = responseData;\n        if (!fetchResponse.ok)\n          throw new Error(fetchResponse.statusText);\n        responseEvent.trigger(fetchResponse);\n        return resolve(fetchResponse);\n      }).catch(async (fetchError) => {\n        let errorData = fetchError.message || fetchError.name;\n        if (options.onFetchError)\n          ({ data: responseData, error: errorData } = await options.onFetchError({ data: responseData, error: fetchError, response: response.value }));\n        data.value = responseData;\n        error.value = errorData;\n        errorEvent.trigger(fetchError);\n        if (throwOnFailed)\n          return reject(fetchError);\n        return resolve(null);\n      }).finally(() => {\n        loading(false);\n        if (timer)\n          timer.stop();\n        finallyEvent.trigger(null);\n      });\n    });\n  };\n  const refetch = resolveRef(options.refetch);\n  watch([\n    refetch,\n    resolveRef(url)\n  ], ([refetch2]) => refetch2 && execute(), { deep: true });\n  const shell = {\n    isFinished,\n    statusCode,\n    response,\n    error,\n    data,\n    isFetching,\n    canAbort,\n    aborted,\n    abort,\n    execute,\n    onFetchResponse: responseEvent.on,\n    onFetchError: errorEvent.on,\n    onFetchFinally: finallyEvent.on,\n    get: setMethod(\"GET\"),\n    put: setMethod(\"PUT\"),\n    post: setMethod(\"POST\"),\n    delete: setMethod(\"DELETE\"),\n    patch: setMethod(\"PATCH\"),\n    head: setMethod(\"HEAD\"),\n    options: setMethod(\"OPTIONS\"),\n    json: setType(\"json\"),\n    text: setType(\"text\"),\n    blob: setType(\"blob\"),\n    arrayBuffer: setType(\"arrayBuffer\"),\n    formData: setType(\"formData\")\n  };\n  function setMethod(method) {\n    return (payload, payloadType) => {\n      if (!isFetching.value) {\n        config.method = method;\n        config.payload = payload;\n        config.payloadType = payloadType;\n        if (isRef(config.payload)) {\n          watch([\n            refetch,\n            resolveRef(config.payload)\n          ], ([refetch2]) => refetch2 && execute(), { deep: true });\n        }\n        const rawPayload = resolveUnref(config.payload);\n        if (!payloadType && rawPayload && Object.getPrototypeOf(rawPayload) === Object.prototype && !(rawPayload instanceof FormData))\n          config.payloadType = \"json\";\n        return __spreadProps$3(__spreadValues$c({}, shell), {\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        });\n      }\n      return void 0;\n    };\n  }\n  function waitUntilFinished() {\n    return new Promise((resolve, reject) => {\n      until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));\n    });\n  }\n  function setType(type) {\n    return () => {\n      if (!isFetching.value) {\n        config.type = type;\n        return __spreadProps$3(__spreadValues$c({}, shell), {\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        });\n      }\n      return void 0;\n    };\n  }\n  if (options.immediate)\n    setTimeout(execute, 0);\n  return __spreadProps$3(__spreadValues$c({}, shell), {\n    then(onFulfilled, onRejected) {\n      return waitUntilFinished().then(onFulfilled, onRejected);\n    }\n  });\n}\nfunction joinPaths(start, end) {\n  if (!start.endsWith(\"/\") && !end.startsWith(\"/\"))\n    return `${start}/${end}`;\n  return `${start}${end}`;\n}\n\nvar __defProp$b = Object.defineProperty;\nvar __getOwnPropSymbols$c = Object.getOwnPropertySymbols;\nvar __hasOwnProp$c = Object.prototype.hasOwnProperty;\nvar __propIsEnum$c = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$b = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$c.call(b, prop))\n      __defNormalProp$b(a, prop, b[prop]);\n  if (__getOwnPropSymbols$c)\n    for (var prop of __getOwnPropSymbols$c(b)) {\n      if (__propIsEnum$c.call(b, prop))\n        __defNormalProp$b(a, prop, b[prop]);\n    }\n  return a;\n};\nconst DEFAULT_OPTIONS = {\n  multiple: true,\n  accept: \"*\"\n};\nfunction useFileDialog(options = {}) {\n  const {\n    document = defaultDocument\n  } = options;\n  const files = ref(null);\n  let input;\n  if (document) {\n    input = document.createElement(\"input\");\n    input.type = \"file\";\n    input.onchange = (event) => {\n      const result = event.target;\n      files.value = result.files;\n    };\n  }\n  const open = (localOptions) => {\n    if (!input)\n      return;\n    const _options = __spreadValues$b(__spreadValues$b(__spreadValues$b({}, DEFAULT_OPTIONS), options), localOptions);\n    input.multiple = _options.multiple;\n    input.accept = _options.accept;\n    if (hasOwn(_options, \"capture\"))\n      input.capture = _options.capture;\n    input.click();\n  };\n  const reset = () => {\n    files.value = null;\n    if (input)\n      input.value = \"\";\n  };\n  return {\n    files: readonly(files),\n    open,\n    reset\n  };\n}\n\nvar __defProp$a = Object.defineProperty;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$a = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$b.call(b, prop))\n      __defNormalProp$a(a, prop, b[prop]);\n  if (__getOwnPropSymbols$b)\n    for (var prop of __getOwnPropSymbols$b(b)) {\n      if (__propIsEnum$b.call(b, prop))\n        __defNormalProp$a(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useFileSystemAccess(options = {}) {\n  const {\n    window: _window = defaultWindow,\n    dataType = \"Text\"\n  } = unref(options);\n  const window = _window;\n  const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n  const fileHandle = ref();\n  const data = ref();\n  const file = ref();\n  const fileName = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n  });\n  const fileMIME = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n  });\n  const fileSize = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n  });\n  const fileLastModified = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n  });\n  async function open(_options = {}) {\n    if (!isSupported.value)\n      return;\n    const [handle] = await window.showOpenFilePicker(__spreadValues$a(__spreadValues$a({}, unref(options)), _options));\n    fileHandle.value = handle;\n    await updateFile();\n    await updateData();\n  }\n  async function create(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker(__spreadValues$a(__spreadValues$a({}, unref(options)), _options));\n    data.value = void 0;\n    await updateFile();\n    await updateData();\n  }\n  async function save(_options = {}) {\n    if (!isSupported.value)\n      return;\n    if (!fileHandle.value)\n      return saveAs(_options);\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function saveAs(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker(__spreadValues$a(__spreadValues$a({}, unref(options)), _options));\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function updateFile() {\n    var _a;\n    file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n  }\n  async function updateData() {\n    var _a, _b;\n    if (unref(dataType) === \"Text\")\n      data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n    if (unref(dataType) === \"ArrayBuffer\")\n      data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n    if (unref(dataType) === \"Blob\")\n      data.value = file.value;\n  }\n  watch(() => unref(dataType), updateData);\n  return {\n    isSupported,\n    data,\n    file,\n    fileName,\n    fileMIME,\n    fileSize,\n    fileLastModified,\n    open,\n    create,\n    save,\n    saveAs,\n    updateData\n  };\n}\n\nfunction useFocus(target, options = {}) {\n  const { initialValue = false } = options;\n  const activeElement = useActiveElement(options);\n  const targetElement = computed(() => unrefElement(target));\n  const focused = computed({\n    get() {\n      return isDef(activeElement.value) && isDef(targetElement.value) && activeElement.value === targetElement.value;\n    },\n    set(value) {\n      var _a, _b;\n      if (!value && focused.value)\n        (_a = targetElement.value) == null ? void 0 : _a.blur();\n      if (value && !focused.value)\n        (_b = targetElement.value) == null ? void 0 : _b.focus();\n    }\n  });\n  watch(targetElement, () => {\n    focused.value = initialValue;\n  }, { immediate: true, flush: \"post\" });\n  return { focused };\n}\n\nfunction useFocusWithin(target, options = {}) {\n  const activeElement = useActiveElement(options);\n  const targetElement = computed(() => unrefElement(target));\n  const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);\n  return { focused };\n}\n\nfunction useFps(options) {\n  var _a;\n  const fps = ref(0);\n  if (typeof performance === \"undefined\")\n    return fps;\n  const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n  let last = performance.now();\n  let ticks = 0;\n  useRafFn(() => {\n    ticks += 1;\n    if (ticks >= every) {\n      const now = performance.now();\n      const diff = now - last;\n      fps.value = Math.round(1e3 / (diff / ticks));\n      last = now;\n      ticks = 0;\n    }\n  });\n  return fps;\n}\n\nconst functionsMap = [\n  [\n    \"requestFullscreen\",\n    \"exitFullscreen\",\n    \"fullscreenElement\",\n    \"fullscreenEnabled\",\n    \"fullscreenchange\",\n    \"fullscreenerror\"\n  ],\n  [\n    \"webkitRequestFullscreen\",\n    \"webkitExitFullscreen\",\n    \"webkitFullscreenElement\",\n    \"webkitFullscreenEnabled\",\n    \"webkitfullscreenchange\",\n    \"webkitfullscreenerror\"\n  ],\n  [\n    \"webkitRequestFullScreen\",\n    \"webkitCancelFullScreen\",\n    \"webkitCurrentFullScreenElement\",\n    \"webkitCancelFullScreen\",\n    \"webkitfullscreenchange\",\n    \"webkitfullscreenerror\"\n  ],\n  [\n    \"mozRequestFullScreen\",\n    \"mozCancelFullScreen\",\n    \"mozFullScreenElement\",\n    \"mozFullScreenEnabled\",\n    \"mozfullscreenchange\",\n    \"mozfullscreenerror\"\n  ],\n  [\n    \"msRequestFullscreen\",\n    \"msExitFullscreen\",\n    \"msFullscreenElement\",\n    \"msFullscreenEnabled\",\n    \"MSFullscreenChange\",\n    \"MSFullscreenError\"\n  ]\n];\nfunction useFullscreen(target, options = {}) {\n  const { document = defaultDocument, autoExit = false } = options;\n  const targetRef = target || (document == null ? void 0 : document.querySelector(\"html\"));\n  const isFullscreen = ref(false);\n  let map = functionsMap[0];\n  const isSupported = useSupported(() => {\n    if (!document) {\n      return false;\n    } else {\n      for (const m of functionsMap) {\n        if (m[1] in document) {\n          map = m;\n          return true;\n        }\n      }\n    }\n    return false;\n  });\n  const [REQUEST, EXIT, ELEMENT, , EVENT] = map;\n  async function exit() {\n    if (!isSupported.value)\n      return;\n    if (document == null ? void 0 : document[ELEMENT])\n      await document[EXIT]();\n    isFullscreen.value = false;\n  }\n  async function enter() {\n    if (!isSupported.value)\n      return;\n    await exit();\n    const target2 = unrefElement(targetRef);\n    if (target2) {\n      await target2[REQUEST]();\n      isFullscreen.value = true;\n    }\n  }\n  async function toggle() {\n    if (isFullscreen.value)\n      await exit();\n    else\n      await enter();\n  }\n  if (document) {\n    useEventListener(document, EVENT, () => {\n      isFullscreen.value = !!(document == null ? void 0 : document[ELEMENT]);\n    }, false);\n  }\n  if (autoExit)\n    tryOnScopeDispose(exit);\n  return {\n    isSupported,\n    isFullscreen,\n    enter,\n    exit,\n    toggle\n  };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n  return computed(() => {\n    if (gamepad.value) {\n      return {\n        buttons: {\n          a: gamepad.value.buttons[0],\n          b: gamepad.value.buttons[1],\n          x: gamepad.value.buttons[2],\n          y: gamepad.value.buttons[3]\n        },\n        bumper: {\n          left: gamepad.value.buttons[4],\n          right: gamepad.value.buttons[5]\n        },\n        triggers: {\n          left: gamepad.value.buttons[6],\n          right: gamepad.value.buttons[7]\n        },\n        stick: {\n          left: {\n            horizontal: gamepad.value.axes[0],\n            vertical: gamepad.value.axes[1],\n            button: gamepad.value.buttons[10]\n          },\n          right: {\n            horizontal: gamepad.value.axes[2],\n            vertical: gamepad.value.axes[3],\n            button: gamepad.value.buttons[11]\n          }\n        },\n        dpad: {\n          up: gamepad.value.buttons[12],\n          down: gamepad.value.buttons[13],\n          left: gamepad.value.buttons[14],\n          right: gamepad.value.buttons[15]\n        },\n        back: gamepad.value.buttons[8],\n        start: gamepad.value.buttons[9]\n      };\n    }\n    return null;\n  });\n}\nfunction useGamepad(options = {}) {\n  const {\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n  const gamepads = ref([]);\n  const onConnectedHook = createEventHook();\n  const onDisconnectedHook = createEventHook();\n  const stateFromGamepad = (gamepad) => {\n    const hapticActuators = [];\n    const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n    if (vibrationActuator)\n      hapticActuators.push(vibrationActuator);\n    if (gamepad.hapticActuators)\n      hapticActuators.push(...gamepad.hapticActuators);\n    return {\n      id: gamepad.id,\n      hapticActuators,\n      index: gamepad.index,\n      mapping: gamepad.mapping,\n      connected: gamepad.connected,\n      timestamp: gamepad.timestamp,\n      axes: gamepad.axes.map((axes) => axes),\n      buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n    };\n  };\n  const updateGamepadState = () => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    for (let i = 0; i < _gamepads.length; ++i) {\n      const gamepad = _gamepads[i];\n      if (gamepad) {\n        const index = gamepads.value.findIndex(({ index: index2 }) => index2 === gamepad.index);\n        if (index > -1)\n          gamepads.value[index] = stateFromGamepad(gamepad);\n      }\n    }\n  };\n  const { isActive, pause, resume } = useRafFn(updateGamepadState);\n  const onGamepadConnected = (gamepad) => {\n    if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n      gamepads.value.push(stateFromGamepad(gamepad));\n      onConnectedHook.trigger(gamepad.index);\n    }\n    resume();\n  };\n  const onGamepadDisconnected = (gamepad) => {\n    gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n    onDisconnectedHook.trigger(gamepad.index);\n  };\n  useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n  useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n  tryOnMounted(() => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    if (_gamepads) {\n      for (let i = 0; i < _gamepads.length; ++i) {\n        const gamepad = _gamepads[i];\n        if (gamepad)\n          onGamepadConnected(gamepad);\n      }\n    }\n  });\n  pause();\n  return {\n    isSupported,\n    onConnected: onConnectedHook.on,\n    onDisconnected: onDisconnectedHook.on,\n    gamepads,\n    pause,\n    resume,\n    isActive\n  };\n}\n\nfunction useGeolocation(options = {}) {\n  const {\n    enableHighAccuracy = true,\n    maximumAge = 3e4,\n    timeout = 27e3,\n    navigator = defaultNavigator,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n  const locatedAt = ref(null);\n  const error = ref(null);\n  const coords = ref({\n    accuracy: 0,\n    latitude: Infinity,\n    longitude: Infinity,\n    altitude: null,\n    altitudeAccuracy: null,\n    heading: null,\n    speed: null\n  });\n  function updatePosition(position) {\n    locatedAt.value = position.timestamp;\n    coords.value = position.coords;\n    error.value = null;\n  }\n  let watcher;\n  function resume() {\n    if (isSupported.value) {\n      watcher = navigator.geolocation.watchPosition(updatePosition, (err) => error.value = err, {\n        enableHighAccuracy,\n        maximumAge,\n        timeout\n      });\n    }\n  }\n  if (immediate)\n    resume();\n  function pause() {\n    if (watcher && navigator)\n      navigator.geolocation.clearWatch(watcher);\n  }\n  tryOnScopeDispose(() => {\n    pause();\n  });\n  return {\n    isSupported,\n    coords,\n    locatedAt,\n    error,\n    resume,\n    pause\n  };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n  const {\n    initialState = false,\n    listenForVisibilityChange = true,\n    events = defaultEvents$1,\n    window = defaultWindow,\n    eventFilter = throttleFilter(50)\n  } = options;\n  const idle = ref(initialState);\n  const lastActive = ref(timestamp());\n  let timer;\n  const onEvent = createFilterWrapper(eventFilter, () => {\n    idle.value = false;\n    lastActive.value = timestamp();\n    clearTimeout(timer);\n    timer = setTimeout(() => idle.value = true, timeout);\n  });\n  if (window) {\n    const document = window.document;\n    for (const event of events)\n      useEventListener(window, event, onEvent, { passive: true });\n    if (listenForVisibilityChange) {\n      useEventListener(document, \"visibilitychange\", () => {\n        if (!document.hidden)\n          onEvent();\n      });\n    }\n  }\n  timer = setTimeout(() => idle.value = true, timeout);\n  return { idle, lastActive };\n}\n\nvar __defProp$9 = Object.defineProperty;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$a.call(b, prop))\n      __defNormalProp$9(a, prop, b[prop]);\n  if (__getOwnPropSymbols$a)\n    for (var prop of __getOwnPropSymbols$a(b)) {\n      if (__propIsEnum$a.call(b, prop))\n        __defNormalProp$9(a, prop, b[prop]);\n    }\n  return a;\n};\nasync function loadImage(options) {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    const { src, srcset, sizes } = options;\n    img.src = src;\n    if (srcset)\n      img.srcset = srcset;\n    if (sizes)\n      img.sizes = sizes;\n    img.onload = () => resolve(img);\n    img.onerror = reject;\n  });\n}\nconst useImage = (options, asyncStateOptions = {}) => {\n  const state = useAsyncState(() => loadImage(resolveUnref(options)), void 0, __spreadValues$9({\n    resetOnExecute: true\n  }, asyncStateOptions));\n  watch(() => resolveUnref(options), () => state.execute(asyncStateOptions.delay), { deep: true });\n  return state;\n};\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n  const {\n    throttle = 0,\n    idle = 200,\n    onStop = noop,\n    onScroll = noop,\n    offset = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    },\n    eventListenerOptions = {\n      capture: false,\n      passive: true\n    },\n    behavior = \"auto\"\n  } = options;\n  const internalX = ref(0);\n  const internalY = ref(0);\n  const x = computed({\n    get() {\n      return internalX.value;\n    },\n    set(x2) {\n      scrollTo(x2, void 0);\n    }\n  });\n  const y = computed({\n    get() {\n      return internalY.value;\n    },\n    set(y2) {\n      scrollTo(void 0, y2);\n    }\n  });\n  function scrollTo(_x, _y) {\n    var _a, _b, _c;\n    const _element = resolveUnref(element);\n    if (!_element)\n      return;\n    (_c = _element instanceof Document ? document.body : _element) == null ? void 0 : _c.scrollTo({\n      top: (_a = resolveUnref(_y)) != null ? _a : y.value,\n      left: (_b = resolveUnref(_x)) != null ? _b : x.value,\n      behavior: resolveUnref(behavior)\n    });\n  }\n  const isScrolling = ref(false);\n  const arrivedState = reactive({\n    left: true,\n    right: false,\n    top: true,\n    bottom: false\n  });\n  const directions = reactive({\n    left: false,\n    right: false,\n    top: false,\n    bottom: false\n  });\n  const onScrollEnd = useDebounceFn((e) => {\n    isScrolling.value = false;\n    directions.left = false;\n    directions.right = false;\n    directions.top = false;\n    directions.bottom = false;\n    onStop(e);\n  }, throttle + idle);\n  const onScrollHandler = (e) => {\n    const eventTarget = e.target === document ? e.target.documentElement : e.target;\n    const scrollLeft = eventTarget.scrollLeft;\n    directions.left = scrollLeft < internalX.value;\n    directions.right = scrollLeft > internalY.value;\n    arrivedState.left = scrollLeft <= 0 + (offset.left || 0);\n    arrivedState.right = scrollLeft + eventTarget.clientWidth >= eventTarget.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    internalX.value = scrollLeft;\n    let scrollTop = eventTarget.scrollTop;\n    if (e.target === document && !scrollTop)\n      scrollTop = document.body.scrollTop;\n    directions.top = scrollTop < internalY.value;\n    directions.bottom = scrollTop > internalY.value;\n    arrivedState.top = scrollTop <= 0 + (offset.top || 0);\n    arrivedState.bottom = scrollTop + eventTarget.clientHeight >= eventTarget.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    internalY.value = scrollTop;\n    isScrolling.value = true;\n    onScrollEnd(e);\n    onScroll(e);\n  };\n  useEventListener(element, \"scroll\", throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions);\n  return {\n    x,\n    y,\n    isScrolling,\n    arrivedState,\n    directions\n  };\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$9.call(b, prop))\n      __defNormalProp$8(a, prop, b[prop]);\n  if (__getOwnPropSymbols$9)\n    for (var prop of __getOwnPropSymbols$9(b)) {\n      if (__propIsEnum$9.call(b, prop))\n        __defNormalProp$8(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n  var _a, _b;\n  const direction = (_a = options.direction) != null ? _a : \"bottom\";\n  const state = reactive(useScroll(element, __spreadProps$2(__spreadValues$8({}, options), {\n    offset: __spreadValues$8({\n      [direction]: (_b = options.distance) != null ? _b : 0\n    }, options.offset)\n  })));\n  watch(() => state.arrivedState[direction], async (v) => {\n    var _a2, _b2;\n    if (v) {\n      const elem = resolveUnref(element);\n      const previous = {\n        height: (_a2 = elem == null ? void 0 : elem.scrollHeight) != null ? _a2 : 0,\n        width: (_b2 = elem == null ? void 0 : elem.scrollWidth) != null ? _b2 : 0\n      };\n      await onLoadMore(state);\n      if (options.preserveScrollPosition && elem) {\n        nextTick(() => {\n          elem.scrollTo({\n            top: elem.scrollHeight - previous.height,\n            left: elem.scrollWidth - previous.width\n          });\n        });\n      }\n    }\n  });\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n  const {\n    root,\n    rootMargin = \"0px\",\n    threshold = 0.1,\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n  let cleanup = noop;\n  const stopWatch = isSupported.value ? watch(() => ({\n    el: unrefElement(target),\n    root: unrefElement(root)\n  }), ({ el, root: root2 }) => {\n    cleanup();\n    if (!el)\n      return;\n    const observer = new IntersectionObserver(callback, {\n      root: root2,\n      rootMargin,\n      threshold\n    });\n    observer.observe(el);\n    cleanup = () => {\n      observer.disconnect();\n      cleanup = noop;\n    };\n  }, { immediate: true, flush: \"post\" }) : noop;\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n  const {\n    events = defaultEvents,\n    document = defaultDocument,\n    initial = null\n  } = options;\n  const state = ref(initial);\n  if (document) {\n    events.forEach((listenerEvent) => {\n      useEventListener(document, listenerEvent, (evt) => {\n        if (typeof evt.getModifierState === \"function\")\n          state.value = evt.getModifierState(modifier);\n      });\n    });\n  }\n  return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n  ctrl: \"control\",\n  command: \"meta\",\n  cmd: \"meta\",\n  option: \"alt\",\n  up: \"arrowup\",\n  down: \"arrowdown\",\n  left: \"arrowleft\",\n  right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n  const {\n    reactive: useReactive = false,\n    target = defaultWindow,\n    aliasMap = DefaultMagicKeysAliasMap,\n    passive = true,\n    onEventFired = noop\n  } = options;\n  const current = reactive(new Set());\n  const obj = {\n    toJSON() {\n      return {};\n    },\n    current\n  };\n  const refs = useReactive ? reactive(obj) : obj;\n  const metaDeps = new Set();\n  const usedKeys = new Set();\n  function setRefs(key, value) {\n    if (key in refs) {\n      if (useReactive)\n        refs[key] = value;\n      else\n        refs[key].value = value;\n    }\n  }\n  function reset() {\n    current.clear();\n    for (const key of usedKeys)\n      setRefs(key, false);\n  }\n  function updateRefs(e, value) {\n    var _a, _b;\n    const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n    const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n    const values = [code, key].filter(Boolean);\n    if (key) {\n      if (value)\n        current.add(key);\n      else\n        current.delete(key);\n    }\n    for (const key2 of values) {\n      usedKeys.add(key2);\n      setRefs(key2, value);\n    }\n    if (key === \"meta\" && !value) {\n      metaDeps.forEach((key2) => {\n        current.delete(key2);\n        setRefs(key2, false);\n      });\n      metaDeps.clear();\n    } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n      [...current, ...values].forEach((key2) => metaDeps.add(key2));\n    }\n  }\n  useEventListener(target, \"keydown\", (e) => {\n    updateRefs(e, true);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(target, \"keyup\", (e) => {\n    updateRefs(e, false);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(\"blur\", reset, { passive: true });\n  useEventListener(\"focus\", reset, { passive: true });\n  const proxy = new Proxy(refs, {\n    get(target2, prop, rec) {\n      if (typeof prop !== \"string\")\n        return Reflect.get(target2, prop, rec);\n      prop = prop.toLowerCase();\n      if (prop in aliasMap)\n        prop = aliasMap[prop];\n      if (!(prop in refs)) {\n        if (/[+_-]/.test(prop)) {\n          const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n          refs[prop] = computed(() => keys.every((key) => unref(proxy[key])));\n        } else {\n          refs[prop] = ref(false);\n        }\n      }\n      const r = Reflect.get(target2, prop, rec);\n      return useReactive ? unref(r) : r;\n    }\n  });\n  return proxy;\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$8.call(b, prop))\n      __defNormalProp$7(a, prop, b[prop]);\n  if (__getOwnPropSymbols$8)\n    for (var prop of __getOwnPropSymbols$8(b)) {\n      if (__propIsEnum$8.call(b, prop))\n        __defNormalProp$7(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction usingElRef(source, cb) {\n  if (resolveUnref(source))\n    cb(resolveUnref(source));\n}\nfunction timeRangeToArray(timeRanges) {\n  let ranges = [];\n  for (let i = 0; i < timeRanges.length; ++i)\n    ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n  return ranges;\n}\nfunction tracksToArray(tracks) {\n  return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n  src: \"\",\n  tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n  options = __spreadValues$7(__spreadValues$7({}, defaultOptions), options);\n  const {\n    document = defaultDocument\n  } = options;\n  const currentTime = ref(0);\n  const duration = ref(0);\n  const seeking = ref(false);\n  const volume = ref(1);\n  const waiting = ref(false);\n  const ended = ref(false);\n  const playing = ref(false);\n  const rate = ref(1);\n  const stalled = ref(false);\n  const buffered = ref([]);\n  const tracks = ref([]);\n  const selectedTrack = ref(-1);\n  const isPictureInPicture = ref(false);\n  const muted = ref(false);\n  const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n  const sourceErrorEvent = createEventHook();\n  const disableTrack = (track) => {\n    usingElRef(target, (el) => {\n      if (track) {\n        const id = isNumber(track) ? track : track.id;\n        el.textTracks[id].mode = \"disabled\";\n      } else {\n        for (let i = 0; i < el.textTracks.length; ++i)\n          el.textTracks[i].mode = \"disabled\";\n      }\n      selectedTrack.value = -1;\n    });\n  };\n  const enableTrack = (track, disableTracks = true) => {\n    usingElRef(target, (el) => {\n      const id = isNumber(track) ? track : track.id;\n      if (disableTracks)\n        disableTrack();\n      el.textTracks[id].mode = \"showing\";\n      selectedTrack.value = id;\n    });\n  };\n  const togglePictureInPicture = () => {\n    return new Promise((resolve, reject) => {\n      usingElRef(target, async (el) => {\n        if (supportsPictureInPicture) {\n          if (!isPictureInPicture.value) {\n            el.requestPictureInPicture().then(resolve).catch(reject);\n          } else {\n            document.exitPictureInPicture().then(resolve).catch(reject);\n          }\n        }\n      });\n    });\n  };\n  watchEffect(() => {\n    if (!document)\n      return;\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    const src = resolveUnref(options.src);\n    let sources = [];\n    if (!src)\n      return;\n    if (isString(src))\n      sources = [{ src }];\n    else if (Array.isArray(src))\n      sources = src;\n    else if (isObject(src))\n      sources = [src];\n    el.querySelectorAll(\"source\").forEach((e) => {\n      e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n      e.remove();\n    });\n    sources.forEach(({ src: src2, type }) => {\n      const source = document.createElement(\"source\");\n      source.setAttribute(\"src\", src2);\n      source.setAttribute(\"type\", type || \"\");\n      source.addEventListener(\"error\", sourceErrorEvent.trigger);\n      el.appendChild(source);\n    });\n    el.load();\n  });\n  tryOnScopeDispose(() => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n  });\n  watch(volume, (vol) => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    el.volume = vol;\n  });\n  watch(muted, (mute) => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    el.muted = mute;\n  });\n  watch(rate, (rate2) => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    el.playbackRate = rate2;\n  });\n  watchEffect(() => {\n    if (!document)\n      return;\n    const textTracks = resolveUnref(options.tracks);\n    const el = resolveUnref(target);\n    if (!textTracks || !textTracks.length || !el)\n      return;\n    el.querySelectorAll(\"track\").forEach((e) => e.remove());\n    textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n      const track = document.createElement(\"track\");\n      track.default = isDefault || false;\n      track.kind = kind;\n      track.label = label;\n      track.src = src;\n      track.srclang = srcLang;\n      if (track.default)\n        selectedTrack.value = i;\n      el.appendChild(track);\n    });\n  });\n  const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    el.currentTime = time;\n  });\n  const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    isPlaying ? el.play() : el.pause();\n  });\n  useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = resolveUnref(target).currentTime));\n  useEventListener(target, \"durationchange\", () => duration.value = resolveUnref(target).duration);\n  useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(resolveUnref(target).buffered));\n  useEventListener(target, \"seeking\", () => seeking.value = true);\n  useEventListener(target, \"seeked\", () => seeking.value = false);\n  useEventListener(target, \"waiting\", () => waiting.value = true);\n  useEventListener(target, \"playing\", () => {\n    waiting.value = false;\n    ended.value = false;\n  });\n  useEventListener(target, \"ratechange\", () => rate.value = resolveUnref(target).playbackRate);\n  useEventListener(target, \"stalled\", () => stalled.value = true);\n  useEventListener(target, \"ended\", () => ended.value = true);\n  useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n  useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n  useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n  useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n  useEventListener(target, \"volumechange\", () => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    volume.value = el.volume;\n    muted.value = el.muted;\n  });\n  const listeners = [];\n  const stop = watch([target], () => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    stop();\n    listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n    listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n    listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n  });\n  tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n  return {\n    currentTime,\n    duration,\n    waiting,\n    seeking,\n    ended,\n    stalled,\n    buffered,\n    playing,\n    rate,\n    volume,\n    muted,\n    tracks,\n    selectedTrack,\n    enableTrack,\n    disableTrack,\n    supportsPictureInPicture,\n    togglePictureInPicture,\n    isPictureInPicture,\n    onSourceError: sourceErrorEvent.on\n  };\n}\n\nconst getMapVue2Compat = () => {\n  const data = reactive({});\n  return {\n    get: (key) => data[key],\n    set: (key, value) => set(data, key, value),\n    has: (key) => hasOwn(data, key),\n    delete: (key) => del(data, key),\n    clear: () => {\n      Object.keys(data).forEach((key) => {\n        del(data, key);\n      });\n    }\n  };\n};\nfunction useMemoize(resolver, options) {\n  const initCache = () => {\n    if (options == null ? void 0 : options.cache)\n      return reactive(options.cache);\n    if (isVue2)\n      return getMapVue2Compat();\n    return reactive(new Map());\n  };\n  const cache = initCache();\n  const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n  const _loadData = (key, ...args) => {\n    cache.set(key, resolver(...args));\n    return cache.get(key);\n  };\n  const loadData = (...args) => _loadData(generateKey(...args), ...args);\n  const deleteData = (...args) => {\n    cache.delete(generateKey(...args));\n  };\n  const clearData = () => {\n    cache.clear();\n  };\n  const memoized = (...args) => {\n    const key = generateKey(...args);\n    if (cache.has(key))\n      return cache.get(key);\n    return _loadData(key, ...args);\n  };\n  memoized.load = loadData;\n  memoized.delete = deleteData;\n  memoized.clear = clearData;\n  memoized.generateKey = generateKey;\n  memoized.cache = cache;\n  return memoized;\n}\n\nfunction useMemory(options = {}) {\n  const memory = ref();\n  const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n  if (isSupported.value) {\n    const { interval = 1e3 } = options;\n    useIntervalFn(() => {\n      memory.value = performance.memory;\n    }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n  }\n  return { isSupported, memory };\n}\n\nfunction useMounted() {\n  const isMounted = ref(false);\n  onMounted(() => {\n    isMounted.value = true;\n  });\n  return isMounted;\n}\n\nfunction useMouse(options = {}) {\n  const {\n    type = \"page\",\n    touch = true,\n    resetOnTouchEnds = false,\n    initialValue = { x: 0, y: 0 },\n    window = defaultWindow,\n    eventFilter\n  } = options;\n  const x = ref(initialValue.x);\n  const y = ref(initialValue.y);\n  const sourceType = ref(null);\n  const mouseHandler = (event) => {\n    if (type === \"page\") {\n      x.value = event.pageX;\n      y.value = event.pageY;\n    } else if (type === \"client\") {\n      x.value = event.clientX;\n      y.value = event.clientY;\n    } else if (type === \"movement\") {\n      x.value = event.movementX;\n      y.value = event.movementY;\n    }\n    sourceType.value = \"mouse\";\n  };\n  const reset = () => {\n    x.value = initialValue.x;\n    y.value = initialValue.y;\n  };\n  const touchHandler = (event) => {\n    if (event.touches.length > 0) {\n      const touch2 = event.touches[0];\n      if (type === \"page\") {\n        x.value = touch2.pageX;\n        y.value = touch2.pageY;\n      } else if (type === \"client\") {\n        x.value = touch2.clientX;\n        y.value = touch2.clientY;\n      }\n      sourceType.value = \"touch\";\n    }\n  };\n  const mouseHandlerWrapper = (event) => {\n    return eventFilter === void 0 ? mouseHandler(event) : eventFilter(() => mouseHandler(event), {});\n  };\n  const touchHandlerWrapper = (event) => {\n    return eventFilter === void 0 ? touchHandler(event) : eventFilter(() => touchHandler(event), {});\n  };\n  if (window) {\n    useEventListener(window, \"mousemove\", mouseHandlerWrapper, { passive: true });\n    useEventListener(window, \"dragover\", mouseHandlerWrapper, { passive: true });\n    if (touch && type !== \"movement\") {\n      useEventListener(window, \"touchstart\", touchHandlerWrapper, { passive: true });\n      useEventListener(window, \"touchmove\", touchHandlerWrapper, { passive: true });\n      if (resetOnTouchEnds)\n        useEventListener(window, \"touchend\", reset, { passive: true });\n    }\n  }\n  return {\n    x,\n    y,\n    sourceType\n  };\n}\n\nfunction useMouseInElement(target, options = {}) {\n  const {\n    handleOutside = true,\n    window = defaultWindow\n  } = options;\n  const { x, y, sourceType } = useMouse(options);\n  const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n  const elementX = ref(0);\n  const elementY = ref(0);\n  const elementPositionX = ref(0);\n  const elementPositionY = ref(0);\n  const elementHeight = ref(0);\n  const elementWidth = ref(0);\n  const isOutside = ref(true);\n  let stop = () => {\n  };\n  if (window) {\n    stop = watch([targetRef, x, y], () => {\n      const el = unrefElement(targetRef);\n      if (!el)\n        return;\n      const {\n        left,\n        top,\n        width,\n        height\n      } = el.getBoundingClientRect();\n      elementPositionX.value = left + window.pageXOffset;\n      elementPositionY.value = top + window.pageYOffset;\n      elementHeight.value = height;\n      elementWidth.value = width;\n      const elX = x.value - elementPositionX.value;\n      const elY = y.value - elementPositionY.value;\n      isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n      if (handleOutside || !isOutside.value) {\n        elementX.value = elX;\n        elementY.value = elY;\n      }\n    }, { immediate: true });\n    useEventListener(document, \"mouseleave\", () => {\n      isOutside.value = true;\n    });\n  }\n  return {\n    x,\n    y,\n    sourceType,\n    elementX,\n    elementY,\n    elementPositionX,\n    elementPositionY,\n    elementHeight,\n    elementWidth,\n    isOutside,\n    stop\n  };\n}\n\nfunction useMousePressed(options = {}) {\n  const {\n    touch = true,\n    drag = true,\n    initialValue = false,\n    window = defaultWindow\n  } = options;\n  const pressed = ref(initialValue);\n  const sourceType = ref(null);\n  if (!window) {\n    return {\n      pressed,\n      sourceType\n    };\n  }\n  const onPressed = (srcType) => () => {\n    pressed.value = true;\n    sourceType.value = srcType;\n  };\n  const onReleased = () => {\n    pressed.value = false;\n    sourceType.value = null;\n  };\n  const target = computed(() => unrefElement(options.target) || window);\n  useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true });\n  useEventListener(window, \"mouseleave\", onReleased, { passive: true });\n  useEventListener(window, \"mouseup\", onReleased, { passive: true });\n  if (drag) {\n    useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true });\n    useEventListener(window, \"drop\", onReleased, { passive: true });\n    useEventListener(window, \"dragend\", onReleased, { passive: true });\n  }\n  if (touch) {\n    useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true });\n    useEventListener(window, \"touchend\", onReleased, { passive: true });\n    useEventListener(window, \"touchcancel\", onReleased, { passive: true });\n  }\n  return {\n    pressed,\n    sourceType\n  };\n}\n\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __objRest$1 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$7)\n    for (var prop of __getOwnPropSymbols$7(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$7.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction useMutationObserver(target, callback, options = {}) {\n  const _a = options, { window = defaultWindow } = _a, mutationOptions = __objRest$1(_a, [\"window\"]);\n  let observer;\n  const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const stopWatch = watch(() => unrefElement(target), (el) => {\n    cleanup();\n    if (isSupported.value && window && el) {\n      observer = new MutationObserver(callback);\n      observer.observe(el, mutationOptions);\n    }\n  }, { immediate: true });\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nconst useNavigatorLanguage = (options = {}) => {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"language\" in navigator);\n  const language = ref(navigator == null ? void 0 : navigator.language);\n  useEventListener(window, \"languagechange\", () => {\n    if (navigator)\n      language.value = navigator.language;\n  });\n  return {\n    isSupported,\n    language\n  };\n};\n\nfunction useNetwork(options = {}) {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n  const isOnline = ref(true);\n  const saveData = ref(false);\n  const offlineAt = ref(void 0);\n  const onlineAt = ref(void 0);\n  const downlink = ref(void 0);\n  const downlinkMax = ref(void 0);\n  const rtt = ref(void 0);\n  const effectiveType = ref(void 0);\n  const type = ref(\"unknown\");\n  const connection = isSupported.value && navigator.connection;\n  function updateNetworkInformation() {\n    if (!navigator)\n      return;\n    isOnline.value = navigator.onLine;\n    offlineAt.value = isOnline.value ? void 0 : Date.now();\n    onlineAt.value = isOnline.value ? Date.now() : void 0;\n    if (connection) {\n      downlink.value = connection.downlink;\n      downlinkMax.value = connection.downlinkMax;\n      effectiveType.value = connection.effectiveType;\n      rtt.value = connection.rtt;\n      saveData.value = connection.saveData;\n      type.value = connection.type;\n    }\n  }\n  if (window) {\n    useEventListener(window, \"offline\", () => {\n      isOnline.value = false;\n      offlineAt.value = Date.now();\n    });\n    useEventListener(window, \"online\", () => {\n      isOnline.value = true;\n      onlineAt.value = Date.now();\n    });\n  }\n  if (connection)\n    useEventListener(connection, \"change\", updateNetworkInformation, false);\n  updateNetworkInformation();\n  return {\n    isSupported,\n    isOnline,\n    saveData,\n    offlineAt,\n    onlineAt,\n    downlink,\n    downlinkMax,\n    effectiveType,\n    rtt,\n    type\n  };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$6.call(b, prop))\n      __defNormalProp$6(a, prop, b[prop]);\n  if (__getOwnPropSymbols$6)\n    for (var prop of __getOwnPropSymbols$6(b)) {\n      if (__propIsEnum$6.call(b, prop))\n        __defNormalProp$6(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useNow(options = {}) {\n  const {\n    controls: exposeControls = false,\n    interval = \"requestAnimationFrame\"\n  } = options;\n  const now = ref(new Date());\n  const update = () => now.value = new Date();\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n  if (exposeControls) {\n    return __spreadValues$6({\n      now\n    }, controls);\n  } else {\n    return now;\n  }\n}\n\nfunction useObjectUrl(object) {\n  const url = ref();\n  const release = () => {\n    if (url.value)\n      URL.revokeObjectURL(url.value);\n    url.value = void 0;\n  };\n  watch(() => unref(object), (newObject) => {\n    release();\n    if (newObject)\n      url.value = URL.createObjectURL(newObject);\n  }, { immediate: true });\n  tryOnScopeDispose(release);\n  return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n  const _value = ref(value);\n  return computed({\n    get() {\n      return _value.value = clamp(_value.value, resolveUnref(min), resolveUnref(max));\n    },\n    set(value2) {\n      _value.value = clamp(value2, resolveUnref(min), resolveUnref(max));\n    }\n  });\n}\n\nfunction useOffsetPagination(options) {\n  const {\n    total = Infinity,\n    pageSize = 10,\n    page = 1,\n    onPageChange = noop,\n    onPageSizeChange = noop,\n    onPageCountChange = noop\n  } = options;\n  const currentPageSize = useClamp(pageSize, 1, Infinity);\n  const pageCount = computed(() => Math.max(1, Math.ceil(unref(total) / unref(currentPageSize))));\n  const currentPage = useClamp(page, 1, pageCount);\n  const isFirstPage = computed(() => currentPage.value === 1);\n  const isLastPage = computed(() => currentPage.value === pageCount.value);\n  if (isRef(page))\n    syncRef(page, currentPage);\n  if (isRef(pageSize))\n    syncRef(pageSize, currentPageSize);\n  function prev() {\n    currentPage.value--;\n  }\n  function next() {\n    currentPage.value++;\n  }\n  const returnValue = {\n    currentPage,\n    currentPageSize,\n    pageCount,\n    isFirstPage,\n    isLastPage,\n    prev,\n    next\n  };\n  watch(currentPage, () => {\n    onPageChange(reactive(returnValue));\n  });\n  watch(currentPageSize, () => {\n    onPageSizeChange(reactive(returnValue));\n  });\n  watch(pageCount, () => {\n    onPageCountChange(reactive(returnValue));\n  });\n  return returnValue;\n}\n\nfunction useOnline(options = {}) {\n  const { isOnline } = useNetwork(options);\n  return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n  const { window = defaultWindow } = options;\n  const isLeft = ref(false);\n  const handler = (event) => {\n    if (!window)\n      return;\n    event = event || window.event;\n    const from = event.relatedTarget || event.toElement;\n    isLeft.value = !from;\n  };\n  if (window) {\n    useEventListener(window, \"mouseout\", handler, { passive: true });\n    useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n    useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n  }\n  return isLeft;\n}\n\nfunction useParallax(target, options = {}) {\n  const {\n    deviceOrientationTiltAdjust = (i) => i,\n    deviceOrientationRollAdjust = (i) => i,\n    mouseTiltAdjust = (i) => i,\n    mouseRollAdjust = (i) => i,\n    window = defaultWindow\n  } = options;\n  const orientation = reactive(useDeviceOrientation({ window }));\n  const {\n    elementX: x,\n    elementY: y,\n    elementWidth: width,\n    elementHeight: height\n  } = useMouseInElement(target, { handleOutside: false, window });\n  const source = computed(() => {\n    if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0))\n      return \"deviceOrientation\";\n    return \"mouse\";\n  });\n  const roll = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      const value = -orientation.beta / 90;\n      return deviceOrientationRollAdjust(value);\n    } else {\n      const value = -(y.value - height.value / 2) / height.value;\n      return mouseRollAdjust(value);\n    }\n  });\n  const tilt = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      const value = orientation.gamma / 90;\n      return deviceOrientationTiltAdjust(value);\n    } else {\n      const value = (x.value - width.value / 2) / width.value;\n      return mouseTiltAdjust(value);\n    }\n  });\n  return { roll, tilt, source };\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$5.call(b, prop))\n      __defNormalProp$5(a, prop, b[prop]);\n  if (__getOwnPropSymbols$5)\n    for (var prop of __getOwnPropSymbols$5(b)) {\n      if (__propIsEnum$5.call(b, prop))\n        __defNormalProp$5(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nconst defaultState = {\n  x: 0,\n  y: 0,\n  pointerId: 0,\n  pressure: 0,\n  tiltX: 0,\n  tiltY: 0,\n  width: 0,\n  height: 0,\n  twist: 0,\n  pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n  const {\n    target = defaultWindow\n  } = options;\n  const isInside = ref(false);\n  const state = ref(options.initialValue || {});\n  Object.assign(state.value, defaultState, state.value);\n  const handler = (event) => {\n    isInside.value = true;\n    if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n      return;\n    state.value = objectPick(event, keys, false);\n  };\n  if (target) {\n    useEventListener(target, \"pointerdown\", handler, { passive: true });\n    useEventListener(target, \"pointermove\", handler, { passive: true });\n    useEventListener(target, \"pointerleave\", () => isInside.value = false, { passive: true });\n  }\n  return __spreadProps$1(__spreadValues$5({}, toRefs(state)), {\n    isInside\n  });\n}\n\nfunction usePointerLock(target, options = {}) {\n  const { document = defaultDocument, pointerLockOptions } = options;\n  const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n  const element = ref();\n  const triggerElement = ref();\n  let targetElement;\n  if (isSupported.value) {\n    useEventListener(document, \"pointerlockchange\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        element.value = document.pointerLockElement;\n        if (!element.value)\n          targetElement = triggerElement.value = null;\n      }\n    });\n    useEventListener(document, \"pointerlockerror\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        const action = document.pointerLockElement ? \"release\" : \"acquire\";\n        throw new Error(`Failed to ${action} pointer lock.`);\n      }\n    });\n  }\n  async function lock(e, options2) {\n    var _a;\n    if (!isSupported.value)\n      throw new Error(\"Pointer Lock API is not supported by your browser.\");\n    triggerElement.value = e instanceof Event ? e.currentTarget : null;\n    targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n    if (!targetElement)\n      throw new Error(\"Target element undefined.\");\n    targetElement.requestPointerLock(options2 != null ? options2 : pointerLockOptions);\n    return await until(element).toBe(targetElement);\n  }\n  async function unlock() {\n    if (!element.value)\n      return false;\n    document.exitPointerLock();\n    await until(element).toBeNull();\n    return true;\n  }\n  return {\n    isSupported,\n    element,\n    triggerElement,\n    lock,\n    unlock\n  };\n}\n\nvar SwipeDirection;\n(function(SwipeDirection2) {\n  SwipeDirection2[\"UP\"] = \"UP\";\n  SwipeDirection2[\"RIGHT\"] = \"RIGHT\";\n  SwipeDirection2[\"DOWN\"] = \"DOWN\";\n  SwipeDirection2[\"LEFT\"] = \"LEFT\";\n  SwipeDirection2[\"NONE\"] = \"NONE\";\n})(SwipeDirection || (SwipeDirection = {}));\nfunction useSwipe(target, options = {}) {\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart,\n    passive = true,\n    window = defaultWindow\n  } = options;\n  const coordsStart = reactive({ x: 0, y: 0 });\n  const coordsEnd = reactive({ x: 0, y: 0 });\n  const diffX = computed(() => coordsStart.x - coordsEnd.x);\n  const diffY = computed(() => coordsStart.y - coordsEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n  const isSwiping = ref(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return SwipeDirection.NONE;\n    if (abs(diffX.value) > abs(diffY.value)) {\n      return diffX.value > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT;\n    } else {\n      return diffY.value > 0 ? SwipeDirection.UP : SwipeDirection.DOWN;\n    }\n  });\n  const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n  const updateCoordsStart = (x, y) => {\n    coordsStart.x = x;\n    coordsStart.y = y;\n  };\n  const updateCoordsEnd = (x, y) => {\n    coordsEnd.x = x;\n    coordsEnd.y = y;\n  };\n  let listenerOptions;\n  const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n  if (!passive)\n    listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n  else\n    listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n  const onTouchEnd = (e) => {\n    if (isSwiping.value)\n      onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n    isSwiping.value = false;\n  };\n  const stops = [\n    useEventListener(target, \"touchstart\", (e) => {\n      if (listenerOptions.capture && !listenerOptions.passive)\n        e.preventDefault();\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsStart(x, y);\n      updateCoordsEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }, listenerOptions),\n    useEventListener(target, \"touchmove\", (e) => {\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsEnd(x, y);\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }, listenerOptions),\n    useEventListener(target, \"touchend\", onTouchEnd, listenerOptions),\n    useEventListener(target, \"touchcancel\", onTouchEnd, listenerOptions)\n  ];\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isPassiveEventSupported,\n    isSwiping,\n    direction,\n    coordsStart,\n    coordsEnd,\n    lengthX: diffX,\n    lengthY: diffY,\n    stop\n  };\n}\nfunction checkPassiveEventSupport(document) {\n  if (!document)\n    return false;\n  let supportsPassive = false;\n  const optionsBlock = {\n    get passive() {\n      supportsPassive = true;\n      return false;\n    }\n  };\n  document.addEventListener(\"x\", noop, optionsBlock);\n  document.removeEventListener(\"x\", noop);\n  return supportsPassive;\n}\n\nfunction usePointerSwipe(target, options = {}) {\n  const targetRef = resolveRef(target);\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart\n  } = options;\n  const posStart = reactive({ x: 0, y: 0 });\n  const updatePosStart = (x, y) => {\n    posStart.x = x;\n    posStart.y = y;\n  };\n  const posEnd = reactive({ x: 0, y: 0 });\n  const updatePosEnd = (x, y) => {\n    posEnd.x = x;\n    posEnd.y = y;\n  };\n  const distanceX = computed(() => posStart.x - posEnd.x);\n  const distanceY = computed(() => posStart.y - posEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n  const isSwiping = ref(false);\n  const isPointerDown = ref(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return SwipeDirection.NONE;\n    if (abs(distanceX.value) > abs(distanceY.value)) {\n      return distanceX.value > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT;\n    } else {\n      return distanceY.value > 0 ? SwipeDirection.UP : SwipeDirection.DOWN;\n    }\n  });\n  const eventIsAllowed = (e) => {\n    var _a, _b, _c;\n    const isReleasingButton = e.buttons === 0;\n    const isPrimaryButton = e.buttons === 1;\n    return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n  };\n  const stops = [\n    useEventListener(target, \"pointerdown\", (e) => {\n      var _a, _b;\n      if (!eventIsAllowed(e))\n        return;\n      isPointerDown.value = true;\n      (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n      const eventTarget = e.target;\n      eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n      const { clientX: x, clientY: y } = e;\n      updatePosStart(x, y);\n      updatePosEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }),\n    useEventListener(target, \"pointermove\", (e) => {\n      if (!eventIsAllowed(e))\n        return;\n      if (!isPointerDown.value)\n        return;\n      const { clientX: x, clientY: y } = e;\n      updatePosEnd(x, y);\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }),\n    useEventListener(target, \"pointerup\", (e) => {\n      var _a, _b;\n      if (!eventIsAllowed(e))\n        return;\n      if (isSwiping.value)\n        onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n      isPointerDown.value = false;\n      isSwiping.value = false;\n      (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"initial\");\n    })\n  ];\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isSwiping: readonly(isSwiping),\n    direction: readonly(direction),\n    posStart: readonly(posStart),\n    posEnd: readonly(posEnd),\n    distanceX,\n    distanceY,\n    stop\n  };\n}\n\nfunction usePreferredColorScheme(options) {\n  const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n  const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n  return computed(() => {\n    if (isDark.value)\n      return \"dark\";\n    if (isLight.value)\n      return \"light\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredContrast(options) {\n  const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n  const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n  const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n  return computed(() => {\n    if (isMore.value)\n      return \"more\";\n    if (isLess.value)\n      return \"less\";\n    if (isCustom.value)\n      return \"custom\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredLanguages(options = {}) {\n  const { window = defaultWindow } = options;\n  if (!window)\n    return ref([\"en\"]);\n  const navigator = window.navigator;\n  const value = ref(navigator.languages);\n  useEventListener(window, \"languagechange\", () => {\n    value.value = navigator.languages;\n  });\n  return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n  const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n  return computed(() => {\n    if (isReduced.value)\n      return \"reduce\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePrevious(value, initialValue) {\n  const previous = shallowRef(initialValue);\n  watch(resolveRef(value), (_, oldValue) => {\n    previous.value = oldValue;\n  }, { flush: \"sync\" });\n  return readonly(previous);\n}\n\nconst useScreenOrientation = (options = {}) => {\n  const {\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n  const screenOrientation = isSupported.value ? window.screen.orientation : {};\n  const orientation = ref(screenOrientation.type);\n  const angle = ref(screenOrientation.angle || 0);\n  if (isSupported.value) {\n    useEventListener(window, \"orientationchange\", () => {\n      orientation.value = screenOrientation.type;\n      angle.value = screenOrientation.angle;\n    });\n  }\n  const lockOrientation = (type) => {\n    if (!isSupported.value)\n      return Promise.reject(new Error(\"Not supported\"));\n    return screenOrientation.lock(type);\n  };\n  const unlockOrientation = () => {\n    if (isSupported.value)\n      screenOrientation.unlock();\n  };\n  return {\n    isSupported,\n    orientation,\n    angle,\n    lockOrientation,\n    unlockOrientation\n  };\n};\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n  const top = ref(\"\");\n  const right = ref(\"\");\n  const bottom = ref(\"\");\n  const left = ref(\"\");\n  if (isClient) {\n    const topCssVar = useCssVar(topVarName);\n    const rightCssVar = useCssVar(rightVarName);\n    const bottomCssVar = useCssVar(bottomVarName);\n    const leftCssVar = useCssVar(leftVarName);\n    topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n    rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n    bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n    leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n    update();\n    useEventListener(\"resize\", useDebounceFn(update));\n  }\n  function update() {\n    top.value = getValue(topVarName);\n    right.value = getValue(rightVarName);\n    bottom.value = getValue(bottomVarName);\n    left.value = getValue(leftVarName);\n  }\n  return {\n    top,\n    right,\n    bottom,\n    left,\n    update\n  };\n}\nfunction getValue(position) {\n  return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n  const {\n    immediate = true,\n    manual = false,\n    type = \"text/javascript\",\n    async = true,\n    crossOrigin,\n    referrerPolicy,\n    noModule,\n    defer,\n    document = defaultDocument,\n    attrs = {}\n  } = options;\n  const scriptTag = ref(null);\n  let _promise = null;\n  const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n    const resolveWithElement = (el2) => {\n      scriptTag.value = el2;\n      resolve(el2);\n      return el2;\n    };\n    if (!document) {\n      resolve(false);\n      return;\n    }\n    let shouldAppend = false;\n    let el = document.querySelector(`script[src=\"${resolveUnref(src)}\"]`);\n    if (!el) {\n      el = document.createElement(\"script\");\n      el.type = type;\n      el.async = async;\n      el.src = resolveUnref(src);\n      if (defer)\n        el.defer = defer;\n      if (crossOrigin)\n        el.crossOrigin = crossOrigin;\n      if (noModule)\n        el.noModule = noModule;\n      if (referrerPolicy)\n        el.referrerPolicy = referrerPolicy;\n      Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n      shouldAppend = true;\n    } else if (el.hasAttribute(\"data-loaded\")) {\n      resolveWithElement(el);\n    }\n    el.addEventListener(\"error\", (event) => reject(event));\n    el.addEventListener(\"abort\", (event) => reject(event));\n    el.addEventListener(\"load\", () => {\n      el.setAttribute(\"data-loaded\", \"true\");\n      onLoaded(el);\n      resolveWithElement(el);\n    });\n    if (shouldAppend)\n      el = document.head.appendChild(el);\n    if (!waitForScriptLoad)\n      resolveWithElement(el);\n  });\n  const load = (waitForScriptLoad = true) => {\n    if (!_promise)\n      _promise = loadScript(waitForScriptLoad);\n    return _promise;\n  };\n  const unload = () => {\n    if (!document)\n      return;\n    _promise = null;\n    if (scriptTag.value)\n      scriptTag.value = null;\n    const el = document.querySelector(`script[src=\"${resolveUnref(src)}\"]`);\n    if (el)\n      document.head.removeChild(el);\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnUnmounted(unload);\n  return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n  const style = window.getComputedStyle(ele);\n  if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\") {\n    return true;\n  } else {\n    const parent = ele.parentNode;\n    if (!parent || parent.tagName === \"BODY\")\n      return false;\n    return checkOverflowScroll(parent);\n  }\n}\nfunction preventDefault(rawEvent) {\n  const e = rawEvent || window.event;\n  const _target = e.target;\n  if (checkOverflowScroll(_target))\n    return false;\n  if (e.touches.length > 1)\n    return true;\n  if (e.preventDefault)\n    e.preventDefault();\n  return false;\n}\nfunction useScrollLock(element, initialState = false) {\n  const isLocked = ref(initialState);\n  let stopTouchMoveListener = null;\n  let initialOverflow;\n  watch(resolveRef(element), (el) => {\n    if (el) {\n      const ele = el;\n      initialOverflow = ele.style.overflow;\n      if (isLocked.value)\n        ele.style.overflow = \"hidden\";\n    }\n  }, {\n    immediate: true\n  });\n  const lock = () => {\n    const ele = resolveUnref(element);\n    if (!ele || isLocked.value)\n      return;\n    if (isIOS) {\n      stopTouchMoveListener = useEventListener(ele, \"touchmove\", (e) => {\n        preventDefault(e);\n      }, { passive: false });\n    }\n    ele.style.overflow = \"hidden\";\n    isLocked.value = true;\n  };\n  const unlock = () => {\n    const ele = resolveUnref(element);\n    if (!ele || !isLocked.value)\n      return;\n    isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n    ele.style.overflow = initialOverflow;\n    isLocked.value = false;\n  };\n  tryOnScopeDispose(unlock);\n  return computed({\n    get() {\n      return isLocked.value;\n    },\n    set(v) {\n      if (v)\n        lock();\n      else\n        unlock();\n    }\n  });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$4.call(b, prop))\n      __defNormalProp$4(a, prop, b[prop]);\n  if (__getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(b)) {\n      if (__propIsEnum$4.call(b, prop))\n        __defNormalProp$4(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useShare(shareOptions = {}, options = {}) {\n  const { navigator = defaultNavigator } = options;\n  const _navigator = navigator;\n  const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n  const share = async (overrideOptions = {}) => {\n    if (isSupported.value) {\n      const data = __spreadValues$4(__spreadValues$4({}, resolveUnref(shareOptions)), resolveUnref(overrideOptions));\n      let granted = true;\n      if (data.files && _navigator.canShare)\n        granted = _navigator.canShare({ files: data.files });\n      if (granted)\n        return _navigator.share(data);\n    }\n  };\n  return {\n    isSupported,\n    share\n  };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n  var _a, _b, _c, _d;\n  const [source] = args;\n  let compareFn = defaultCompare;\n  let options = {};\n  if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      options = args[1];\n      compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n    } else {\n      compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n    }\n  } else if (args.length > 2) {\n    compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n    options = (_d = args[2]) != null ? _d : {};\n  }\n  const {\n    dirty = false,\n    sortFn = defaultSortFn\n  } = options;\n  if (!dirty)\n    return computed(() => sortFn([...unref(source)], compareFn));\n  watchEffect(() => {\n    const result = sortFn(unref(source), compareFn);\n    if (isRef(source))\n      source.value = result;\n    else\n      source.splice(0, source.length, ...result);\n  });\n  return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n  const {\n    interimResults = true,\n    continuous = true,\n    window = defaultWindow\n  } = options;\n  const lang = resolveRef(options.lang || \"en-US\");\n  const isListening = ref(false);\n  const isFinal = ref(false);\n  const result = ref(\"\");\n  const error = shallowRef(void 0);\n  const toggle = (value = !isListening.value) => {\n    isListening.value = value;\n  };\n  const start = () => {\n    isListening.value = true;\n  };\n  const stop = () => {\n    isListening.value = false;\n  };\n  const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n  const isSupported = useSupported(() => SpeechRecognition);\n  let recognition;\n  if (isSupported.value) {\n    recognition = new SpeechRecognition();\n    recognition.continuous = continuous;\n    recognition.interimResults = interimResults;\n    recognition.lang = unref(lang);\n    recognition.onstart = () => {\n      isFinal.value = false;\n    };\n    watch(lang, (lang2) => {\n      if (recognition && !isListening.value)\n        recognition.lang = lang2;\n    });\n    recognition.onresult = (event) => {\n      const transcript = Array.from(event.results).map((result2) => {\n        isFinal.value = result2.isFinal;\n        return result2[0];\n      }).map((result2) => result2.transcript).join(\"\");\n      result.value = transcript;\n      error.value = void 0;\n    };\n    recognition.onerror = (event) => {\n      error.value = event;\n    };\n    recognition.onend = () => {\n      isListening.value = false;\n      recognition.lang = unref(lang);\n    };\n    watch(isListening, () => {\n      if (isListening.value)\n        recognition.start();\n      else\n        recognition.stop();\n    });\n  }\n  tryOnScopeDispose(() => {\n    isListening.value = false;\n  });\n  return {\n    isSupported,\n    isListening,\n    isFinal,\n    recognition,\n    result,\n    error,\n    toggle,\n    start,\n    stop\n  };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n  const {\n    pitch = 1,\n    rate = 1,\n    volume = 1,\n    window = defaultWindow\n  } = options;\n  const synth = window && window.speechSynthesis;\n  const isSupported = useSupported(() => synth);\n  const isPlaying = ref(false);\n  const status = ref(\"init\");\n  const spokenText = resolveRef(text || \"\");\n  const lang = resolveRef(options.lang || \"en-US\");\n  const error = shallowRef(void 0);\n  const toggle = (value = !isPlaying.value) => {\n    isPlaying.value = value;\n  };\n  const bindEventsForUtterance = (utterance2) => {\n    utterance2.lang = unref(lang);\n    utterance2.voice = unref(options.voice) || null;\n    utterance2.pitch = pitch;\n    utterance2.rate = rate;\n    utterance2.volume = volume;\n    utterance2.onstart = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onpause = () => {\n      isPlaying.value = false;\n      status.value = \"pause\";\n    };\n    utterance2.onresume = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onend = () => {\n      isPlaying.value = false;\n      status.value = \"end\";\n    };\n    utterance2.onerror = (event) => {\n      error.value = event;\n    };\n  };\n  const utterance = computed(() => {\n    isPlaying.value = false;\n    status.value = \"init\";\n    const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n    bindEventsForUtterance(newUtterance);\n    return newUtterance;\n  });\n  const speak = () => {\n    synth.cancel();\n    utterance && synth.speak(utterance.value);\n  };\n  if (isSupported.value) {\n    bindEventsForUtterance(utterance.value);\n    watch(lang, (lang2) => {\n      if (utterance.value && !isPlaying.value)\n        utterance.value.lang = lang2;\n    });\n    if (options.voice) {\n      watch(options.voice, () => {\n        synth.cancel();\n      });\n    }\n    watch(isPlaying, () => {\n      if (isPlaying.value)\n        synth.resume();\n      else\n        synth.pause();\n    });\n  }\n  tryOnScopeDispose(() => {\n    isPlaying.value = false;\n  });\n  return {\n    isSupported,\n    isPlaying,\n    status,\n    utterance,\n    error,\n    toggle,\n    speak\n  };\n}\n\nfunction useStepper(steps, initialStep) {\n  const stepsRef = ref(steps);\n  const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n  const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n  const current = computed(() => at(index.value));\n  const isFirst = computed(() => index.value === 0);\n  const isLast = computed(() => index.value === stepNames.value.length - 1);\n  const next = computed(() => stepNames.value[index.value + 1]);\n  const previous = computed(() => stepNames.value[index.value - 1]);\n  function at(index2) {\n    if (Array.isArray(stepsRef.value))\n      return stepsRef.value[index2];\n    return stepsRef.value[stepNames.value[index2]];\n  }\n  function get(step) {\n    if (!stepNames.value.includes(step))\n      return;\n    return at(stepNames.value.indexOf(step));\n  }\n  function goTo(step) {\n    if (stepNames.value.includes(step))\n      index.value = stepNames.value.indexOf(step);\n  }\n  function goToNext() {\n    if (isLast.value)\n      return;\n    index.value++;\n  }\n  function goToPrevious() {\n    if (isFirst.value)\n      return;\n    index.value--;\n  }\n  function goBackTo(step) {\n    if (isAfter(step))\n      goTo(step);\n  }\n  function isNext(step) {\n    return stepNames.value.indexOf(step) === index.value + 1;\n  }\n  function isPrevious(step) {\n    return stepNames.value.indexOf(step) === index.value - 1;\n  }\n  function isCurrent(step) {\n    return stepNames.value.indexOf(step) === index.value;\n  }\n  function isBefore(step) {\n    return index.value < stepNames.value.indexOf(step);\n  }\n  function isAfter(step) {\n    return index.value > stepNames.value.indexOf(step);\n  }\n  return {\n    steps: stepsRef,\n    stepNames,\n    index,\n    current,\n    next,\n    previous,\n    isFirst,\n    isLast,\n    at,\n    get,\n    goTo,\n    goToNext,\n    goToPrevious,\n    goBackTo,\n    isNext,\n    isPrevious,\n    isCurrent,\n    isBefore,\n    isAfter\n  };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const rawInit = resolveUnref(initialValue);\n  const type = guessSerializerType(rawInit);\n  const data = (shallow ? shallowRef : ref)(initialValue);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorage\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  async function read(event) {\n    if (!storage || event && event.key !== key)\n      return;\n    try {\n      const rawValue = event ? event.newValue : await storage.getItem(key);\n      if (rawValue == null) {\n        data.value = rawInit;\n        if (writeDefaults && rawInit !== null)\n          await storage.setItem(key, await serializer.write(rawInit));\n      } else {\n        data.value = await serializer.read(rawValue);\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  read();\n  if (window && listenToStorageChanges)\n    useEventListener(window, \"storage\", (e) => setTimeout(() => read(e), 0));\n  if (storage) {\n    watchWithFilter(data, async () => {\n      try {\n        if (data.value == null)\n          await storage.removeItem(key);\n        else\n          await storage.setItem(key, await serializer.write(data.value));\n      } catch (e) {\n        onError(e);\n      }\n    }, {\n      flush,\n      deep,\n      eventFilter\n    });\n  }\n  return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n  const isLoaded = ref(false);\n  const {\n    document = defaultDocument,\n    immediate = true,\n    manual = false,\n    id = `vueuse_styletag_${++_id}`\n  } = options;\n  const cssRef = ref(css);\n  let stop = () => {\n  };\n  const load = () => {\n    if (!document)\n      return;\n    const el = document.getElementById(id) || document.createElement(\"style\");\n    if (!el.isConnected) {\n      el.type = \"text/css\";\n      el.id = id;\n      if (options.media)\n        el.media = options.media;\n      document.head.appendChild(el);\n    }\n    if (isLoaded.value)\n      return;\n    stop = watch(cssRef, (value) => {\n      el.textContent = value;\n    }, { immediate: true });\n    isLoaded.value = true;\n  };\n  const unload = () => {\n    if (!document || !isLoaded.value)\n      return;\n    stop();\n    document.head.removeChild(document.getElementById(id));\n    isLoaded.value = false;\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnScopeDispose(unload);\n  return {\n    id,\n    css: cssRef,\n    unload,\n    load,\n    isLoaded: readonly(isLoaded)\n  };\n}\n\nfunction useTemplateRefsList() {\n  const refs = ref([]);\n  refs.value.set = (el) => {\n    if (el)\n      refs.value.push(el);\n  };\n  onBeforeUpdate(() => {\n    refs.value.length = 0;\n  });\n  return refs;\n}\n\nfunction useTextDirection(options = {}) {\n  const {\n    document = defaultDocument,\n    selector = \"html\",\n    observe = false,\n    initialValue = \"ltr\"\n  } = options;\n  function getValue() {\n    var _a, _b;\n    return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n  }\n  const dir = ref(getValue());\n  tryOnMounted(() => dir.value = getValue());\n  if (observe && document) {\n    useMutationObserver(document.querySelector(selector), () => dir.value = getValue(), { attributes: true });\n  }\n  return computed({\n    get() {\n      return dir.value;\n    },\n    set(v) {\n      var _a, _b;\n      dir.value = v;\n      if (!document)\n        return;\n      if (dir.value)\n        (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n      else\n        (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n    }\n  });\n}\n\nfunction getRangesFromSelection(selection) {\n  var _a;\n  const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n  const ranges = new Array(rangeCount);\n  for (let i = 0; i < rangeCount; i++) {\n    const range = selection.getRangeAt(i);\n    ranges[i] = range;\n  }\n  return ranges;\n}\nfunction useTextSelection(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const selection = ref(null);\n  const text = computed(() => {\n    var _a, _b;\n    return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n  });\n  const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n  const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n  function onSelectionChange() {\n    selection.value = null;\n    if (window)\n      selection.value = window.getSelection();\n  }\n  if (window)\n    useEventListener(window.document, \"selectionchange\", onSelectionChange);\n  return {\n    text,\n    rects,\n    ranges,\n    selection\n  };\n}\n\nfunction useTextareaAutosize(options) {\n  const textarea = ref(options == null ? void 0 : options.element);\n  const input = ref(options == null ? void 0 : options.input);\n  function triggerResize() {\n    var _a, _b;\n    if (!textarea.value)\n      return;\n    textarea.value.style.height = \"1px\";\n    textarea.value.style.height = `${(_a = textarea.value) == null ? void 0 : _a.scrollHeight}px`;\n    (_b = options == null ? void 0 : options.onResize) == null ? void 0 : _b.call(options);\n  }\n  watch([input, textarea], triggerResize, { immediate: true });\n  useResizeObserver(textarea, () => triggerResize());\n  if (options == null ? void 0 : options.watch)\n    watch(options.watch, triggerResize, { immediate: true, deep: true });\n  return {\n    textarea,\n    input,\n    triggerResize\n  };\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$3.call(b, prop))\n      __defNormalProp$3(a, prop, b[prop]);\n  if (__getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(b)) {\n      if (__propIsEnum$3.call(b, prop))\n        __defNormalProp$3(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction useThrottledRefHistory(source, options = {}) {\n  const { throttle = 200, trailing = true } = options;\n  const filter = throttleFilter(throttle, trailing);\n  const history = useRefHistory(source, __spreadProps(__spreadValues$3({}, options), { eventFilter: filter }));\n  return __spreadValues$3({}, history);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$2.call(b, prop))\n      __defNormalProp$2(a, prop, b[prop]);\n  if (__getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(b)) {\n      if (__propIsEnum$2.call(b, prop))\n        __defNormalProp$2(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nconst DEFAULT_UNITS = [\n  { max: 6e4, value: 1e3, name: \"second\" },\n  { max: 276e4, value: 6e4, name: \"minute\" },\n  { max: 72e6, value: 36e5, name: \"hour\" },\n  { max: 5184e5, value: 864e5, name: \"day\" },\n  { max: 24192e5, value: 6048e5, name: \"week\" },\n  { max: 28512e6, value: 2592e6, name: \"month\" },\n  { max: Infinity, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n  justNow: \"just now\",\n  past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n  future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n  month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n  year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n  day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n  week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n  hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n  minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n  second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n  invalid: \"\"\n};\nconst DEFAULT_FORMATTER = (date) => date.toISOString().slice(0, 10);\nfunction useTimeAgo(time, options = {}) {\n  const {\n    controls: exposeControls = false,\n    updateInterval = 3e4\n  } = options;\n  const _a = useNow({ interval: updateInterval, controls: true }), { now } = _a, controls = __objRest(_a, [\"now\"]);\n  const timeAgo = computed(() => formatTimeAgo(new Date(resolveUnref(time)), options, unref(now.value)));\n  if (exposeControls) {\n    return __spreadValues$2({\n      timeAgo\n    }, controls);\n  } else {\n    return timeAgo;\n  }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n  var _a;\n  const {\n    max,\n    messages = DEFAULT_MESSAGES,\n    fullDateFormatter = DEFAULT_FORMATTER,\n    units = DEFAULT_UNITS,\n    showSecond = false,\n    rounding = \"round\"\n  } = options;\n  const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n  const diff = +now - +from;\n  const absDiff = Math.abs(diff);\n  function getValue(diff2, unit) {\n    return roundFn(Math.abs(diff2) / unit.value);\n  }\n  function format(diff2, unit) {\n    const val = getValue(diff2, unit);\n    const past = diff2 > 0;\n    const str = applyFormat(unit.name, val, past);\n    return applyFormat(past ? \"past\" : \"future\", str, past);\n  }\n  function applyFormat(name, val, isPast) {\n    const formatter = messages[name];\n    if (typeof formatter === \"function\")\n      return formatter(val, isPast);\n    return formatter.replace(\"{0}\", val.toString());\n  }\n  if (absDiff < 6e4 && !showSecond)\n    return messages.justNow;\n  if (typeof max === \"number\" && absDiff > max)\n    return fullDateFormatter(new Date(from));\n  if (typeof max === \"string\") {\n    const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n    if (unitMax && absDiff > unitMax)\n      return fullDateFormatter(new Date(from));\n  }\n  for (const [idx, unit] of units.entries()) {\n    const val = getValue(diff, unit);\n    if (val <= 0 && units[idx - 1])\n      return format(diff, units[idx - 1]);\n    if (absDiff < unit.max)\n      return format(diff, unit);\n  }\n  return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n  const { start } = useTimeoutFn(loop, interval);\n  const isActive = ref(false);\n  async function loop() {\n    if (!isActive.value)\n      return;\n    await fn();\n    start();\n  }\n  function resume() {\n    if (!isActive.value) {\n      isActive.value = true;\n      loop();\n    }\n  }\n  function pause() {\n    isActive.value = false;\n  }\n  if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$1.call(b, prop))\n      __defNormalProp$1(a, prop, b[prop]);\n  if (__getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(b)) {\n      if (__propIsEnum$1.call(b, prop))\n        __defNormalProp$1(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useTimestamp(options = {}) {\n  const {\n    controls: exposeControls = false,\n    offset = 0,\n    immediate = true,\n    interval = \"requestAnimationFrame\",\n    callback\n  } = options;\n  const ts = ref(timestamp() + offset);\n  const update = () => ts.value = timestamp() + offset;\n  const cb = callback ? () => {\n    update();\n    callback(ts.value);\n  } : update;\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n  if (exposeControls) {\n    return __spreadValues$1({\n      timestamp: ts\n    }, controls);\n  } else {\n    return ts;\n  }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n  var _a, _b;\n  const {\n    document = defaultDocument\n  } = options;\n  const title = resolveRef((_a = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _a : null);\n  const isReadonly = newTitle && isFunction(newTitle);\n  function format(t) {\n    if (!(\"titleTemplate\" in options))\n      return t;\n    const template = options.titleTemplate || \"%s\";\n    return isFunction(template) ? template(t) : unref(template).replace(/%s/g, t);\n  }\n  watch(title, (t, o) => {\n    if (t !== o && document)\n      document.title = format(isString(t) ? t : \"\");\n  }, { immediate: true });\n  if (options.observe && !options.titleTemplate && document && !isReadonly) {\n    useMutationObserver((_b = document.head) == null ? void 0 : _b.querySelector(\"title\"), () => {\n      if (document && document.title !== title.value)\n        title.value = format(document.title);\n    }, { childList: true });\n  }\n  return title;\n}\n\nvar __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nconst _TransitionPresets = {\n  easeInSine: [0.12, 0, 0.39, 0],\n  easeOutSine: [0.61, 1, 0.88, 1],\n  easeInOutSine: [0.37, 0, 0.63, 1],\n  easeInQuad: [0.11, 0, 0.5, 0],\n  easeOutQuad: [0.5, 1, 0.89, 1],\n  easeInOutQuad: [0.45, 0, 0.55, 1],\n  easeInCubic: [0.32, 0, 0.67, 0],\n  easeOutCubic: [0.33, 1, 0.68, 1],\n  easeInOutCubic: [0.65, 0, 0.35, 1],\n  easeInQuart: [0.5, 0, 0.75, 0],\n  easeOutQuart: [0.25, 1, 0.5, 1],\n  easeInOutQuart: [0.76, 0, 0.24, 1],\n  easeInQuint: [0.64, 0, 0.78, 0],\n  easeOutQuint: [0.22, 1, 0.36, 1],\n  easeInOutQuint: [0.83, 0, 0.17, 1],\n  easeInExpo: [0.7, 0, 0.84, 0],\n  easeOutExpo: [0.16, 1, 0.3, 1],\n  easeInOutExpo: [0.87, 0, 0.13, 1],\n  easeInCirc: [0.55, 0, 1, 0.45],\n  easeOutCirc: [0, 0.55, 0.45, 1],\n  easeInOutCirc: [0.85, 0, 0.15, 1],\n  easeInBack: [0.36, 0, 0.66, -0.56],\n  easeOutBack: [0.34, 1.56, 0.64, 1],\n  easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = __spreadValues({\n  linear: identity\n}, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n  const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n  const b = (a1, a2) => 3 * a2 - 6 * a1;\n  const c = (a1) => 3 * a1;\n  const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n  const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n  const getTforX = (x) => {\n    let aGuessT = x;\n    for (let i = 0; i < 4; ++i) {\n      const currentSlope = getSlope(aGuessT, p0, p2);\n      if (currentSlope === 0)\n        return aGuessT;\n      const currentX = calcBezier(aGuessT, p0, p2) - x;\n      aGuessT -= currentX / currentSlope;\n    }\n    return aGuessT;\n  };\n  return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction useTransition(source, options = {}) {\n  const {\n    delay = 0,\n    disabled = false,\n    duration = 1e3,\n    onFinished = noop,\n    onStarted = noop,\n    transition = identity\n  } = options;\n  const currentTransition = computed(() => {\n    const t = unref(transition);\n    return isFunction(t) ? t : createEasingFunction(t);\n  });\n  const sourceValue = computed(() => {\n    const s = unref(source);\n    return isNumber(s) ? s : s.map(unref);\n  });\n  const sourceVector = computed(() => isNumber(sourceValue.value) ? [sourceValue.value] : sourceValue.value);\n  const outputVector = ref(sourceVector.value.slice(0));\n  let currentDuration;\n  let diffVector;\n  let endAt;\n  let startAt;\n  let startVector;\n  const { resume, pause } = useRafFn(() => {\n    const now = Date.now();\n    const progress = clamp(1 - (endAt - now) / currentDuration, 0, 1);\n    outputVector.value = startVector.map((val, i) => {\n      var _a;\n      return val + ((_a = diffVector[i]) != null ? _a : 0) * currentTransition.value(progress);\n    });\n    if (progress >= 1) {\n      pause();\n      onFinished();\n    }\n  }, { immediate: false });\n  const start = () => {\n    pause();\n    currentDuration = unref(duration);\n    diffVector = outputVector.value.map((n, i) => {\n      var _a, _b;\n      return ((_a = sourceVector.value[i]) != null ? _a : 0) - ((_b = outputVector.value[i]) != null ? _b : 0);\n    });\n    startVector = outputVector.value.slice(0);\n    startAt = Date.now();\n    endAt = startAt + currentDuration;\n    resume();\n    onStarted();\n  };\n  const timeout = useTimeoutFn(start, delay, { immediate: false });\n  watch(sourceVector, () => {\n    if (unref(disabled))\n      return;\n    if (unref(delay) <= 0)\n      start();\n    else\n      timeout.start();\n  }, { deep: true });\n  watch(() => unref(disabled), (v) => {\n    if (v) {\n      outputVector.value = sourceVector.value.slice(0);\n      pause();\n    }\n  });\n  return computed(() => {\n    const targetVector = unref(disabled) ? sourceVector : outputVector;\n    return isNumber(sourceValue.value) ? targetVector.value[0] : targetVector.value;\n  });\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n  const {\n    initialValue = {},\n    removeNullishValues = true,\n    removeFalsyValues = false,\n    write: enableWrite = true,\n    window = defaultWindow\n  } = options;\n  if (!window)\n    return reactive(initialValue);\n  const state = reactive({});\n  function getRawParams() {\n    if (mode === \"history\") {\n      return window.location.search || \"\";\n    } else if (mode === \"hash\") {\n      const hash = window.location.hash || \"\";\n      const index = hash.indexOf(\"?\");\n      return index > 0 ? hash.slice(index) : \"\";\n    } else {\n      return (window.location.hash || \"\").replace(/^#/, \"\");\n    }\n  }\n  function constructQuery(params) {\n    const stringified = params.toString();\n    if (mode === \"history\")\n      return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n    if (mode === \"hash-params\")\n      return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n    const hash = window.location.hash || \"#\";\n    const index = hash.indexOf(\"?\");\n    if (index > 0)\n      return `${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n    return `${hash}${stringified ? `?${stringified}` : \"\"}`;\n  }\n  function read() {\n    return new URLSearchParams(getRawParams());\n  }\n  function updateState(params) {\n    const unusedKeys = new Set(Object.keys(state));\n    for (const key of params.keys()) {\n      const paramsForKey = params.getAll(key);\n      state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n      unusedKeys.delete(key);\n    }\n    Array.from(unusedKeys).forEach((key) => delete state[key]);\n  }\n  const { pause, resume } = pausableWatch(state, () => {\n    const params = new URLSearchParams(\"\");\n    Object.keys(state).forEach((key) => {\n      const mapEntry = state[key];\n      if (Array.isArray(mapEntry))\n        mapEntry.forEach((value) => params.append(key, value));\n      else if (removeNullishValues && mapEntry == null)\n        params.delete(key);\n      else if (removeFalsyValues && !mapEntry)\n        params.delete(key);\n      else\n        params.set(key, mapEntry);\n    });\n    write(params);\n  }, { deep: true });\n  function write(params, shouldUpdate) {\n    pause();\n    if (shouldUpdate)\n      updateState(params);\n    window.history.replaceState(window.history.state, window.document.title, window.location.pathname + constructQuery(params));\n    resume();\n  }\n  function onChanged() {\n    if (!enableWrite)\n      return;\n    write(read(), true);\n  }\n  useEventListener(window, \"popstate\", onChanged, false);\n  if (mode !== \"history\")\n    useEventListener(window, \"hashchange\", onChanged, false);\n  const initial = read();\n  if (initial.keys().next().value)\n    updateState(initial);\n  else\n    Object.assign(state, initialValue);\n  return state;\n}\n\nfunction useUserMedia(options = {}) {\n  var _a, _b;\n  const enabled = ref((_a = options.enabled) != null ? _a : false);\n  const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n  const videoDeviceId = ref(options.videoDeviceId);\n  const audioDeviceId = ref(options.audioDeviceId);\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n  });\n  const stream = shallowRef();\n  function getDeviceOptions(device) {\n    if (device.value === \"none\" || device.value === false)\n      return false;\n    if (device.value == null)\n      return true;\n    return {\n      deviceId: device.value\n    };\n  }\n  async function _start() {\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getUserMedia({\n      video: getDeviceOptions(videoDeviceId),\n      audio: getDeviceOptions(audioDeviceId)\n    });\n    return stream.value;\n  }\n  async function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  async function restart() {\n    _stop();\n    return await start();\n  }\n  watch(enabled, (v) => {\n    if (v)\n      _start();\n    else\n      _stop();\n  }, { immediate: true });\n  watch([videoDeviceId, audioDeviceId], () => {\n    if (autoSwitch.value && stream.value)\n      restart();\n  }, { immediate: true });\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    restart,\n    videoDeviceId,\n    audioDeviceId,\n    enabled,\n    autoSwitch\n  };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n  var _a, _b, _c, _d, _e;\n  const {\n    clone = false,\n    passive = false,\n    eventName,\n    deep = false,\n    defaultValue\n  } = options;\n  const vm = getCurrentInstance();\n  const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n  let event = eventName;\n  if (!key) {\n    if (isVue2) {\n      const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;\n      key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n      if (!eventName)\n        event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n    } else {\n      key = \"modelValue\";\n    }\n  }\n  event = eventName || event || `update:${key.toString()}`;\n  const cloneFn = (val) => !clone ? val : isFunction(clone) ? clone(val) : cloneFnJSON(val);\n  const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n  if (passive) {\n    const initialValue = getValue();\n    const proxy = ref(initialValue);\n    watch(() => props[key], (v) => proxy.value = cloneFn(v));\n    watch(proxy, (v) => {\n      if (v !== props[key] || deep)\n        _emit(event, v);\n    }, { deep });\n    return proxy;\n  } else {\n    return computed({\n      get() {\n        return getValue();\n      },\n      set(value) {\n        _emit(event, value);\n      }\n    });\n  }\n}\n\nfunction useVModels(props, emit, options = {}) {\n  const ret = {};\n  for (const key in props)\n    ret[key] = useVModel(props, key, emit, options);\n  return ret;\n}\n\nfunction useVibrate(options) {\n  const {\n    pattern = [],\n    interval = 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n  const patternRef = resolveRef(pattern);\n  let intervalControls;\n  const vibrate = (pattern2 = patternRef.value) => {\n    if (isSupported.value)\n      navigator.vibrate(pattern2);\n  };\n  const stop = () => {\n    if (isSupported.value)\n      navigator.vibrate(0);\n    intervalControls == null ? void 0 : intervalControls.pause();\n  };\n  if (interval > 0) {\n    intervalControls = useIntervalFn(vibrate, interval, {\n      immediate: false,\n      immediateCallback: false\n    });\n  }\n  return {\n    isSupported,\n    pattern,\n    intervalControls,\n    vibrate,\n    stop\n  };\n}\n\nfunction useVirtualList(list, options) {\n  const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n  return {\n    list: currentList,\n    scrollTo,\n    containerProps: {\n      ref: containerRef,\n      onScroll: () => {\n        calculateRange();\n      },\n      style: containerStyle\n    },\n    wrapperProps\n  };\n}\nfunction useVirtualListResources(list) {\n  const containerRef = ref(null);\n  const size = useElementSize(containerRef);\n  const currentList = ref([]);\n  const source = shallowRef(list);\n  const state = ref({ start: 0, end: 10 });\n  return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n  return (containerSize) => {\n    if (typeof itemSize === \"number\")\n      return Math.ceil(containerSize / itemSize);\n    const { start = 0 } = state.value;\n    let sum = 0;\n    let capacity = 0;\n    for (let i = start; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      capacity = i;\n      if (sum > containerSize)\n        break;\n    }\n    return capacity - start;\n  };\n}\nfunction createGetOffset(source, itemSize) {\n  return (scrollDirection) => {\n    if (typeof itemSize === \"number\")\n      return Math.floor(scrollDirection / itemSize) + 1;\n    let sum = 0;\n    let offset = 0;\n    for (let i = 0; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      if (sum >= scrollDirection) {\n        offset = i;\n        break;\n      }\n    }\n    return offset + 1;\n  };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n  return () => {\n    const element = containerRef.value;\n    if (element) {\n      const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n      const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n      const from = offset - overscan;\n      const to = offset + viewCapacity + overscan;\n      state.value = {\n        start: from < 0 ? 0 : from,\n        end: to > source.value.length ? source.value.length : to\n      };\n      currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n        data: ele,\n        index: index + state.value.start\n      }));\n    }\n  };\n}\nfunction createGetDistance(itemSize, source) {\n  return (index) => {\n    if (typeof itemSize === \"number\") {\n      const size2 = index * itemSize;\n      return size2;\n    }\n    const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n    return size;\n  };\n}\nfunction useWatchForSizes(size, list, calculateRange) {\n  watch([size.width, size.height, list], () => {\n    calculateRange();\n  });\n}\nfunction createComputedTotalSize(itemSize, source) {\n  return computed(() => {\n    if (typeof itemSize === \"number\")\n      return source.value.length * itemSize;\n    return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n  });\n}\nconst scrollToDictionaryForElementScrollKey = {\n  horizontal: \"scrollLeft\",\n  vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n  return (index) => {\n    if (containerRef.value) {\n      containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n      calculateRange();\n    }\n  };\n}\nfunction useHorizontalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowX: \"auto\" };\n  const { itemWidth, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n  const getOffset = createGetOffset(source, itemWidth);\n  const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceLeft = createGetDistance(itemWidth, source);\n  const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n  const totalWidth = createComputedTotalSize(itemWidth, source);\n  useWatchForSizes(size, list, calculateRange);\n  const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        height: \"100%\",\n        width: `${totalWidth.value - offsetLeft.value}px`,\n        marginLeft: `${offsetLeft.value}px`,\n        display: \"flex\"\n      }\n    };\n  });\n  return {\n    scrollTo,\n    calculateRange,\n    wrapperProps,\n    containerStyle,\n    currentList,\n    containerRef\n  };\n}\nfunction useVerticalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowY: \"auto\" };\n  const { itemHeight, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n  const getOffset = createGetOffset(source, itemHeight);\n  const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceTop = createGetDistance(itemHeight, source);\n  const offsetTop = computed(() => getDistanceTop(state.value.start));\n  const totalHeight = createComputedTotalSize(itemHeight, source);\n  useWatchForSizes(size, list, calculateRange);\n  const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        width: \"100%\",\n        height: `${totalHeight.value - offsetTop.value}px`,\n        marginTop: `${offsetTop.value}px`\n      }\n    };\n  });\n  return {\n    calculateRange,\n    scrollTo,\n    containerStyle,\n    wrapperProps,\n    currentList,\n    containerRef\n  };\n}\n\nconst useWakeLock = (options = {}) => {\n  const {\n    navigator = defaultNavigator,\n    document = defaultDocument\n  } = options;\n  let wakeLock;\n  const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n  const isActive = ref(false);\n  async function onVisibilityChange() {\n    if (!isSupported.value || !wakeLock)\n      return;\n    if (document && document.visibilityState === \"visible\")\n      wakeLock = await navigator.wakeLock.request(\"screen\");\n    isActive.value = !wakeLock.released;\n  }\n  if (document)\n    useEventListener(document, \"visibilitychange\", onVisibilityChange, { passive: true });\n  async function request(type) {\n    if (!isSupported.value)\n      return;\n    wakeLock = await navigator.wakeLock.request(type);\n    isActive.value = !wakeLock.released;\n  }\n  async function release() {\n    if (!isSupported.value || !wakeLock)\n      return;\n    await wakeLock.release();\n    isActive.value = !wakeLock.released;\n    wakeLock = null;\n  }\n  return {\n    isSupported,\n    isActive,\n    request,\n    release\n  };\n};\n\nconst useWebNotification = (defaultOptions = {}) => {\n  const {\n    window = defaultWindow\n  } = defaultOptions;\n  const isSupported = useSupported(() => !!window && \"Notification\" in window);\n  const notification = ref(null);\n  const requestPermission = async () => {\n    if (!isSupported.value)\n      return;\n    if (\"permission\" in Notification && Notification.permission !== \"denied\")\n      await Notification.requestPermission();\n  };\n  const onClick = createEventHook();\n  const onShow = createEventHook();\n  const onError = createEventHook();\n  const onClose = createEventHook();\n  const show = async (overrides) => {\n    if (!isSupported.value)\n      return;\n    await requestPermission();\n    const options = Object.assign({}, defaultOptions, overrides);\n    notification.value = new Notification(options.title || \"\", options);\n    notification.value.onclick = (event) => onClick.trigger(event);\n    notification.value.onshow = (event) => onShow.trigger(event);\n    notification.value.onerror = (event) => onError.trigger(event);\n    notification.value.onclose = (event) => onClose.trigger(event);\n    return notification.value;\n  };\n  const close = () => {\n    if (notification.value)\n      notification.value.close();\n    notification.value = null;\n  };\n  tryOnMounted(async () => {\n    if (isSupported.value)\n      await requestPermission();\n  });\n  tryOnScopeDispose(close);\n  if (isSupported.value && window) {\n    const document = window.document;\n    useEventListener(document, \"visibilitychange\", (e) => {\n      e.preventDefault();\n      if (document.visibilityState === \"visible\") {\n        close();\n      }\n    });\n  }\n  return {\n    isSupported,\n    notification,\n    show,\n    close,\n    onClick,\n    onShow,\n    onError,\n    onClose\n  };\n};\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n  if (options === true)\n    return {};\n  return options;\n}\nfunction useWebSocket(url, options = {}) {\n  const {\n    onConnected,\n    onDisconnected,\n    onError,\n    onMessage,\n    immediate = true,\n    autoClose = true,\n    protocols = []\n  } = options;\n  const data = ref(null);\n  const status = ref(\"CLOSED\");\n  const wsRef = ref();\n  const urlRef = resolveRef(url);\n  let heartbeatPause;\n  let heartbeatResume;\n  let explicitlyClosed = false;\n  let retried = 0;\n  let bufferedData = [];\n  let pongTimeoutWait;\n  const close = (code = 1e3, reason) => {\n    if (!wsRef.value)\n      return;\n    explicitlyClosed = true;\n    heartbeatPause == null ? void 0 : heartbeatPause();\n    wsRef.value.close(code, reason);\n  };\n  const _sendBuffer = () => {\n    if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n      for (const buffer of bufferedData)\n        wsRef.value.send(buffer);\n      bufferedData = [];\n    }\n  };\n  const resetHeartbeat = () => {\n    clearTimeout(pongTimeoutWait);\n    pongTimeoutWait = void 0;\n  };\n  const send = (data2, useBuffer = true) => {\n    if (!wsRef.value || status.value !== \"OPEN\") {\n      if (useBuffer)\n        bufferedData.push(data2);\n      return false;\n    }\n    _sendBuffer();\n    wsRef.value.send(data2);\n    return true;\n  };\n  const _init = () => {\n    if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n      return;\n    const ws = new WebSocket(urlRef.value, protocols);\n    wsRef.value = ws;\n    status.value = \"CONNECTING\";\n    ws.onopen = () => {\n      status.value = \"OPEN\";\n      onConnected == null ? void 0 : onConnected(ws);\n      heartbeatResume == null ? void 0 : heartbeatResume();\n      _sendBuffer();\n    };\n    ws.onclose = (ev) => {\n      status.value = \"CLOSED\";\n      wsRef.value = void 0;\n      onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n      if (!explicitlyClosed && options.autoReconnect) {\n        const {\n          retries = -1,\n          delay = 1e3,\n          onFailed\n        } = resolveNestedOptions(options.autoReconnect);\n        retried += 1;\n        if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n          setTimeout(_init, delay);\n        else if (typeof retries === \"function\" && retries())\n          setTimeout(_init, delay);\n        else\n          onFailed == null ? void 0 : onFailed();\n      }\n    };\n    ws.onerror = (e) => {\n      onError == null ? void 0 : onError(ws, e);\n    };\n    ws.onmessage = (e) => {\n      if (options.heartbeat) {\n        resetHeartbeat();\n        const {\n          message = DEFAULT_PING_MESSAGE\n        } = resolveNestedOptions(options.heartbeat);\n        if (e.data === message)\n          return;\n      }\n      data.value = e.data;\n      onMessage == null ? void 0 : onMessage(ws, e);\n    };\n  };\n  if (options.heartbeat) {\n    const {\n      message = DEFAULT_PING_MESSAGE,\n      interval = 1e3,\n      pongTimeout = 1e3\n    } = resolveNestedOptions(options.heartbeat);\n    const { pause, resume } = useIntervalFn(() => {\n      send(message, false);\n      if (pongTimeoutWait != null)\n        return;\n      pongTimeoutWait = setTimeout(() => {\n        close();\n      }, pongTimeout);\n    }, interval, { immediate: false });\n    heartbeatPause = pause;\n    heartbeatResume = resume;\n  }\n  if (autoClose) {\n    useEventListener(window, \"beforeunload\", () => close());\n    tryOnScopeDispose(close);\n  }\n  const open = () => {\n    close();\n    explicitlyClosed = false;\n    retried = 0;\n    _init();\n  };\n  if (immediate)\n    watch(urlRef, open, { immediate: true });\n  return {\n    data,\n    status,\n    close,\n    send,\n    open,\n    ws: wsRef\n  };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n  const {\n    window = defaultWindow\n  } = options != null ? options : {};\n  const data = ref(null);\n  const worker = shallowRef();\n  const post = function post2(val) {\n    if (!worker.value)\n      return;\n    worker.value.postMessage(val);\n  };\n  const terminate = function terminate2() {\n    if (!worker.value)\n      return;\n    worker.value.terminate();\n  };\n  if (window) {\n    if (isString(arg0))\n      worker.value = new Worker(arg0, workerOptions);\n    else if (isFunction(arg0))\n      worker.value = arg0();\n    else\n      worker.value = arg0;\n    worker.value.onmessage = (e) => {\n      data.value = e.data;\n    };\n    tryOnScopeDispose(() => {\n      if (worker.value)\n        worker.value.terminate();\n    });\n  }\n  return {\n    data,\n    post,\n    terminate,\n    worker\n  };\n}\n\nconst jobRunner = (userFunc) => (e) => {\n  const userFuncArgs = e.data[0];\n  return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n    postMessage([\"SUCCESS\", result]);\n  }).catch((error) => {\n    postMessage([\"ERROR\", error]);\n  });\n};\n\nconst depsParser = (deps) => {\n  if (deps.length === 0)\n    return \"\";\n  const depsString = deps.map((dep) => `'${dep}'`).toString();\n  return `importScripts(${depsString})`;\n};\n\nconst createWorkerBlobUrl = (fn, deps) => {\n  const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`;\n  const blob = new Blob([blobCode], { type: \"text/javascript\" });\n  const url = URL.createObjectURL(blob);\n  return url;\n};\n\nconst useWebWorkerFn = (fn, options = {}) => {\n  const {\n    dependencies = [],\n    timeout,\n    window = defaultWindow\n  } = options;\n  const worker = ref();\n  const workerStatus = ref(\"PENDING\");\n  const promise = ref({});\n  const timeoutId = ref();\n  const workerTerminate = (status = \"PENDING\") => {\n    if (worker.value && worker.value._url && window) {\n      worker.value.terminate();\n      URL.revokeObjectURL(worker.value._url);\n      promise.value = {};\n      worker.value = void 0;\n      window.clearTimeout(timeoutId.value);\n      workerStatus.value = status;\n    }\n  };\n  workerTerminate();\n  tryOnScopeDispose(workerTerminate);\n  const generateWorker = () => {\n    const blobUrl = createWorkerBlobUrl(fn, dependencies);\n    const newWorker = new Worker(blobUrl);\n    newWorker._url = blobUrl;\n    newWorker.onmessage = (e) => {\n      const { resolve = () => {\n      }, reject = () => {\n      } } = promise.value;\n      const [status, result] = e.data;\n      switch (status) {\n        case \"SUCCESS\":\n          resolve(result);\n          workerTerminate(status);\n          break;\n        default:\n          reject(result);\n          workerTerminate(\"ERROR\");\n          break;\n      }\n    };\n    newWorker.onerror = (e) => {\n      const { reject = () => {\n      } } = promise.value;\n      reject(e);\n      workerTerminate(\"ERROR\");\n    };\n    if (timeout) {\n      timeoutId.value = setTimeout(() => workerTerminate(\"TIMEOUT_EXPIRED\"), timeout);\n    }\n    return newWorker;\n  };\n  const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n    promise.value = {\n      resolve,\n      reject\n    };\n    worker.value && worker.value.postMessage([[...fnArgs]]);\n    workerStatus.value = \"RUNNING\";\n  });\n  const workerFn = (...fnArgs) => {\n    if (workerStatus.value === \"RUNNING\") {\n      console.error(\"[useWebWorkerFn] You can only run one instance of the worker at a time.\");\n      return Promise.reject();\n    }\n    worker.value = generateWorker();\n    return callWorker(...fnArgs);\n  };\n  return {\n    workerFn,\n    workerStatus,\n    workerTerminate\n  };\n};\n\nfunction useWindowFocus({ window = defaultWindow } = {}) {\n  if (!window)\n    return ref(false);\n  const focused = ref(window.document.hasFocus());\n  useEventListener(window, \"blur\", () => {\n    focused.value = false;\n  });\n  useEventListener(window, \"focus\", () => {\n    focused.value = true;\n  });\n  return focused;\n}\n\nfunction useWindowScroll({ window = defaultWindow } = {}) {\n  if (!window) {\n    return {\n      x: ref(0),\n      y: ref(0)\n    };\n  }\n  const x = ref(window.pageXOffset);\n  const y = ref(window.pageYOffset);\n  useEventListener(window, \"scroll\", () => {\n    x.value = window.pageXOffset;\n    y.value = window.pageYOffset;\n  }, {\n    capture: false,\n    passive: true\n  });\n  return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n  const {\n    window = defaultWindow,\n    initialWidth = Infinity,\n    initialHeight = Infinity,\n    listenOrientation = true,\n    includeScrollbar = true\n  } = options;\n  const width = ref(initialWidth);\n  const height = ref(initialHeight);\n  const update = () => {\n    if (window) {\n      if (includeScrollbar) {\n        width.value = window.innerWidth;\n        height.value = window.innerHeight;\n      } else {\n        width.value = window.document.documentElement.clientWidth;\n        height.value = window.document.documentElement.clientHeight;\n      }\n    }\n  };\n  update();\n  tryOnMounted(update);\n  useEventListener(\"resize\", update, { passive: true });\n  if (listenOrientation)\n    useEventListener(\"orientationchange\", update, { passive: true });\n  return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, SwipeDirection, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsMasterCss, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, cloneFnJSON, computedAsync, computedInject, createFetch, createUnrefFn, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","<template>\n  <div\n    ref=\"root\"\n    :class=\"[\n      'ServiceSelect',\n      isActive && `ServiceSelect--${placement}`,\n    ]\"\n  >\n    <select\n      class=\"ServiceSelect__native\"\n      v-model=\"localModel\"\n      v-bind=\"$attrs\"\n      :disabled=\"disabled\"\n      :name=\"name\"\n      :placeholder=\"placeholder\"\n      tabindex=\"-1\"\n    >\n      <option key=\"-1\" value=\"\" />\n      <template v-for=\"l1Option in options\">\n        <option\n          v-if=\"l1Option.type === 'option'\"\n          :value=\"l1Option.value\"\n          :disabled=\"l1Option.disabled\"\n        >\n          {{ l1Option.label }}\n        </option>\n        <optgroup\n          v-else-if=\"l1Option.type === 'optgroup'\"\n          :key=\"`##group-${l1Option.label}`\"\n          :label=\"l1Option.label\"\n        >\n          <option\n            v-for=\"l2Option in l1Option.options\"\n            :value=\"l2Option.value\"\n            :disabled=\"l2Option.disabled\"\n          >\n            {{ l2Option.label }}\n          </option>\n        </optgroup>\n      </template>\n    </select>\n\n    <button\n      ref=\"trigger\"\n      class=\"ServiceSelect__trigger\"\n      type=\"button\"\n      form=\"###\"\n\n      @click=\"handleTriggerClick\"\n      @focus=\"handleTriggerFocus\"\n      @blur=\"handleTriggerBlur\"\n    >{{ label }}</button>\n\n    <div\n      v-if=\"isActive\"\n      ref=\"dropdown\"\n      :class=\"[\n        'ServiceSelect__dropdown',\n        'dropdown',\n      ]\"\n      role=\"listbox\"\n      :style=\"{\n        position: strategy,\n        top: `${y ?? 0}px`,\n        left: `${x ?? 0}px`,\n      }\"\n    >\n      <div class=\"dropdown__searchBox\">\n        <input\n          ref=\"searchInput\"\n          v-model=\"search\"\n          type=\"text\"\n          form=\"###\"\n          placeholder=\"Поиск...\"\n\n        >\n      </div>\n\n      <p v-if=\"optionsToShow.length === 0\" class=\"dropdown__note\">Ничего не найдено</p>\n\n      <ul\n        v-else\n        class=\"dropdown__list list\"\n      >\n        <template v-for=\"opt in optionsToShow\">\n          <li\n            v-if=\"opt.type === 'option'\"\n            :key=\"opt.value\"\n            class=\"list__item list__item--option\"\n            tabindex=\"0\"\n            role=\"option\"\n            :aria-disabled=\"opt.disabled\"\n            :aria-selected=\"localModel === opt.value\"\n            @focus=\"handleOptionFocus(opt)\"\n            @click=\"handleOptionClick(opt)\"\n          >\n            <span class=\"list__itemLabel\">{{ opt.label }}</span>\n          </li>\n          <li\n            v-else-if=\"opt.type === 'optgroup'\"\n            :key=\"`##optgroup-${opt.label}`\"\n            class=\"list__item list__item--optgroup\"\n          >\n            <span class=\"list__itemLabel\">{{ opt.label }}</span>\n            <ul\n              v-if=\"opt.type === 'optgroup'\"\n              class=\"list__list list\"\n            >\n              <li\n                v-for=\"subOpt in opt.options\"\n                :key=\"subOpt.value\"\n                class=\"list__item list__item--option\"\n                tabindex=\"0\"\n                role=\"option\"\n                :aria-disabled=\"subOpt.disabled\"\n                :aria-selected=\"localModel === subOpt.value\"\n                @focus=\"handleOptionFocus(subOpt)\"\n                @click=\"handleOptionClick(subOpt)\"\n              ><span class=\"list__itemLabel\">{{ subOpt.label }}</span></li>\n            </ul>\n          </li>\n        </template>\n      </ul>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { defineComponent, computed, ref, nextTick } from 'vue';\nimport { useFloating, flip, offset } from '@floating-ui/vue';\nimport { onClickOutside } from '@vueuse/core';\n\nexport default defineComponent({\n  name: 'ServiceSelect',\n\n  model: {\n    prop: 'model',\n    event: 'update:model',\n  },\n\n  props: {\n    model: {\n      type: [String, Number],\n      default: null,\n    },\n\n\n    options: Array,\n    /**\n     * [\n     *  { type: 'option', value: 0, label: 'Option', disabled?: false },\n     *  { type: 'optgroup', label: 'Group', options: [ ... ]},\n     * ]\n     *\n     */\n\n    disabled: Boolean,\n    placeholder: String,\n    name: String,\n  },\n\n  setup(props, {emit}) {\n    const search = ref('');\n    const root = ref('');\n    const isActive = ref(false);\n\n\n\n\n    const localModel = computed({\n      get: () => props.model,\n      set: (value) => emit('update:model', value),\n    });\n\n\n    const optionsToShow = computed(() => {\n      if (!props.options) {\n        return [];\n      }\n      const $search = search.value.trim().toLowerCase();\n      const options = props.options;\n\n      if ($search.length === 0) {\n        return options;\n      }\n\n      return options.reduce((result, option) => {\n        if (option.label.toLowerCase().includes($search)) {\n          result.push(option);\n          return result;\n        }\n\n        if (option.type === 'optgroup') {\n          const l2 = option.options.filter(({ label }) => label.toLowerCase().includes($search));\n          if (l2.length) {\n            result.push({\n              ...option,\n              options: l2,\n            });\n            return result;\n          }\n        }\n\n        return result;\n      }, []);\n    });\n\n    const trigger = ref(null);\n    const dropdown = ref(null);\n    const { x, y, strategy, placement } = useFloating(trigger, dropdown, {\n      placement: 'bottom',\n      middleware: [ flip(), offset(-1) ],\n    });\n\n\n    const selectedOption = computed(() => {\n      if (!localModel.value) {\n        return null;\n      }\n\n        // const flat = props.options.reduce(($flat, l1o) => $flat.concat(\n      //   l1o.type === 'option'\n      //   ? l1o\n      //   : l1o.options || [],\n      // ), []);\n      // const option = flat.find(({ value }) => value === localModel.value);\n\n      let option = null;\n      props.options.forEach((l1o) => {\n        if (l1o.type === 'optgroup') {\n          if (!l1o.options) {\n            return;\n          }\n          const $option = l1o.options.find(({ value }) => value === localModel.value);\n          if ($option) {\n            option = $option;\n          }\n          return;\n        }\n\n        if (l1o.value === localModel.value) {\n          option = l1o;\n        }\n      });\n\n      return option;\n    });\n\n    const label = computed(() => {\n      if (!selectedOption.value) {\n        return props.placeholder;\n      }\n\n      return selectedOption.value.label;\n    });\n\n\n    const setInactive = () => {\n      isActive.value = false;\n      search.value = '';\n    };\n\n    onClickOutside(dropdown, (payload) => {\n      if (isActive.value) {\n        console.log('onClickOutside', { payload });\n        setInactive();\n      }\n    });\n\n    const setActive = () => {\n      isActive.value = true;\n      nextTick(() => {\n        searchInput.value?.focus();\n      });\n    };\n\n    const searchInput = ref(null);\n    const handleTriggerClick = () => {\n      if (isActive.value) {\n        setInactive();\n      } else {\n        setActive();\n      }\n    };\n\n    const handleTriggerFocus = () => {\n      setActive();\n    };\n\n    const handleTriggerBlur = () => {\n      // if (dropdown.value && dropdown.value.contains(document.activeElement)) {\n      //   return;\n      // }\n\n      // isActive.value = false;\n    }\n\n\n    const handleOptionFocus = (option) => {\n      localModel.value = option.value;\n    };\n    const handleOptionClick = (option) => {\n      localModel.value = option.value;\n    };\n\n    return {\n      root,\n      searchInput,\n      trigger,\n      dropdown,\n\n      localModel,\n\n      optionsToShow,\n      search,\n      isActive,\n      label,\n      x,\n      y,\n      strategy,\n      placement,\n\n      handleTriggerClick,\n      handleTriggerFocus,\n      handleTriggerBlur,\n      handleOptionFocus,\n      handleOptionClick,\n    }\n  },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n.ServiceSelect {\n  position: relative;\n}\n.ServiceSelect__native {\n  // @include visually-hidden;\n  display: none;\n}\n\n.ServiceSelect__trigger {\n  @include field;\n  text-align: start;\n  width: 100%;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n\n  &:focus {\n    outline: none;\n  }\n\n  &:focus-visible {\n    @include focus;\n  }\n}\n\n.ServiceSelect__dropdown {\n  @include tiny-scrollbar;\n\n  background: white;\n  width: 100%;\n  height: auto;\n  max-height: 20rem;\n  overflow: hidden auto;\n  border: 0.0625rem solid $gray-border;\n  z-index: 100;\n  box-sizing: border-box;\n\n  border-radius: 0.3125rem;\n}\n\n// placement\n.ServiceSelect--bottom, .ServiceSelect--top {\n  .ServiceSelect__trigger {\n    @include focus;\n  }\n\n  .ServiceSelect__dropdown {\n    outline: hsl(216.4,69.4%,53.9%) solid 1px;\n  }\n}\n.ServiceSelect--bottom {\n  .ServiceSelect__trigger {\n    border-bottom-left-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .ServiceSelect__dropdown {\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n}\n.ServiceSelect--top {\n  .ServiceSelect__trigger {\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n  .ServiceSelect__dropdown {\n    border-bottom-left-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n}\n.dropdown__searchBox {\n  position: sticky;\n  top: 0;\n  border-bottom: 0.0625rem solid $gray-border;\n  background-color: $white;\n  padding: 0.625rem;\n\n  & > input {\n    @include field;\n    display: block;\n    width: 100%;\n\n    padding-block: .625rem;\n    min-height: calc(1.125rem + .625rem + .625rem + 0.0625rem + 0.0625rem);\n\n    &:focus-visible {\n      @include focus\n    }\n  }\n}\n\n.dropdown__note {\n  margin: 1.25rem;\n  text-align: center;\n}\n\n\n\n\n\n// options\n\n.dropdown__list {}\n\n.list {\n  list-style: none;\n  appearance: none;\n  padding: 0;\n  margin: 0;\n}\n\n.list__list {\n  & > .list__item--option {\n    padding-inline-start: .625rem;\n  }\n}\n\n.list__item {\n  box-sizing: border-box;\n}\n\n.list__item--option {\n  padding: .625rem .625rem;\n  line-height: 1.2;\n  transition: color .25s ease, background-color .25s ease;\n  text-align: left;\n\n  &:not([aria-disabled=true]) {\n    cursor: pointer;\n\n    &:hover {\n      background-color: $blue;\n      color: $white;\n    }\n  }\n\n  &[aria-selected=true] {\n    background-color: $gray-border;\n  }\n}\n\n.list__item--optgroup {\n  & > .list__itemLabel {\n    color: $blue;\n    padding: .625rem .625rem;\n    display: block;\n  }\n}\n</style>\n","<template>\n  <label class=\"Checkbox\">\n    <input\n      class=\"Checkbox__input\"\n      v-model=\"localModel\"\n      v-bind=\"$attrs\"\n      type=\"checkbox\"\n      :name=\"name\"\n      :disabled=\"disabled\"\n    >\n\n    <div class=\"Checkbox__icon\">\n\n      <svg\n        v-if=\"localModel\"\n        viewBox=\"0 0 26 26\"\n      ><path fill=\"currentColor\" d=\"M.3 14c-.2-.2-.3-.5-.3-.7s.1-.5.3-.7l1.4-1.4a1 1 0 0 1 1.4 0l.1.1 5.5 5.9c.2.2.5.2.7 0L22.8 3.3h.1a1 1 0 0 1 1.4 0l1.4 1.4c.4.4.4 1 0 1.4l-16 16.6a1 1 0 0 1-.7.3 1 1 0 0 1-.7-.3L.5 14.3.3 14z\"/></svg>\n    </div>\n\n    <div><slot /></div>\n  </label>\n</template>\n\n<script>\nimport {\n  defineComponent,\n  computed,\n} from 'vue';\n\nexport default defineComponent({\n  name: 'Checkbox',\n\n  inheritAttrs: false,\n\n  model: {\n    prop: 'model',\n    event: 'update:model',\n  },\n\n  props: {\n    model: Boolean,\n    disabled: Boolean,\n    name: String,\n  },\n\n  setup(props, { emit }) {\n    const localModel = computed({\n      get: () => props.model,\n      set: (value) => emit('update:model', value),\n    });\n\n    return {\n      localModel,\n    };\n  },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n.Checkbox {\n  display: grid;\n  align-items: baseline;\n  justify-content: start;\n  gap: 1.25rem;\n  grid-template-columns: 1.125rem auto;\n  line-height: 1.25rem;\n}\n\n.Checkbox__icon {\n  border: 0.0625rem solid #cccccc;\n  color: #2d2d2d;\n  border-radius: 0.1875rem;\n  display: block;\n  height: 1.125rem;\n  width: 1.125rem;\n  position: relative;\n\n  & > svg {\n    display: block;\n    position: absolute;\n    top: 0.1875rem;\n    left: 0.1875rem;\n    width: 0.6875rem;\n    height: 0.6875rem;\n  }\n}\n\n.Checkbox__input {\n  @include visually-hidden;\n}\n\n.Checkbox__input:focus-visible + .Checkbox__icon {\n  @include focus;\n}\n</style>\n","const suspectProtoRx = /\"(?:_|\\\\u0{2}5[Ff]){2}(?:p|\\\\u0{2}70)(?:r|\\\\u0{2}72)(?:o|\\\\u0{2}6[Ff])(?:t|\\\\u0{2}74)(?:o|\\\\u0{2}6[Ff])(?:_|\\\\u0{2}5[Ff]){2}\"\\s*:/;\nconst suspectConstructorRx = /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/;\nconst JsonSigRx = /^\\s*[\"[{]|^\\s*-?\\d[\\d.]{0,14}\\s*$/;\nfunction jsonParseTransform(key, value) {\n  if (key === \"__proto__\") {\n    return;\n  }\n  if (key === \"constructor\" && value && typeof value === \"object\" && \"prototype\" in value) {\n    return;\n  }\n  return value;\n}\nfunction destr(value, options = {}) {\n  if (typeof value !== \"string\") {\n    return value;\n  }\n  const _lval = value.toLowerCase().trim();\n  if (_lval === \"true\") {\n    return true;\n  }\n  if (_lval === \"false\") {\n    return false;\n  }\n  if (_lval === \"null\") {\n    return null;\n  }\n  if (_lval === \"nan\") {\n    return Number.NaN;\n  }\n  if (_lval === \"infinity\") {\n    return Number.POSITIVE_INFINITY;\n  }\n  if (_lval === \"undefined\") {\n    return void 0;\n  }\n  if (!JsonSigRx.test(value)) {\n    if (options.strict) {\n      throw new SyntaxError(\"Invalid JSON\");\n    }\n    return value;\n  }\n  try {\n    if (suspectProtoRx.test(value) || suspectConstructorRx.test(value)) {\n      return JSON.parse(value, jsonParseTransform);\n    }\n    return JSON.parse(value);\n  } catch (error) {\n    if (options.strict) {\n      throw error;\n    }\n    return value;\n  }\n}\n\nexport { destr as default };\n","const n = /[^\\0-\\x7E]/;\nconst t = /[\\x2E\\u3002\\uFF0E\\uFF61]/g;\nconst o = { overflow: \"Overflow Error\", \"not-basic\": \"Illegal Input\", \"invalid-input\": \"Invalid Input\" };\nconst e = Math.floor;\nconst r = String.fromCharCode;\nfunction s(n2) {\n  throw new RangeError(o[n2]);\n}\nconst c = function(n2, t2) {\n  return n2 + 22 + 75 * (n2 < 26) - ((t2 != 0) << 5);\n};\nconst u = function(n2, t2, o2) {\n  let r2 = 0;\n  for (n2 = o2 ? e(n2 / 700) : n2 >> 1, n2 += e(n2 / t2); n2 > 455; r2 += 36) {\n    n2 = e(n2 / 35);\n  }\n  return e(r2 + 36 * n2 / (n2 + 38));\n};\nfunction toASCII(o2) {\n  return function(n2, o3) {\n    const e2 = n2.split(\"@\");\n    let r2 = \"\";\n    e2.length > 1 && (r2 = e2[0] + \"@\", n2 = e2[1]);\n    const s2 = function(n3, t2) {\n      const o4 = [];\n      let e3 = n3.length;\n      for (; e3--; ) {\n        o4[e3] = t2(n3[e3]);\n      }\n      return o4;\n    }((n2 = n2.replace(t, \".\")).split(\".\"), o3).join(\".\");\n    return r2 + s2;\n  }(o2, function(t2) {\n    return n.test(t2) ? \"xn--\" + function(n2) {\n      const t3 = [];\n      const o3 = (n2 = function(n3) {\n        const t4 = [];\n        let o4 = 0;\n        const e2 = n3.length;\n        for (; o4 < e2; ) {\n          const r2 = n3.charCodeAt(o4++);\n          if (r2 >= 55296 && r2 <= 56319 && o4 < e2) {\n            const e3 = n3.charCodeAt(o4++);\n            (64512 & e3) == 56320 ? t4.push(((1023 & r2) << 10) + (1023 & e3) + 65536) : (t4.push(r2), o4--);\n          } else {\n            t4.push(r2);\n          }\n        }\n        return t4;\n      }(n2)).length;\n      let f = 128;\n      let i = 0;\n      let l = 72;\n      for (const o4 of n2) {\n        o4 < 128 && t3.push(r(o4));\n      }\n      const h = t3.length;\n      let p = h;\n      for (h && t3.push(\"-\"); p < o3; ) {\n        let o4 = 2147483647;\n        for (const t4 of n2) {\n          t4 >= f && t4 < o4 && (o4 = t4);\n        }\n        const a = p + 1;\n        o4 - f > e((2147483647 - i) / a) && s(\"overflow\"), i += (o4 - f) * a, f = o4;\n        for (const o5 of n2) {\n          if (o5 < f && ++i > 2147483647 && s(\"overflow\"), o5 == f) {\n            let n3 = i;\n            for (let o6 = 36; ; o6 += 36) {\n              const s2 = o6 <= l ? 1 : o6 >= l + 26 ? 26 : o6 - l;\n              if (n3 < s2) {\n                break;\n              }\n              const u2 = n3 - s2;\n              const f2 = 36 - s2;\n              t3.push(r(c(s2 + u2 % f2, 0))), n3 = e(u2 / f2);\n            }\n            t3.push(r(c(n3, 0))), l = u(i, a, p == h), i = 0, ++p;\n          }\n        }\n        ++i, ++f;\n      }\n      return t3.join(\"\");\n    }(t2) : t2;\n  });\n}\n\nconst HASH_RE = /#/g;\nconst AMPERSAND_RE = /&/g;\nconst SLASH_RE = /\\//g;\nconst EQUAL_RE = /=/g;\nconst IM_RE = /\\?/g;\nconst PLUS_RE = /\\+/g;\nconst ENC_BRACKET_OPEN_RE = /%5b/gi;\nconst ENC_BRACKET_CLOSE_RE = /%5d/gi;\nconst ENC_CARET_RE = /%5e/gi;\nconst ENC_BACKTICK_RE = /%60/gi;\nconst ENC_CURLY_OPEN_RE = /%7b/gi;\nconst ENC_PIPE_RE = /%7c/gi;\nconst ENC_CURLY_CLOSE_RE = /%7d/gi;\nconst ENC_SPACE_RE = /%20/gi;\nconst ENC_SLASH_RE = /%2f/gi;\nconst ENC_ENC_SLASH_RE = /%252f/gi;\nfunction encode(text) {\n  return encodeURI(\"\" + text).replace(ENC_PIPE_RE, \"|\").replace(ENC_BRACKET_OPEN_RE, \"[\").replace(ENC_BRACKET_CLOSE_RE, \"]\");\n}\nfunction encodeHash(text) {\n  return encode(text).replace(ENC_CURLY_OPEN_RE, \"{\").replace(ENC_CURLY_CLOSE_RE, \"}\").replace(ENC_CARET_RE, \"^\");\n}\nfunction encodeQueryValue(text) {\n  return encode(text).replace(PLUS_RE, \"%2B\").replace(ENC_SPACE_RE, \"+\").replace(HASH_RE, \"%23\").replace(AMPERSAND_RE, \"%26\").replace(ENC_BACKTICK_RE, \"`\").replace(ENC_CURLY_OPEN_RE, \"{\").replace(ENC_CURLY_CLOSE_RE, \"}\").replace(ENC_CARET_RE, \"^\");\n}\nfunction encodeQueryKey(text) {\n  return encodeQueryValue(text).replace(EQUAL_RE, \"%3D\");\n}\nfunction encodePath(text) {\n  return encode(text).replace(HASH_RE, \"%23\").replace(IM_RE, \"%3F\").replace(ENC_ENC_SLASH_RE, \"%2F\").replace(AMPERSAND_RE, \"%26\").replace(PLUS_RE, \"%2B\");\n}\nfunction encodeParam(text) {\n  return encodePath(text).replace(SLASH_RE, \"%2F\");\n}\nfunction decode(text = \"\") {\n  try {\n    return decodeURIComponent(\"\" + text);\n  } catch {\n    return \"\" + text;\n  }\n}\nfunction decodePath(text) {\n  return decode(text.replace(ENC_SLASH_RE, \"%252F\"));\n}\nfunction decodeQueryValue(text) {\n  return decode(text.replace(PLUS_RE, \" \"));\n}\nfunction encodeHost(name = \"\") {\n  return toASCII(name);\n}\n\nfunction parseQuery(parametersString = \"\") {\n  const object = {};\n  if (parametersString[0] === \"?\") {\n    parametersString = parametersString.slice(1);\n  }\n  for (const parameter of parametersString.split(\"&\")) {\n    const s = parameter.match(/([^=]+)=?(.*)/) || [];\n    if (s.length < 2) {\n      continue;\n    }\n    const key = decode(s[1]);\n    if (key === \"__proto__\" || key === \"constructor\") {\n      continue;\n    }\n    const value = decodeQueryValue(s[2] || \"\");\n    if (typeof object[key] !== \"undefined\") {\n      if (Array.isArray(object[key])) {\n        object[key].push(value);\n      } else {\n        object[key] = [object[key], value];\n      }\n    } else {\n      object[key] = value;\n    }\n  }\n  return object;\n}\nfunction encodeQueryItem(key, value) {\n  if (typeof value === \"number\" || typeof value === \"boolean\") {\n    value = String(value);\n  }\n  if (!value) {\n    return encodeQueryKey(key);\n  }\n  if (Array.isArray(value)) {\n    return value.map((_value) => `${encodeQueryKey(key)}=${encodeQueryValue(_value)}`).join(\"&\");\n  }\n  return `${encodeQueryKey(key)}=${encodeQueryValue(value)}`;\n}\nfunction stringifyQuery(query) {\n  return Object.keys(query).filter((k) => query[k] !== void 0).map((k) => encodeQueryItem(k, query[k])).join(\"&\");\n}\n\nclass $URL {\n  constructor(input = \"\") {\n    this.query = {};\n    if (typeof input !== \"string\") {\n      throw new TypeError(`URL input should be string received ${typeof input} (${input})`);\n    }\n    const parsed = parseURL(input);\n    this.protocol = decode(parsed.protocol);\n    this.host = decode(parsed.host);\n    this.auth = decode(parsed.auth);\n    this.pathname = decodePath(parsed.pathname);\n    this.query = parseQuery(parsed.search);\n    this.hash = decode(parsed.hash);\n  }\n  get hostname() {\n    return parseHost(this.host).hostname;\n  }\n  get port() {\n    return parseHost(this.host).port || \"\";\n  }\n  get username() {\n    return parseAuth(this.auth).username;\n  }\n  get password() {\n    return parseAuth(this.auth).password || \"\";\n  }\n  get hasProtocol() {\n    return this.protocol.length;\n  }\n  get isAbsolute() {\n    return this.hasProtocol || this.pathname[0] === \"/\";\n  }\n  get search() {\n    const q = stringifyQuery(this.query);\n    return q.length > 0 ? \"?\" + q : \"\";\n  }\n  get searchParams() {\n    const p = new URLSearchParams();\n    for (const name in this.query) {\n      const value = this.query[name];\n      if (Array.isArray(value)) {\n        for (const v of value) {\n          p.append(name, v);\n        }\n      } else {\n        p.append(name, value || \"\");\n      }\n    }\n    return p;\n  }\n  get origin() {\n    return (this.protocol ? this.protocol + \"//\" : \"\") + encodeHost(this.host);\n  }\n  get fullpath() {\n    return encodePath(this.pathname) + this.search + encodeHash(this.hash);\n  }\n  get encodedAuth() {\n    if (!this.auth) {\n      return \"\";\n    }\n    const { username, password } = parseAuth(this.auth);\n    return encodeURIComponent(username) + (password ? \":\" + encodeURIComponent(password) : \"\");\n  }\n  get href() {\n    const auth = this.encodedAuth;\n    const originWithAuth = (this.protocol ? this.protocol + \"//\" : \"\") + (auth ? auth + \"@\" : \"\") + encodeHost(this.host);\n    return this.hasProtocol && this.isAbsolute ? originWithAuth + this.fullpath : this.fullpath;\n  }\n  append(url) {\n    if (url.hasProtocol) {\n      throw new Error(\"Cannot append a URL with protocol\");\n    }\n    Object.assign(this.query, url.query);\n    if (url.pathname) {\n      this.pathname = withTrailingSlash(this.pathname) + withoutLeadingSlash(url.pathname);\n    }\n    if (url.hash) {\n      this.hash = url.hash;\n    }\n  }\n  toJSON() {\n    return this.href;\n  }\n  toString() {\n    return this.href;\n  }\n}\n\nfunction isRelative(inputString) {\n  return [\"./\", \"../\"].some((string_) => inputString.startsWith(string_));\n}\nconst PROTOCOL_REGEX = /^\\w{2,}:(\\/\\/)?/;\nconst PROTOCOL_RELATIVE_REGEX = /^\\/\\/[^/]+/;\nfunction hasProtocol(inputString, acceptProtocolRelative = false) {\n  return PROTOCOL_REGEX.test(inputString) || acceptProtocolRelative && PROTOCOL_RELATIVE_REGEX.test(inputString);\n}\nconst TRAILING_SLASH_RE = /\\/$|\\/\\?/;\nfunction hasTrailingSlash(input = \"\", queryParameters = false) {\n  if (!queryParameters) {\n    return input.endsWith(\"/\");\n  }\n  return TRAILING_SLASH_RE.test(input);\n}\nfunction withoutTrailingSlash(input = \"\", queryParameters = false) {\n  if (!queryParameters) {\n    return (hasTrailingSlash(input) ? input.slice(0, -1) : input) || \"/\";\n  }\n  if (!hasTrailingSlash(input, true)) {\n    return input || \"/\";\n  }\n  const [s0, ...s] = input.split(\"?\");\n  return (s0.slice(0, -1) || \"/\") + (s.length > 0 ? `?${s.join(\"?\")}` : \"\");\n}\nfunction withTrailingSlash(input = \"\", queryParameters = false) {\n  if (!queryParameters) {\n    return input.endsWith(\"/\") ? input : input + \"/\";\n  }\n  if (hasTrailingSlash(input, true)) {\n    return input || \"/\";\n  }\n  const [s0, ...s] = input.split(\"?\");\n  return s0 + \"/\" + (s.length > 0 ? `?${s.join(\"?\")}` : \"\");\n}\nfunction hasLeadingSlash(input = \"\") {\n  return input.startsWith(\"/\");\n}\nfunction withoutLeadingSlash(input = \"\") {\n  return (hasLeadingSlash(input) ? input.slice(1) : input) || \"/\";\n}\nfunction withLeadingSlash(input = \"\") {\n  return hasLeadingSlash(input) ? input : \"/\" + input;\n}\nfunction cleanDoubleSlashes(input = \"\") {\n  return input.split(\"://\").map((string_) => string_.replace(/\\/{2,}/g, \"/\")).join(\"://\");\n}\nfunction withBase(input, base) {\n  if (isEmptyURL(base) || hasProtocol(input)) {\n    return input;\n  }\n  const _base = withoutTrailingSlash(base);\n  if (input.startsWith(_base)) {\n    return input;\n  }\n  return joinURL(_base, input);\n}\nfunction withoutBase(input, base) {\n  if (isEmptyURL(base)) {\n    return input;\n  }\n  const _base = withoutTrailingSlash(base);\n  if (!input.startsWith(_base)) {\n    return input;\n  }\n  const trimmed = input.slice(_base.length);\n  return trimmed[0] === \"/\" ? trimmed : \"/\" + trimmed;\n}\nfunction withQuery(input, query) {\n  const parsed = parseURL(input);\n  const mergedQuery = { ...parseQuery(parsed.search), ...query };\n  parsed.search = stringifyQuery(mergedQuery);\n  return stringifyParsedURL(parsed);\n}\nfunction getQuery(input) {\n  return parseQuery(parseURL(input).search);\n}\nfunction isEmptyURL(url) {\n  return !url || url === \"/\";\n}\nfunction isNonEmptyURL(url) {\n  return url && url !== \"/\";\n}\nfunction joinURL(base, ...input) {\n  let url = base || \"\";\n  for (const index of input.filter((url2) => isNonEmptyURL(url2))) {\n    url = url ? withTrailingSlash(url) + withoutLeadingSlash(index) : index;\n  }\n  return url;\n}\nfunction withHttp(input) {\n  return withProtocol(input, \"http://\");\n}\nfunction withHttps(input) {\n  return withProtocol(input, \"https://\");\n}\nfunction withoutProtocol(input) {\n  return withProtocol(input, \"\");\n}\nfunction withProtocol(input, protocol) {\n  const match = input.match(PROTOCOL_REGEX);\n  if (!match) {\n    return protocol + input;\n  }\n  return protocol + input.slice(match[0].length);\n}\nfunction createURL(input) {\n  return new $URL(input);\n}\nfunction normalizeURL(input) {\n  return createURL(input).toString();\n}\nfunction resolveURL(base, ...input) {\n  const url = createURL(base);\n  for (const index of input.filter((url2) => isNonEmptyURL(url2))) {\n    url.append(createURL(index));\n  }\n  return url.toString();\n}\nfunction isSamePath(p1, p2) {\n  return decode(withoutTrailingSlash(p1)) === decode(withoutTrailingSlash(p2));\n}\nfunction isEqual(a, b, options = {}) {\n  if (!options.trailingSlash) {\n    a = withTrailingSlash(a);\n    b = withTrailingSlash(b);\n  }\n  if (!options.leadingSlash) {\n    a = withLeadingSlash(a);\n    b = withLeadingSlash(b);\n  }\n  if (!options.encoding) {\n    a = decode(a);\n    b = decode(b);\n  }\n  return a === b;\n}\n\nfunction parseURL(input = \"\", defaultProto) {\n  if (!hasProtocol(input, true)) {\n    return defaultProto ? parseURL(defaultProto + input) : parsePath(input);\n  }\n  const [protocol = \"\", auth, hostAndPath = \"\"] = (input.replace(/\\\\/g, \"/\").match(/([^/:]+:)?\\/\\/([^/@]+@)?(.*)/) || []).splice(1);\n  const [host = \"\", path = \"\"] = (hostAndPath.match(/([^#/?]*)(.*)?/) || []).splice(1);\n  const { pathname, search, hash } = parsePath(path.replace(/\\/(?=[A-Za-z]:)/, \"\"));\n  return {\n    protocol,\n    auth: auth ? auth.slice(0, Math.max(0, auth.length - 1)) : \"\",\n    host,\n    pathname,\n    search,\n    hash\n  };\n}\nfunction parsePath(input = \"\") {\n  const [pathname = \"\", search = \"\", hash = \"\"] = (input.match(/([^#?]*)(\\?[^#]*)?(#.*)?/) || []).splice(1);\n  return {\n    pathname,\n    search,\n    hash\n  };\n}\nfunction parseAuth(input = \"\") {\n  const [username, password] = input.split(\":\");\n  return {\n    username: decode(username),\n    password: decode(password)\n  };\n}\nfunction parseHost(input = \"\") {\n  const [hostname, port] = (input.match(/([^/]*)(:0-9+)?/) || []).splice(1);\n  return {\n    hostname: decode(hostname),\n    port\n  };\n}\nfunction stringifyParsedURL(parsed) {\n  const fullpath = parsed.pathname + (parsed.search ? (parsed.search.startsWith(\"?\") ? \"\" : \"?\") + parsed.search : \"\") + parsed.hash;\n  if (!parsed.protocol) {\n    return fullpath;\n  }\n  return parsed.protocol + \"//\" + (parsed.auth ? parsed.auth + \"@\" : \"\") + parsed.host + fullpath;\n}\n\nexport { $URL, cleanDoubleSlashes, createURL, decode, decodePath, decodeQueryValue, encode, encodeHash, encodeHost, encodeParam, encodePath, encodeQueryItem, encodeQueryKey, encodeQueryValue, getQuery, hasLeadingSlash, hasProtocol, hasTrailingSlash, isEmptyURL, isEqual, isNonEmptyURL, isRelative, isSamePath, joinURL, normalizeURL, parseAuth, parseHost, parsePath, parseQuery, parseURL, resolveURL, stringifyParsedURL, stringifyQuery, withBase, withHttp, withHttps, withLeadingSlash, withProtocol, withQuery, withTrailingSlash, withoutBase, withoutLeadingSlash, withoutProtocol, withoutTrailingSlash };\n","import destr from 'destr';\nimport { withBase, withQuery } from 'ufo';\n\nclass FetchError extends Error {\n  constructor() {\n    super(...arguments);\n    this.name = \"FetchError\";\n  }\n}\nfunction createFetchError(request, error, response) {\n  let message = \"\";\n  if (request && response) {\n    message = `${response.status} ${response.statusText} (${request.toString()})`;\n  }\n  if (error) {\n    message = `${error.message} (${message})`;\n  }\n  const fetchError = new FetchError(message);\n  Object.defineProperty(fetchError, \"request\", { get() {\n    return request;\n  } });\n  Object.defineProperty(fetchError, \"response\", { get() {\n    return response;\n  } });\n  Object.defineProperty(fetchError, \"data\", { get() {\n    return response && response._data;\n  } });\n  Object.defineProperty(fetchError, \"status\", { get() {\n    return response && response.status;\n  } });\n  Object.defineProperty(fetchError, \"statusText\", { get() {\n    return response && response.statusText;\n  } });\n  Object.defineProperty(fetchError, \"statusCode\", { get() {\n    return response && response.status;\n  } });\n  Object.defineProperty(fetchError, \"statusMessage\", { get() {\n    return response && response.statusText;\n  } });\n  return fetchError;\n}\n\nconst payloadMethods = new Set(Object.freeze([\"PATCH\", \"POST\", \"PUT\", \"DELETE\"]));\nfunction isPayloadMethod(method = \"GET\") {\n  return payloadMethods.has(method.toUpperCase());\n}\nfunction isJSONSerializable(value) {\n  if (value === void 0) {\n    return false;\n  }\n  const t = typeof value;\n  if (t === \"string\" || t === \"number\" || t === \"boolean\" || t === null) {\n    return true;\n  }\n  if (t !== \"object\") {\n    return false;\n  }\n  if (Array.isArray(value)) {\n    return true;\n  }\n  return value.constructor && value.constructor.name === \"Object\" || typeof value.toJSON === \"function\";\n}\nconst textTypes = /* @__PURE__ */ new Set([\n  \"image/svg\",\n  \"application/xml\",\n  \"application/xhtml\",\n  \"application/html\"\n]);\nconst JSON_RE = /^application\\/(?:[\\w!#$%&*.^`~-]*\\+)?json(;.+)?$/i;\nfunction detectResponseType(_contentType = \"\") {\n  if (!_contentType) {\n    return \"json\";\n  }\n  const contentType = _contentType.split(\";\").shift();\n  if (JSON_RE.test(contentType)) {\n    return \"json\";\n  }\n  if (textTypes.has(contentType) || contentType.startsWith(\"text/\")) {\n    return \"text\";\n  }\n  return \"blob\";\n}\n\nconst retryStatusCodes = /* @__PURE__ */ new Set([\n  408,\n  409,\n  425,\n  429,\n  500,\n  502,\n  503,\n  504\n]);\nfunction createFetch(globalOptions) {\n  const { fetch, Headers } = globalOptions;\n  function onError(context) {\n    const isAbort = context.error && context.error.name === \"AbortError\" || false;\n    if (context.options.retry !== false && !isAbort) {\n      const retries = typeof context.options.retry === \"number\" ? context.options.retry : isPayloadMethod(context.options.method) ? 0 : 1;\n      const responseCode = context.response && context.response.status || 500;\n      if (retries > 0 && retryStatusCodes.has(responseCode)) {\n        return $fetchRaw(context.request, {\n          ...context.options,\n          retry: retries - 1\n        });\n      }\n    }\n    const error = createFetchError(context.request, context.error, context.response);\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(error, $fetchRaw);\n    }\n    throw error;\n  }\n  const $fetchRaw = async function $fetchRaw2(_request, _options = {}) {\n    const context = {\n      request: _request,\n      options: { ...globalOptions.defaults, ..._options },\n      response: void 0,\n      error: void 0\n    };\n    if (context.options.onRequest) {\n      await context.options.onRequest(context);\n    }\n    if (typeof context.request === \"string\") {\n      if (context.options.baseURL) {\n        context.request = withBase(context.request, context.options.baseURL);\n      }\n      if (context.options.query || context.options.params) {\n        context.request = withQuery(context.request, { ...context.options.params, ...context.options.query });\n      }\n      if (context.options.body && isPayloadMethod(context.options.method) && isJSONSerializable(context.options.body)) {\n        context.options.body = typeof context.options.body === \"string\" ? context.options.body : JSON.stringify(context.options.body);\n        context.options.headers = new Headers(context.options.headers);\n        if (!context.options.headers.has(\"content-type\")) {\n          context.options.headers.set(\"content-type\", \"application/json\");\n        }\n        if (!context.options.headers.has(\"accept\")) {\n          context.options.headers.set(\"accept\", \"application/json\");\n        }\n      }\n    }\n    context.response = await fetch(context.request, context.options).catch(async (error) => {\n      context.error = error;\n      if (context.options.onRequestError) {\n        await context.options.onRequestError(context);\n      }\n      return onError(context);\n    });\n    const responseType = (context.options.parseResponse ? \"json\" : context.options.responseType) || detectResponseType(context.response.headers.get(\"content-type\") || \"\");\n    if (responseType === \"json\") {\n      const data = await context.response.text();\n      const parseFunction = context.options.parseResponse || destr;\n      context.response._data = parseFunction(data);\n    } else if (responseType === \"stream\") {\n      context.response._data = context.response.body;\n    } else {\n      context.response._data = await context.response[responseType]();\n    }\n    if (context.options.onResponse) {\n      await context.options.onResponse(context);\n    }\n    if (context.response.status >= 400 && context.response.status < 600) {\n      if (context.options.onResponseError) {\n        await context.options.onResponseError(context);\n      }\n      return onError(context);\n    }\n    return context.response;\n  };\n  const $fetch = function $fetch2(request, options) {\n    return $fetchRaw(request, options).then((r) => r._data);\n  };\n  $fetch.raw = $fetchRaw;\n  $fetch.native = fetch;\n  $fetch.create = (defaultOptions = {}) => createFetch({\n    ...globalOptions,\n    defaults: {\n      ...globalOptions.defaults,\n      ...defaultOptions\n    }\n  });\n  return $fetch;\n}\n\nexport { FetchError as F, createFetchError as a, createFetch as c };\n","import { c as createFetch } from './shared/ofetch.5cb01515.mjs';\nexport { F as FetchError, c as createFetch, a as createFetchError } from './shared/ofetch.5cb01515.mjs';\nimport 'destr';\nimport 'ufo';\n\nconst _globalThis = function() {\n  if (typeof globalThis !== \"undefined\") {\n    return globalThis;\n  }\n  if (typeof self !== \"undefined\") {\n    return self;\n  }\n  if (typeof window !== \"undefined\") {\n    return window;\n  }\n  if (typeof global !== \"undefined\") {\n    return global;\n  }\n  throw new Error(\"unable to locate global object\");\n}();\nconst fetch = _globalThis.fetch || (() => Promise.reject(new Error(\"[ofetch] global.fetch is not supported!\")));\nconst Headers = _globalThis.Headers;\nconst ofetch = createFetch({ fetch, Headers });\nconst $fetch = ofetch;\n\nexport { $fetch, Headers, fetch, ofetch };\n","import { ofetch } from 'ofetch';\n\nexport const createApiService = (options) => {\n  const apiAuthHeader = options.apiAuthHeader || import.meta.env.VITE_API_AUTH_HEADER;\n  const baseURL = options.baseUrl || import.meta.env.VITE_API_URL;\n\n  const config = {\n    baseURL,\n    headers: {},\n  }\n\n  if (apiAuthHeader) {\n    config.headers.Authorization = apiAuthHeader;\n  }\n\n  return ofetch.create(config);\n}\n","<template>\n  <div class=\"appointment-form-wrap\">\n\n    <form\n      class=\"AppointmentForm\"\n      @submit.prevent=\"handleSubmit\"\n    >\n      <h2 class=\"AppointmentForm__title\">\n        Запись к нотариусу\n      </h2>\n\n      <input\n        v-model=\"data.name\"\n        type=\"text\"\n        name=\"name\"\n        placeholder=\"Имя\"\n        :disabled=\"isBusy\"\n        autocomplete=\"off\"\n        hidden\n      >\n\n      <div class=\"AppointmentForm__field\">\n        <input\n          v-model=\"data.fio\"\n          type=\"text\"\n          name=\"fio\"\n          placeholder=\"ФИО\"\n          :disabled=\"isBusy\"\n          autocomplete=\"family-name\"\n          required\n        >\n        <div\n          v-if=\"errors.fio\"\n          class=\"form-error\"\n        >{{ errors.fio }}</div>\n      </div>\n\n      <div class=\"AppointmentForm__field\">\n        <input\n          v-model=\"data.phone\"\n          type=\"tel\"\n          name=\"phone\"\n          placeholder=\"Контактный телефон\"\n          :disabled=\"isBusy\"\n          autocomplete=\"tel\"\n          required\n        >\n        <div\n          v-if=\"errors.phone\"\n          class=\"form-error\"\n        >{{ errors.phone }}</div>\n      </div>\n\n      <div class=\"AppointmentForm__field\">\n        <input\n          v-model=\"data.email\"\n          type=\"email\"\n          name=\"email\"\n          placeholder=\"Email\"\n          :disabled=\"isBusy\"\n          autocomplete=\"email\"\n          required\n        >\n        <div\n          v-if=\"errors.email\"\n          class=\"form-error\"\n        >{{ errors.email }}</div>\n      </div>\n\n      <div class=\"AppointmentForm__field\">\n        <ReasonSelect\n          v-model=\"data.service\"\n          placeholder=\"Причина обращения\"\n          name=\"service\"\n          :options=\"notaryActions\"\n        />\n        <div\n          v-if=\"errors.service\"\n          class=\"form-error\"\n        >{{ errors.service }}</div>\n      </div>\n\n      <div class=\"AppointmentForm__field\">\n        <SlotPicker\n          name=\"timeslot\"\n          v-model=\"data.timeslot\"\n          :availableDates=\"notaryTimeslots\"\n        />\n        <div\n          v-if=\"errors.timeslot\"\n          class=\"form-error\"\n        >{{ errors.timeslot }}</div>\n      </div>\n\n      <div class=\"AppointmentForm__field\">\n        <textarea\n          v-model=\"data.comment\"\n          name=\"comment\"\n          rows=\"5\"\n          placeholder=\"Комментарий\">\n        </textarea>\n      </div>\n\n      <div class=\"AppointmentForm__field\">\n        <label class=\"field-label\">Файл</label>\n        <input\n          name=\"file\"\n          type=\"file\"\n          placeholder=\"Файл\"\n\n          @change=\"setFile\"\n        />\n        <div\n          v-if=\"errors.file\"\n          class=\"form-error\"\n        >{{ errors.file }}</div>\n      </div>\n\n      <div class=\"AppointmentForm__field\">\n        <Checkbox v-model=\"data.terms_agreement\" name=\"terms_agreement\">\n          <!--noindex-->Соглашаюсь на <a :href=\"privacyPolicyLink\">обработку и хранение своих персональных данных</a> и ознакомлен с <a :href=\"termsOfUseLink\">пользовательским соглашением</a><!--/noindex-->\n        </Checkbox>\n        <div\n          v-if=\"errors.terms_agreement\"\n          class=\"form-error\"\n        >{{ errors.terms_agreement }}</div>\n      </div>\n\n      <button\n        class=\"AppointmentForm__submit\"\n        type=\"submit\"\n        :disabled=\"isBusy\"\n      >Отправить заявку</button>\n    </form>\n\n    <div\n      v-if=\"formSent\"\n      class=\"form-overlay\"\n    >\n      <span>\n        Заявка отправлена.\n        <span class=\"small\">Пожалуйста, подтвердите запись в письме, отправленном на указанную почту.</span>\n      </span>\n    </div>\n\n  </div>\n</template>\n\n<script>\nimport { defineComponent, ref, reactive } from 'vue';\n\nimport SlotPicker from '@/src/components/SlotPicker/index.vue';\nimport ReasonSelect from '@/src/components/ReasonSelect/index.vue';\nimport Checkbox from '@/src/components/Checkbox.vue';\nimport { createApiService } from '@/src/services/api';\n\n\n// const notaryActions = [\n//   { type: 'option', value: '1', label: 'Option 1' },\n//   { type: 'option', value: '2', label: 'Option 2' },\n//   { type: 'option', value: '3', label: 'Option 3' },\n//   { type: 'option', value: '4', label: 'Option 4' },\n//   { type: 'option', value: '5', label: 'Option 5' },\n//   { type: 'option', value: '6', label: 'Option 6' },\n//   { type: 'optgroup', label: 'Optgroup 1', options: [\n//     { type: 'option', value: '1-1', label: 'Option 1/1' },\n//     { type: 'option', value: '1-2', label: 'Option 1/2' },\n//     { type: 'option', value: '1-3', label: 'Option 1/3' },\n//   ]},\n//   { type: 'option', value: '7', label: 'Option 7' },\n//   { type: 'option', value: '8', label: 'Option 8' },\n//   { type: 'option', value: '9', label: 'Option 9' },\n//   { type: 'optgroup', label: 'Optgroup 2', options: [\n//     { type: 'option', value: '2-1', label: 'Option 2/1' },\n//     { type: 'option', value: '2-2', label: 'Option 2/2' },\n//     { type: 'option', value: '2-3', label: 'Option 2/3' },\n//   ]},\n// ]\n\nexport default defineComponent({\n  name: 'AppointmentForm',\n\n  components: {\n    SlotPicker,\n    ReasonSelect,\n    Checkbox,\n  },\n\n  props: {\n    notaryId: [Number, String],\n    apiBaseUrl: String,\n    apiAuthHeader: String,\n    privacyPolicyLink: String,\n    termsOfUseLink: String,\n    debugData: {\n      type: Object,\n      default: null,\n      required: false,\n    },\n  },\n\n  setup(props) {\n    const api = createApiService({\n      baseUrl: props.apiBaseUrl,\n      apiAuthHeader: props.apiAuthHeader,\n    });\n\n    const isBusy = ref(false);\n    const formSent = ref(false);\n\n    const data = reactive({\n      name: '🍯',\n      fio: '',\n      phone: '',\n      email: '',\n      service: '',\n      timeslot: null,\n      comment: '',\n      file: null,\n      terms_agreement: false,\n    });\n\n    const errors = reactive({\n      fio: '',\n      phone: '',\n      email: '',\n      service: '',\n      timeslot: '',\n      terms_agreement: '',\n      file: '',\n    });\n\n    // DEBUG\n    if (props.debugData) {\n      data.fio = props.debugData.fio || '';\n      data.phone = props.debugData.phone || '';\n      data.email = props.debugData.email || '';\n      data.comment = props.debugData.comment || '';\n      data.terms_agreement = props.debugData.terms_agreement;\n    }\n\n    // get notary timeslots\n    const notaryTimeslots = ref([]);\n    api(\n        '/timeslot/',\n        {\n          query: {\n            notary: props.notaryId,\n          }\n        }\n      )\n      .then(result => notaryTimeslots.value = result)\n      .catch(error => console.error);\n\n    // get notary actions\n    const notaryActions = ref([]);\n    api(\n        '/notary-action/',\n        {\n          query: {\n            notary: props.notaryId,\n          }\n        }\n      )\n      .then(result => {\n        result.sort((a, b) => a.value - b.value);\n        notaryActions.value = result;\n      })\n      .catch(error => console.error);\n\n    // validate form before submition\n    const validateForm = () => {\n      let isValid = true;\n      const requiredFields = ['fio', 'phone', 'email', 'service', 'timeslot', 'terms_agreement'];\n\n      // reset\n      for (let k of Object.keys(errors)) {\n        errors[k] = '';\n      };\n\n      requiredFields.forEach((key) => {\n        // check\n        if (!data[key]) {\n          isValid = false;\n          errors[key] = 'Обязательное поле';\n        }\n      });\n\n      return isValid;\n    };\n\n    // submit form\n    const handleSubmit = async (event) => {\n      isBusy.value = true;\n\n      if (!validateForm()) {\n        isBusy.value = false;\n        return;\n      }\n\n      const service_name = notaryActions.value.find(i => i.value == data.service);\n\n      const formData = new FormData();\n      formData.append('notary_federal_number', props.notaryId);\n      formData.append('slot', data.timeslot.id);\n      formData.append('slot_datetime', data.timeslot.rawDateTime);\n      formData.append('service', data.service);\n      formData.append('service_name', service_name.label);\n      formData.append('name', data.name);\n      formData.append('fio', data.fio);\n      formData.append('email', data.email);\n      formData.append('phone', data.phone);\n      formData.append('comment', data.comment);\n      if (data.file) {\n        formData.append('file', data.file);\n      }\n      formData.append('terms_agreement', data.terms_agreement);\n\n      try {\n        const res = await api(\n          '/appointment-request/',\n          {\n            method: 'post',\n            body: formData,\n          }\n        );\n\n        // ok\n        if (res.book_id) {\n          formSent.value = true;\n        }\n      }\n      // go sucess screen\n      catch(error) {\n        if (error.data) {\n          for (let k in error.data) {\n            errors[k] = error.data[k].join(' ');\n          }\n        }\n      }\n      finally {\n        isBusy.value = false;\n      }\n\n    };\n\n\n    const setFile = (event) => {\n      if (event.target && event.target.files && event.target.files.length > 0) {\n        data.file = event.target.files[0];\n      }\n    };\n\n    return {\n      data,\n      errors,\n\n      formSent,\n      isBusy,\n      notaryTimeslots,\n      notaryActions,\n\n      handleSubmit,\n      setFile,\n    };\n  },  // end: setup()\n});\n</script>\n\n\n<style lang=\"scss\" scoped>\n.appointment-form-wrap {\n  position: relative;\n\n  .form-overlay {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background: white;\n\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n\n    span {\n      font-family: 'TT Hoves', Arial, Helvetica, sans-serif;\n      font-style: normal;\n      font-weight: normal;\n      font-size: 2rem;\n      line-height: 200%;\n      text-align: center;\n      letter-spacing: 0.035em;\n\n      .small {\n        display: block;\n        font-size: 1.125rem;\n        line-height: 127%;\n      }\n    }\n  }\n}\n\n.AppointmentForm {\n  font-family: 'TT Hoves', Arial, Helvetica, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1.125rem;\n  line-height: 127%;\n  text-align: center;\n  letter-spacing: 0.035em;\n\n  label {\n    text-align: left;\n  }\n\n  .field-label {\n    display: block;\n    margin-bottom: 6px;\n  }\n}\n\n.form-error {\n  margin: 0.25rem 0;\n  color: red;\n}\n\nbutton {\n  display: inline-block;\n  box-sizing: border-box;\n  color: white;\n  cursor: pointer;\n  padding: 0 1.875rem;\n  font-weight: 600;\n  font-size: 1.125rem;\n  font-family: inherit;\n  line-height: 3.75rem;\n  letter-spacing: 0.03em;\n  text-align: center;\n  border: none;\n  background-color: #2C77CF;\n  border-radius: 0.3125rem;\n  transition: background-color .25s ease, box-shadow .25s ease;\n\n  &:hover {\n    background-color: #4184D3;\n  }\n\n  &:active {\n    background-color: #1367CA;\n  }\n\n  &:disabled {\n    background-color: #898a8b;\n    color: #b0b0b1;\n  }\n}\n\n.AppointmentForm__submit {\n  display: block;\n  min-width: 7.5rem;\n  width: 100%;\n  background-color: var(--background-button-primary);\n}\n\n\n.AppointmentForm__title {\n  margin: auto;\n  font-style: normal;\n  font-weight: 500;\n  font-size: 1.75rem;\n  line-height: 2.0625rem;\n  letter-spacing: 0.01em;\n}\n\n\n:where(\n  input[type=text],\n  input[type=number],\n  input[type=tel],\n  input[type=email],\n  textarea\n) {\n  @include field;\n  margin: 1.25rem 0;\n\n  &:focus {\n    outline: none;\n  }\n\n  &:focus-visible {\n    outline: none;\n    @include focus;\n  }\n}\n\n:where(textarea) {\n  resize: vertical;\n  height: 7.5rem;\n}\n.AppointmentForm__field {\n  margin: 1.25rem 0;\n\n  input, textarea {\n    display: block;\n    width: 100%;\n  }\n}\n</style>\n","import AppointmentForm from './index.vue';\nimport '@/assets/styles/index.sass';\nimport Vue from 'vue';\n\n\nconst plugin = {\n  install(Instance) {\n    if (this.installed) {\n      return;\n    }\n\n    Instance.component('AppointmentForm', AppointmentForm);\n    this.installed = true;\n\n    console.debug('-*- AppointmentForm has been planted -*-');\n  },\n\n  installed: false,\n};\n\nexport { AppointmentForm };\nexport default plugin;\n\n// if (!Vue) {\n//   throw new Error('AppointmentForm module: unable to access the Vue. Did you plugged it in?');\n// } else if (!/^(2\\.7\\.\\d+|3\\.\\d+\\.)/.test(Vue.version)) {\n//   throw new Error(`AppointmentForm module: Vue.version is ${Vue.version} and not matched (2.7.x|3.x.x)`);\n// }\n\nVue.use(plugin);\n"],"names":["e","n","module","this","t","i","a","d","o","c","u","r","l","h","s","f","v","g","b","_","C","D","p","M","S","w","T","P","k","WEEKS","WEEKS_LONG","MONTHS","DATE","_sfc_main","DatePick","value","date","dateString","availableSlots","slot","TimeSlot","slotData","datetime","weekDayIndex","now","key","timeSlot","VCalendar","VTimes","days","vClickOutside","DropDown","availableDates","timeSlotList","getAlignment","placement","getLengthFromAxis","axis","getSide","getMainAxisFromPlacement","computeCoordsFromPlacement","_ref","rtl","reference","floating","commonX","commonY","mainAxis","length","commonAlign","side","isVertical","coords","computePosition","config","__async","strategy","middleware","platform","validMiddleware","rects","x","y","statefulPlacement","middlewareData","resetCount","name","fn","nextX","nextY","data","reset","__spreadProps","__spreadValues","expandPaddingObject","padding","getSideObjectFromPadding","rectToClientRect","rect","detectOverflow","middlewareArguments","options","_await$platform$isEle","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","element","clippingClientRect","offsetParent","offsetScale","elementClientRect","oppositeSideMap","getOppositePlacement","getAlignmentSides","alignment","mainAlignmentSide","oppositeAlignmentMap","getOppositeAlignmentPlacement","getExpandedPlacements","oppositePlacement","getSideList","isStart","lr","rl","tb","bt","getOppositeAxisPlacements","flipAlignment","direction","list","flip","_middlewareData$flip","initialPlacement","_a","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","__objRest","isBasePlacement","fallbackPlacements","placements","overflow","overflows","overflowsData","main","cross","_middlewareData$flip2","_overflowsData$find","nextIndex","nextPlacement","resetPlacement","_overflowsData$map$so","acc","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","crossAxis","alignmentAxis","offset","diffCoords","getWindow","node","_node$ownerDocument","getComputedStyle$1","min","max","round","getCssDimensions","css","width","height","offsetWidth","offsetHeight","shouldFallback","getNodeName","isNode","uaString","getUAString","uaData","item","isHTMLElement","isElement","isShadowRoot","OwnElement","isOverflowElement","overflowX","overflowY","display","isTableElement","isContainingBlock","isFirefox","backdropFilter","contain","isLayoutViewport","isLastTraversableNode","unwrapElement","FALLBACK_SCALE","getScale","domElement","fallback","getBoundingClientRect","includeScale","isFixedStrategy","_win$visualViewport","_win$visualViewport2","clientRect","scale","win","addVisualOffsets","offsetWin","currentIFrame","iframeScale","iframeRect","getDocumentElement","getNodeScroll","convertOffsetParentRelativeRectToViewportRelativeRect","isOffsetParentAnElement","documentElement","scroll","offsets","offsetRect","getWindowScrollBarX","getDocumentRect","html","body","getParentNode","result","getNearestOverflowAncestor","parentNode","getOverflowAncestors","scrollableAncestor","isBody","getViewportRect","visualViewport","layoutViewport","getInnerBoundingClientRect","top","left","getClientRectFromClippingAncestor","clippingAncestor","getClippingElementAncestors","cache","cachedResult","el","currentContainingBlockComputedStyle","elementIsFixed","currentNode","computedStyle","containingBlock","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getTrueOffsetParent","getContainingBlock","getOffsetParent","window","getRectRelativeToOffsetParent","getOffsetParentFn","getDimensionsFn","mergedOptions","platformWithCache","computePosition$1","Vue","_$el","useFloating","whileElementsMountedOption","openOption","computed","_unref","unref","middlewareOption","placementOption","_unref2","strategyOption","_unref3","referenceElement","floatingElement","ref","shallowRef","isPositioned","whileElementsMountedCleanup","update","position","cleanup","attach","watch","getCurrentScope","onScopeDispose","shallowReadonly","isClient","isString","val","noop","resolveUnref","identity","arg","tryOnScopeDispose","unrefElement","elRef","plain","defaultWindow","useEventListener","args","target","events","listeners","cleanups","register","event","listener","stopWatch","stop","onClickOutside","handler","ignore","capture","detectIframe","shouldListen","shouldIgnore","target2","path","_global","globalKey","SwipeDirection","SwipeDirection2","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","obj","prop","defineComponent","props","emit","search","root","isActive","localModel","optionsToShow","$search","option","l2","label","trigger","dropdown","selectedOption","l1o","$option","setInactive","payload","setActive","nextTick","searchInput","suspectProtoRx","suspectConstructorRx","JsonSigRx","jsonParseTransform","destr","_lval","error","HASH_RE","AMPERSAND_RE","EQUAL_RE","PLUS_RE","ENC_BRACKET_OPEN_RE","ENC_BRACKET_CLOSE_RE","ENC_CARET_RE","ENC_BACKTICK_RE","ENC_CURLY_OPEN_RE","ENC_PIPE_RE","ENC_CURLY_CLOSE_RE","ENC_SPACE_RE","encode","text","encodeQueryValue","encodeQueryKey","decode","decodeQueryValue","parseQuery","parametersString","object","parameter","encodeQueryItem","_value","stringifyQuery","query","PROTOCOL_REGEX","PROTOCOL_RELATIVE_REGEX","hasProtocol","inputString","acceptProtocolRelative","TRAILING_SLASH_RE","hasTrailingSlash","input","queryParameters","withoutTrailingSlash","s0","withTrailingSlash","hasLeadingSlash","withoutLeadingSlash","withBase","base","isEmptyURL","_base","joinURL","withQuery","parsed","parseURL","mergedQuery","stringifyParsedURL","url","isNonEmptyURL","index","url2","defaultProto","parsePath","protocol","auth","hostAndPath","host","pathname","hash","fullpath","FetchError","createFetchError","request","response","message","fetchError","payloadMethods","isPayloadMethod","method","isJSONSerializable","textTypes","JSON_RE","detectResponseType","_contentType","contentType","retryStatusCodes","createFetch","globalOptions","fetch","Headers","onError","context","isAbort","retries","responseCode","$fetchRaw","_0","_request","_options","responseType","parseFunction","$fetch","defaultOptions","_globalThis","ofetch","createApiService","apiAuthHeader","SlotPicker","ReasonSelect","Checkbox","api","isBusy","formSent","reactive","errors","notaryTimeslots","notaryActions","validateForm","isValid","requiredFields","service_name","formData","plugin","Instance","AppointmentForm"],"mappings":"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"}