fvn-ui 0.1.0-alpha.49 → 0.1.0-alpha.50
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/dist/ui.esm.js +6 -5
- package/dist/ui.js +1 -1
- package/package.json +1 -1
- package/src/fvn-ui/index.js +5 -3
package/dist/ui.esm.js
CHANGED
|
@@ -1762,11 +1762,12 @@ const Zt = "ui-component", lt = (e) => String(e || "").toLowerCase().replace(/[^
|
|
|
1762
1762
|
description: we,
|
|
1763
1763
|
divider: $e
|
|
1764
1764
|
}, At = (() => {
|
|
1765
|
-
const e = () => document.documentElement.classList.contains("dark"),
|
|
1766
|
-
return matchMedia("(prefers-color-scheme: dark)").matches &&
|
|
1767
|
-
isDark:
|
|
1768
|
-
|
|
1769
|
-
toggle:
|
|
1765
|
+
const e = () => n() ? ["sun", "moon"] : ["moon", "sun"], n = () => document.documentElement.classList.contains("dark"), i = (l) => document.documentElement.classList.toggle("dark", l);
|
|
1766
|
+
return matchMedia("(prefers-color-scheme: dark)").matches && i(!0), {
|
|
1767
|
+
isDark: n,
|
|
1768
|
+
getIcons: e,
|
|
1769
|
+
toggle: i,
|
|
1770
|
+
menuItem: { icon: e(), action: () => i() }
|
|
1770
1771
|
};
|
|
1771
1772
|
})(), sn = {
|
|
1772
1773
|
...en,
|
package/dist/ui.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
<svg class="ui-icon ui-icon-${n}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg">
|
|
3
3
|
${e}
|
|
4
4
|
</svg>
|
|
5
|
-
`:"",oe=e=>Vt(_e[e],e);oe.extend=e=>Object.assign(_e,e),oe.list=()=>Object.keys(_e);const ee=R("btn");function J(...e){const{parent:n,label:i="",icon:l,variant:t="default",shape:o,size:a,color:c,muted:s,loading:v,type:M="button",disabled:$,attrs:w={},dataset:k,props:p,...C}=B(...e),j=/primary|secondary/.test(t),_=/outline|ghost/.test(t),m=/minimal|stripped|none/.test(t),y=!_&&!m,V=Array.isArray(c),T=()=>V?c[Math.floor(Math.random()*c.length)]:c,D=T(),A=y?j?t:D||"default":D&&`sub-${D}`,x=Array.isArray(l)?l:l?[l]:[],P=[],L=h("button",n,{...C,type:M,disabled:$,class:[ee(),t!=="default"&&ee(t),y&&ee("filled"),_&&ee("sub"),_&&`${ee("hover")}${D?"-sub":""}`,x.length&&!i&&ee("square"),o&&!m&&ee(o),a&&ee.core("size",a),s&&ee("muted"),v&&"loading",q(p),C.class],attrs:w,data:{...k,uiCol:A},children:[x.length&&h("div",{class:ee.el("icon"),children:x.map((u,z)=>h("span",{class:z>0&&"ui-hidden",html:oe(u),ref:g=>P[z]=g}))}),i&&h("div",{html:i})],setLabel(u,z=5e3){this.disabled=!0,this.textContent=u,z&&setTimeout(()=>{this.disabled=!1,this.textContent=i},z)},toggleLoading(u){this.classList.toggle("loading",typeof u=="string"),this.textContent=u||i}}),N=[];if(V&&N.push(()=>{const u=T();L.dataset.uiCol=y?j?t:u||"default":u&&`sub-${u}`}),x.length>1){let u=0;N.push(()=>{P[u].classList.add("ui-hidden"),u=(u+1)%x.length,P[u].classList.remove("ui-hidden")})}return N.length&&L.addEventListener("click",()=>{L.disabled||N.forEach(u=>u())}),L}const rt=R("dialog"),at=R("popover"),ke=new WeakMap;function ye(...e){const{parent:n,variant:i="modal",type:l,anchor:t,position:o="bottom",arrow:a=!0,content:c,toggled:s,open:v,hover:M,inverted:$,_isChildOfAnchor:w,props:k,...p}=B(...e),C=s||v;if(C){let d=null,E=!1;if(C instanceof Event){if(d=C.currentTarget||C.target,E=["mouseover","mouseenter"].includes(C.type),E&&d){const O=ke.get(d);if(O?.isOpen)return O}}else C instanceof Element?d=C:C===!0&&t instanceof Element&&(d=t);if(d&&E){const O=ke.get(d);if(O)return O.isOpen||O.show(),O;d.style.position=d.style.position||"relative";const W=ye({...p,parent:d,variant:i,type:l,position:o,arrow:a,content:c,inverted:$,anchor:d,_isChildOfAnchor:!0});return ke.set(d,W),W.show(),W}const b=ye({...p,parent:document.body,variant:i||"modal",type:l||i||"modal",position:o,arrow:a,content:c,inverted:$,anchor:d});return b.show(),b}const j=U("onOpen",p),_=U("onClose",p);let m=!1,y,V,T=t;const f=(l||i)==="modal",A=d=>{d.key==="Escape"&&(d.preventDefault(),x())},x=()=>{m&&(m=!1,f?g.close():g.dataset.open="false",y?.(),document.removeEventListener("keydown",A,!0),_?.())},P=d=>{m||(!t&&d&&(T=d instanceof Event?d.currentTarget||d.target:d),g.isConnected||document.body.appendChild(g),m=!0,f?g.showModal():(N(),g.dataset.open="true",y=it(g,E=>{T?.contains(E.target)||x()})),document.addEventListener("keydown",A,!0),j?.())},L=d=>m?x():P(d),N=()=>{if(!T||f)return;const d=8,E=12,b=T.getBoundingClientRect(),O=g.offsetWidth||200,W=g.offsetHeight||100,Q=window.innerWidth,le=window.innerHeight,ne=o==="bottom"&&b.bottom+W+d>le?"top":o==="top"&&b.top-W-d<0?"bottom":o;g.dataset.position=ne;const ue=b.left+b.width/2,we=ue-O/2,se=Math.max(E,Math.min(Q-O-E,we));if(w){const pe=se-b.left;g.style.left=`${pe}px`,g.style.top=ne==="bottom"?`${b.height+d}px`:"auto",g.style.bottom=ne==="top"?`${b.height+d}px`:"auto"}else g.style.left=`${se}px`,g.style.top=ne==="bottom"?`${b.bottom+d}px`:`${b.top-W-d}px`,g.style.bottom="auto";g.style.transform="none",V&&(V.style.left=`${ue-se}px`)},u=h("div",{class:rt.el("content"),children:c?typeof c=="function"?c(x):Array.isArray(c)?c:[c]:[]}),z=d=>{if(u.innerHTML="",typeof d=="string")u.innerHTML=d;else if(d instanceof HTMLElement)u.appendChild(d);else if(Array.isArray(d))d.forEach(E=>u.appendChild(E));else if(typeof d=="function"){const E=d(x);E instanceof HTMLElement?u.appendChild(E):Array.isArray(E)&&E.forEach(b=>u.appendChild(b))}};let g;return f?g=h("dialog",n,{...p,class:[rt(),"ui-dialog-component",q(k),p.class],onClick:d=>{const E=g.getBoundingClientRect();E.top<=d.clientY&&d.clientY<=E.bottom&&E.left<=d.clientX&&d.clientX<=E.right||x()},children:[u]}):g=h("div",n,{...p,class:[at(),"ui-dialog-component",q(k),p.class],data:{open:"false",position:o},style:w?{position:"absolute"}:void 0,children:[a&&h("div",{class:at.el("arrow"),ref:d=>V=d}),u]}),$&&g.classList.add("ui-inverted"),g.show=P,g.hide=x,g.toggle=L,g.setContent=z,g.destroy=()=>{x(),T&&ke.delete(T),g.remove()},Object.defineProperty(g,"isOpen",{get:()=>m}),w&&t?t.addEventListener("mouseleave",x):M&&t&&(t.addEventListener("mouseleave",x),g.addEventListener("mouseleave",x)),g}const me=(...e)=>{const{parent:n,text:i="",large:l,props:t,...o}=B(...e);return h(l?"h1":"div",n,{...o,class:["ui-title",l&&"ui-title--large",q(t),o.class],html:o.html||i})},be=(...e)=>{const{parent:n,text:i="",small:l=!0,props:t,...o}=B(...e);return h("p",n,{...o,class:["ui-description","muted",l&&"small",q(t),o.class],html:o.html||i})},te=(...e)=>{const{parent:n,text:i="",soft:l,align:t,props:o,...a}=B(...e);return h("label",n,{...a,class:["ui-label",l&&"ui-label--soft","block-1",q(o),a.class],data:{...a.data,align:t},html:a.html||i})},Ae=(...e)=>{const{parent:n,vertical:i,...l}=B(...e);return h("div",n,{...l,class:["ui-divider",i&&"ui-divider--vertical",l.class]})},re=(...e)=>{const{parent:n,title:i,description:l,large:t,gap:o=2,...a}=B(...e);return!i&&!l?null:X(n,{...a,gap:o,class:["ui-header",a.class],children:[i&&me(i,{large:t}),l&&be(l)].filter(Boolean)})},De={title:me,description:be,label:te,header:re,divider:Ae},ct=R("dialog");function zt(...e){const{parent:n,icon:i,shape:l,color:t,triggerColor:o,confirmColor:a,variant:c,label:s="Open dialog",title:v="Are you absolutely sure?",description:M="This action cannot be undone.",confirm:$="Continue",cancel:w="Cancel",dialogVariant:k,type:p,inverted:C,props:j,..._}=B(...e),m=U("onCancel",_),y=U("onConfirm",_),V=k||p||"modal",T=h("div",n,{..._,class:[q(j),_.class]}),D=J(T,{label:s,variant:c,color:o||t,icon:i,shape:l}),f=ye(T,{variant:V,anchor:D,inverted:C,content:A=>[re({title:v,description:M,class:ct.el("inner")}),h("div",{class:ct.el("footer"),children:[J({label:w,shape:l,variant:"ghost",onclick:()=>{m?.(),A()}}),J({label:$,color:a||t,shape:l,onclick:async function(){try{this.disabled=!0,await y?.(!0),A()}finally{this.disabled=!1}}})]})]});return D.addEventListener("click",()=>f.show()),T.open=()=>f.show(),T.close=()=>f.hide(),T}const dt=R("image"),ut=e=>{const n=e.querySelector("img");n?.dataset.src&&(n.src=n.dataset.src,delete n.dataset.src)},jt=new IntersectionObserver((e,n)=>{for(const i of e)i.isIntersecting&&(ut(i.target),n.unobserve(i.target))},{rootMargin:"100% 0px"});function pt(...e){const{parent:n,src:i,alt:l="",lazy:t=!0,props:o,...a}=B(...e),c=h("div",n,{...a,class:[dt(),q(o),a.class],children:[h("img",{class:dt.el("img"),alt:l,...t?{data:{src:i}}:{src:i},onLoad:()=>c.dataset.loaded="true",onError:()=>c.dataset.error="true"})]});return t&&requestAnimationFrame(()=>{const s=c.getBoundingClientRect();s.top<window.innerHeight*2&&s.bottom>0?ut(c):jt.observe(c)}),c}const ae=R("avatar"),_t=e=>{if(!e)return"";const n=e.trim().split(/\s+/);return n.length>1?(n[0][0]+n.at(-1)[0]).toUpperCase():e.slice(0,2).toUpperCase()};function Dt(...e){const{parent:n,src:i,name:l,description:t,variant:o="round",size:a="small",color:c,props:s,...v}=B(...e),M=_t(l);return h("div",n,{...v,class:[ae(),o!=="square"&&ae("round"),a&&ae(a),q(s),v.class],children:[h("div",{class:ae.el("box"),data:{uiCol:c||(i?null:"primary")},children:[i?pt({src:i,alt:l||"",class:ae.el("image")}):null,!i&&M&&h("span",{class:ae.el("fallback"),text:M})]}),(l||t)&&h("div",{class:ae.el("info"),children:[l&&h("span",{class:"ui-name",text:l}),t&&h("span",{class:"ui-subtitle",text:t})]})]})}const Ne=R("card");function Nt(...e){const{parent:n,title:i,description:l,content:t,border:o=!0,props:a,...c}=B(...e);let s;const v=X(n,{...c,gap:a.gap??4,class:[Ne(),o&&"border",q(a,["gap"]),c.class],children:[re({title:i,description:l,class:Ne.el("header")}),X({class:[Ne.el("body"),q(a,["gap"])],ref:M=>s=M})]});return typeof t=="string"?s.innerHTML=t:t instanceof HTMLElement?s.appendChild(t):Array.isArray(t)?t.forEach(M=>s.appendChild(M)):typeof t=="function"&&t(s,v),v}const Pe=R("collapsible");function Pt(...e){const{parent:n,label:i,open:l,disabled:t,content:o,props:a,...c}=B(...e),s=U("onChange",c);let v=!!l,M;const $=()=>oe(v?"chevron-down":"chevron-right"),w=p=>{t||(v=!v,k.dataset.open=v,M.innerHTML=$(),s?.(v,p))},k=h("div",n,{...c,class:[Pe(),t&&"disabled",q(a),c.class],data:{open:v},children:[J({class:Pe.el("trigger"),variant:"none",disabled:t,icon:v?"chevron-down":"chevron-right",label:i,onclick:w,ref:p=>M=p.querySelector(".ui-btn__icon")}),X({class:[Pe.el("content"),"block-2"]},[o])]});return ie(k,()=>v,p=>{v=!!p,k.dataset.open=v,M.innerHTML=$()})}const Le=R("editable");function It(...e){const{parent:n,id:i,size:l="default",label:t,placeholder:o="...",value:a,rows:c,multiline:s,plainText:v=!1,plain:M=!1,focus:$,onChange:w,onInput:k,onFocus:p,onBlur:C,onKeydown:j,onSubmit:_,props:m,attrs:y={},...V}=B(...e),T=c===1||s===!1,D=c&&c>1?c:null;let f;const A=()=>{f.textContent.trim()||(f.innerHTML="")},x=()=>f?.textContent||"",P=()=>f?.innerHTML||"",L=b=>{A();const O=P();k?.call(f,O,b),w?.call(f,O,b)},N=b=>{j?.call(f,b),T&&b.key==="Enter"&&(b.preventDefault(),_?.call(f,P(),b))},u=b=>{if(v||T){b.preventDefault();let O=b.clipboardData.getData("text/plain");T&&(O=O.replace(/[\r\n]+/g," ")),document.execCommand("insertText",!1,O)}},z=b=>{if(M&&f.textContent){const O=document.createRange();O.selectNodeContents(f);const W=window.getSelection();W.removeAllRanges(),W.addRange(O)}p?.call(f,b)},g=b=>{A(),C?.call(f,P(),b)},d=h("div",{...V,...y,...nt,id:i,contentEditable:"true",data:{placeholder:o},style:D?{minHeight:`${D*1.5}em`}:void 0,class:[Le(),M&&"ui-plain",Le.core("size",l),T&&Le("single-line"),"ui-border",V.class],ref:b=>{f=b,a&&(b.innerHTML=a),$&&Ve(b)},onInput:L,onKeydown:N,onPaste:u,onFocus:z,onBlur:g}),E=X(n,{class:[Le.el("wrap"),q(m)],children:[t&&te({text:t,soft:!0}),d]});return Object.defineProperty(E,"value",{get:x,set:b=>{f.innerHTML=b||"",A()}}),Object.defineProperty(E,"html",{get:P,set:b=>{f.innerHTML=b||"",A()}}),E}const xe=R("dashboard"),Bt={shape:"round",variant:"ghost"};function qt(...e){const{parent:n,title:i="",description:l="",menu:t=[],views:o={},defaultView:a="default",props:c,...s}=B(...e);let v,M=a;const $=Object.keys(o),w=o[a]?a:o.main?"main":o.root?"root":$[0]||null,k=m=>{o[m]&&(M=m===M?w:m,p())},p=()=>{v.innerHTML="";const m=o[M];if(!m)return;M!==w&&J(v,{icon:"x",variant:"ghost",shape:"round",class:xe.el("close"),onClick:()=>k(w)});const y=m();if(y){if(typeof y=="string"){v.innerHTML+=y;return}if(Array.isArray(y)){for(const V of y)v.appendChild(V);return}v.appendChild(y)}},C=t.map(({view:m,action:y,...V})=>J({...Bt,...V,onClick:T=>{m&&k(m),y?.(T),V.onClick?.(T)}})),j=he("between",{class:[xe.el("header"),c.border!==!1&&"border-bottom",q(c)],children:[re({title:i,description:l,gap:1,flex:1}),he({end:!0,gap:0,class:xe.el("menu"),children:C})]}),_=X(n,{...s,class:[xe(),s.class],gap:4,children:[j,h("div",{class:xe.el("content"),ref:m=>v=m})]});return w&&(M=w,p()),_.navigate=k,_.getCurrentView=()=>M,_}const ce=R("draggable");function Ft(...e){const{parent:n,id:i,items:l=[],icon:t="grip",handlePosition:o="right",index:a=!0,plain:c,onChange:s,onDragStart:v,onDragEnd:M,...$}=B(...e);let w,k=null,p=-1;const C=()=>[...w.children].map(f=>f._content),j=()=>h("div",{class:ce.el("handle"),html:oe(t)}),_=f=>{const A=f.content||f,x=j(),P=h("div",{class:ce.el("content"),children:[A]}),L=h("div",{class:[ce.el("item"),c&&ce("plain"),a&&ce("index"),f.disabled&&ce("disabled")],draggable:"true",children:o==="left"?[x,P]:[P,x]});return L._content=A,L.ondragstart=N=>{k=L,p=[...w.children].indexOf(L),L.classList.add("ui-dragging"),N.dataTransfer.effectAllowed="move";const u=document.createElement("div");u.style.cssText="position:absolute;top:-9999px;left:-9999px;width:1px;height:1px;",document.body.appendChild(u),N.dataTransfer.setDragImage(u,0,0),requestAnimationFrame(()=>u.remove()),v?.({item:A,element:L})},L.ondragend=()=>{L.classList.remove("ui-dragging");const N=[...w.children].indexOf(L);p!==-1&&p!==N&&s?.({items:C(),from:p,to:N}),k=null,p=-1,M?.({item:A,element:L,index:N})},L.ondragover=N=>{if(N.preventDefault(),!k||k===L)return;const u=L.getBoundingClientRect();w.insertBefore(k,N.clientY>u.top+u.height/2?L.nextElementSibling:L)},L},m=(f,A)=>{const x=_(f);return A!==void 0&&A>=0&&A<w.children.length?w.insertBefore(x,w.children[A]):w.appendChild(x),x},y=f=>{let A;if(typeof f=="number"?A=w.children[f]:A=[...w.children].find(x=>x._content===f||x===f),A){const x=A._content;return A.remove(),x}return null},V=()=>{w.innerHTML=""},T=(f,A)=>{const x=[...w.children];if(f===A||f<0||A<0||f>=x.length||A>=x.length)return;const P=x[f],L=x[A];f<A?w.insertBefore(P,L.nextElementSibling):w.insertBefore(P,L),s?.({items:C(),from:f,to:A})},D=X(n,{...$,id:i,class:[ce(),$.class],ref:f=>{w=f}});return D.ondragover=f=>f.preventDefault(),l.forEach(f=>m(f)),Object.defineProperty(D,"items",{get:C}),D.add=m,D.remove=y,D.clear=V,D.reorder=T,D}const Y=R("input"),Wt={email:e=>!e||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),url:e=>!e||/^https?:\/\/.+/.test(e),phone:e=>!e||/^(\+47|0047)?\s*\d{2}\s*\d{2}\s*\d{2}\s*\d{2}$/.test(e.replace(/[\s-]/g," ").trim())};function ft(...e){const{parent:n,id:i,type:l="text",size:t="default",rows:o,icon:a,value:c,label:s,placeholder:v,focus:M,validate:$,required:w,min:k,max:p,step:C=1,clamp:j,counter:_,message:m,info:y,attrs:V={},props:T,...D}=B(...e),f=o!=null,A=l==="number",x=U("onSubmit",D),P=!f&&U("onSubmit",D,!0),L=U("onInput",D),N=U("onChange",D);let u,z,g,d,E,b=!1;const O=()=>x?.call(z,z.value),W=S=>{if(!m)return null;if(typeof m=="string")return m;const r=m[S]||S==="validate"&&typeof $=="string"&&m[$];return r?r.replace("{min}",k).replace("{max}",p).replace("{length}",z?.value?.length||0):null},Q=()=>typeof $=="function"?$:typeof $=="string"?Wt[$]:null,le=()=>{const S=z.value,r=Q();let H=null;w&&(!S||S.length===0)?H="required":r&&!r(S)?H="validate":!A&&k!=null&&S.length<k?H="min":!A&&p!=null&&S.length>p&&(H="max");const I=!!H;if(u.classList.toggle("invalid",I),d){const Z=I?W(H):null;d.textContent=Z||"",d.hidden=!Z}return E&&(E.hidden=I),!H},ne=()=>{if(!g)return;const S=z.value.length;g.textContent=p?`${S}/${p}`:S,g.classList.remove("warn","error","ok"),p&&S>p||k&&S>0&&S<k?g.classList.add("error"):p&&S>p*.9?g.classList.add("warn"):k&&S>=k&&g.classList.add("ok")},ue=S=>{b&&(b=!1,u.classList.remove("invalid"),d&&(d.textContent="",d.hidden=!0)),u.classList.toggle("has-value",!!z.value),($||w||k!=null||p!=null)&&le(),_&&ne(),L?.call(z,z.value,S)},we=S=>{N?.call(z,z.value,S)},se=S=>{S.key==="Enter"&&O()},pe=S=>{let H=(parseFloat(z.value)||0)+S*C;k!=null&&(H=Math.max(k,H)),p!=null&&(H=Math.min(p,H)),z.value=H,z.dispatchEvent(new Event("input",{bubbles:!0})),z.dispatchEvent(new Event("change",{bubbles:!0}))},Te=f?"textarea":"input",et=f?{rows:o,id:i,placeholder:v,attrs:{...V,maxlength:j?p:void 0}}:{type:l,id:i,value:c,placeholder:v,attrs:V},K=X(n,{gap:2,class:["ui-input-root",q(T),D.class],children:[s&&te({text:s,soft:!0}),h("div",{class:[Y.el("wrap"),Y.core("size",t),A&&Y.el("wrap--number")],ref:S=>u=S,children:[h(Te,{...D,...et,...nt,class:[Y(),P&&Y("submit"),A&&Y("number"),"ui-border",D.class],ref:S=>{z=S,f&&c&&(S.textContent=c),M&&Ve(S)},onInput:ue,onChange:N?we:void 0,onKeyup:x&&se,onBlur:A&&j?()=>{const S=parseFloat(z.value);isNaN(S)||(k!=null&&S<k?z.value=k:p!=null&&S>p&&(z.value=p))}:void 0}),A&&h("div",{class:Y.el("num-btns"),children:[J({icon:"minus",muted:!0,variant:"ghost",size:t,class:Y.el("num-btn"),attrs:{"aria-label":"Decrease",tabindex:-1},onClick:()=>pe(-1)}),J({icon:"plus",muted:!0,variant:"ghost",size:t,class:Y.el("num-btn"),attrs:{"aria-label":"Increase",tabindex:-1},onClick:()=>pe(1)})]}),P&&J({icon:a||"enter",muted:!0,variant:"ghost",size:t,attrs:{"aria-label":"Submit"},onClick:O})]}),(m||y||_)&&he({class:Y.el("footer"),justify:"between"},[m&&h("div",{class:Y.el("message"),hidden:!0,ref:S=>d=S}),y&&h("div",{class:Y.el("info"),text:y,ref:S=>E=S}),f&&_&&h("div",{class:Y.el("counter"),end:!0,ref:S=>{g=S,ne()}})])]});return K.input=z,K.isValid=le,K.error=S=>{b=!0,u.classList.add("invalid"),d&&S&&(d.textContent=S,d.hidden=!1)},K.ok=()=>{b=!1,u.classList.remove("invalid"),d&&(d.textContent="",d.hidden=!0)},K.reset=()=>{z.value="",b=!1,u.classList.remove("invalid","has-value"),d&&(d.textContent="",d.hidden=!0),E&&(E.hidden=!1),_&&ne()},ie(K,()=>z.value,S=>{z.value=S,ue()})}const Rt=R("checkbox");function Kt(...e){const{parent:n,checked:i,disabled:l,label:t,id:o,name:a,value:c="on",color:s,props:v,...M}=B(...e),$=U("onChange",M);let w,k,p=!!i;const C=()=>p?"checked":"unchecked",j=()=>p?s||"default":`sub-${s||"default"}`,_=(y,V)=>{p=!!y,w.checked=p,m.dataset.state=C(),k.dataset.uiCol=j(),V&&$?.(p,V)},m=h("label",n,{...M,class:[Rt(),"ui-form-item",l&&"disabled",q(v),M.class],data:{state:C()},children:[h("input",{type:"checkbox",class:"ui-form-input",id:o,name:a,value:c,disabled:l,checked:p,ref:y=>w=y,onChange:y=>_(y.target.checked,y)}),h("span",{class:"ui-form-control ui-border",data:{uiCol:j()},ref:y=>k=y,html:oe("check")}),t&&te({text:t,small:!0})]});return ie(m,()=>p,_)}const Ut=R("radio");function Gt(...e){const{parent:n,items:i=[],value:l,name:t=`radio-${Math.random().toString(36).slice(2,7)}`,label:o,orientation:a,disabled:c,color:s="default",props:v,...M}=B(...e),$=U("onChange",M),w=i.flat(),k=/row|horizontal/i.test(a),p=y=>y?.value??y?.label??String(y??"");let C=l??p(w[0]);const j=[],_=(y,V)=>{C=String(y);for(const T of j){const D=T.value===C;T.input.checked=D,T.el.dataset.state=D?"checked":"unchecked",T.control.dataset.uiCol=D?s:`sub-${s}`}V&&$?.(C,w.find(T=>p(T)===C),V)},m=h("div",n,{...M,class:[Ut(),"ui-form-group",k&&"horizontal",q(v),M.class],attrs:{role:"radio"},children:[o&&te({text:o,soft:!0}),h("div",{class:"ui-form-group__items",children:w.map(y=>{const V=String(p(y)),T=y?.label??V,D=c||y?.disabled,f=V===String(C);let A,x;const P=h("label",{class:["ui-radio ui-form-item",D&&"disabled"],data:{state:f?"checked":"unchecked"},children:[h("input",{type:"radio",class:"ui-form-input",name:t,value:V,disabled:D,checked:f,ref:L=>A=L,onChange:L=>_(L.target.value,L)}),h("span",{class:"ui-form-control ui-form-control--round ui-border",data:{uiCol:f?s:`sub-${s}`},ref:L=>x=L}),te({text:T,small:!0})]});return j.push({value:V,input:A,control:x,el:P}),P})})]});return ie(m,()=>C,y=>_(y))}const G=R("select");function Xt(...e){const{parent:n,items:i,options:l,value:t,placeholder:o="Select",label:a,adaptive:c=!0,multiselect:s=!1,filter:v,filterPlaceholder:M="Filter...",required:$,focus:w,props:k,...p}=B(...e);let C=i||l||[];const j=Number.isInteger(v)?C.length>v:!!v,_=U("onChange",p);let m,y,V,T,D,f,A,x=!1,P="",L=!1;const N=r=>Number.isInteger(r)&&C[r]?String(C[r].value):String(r);let u=s?new Set(Array.isArray(t)?t.map(N):t!=null?[N(t)]:[]):t??null,z=-1;const g=r=>C.findIndex(H=>String(H.value)===String(r)),d=r=>`<span class="${G.el("placeholder")}">${Me(r)}</span>`,E=()=>s?C.filter(r=>u.has(String(r.value))):C[g(u)],b=()=>{if(!s||!f)return;const r=u.size;f.textContent=r||"",f.hidden=r===0},O=()=>{if(s){const I=u.size;if(I===0)V.innerHTML=d(o);else if(I===1){const Z=C.find(rn=>u.has(String(rn.value)));V.innerHTML=Me(Z?.label||o)}else V.innerHTML=Me(o);b();return}const r=Number.isInteger(u)?u:g(u);if(r<0){V.innerHTML=d(o);return}const H=C[r];V.innerHTML=H.disabled?d(H.label):Me(H.label)},W=()=>{T.innerHTML="";for(const r of C){const H=s?u.has(String(r.value)):String(r.value)===String(u),I=!P||r.label.toLowerCase().includes(P);T.appendChild(h("button",{type:"button",class:G.el("item"),attrs:{role:"option","aria-selected":H},data:{value:r.value},disabled:r.disabled,hidden:!I,children:[h("span",{text:r.label}),H&&h("span",{class:G.el("check"),html:oe("check")})],onClick:Z=>{Z.stopPropagation(),!r.disabled&&(s?ne(r.value,Z):(le(r.value,Z),Q(!1),y.focus()))}}))}},Q=r=>{if(x=!!r,m.dataset.open=x,y.setAttribute("aria-expanded",x),!x){A?.(),document.removeEventListener("keydown",Te,!0),P="",D&&(D.value="");return}W(),z=s?0:Math.max(0,g(u)),se(),setTimeout(j&&D?()=>D.focus():()=>T.focus(),0),A=it(m,()=>Q(!1)),document.addEventListener("keydown",Te,!0)},le=(r,H)=>{L&&(L=!1,m.classList.remove("invalid")),u=r,O(),_?.call(K,u,E(),H)},ne=(r,H)=>{L&&(L=!1,m.classList.remove("invalid"));const I=String(r);u.has(I)?u.delete(I):u.add(I),O(),W(),_?.call(K,[...u],E(),H)},ue=r=>{r.stopPropagation(),u.clear(),O(),x&&W(),_?.call(K,[],[],r)},we=r=>{P=r.target.value.toLowerCase(),W()},se=()=>{const r=T.querySelectorAll(`.${G.el("item")}:not([hidden])`);if(!r.length)return;let H=Math.max(0,Math.min(z,r.length-1)),I=0;for(;I<r.length&&r[H].disabled;)H=(H+1)%r.length,I++;z=H,r[H]?.focus()},pe=r=>{const H=T.querySelectorAll(`.${G.el("item")}:not([hidden])`);H.length&&(z=(Math.max(0,z)+r+H.length)%H.length,se())},Te=r=>{if(!x)return;const I={Escape:()=>{Q(!1),y.focus()},ArrowDown:()=>pe(1),ArrowUp:()=>pe(-1),Enter:()=>{const Z=T.querySelectorAll(`.${G.el("item")}:not([hidden])`)[z];Z?.disabled||Z.click()}}[r.key];I&&(r.preventDefault(),I())},et=r=>{r.key!=="ArrowDown"&&r.key!=="ArrowUp"||(r.preventDefault(),x||Q(!0))},K=X(n,{...p,gap:2,grow:!1,class:[q(k),p.class],children:[a&&De.label({text:a,soft:!0}),h("div",{class:[G(),s&&G("multi")],data:{open:!1},ref:r=>m=r,children:[h("button",{type:"button",class:[G.el("trigger"),"ui-border"],attrs:{"aria-haspopup":"listbox","aria-expanded":!1},ref:r=>{y=r,w&&Ve(r)},onClick:()=>Q(!x),onKeydown:et,children:[h("span",{class:G.el("value"),ref:r=>V=r}),h("span",{class:G.el("actions"),children:[J({icon:"chevron-down",variant:"none",muted:!0}),s&&h("span",{class:G.el("badge"),ref:r=>f=r,hidden:!0,onClick:ue})]})]}),h("div",{class:[G.el("popover"),"ui-border"],children:[j&&h("input",{type:"text",class:G.el("filter"),placeholder:M,ref:r=>D=r,onInput:we,onClick:r=>r.stopPropagation()}),h("div",{class:G.el("list"),attrs:{role:"listbox",tabindex:-1},ref:r=>T=r})]})]})]});O();const S=(r,H)=>{s?(u=new Set(Array.isArray(r)?r.map(N):r!=null?[N(r)]:[]),O(),H&&_?.call(K,[...u],E(),H)):le(r,H)};return K.error=()=>{L=!0,m.classList.add("invalid")},K.ok=()=>{L=!1,m.classList.remove("invalid")},K.reset=()=>{L=!1,m.classList.remove("invalid"),s?u.clear():u=null,O(),x&&W()},K.isValid=()=>{if(!$)return!0;const r=s?u.size>0:u!=null;return m.classList.toggle("invalid",!r),r},c?(requestAnimationFrame(()=>{const r=V.cloneNode(!1);Object.assign(r.style,{visibility:"hidden",height:"0",overflow:"hidden",whiteSpace:"nowrap"}),r.textContent=C.reduce((H,I)=>H.label.length>I.label.length?H:I,{label:o}).label,y.appendChild(r),requestAnimationFrame(()=>{m.style.minWidth=`${m.offsetWidth}px`,r.remove()})}),K.update=function({options:r,items:H,value:I}={}){(r||H)&&(C=H||r),typeof I<"u"&&(s?u=new Set(Array.isArray(I)?I.map(N):I!=null?[N(I)]:[]):u=I),O(),x&&W()},ie(K,()=>s?[...u]:u,S)):ie(K,()=>s?[...u]:u,S)}const Ie=R("switch");function Yt(...e){const{parent:n,checked:i,disabled:l,color:t="default",label:o,id:a,props:c,...s}=B(...e),v=U("onChange",s);let M,$=!!i;const w=(j,_)=>{$=!!j,C.dataset.checked=$,M.setAttribute("aria-checked",$),_&&v?.($,_)},k=j=>{l||w(!$,j)},p=j=>{j.key!==" "&&j.key!=="Enter"||(j.preventDefault(),k(j))},C=h("div",n,{...s,class:[Ie(),q(c),s.class],data:{checked:$,uiCol:t},children:[h("button",{type:"button",class:Ie.el("button"),attrs:{role:"switch","aria-checked":$},id:a,disabled:l,ref:j=>M=j,children:[h("span",{class:Ie.el("thumb")})],onClick:k,onKeydown:p}),o&&te({text:o,small:!0,onClick:k,style:{cursor:l?"default":"pointer"}})]});return ie(C,()=>$,w)}const de=R("tabs"),ve=e=>e?e.value!==void 0?String(e.value):String(e.label):"";function ht(...e){const{parent:n,items:i=[],active:l=0,value:t,variant:o,color:a,shape:c,appendButtons:s,appendContent:v,border:M,shade:$,padding:w,width:k,asButtonGroup:p,props:C,...j}=B(...e),_=U("onChange",j),m=i.flat(),y=[],V=j.align==="center"||j.center,T=["border","ghost"].includes(o),D=o==="border"?"outline":o||"none",f=M!==!1&&!$;let A,x=t||ve(m[l])||"";const P=g=>{A.innerHTML="";const d=m.find(O=>ve(O)===String(g));if(!d?.render)return;const E=d.render(),b=h("div",{class:de.el("tab")});if(typeof E=="string")b.innerHTML=E;else if(Array.isArray(E))for(const O of E)b.appendChild(O);else b.appendChild(E);A.appendChild(b)},L=(g,d,E)=>{x=String(g);for(const b of y){const O=b.dataset.value===x;b.setAttribute("aria-selected",O);const Q=(m.find(le=>ve(le)===b.dataset.value)||{}).color||a;b.dataset.uiCol=O&&Q&&T?`${o!=="ghost"?"sub-":""}${Q}`:"",b.tabIndex=O?0:-1}!p&&P(x),!E&&_?.(x,m.find(b=>ve(b)===x),d)},N=g=>{y.length&&y[(g+y.length)%y.length].focus()},u=(g,d,E)=>{const O={ArrowRight:()=>N(d+1),ArrowLeft:()=>N(d-1),Home:()=>N(0),End:()=>N(y.length-1),Enter:()=>L(E,g)," ":()=>L(E,g)}[g.key];O&&(g.preventDefault(),O())},z=h("div",n,{...j,class:[de(),"col",c&&de(c),k==="auto"?null:"w-full",$&&de("shade"),q(C,["shade"]),j.class],style:f?void 0:{"--gap":"var(--space-2)"},children:[h("div",{class:[de.el("buttons"),de(o||"default"),V&&"ma"],style:V?{"--jc":"center"}:void 0,data:V?{centered:""}:void 0,attrs:{role:"tablist"},children:m.map((g,d)=>{const E=ve(g),b=J({variant:D,label:g.label,icon:g.icon,shape:c,dataset:{value:E},attrs:{role:"tab"},aria:{selected:"false"},onmousedown:O=>L(E,O),onkeydown:O=>u(O,d,E)});return y.push(b),b})}),!p&&h("div",{class:[de.el("panel"),f&&"border",Number.isInteger(w)?`pad-${w}`:(f||$)&&"pad"],ref:g=>A=g})]});return s?.append(z.children[0]),v?.append(z.children[1]),L(x,null,!0),ie(z,()=>x,g=>L(g,null)),z}const Jt=R("toggle");function Qt(...e){const{parent:n,options:i=["Off","On"],checked:l,disabled:t,color:o="default",id:a,props:c,...s}=B(...e),v=U("onChange",s);let M=!!l;const $=(p,C)=>{M=!!p,k.dataset.checked=M,C&&v?.(M,C)},w=p=>{t||$(!M,p)},k=h("nav",n,{...s,class:[Jt(),q(c),s.class],data:{checked:M,uiCol:o},disabled:t,id:a,onClick:w,children:[h("div",{text:i[0]}),h("div",{text:i[1]})]});return ie(k,()=>M,$)}const Zt="ui-component",yt=e=>String(e||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),F=(e,n,i)=>{const l=(...t)=>{const o=t.findIndex(v=>v&&typeof v=="object"&&!(v instanceof Node)&&!Array.isArray(v)),a=o!==-1?t[o]:(t.push({}),t.at(-1));a.class=[Zt,a.class],i&&Object.assign(a,i);const c=e(...t),s=a.id||yt(a.label)||yt(a.title);return s&&n&&((ge[n]||={})[s]=c,a.id&&(ge[a.id]=c)),c};return Object.keys(e).forEach(t=>{l[t]=e[t]}),l},Be=F(Dt,"avatar"),qe=F(J,"button"),$e=F(Nt,"card"),Fe=F(Pt,"collapsible"),We=F(zt,"confirm"),gt=F(It,"editable"),Re=F(qt,"dashboard"),Ke=F(ye,"dialog"),mt=F(Ft,"draggable"),Ue=F(pt,"image"),Ge=F(ft,"input"),bt=F(ye,"modal",{type:"modal"}),Xe=F(Kt,"checkbox"),Ye=F(Gt,"radio"),Ee=F(Xt,"select"),Se=F(Yt,"switch"),xt=F(oe,"svg"),Je=F(ht,"tabs"),vt=F(ft,"textarea",{rows:4}),wt=F(Qt,"toggle"),Ct=F(ht,"toggleGroup",{asButtonGroup:!0}),Mt=F(ye,"tooltip",{type:"tooltip"}),en=Object.freeze(Object.defineProperty({__proto__:null,avatar:Be,button:qe,card:$e,checkbox:Xe,collapsible:Fe,confirm:We,dashboard:Re,description:be,dialog:Ke,divider:Ae,draggable:mt,editable:gt,header:re,image:Ue,input:Ge,label:te,modal:bt,radio:Ye,selectComponent:Ee,svg:xt,switchComponent:Se,tabs:Je,text:De,textarea:vt,title:me,toggle:wt,toggleGroup:Ct,tooltip:Mt},Symbol.toStringTag,{value:"Module"})),kt={"ui-row":(e,n)=>je.row(n,e),"ui-col":(e,n)=>je.col(n,e),"ui-avatar":e=>Be(e),"ui-button":e=>qe(e),"ui-card":(e,n)=>$e({...e,content:n}),"ui-checkbox":e=>Xe(e),"ui-collapsible":(e,n)=>Fe({...e,content:n}),"ui-confirm":e=>We(e),"ui-dialog":(e,n)=>Ke({...e,content:n}),"ui-image":e=>Ue(e),"ui-input":e=>Ge(e),"ui-label":e=>te(e),"ui-radio":e=>Ye(e),"ui-select":e=>Ee(e),"ui-switch":e=>Se(e),"ui-tabs":e=>Je(e)},At=Object.keys(kt).join(", "),tn=e=>{if(e===""||e==="true")return!0;if(e==="false")return!1;if(!isNaN(e)&&e!=="")return Number(e);if(e.startsWith("{")||e.startsWith("["))try{return JSON.parse(e)}catch{return e}return e},nn=e=>{const n={};for(const i of e.attributes){const l=i.name.replace(/-([a-z])/g,(t,o)=>o.toUpperCase());n[l]=tn(i.value)}return n},He=e=>{const n=e.tagName.toLowerCase(),i=kt[n];if(!i){for(const t of[...e.children]){const o=He(t);o&&o!==t&&t.replaceWith(o)}return e}const l=[];for(const t of[...e.childNodes])if(t.nodeType===Node.ELEMENT_NODE){const o=He(t);o&&l.push(o)}else t.nodeType===Node.TEXT_NODE&&t.textContent.trim()&&l.push(document.createTextNode(t.textContent));return i(nn(e),l)},Qe=(e=document.body)=>{const n=[...e.querySelectorAll(At)].filter(l=>!l.parentElement.closest(At)),i=[];for(const l of n){const t=He(l);t&&t!==l&&(t.classList.add("ui-pending","ui-fadein"),l.replaceWith(t),i.push(t))}requestAnimationFrame(()=>{requestAnimationFrame(()=>{for(const l of i)l.classList.remove("ui-pending")})})},ln=(e,...n)=>{const i=e.reduce((o,a,c)=>o+a+(n[c]??""),""),l=document.createElement("div");l.innerHTML=i.trim();for(const o of[...l.children]){const a=He(o);a&&a!==o&&o.replaceWith(a)}if(l.children.length===1)return l.firstElementChild;const t=document.createDocumentFragment();for(;l.firstChild;)t.appendChild(l.firstChild);return t},on=()=>{document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>Qe()):Qe()},Lt={...je,card:$e,dashboard:Re,label:te,header:re,title:me,description:be,divider:Ae},$t=(()=>{const e=()=>document.documentElement.classList.contains("dark"),n=i=>document.documentElement.classList.toggle("dark",!!i);return matchMedia("(prefers-color-scheme: dark)").matches&&n(!0),{isDark:e,icons:e()?["sun","moon"]:["moon","sun"],toggle:n}})(),sn={...en,select:Ee,switch:Se,layout:Lt,darkmode:$t,dom:ge,el:h,row:he,col:X,colors:tt};document.body.classList.add("fvn-ui");const Ze=Object.freeze(Object.defineProperty({__proto__:null,autoProcess:on,avatar:Be,button:qe,card:$e,checkbox:Xe,col:X,collapsible:Fe,colors:tt,confirm:We,darkmode:$t,dashboard:Re,description:be,dialog:Ke,divider:Ae,dom:ge,draggable:mt,editable:gt,el:h,header:re,image:Ue,input:Ge,layout:Lt,modal:bt,processTemplates:Qe,radio:Ye,row:he,selectComponent:Ee,svg:xt,switchComponent:Se,tabs:Je,template:ln,text:De,textarea:vt,title:me,toggle:wt,toggleGroup:Ct,tooltip:Mt,ui:sn},Symbol.toStringTag,{value:"Module"}));return typeof window<"u"&&(window.ui=Ze),Ce.default=Ze,Ce.ui=Ze,Object.defineProperties(Ce,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),Ce})({});
|
|
5
|
+
`:"",oe=e=>Vt(_e[e],e);oe.extend=e=>Object.assign(_e,e),oe.list=()=>Object.keys(_e);const ee=R("btn");function J(...e){const{parent:n,label:i="",icon:l,variant:t="default",shape:o,size:a,color:c,muted:s,loading:v,type:M="button",disabled:$,attrs:w={},dataset:k,props:p,...C}=B(...e),j=/primary|secondary/.test(t),_=/outline|ghost/.test(t),m=/minimal|stripped|none/.test(t),y=!_&&!m,V=Array.isArray(c),T=()=>V?c[Math.floor(Math.random()*c.length)]:c,D=T(),A=y?j?t:D||"default":D&&`sub-${D}`,x=Array.isArray(l)?l:l?[l]:[],P=[],L=h("button",n,{...C,type:M,disabled:$,class:[ee(),t!=="default"&&ee(t),y&&ee("filled"),_&&ee("sub"),_&&`${ee("hover")}${D?"-sub":""}`,x.length&&!i&&ee("square"),o&&!m&&ee(o),a&&ee.core("size",a),s&&ee("muted"),v&&"loading",q(p),C.class],attrs:w,data:{...k,uiCol:A},children:[x.length&&h("div",{class:ee.el("icon"),children:x.map((u,z)=>h("span",{class:z>0&&"ui-hidden",html:oe(u),ref:g=>P[z]=g}))}),i&&h("div",{html:i})],setLabel(u,z=5e3){this.disabled=!0,this.textContent=u,z&&setTimeout(()=>{this.disabled=!1,this.textContent=i},z)},toggleLoading(u){this.classList.toggle("loading",typeof u=="string"),this.textContent=u||i}}),N=[];if(V&&N.push(()=>{const u=T();L.dataset.uiCol=y?j?t:u||"default":u&&`sub-${u}`}),x.length>1){let u=0;N.push(()=>{P[u].classList.add("ui-hidden"),u=(u+1)%x.length,P[u].classList.remove("ui-hidden")})}return N.length&&L.addEventListener("click",()=>{L.disabled||N.forEach(u=>u())}),L}const rt=R("dialog"),at=R("popover"),ke=new WeakMap;function ye(...e){const{parent:n,variant:i="modal",type:l,anchor:t,position:o="bottom",arrow:a=!0,content:c,toggled:s,open:v,hover:M,inverted:$,_isChildOfAnchor:w,props:k,...p}=B(...e),C=s||v;if(C){let d=null,E=!1;if(C instanceof Event){if(d=C.currentTarget||C.target,E=["mouseover","mouseenter"].includes(C.type),E&&d){const O=ke.get(d);if(O?.isOpen)return O}}else C instanceof Element?d=C:C===!0&&t instanceof Element&&(d=t);if(d&&E){const O=ke.get(d);if(O)return O.isOpen||O.show(),O;d.style.position=d.style.position||"relative";const W=ye({...p,parent:d,variant:i,type:l,position:o,arrow:a,content:c,inverted:$,anchor:d,_isChildOfAnchor:!0});return ke.set(d,W),W.show(),W}const b=ye({...p,parent:document.body,variant:i||"modal",type:l||i||"modal",position:o,arrow:a,content:c,inverted:$,anchor:d});return b.show(),b}const j=U("onOpen",p),_=U("onClose",p);let m=!1,y,V,T=t;const f=(l||i)==="modal",A=d=>{d.key==="Escape"&&(d.preventDefault(),x())},x=()=>{m&&(m=!1,f?g.close():g.dataset.open="false",y?.(),document.removeEventListener("keydown",A,!0),_?.())},P=d=>{m||(!t&&d&&(T=d instanceof Event?d.currentTarget||d.target:d),g.isConnected||document.body.appendChild(g),m=!0,f?g.showModal():(N(),g.dataset.open="true",y=it(g,E=>{T?.contains(E.target)||x()})),document.addEventListener("keydown",A,!0),j?.())},L=d=>m?x():P(d),N=()=>{if(!T||f)return;const d=8,E=12,b=T.getBoundingClientRect(),O=g.offsetWidth||200,W=g.offsetHeight||100,Q=window.innerWidth,le=window.innerHeight,ne=o==="bottom"&&b.bottom+W+d>le?"top":o==="top"&&b.top-W-d<0?"bottom":o;g.dataset.position=ne;const ue=b.left+b.width/2,we=ue-O/2,se=Math.max(E,Math.min(Q-O-E,we));if(w){const pe=se-b.left;g.style.left=`${pe}px`,g.style.top=ne==="bottom"?`${b.height+d}px`:"auto",g.style.bottom=ne==="top"?`${b.height+d}px`:"auto"}else g.style.left=`${se}px`,g.style.top=ne==="bottom"?`${b.bottom+d}px`:`${b.top-W-d}px`,g.style.bottom="auto";g.style.transform="none",V&&(V.style.left=`${ue-se}px`)},u=h("div",{class:rt.el("content"),children:c?typeof c=="function"?c(x):Array.isArray(c)?c:[c]:[]}),z=d=>{if(u.innerHTML="",typeof d=="string")u.innerHTML=d;else if(d instanceof HTMLElement)u.appendChild(d);else if(Array.isArray(d))d.forEach(E=>u.appendChild(E));else if(typeof d=="function"){const E=d(x);E instanceof HTMLElement?u.appendChild(E):Array.isArray(E)&&E.forEach(b=>u.appendChild(b))}};let g;return f?g=h("dialog",n,{...p,class:[rt(),"ui-dialog-component",q(k),p.class],onClick:d=>{const E=g.getBoundingClientRect();E.top<=d.clientY&&d.clientY<=E.bottom&&E.left<=d.clientX&&d.clientX<=E.right||x()},children:[u]}):g=h("div",n,{...p,class:[at(),"ui-dialog-component",q(k),p.class],data:{open:"false",position:o},style:w?{position:"absolute"}:void 0,children:[a&&h("div",{class:at.el("arrow"),ref:d=>V=d}),u]}),$&&g.classList.add("ui-inverted"),g.show=P,g.hide=x,g.toggle=L,g.setContent=z,g.destroy=()=>{x(),T&&ke.delete(T),g.remove()},Object.defineProperty(g,"isOpen",{get:()=>m}),w&&t?t.addEventListener("mouseleave",x):M&&t&&(t.addEventListener("mouseleave",x),g.addEventListener("mouseleave",x)),g}const me=(...e)=>{const{parent:n,text:i="",large:l,props:t,...o}=B(...e);return h(l?"h1":"div",n,{...o,class:["ui-title",l&&"ui-title--large",q(t),o.class],html:o.html||i})},be=(...e)=>{const{parent:n,text:i="",small:l=!0,props:t,...o}=B(...e);return h("p",n,{...o,class:["ui-description","muted",l&&"small",q(t),o.class],html:o.html||i})},te=(...e)=>{const{parent:n,text:i="",soft:l,align:t,props:o,...a}=B(...e);return h("label",n,{...a,class:["ui-label",l&&"ui-label--soft","block-1",q(o),a.class],data:{...a.data,align:t},html:a.html||i})},Ae=(...e)=>{const{parent:n,vertical:i,...l}=B(...e);return h("div",n,{...l,class:["ui-divider",i&&"ui-divider--vertical",l.class]})},re=(...e)=>{const{parent:n,title:i,description:l,large:t,gap:o=2,...a}=B(...e);return!i&&!l?null:X(n,{...a,gap:o,class:["ui-header",a.class],children:[i&&me(i,{large:t}),l&&be(l)].filter(Boolean)})},De={title:me,description:be,label:te,header:re,divider:Ae},ct=R("dialog");function zt(...e){const{parent:n,icon:i,shape:l,color:t,triggerColor:o,confirmColor:a,variant:c,label:s="Open dialog",title:v="Are you absolutely sure?",description:M="This action cannot be undone.",confirm:$="Continue",cancel:w="Cancel",dialogVariant:k,type:p,inverted:C,props:j,..._}=B(...e),m=U("onCancel",_),y=U("onConfirm",_),V=k||p||"modal",T=h("div",n,{..._,class:[q(j),_.class]}),D=J(T,{label:s,variant:c,color:o||t,icon:i,shape:l}),f=ye(T,{variant:V,anchor:D,inverted:C,content:A=>[re({title:v,description:M,class:ct.el("inner")}),h("div",{class:ct.el("footer"),children:[J({label:w,shape:l,variant:"ghost",onclick:()=>{m?.(),A()}}),J({label:$,color:a||t,shape:l,onclick:async function(){try{this.disabled=!0,await y?.(!0),A()}finally{this.disabled=!1}}})]})]});return D.addEventListener("click",()=>f.show()),T.open=()=>f.show(),T.close=()=>f.hide(),T}const dt=R("image"),ut=e=>{const n=e.querySelector("img");n?.dataset.src&&(n.src=n.dataset.src,delete n.dataset.src)},jt=new IntersectionObserver((e,n)=>{for(const i of e)i.isIntersecting&&(ut(i.target),n.unobserve(i.target))},{rootMargin:"100% 0px"});function pt(...e){const{parent:n,src:i,alt:l="",lazy:t=!0,props:o,...a}=B(...e),c=h("div",n,{...a,class:[dt(),q(o),a.class],children:[h("img",{class:dt.el("img"),alt:l,...t?{data:{src:i}}:{src:i},onLoad:()=>c.dataset.loaded="true",onError:()=>c.dataset.error="true"})]});return t&&requestAnimationFrame(()=>{const s=c.getBoundingClientRect();s.top<window.innerHeight*2&&s.bottom>0?ut(c):jt.observe(c)}),c}const ae=R("avatar"),_t=e=>{if(!e)return"";const n=e.trim().split(/\s+/);return n.length>1?(n[0][0]+n.at(-1)[0]).toUpperCase():e.slice(0,2).toUpperCase()};function Dt(...e){const{parent:n,src:i,name:l,description:t,variant:o="round",size:a="small",color:c,props:s,...v}=B(...e),M=_t(l);return h("div",n,{...v,class:[ae(),o!=="square"&&ae("round"),a&&ae(a),q(s),v.class],children:[h("div",{class:ae.el("box"),data:{uiCol:c||(i?null:"primary")},children:[i?pt({src:i,alt:l||"",class:ae.el("image")}):null,!i&&M&&h("span",{class:ae.el("fallback"),text:M})]}),(l||t)&&h("div",{class:ae.el("info"),children:[l&&h("span",{class:"ui-name",text:l}),t&&h("span",{class:"ui-subtitle",text:t})]})]})}const Ne=R("card");function Nt(...e){const{parent:n,title:i,description:l,content:t,border:o=!0,props:a,...c}=B(...e);let s;const v=X(n,{...c,gap:a.gap??4,class:[Ne(),o&&"border",q(a,["gap"]),c.class],children:[re({title:i,description:l,class:Ne.el("header")}),X({class:[Ne.el("body"),q(a,["gap"])],ref:M=>s=M})]});return typeof t=="string"?s.innerHTML=t:t instanceof HTMLElement?s.appendChild(t):Array.isArray(t)?t.forEach(M=>s.appendChild(M)):typeof t=="function"&&t(s,v),v}const Pe=R("collapsible");function Pt(...e){const{parent:n,label:i,open:l,disabled:t,content:o,props:a,...c}=B(...e),s=U("onChange",c);let v=!!l,M;const $=()=>oe(v?"chevron-down":"chevron-right"),w=p=>{t||(v=!v,k.dataset.open=v,M.innerHTML=$(),s?.(v,p))},k=h("div",n,{...c,class:[Pe(),t&&"disabled",q(a),c.class],data:{open:v},children:[J({class:Pe.el("trigger"),variant:"none",disabled:t,icon:v?"chevron-down":"chevron-right",label:i,onclick:w,ref:p=>M=p.querySelector(".ui-btn__icon")}),X({class:[Pe.el("content"),"block-2"]},[o])]});return ie(k,()=>v,p=>{v=!!p,k.dataset.open=v,M.innerHTML=$()})}const Le=R("editable");function It(...e){const{parent:n,id:i,size:l="default",label:t,placeholder:o="...",value:a,rows:c,multiline:s,plainText:v=!1,plain:M=!1,focus:$,onChange:w,onInput:k,onFocus:p,onBlur:C,onKeydown:j,onSubmit:_,props:m,attrs:y={},...V}=B(...e),T=c===1||s===!1,D=c&&c>1?c:null;let f;const A=()=>{f.textContent.trim()||(f.innerHTML="")},x=()=>f?.textContent||"",P=()=>f?.innerHTML||"",L=b=>{A();const O=P();k?.call(f,O,b),w?.call(f,O,b)},N=b=>{j?.call(f,b),T&&b.key==="Enter"&&(b.preventDefault(),_?.call(f,P(),b))},u=b=>{if(v||T){b.preventDefault();let O=b.clipboardData.getData("text/plain");T&&(O=O.replace(/[\r\n]+/g," ")),document.execCommand("insertText",!1,O)}},z=b=>{if(M&&f.textContent){const O=document.createRange();O.selectNodeContents(f);const W=window.getSelection();W.removeAllRanges(),W.addRange(O)}p?.call(f,b)},g=b=>{A(),C?.call(f,P(),b)},d=h("div",{...V,...y,...nt,id:i,contentEditable:"true",data:{placeholder:o},style:D?{minHeight:`${D*1.5}em`}:void 0,class:[Le(),M&&"ui-plain",Le.core("size",l),T&&Le("single-line"),"ui-border",V.class],ref:b=>{f=b,a&&(b.innerHTML=a),$&&Ve(b)},onInput:L,onKeydown:N,onPaste:u,onFocus:z,onBlur:g}),E=X(n,{class:[Le.el("wrap"),q(m)],children:[t&&te({text:t,soft:!0}),d]});return Object.defineProperty(E,"value",{get:x,set:b=>{f.innerHTML=b||"",A()}}),Object.defineProperty(E,"html",{get:P,set:b=>{f.innerHTML=b||"",A()}}),E}const xe=R("dashboard"),Bt={shape:"round",variant:"ghost"};function qt(...e){const{parent:n,title:i="",description:l="",menu:t=[],views:o={},defaultView:a="default",props:c,...s}=B(...e);let v,M=a;const $=Object.keys(o),w=o[a]?a:o.main?"main":o.root?"root":$[0]||null,k=m=>{o[m]&&(M=m===M?w:m,p())},p=()=>{v.innerHTML="";const m=o[M];if(!m)return;M!==w&&J(v,{icon:"x",variant:"ghost",shape:"round",class:xe.el("close"),onClick:()=>k(w)});const y=m();if(y){if(typeof y=="string"){v.innerHTML+=y;return}if(Array.isArray(y)){for(const V of y)v.appendChild(V);return}v.appendChild(y)}},C=t.map(({view:m,action:y,...V})=>J({...Bt,...V,onClick:T=>{m&&k(m),y?.(T),V.onClick?.(T)}})),j=he("between",{class:[xe.el("header"),c.border!==!1&&"border-bottom",q(c)],children:[re({title:i,description:l,gap:1,flex:1}),he({end:!0,gap:0,class:xe.el("menu"),children:C})]}),_=X(n,{...s,class:[xe(),s.class],gap:4,children:[j,h("div",{class:xe.el("content"),ref:m=>v=m})]});return w&&(M=w,p()),_.navigate=k,_.getCurrentView=()=>M,_}const ce=R("draggable");function Ft(...e){const{parent:n,id:i,items:l=[],icon:t="grip",handlePosition:o="right",index:a=!0,plain:c,onChange:s,onDragStart:v,onDragEnd:M,...$}=B(...e);let w,k=null,p=-1;const C=()=>[...w.children].map(f=>f._content),j=()=>h("div",{class:ce.el("handle"),html:oe(t)}),_=f=>{const A=f.content||f,x=j(),P=h("div",{class:ce.el("content"),children:[A]}),L=h("div",{class:[ce.el("item"),c&&ce("plain"),a&&ce("index"),f.disabled&&ce("disabled")],draggable:"true",children:o==="left"?[x,P]:[P,x]});return L._content=A,L.ondragstart=N=>{k=L,p=[...w.children].indexOf(L),L.classList.add("ui-dragging"),N.dataTransfer.effectAllowed="move";const u=document.createElement("div");u.style.cssText="position:absolute;top:-9999px;left:-9999px;width:1px;height:1px;",document.body.appendChild(u),N.dataTransfer.setDragImage(u,0,0),requestAnimationFrame(()=>u.remove()),v?.({item:A,element:L})},L.ondragend=()=>{L.classList.remove("ui-dragging");const N=[...w.children].indexOf(L);p!==-1&&p!==N&&s?.({items:C(),from:p,to:N}),k=null,p=-1,M?.({item:A,element:L,index:N})},L.ondragover=N=>{if(N.preventDefault(),!k||k===L)return;const u=L.getBoundingClientRect();w.insertBefore(k,N.clientY>u.top+u.height/2?L.nextElementSibling:L)},L},m=(f,A)=>{const x=_(f);return A!==void 0&&A>=0&&A<w.children.length?w.insertBefore(x,w.children[A]):w.appendChild(x),x},y=f=>{let A;if(typeof f=="number"?A=w.children[f]:A=[...w.children].find(x=>x._content===f||x===f),A){const x=A._content;return A.remove(),x}return null},V=()=>{w.innerHTML=""},T=(f,A)=>{const x=[...w.children];if(f===A||f<0||A<0||f>=x.length||A>=x.length)return;const P=x[f],L=x[A];f<A?w.insertBefore(P,L.nextElementSibling):w.insertBefore(P,L),s?.({items:C(),from:f,to:A})},D=X(n,{...$,id:i,class:[ce(),$.class],ref:f=>{w=f}});return D.ondragover=f=>f.preventDefault(),l.forEach(f=>m(f)),Object.defineProperty(D,"items",{get:C}),D.add=m,D.remove=y,D.clear=V,D.reorder=T,D}const Y=R("input"),Wt={email:e=>!e||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),url:e=>!e||/^https?:\/\/.+/.test(e),phone:e=>!e||/^(\+47|0047)?\s*\d{2}\s*\d{2}\s*\d{2}\s*\d{2}$/.test(e.replace(/[\s-]/g," ").trim())};function ft(...e){const{parent:n,id:i,type:l="text",size:t="default",rows:o,icon:a,value:c,label:s,placeholder:v,focus:M,validate:$,required:w,min:k,max:p,step:C=1,clamp:j,counter:_,message:m,info:y,attrs:V={},props:T,...D}=B(...e),f=o!=null,A=l==="number",x=U("onSubmit",D),P=!f&&U("onSubmit",D,!0),L=U("onInput",D),N=U("onChange",D);let u,z,g,d,E,b=!1;const O=()=>x?.call(z,z.value),W=S=>{if(!m)return null;if(typeof m=="string")return m;const r=m[S]||S==="validate"&&typeof $=="string"&&m[$];return r?r.replace("{min}",k).replace("{max}",p).replace("{length}",z?.value?.length||0):null},Q=()=>typeof $=="function"?$:typeof $=="string"?Wt[$]:null,le=()=>{const S=z.value,r=Q();let H=null;w&&(!S||S.length===0)?H="required":r&&!r(S)?H="validate":!A&&k!=null&&S.length<k?H="min":!A&&p!=null&&S.length>p&&(H="max");const I=!!H;if(u.classList.toggle("invalid",I),d){const Z=I?W(H):null;d.textContent=Z||"",d.hidden=!Z}return E&&(E.hidden=I),!H},ne=()=>{if(!g)return;const S=z.value.length;g.textContent=p?`${S}/${p}`:S,g.classList.remove("warn","error","ok"),p&&S>p||k&&S>0&&S<k?g.classList.add("error"):p&&S>p*.9?g.classList.add("warn"):k&&S>=k&&g.classList.add("ok")},ue=S=>{b&&(b=!1,u.classList.remove("invalid"),d&&(d.textContent="",d.hidden=!0)),u.classList.toggle("has-value",!!z.value),($||w||k!=null||p!=null)&&le(),_&&ne(),L?.call(z,z.value,S)},we=S=>{N?.call(z,z.value,S)},se=S=>{S.key==="Enter"&&O()},pe=S=>{let H=(parseFloat(z.value)||0)+S*C;k!=null&&(H=Math.max(k,H)),p!=null&&(H=Math.min(p,H)),z.value=H,z.dispatchEvent(new Event("input",{bubbles:!0})),z.dispatchEvent(new Event("change",{bubbles:!0}))},Te=f?"textarea":"input",et=f?{rows:o,id:i,placeholder:v,attrs:{...V,maxlength:j?p:void 0}}:{type:l,id:i,value:c,placeholder:v,attrs:V},K=X(n,{gap:2,class:["ui-input-root",q(T),D.class],children:[s&&te({text:s,soft:!0}),h("div",{class:[Y.el("wrap"),Y.core("size",t),A&&Y.el("wrap--number")],ref:S=>u=S,children:[h(Te,{...D,...et,...nt,class:[Y(),P&&Y("submit"),A&&Y("number"),"ui-border",D.class],ref:S=>{z=S,f&&c&&(S.textContent=c),M&&Ve(S)},onInput:ue,onChange:N?we:void 0,onKeyup:x&&se,onBlur:A&&j?()=>{const S=parseFloat(z.value);isNaN(S)||(k!=null&&S<k?z.value=k:p!=null&&S>p&&(z.value=p))}:void 0}),A&&h("div",{class:Y.el("num-btns"),children:[J({icon:"minus",muted:!0,variant:"ghost",size:t,class:Y.el("num-btn"),attrs:{"aria-label":"Decrease",tabindex:-1},onClick:()=>pe(-1)}),J({icon:"plus",muted:!0,variant:"ghost",size:t,class:Y.el("num-btn"),attrs:{"aria-label":"Increase",tabindex:-1},onClick:()=>pe(1)})]}),P&&J({icon:a||"enter",muted:!0,variant:"ghost",size:t,attrs:{"aria-label":"Submit"},onClick:O})]}),(m||y||_)&&he({class:Y.el("footer"),justify:"between"},[m&&h("div",{class:Y.el("message"),hidden:!0,ref:S=>d=S}),y&&h("div",{class:Y.el("info"),text:y,ref:S=>E=S}),f&&_&&h("div",{class:Y.el("counter"),end:!0,ref:S=>{g=S,ne()}})])]});return K.input=z,K.isValid=le,K.error=S=>{b=!0,u.classList.add("invalid"),d&&S&&(d.textContent=S,d.hidden=!1)},K.ok=()=>{b=!1,u.classList.remove("invalid"),d&&(d.textContent="",d.hidden=!0)},K.reset=()=>{z.value="",b=!1,u.classList.remove("invalid","has-value"),d&&(d.textContent="",d.hidden=!0),E&&(E.hidden=!1),_&&ne()},ie(K,()=>z.value,S=>{z.value=S,ue()})}const Rt=R("checkbox");function Kt(...e){const{parent:n,checked:i,disabled:l,label:t,id:o,name:a,value:c="on",color:s,props:v,...M}=B(...e),$=U("onChange",M);let w,k,p=!!i;const C=()=>p?"checked":"unchecked",j=()=>p?s||"default":`sub-${s||"default"}`,_=(y,V)=>{p=!!y,w.checked=p,m.dataset.state=C(),k.dataset.uiCol=j(),V&&$?.(p,V)},m=h("label",n,{...M,class:[Rt(),"ui-form-item",l&&"disabled",q(v),M.class],data:{state:C()},children:[h("input",{type:"checkbox",class:"ui-form-input",id:o,name:a,value:c,disabled:l,checked:p,ref:y=>w=y,onChange:y=>_(y.target.checked,y)}),h("span",{class:"ui-form-control ui-border",data:{uiCol:j()},ref:y=>k=y,html:oe("check")}),t&&te({text:t,small:!0})]});return ie(m,()=>p,_)}const Ut=R("radio");function Gt(...e){const{parent:n,items:i=[],value:l,name:t=`radio-${Math.random().toString(36).slice(2,7)}`,label:o,orientation:a,disabled:c,color:s="default",props:v,...M}=B(...e),$=U("onChange",M),w=i.flat(),k=/row|horizontal/i.test(a),p=y=>y?.value??y?.label??String(y??"");let C=l??p(w[0]);const j=[],_=(y,V)=>{C=String(y);for(const T of j){const D=T.value===C;T.input.checked=D,T.el.dataset.state=D?"checked":"unchecked",T.control.dataset.uiCol=D?s:`sub-${s}`}V&&$?.(C,w.find(T=>p(T)===C),V)},m=h("div",n,{...M,class:[Ut(),"ui-form-group",k&&"horizontal",q(v),M.class],attrs:{role:"radio"},children:[o&&te({text:o,soft:!0}),h("div",{class:"ui-form-group__items",children:w.map(y=>{const V=String(p(y)),T=y?.label??V,D=c||y?.disabled,f=V===String(C);let A,x;const P=h("label",{class:["ui-radio ui-form-item",D&&"disabled"],data:{state:f?"checked":"unchecked"},children:[h("input",{type:"radio",class:"ui-form-input",name:t,value:V,disabled:D,checked:f,ref:L=>A=L,onChange:L=>_(L.target.value,L)}),h("span",{class:"ui-form-control ui-form-control--round ui-border",data:{uiCol:f?s:`sub-${s}`},ref:L=>x=L}),te({text:T,small:!0})]});return j.push({value:V,input:A,control:x,el:P}),P})})]});return ie(m,()=>C,y=>_(y))}const G=R("select");function Xt(...e){const{parent:n,items:i,options:l,value:t,placeholder:o="Select",label:a,adaptive:c=!0,multiselect:s=!1,filter:v,filterPlaceholder:M="Filter...",required:$,focus:w,props:k,...p}=B(...e);let C=i||l||[];const j=Number.isInteger(v)?C.length>v:!!v,_=U("onChange",p);let m,y,V,T,D,f,A,x=!1,P="",L=!1;const N=r=>Number.isInteger(r)&&C[r]?String(C[r].value):String(r);let u=s?new Set(Array.isArray(t)?t.map(N):t!=null?[N(t)]:[]):t??null,z=-1;const g=r=>C.findIndex(H=>String(H.value)===String(r)),d=r=>`<span class="${G.el("placeholder")}">${Me(r)}</span>`,E=()=>s?C.filter(r=>u.has(String(r.value))):C[g(u)],b=()=>{if(!s||!f)return;const r=u.size;f.textContent=r||"",f.hidden=r===0},O=()=>{if(s){const I=u.size;if(I===0)V.innerHTML=d(o);else if(I===1){const Z=C.find(rn=>u.has(String(rn.value)));V.innerHTML=Me(Z?.label||o)}else V.innerHTML=Me(o);b();return}const r=Number.isInteger(u)?u:g(u);if(r<0){V.innerHTML=d(o);return}const H=C[r];V.innerHTML=H.disabled?d(H.label):Me(H.label)},W=()=>{T.innerHTML="";for(const r of C){const H=s?u.has(String(r.value)):String(r.value)===String(u),I=!P||r.label.toLowerCase().includes(P);T.appendChild(h("button",{type:"button",class:G.el("item"),attrs:{role:"option","aria-selected":H},data:{value:r.value},disabled:r.disabled,hidden:!I,children:[h("span",{text:r.label}),H&&h("span",{class:G.el("check"),html:oe("check")})],onClick:Z=>{Z.stopPropagation(),!r.disabled&&(s?ne(r.value,Z):(le(r.value,Z),Q(!1),y.focus()))}}))}},Q=r=>{if(x=!!r,m.dataset.open=x,y.setAttribute("aria-expanded",x),!x){A?.(),document.removeEventListener("keydown",Te,!0),P="",D&&(D.value="");return}W(),z=s?0:Math.max(0,g(u)),se(),setTimeout(j&&D?()=>D.focus():()=>T.focus(),0),A=it(m,()=>Q(!1)),document.addEventListener("keydown",Te,!0)},le=(r,H)=>{L&&(L=!1,m.classList.remove("invalid")),u=r,O(),_?.call(K,u,E(),H)},ne=(r,H)=>{L&&(L=!1,m.classList.remove("invalid"));const I=String(r);u.has(I)?u.delete(I):u.add(I),O(),W(),_?.call(K,[...u],E(),H)},ue=r=>{r.stopPropagation(),u.clear(),O(),x&&W(),_?.call(K,[],[],r)},we=r=>{P=r.target.value.toLowerCase(),W()},se=()=>{const r=T.querySelectorAll(`.${G.el("item")}:not([hidden])`);if(!r.length)return;let H=Math.max(0,Math.min(z,r.length-1)),I=0;for(;I<r.length&&r[H].disabled;)H=(H+1)%r.length,I++;z=H,r[H]?.focus()},pe=r=>{const H=T.querySelectorAll(`.${G.el("item")}:not([hidden])`);H.length&&(z=(Math.max(0,z)+r+H.length)%H.length,se())},Te=r=>{if(!x)return;const I={Escape:()=>{Q(!1),y.focus()},ArrowDown:()=>pe(1),ArrowUp:()=>pe(-1),Enter:()=>{const Z=T.querySelectorAll(`.${G.el("item")}:not([hidden])`)[z];Z?.disabled||Z.click()}}[r.key];I&&(r.preventDefault(),I())},et=r=>{r.key!=="ArrowDown"&&r.key!=="ArrowUp"||(r.preventDefault(),x||Q(!0))},K=X(n,{...p,gap:2,grow:!1,class:[q(k),p.class],children:[a&&De.label({text:a,soft:!0}),h("div",{class:[G(),s&&G("multi")],data:{open:!1},ref:r=>m=r,children:[h("button",{type:"button",class:[G.el("trigger"),"ui-border"],attrs:{"aria-haspopup":"listbox","aria-expanded":!1},ref:r=>{y=r,w&&Ve(r)},onClick:()=>Q(!x),onKeydown:et,children:[h("span",{class:G.el("value"),ref:r=>V=r}),h("span",{class:G.el("actions"),children:[J({icon:"chevron-down",variant:"none",muted:!0}),s&&h("span",{class:G.el("badge"),ref:r=>f=r,hidden:!0,onClick:ue})]})]}),h("div",{class:[G.el("popover"),"ui-border"],children:[j&&h("input",{type:"text",class:G.el("filter"),placeholder:M,ref:r=>D=r,onInput:we,onClick:r=>r.stopPropagation()}),h("div",{class:G.el("list"),attrs:{role:"listbox",tabindex:-1},ref:r=>T=r})]})]})]});O();const S=(r,H)=>{s?(u=new Set(Array.isArray(r)?r.map(N):r!=null?[N(r)]:[]),O(),H&&_?.call(K,[...u],E(),H)):le(r,H)};return K.error=()=>{L=!0,m.classList.add("invalid")},K.ok=()=>{L=!1,m.classList.remove("invalid")},K.reset=()=>{L=!1,m.classList.remove("invalid"),s?u.clear():u=null,O(),x&&W()},K.isValid=()=>{if(!$)return!0;const r=s?u.size>0:u!=null;return m.classList.toggle("invalid",!r),r},c?(requestAnimationFrame(()=>{const r=V.cloneNode(!1);Object.assign(r.style,{visibility:"hidden",height:"0",overflow:"hidden",whiteSpace:"nowrap"}),r.textContent=C.reduce((H,I)=>H.label.length>I.label.length?H:I,{label:o}).label,y.appendChild(r),requestAnimationFrame(()=>{m.style.minWidth=`${m.offsetWidth}px`,r.remove()})}),K.update=function({options:r,items:H,value:I}={}){(r||H)&&(C=H||r),typeof I<"u"&&(s?u=new Set(Array.isArray(I)?I.map(N):I!=null?[N(I)]:[]):u=I),O(),x&&W()},ie(K,()=>s?[...u]:u,S)):ie(K,()=>s?[...u]:u,S)}const Ie=R("switch");function Yt(...e){const{parent:n,checked:i,disabled:l,color:t="default",label:o,id:a,props:c,...s}=B(...e),v=U("onChange",s);let M,$=!!i;const w=(j,_)=>{$=!!j,C.dataset.checked=$,M.setAttribute("aria-checked",$),_&&v?.($,_)},k=j=>{l||w(!$,j)},p=j=>{j.key!==" "&&j.key!=="Enter"||(j.preventDefault(),k(j))},C=h("div",n,{...s,class:[Ie(),q(c),s.class],data:{checked:$,uiCol:t},children:[h("button",{type:"button",class:Ie.el("button"),attrs:{role:"switch","aria-checked":$},id:a,disabled:l,ref:j=>M=j,children:[h("span",{class:Ie.el("thumb")})],onClick:k,onKeydown:p}),o&&te({text:o,small:!0,onClick:k,style:{cursor:l?"default":"pointer"}})]});return ie(C,()=>$,w)}const de=R("tabs"),ve=e=>e?e.value!==void 0?String(e.value):String(e.label):"";function ht(...e){const{parent:n,items:i=[],active:l=0,value:t,variant:o,color:a,shape:c,appendButtons:s,appendContent:v,border:M,shade:$,padding:w,width:k,asButtonGroup:p,props:C,...j}=B(...e),_=U("onChange",j),m=i.flat(),y=[],V=j.align==="center"||j.center,T=["border","ghost"].includes(o),D=o==="border"?"outline":o||"none",f=M!==!1&&!$;let A,x=t||ve(m[l])||"";const P=g=>{A.innerHTML="";const d=m.find(O=>ve(O)===String(g));if(!d?.render)return;const E=d.render(),b=h("div",{class:de.el("tab")});if(typeof E=="string")b.innerHTML=E;else if(Array.isArray(E))for(const O of E)b.appendChild(O);else b.appendChild(E);A.appendChild(b)},L=(g,d,E)=>{x=String(g);for(const b of y){const O=b.dataset.value===x;b.setAttribute("aria-selected",O);const Q=(m.find(le=>ve(le)===b.dataset.value)||{}).color||a;b.dataset.uiCol=O&&Q&&T?`${o!=="ghost"?"sub-":""}${Q}`:"",b.tabIndex=O?0:-1}!p&&P(x),!E&&_?.(x,m.find(b=>ve(b)===x),d)},N=g=>{y.length&&y[(g+y.length)%y.length].focus()},u=(g,d,E)=>{const O={ArrowRight:()=>N(d+1),ArrowLeft:()=>N(d-1),Home:()=>N(0),End:()=>N(y.length-1),Enter:()=>L(E,g)," ":()=>L(E,g)}[g.key];O&&(g.preventDefault(),O())},z=h("div",n,{...j,class:[de(),"col",c&&de(c),k==="auto"?null:"w-full",$&&de("shade"),q(C,["shade"]),j.class],style:f?void 0:{"--gap":"var(--space-2)"},children:[h("div",{class:[de.el("buttons"),de(o||"default"),V&&"ma"],style:V?{"--jc":"center"}:void 0,data:V?{centered:""}:void 0,attrs:{role:"tablist"},children:m.map((g,d)=>{const E=ve(g),b=J({variant:D,label:g.label,icon:g.icon,shape:c,dataset:{value:E},attrs:{role:"tab"},aria:{selected:"false"},onmousedown:O=>L(E,O),onkeydown:O=>u(O,d,E)});return y.push(b),b})}),!p&&h("div",{class:[de.el("panel"),f&&"border",Number.isInteger(w)?`pad-${w}`:(f||$)&&"pad"],ref:g=>A=g})]});return s?.append(z.children[0]),v?.append(z.children[1]),L(x,null,!0),ie(z,()=>x,g=>L(g,null)),z}const Jt=R("toggle");function Qt(...e){const{parent:n,options:i=["Off","On"],checked:l,disabled:t,color:o="default",id:a,props:c,...s}=B(...e),v=U("onChange",s);let M=!!l;const $=(p,C)=>{M=!!p,k.dataset.checked=M,C&&v?.(M,C)},w=p=>{t||$(!M,p)},k=h("nav",n,{...s,class:[Jt(),q(c),s.class],data:{checked:M,uiCol:o},disabled:t,id:a,onClick:w,children:[h("div",{text:i[0]}),h("div",{text:i[1]})]});return ie(k,()=>M,$)}const Zt="ui-component",yt=e=>String(e||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),F=(e,n,i)=>{const l=(...t)=>{const o=t.findIndex(v=>v&&typeof v=="object"&&!(v instanceof Node)&&!Array.isArray(v)),a=o!==-1?t[o]:(t.push({}),t.at(-1));a.class=[Zt,a.class],i&&Object.assign(a,i);const c=e(...t),s=a.id||yt(a.label)||yt(a.title);return s&&n&&((ge[n]||={})[s]=c,a.id&&(ge[a.id]=c)),c};return Object.keys(e).forEach(t=>{l[t]=e[t]}),l},Be=F(Dt,"avatar"),qe=F(J,"button"),$e=F(Nt,"card"),Fe=F(Pt,"collapsible"),We=F(zt,"confirm"),gt=F(It,"editable"),Re=F(qt,"dashboard"),Ke=F(ye,"dialog"),mt=F(Ft,"draggable"),Ue=F(pt,"image"),Ge=F(ft,"input"),bt=F(ye,"modal",{type:"modal"}),Xe=F(Kt,"checkbox"),Ye=F(Gt,"radio"),Ee=F(Xt,"select"),Se=F(Yt,"switch"),xt=F(oe,"svg"),Je=F(ht,"tabs"),vt=F(ft,"textarea",{rows:4}),wt=F(Qt,"toggle"),Ct=F(ht,"toggleGroup",{asButtonGroup:!0}),Mt=F(ye,"tooltip",{type:"tooltip"}),en=Object.freeze(Object.defineProperty({__proto__:null,avatar:Be,button:qe,card:$e,checkbox:Xe,collapsible:Fe,confirm:We,dashboard:Re,description:be,dialog:Ke,divider:Ae,draggable:mt,editable:gt,header:re,image:Ue,input:Ge,label:te,modal:bt,radio:Ye,selectComponent:Ee,svg:xt,switchComponent:Se,tabs:Je,text:De,textarea:vt,title:me,toggle:wt,toggleGroup:Ct,tooltip:Mt},Symbol.toStringTag,{value:"Module"})),kt={"ui-row":(e,n)=>je.row(n,e),"ui-col":(e,n)=>je.col(n,e),"ui-avatar":e=>Be(e),"ui-button":e=>qe(e),"ui-card":(e,n)=>$e({...e,content:n}),"ui-checkbox":e=>Xe(e),"ui-collapsible":(e,n)=>Fe({...e,content:n}),"ui-confirm":e=>We(e),"ui-dialog":(e,n)=>Ke({...e,content:n}),"ui-image":e=>Ue(e),"ui-input":e=>Ge(e),"ui-label":e=>te(e),"ui-radio":e=>Ye(e),"ui-select":e=>Ee(e),"ui-switch":e=>Se(e),"ui-tabs":e=>Je(e)},At=Object.keys(kt).join(", "),tn=e=>{if(e===""||e==="true")return!0;if(e==="false")return!1;if(!isNaN(e)&&e!=="")return Number(e);if(e.startsWith("{")||e.startsWith("["))try{return JSON.parse(e)}catch{return e}return e},nn=e=>{const n={};for(const i of e.attributes){const l=i.name.replace(/-([a-z])/g,(t,o)=>o.toUpperCase());n[l]=tn(i.value)}return n},He=e=>{const n=e.tagName.toLowerCase(),i=kt[n];if(!i){for(const t of[...e.children]){const o=He(t);o&&o!==t&&t.replaceWith(o)}return e}const l=[];for(const t of[...e.childNodes])if(t.nodeType===Node.ELEMENT_NODE){const o=He(t);o&&l.push(o)}else t.nodeType===Node.TEXT_NODE&&t.textContent.trim()&&l.push(document.createTextNode(t.textContent));return i(nn(e),l)},Qe=(e=document.body)=>{const n=[...e.querySelectorAll(At)].filter(l=>!l.parentElement.closest(At)),i=[];for(const l of n){const t=He(l);t&&t!==l&&(t.classList.add("ui-pending","ui-fadein"),l.replaceWith(t),i.push(t))}requestAnimationFrame(()=>{requestAnimationFrame(()=>{for(const l of i)l.classList.remove("ui-pending")})})},ln=(e,...n)=>{const i=e.reduce((o,a,c)=>o+a+(n[c]??""),""),l=document.createElement("div");l.innerHTML=i.trim();for(const o of[...l.children]){const a=He(o);a&&a!==o&&o.replaceWith(a)}if(l.children.length===1)return l.firstElementChild;const t=document.createDocumentFragment();for(;l.firstChild;)t.appendChild(l.firstChild);return t},on=()=>{document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>Qe()):Qe()},Lt={...je,card:$e,dashboard:Re,label:te,header:re,title:me,description:be,divider:Ae},$t=(()=>{const e=()=>n()?["sun","moon"]:["moon","sun"],n=()=>document.documentElement.classList.contains("dark"),i=l=>document.documentElement.classList.toggle("dark",l);return matchMedia("(prefers-color-scheme: dark)").matches&&i(!0),{isDark:n,getIcons:e,toggle:i,menuItem:{icon:e(),action:()=>i()}}})(),sn={...en,select:Ee,switch:Se,layout:Lt,darkmode:$t,dom:ge,el:h,row:he,col:X,colors:tt};document.body.classList.add("fvn-ui");const Ze=Object.freeze(Object.defineProperty({__proto__:null,autoProcess:on,avatar:Be,button:qe,card:$e,checkbox:Xe,col:X,collapsible:Fe,colors:tt,confirm:We,darkmode:$t,dashboard:Re,description:be,dialog:Ke,divider:Ae,dom:ge,draggable:mt,editable:gt,el:h,header:re,image:Ue,input:Ge,layout:Lt,modal:bt,processTemplates:Qe,radio:Ye,row:he,selectComponent:Ee,svg:xt,switchComponent:Se,tabs:Je,template:ln,text:De,textarea:vt,title:me,toggle:wt,toggleGroup:Ct,tooltip:Mt,ui:sn},Symbol.toStringTag,{value:"Module"}));return typeof window<"u"&&(window.ui=Ze),Ce.default=Ze,Ce.ui=Ze,Object.defineProperties(Ce,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),Ce})({});
|
package/package.json
CHANGED
package/src/fvn-ui/index.js
CHANGED
|
@@ -77,17 +77,19 @@ export const layout = {
|
|
|
77
77
|
* ui.darkmode().toggle()
|
|
78
78
|
*/
|
|
79
79
|
export const darkmode = (() => {
|
|
80
|
+
const getIcons = () => isDark() ? ['sun', 'moon'] : ['moon', 'sun'];
|
|
80
81
|
const isDark = () => document.documentElement.classList.contains('dark');
|
|
81
82
|
const toggle = on => {
|
|
82
|
-
return document.documentElement.classList.toggle('dark',
|
|
83
|
+
return document.documentElement.classList.toggle('dark', on);
|
|
83
84
|
};
|
|
84
85
|
if (matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
85
86
|
toggle(true);
|
|
86
87
|
}
|
|
87
88
|
return {
|
|
88
89
|
isDark,
|
|
89
|
-
|
|
90
|
-
toggle
|
|
90
|
+
getIcons,
|
|
91
|
+
toggle,
|
|
92
|
+
menuItem: { icon: getIcons(), action: () => toggle() }
|
|
91
93
|
}
|
|
92
94
|
})();
|
|
93
95
|
|