vuetensils
Version:
A 'naked' component library for building accessible, lightweight, on-brand applications.
13 lines • 63.5 kB
JavaScript
(function(d,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(d=typeof globalThis<"u"?globalThis:d||self,e(d.Vuetensils={},d.Vue))})(this,function(d,e){"use strict";const y=(t,n)=>{const s=t.__vccOpts||t;for(const[r,l]of n)s[r]=l;return s},Ee={name:"VAlert",model:{prop:"modelValue",event:"update:modelValue"},props:{tag:{type:String,default:"div"},modelValue:{type:[Boolean,Number],default:!0},dismissible:Boolean,dismissLabel:{type:[String,Boolean],default:"Dismiss this alert"},transition:{type:String,default:void 0},classes:{type:Object,default:()=>({})}},data:()=>({dismissed:!1,timerId:null}),watch:{modelValue:{handler(t){t&&(this.dismissed=!1),typeof t=="number"&&(this.clearTimer(),this.countdown())},immediate:!0}},beforeUnmount(){this.clearTimer()},beforeDestroy(){this.clearTimer()},methods:{dismiss(){this.$emit("dismiss"),this.dismissed=!0,typeof this.modelValue=="number"?(this.$emit("update:modelValue",0),this.$emit("update",0),this.clearTimer()):(this.$emit("update:modelValue",!1),this.$emit("update",!1))},countdown(){const{modelValue:t}=this;typeof t!="number"||t<=0||(this.timerId=setTimeout(()=>{this.$emit("update:modelValue",t-1),this.$emit("update",t-1)},1e3))},clearTimer(){const{timerId:t}=this;t&&(clearInterval(t),this.timerId=null)}}},Be=["aria-label"];function Ve(t,n,s,r,l,a){return e.openBlock(),e.createBlock(e.Transition,{name:s.transition},{default:e.withCtx(()=>[!t.dismissed&&s.modelValue?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.tag),{key:0,role:"alert",class:e.normalizeClass(["vts-alert",s.classes.root])},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default"),s.dismissible?(e.openBlock(),e.createElementBlock("button",{key:0,"aria-label":s.dismissLabel||null,class:e.normalizeClass(["vts-alert__dismiss",s.classes.dismiss]),type:"button",onClick:n[0]||(n[0]=(...o)=>a.dismiss&&a.dismiss(...o))},[e.renderSlot(t.$slots,"dismiss",{},()=>[e.createTextVNode("×")])],10,Be)):e.createCommentVNode("",!0)]),_:3},8,["class"])):e.createCommentVNode("",!0)]),_:3},8,["name"])}const T=y(Ee,[["render",Ve]]),z={name:"VAsync",props:{await:{type:[Promise,Function],default:()=>Promise.resolve()},default:{type:void 0,default:void 0}},emits:["pending","resolve","reject","finally"],data(){return{pending:!1,results:this.default,error:null,done:!1}},watch:{await:{handler:"awaitOn",immediate:!0},pending:{handler(t){this.$emit("pending",t)},immediate:!0}},methods:{awaitOn(t){if(t&&(t=typeof t=="function"?t():t,!!t.then))return this.pending=!0,this.results=this.default,this.error=null,t.then(n=>{this.results=typeof n>"u"?this.default:n,this.$emit("resolve",n)}).catch(n=>{n instanceof Error&&(n={name:n.name,message:n.message}),this.error=n,this.$emit("reject",n)}).finally(()=>{this.pending=!1,this.done=!0,this.$emit("finally")})}},render(){const{pending:t,error:n,results:s,done:r}=this;let l=this.$slots;const a=l.pending,o=l.rejected,i=l.resolved,c=l.default;if(t&&a)return a();if(r&&n&&o)return o(n);if(r&&!n&&i)return i(s);if(c)return c({pending:t,resolved:s,rejected:n,results:s,error:n})}},us="",Ce={name:"VBtn",inheritAttrs:!1,props:{action:{type:String,default:""},data:{type:Object,default:()=>({})}},emits:["submit"],computed:{tag(){const t=this.$attrs||{};return t.to?"RouterLink":t.href?"a":"button"},type(){if(this.tag==="button")return this.$attrs.type||"button"},listeners(){return this.$attrs}}},De=["action"],Pe=["value","name"];function Ne(t,n,s,r,l,a){return s.action&&s.data?(e.openBlock(),e.createElementBlock("form",{key:0,action:s.action,method:"POST",class:"vts-btn__form",onSubmit:n[0]||(n[0]=e.withModifiers(o=>t.$emit("submit",o),["prevent"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.data,(o,i)=>(e.openBlock(),e.createElementBlock("input",{key:i,value:o,name:String(i),type:"hidden",hidden:"",autocomplete:"off","aria-hidden":"true",tabindex:"-1"},null,8,Pe))),128)),e.createElementVNode("button",e.mergeProps({type:"submit"},t.$attrs,{class:"vts-btn"},e.toHandlers(a.listeners,!0)),[e.renderSlot(t.$slots,"default")],16)],40,De)):(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.tag),e.mergeProps({key:1,class:"vts-btn",type:a.type},t.$attrs,e.toHandlers(a.listeners)),{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},16,["type"]))}const M=y(Ce,[["render",Ne]]),m=Object.freeze({TAB:9,ENTER:13,ESC:27,SPACE:32,PAGEUP:33,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40}),F=t=>t.focus(),O={mounted:F,inserted:F};function I(t,n){t._vtsClickout={stop:s=>s.stopPropagation()},document.body.addEventListener("click",n.value),t.addEventListener("click",t._vtsClickout.stop)}function v(t,n){document.body.removeEventListener("click",n.value),t.removeEventListener("click",t._vtsClickout.stop)}const E={mounted:I,unmounted:v,bind:I,unbind:v};function L(t){const n=document.activeElement,s=document.createElement("textarea");s.value=t,s.setAttribute("readonly",""),s.style.position="absolute",s.style.left="-9999px",s.style.fontSize="12pt",document.body.append(s),s.select(),document.execCommand("copy"),s.remove(),n&&n.focus()}function A(t,n){t._vtsCopy=()=>L(n.value),t.addEventListener("click",t._vtsCopy)}function x(t,n){t.removeEventListener("click",t._vtsCopy),t._vtsCopy=()=>L(n.value),t.addEventListener("click",t._vtsCopy)}function j(t){t.removeEventListener("click",t._vtsCopy)}const H={mounted:A,updated:x,unmounted:j,bind:A,update:x,unbind:j};function U(t,n){t._vtsFocusout=()=>{requestAnimationFrame(()=>{t.contains(document.activeElement)||n.value()})},t.addEventListener("focusout",t._vtsFocusout)}function R(t){t._vtsFocusout&&t.removeEventListener("focusout",t._vtsFocusout)}const Y={mounted:U,unmounted:R,bind:U,unbind:R};function B(t){t._vtsIntersect&&(t._vtsIntersect.unobserve(t),delete t._vtsIntersect)}function K(t,{value:n,modifiers:s}){const r={...n},{enter:l,exit:a,once:o}=s;r.root&&(r.root=typeof r.root=="string"?document.querySelector(r.root):r.root);const i={...n};n instanceof Function&&(l&&(i.onEnter=n),a&&(i.onExit=n),!l&&!a&&(i.onChange=n));const c=new IntersectionObserver(([u])=>{const f=Array.isArray(r.threshold),h={};for(const g in u)h[g]=u[g];h.isIntersecting=f?r.threshold.includes(u.intersectionRatio):u.intersectionRatio===r.threshold,h.isIntersecting?i.onEnter&&i.onEnter(h,t):i.onExit&&i.onExit(h,t),i.onChange&&i.onChange(h,t),o&&B(t)},r);c.observe(t),t._vtsIntersect=c}const q={mounted:K,unmounted:B,inserted:K,unbind:B},W=Object.freeze(Object.defineProperty({__proto__:null,autofocus:O,clickout:E,copy:H,focusout:Y,intersect:q},Symbol.toStringTag,{value:"Module"})),V=['a[href]:not([tabindex^="-"])','area[href]:not([tabindex^="-"])','input:not([disabled]):not([type="hidden"]):not([aria-hidden]):not([tabindex^="-"])','select:not([disabled]):not([aria-hidden]):not([tabindex^="-"])','textarea:not([disabled]):not([aria-hidden]):not([tabindex^="-"])','button:not([disabled]):not([aria-hidden]):not([tabindex^="-"]):not([tabindex^="-"])','iframe:not([tabindex^="-"])','object:not([tabindex^="-"])','embed:not([tabindex^="-"])','[contenteditable]:not([tabindex^="-"])','[tabindex]:not([tabindex^="-"])'];function b(t=10,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"){let s="";for(let r=0;r<t;r++)s+=n.charAt(Math.floor(Math.random()*n.length));return s}function C(t,n){return Object.prototype.toString.call(t).slice(8,-1).toLowerCase()===n.toLowerCase()}function Te(t,n){const s=Array.from(t.querySelectorAll(V));if(!s.length){n.preventDefault();return}if(!t.contains(document.activeElement))n.preventDefault(),s[0].focus();else{const r=s.indexOf(document.activeElement);n.shiftKey&&r===0&&(s[s.length-1].focus(),n.preventDefault()),!n.shiftKey&&r===s.length-1&&(s[0].focus(),n.preventDefault())}}const fs="";function $(t,n){return t.getFullYear()===n.getFullYear()&&t.getMonth()===n.getMonth()&&t.getDate()===n.getDate()}const ze=[m.UP,m.DOWN,m.LEFT,m.RIGHT,m.PAGEUP,m.PAGEDOWN,m.HOME,m.END],Me={selectDate:"Select Date",showCalendar:"show calendar",previousMonth:"previous month",nextMonth:"next month",previousYear:"previous year",nextYear:"next year"},Fe={name:"VDate",directives:{clickout:E},model:{prop:"date",event:"update"},props:{modelValue:{type:[Date,String],default:()=>new Date},date:{type:[Date,String],default:()=>new Date},min:{type:[Date,String],default:""},max:{type:[Date,String],default:""},id:{type:String,default:()=>`vts-${b(4)}`},daysOfWeek:{type:Object,default:()=>Object.freeze({Su:"Sunday",Mo:"Monday",Tu:"Tuesday",We:"Wednesday",Th:"Thursday",Fr:"Friday",Sa:"Saturday"})},monthLabels:{type:Array,default:()=>["January","February","March","April","May","June","July","August","September","October","November","December"]},buttonLabels:{type:Object,default:()=>Object.freeze(Me)},classes:{type:Object,default:()=>({})}},emits:["update","update:modelValue"],data(){return{show:!1,previousActiveEl:null,focusedDate:new Date(this.modelValue||this.date),selectedDate:new Date(this.modelValue||this.date)}},computed:{monthYear(){const{monthLabels:t,focusedDate:n}=this;return`${t[n.getMonth()]} ${n.getFullYear()}`},disableNav(){const{focusedDate:t,min:n,max:s}=this,r={},l=new Date(n),a=new Date(s);return n&&(r.prevYear=t.getFullYear()<=l.getFullYear(),r.prevMonth=t.getMonth()<=l.getMonth()),s&&(r.nextYear=t.getFullYear()>=a.getFullYear(),r.nextMonth=t.getMonth()>=a.getMonth()),r},daysByWeeks(){const{focusedDate:t,selectedDate:n,min:s,max:r}=this,l=new Date(t.getFullYear(),t.getMonth(),1),a=l.getDay();l.setDate(l.getDate()-a);const o=new Date(t.getFullYear(),t.getMonth()+1,0).getDate(),i=new Date(l),c=a+o<36?5:6,u=[];for(let f=0;f<c;f++){u.push([]);for(let h=0;h<7;h++){const g=new Date(i);let _=!1;s&&(_=g<new Date(s)),r&&!_&&(_=g>new Date(r)),u[f].push({date:g,isFocused:$(g,t),isSelected:$(g,n),disabled:_}),i.setDate(i.getDate()+1)}}return u},toggle(){const{show:t}=this;return{bind:{"aria-label":this.buttonLabels.selectDate,"aria-expanded":""+t},on:{click:()=>{this.show=!t}}}}},watch:{show(t){const{previousActiveEl:n,date:s}=this;t?(this.previousActiveEl=document.activeElement,this.focusedDate=new Date(s),this.$nextTick(()=>{this.$el.querySelector('button[aria-selected="true"]').focus()})):n&&n.focus()},selectedDate(t){this.$emit("update",t),this.$emit("update:modelValue",t),this.show=!1}},methods:{incrementMonthBy(t){const{focusedDate:n}=this,s=new Date(n);s.setMonth(s.getMonth()+t+1),s.setDate(0);const r=new Date(n);r.setDate(Math.min(r.getDate(),s.getDate())),r.setMonth(r.getMonth()+t),this.focusedDate=r},incrementYearBy(t){const n=new Date(this.focusedDate);n.setFullYear(n.getFullYear()+t),this.focusedDate=n},onClick({target:t}){t.classList.contains("vts-date__day")&&(this.selectedDate=new Date(t.value))},onKeydown(t){if(!t.target.classList.contains("vts-date__day")||!ze.includes(t.keyCode))return;t.stopPropagation(),t.preventDefault();const{focusedDate:n,min:s,max:r}=this,l=new Date(n);switch(t.keyCode){case m.ENTER:case m.SPACE:this.selectedDate=l;return;case m.RIGHT:l.setDate(l.getDate()+1);break;case m.LEFT:l.setDate(l.getDate()-1);break;case m.DOWN:l.setDate(l.getDate()+7);break;case m.UP:l.setDate(l.getDate()-7);break;case m.PAGEUP:t.shiftKey?l.setFullYear(n.getFullYear()-1):l.setMonth(n.getMonth()-1);break;case m.PAGEDOWN:t.shiftKey?l.setFullYear(n.getFullYear()+1):l.setMonth(n.getMonth()+1);break;case m.HOME:l.setDate(l.getDate()-l.getDay());break;case m.END:l.setDate(l.getDate()+(6-l.getDay()));break}const a=s&&new Date(s),o=r&&new Date(r);a&&l<a||o&&l>o||(this.focusedDate=l,this.$nextTick(()=>{this.$el.querySelector('button[aria-selected="true"]').focus()}))},onTab(t){const n=this.$refs.calendar;Te(n,t)},onClickout(t){const{show:n}=this;t.preventDefault(),n&&(this.show=!1)}}},Oe=["id"],Ie=["aria-label","aria-expanded"],ve=["aria-label"],Le=["aria-labelledby"],Ae={class:"vts-date__navigation"},xe=["aria-label","disabled"],je=["aria-label","disabled"],He=["id"],Ue=["aria-label","disabled"],Re=["aria-label","disabled"],Ye=["aria-labelledby"],Ke=["abbr"],qe=["tabindex","aria-selected","value","disabled"];function We(t,n,s,r,l,a){const o=e.resolveDirective("clickout");return e.withDirectives((e.openBlock(),e.createElementBlock("div",{id:s.id,class:e.normalizeClass(["vtd-date",s.classes.root])},[e.renderSlot(t.$slots,"default",e.normalizeProps(e.guardReactiveProps(a.toggle)),()=>[e.createElementVNode("button",{"aria-label":s.buttonLabels.selectDate,"aria-expanded":l.show?"true":"false",type:"button",class:e.normalizeClass(["vtd-date__toggle",s.classes.toggle]),onClick:n[0]||(n[0]=i=>l.show=!l.show)},[e.createElementVNode("span",{role:"img","aria-label":s.buttonLabels.showCalendar}," 📅 ",8,ve)],10,Ie)]),e.withDirectives(e.createElementVNode("div",{ref:"calendar",class:e.normalizeClass(["",["vtd-date__wrapper",s.classes.wrapper]]),role:"dialog","aria-modal":"true","aria-labelledby":`${s.id}-dialog-label`,onClick:n[5]||(n[5]=(...i)=>a.onClick&&a.onClick(...i)),onKeydown:[n[6]||(n[6]=(...i)=>a.onKeydown&&a.onKeydown(...i)),n[7]||(n[7]=e.withKeys((...i)=>a.onTab&&a.onTab(...i),["tab"])),n[8]||(n[8]=e.withKeys(i=>l.show=!1,["esc"]))]},[e.createElementVNode("div",Ae,[e.createElementVNode("button",{class:e.normalizeClass(["vtd-date__prev-year",s.classes.prevYear]),"aria-label":s.buttonLabels.previousYear,type:"button",disabled:a.disableNav.prevYear,onClick:n[1]||(n[1]=i=>a.incrementYearBy(-1))},[e.renderSlot(t.$slots,"prevYearLabel",{},()=>[e.createTextVNode("↞")])],10,xe),e.createElementVNode("button",{class:e.normalizeClass(["vtd-date__prev-month",s.classes.prevMonth]),"aria-label":s.buttonLabels.previousMonth,type:"button",disabled:a.disableNav.prevMonth,onClick:n[2]||(n[2]=i=>a.incrementMonthBy(-1))},[e.renderSlot(t.$slots,"prevMonthLabel",{},()=>[e.createTextVNode("←")])],10,je),e.createElementVNode("h4",{id:`${s.id}-dialog-label`,class:e.normalizeClass(["vtd-date__title",s.classes.title]),"aria-live":"polite"},e.toDisplayString(a.monthYear),11,He),e.createElementVNode("button",{class:e.normalizeClass(["vtd-date__next-month",s.classes.nextMonth]),"aria-label":s.buttonLabels.nextMonth,type:"button",disabled:a.disableNav.nextMonth,onClick:n[3]||(n[3]=i=>a.incrementMonthBy(1))},[e.renderSlot(t.$slots,"nextMonthLabel",{},()=>[e.createTextVNode("→")])],10,Ue),e.createElementVNode("button",{class:e.normalizeClass(["vtd-date__next-year",s.classes.nextYear]),"aria-label":s.buttonLabels.nextYear,type:"button",disabled:a.disableNav.nextYear,onClick:n[4]||(n[4]=i=>a.incrementYearBy(1))},[e.renderSlot(t.$slots,"nextYearLabel",{},()=>[e.createTextVNode("↠")])],10,Re)]),e.createElementVNode("table",{class:e.normalizeClass(["vtd-date__calendar",s.classes.calendar]),role:"grid","aria-labelledby":`${s.id}-dialog-label`},[e.createElementVNode("thead",{class:e.normalizeClass(["vtd-date__thead",s.classes.thead])},[e.createElementVNode("tr",{class:e.normalizeClass(["vtd-date__week",s.classes.week])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.daysOfWeek,(i,c)=>(e.openBlock(),e.createElementBlock("th",{key:c,abbr:i,scope:"col",class:e.normalizeClass(["vtd-date__th",s.classes.th])},e.toDisplayString(c),11,Ke))),128))],2)],2),e.createElementVNode("tbody",{class:e.normalizeClass(["vtd-date__tbody",s.classes.tbody])},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(6,i=>e.createElementVNode("tr",{key:i,class:e.normalizeClass(["vtd-date__tr",s.classes.tr])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.daysByWeeks[i-1],c=>(e.openBlock(),e.createElementBlock("td",{key:c.date.toString(),class:e.normalizeClass(["vts-date__td",{"vts-date__td--focused":c.isFocused},{"vts-date__td--selected":c.isSelected},s.classes.td,{[s.classes.tdFocused]:s.classes.tdFocused&&c.isFocused},{[s.classes.tdSelected]:s.classes.tdSelected&&c.isSelected}])},[e.createElementVNode("button",{class:e.normalizeClass(["vts-date__day",{"vts-date__day--focused":c.isFocused},{"vts-date__day--selected":c.isSelected},s.classes.day,{[s.classes.dayFocused]:s.classes.dayFocused&&c.isFocused},{[s.classes.daySelected]:s.classes.daySelected&&c.isSelected}]),tabindex:c.isFocused?"0":"-1","aria-selected":c.isFocused,value:c.date,disabled:c.disabled,type:"button"},e.toDisplayString(c.date.getDate()),11,qe)],2))),128))],2)),64))],2)],10,Ye)],42,Le),[[e.vShow,l.show]])],10,Oe)),[[o,a.onClickout]])}const G=y(Fe,[["render",We]]),hs="",$e={name:"VDialog",inheritAttrs:!1,model:{prop:"showing",event:"update:modelValue"},props:{modelValue:Boolean,showing:Boolean,tag:{type:String,default:"div"},dismissible:{type:Boolean,default:!0},width:{type:String,default:""},inlineSize:{type:String,default:""},maxWidth:{type:String,default:""},maxInlineSize:{type:String,default:""},noScroll:Boolean,transition:{type:String,default:""},bgTransition:{type:String,default:""},contentTransition:{type:String,default:""},classes:{type:Object,default:()=>({})}},emits:["update","update:modelValue","open","close"],data(){return{localShow:this.modelValue||this.showing,activeElement:null}},computed:{slots(){return this.$slots}},watch:{showing(t){this.localShow=t},modelValue(t){this.localShow=t},localShow:{handler(t,n){if(!(typeof window>"u")){if(t&&t!=n)this.activeElement=document.activeElement,this.onOpen();else{this.onClose();const{activeElement:s}=this;s&&s.focus&&this.$nextTick(()=>{s.focus()})}this.$emit("update",t),this.$emit("update:modelValue",t)}}}},destroyed(){this.onClose()},methods:{onOpen(){const{onClick:t,onKeydown:n,noScroll:s}=this;window.addEventListener("click",t),window.addEventListener("keydown",n),s&&document.body.style.setProperty("overflow","hidden"),this.$nextTick(()=>{var r;return(r=this.$refs.content)==null?void 0:r.focus()}),this.$emit("open")},onClose(){const{onClick:t,onKeydown:n,noScroll:s}=this;window.removeEventListener("click",t),window.removeEventListener("keydown",n),s&&document.body.style.removeProperty("overflow"),this.$emit("close")},onClick(t){t.target.classList.contains("vts-dialog")&&this.dismissible&&(this.localShow=!1)},onKeydown(t){if(t.keyCode===m.ESC&&this.dismissible&&(this.localShow=!1),t.keyCode===m.TAB){const n=this.$refs.content;if(!n)return;const s=Array.from(n.querySelectorAll(V.join(",")));if(!s.length){t.preventDefault();return}if(!n.contains(document.activeElement))t.preventDefault(),s[0].focus();else{const r=s.indexOf(document.activeElement);t.shiftKey&&r===0&&(s[s.length-1].focus(),t.preventDefault()),!t.shiftKey&&r===s.length-1&&(s[0].focus(),t.preventDefault())}}}}},Ge={key:0};function Je(t,n,s,r,l,a){return l.localShow||a.slots.toggle?(e.openBlock(),e.createElementBlock("span",Ge,[a.slots.toggle?e.renderSlot(t.$slots,"toggle",e.normalizeProps(e.mergeProps({key:0},{on:{click:()=>l.localShow=!l.localShow},bind:{type:"button",role:"button","aria-haspopup":!0,"aria-expanded":""+l.localShow}}))):e.createCommentVNode("",!0),e.createVNode(e.Transition,{name:s.bgTransition||s.transition,appear:!0},{default:e.withCtx(()=>[l.localShow?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["vts-dialog",s.classes.root,s.classes.bg,t.$attrs.class])},[e.createVNode(e.Transition,{name:s.contentTransition},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.tag),{ref:"content",class:e.normalizeClass(["vts-dialog__content",s.classes.content]),style:e.normalizeStyle({width:s.width,"inline-size":s.inlineSize,"max-width":s.maxWidth,"max-inline-size":s.maxInlineSize}),tabindex:"-1",role:"dialog","aria-modal":"true"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default",e.normalizeProps(e.guardReactiveProps({close:()=>l.localShow=!l.localShow})))]),_:3},8,["class","style"]))]),_:3},8,["name"])],2)):e.createCommentVNode("",!0)]),_:3},8,["name"])])):e.createCommentVNode("",!0)}const J=y($e,[["render",Je]]),ys="",Xe="vts-drawer",Qe={name:"VDrawer",model:{prop:"showing",event:"update:modelValue"},props:{modelValue:Boolean,showing:Boolean,tag:{type:String,default:"aside"},right:Boolean,width:{type:String,default:""},inlineSize:{type:String,default:""},maxWidth:{type:String,default:""},maxInlineSize:{type:String,default:""},noScroll:Boolean,transition:{type:String,default:""},bgTransition:{type:String,default:""},classes:{type:Object,default:()=>({})}},emits:["update","update:modelValue","open","close"],data(){return{localShow:this.modelValue||this.showing,activeElement:null}},computed:{slots(){return this.$slots}},watch:{showing(t){this.localShow=t},modelValue(t){this.localShow=t},localShow:{handler(t,n){if(!(typeof window>"u")){if(t&&t!=n)this.activeElement=document.activeElement,this.onOpen();else{this.onClose();const{activeElement:s}=this;s&&s.focus&&this.$nextTick(()=>{s.focus()})}this.$emit("update",t),this.$emit("update:modelValue",t)}}}},destroyed(){this.onClose()},methods:{onOpen(){const{onClick:t,onKeydown:n,noScroll:s}=this;window.addEventListener("click",t),window.addEventListener("keydown",n),s&&document.body.style.setProperty("overflow","hidden"),this.$nextTick(()=>this.$refs.content.focus()),this.$emit("open")},onClose(){const{onClick:t,onKeydown:n,noScroll:s}=this;window.removeEventListener("click",t),window.removeEventListener("keydown",n),s&&document.body.style.removeProperty("overflow"),this.$emit("close")},onClick(t){t.target.classList.contains(Xe)&&(this.localShow=!1)},onKeydown(t){if(t.keyCode===m.ESC&&(this.localShow=!1),t.keyCode===m.TAB){const n=this.$refs.content;if(!n)return;const s=Array.from(n.querySelectorAll(V.join(",")));if(!s.length){t.preventDefault();return}if(!n.contains(document.activeElement))t.preventDefault(),s[0].focus();else{const r=s.indexOf(document.activeElement);t.shiftKey&&r===0&&(s[s.length-1].focus(),t.preventDefault()),!t.shiftKey&&r===s.length-1&&(s[0].focus(),t.preventDefault())}}}}},Ze={key:0};function et(t,n,s,r,l,a){return l.localShow||a.slots.toggle?(e.openBlock(),e.createElementBlock("span",Ze,[a.slots.toggle?e.renderSlot(t.$slots,"toggle",e.normalizeProps(e.mergeProps({key:0},{on:{click:()=>l.localShow=!l.localShow},bind:{type:"button",role:"button","aria-haspopup":!0,"aria-expanded":""+l.localShow}}))):e.createCommentVNode("",!0),e.createVNode(e.Transition,{name:s.bgTransition||s.transition,appear:""},{default:e.withCtx(()=>[l.localShow?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["vts-drawer",s.classes.root,s.classes.bg,t.$attrs.class])},[e.createVNode(e.Transition,{name:s.transition,appear:""},{default:e.withCtx(()=>[l.localShow?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.tag),{key:0,ref:"content",class:e.normalizeClass(["vts-drawer__content",{"vts-drawer__content--right":!!s.right},s.classes.content]),style:e.normalizeStyle({width:s.width,"inline-size":s.inlineSize,"max-width":s.maxWidth,"max-inline-size":s.maxInlineSize}),tabindex:"-1"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default",e.normalizeProps(e.guardReactiveProps({close:()=>l.localShow=!l.localShow})))]),_:3},8,["class","style"])):e.createCommentVNode("",!0)]),_:3},8,["name"])],2)):e.createCommentVNode("",!0)]),_:3},8,["name"])])):e.createCommentVNode("",!0)}const X=y(Qe,[["render",et]]),gs="",tt={name:"VDrawer",props:{text:{type:String,default:""},position:{type:String,default:"bottom",validator(t){return["top","bottom"].includes(t)}},transition:{type:String,default:""},classes:{type:Object,default:()=>({})}},data:()=>({isHovered:!1,isFocused:!1}),mounted(){document.addEventListener("click",this.onClickout)},beforeDestroy(){document.removeEventListener("click",this.onClickout)},beforeUnmount(){document.removeEventListener("click",this.onClickout)},methods:{onClickout(t){this.$el.contains(t.target)||(this.isFocused=!1)},onFocusout(t){this.$el.contains(t.relatedTarget)||(this.isFocused=!1)}}},st=["aria-expanded"];function nt(t,n,s,r,l,a){return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vts-dropdown",s.classes.root]),onMouseenter:n[1]||(n[1]=o=>t.isHovered=!0),onMouseleave:n[2]||(n[2]=o=>t.isHovered=!1),onFocus:n[3]||(n[3]=o=>t.isFocused=!0),onBlur:n[4]||(n[4]=o=>t.isFocused=!1),onFocusout:n[5]||(n[5]=(...o)=>a.onFocusout&&a.onFocusout(...o))},[e.createElementVNode("button",{"aria-expanded":!!t.isHovered||!!t.isFocused,"aria-haspopup":"true",class:e.normalizeClass(["vts-dropdown__trigger",s.classes.trigger]),type:"button",onClick:n[0]||(n[0]=o=>t.isFocused=!t.isFocused)},[e.renderSlot(t.$slots,"trigger",{},()=>[e.createTextVNode(e.toDisplayString(s.text),1)])],10,st),e.createVNode(e.Transition,{name:s.transition},{default:e.withCtx(()=>[t.isHovered||t.isFocused?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["vts-dropdown__content",[`vts-dropdown__content--${s.position}`,s.classes.content]])},[e.renderSlot(t.$slots,"default")],2)):e.createCommentVNode("",!0)]),_:3},8,["name"])],34)}const Q=y(tt,[["render",nt]]),bs="",ps="",lt={name:"VFile",model:{prop:"files",event:"update"},props:{label:{type:String,required:!0},id:{type:String,default:()=>"vts-"+b(4)},modelValue:{type:Array,default:()=>[]},files:{type:Array,default:()=>[]},classes:{type:Object,default:()=>({})}},data:()=>({localFiles:[],droppable:!1}),computed:{listeners(){return this.$attrs}},watch:{files(t){this.localFiles=t},modelValue(t){this.localFiles=t},localFiles(){this.droppable=!1}},methods:{onChange(t){const n=Array.from(t.target.files);this.localFiles=n,this.$emit("update",n),this.$emit("update:modelValue",n)},onDrop(t){const n=Array.from(t.dataTransfer.files);!(this.$attrs.multiple!=null)&&n.length>1&&(n.length=1),this.localFiles=n,this.$emit("update",n),this.$emit("update:modelValue",n)}}},at=["for"],ot=["id"],rt={key:0,"aria-hidden":"true"},it={key:1,"aria-hidden":"true"};function ct(t,n,s,r,l,a){return e.openBlock(),e.createElementBlock("label",{for:s.id,class:e.normalizeClass(["vts-file",{"vts-file--droppable":t.droppable,"vts-file--selected":!!t.localFiles.length},s.classes.label])},[e.createElementVNode("input",e.mergeProps({id:s.id,ref:"input"},t.$attrs,{type:"file",class:["vts-visually-hidden",s.classes.input],onChange:n[0]||(n[0]=(...o)=>a.onChange&&a.onChange(...o))},e.toHandlers(a.listeners,!0)),null,16,ot),e.createElementVNode("span",{class:e.normalizeClass(["vts-file__text",s.classes.text])},[e.renderSlot(t.$slots,"label",{},()=>[e.createTextVNode(e.toDisplayString(s.label),1)])],2),e.createElementVNode("div",{class:e.normalizeClass(["vts-file__dropzone",s.classes.dropzone]),onDragenter:n[5]||(n[5]=e.withModifiers(o=>t.droppable=!0,["prevent"]))},[e.renderSlot(t.$slots,"default",e.normalizeProps(e.guardReactiveProps({files:t.localFiles,droppable:t.droppable})),()=>[t.localFiles.length?(e.openBlock(),e.createElementBlock("span",rt,[t.localFiles.length>1?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(t.localFiles.length)+" files selected ",1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(t.localFiles[0].name),1)],64))])):(e.openBlock(),e.createElementBlock("span",it," Choose files or drop here "))]),t.droppable?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["vts-file__overlay",s.classes.overlay]),onDrop:n[1]||(n[1]=e.withModifiers((...o)=>a.onDrop&&a.onDrop(...o),["prevent"])),onDragenter:n[2]||(n[2]=e.withModifiers(o=>t.droppable=!0,["stop"])),onDragleave:n[3]||(n[3]=e.withModifiers(o=>t.droppable=!1,["stop"])),onDragover:n[4]||(n[4]=e.withModifiers(()=>{},["prevent"]))},[e.renderSlot(t.$slots,"overlay")],34)):e.createCommentVNode("",!0)],34)],10,at)}const Z=y(lt,[["render",ct]]),ee=new Set(["INPUT","SELECT","TEXTAREA"]),dt={name:"VForm",props:{lazy:{type:Boolean,default:!1},errors:{type:Object,default:()=>({})},preventNavigation:{type:Boolean,default:!1},honeypot:{type:[Boolean,String],default:!1}},data:()=>({dirty:!1,modified:!1,localInputs:{}}),computed:{listeners(){return this.$attrs},event(){return this.lazy?"change":"input"},valid(){return!Object.values(this.localInputs).find(t=>!t.valid)},error(){return!this.valid&&this.dirty},inputs(){const t={},{localInputs:n,errors:s}=this;for(const r in n){const l={...n[r],error:n[r].dirty&&!n[r].valid,errors:[]},a=new Map(Object.entries(s||{}));a.forEach((o,i)=>{if(!l.invalid[i])return;const c=a.get(i),u=i.replace("length","Length"),f=typeof c=="string"?c:c(l._inputEl[u]);l.errors.push(f)}),t[r]=l}return t}},mounted(){this.validate();const t=new MutationObserver(this.validate);t.observe(this.$el,{childList:!0,subtree:!0}),this.observer=t,this.preventNavigation&&window.addEventListener("beforeunload",this.preventNav),this.listeners.invalid&&(this.$el.noValidate=!0)},beforeRouteLeave(t,n,s){this.modified||s(),window.confirm("Leave without saving?")&&s()},beforeDestroy(){this.observer.disconnect(),window.removeEventListener("beforeunload",this.preventNav)},beforeUnmount(){this.observer.disconnect()},methods:{checkModified({target:t}){ee.has(t.tagName)&&(this.modified=!0)},validate(){const t=this.$el.querySelectorAll("input, textarea, select"),n={};t.forEach(s=>{const{name:r,id:l,validity:a}=s,o=r||l;if(o)switch(n[o]={_inputEl:s,valid:a.valid,dirty:!1,invalid:{type:a.typeMismatch,required:a.valueMissing,minlength:a.tooShort,maxlength:a.tooLong,min:a.rangeOverflow,max:a.rangeUnderflow,pattern:a.patternMismatch}},s.type){case"checkbox":n[o].value=s.checked;break;case"radio":s.checked&&(n[o].value=s.value);break;default:n[o].value=s.value}}),this.localInputs=n},onEvent(){this.validate()},onBlur({target:t}){ee.has(t.tagName)&&(this.dirty=!0,this.localInputs[t.name].dirty=!0)},clear(){this.$el.querySelectorAll("input, textarea, select").forEach(n=>{["radio","checkbox"].includes(n.type)?n.checked=!1:n.value=""})},reset(){this.modified=!1,this.dirty=!1,this.validate()},onSubmit(t){if(!t.target.checkValidity()){this.$emit("invalid",t);return}this.reset(),this.$emit("valid",t)},preventNav(t){this.modified&&(t.preventDefault(),t.returnValue="")}}},mt=["method"],ut=["name"];function ft(t,n,s,r,l,a){return e.openBlock(),e.createElementBlock("form",e.mergeProps({method:t.$attrs.method||"POST",class:["vts-form",{"vts-form--invalid":!a.valid,"vts-form--dirty":t.dirty,"vts-form--error":a.error}]},{[e.toHandlerKey(a.event)]:n[0]||(n[0]=(...o)=>a.onEvent&&a.onEvent(...o))},{onKeydown:n[1]||(n[1]=(...o)=>a.checkModified&&a.checkModified(...o)),onChange:n[2]||(n[2]=(...o)=>a.checkModified&&a.checkModified(...o)),onSubmit:n[3]||(n[3]=(...o)=>a.onSubmit&&a.onSubmit(...o)),onBlurCapture:n[4]||(n[4]=(...o)=>a.onBlur&&a.onBlur(...o))},e.toHandlers(a.listeners,!0)),[s.honeypot?(e.openBlock(),e.createElementBlock("input",{key:0,name:typeof s.honeypot=="string"?s.honeypot:"vts-honeypot",class:"visually-hidden",tabindex:"-1",autocomplete:"off","aria-hidden":"true"},null,8,ut)):e.createCommentVNode("",!0),e.renderSlot(t.$slots,"default",e.normalizeProps(e.guardReactiveProps({valid:a.valid,dirty:t.dirty,modified:t.modified,error:a.error,inputs:a.inputs,clear:a.clear,validate:a.validate})))],16,mt)}const te=y(dt,[["render",ft]]),ks="",D="vts-img",ht={name:"VImg",inheritAttrs:!1,props:{src:{type:String,required:!0},alt:{type:String,required:!0},srcset:{type:String,default:""},placeholder:{type:String,default:""},background:{type:String,default:""},transitionDuration:{type:[Number,String],default:300},classes:{type:Object,default:()=>({})}},data:()=>({dataUrl:""}),computed:{listeners(){return this.$attrs}},watch:{src:{handler:"init"},srcset:{handler:"init"}},mounted(){this.init()},beforeUnmount(){this.observer.disconnect()},beforeDestroy(){this.observer.disconnect()},methods:{init(){this.dataUrl=this.getDataUrl(),this.observer=new IntersectionObserver(this.handler),this.observer.observe(this.$el)},handler([t]){const{$el:n}=this;t.isIntersecting&&(n.classList.add(`${D}--loading`),this.loadImg(),this.observer.disconnect())},getDataUrl(){if(typeof window>"u")return;const{width:t,height:n}=this.$attrs;if(!t||!n)return"";const s=100,r=document.createElement("canvas");return r.width=s,r.height=+n/+t*s,r.toDataURL()},loadImg(){const{src:t,srcset:n}=this,{img:s}=this.$refs;s.addEventListener("load",this.onLoad),n&&(s.srcset=n),s.src=t},onLoad(){const{$el:t}=this,{img:n,placeholder:s}=this.$refs;t.classList.remove(`${D}--loading`),t.classList.add(`${D}--loaded`),s&&n.addEventListener("transitionend",function r(){s.remove(),n.removeEventListener("transitionend",r)}),n.removeEventListener("load",this.onLoad)}}},yt=e.createElementVNode("noscript",null,`
<img
:src="dataUrl"
:class="['vts-img__img', classes.img]"
:alt="alt"
:style="{
transitionDuration: \`\${transitionDuration}ms\`,
}"
:decoding="$attrs.decoding || 'async'"
:role="$attrs.role || alt ? null : 'presentation'"
v-bind="$attrs"
/>
`,-1),gt=["src","decoding"],bt=["src","alt","decoding","role"];function pt(t,n,s,r,l,a){return e.openBlock(),e.createElementBlock("picture",{class:e.normalizeClass(["vts-img",s.classes.root])},[yt,t.dataUrl?(e.openBlock(),e.createElementBlock("div",{key:0,ref:"placeholder",class:e.normalizeClass(["vts-img__placeholder",s.classes.placeholder]),style:e.normalizeStyle({background:s.background})},[e.createElementVNode("img",e.mergeProps({src:s.placeholder||t.dataUrl,alt:""},t.$attrs,{decoding:t.$attrs.decoding||"async"}),null,16,gt)],6)):e.createCommentVNode("",!0),e.createElementVNode("img",e.mergeProps({ref:"img",src:t.dataUrl,class:["vts-img__img",s.classes.img],alt:s.alt,style:{transitionDuration:`${s.transitionDuration}ms`},decoding:t.$attrs.decoding||"async",role:t.$attrs.role||s.alt?null:"presentation"},t.$attrs,e.toHandlers(a.listeners,!0)),null,16,bt)],2)}const se=y(ht,[["render",pt]]),ne={type:[String,Number,Boolean,Array],default:void 0};function le(t,n){t!==n&&(this.localValue=t)}const kt={name:"VInput",inheritAttrs:!1,model:{event:"update:modelValue"},props:{label:{type:String,required:!0},name:{type:String,required:!0},value:ne,modelValue:ne,type:{type:String,default:"text"},options:{type:[Array,Object],default:()=>[]},errors:{type:Object,default:()=>({})},classes:{type:Object,default:()=>({})}},data(){return{localValue:this.modelValue||this.value,valid:!0,anyInvalid:!1,dirty:!1,invalid:{}}},computed:{bind(){const{id:t,name:n,valid:s,dirty:r,error:l,errorMessages:a,classes:o,$attrs:i}=this,{class:c,...u}=i,f=[];return l&&f.push(`${t}__description`),a.length&&f.push(`${t}__errors`),{"aria-invalid":!s,"aria-describedby":r&&f.length?f.join(" "):null,...u,id:`${t}__input`,name:n,class:["vts-input__input",o.input]}},listeners(){return this.$attrs},slots(){return this.$slots},computedOptions(){const{$attrs:t,localValue:n,type:s}=this;let r=this.options;return C(r,"object")&&(r=Object.entries(r).map(([l,a])=>({value:l,label:a}))),r.map(l=>{if(l=C(l,"object")?l:{value:l},Object.assign(l,t,{label:l.label||l.value,value:l.value}),s==="checkbox"){const a=n||[];l.checked=a.includes(l.value)||l.checked}else n!==void 0&&typeof n=="string"&&(l.checked=l.value===n||l.checked);return l})},isMultiple(){const{multiple:t}=this.$attrs;return t!=null&&t!="false"},error(){return!this.valid&&this.dirty},errorMessages(){const{invalid:t,errors:n,$attrs:s}=this,r=[];return Object.keys(n||{}).forEach(l=>{if(!t[l])return;const a=n[l],o=C(a,"function")?a(s[l]):a;r.push(o)}),r}},watch:{modelValue:le,value:le,localValue(t){this.$emit("update:modelValue",t),this.validate()},"$attrs.required":"validateAfterNextTick","$attrs.type":"validateAfterNextTick","$attrs.min":"validateAfterNextTick","$attrs.max":"validateAfterNextTick","$attrs.minlength":"validateAfterNextTick","$attrs.maxlength":"validateAfterNextTick","$attrs.pattern":"validateAfterNextTick"},created(){this.id=this.$attrs.id||"vts-"+b(4)},mounted(){this.validate()},methods:{onSelect(t){const n=t.target;if(this.isMultiple){const s=[];for(const r of n.selectedOptions)s.push(r.value);this.localValue=[...s||[]]}else this.localValue=n.value},onFieldsetInput(t){const n=t.target,s=n.value;if(n.type==="radio"){this.localValue=s;return}const l=[...this.localValue||[]],a=l.indexOf(s);a===-1?l.push(s):l.splice(a,1),this.localValue=l},validate(){let t=this.$refs.input;if(Array.isArray(t)){if(!t.length)return;t=t[0]}const{validity:n}=t;this.anyInvalid=!n.valid,this.valid=n.valid,this.invalid={type:n.typeMismatch,required:n.valueMissing,minlength:n.tooShort,maxlength:n.tooLong,min:n.rangeUnderflow,max:n.rangeOverflow,pattern:n.patternMismatch}},async validateAfterNextTick(){await this.$nextTick(),this.validate()}}},_t=["id","type"],St=["for"],wt=["checked"],Et=["for"],Bt=["for"],Vt=["type"],Ct=["id"],Dt=["id"];function Pt(t,n,s,r,l,a){return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vts-input",`vts-input--${s.type}`,{"vts-input--required":t.$attrs.hasOwnProperty("required"),"vts-input--invalid":!l.valid,"vts-input--dirty":l.dirty,"vts-input--error":a.error},t.$attrs.class,s.classes.root])},[["radio","checkbox"].includes(s.type)&&a.computedOptions.length?(e.openBlock(),e.createElementBlock("fieldset",{key:0,class:e.normalizeClass(["vts-input__fieldset",s.classes.fieldset])},[s.label?(e.openBlock(),e.createElementBlock("legend",{key:0,class:e.normalizeClass(["vts-input__legend",s.classes.legend])},[e.renderSlot(t.$slots,"label",e.normalizeProps(e.guardReactiveProps({valid:l.valid,dirty:l.dirty,error:a.error,invalid:l.invalid,anyInvalid:l.anyInvalid,errors:a.errorMessages})),()=>[e.createTextVNode(e.toDisplayString(s.label),1)])],2)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["vts-input__fieldset-items",s.classes.fieldsetItems])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.computedOptions,(o,i)=>(e.openBlock(),e.createElementBlock("div",{key:o.value,class:e.normalizeClass(["vts-input__fieldset-item",s.classes.fieldsetItem])},[e.createElementVNode("input",e.mergeProps({...a.bind,...o},{id:`${t.id}__input-${i}`,ref_for:!0,ref:"input",type:s.type,onInput:n[0]||(n[0]=(...c)=>a.onFieldsetInput&&a.onFieldsetInput(...c)),onBlurOnce:n[1]||(n[1]=c=>l.dirty=!0)},e.toHandlers(a.listeners,!0)),null,16,_t),e.createElementVNode("label",{for:`${t.id}__input-${i}`,class:e.normalizeClass(["vts-input__label",s.classes.label])},e.toDisplayString(o.label),11,St)],2))),128))],2)],2)):s.type==="checkbox"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("input",e.mergeProps({ref:"input",checked:l.localValue===void 0?t.$attrs.checked:l.localValue,type:"checkbox"},a.bind,{onChange:n[2]||(n[2]=o=>l.localValue=o.target.checked),onBlurOnce:n[3]||(n[3]=o=>l.dirty=!0)},e.toHandlers(a.listeners,!0)),null,16,wt),e.createElementVNode("label",{for:`${t.id}__input`,class:e.normalizeClass(["vts-input__label",s.classes.label])},[e.renderSlot(t.$slots,"label",e.normalizeProps(e.guardReactiveProps({valid:l.valid,dirty:l.dirty,error:a.error,invalid:l.invalid,anyInvalid:l.anyInvalid,errors:a.errorMessages})),()=>[e.createTextVNode(e.toDisplayString(s.label),1)])],10,Et)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("label",{for:`${t.id}__input`,class:e.normalizeClass(["vts-input__label",s.classes.label])},[e.renderSlot(t.$slots,"label",e.normalizeProps(e.guardReactiveProps({valid:l.valid,dirty:l.dirty,error:a.error,invalid:l.invalid,anyInvalid:l.anyInvalid,errors:a.errorMessages})),()=>[e.createTextVNode(e.toDisplayString(s.label),1)])],10,Bt),s.type==="select"?e.withDirectives((e.openBlock(),e.createElementBlock("select",e.mergeProps({key:0,ref:"input","onUpdate:modelValue":n[4]||(n[4]=o=>l.localValue=o)},a.bind,{onInput:n[5]||(n[5]=(...o)=>a.onSelect&&a.onSelect(...o)),onChange:n[6]||(n[6]=(...o)=>a.onSelect&&a.onSelect(...o)),onBlurOnce:n[7]||(n[7]=o=>l.dirty=!0)},e.toHandlers(a.listeners,!0)),[e.renderSlot(t.$slots,"options",{},()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.computedOptions,o=>(e.openBlock(),e.createElementBlock("option",e.mergeProps({key:o.value},o,{label:null}),e.toDisplayString(o.label),17))),128))])],16)),[[e.vModelSelect,l.localValue]]):s.type==="textarea"?e.withDirectives((e.openBlock(),e.createElementBlock("textarea",e.mergeProps({key:1,ref:"input","onUpdate:modelValue":n[8]||(n[8]=o=>l.localValue=o)},a.bind,{onBlurOnce:n[9]||(n[9]=o=>l.dirty=!0)},e.toHandlers(a.listeners,!0)),null,16)),[[e.vModelText,l.localValue]]):e.withDirectives((e.openBlock(),e.createElementBlock("input",e.mergeProps({key:2,ref:"input","onUpdate:modelValue":n[10]||(n[10]=o=>l.localValue=o),type:s.type},a.bind,{onBlurOnce:n[11]||(n[11]=o=>l.dirty=!0)},e.toHandlers(a.listeners,!0)),null,16,Vt)),[[e.vModelDynamic,l.localValue]])],64)),a.slots.description?(e.openBlock(),e.createElementBlock("div",{key:3,id:`${t.id}__description`,class:e.normalizeClass(["vts-input__description",s.classes.description])},[e.renderSlot(t.$slots,"description",e.normalizeProps(e.guardReactiveProps({valid:l.valid,dirty:l.dirty,error:a.error,invalid:l.invalid,anyInvalid:l.anyInvalid,errors:a.errorMessages})))],10,Ct)):e.createCommentVNode("",!0),l.dirty&&a.errorMessages.length?(e.openBlock(),e.createElementBlock("div",{key:4,id:`${t.id}__errors`,class:e.normalizeClass(["vts-input__errors",s.classes.errors])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.errorMessages,o=>(e.openBlock(),e.createElementBlock("span",{key:o,class:e.normalizeClass(["vts-input__error",s.classes.error])},e.toDisplayString(o),3))),128))],10,Dt)):e.createCommentVNode("",!0)],2)}const ae=y(kt,[["render",Pt]]),oe={name:"VIntersect",props:{threshold:{type:[Number,Array],default:()=>null},root:{type:String,default:void 0},rootMargin:{type:String,default:void 0},options:{type:Object,default:()=>({})}},emits:["enter","exit","change"],data:()=>({entry:{}}),mounted(){let t=this.$el;t=this.$el.nextElementSibling;const{root:n,threshold:s,rootMargin:r,options:l,handler:a}=this,o={...l,root:n,threshold:s,rootMargin:r};this.observer=new IntersectionObserver(a,o),this.observer.observe(t)},beforeUnmount(){this.observer.disconnect()},beforeDestroy(){this.observer.disconnect()},methods:{handler([t]){this.entry=t,t.isIntersecting?this.$emit("enter",t):this.$emit("exit",t),this.$emit("change",t)}},render(){const{entry:t}=this;return this.$slots.default(t)}},_s="",k=e.reactive({notifications:[]});function Nt(t){typeof t=="string"&&(t={text:t}),t={id:`vts_${b(4)}`,persistent:void 0,timeout:void 0,class:void 0,classes:{},...t},k.notifications.push(t)}const Tt={props:{timeout:{type:[String,Number],default:0},persistent:{type:Boolean,default:!1},transition:{type:String,default:""},classes:{type:Object,default:()=>({})}},computed:{notifications(){const{persistent:t}=this;return k.notifications.map(n=>(n.persistent==null&&(n.persistent=t),n))}},watch:{"notifications.length":{handler(t,n){if(n>t)return;const s=k.notifications[t-1];let r=Number(this.timeout);s.timeout!=null&&(r=Number(s.timeout)),r&&(s.timeoutId=setTimeout(()=>{this.remove(s)},r))}}},unmounted(){for(const t of k.notifications)t.timeoutId&&clearTimeout(t.timeoutId)},methods:{remove:t=>{const n=k.notifications.findIndex(s=>s.id===t.id);k.notifications.splice(n,1)}}},zt=["onClick"],Mt=e.createElementVNode("span",{class:"vts-visually-hidden"},"Remove notification",-1);function Ft(t,n,s,r,l,a){return e.openBlock(),e.createElementBlock("ul",{class:e.normalizeClass(["vts-notifications",s.classes.root])},[e.createVNode(e.TransitionGroup,{name:s.transition},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.notifications,o=>{var i,c,u;return e.openBlock(),e.createElementBlock("li",{key:o.id,class:e.normalizeClass(["vts-notification",s.classes.notification,o.class,(i=o.classes)==null?void 0:i.notification])},[e.createElementVNode("span",{role:"alert",class:e.normalizeClass(["vts-notification__text",s.classes.text,(c=o.classes)==null?void 0:c.text])},e.toDisplayString(o.text),3),o.persistent?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,class:e.normalizeClass(["vts-notification__dismiss",s.classes.dismiss,(u=o.classes)==null?void 0:u.dismiss]),onClick:f=>a.remove(o)},[e.createTextVNode(" × "),Mt],10,zt))],2)}),128))]),_:1},8,["name"])],2)}const re=y(Tt,[["render",Ft]]),Ot={name:"VResize",props:{tag:{type:String,default:"div"}},data:()=>({observer:void 0,width:void 0,height:void 0}),mounted(){this.observer=new ResizeObserver(this.updateDimensions),this.observer.observe(this.$el)},beforeUnmount(){this.observer.disconnect()},beforeDestroy(){this.observer.disconnect()},methods:{updateDimensions(){const t=this.$el;this.width=t.offsetWidth,this.height=t.offsetHeight,this.$emit("resize",arguments)}}};function It(t,n,s,r,l,a){return e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.tag),{class:"vts-resize"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default",e.normalizeProps(e.guardReactiveProps({width:t.width,height:t.height,inlineSize:t.width,blockSize:t.height})))]),_:3})}const ie=y(Ot,[["render",It]]),Ss="",vt={name:"VSkip",props:{to:{type:String,required:!0}},methods:{skipTo(t){if(!t)return;const n=window.document.getElementById(t.slice(1));n&&(["a","select","input","button","textarea"].includes(n.tagName.toLowerCase())||n.setAttribute("tabindex","-1"),n.focus())}}},Lt=["href"];function At(t,n,s,r,l,a){return e.openBlock(),e.createElementBlock("a",{class:"vts-skip",href:s.to,onClick:n[0]||(n[0]=o=>a.skipTo(s.to))},[e.renderSlot(t.$slots,"default",{},()=>[e.createTextVNode("Skip to main content")])],8,Lt)}const ce=y(vt,[["render",At]]),ws="",xt={name:"VTable",provide(){return{$table:this}},props:{headers:{type:Array,default:()=>[]},items:{type:Array,default:()=>[]},page:{type:[Number,String],default:1},perPage:{type:[Number,String],default:-1},sortBy:{type:String,default:""},sortDirection:{type:String,default:"",validator:t=>new Set(["ASC","DESC",""]).has(t.toUpperCase())},id:{type:String,default:"vts-"+b(4)},caption:{type:String,default:""},sortable:Boolean,classes:{type:Object,default:()=>({})}},data(){return{localSortBy:this.sortBy,localSortDirection:this.sortDirection?this.sortDirection.toUpperCase():"",localPage:Number(this.page),localPerPage:Number(this.perPage)}},computed:{computedHeaders(){const{headers:t,sortable:n,localSortBy:s,localSortDirection:r}=this,l=[];return t.forEach(a=>{const o={...a,bind:{},sortBtn:{bind:{"aria-label":"toggle sort direction"},on:{click:()=>this.onSort(a.key)}}};o.sortable===void 0&&(o.sortable=!!o.sort||n),o.sortable&&s===a.key&&r&&(r==="ASC"?o.bind["aria-sort"]="ascending":o.bind["aria-sort"]="descending"),l.push(o)}),l},computedItems(){const{computedHeaders:t,items:n,localSortBy:s,localSortDirection:r,localPage:l,localPerPage:a}=this;let o=[...n];if(s&&r){const i=t.find(u=>u.key===s);let c=this.defaultComparisonFn;typeof i.sort=="function"&&(c=i.sort),o=o.sort((u,f)=>c(u,f,r==="ASC"))}if(a>-1){const i=(Math.max(l,1)-1)*a;o=o.slice(i,i+a)}return o},lastPage(){return Math.ceil(this.items.length/+this.perPage)}},watch:{sortBy(t){this.localSortBy=t},localSortBy(t){this.$emit("update:sort-by",t)},sortDirection(t){this.localSortDirection=t&&t.toUpperCase()||""},localSortDirection(t){this.$emit("update:sort-direction",t)},page(t){this.localPage=Number(t)},localPage(t){this.$emit("update:page",t)},perPage(t){this.localPerPage=Number(t)},localPerPage(t){this.$emit("update:per-page",t)}},methods:{defaultComparisonFn(t,n,s){const{localSortBy:r}=this,l=s?1:-1,a=t[r],o=n[r];return Number.isFinite(a)&&Number.isFinite(o)?(a-o)*l:a<o?-1*l:a>o?1*l:0},onSort(t){const{localSortBy:n,localSortDirection:s}=this;if(this.localPage=1,t!==n){this.localSortBy=t,this.localSortDirection="ASC";return}switch(s){case"ASC":this.localSortDirection="DESC";break;case"DESC":this.localSortDirection="";break;default:this.localSortDirection="ASC"}},goToPage(t){const{lastPage:n}=this;this.localPage=Math.min(Math.max(1,t),n)}}},jt=["id"],Ht=["disabled"],Ut=["disabled","aria-label","onClick"],Rt=["disabled"];function Yt(t,n,s,r,l,a){return e.openBlock(),e.createElementBlock("div",{ref:"container",role:"region","aria-labelledby":"caption",class:e.normalizeClass(["vts-table",{"vts-table--sortable":s.sortable},s.classes.root])},[e.createElementVNode("table",{class:e.normalizeClass([s.classes.table])},[e.renderSlot(t.$slots,"default",e.normalizeProps(e.guardReactiveProps({caption:s.caption,headers:a.computedHeaders,items:a.computedItems,sortBy:l.localSortBy,sortDirection:l.localSortDirection,page:l.localPage,perPage:l.localPerPage})),()=>[s.caption?(e.openBlock(),e.createElementBlock("caption",{key:0,id:`${s.id}__caption`,class:e.normalizeClass([s.classes.caption])},e.toDisplayString(s.caption),11,jt)):e.createCommentVNode("",!0),a.computedHeaders.length?(e.openBlock(),e.createElementBlock("thead",{key:1,class:e.normalizeClass([s.classes.thead])},[e.createElementVNode("tr",{class:e.normalizeClass([s.classes.tr])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.computedHeaders,(o,i)=>(e.openBlock(),e.createElementBlock("th",e.mergeProps({key:o.key},o.bind,{class:[s.classes.th]}),[e.renderSlot(t.$slots,`header.${o.key}`,e.normalizeProps(e.guardReactiveProps({header:o,index:i})),()=>[e.createTextVNode(e.toDisplayString(o.text||o.key)+" ",1),o.sortable?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[o.key===l.localSortBy&&l.localSortDirection==="ASC"?e.renderSlot(t.$slots,"sort-asc",e.normalizeProps(e.mergeProps({key:0},o.sortBtn)),()=>[e.createElementVNode("button",e.mergeProps({class:["vts-table__sort-btn","vts-table__sort-btn--asc",s.classes.sortBtn]},o.sortBtn.bind,{type:"button"},e.toHandlers(o.sortBtn.on,!0))," ↑ ",16)]):o.key===l.localSortBy&&l.localSortDirection==="DESC"?e.renderSlot(t.$slots,"sort-desc",e.normalizeProps(e.mergeProps({key:1},o.sortBtn)),()=>[e.createElementVNode("button",e.mergeProps({class:["vts-table__sort-btn","vts-table__sort-btn--desc",s.classes.sortBtn]},o.sortBtn.bind,{type:"button"},e.toHandlers(o.sortBtn.on,!0))," ↓ ",16)]):e.renderSlot(t.$slots,"sort-none",e.normalizeProps(e.mergeProps({key:2},o.sortBtn)),()=>[e.createElementVNode("button",e.mergeProps({class:["vts-table_