@auvyx/ui 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/LICENSE +48 -0
  2. package/README.md +43 -2
  3. package/dist/auvyx.bundle.css +5941 -0
  4. package/dist/auvyx.chart.min.js +2 -0
  5. package/dist/auvyx.corners.min.js +2 -0
  6. package/dist/auvyx.css +10880 -0
  7. package/dist/auvyx.js +3222 -0
  8. package/dist/auvyx.min.css +2 -0
  9. package/dist/auvyx.min.js +19 -0
  10. package/dist/custom-elements.json +948 -0
  11. package/dist/elements/calendar.min.js +2 -0
  12. package/dist/elements/context-menu.min.js +2 -0
  13. package/dist/elements/data-table.min.js +2 -0
  14. package/dist/elements/date-picker.min.js +2 -0
  15. package/dist/elements/index.min.js +2 -0
  16. package/dist/elements/menu.min.js +2 -0
  17. package/dist/elements/resizable.min.js +2 -0
  18. package/dist/js/accordion.min.js +2 -0
  19. package/dist/js/calendar.min.js +2 -0
  20. package/dist/js/combobox.min.js +2 -0
  21. package/dist/js/command.min.js +2 -0
  22. package/dist/js/context-menu.min.js +2 -0
  23. package/dist/js/copy.min.js +2 -0
  24. package/dist/js/data-table.min.js +2 -0
  25. package/dist/js/date-picker.min.js +2 -0
  26. package/dist/js/drawer.min.js +2 -0
  27. package/dist/js/dropdown-menu.min.js +2 -0
  28. package/dist/js/manifest.json +114 -0
  29. package/dist/js/menu.min.js +2 -0
  30. package/dist/js/popover.min.js +2 -0
  31. package/dist/js/resizable.min.js +2 -0
  32. package/dist/js/select.min.js +2 -0
  33. package/dist/js/sidebar.min.js +2 -0
  34. package/dist/js/slider.min.js +2 -0
  35. package/dist/js/tabs.min.js +2 -0
  36. package/dist/js/toast.min.js +19 -0
  37. package/dist/styles/auvyx-luma.min.css +3 -0
  38. package/dist/styles/auvyx-lyra.min.css +3 -0
  39. package/dist/styles/auvyx-maia.min.css +3 -0
  40. package/dist/styles/auvyx-mira.min.css +3 -0
  41. package/dist/styles/auvyx-nova.min.css +3 -0
  42. package/dist/styles/auvyx-rhea.min.css +3 -0
  43. package/dist/styles/auvyx-sera.min.css +3 -0
  44. package/dist/styles/auvyx-vega.min.css +3 -0
  45. package/dist/types/elements.d.ts +262 -0
  46. package/dist/types/react.d.ts +181 -0
  47. package/dist/types/vue.d.ts +155 -0
  48. package/dist/ui/accordion.css +91 -0
  49. package/dist/ui/accordion.js +249 -0
  50. package/dist/ui/accordion.native.css +24 -0
  51. package/dist/ui/alert.css +119 -0
  52. package/dist/ui/aspect-ratio.css +38 -0
  53. package/dist/ui/attachment.css +211 -0
  54. package/dist/ui/avatar.css +204 -0
  55. package/dist/ui/badge.css +183 -0
  56. package/dist/ui/base.css +1200 -0
  57. package/dist/ui/breadcrumb.css +90 -0
  58. package/dist/ui/bubble.css +171 -0
  59. package/dist/ui/button-group.css +110 -0
  60. package/dist/ui/button.css +328 -0
  61. package/dist/ui/calendar.css +260 -0
  62. package/dist/ui/calendar.js +317 -0
  63. package/dist/ui/card.css +126 -0
  64. package/dist/ui/carousel.css +172 -0
  65. package/dist/ui/chart.css +130 -0
  66. package/dist/ui/checkbox.css +119 -0
  67. package/dist/ui/code-block.css +235 -0
  68. package/dist/ui/combobox.css +500 -0
  69. package/dist/ui/combobox.js +757 -0
  70. package/dist/ui/command.css +366 -0
  71. package/dist/ui/command.js +382 -0
  72. package/dist/ui/context-menu.css +17 -0
  73. package/dist/ui/context-menu.js +52 -0
  74. package/dist/ui/copy.js +56 -0
  75. package/dist/ui/data-table.css +114 -0
  76. package/dist/ui/data-table.js +140 -0
  77. package/dist/ui/date-picker.css +14 -0
  78. package/dist/ui/date-picker.js +101 -0
  79. package/dist/ui/dialog.css +363 -0
  80. package/dist/ui/dialog.native.css +6 -0
  81. package/dist/ui/drawer.css +238 -0
  82. package/dist/ui/drawer.js +265 -0
  83. package/dist/ui/dropdown-menu.css +193 -0
  84. package/dist/ui/dropdown-menu.js +388 -0
  85. package/dist/ui/empty.css +111 -0
  86. package/dist/ui/field.css +293 -0
  87. package/dist/ui/hover-card.css +85 -0
  88. package/dist/ui/input-group.css +269 -0
  89. package/dist/ui/input-otp.css +101 -0
  90. package/dist/ui/input.css +117 -0
  91. package/dist/ui/item.css +223 -0
  92. package/dist/ui/kbd.css +50 -0
  93. package/dist/ui/label.css +48 -0
  94. package/dist/ui/manifest.json +667 -0
  95. package/dist/ui/marker.css +66 -0
  96. package/dist/ui/menu.js +161 -0
  97. package/dist/ui/menubar.css +55 -0
  98. package/dist/ui/message-scroller.css +83 -0
  99. package/dist/ui/message.css +69 -0
  100. package/dist/ui/native-select.css +130 -0
  101. package/dist/ui/navigation-menu.css +166 -0
  102. package/dist/ui/popover.css +154 -0
  103. package/dist/ui/popover.js +268 -0
  104. package/dist/ui/popover.native.css +84 -0
  105. package/dist/ui/progress.css +29 -0
  106. package/dist/ui/questionnaire.css +188 -0
  107. package/dist/ui/radio-group.css +115 -0
  108. package/dist/ui/resizable.css +94 -0
  109. package/dist/ui/resizable.js +95 -0
  110. package/dist/ui/scroll-area.css +43 -0
  111. package/dist/ui/select.css +289 -0
  112. package/dist/ui/select.js +646 -0
  113. package/dist/ui/sheet.css +219 -0
  114. package/dist/ui/sidebar.css +716 -0
  115. package/dist/ui/sidebar.js +287 -0
  116. package/dist/ui/skeleton.css +13 -0
  117. package/dist/ui/slider.css +184 -0
  118. package/dist/ui/slider.js +206 -0
  119. package/dist/ui/switch.css +156 -0
  120. package/dist/ui/table.css +157 -0
  121. package/dist/ui/tabs.css +240 -0
  122. package/dist/ui/tabs.js +288 -0
  123. package/dist/ui/textarea.css +91 -0
  124. package/dist/ui/toast.css +110 -0
  125. package/dist/ui/toast.js +378 -0
  126. package/dist/ui/toggle-group.css +42 -0
  127. package/dist/ui/toggle.css +150 -0
  128. package/dist/ui/tooltip.css +319 -0
  129. package/dist/ui/trace.css +142 -0
  130. package/dist/ui/typography.css +184 -0
  131. package/dist/wc/accordion.min.js +2 -0
  132. package/dist/wc/combobox.min.js +2 -0
  133. package/dist/wc/command.min.js +2 -0
  134. package/dist/wc/drawer.min.js +2 -0
  135. package/dist/wc/dropdown-menu.min.js +2 -0
  136. package/dist/wc/manifest.json +154 -0
  137. package/dist/wc/popover.min.js +2 -0
  138. package/dist/wc/select.min.js +2 -0
  139. package/dist/wc/sidebar.min.js +2 -0
  140. package/dist/wc/slider.min.js +2 -0
  141. package/dist/wc/tabs.min.js +2 -0
  142. package/dist/wc/toast.min.js +19 -0
  143. package/package.json +62 -4
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ const q=i=>String(i).padStart(2,"0"),b=i=>`${i.getFullYear()}-${q(i.getMonth()+1)}-${q(i.getDate())}`,g=i=>{const t=/^(\d{4})-(\d{2})-(\d{2})$/.exec((i||"").trim());return t?new Date(+t[1],+t[2]-1,+t[3]):null},L=i=>i.getFullYear()*1e4+i.getMonth()*100+i.getDate(),p=(i,t)=>!!i&&!!t&&L(i)===L(t),l=(i,t)=>new Date(i.getFullYear(),i.getMonth(),i.getDate()+t),c=(i,t)=>{const s=new Date(i.getFullYear(),i.getMonth()+t+1,0).getDate();return new Date(i.getFullYear(),i.getMonth()+t,Math.min(i.getDate(),s))},y=i=>new Date(i.getFullYear(),i.getMonth(),1),Q=(i,t)=>Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate())-new Date(i.getFullYear(),i.getMonth(),i.getDate()))/864e5),V=i=>{const t=new Date(Date.UTC(i.getFullYear(),i.getMonth(),i.getDate()));return t.setUTCDate(t.getUTCDate()+4-(t.getUTCDay()||7)),Math.ceil(((t-Date.UTC(t.getUTCFullYear(),0,1))/864e5+1)/7)},U=i=>(i||"").split(",").map(t=>t.trim()).filter(Boolean).map(t=>{const[s,e]=t.split("/"),a=g(s);return a?[a,g(e)||a]:null}).filter(Boolean),$=(i,t)=>i.some(([s,e])=>t>=s&&t<=e),B=i=>`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="${i}"/></svg>`,o=i=>String(i).replace(/[&<>"]/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[t]);class X extends HTMLElement{static observedAttributes=["value","min","max","mode","months","month","disabled-dates","disabled-days","booked","min-days","max-days","caption","week-numbers","lang"];connectedCallback(){this.readAll();const t=this.selected[0]||this.start||new Date;this.focused||=this.clamp(t);const s=/^(\d{4})-(\d{2})$/.exec(this.getAttribute("month")||"");this.view||=s?new Date(+s[1],+s[2]-1,1):y(this.focused),this._init||(this._init=!0,this.addEventListener("click",e=>this.onClick(e)),this.addEventListener("keydown",e=>this.onKey(e)),this.addEventListener("change",e=>this.onSelectChange(e))),this.render()}attributeChangedCallback(t,s,e){if(!(!this._init||s===e||this._writing)){if(this.readAll(),t==="value"){const a=this.selected[0]||this.start;a&&(this.focused=a,this.view=y(a))}if(t==="month"){const a=/^(\d{4})-(\d{2})$/.exec(e||"");a&&(this.view=new Date(+a[1],+a[2]-1,1))}this.render()}}readAll(){const t=this.getAttribute("mode");this.mode=t==="range"||t==="multiple"?t:"single",this.monthsShown=Math.max(1,Math.min(12,parseInt(this.getAttribute("months"),10)||1)),this.min=g(this.getAttribute("min")),this.max=g(this.getAttribute("max")),this.disabledDates=U(this.getAttribute("disabled-dates")),this.bookedDates=U(this.getAttribute("booked")),this.disabledDays=(this.getAttribute("disabled-days")||"").split(",").map(e=>parseInt(e,10)).filter(e=>e>=0&&e<=6),this.minDays=parseInt(this.getAttribute("min-days"),10)||0,this.maxDays=parseInt(this.getAttribute("max-days"),10)||0;const s=this.getAttribute("value")||"";if(this.start=this.end=null,this.selected=[],this.mode==="range"){const[e,a]=s.split("/");this.start=g(e),this.end=g(a)}else this.mode==="multiple"?this.selected=s.split(",").map(g).filter(Boolean):(this.start=g(s),this.start&&(this.selected=[this.start]))}get value(){return this.mode==="range"?this.start?`${b(this.start)}/${this.end?b(this.end):""}`:"":this.mode==="multiple"?this.selected.map(b).join(","):this.start?b(this.start):""}set value(t){this.setAttribute("value",t??"")}get dates(){return this.mode==="range"?[this.start,this.end].filter(Boolean):[...this.selected]}set renderDay(t){this._renderDay=t,this._init&&this.render()}get renderDay(){return this._renderDay}locale(){return this.getAttribute("lang")||this.closest("[lang]")?.getAttribute("lang")||navigator.language}weekStart(){const t=parseInt(this.dataset.weekStart,10);return Number.isFinite(t)?(t%7+7)%7:1}clamp(t){return this.min&&t<this.min?this.min:this.max&&t>this.max?this.max:t}isDisabled(t){if(this.min&&t<this.min||this.max&&t>this.max||this.disabledDays.includes(t.getDay())||$(this.disabledDates,t)||$(this.bookedDates,t))return!0;if(this.mode==="range"&&this.start&&!this.end&&t>this.start){const s=Q(this.start,t)+1;if(this.minDays&&s<this.minDays||this.maxDays&&s>this.maxDays)return!0;for(let e=l(this.start,1);e<t;e=l(e,1))if(this.disabledDays.includes(e.getDay())||$(this.disabledDates,e)||$(this.bookedDates,e))return!0}return!1}render(){const t=this.locale(),s=new Intl.DateTimeFormat(t,{month:"long",year:"numeric"}),e=new Intl.DateTimeFormat(t,{month:"short"}),a=new Intl.DateTimeFormat(t,{weekday:"short"}),x=new Intl.DateTimeFormat(t,{weekday:"long"}),K=new Intl.DateTimeFormat(t,{dateStyle:"full"}),k=new Date,Y=this.weekStart(),P=this.id||(this._uid||=`cal-${Math.random().toString(36).slice(2,8)}`),S=this.hasAttribute("week-numbers"),W=this.getAttribute("caption")==="dropdown",j=this.min&&c(this.view,-1)<y(this.min),H=this.max&&c(this.view,this.monthsShown)>this.max,N=this.contains(document.activeElement)&&document.activeElement.matches("td > button");let C="";for(let u=0;u<this.monthsShown;u++){const d=c(this.view,u),I=(d.getDay()-Y+7)%7,M=l(d,-I),R=new Date(d.getFullYear(),d.getMonth()+1,0).getDate(),z=Math.ceil((I+R)/7),A=`${P}-title-${u}`;let T=`<h2 id="${A}" aria-live="polite">${o(s.format(d))}</h2>`;if(W&&u===0){const m=(this.min||c(k,-120)).getFullYear(),f=(this.max||c(k,120)).getFullYear();let n="";for(let r=0;r<12;r++){const h=new Date(d.getFullYear(),r,1),F=this.min&&new Date(d.getFullYear(),r+1,0)<this.min||this.max&&h>this.max;n+=`<option value="${r}"${r===d.getMonth()?" selected":""}${F?" disabled":""}>${o(e.format(h))}</option>`}let D="";for(let r=m;r<=f;r++)D+=`<option value="${r}"${r===d.getFullYear()?" selected":""}>${r}</option>`;T=`<div class="calendar-caption" id="${A}" aria-label="${o(s.format(d))}" role="group"><select class="select" data-calendar-month aria-label="${o(this.dataset.labelMonth||"Month")}">${n}</select><select class="select" data-calendar-year aria-label="${o(this.dataset.labelYear||"Year")}">${D}</select></div>`}const G=u===0?`<button type="button" data-nav="-1" aria-label="${o(this.dataset.labelPrev||"Previous month")}"${j?" disabled":""}>${B("m15 18-6-6 6-6")}</button>`:"<span></span>",J=u===this.monthsShown-1?`<button type="button" data-nav="1" aria-label="${o(this.dataset.labelNext||"Next month")}"${H?" disabled":""}>${B("m9 18 6-6-6-6")}</button>`:"<span></span>";let E=S?`<th scope="col" data-week-number><span class="sr-only">${o(this.dataset.labelWeek||"Week")}</span></th>`:"";for(let m=0;m<7;m++){const f=l(M,m);E+=`<th scope="col" abbr="${o(x.format(f))}">${o(a.format(f))}</th>`}let w="";for(let m=0;m<z;m++){w+="<tr>",S&&(w+=`<th scope="row" data-week-number>${V(l(M,m*7+(8-Y)%7))}</th>`);for(let f=0;f<7;f++){const n=l(M,m*7+f),D=n.getMonth()!==d.getMonth(),r=D&&this.monthsShown>1,h=[];if(D&&h.push("data-outside"),$(this.bookedDates,n)&&h.push("data-booked"),!r&&(this.mode!=="range"&&this.selected.some(v=>p(v,n))&&h.push('aria-selected="true"'),this.mode==="range"&&this.start)){const v=this.end||this.start;p(n,this.start)&&h.push("data-range-start"),p(n,v)&&h.push("data-range-end"),n>this.start&&n<v&&h.push("data-range-middle"),n>=this.start&&n<=v&&h.push('aria-selected="true"')}if(r){w+=`<td ${h.join(" ")} aria-hidden="true"></td>`;continue}const F=p(n,this.focused)&&!D?"0":"-1",_=this._renderDay?this._renderDay(n):null;w+=`<td ${h.join(" ")}><button type="button" data-date="${b(n)}" tabindex="${F}" aria-label="${o(K.format(n))}"${p(n,k)?' aria-current="date"':""}${this.isDisabled(n)?" disabled":""}><span>${n.getDate()}</span>${_?`<small>${_}</small>`:""}</button></td>`}w+="</tr>"}C+=`<section class="calendar-month"><header>${G}${T}${J}</header><table role="grid" aria-labelledby="${A}"${S?" data-week-numbers":""}><thead><tr>${E}</tr></thead><tbody>${w}</tbody></table></section>`}const O=this.getAttribute("name")?`<input type="hidden" name="${o(this.getAttribute("name"))}" value="${o(this.value)}">`:"";if(this.innerHTML=`<div class="calendar-months">${C}</div>${O}`,!this.querySelector('td > button[tabindex="0"]')){const u=this.querySelector("td:not([data-outside]) > button:not(:disabled)")||this.querySelector("td > button");u&&(u.tabIndex=0)}N&&this.focusDate()}focusDate(){(this.querySelector(`td:not([data-outside]) > button[data-date="${b(this.focused)}"]`)||this.querySelector('td > button[tabindex="0"]'))?.focus({preventScroll:!0})}goTo(t){const s=typeof t=="string"?g(t):t;s&&(this.view=y(s),this.focused=s,this.render())}visible(t){const s=c(this.view,this.monthsShown-1);return t>=this.view&&t<c(s,1)}moveFocus(t){this.min&&t<this.min||this.max&&t>this.max||(this.focused=t,this.visible(t)?this.querySelectorAll("td > button").forEach(s=>{s.tabIndex=s.dataset.date===b(t)&&!s.closest("[data-outside]")?0:-1}):(this.view=t<this.view?y(t):y(c(t,-(this.monthsShown-1))),this.render()),this.focusDate())}select(t){if(this.mode==="range")!this.start||this.end||t<this.start?(this.start=t,this.end=null):this.end=t;else if(this.mode==="multiple"){const s=this.selected.findIndex(e=>p(e,t));s>=0?this.selected.splice(s,1):this.selected.push(t),this.selected.sort((e,a)=>e-a)}else this.start=t,this.selected=[t];this.focused=t,this._writing=!0,this.setAttribute("value",this.value),this._writing=!1,this.render(),this.focusDate(),this.dispatchEvent(new CustomEvent("change",{bubbles:!0,detail:{value:this.value,dates:this.dates,complete:this.mode!=="range"||!!this.end}}))}onClick(t){const s=t.target.closest("button[data-nav]");if(s&&!s.disabled){this.view=c(this.view,+s.dataset.nav);const a=new Date(this.view.getFullYear(),this.view.getMonth()+1,0).getDate();this.focused=this.clamp(new Date(this.view.getFullYear(),this.view.getMonth(),Math.min(this.focused.getDate(),a))),this.render();return}const e=t.target.closest("button[data-date]");e&&!e.disabled&&this.select(g(e.dataset.date))}onSelectChange(t){const s=t.target;if(!(s instanceof HTMLSelectElement)||!s.closest(".calendar-caption"))return;t.stopPropagation();const e=+this.querySelector("[data-calendar-month]").value,a=+this.querySelector("[data-calendar-year]").value;this.view=new Date(a,e,1),this.focused=this.clamp(new Date(a,e,Math.min(this.focused.getDate(),new Date(a,e+1,0).getDate()))),this.render(),this.querySelector(s.hasAttribute("data-calendar-month")?"[data-calendar-month]":"[data-calendar-year]")?.focus()}onKey(t){if(!t.target.matches("td > button"))return;const s=getComputedStyle(this).direction==="rtl",e=this.focused,a=(e.getDay()-this.weekStart()+7)%7,x={ArrowLeft:l(e,s?1:-1),ArrowRight:l(e,s?-1:1),ArrowUp:l(e,-7),ArrowDown:l(e,7),Home:l(e,-a),End:l(e,6-a),PageUp:c(e,t.shiftKey?-12:-1),PageDown:c(e,t.shiftKey?12:1)};t.key in x&&(t.preventDefault(),this.moveFocus(x[t.key]))}}customElements.get("auvyx-calendar")||customElements.define("auvyx-calendar",X);
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ class o extends HTMLElement{connectedCallback(){if(this._init||(this._init=!0,this.menu=this.querySelector("[data-popover][popover]"),!this.menu))return;let i=!1;this.addEventListener("pointerdown",t=>{t.button===2&&(i=!0)}),this.addEventListener("contextmenu",t=>{if(this.menu.contains(t.target))return;t.preventDefault();const{clientX:e,clientY:n}=t;if(!i)return this.openAt(e,n);window.addEventListener("pointerup",()=>{i=!1,setTimeout(()=>this.openAt(e,n))},{once:!0,capture:!0})}),this.addEventListener("keydown",t=>{if(!this.menu.contains(t.target)&&(t.key==="ContextMenu"||t.shiftKey&&t.key==="F10")){t.preventDefault();const e=t.target.getBoundingClientRect();this.openAt(e.left,e.bottom)}})}openAt(i,t){const e=this.menu;e.matches(":popover-open")&&e.hidePopover(),Object.assign(e.style,{position:"fixed",inset:"auto",margin:"0",positionArea:"none",positionTryFallbacks:"none",left:`${i}px`,top:`${t}px`}),e.showPopover();const n=e.getBoundingClientRect();n.right>innerWidth-4&&(e.style.left=`${Math.max(4,i-n.width)}px`),n.bottom>innerHeight-4&&(e.style.top=`${Math.max(4,t-n.height)}px`)}}customElements.get("auvyx-context-menu")||customElements.define("auvyx-context-menu",o);
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ class c extends HTMLElement{connectedCallback(){this._init||(this._init=!0,this.table=this.querySelector("table"),this.tbody=this.table?.tBodies[0],this.tbody&&(this.rows=[...this.tbody.rows].filter(t=>!t.hasAttribute("data-empty")),this.empty=this.tbody.querySelector("tr[data-empty]"),this.pageSize=parseInt(this.dataset.pageSize,10)||0,this.page=0,this.query="",this.sort={col:-1,dir:"ascending"},this.collator=new Intl.Collator(this.closest("[lang]")?.lang||void 0,{numeric:!0,sensitivity:"base"}),this.headers=[...this.table.tHead.rows[0].cells],this.headers.forEach((t,e)=>{(t.hasAttribute("aria-sort")?t.querySelector(":scope > button"):null)?.addEventListener("click",()=>this.toggleSort(e))}),this.filterInput=this.querySelector("input[data-filter]"),this.filterInput?.addEventListener("input",()=>{this.query=this.filterInput.value.trim().toLocaleLowerCase(),this.page=0,this.render()}),this.selectAll=this.querySelector("input[data-select-all]"),this.selectAll?.addEventListener("change",()=>{this.visible().forEach(t=>this.setSelected(t,this.selectAll.checked)),this.updateSelection()}),this.tbody.addEventListener("change",t=>{t.target.matches("input[data-select]")&&(this.setSelected(t.target.closest("tr"),t.target.checked),this.updateSelection())}),this.querySelectorAll("input[data-column]").forEach(t=>{t.addEventListener("change",()=>this.setColumn(parseInt(t.dataset.column,10),t.checked)),t.checked||this.setColumn(parseInt(t.dataset.column,10),!1)}),this.querySelector('[data-page="prev"]')?.addEventListener("click",()=>{this.page--,this.render()}),this.querySelector('[data-page="next"]')?.addEventListener("click",()=>{this.page++,this.render()}),this.rows.forEach(t=>{t.querySelector("input[data-select]")?.checked&&t.setAttribute("aria-selected","true")}),this.render()))}cellValue(t,e){const s=t.cells[e];return s?s.dataset.value??s.textContent.trim():""}matches(t){if(!this.query)return!0;const e=this.filterInput?.dataset.filter,s=e?e.split(",").map(Number):null;return[...t.cells].some((i,a)=>(!s||s.includes(a))&&i.textContent.toLocaleLowerCase().includes(this.query))}toggleSort(t){this.sort=this.sort.col===t?{col:t,dir:this.sort.dir==="ascending"?"descending":"ascending"}:{col:t,dir:"ascending"},this.headers.forEach((e,s)=>e.hasAttribute("aria-sort")&&e.setAttribute("aria-sort",s===t?this.sort.dir:"none")),this.render()}ordered(){const t=this.rows.filter(l=>this.matches(l)),{col:e,dir:s}=this.sort;if(e<0)return t;const i=this.headers[e]?.dataset.type==="number",a=s==="descending"?-1:1;return t.sort((l,h)=>{const n=this.cellValue(l,e),r=this.cellValue(h,e);return a*(i?(parseFloat(n)||0)-(parseFloat(r)||0):this.collator.compare(n,r))})}visible(){return this.rows.filter(t=>!t.hidden)}setSelected(t,e){const s=t.querySelector("input[data-select]");s&&(s.checked=e),e?t.setAttribute("aria-selected","true"):t.removeAttribute("aria-selected")}setColumn(t,e){[this.table.tHead,...this.table.tBodies,this.table.tFoot].filter(Boolean).forEach(s=>{[...s.rows].forEach(i=>{i.cells[t]&&!i.hasAttribute("data-empty")&&(i.cells[t].hidden=!e)})})}updateSelection(){const t=this.visible(),e=this.rows.filter(a=>a.getAttribute("aria-selected")==="true").length,s=t.filter(a=>a.getAttribute("aria-selected")==="true").length;this.selectAll&&(this.selectAll.checked=t.length>0&&s===t.length,this.selectAll.indeterminate=s>0&&s<t.length);const i=this.querySelector("[data-selected-count]");if(i){const a=i.dataset.template||"{selected} of {total} row(s) selected.";i.textContent=a.replace("{selected}",e).replace("{total}",this.rows.length)}this.dispatchEvent(new CustomEvent("selectionchange",{detail:{rows:this.rows.filter(a=>a.getAttribute("aria-selected")==="true")}}))}render(){const t=this.ordered(),e=this.pageSize?Math.max(1,Math.ceil(t.length/this.pageSize)):1;this.page=Math.min(Math.max(0,this.page),e-1);const s=this.pageSize?this.page*this.pageSize:0,i=this.pageSize?s+this.pageSize:t.length,a=new Set(t.slice(s,i));t.forEach(r=>this.tbody.insertBefore(r,this.empty)),this.rows.forEach(r=>{r.hidden=!a.has(r)}),this.empty&&(this.empty.hidden=t.length>0);const l=this.querySelector("[data-page-status]");if(l){const r=l.dataset.template||"Page {page} of {pages}";l.textContent=r.replace("{page}",this.page+1).replace("{pages}",e)}const h=this.querySelector('[data-page="prev"]'),n=this.querySelector('[data-page="next"]');h&&(h.disabled=this.page<=0),n&&(n.disabled=this.page>=e-1),this.updateSelection()}}customElements.get("auvyx-data-table")||customElements.define("auvyx-data-table",c);
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ const u='<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2v4"/><path d="M16 2v4"/><rect width="18" height="18" x="3" y="4" rx="2"/><path d="M3 10h18"/></svg>',d=["months","caption","week-numbers","disabled-days","disabled-dates","booked","min-days","max-days"],h=n=>n?new Date(`${n}T00:00:00`):null;class p extends HTMLElement{connectedCallback(){if(this._init||(this.inputs=[...this.querySelectorAll(':scope > input[type="date"]')],!this.inputs.length))return;this._init=!0,this.range=this.getAttribute("mode")==="range"&&this.inputs.length>=2;const a=this.inputs[0],e=a.id||`dp-${Math.random().toString(36).slice(2,8)}`,s=this.closest("[lang]")?.getAttribute("lang")||navigator.language;this.format=new Intl.DateTimeFormat(s,{dateStyle:"medium"}),this.button=document.createElement("button"),this.button.type="button",this.button.className="btn",this.button.dataset.variant=this.dataset.variant||"outline",this.button.setAttribute("popovertarget",`${e}-popover`),this.button.setAttribute("aria-haspopup","dialog");const i=a.labels?.[0];i&&(i.id||=`${e}-label`,this.button.setAttribute("aria-labelledby",`${i.id} ${e}-value`),i.htmlFor="",i.addEventListener("click",()=>this.button.focus())),this.button.innerHTML=`${u}<span id="${e}-value"></span>`,this.panel=document.createElement("div"),this.panel.id=`${e}-popover`,this.panel.setAttribute("data-popover",""),this.panel.setAttribute("popover",""),this.panel.setAttribute("role","dialog"),this.panel.setAttribute("aria-label",this.dataset.dialogLabel||(this.range?"Choose dates":"Choose date")),this.panel.dataset.side=this.dataset.side||"bottom",this.panel.dataset.align=this.dataset.align||"start",this.calendar=document.createElement("auvyx-calendar"),this.calendar.className="calendar",this.range&&this.calendar.setAttribute("mode","range");for(const t of["min","max"])a[t]&&this.calendar.setAttribute(t,a[t]);for(const t of d)this.hasAttribute(t)&&this.calendar.setAttribute(t,this.getAttribute(t));this.dataset.weekStart&&(this.calendar.dataset.weekStart=this.dataset.weekStart);const r=this.range?this.inputs[0].value?`${this.inputs[0].value}/${this.inputs[1].value}`:"":a.value;r&&this.calendar.setAttribute("value",r),this.panel.append(this.calendar);for(const t of this.inputs)t.hidden=!0,t.tabIndex=-1,t.addEventListener("invalid",l=>{l.preventDefault(),this.button.setAttribute("aria-invalid","true"),this.button.focus()});this.prepend(this.button),this.append(this.panel),this.update(),this.calendar.addEventListener("change",t=>{t.stopPropagation();const[l,o]=t.detail.value.split("/");this.setInput(this.inputs[0],l||""),this.range&&this.setInput(this.inputs[1],o||""),this.button.removeAttribute("aria-invalid"),this.update(),t.detail.complete&&(this.panel.hidePopover(),this.button.focus()),this.dispatchEvent(new CustomEvent("change",{bubbles:!0,detail:{value:t.detail.value,complete:t.detail.complete}}))}),this.panel.addEventListener("toggle",t=>{t.newState==="open"&&requestAnimationFrame(()=>this.calendar.focusDate?.())})}setInput(a,e){a.value!==e&&(a.value=e,a.dispatchEvent(new Event("input",{bubbles:!0})),a.dispatchEvent(new Event("change",{bubbles:!0})))}get value(){return this.range?`${this.inputs[0].value}/${this.inputs[1].value}`:this.inputs[0].value}update(){const a=this.button.querySelector("span"),e=h(this.inputs[0].value),s=this.range?h(this.inputs[1].value):null;let i;this.range&&e&&s?i=this.format.formatRange(e,s):e?i=this.format.format(e)+(this.range?" \u2013":""):i=this.dataset.placeholder||this.inputs[0].placeholder||(this.range?"Pick a date range":"Pick a date"),a.textContent=i,e?this.button.dataset.value=this.value:delete this.button.dataset.value}}customElements.get("auvyx-date-picker")||customElements.define("auvyx-date-picker",p);
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ import"./menu.min.js";import"./context-menu.min.js";import"./resizable.min.js";import"./data-table.min.js";import"./calendar.min.js";import"./date-picker.min.js";
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ (()=>{if(window.__auvyxMenu)return;window.__auvyxMenu=!0;const d='[role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"]',p="[data-popover][popover]",k=e=>!e.disabled&&e.getAttribute("aria-disabled")!=="true"&&!e.closest("[hidden]"),l=e=>[...e.querySelectorAll(d)].filter(k),c=e=>e.id?document.querySelector(`[popovertarget="${CSS.escape(e.id)}"]`):null,i=e=>{const t=e?.getAttribute("popovertarget");return t?document.getElementById(t):null},m=e=>e instanceof HTMLElement&&e.matches(p)&&e.querySelector('[role="menu"]'),f=e=>e?.closest(".menubar"),g=e=>[...e.querySelectorAll(":scope > .dropdown-menu > [popovertarget]")],h=e=>e?.focus({preventScroll:!0}),y=(e,t="first")=>{const r=i(e);r&&(r.dataset.focusOnOpen=t,r.matches(":popover-open")?h(t==="last"?l(r).at(-1):l(r)[0]):r.showPopover({source:e}))};document.addEventListener("toggle",e=>{const t=e.target;if(!(t instanceof HTMLElement)||!t.matches(p))return;const r=c(t);if(r&&r.hasAttribute("aria-haspopup")&&r.setAttribute("aria-expanded",String(e.newState==="open")),e.newState!=="open"||!m(t))return;const o=t.dataset.focusOnOpen||"first";delete t.dataset.focusOnOpen,o!=="none"&&requestAnimationFrame(()=>{const n=l(t);h(o==="last"?n.at(-1):n[0])})},!0),document.addEventListener("keydown",e=>{const t=e.target;if(!(t instanceof Element))return;const r=t.closest(p);if(r&&m(r)&&t.matches(d)){const o=l(r),n=o.indexOf(t),s={ArrowDown:n+1,ArrowUp:n-1,Home:0,End:o.length-1}[e.key];if(s!==void 0){e.preventDefault(),h(o[(s+o.length)%o.length]);return}if(e.key==="Tab"){r.hidePopover();return}if(e.key==="Escape"){e.preventDefault(),r.hidePopover(),c(r)?.focus({preventScroll:!0});return}const u=f(c(r));if(u&&(e.key==="ArrowRight"||e.key==="ArrowLeft")){e.preventDefault();const a=g(u),w=a.indexOf(c(r)),b=getComputedStyle(u).direction==="rtl",E=e.key==="ArrowRight"!==b?1:-1,S=a[(w+E+a.length)%a.length];r.hidePopover(),y(S);return}return}if(t.matches("[popovertarget]")){const o=i(t),n=f(t);if(o&&m(o)&&(e.key==="ArrowDown"||e.key==="ArrowUp")){e.preventDefault(),y(t,e.key==="ArrowUp"?"last":"first");return}if(n&&(e.key==="ArrowRight"||e.key==="ArrowLeft"||e.key==="Home"||e.key==="End")){e.preventDefault();const s=g(n),u=s.indexOf(t),a=getComputedStyle(n).direction==="rtl",w=e.key==="ArrowRight"!==a?1:-1;(e.key==="Home"?s[0]:e.key==="End"?s.at(-1):s[(u+w+s.length)%s.length]).focus()}}}),document.addEventListener("click",e=>{const t=e.target instanceof Element&&e.target.closest(d);if(!t||!k(t))return;const r=t.closest(p);if(!r)return;const o=t.getAttribute("role");o==="menuitemcheckbox"?t.setAttribute("aria-checked",String(t.getAttribute("aria-checked")!=="true")):o==="menuitemradio"&&(t.closest('[role="group"]')||r).querySelectorAll('[role="menuitemradio"]').forEach(s=>s.setAttribute("aria-checked",String(s===t))),!(t.hasAttribute("popovertarget")||t.hasAttribute("data-keep-open"))&&(o!=="menuitem"&&!t.hasAttribute("data-close")||(r.hidePopover(),c(r)?.focus({preventScroll:!0})))}),document.addEventListener("pointerover",e=>{const t=e.target instanceof Element&&e.target.closest(".menubar > .dropdown-menu > [popovertarget]");if(!t)return;const r=f(t),o=g(r).map(i).find(n=>n?.matches(":popover-open"));!o||o===i(t)||(o.hidePopover(),y(t,"none"))});const v=new WeakMap,A=e=>clearTimeout(v.get(e));document.addEventListener("pointerover",e=>{if(e.pointerType!=="mouse")return;const t=e.target instanceof Element&&e.target.closest(".navigation-menu > ul > li");if(!t)return;A(t);const r=t.querySelector(":scope > [popovertarget]"),o=i(r);!o||o.matches(":popover-open")||v.set(t,setTimeout(()=>{o.dataset.openedByHover=String(Date.now()),o.showPopover({source:r})},120))}),document.addEventListener("pointerout",e=>{if(e.pointerType!=="mouse")return;const t=e.target instanceof Element&&e.target.closest(".navigation-menu > ul > li");if(!t||t.contains(e.relatedTarget))return;A(t);const r=i(t.querySelector(":scope > [popovertarget]"));!r||!r.dataset.openedByHover||v.set(t,setTimeout(()=>{r.matches(":popover-open")&&!t.matches(":hover")&&r.hidePopover(),delete r.dataset.openedByHover},200))}),document.addEventListener("click",e=>{const t=e.target instanceof Element&&e.target.closest(".navigation-menu > ul > li > [popovertarget]"),r=i(t);if(r?.dataset.openedByHover){if(Date.now()-Number(r.dataset.openedByHover)<600&&r.matches(":popover-open")){e.preventDefault();return}delete r.dataset.openedByHover}},!0)})();
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ class d extends HTMLElement{connectedCallback(){if(this._init||(this._init=!0,this.vertical=this.dataset.orientation==="vertical",this.panels=[...this.children].filter(e=>e.getAttribute("role")!=="separator"),this.handles=[...this.children].filter(e=>e.getAttribute("role")==="separator"),this.panels.length<2))return;const t=this.panels.map(e=>parseFloat(getComputedStyle(e).getPropertyValue("--size"))||0),s=t.filter(e=>!e).length,i=Math.max(0,100-t.reduce((e,r)=>e+r,0));this.sizes=t.map(e=>e||(s?i/s:0));const a=this.sizes.reduce((e,r)=>e+r,0)||1;this.sizes=this.sizes.map(e=>e/a*100),this.apply(),this.handles.forEach((e,r)=>{e.setAttribute("aria-orientation",this.vertical?"horizontal":"vertical"),e.setAttribute("aria-valuemin","0"),e.setAttribute("aria-valuemax","100"),this.panels[r].id&&e.setAttribute("aria-controls",this.panels[r].id),e.hasAttribute("tabindex")||(e.tabIndex=0),e.addEventListener("pointerdown",n=>this.startDrag(n,r)),e.addEventListener("keydown",n=>this.onKey(n,r)),e.addEventListener("dblclick",()=>this.resetPair(r))})}minOf(t){const s=parseFloat(this.panels[t].dataset.min);return Number.isFinite(s)?s:10}maxOf(t){const s=parseFloat(this.panels[t].dataset.max);return Number.isFinite(s)?s:100}setPair(t,s){const i=this.sizes[t]+this.sizes[t+1],a=Math.max(this.minOf(t),i-this.maxOf(t+1)),e=Math.min(this.maxOf(t),i-this.minOf(t+1)),r=Math.min(e,Math.max(a,s));this.sizes[t]=r,this.sizes[t+1]=i-r,this.apply()}resetPair(t){const s=this.sizes[t]+this.sizes[t+1];this.setPair(t,s/2)}apply(){this.panels.forEach((t,s)=>t.style.setProperty("--size",this.sizes[s].toFixed(3))),this.handles?.forEach((t,s)=>t.setAttribute("aria-valuenow",String(Math.round(this.sizes[s])))),this.dispatchEvent(new CustomEvent("resize",{detail:{sizes:[...this.sizes]}}))}startDrag(t,s){if(t.button!==0)return;t.preventDefault();const i=t.currentTarget;i.setPointerCapture(t.pointerId),i.setAttribute("data-active",""),this.setAttribute("data-dragging","");const a=this.getBoundingClientRect(),e=this.vertical?a.height:a.width,r=!this.vertical&&getComputedStyle(this).direction==="rtl",n=this.vertical?t.clientY:t.clientX,u=this.sizes[s],o=l=>{const c=((this.vertical?l.clientY:l.clientX)-n)/e*100;this.setPair(s,u+(r?-c:c))},h=()=>{i.removeEventListener("pointermove",o),i.removeAttribute("data-active"),this.removeAttribute("data-dragging")};i.addEventListener("pointermove",o),i.addEventListener("pointerup",h,{once:!0}),i.addEventListener("pointercancel",h,{once:!0})}onKey(t,s){const i=t.shiftKey?10:5,a=!this.vertical&&getComputedStyle(this).direction==="rtl",e=this.vertical?"ArrowDown":a?"ArrowLeft":"ArrowRight",r=this.vertical?"ArrowUp":a?"ArrowRight":"ArrowLeft",n={[e]:this.sizes[s]+i,[r]:this.sizes[s]-i,Home:0,End:100,Enter:null};t.key in n&&(t.preventDefault(),t.key==="Enter"?this.resetPair(s):this.setPair(s,n[t.key]))}}customElements.get("auvyx-resizable")||customElements.define("auvyx-resizable",d);
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ window.basecoat||(()=>{const l={};let i=null;const E=(t,e,r)=>{const n=typeof e=="object"?e:{selector:e,init:r};l[t]={selector:n.selector,init:n.init,refresh:n.refresh}},p=(t,e)=>{const r=l[e];if(r)try{r.init(t),t.hasAttribute(`data-${e}-initialized`)&&(t.dataset.basecoatComponent=e)}catch(n){if(console.error(`Failed to initialize ${e}:`,n),typeof t._destroy=="function")try{t._destroy()}catch(a){console.error(`Failed to clean up ${e} after initialization error:`,a)}delete t._destroy,t.removeAttribute(`data-${e}-initialized`),delete t.dataset.basecoatComponent}},y=t=>{if(!t||t.nodeType!==Node.ELEMENT_NODE)return;const e=t.dataset?.basecoatComponent;if(typeof t._destroy=="function")try{t._destroy()}catch(r){console.error("Failed to destroy Basecoat component:",r)}delete t._destroy,e&&t.removeAttribute(`data-${e}-initialized`),delete t.dataset.basecoatComponent},o=t=>{t.nodeType===Node.ELEMENT_NODE&&(t.isConnected||(t.dataset?.basecoatComponent&&y(t),t.querySelectorAll("[data-basecoat-component]").forEach(y)))},c=t=>Array.from(new Set(t)),u=(t,e,r=!1)=>{const n=Array.from(document.querySelectorAll(e));return r&&n.push(...document.querySelectorAll(`[data-basecoat-component="${t}"]`)),c(n)},h=(t={})=>{const e=t.force===!0;Object.entries(l).forEach(([r,{selector:n}])=>{u(r,n,e).forEach(a=>{const m=a.dataset?.basecoatComponent===r;e&&y(a),(m||a.matches(n))&&p(a,r)})})},s=t=>{t.nodeType===Node.ELEMENT_NODE&&Object.entries(l).forEach(([e,{selector:r}])=>{t.matches(r)&&p(t,e),t.querySelectorAll(r).forEach(n=>p(n,e))})},f=t=>{if(!t)return;if(typeof t.refresh=="function"){t.refresh();return}const e=t.dataset?.basecoatComponent,r=e?l[e]:null;r?.refresh&&r.refresh(t)},d=()=>{i||(i=new MutationObserver(t=>{t.forEach(e=>{e.addedNodes.forEach(s),e.removedNodes.forEach(o)})}),i.observe(document.body,{childList:!0,subtree:!0}))},C=()=>{i&&(i.disconnect(),i=null)},w=(t,e={})=>{const r=l[t];if(!r){console.warn(`Component '${t}' not found in registry`);return}const n=e.force===!0;u(t,r.selector,n).forEach(a=>{const m=a.dataset?.basecoatComponent===t;n&&y(a),(m||a.matches(r.selector))&&p(a,t)})},v=(t={})=>{h(t)},b=t=>{const e=t==="dark";document.documentElement.classList.toggle("dark",e);try{localStorage.setItem("themeMode",e?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:e?"dark":"light"}}))},g=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:E,init:w,initAll:v,refresh:f,start:d,stop:C,theme:{get:g,set:b,toggle:()=>b(g()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{h(),d()})})(),(()=>{const l=new WeakMap,i=o=>{const c=o.querySelector(":scope > summary");return o.getAttribute("aria-disabled")==="true"||o.dataset.disabled==="true"||c?.getAttribute("aria-disabled")==="true"},E=o=>o.hasAttribute("data-multiple"),p=(o,c)=>{E(o)||!c.open||o.querySelectorAll(":scope > details[open]").forEach(u=>{u!==c&&(u.open=!1)})},y=o=>{if(o.dataset.accordionInitialized)return;const c=s=>{const d=s.target.closest("summary")?.closest("details");!d||d.parentElement!==o||!i(d)||s.preventDefault()},u=s=>{if(s.key!=="Enter"&&s.key!==" ")return;const d=s.target.closest("summary")?.closest("details");!d||d.parentElement!==o||!i(d)||s.preventDefault()},h=s=>{const f=s.target;if(f.parentElement===o){if(i(f)){f.open=!1;return}p(o,f)}};o.addEventListener("click",c),o.addEventListener("keydown",u),o.addEventListener("toggle",h,!0),o.querySelectorAll(":scope > details[open]").forEach(s=>p(o,s)),l.set(o,{handleClick:c,handleToggle:h}),o._destroy=()=>{o.removeEventListener("click",c),o.removeEventListener("keydown",u),o.removeEventListener("toggle",h,!0),l.delete(o)},o.dataset.accordionInitialized="true",o.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.basecoat&&window.basecoat.register("accordion",".accordion:not([data-accordion-initialized])",y)})(),document.readyState!=="loading"&&(window.basecoat.initAll(),window.basecoat.start());
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ (()=>{var F=t=>String(t).padStart(2,"0"),b=t=>`${t.getFullYear()}-${F(t.getMonth()+1)}-${F(t.getDate())}`,c=t=>{const e=/^(\d{4})-(\d{2})-(\d{2})$/.exec((t||"").trim());return e?new Date(+e[1],+e[2]-1,+e[3]):null},Y=t=>t.getFullYear()*1e4+t.getMonth()*100+t.getDate(),w=(t,e)=>!!t&&!!e&&Y(t)===Y(e),o=(t,e)=>new Date(t.getFullYear(),t.getMonth(),t.getDate()+e),l=(t,e)=>{const s=new Date(t.getFullYear(),t.getMonth()+e+1,0).getDate();return new Date(t.getFullYear(),t.getMonth()+e,Math.min(t.getDate(),s))},D=t=>new Date(t.getFullYear(),t.getMonth(),1),B=(t,e)=>Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate())-new Date(t.getFullYear(),t.getMonth(),t.getDate()))/864e5),K=t=>{const e=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate()));return e.setUTCDate(e.getUTCDate()+4-(e.getUTCDay()||7)),Math.ceil(((e-Date.UTC(e.getUTCFullYear(),0,1))/864e5+1)/7)},C=t=>(t||"").split(",").map(e=>e.trim()).filter(Boolean).map(e=>{const[s,a]=e.split("/"),g=c(s);return g?[g,c(a)||g]:null}).filter(Boolean),y=(t,e)=>t.some(([s,a])=>e>=s&&e<=a),I=t=>`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="${t}"/></svg>`,r=t=>String(t).replace(/[&<>"]/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[e]),P=class extends HTMLElement{static observedAttributes=["value","min","max","mode","months","month","disabled-dates","disabled-days","booked","min-days","max-days","caption","week-numbers","lang"];connectedCallback(){this.readAll();const t=this.selected[0]||this.start||new Date;this.focused||=this.clamp(t);const e=/^(\d{4})-(\d{2})$/.exec(this.getAttribute("month")||"");this.view||=e?new Date(+e[1],+e[2]-1,1):D(this.focused),this._init||(this._init=!0,this.addEventListener("click",s=>this.onClick(s)),this.addEventListener("keydown",s=>this.onKey(s)),this.addEventListener("change",s=>this.onSelectChange(s))),this.render()}attributeChangedCallback(t,e,s){if(!(!this._init||e===s||this._writing)){if(this.readAll(),t==="value"){const a=this.selected[0]||this.start;a&&(this.focused=a,this.view=D(a))}if(t==="month"){const a=/^(\d{4})-(\d{2})$/.exec(s||"");a&&(this.view=new Date(+a[1],+a[2]-1,1))}this.render()}}readAll(){const t=this.getAttribute("mode");this.mode=t==="range"||t==="multiple"?t:"single",this.monthsShown=Math.max(1,Math.min(12,parseInt(this.getAttribute("months"),10)||1)),this.min=c(this.getAttribute("min")),this.max=c(this.getAttribute("max")),this.disabledDates=C(this.getAttribute("disabled-dates")),this.bookedDates=C(this.getAttribute("booked")),this.disabledDays=(this.getAttribute("disabled-days")||"").split(",").map(s=>parseInt(s,10)).filter(s=>s>=0&&s<=6),this.minDays=parseInt(this.getAttribute("min-days"),10)||0,this.maxDays=parseInt(this.getAttribute("max-days"),10)||0;const e=this.getAttribute("value")||"";if(this.start=this.end=null,this.selected=[],this.mode==="range"){const[s,a]=e.split("/");this.start=c(s),this.end=c(a)}else this.mode==="multiple"?this.selected=e.split(",").map(c).filter(Boolean):(this.start=c(e),this.start&&(this.selected=[this.start]))}get value(){return this.mode==="range"?this.start?`${b(this.start)}/${this.end?b(this.end):""}`:"":this.mode==="multiple"?this.selected.map(b).join(","):this.start?b(this.start):""}set value(t){this.setAttribute("value",t??"")}get dates(){return this.mode==="range"?[this.start,this.end].filter(Boolean):[...this.selected]}set renderDay(t){this._renderDay=t,this._init&&this.render()}get renderDay(){return this._renderDay}locale(){return this.getAttribute("lang")||this.closest("[lang]")?.getAttribute("lang")||navigator.language}weekStart(){const t=parseInt(this.dataset.weekStart,10);return Number.isFinite(t)?(t%7+7)%7:1}clamp(t){return this.min&&t<this.min?this.min:this.max&&t>this.max?this.max:t}isDisabled(t){if(this.min&&t<this.min||this.max&&t>this.max||this.disabledDays.includes(t.getDay())||y(this.disabledDates,t)||y(this.bookedDates,t))return!0;if(this.mode==="range"&&this.start&&!this.end&&t>this.start){const e=B(this.start,t)+1;if(this.minDays&&e<this.minDays||this.maxDays&&e>this.maxDays)return!0;for(let s=o(this.start,1);s<t;s=o(s,1))if(this.disabledDays.includes(s.getDay())||y(this.disabledDates,s)||y(this.bookedDates,s))return!0}return!1}render(){const t=this.locale(),e=new Intl.DateTimeFormat(t,{month:"long",year:"numeric"}),s=new Intl.DateTimeFormat(t,{month:"short"}),a=new Intl.DateTimeFormat(t,{weekday:"short"}),g=new Intl.DateTimeFormat(t,{weekday:"long"}),W=new Intl.DateTimeFormat(t,{dateStyle:"full"}),x=new Date,T=this.weekStart(),j=this.id||(this._uid||=`cal-${Math.random().toString(36).slice(2,8)}`),k=this.hasAttribute("week-numbers"),H=this.getAttribute("caption")==="dropdown",N=this.min&&l(this.view,-1)<D(this.min),O=this.max&&l(this.view,this.monthsShown)>this.max,R=this.contains(document.activeElement)&&document.activeElement.matches("td > button");let E="";for(let u=0;u<this.monthsShown;u++){const d=l(this.view,u),_=(d.getDay()-T+7)%7,S=o(d,-_),G=new Date(d.getFullYear(),d.getMonth()+1,0).getDate(),J=Math.ceil((_+G)/7),M=`${j}-title-${u}`;let q=`<h2 id="${M}" aria-live="polite">${r(e.format(d))}</h2>`;if(H&&u===0){const m=(this.min||l(x,-120)).getFullYear(),f=(this.max||l(x,120)).getFullYear();let i="";for(let n=0;n<12;n++){const h=new Date(d.getFullYear(),n,1),A=this.min&&new Date(d.getFullYear(),n+1,0)<this.min||this.max&&h>this.max;i+=`<option value="${n}"${n===d.getMonth()?" selected":""}${A?" disabled":""}>${r(s.format(h))}</option>`}let v="";for(let n=m;n<=f;n++)v+=`<option value="${n}"${n===d.getFullYear()?" selected":""}>${n}</option>`;q=`<div class="calendar-caption" id="${M}" aria-label="${r(e.format(d))}" role="group"><select class="select" data-calendar-month aria-label="${r(this.dataset.labelMonth||"Month")}">${i}</select><select class="select" data-calendar-year aria-label="${r(this.dataset.labelYear||"Year")}">${v}</select></div>`}const Q=u===0?`<button type="button" data-nav="-1" aria-label="${r(this.dataset.labelPrev||"Previous month")}"${N?" disabled":""}>${I("m15 18-6-6 6-6")}</button>`:"<span></span>",V=u===this.monthsShown-1?`<button type="button" data-nav="1" aria-label="${r(this.dataset.labelNext||"Next month")}"${O?" disabled":""}>${I("m9 18 6-6-6-6")}</button>`:"<span></span>";let L=k?`<th scope="col" data-week-number><span class="sr-only">${r(this.dataset.labelWeek||"Week")}</span></th>`:"";for(let m=0;m<7;m++){const f=o(S,m);L+=`<th scope="col" abbr="${r(g.format(f))}">${r(a.format(f))}</th>`}let p="";for(let m=0;m<J;m++){p+="<tr>",k&&(p+=`<th scope="row" data-week-number>${K(o(S,m*7+(8-T)%7))}</th>`);for(let f=0;f<7;f++){const i=o(S,m*7+f),v=i.getMonth()!==d.getMonth(),n=v&&this.monthsShown>1,h=[];if(v&&h.push("data-outside"),y(this.bookedDates,i)&&h.push("data-booked"),!n&&(this.mode!=="range"&&this.selected.some($=>w($,i))&&h.push('aria-selected="true"'),this.mode==="range"&&this.start)){const $=this.end||this.start;w(i,this.start)&&h.push("data-range-start"),w(i,$)&&h.push("data-range-end"),i>this.start&&i<$&&h.push("data-range-middle"),i>=this.start&&i<=$&&h.push('aria-selected="true"')}if(n){p+=`<td ${h.join(" ")} aria-hidden="true"></td>`;continue}const A=w(i,this.focused)&&!v?"0":"-1",U=this._renderDay?this._renderDay(i):null;p+=`<td ${h.join(" ")}><button type="button" data-date="${b(i)}" tabindex="${A}" aria-label="${r(W.format(i))}"${w(i,x)?' aria-current="date"':""}${this.isDisabled(i)?" disabled":""}><span>${i.getDate()}</span>${U?`<small>${U}</small>`:""}</button></td>`}p+="</tr>"}E+=`<section class="calendar-month"><header>${Q}${q}${V}</header><table role="grid" aria-labelledby="${M}"${k?" data-week-numbers":""}><thead><tr>${L}</tr></thead><tbody>${p}</tbody></table></section>`}const z=this.getAttribute("name")?`<input type="hidden" name="${r(this.getAttribute("name"))}" value="${r(this.value)}">`:"";if(this.innerHTML=`<div class="calendar-months">${E}</div>${z}`,!this.querySelector('td > button[tabindex="0"]')){const u=this.querySelector("td:not([data-outside]) > button:not(:disabled)")||this.querySelector("td > button");u&&(u.tabIndex=0)}R&&this.focusDate()}focusDate(){(this.querySelector(`td:not([data-outside]) > button[data-date="${b(this.focused)}"]`)||this.querySelector('td > button[tabindex="0"]'))?.focus({preventScroll:!0})}goTo(t){const e=typeof t=="string"?c(t):t;e&&(this.view=D(e),this.focused=e,this.render())}visible(t){const e=l(this.view,this.monthsShown-1);return t>=this.view&&t<l(e,1)}moveFocus(t){this.min&&t<this.min||this.max&&t>this.max||(this.focused=t,this.visible(t)?this.querySelectorAll("td > button").forEach(e=>{e.tabIndex=e.dataset.date===b(t)&&!e.closest("[data-outside]")?0:-1}):(this.view=t<this.view?D(t):D(l(t,-(this.monthsShown-1))),this.render()),this.focusDate())}select(t){if(this.mode==="range")!this.start||this.end||t<this.start?(this.start=t,this.end=null):this.end=t;else if(this.mode==="multiple"){const e=this.selected.findIndex(s=>w(s,t));e>=0?this.selected.splice(e,1):this.selected.push(t),this.selected.sort((s,a)=>s-a)}else this.start=t,this.selected=[t];this.focused=t,this._writing=!0,this.setAttribute("value",this.value),this._writing=!1,this.render(),this.focusDate(),this.dispatchEvent(new CustomEvent("change",{bubbles:!0,detail:{value:this.value,dates:this.dates,complete:this.mode!=="range"||!!this.end}}))}onClick(t){const e=t.target.closest("button[data-nav]");if(e&&!e.disabled){this.view=l(this.view,+e.dataset.nav);const a=new Date(this.view.getFullYear(),this.view.getMonth()+1,0).getDate();this.focused=this.clamp(new Date(this.view.getFullYear(),this.view.getMonth(),Math.min(this.focused.getDate(),a))),this.render();return}const s=t.target.closest("button[data-date]");s&&!s.disabled&&this.select(c(s.dataset.date))}onSelectChange(t){const e=t.target;if(!(e instanceof HTMLSelectElement)||!e.closest(".calendar-caption"))return;t.stopPropagation();const s=+this.querySelector("[data-calendar-month]").value,a=+this.querySelector("[data-calendar-year]").value;this.view=new Date(a,s,1),this.focused=this.clamp(new Date(a,s,Math.min(this.focused.getDate(),new Date(a,s+1,0).getDate()))),this.render(),this.querySelector(e.hasAttribute("data-calendar-month")?"[data-calendar-month]":"[data-calendar-year]")?.focus()}onKey(t){if(!t.target.matches("td > button"))return;const e=getComputedStyle(this).direction==="rtl",s=this.focused,a=(s.getDay()-this.weekStart()+7)%7,g={ArrowLeft:o(s,e?1:-1),ArrowRight:o(s,e?-1:1),ArrowUp:o(s,-7),ArrowDown:o(s,7),Home:o(s,-a),End:o(s,6-a),PageUp:l(s,t.shiftKey?-12:-1),PageDown:l(s,t.shiftKey?12:1)};t.key in g&&(t.preventDefault(),this.moveFocus(g[t.key]))}};customElements.get("auvyx-calendar")||customElements.define("auvyx-calendar",P)})();
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ window.basecoat||(()=>{const f={};let A=null;const T=(o,r,u)=>{const d=typeof r=="object"?r:{selector:r,init:u};f[o]={selector:d.selector,init:d.init,refresh:d.refresh}},b=(o,r)=>{const u=f[r];if(u)try{u.init(o),o.hasAttribute(`data-${r}-initialized`)&&(o.dataset.basecoatComponent=r)}catch(d){if(console.error(`Failed to initialize ${r}:`,d),typeof o._destroy=="function")try{o._destroy()}catch(v){console.error(`Failed to clean up ${r} after initialization error:`,v)}delete o._destroy,o.removeAttribute(`data-${r}-initialized`),delete o.dataset.basecoatComponent}},k=o=>{if(!o||o.nodeType!==Node.ELEMENT_NODE)return;const r=o.dataset?.basecoatComponent;if(typeof o._destroy=="function")try{o._destroy()}catch(u){console.error("Failed to destroy Basecoat component:",u)}delete o._destroy,r&&o.removeAttribute(`data-${r}-initialized`),delete o.dataset.basecoatComponent},B=o=>{o.nodeType===Node.ELEMENT_NODE&&(o.isConnected||(o.dataset?.basecoatComponent&&k(o),o.querySelectorAll("[data-basecoat-component]").forEach(k)))},q=o=>Array.from(new Set(o)),x=(o,r,u=!1)=>{const d=Array.from(document.querySelectorAll(r));return u&&d.push(...document.querySelectorAll(`[data-basecoat-component="${o}"]`)),q(d)},O=(o={})=>{const r=o.force===!0;Object.entries(f).forEach(([u,{selector:d}])=>{x(u,d,r).forEach(v=>{const w=v.dataset?.basecoatComponent===u;r&&k(v),(w||v.matches(d))&&b(v,u)})})},D=o=>{o.nodeType===Node.ELEMENT_NODE&&Object.entries(f).forEach(([r,{selector:u}])=>{o.matches(u)&&b(o,r),o.querySelectorAll(u).forEach(d=>b(d,r))})},h=o=>{if(!o)return;if(typeof o.refresh=="function"){o.refresh();return}const r=o.dataset?.basecoatComponent,u=r?f[r]:null;u?.refresh&&u.refresh(o)},S=()=>{A||(A=new MutationObserver(o=>{o.forEach(r=>{r.addedNodes.forEach(D),r.removedNodes.forEach(B)})}),A.observe(document.body,{childList:!0,subtree:!0}))},M=()=>{A&&(A.disconnect(),A=null)},j=(o,r={})=>{const u=f[o];if(!u){console.warn(`Component '${o}' not found in registry`);return}const d=r.force===!0;x(o,u.selector,d).forEach(v=>{const w=v.dataset?.basecoatComponent===o;d&&k(v),(w||v.matches(u.selector))&&b(v,o)})},z=(o={})=>{O(o)},I=o=>{const r=o==="dark";document.documentElement.classList.toggle("dark",r);try{localStorage.setItem("themeMode",r?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:r?"dark":"light"}}))},y=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:T,init:j,initAll:z,refresh:h,start:S,stop:M,theme:{get:y,set:I,toggle:()=>I(y()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{O(),S()})})(),(()=>{const f=new WeakMap,A=e=>{const t=e.querySelector(":scope > [data-popover]"),i=e.querySelector(':scope > input[role="combobox"], :scope > .input-group input[role="combobox"], :scope > .combobox-chips input[role="combobox"]')||t?.querySelector('input[role="combobox"]'),n=e.querySelector(":scope > .combobox-chips"),l=e.querySelector(':scope > button[aria-haspopup="listbox"]'),s=l||e.querySelector(':scope > .input-group button[aria-haspopup="listbox"]'),c=e.querySelector("[data-clear]"),p=l?.querySelector("[data-value]")||(l?.matches("[data-value]")?l:null),m=t?t.querySelector('[role="listbox"]'):null,C=e.querySelector(':scope > input[type="hidden"]');return{input:i,chips:n,trigger:s,clearButton:c,valueTarget:p,popover:t,listbox:m,hiddenInput:C}},T=(e,t)=>{if(t.listbox?.getAttribute("aria-multiselectable")!=="true"||t.chips||!t.input||t.input.parentElement!==e)return t;const i=document.createElement("div");return i.className="combobox-chips",e.insertBefore(i,t.input),i.appendChild(t.input),A(e)},b=e=>e.dataset.value??e.textContent.trim(),k=e=>e.dataset.label||e.textContent.trim(),B=e=>e.dataset.format==="object"?"object":"value",q=e=>e.getAttribute("aria-disabled")==="true",x=e=>({value:b(e),label:k(e)}),O=e=>{if(e&&typeof e=="object"){const i=e.value==null?"":String(e.value);return i?{value:i,label:String(e.label??e.value)}:null}const t=e==null?"":String(e);return t?{value:t,label:t}:null},D=e=>{const t=Array.from(e.querySelectorAll('[role="option"]'));return{allOptions:t,options:t.filter(i=>!q(i))}},h=e=>Array.from(e.selected.values()),S=e=>e.isMultiple?h(e).map(t=>t.value):h(e)[0]?.value||"",M=e=>e.isMultiple?h(e):h(e)[0]||null,j=e=>{const t=h(e);if(e.format==="object")return JSON.stringify(e.isMultiple?t:t[0]||null);const i=t.map(n=>n.value);return e.isMultiple?JSON.stringify(i):i[0]||""},z=(e,t,i)=>{if(i.isMultiple){let s=[];try{s=JSON.parse(e||"[]")}catch{s=[]}return Array.isArray(s)?s.map(c=>{const p=O(i.format==="object"?c:{value:c,label:i.selected.get(String(c))?.label??c});if(!p)return null;const m=i.options.find(C=>b(C)===p.value);return m?x(m):p}).filter(Boolean):[]}if(i.format==="object")try{const s=O(JSON.parse(e||"null"));if(!s)return[];const c=i.options.find(p=>b(p)===s.value);return[c?x(c):s]}catch{return[]}const n=e||"";if(!n)return[];const l=i.options.find(s=>b(s)===n);return[l?x(l):{value:n,label:i.selected.get(n)?.label||t||n}]},I=(e,t)=>{const i=t.getBoundingClientRect(),n=e.listbox.getBoundingClientRect();i.top<n.top?e.listbox.scrollTop-=n.top-i.top:i.bottom>n.bottom&&(e.listbox.scrollTop+=i.bottom-n.bottom)},y=(e,t)=>{if(e.activeIndex>-1&&e.options[e.activeIndex]&&e.options[e.activeIndex].classList.remove("active"),e.activeIndex=t,e.activeIndex>-1){const i=e.options[e.activeIndex];i.classList.add("active"),i.id||(i.id=`${e.listbox.id||e.root.id||"combobox"}-option-${e.activeIndex}`),e.input.setAttribute("aria-activedescendant",i.id)}else e.input.removeAttribute("aria-activedescendant")},o=e=>{e.popover.dataset.empty=String(e.visibleOptions.length===0)},r=(e,{preserveActive:t=!1,search:i}={})=>{const n=e.activeIndex>-1?e.options[e.activeIndex]:null;if(e.visibleOptions=[],e.manualFilter){e.visibleOptions=e.options.filter(s=>s.getAttribute("aria-hidden")!=="true"),t&&n&&e.visibleOptions.includes(n)?y(e,e.options.indexOf(n)):y(e,e.autoHighlight&&e.visibleOptions.length>0?e.options.indexOf(e.visibleOptions[0]):-1),o(e);return}const l=(i??e.input.value).trim().toLowerCase();e.allOptions.forEach(s=>{if(s.hasAttribute("data-force")){s.setAttribute("aria-hidden","false"),e.options.includes(s)&&e.visibleOptions.push(s);return}const c=(s.dataset.filter||s.dataset.label||s.textContent).trim().toLowerCase(),p=(s.dataset.keywords||"").toLowerCase().split(/[\s,]+/).filter(Boolean),m=!l||c.includes(l)||p.some(C=>C.includes(l));s.setAttribute("aria-hidden",String(!m)),m&&e.options.includes(s)&&e.visibleOptions.push(s)}),t&&n&&e.visibleOptions.includes(n)?y(e,e.options.indexOf(n)):y(e,e.autoHighlight&&e.visibleOptions.length>0?e.options.indexOf(e.visibleOptions[0]):-1),o(e)},u=e=>{const t=f.get(e);t.chips&&(t.chips.querySelectorAll(".combobox-chip").forEach(i=>i.remove()),h(t).forEach(i=>{const n=document.createElement("span");n.className="combobox-chip",n.dataset.value=i.value;const l=document.createElement("span");l.textContent=i.label;const s=document.createElement("button");s.type="button",s.className="combobox-chip-remove btn",s.dataset.variant="ghost",s.dataset.size="icon-xs",s.setAttribute("aria-label",`Remove ${i.label}`),s.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>',s.addEventListener("click",c=>{c.stopPropagation(),e.deselect(i.value),t.input.focus()}),n.appendChild(l),n.appendChild(s),t.chips.insertBefore(n,t.input)}))},d=e=>{if(!e.valueTarget)return;const t=h(e);e.valueTarget.textContent=e.isMultiple?t.map(i=>i.label).join(", "):t[0]?.label||e.valueTarget.dataset.placeholder||""},v=e=>{e.clearButton&&(e.clearButton.hidden=h(e).length===0&&e.input.value==="")},w=e=>{e.options.forEach(t=>{e.selected.has(b(t))?t.setAttribute("aria-selected","true"):t.removeAttribute("aria-selected")})},E=(e,t,i=!0)=>{const n=f.get(e),l=(Array.isArray(t)?t:[t]).map(O).filter(Boolean);n.selected.clear(),n.isMultiple?(l.forEach(s=>n.selected.set(s.value,s)),n.input.value=""):l[0]?(n.selected.set(l[0].value,l[0]),n.input.value=n.valueTarget?"":l[0].label):n.input.value="",n.hiddenInput.value=j(n),w(n),n.isMultiple&&(u(e),r(n,{preserveActive:!0})),d(n),v(n),i&&e.dispatchEvent(new CustomEvent("change",{detail:{value:S(n),selected:M(n)},bubbles:!0}))},P=(e,t=!1)=>{e.popover.getAttribute("aria-hidden")!=="true"&&(e.popover.setAttribute("aria-hidden","true"),e.input.setAttribute("aria-expanded","false"),e.trigger?.setAttribute("aria-expanded","false"),y(e,-1),t&&(e.skipOpenOnFocus=!0,e.input.focus(),requestAnimationFrame(()=>{e.skipOpenOnFocus=!1})))},L=e=>{const{root:t}=e;if(e.popover.getAttribute("aria-hidden")==="false")return;document.dispatchEvent(new CustomEvent("basecoat:popover",{detail:{source:t}})),t.refresh();const i=h(e)[0];e.valueTarget&&(e.input.value="");const n=!e.isMultiple&&i&&e.input.value===i.label?"":void 0;r(e,{search:n}),e.popover.setAttribute("aria-hidden","false"),e.input.setAttribute("aria-expanded","true"),e.trigger?.setAttribute("aria-expanded","true"),e.trigger&&e.input.focus()},N=e=>{const t=f.get(e);if(!t)return;let i=A(e);if(!i.input||!i.popover||!i.listbox||!i.hiddenInput){const c=[];i.input||c.push("input"),i.popover||c.push("popover"),i.listbox||c.push("listbox"),i.hiddenInput||c.push("hidden input"),console.error(`Combobox refresh failed. Missing element(s): ${c.join(", ")}`,e);return}i=T(e,i);const n=i.hiddenInput.value,l=i.input.value;Object.assign(t,i,D(i.listbox)),t.isMultiple=t.listbox.getAttribute("aria-multiselectable")==="true",t.closeOnSelect=e.dataset.closeOnSelect==="true",t.autoHighlight=e.dataset.autoHighlight==="true",t.manualFilter=e.dataset.filter==="manual",t.format=B(e);const s=z(n,l,t);if(s.length>0)E(e,s,!1);else{const c=t.options.filter(p=>p.getAttribute("aria-selected")==="true").map(x);c.length>0?E(e,t.isMultiple?c:c[0],!1):t.isMultiple?E(e,[],!1):(t.input.value=l,t.selected.clear(),t.hiddenInput.value="",w(t),r(t,{preserveActive:!0}))}d(t),v(t)},F=(e,t)=>{if(t&&typeof t=="object"){const l=O(t);if(!l)return null;const s=e.options.find(c=>b(c)===l.value);return s?x(s):l}const i=e.options.find(l=>b(l)===t);return i?x(i):e.selected.get(String(t))||null},J=(e,t)=>{const i=f.get(e),n=F(i,t);n&&(i.isMultiple?(E(e,[...h(i).filter(l=>l.value!==n.value),n]),i.closeOnSelect&&e.close(!0)):(E(e,n),e.close(!i.trigger),i.trigger?.focus()))},U=(e,t)=>{const i=f.get(e);if(!i.isMultiple)return;const n=String(t);i.selected.has(n)&&E(e,h(i).filter(l=>l.value!==n))},V=e=>{const t=f.get(e);E(e,[],!0),t.input.value="",r(t),v(t),t.popover.getAttribute("aria-hidden")==="false"&&t.input.focus()},K=(e,t)=>{const i=f.get(t);if(!["ArrowDown","ArrowUp","Enter","Home","End","Escape","Backspace"].includes(e.key))return;const n=i.popover.getAttribute("aria-hidden")==="false";if(e.key==="Backspace"&&i.isMultiple&&i.input.value===""){const p=h(i),m=p[p.length-1];m&&t.deselect(m.value);return}if(e.key==="Escape"){n&&(e.preventDefault(),e.stopPropagation(),t.close(!0));return}if(!n&&["ArrowDown","ArrowUp","Home","End"].includes(e.key)&&(e.preventDefault(),L(i)),i.popover.getAttribute("aria-hidden")==="true")return;if(e.key==="Enter"){if(i.activeIndex>-1){e.preventDefault();const p=i.options[i.activeIndex];i.isMultiple?t.toggle(b(p)):t.select(b(p))}return}if(!["ArrowDown","ArrowUp","Home","End"].includes(e.key)||i.visibleOptions.length===0)return;e.preventDefault();const l=i.activeIndex>-1?i.visibleOptions.indexOf(i.options[i.activeIndex]):-1;let s=l;e.key==="ArrowDown"&&(s=Math.min(l+1,i.visibleOptions.length-1)),e.key==="ArrowUp"&&(s=l<=0?0:l-1),e.key==="Home"&&(s=0),e.key==="End"&&(s=i.visibleOptions.length-1);const c=i.visibleOptions[s];y(i,i.options.indexOf(c)),I(i,c)},W=e=>{if(e.dataset.comboboxInitialized)return;const t={root:e,activeIndex:-1,allOptions:[],options:[],visibleOptions:[],selected:new Map,format:"value",manualFilter:!1,skipOpenOnFocus:!1};if(f.set(e,t),e.refresh=()=>N(e),N(e),!t.input||!t.popover||!t.listbox||!t.hiddenInput){f.delete(e),delete e.refresh;return}e.close=(a=!1)=>P(t,a),e.select=a=>J(e,a),e.selectByValue=e.select,e.setValue=a=>{const H=(t.isMultiple?Array.isArray(a)?a:a==null?[]:[a]:[a]).map(R=>F(t,R)||O(R)).filter(Boolean);E(e,t.isMultiple?H:H[0])},t.isMultiple&&(e.deselect=a=>U(e,a),e.toggle=a=>{const g=F(t,a);g&&(t.selected.has(g.value)?e.deselect(g.value):e.select(g))},e.selectAll=()=>E(e,t.options.map(x)),e.selectNone=()=>E(e,[]));const i=()=>{t.skipOpenOnFocus||L(t)},n=()=>L(t),l=()=>{L(t),r(t),t.isMultiple||(t.hiddenInput.value="",t.selected.clear(),w(t),d(t),v(t))},s=()=>{t.popover.getAttribute("aria-hidden")==="false"?e.close(!1):L(t)},c=a=>{a.preventDefault(),a.stopPropagation(),V(e)},p=a=>K(a,e),m=a=>{const g=a.target.closest('[role="option"]');g&&t.visibleOptions.includes(g)&&y(t,t.options.indexOf(g))},C=a=>{const g=a.target.closest('[role="option"]');!g||!t.options.includes(g)||(t.isMultiple?e.toggle(b(g)):e.select(b(g)),t.isMultiple&&!t.closeOnSelect&&t.input.focus())},_=a=>{e.contains(a.target)||e.close(!1)},$=a=>{e.contains(a.detail.source)||e.close(!1)};t.input.addEventListener("focus",i),t.input.addEventListener("click",n),t.input.addEventListener("input",l),t.input.addEventListener("keydown",p),t.trigger?.addEventListener("click",s),t.clearButton?.addEventListener("click",c),t.listbox.addEventListener("mousemove",m),t.listbox.addEventListener("click",C),document.addEventListener("click",_),document.addEventListener("basecoat:popover",$),e._destroy=()=>{t.input.removeEventListener("focus",i),t.input.removeEventListener("click",n),t.input.removeEventListener("input",l),t.input.removeEventListener("keydown",p),t.trigger?.removeEventListener("click",s),t.clearButton?.removeEventListener("click",c),t.listbox.removeEventListener("mousemove",m),t.listbox.removeEventListener("click",C),document.removeEventListener("click",_),document.removeEventListener("basecoat:popover",$),t.chips?.querySelectorAll(".combobox-chip").forEach(a=>a.remove()),f.delete(e),delete e.refresh,delete e.close,delete e.select,delete e.selectByValue,delete e.setValue,delete e.clear,delete e.deselect,delete e.toggle,delete e.selectAll,delete e.selectNone},t.popover.setAttribute("aria-hidden","true"),t.input.setAttribute("aria-expanded","false"),t.trigger?.setAttribute("aria-expanded","false"),e.clear=()=>V(e),Object.defineProperty(e,"value",{configurable:!0,get:()=>S(t),set:a=>e.setValue(a)}),Object.defineProperty(e,"selected",{configurable:!0,get:()=>M(t)}),e.dataset.comboboxInitialized="true",e.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.basecoat&&window.basecoat.register("combobox",{selector:".combobox:not([data-combobox-initialized])",init:W,refresh:N})})(),document.readyState!=="loading"&&(window.basecoat.initAll(),window.basecoat.start());
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ window.basecoat||(()=>{const d={};let l=null;const y=(t,n,s)=>{const c=typeof n=="object"?n:{selector:n,init:s};d[t]={selector:c.selector,init:c.init,refresh:c.refresh}},b=(t,n)=>{const s=d[n];if(s)try{s.init(t),t.hasAttribute(`data-${n}-initialized`)&&(t.dataset.basecoatComponent=n)}catch(c){if(console.error(`Failed to initialize ${n}:`,c),typeof t._destroy=="function")try{t._destroy()}catch(a){console.error(`Failed to clean up ${n} after initialization error:`,a)}delete t._destroy,t.removeAttribute(`data-${n}-initialized`),delete t.dataset.basecoatComponent}},p=t=>{if(!t||t.nodeType!==Node.ELEMENT_NODE)return;const n=t.dataset?.basecoatComponent;if(typeof t._destroy=="function")try{t._destroy()}catch(s){console.error("Failed to destroy Basecoat component:",s)}delete t._destroy,n&&t.removeAttribute(`data-${n}-initialized`),delete t.dataset.basecoatComponent},u=t=>{t.nodeType===Node.ELEMENT_NODE&&(t.isConnected||(t.dataset?.basecoatComponent&&p(t),t.querySelectorAll("[data-basecoat-component]").forEach(p)))},g=t=>Array.from(new Set(t)),v=(t,n,s=!1)=>{const c=Array.from(document.querySelectorAll(n));return s&&c.push(...document.querySelectorAll(`[data-basecoat-component="${t}"]`)),g(c)},I=(t={})=>{const n=t.force===!0;Object.entries(d).forEach(([s,{selector:c}])=>{v(s,c,n).forEach(a=>{const w=a.dataset?.basecoatComponent===s;n&&p(a),(w||a.matches(c))&&b(a,s)})})},E=t=>{t.nodeType===Node.ELEMENT_NODE&&Object.entries(d).forEach(([n,{selector:s}])=>{t.matches(s)&&b(t,n),t.querySelectorAll(s).forEach(c=>b(c,n))})},e=t=>{if(!t)return;if(typeof t.refresh=="function"){t.refresh();return}const n=t.dataset?.basecoatComponent,s=n?d[n]:null;s?.refresh&&s.refresh(t)},i=()=>{l||(l=new MutationObserver(t=>{t.forEach(n=>{n.addedNodes.forEach(E),n.removedNodes.forEach(u)})}),l.observe(document.body,{childList:!0,subtree:!0}))},o=()=>{l&&(l.disconnect(),l=null)},r=(t,n={})=>{const s=d[t];if(!s){console.warn(`Component '${t}' not found in registry`);return}const c=n.force===!0;v(t,s.selector,c).forEach(a=>{const w=a.dataset?.basecoatComponent===t;c&&p(a),(w||a.matches(s.selector))&&b(a,t)})},m=(t={})=>{I(t)},h=t=>{const n=t==="dark";document.documentElement.classList.toggle("dark",n);try{localStorage.setItem("themeMode",n?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:n?"dark":"light"}}))},f=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:y,init:r,initAll:m,refresh:e,start:i,stop:o,theme:{get:f,set:h,toggle:()=>h(f()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{I(),i()})})(),(()=>{const d=new WeakMap,l=e=>e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true"||e.getAttribute("data-disabled")==="true",y=e=>({input:e.querySelector("header input"),menu:e.querySelector('[role="menu"]')}),b=e=>{const i=Array.from(e.querySelectorAll('[role="menuitem"]'));return{allItems:i,items:i.filter(o=>!l(o))}},p=(e,i)=>{const o=i.getBoundingClientRect(),r=e.menu.getBoundingClientRect();o.top<r.top?e.menu.scrollTop-=r.top-o.top:o.bottom>r.bottom&&(e.menu.scrollTop+=o.bottom-r.bottom)},u=(e,i)=>{if(e.activeIndex>-1&&e.items[e.activeIndex]&&e.items[e.activeIndex].classList.remove("active"),e.activeIndex=i,e.activeIndex>-1){const o=e.items[e.activeIndex];o.classList.add("active"),o.id?e.input.setAttribute("aria-activedescendant",o.id):e.input.removeAttribute("aria-activedescendant")}else e.input.removeAttribute("aria-activedescendant")},g=e=>{if(e.manualFilter){u(e,-1),e.visibleItems=e.items.filter(o=>o.getAttribute("aria-hidden")!=="true"),e.visibleItems.length>0&&u(e,e.items.indexOf(e.visibleItems[0]));return}const i=e.input.value.trim().toLowerCase();u(e,-1),e.visibleItems=[],e.allItems.forEach(o=>{if(o.hasAttribute("data-force")){o.setAttribute("aria-hidden","false"),e.items.includes(o)&&e.visibleItems.push(o);return}const r=(o.dataset.filter||o.textContent).trim().toLowerCase(),h=(o.dataset.keywords||"").toLowerCase().split(/[\s,]+/).filter(Boolean).some(t=>t.includes(i)),f=r.includes(i)||h;o.setAttribute("aria-hidden",String(!f)),f&&e.items.includes(o)&&e.visibleItems.push(o)}),e.visibleItems.length>0&&(u(e,e.items.indexOf(e.visibleItems[0])),p(e,e.visibleItems[0]))},v=e=>{const i=d.get(e);if(!i)return;const o=y(e);if(!o.input||!o.menu){const r=[];o.input||r.push("input"),o.menu||r.push("menu"),console.error(`Command component refresh failed. Missing element(s): ${r.join(", ")}`,e);return}Object.assign(i,o,b(o.menu)),i.manualFilter=e.dataset.filter==="manual",g(i)},I=(e,i)=>{if(!["ArrowDown","ArrowUp","Enter","Home","End"].includes(e.key))return;if(e.key==="Enter"){e.preventDefault(),i.activeIndex>-1&&i.items[i.activeIndex]?.click();return}if(i.visibleItems.length===0)return;e.preventDefault();const o=i.activeIndex>-1?i.visibleItems.indexOf(i.items[i.activeIndex]):-1;let r=o;if(e.key==="ArrowDown"&&o<i.visibleItems.length-1&&(r=o+1),e.key==="ArrowUp"&&(r=o>0?o-1:0),e.key==="Home"&&(r=0),e.key==="End"&&(r=i.visibleItems.length-1),r!==o){const m=i.visibleItems[r];u(i,i.items.indexOf(m)),p(i,m)}},E=e=>{if(e.dataset.commandInitialized)return;const i={activeIndex:-1,allItems:[],items:[],visibleItems:[],manualFilter:!1};d.set(e,i),e.refresh=()=>v(e);const o=y(e);if(!o.input||!o.menu){const t=[];o.input||t.push("input"),o.menu||t.push("menu"),console.error(`Command component initialization failed. Missing element(s): ${t.join(", ")}`,e),d.delete(e),delete e.refresh;return}Object.assign(i,o);const r=()=>g(i),m=t=>I(t,i),h=t=>{const n=t.target.closest('[role="menuitem"]');if(n&&i.visibleItems.includes(n)){const s=i.items.indexOf(n);s!==i.activeIndex&&u(i,s)}},f=t=>{const n=t.target.closest('[role="menuitem"]');if(n&&i.visibleItems.includes(n)){const s=e.closest("dialog.command-dialog");s&&!n.hasAttribute("data-keep-command-open")&&s.close()}};i.input.addEventListener("input",r),i.input.addEventListener("keydown",m),i.menu.addEventListener("mousemove",h),i.menu.addEventListener("click",f),e._destroy=()=>{i.input.removeEventListener("input",r),i.input.removeEventListener("keydown",m),i.menu.removeEventListener("mousemove",h),i.menu.removeEventListener("click",f),d.delete(e),delete e.refresh},v(e),e.dataset.commandInitialized="true",e.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.basecoat&&window.basecoat.register("command",{selector:".command:not([data-command-initialized])",init:E,refresh:v})})(),document.readyState!=="loading"&&(window.basecoat.initAll(),window.basecoat.start());
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ (()=>{var o=class extends HTMLElement{connectedCallback(){if(this._init||(this._init=!0,this.menu=this.querySelector("[data-popover][popover]"),!this.menu))return;let i=!1;this.addEventListener("pointerdown",t=>{t.button===2&&(i=!0)}),this.addEventListener("contextmenu",t=>{if(this.menu.contains(t.target))return;t.preventDefault();const{clientX:e,clientY:n}=t;if(!i)return this.openAt(e,n);window.addEventListener("pointerup",()=>{i=!1,setTimeout(()=>this.openAt(e,n))},{once:!0,capture:!0})}),this.addEventListener("keydown",t=>{if(!this.menu.contains(t.target)&&(t.key==="ContextMenu"||t.shiftKey&&t.key==="F10")){t.preventDefault();const e=t.target.getBoundingClientRect();this.openAt(e.left,e.bottom)}})}openAt(i,t){const e=this.menu;e.matches(":popover-open")&&e.hidePopover(),Object.assign(e.style,{position:"fixed",inset:"auto",margin:"0",positionArea:"none",positionTryFallbacks:"none",left:`${i}px`,top:`${t}px`}),e.showPopover();const n=e.getBoundingClientRect();n.right>innerWidth-4&&(e.style.left=`${Math.max(4,i-n.width)}px`),n.bottom>innerHeight-4&&(e.style.top=`${Math.max(4,t-n.height)}px`)}};customElements.get("auvyx-context-menu")||customElements.define("auvyx-context-menu",o)})();
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ (()=>{if(window.__basecoatCopy)return;window.__basecoatCopy=!0;const r=e=>{if(e.hasAttribute("data-copy-text"))return e.getAttribute("data-copy-text");const t=e.getAttribute("data-copy"),a=t?document.querySelector(t):e.closest(".code-block")?.querySelector(":scope > pre");return a?a.textContent:null},i=e=>{const t=e.getAttribute("data-copy"),a=t?document.querySelector(t):e.closest(".code-block")?.querySelector(":scope > pre");if(!a)return;const c=document.createRange();c.selectNodeContents(a);const o=window.getSelection();o.removeAllRanges(),o.addRange(c)};document.addEventListener("click",async e=>{const t=e.target.closest("[data-copy], [data-copy-text]");if(!t||t.disabled)return;const a=r(t);if(a==null)return;try{await navigator.clipboard.writeText(a.replace(/\n$/,""))}catch{i(t);return}const c=t.getAttribute("aria-label");t.hasAttribute("data-copied")||(t.dataset.copyLabel=c??""),t.setAttribute("data-copied",""),t.setAttribute("aria-label",t.getAttribute("data-copied-label")||"Copied"),clearTimeout(t._copyTimer),t._copyTimer=setTimeout(()=>{t.removeAttribute("data-copied"),t.dataset.copyLabel&&t.setAttribute("aria-label",t.dataset.copyLabel)},2e3)})})();
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ (()=>{var c=class extends HTMLElement{connectedCallback(){this._init||(this._init=!0,this.table=this.querySelector("table"),this.tbody=this.table?.tBodies[0],this.tbody&&(this.rows=[...this.tbody.rows].filter(t=>!t.hasAttribute("data-empty")),this.empty=this.tbody.querySelector("tr[data-empty]"),this.pageSize=parseInt(this.dataset.pageSize,10)||0,this.page=0,this.query="",this.sort={col:-1,dir:"ascending"},this.collator=new Intl.Collator(this.closest("[lang]")?.lang||void 0,{numeric:!0,sensitivity:"base"}),this.headers=[...this.table.tHead.rows[0].cells],this.headers.forEach((t,e)=>{(t.hasAttribute("aria-sort")?t.querySelector(":scope > button"):null)?.addEventListener("click",()=>this.toggleSort(e))}),this.filterInput=this.querySelector("input[data-filter]"),this.filterInput?.addEventListener("input",()=>{this.query=this.filterInput.value.trim().toLocaleLowerCase(),this.page=0,this.render()}),this.selectAll=this.querySelector("input[data-select-all]"),this.selectAll?.addEventListener("change",()=>{this.visible().forEach(t=>this.setSelected(t,this.selectAll.checked)),this.updateSelection()}),this.tbody.addEventListener("change",t=>{t.target.matches("input[data-select]")&&(this.setSelected(t.target.closest("tr"),t.target.checked),this.updateSelection())}),this.querySelectorAll("input[data-column]").forEach(t=>{t.addEventListener("change",()=>this.setColumn(parseInt(t.dataset.column,10),t.checked)),t.checked||this.setColumn(parseInt(t.dataset.column,10),!1)}),this.querySelector('[data-page="prev"]')?.addEventListener("click",()=>{this.page--,this.render()}),this.querySelector('[data-page="next"]')?.addEventListener("click",()=>{this.page++,this.render()}),this.rows.forEach(t=>{t.querySelector("input[data-select]")?.checked&&t.setAttribute("aria-selected","true")}),this.render()))}cellValue(t,e){const s=t.cells[e];return s?s.dataset.value??s.textContent.trim():""}matches(t){if(!this.query)return!0;const e=this.filterInput?.dataset.filter,s=e?e.split(",").map(Number):null;return[...t.cells].some((i,a)=>(!s||s.includes(a))&&i.textContent.toLocaleLowerCase().includes(this.query))}toggleSort(t){this.sort=this.sort.col===t?{col:t,dir:this.sort.dir==="ascending"?"descending":"ascending"}:{col:t,dir:"ascending"},this.headers.forEach((e,s)=>e.hasAttribute("aria-sort")&&e.setAttribute("aria-sort",s===t?this.sort.dir:"none")),this.render()}ordered(){const t=this.rows.filter(l=>this.matches(l)),{col:e,dir:s}=this.sort;if(e<0)return t;const i=this.headers[e]?.dataset.type==="number",a=s==="descending"?-1:1;return t.sort((l,h)=>{const n=this.cellValue(l,e),r=this.cellValue(h,e);return a*(i?(parseFloat(n)||0)-(parseFloat(r)||0):this.collator.compare(n,r))})}visible(){return this.rows.filter(t=>!t.hidden)}setSelected(t,e){const s=t.querySelector("input[data-select]");s&&(s.checked=e),e?t.setAttribute("aria-selected","true"):t.removeAttribute("aria-selected")}setColumn(t,e){[this.table.tHead,...this.table.tBodies,this.table.tFoot].filter(Boolean).forEach(s=>{[...s.rows].forEach(i=>{i.cells[t]&&!i.hasAttribute("data-empty")&&(i.cells[t].hidden=!e)})})}updateSelection(){const t=this.visible(),e=this.rows.filter(a=>a.getAttribute("aria-selected")==="true").length,s=t.filter(a=>a.getAttribute("aria-selected")==="true").length;this.selectAll&&(this.selectAll.checked=t.length>0&&s===t.length,this.selectAll.indeterminate=s>0&&s<t.length);const i=this.querySelector("[data-selected-count]");if(i){const a=i.dataset.template||"{selected} of {total} row(s) selected.";i.textContent=a.replace("{selected}",e).replace("{total}",this.rows.length)}this.dispatchEvent(new CustomEvent("selectionchange",{detail:{rows:this.rows.filter(a=>a.getAttribute("aria-selected")==="true")}}))}render(){const t=this.ordered(),e=this.pageSize?Math.max(1,Math.ceil(t.length/this.pageSize)):1;this.page=Math.min(Math.max(0,this.page),e-1);const s=this.pageSize?this.page*this.pageSize:0,i=this.pageSize?s+this.pageSize:t.length,a=new Set(t.slice(s,i));t.forEach(r=>this.tbody.insertBefore(r,this.empty)),this.rows.forEach(r=>{r.hidden=!a.has(r)}),this.empty&&(this.empty.hidden=t.length>0);const l=this.querySelector("[data-page-status]");if(l){const r=l.dataset.template||"Page {page} of {pages}";l.textContent=r.replace("{page}",this.page+1).replace("{pages}",e)}const h=this.querySelector('[data-page="prev"]'),n=this.querySelector('[data-page="next"]');h&&(h.disabled=this.page<=0),n&&(n.disabled=this.page>=e-1),this.updateSelection()}};customElements.get("auvyx-data-table")||customElements.define("auvyx-data-table",c)})();
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ (()=>{var h='<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2v4"/><path d="M16 2v4"/><rect width="18" height="18" x="3" y="4" rx="2"/><path d="M3 10h18"/></svg>',u=["months","caption","week-numbers","disabled-days","disabled-dates","booked","min-days","max-days"],r=e=>e?new Date(`${e}T00:00:00`):null,o=class extends HTMLElement{connectedCallback(){if(this._init||(this.inputs=[...this.querySelectorAll(':scope > input[type="date"]')],!this.inputs.length))return;this._init=!0,this.range=this.getAttribute("mode")==="range"&&this.inputs.length>=2;const e=this.inputs[0],a=e.id||`dp-${Math.random().toString(36).slice(2,8)}`,s=this.closest("[lang]")?.getAttribute("lang")||navigator.language;this.format=new Intl.DateTimeFormat(s,{dateStyle:"medium"}),this.button=document.createElement("button"),this.button.type="button",this.button.className="btn",this.button.dataset.variant=this.dataset.variant||"outline",this.button.setAttribute("popovertarget",`${a}-popover`),this.button.setAttribute("aria-haspopup","dialog");const i=e.labels?.[0];i&&(i.id||=`${a}-label`,this.button.setAttribute("aria-labelledby",`${i.id} ${a}-value`),i.htmlFor="",i.addEventListener("click",()=>this.button.focus())),this.button.innerHTML=`${h}<span id="${a}-value"></span>`,this.panel=document.createElement("div"),this.panel.id=`${a}-popover`,this.panel.setAttribute("data-popover",""),this.panel.setAttribute("popover",""),this.panel.setAttribute("role","dialog"),this.panel.setAttribute("aria-label",this.dataset.dialogLabel||(this.range?"Choose dates":"Choose date")),this.panel.dataset.side=this.dataset.side||"bottom",this.panel.dataset.align=this.dataset.align||"start",this.calendar=document.createElement("auvyx-calendar"),this.calendar.className="calendar",this.range&&this.calendar.setAttribute("mode","range");for(const t of["min","max"])e[t]&&this.calendar.setAttribute(t,e[t]);for(const t of u)this.hasAttribute(t)&&this.calendar.setAttribute(t,this.getAttribute(t));this.dataset.weekStart&&(this.calendar.dataset.weekStart=this.dataset.weekStart);const l=this.range?this.inputs[0].value?`${this.inputs[0].value}/${this.inputs[1].value}`:"":e.value;l&&this.calendar.setAttribute("value",l),this.panel.append(this.calendar);for(const t of this.inputs)t.hidden=!0,t.tabIndex=-1,t.addEventListener("invalid",n=>{n.preventDefault(),this.button.setAttribute("aria-invalid","true"),this.button.focus()});this.prepend(this.button),this.append(this.panel),this.update(),this.calendar.addEventListener("change",t=>{t.stopPropagation();const[n,d]=t.detail.value.split("/");this.setInput(this.inputs[0],n||""),this.range&&this.setInput(this.inputs[1],d||""),this.button.removeAttribute("aria-invalid"),this.update(),t.detail.complete&&(this.panel.hidePopover(),this.button.focus()),this.dispatchEvent(new CustomEvent("change",{bubbles:!0,detail:{value:t.detail.value,complete:t.detail.complete}}))}),this.panel.addEventListener("toggle",t=>{t.newState==="open"&&requestAnimationFrame(()=>this.calendar.focusDate?.())})}setInput(e,a){e.value!==a&&(e.value=a,e.dispatchEvent(new Event("input",{bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0})))}get value(){return this.range?`${this.inputs[0].value}/${this.inputs[1].value}`:this.inputs[0].value}update(){const e=this.button.querySelector("span"),a=r(this.inputs[0].value),s=this.range?r(this.inputs[1].value):null;let i;this.range&&a&&s?i=this.format.formatRange(a,s):a?i=this.format.format(a)+(this.range?" \u2013":""):i=this.dataset.placeholder||this.inputs[0].placeholder||(this.range?"Pick a date range":"Pick a date"),e.textContent=i,a?this.button.dataset.value=this.value:delete this.button.dataset.value}};customElements.get("auvyx-date-picker")||customElements.define("auvyx-date-picker",o)})();
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ window.basecoat||(()=>{const c={};let l=null;const y=(t,o,n)=>{const i=typeof o=="object"?o:{selector:o,init:n};c[t]={selector:i.selector,init:i.init,refresh:i.refresh}},e=(t,o)=>{const n=c[o];if(n)try{n.init(t),t.hasAttribute(`data-${o}-initialized`)&&(t.dataset.basecoatComponent=o)}catch(i){if(console.error(`Failed to initialize ${o}:`,i),typeof t._destroy=="function")try{t._destroy()}catch(a){console.error(`Failed to clean up ${o} after initialization error:`,a)}delete t._destroy,t.removeAttribute(`data-${o}-initialized`),delete t.dataset.basecoatComponent}},s=t=>{if(!t||t.nodeType!==Node.ELEMENT_NODE)return;const o=t.dataset?.basecoatComponent;if(typeof t._destroy=="function")try{t._destroy()}catch(n){console.error("Failed to destroy Basecoat component:",n)}delete t._destroy,o&&t.removeAttribute(`data-${o}-initialized`),delete t.dataset.basecoatComponent},f=t=>{t.nodeType===Node.ELEMENT_NODE&&(t.isConnected||(t.dataset?.basecoatComponent&&s(t),t.querySelectorAll("[data-basecoat-component]").forEach(s)))},d=t=>Array.from(new Set(t)),u=(t,o,n=!1)=>{const i=Array.from(document.querySelectorAll(o));return n&&i.push(...document.querySelectorAll(`[data-basecoat-component="${t}"]`)),d(i)},p=(t={})=>{const o=t.force===!0;Object.entries(c).forEach(([n,{selector:i}])=>{u(n,i,o).forEach(a=>{const C=a.dataset?.basecoatComponent===n;o&&s(a),(C||a.matches(i))&&e(a,n)})})},h=t=>{t.nodeType===Node.ELEMENT_NODE&&Object.entries(c).forEach(([o,{selector:n}])=>{t.matches(n)&&e(t,o),t.querySelectorAll(n).forEach(i=>e(i,o))})},m=t=>{if(!t)return;if(typeof t.refresh=="function"){t.refresh();return}const o=t.dataset?.basecoatComponent,n=o?c[o]:null;n?.refresh&&n.refresh(t)},r=()=>{l||(l=new MutationObserver(t=>{t.forEach(o=>{o.addedNodes.forEach(h),o.removedNodes.forEach(f)})}),l.observe(document.body,{childList:!0,subtree:!0}))},b=()=>{l&&(l.disconnect(),l=null)},E=(t,o={})=>{const n=c[t];if(!n){console.warn(`Component '${t}' not found in registry`);return}const i=o.force===!0;u(t,n.selector,i).forEach(a=>{const C=a.dataset?.basecoatComponent===t;i&&s(a),(C||a.matches(n.selector))&&e(a,t)})},w=(t={})=>{p(t)},g=t=>{const o=t==="dark";document.documentElement.classList.toggle("dark",o);try{localStorage.setItem("themeMode",o?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:o?"dark":"light"}}))},v=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:y,init:E,initAll:w,refresh:m,start:r,stop:b,theme:{get:v,set:g,toggle:()=>g(v()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{p(),r()})})(),(()=>{const c=e=>{if(!e)return 0;const s=e.trim();return s.endsWith("ms")?parseFloat(s)||0:s.endsWith("s")?(parseFloat(s)||0)*1e3:parseFloat(s)||0},l=e=>{if(!e)return 0;const s=getComputedStyle(e),f=s.transitionDuration.split(",").map(c),d=s.transitionDelay.split(",").map(c);return Math.max(0,...f.map((u,p)=>u+(d[p]||d[0]||0)))},y=e=>{if(e.dataset.drawerInitialized)return;const s=e.close.bind(e);let f=!1,d=null;const u=r=>{window.clearTimeout(d),d=null,e.removeAttribute("data-closing"),s(r)};e.close=(r="")=>{if(!e.open||e.dataset.closing)return;const b=e.firstElementChild,E=l(b);if(E===0||window.matchMedia("(prefers-reduced-motion: reduce)").matches){u(r);return}e.dataset.closing="true",d=window.setTimeout(()=>u(r),E+50)};const p=r=>{r.preventDefault(),e.close()},h=r=>{f=r.target===e},m=r=>{f&&r.target===e&&e.close(),f=!1};e.addEventListener("cancel",p),e.addEventListener("pointerdown",h),e.addEventListener("pointerup",m),e._destroy=()=>{window.clearTimeout(d),e.removeEventListener("cancel",p),e.removeEventListener("pointerdown",h),e.removeEventListener("pointerup",m),e.close=s,delete e._destroy},e.dataset.drawerInitialized="true",e.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.basecoat&&window.basecoat.register("drawer",".drawer:not([data-drawer-initialized])",y)})(),document.readyState!=="loading"&&(window.basecoat.initAll(),window.basecoat.start());
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ window.basecoat||(()=>{const c={};let d=null;const y=(n,t,i)=>{const o=typeof t=="object"?t:{selector:t,init:i};c[n]={selector:o.selector,init:o.init,refresh:o.refresh}},f=(n,t)=>{const i=c[t];if(i)try{i.init(n),n.hasAttribute(`data-${t}-initialized`)&&(n.dataset.basecoatComponent=t)}catch(o){if(console.error(`Failed to initialize ${t}:`,o),typeof n._destroy=="function")try{n._destroy()}catch(a){console.error(`Failed to clean up ${t} after initialization error:`,a)}delete n._destroy,n.removeAttribute(`data-${t}-initialized`),delete n.dataset.basecoatComponent}},u=n=>{if(!n||n.nodeType!==Node.ELEMENT_NODE)return;const t=n.dataset?.basecoatComponent;if(typeof n._destroy=="function")try{n._destroy()}catch(i){console.error("Failed to destroy Basecoat component:",i)}delete n._destroy,t&&n.removeAttribute(`data-${t}-initialized`),delete n.dataset.basecoatComponent},p=n=>{n.nodeType===Node.ELEMENT_NODE&&(n.isConnected||(n.dataset?.basecoatComponent&&u(n),n.querySelectorAll("[data-basecoat-component]").forEach(u)))},A=n=>Array.from(new Set(n)),v=(n,t,i=!1)=>{const o=Array.from(document.querySelectorAll(t));return i&&o.push(...document.querySelectorAll(`[data-basecoat-component="${n}"]`)),A(o)},h=(n={})=>{const t=n.force===!0;Object.entries(c).forEach(([i,{selector:o}])=>{v(i,o,t).forEach(a=>{const w=a.dataset?.basecoatComponent===i;t&&u(a),(w||a.matches(o))&&f(a,i)})})},e=n=>{n.nodeType===Node.ELEMENT_NODE&&Object.entries(c).forEach(([t,{selector:i}])=>{n.matches(i)&&f(n,t),n.querySelectorAll(i).forEach(o=>f(o,t))})},r=n=>{if(!n)return;if(typeof n.refresh=="function"){n.refresh();return}const t=n.dataset?.basecoatComponent,i=t?c[t]:null;i?.refresh&&i.refresh(n)},s=()=>{d||(d=new MutationObserver(n=>{n.forEach(t=>{t.addedNodes.forEach(e),t.removedNodes.forEach(p)})}),d.observe(document.body,{childList:!0,subtree:!0}))},l=()=>{d&&(d.disconnect(),d=null)},b=(n,t={})=>{const i=c[n];if(!i){console.warn(`Component '${n}' not found in registry`);return}const o=t.force===!0;v(n,i.selector,o).forEach(a=>{const w=a.dataset?.basecoatComponent===n;o&&u(a),(w||a.matches(i.selector))&&f(a,n)})},E=(n={})=>{h(n)},m=n=>{const t=n==="dark";document.documentElement.classList.toggle("dark",t);try{localStorage.setItem("themeMode",t?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:t?"dark":"light"}}))},g=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:y,init:b,initAll:E,refresh:r,start:s,stop:l,theme:{get:g,set:m,toggle:()=>m(g()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{h(),s()})})(),(()=>{const c=new WeakMap,d=e=>e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true",y=e=>{const r=e.querySelector(":scope > button"),s=e.querySelector(":scope > [data-popover]"),l=s?s.querySelector('[role="menu"]'):null;return{trigger:r,popover:s,menu:l}},f=e=>Array.from(e.querySelectorAll('[role^="menuitem"]')).filter(r=>!d(r)),u=(e,r)=>{if(e.activeIndex>-1&&e.items[e.activeIndex]&&e.items[e.activeIndex].classList.remove("active"),e.activeIndex=r,e.activeIndex>-1&&e.items[e.activeIndex]){const s=e.items[e.activeIndex];s.classList.add("active"),s.id&&e.trigger.setAttribute("aria-activedescendant",s.id)}else e.trigger.removeAttribute("aria-activedescendant")},p=e=>{const r=c.get(e);if(!r)return;const s=y(e);if(!s.trigger||!s.popover||!s.menu){const l=[];s.trigger||l.push("trigger"),s.popover||l.push("popover"),s.menu||l.push("menu"),console.error(`Dropdown menu refresh failed. Missing element(s): ${l.join(", ")}`,e);return}Object.assign(r,s),r.items=f(r.menu),r.activeIndex>-1&&!r.items[r.activeIndex]&&u(r,-1)},A=(e,r=!0)=>{e.trigger.getAttribute("aria-expanded")!=="false"&&(e.trigger.setAttribute("aria-expanded","false"),e.trigger.removeAttribute("aria-activedescendant"),e.popover.setAttribute("aria-hidden","true"),r&&e.trigger.focus(),u(e,-1))},v=(e,r,s=!1)=>{document.dispatchEvent(new CustomEvent("basecoat:popover",{detail:{source:e}})),e.refresh(),r.trigger.setAttribute("aria-expanded","true"),r.popover.setAttribute("aria-hidden","false"),r.items.length>0&&s&&u(r,s==="last"?r.items.length-1:0)},h=e=>{if(e.dataset.dropdownMenuInitialized)return;const r={activeIndex:-1,items:[]};if(c.set(e,r),e.refresh=()=>p(e),p(e),!r.trigger||!r.popover||!r.menu){c.delete(e),delete e.refresh;return}e.open=(t=!1)=>v(e,r,t),e.close=(t=!0)=>A(r,t),e.toggle=()=>r.trigger.getAttribute("aria-expanded")==="true"?e.close():e.open(!1);const s=e.toggle,l=t=>{const i=r.trigger.getAttribute("aria-expanded")==="true";if(t.key==="Escape"){i&&e.close();return}if(!i){["Enter"," "].includes(t.key)?(t.preventDefault(),e.open(!1)):t.key==="ArrowDown"?(t.preventDefault(),e.open("first")):t.key==="ArrowUp"&&(t.preventDefault(),e.open("last"));return}if(r.items.length===0)return;let o=r.activeIndex;if(t.key==="ArrowDown")t.preventDefault(),o=r.activeIndex===-1?0:Math.min(r.activeIndex+1,r.items.length-1);else if(t.key==="ArrowUp")t.preventDefault(),o=r.activeIndex===-1?r.items.length-1:Math.max(r.activeIndex-1,0);else if(t.key==="Home")t.preventDefault(),o=0;else if(t.key==="End")t.preventDefault(),o=r.items.length-1;else if(["Enter"," "].includes(t.key)){t.preventDefault(),r.items[r.activeIndex]?.click(),e.close();return}else return;o!==r.activeIndex&&u(r,o)},b=t=>{const i=t.target.closest('[role^="menuitem"]');if(i&&!d(i)&&r.items.includes(i)){const o=r.items.indexOf(i);o!==r.activeIndex&&u(r,o)}},E=()=>u(r,-1),m=t=>{const i=t.target.closest('[role^="menuitem"]');!i||d(i)||(i.getAttribute("role")==="menuitemcheckbox"?i.setAttribute("aria-checked",i.getAttribute("aria-checked")!=="true"):i.getAttribute("role")==="menuitemradio"&&i.closest('[role="group"], [role="menu"]')?.querySelectorAll('[role="menuitemradio"]').forEach(a=>{d(a)||a.setAttribute("aria-checked",a===i?"true":"false")}),e.close())},g=t=>{e.contains(t.target)||e.close(!1)},n=t=>{e.contains(t.detail.source)||e.close(!1)};r.trigger.addEventListener("click",s),e.addEventListener("keydown",l),r.menu.addEventListener("mousemove",b),r.menu.addEventListener("mouseleave",E),r.menu.addEventListener("click",m),document.addEventListener("click",g),document.addEventListener("basecoat:popover",n),e._destroy=()=>{r.trigger.removeEventListener("click",s),e.removeEventListener("keydown",l),r.menu.removeEventListener("mousemove",b),r.menu.removeEventListener("mouseleave",E),r.menu.removeEventListener("click",m),document.removeEventListener("click",g),document.removeEventListener("basecoat:popover",n),c.delete(e),delete e.refresh,delete e.open,delete e.close,delete e.toggle},r.trigger.setAttribute("aria-expanded","false"),r.popover.setAttribute("aria-hidden","true"),e.dataset.dropdownMenuInitialized="true",e.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.basecoat&&window.basecoat.register("dropdown-menu",{selector:".dropdown-menu:not([data-dropdown-menu-initialized]):not(:has(> [data-popover][popover]))",init:h,refresh:p})})(),document.readyState!=="loading"&&(window.basecoat.initAll(),window.basecoat.start());
@@ -0,0 +1,114 @@
1
+ {
2
+ "accordion": {
3
+ "file": "js/accordion.min.js",
4
+ "kind": "required",
5
+ "detect": "[data-accordion-initialized]",
6
+ "gzip": 1568,
7
+ "note": "Only for the upstream markup; <details name> accordions need no JS."
8
+ },
9
+ "combobox": {
10
+ "file": "js/combobox.min.js",
11
+ "kind": "required",
12
+ "detect": "[data-combobox-initialized]",
13
+ "gzip": 4915
14
+ },
15
+ "command": {
16
+ "file": "js/command.min.js",
17
+ "kind": "required",
18
+ "detect": "[data-command-initialized]",
19
+ "gzip": 2352
20
+ },
21
+ "drawer": {
22
+ "file": "js/drawer.min.js",
23
+ "kind": "required",
24
+ "detect": "[data-drawer-initialized]",
25
+ "gzip": 1645
26
+ },
27
+ "dropdown-menu": {
28
+ "file": "js/dropdown-menu.min.js",
29
+ "kind": "required",
30
+ "detect": "[data-dropdown-menu-initialized]",
31
+ "gzip": 2388,
32
+ "note": "Only for the upstream markup; the native popover variant needs no JS."
33
+ },
34
+ "popover": {
35
+ "file": "js/popover.min.js",
36
+ "kind": "required",
37
+ "detect": "[data-popover-initialized]",
38
+ "gzip": 1591,
39
+ "note": "Only for the upstream markup; the native popover variant needs no JS."
40
+ },
41
+ "select": {
42
+ "file": "js/select.min.js",
43
+ "kind": "required",
44
+ "detect": "[data-select-initialized]",
45
+ "gzip": 3790
46
+ },
47
+ "sidebar": {
48
+ "file": "js/sidebar.min.js",
49
+ "kind": "required",
50
+ "detect": "[data-sidebar-initialized]",
51
+ "gzip": 1917
52
+ },
53
+ "slider": {
54
+ "file": "js/slider.min.js",
55
+ "kind": "required",
56
+ "detect": "[data-range-initialized]",
57
+ "gzip": 1352
58
+ },
59
+ "tabs": {
60
+ "file": "js/tabs.min.js",
61
+ "kind": "required",
62
+ "detect": "[data-tabs-initialized]",
63
+ "gzip": 1856
64
+ },
65
+ "toast": {
66
+ "file": "js/toast.min.js",
67
+ "kind": "required",
68
+ "detect": "[data-toaster-initialized], [data-toast-initialized], [onclick*=\"toast(\"], [hx-target=\"#toaster\"]",
69
+ "gzip": 2637
70
+ },
71
+ "copy": {
72
+ "file": "js/copy.min.js",
73
+ "kind": "required",
74
+ "detect": "[data-copy]",
75
+ "gzip": 551
76
+ },
77
+ "calendar": {
78
+ "file": "js/calendar.min.js",
79
+ "kind": "required",
80
+ "detect": "auvyx-calendar",
81
+ "gzip": 3918
82
+ },
83
+ "context-menu": {
84
+ "file": "js/context-menu.min.js",
85
+ "kind": "required",
86
+ "detect": "auvyx-context-menu",
87
+ "gzip": 678
88
+ },
89
+ "data-table": {
90
+ "file": "js/data-table.min.js",
91
+ "kind": "required",
92
+ "detect": "auvyx-data-table",
93
+ "gzip": 1652
94
+ },
95
+ "date-picker": {
96
+ "file": "js/date-picker.min.js",
97
+ "kind": "required",
98
+ "detect": "auvyx-date-picker",
99
+ "gzip": 1599
100
+ },
101
+ "resizable": {
102
+ "file": "js/resizable.min.js",
103
+ "kind": "required",
104
+ "detect": "auvyx-resizable",
105
+ "gzip": 1224
106
+ },
107
+ "menu": {
108
+ "file": "js/menu.min.js",
109
+ "kind": "enhance",
110
+ "detect": "[data-popover][popover]:has([role=\"menu\"]), .navigation-menu",
111
+ "gzip": 1549,
112
+ "note": "Adds arrow-key navigation and focus handling to native menus; they open and close without it."
113
+ }
114
+ }
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ (()=>{if(window.__auvyxMenu)return;window.__auvyxMenu=!0;const d='[role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"]',p="[data-popover][popover]",k=e=>!e.disabled&&e.getAttribute("aria-disabled")!=="true"&&!e.closest("[hidden]"),l=e=>[...e.querySelectorAll(d)].filter(k),c=e=>e.id?document.querySelector(`[popovertarget="${CSS.escape(e.id)}"]`):null,i=e=>{const t=e?.getAttribute("popovertarget");return t?document.getElementById(t):null},m=e=>e instanceof HTMLElement&&e.matches(p)&&e.querySelector('[role="menu"]'),f=e=>e?.closest(".menubar"),g=e=>[...e.querySelectorAll(":scope > .dropdown-menu > [popovertarget]")],h=e=>e?.focus({preventScroll:!0}),y=(e,t="first")=>{const r=i(e);r&&(r.dataset.focusOnOpen=t,r.matches(":popover-open")?h(t==="last"?l(r).at(-1):l(r)[0]):r.showPopover({source:e}))};document.addEventListener("toggle",e=>{const t=e.target;if(!(t instanceof HTMLElement)||!t.matches(p))return;const r=c(t);if(r&&r.hasAttribute("aria-haspopup")&&r.setAttribute("aria-expanded",String(e.newState==="open")),e.newState!=="open"||!m(t))return;const o=t.dataset.focusOnOpen||"first";delete t.dataset.focusOnOpen,o!=="none"&&requestAnimationFrame(()=>{const n=l(t);h(o==="last"?n.at(-1):n[0])})},!0),document.addEventListener("keydown",e=>{const t=e.target;if(!(t instanceof Element))return;const r=t.closest(p);if(r&&m(r)&&t.matches(d)){const o=l(r),n=o.indexOf(t),s={ArrowDown:n+1,ArrowUp:n-1,Home:0,End:o.length-1}[e.key];if(s!==void 0){e.preventDefault(),h(o[(s+o.length)%o.length]);return}if(e.key==="Tab"){r.hidePopover();return}if(e.key==="Escape"){e.preventDefault(),r.hidePopover(),c(r)?.focus({preventScroll:!0});return}const u=f(c(r));if(u&&(e.key==="ArrowRight"||e.key==="ArrowLeft")){e.preventDefault();const a=g(u),w=a.indexOf(c(r)),b=getComputedStyle(u).direction==="rtl",E=e.key==="ArrowRight"!==b?1:-1,S=a[(w+E+a.length)%a.length];r.hidePopover(),y(S);return}return}if(t.matches("[popovertarget]")){const o=i(t),n=f(t);if(o&&m(o)&&(e.key==="ArrowDown"||e.key==="ArrowUp")){e.preventDefault(),y(t,e.key==="ArrowUp"?"last":"first");return}if(n&&(e.key==="ArrowRight"||e.key==="ArrowLeft"||e.key==="Home"||e.key==="End")){e.preventDefault();const s=g(n),u=s.indexOf(t),a=getComputedStyle(n).direction==="rtl",w=e.key==="ArrowRight"!==a?1:-1;(e.key==="Home"?s[0]:e.key==="End"?s.at(-1):s[(u+w+s.length)%s.length]).focus()}}}),document.addEventListener("click",e=>{const t=e.target instanceof Element&&e.target.closest(d);if(!t||!k(t))return;const r=t.closest(p);if(!r)return;const o=t.getAttribute("role");o==="menuitemcheckbox"?t.setAttribute("aria-checked",String(t.getAttribute("aria-checked")!=="true")):o==="menuitemradio"&&(t.closest('[role="group"]')||r).querySelectorAll('[role="menuitemradio"]').forEach(s=>s.setAttribute("aria-checked",String(s===t))),!(t.hasAttribute("popovertarget")||t.hasAttribute("data-keep-open"))&&(o!=="menuitem"&&!t.hasAttribute("data-close")||(r.hidePopover(),c(r)?.focus({preventScroll:!0})))}),document.addEventListener("pointerover",e=>{const t=e.target instanceof Element&&e.target.closest(".menubar > .dropdown-menu > [popovertarget]");if(!t)return;const r=f(t),o=g(r).map(i).find(n=>n?.matches(":popover-open"));!o||o===i(t)||(o.hidePopover(),y(t,"none"))});const v=new WeakMap,A=e=>clearTimeout(v.get(e));document.addEventListener("pointerover",e=>{if(e.pointerType!=="mouse")return;const t=e.target instanceof Element&&e.target.closest(".navigation-menu > ul > li");if(!t)return;A(t);const r=t.querySelector(":scope > [popovertarget]"),o=i(r);!o||o.matches(":popover-open")||v.set(t,setTimeout(()=>{o.dataset.openedByHover=String(Date.now()),o.showPopover({source:r})},120))}),document.addEventListener("pointerout",e=>{if(e.pointerType!=="mouse")return;const t=e.target instanceof Element&&e.target.closest(".navigation-menu > ul > li");if(!t||t.contains(e.relatedTarget))return;A(t);const r=i(t.querySelector(":scope > [popovertarget]"));!r||!r.dataset.openedByHover||v.set(t,setTimeout(()=>{r.matches(":popover-open")&&!t.matches(":hover")&&r.hidePopover(),delete r.dataset.openedByHover},200))}),document.addEventListener("click",e=>{const t=e.target instanceof Element&&e.target.closest(".navigation-menu > ul > li > [popovertarget]"),r=i(t);if(r?.dataset.openedByHover){if(Date.now()-Number(r.dataset.openedByHover)<600&&r.matches(":popover-open")){e.preventDefault();return}delete r.dataset.openedByHover}},!0)})();
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ window.basecoat||(()=>{const u={};let r=null;const i=(t,e,o)=>{const n=typeof e=="object"?e:{selector:e,init:o};u[t]={selector:n.selector,init:n.init,refresh:n.refresh}},a=(t,e)=>{const o=u[e];if(o)try{o.init(t),t.hasAttribute(`data-${e}-initialized`)&&(t.dataset.basecoatComponent=e)}catch(n){if(console.error(`Failed to initialize ${e}:`,n),typeof t._destroy=="function")try{t._destroy()}catch(c){console.error(`Failed to clean up ${e} after initialization error:`,c)}delete t._destroy,t.removeAttribute(`data-${e}-initialized`),delete t.dataset.basecoatComponent}},d=t=>{if(!t||t.nodeType!==Node.ELEMENT_NODE)return;const e=t.dataset?.basecoatComponent;if(typeof t._destroy=="function")try{t._destroy()}catch(o){console.error("Failed to destroy Basecoat component:",o)}delete t._destroy,e&&t.removeAttribute(`data-${e}-initialized`),delete t.dataset.basecoatComponent},b=t=>{t.nodeType===Node.ELEMENT_NODE&&(t.isConnected||(t.dataset?.basecoatComponent&&d(t),t.querySelectorAll("[data-basecoat-component]").forEach(d)))},h=t=>Array.from(new Set(t)),f=(t,e,o=!1)=>{const n=Array.from(document.querySelectorAll(e));return o&&n.push(...document.querySelectorAll(`[data-basecoat-component="${t}"]`)),h(n)},l=(t={})=>{const e=t.force===!0;Object.entries(u).forEach(([o,{selector:n}])=>{f(o,n,e).forEach(c=>{const p=c.dataset?.basecoatComponent===o;e&&d(c),(p||c.matches(n))&&a(c,o)})})},E=t=>{t.nodeType===Node.ELEMENT_NODE&&Object.entries(u).forEach(([e,{selector:o}])=>{t.matches(o)&&a(t,e),t.querySelectorAll(o).forEach(n=>a(n,e))})},s=t=>{if(!t)return;if(typeof t.refresh=="function"){t.refresh();return}const e=t.dataset?.basecoatComponent,o=e?u[e]:null;o?.refresh&&o.refresh(t)},y=()=>{r||(r=new MutationObserver(t=>{t.forEach(e=>{e.addedNodes.forEach(E),e.removedNodes.forEach(b)})}),r.observe(document.body,{childList:!0,subtree:!0}))},w=()=>{r&&(r.disconnect(),r=null)},m=(t,e={})=>{const o=u[t];if(!o){console.warn(`Component '${t}' not found in registry`);return}const n=e.force===!0;f(t,o.selector,n).forEach(c=>{const p=c.dataset?.basecoatComponent===t;n&&d(c),(p||c.matches(o.selector))&&a(c,t)})},A=(t={})=>{l(t)},v=t=>{const e=t==="dark";document.documentElement.classList.toggle("dark",e);try{localStorage.setItem("themeMode",e?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:e?"dark":"light"}}))},g=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:i,init:m,initAll:A,refresh:s,start:y,stop:w,theme:{get:g,set:v,toggle:()=>v(g()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{l(),y()})})(),(()=>{const u=r=>{if(r.dataset.popoverInitialized)return;const i=r.querySelector(":scope > button"),a=r.querySelector(":scope > [data-popover]");if(!i||!a){const s=[];i||s.push("trigger"),a||s.push("content"),console.error(`Popover initialisation failed. Missing element(s): ${s.join(", ")}`,r);return}const d=(s=!0)=>{i.getAttribute("aria-expanded")!=="false"&&(i.setAttribute("aria-expanded","false"),a.setAttribute("aria-hidden","true"),s&&i.focus())},b=()=>{document.dispatchEvent(new CustomEvent("basecoat:popover",{detail:{source:r}}));const s=a.querySelector("[autofocus]");s&&a.addEventListener("transitionend",()=>{s.focus()},{once:!0}),i.setAttribute("aria-expanded","true"),a.setAttribute("aria-hidden","false")},h=()=>{i.getAttribute("aria-expanded")==="true"?d():b()},f=s=>{s.key==="Escape"&&d()},l=s=>{r.contains(s.target)||d()},E=s=>{r.contains(s.detail.source)||d(!1)};i.addEventListener("click",h),r.addEventListener("keydown",f),document.addEventListener("click",l),document.addEventListener("basecoat:popover",E),r._destroy=()=>{i.removeEventListener("click",h),r.removeEventListener("keydown",f),document.removeEventListener("click",l),document.removeEventListener("basecoat:popover",E)},r.dataset.popoverInitialized=!0,r.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.basecoat&&window.basecoat.register("popover",".popover:not([data-popover-initialized]):not(:has(> [data-popover][popover]))",u)})(),document.readyState!=="loading"&&(window.basecoat.initAll(),window.basecoat.start());
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ (()=>{var u=class extends HTMLElement{connectedCallback(){if(this._init||(this._init=!0,this.vertical=this.dataset.orientation==="vertical",this.panels=[...this.children].filter(e=>e.getAttribute("role")!=="separator"),this.handles=[...this.children].filter(e=>e.getAttribute("role")==="separator"),this.panels.length<2))return;const t=this.panels.map(e=>parseFloat(getComputedStyle(e).getPropertyValue("--size"))||0),s=t.filter(e=>!e).length,i=Math.max(0,100-t.reduce((e,r)=>e+r,0));this.sizes=t.map(e=>e||(s?i/s:0));const a=this.sizes.reduce((e,r)=>e+r,0)||1;this.sizes=this.sizes.map(e=>e/a*100),this.apply(),this.handles.forEach((e,r)=>{e.setAttribute("aria-orientation",this.vertical?"horizontal":"vertical"),e.setAttribute("aria-valuemin","0"),e.setAttribute("aria-valuemax","100"),this.panels[r].id&&e.setAttribute("aria-controls",this.panels[r].id),e.hasAttribute("tabindex")||(e.tabIndex=0),e.addEventListener("pointerdown",n=>this.startDrag(n,r)),e.addEventListener("keydown",n=>this.onKey(n,r)),e.addEventListener("dblclick",()=>this.resetPair(r))})}minOf(t){const s=parseFloat(this.panels[t].dataset.min);return Number.isFinite(s)?s:10}maxOf(t){const s=parseFloat(this.panels[t].dataset.max);return Number.isFinite(s)?s:100}setPair(t,s){const i=this.sizes[t]+this.sizes[t+1],a=Math.max(this.minOf(t),i-this.maxOf(t+1)),e=Math.min(this.maxOf(t),i-this.minOf(t+1)),r=Math.min(e,Math.max(a,s));this.sizes[t]=r,this.sizes[t+1]=i-r,this.apply()}resetPair(t){const s=this.sizes[t]+this.sizes[t+1];this.setPair(t,s/2)}apply(){this.panels.forEach((t,s)=>t.style.setProperty("--size",this.sizes[s].toFixed(3))),this.handles?.forEach((t,s)=>t.setAttribute("aria-valuenow",String(Math.round(this.sizes[s])))),this.dispatchEvent(new CustomEvent("resize",{detail:{sizes:[...this.sizes]}}))}startDrag(t,s){if(t.button!==0)return;t.preventDefault();const i=t.currentTarget;i.setPointerCapture(t.pointerId),i.setAttribute("data-active",""),this.setAttribute("data-dragging","");const a=this.getBoundingClientRect(),e=this.vertical?a.height:a.width,r=!this.vertical&&getComputedStyle(this).direction==="rtl",n=this.vertical?t.clientY:t.clientX,d=this.sizes[s],o=l=>{const c=((this.vertical?l.clientY:l.clientX)-n)/e*100;this.setPair(s,d+(r?-c:c))},h=()=>{i.removeEventListener("pointermove",o),i.removeAttribute("data-active"),this.removeAttribute("data-dragging")};i.addEventListener("pointermove",o),i.addEventListener("pointerup",h,{once:!0}),i.addEventListener("pointercancel",h,{once:!0})}onKey(t,s){const i=t.shiftKey?10:5,a=!this.vertical&&getComputedStyle(this).direction==="rtl",e=this.vertical?"ArrowDown":a?"ArrowLeft":"ArrowRight",r=this.vertical?"ArrowUp":a?"ArrowRight":"ArrowLeft",n={[e]:this.sizes[s]+i,[r]:this.sizes[s]-i,Home:0,End:100,Enter:null};t.key in n&&(t.preventDefault(),t.key==="Enter"?this.resetPair(s):this.setPair(s,n[t.key]))}};customElements.get("auvyx-resizable")||customElements.define("auvyx-resizable",u)})();
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ window.basecoat||(()=>{const h={};let x=null;const p=(n,r,d)=>{const b=typeof r=="object"?r:{selector:r,init:d};h[n]={selector:b.selector,init:b.init,refresh:b.refresh}},E=(n,r)=>{const d=h[r];if(d)try{d.init(n),n.hasAttribute(`data-${r}-initialized`)&&(n.dataset.basecoatComponent=r)}catch(b){if(console.error(`Failed to initialize ${r}:`,b),typeof n._destroy=="function")try{n._destroy()}catch(e){console.error(`Failed to clean up ${r} after initialization error:`,e)}delete n._destroy,n.removeAttribute(`data-${r}-initialized`),delete n.dataset.basecoatComponent}},O=n=>{if(!n||n.nodeType!==Node.ELEMENT_NODE)return;const r=n.dataset?.basecoatComponent;if(typeof n._destroy=="function")try{n._destroy()}catch(d){console.error("Failed to destroy Basecoat component:",d)}delete n._destroy,r&&n.removeAttribute(`data-${r}-initialized`),delete n.dataset.basecoatComponent},j=n=>{n.nodeType===Node.ELEMENT_NODE&&(n.isConnected||(n.dataset?.basecoatComponent&&O(n),n.querySelectorAll("[data-basecoat-component]").forEach(O)))},A=n=>Array.from(new Set(n)),I=(n,r,d=!1)=>{const b=Array.from(document.querySelectorAll(r));return d&&b.push(...document.querySelectorAll(`[data-basecoat-component="${n}"]`)),A(b)},L=(n={})=>{const r=n.force===!0;Object.entries(h).forEach(([d,{selector:b}])=>{I(d,b,r).forEach(e=>{const t=e.dataset?.basecoatComponent===d;r&&O(e),(t||e.matches(b))&&E(e,d)})})},S=n=>{n.nodeType===Node.ELEMENT_NODE&&Object.entries(h).forEach(([r,{selector:d}])=>{n.matches(d)&&E(n,r),n.querySelectorAll(d).forEach(b=>E(b,r))})},q=n=>{if(!n)return;if(typeof n.refresh=="function"){n.refresh();return}const r=n.dataset?.basecoatComponent,d=r?h[r]:null;d?.refresh&&d.refresh(n)},k=()=>{x||(x=new MutationObserver(n=>{n.forEach(r=>{r.addedNodes.forEach(S),r.removedNodes.forEach(j)})}),x.observe(document.body,{childList:!0,subtree:!0}))},y=()=>{x&&(x.disconnect(),x=null)},f=(n,r={})=>{const d=h[n];if(!d){console.warn(`Component '${n}' not found in registry`);return}const b=r.force===!0;I(n,d.selector,b).forEach(e=>{const t=e.dataset?.basecoatComponent===n;b&&O(e),(t||e.matches(d.selector))&&E(e,n)})},M=(n={})=>{L(n)},C=n=>{const r=n==="dark";document.documentElement.classList.toggle("dark",r);try{localStorage.setItem("themeMode",r?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:r?"dark":"light"}}))},w=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:p,init:f,initAll:M,refresh:q,start:k,stop:y,theme:{get:w,set:C,toggle:()=>C(w()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{L(),k()})})(),(()=>{const h=new WeakMap,x=e=>{const t=e.querySelector(":scope > button"),s=t?.querySelector(":scope > span")||null,i=e.querySelector(":scope > [data-popover]"),o=i?i.querySelector('[role="listbox"]'):null,c=e.querySelector(':scope > input[type="hidden"]');return{trigger:t,selectedLabel:s,popover:i,listbox:o,input:c}},p=e=>e.dataset.value??e.textContent.trim(),E=e=>e.dataset.label||e.textContent.trim(),O=e=>e.dataset.format==="object"?"object":"value",j=e=>e.getAttribute("aria-disabled")==="true",A=e=>({value:p(e),label:E(e)}),I=e=>{const t=Array.from(e.querySelectorAll('[role="option"]'));return{allOptions:t,options:t.filter(s=>!j(s))}},L=(e,{isMultiple:t,format:s})=>{if(t)try{const i=JSON.parse(e||"[]");return Array.isArray(i)?i.map(o=>s==="object"&&o&&typeof o=="object"?o.value:o).filter(o=>o!=null).map(String):[]}catch{return[]}if(s==="object")try{const i=JSON.parse(e||"null");return i&&typeof i=="object"&&i.value!=null?String(i.value):""}catch{return""}return e||""},S=(e,t)=>{if(e.format==="object")return JSON.stringify(e.isMultiple?t:t[0]||null);const s=t.map(i=>i.value);return e.isMultiple?JSON.stringify(s):s[0]||""},q=e=>{e.selectedLabel.textContent=e.placeholder||"",e.selectedLabel.classList.toggle("text-muted-foreground",!!e.placeholder),e.input.value=e.isMultiple?S(e,[]):""},k=(e,t)=>{const s=t.getBoundingClientRect(),i=e.listbox.getBoundingClientRect();s.top<i.top?e.listbox.scrollTop-=i.top-s.top:s.bottom>i.bottom&&(e.listbox.scrollTop+=s.bottom-i.bottom)},y=(e,t)=>{if(e.activeIndex>-1&&e.options[e.activeIndex]&&e.options[e.activeIndex].classList.remove("active"),e.activeIndex=t,e.activeIndex>-1){const s=e.options[e.activeIndex];s.classList.add("active"),s.id?e.trigger.setAttribute("aria-activedescendant",s.id):e.trigger.removeAttribute("aria-activedescendant")}else e.trigger.removeAttribute("aria-activedescendant")},f=(e,t,s=!0)=>{const i=h.get(e);let o,c;if(i.isMultiple){const a=Array.isArray(t)?t:[];i.selectedOptions.clear(),a.forEach(m=>i.selectedOptions.add(m));const g=i.options.filter(m=>i.selectedOptions.has(m));c=g.map(A),g.length===0?(i.selectedLabel.textContent=i.placeholder,i.selectedLabel.classList.add("text-muted-foreground")):(i.selectedLabel.textContent=c.map(m=>m.label).join(", "),i.selectedLabel.classList.remove("text-muted-foreground")),o=c.map(m=>m.value),i.input.value=S(i,c)}else{const a=t;a?(a.dataset.label?i.selectedLabel.textContent=a.dataset.label:i.selectedLabel.innerHTML=a.innerHTML,i.selectedLabel.classList.remove("text-muted-foreground"),c=A(a),o=c.value,i.input.value=S(i,[c])):(i.options.forEach(g=>g.removeAttribute("aria-selected")),q(i),c=null,o="")}i.options.forEach(a=>{(i.isMultiple?i.selectedOptions.has(a):t&&a===t)?a.setAttribute("aria-selected","true"):a.removeAttribute("aria-selected")}),s&&e.dispatchEvent(new CustomEvent("change",{detail:{value:o,selected:c},bubbles:!0}))},M=(e,t=!0)=>{e.popover.getAttribute("aria-hidden")!=="true"&&(t&&e.trigger.focus(),e.popover.setAttribute("aria-hidden","true"),e.trigger.setAttribute("aria-expanded","false"),y(e,-1))},C=e=>{const t=h.get(e);if(!t)return;const s=x(e);if(!s.trigger||!s.selectedLabel||!s.popover||!s.listbox||!s.input){const c=[];s.trigger||c.push("trigger"),s.selectedLabel||c.push("selected label"),s.popover||c.push("popover"),s.listbox||c.push("listbox"),s.input||c.push("input"),console.error(`Select component refresh failed. Missing element(s): ${c.join(", ")}`,e);return}const i=s.input.value;if(Object.assign(t,s,I(s.listbox)),t.visibleOptions=[...t.options],t.isMultiple=t.listbox.getAttribute("aria-multiselectable")==="true",t.format=O(e),t.placeholder=e.dataset.placeholder||"",t.closeOnSelect=e.dataset.closeOnSelect==="true",t.isMultiple){t.selectedOptions||(t.selectedOptions=new Set);const c=L(i,t),a=c.length?c.map(g=>t.options.find(m=>p(m)===g)).filter(Boolean):t.options.filter(g=>g.getAttribute("aria-selected")==="true");f(e,a,!1)}else{const c=L(i,t),a=c===""&&t.placeholder?null:t.options.find(g=>p(g)===c)||t.options.find(g=>g.getAttribute("aria-selected")==="true");t.options.forEach(g=>g.removeAttribute("aria-selected")),f(e,a||null,!1)}const o=t.listbox.querySelector('[role="option"][aria-selected="true"]');y(t,o?t.options.indexOf(o):-1)},w=(e,t)=>{const s=h.get(e);s.selectedOptions.has(t)?s.selectedOptions.delete(t):s.selectedOptions.add(t),f(e,s.options.filter(i=>s.selectedOptions.has(i)))},n=(e,t)=>{const s=h.get(e);if(s.isMultiple){const i=s.options.find(o=>p(o)===t&&!s.selectedOptions.has(o));if(!i)return;s.selectedOptions.add(i),f(e,s.options.filter(o=>s.selectedOptions.has(o)))}else{const i=s.options.find(o=>p(o)===t);if(!i)return;if(s.placeholder&&p(i)===""){f(e,null),M(s);return}e.value!==t&&f(e,i),M(s)}},r=(e,t)=>{const s=h.get(e);if(!s.isMultiple)return;const i=s.options.find(o=>p(o)===t&&s.selectedOptions.has(o));i&&(s.selectedOptions.delete(i),f(e,s.options.filter(o=>s.selectedOptions.has(o))))},d=(e,t)=>{const s=h.get(t),i=s.popover.getAttribute("aria-hidden")==="false";if(!["ArrowDown","ArrowUp","Enter","Home","End","Escape"].includes(e.key))return;if(!i){e.key!=="Enter"&&e.key!=="Escape"&&(e.preventDefault(),t.open());return}if(e.preventDefault(),e.key==="Escape"){t.close();return}if(e.key==="Enter"){if(s.activeIndex>-1){const a=s.options[s.activeIndex];s.isMultiple?(w(t,a),s.closeOnSelect&&t.close()):(s.placeholder&&p(a)===""?f(t,null):t.value!==p(a)&&f(t,a),t.close())}return}if(s.visibleOptions.length===0)return;const o=s.activeIndex>-1?s.visibleOptions.indexOf(s.options[s.activeIndex]):-1;let c=o;if(e.key==="ArrowDown"&&o<s.visibleOptions.length-1&&(c=o+1),e.key==="ArrowUp"&&(c=o>0?o-1:0),e.key==="Home"&&(c=0),e.key==="End"&&(c=s.visibleOptions.length-1),c!==o){const a=s.visibleOptions[c];y(s,s.options.indexOf(a)),k(s,a)}},b=e=>{if(e.dataset.selectInitialized)return;const t={activeIndex:-1,selectedOptions:null,options:[],allOptions:[],visibleOptions:[],format:"value"};if(h.set(e,t),e.refresh=()=>C(e),C(e),!t.trigger||!t.selectedLabel||!t.popover||!t.listbox||!t.input){h.delete(e),delete e.refresh;return}e.open=()=>{document.dispatchEvent(new CustomEvent("basecoat:popover",{detail:{source:e}})),e.refresh(),t.popover.setAttribute("aria-hidden","false"),t.trigger.setAttribute("aria-expanded","true");const l=t.listbox.querySelector('[role="option"][aria-selected="true"]');l&&(y(t,t.options.indexOf(l)),k(t,l))},e.close=(l=!0)=>M(t,l),e.togglePopover=()=>t.trigger.getAttribute("aria-expanded")==="true"?e.close():e.open();const s=l=>d(l,e),i=e.togglePopover,o=l=>{const v=l.target.closest('[role="option"]');if(v&&t.visibleOptions.includes(v)){const u=t.options.indexOf(v);u!==t.activeIndex&&y(t,u)}},c=()=>{const l=t.listbox.querySelector('[role="option"][aria-selected="true"]');y(t,l?t.options.indexOf(l):-1)},a=l=>{const v=l.target.closest('[role="option"]');if(!v)return;const u=t.options.find(T=>T===v);u&&(t.isMultiple?(w(e,u),t.closeOnSelect?e.close():(y(t,t.options.indexOf(u)),t.trigger.focus())):(t.placeholder&&p(u)===""?f(e,null):e.value!==p(u)&&f(e,u),e.close()))},g=l=>{e.contains(l.target)||e.close(!1)},m=l=>{e.contains(l.detail.source)||e.close(!1)};t.trigger.addEventListener("keydown",s),t.trigger.addEventListener("click",i),t.listbox.addEventListener("mousemove",o),t.listbox.addEventListener("mouseleave",c),t.listbox.addEventListener("click",a),document.addEventListener("click",g),document.addEventListener("basecoat:popover",m),e._destroy=()=>{t.trigger.removeEventListener("keydown",s),t.trigger.removeEventListener("click",i),t.listbox.removeEventListener("mousemove",o),t.listbox.removeEventListener("mouseleave",c),t.listbox.removeEventListener("click",a),document.removeEventListener("click",g),document.removeEventListener("basecoat:popover",m),h.delete(e),delete e.refresh,delete e.open,delete e.close,delete e.togglePopover,delete e.select,delete e.selectByValue,delete e.deselect,delete e.toggle,delete e.selectAll,delete e.selectNone},Object.defineProperty(e,"value",{configurable:!0,get:()=>t.isMultiple?t.options.filter(l=>t.selectedOptions.has(l)).map(p):L(t.input.value,t),set:l=>{if(t.isMultiple){const v=Array.isArray(l)?l:l!=null?[l]:[];f(e,v.map(u=>t.options.find(T=>p(T)===u)).filter(Boolean))}else{if(l==null||l===""){f(e,null),e.close();return}const v=t.options.find(u=>p(u)===l);v&&(f(e,v),e.close())}}}),Object.defineProperty(e,"selected",{configurable:!0,get:()=>{if(t.isMultiple)return t.options.filter(u=>t.selectedOptions.has(u)).map(A);const l=e.value,v=t.options.find(u=>p(u)===l);return v?A(v):null}}),e.select=l=>n(e,l),e.selectByValue=e.select,t.isMultiple&&(e.deselect=l=>r(e,l),e.toggle=l=>{const v=t.options.find(u=>p(u)===l);v&&w(e,v)},e.selectAll=()=>f(e,t.options),e.selectNone=()=>f(e,[])),t.popover.setAttribute("aria-hidden","true"),t.trigger.setAttribute("aria-expanded","false"),e.dataset.selectInitialized="true",e.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.basecoat&&window.basecoat.register("select",{selector:"div.select:not([data-select-initialized])",init:b,refresh:C})})(),document.readyState!=="loading"&&(window.basecoat.initAll(),window.basecoat.start());
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ window.basecoat||(()=>{const u={};let l=null;const e=(t,o,r)=>{const i=typeof o=="object"?o:{selector:o,init:r};u[t]={selector:i.selector,init:i.init,refresh:i.refresh}},s=(t,o)=>{const r=u[o];if(r)try{r.init(t),t.hasAttribute(`data-${o}-initialized`)&&(t.dataset.basecoatComponent=o)}catch(i){if(console.error(`Failed to initialize ${o}:`,i),typeof t._destroy=="function")try{t._destroy()}catch(a){console.error(`Failed to clean up ${o} after initialization error:`,a)}delete t._destroy,t.removeAttribute(`data-${o}-initialized`),delete t.dataset.basecoatComponent}},h=t=>{if(!t||t.nodeType!==Node.ELEMENT_NODE)return;const o=t.dataset?.basecoatComponent;if(typeof t._destroy=="function")try{t._destroy()}catch(r){console.error("Failed to destroy Basecoat component:",r)}delete t._destroy,o&&t.removeAttribute(`data-${o}-initialized`),delete t.dataset.basecoatComponent},f=t=>{t.nodeType===Node.ELEMENT_NODE&&(t.isConnected||(t.dataset?.basecoatComponent&&h(t),t.querySelectorAll("[data-basecoat-component]").forEach(h)))},c=t=>Array.from(new Set(t)),g=(t,o,r=!1)=>{const i=Array.from(document.querySelectorAll(o));return r&&i.push(...document.querySelectorAll(`[data-basecoat-component="${t}"]`)),c(i)},y=(t={})=>{const o=t.force===!0;Object.entries(u).forEach(([r,{selector:i}])=>{g(r,i,o).forEach(a=>{const w=a.dataset?.basecoatComponent===r;o&&h(a),(w||a.matches(i))&&s(a,r)})})},E=t=>{t.nodeType===Node.ELEMENT_NODE&&Object.entries(u).forEach(([o,{selector:r}])=>{t.matches(r)&&s(t,o),t.querySelectorAll(r).forEach(i=>s(i,o))})},b=t=>{if(!t)return;if(typeof t.refresh=="function"){t.refresh();return}const o=t.dataset?.basecoatComponent,r=o?u[o]:null;r?.refresh&&r.refresh(t)},n=()=>{l||(l=new MutationObserver(t=>{t.forEach(o=>{o.addedNodes.forEach(E),o.removedNodes.forEach(f)})}),l.observe(document.body,{childList:!0,subtree:!0}))},d=()=>{l&&(l.disconnect(),l=null)},p=(t,o={})=>{const r=u[t];if(!r){console.warn(`Component '${t}' not found in registry`);return}const i=o.force===!0;g(t,r.selector,i).forEach(a=>{const w=a.dataset?.basecoatComponent===t;i&&h(a),(w||a.matches(r.selector))&&s(a,t)})},v=(t={})=>{y(t)},A=t=>{const o=t==="dark";document.documentElement.classList.toggle("dark",o);try{localStorage.setItem("themeMode",o?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:o?"dark":"light"}}))},k=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:e,init:p,initAll:v,refresh:b,start:n,stop:d,theme:{get:k,set:A,toggle:()=>A(k()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{y(),n()})})(),(()=>{const u=e=>{if(e.dataset.sidebarInitialized&&typeof e.toggle=="function")return;if(e.dataset.position==="static"){e.dataset.sidebarInitialized="true";return}const s=e.dataset.initialOpen!=="false",h=e.dataset.initialMobileOpen==="true",f=parseInt(e.dataset.breakpoint)||768;let c=f>0?window.innerWidth>=f?s:h:s;const g=()=>e.dataset.collapsible==="icon"&&(f<=0||window.innerWidth>=f),y=()=>{const n=g();e.setAttribute("aria-hidden",String(!c&&!n)),e.dataset.state=c?"open":"collapsed",c||n?e.removeAttribute("inert"):e.setAttribute("inert",""),e.id&&document.querySelectorAll(`[data-sidebar-toggle="${CSS.escape(e.id)}"]`).forEach(d=>d.setAttribute("aria-expanded",String(c))),e.dispatchEvent(new CustomEvent("basecoat:sidebar",{detail:{open:c}}))},E=n=>{c=!!n,y()};e.open=()=>E(!0),e.close=()=>E(!1),e.toggle=()=>E(!c);const b=n=>{const d=n.target,p=e.querySelector(":scope > nav");if(window.innerWidth<f&&d.closest("a, button")&&!d.closest("[data-keep-mobile-sidebar-open]")){document.activeElement&&document.activeElement.blur(),e.close();return}if(!c&&g()&&d.closest("summary")){n.preventDefault(),e.open(),d.closest("details").open=!0;return}(d===e||p&&!p.contains(d))&&(document.activeElement&&document.activeElement.blur(),e.close())};e.addEventListener("click",b),e._destroy=()=>{e.removeEventListener("click",b),delete e.open,delete e.close,delete e.toggle},y(),e.dataset.sidebarInitialized="true",e.dispatchEvent(new CustomEvent("basecoat:initialized"))},l=e=>e?document.getElementById(e):document.querySelector('.sidebar:not([data-position="static"])');document.addEventListener("click",e=>{const s=e.target.closest("[data-sidebar-toggle]");s&&l(s.getAttribute("data-sidebar-toggle"))?.toggle?.()}),document.addEventListener("keydown",e=>{if(e.key.toLowerCase()!=="b"||!(e.metaKey||e.ctrlKey)||e.altKey||e.shiftKey||e.target.closest("input, textarea, select, [contenteditable]"))return;const s=l("");!s||s.dataset.shortcut==="none"||typeof s.toggle!="function"||(e.preventDefault(),s.toggle())}),window.basecoat&&window.basecoat.register("sidebar",".sidebar",u)})(),document.readyState!=="loading"&&(window.basecoat.initAll(),window.basecoat.start());
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ window.basecoat||(()=>{const i={};let c=null;const n=(t,o,e)=>{const r=typeof o=="object"?o:{selector:o,init:e};i[t]={selector:r.selector,init:r.init,refresh:r.refresh}},s=(t,o)=>{const e=i[o];if(e)try{e.init(t),t.hasAttribute(`data-${o}-initialized`)&&(t.dataset.basecoatComponent=o)}catch(r){if(console.error(`Failed to initialize ${o}:`,r),typeof t._destroy=="function")try{t._destroy()}catch(a){console.error(`Failed to clean up ${o} after initialization error:`,a)}delete t._destroy,t.removeAttribute(`data-${o}-initialized`),delete t.dataset.basecoatComponent}},d=t=>{if(!t||t.nodeType!==Node.ELEMENT_NODE)return;const o=t.dataset?.basecoatComponent;if(typeof t._destroy=="function")try{t._destroy()}catch(e){console.error("Failed to destroy Basecoat component:",e)}delete t._destroy,o&&t.removeAttribute(`data-${o}-initialized`),delete t.dataset.basecoatComponent},f=t=>{t.nodeType===Node.ELEMENT_NODE&&(t.isConnected||(t.dataset?.basecoatComponent&&d(t),t.querySelectorAll("[data-basecoat-component]").forEach(d)))},u=t=>Array.from(new Set(t)),p=(t,o,e=!1)=>{const r=Array.from(document.querySelectorAll(o));return e&&r.push(...document.querySelectorAll(`[data-basecoat-component="${t}"]`)),u(r)},h=(t={})=>{const o=t.force===!0;Object.entries(i).forEach(([e,{selector:r}])=>{p(e,r,o).forEach(a=>{const l=a.dataset?.basecoatComponent===e;o&&d(a),(l||a.matches(r))&&s(a,e)})})},g=t=>{t.nodeType===Node.ELEMENT_NODE&&Object.entries(i).forEach(([o,{selector:e}])=>{t.matches(e)&&s(t,o),t.querySelectorAll(e).forEach(r=>s(r,o))})},C=t=>{if(!t)return;if(typeof t.refresh=="function"){t.refresh();return}const o=t.dataset?.basecoatComponent,e=o?i[o]:null;e?.refresh&&e.refresh(t)},y=()=>{c||(c=new MutationObserver(t=>{t.forEach(o=>{o.addedNodes.forEach(g),o.removedNodes.forEach(f)})}),c.observe(document.body,{childList:!0,subtree:!0}))},w=()=>{c&&(c.disconnect(),c=null)},v=(t,o={})=>{const e=i[t];if(!e){console.warn(`Component '${t}' not found in registry`);return}const r=o.force===!0;p(t,e.selector,r).forEach(a=>{const l=a.dataset?.basecoatComponent===t;r&&d(a),(l||a.matches(e.selector))&&s(a,t)})},m=(t={})=>{h(t)},E=t=>{const o=t==="dark";document.documentElement.classList.toggle("dark",o);try{localStorage.setItem("themeMode",o?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:o?"dark":"light"}}))},b=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:n,init:v,initAll:m,refresh:C,start:y,stop:w,theme:{get:b,set:E,toggle:()=>E(b()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{h(),y()})})(),(()=>{function i(n){const s=parseFloat(n.min||"0"),d=parseFloat(n.max||"100"),f=parseFloat(n.value||"0"),u=d===s?0:(f-s)/(d-s)*100;n.style.setProperty("--slider-value",`${u}%`)}function c(n){if(n.dataset.rangeInitialized)return;i(n);const s=()=>i(n);n.addEventListener("input",s),n._destroy=()=>{n.removeEventListener("input",s)},n.dataset.rangeInitialized="true"}window.basecoat&&window.basecoat.register("range",'input[type="range"]:not([data-range-initialized])',c)})(),document.readyState!=="loading"&&(window.basecoat.initAll(),window.basecoat.start());
@@ -0,0 +1,2 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ window.basecoat||(()=>{const d={};let l=null;const A=(t,e,s)=>{const a=typeof e=="object"?e:{selector:e,init:s};d[t]={selector:a.selector,init:a.init,refresh:a.refresh}},E=(t,e)=>{const s=d[e];if(s)try{s.init(t),t.hasAttribute(`data-${e}-initialized`)&&(t.dataset.basecoatComponent=e)}catch(a){if(console.error(`Failed to initialize ${e}:`,a),typeof t._destroy=="function")try{t._destroy()}catch(b){console.error(`Failed to clean up ${e} after initialization error:`,b)}delete t._destroy,t.removeAttribute(`data-${e}-initialized`),delete t.dataset.basecoatComponent}},p=t=>{if(!t||t.nodeType!==Node.ELEMENT_NODE)return;const e=t.dataset?.basecoatComponent;if(typeof t._destroy=="function")try{t._destroy()}catch(s){console.error("Failed to destroy Basecoat component:",s)}delete t._destroy,e&&t.removeAttribute(`data-${e}-initialized`),delete t.dataset.basecoatComponent},r=t=>{t.nodeType===Node.ELEMENT_NODE&&(t.isConnected||(t.dataset?.basecoatComponent&&p(t),t.querySelectorAll("[data-basecoat-component]").forEach(p)))},n=t=>Array.from(new Set(t)),h=(t,e,s=!1)=>{const a=Array.from(document.querySelectorAll(e));return s&&a.push(...document.querySelectorAll(`[data-basecoat-component="${t}"]`)),n(a)},c=(t={})=>{const e=t.force===!0;Object.entries(d).forEach(([s,{selector:a}])=>{h(s,a,e).forEach(b=>{const C=b.dataset?.basecoatComponent===s;e&&p(b),(C||b.matches(a))&&E(b,s)})})},m=t=>{t.nodeType===Node.ELEMENT_NODE&&Object.entries(d).forEach(([e,{selector:s}])=>{t.matches(s)&&E(t,e),t.querySelectorAll(s).forEach(a=>E(a,e))})},o=t=>{if(!t)return;if(typeof t.refresh=="function"){t.refresh();return}const e=t.dataset?.basecoatComponent,s=e?d[e]:null;s?.refresh&&s.refresh(t)},y=()=>{l||(l=new MutationObserver(t=>{t.forEach(e=>{e.addedNodes.forEach(m),e.removedNodes.forEach(r)})}),l.observe(document.body,{childList:!0,subtree:!0}))},i=()=>{l&&(l.disconnect(),l=null)},f=(t,e={})=>{const s=d[t];if(!s){console.warn(`Component '${t}' not found in registry`);return}const a=e.force===!0;h(t,s.selector,a).forEach(b=>{const C=b.dataset?.basecoatComponent===t;a&&p(b),(C||b.matches(s.selector))&&E(b,t)})},g=(t={})=>{c(t)},u=t=>{const e=t==="dark";document.documentElement.classList.toggle("dark",e);try{localStorage.setItem("themeMode",e?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:e?"dark":"light"}}))},w=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:A,init:f,initAll:g,refresh:o,start:y,stop:i,theme:{get:w,set:u,toggle:()=>u(w()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{c(),y()})})(),(()=>{const d=new WeakMap,l=r=>r.disabled||r.getAttribute("aria-disabled")==="true",A=r=>{const n=r.querySelector('[role="tablist"]'),h=n?Array.from(n.querySelectorAll('[role="tab"]')):[],c=h.map(m=>document.getElementById(m.getAttribute("aria-controls"))).filter(Boolean);return{tablist:n,tabs:h,panels:c}},E=r=>{const n=d.get(r);if(!n||(Object.assign(n,A(r)),!n.tablist))return;const h=n.tabs.find(c=>c.getAttribute("aria-selected")==="true"&&!l(c))||n.tabs.find(c=>!l(c));h&&r.select(h,!1)},p=r=>{if(r.dataset.tabsInitialized)return;const n={};d.set(r,n),r.refresh=()=>E(r);const h=(o,y=!1)=>{if(!o||l(o))return;n.tabs.forEach(f=>{f.setAttribute("aria-selected","false"),f.setAttribute("tabindex","-1");const g=document.getElementById(f.getAttribute("aria-controls"));g&&(g.hidden=!0)}),o.setAttribute("aria-selected","true"),o.setAttribute("tabindex","0");const i=document.getElementById(o.getAttribute("aria-controls"));i&&(i.hidden=!1),y&&o.focus()};if(r.select=h,E(r),!n.tablist){d.delete(r),delete r.refresh,delete r.select;return}const c=o=>{const y=o.target.closest('[role="tab"]');y&&r.select(y)},m=o=>{const y=o.target;if(!n.tabs.includes(y))return;const i=n.tabs.filter(w=>!l(w)),f=i.indexOf(y),g=n.tablist.getAttribute("aria-orientation")||"horizontal";if(f===-1)return;let u;o.key==="ArrowRight"&&g==="horizontal"&&(u=i[(f+1)%i.length]),o.key==="ArrowLeft"&&g==="horizontal"&&(u=i[(f-1+i.length)%i.length]),o.key==="ArrowDown"&&g==="vertical"&&(u=i[(f+1)%i.length]),o.key==="ArrowUp"&&g==="vertical"&&(u=i[(f-1+i.length)%i.length]),o.key==="Home"&&(u=i[0]),o.key==="End"&&(u=i[i.length-1]),u&&(o.preventDefault(),r.select(u,!0))};n.tablist.addEventListener("click",c),n.tablist.addEventListener("keydown",m),r._destroy=()=>{n.tablist.removeEventListener("click",c),n.tablist.removeEventListener("keydown",m),d.delete(r),delete r.refresh,delete r.select},r.dataset.tabsInitialized="true",r.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.basecoat&&window.basecoat.register("tabs",{selector:".tabs:not([data-tabs-initialized])",init:p,refresh:E})})(),document.readyState!=="loading"&&(window.basecoat.initAll(),window.basecoat.start());
@@ -0,0 +1,19 @@
1
+ /*! @auvyx/ui v0.1.0 | MIT | based on Basecoat (MIT) */
2
+ window.basecoat||(()=>{const i={};let s=null;const p=(t,o,a)=>{const n=typeof o=="object"?o:{selector:o,init:a};i[t]={selector:n.selector,init:n.init,refresh:n.refresh}},g=(t,o)=>{const a=i[o];if(a)try{a.init(t),t.hasAttribute(`data-${o}-initialized`)&&(t.dataset.basecoatComponent=o)}catch(n){if(console.error(`Failed to initialize ${o}:`,n),typeof t._destroy=="function")try{t._destroy()}catch(l){console.error(`Failed to clean up ${o} after initialization error:`,l)}delete t._destroy,t.removeAttribute(`data-${o}-initialized`),delete t.dataset.basecoatComponent}},m=t=>{if(!t||t.nodeType!==Node.ELEMENT_NODE)return;const o=t.dataset?.basecoatComponent;if(typeof t._destroy=="function")try{t._destroy()}catch(a){console.error("Failed to destroy Basecoat component:",a)}delete t._destroy,o&&t.removeAttribute(`data-${o}-initialized`),delete t.dataset.basecoatComponent},v=t=>{t.nodeType===Node.ELEMENT_NODE&&(t.isConnected||(t.dataset?.basecoatComponent&&m(t),t.querySelectorAll("[data-basecoat-component]").forEach(m)))},E=t=>Array.from(new Set(t)),b=(t,o,a=!1)=>{const n=Array.from(document.querySelectorAll(o));return a&&n.push(...document.querySelectorAll(`[data-basecoat-component="${t}"]`)),E(n)},f=(t={})=>{const o=t.force===!0;Object.entries(i).forEach(([a,{selector:n}])=>{b(a,n,o).forEach(l=>{const y=l.dataset?.basecoatComponent===a;o&&m(l),(y||l.matches(n))&&g(l,a)})})},h=t=>{t.nodeType===Node.ELEMENT_NODE&&Object.entries(i).forEach(([o,{selector:a}])=>{t.matches(a)&&g(t,o),t.querySelectorAll(a).forEach(n=>g(n,o))})},k=t=>{if(!t)return;if(typeof t.refresh=="function"){t.refresh();return}const o=t.dataset?.basecoatComponent,a=o?i[o]:null;a?.refresh&&a.refresh(t)},e=()=>{s||(s=new MutationObserver(t=>{t.forEach(o=>{o.addedNodes.forEach(h),o.removedNodes.forEach(v)})}),s.observe(document.body,{childList:!0,subtree:!0}))},r=()=>{s&&(s.disconnect(),s=null)},c=(t,o={})=>{const a=i[t];if(!a){console.warn(`Component '${t}' not found in registry`);return}const n=o.force===!0;b(t,a.selector,n).forEach(l=>{const y=l.dataset?.basecoatComponent===t;n&&m(l),(y||l.matches(a.selector))&&g(l,t)})},d=(t={})=>{f(t)},u=t=>{const o=t==="dark";document.documentElement.classList.toggle("dark",o);try{localStorage.setItem("themeMode",o?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:o?"dark":"light"}}))},w=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:p,init:c,initAll:d,refresh:k,start:e,stop:r,theme:{get:w,set:u,toggle:()=>u(w()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{f(),e()})})(),(()=>{let i;const s=new WeakMap;let p=!1;const g={success:'<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="m9 12 2 2 4-4"/></svg>',error:'<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="m15 9-6 6"/><path d="m9 9 6 6"/></svg>',info:'<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg>',warning:'<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg>'};function m(e){if(e.dataset.toasterInitialized)return;i=e;const r=c=>{const d=c.target.closest(".toast footer a"),u=c.target.closest(".toast footer button");(d||u)&&f(c.target.closest(".toast"))};i.addEventListener("mouseenter",E),i.addEventListener("mouseleave",b),i.addEventListener("click",r),e.toast=(c={})=>{const d=k(c);return e.appendChild(d),v(d),d},e.closeAll=()=>{e.querySelectorAll('.toast:not([aria-hidden="true"])').forEach(f)},i.querySelectorAll(".toast:not([data-toast-initialized])").forEach(v),i._destroy=()=>{i.removeEventListener("mouseenter",E),i.removeEventListener("mouseleave",b),i.removeEventListener("click",r),i.querySelectorAll(".toast[data-toast-initialized]").forEach(c=>c._destroy?.()),delete i.toast,delete i.closeAll,i===e&&(i=null)},i.dataset.toasterInitialized="true",i.dispatchEvent(new CustomEvent("basecoat:initialized"))}function v(e){if(e.dataset.toastInitialized)return;const r=parseInt(e.dataset.duration),c=r!==-1?r||(e.dataset.category==="error"?5e3:3e3):-1,d={remainingTime:c,timeoutId:null,startTime:null};c!==-1&&(p?d.timeoutId=null:(d.startTime=Date.now(),d.timeoutId=setTimeout(()=>f(e),c))),s.set(e,d),e.close=()=>f(e),e._destroy=()=>{clearTimeout(d.timeoutId),s.delete(e),delete e.close},e.dataset.toastInitialized="true"}function E(){p||!i||(p=!0,i.querySelectorAll('.toast:not([aria-hidden="true"])').forEach(e=>{if(!s.has(e))return;const r=s.get(e);r.timeoutId&&(clearTimeout(r.timeoutId),r.timeoutId=null,r.remainingTime-=Date.now()-r.startTime)}))}function b(){!p||!i||(p=!1,i.querySelectorAll('.toast:not([aria-hidden="true"])').forEach(e=>{if(!s.has(e))return;const r=s.get(e);r.remainingTime!==-1&&!r.timeoutId&&(r.remainingTime>0?(r.startTime=Date.now(),r.timeoutId=setTimeout(()=>f(e),r.remainingTime)):f(e))}))}function f(e){if(!e||!s.has(e))return;const r=s.get(e);clearTimeout(r.timeoutId),s.delete(e),e.contains(document.activeElement)&&document.activeElement.blur(),e.setAttribute("aria-hidden","true"),e.addEventListener("transitionend",()=>e.remove(),{once:!0})}const h=e=>String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;");function k(e){const{category:r="info",title:c,description:d,action:u,cancel:w,duration:t,icon:o,html:a=!1}=e,n=A=>a?String(A):h(A),l=o||r&&g[r]||"",y=c?`<h2>${n(c)}</h2>`:"",I=d?`<p>${n(d)}</p>`:"",C=u?.href?`<a href="${h(u.href)}" class="btn" data-toast-action>${n(u.label)}</a>`:u?.onclick?`<button type="button" class="btn" data-toast-action onclick="${h(u.onclick)}">${n(u.label)}</button>`:"",T=w?`<button type="button" class="btn h-6 text-xs px-2.5 rounded-sm" data-variant="outline" data-toast-cancel onclick="${h(w?.onclick||"")}">${n(w.label)}</button>`:"",L=C||T?`<footer>${C}${T}</footer>`:"",x=`
3
+ <div
4
+ class="toast"
5
+ role="${r==="error"?"alert":"status"}"
6
+ aria-atomic="true"
7
+ ${r?`data-category="${h(r)}"`:""}
8
+ ${t!==void 0?`data-duration="${h(t)}"`:""}
9
+ >
10
+ <div class="toast-content">
11
+ ${l}
12
+ <section>
13
+ ${y}
14
+ ${I}
15
+ </section>
16
+ ${L}
17
+ </div>
18
+ </div>
19
+ `,$=document.createElement("template");return $.innerHTML=x.trim(),$.content.firstChild}window.basecoat&&(window.basecoat.register("toaster","#toaster:not([data-toaster-initialized])",m),window.basecoat.register("toast",".toast:not([data-toast-initialized])",v))})(),document.readyState!=="loading"&&(window.basecoat.initAll(),window.basecoat.start());