@auvyx/ui 0.1.0 → 0.1.2
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.
- package/README.md +2 -2
- package/dist/auvyx.bundle.css +101 -8
- package/dist/auvyx.chart.min.js +2 -2
- package/dist/auvyx.css +56 -0
- package/dist/auvyx.js +27 -26
- package/dist/auvyx.min.css +2 -2
- package/dist/auvyx.min.js +3 -3
- package/dist/custom-elements.json +1 -1
- package/dist/elements/calendar.min.js +1 -1
- package/dist/elements/context-menu.min.js +1 -1
- package/dist/elements/data-table.min.js +1 -1
- package/dist/elements/date-picker.min.js +1 -1
- package/dist/elements/index.min.js +1 -1
- package/dist/elements/menu.min.js +1 -1
- package/dist/elements/resizable.min.js +1 -1
- package/dist/js/accordion.min.js +2 -2
- package/dist/js/calendar.min.js +1 -1
- package/dist/js/combobox.min.js +2 -2
- package/dist/js/command.min.js +2 -2
- package/dist/js/context-menu.min.js +1 -1
- package/dist/js/copy.min.js +1 -1
- package/dist/js/data-table.min.js +1 -1
- package/dist/js/date-picker.min.js +1 -1
- package/dist/js/drawer.min.js +2 -2
- package/dist/js/dropdown-menu.min.js +2 -2
- package/dist/js/manifest.json +17 -17
- package/dist/js/menu.min.js +1 -1
- package/dist/js/popover.min.js +2 -2
- package/dist/js/resizable.min.js +1 -1
- package/dist/js/select.min.js +2 -2
- package/dist/js/sidebar.min.js +2 -2
- package/dist/js/slider.min.js +2 -2
- package/dist/js/tabs.min.js +2 -2
- package/dist/js/toast.min.js +6 -6
- package/dist/styles/auvyx-luma.min.css +2 -2
- package/dist/styles/auvyx-lyra.min.css +2 -2
- package/dist/styles/auvyx-maia.min.css +2 -2
- package/dist/styles/auvyx-mira.min.css +2 -2
- package/dist/styles/auvyx-nova.min.css +2 -2
- package/dist/styles/auvyx-rhea.min.css +2 -2
- package/dist/styles/auvyx-sera.min.css +2 -2
- package/dist/styles/auvyx-vega.min.css +2 -2
- package/dist/types/elements.d.ts +23 -0
- package/dist/ui/accordion.js +9 -8
- package/dist/ui/base.css +56 -0
- package/dist/ui/calendar.js +1 -1
- package/dist/ui/combobox.js +9 -8
- package/dist/ui/command.js +9 -8
- package/dist/ui/context-menu.js +1 -1
- package/dist/ui/copy.js +1 -1
- package/dist/ui/data-table.js +1 -1
- package/dist/ui/date-picker.js +1 -1
- package/dist/ui/drawer.js +9 -8
- package/dist/ui/dropdown-menu.js +9 -8
- package/dist/ui/menu.js +1 -1
- package/dist/ui/popover.js +9 -8
- package/dist/ui/resizable.js +1 -1
- package/dist/ui/select.js +9 -8
- package/dist/ui/sidebar.js +9 -8
- package/dist/ui/slider.js +9 -8
- package/dist/ui/tabs.js +9 -8
- package/dist/ui/toast.js +10 -9
- package/dist/wc/accordion.min.js +2 -2
- package/dist/wc/combobox.min.js +2 -2
- package/dist/wc/command.min.js +2 -2
- package/dist/wc/drawer.min.js +2 -2
- package/dist/wc/dropdown-menu.min.js +2 -2
- package/dist/wc/manifest.json +11 -11
- package/dist/wc/popover.min.js +2 -2
- package/dist/wc/select.min.js +2 -2
- package/dist/wc/sidebar.min.js +2 -2
- package/dist/wc/slider.min.js +2 -2
- package/dist/wc/tabs.min.js +2 -2
- package/dist/wc/toast.min.js +5 -5
- package/package.json +4 -4
package/dist/wc/accordion.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @auvyx/ui v0.1.
|
|
2
|
-
window.
|
|
1
|
+
/*! @auvyx/ui v0.1.2 | MIT License | see LICENSE */
|
|
2
|
+
window.auvyx||(()=>{const l={};let a=null;const m=(t,r,i)=>{const n=typeof r=="object"?r:{selector:r,init:i};l[t]={selector:n.selector,init:n.init,refresh:n.refresh}},e=(t,r)=>{const i=l[r];if(i)try{i.init(t),t.hasAttribute(`data-${r}-initialized`)&&(t.dataset.basecoatComponent=r)}catch(n){if(console.error(`Failed to initialize ${r}:`,n),typeof t._destroy=="function")try{t._destroy()}catch(d){console.error(`Failed to clean up ${r} after initialization error:`,d)}delete t._destroy,t.removeAttribute(`data-${r}-initialized`),delete t.dataset.basecoatComponent}},o=t=>{if(!t||t.nodeType!==Node.ELEMENT_NODE)return;const r=t.dataset?.basecoatComponent;if(typeof t._destroy=="function")try{t._destroy()}catch(i){console.error("Failed to destroy component:",i)}delete t._destroy,r&&t.removeAttribute(`data-${r}-initialized`),delete t.dataset.basecoatComponent},s=t=>{t.nodeType===Node.ELEMENT_NODE&&(t.isConnected||(t.dataset?.basecoatComponent&&o(t),t.querySelectorAll("[data-basecoat-component]").forEach(o)))},u=t=>Array.from(new Set(t)),f=(t,r,i=!1)=>{const n=Array.from(document.querySelectorAll(r));return i&&n.push(...document.querySelectorAll(`[data-basecoat-component="${t}"]`)),u(n)},y=(t={})=>{const r=t.force===!0;Object.entries(l).forEach(([i,{selector:n}])=>{f(i,n,r).forEach(d=>{const v=d.dataset?.basecoatComponent===i;r&&o(d),(v||d.matches(n))&&e(d,i)})})},c=t=>{t.nodeType===Node.ELEMENT_NODE&&Object.entries(l).forEach(([r,{selector:i}])=>{t.matches(i)&&e(t,r),t.querySelectorAll(i).forEach(n=>e(n,r))})},p=t=>{if(!t)return;if(typeof t.refresh=="function"){t.refresh();return}const r=t.dataset?.basecoatComponent,i=r?l[r]:null;i?.refresh&&i.refresh(t)},h=()=>{a||(a=new MutationObserver(t=>{t.forEach(r=>{r.addedNodes.forEach(c),r.removedNodes.forEach(s)})}),a.observe(document.body,{childList:!0,subtree:!0}))},b=()=>{a&&(a.disconnect(),a=null)},C=(t,r={})=>{const i=l[t];if(!i){console.warn(`Component '${t}' not found in registry`);return}const n=r.force===!0;f(t,i.selector,n).forEach(d=>{const v=d.dataset?.basecoatComponent===t;n&&o(d),(v||d.matches(i.selector))&&e(d,t)})},_=(t={})=>{y(t)},g=t=>{const r=t==="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"}}))},E=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.auvyx=window.basecoat={register:m,init:C,initAll:_,refresh:p,start:h,stop:b,theme:{get:E,set:g,toggle:()=>g(E()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{y(),h()})})(),(()=>{const l=new WeakMap,a=s=>{const u=s.querySelector(":scope > summary");return s.getAttribute("aria-disabled")==="true"||s.dataset.disabled==="true"||u?.getAttribute("aria-disabled")==="true"},m=s=>s.hasAttribute("data-multiple"),e=(s,u)=>{m(s)||!u.open||s.querySelectorAll(":scope > details[open]").forEach(f=>{f!==u&&(f.open=!1)})},o=s=>{if(s.dataset.accordionInitialized)return;const u=c=>{const h=c.target.closest("summary")?.closest("details");!h||h.parentElement!==s||!a(h)||c.preventDefault()},f=c=>{if(c.key!=="Enter"&&c.key!==" ")return;const h=c.target.closest("summary")?.closest("details");!h||h.parentElement!==s||!a(h)||c.preventDefault()},y=c=>{const p=c.target;if(p.parentElement===s){if(a(p)){p.open=!1;return}e(s,p)}};s.addEventListener("click",u),s.addEventListener("keydown",f),s.addEventListener("toggle",y,!0),s.querySelectorAll(":scope > details[open]").forEach(c=>e(s,c)),l.set(s,{handleClick:u,handleToggle:y}),s._destroy=()=>{s.removeEventListener("click",u),s.removeEventListener("keydown",f),s.removeEventListener("toggle",y,!0),l.delete(s)},s.dataset.accordionInitialized="true",s.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.auvyx&&window.auvyx.register("accordion",".accordion:not([data-accordion-initialized])",o)})(),(()=>{var l=class extends HTMLElement{static observedAttributes=["value"];static relayed=["change"];static relayNative=!1;connectedCallback(){if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>this.isConnected&&this.connectedCallback(),{once:!0});return}this.setup(),this._children=new MutationObserver(()=>{if(this.querySelector(`:scope > ${this.constructor.rootSelector}`)===this.root)return;const e=this.root?this.snapshot():void 0;this.teardown(),this.setup(e)}),this._children.observe(this,{childList:!0})}disconnectedCallback(){this._children?.disconnect(),this.teardown()}setup(e){if(this.root=this.querySelector(`:scope > ${this.constructor.rootSelector}`),!!this.root){window.auvyx?.init(this.constructor.component),this._relay=o=>{o.target!==this.root||!this.constructor.relayNative&&!(o instanceof CustomEvent)||(o.stopPropagation(),this._silent||this.emit(o.type,{value:this.value}))};for(const o of this.constructor.relayed)this.root.addEventListener(o,this._relay);this.attach?.(),e!==void 0?this.restore(e):this.applyInitial()}}teardown(){if(this.detach?.(),!!this.root){for(const e of this.constructor.relayed)this.root.removeEventListener(e,this._relay);this.root._destroy?.(),delete this.root.dataset[`${this.constructor.component.replace(/-(\w)/g,(e,o)=>o.toUpperCase())}Initialized`],this.root=null}}applyInitial(){const e=this._pending!==void 0?this._pending:this.getAttribute("value");this._pending=void 0,e!==null&&(this.value=e)}snapshot(){return this.value}restore(e){e!==null&&(this.value=e)}attributeChangedCallback(e,o,s){e==="value"&&this.root&&s!==null&&s!==this.value&&(this.value=s)}defer(e){return this.root?!1:(this._pending=e,!0)}silently(e){this._silent=!0;try{e()}finally{this._silent=!1}}emit(e,o){this.dispatchEvent(new CustomEvent(e,{detail:o,bubbles:!0}))}reportValue(){const e=this.value;JSON.stringify(e)!==JSON.stringify(this._last)&&(this._last=e,this._silent||this.emit("change",{value:e}))}},a=e=>e.dataset.value??(e.id||String([...e.parentElement.children].filter(o=>o.localName==="details").indexOf(e))),m=class extends l{static component="accordion";static rootSelector=".accordion";static relayed=[];get items(){return this.root?[...this.root.querySelectorAll(":scope > details")]:[]}get multiple(){return this.root?.hasAttribute("data-multiple")??!1}attach(){this._last=this.value,this._onToggle=e=>{e.target.parentElement===this.root&&this.reportValue()},this.root.addEventListener("toggle",this._onToggle,!0)}detach(){this.root?.removeEventListener("toggle",this._onToggle,!0)}get value(){const e=this.items.filter(o=>o.open).map(a);return this.multiple?e:e[0]??null}set value(e){if(this.defer(e))return;const o=new Set((Array.isArray(e)?e:[e]).filter(s=>s!=null).map(String));for(const s of this.items)s.open=o.has(a(s));this._last=this.value}};customElements.get("auvyx-accordion")||customElements.define("auvyx-accordion",m)})();
|
package/dist/wc/combobox.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @auvyx/ui v0.1.
|
|
2
|
-
window.basecoat||(()=>{const b={};let x=null;const c=(s,l,p)=>{const f=typeof l=="object"?l:{selector:l,init:p};b[s]={selector:f.selector,init:f.init,refresh:f.refresh}},d=(s,l)=>{const p=b[l];if(p)try{p.init(s),s.hasAttribute(`data-${l}-initialized`)&&(s.dataset.basecoatComponent=l)}catch(f){if(console.error(`Failed to initialize ${l}:`,f),typeof s._destroy=="function")try{s._destroy()}catch(v){console.error(`Failed to clean up ${l} after initialization error:`,v)}delete s._destroy,s.removeAttribute(`data-${l}-initialized`),delete s.dataset.basecoatComponent}},E=s=>{if(!s||s.nodeType!==Node.ELEMENT_NODE)return;const l=s.dataset?.basecoatComponent;if(typeof s._destroy=="function")try{s._destroy()}catch(p){console.error("Failed to destroy Basecoat component:",p)}delete s._destroy,l&&s.removeAttribute(`data-${l}-initialized`),delete s.dataset.basecoatComponent},T=s=>{s.nodeType===Node.ELEMENT_NODE&&(s.isConnected||(s.dataset?.basecoatComponent&&E(s),s.querySelectorAll("[data-basecoat-component]").forEach(E)))},q=s=>Array.from(new Set(s)),A=(s,l,p=!1)=>{const f=Array.from(document.querySelectorAll(l));return p&&f.push(...document.querySelectorAll(`[data-basecoat-component="${s}"]`)),q(f)},w=(s={})=>{const l=s.force===!0;Object.entries(b).forEach(([p,{selector:f}])=>{A(p,f,l).forEach(v=>{const S=v.dataset?.basecoatComponent===p;l&&E(v),(S||v.matches(f))&&d(v,p)})})},B=s=>{s.nodeType===Node.ELEMENT_NODE&&Object.entries(b).forEach(([l,{selector:p}])=>{s.matches(p)&&d(s,l),s.querySelectorAll(p).forEach(f=>d(f,l))})},g=s=>{if(!s)return;if(typeof s.refresh=="function"){s.refresh();return}const l=s.dataset?.basecoatComponent,p=l?b[l]:null;p?.refresh&&p.refresh(s)},L=()=>{x||(x=new MutationObserver(s=>{s.forEach(l=>{l.addedNodes.forEach(B),l.removedNodes.forEach(T)})}),x.observe(document.body,{childList:!0,subtree:!0}))},I=()=>{x&&(x.disconnect(),x=null)},D=(s,l={})=>{const p=b[s];if(!p){console.warn(`Component '${s}' not found in registry`);return}const f=l.force===!0;A(s,p.selector,f).forEach(v=>{const S=v.dataset?.basecoatComponent===s;f&&E(v),(S||v.matches(p.selector))&&d(v,s)})},N=(s={})=>{w(s)},_=s=>{const l=s==="dark";document.documentElement.classList.toggle("dark",l);try{localStorage.setItem("themeMode",l?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:l?"dark":"light"}}))},O=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:c,init:D,initAll:N,refresh:g,start:L,stop:I,theme:{get:O,set:_,toggle:()=>_(O()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{w(),L()})})(),(()=>{const b=new WeakMap,x=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"),r=e.querySelector(':scope > button[aria-haspopup="listbox"]'),o=r||e.querySelector(':scope > .input-group button[aria-haspopup="listbox"]'),a=e.querySelector("[data-clear]"),h=r?.querySelector("[data-value]")||(r?.matches("[data-value]")?r:null),y=t?t.querySelector('[role="listbox"]'):null,k=e.querySelector(':scope > input[type="hidden"]');return{input:i,chips:n,trigger:o,clearButton:a,valueTarget:h,popover:t,listbox:y,hiddenInput:k}},c=(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),x(e)},d=e=>e.dataset.value??e.textContent.trim(),E=e=>e.dataset.label||e.textContent.trim(),T=e=>e.dataset.format==="object"?"object":"value",q=e=>e.getAttribute("aria-disabled")==="true",A=e=>({value:d(e),label:E(e)}),w=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},B=e=>{const t=Array.from(e.querySelectorAll('[role="option"]'));return{allOptions:t,options:t.filter(i=>!q(i))}},g=e=>Array.from(e.selected.values()),L=e=>e.isMultiple?g(e).map(t=>t.value):g(e)[0]?.value||"",I=e=>e.isMultiple?g(e):g(e)[0]||null,D=e=>{const t=g(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]||""},N=(e,t,i)=>{if(i.isMultiple){let o=[];try{o=JSON.parse(e||"[]")}catch{o=[]}return Array.isArray(o)?o.map(a=>{const h=w(i.format==="object"?a:{value:a,label:i.selected.get(String(a))?.label??a});if(!h)return null;const y=i.options.find(k=>d(k)===h.value);return y?A(y):h}).filter(Boolean):[]}if(i.format==="object")try{const o=w(JSON.parse(e||"null"));if(!o)return[];const a=i.options.find(h=>d(h)===o.value);return[a?A(a):o]}catch{return[]}const n=e||"";if(!n)return[];const r=i.options.find(o=>d(o)===n);return[r?A(r):{value:n,label:i.selected.get(n)?.label||t||n}]},_=(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)},O=(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")},s=e=>{e.popover.dataset.empty=String(e.visibleOptions.length===0)},l=(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(o=>o.getAttribute("aria-hidden")!=="true"),t&&n&&e.visibleOptions.includes(n)?O(e,e.options.indexOf(n)):O(e,e.autoHighlight&&e.visibleOptions.length>0?e.options.indexOf(e.visibleOptions[0]):-1),s(e);return}const r=(i??e.input.value).trim().toLowerCase();e.allOptions.forEach(o=>{if(o.hasAttribute("data-force")){o.setAttribute("aria-hidden","false"),e.options.includes(o)&&e.visibleOptions.push(o);return}const a=(o.dataset.filter||o.dataset.label||o.textContent).trim().toLowerCase(),h=(o.dataset.keywords||"").toLowerCase().split(/[\s,]+/).filter(Boolean),y=!r||a.includes(r)||h.some(k=>k.includes(r));o.setAttribute("aria-hidden",String(!y)),y&&e.options.includes(o)&&e.visibleOptions.push(o)}),t&&n&&e.visibleOptions.includes(n)?O(e,e.options.indexOf(n)):O(e,e.autoHighlight&&e.visibleOptions.length>0?e.options.indexOf(e.visibleOptions[0]):-1),s(e)},p=e=>{const t=b.get(e);t.chips&&(t.chips.querySelectorAll(".combobox-chip").forEach(i=>i.remove()),g(t).forEach(i=>{const n=document.createElement("span");n.className="combobox-chip",n.dataset.value=i.value;const r=document.createElement("span");r.textContent=i.label;const o=document.createElement("button");o.type="button",o.className="combobox-chip-remove btn",o.dataset.variant="ghost",o.dataset.size="icon-xs",o.setAttribute("aria-label",`Remove ${i.label}`),o.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>',o.addEventListener("click",a=>{a.stopPropagation(),e.deselect(i.value),t.input.focus()}),n.appendChild(r),n.appendChild(o),t.chips.insertBefore(n,t.input)}))},f=e=>{if(!e.valueTarget)return;const t=g(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=g(e).length===0&&e.input.value==="")},S=e=>{e.options.forEach(t=>{e.selected.has(d(t))?t.setAttribute("aria-selected","true"):t.removeAttribute("aria-selected")})},C=(e,t,i=!0)=>{const n=b.get(e),r=(Array.isArray(t)?t:[t]).map(w).filter(Boolean);n.selected.clear(),n.isMultiple?(r.forEach(o=>n.selected.set(o.value,o)),n.input.value=""):r[0]?(n.selected.set(r[0].value,r[0]),n.input.value=n.valueTarget?"":r[0].label):n.input.value="",n.hiddenInput.value=D(n),S(n),n.isMultiple&&(p(e),l(n,{preserveActive:!0})),f(n),v(n),i&&e.dispatchEvent(new CustomEvent("change",{detail:{value:L(n),selected:I(n)},bubbles:!0}))},R=(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"),O(e,-1),t&&(e.skipOpenOnFocus=!0,e.input.focus(),requestAnimationFrame(()=>{e.skipOpenOnFocus=!1})))},M=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=g(e)[0];e.valueTarget&&(e.input.value="");const n=!e.isMultiple&&i&&e.input.value===i.label?"":void 0;l(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()},j=e=>{const t=b.get(e);if(!t)return;let i=x(e);if(!i.input||!i.popover||!i.listbox||!i.hiddenInput){const a=[];i.input||a.push("input"),i.popover||a.push("popover"),i.listbox||a.push("listbox"),i.hiddenInput||a.push("hidden input"),console.error(`Combobox refresh failed. Missing element(s): ${a.join(", ")}`,e);return}i=c(e,i);const n=i.hiddenInput.value,r=i.input.value;Object.assign(t,i,B(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=T(e);const o=N(n,r,t);if(o.length>0)C(e,o,!1);else{const a=t.options.filter(h=>h.getAttribute("aria-selected")==="true").map(A);a.length>0?C(e,t.isMultiple?a:a[0],!1):t.isMultiple?C(e,[],!1):(t.input.value=r,t.selected.clear(),t.hiddenInput.value="",S(t),l(t,{preserveActive:!0}))}f(t),v(t)},V=(e,t)=>{if(t&&typeof t=="object"){const r=w(t);if(!r)return null;const o=e.options.find(a=>d(a)===r.value);return o?A(o):r}const i=e.options.find(r=>d(r)===t);return i?A(i):e.selected.get(String(t))||null},J=(e,t)=>{const i=b.get(e),n=V(i,t);n&&(i.isMultiple?(C(e,[...g(i).filter(r=>r.value!==n.value),n]),i.closeOnSelect&&e.close(!0)):(C(e,n),e.close(!i.trigger),i.trigger?.focus()))},U=(e,t)=>{const i=b.get(e);if(!i.isMultiple)return;const n=String(t);i.selected.has(n)&&C(e,g(i).filter(r=>r.value!==n))},z=e=>{const t=b.get(e);C(e,[],!0),t.input.value="",l(t),v(t),t.popover.getAttribute("aria-hidden")==="false"&&t.input.focus()},K=(e,t)=>{const i=b.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 h=g(i),y=h[h.length-1];y&&t.deselect(y.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(),M(i)),i.popover.getAttribute("aria-hidden")==="true")return;if(e.key==="Enter"){if(i.activeIndex>-1){e.preventDefault();const h=i.options[i.activeIndex];i.isMultiple?t.toggle(d(h)):t.select(d(h))}return}if(!["ArrowDown","ArrowUp","Home","End"].includes(e.key)||i.visibleOptions.length===0)return;e.preventDefault();const r=i.activeIndex>-1?i.visibleOptions.indexOf(i.options[i.activeIndex]):-1;let o=r;e.key==="ArrowDown"&&(o=Math.min(r+1,i.visibleOptions.length-1)),e.key==="ArrowUp"&&(o=r<=0?0:r-1),e.key==="Home"&&(o=0),e.key==="End"&&(o=i.visibleOptions.length-1);const a=i.visibleOptions[o];O(i,i.options.indexOf(a)),_(i,a)},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(b.set(e,t),e.refresh=()=>j(e),j(e),!t.input||!t.popover||!t.listbox||!t.hiddenInput){b.delete(e),delete e.refresh;return}e.close=(u=!1)=>R(t,u),e.select=u=>J(e,u),e.selectByValue=e.select,e.setValue=u=>{const H=(t.isMultiple?Array.isArray(u)?u:u==null?[]:[u]:[u]).map(P=>V(t,P)||w(P)).filter(Boolean);C(e,t.isMultiple?H:H[0])},t.isMultiple&&(e.deselect=u=>U(e,u),e.toggle=u=>{const m=V(t,u);m&&(t.selected.has(m.value)?e.deselect(m.value):e.select(m))},e.selectAll=()=>C(e,t.options.map(A)),e.selectNone=()=>C(e,[]));const i=()=>{t.skipOpenOnFocus||M(t)},n=()=>M(t),r=()=>{M(t),l(t),t.isMultiple||(t.hiddenInput.value="",t.selected.clear(),S(t),f(t),v(t))},o=()=>{t.popover.getAttribute("aria-hidden")==="false"?e.close(!1):M(t)},a=u=>{u.preventDefault(),u.stopPropagation(),z(e)},h=u=>K(u,e),y=u=>{const m=u.target.closest('[role="option"]');m&&t.visibleOptions.includes(m)&&O(t,t.options.indexOf(m))},k=u=>{const m=u.target.closest('[role="option"]');!m||!t.options.includes(m)||(t.isMultiple?e.toggle(d(m)):e.select(d(m)),t.isMultiple&&!t.closeOnSelect&&t.input.focus())},$=u=>{e.contains(u.target)||e.close(!1)},F=u=>{e.contains(u.detail.source)||e.close(!1)};t.input.addEventListener("focus",i),t.input.addEventListener("click",n),t.input.addEventListener("input",r),t.input.addEventListener("keydown",h),t.trigger?.addEventListener("click",o),t.clearButton?.addEventListener("click",a),t.listbox.addEventListener("mousemove",y),t.listbox.addEventListener("click",k),document.addEventListener("click",$),document.addEventListener("basecoat:popover",F),e._destroy=()=>{t.input.removeEventListener("focus",i),t.input.removeEventListener("click",n),t.input.removeEventListener("input",r),t.input.removeEventListener("keydown",h),t.trigger?.removeEventListener("click",o),t.clearButton?.removeEventListener("click",a),t.listbox.removeEventListener("mousemove",y),t.listbox.removeEventListener("click",k),document.removeEventListener("click",$),document.removeEventListener("basecoat:popover",F),t.chips?.querySelectorAll(".combobox-chip").forEach(u=>u.remove()),b.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=()=>z(e),Object.defineProperty(e,"value",{configurable:!0,get:()=>L(t),set:u=>e.setValue(u)}),Object.defineProperty(e,"selected",{configurable:!0,get:()=>I(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:j})})(),(()=>{var b=class extends HTMLElement{static observedAttributes=["value"];static relayed=["change"];static relayNative=!1;connectedCallback(){if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>this.isConnected&&this.connectedCallback(),{once:!0});return}this.setup(),this._children=new MutationObserver(()=>{if(this.querySelector(`:scope > ${this.constructor.rootSelector}`)===this.root)return;const c=this.root?this.snapshot():void 0;this.teardown(),this.setup(c)}),this._children.observe(this,{childList:!0})}disconnectedCallback(){this._children?.disconnect(),this.teardown()}setup(c){if(this.root=this.querySelector(`:scope > ${this.constructor.rootSelector}`),!!this.root){window.basecoat?.init(this.constructor.component),this._relay=d=>{d.target!==this.root||!this.constructor.relayNative&&!(d instanceof CustomEvent)||(d.stopPropagation(),this._silent||this.emit(d.type,{value:this.value}))};for(const d of this.constructor.relayed)this.root.addEventListener(d,this._relay);this.attach?.(),c!==void 0?this.restore(c):this.applyInitial()}}teardown(){if(this.detach?.(),!!this.root){for(const c of this.constructor.relayed)this.root.removeEventListener(c,this._relay);this.root._destroy?.(),delete this.root.dataset[`${this.constructor.component.replace(/-(\w)/g,(c,d)=>d.toUpperCase())}Initialized`],this.root=null}}applyInitial(){const c=this._pending!==void 0?this._pending:this.getAttribute("value");this._pending=void 0,c!==null&&(this.value=c)}snapshot(){return this.value}restore(c){c!==null&&(this.value=c)}attributeChangedCallback(c,d,E){c==="value"&&this.root&&E!==null&&E!==this.value&&(this.value=E)}defer(c){return this.root?!1:(this._pending=c,!0)}silently(c){this._silent=!0;try{c()}finally{this._silent=!1}}emit(c,d){this.dispatchEvent(new CustomEvent(c,{detail:d,bubbles:!0}))}reportValue(){const c=this.value;JSON.stringify(c)!==JSON.stringify(this._last)&&(this._last=c,this._silent||this.emit("change",{value:c}))}},x=class extends b{static component="combobox";static rootSelector=".combobox";get value(){return this.root?this.root.value:null}set value(c){this.defer(c)||this.root.setValue&&this.silently(()=>this.root.setValue(c))}};customElements.get("auvyx-combobox")||customElements.define("auvyx-combobox",x)})();
|
|
1
|
+
/*! @auvyx/ui v0.1.2 | MIT License | see LICENSE */
|
|
2
|
+
window.auvyx||(()=>{const v={};let x=null;const c=(s,l,p)=>{const f=typeof l=="object"?l:{selector:l,init:p};v[s]={selector:f.selector,init:f.init,refresh:f.refresh}},d=(s,l)=>{const p=v[l];if(p)try{p.init(s),s.hasAttribute(`data-${l}-initialized`)&&(s.dataset.basecoatComponent=l)}catch(f){if(console.error(`Failed to initialize ${l}:`,f),typeof s._destroy=="function")try{s._destroy()}catch(b){console.error(`Failed to clean up ${l} after initialization error:`,b)}delete s._destroy,s.removeAttribute(`data-${l}-initialized`),delete s.dataset.basecoatComponent}},E=s=>{if(!s||s.nodeType!==Node.ELEMENT_NODE)return;const l=s.dataset?.basecoatComponent;if(typeof s._destroy=="function")try{s._destroy()}catch(p){console.error("Failed to destroy component:",p)}delete s._destroy,l&&s.removeAttribute(`data-${l}-initialized`),delete s.dataset.basecoatComponent},T=s=>{s.nodeType===Node.ELEMENT_NODE&&(s.isConnected||(s.dataset?.basecoatComponent&&E(s),s.querySelectorAll("[data-basecoat-component]").forEach(E)))},q=s=>Array.from(new Set(s)),A=(s,l,p=!1)=>{const f=Array.from(document.querySelectorAll(l));return p&&f.push(...document.querySelectorAll(`[data-basecoat-component="${s}"]`)),q(f)},w=(s={})=>{const l=s.force===!0;Object.entries(v).forEach(([p,{selector:f}])=>{A(p,f,l).forEach(b=>{const S=b.dataset?.basecoatComponent===p;l&&E(b),(S||b.matches(f))&&d(b,p)})})},B=s=>{s.nodeType===Node.ELEMENT_NODE&&Object.entries(v).forEach(([l,{selector:p}])=>{s.matches(p)&&d(s,l),s.querySelectorAll(p).forEach(f=>d(f,l))})},g=s=>{if(!s)return;if(typeof s.refresh=="function"){s.refresh();return}const l=s.dataset?.basecoatComponent,p=l?v[l]:null;p?.refresh&&p.refresh(s)},L=()=>{x||(x=new MutationObserver(s=>{s.forEach(l=>{l.addedNodes.forEach(B),l.removedNodes.forEach(T)})}),x.observe(document.body,{childList:!0,subtree:!0}))},I=()=>{x&&(x.disconnect(),x=null)},D=(s,l={})=>{const p=v[s];if(!p){console.warn(`Component '${s}' not found in registry`);return}const f=l.force===!0;A(s,p.selector,f).forEach(b=>{const S=b.dataset?.basecoatComponent===s;f&&E(b),(S||b.matches(p.selector))&&d(b,s)})},N=(s={})=>{w(s)},_=s=>{const l=s==="dark";document.documentElement.classList.toggle("dark",l);try{localStorage.setItem("themeMode",l?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:l?"dark":"light"}}))},O=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.auvyx=window.basecoat={register:c,init:D,initAll:N,refresh:g,start:L,stop:I,theme:{get:O,set:_,toggle:()=>_(O()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{w(),L()})})(),(()=>{const v=new WeakMap,x=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"),r=e.querySelector(':scope > button[aria-haspopup="listbox"]'),o=r||e.querySelector(':scope > .input-group button[aria-haspopup="listbox"]'),a=e.querySelector("[data-clear]"),h=r?.querySelector("[data-value]")||(r?.matches("[data-value]")?r:null),y=t?t.querySelector('[role="listbox"]'):null,k=e.querySelector(':scope > input[type="hidden"]');return{input:i,chips:n,trigger:o,clearButton:a,valueTarget:h,popover:t,listbox:y,hiddenInput:k}},c=(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),x(e)},d=e=>e.dataset.value??e.textContent.trim(),E=e=>e.dataset.label||e.textContent.trim(),T=e=>e.dataset.format==="object"?"object":"value",q=e=>e.getAttribute("aria-disabled")==="true",A=e=>({value:d(e),label:E(e)}),w=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},B=e=>{const t=Array.from(e.querySelectorAll('[role="option"]'));return{allOptions:t,options:t.filter(i=>!q(i))}},g=e=>Array.from(e.selected.values()),L=e=>e.isMultiple?g(e).map(t=>t.value):g(e)[0]?.value||"",I=e=>e.isMultiple?g(e):g(e)[0]||null,D=e=>{const t=g(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]||""},N=(e,t,i)=>{if(i.isMultiple){let o=[];try{o=JSON.parse(e||"[]")}catch{o=[]}return Array.isArray(o)?o.map(a=>{const h=w(i.format==="object"?a:{value:a,label:i.selected.get(String(a))?.label??a});if(!h)return null;const y=i.options.find(k=>d(k)===h.value);return y?A(y):h}).filter(Boolean):[]}if(i.format==="object")try{const o=w(JSON.parse(e||"null"));if(!o)return[];const a=i.options.find(h=>d(h)===o.value);return[a?A(a):o]}catch{return[]}const n=e||"";if(!n)return[];const r=i.options.find(o=>d(o)===n);return[r?A(r):{value:n,label:i.selected.get(n)?.label||t||n}]},_=(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)},O=(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")},s=e=>{e.popover.dataset.empty=String(e.visibleOptions.length===0)},l=(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(o=>o.getAttribute("aria-hidden")!=="true"),t&&n&&e.visibleOptions.includes(n)?O(e,e.options.indexOf(n)):O(e,e.autoHighlight&&e.visibleOptions.length>0?e.options.indexOf(e.visibleOptions[0]):-1),s(e);return}const r=(i??e.input.value).trim().toLowerCase();e.allOptions.forEach(o=>{if(o.hasAttribute("data-force")){o.setAttribute("aria-hidden","false"),e.options.includes(o)&&e.visibleOptions.push(o);return}const a=(o.dataset.filter||o.dataset.label||o.textContent).trim().toLowerCase(),h=(o.dataset.keywords||"").toLowerCase().split(/[\s,]+/).filter(Boolean),y=!r||a.includes(r)||h.some(k=>k.includes(r));o.setAttribute("aria-hidden",String(!y)),y&&e.options.includes(o)&&e.visibleOptions.push(o)}),t&&n&&e.visibleOptions.includes(n)?O(e,e.options.indexOf(n)):O(e,e.autoHighlight&&e.visibleOptions.length>0?e.options.indexOf(e.visibleOptions[0]):-1),s(e)},p=e=>{const t=v.get(e);t.chips&&(t.chips.querySelectorAll(".combobox-chip").forEach(i=>i.remove()),g(t).forEach(i=>{const n=document.createElement("span");n.className="combobox-chip",n.dataset.value=i.value;const r=document.createElement("span");r.textContent=i.label;const o=document.createElement("button");o.type="button",o.className="combobox-chip-remove btn",o.dataset.variant="ghost",o.dataset.size="icon-xs",o.setAttribute("aria-label",`Remove ${i.label}`),o.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>',o.addEventListener("click",a=>{a.stopPropagation(),e.deselect(i.value),t.input.focus()}),n.appendChild(r),n.appendChild(o),t.chips.insertBefore(n,t.input)}))},f=e=>{if(!e.valueTarget)return;const t=g(e);e.valueTarget.textContent=e.isMultiple?t.map(i=>i.label).join(", "):t[0]?.label||e.valueTarget.dataset.placeholder||""},b=e=>{e.clearButton&&(e.clearButton.hidden=g(e).length===0&&e.input.value==="")},S=e=>{e.options.forEach(t=>{e.selected.has(d(t))?t.setAttribute("aria-selected","true"):t.removeAttribute("aria-selected")})},C=(e,t,i=!0)=>{const n=v.get(e),r=(Array.isArray(t)?t:[t]).map(w).filter(Boolean);n.selected.clear(),n.isMultiple?(r.forEach(o=>n.selected.set(o.value,o)),n.input.value=""):r[0]?(n.selected.set(r[0].value,r[0]),n.input.value=n.valueTarget?"":r[0].label):n.input.value="",n.hiddenInput.value=D(n),S(n),n.isMultiple&&(p(e),l(n,{preserveActive:!0})),f(n),b(n),i&&e.dispatchEvent(new CustomEvent("change",{detail:{value:L(n),selected:I(n)},bubbles:!0}))},R=(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"),O(e,-1),t&&(e.skipOpenOnFocus=!0,e.input.focus(),requestAnimationFrame(()=>{e.skipOpenOnFocus=!1})))},M=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=g(e)[0];e.valueTarget&&(e.input.value="");const n=!e.isMultiple&&i&&e.input.value===i.label?"":void 0;l(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()},j=e=>{const t=v.get(e);if(!t)return;let i=x(e);if(!i.input||!i.popover||!i.listbox||!i.hiddenInput){const a=[];i.input||a.push("input"),i.popover||a.push("popover"),i.listbox||a.push("listbox"),i.hiddenInput||a.push("hidden input"),console.error(`Combobox refresh failed. Missing element(s): ${a.join(", ")}`,e);return}i=c(e,i);const n=i.hiddenInput.value,r=i.input.value;Object.assign(t,i,B(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=T(e);const o=N(n,r,t);if(o.length>0)C(e,o,!1);else{const a=t.options.filter(h=>h.getAttribute("aria-selected")==="true").map(A);a.length>0?C(e,t.isMultiple?a:a[0],!1):t.isMultiple?C(e,[],!1):(t.input.value=r,t.selected.clear(),t.hiddenInput.value="",S(t),l(t,{preserveActive:!0}))}f(t),b(t)},V=(e,t)=>{if(t&&typeof t=="object"){const r=w(t);if(!r)return null;const o=e.options.find(a=>d(a)===r.value);return o?A(o):r}const i=e.options.find(r=>d(r)===t);return i?A(i):e.selected.get(String(t))||null},J=(e,t)=>{const i=v.get(e),n=V(i,t);n&&(i.isMultiple?(C(e,[...g(i).filter(r=>r.value!==n.value),n]),i.closeOnSelect&&e.close(!0)):(C(e,n),e.close(!i.trigger),i.trigger?.focus()))},U=(e,t)=>{const i=v.get(e);if(!i.isMultiple)return;const n=String(t);i.selected.has(n)&&C(e,g(i).filter(r=>r.value!==n))},z=e=>{const t=v.get(e);C(e,[],!0),t.input.value="",l(t),b(t),t.popover.getAttribute("aria-hidden")==="false"&&t.input.focus()},K=(e,t)=>{const i=v.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 h=g(i),y=h[h.length-1];y&&t.deselect(y.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(),M(i)),i.popover.getAttribute("aria-hidden")==="true")return;if(e.key==="Enter"){if(i.activeIndex>-1){e.preventDefault();const h=i.options[i.activeIndex];i.isMultiple?t.toggle(d(h)):t.select(d(h))}return}if(!["ArrowDown","ArrowUp","Home","End"].includes(e.key)||i.visibleOptions.length===0)return;e.preventDefault();const r=i.activeIndex>-1?i.visibleOptions.indexOf(i.options[i.activeIndex]):-1;let o=r;e.key==="ArrowDown"&&(o=Math.min(r+1,i.visibleOptions.length-1)),e.key==="ArrowUp"&&(o=r<=0?0:r-1),e.key==="Home"&&(o=0),e.key==="End"&&(o=i.visibleOptions.length-1);const a=i.visibleOptions[o];O(i,i.options.indexOf(a)),_(i,a)},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(v.set(e,t),e.refresh=()=>j(e),j(e),!t.input||!t.popover||!t.listbox||!t.hiddenInput){v.delete(e),delete e.refresh;return}e.close=(u=!1)=>R(t,u),e.select=u=>J(e,u),e.selectByValue=e.select,e.setValue=u=>{const H=(t.isMultiple?Array.isArray(u)?u:u==null?[]:[u]:[u]).map(P=>V(t,P)||w(P)).filter(Boolean);C(e,t.isMultiple?H:H[0])},t.isMultiple&&(e.deselect=u=>U(e,u),e.toggle=u=>{const m=V(t,u);m&&(t.selected.has(m.value)?e.deselect(m.value):e.select(m))},e.selectAll=()=>C(e,t.options.map(A)),e.selectNone=()=>C(e,[]));const i=()=>{t.skipOpenOnFocus||M(t)},n=()=>M(t),r=()=>{M(t),l(t),t.isMultiple||(t.hiddenInput.value="",t.selected.clear(),S(t),f(t),b(t))},o=()=>{t.popover.getAttribute("aria-hidden")==="false"?e.close(!1):M(t)},a=u=>{u.preventDefault(),u.stopPropagation(),z(e)},h=u=>K(u,e),y=u=>{const m=u.target.closest('[role="option"]');m&&t.visibleOptions.includes(m)&&O(t,t.options.indexOf(m))},k=u=>{const m=u.target.closest('[role="option"]');!m||!t.options.includes(m)||(t.isMultiple?e.toggle(d(m)):e.select(d(m)),t.isMultiple&&!t.closeOnSelect&&t.input.focus())},$=u=>{e.contains(u.target)||e.close(!1)},F=u=>{e.contains(u.detail.source)||e.close(!1)};t.input.addEventListener("focus",i),t.input.addEventListener("click",n),t.input.addEventListener("input",r),t.input.addEventListener("keydown",h),t.trigger?.addEventListener("click",o),t.clearButton?.addEventListener("click",a),t.listbox.addEventListener("mousemove",y),t.listbox.addEventListener("click",k),document.addEventListener("click",$),document.addEventListener("basecoat:popover",F),e._destroy=()=>{t.input.removeEventListener("focus",i),t.input.removeEventListener("click",n),t.input.removeEventListener("input",r),t.input.removeEventListener("keydown",h),t.trigger?.removeEventListener("click",o),t.clearButton?.removeEventListener("click",a),t.listbox.removeEventListener("mousemove",y),t.listbox.removeEventListener("click",k),document.removeEventListener("click",$),document.removeEventListener("basecoat:popover",F),t.chips?.querySelectorAll(".combobox-chip").forEach(u=>u.remove()),v.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=()=>z(e),Object.defineProperty(e,"value",{configurable:!0,get:()=>L(t),set:u=>e.setValue(u)}),Object.defineProperty(e,"selected",{configurable:!0,get:()=>I(t)}),e.dataset.comboboxInitialized="true",e.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.auvyx&&window.auvyx.register("combobox",{selector:".combobox:not([data-combobox-initialized])",init:W,refresh:j})})(),(()=>{var v=class extends HTMLElement{static observedAttributes=["value"];static relayed=["change"];static relayNative=!1;connectedCallback(){if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>this.isConnected&&this.connectedCallback(),{once:!0});return}this.setup(),this._children=new MutationObserver(()=>{if(this.querySelector(`:scope > ${this.constructor.rootSelector}`)===this.root)return;const c=this.root?this.snapshot():void 0;this.teardown(),this.setup(c)}),this._children.observe(this,{childList:!0})}disconnectedCallback(){this._children?.disconnect(),this.teardown()}setup(c){if(this.root=this.querySelector(`:scope > ${this.constructor.rootSelector}`),!!this.root){window.auvyx?.init(this.constructor.component),this._relay=d=>{d.target!==this.root||!this.constructor.relayNative&&!(d instanceof CustomEvent)||(d.stopPropagation(),this._silent||this.emit(d.type,{value:this.value}))};for(const d of this.constructor.relayed)this.root.addEventListener(d,this._relay);this.attach?.(),c!==void 0?this.restore(c):this.applyInitial()}}teardown(){if(this.detach?.(),!!this.root){for(const c of this.constructor.relayed)this.root.removeEventListener(c,this._relay);this.root._destroy?.(),delete this.root.dataset[`${this.constructor.component.replace(/-(\w)/g,(c,d)=>d.toUpperCase())}Initialized`],this.root=null}}applyInitial(){const c=this._pending!==void 0?this._pending:this.getAttribute("value");this._pending=void 0,c!==null&&(this.value=c)}snapshot(){return this.value}restore(c){c!==null&&(this.value=c)}attributeChangedCallback(c,d,E){c==="value"&&this.root&&E!==null&&E!==this.value&&(this.value=E)}defer(c){return this.root?!1:(this._pending=c,!0)}silently(c){this._silent=!0;try{c()}finally{this._silent=!1}}emit(c,d){this.dispatchEvent(new CustomEvent(c,{detail:d,bubbles:!0}))}reportValue(){const c=this.value;JSON.stringify(c)!==JSON.stringify(this._last)&&(this._last=c,this._silent||this.emit("change",{value:c}))}},x=class extends v{static component="combobox";static rootSelector=".combobox";get value(){return this.root?this.root.value:null}set value(c){this.defer(c)||this.root.setValue&&this.silently(()=>this.root.setValue(c))}};customElements.get("auvyx-combobox")||customElements.define("auvyx-combobox",x)})();
|
package/dist/wc/command.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @auvyx/ui v0.1.
|
|
2
|
-
window.
|
|
1
|
+
/*! @auvyx/ui v0.1.2 | MIT License | see LICENSE */
|
|
2
|
+
window.auvyx||(()=>{const l={};let h=null;const n=(t,o,r)=>{const d=typeof o=="object"?o:{selector:o,init:r};l[t]={selector:d.selector,init:d.init,refresh:d.refresh}},a=(t,o)=>{const r=l[o];if(r)try{r.init(t),t.hasAttribute(`data-${o}-initialized`)&&(t.dataset.basecoatComponent=o)}catch(d){if(console.error(`Failed to initialize ${o}:`,d),typeof t._destroy=="function")try{t._destroy()}catch(m){console.error(`Failed to clean up ${o} after initialization error:`,m)}delete t._destroy,t.removeAttribute(`data-${o}-initialized`),delete t.dataset.basecoatComponent}},u=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 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&&u(t),t.querySelectorAll("[data-basecoat-component]").forEach(u)))},g=t=>Array.from(new Set(t)),y=(t,o,r=!1)=>{const d=Array.from(document.querySelectorAll(o));return r&&d.push(...document.querySelectorAll(`[data-basecoat-component="${t}"]`)),g(d)},E=(t={})=>{const o=t.force===!0;Object.entries(l).forEach(([r,{selector:d}])=>{y(r,d,o).forEach(m=>{const C=m.dataset?.basecoatComponent===r;o&&u(m),(C||m.matches(d))&&a(m,r)})})},I=t=>{t.nodeType===Node.ELEMENT_NODE&&Object.entries(l).forEach(([o,{selector:r}])=>{t.matches(r)&&a(t,o),t.querySelectorAll(r).forEach(d=>a(d,o))})},e=t=>{if(!t)return;if(typeof t.refresh=="function"){t.refresh();return}const o=t.dataset?.basecoatComponent,r=o?l[o]:null;r?.refresh&&r.refresh(t)},i=()=>{h||(h=new MutationObserver(t=>{t.forEach(o=>{o.addedNodes.forEach(I),o.removedNodes.forEach(f)})}),h.observe(document.body,{childList:!0,subtree:!0}))},s=()=>{h&&(h.disconnect(),h=null)},c=(t,o={})=>{const r=l[t];if(!r){console.warn(`Component '${t}' not found in registry`);return}const d=o.force===!0;y(t,r.selector,d).forEach(m=>{const C=m.dataset?.basecoatComponent===t;d&&u(m),(C||m.matches(r.selector))&&a(m,t)})},v=(t={})=>{E(t)},b=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"}}))},p=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.auvyx=window.basecoat={register:n,init:c,initAll:v,refresh:e,start:i,stop:s,theme:{get:p,set:b,toggle:()=>b(p()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{E(),i()})})(),(()=>{const l=new WeakMap,h=e=>e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true"||e.getAttribute("data-disabled")==="true",n=e=>({input:e.querySelector("header input"),menu:e.querySelector('[role="menu"]')}),a=e=>{const i=Array.from(e.querySelectorAll('[role="menuitem"]'));return{allItems:i,items:i.filter(s=>!h(s))}},u=(e,i)=>{const s=i.getBoundingClientRect(),c=e.menu.getBoundingClientRect();s.top<c.top?e.menu.scrollTop-=c.top-s.top:s.bottom>c.bottom&&(e.menu.scrollTop+=s.bottom-c.bottom)},f=(e,i)=>{if(e.activeIndex>-1&&e.items[e.activeIndex]&&e.items[e.activeIndex].classList.remove("active"),e.activeIndex=i,e.activeIndex>-1){const s=e.items[e.activeIndex];s.classList.add("active"),s.id?e.input.setAttribute("aria-activedescendant",s.id):e.input.removeAttribute("aria-activedescendant")}else e.input.removeAttribute("aria-activedescendant")},g=e=>{if(e.manualFilter){f(e,-1),e.visibleItems=e.items.filter(s=>s.getAttribute("aria-hidden")!=="true"),e.visibleItems.length>0&&f(e,e.items.indexOf(e.visibleItems[0]));return}const i=e.input.value.trim().toLowerCase();f(e,-1),e.visibleItems=[],e.allItems.forEach(s=>{if(s.hasAttribute("data-force")){s.setAttribute("aria-hidden","false"),e.items.includes(s)&&e.visibleItems.push(s);return}const c=(s.dataset.filter||s.textContent).trim().toLowerCase(),b=(s.dataset.keywords||"").toLowerCase().split(/[\s,]+/).filter(Boolean).some(t=>t.includes(i)),p=c.includes(i)||b;s.setAttribute("aria-hidden",String(!p)),p&&e.items.includes(s)&&e.visibleItems.push(s)}),e.visibleItems.length>0&&(f(e,e.items.indexOf(e.visibleItems[0])),u(e,e.visibleItems[0]))},y=e=>{const i=l.get(e);if(!i)return;const s=n(e);if(!s.input||!s.menu){const c=[];s.input||c.push("input"),s.menu||c.push("menu"),console.error(`Command component refresh failed. Missing element(s): ${c.join(", ")}`,e);return}Object.assign(i,s,a(s.menu)),i.manualFilter=e.dataset.filter==="manual",g(i)},E=(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 s=i.activeIndex>-1?i.visibleItems.indexOf(i.items[i.activeIndex]):-1;let c=s;if(e.key==="ArrowDown"&&s<i.visibleItems.length-1&&(c=s+1),e.key==="ArrowUp"&&(c=s>0?s-1:0),e.key==="Home"&&(c=0),e.key==="End"&&(c=i.visibleItems.length-1),c!==s){const v=i.visibleItems[c];f(i,i.items.indexOf(v)),u(i,v)}},I=e=>{if(e.dataset.commandInitialized)return;const i={activeIndex:-1,allItems:[],items:[],visibleItems:[],manualFilter:!1};l.set(e,i),e.refresh=()=>y(e);const s=n(e);if(!s.input||!s.menu){const t=[];s.input||t.push("input"),s.menu||t.push("menu"),console.error(`Command component initialization failed. Missing element(s): ${t.join(", ")}`,e),l.delete(e),delete e.refresh;return}Object.assign(i,s);const c=()=>g(i),v=t=>E(t,i),b=t=>{const o=t.target.closest('[role="menuitem"]');if(o&&i.visibleItems.includes(o)){const r=i.items.indexOf(o);r!==i.activeIndex&&f(i,r)}},p=t=>{const o=t.target.closest('[role="menuitem"]');if(o&&i.visibleItems.includes(o)){const r=e.closest("dialog.command-dialog");r&&!o.hasAttribute("data-keep-command-open")&&r.close()}};i.input.addEventListener("input",c),i.input.addEventListener("keydown",v),i.menu.addEventListener("mousemove",b),i.menu.addEventListener("click",p),e._destroy=()=>{i.input.removeEventListener("input",c),i.input.removeEventListener("keydown",v),i.menu.removeEventListener("mousemove",b),i.menu.removeEventListener("click",p),l.delete(e),delete e.refresh},y(e),e.dataset.commandInitialized="true",e.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.auvyx&&window.auvyx.register("command",{selector:".command:not([data-command-initialized])",init:I,refresh:y})})(),(()=>{var l=class extends HTMLElement{static observedAttributes=["value"];static relayed=["change"];static relayNative=!1;connectedCallback(){if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>this.isConnected&&this.connectedCallback(),{once:!0});return}this.setup(),this._children=new MutationObserver(()=>{if(this.querySelector(`:scope > ${this.constructor.rootSelector}`)===this.root)return;const n=this.root?this.snapshot():void 0;this.teardown(),this.setup(n)}),this._children.observe(this,{childList:!0})}disconnectedCallback(){this._children?.disconnect(),this.teardown()}setup(n){if(this.root=this.querySelector(`:scope > ${this.constructor.rootSelector}`),!!this.root){window.auvyx?.init(this.constructor.component),this._relay=a=>{a.target!==this.root||!this.constructor.relayNative&&!(a instanceof CustomEvent)||(a.stopPropagation(),this._silent||this.emit(a.type,{value:this.value}))};for(const a of this.constructor.relayed)this.root.addEventListener(a,this._relay);this.attach?.(),n!==void 0?this.restore(n):this.applyInitial()}}teardown(){if(this.detach?.(),!!this.root){for(const n of this.constructor.relayed)this.root.removeEventListener(n,this._relay);this.root._destroy?.(),delete this.root.dataset[`${this.constructor.component.replace(/-(\w)/g,(n,a)=>a.toUpperCase())}Initialized`],this.root=null}}applyInitial(){const n=this._pending!==void 0?this._pending:this.getAttribute("value");this._pending=void 0,n!==null&&(this.value=n)}snapshot(){return this.value}restore(n){n!==null&&(this.value=n)}attributeChangedCallback(n,a,u){n==="value"&&this.root&&u!==null&&u!==this.value&&(this.value=u)}defer(n){return this.root?!1:(this._pending=n,!0)}silently(n){this._silent=!0;try{n()}finally{this._silent=!1}}emit(n,a){this.dispatchEvent(new CustomEvent(n,{detail:a,bubbles:!0}))}reportValue(){const n=this.value;JSON.stringify(n)!==JSON.stringify(this._last)&&(this._last=n,this._silent||this.emit("change",{value:n}))}},h=class extends l{static component="command";static rootSelector=".command";static relayed=[];static observedAttributes=[];attach(){this._onClick=n=>{const a=n.target.closest('[role="menuitem"]');!a||!this.root.contains(a)||a.matches('[aria-disabled="true"], [data-disabled="true"], [disabled]')||this.emit("select",{value:a.dataset.value??a.textContent.trim()})},this.root.addEventListener("click",this._onClick)}detach(){this.root?.removeEventListener("click",this._onClick)}applyInitial(){}restore(){}get value(){return null}};customElements.get("auvyx-command")||customElements.define("auvyx-command",h)})();
|
package/dist/wc/drawer.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @auvyx/ui v0.1.
|
|
2
|
-
window.
|
|
1
|
+
/*! @auvyx/ui v0.1.2 | MIT License | see LICENSE */
|
|
2
|
+
window.auvyx||(()=>{const l={};let h=null;const f=(e,s,i)=>{const a=typeof s=="object"?s:{selector:s,init:i};l[e]={selector:a.selector,init:a.init,refresh:a.refresh}},o=(e,s)=>{const i=l[s];if(i)try{i.init(e),e.hasAttribute(`data-${s}-initialized`)&&(e.dataset.basecoatComponent=s)}catch(a){if(console.error(`Failed to initialize ${s}:`,a),typeof e._destroy=="function")try{e._destroy()}catch(d){console.error(`Failed to clean up ${s} after initialization error:`,d)}delete e._destroy,e.removeAttribute(`data-${s}-initialized`),delete e.dataset.basecoatComponent}},t=e=>{if(!e||e.nodeType!==Node.ELEMENT_NODE)return;const s=e.dataset?.basecoatComponent;if(typeof e._destroy=="function")try{e._destroy()}catch(i){console.error("Failed to destroy component:",i)}delete e._destroy,s&&e.removeAttribute(`data-${s}-initialized`),delete e.dataset.basecoatComponent},n=e=>{e.nodeType===Node.ELEMENT_NODE&&(e.isConnected||(e.dataset?.basecoatComponent&&t(e),e.querySelectorAll("[data-basecoat-component]").forEach(t)))},r=e=>Array.from(new Set(e)),p=(e,s,i=!1)=>{const a=Array.from(document.querySelectorAll(s));return i&&a.push(...document.querySelectorAll(`[data-basecoat-component="${e}"]`)),r(a)},u=(e={})=>{const s=e.force===!0;Object.entries(l).forEach(([i,{selector:a}])=>{p(i,a,s).forEach(d=>{const g=d.dataset?.basecoatComponent===i;s&&t(d),(g||d.matches(a))&&o(d,i)})})},v=e=>{e.nodeType===Node.ELEMENT_NODE&&Object.entries(l).forEach(([s,{selector:i}])=>{e.matches(i)&&o(e,s),e.querySelectorAll(i).forEach(a=>o(a,s))})},y=e=>{if(!e)return;if(typeof e.refresh=="function"){e.refresh();return}const s=e.dataset?.basecoatComponent,i=s?l[s]:null;i?.refresh&&i.refresh(e)},c=()=>{h||(h=new MutationObserver(e=>{e.forEach(s=>{s.addedNodes.forEach(v),s.removedNodes.forEach(n)})}),h.observe(document.body,{childList:!0,subtree:!0}))},b=()=>{h&&(h.disconnect(),h=null)},m=(e,s={})=>{const i=l[e];if(!i){console.warn(`Component '${e}' not found in registry`);return}const a=s.force===!0;p(e,i.selector,a).forEach(d=>{const g=d.dataset?.basecoatComponent===e;a&&t(d),(g||d.matches(i.selector))&&o(d,e)})},_=(e={})=>{u(e)},E=e=>{const s=e==="dark";document.documentElement.classList.toggle("dark",s);try{localStorage.setItem("themeMode",s?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:s?"dark":"light"}}))},C=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.auvyx=window.basecoat={register:f,init:m,initAll:_,refresh:y,start:c,stop:b,theme:{get:C,set:E,toggle:()=>E(C()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{u(),c()})})(),(()=>{const l=o=>{if(!o)return 0;const t=o.trim();return t.endsWith("ms")?parseFloat(t)||0:t.endsWith("s")?(parseFloat(t)||0)*1e3:parseFloat(t)||0},h=o=>{if(!o)return 0;const t=getComputedStyle(o),n=t.transitionDuration.split(",").map(l),r=t.transitionDelay.split(",").map(l);return Math.max(0,...n.map((p,u)=>p+(r[u]||r[0]||0)))},f=o=>{if(o.dataset.drawerInitialized)return;const t=o.close.bind(o);let n=!1,r=null;const p=c=>{window.clearTimeout(r),r=null,o.removeAttribute("data-closing"),t(c)};o.close=(c="")=>{if(!o.open||o.dataset.closing)return;const b=o.firstElementChild,m=h(b);if(m===0||window.matchMedia("(prefers-reduced-motion: reduce)").matches){p(c);return}o.dataset.closing="true",r=window.setTimeout(()=>p(c),m+50)};const u=c=>{c.preventDefault(),o.close()},v=c=>{n=c.target===o},y=c=>{n&&c.target===o&&o.close(),n=!1};o.addEventListener("cancel",u),o.addEventListener("pointerdown",v),o.addEventListener("pointerup",y),o._destroy=()=>{window.clearTimeout(r),o.removeEventListener("cancel",u),o.removeEventListener("pointerdown",v),o.removeEventListener("pointerup",y),o.close=t,delete o._destroy},o.dataset.drawerInitialized="true",o.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.auvyx&&window.auvyx.register("drawer",".drawer:not([data-drawer-initialized])",f)})(),(()=>{var l=class extends HTMLElement{static observedAttributes=["value"];static relayed=["change"];static relayNative=!1;connectedCallback(){if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>this.isConnected&&this.connectedCallback(),{once:!0});return}this.setup(),this._children=new MutationObserver(()=>{if(this.querySelector(`:scope > ${this.constructor.rootSelector}`)===this.root)return;const t=this.root?this.snapshot():void 0;this.teardown(),this.setup(t)}),this._children.observe(this,{childList:!0})}disconnectedCallback(){this._children?.disconnect(),this.teardown()}setup(t){if(this.root=this.querySelector(`:scope > ${this.constructor.rootSelector}`),!!this.root){window.auvyx?.init(this.constructor.component),this._relay=n=>{n.target!==this.root||!this.constructor.relayNative&&!(n instanceof CustomEvent)||(n.stopPropagation(),this._silent||this.emit(n.type,{value:this.value}))};for(const n of this.constructor.relayed)this.root.addEventListener(n,this._relay);this.attach?.(),t!==void 0?this.restore(t):this.applyInitial()}}teardown(){if(this.detach?.(),!!this.root){for(const t of this.constructor.relayed)this.root.removeEventListener(t,this._relay);this.root._destroy?.(),delete this.root.dataset[`${this.constructor.component.replace(/-(\w)/g,(t,n)=>n.toUpperCase())}Initialized`],this.root=null}}applyInitial(){const t=this._pending!==void 0?this._pending:this.getAttribute("value");this._pending=void 0,t!==null&&(this.value=t)}snapshot(){return this.value}restore(t){t!==null&&(this.value=t)}attributeChangedCallback(t,n,r){t==="value"&&this.root&&r!==null&&r!==this.value&&(this.value=r)}defer(t){return this.root?!1:(this._pending=t,!0)}silently(t){this._silent=!0;try{t()}finally{this._silent=!1}}emit(t,n){this.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0}))}reportValue(){const t=this.value;JSON.stringify(t)!==JSON.stringify(this._last)&&(this._last=t,this._silent||this.emit("change",{value:t}))}},h=class extends l{static observedAttributes=["open"];static relayed=[];applyInitial(){const t=this._pending!==void 0?this._pending:this.hasAttribute("open")||null;this._pending=void 0,this._lastOpen=this.isOpen(),t!==null&&!!t!==this._lastOpen&&(this.open=t)}attributeChangedCallback(t,n,r){t==="open"&&this.root&&(this.open=r!==null)}snapshot(){return this.isOpen()}restore(t){this._lastOpen=this.isOpen(),this.open=t}get open(){return this.root?this.isOpen():!!this._pending}set open(t){this.defer(!!t)||!!t!==this.isOpen()&&this.setOpen(!!t)}reportOpen(){const t=this.isOpen();t!==this._lastOpen&&(this._lastOpen=t,this.emit("toggle",{open:t}))}};function f(t,n,r,p=!0){const u=new MutationObserver(r);return u.observe(t,{attributes:!0,attributeFilter:n,subtree:p}),()=>u.disconnect()}var o=class extends h{static component="drawer";static rootSelector="dialog.drawer";attach(){this._unwatch=f(this.root,["open"],()=>this.reportOpen(),!1)}detach(){this._unwatch?.()}isOpen(){return!!this.root?.open}setOpen(t){t?this.root.showModal():this.root.close()}};customElements.get("auvyx-drawer")||customElements.define("auvyx-drawer",o)})();
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @auvyx/ui v0.1.
|
|
2
|
-
window.basecoat||(()=>{const l={};let u=null;const g=(r,i,s)=>{const a=typeof i=="object"?i:{selector:i,init:s};l[r]={selector:a.selector,init:a.init,refresh:a.refresh}},v=(r,i)=>{const s=l[i];if(s)try{s.init(r),r.hasAttribute(`data-${i}-initialized`)&&(r.dataset.basecoatComponent=i)}catch(a){if(console.error(`Failed to initialize ${i}:`,a),typeof r._destroy=="function")try{r._destroy()}catch(d){console.error(`Failed to clean up ${i} after initialization error:`,d)}delete r._destroy,r.removeAttribute(`data-${i}-initialized`),delete r.dataset.basecoatComponent}},h=r=>{if(!r||r.nodeType!==Node.ELEMENT_NODE)return;const i=r.dataset?.basecoatComponent;if(typeof r._destroy=="function")try{r._destroy()}catch(s){console.error("Failed to destroy Basecoat component:",s)}delete r._destroy,i&&r.removeAttribute(`data-${i}-initialized`),delete r.dataset.basecoatComponent},t=r=>{r.nodeType===Node.ELEMENT_NODE&&(r.isConnected||(r.dataset?.basecoatComponent&&h(r),r.querySelectorAll("[data-basecoat-component]").forEach(h)))},o=r=>Array.from(new Set(r)),p=(r,i,s=!1)=>{const a=Array.from(document.querySelectorAll(i));return s&&a.push(...document.querySelectorAll(`[data-basecoat-component="${r}"]`)),o(a)},m=(r={})=>{const i=r.force===!0;Object.entries(l).forEach(([s,{selector:a}])=>{p(s,a,i).forEach(d=>{const A=d.dataset?.basecoatComponent===s;i&&h(d),(A||d.matches(a))&&v(d,s)})})},e=r=>{r.nodeType===Node.ELEMENT_NODE&&Object.entries(l).forEach(([i,{selector:s}])=>{r.matches(s)&&v(r,i),r.querySelectorAll(s).forEach(a=>v(a,i))})},n=r=>{if(!r)return;if(typeof r.refresh=="function"){r.refresh();return}const i=r.dataset?.basecoatComponent,s=i?l[i]:null;s?.refresh&&s.refresh(r)},c=()=>{u||(u=new MutationObserver(r=>{r.forEach(i=>{i.addedNodes.forEach(e),i.removedNodes.forEach(t)})}),u.observe(document.body,{childList:!0,subtree:!0}))},f=()=>{u&&(u.disconnect(),u=null)},E=(r,i={})=>{const s=l[r];if(!s){console.warn(`Component '${r}' not found in registry`);return}const a=i.force===!0;p(r,s.selector,a).forEach(d=>{const A=d.dataset?.basecoatComponent===r;a&&h(d),(A||d.matches(s.selector))&&v(d,r)})},w=(r={})=>{m(r)},b=r=>{const i=r==="dark";document.documentElement.classList.toggle("dark",i);try{localStorage.setItem("themeMode",i?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:i?"dark":"light"}}))},y=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:g,init:E,initAll:w,refresh:n,start:c,stop:f,theme:{get:y,set:b,toggle:()=>b(y()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{m(),c()})})(),(()=>{const l=new WeakMap,u=e=>e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true",g=e=>{const n=e.querySelector(":scope > button"),c=e.querySelector(":scope > [data-popover]"),f=c?c.querySelector('[role="menu"]'):null;return{trigger:n,popover:c,menu:f}},v=e=>Array.from(e.querySelectorAll('[role^="menuitem"]')).filter(n=>!u(n)),h=(e,n)=>{if(e.activeIndex>-1&&e.items[e.activeIndex]&&e.items[e.activeIndex].classList.remove("active"),e.activeIndex=n,e.activeIndex>-1&&e.items[e.activeIndex]){const c=e.items[e.activeIndex];c.classList.add("active"),c.id&&e.trigger.setAttribute("aria-activedescendant",c.id)}else e.trigger.removeAttribute("aria-activedescendant")},t=e=>{const n=l.get(e);if(!n)return;const c=g(e);if(!c.trigger||!c.popover||!c.menu){const f=[];c.trigger||f.push("trigger"),c.popover||f.push("popover"),c.menu||f.push("menu"),console.error(`Dropdown menu refresh failed. Missing element(s): ${f.join(", ")}`,e);return}Object.assign(n,c),n.items=v(n.menu),n.activeIndex>-1&&!n.items[n.activeIndex]&&h(n,-1)},o=(e,n=!0)=>{e.trigger.getAttribute("aria-expanded")!=="false"&&(e.trigger.setAttribute("aria-expanded","false"),e.trigger.removeAttribute("aria-activedescendant"),e.popover.setAttribute("aria-hidden","true"),n&&e.trigger.focus(),h(e,-1))},p=(e,n,c=!1)=>{document.dispatchEvent(new CustomEvent("basecoat:popover",{detail:{source:e}})),e.refresh(),n.trigger.setAttribute("aria-expanded","true"),n.popover.setAttribute("aria-hidden","false"),n.items.length>0&&c&&h(n,c==="last"?n.items.length-1:0)},m=e=>{if(e.dataset.dropdownMenuInitialized)return;const n={activeIndex:-1,items:[]};if(l.set(e,n),e.refresh=()=>t(e),t(e),!n.trigger||!n.popover||!n.menu){l.delete(e),delete e.refresh;return}e.open=(i=!1)=>p(e,n,i),e.close=(i=!0)=>o(n,i),e.toggle=()=>n.trigger.getAttribute("aria-expanded")==="true"?e.close():e.open(!1);const c=e.toggle,f=i=>{const s=n.trigger.getAttribute("aria-expanded")==="true";if(i.key==="Escape"){s&&e.close();return}if(!s){["Enter"," "].includes(i.key)?(i.preventDefault(),e.open(!1)):i.key==="ArrowDown"?(i.preventDefault(),e.open("first")):i.key==="ArrowUp"&&(i.preventDefault(),e.open("last"));return}if(n.items.length===0)return;let a=n.activeIndex;if(i.key==="ArrowDown")i.preventDefault(),a=n.activeIndex===-1?0:Math.min(n.activeIndex+1,n.items.length-1);else if(i.key==="ArrowUp")i.preventDefault(),a=n.activeIndex===-1?n.items.length-1:Math.max(n.activeIndex-1,0);else if(i.key==="Home")i.preventDefault(),a=0;else if(i.key==="End")i.preventDefault(),a=n.items.length-1;else if(["Enter"," "].includes(i.key)){i.preventDefault(),n.items[n.activeIndex]?.click(),e.close();return}else return;a!==n.activeIndex&&h(n,a)},E=i=>{const s=i.target.closest('[role^="menuitem"]');if(s&&!u(s)&&n.items.includes(s)){const a=n.items.indexOf(s);a!==n.activeIndex&&h(n,a)}},w=()=>h(n,-1),b=i=>{const s=i.target.closest('[role^="menuitem"]');!s||u(s)||(s.getAttribute("role")==="menuitemcheckbox"?s.setAttribute("aria-checked",s.getAttribute("aria-checked")!=="true"):s.getAttribute("role")==="menuitemradio"&&s.closest('[role="group"], [role="menu"]')?.querySelectorAll('[role="menuitemradio"]').forEach(d=>{u(d)||d.setAttribute("aria-checked",d===s?"true":"false")}),e.close())},y=i=>{e.contains(i.target)||e.close(!1)},r=i=>{e.contains(i.detail.source)||e.close(!1)};n.trigger.addEventListener("click",c),e.addEventListener("keydown",f),n.menu.addEventListener("mousemove",E),n.menu.addEventListener("mouseleave",w),n.menu.addEventListener("click",b),document.addEventListener("click",y),document.addEventListener("basecoat:popover",r),e._destroy=()=>{n.trigger.removeEventListener("click",c),e.removeEventListener("keydown",f),n.menu.removeEventListener("mousemove",E),n.menu.removeEventListener("mouseleave",w),n.menu.removeEventListener("click",b),document.removeEventListener("click",y),document.removeEventListener("basecoat:popover",r),l.delete(e),delete e.refresh,delete e.open,delete e.close,delete e.toggle},n.trigger.setAttribute("aria-expanded","false"),n.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:m,refresh:t})})(),(()=>{var l=class extends HTMLElement{static observedAttributes=["value"];static relayed=["change"];static relayNative=!1;connectedCallback(){if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>this.isConnected&&this.connectedCallback(),{once:!0});return}this.setup(),this._children=new MutationObserver(()=>{if(this.querySelector(`:scope > ${this.constructor.rootSelector}`)===this.root)return;const t=this.root?this.snapshot():void 0;this.teardown(),this.setup(t)}),this._children.observe(this,{childList:!0})}disconnectedCallback(){this._children?.disconnect(),this.teardown()}setup(t){if(this.root=this.querySelector(`:scope > ${this.constructor.rootSelector}`),!!this.root){window.basecoat?.init(this.constructor.component),this._relay=o=>{o.target!==this.root||!this.constructor.relayNative&&!(o instanceof CustomEvent)||(o.stopPropagation(),this._silent||this.emit(o.type,{value:this.value}))};for(const o of this.constructor.relayed)this.root.addEventListener(o,this._relay);this.attach?.(),t!==void 0?this.restore(t):this.applyInitial()}}teardown(){if(this.detach?.(),!!this.root){for(const t of this.constructor.relayed)this.root.removeEventListener(t,this._relay);this.root._destroy?.(),delete this.root.dataset[`${this.constructor.component.replace(/-(\w)/g,(t,o)=>o.toUpperCase())}Initialized`],this.root=null}}applyInitial(){const t=this._pending!==void 0?this._pending:this.getAttribute("value");this._pending=void 0,t!==null&&(this.value=t)}snapshot(){return this.value}restore(t){t!==null&&(this.value=t)}attributeChangedCallback(t,o,p){t==="value"&&this.root&&p!==null&&p!==this.value&&(this.value=p)}defer(t){return this.root?!1:(this._pending=t,!0)}silently(t){this._silent=!0;try{t()}finally{this._silent=!1}}emit(t,o){this.dispatchEvent(new CustomEvent(t,{detail:o,bubbles:!0}))}reportValue(){const t=this.value;JSON.stringify(t)!==JSON.stringify(this._last)&&(this._last=t,this._silent||this.emit("change",{value:t}))}},u=class extends l{static observedAttributes=["open"];static relayed=[];applyInitial(){const t=this._pending!==void 0?this._pending:this.hasAttribute("open")||null;this._pending=void 0,this._lastOpen=this.isOpen(),t!==null&&!!t!==this._lastOpen&&(this.open=t)}attributeChangedCallback(t,o,p){t==="open"&&this.root&&(this.open=p!==null)}snapshot(){return this.isOpen()}restore(t){this._lastOpen=this.isOpen(),this.open=t}get open(){return this.root?this.isOpen():!!this._pending}set open(t){this.defer(!!t)||!!t!==this.isOpen()&&this.setOpen(!!t)}reportOpen(){const t=this.isOpen();t!==this._lastOpen&&(this._lastOpen=t,this.emit("toggle",{open:t}))}};function g(t,o,p,m=!0){const e=new MutationObserver(p);return e.observe(t,{attributes:!0,attributeFilter:o,subtree:m}),()=>e.disconnect()}var v=class extends u{get trigger(){return this.root?.querySelector(":scope > button")}get nativePanel(){return this.root?.querySelector(":scope > [data-popover][popover]")}attach(){const t=this.nativePanel;t?(this._onToggle=()=>this.reportOpen(),t.addEventListener("toggle",this._onToggle),this._unwatch=()=>t.removeEventListener("toggle",this._onToggle)):this._unwatch=g(this.trigger,["aria-expanded"],()=>this.reportOpen(),!1)}detach(){this._unwatch?.()}isOpen(){const t=this.nativePanel;return t?t.matches(":popover-open"):this.trigger?.getAttribute("aria-expanded")==="true"}setOpen(t){const o=this.nativePanel;if(o)return t?o.showPopover():o.hidePopover();this.setOpenJs(t)}},h=class extends v{static component="dropdown-menu";static rootSelector=".dropdown-menu";attach(){super.attach(),this._onClick=t=>{const o=t.target.closest('[role^="menuitem"]');!o||!this.root.contains(o)||o.matches('[aria-disabled="true"], :disabled')||this.emit("select",{value:o.dataset.value??o.textContent.trim()})},this.root.addEventListener("click",this._onClick)}detach(){super.detach(),this.root?.removeEventListener("click",this._onClick)}setOpenJs(t){t?this.root.open?.():this.root.close?.()}};customElements.get("auvyx-dropdown-menu")||customElements.define("auvyx-dropdown-menu",h)})();
|
|
1
|
+
/*! @auvyx/ui v0.1.2 | MIT License | see LICENSE */
|
|
2
|
+
window.auvyx||(()=>{const l={};let u=null;const g=(r,i,s)=>{const a=typeof i=="object"?i:{selector:i,init:s};l[r]={selector:a.selector,init:a.init,refresh:a.refresh}},v=(r,i)=>{const s=l[i];if(s)try{s.init(r),r.hasAttribute(`data-${i}-initialized`)&&(r.dataset.basecoatComponent=i)}catch(a){if(console.error(`Failed to initialize ${i}:`,a),typeof r._destroy=="function")try{r._destroy()}catch(d){console.error(`Failed to clean up ${i} after initialization error:`,d)}delete r._destroy,r.removeAttribute(`data-${i}-initialized`),delete r.dataset.basecoatComponent}},h=r=>{if(!r||r.nodeType!==Node.ELEMENT_NODE)return;const i=r.dataset?.basecoatComponent;if(typeof r._destroy=="function")try{r._destroy()}catch(s){console.error("Failed to destroy component:",s)}delete r._destroy,i&&r.removeAttribute(`data-${i}-initialized`),delete r.dataset.basecoatComponent},t=r=>{r.nodeType===Node.ELEMENT_NODE&&(r.isConnected||(r.dataset?.basecoatComponent&&h(r),r.querySelectorAll("[data-basecoat-component]").forEach(h)))},o=r=>Array.from(new Set(r)),p=(r,i,s=!1)=>{const a=Array.from(document.querySelectorAll(i));return s&&a.push(...document.querySelectorAll(`[data-basecoat-component="${r}"]`)),o(a)},m=(r={})=>{const i=r.force===!0;Object.entries(l).forEach(([s,{selector:a}])=>{p(s,a,i).forEach(d=>{const A=d.dataset?.basecoatComponent===s;i&&h(d),(A||d.matches(a))&&v(d,s)})})},e=r=>{r.nodeType===Node.ELEMENT_NODE&&Object.entries(l).forEach(([i,{selector:s}])=>{r.matches(s)&&v(r,i),r.querySelectorAll(s).forEach(a=>v(a,i))})},n=r=>{if(!r)return;if(typeof r.refresh=="function"){r.refresh();return}const i=r.dataset?.basecoatComponent,s=i?l[i]:null;s?.refresh&&s.refresh(r)},c=()=>{u||(u=new MutationObserver(r=>{r.forEach(i=>{i.addedNodes.forEach(e),i.removedNodes.forEach(t)})}),u.observe(document.body,{childList:!0,subtree:!0}))},f=()=>{u&&(u.disconnect(),u=null)},E=(r,i={})=>{const s=l[r];if(!s){console.warn(`Component '${r}' not found in registry`);return}const a=i.force===!0;p(r,s.selector,a).forEach(d=>{const A=d.dataset?.basecoatComponent===r;a&&h(d),(A||d.matches(s.selector))&&v(d,r)})},w=(r={})=>{m(r)},y=r=>{const i=r==="dark";document.documentElement.classList.toggle("dark",i);try{localStorage.setItem("themeMode",i?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:i?"dark":"light"}}))},b=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.auvyx=window.basecoat={register:g,init:E,initAll:w,refresh:n,start:c,stop:f,theme:{get:b,set:y,toggle:()=>y(b()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{m(),c()})})(),(()=>{const l=new WeakMap,u=e=>e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true",g=e=>{const n=e.querySelector(":scope > button"),c=e.querySelector(":scope > [data-popover]"),f=c?c.querySelector('[role="menu"]'):null;return{trigger:n,popover:c,menu:f}},v=e=>Array.from(e.querySelectorAll('[role^="menuitem"]')).filter(n=>!u(n)),h=(e,n)=>{if(e.activeIndex>-1&&e.items[e.activeIndex]&&e.items[e.activeIndex].classList.remove("active"),e.activeIndex=n,e.activeIndex>-1&&e.items[e.activeIndex]){const c=e.items[e.activeIndex];c.classList.add("active"),c.id&&e.trigger.setAttribute("aria-activedescendant",c.id)}else e.trigger.removeAttribute("aria-activedescendant")},t=e=>{const n=l.get(e);if(!n)return;const c=g(e);if(!c.trigger||!c.popover||!c.menu){const f=[];c.trigger||f.push("trigger"),c.popover||f.push("popover"),c.menu||f.push("menu"),console.error(`Dropdown menu refresh failed. Missing element(s): ${f.join(", ")}`,e);return}Object.assign(n,c),n.items=v(n.menu),n.activeIndex>-1&&!n.items[n.activeIndex]&&h(n,-1)},o=(e,n=!0)=>{e.trigger.getAttribute("aria-expanded")!=="false"&&(e.trigger.setAttribute("aria-expanded","false"),e.trigger.removeAttribute("aria-activedescendant"),e.popover.setAttribute("aria-hidden","true"),n&&e.trigger.focus(),h(e,-1))},p=(e,n,c=!1)=>{document.dispatchEvent(new CustomEvent("basecoat:popover",{detail:{source:e}})),e.refresh(),n.trigger.setAttribute("aria-expanded","true"),n.popover.setAttribute("aria-hidden","false"),n.items.length>0&&c&&h(n,c==="last"?n.items.length-1:0)},m=e=>{if(e.dataset.dropdownMenuInitialized)return;const n={activeIndex:-1,items:[]};if(l.set(e,n),e.refresh=()=>t(e),t(e),!n.trigger||!n.popover||!n.menu){l.delete(e),delete e.refresh;return}e.open=(i=!1)=>p(e,n,i),e.close=(i=!0)=>o(n,i),e.toggle=()=>n.trigger.getAttribute("aria-expanded")==="true"?e.close():e.open(!1);const c=e.toggle,f=i=>{const s=n.trigger.getAttribute("aria-expanded")==="true";if(i.key==="Escape"){s&&e.close();return}if(!s){["Enter"," "].includes(i.key)?(i.preventDefault(),e.open(!1)):i.key==="ArrowDown"?(i.preventDefault(),e.open("first")):i.key==="ArrowUp"&&(i.preventDefault(),e.open("last"));return}if(n.items.length===0)return;let a=n.activeIndex;if(i.key==="ArrowDown")i.preventDefault(),a=n.activeIndex===-1?0:Math.min(n.activeIndex+1,n.items.length-1);else if(i.key==="ArrowUp")i.preventDefault(),a=n.activeIndex===-1?n.items.length-1:Math.max(n.activeIndex-1,0);else if(i.key==="Home")i.preventDefault(),a=0;else if(i.key==="End")i.preventDefault(),a=n.items.length-1;else if(["Enter"," "].includes(i.key)){i.preventDefault(),n.items[n.activeIndex]?.click(),e.close();return}else return;a!==n.activeIndex&&h(n,a)},E=i=>{const s=i.target.closest('[role^="menuitem"]');if(s&&!u(s)&&n.items.includes(s)){const a=n.items.indexOf(s);a!==n.activeIndex&&h(n,a)}},w=()=>h(n,-1),y=i=>{const s=i.target.closest('[role^="menuitem"]');!s||u(s)||(s.getAttribute("role")==="menuitemcheckbox"?s.setAttribute("aria-checked",s.getAttribute("aria-checked")!=="true"):s.getAttribute("role")==="menuitemradio"&&s.closest('[role="group"], [role="menu"]')?.querySelectorAll('[role="menuitemradio"]').forEach(d=>{u(d)||d.setAttribute("aria-checked",d===s?"true":"false")}),e.close())},b=i=>{e.contains(i.target)||e.close(!1)},r=i=>{e.contains(i.detail.source)||e.close(!1)};n.trigger.addEventListener("click",c),e.addEventListener("keydown",f),n.menu.addEventListener("mousemove",E),n.menu.addEventListener("mouseleave",w),n.menu.addEventListener("click",y),document.addEventListener("click",b),document.addEventListener("basecoat:popover",r),e._destroy=()=>{n.trigger.removeEventListener("click",c),e.removeEventListener("keydown",f),n.menu.removeEventListener("mousemove",E),n.menu.removeEventListener("mouseleave",w),n.menu.removeEventListener("click",y),document.removeEventListener("click",b),document.removeEventListener("basecoat:popover",r),l.delete(e),delete e.refresh,delete e.open,delete e.close,delete e.toggle},n.trigger.setAttribute("aria-expanded","false"),n.popover.setAttribute("aria-hidden","true"),e.dataset.dropdownMenuInitialized="true",e.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.auvyx&&window.auvyx.register("dropdown-menu",{selector:".dropdown-menu:not([data-dropdown-menu-initialized]):not(:has(> [data-popover][popover]))",init:m,refresh:t})})(),(()=>{var l=class extends HTMLElement{static observedAttributes=["value"];static relayed=["change"];static relayNative=!1;connectedCallback(){if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>this.isConnected&&this.connectedCallback(),{once:!0});return}this.setup(),this._children=new MutationObserver(()=>{if(this.querySelector(`:scope > ${this.constructor.rootSelector}`)===this.root)return;const t=this.root?this.snapshot():void 0;this.teardown(),this.setup(t)}),this._children.observe(this,{childList:!0})}disconnectedCallback(){this._children?.disconnect(),this.teardown()}setup(t){if(this.root=this.querySelector(`:scope > ${this.constructor.rootSelector}`),!!this.root){window.auvyx?.init(this.constructor.component),this._relay=o=>{o.target!==this.root||!this.constructor.relayNative&&!(o instanceof CustomEvent)||(o.stopPropagation(),this._silent||this.emit(o.type,{value:this.value}))};for(const o of this.constructor.relayed)this.root.addEventListener(o,this._relay);this.attach?.(),t!==void 0?this.restore(t):this.applyInitial()}}teardown(){if(this.detach?.(),!!this.root){for(const t of this.constructor.relayed)this.root.removeEventListener(t,this._relay);this.root._destroy?.(),delete this.root.dataset[`${this.constructor.component.replace(/-(\w)/g,(t,o)=>o.toUpperCase())}Initialized`],this.root=null}}applyInitial(){const t=this._pending!==void 0?this._pending:this.getAttribute("value");this._pending=void 0,t!==null&&(this.value=t)}snapshot(){return this.value}restore(t){t!==null&&(this.value=t)}attributeChangedCallback(t,o,p){t==="value"&&this.root&&p!==null&&p!==this.value&&(this.value=p)}defer(t){return this.root?!1:(this._pending=t,!0)}silently(t){this._silent=!0;try{t()}finally{this._silent=!1}}emit(t,o){this.dispatchEvent(new CustomEvent(t,{detail:o,bubbles:!0}))}reportValue(){const t=this.value;JSON.stringify(t)!==JSON.stringify(this._last)&&(this._last=t,this._silent||this.emit("change",{value:t}))}},u=class extends l{static observedAttributes=["open"];static relayed=[];applyInitial(){const t=this._pending!==void 0?this._pending:this.hasAttribute("open")||null;this._pending=void 0,this._lastOpen=this.isOpen(),t!==null&&!!t!==this._lastOpen&&(this.open=t)}attributeChangedCallback(t,o,p){t==="open"&&this.root&&(this.open=p!==null)}snapshot(){return this.isOpen()}restore(t){this._lastOpen=this.isOpen(),this.open=t}get open(){return this.root?this.isOpen():!!this._pending}set open(t){this.defer(!!t)||!!t!==this.isOpen()&&this.setOpen(!!t)}reportOpen(){const t=this.isOpen();t!==this._lastOpen&&(this._lastOpen=t,this.emit("toggle",{open:t}))}};function g(t,o,p,m=!0){const e=new MutationObserver(p);return e.observe(t,{attributes:!0,attributeFilter:o,subtree:m}),()=>e.disconnect()}var v=class extends u{get trigger(){return this.root?.querySelector(":scope > button")}get nativePanel(){return this.root?.querySelector(":scope > [data-popover][popover]")}attach(){const t=this.nativePanel;t?(this._onToggle=()=>this.reportOpen(),t.addEventListener("toggle",this._onToggle),this._unwatch=()=>t.removeEventListener("toggle",this._onToggle)):this._unwatch=g(this.trigger,["aria-expanded"],()=>this.reportOpen(),!1)}detach(){this._unwatch?.()}isOpen(){const t=this.nativePanel;return t?t.matches(":popover-open"):this.trigger?.getAttribute("aria-expanded")==="true"}setOpen(t){const o=this.nativePanel;if(o)return t?o.showPopover():o.hidePopover();this.setOpenJs(t)}},h=class extends v{static component="dropdown-menu";static rootSelector=".dropdown-menu";attach(){super.attach(),this._onClick=t=>{const o=t.target.closest('[role^="menuitem"]');!o||!this.root.contains(o)||o.matches('[aria-disabled="true"], :disabled')||this.emit("select",{value:o.dataset.value??o.textContent.trim()})},this.root.addEventListener("click",this._onClick)}detach(){super.detach(),this.root?.removeEventListener("click",this._onClick)}setOpenJs(t){t?this.root.open?.():this.root.close?.()}};customElements.get("auvyx-dropdown-menu")||customElements.define("auvyx-dropdown-menu",h)})();
|
package/dist/wc/manifest.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"methods": {}
|
|
13
13
|
},
|
|
14
|
-
"gzip":
|
|
14
|
+
"gzip": 2736
|
|
15
15
|
},
|
|
16
16
|
"select": {
|
|
17
17
|
"file": "wc/select.min.js",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"methods": {}
|
|
27
27
|
},
|
|
28
|
-
"gzip":
|
|
28
|
+
"gzip": 4503
|
|
29
29
|
},
|
|
30
30
|
"combobox": {
|
|
31
31
|
"file": "wc/combobox.min.js",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
"methods": {}
|
|
41
41
|
},
|
|
42
|
-
"gzip":
|
|
42
|
+
"gzip": 5620
|
|
43
43
|
},
|
|
44
44
|
"command": {
|
|
45
45
|
"file": "wc/command.min.js",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
},
|
|
52
52
|
"methods": {}
|
|
53
53
|
},
|
|
54
|
-
"gzip":
|
|
54
|
+
"gzip": 3167
|
|
55
55
|
},
|
|
56
56
|
"dropdown-menu": {
|
|
57
57
|
"file": "wc/dropdown-menu.min.js",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
},
|
|
67
67
|
"methods": {}
|
|
68
68
|
},
|
|
69
|
-
"gzip":
|
|
69
|
+
"gzip": 3565
|
|
70
70
|
},
|
|
71
71
|
"popover": {
|
|
72
72
|
"file": "wc/popover.min.js",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
},
|
|
81
81
|
"methods": {}
|
|
82
82
|
},
|
|
83
|
-
"gzip":
|
|
83
|
+
"gzip": 2649
|
|
84
84
|
},
|
|
85
85
|
"accordion": {
|
|
86
86
|
"file": "wc/accordion.min.js",
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
},
|
|
95
95
|
"methods": {}
|
|
96
96
|
},
|
|
97
|
-
"gzip":
|
|
97
|
+
"gzip": 2502
|
|
98
98
|
},
|
|
99
99
|
"sidebar": {
|
|
100
100
|
"file": "wc/sidebar.min.js",
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
},
|
|
109
109
|
"methods": {}
|
|
110
110
|
},
|
|
111
|
-
"gzip":
|
|
111
|
+
"gzip": 2804
|
|
112
112
|
},
|
|
113
113
|
"toast": {
|
|
114
114
|
"file": "wc/toast.min.js",
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
"toast(options: AuvyxToastOptions)": "Show a toast; same options as the HTML edition"
|
|
121
121
|
}
|
|
122
122
|
},
|
|
123
|
-
"gzip":
|
|
123
|
+
"gzip": 3360
|
|
124
124
|
},
|
|
125
125
|
"slider": {
|
|
126
126
|
"file": "wc/slider.min.js",
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
},
|
|
136
136
|
"methods": {}
|
|
137
137
|
},
|
|
138
|
-
"gzip":
|
|
138
|
+
"gzip": 2132
|
|
139
139
|
},
|
|
140
140
|
"drawer": {
|
|
141
141
|
"file": "wc/drawer.min.js",
|
|
@@ -149,6 +149,6 @@
|
|
|
149
149
|
},
|
|
150
150
|
"methods": {}
|
|
151
151
|
},
|
|
152
|
-
"gzip":
|
|
152
|
+
"gzip": 2589
|
|
153
153
|
}
|
|
154
154
|
}
|
package/dist/wc/popover.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @auvyx/ui v0.1.
|
|
2
|
-
window.
|
|
1
|
+
/*! @auvyx/ui v0.1.2 | MIT License | see LICENSE */
|
|
2
|
+
window.auvyx||(()=>{const p={};let r=null;const c=(e,o,i)=>{const a=typeof o=="object"?o:{selector:o,init:i};p[e]={selector:a.selector,init:a.init,refresh:a.refresh}},d=(e,o)=>{const i=p[o];if(i)try{i.init(e),e.hasAttribute(`data-${o}-initialized`)&&(e.dataset.basecoatComponent=o)}catch(a){if(console.error(`Failed to initialize ${o}:`,a),typeof e._destroy=="function")try{e._destroy()}catch(u){console.error(`Failed to clean up ${o} after initialization error:`,u)}delete e._destroy,e.removeAttribute(`data-${o}-initialized`),delete e.dataset.basecoatComponent}},h=e=>{if(!e||e.nodeType!==Node.ELEMENT_NODE)return;const o=e.dataset?.basecoatComponent;if(typeof e._destroy=="function")try{e._destroy()}catch(i){console.error("Failed to destroy component:",i)}delete e._destroy,o&&e.removeAttribute(`data-${o}-initialized`),delete e.dataset.basecoatComponent},t=e=>{e.nodeType===Node.ELEMENT_NODE&&(e.isConnected||(e.dataset?.basecoatComponent&&h(e),e.querySelectorAll("[data-basecoat-component]").forEach(h)))},s=e=>Array.from(new Set(e)),l=(e,o,i=!1)=>{const a=Array.from(document.querySelectorAll(o));return i&&a.push(...document.querySelectorAll(`[data-basecoat-component="${e}"]`)),s(a)},f=(e={})=>{const o=e.force===!0;Object.entries(p).forEach(([i,{selector:a}])=>{l(i,a,o).forEach(u=>{const g=u.dataset?.basecoatComponent===i;o&&h(u),(g||u.matches(a))&&d(u,i)})})},v=e=>{e.nodeType===Node.ELEMENT_NODE&&Object.entries(p).forEach(([o,{selector:i}])=>{e.matches(i)&&d(e,o),e.querySelectorAll(i).forEach(a=>d(a,o))})},n=e=>{if(!e)return;if(typeof e.refresh=="function"){e.refresh();return}const o=e.dataset?.basecoatComponent,i=o?p[o]:null;i?.refresh&&i.refresh(e)},y=()=>{r||(r=new MutationObserver(e=>{e.forEach(o=>{o.addedNodes.forEach(v),o.removedNodes.forEach(t)})}),r.observe(document.body,{childList:!0,subtree:!0}))},_=()=>{r&&(r.disconnect(),r=null)},m=(e,o={})=>{const i=p[e];if(!i){console.warn(`Component '${e}' not found in registry`);return}const a=o.force===!0;l(e,i.selector,a).forEach(u=>{const g=u.dataset?.basecoatComponent===e;a&&h(u),(g||u.matches(i.selector))&&d(u,e)})},w=(e={})=>{f(e)},b=e=>{const o=e==="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"}}))},E=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.auvyx=window.basecoat={register:c,init:m,initAll:w,refresh:n,start:y,stop:_,theme:{get:E,set:b,toggle:()=>b(E()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{f(),y()})})(),(()=>{const p=r=>{if(r.dataset.popoverInitialized)return;const c=r.querySelector(":scope > button"),d=r.querySelector(":scope > [data-popover]");if(!c||!d){const n=[];c||n.push("trigger"),d||n.push("content"),console.error(`Popover initialisation failed. Missing element(s): ${n.join(", ")}`,r);return}const h=(n=!0)=>{c.getAttribute("aria-expanded")!=="false"&&(c.setAttribute("aria-expanded","false"),d.setAttribute("aria-hidden","true"),n&&c.focus())},t=()=>{document.dispatchEvent(new CustomEvent("basecoat:popover",{detail:{source:r}}));const n=d.querySelector("[autofocus]");n&&d.addEventListener("transitionend",()=>{n.focus()},{once:!0}),c.setAttribute("aria-expanded","true"),d.setAttribute("aria-hidden","false")},s=()=>{c.getAttribute("aria-expanded")==="true"?h():t()},l=n=>{n.key==="Escape"&&h()},f=n=>{r.contains(n.target)||h()},v=n=>{r.contains(n.detail.source)||h(!1)};c.addEventListener("click",s),r.addEventListener("keydown",l),document.addEventListener("click",f),document.addEventListener("basecoat:popover",v),r._destroy=()=>{c.removeEventListener("click",s),r.removeEventListener("keydown",l),document.removeEventListener("click",f),document.removeEventListener("basecoat:popover",v)},r.dataset.popoverInitialized=!0,r.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.auvyx&&window.auvyx.register("popover",".popover:not([data-popover-initialized]):not(:has(> [data-popover][popover]))",p)})(),(()=>{var p=class extends HTMLElement{static observedAttributes=["value"];static relayed=["change"];static relayNative=!1;connectedCallback(){if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>this.isConnected&&this.connectedCallback(),{once:!0});return}this.setup(),this._children=new MutationObserver(()=>{if(this.querySelector(`:scope > ${this.constructor.rootSelector}`)===this.root)return;const t=this.root?this.snapshot():void 0;this.teardown(),this.setup(t)}),this._children.observe(this,{childList:!0})}disconnectedCallback(){this._children?.disconnect(),this.teardown()}setup(t){if(this.root=this.querySelector(`:scope > ${this.constructor.rootSelector}`),!!this.root){window.auvyx?.init(this.constructor.component),this._relay=s=>{s.target!==this.root||!this.constructor.relayNative&&!(s instanceof CustomEvent)||(s.stopPropagation(),this._silent||this.emit(s.type,{value:this.value}))};for(const s of this.constructor.relayed)this.root.addEventListener(s,this._relay);this.attach?.(),t!==void 0?this.restore(t):this.applyInitial()}}teardown(){if(this.detach?.(),!!this.root){for(const t of this.constructor.relayed)this.root.removeEventListener(t,this._relay);this.root._destroy?.(),delete this.root.dataset[`${this.constructor.component.replace(/-(\w)/g,(t,s)=>s.toUpperCase())}Initialized`],this.root=null}}applyInitial(){const t=this._pending!==void 0?this._pending:this.getAttribute("value");this._pending=void 0,t!==null&&(this.value=t)}snapshot(){return this.value}restore(t){t!==null&&(this.value=t)}attributeChangedCallback(t,s,l){t==="value"&&this.root&&l!==null&&l!==this.value&&(this.value=l)}defer(t){return this.root?!1:(this._pending=t,!0)}silently(t){this._silent=!0;try{t()}finally{this._silent=!1}}emit(t,s){this.dispatchEvent(new CustomEvent(t,{detail:s,bubbles:!0}))}reportValue(){const t=this.value;JSON.stringify(t)!==JSON.stringify(this._last)&&(this._last=t,this._silent||this.emit("change",{value:t}))}},r=class extends p{static observedAttributes=["open"];static relayed=[];applyInitial(){const t=this._pending!==void 0?this._pending:this.hasAttribute("open")||null;this._pending=void 0,this._lastOpen=this.isOpen(),t!==null&&!!t!==this._lastOpen&&(this.open=t)}attributeChangedCallback(t,s,l){t==="open"&&this.root&&(this.open=l!==null)}snapshot(){return this.isOpen()}restore(t){this._lastOpen=this.isOpen(),this.open=t}get open(){return this.root?this.isOpen():!!this._pending}set open(t){this.defer(!!t)||!!t!==this.isOpen()&&this.setOpen(!!t)}reportOpen(){const t=this.isOpen();t!==this._lastOpen&&(this._lastOpen=t,this.emit("toggle",{open:t}))}};function c(t,s,l,f=!0){const v=new MutationObserver(l);return v.observe(t,{attributes:!0,attributeFilter:s,subtree:f}),()=>v.disconnect()}var d=class extends r{get trigger(){return this.root?.querySelector(":scope > button")}get nativePanel(){return this.root?.querySelector(":scope > [data-popover][popover]")}attach(){const t=this.nativePanel;t?(this._onToggle=()=>this.reportOpen(),t.addEventListener("toggle",this._onToggle),this._unwatch=()=>t.removeEventListener("toggle",this._onToggle)):this._unwatch=c(this.trigger,["aria-expanded"],()=>this.reportOpen(),!1)}detach(){this._unwatch?.()}isOpen(){const t=this.nativePanel;return t?t.matches(":popover-open"):this.trigger?.getAttribute("aria-expanded")==="true"}setOpen(t){const s=this.nativePanel;if(s)return t?s.showPopover():s.hidePopover();this.setOpenJs(t)}},h=class extends d{static component="popover";static rootSelector=".popover";setOpenJs(){this.trigger?.click()}};customElements.get("auvyx-popover")||customElements.define("auvyx-popover",h)})();
|
package/dist/wc/select.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @auvyx/ui v0.1.
|
|
2
|
-
window.basecoat||(()=>{const f={};let E=null;const o=(n,c,u)=>{const b=typeof c=="object"?c:{selector:c,init:u};f[n]={selector:b.selector,init:b.init,refresh:b.refresh}},h=(n,c)=>{const u=f[c];if(u)try{u.init(n),n.hasAttribute(`data-${c}-initialized`)&&(n.dataset.basecoatComponent=c)}catch(b){if(console.error(`Failed to initialize ${c}:`,b),typeof n._destroy=="function")try{n._destroy()}catch(e){console.error(`Failed to clean up ${c} after initialization error:`,e)}delete n._destroy,n.removeAttribute(`data-${c}-initialized`),delete n.dataset.basecoatComponent}},x=n=>{if(!n||n.nodeType!==Node.ELEMENT_NODE)return;const c=n.dataset?.basecoatComponent;if(typeof n._destroy=="function")try{n._destroy()}catch(u){console.error("Failed to destroy Basecoat component:",u)}delete n._destroy,c&&n.removeAttribute(`data-${c}-initialized`),delete n.dataset.basecoatComponent},I=n=>{n.nodeType===Node.ELEMENT_NODE&&(n.isConnected||(n.dataset?.basecoatComponent&&x(n),n.querySelectorAll("[data-basecoat-component]").forEach(x)))},L=n=>Array.from(new Set(n)),_=(n,c,u=!1)=>{const b=Array.from(document.querySelectorAll(c));return u&&b.push(...document.querySelectorAll(`[data-basecoat-component="${n}"]`)),L(b)},A=(n={})=>{const c=n.force===!0;Object.entries(f).forEach(([u,{selector:b}])=>{_(u,b,c).forEach(e=>{const t=e.dataset?.basecoatComponent===u;c&&x(e),(t||e.matches(b))&&h(e,u)})})},w=n=>{n.nodeType===Node.ELEMENT_NODE&&Object.entries(f).forEach(([c,{selector:u}])=>{n.matches(u)&&h(n,c),n.querySelectorAll(u).forEach(b=>h(b,c))})},q=n=>{if(!n)return;if(typeof n.refresh=="function"){n.refresh();return}const c=n.dataset?.basecoatComponent,u=c?f[c]:null;u?.refresh&&u.refresh(n)},k=()=>{E||(E=new MutationObserver(n=>{n.forEach(c=>{c.addedNodes.forEach(w),c.removedNodes.forEach(I)})}),E.observe(document.body,{childList:!0,subtree:!0}))},O=()=>{E&&(E.disconnect(),E=null)},v=(n,c={})=>{const u=f[n];if(!u){console.warn(`Component '${n}' not found in registry`);return}const b=c.force===!0;_(n,u.selector,b).forEach(e=>{const t=e.dataset?.basecoatComponent===n;b&&x(e),(t||e.matches(u.selector))&&h(e,n)})},M=(n={})=>{A(n)},C=n=>{const c=n==="dark";document.documentElement.classList.toggle("dark",c);try{localStorage.setItem("themeMode",c?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:c?"dark":"light"}}))},S=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.basecoat={register:o,init:v,initAll:M,refresh:q,start:k,stop:O,theme:{get:S,set:C,toggle:()=>C(S()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{A(),k()})})(),(()=>{const f=new WeakMap,E=e=>{const t=e.querySelector(":scope > button"),s=t?.querySelector(":scope > span")||null,i=e.querySelector(":scope > [data-popover]"),l=i?i.querySelector('[role="listbox"]'):null,a=e.querySelector(':scope > input[type="hidden"]');return{trigger:t,selectedLabel:s,popover:i,listbox:l,input:a}},o=e=>e.dataset.value??e.textContent.trim(),h=e=>e.dataset.label||e.textContent.trim(),x=e=>e.dataset.format==="object"?"object":"value",I=e=>e.getAttribute("aria-disabled")==="true",L=e=>({value:o(e),label:h(e)}),_=e=>{const t=Array.from(e.querySelectorAll('[role="option"]'));return{allOptions:t,options:t.filter(s=>!I(s))}},A=(e,{isMultiple:t,format:s})=>{if(t)try{const i=JSON.parse(e||"[]");return Array.isArray(i)?i.map(l=>s==="object"&&l&&typeof l=="object"?l.value:l).filter(l=>l!=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||""},w=(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?w(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)},O=(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")},v=(e,t,s=!0)=>{const i=f.get(e);let l,a;if(i.isMultiple){const d=Array.isArray(t)?t:[];i.selectedOptions.clear(),d.forEach(m=>i.selectedOptions.add(m));const g=i.options.filter(m=>i.selectedOptions.has(m));a=g.map(L),g.length===0?(i.selectedLabel.textContent=i.placeholder,i.selectedLabel.classList.add("text-muted-foreground")):(i.selectedLabel.textContent=a.map(m=>m.label).join(", "),i.selectedLabel.classList.remove("text-muted-foreground")),l=a.map(m=>m.value),i.input.value=w(i,a)}else{const d=t;d?(d.dataset.label?i.selectedLabel.textContent=d.dataset.label:i.selectedLabel.innerHTML=d.innerHTML,i.selectedLabel.classList.remove("text-muted-foreground"),a=L(d),l=a.value,i.input.value=w(i,[a])):(i.options.forEach(g=>g.removeAttribute("aria-selected")),q(i),a=null,l="")}i.options.forEach(d=>{(i.isMultiple?i.selectedOptions.has(d):t&&d===t)?d.setAttribute("aria-selected","true"):d.removeAttribute("aria-selected")}),s&&e.dispatchEvent(new CustomEvent("change",{detail:{value:l,selected:a},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"),O(e,-1))},C=e=>{const t=f.get(e);if(!t)return;const s=E(e);if(!s.trigger||!s.selectedLabel||!s.popover||!s.listbox||!s.input){const a=[];s.trigger||a.push("trigger"),s.selectedLabel||a.push("selected label"),s.popover||a.push("popover"),s.listbox||a.push("listbox"),s.input||a.push("input"),console.error(`Select component refresh failed. Missing element(s): ${a.join(", ")}`,e);return}const i=s.input.value;if(Object.assign(t,s,_(s.listbox)),t.visibleOptions=[...t.options],t.isMultiple=t.listbox.getAttribute("aria-multiselectable")==="true",t.format=x(e),t.placeholder=e.dataset.placeholder||"",t.closeOnSelect=e.dataset.closeOnSelect==="true",t.isMultiple){t.selectedOptions||(t.selectedOptions=new Set);const a=A(i,t),d=a.length?a.map(g=>t.options.find(m=>o(m)===g)).filter(Boolean):t.options.filter(g=>g.getAttribute("aria-selected")==="true");v(e,d,!1)}else{const a=A(i,t),d=a===""&&t.placeholder?null:t.options.find(g=>o(g)===a)||t.options.find(g=>g.getAttribute("aria-selected")==="true");t.options.forEach(g=>g.removeAttribute("aria-selected")),v(e,d||null,!1)}const l=t.listbox.querySelector('[role="option"][aria-selected="true"]');O(t,l?t.options.indexOf(l):-1)},S=(e,t)=>{const s=f.get(e);s.selectedOptions.has(t)?s.selectedOptions.delete(t):s.selectedOptions.add(t),v(e,s.options.filter(i=>s.selectedOptions.has(i)))},n=(e,t)=>{const s=f.get(e);if(s.isMultiple){const i=s.options.find(l=>o(l)===t&&!s.selectedOptions.has(l));if(!i)return;s.selectedOptions.add(i),v(e,s.options.filter(l=>s.selectedOptions.has(l)))}else{const i=s.options.find(l=>o(l)===t);if(!i)return;if(s.placeholder&&o(i)===""){v(e,null),M(s);return}e.value!==t&&v(e,i),M(s)}},c=(e,t)=>{const s=f.get(e);if(!s.isMultiple)return;const i=s.options.find(l=>o(l)===t&&s.selectedOptions.has(l));i&&(s.selectedOptions.delete(i),v(e,s.options.filter(l=>s.selectedOptions.has(l))))},u=(e,t)=>{const s=f.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 d=s.options[s.activeIndex];s.isMultiple?(S(t,d),s.closeOnSelect&&t.close()):(s.placeholder&&o(d)===""?v(t,null):t.value!==o(d)&&v(t,d),t.close())}return}if(s.visibleOptions.length===0)return;const l=s.activeIndex>-1?s.visibleOptions.indexOf(s.options[s.activeIndex]):-1;let a=l;if(e.key==="ArrowDown"&&l<s.visibleOptions.length-1&&(a=l+1),e.key==="ArrowUp"&&(a=l>0?l-1:0),e.key==="Home"&&(a=0),e.key==="End"&&(a=s.visibleOptions.length-1),a!==l){const d=s.visibleOptions[a];O(s,s.options.indexOf(d)),k(s,d)}},b=e=>{if(e.dataset.selectInitialized)return;const t={activeIndex:-1,selectedOptions:null,options:[],allOptions:[],visibleOptions:[],format:"value"};if(f.set(e,t),e.refresh=()=>C(e),C(e),!t.trigger||!t.selectedLabel||!t.popover||!t.listbox||!t.input){f.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 r=t.listbox.querySelector('[role="option"][aria-selected="true"]');r&&(O(t,t.options.indexOf(r)),k(t,r))},e.close=(r=!0)=>M(t,r),e.togglePopover=()=>t.trigger.getAttribute("aria-expanded")==="true"?e.close():e.open();const s=r=>u(r,e),i=e.togglePopover,l=r=>{const y=r.target.closest('[role="option"]');if(y&&t.visibleOptions.includes(y)){const p=t.options.indexOf(y);p!==t.activeIndex&&O(t,p)}},a=()=>{const r=t.listbox.querySelector('[role="option"][aria-selected="true"]');O(t,r?t.options.indexOf(r):-1)},d=r=>{const y=r.target.closest('[role="option"]');if(!y)return;const p=t.options.find(N=>N===y);p&&(t.isMultiple?(S(e,p),t.closeOnSelect?e.close():(O(t,t.options.indexOf(p)),t.trigger.focus())):(t.placeholder&&o(p)===""?v(e,null):e.value!==o(p)&&v(e,p),e.close()))},g=r=>{e.contains(r.target)||e.close(!1)},m=r=>{e.contains(r.detail.source)||e.close(!1)};t.trigger.addEventListener("keydown",s),t.trigger.addEventListener("click",i),t.listbox.addEventListener("mousemove",l),t.listbox.addEventListener("mouseleave",a),t.listbox.addEventListener("click",d),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",l),t.listbox.removeEventListener("mouseleave",a),t.listbox.removeEventListener("click",d),document.removeEventListener("click",g),document.removeEventListener("basecoat:popover",m),f.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(r=>t.selectedOptions.has(r)).map(o):A(t.input.value,t),set:r=>{if(t.isMultiple){const y=Array.isArray(r)?r:r!=null?[r]:[];v(e,y.map(p=>t.options.find(N=>o(N)===p)).filter(Boolean))}else{if(r==null||r===""){v(e,null),e.close();return}const y=t.options.find(p=>o(p)===r);y&&(v(e,y),e.close())}}}),Object.defineProperty(e,"selected",{configurable:!0,get:()=>{if(t.isMultiple)return t.options.filter(p=>t.selectedOptions.has(p)).map(L);const r=e.value,y=t.options.find(p=>o(p)===r);return y?L(y):null}}),e.select=r=>n(e,r),e.selectByValue=e.select,t.isMultiple&&(e.deselect=r=>c(e,r),e.toggle=r=>{const y=t.options.find(p=>o(p)===r);y&&S(e,y)},e.selectAll=()=>v(e,t.options),e.selectNone=()=>v(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})})(),(()=>{var f=class extends HTMLElement{static observedAttributes=["value"];static relayed=["change"];static relayNative=!1;connectedCallback(){if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>this.isConnected&&this.connectedCallback(),{once:!0});return}this.setup(),this._children=new MutationObserver(()=>{if(this.querySelector(`:scope > ${this.constructor.rootSelector}`)===this.root)return;const o=this.root?this.snapshot():void 0;this.teardown(),this.setup(o)}),this._children.observe(this,{childList:!0})}disconnectedCallback(){this._children?.disconnect(),this.teardown()}setup(o){if(this.root=this.querySelector(`:scope > ${this.constructor.rootSelector}`),!!this.root){window.basecoat?.init(this.constructor.component),this._relay=h=>{h.target!==this.root||!this.constructor.relayNative&&!(h instanceof CustomEvent)||(h.stopPropagation(),this._silent||this.emit(h.type,{value:this.value}))};for(const h of this.constructor.relayed)this.root.addEventListener(h,this._relay);this.attach?.(),o!==void 0?this.restore(o):this.applyInitial()}}teardown(){if(this.detach?.(),!!this.root){for(const o of this.constructor.relayed)this.root.removeEventListener(o,this._relay);this.root._destroy?.(),delete this.root.dataset[`${this.constructor.component.replace(/-(\w)/g,(o,h)=>h.toUpperCase())}Initialized`],this.root=null}}applyInitial(){const o=this._pending!==void 0?this._pending:this.getAttribute("value");this._pending=void 0,o!==null&&(this.value=o)}snapshot(){return this.value}restore(o){o!==null&&(this.value=o)}attributeChangedCallback(o,h,x){o==="value"&&this.root&&x!==null&&x!==this.value&&(this.value=x)}defer(o){return this.root?!1:(this._pending=o,!0)}silently(o){this._silent=!0;try{o()}finally{this._silent=!1}}emit(o,h){this.dispatchEvent(new CustomEvent(o,{detail:h,bubbles:!0}))}reportValue(){const o=this.value;JSON.stringify(o)!==JSON.stringify(this._last)&&(this._last=o,this._silent||this.emit("change",{value:o}))}},E=class extends f{static component="select";static rootSelector=".select";get value(){return this.root?this.root.value:null}set value(o){this.defer(o)||this.root.select&&this.silently(()=>this.root.select(o))}};customElements.get("auvyx-select")||customElements.define("auvyx-select",E)})();
|
|
1
|
+
/*! @auvyx/ui v0.1.2 | MIT License | see LICENSE */
|
|
2
|
+
window.auvyx||(()=>{const f={};let x=null;const o=(n,c,u)=>{const b=typeof c=="object"?c:{selector:c,init:u};f[n]={selector:b.selector,init:b.init,refresh:b.refresh}},h=(n,c)=>{const u=f[c];if(u)try{u.init(n),n.hasAttribute(`data-${c}-initialized`)&&(n.dataset.basecoatComponent=c)}catch(b){if(console.error(`Failed to initialize ${c}:`,b),typeof n._destroy=="function")try{n._destroy()}catch(e){console.error(`Failed to clean up ${c} after initialization error:`,e)}delete n._destroy,n.removeAttribute(`data-${c}-initialized`),delete n.dataset.basecoatComponent}},E=n=>{if(!n||n.nodeType!==Node.ELEMENT_NODE)return;const c=n.dataset?.basecoatComponent;if(typeof n._destroy=="function")try{n._destroy()}catch(u){console.error("Failed to destroy component:",u)}delete n._destroy,c&&n.removeAttribute(`data-${c}-initialized`),delete n.dataset.basecoatComponent},I=n=>{n.nodeType===Node.ELEMENT_NODE&&(n.isConnected||(n.dataset?.basecoatComponent&&E(n),n.querySelectorAll("[data-basecoat-component]").forEach(E)))},L=n=>Array.from(new Set(n)),_=(n,c,u=!1)=>{const b=Array.from(document.querySelectorAll(c));return u&&b.push(...document.querySelectorAll(`[data-basecoat-component="${n}"]`)),L(b)},A=(n={})=>{const c=n.force===!0;Object.entries(f).forEach(([u,{selector:b}])=>{_(u,b,c).forEach(e=>{const t=e.dataset?.basecoatComponent===u;c&&E(e),(t||e.matches(b))&&h(e,u)})})},w=n=>{n.nodeType===Node.ELEMENT_NODE&&Object.entries(f).forEach(([c,{selector:u}])=>{n.matches(u)&&h(n,c),n.querySelectorAll(u).forEach(b=>h(b,c))})},q=n=>{if(!n)return;if(typeof n.refresh=="function"){n.refresh();return}const c=n.dataset?.basecoatComponent,u=c?f[c]:null;u?.refresh&&u.refresh(n)},k=()=>{x||(x=new MutationObserver(n=>{n.forEach(c=>{c.addedNodes.forEach(w),c.removedNodes.forEach(I)})}),x.observe(document.body,{childList:!0,subtree:!0}))},O=()=>{x&&(x.disconnect(),x=null)},v=(n,c={})=>{const u=f[n];if(!u){console.warn(`Component '${n}' not found in registry`);return}const b=c.force===!0;_(n,u.selector,b).forEach(e=>{const t=e.dataset?.basecoatComponent===n;b&&E(e),(t||e.matches(u.selector))&&h(e,n)})},M=(n={})=>{A(n)},C=n=>{const c=n==="dark";document.documentElement.classList.toggle("dark",c);try{localStorage.setItem("themeMode",c?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:c?"dark":"light"}}))},S=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.auvyx=window.basecoat={register:o,init:v,initAll:M,refresh:q,start:k,stop:O,theme:{get:S,set:C,toggle:()=>C(S()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{A(),k()})})(),(()=>{const f=new WeakMap,x=e=>{const t=e.querySelector(":scope > button"),i=t?.querySelector(":scope > span")||null,s=e.querySelector(":scope > [data-popover]"),l=s?s.querySelector('[role="listbox"]'):null,a=e.querySelector(':scope > input[type="hidden"]');return{trigger:t,selectedLabel:i,popover:s,listbox:l,input:a}},o=e=>e.dataset.value??e.textContent.trim(),h=e=>e.dataset.label||e.textContent.trim(),E=e=>e.dataset.format==="object"?"object":"value",I=e=>e.getAttribute("aria-disabled")==="true",L=e=>({value:o(e),label:h(e)}),_=e=>{const t=Array.from(e.querySelectorAll('[role="option"]'));return{allOptions:t,options:t.filter(i=>!I(i))}},A=(e,{isMultiple:t,format:i})=>{if(t)try{const s=JSON.parse(e||"[]");return Array.isArray(s)?s.map(l=>i==="object"&&l&&typeof l=="object"?l.value:l).filter(l=>l!=null).map(String):[]}catch{return[]}if(i==="object")try{const s=JSON.parse(e||"null");return s&&typeof s=="object"&&s.value!=null?String(s.value):""}catch{return""}return e||""},w=(e,t)=>{if(e.format==="object")return JSON.stringify(e.isMultiple?t:t[0]||null);const i=t.map(s=>s.value);return e.isMultiple?JSON.stringify(i):i[0]||""},q=e=>{e.selectedLabel.textContent=e.placeholder||"",e.selectedLabel.classList.toggle("text-muted-foreground",!!e.placeholder),e.input.value=e.isMultiple?w(e,[]):""},k=(e,t)=>{const i=t.getBoundingClientRect(),s=e.listbox.getBoundingClientRect();i.top<s.top?e.listbox.scrollTop-=s.top-i.top:i.bottom>s.bottom&&(e.listbox.scrollTop+=i.bottom-s.bottom)},O=(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?e.trigger.setAttribute("aria-activedescendant",i.id):e.trigger.removeAttribute("aria-activedescendant")}else e.trigger.removeAttribute("aria-activedescendant")},v=(e,t,i=!0)=>{const s=f.get(e);let l,a;if(s.isMultiple){const d=Array.isArray(t)?t:[];s.selectedOptions.clear(),d.forEach(m=>s.selectedOptions.add(m));const g=s.options.filter(m=>s.selectedOptions.has(m));a=g.map(L),g.length===0?(s.selectedLabel.textContent=s.placeholder,s.selectedLabel.classList.add("text-muted-foreground")):(s.selectedLabel.textContent=a.map(m=>m.label).join(", "),s.selectedLabel.classList.remove("text-muted-foreground")),l=a.map(m=>m.value),s.input.value=w(s,a)}else{const d=t;d?(d.dataset.label?s.selectedLabel.textContent=d.dataset.label:s.selectedLabel.innerHTML=d.innerHTML,s.selectedLabel.classList.remove("text-muted-foreground"),a=L(d),l=a.value,s.input.value=w(s,[a])):(s.options.forEach(g=>g.removeAttribute("aria-selected")),q(s),a=null,l="")}s.options.forEach(d=>{(s.isMultiple?s.selectedOptions.has(d):t&&d===t)?d.setAttribute("aria-selected","true"):d.removeAttribute("aria-selected")}),i&&e.dispatchEvent(new CustomEvent("change",{detail:{value:l,selected:a},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"),O(e,-1))},C=e=>{const t=f.get(e);if(!t)return;const i=x(e);if(!i.trigger||!i.selectedLabel||!i.popover||!i.listbox||!i.input){const a=[];i.trigger||a.push("trigger"),i.selectedLabel||a.push("selected label"),i.popover||a.push("popover"),i.listbox||a.push("listbox"),i.input||a.push("input"),console.error(`Select component refresh failed. Missing element(s): ${a.join(", ")}`,e);return}const s=i.input.value;if(Object.assign(t,i,_(i.listbox)),t.visibleOptions=[...t.options],t.isMultiple=t.listbox.getAttribute("aria-multiselectable")==="true",t.format=E(e),t.placeholder=e.dataset.placeholder||"",t.closeOnSelect=e.dataset.closeOnSelect==="true",t.isMultiple){t.selectedOptions||(t.selectedOptions=new Set);const a=A(s,t),d=a.length?a.map(g=>t.options.find(m=>o(m)===g)).filter(Boolean):t.options.filter(g=>g.getAttribute("aria-selected")==="true");v(e,d,!1)}else{const a=A(s,t),d=a===""&&t.placeholder?null:t.options.find(g=>o(g)===a)||t.options.find(g=>g.getAttribute("aria-selected")==="true");t.options.forEach(g=>g.removeAttribute("aria-selected")),v(e,d||null,!1)}const l=t.listbox.querySelector('[role="option"][aria-selected="true"]');O(t,l?t.options.indexOf(l):-1)},S=(e,t)=>{const i=f.get(e);i.selectedOptions.has(t)?i.selectedOptions.delete(t):i.selectedOptions.add(t),v(e,i.options.filter(s=>i.selectedOptions.has(s)))},n=(e,t)=>{const i=f.get(e);if(i.isMultiple){const s=i.options.find(l=>o(l)===t&&!i.selectedOptions.has(l));if(!s)return;i.selectedOptions.add(s),v(e,i.options.filter(l=>i.selectedOptions.has(l)))}else{const s=i.options.find(l=>o(l)===t);if(!s)return;if(i.placeholder&&o(s)===""){v(e,null),M(i);return}e.value!==t&&v(e,s),M(i)}},c=(e,t)=>{const i=f.get(e);if(!i.isMultiple)return;const s=i.options.find(l=>o(l)===t&&i.selectedOptions.has(l));s&&(i.selectedOptions.delete(s),v(e,i.options.filter(l=>i.selectedOptions.has(l))))},u=(e,t)=>{const i=f.get(t),s=i.popover.getAttribute("aria-hidden")==="false";if(!["ArrowDown","ArrowUp","Enter","Home","End","Escape"].includes(e.key))return;if(!s){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(i.activeIndex>-1){const d=i.options[i.activeIndex];i.isMultiple?(S(t,d),i.closeOnSelect&&t.close()):(i.placeholder&&o(d)===""?v(t,null):t.value!==o(d)&&v(t,d),t.close())}return}if(i.visibleOptions.length===0)return;const l=i.activeIndex>-1?i.visibleOptions.indexOf(i.options[i.activeIndex]):-1;let a=l;if(e.key==="ArrowDown"&&l<i.visibleOptions.length-1&&(a=l+1),e.key==="ArrowUp"&&(a=l>0?l-1:0),e.key==="Home"&&(a=0),e.key==="End"&&(a=i.visibleOptions.length-1),a!==l){const d=i.visibleOptions[a];O(i,i.options.indexOf(d)),k(i,d)}},b=e=>{if(e.dataset.selectInitialized)return;const t={activeIndex:-1,selectedOptions:null,options:[],allOptions:[],visibleOptions:[],format:"value"};if(f.set(e,t),e.refresh=()=>C(e),C(e),!t.trigger||!t.selectedLabel||!t.popover||!t.listbox||!t.input){f.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 r=t.listbox.querySelector('[role="option"][aria-selected="true"]');r&&(O(t,t.options.indexOf(r)),k(t,r))},e.close=(r=!0)=>M(t,r),e.togglePopover=()=>t.trigger.getAttribute("aria-expanded")==="true"?e.close():e.open();const i=r=>u(r,e),s=e.togglePopover,l=r=>{const y=r.target.closest('[role="option"]');if(y&&t.visibleOptions.includes(y)){const p=t.options.indexOf(y);p!==t.activeIndex&&O(t,p)}},a=()=>{const r=t.listbox.querySelector('[role="option"][aria-selected="true"]');O(t,r?t.options.indexOf(r):-1)},d=r=>{const y=r.target.closest('[role="option"]');if(!y)return;const p=t.options.find(N=>N===y);p&&(t.isMultiple?(S(e,p),t.closeOnSelect?e.close():(O(t,t.options.indexOf(p)),t.trigger.focus())):(t.placeholder&&o(p)===""?v(e,null):e.value!==o(p)&&v(e,p),e.close()))},g=r=>{e.contains(r.target)||e.close(!1)},m=r=>{e.contains(r.detail.source)||e.close(!1)};t.trigger.addEventListener("keydown",i),t.trigger.addEventListener("click",s),t.listbox.addEventListener("mousemove",l),t.listbox.addEventListener("mouseleave",a),t.listbox.addEventListener("click",d),document.addEventListener("click",g),document.addEventListener("basecoat:popover",m),e._destroy=()=>{t.trigger.removeEventListener("keydown",i),t.trigger.removeEventListener("click",s),t.listbox.removeEventListener("mousemove",l),t.listbox.removeEventListener("mouseleave",a),t.listbox.removeEventListener("click",d),document.removeEventListener("click",g),document.removeEventListener("basecoat:popover",m),f.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(r=>t.selectedOptions.has(r)).map(o):A(t.input.value,t),set:r=>{if(t.isMultiple){const y=Array.isArray(r)?r:r!=null?[r]:[];v(e,y.map(p=>t.options.find(N=>o(N)===p)).filter(Boolean))}else{if(r==null||r===""){v(e,null),e.close();return}const y=t.options.find(p=>o(p)===r);y&&(v(e,y),e.close())}}}),Object.defineProperty(e,"selected",{configurable:!0,get:()=>{if(t.isMultiple)return t.options.filter(p=>t.selectedOptions.has(p)).map(L);const r=e.value,y=t.options.find(p=>o(p)===r);return y?L(y):null}}),e.select=r=>n(e,r),e.selectByValue=e.select,t.isMultiple&&(e.deselect=r=>c(e,r),e.toggle=r=>{const y=t.options.find(p=>o(p)===r);y&&S(e,y)},e.selectAll=()=>v(e,t.options),e.selectNone=()=>v(e,[])),t.popover.setAttribute("aria-hidden","true"),t.trigger.setAttribute("aria-expanded","false"),e.dataset.selectInitialized="true",e.dispatchEvent(new CustomEvent("basecoat:initialized"))};window.auvyx&&window.auvyx.register("select",{selector:"div.select:not([data-select-initialized])",init:b,refresh:C})})(),(()=>{var f=class extends HTMLElement{static observedAttributes=["value"];static relayed=["change"];static relayNative=!1;connectedCallback(){if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>this.isConnected&&this.connectedCallback(),{once:!0});return}this.setup(),this._children=new MutationObserver(()=>{if(this.querySelector(`:scope > ${this.constructor.rootSelector}`)===this.root)return;const o=this.root?this.snapshot():void 0;this.teardown(),this.setup(o)}),this._children.observe(this,{childList:!0})}disconnectedCallback(){this._children?.disconnect(),this.teardown()}setup(o){if(this.root=this.querySelector(`:scope > ${this.constructor.rootSelector}`),!!this.root){window.auvyx?.init(this.constructor.component),this._relay=h=>{h.target!==this.root||!this.constructor.relayNative&&!(h instanceof CustomEvent)||(h.stopPropagation(),this._silent||this.emit(h.type,{value:this.value}))};for(const h of this.constructor.relayed)this.root.addEventListener(h,this._relay);this.attach?.(),o!==void 0?this.restore(o):this.applyInitial()}}teardown(){if(this.detach?.(),!!this.root){for(const o of this.constructor.relayed)this.root.removeEventListener(o,this._relay);this.root._destroy?.(),delete this.root.dataset[`${this.constructor.component.replace(/-(\w)/g,(o,h)=>h.toUpperCase())}Initialized`],this.root=null}}applyInitial(){const o=this._pending!==void 0?this._pending:this.getAttribute("value");this._pending=void 0,o!==null&&(this.value=o)}snapshot(){return this.value}restore(o){o!==null&&(this.value=o)}attributeChangedCallback(o,h,E){o==="value"&&this.root&&E!==null&&E!==this.value&&(this.value=E)}defer(o){return this.root?!1:(this._pending=o,!0)}silently(o){this._silent=!0;try{o()}finally{this._silent=!1}}emit(o,h){this.dispatchEvent(new CustomEvent(o,{detail:h,bubbles:!0}))}reportValue(){const o=this.value;JSON.stringify(o)!==JSON.stringify(this._last)&&(this._last=o,this._silent||this.emit("change",{value:o}))}},x=class extends f{static component="select";static rootSelector=".select";get value(){return this.root?this.root.value:null}set value(o){this.defer(o)||this.root.select&&this.silently(()=>this.root.select(o))}};customElements.get("auvyx-select")||customElements.define("auvyx-select",x)})();
|
package/dist/wc/sidebar.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @auvyx/ui v0.1.
|
|
2
|
-
window.
|
|
1
|
+
/*! @auvyx/ui v0.1.2 | MIT License | see LICENSE */
|
|
2
|
+
window.auvyx||(()=>{const d={};let c=null;const i=(e,s,o)=>{const n=typeof s=="object"?s:{selector:s,init:o};d[e]={selector:n.selector,init:n.init,refresh:n.refresh}},t=(e,s)=>{const o=d[s];if(o)try{o.init(e),e.hasAttribute(`data-${s}-initialized`)&&(e.dataset.basecoatComponent=s)}catch(n){if(console.error(`Failed to initialize ${s}:`,n),typeof e._destroy=="function")try{e._destroy()}catch(l){console.error(`Failed to clean up ${s} after initialization error:`,l)}delete e._destroy,e.removeAttribute(`data-${s}-initialized`),delete e.dataset.basecoatComponent}},r=e=>{if(!e||e.nodeType!==Node.ELEMENT_NODE)return;const s=e.dataset?.basecoatComponent;if(typeof e._destroy=="function")try{e._destroy()}catch(o){console.error("Failed to destroy component:",o)}delete e._destroy,s&&e.removeAttribute(`data-${s}-initialized`),delete e.dataset.basecoatComponent},a=e=>{e.nodeType===Node.ELEMENT_NODE&&(e.isConnected||(e.dataset?.basecoatComponent&&r(e),e.querySelectorAll("[data-basecoat-component]").forEach(r)))},u=e=>Array.from(new Set(e)),p=(e,s,o=!1)=>{const n=Array.from(document.querySelectorAll(s));return o&&n.push(...document.querySelectorAll(`[data-basecoat-component="${e}"]`)),u(n)},y=(e={})=>{const s=e.force===!0;Object.entries(d).forEach(([o,{selector:n}])=>{p(o,n,s).forEach(l=>{const E=l.dataset?.basecoatComponent===o;s&&r(l),(E||l.matches(n))&&t(l,o)})})},v=e=>{e.nodeType===Node.ELEMENT_NODE&&Object.entries(d).forEach(([s,{selector:o}])=>{e.matches(o)&&t(e,s),e.querySelectorAll(o).forEach(n=>t(n,s))})},g=e=>{if(!e)return;if(typeof e.refresh=="function"){e.refresh();return}const s=e.dataset?.basecoatComponent,o=s?d[s]:null;o?.refresh&&o.refresh(e)},h=()=>{c||(c=new MutationObserver(e=>{e.forEach(s=>{s.addedNodes.forEach(v),s.removedNodes.forEach(a)})}),c.observe(document.body,{childList:!0,subtree:!0}))},f=()=>{c&&(c.disconnect(),c=null)},b=(e,s={})=>{const o=d[e];if(!o){console.warn(`Component '${e}' not found in registry`);return}const n=s.force===!0;p(e,o.selector,n).forEach(l=>{const E=l.dataset?.basecoatComponent===e;n&&r(l),(E||l.matches(o.selector))&&t(l,e)})},_=(e={})=>{y(e)},w=e=>{const s=e==="dark";document.documentElement.classList.toggle("dark",s);try{localStorage.setItem("themeMode",s?"dark":"light")}catch{}document.dispatchEvent(new CustomEvent("basecoat:themechange",{detail:{mode:s?"dark":"light"}}))},O=()=>document.documentElement.classList.contains("dark")?"dark":"light";window.auvyx=window.basecoat={register:i,init:b,initAll:_,refresh:g,start:h,stop:f,theme:{get:O,set:w,toggle:()=>w(O()==="dark"?"light":"dark")}},document.addEventListener("DOMContentLoaded",()=>{y(),h()})})(),(()=>{const d=i=>{if(i.dataset.sidebarInitialized&&typeof i.toggle=="function")return;if(i.dataset.position==="static"){i.dataset.sidebarInitialized="true";return}const t=i.dataset.initialOpen!=="false",r=i.dataset.initialMobileOpen==="true",a=parseInt(i.dataset.breakpoint)||768;let u=a>0?window.innerWidth>=a?t:r:t;const p=()=>i.dataset.collapsible==="icon"&&(a<=0||window.innerWidth>=a),y=()=>{const h=p();i.setAttribute("aria-hidden",String(!u&&!h)),i.dataset.state=u?"open":"collapsed",u||h?i.removeAttribute("inert"):i.setAttribute("inert",""),i.id&&document.querySelectorAll(`[data-sidebar-toggle="${CSS.escape(i.id)}"]`).forEach(f=>f.setAttribute("aria-expanded",String(u))),i.dispatchEvent(new CustomEvent("basecoat:sidebar",{detail:{open:u}}))},v=h=>{u=!!h,y()};i.open=()=>v(!0),i.close=()=>v(!1),i.toggle=()=>v(!u);const g=h=>{const f=h.target,b=i.querySelector(":scope > nav");if(window.innerWidth<a&&f.closest("a, button")&&!f.closest("[data-keep-mobile-sidebar-open]")){document.activeElement&&document.activeElement.blur(),i.close();return}if(!u&&p()&&f.closest("summary")){h.preventDefault(),i.open(),f.closest("details").open=!0;return}(f===i||b&&!b.contains(f))&&(document.activeElement&&document.activeElement.blur(),i.close())};i.addEventListener("click",g),i._destroy=()=>{i.removeEventListener("click",g),delete i.open,delete i.close,delete i.toggle},y(),i.dataset.sidebarInitialized="true",i.dispatchEvent(new CustomEvent("basecoat:initialized"))},c=i=>i?document.getElementById(i):document.querySelector('.sidebar:not([data-position="static"])');document.addEventListener("click",i=>{const t=i.target.closest("[data-sidebar-toggle]");t&&c(t.getAttribute("data-sidebar-toggle"))?.toggle?.()}),document.addEventListener("keydown",i=>{if(i.key.toLowerCase()!=="b"||!(i.metaKey||i.ctrlKey)||i.altKey||i.shiftKey||i.target.closest("input, textarea, select, [contenteditable]"))return;const t=c("");!t||t.dataset.shortcut==="none"||typeof t.toggle!="function"||(i.preventDefault(),t.toggle())}),window.auvyx&&window.auvyx.register("sidebar",".sidebar",d)})(),(()=>{var d=class extends HTMLElement{static observedAttributes=["value"];static relayed=["change"];static relayNative=!1;connectedCallback(){if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>this.isConnected&&this.connectedCallback(),{once:!0});return}this.setup(),this._children=new MutationObserver(()=>{if(this.querySelector(`:scope > ${this.constructor.rootSelector}`)===this.root)return;const t=this.root?this.snapshot():void 0;this.teardown(),this.setup(t)}),this._children.observe(this,{childList:!0})}disconnectedCallback(){this._children?.disconnect(),this.teardown()}setup(t){if(this.root=this.querySelector(`:scope > ${this.constructor.rootSelector}`),!!this.root){window.auvyx?.init(this.constructor.component),this._relay=r=>{r.target!==this.root||!this.constructor.relayNative&&!(r instanceof CustomEvent)||(r.stopPropagation(),this._silent||this.emit(r.type,{value:this.value}))};for(const r of this.constructor.relayed)this.root.addEventListener(r,this._relay);this.attach?.(),t!==void 0?this.restore(t):this.applyInitial()}}teardown(){if(this.detach?.(),!!this.root){for(const t of this.constructor.relayed)this.root.removeEventListener(t,this._relay);this.root._destroy?.(),delete this.root.dataset[`${this.constructor.component.replace(/-(\w)/g,(t,r)=>r.toUpperCase())}Initialized`],this.root=null}}applyInitial(){const t=this._pending!==void 0?this._pending:this.getAttribute("value");this._pending=void 0,t!==null&&(this.value=t)}snapshot(){return this.value}restore(t){t!==null&&(this.value=t)}attributeChangedCallback(t,r,a){t==="value"&&this.root&&a!==null&&a!==this.value&&(this.value=a)}defer(t){return this.root?!1:(this._pending=t,!0)}silently(t){this._silent=!0;try{t()}finally{this._silent=!1}}emit(t,r){this.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0}))}reportValue(){const t=this.value;JSON.stringify(t)!==JSON.stringify(this._last)&&(this._last=t,this._silent||this.emit("change",{value:t}))}},c=class extends d{static observedAttributes=["open"];static relayed=[];applyInitial(){const t=this._pending!==void 0?this._pending:this.hasAttribute("open")||null;this._pending=void 0,this._lastOpen=this.isOpen(),t!==null&&!!t!==this._lastOpen&&(this.open=t)}attributeChangedCallback(t,r,a){t==="open"&&this.root&&(this.open=a!==null)}snapshot(){return this.isOpen()}restore(t){this._lastOpen=this.isOpen(),this.open=t}get open(){return this.root?this.isOpen():!!this._pending}set open(t){this.defer(!!t)||!!t!==this.isOpen()&&this.setOpen(!!t)}reportOpen(){const t=this.isOpen();t!==this._lastOpen&&(this._lastOpen=t,this.emit("toggle",{open:t}))}},i=class extends c{static component="sidebar";static rootSelector=".sidebar";attach(){this._onState=()=>this.reportOpen(),this.root.addEventListener("basecoat:sidebar",this._onState)}detach(){this.root?.removeEventListener("basecoat:sidebar",this._onState)}isOpen(){return this.root?.dataset.state!=="collapsed"}setOpen(t){t?this.root.open?.():this.root.close?.()}};customElements.get("auvyx-sidebar")||customElements.define("auvyx-sidebar",i)})();
|