@nebularstreams/libmui 2.0.4 → 2.0.5

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/libui.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import e from"mithril";function t(e,t,a,n,i){return{...e&&{view:e},...t&&{oninit:t},...a&&{oncreate:a},...i&&{onupdate:i},...n&&{onremove:n}}}function a(e,t,a){const n=("function"==typeof e?e(t):e)||{};return a&&(n.initialParams=a),n}const n=({currentIndex:e},t)=>e===t,i={view:({attrs:t})=>e(`i.icon.${t.pack||"fas"}.fa-${t.icon||"cog"}${t.size?".fa-"+t.size+"x":""}`,{title:t.icontitle||void 0,role:"presentation",onclick:t.onclick||null,...t.iconClass&&{class:t.iconClass}})},l={view:({attrs:t,state:a,children:n})=>e(t.download||t.link?"a.button":"button",{...t.link&&{href:t.link},...t.download&&{download:t.download},...t.target&&{target:t.target},"aria-label":t["aria-label"]||t.title||t.text,title:t.title||t["aria-label"],class:(t.class||"")+(a.busy?" busy":""),...a.error&&{"data-error":a.error.message},...t.onclick&&{onclick:n=>{clearTimeout(a.debounce),a.debounce=setTimeout((()=>{const i=t.onclick(n,t);i&&i.then&&i.catch&&(a.busy=!0,e.redraw(),i.then((()=>{a.busy=!1,e.redraw()})).catch((t=>{a.busy=!1,a.error=t,e.redraw()})))}),25)}}},[...t.icon&&!t.right?[e(i,t)]:[],...t.text?[e("span.pad-1.pad-h",{class:t.textClass||null},t.text)]:[],...t.icon&&t.right?[e(i,t)]:[],...n])},r={view:({attrs:t,state:a,children:n})=>e(t.download||t.link?"a.button":"button",{...t.link&&{href:t.link},...t.download&&{rel:"nofollow",download:t.download},...t.target&&{target:t.target},"aria-label":t["aria-label"]||t.title||t.text,title:t.title||t["aria-label"],class:(t.class||"")+(a.busy?" busy":""),...a.error&&{"data-error":a.error.message},...t.onClick&&{onclick:n=>{clearTimeout(a.debounce),a.debounce=setTimeout((()=>{const i=t.onClick(n,t);i&&i.then&&i.catch&&(a.busy=!0,e.redraw(),i.then((()=>{a.busy=!1,e.redraw()})).catch((t=>{a.busy=!1,a.error=t,e.redraw()})))}),25)}}},[...t.icon&&!t.right?[e(i,t)]:[],...t.text?[e("span.pad-1.pad-h",{class:t.textClass||null},t.text)]:[],...t.icon&&t.right?[e(i,t)]:[],...n])},o={view:({attrs:t,children:a})=>e(".flexcol.flexcenter.al-center.grows.emptywidget",{...t.class&&{class:t.class},...t.key&&{key:t.key},role:"presentation"},[e(i,t),...t.message?[e(".marg-2.marg-v",{role:"status",class:t.size>4?"font-150":"font-100","aria-label":t.message},t.message.split("\n").map(((t,a,n)=>1===n.length?t:e("p.msg"+a,t))))]:[],...a?[e(".flexcol.additional",a)]:[]])},s=(t,a,n,i)=>{const l=a.currentIndex,r=a.currentParams;-1===n?Object.assign(a,{current:null,currentIndex:-1,currentParams:[]}):Object.assign(a,{current:t.items[n]||null,currentIndex:a.current?n:-1,currentParams:i||[]}),t.onSelected&&t.onSelected(a.current,a.currentParams,a.currentIndex!==l,r),e.redraw()},c={oninit:({attrs:e,state:t})=>{(t=e.state||t).setItem=(a,...n)=>s(e,e.state||t,a,n);const a=!isNaN(t.currentIndex)?t.currentIndex:e.selected,n=e.items&&e.items.length?void 0!==a&&e.items[a]?a:e.noinitial?-1:0:-1,i=-1!==n?e.items[n]:null;Object.assign(t,{currentIndex:n,current:i})},onupdate:({attrs:e,state:t})=>{(e.state||t).setItem=(a,...n)=>s(e,e.state||t,a,n)},view:({attrs:t,state:i})=>{i=t.state||i;const{current:s}=i;return e((t.element||"widget")+".selector"+(t.horizontal?".flexrow":".flexcol")+(t.className?"."+t.className:""),{...t.key&&{key:t.key},class:(i.current?"hascurrent":"empty")+(t.class?" "+t.class:"")},[...t.hideonly&&!(t.items.length>1)||t.hidesel?[]:[e("nav.toolbar.fullwidth"+(t.horizontal?".flexcol":".flexrow"),{"aria-label":t["aria-label"]||t.title||"selector",class:t.toolbarClass},t.items.map(((t,a)=>e(l,{class:(t.class?t.class+" ":"")+(n(i,a)?"accent":"nel"),icon:t.icon||null,...t.title&&{title:t.title},...t["aria-label"]&&{"aria-label":t["aria-label"]},...t.text&&{text:t.text},onclick:()=>{Date.now()-i.clickts<200||(i.clickts=Date.now(),i.bodyHidden=!1,i.setItem(a))}}))))],...s?[...t.toggle&&!i.bodyHidden?[e(r,{class:"selectornotch "+(i.bodyHidden?"bodyhidden":"bodyshown"),icon:i.bodyHidden?"caret-up":"caret-down",title:i.bodyHidden?"expand panel":"contract panel",onClick:()=>{i.bodyHidden=!i.bodyHidden,e.redraw()}})]:[],...t.toggle&&i.bodyHidden?[]:[e(".grows.flexcol.ohidden",{class:t.bodyClass,role:"presentation"},[e(s.widget,a(s.attrs,t,i.currentParams),s.children)])],...t.closeButton?[e(l,{class:"closebutton absolute toright",icon:"times",onclick:()=>{i.setItem(-1)},"aria-label":"close item"})]:[]]:e(o,t)])}},d={info:"info",error:"exclamation-triangle",success:"check"};const u=new function(t=5e3,a){let n,i=[];function r(){const o=a||document.getElementById("notification-container");if(i.length){const a=i.splice(0,1)[0];!function(t,a){e.render(t,e(l,{class:"notification "+a.type,text:a.text,icon:d[a.type]||"info",size:1,role:"status",onclick:r}))}(o,a),clearTimeout(n),n=setTimeout(r,a.timer||t)}else e.render(o,""),n=null}return{add:(e,t)=>{i.push({text:e,type:t}),n||r()},clear:()=>{i=[],r()}}},p={};const h=t((({attrs:t,state:a,children:n})=>{const{nofold:i,cardid:l,size:o,title:s,action:c,collapsedAction:d,collapsedClass:u,expandedClass:m,cols:h,element:v,busy:g,expandedView:f,collapsedView:w,titleWidget:y,titleAttrs:b,titleClass:x,bodyClass:k,titleExpanded:M,titleCollapsed:C}=t,I=!i&&(l?!p[l]:!!a.collapsed),E=I?w?w(t,a):[]:f?f(t,a):n||[],L=y?e(y,b||{}):s?e("span.ellipsis.ohidden.unfold",s):void 0,T=g?"fa-sync":"fa-caret-down "+(I?"iscollapsed":"isexpanded");return E.length||!t.skipEmpty?e(v||"ul",{class:"cardie ohidden noshrink "+(h?"flexcol ":"flexrow wrap ")+(t.class?" "+t.class:"")+(i?" expanded":" "+(I?"collapsed "+(u||""):"expanded "+(m||"")))+(o?" marg-"+o:" marg-2")+(y?" withwidget":"")+(g?" busycard":"")},[...L?[e(".title.grows.fabf.flexrow.pointer.unfold",i?{class:x||"pad-2"}:{class:`${x||"pad-2"} ${T||""}`,title:I?C||"Click to expand the options":M||C||"Click to collapse the options",onclick:n=>{n.target.classList.contains("unfold")&&(n.shiftKey&&t.onShiftOpen?t.onShiftOpen():t.cardid?function(e,t=0){if(e){const[a,n]=e.split("-");t&&a&&n&&Object.keys(p).forEach((e=>{e.startsWith(a+"-")&&(p[e]=0)})),p[e]=t}}(l,I):a.collapsed=!a.collapsed,e.redraw())}},!c||!i&&I?d&&I?[e(r,d),L]:L:[e(r,c),L])]:[],...E.length?[e(".flexbreak"),e(".cardiebody.fadein-filter.grows",{class:(h?"flexcol ":"flexrow wrap")+" "+(k||"")},...E)]:[],...t.alwaysView?[t.alwaysView({attrs:t,state:a})]:[]]):[]}),(({attrs:e,state:t})=>{e.cardid||(t.collapsed=!e.nofold&&(e.cardid?!p[e.cardid]:!!e.collapsed))}),void 0,void 0,void 0),v=(e,t,a=!1)=>{if(a||"number"===e.type){const a=e.float?Number.parseFloat(t):Number.parseInt(t,10);return Number.isNaN(a)?void 0:a}return t},g=(e,t,a)=>{const n=t.hasOwnProperty("value")?t.value:e.value;return v(e,n,a)},f={view:t=>{const{attrs:a,state:n}=t;return n.attrs=a,e(".input-static.w-100.ellipsis",{class:(a.onDrag?"withdrag ":"")+(a.staticClass||"grows"),...a.staticTitle&&{title:a.staticTitle},...a.onDrag||{onclick:a.onClick},oncreate:({dom:e,state:n})=>{if(a.onDrag&&!a.readonly){const a=n.hammer=new Hammer.Manager(e,{touchAction:"pan-y"}),i=new Hammer.Pan({direction:Hammer.DIRECTION_VERTICAL}),l=new Hammer.Tap;a.add([i,l]),a.on("tap",(()=>t.state.attrs.onClick())),a.on("panup",(e=>t.state.attrs.onDrag(-1,e.srcEvent))),a.on("pandown",(e=>t.state.attrs.onDrag(1,e.srcEvent))),a.on("panend pancancel",(e=>t.state.attrs.onDrag(0,e.srcEvent)))}a.focus&&e.focus()},onremove:({state:e})=>{e.hammer&&e.hammer.destroy()}},a.value)}},w={view:({attrs:t,state:a})=>{const n=t=>{a.value&&a.showInput&&delete a.showInput,delete a.value,t&&e.redraw()};return e(".textfield.flexcol.relative",{class:(t.label?"witharia":"")+(t.containerClass?" "+t.containerClass:""),...t.label&&{"aria-label":t.label}},[!t.staticField||!t.readonly&&a.showInput?!a.multi&&!t.alwaysmulti||t.type&&"text"!==t.type?e("input.w-100",{...t.id&&{id:t.id},type:t.type||"text",...void 0!==t.max&&{max:t.max},...void 0!==t.min&&{min:t.min},...t.step>0&&{step:t.step},...t.maxlength&&{maxlength:t.maxlength},class:(t.class||"")+(t.validator?a.isValid?" bg-ok":" bg-error":""),...t.title&&{title:t.title},value:g(t,a),placeholder:t.hint||"",oninput:e=>{a.value=v(t,e.target.value),e.fromoninput=!0,t.validator&&(a.isValid=t.validator(a.value)),t.onchange&&(t.oninput||t.onchange)(a.value,e)},onchange:e=>{t.onchange&&(t.validator&&(a.isValid=t.validator(a.value)),e.enterPressed=a.enterPressed,delete a.enterPressed,t.onchange(v(t,e.target.value),e),t.staticField?n(!0):delete a.value)},onblur:()=>{a.showInput&&n(!0)},onkeyup:e=>{a.showInput&&("Escape"===e.key?n(!0):"Enter"===e.key&&(a.value!==t.value&&a.value||(t.onchange(t.value,e),n(!0))))},onkeypress:e=>{a.showInput||"Enter"!==e.key||t.onenter&&t.onenter(e.target.value,e)}}):e("textarea.w-100",{class:t.class,value:g(t,a),...t.title&&{title:t.title},placeholder:t.hint||"",oninput:e=>{a.value=v(t,e.target.value),t.validator&&(a.isValid=t.validator(a.value)),t.onchange&&(t.oninput||t.onchange)(a.value,e,!0)},onchange:e=>{if(t.onchange){t.validator&&(a.isValid=t.validator(a.value));const i=v(t,e.target.value);n(!1),t.onchange(i,e,!0)}},onblur:()=>{a.showInput&&n(!0)},onkeyup:e=>{"Escape"===e.key&&a.showInput&&n(!1)}}):e(f,{readonly:t.readonly,staticClass:(a.dragging?"accent ":"")+(t.staticClass||""),staticTitle:t.staticTitle||t.draginc&&"Click then drag up and down to modify value, or just click to enter a custom value",value:t.displayTitle||g(t,a),focus:t.focus,...t.draginc&&!t.readonly&&{onDrag:(n,i)=>{if(n){a.dragging=!0;let e=g(t,a,!0);if(Number.isNaN(e)||void 0===e)return;e+=n*t.draginc,void 0!==t.max&&e>t.max&&(e=t.max),void 0!==t.min&&e<t.min&&(e=t.min),a.value="number"===t.type?e:String(e),t.onchange(a.value,i)}else delete a.dragging,delete a.value,e.redraw()}},...t.readonly||{onClick:()=>{a.showInput=!0,a.value=t.value,e.redraw()}}}),e(".span.actions.absolute.right.bottom",[...!t.multi||t.alwaysmulti||t.type&&"text"!==t.type?[]:[e(r,{icon:a.multi?"angle-double-up":"angle-double-down",class:"pad-2 transp",onClick:()=>{a.multi=!a.multi,e.redraw()}})],...t.actions?t.actions.map((t=>e(r,{...t,class:"transp pad-2"}))):[],...t.action?[e(r,{...t.action,class:"transp pad-2"})]:[]])])},oninit:({attrs:e,state:t})=>{if(e.staticField&&e.draginc){const a=g(e,t,!0);t.showInput=Number.isNaN(a)||null==a}}},y=t((({attrs:t,children:a})=>a.length?e(".notice.cardie.flexcol.pad-3",{class:t.class||"marg-2 font-75"},e(".flexrow",[...t.icon?[e(i,t)]:[],e(".pad-2.pad-h",t.text)]),...a):e(".notice.cardie.flexrow.pad-3",{class:t.class||"marg-2 font-75",onclick:t.onClick},[...t.icon?[e(i,t)]:[],e(".pad-2.pad-h",t.text)])));function b(e,t,a,n,i){return{...e&&{view:e},...t&&{oninit:t},...a&&{oncreate:a},...i&&{onupdate:i},...n&&{onremove:n}}}const x=b((({attrs:t,state:a})=>e((t.unit||"")+".flexrow"+(t.subline?" withsubline":""),{class:t.class,text:t.text,title:t.title||null,onclick:()=>{a.checked=!a.checked,t.onchange&&t.onchange(a.checked),e.redraw()}},t.right?[...t.text?[e("span.grows.caption",t.subline?{"data-subline":t.subline}:{},t.text)]:[],e(i,{iconClass:"pad-2 pad-h",icon:a.checked?"toggle-on":"toggle-off"})]:[e(i,{iconClass:"pad-2 pad-h",icon:a.checked?"toggle-on":"toggle-off"}),...t.text?[e("span.grows.caption",t.subline?{"data-subline":t.subline}:{},t.text)]:[]])),(({attrs:e,state:t})=>{t.checked=t.original=e.checked}),null,null,(({attrs:t,state:a})=>{t.checked!==a.original&&(a.checked=a.original=t.checked,e.redraw())}));let k;function M(e){"function"==typeof k&&(k(),k=void 0),e.style.display="none",delete C.redraw}function C(t,a=!1,n=".modal-content"){const i=document.getElementById("modal-container");if(i.classList.toggle("iscustom",".modal-content"!==n),a&&(k=a,i.onclick=e=>{"modal-container"===e.target.id&&M(i)}),!t)return delete C.redraw,void(null===t?i.style.display="none":M(i));i.style.display="flex",C.redraw=()=>{e.render(i,e(n,{role:"alertdialog","aria-labelledby":"modaltitle","aria-modal":!0},["function"==typeof t?t():t]))},C.redraw()}function I(){const e=document.getElementById("modal-container");return"none"!==e.style.display&&(M(e),!0)}function E(t,a,n,i){return new Promise((r=>{function o(e){C(null);try{r(e)}catch(e){}}const s=((e,t)=>{const a=[];if(t)for(const e of Object.keys(t))t[e]&&a.push("."+e);return(e||"")+a.join("")})(".popup.flexcol",{".favlist":(i=i||{}).favlist,".isfav":t&&t.classList.contains("isfav"),".isplay":t&&t.classList.contains("selected")});C(e({view:()=>e(s,{onclick:e=>{if("INPUT"===e.target.nodeName)return;const n=e.target.getAttribute("data-action");n?o({domItem:t,item:a,action:n}):C(null)}},[...a.title?[e("h3",{id:"modaltitle"},a.title)]:[],...n.map((n=>"text"===n.type?e("input.action",{value:n.value||"",type:"text",placeholder:n.hint||"",oncreate:({dom:e})=>e.focus(),onkeyup:e=>{27===e.keyCode&&o({domItem:t,item:a,action:n})},onchange:e=>{e.target.blur(),o({domItem:t,item:a,action:n,value:e.target.value})}}):e(l,{...n,onclick:()=>o({domItem:t,item:a,action:n})},n.caption)))])}),!0)}))}const L=window.structuredClone?window.structuredClone:e=>JSON.parse(JSON.stringify(e));function T(e,t,a,n,i={}){setTimeout((()=>E(document.body,{title:e},[{type:"text",hint:a,value:t}]).then((({value:e})=>(i.refreshKey=String(Date.now()),n(e))))),100)}const N=[["Lights and Fog",null,["amblight","l0","l1","l2","l3","fog"],0],["Face and Accessories",null,["facekit"],1],["Particle settings",null,["particles"],2],["Video Segmentation","common",["segcam","mask","green"],3,!0],["Video Effects",null,["fxconfig"],9],["Video Plane","val",["xvideo","yvideo","zvideo","rvideo","svideo","video"],4],["Main Camera","val",["ypos","xpos","zoom","yaw","pitch","roll","ai"],5],["Drone Camera","val",["free"],6],["Followed Agent","val",["track"],10],["Game Camera","val",["orbit","track","ocam"],7,void 0,!0],["Transition Speed","val",["spd"],8]],D=b((({attrs:t})=>e("h2.marg-2.no-marg-bottom",t.title))),P=b((({attrs:t})=>{const{type:a="changes",meta:n,onInput:i,title:l,options:o}=t,s=n.title?.trim().length&&n.description?.trim().length,c=o&&o.embedded;return e(".flexcol.grows.ohidden.fadein",[...t.title?[e(D,{title:l})]:[],e(".flexrow.wrap.grows.pad-3.propsgroup.scrolly",[...t.notice?[e(y,{class:"marg-1 marg-v withbottommargin font-75 col-12",size:1,icon:"info-circle",text:t.notice})]:[],e(".witharia.col-12.pad-1.pad-v",{"aria-label":a+" name"},e(w,{class:"pad-2 pad-xh "+(s?"valid":"invalid"),value:n.title,maxlength:64,onchange:t=>{n.title=t,e.redraw()}})),...c?[]:[e(".col-12.witharia.pad-1.pad-v",{"aria-label":"description"},e(w,{class:"pad-2 pad-xh "+(n.description?"valid":"invalid"),value:n.description,maxlength:240,multi:!0,alwaysmulti:!0,onchange:t=>{n.description=t,e.redraw()}})),e(".col-8.witharia.pad-1.pad-v",{"aria-label":"tags"},e(w,{class:"pad-2 pad-xh",value:n.tags,maxlength:128,onchange:e=>{n.tags=e.toLowerCase().split(" ").join(",").split(",").filter((e=>e.length)).join(",")}})),e(".col-4.witharia.pad-1.pad-v",{"aria-label":"youtube video"},e(w,{class:"pad-2 pad-xh",value:n.ytref||"",hint:"YouTube ID",maxlength:16,onchange:e=>{(e=e.trim())?-1===e.indexOf(" ")&&(n.ytref=e.trim()):delete n.ytref}}))],e(".col-4.witharia.pad-1.pad-v",{"aria-label":"content attribution"},e(w,{class:"pad-2 pad-xh",value:n.author,hint:"author name",maxlength:128,onchange:e=>{n.author=e}})),e(".col-4.witharia.pad-1.pad-v",{"aria-label":"license or author link"},e(w,{class:"pad-2 pad-xh",hint:"https://...",value:n.link,maxlength:128,onchange:e=>{n.link=e}})),e(".col-4.witharia.pad-1.pad-v",{"aria-label":"source domain"},e(w,{class:"pad-2 pad-xh",value:n.source,hint:"example.com",maxlength:128,onchange:e=>{n.source=e}})),e(".col-12.al-right.marg-2.marg-v",e(r,{class:"noshrink accentbutton unitheightsmall col-4",text:"save "+a,onClick:()=>{n.title?.trim().length&&(c||n.description?.trim().length)?(C(null),i(n)):u.add("Information is incomplete or invalid")}}))])])})),S=b((({attrs:t})=>{const{parameters:a,preset:n,presetComponents:i,types:l,globalData:o,fetcher:s}=t,c=[],d=[],m=l?N:N.filter((e=>{const[,t,i,l,r]=e,s=t?n[t]:n,u=r?o:a,m=t?u[t]:u;let p=!1;if(i.length){for(const e of i)s&&void 0!==s[e]&&(p=c[l]=!0),void 0!==m[e]&&(p=d[l]=!0);return p}return p=!0,d[l]=!!m,c[l]=!!s,p}));return e("ul.flexrow.wrap.userdialog",m.length?m.map((m=>{const[p,h,v,g,f,w]=m,y=l?void 0:h?n[h]:n,b=f?o:a,k=l?void 0:h?b[h]:b,M=l||c[g],C=d[g];return[...i?[e(x,{title:`Include ${m[0]} in snapshots`,class:"grows unitheightsmall"+(i[g]?" accent":""),checked:!!i[g],onchange:a=>{i[g]=!i[g],e.redraw(),t.redraw&&t.redraw()}}),e(".grows",{class:M?"avail":"unavail"},p)]:[],...t.types?[]:[e(r,{class:"col-3"+(C?"avail":"unavail"),icon:"sync",title:`Copy ${p} from current state`,onClick:()=>{if(v.length){h&&!n[h]&&(n[h]={});const e=h?n[h]:n;for(const t of v)if(void 0!==k[t]){const a=w&&s?s(e[t],g):k[t];e[t]=L(a)}}else if(0===v.length&&h&&void 0!==k){const e=w&&s?s(k,g):k;n[h]=L(e)}t.redraw&&t.redraw(),u.add(`updated ${p} from current scene`)}}),e(r,{class:"col-3 "+(M?"":"disabled text-lo"),icon:"trash",title:`Delete ${p} in preset`,onClick:()=>M&&(()=>{if(v.length)for(const e of v)delete y[e];else 0===v.length&&h&&delete n[h];t.redraw&&t.redraw()})()})],e(".flexbreak")]})):e("h3","Preset is Empty"))}));var O=Object.freeze({__proto__:null,choose:function(e,t={icon:"circle",onSelect:()=>{}}){const{icon:a,title:n,field:i,onSelect:l,parser:r=e=>e}=t,o=e.map(((e,t)=>({icon:i&&e.icon||a,caption:r(i?e[i]:e,e),onClick:a=>l(e,a,t)})));Array.isArray(e)&&!e.length?u.add("No items available"):E(document.body,{title:n},o).then((({action:e})=>e.onClick()))},promptEntity:(t,a,n,i={})=>new Promise(((l,r)=>{C(e(P,{meta:t,type:n,title:a,options:i,onInput:e=>l(e)}),(()=>{r(new Error("cancelled"))}))})),promptName:T,promptOptions:function(t,a,n={}){const{title:i,field:l,icon:r,textNew:o,textHint:s,resolve:c}=n,d=Array.isArray(t)?t.map((e=>({icon:r,caption:l?e[l]:e,onClick:t=>a(e,t)}))):Object.keys(t).map((e=>({icon:t[e].icon||r,caption:t[e].caption||e,onClick:n=>a(c&&void 0!==t[e].value?t[e].value:t[e],n)})));Array.isArray(t)&&!t.length?u.add("No items available"):E(document.body,{title:i},[...o&&!l?[{icon:"plus",caption:o,onClick:()=>T(o,"",s,(t=>{t&&t&&t.trim()&&(a(t),e.redraw())}))}]:[],...d]).then((({action:e})=>e.onClick())).finally((()=>{}))},promptPreset:(t,a,n={})=>new Promise(((i,l)=>{C((()=>e(S,{...n,preset:t,parameters:a,redraw:()=>C.redraw()})),(()=>{l(new Error("cancelled"))}))}))});const z=b((({attrs:t,children:a})=>e(".separator",{class:t.class||"mini",...t.onClick&&{onclick:t.onClick}},[e("span.grows",t.text),...a||[]]))),V=!!navigator.userAgent.match(/iPhone|iPad|iPod/i);let j,A=!1;function H(e,t,a){return Math.min(Math.max(e,t),a)}function K(e,t,a,n){if(a-t<=0)return t;if(n<=0)return H(e,t,a);const i=Math.ceil((a-t)/n);return H(t+Math.round(i*(e-t)/(a-t))*n,t,a)}function F(){let t,a,n,i,l,r,o,s,c,d=0,u=!1,m=!1,p=4,h=1,v=0,g=10,f=0,w=1,y="horizontal";function b(e,t){let a,n;"vertical"===y?(a=r.bottom-r.top,n=r.bottom-t):(a=r.right-r.left,n=e-r.left),n=H(n,0,a);const i=K(n/a*(g-v)+v,v,g,w);return O(i),i}function x(t,n,i){return m?function(t,n){u=o=!0,r=a.getBoundingClientRect();const i=b(t,n);i!==f&&(f=i,c&&!1!==c(f)&&e.redraw())}(t,n):(l=i,u=!0,o=!1,r=a.getBoundingClientRect(),void(s||l.target.requestPointerLock()));var l,s}function k(e,t,a){return o?b(e,t):function(e,t,a){const n=a.shiftKey?p:a.metaKey||a.ctrlKey?4*p:h;let i,l;i="vertical"===y?a.movementY||0:a.movementX||0;let r=w>0?w:(g-v)/100;if(i<0)l=Math.max(f+r*n*i,v);else{if(!(i>0))return f;l=Math.min(f+r*n*i,g)}return l=K(l,v,g,w),O(l),l}(0,0,a)}function M(e){2!==d&&(d=1,0===e.button&&(window.addEventListener("mousemove",C),window.addEventListener("mouseup",I),x(e.clientX,e.clientY,e)))}function C(e){e.preventDefault(),D(e.clientX,e.clientY,e)}function I(e){window.removeEventListener("mousemove",C),window.removeEventListener("mouseup",I),P(e.clientX,e.clientY,e)}function E(e){if(1===d)return;t.addEventListener("touchmove",L),t.addEventListener("touchend",T);const a=e.changedTouches[0];x(a.clientX,a.clientY,e)}function L(e){e.preventDefault();const t=e.changedTouches[0];D(t.clientX,t.clientY,e)}function T(e){t.removeEventListener("touchmove",L),t.removeEventListener("touchend",T);const a=e.changedTouches[0];P(a.clientX,a.clientY,a)}function N(t){const a=t.keyCode;let n;if(33===a){t.preventDefault();let e=Math.max((g-v)/10,w);e<=0&&(e=1),n=K(f+e,v,g,w)}else if(34===a){t.preventDefault();let e=Math.max((g-v)/10,w);e<=0&&(e=1),n=K(f-e,v,g,w)}else if(35===a)t.preventDefault(),n=g;else if(36===a)t.preventDefault(),n=v;else if(37===a||40===a){t.preventDefault();let e=(w>0?w:(g-v)/10)*(t.shiftKey?.25:t.ctrlKey||t.metaKey?4:1);n=Math.max(f-e,v)}else if(38===a||39===a){t.preventDefault();let e=(w>0?w:(g-v)/10)*(t.shiftKey?.25:t.ctrlKey||t.metaKey?4:1);n=Math.min(f+e,g)}else 48===a&&(n=(g+v)/2);"number"==typeof n&&n!==f&&(f=n,O(f),s&&!1!==s(f)&&e.redraw())}function D(t,a,n){if(!u)return;const i=k(t,a,n);i!==f&&(f=i,c&&!1!==c(f)&&e.redraw())}function P(t,a,n){u&&(u=!1,f=k(t,a,n),s&&!1!==s(f)&&e.redraw(),o||document.exitPointerLock(),setTimeout((function(){u||(d=0)}),350))}function S(e){let t=(e-v)/(g-v);return"vertical"===y&&(t=1-t),String(100*t)+"%"}function O(e){const t=S(e),a=S(g-e+v);"vertical"===y?(l.style.top=t,n.style.height=t,i.style.height=a):(l.style.left=t,n.style.width=a,i.style.width=t)}function z(e){v=e.min,g=e.max,w="number"!=typeof e.step||Number.isNaN(e.step)?1:H(e.step,0,g-v),y="vertical"===e.orientation?"vertical":"horizontal",s=e.onchange,c=e.ondrag,"number"==typeof e.value&&(f=H(e.value,v,g)),m=!e.relative,p=e.factor&&e.factor[0]||4,h=e.factor&&e.factor[1]||1}return{oncreate:({attrs:e,dom:r})=>{V&&!A&&(window.addEventListener("touchmove",(function(){})),A=!0),z(e),t=r,a=t.querySelector(".mithril-range-bar"),n=a.querySelector(".mithril-range-bar-0"),i=a.querySelector(".mithril-range-bar-1"),l=a.querySelector(".mithril-range-handle"),t.addEventListener("mousedown",M),t.addEventListener("touchstart",E),t.addEventListener("keydown",N)},onremove:function(){window.removeEventListener("mousemove",C),window.removeEventListener("mouseup",I),t.removeEventListener("mousedown",M),t.removeEventListener("touchstart",E),t.removeEventListener("touchmove",L),t.removeEventListener("touchend",T),t.removeEventListener("keydown",N)},view:function({attrs:t,children:a}){z(t),f=K(f,v,g,w);const n={class:"mithril-range nokey"+(t.relative?" isrelative ":" ")+(0===f?"atzero":f<0?"belowzero":"overzero")+(null!=t.class?" "+t.class:""),tabIndex:"0",role:"slider","aria-valuemin":String(v),"aria-valuemax":String(g),"aria-valuenow":String(f),"aria-orientation":y};t.id&&(n.id=t.id),t.ariaLabelledby&&(n["aria-labelledby"]=t.ariaLabelledby),t.disabled&&(n.style={pointerEvents:"none"},n["aria-disabled"]="true");const i=S(f),l=S(g-f+v);let r,o,s;return"vertical"===y?(r={top:i},o={height:i},s={height:l}):(r={left:i},o={width:l},s={width:i}),e("div",n,e("div",{class:"mithril-range-bar nokey"},e("div",{class:"mithril-range-bar-0 nokey",style:o}),e("div",{class:"mithril-range-bar-1 nokey",style:s}),e("div",{class:"mithril-range-handle nokey",style:r},a)),!!t.name&&e("input",{type:"hidden",name:t.name,value:String(f)}))}}}const $=t=>{const a=t.value>t.curMax?Math.ceil(t.value/t.curMax):1,n=t.curMin<0&&t.value<t.curMin?Math.abs(Math.ceil(t.value/t.curMin)):1,i=Math.min(Math.max(n,a),t.maxMultiplier);t.curMultiplier!==i&&(t.curMultiplier=i,e.redraw())},Y=e=>e.value>=e.curMax*e.curMultiplier*.9&&e.maxMultiplier>1&&e.curMultiplier<=e.maxMultiplier-1?(e.curMultiplier++,!0):e.curMin<0?B(e):void 0,B=e=>{if(e.value<=e.curMin*e.curMultiplier*.9&&e.maxMultiplier>1&&e.curMultiplier<=e.maxMultiplier-1)return e.curMultiplier++,!0},X={oninit:({attrs:e,state:t})=>{Object.assign(t,{value:e.value||0,initial:e.value||0,curMax:e.max,curMin:e.min,curMultiplier:1,maxMultiplier:e.multiplier||1,id:"I"+Date.now()}),t.maxMultiplier>1&&(t.value>e.max?t.curMultiplier=Math.ceil(t.value/e.max):e.min<0&&t.value<e.min&&(t.curMultiplier=Math.abs(Math.ceil(t.value/e.min))))},onupdate:({attrs:t,state:a})=>{const n=t.multiplier||1,i=t.value||0;a.curMax!==t.max||a.maxMultiplier!==n?(Object.assign(a,{curMax:t.max,curMin:t.min,maxMultiplier:n,value:t.value,initial:i}),Y(a)||(clearTimeout(a.timer),a.timer=setTimeout($,1e3,a)),e.redraw()):a.initial!==i&&(Object.assign(a,{value:i,initial:i}),clearTimeout(j),j=setTimeout((()=>e.redraw()),50))},view:({attrs:t,state:a})=>e(".range.flexcol.control.relative"+(t.multiplier>1?".withmultiplier":""),{...t.class&&{class:t.class},title:t.hint||"Click, then use arrows to finetune value if needed"},[...t.title?[e("label",{class:"rangelabel",htmlFor:a.id},t.title)]:[],e(F,{onchange:n=>{a.value=n;!Y(a)&&a.curMultiplier>1&&(clearTimeout(a.timer),a.timer=setTimeout($,1e3,a)),t.onchange?t.onchange(n):e.redraw()},ondrag:e=>e!==a.value&&(a.value=e,t.ondrag&&t.ondrag(e),!0),value:a.value||0,min:(t.min||0)*a.curMultiplier,max:a.curMax*a.curMultiplier||100,step:t.step||1,relative:t.relative,factor:t.factor},[e(".currentval",t.parser?t.parser(a.value,t.step<1):a.value?t.step<1?a.value.toFixed(2):""+Math.floor(a.value):"")])])},q={view:({attrs:t,state:a})=>e(X,{value:t.value||0,min:t.min||0,max:t.max||100,step:t.step||.1,class:(t.disabled?"disabled ":"")+(t.class||""),title:t.title,multiplier:t.multiplier,hint:t.hint,parser:t.parser,relative:t.relative,factor:t.factor,getLabel:e=>e?""+e:"default",ondrag:e=>(a.changed=!0,a.value=e,t.onchange&&t.onchange(e,!0),!0),onchange:e=>(t.auto0?e=0:t.autoValue&&(e=t.autoValue),a.changed=!0,a.value=e,t.onchange&&t.onchange(e,!1),!0)})};function _(e,t){m.route(document.getElementById(e),t.default||"/",t.routes)}export{l as Button,r as ButtonNew,h as CardieWidget,o as Empty,i as Icon,w as InputWidget,y as NoticeWidget,O as OverflowUtils,q as RangeWidget,c as Selector,z as Separator,x as SwitchWidget,I as clearModal,b as defineWidget,C as popupMessage,_ as startApp};
1
+ import e from"mithril";function t(e,t,a,n,i){return{...e&&{view:e},...t&&{oninit:t},...a&&{oncreate:a},...i&&{onupdate:i},...n&&{onremove:n}}}function a(e,t,a){const n=("function"==typeof e?e(t):e)||{};return a&&(n.initialParams=a),n}const n=({currentIndex:e},t)=>e===t,i={view:({attrs:t})=>e(`i.icon.${t.pack||"fas"}.fa-${t.icon||"cog"}${t.size?".fa-"+t.size+"x":""}`,{title:t.icontitle||void 0,role:"presentation",onclick:t.onclick||null,...t.iconClass&&{class:t.iconClass}})},l={view:({attrs:t,state:a,children:n})=>e(t.download||t.link?"a.button":"button",{...t.link&&{href:t.link},...t.download&&{download:t.download},...t.target&&{target:t.target},"aria-label":t["aria-label"]||t.title||t.text,title:t.title||t["aria-label"],class:(t.class||"")+(a.busy?" busy":""),...a.error&&{"data-error":a.error.message},...t.onclick&&{onclick:n=>{clearTimeout(a.debounce),a.debounce=setTimeout((()=>{const i=t.onclick(n,t);i&&i.then&&i.catch&&(a.busy=!0,e.redraw(),i.then((()=>{a.busy=!1,e.redraw()})).catch((t=>{a.busy=!1,a.error=t,e.redraw()})))}),25)}}},[...t.icon&&!t.right?[e(i,t)]:[],...t.text?[e("span.pad-1.pad-h",{class:t.textClass||null},t.text)]:[],...t.icon&&t.right?[e(i,t)]:[],...n])},o={view:({attrs:t,state:a,children:n})=>e(t.download||t.link?"a.button":"button",{...t.link&&{href:t.link},...t.download&&{rel:"nofollow",download:t.download},...t.target&&{target:t.target},"aria-label":t["aria-label"]||t.title||t.text,title:t.title||t["aria-label"],class:(t.class||"")+(a.busy?" busy":""),...a.error&&{"data-error":a.error.message},...t.onClick&&{onclick:n=>{clearTimeout(a.debounce),a.debounce=setTimeout((()=>{const i=t.onClick(n,t);i&&i.then&&i.catch&&(a.busy=!0,e.redraw(),i.then((()=>{a.busy=!1,e.redraw()})).catch((t=>{a.busy=!1,a.error=t,e.redraw()})))}),25)}}},[...t.icon&&!t.right?[e(i,t)]:[],...t.text?[e("span.pad-1.pad-h",{class:t.textClass||null},t.text)]:[],...t.icon&&t.right?[e(i,t)]:[],...n])},r={view:({attrs:t,children:a})=>e(".flexcol.flexcenter.al-center.grows.emptywidget",{...t.class&&{class:t.class},...t.key&&{key:t.key},role:"presentation"},[e(i,t),...t.message?[e(".marg-2.marg-v",{role:"status",class:t.size>4?"font-150":"font-100","aria-label":t.message},t.message.split("\n").map(((t,a,n)=>1===n.length?t:e("p.msg"+a,t))))]:[],...a?[e(".flexcol.additional",a)]:[]])},c=(t,a,n,i)=>{const l=a.currentIndex,o=a.currentParams;-1===n?Object.assign(a,{current:null,currentIndex:-1,currentParams:[]}):Object.assign(a,{current:t.items[n]||null,currentIndex:a.current?n:-1,currentParams:i||[]}),t.onSelected&&t.onSelected(a.current,a.currentParams,a.currentIndex!==l,o),e.redraw()},s={oninit:({attrs:e,state:t})=>{(t=e.state||t).setItem=(a,...n)=>c(e,e.state||t,a,n);const a=!isNaN(t.currentIndex)?t.currentIndex:e.selected,n=e.items&&e.items.length?void 0!==a&&e.items[a]?a:e.noinitial?-1:0:-1,i=-1!==n?e.items[n]:null;Object.assign(t,{currentIndex:n,current:i})},onupdate:({attrs:e,state:t})=>{(e.state||t).setItem=(a,...n)=>c(e,e.state||t,a,n)},view:({attrs:t,state:i})=>{i=t.state||i;const{current:c}=i;return e((t.element||"widget")+".selector"+(t.horizontal?".flexrow":".flexcol")+(t.className?"."+t.className:""),{...t.key&&{key:t.key},class:(i.current?"hascurrent":"empty")+(t.class?" "+t.class:"")},[...t.hideonly&&!(t.items.length>1)||t.hidesel?[]:[e("nav.toolbar.fullwidth"+(t.horizontal?".flexcol":".flexrow"),{"aria-label":t["aria-label"]||t.title||"selector",class:t.toolbarClass},t.items.map(((t,a)=>e(l,{class:(t.class?t.class+" ":"")+(n(i,a)?"accent":"nel"),icon:t.icon||null,...t.title&&{title:t.title},...t["aria-label"]&&{"aria-label":t["aria-label"]},...t.text&&{text:t.text},onclick:()=>{Date.now()-i.clickts<200||(i.clickts=Date.now(),i.bodyHidden=!1,i.setItem(a))}}))))],...c?[...t.toggle&&!i.bodyHidden?[e(o,{class:"selectornotch "+(i.bodyHidden?"bodyhidden":"bodyshown"),icon:i.bodyHidden?"caret-up":"caret-down",title:i.bodyHidden?"expand panel":"contract panel",onClick:()=>{i.bodyHidden=!i.bodyHidden,e.redraw()}})]:[],...t.toggle&&i.bodyHidden?[]:[e(".grows.flexcol.ohidden",{class:t.bodyClass,role:"presentation"},[e(c.widget,a(c.attrs,t,i.currentParams),c.children)])],...t.closeButton?[e(l,{class:"closebutton absolute toright",icon:"times",onclick:()=>{i.setItem(-1)},"aria-label":"close item"})]:[]]:e(r,t)])}},d={info:"info",error:"exclamation-triangle",success:"check"};const u=new function(t=5e3,a){let n,i=[];function o(){const r=a||document.getElementById("notification-container");if(i.length){const a=i.splice(0,1)[0];!function(t,a){e.render(t,e(l,{class:"notification "+a.type,text:a.text,icon:d[a.type]||"info",size:1,role:"status",onclick:o}))}(r,a),clearTimeout(n),n=setTimeout(o,a.timer||t)}else e.render(r,""),n=null}return{add:(e,t)=>{i.push({text:e,type:t}),n||o()},clear:()=>{i=[],o()}}},p={};const h=t((({attrs:t,state:a,children:n})=>{const{nofold:i,cardid:l,size:r,title:c,action:s,collapsedAction:d,collapsedClass:u,expandedClass:m,cols:h,element:v,busy:g,expandedView:f,collapsedView:w,titleWidget:y,titleAttrs:x,titleClass:b,bodyClass:k,titleExpanded:C,titleCollapsed:M}=t,E=!i&&(l?!p[l]:!!a.collapsed),I=E?w?w(t,a):[]:f?f(t,a):n||[],L=y?e(y,x||{}):c?e("span.ellipsis.ohidden.unfold",c):void 0,N=g?"fa-sync":"fa-caret-down "+(E?"iscollapsed":"isexpanded");return I.length||!t.skipEmpty?e(v||"ul",{class:"cardie ohidden noshrink "+(h?"flexcol ":"flexrow wrap ")+(t.class?" "+t.class:"")+(i?" expanded":" "+(E?"collapsed "+(u||""):"expanded "+(m||"")))+(r?" marg-"+r:" marg-2")+(y?" withwidget":"")+(g?" busycard":"")},[...L?[e(".title.grows.fabf.flexrow.pointer.unfold",i?{class:b||"pad-2"}:{class:`${b||"pad-2"} ${N||""}`,title:E?M||"Click to expand the options":C||M||"Click to collapse the options",onclick:n=>{n.target.classList.contains("unfold")&&(n.shiftKey&&t.onShiftOpen?t.onShiftOpen():t.cardid?function(e,t=0){if(e){const[a,n]=e.split("-");t&&a&&n&&Object.keys(p).forEach((e=>{e.startsWith(a+"-")&&(p[e]=0)})),p[e]=t}}(l,E):a.collapsed=!a.collapsed,e.redraw())}},!s||!i&&E?d&&E?[e(o,d),L]:L:[e(o,s),L])]:[],...I.length?[e(".flexbreak"),e(".cardiebody.fadein-filter.grows",{class:(h?"flexcol ":"flexrow wrap")+" "+(k||"")},...I)]:[],...t.alwaysView?[t.alwaysView({attrs:t,state:a})]:[]]):[]}),(({attrs:e,state:t})=>{e.cardid||(t.collapsed=!e.nofold&&(e.cardid?!p[e.cardid]:!!e.collapsed))}),void 0,void 0,void 0),v=(e,t,a=!1)=>{if(a||"number"===e.type){const a=e.float?Number.parseFloat(t):Number.parseInt(t,10);return Number.isNaN(a)?void 0:a}return t},g=(e,t,a)=>{const n=t.hasOwnProperty("value")?t.value:e.value;return v(e,n,a)},f={view:t=>{const{attrs:a,state:n}=t;return n.attrs=a,e(".input-static.w-100.ellipsis",{class:(a.onDrag?"withdrag ":"")+(a.staticClass||"grows"),...a.staticTitle&&{title:a.staticTitle},...a.onDrag||{onclick:a.onClick},oncreate:({dom:e,state:n})=>{if(a.onDrag&&!a.readonly){const a=n.hammer=new Hammer.Manager(e,{touchAction:"pan-y"}),i=new Hammer.Pan({direction:Hammer.DIRECTION_VERTICAL}),l=new Hammer.Tap;a.add([i,l]),a.on("tap",(()=>t.state.attrs.onClick())),a.on("panup",(e=>t.state.attrs.onDrag(-1,e.srcEvent))),a.on("pandown",(e=>t.state.attrs.onDrag(1,e.srcEvent))),a.on("panend pancancel",(e=>t.state.attrs.onDrag(0,e.srcEvent)))}a.focus&&e.focus()},onremove:({state:e})=>{e.hammer&&e.hammer.destroy()}},a.value)}},w={view:({attrs:t,state:a})=>{const n=t=>{a.value&&a.showInput&&delete a.showInput,delete a.value,t&&e.redraw()};return e(".textfield.flexcol.relative",{class:(t.label?"witharia":"")+(t.containerClass?" "+t.containerClass:""),...t.label&&{"aria-label":t.label}},[!t.staticField||!t.readonly&&a.showInput?!a.multi&&!t.alwaysmulti||t.type&&"text"!==t.type?e("input.w-100",{...t.id&&{id:t.id},type:t.type||"text",...void 0!==t.max&&{max:t.max},...void 0!==t.min&&{min:t.min},...t.step>0&&{step:t.step},...t.maxlength&&{maxlength:t.maxlength},class:(t.class||"")+(t.validator?a.isValid?" bg-ok":" bg-error":""),...t.title&&{title:t.title},value:g(t,a),placeholder:t.hint||"",oninput:e=>{a.value=v(t,e.target.value),e.fromoninput=!0,t.validator&&(a.isValid=t.validator(a.value)),t.onchange&&(t.oninput||t.onchange)(a.value,e)},onchange:e=>{t.onchange&&(t.validator&&(a.isValid=t.validator(a.value)),e.enterPressed=a.enterPressed,delete a.enterPressed,t.onchange(v(t,e.target.value),e),t.staticField?n(!0):delete a.value)},onblur:()=>{a.showInput&&n(!0)},onkeyup:e=>{a.showInput&&("Escape"===e.key?n(!0):"Enter"===e.key&&(a.value!==t.value&&a.value||(t.onchange(t.value,e),n(!0))))},onkeypress:e=>{a.showInput||"Enter"!==e.key||t.onenter&&t.onenter(e.target.value,e)}}):e("textarea.w-100",{class:t.class,value:g(t,a),...t.title&&{title:t.title},placeholder:t.hint||"",oninput:e=>{a.value=v(t,e.target.value),t.validator&&(a.isValid=t.validator(a.value)),t.onchange&&(t.oninput||t.onchange)(a.value,e,!0)},onchange:e=>{if(t.onchange){t.validator&&(a.isValid=t.validator(a.value));const i=v(t,e.target.value);n(!1),t.onchange(i,e,!0)}},onblur:()=>{a.showInput&&n(!0)},onkeyup:e=>{"Escape"===e.key&&a.showInput&&n(!1)}}):e(f,{readonly:t.readonly,staticClass:(a.dragging?"accent ":"")+(t.staticClass||""),staticTitle:t.staticTitle||t.draginc&&"Click then drag up and down to modify value, or just click to enter a custom value",value:t.displayTitle||g(t,a),focus:t.focus,...t.draginc&&!t.readonly&&{onDrag:(n,i)=>{if(n){a.dragging=!0;let e=g(t,a,!0);if(Number.isNaN(e)||void 0===e)return;e+=n*t.draginc,void 0!==t.max&&e>t.max&&(e=t.max),void 0!==t.min&&e<t.min&&(e=t.min),a.value="number"===t.type?e:String(e),t.onchange(a.value,i)}else delete a.dragging,delete a.value,e.redraw()}},...t.readonly||{onClick:()=>{a.showInput=!0,a.value=t.value,e.redraw()}}}),e(".span.actions.absolute.right.bottom",[...!t.multi||t.alwaysmulti||t.type&&"text"!==t.type?[]:[e(o,{icon:a.multi?"angle-double-up":"angle-double-down",class:"pad-2 transp",onClick:()=>{a.multi=!a.multi,e.redraw()}})],...t.actions?t.actions.map((t=>e(o,{...t,class:"transp pad-2"}))):[],...t.action?[e(o,{...t.action,class:"transp pad-2"})]:[]])])},oninit:({attrs:e,state:t})=>{if(e.staticField&&e.draginc){const a=g(e,t,!0);t.showInput=Number.isNaN(a)||null==a}}},y=t((({attrs:t,children:a})=>a.length?e(".notice.cardie.flexcol.pad-3",{class:t.class||"marg-2 font-75"},e(".flexrow",[...t.icon?[e(i,t)]:[],e(".pad-2.pad-h",t.text)]),...a):e(".notice.cardie.flexrow.pad-3",{class:t.class||"marg-2 font-75",onclick:t.onClick},[...t.icon?[e(i,t)]:[],e(".pad-2.pad-h",t.text)])));function x(e,t,a,n,i){return{...e&&{view:e},...t&&{oninit:t},...a&&{oncreate:a},...i&&{onupdate:i},...n&&{onremove:n}}}const b=x((({attrs:t,state:a})=>e((t.unit||"")+".flexrow"+(t.subline?" withsubline":""),{class:t.class,text:t.text,title:t.title||null,onclick:()=>{a.checked=!a.checked,t.onchange&&t.onchange(a.checked),e.redraw()}},t.right?[...t.text?[e("span.grows.caption",t.subline?{"data-subline":t.subline}:{},t.text)]:[],e(i,{iconClass:"pad-2 pad-h",icon:a.checked?"toggle-on":"toggle-off"})]:[e(i,{iconClass:"pad-2 pad-h",icon:a.checked?"toggle-on":"toggle-off"}),...t.text?[e("span.grows.caption",t.subline?{"data-subline":t.subline}:{},t.text)]:[]])),(({attrs:e,state:t})=>{t.checked=t.original=e.checked}),null,null,(({attrs:t,state:a})=>{t.checked!==a.original&&(a.checked=a.original=t.checked,e.redraw())}));let k;function C(e){"function"==typeof k&&(k(),k=void 0),e.style.display="none",delete M.redraw}function M(t,a=!1,n=".modal-content"){const i=document.getElementById("modal-container");if(i.classList.toggle("iscustom",".modal-content"!==n),a&&(k=a,i.onclick=e=>{"modal-container"===e.target.id&&C(i)}),!t)return delete M.redraw,void(null===t?i.style.display="none":C(i));i.style.display="flex",M.redraw=()=>{e.render(i,e(n,{role:"alertdialog","aria-labelledby":"modaltitle","aria-modal":!0},["function"==typeof t?t():t]))},M.redraw()}function E(){const e=document.getElementById("modal-container");return"none"!==e.style.display&&(C(e),!0)}function I(t,a,n,i=!1){let l;return"function"==typeof i&&(l=i,i=!1),new Promise((o=>{const r=n.map(((e,t)=>({caption:e,onclick:()=>o({idx:t,name:e})})));!function(t,a,n=["CANCEL","OK"],i={}){M(e({view:()=>[...t?[e("h3",t)]:[],...a?[e("h4",a)]:[],e(".container",n.map((t=>e("button",{onclick:()=>{document.getElementById("modal-container").style.display="none",t.onclick&&t.onclick(t.caption)}},t.caption||"OK"))))]},{}),i.onCancel||!i.noCancel)}(t,a,r,{onCancel:l,noCancel:i})}))}function L(t,a,n,i){return new Promise((o=>{function r(e){M(null);try{o(e)}catch(e){}}const c=((e,t)=>{const a=[];if(t)for(const e of Object.keys(t))t[e]&&a.push("."+e);return(e||"")+a.join("")})(".popup.flexcol",{".favlist":(i=i||{}).favlist,".isfav":t&&t.classList.contains("isfav"),".isplay":t&&t.classList.contains("selected")});M(e({view:()=>e(c,{onclick:e=>{if("INPUT"===e.target.nodeName)return;const n=e.target.getAttribute("data-action");n?r({domItem:t,item:a,action:n}):M(null)}},[...a.title?[e("h3",{id:"modaltitle"},a.title)]:[],...n.map((n=>"text"===n.type?e("input.action",{value:n.value||"",type:"text",placeholder:n.hint||"",oncreate:({dom:e})=>e.focus(),onkeyup:e=>{27===e.keyCode&&r({domItem:t,item:a,action:n})},onchange:e=>{e.target.blur(),r({domItem:t,item:a,action:n,value:e.target.value})}}):e(l,{...n,onclick:()=>r({domItem:t,item:a,action:n})},n.caption)))])}),!0)}))}const N=window.structuredClone?window.structuredClone:e=>JSON.parse(JSON.stringify(e));function T(e,t,a,n,i={}){setTimeout((()=>L(document.body,{title:e},[{type:"text",hint:a,value:t}]).then((({value:e})=>(i.refreshKey=String(Date.now()),n(e))))),100)}const P=[["Lights and Fog",null,["amblight","l0","l1","l2","l3","fog"],0],["Face and Accessories",null,["facekit"],1],["Particle settings",null,["particles"],2],["Video Segmentation","common",["segcam","mask","green"],3,!0],["Video Effects",null,["fxconfig"],9],["Video Plane","val",["xvideo","yvideo","zvideo","rvideo","svideo","video"],4],["Main Camera","val",["ypos","xpos","zoom","yaw","pitch","roll","ai"],5],["Drone Camera","val",["free"],6],["Followed Agent","val",["track"],10],["Game Camera","val",["orbit","track","ocam"],7,void 0,!0],["Transition Speed","val",["spd"],8]],D=x((({attrs:t})=>e("h2.marg-2.no-marg-bottom",t.title))),S=x((({attrs:t})=>{const{type:a="changes",meta:n,onInput:i,title:l,options:r}=t,c=n.title?.trim().length&&n.description?.trim().length,s=r&&r.embedded;return e(".flexcol.grows.ohidden.fadein",[...t.title?[e(D,{title:l})]:[],e(".flexrow.wrap.grows.pad-3.propsgroup.scrolly",[...t.notice?[e(y,{class:"marg-1 marg-v withbottommargin font-75 col-12",size:1,icon:"info-circle",text:t.notice})]:[],e(".witharia.col-12.pad-1.pad-v",{"aria-label":a+" name"},e(w,{class:"pad-2 pad-xh "+(c?"valid":"invalid"),value:n.title,maxlength:64,onchange:t=>{n.title=t,e.redraw()}})),...s?[]:[e(".col-12.witharia.pad-1.pad-v",{"aria-label":"description"},e(w,{class:"pad-2 pad-xh "+(n.description?"valid":"invalid"),value:n.description,maxlength:240,multi:!0,alwaysmulti:!0,onchange:t=>{n.description=t,e.redraw()}})),e(".col-8.witharia.pad-1.pad-v",{"aria-label":"tags"},e(w,{class:"pad-2 pad-xh",value:n.tags,maxlength:128,onchange:e=>{n.tags=e.toLowerCase().split(" ").join(",").split(",").filter((e=>e.length)).join(",")}})),e(".col-4.witharia.pad-1.pad-v",{"aria-label":"youtube video"},e(w,{class:"pad-2 pad-xh",value:n.ytref||"",hint:"YouTube ID",maxlength:16,onchange:e=>{(e=e.trim())?-1===e.indexOf(" ")&&(n.ytref=e.trim()):delete n.ytref}}))],e(".col-4.witharia.pad-1.pad-v",{"aria-label":"content attribution"},e(w,{class:"pad-2 pad-xh",value:n.author,hint:"author name",maxlength:128,onchange:e=>{n.author=e}})),e(".col-4.witharia.pad-1.pad-v",{"aria-label":"license or author link"},e(w,{class:"pad-2 pad-xh",hint:"https://...",value:n.link,maxlength:128,onchange:e=>{n.link=e}})),e(".col-4.witharia.pad-1.pad-v",{"aria-label":"source domain"},e(w,{class:"pad-2 pad-xh",value:n.source,hint:"example.com",maxlength:128,onchange:e=>{n.source=e}})),e(".col-12.al-right.marg-2.marg-v",e(o,{class:"noshrink accentbutton unitheightsmall col-4",text:"save "+a,onClick:()=>{n.title?.trim().length&&(s||n.description?.trim().length)?(M(null),i(n)):u.add("Information is incomplete or invalid")}}))])])})),O=x((({attrs:t})=>{const{parameters:a,preset:n,presetComponents:i,types:l,globalData:r,fetcher:c}=t,s=[],d=[],m=l?P:P.filter((e=>{const[,t,i,l,o]=e,c=t?n[t]:n,u=o?r:a,m=t?u[t]:u;let p=!1;if(i.length){for(const e of i)c&&void 0!==c[e]&&(p=s[l]=!0),void 0!==m[e]&&(p=d[l]=!0);return p}return p=!0,d[l]=!!m,s[l]=!!c,p}));return e("ul.flexrow.wrap.userdialog",m.length?m.map((m=>{const[p,h,v,g,f,w]=m,y=l?void 0:h?n[h]:n,x=f?r:a,k=l?void 0:h?x[h]:x,C=l||s[g],M=d[g];return[...i?[e(b,{title:`Include ${m[0]} in snapshots`,class:"grows unitheightsmall"+(i[g]?" accent":""),checked:!!i[g],onchange:a=>{i[g]=!i[g],e.redraw(),t.redraw&&t.redraw()}}),e(".grows",{class:C?"avail":"unavail"},p)]:[],...t.types?[]:[e(o,{class:"col-3"+(M?"avail":"unavail"),icon:"sync",title:`Copy ${p} from current state`,onClick:()=>{if(v.length){h&&!n[h]&&(n[h]={});const e=h?n[h]:n;for(const t of v)if(void 0!==k[t]){const a=w&&c?c(e[t],g):k[t];e[t]=N(a)}}else if(0===v.length&&h&&void 0!==k){const e=w&&c?c(k,g):k;n[h]=N(e)}t.redraw&&t.redraw(),u.add(`updated ${p} from current scene`)}}),e(o,{class:"col-3 "+(C?"":"disabled text-lo"),icon:"trash",title:`Delete ${p} in preset`,onClick:()=>C&&(()=>{if(v.length)for(const e of v)delete y[e];else 0===v.length&&h&&delete n[h];t.redraw&&t.redraw()})()})],e(".flexbreak")]})):e("h3","Preset is Empty"))}));var z=Object.freeze({__proto__:null,choose:function(e,t={icon:"circle",onSelect:()=>{}}){const{icon:a,title:n,field:i,onSelect:l,parser:o=e=>e}=t,r=e.map(((e,t)=>({icon:i&&e.icon||a,caption:o(i?e[i]:e,e),onClick:a=>l(e,a,t)})));Array.isArray(e)&&!e.length?u.add("No items available"):L(document.body,{title:n},r).then((({action:e})=>e.onClick()))},promptEntity:(t,a,n,i={})=>new Promise(((l,o)=>{M(e(S,{meta:t,type:n,title:a,options:i,onInput:e=>l(e)}),(()=>{o(new Error("cancelled"))}))})),promptName:T,promptOptions:function(t,a,n={}){const{title:i,field:l,icon:o,textNew:r,textHint:c,resolve:s}=n,d=Array.isArray(t)?t.map((e=>({icon:o,caption:l?e[l]:e,onClick:t=>a(e,t)}))):Object.keys(t).map((e=>({icon:t[e].icon||o,caption:t[e].caption||e,onClick:n=>a(s&&void 0!==t[e].value?t[e].value:t[e],n)})));Array.isArray(t)&&!t.length?u.add("No items available"):L(document.body,{title:i},[...r&&!l?[{icon:"plus",caption:r,onClick:()=>T(r,"",c,(t=>{t&&t&&t.trim()&&(a(t),e.redraw())}))}]:[],...d]).then((({action:e})=>e.onClick())).finally((()=>{}))},promptPreset:(t,a,n={})=>new Promise(((i,l)=>{M((()=>e(O,{...n,preset:t,parameters:a,redraw:()=>M.redraw()})),(()=>{l(new Error("cancelled"))}))}))});const A=x((({attrs:t,children:a})=>e(".separator",{class:t.class||"mini",...t.onClick&&{onclick:t.onClick}},[e("span.grows",t.text),...a||[]]))),V=t((({attrs:t,dom:a})=>e(".titlebar.noshrink.flexrow",{class:t.class?" "+t.class:"unitheight bg-window-hi pad-2 pad-h shadow-2 font-125",...t.onTitleClick&&{onclick:t.onTitleClick}},[...t.onClick?[e(o,{icon:"arrow-left",onClick:()=>t.onClick()})]:[],...t.logo?[e("img.title-logo",{src:t.logo})]:[],...t.editable&&t.onchange?[e(w,{containerClass:"grows"+(t.onClick?"":" pad-2 pad-h"),hint:t.title,onchange:t.onchange,oninput:()=>{},value:t.value})]:[e("span.grows.ellipsis",{class:t.onClick?"":"pad-2 pad-h"},t.title)],...t.auxaction?[e(o,{icon:t.auxaction.icon,onClick:t.auxaction.onClick})]:[],...t.auxactions?t.auxactions.map((t=>e(o,{class:t.class,title:t.title,icon:t.icon,text:t.caption,onClick:t.onClick}))):[],...t.action?[e(o,{icon:t.action.icon,onClick:t.action.onClick})]:[],...t.overflow?[e(o,{icon:t.overflow.icon||"ellipsis-v",class:t.overflow.class||"",onClick:()=>L(a,{title:t.title},t.overflow.items).then((({action:e})=>e.onClick()))})]:[]]))),j=!!navigator.userAgent.match(/iPhone|iPad|iPod/i);let H,K=!1;function Y(e,t,a){return Math.min(Math.max(e,t),a)}function F(e,t,a,n){if(a-t<=0)return t;if(n<=0)return Y(e,t,a);const i=Math.ceil((a-t)/n);return Y(t+Math.round(i*(e-t)/(a-t))*n,t,a)}function $(){let t,a,n,i,l,o,r,c,s,d=0,u=!1,m=!1,p=4,h=1,v=0,g=10,f=0,w=1,y="horizontal";function x(e,t){let a,n;"vertical"===y?(a=o.bottom-o.top,n=o.bottom-t):(a=o.right-o.left,n=e-o.left),n=Y(n,0,a);const i=F(n/a*(g-v)+v,v,g,w);return O(i),i}function b(t,n,i){return m?function(t,n){u=r=!0,o=a.getBoundingClientRect();const i=x(t,n);i!==f&&(f=i,s&&!1!==s(f)&&e.redraw())}(t,n):(l=i,u=!0,r=!1,o=a.getBoundingClientRect(),void(c||l.target.requestPointerLock()));var l,c}function k(e,t,a){return r?x(e,t):function(e,t,a){const n=a.shiftKey?p:a.metaKey||a.ctrlKey?4*p:h;let i,l;i="vertical"===y?a.movementY||0:a.movementX||0;let o=w>0?w:(g-v)/100;if(i<0)l=Math.max(f+o*n*i,v);else{if(!(i>0))return f;l=Math.min(f+o*n*i,g)}return l=F(l,v,g,w),O(l),l}(0,0,a)}function C(e){2!==d&&(d=1,0===e.button&&(window.addEventListener("mousemove",M),window.addEventListener("mouseup",E),b(e.clientX,e.clientY,e)))}function M(e){e.preventDefault(),P(e.clientX,e.clientY,e)}function E(e){window.removeEventListener("mousemove",M),window.removeEventListener("mouseup",E),D(e.clientX,e.clientY,e)}function I(e){if(1===d)return;t.addEventListener("touchmove",L),t.addEventListener("touchend",N);const a=e.changedTouches[0];b(a.clientX,a.clientY,e)}function L(e){e.preventDefault();const t=e.changedTouches[0];P(t.clientX,t.clientY,e)}function N(e){t.removeEventListener("touchmove",L),t.removeEventListener("touchend",N);const a=e.changedTouches[0];D(a.clientX,a.clientY,a)}function T(t){const a=t.keyCode;let n;if(33===a){t.preventDefault();let e=Math.max((g-v)/10,w);e<=0&&(e=1),n=F(f+e,v,g,w)}else if(34===a){t.preventDefault();let e=Math.max((g-v)/10,w);e<=0&&(e=1),n=F(f-e,v,g,w)}else if(35===a)t.preventDefault(),n=g;else if(36===a)t.preventDefault(),n=v;else if(37===a||40===a){t.preventDefault();let e=(w>0?w:(g-v)/10)*(t.shiftKey?.25:t.ctrlKey||t.metaKey?4:1);n=Math.max(f-e,v)}else if(38===a||39===a){t.preventDefault();let e=(w>0?w:(g-v)/10)*(t.shiftKey?.25:t.ctrlKey||t.metaKey?4:1);n=Math.min(f+e,g)}else 48===a&&(n=(g+v)/2);"number"==typeof n&&n!==f&&(f=n,O(f),c&&!1!==c(f)&&e.redraw())}function P(t,a,n){if(!u)return;const i=k(t,a,n);i!==f&&(f=i,s&&!1!==s(f)&&e.redraw())}function D(t,a,n){u&&(u=!1,f=k(t,a,n),c&&!1!==c(f)&&e.redraw(),r||document.exitPointerLock(),setTimeout((function(){u||(d=0)}),350))}function S(e){let t=(e-v)/(g-v);return"vertical"===y&&(t=1-t),String(100*t)+"%"}function O(e){const t=S(e),a=S(g-e+v);"vertical"===y?(l.style.top=t,n.style.height=t,i.style.height=a):(l.style.left=t,n.style.width=a,i.style.width=t)}function z(e){v=e.min,g=e.max,w="number"!=typeof e.step||Number.isNaN(e.step)?1:Y(e.step,0,g-v),y="vertical"===e.orientation?"vertical":"horizontal",c=e.onchange,s=e.ondrag,"number"==typeof e.value&&(f=Y(e.value,v,g)),m=!e.relative,p=e.factor&&e.factor[0]||4,h=e.factor&&e.factor[1]||1}return{oncreate:({attrs:e,dom:o})=>{j&&!K&&(window.addEventListener("touchmove",(function(){})),K=!0),z(e),t=o,a=t.querySelector(".mithril-range-bar"),n=a.querySelector(".mithril-range-bar-0"),i=a.querySelector(".mithril-range-bar-1"),l=a.querySelector(".mithril-range-handle"),t.addEventListener("mousedown",C),t.addEventListener("touchstart",I),t.addEventListener("keydown",T)},onremove:function(){window.removeEventListener("mousemove",M),window.removeEventListener("mouseup",E),t.removeEventListener("mousedown",C),t.removeEventListener("touchstart",I),t.removeEventListener("touchmove",L),t.removeEventListener("touchend",N),t.removeEventListener("keydown",T)},view:function({attrs:t,children:a}){z(t),f=F(f,v,g,w);const n={class:"mithril-range nokey"+(t.relative?" isrelative ":" ")+(0===f?"atzero":f<0?"belowzero":"overzero")+(null!=t.class?" "+t.class:""),tabIndex:"0",role:"slider","aria-valuemin":String(v),"aria-valuemax":String(g),"aria-valuenow":String(f),"aria-orientation":y};t.id&&(n.id=t.id),t.ariaLabelledby&&(n["aria-labelledby"]=t.ariaLabelledby),t.disabled&&(n.style={pointerEvents:"none"},n["aria-disabled"]="true");const i=S(f),l=S(g-f+v);let o,r,c;return"vertical"===y?(o={top:i},r={height:i},c={height:l}):(o={left:i},r={width:l},c={width:i}),e("div",n,e("div",{class:"mithril-range-bar nokey"},e("div",{class:"mithril-range-bar-0 nokey",style:r}),e("div",{class:"mithril-range-bar-1 nokey",style:c}),e("div",{class:"mithril-range-handle nokey",style:o},a)),!!t.name&&e("input",{type:"hidden",name:t.name,value:String(f)}))}}}const B=t=>{const a=t.value>t.curMax?Math.ceil(t.value/t.curMax):1,n=t.curMin<0&&t.value<t.curMin?Math.abs(Math.ceil(t.value/t.curMin)):1,i=Math.min(Math.max(n,a),t.maxMultiplier);t.curMultiplier!==i&&(t.curMultiplier=i,e.redraw())},X=e=>e.value>=e.curMax*e.curMultiplier*.9&&e.maxMultiplier>1&&e.curMultiplier<=e.maxMultiplier-1?(e.curMultiplier++,!0):e.curMin<0?q(e):void 0,q=e=>{if(e.value<=e.curMin*e.curMultiplier*.9&&e.maxMultiplier>1&&e.curMultiplier<=e.maxMultiplier-1)return e.curMultiplier++,!0},_={oninit:({attrs:e,state:t})=>{Object.assign(t,{value:e.value||0,initial:e.value||0,curMax:e.max,curMin:e.min,curMultiplier:1,maxMultiplier:e.multiplier||1,id:"I"+Date.now()}),t.maxMultiplier>1&&(t.value>e.max?t.curMultiplier=Math.ceil(t.value/e.max):e.min<0&&t.value<e.min&&(t.curMultiplier=Math.abs(Math.ceil(t.value/e.min))))},onupdate:({attrs:t,state:a})=>{const n=t.multiplier||1,i=t.value||0;a.curMax!==t.max||a.maxMultiplier!==n?(Object.assign(a,{curMax:t.max,curMin:t.min,maxMultiplier:n,value:t.value,initial:i}),X(a)||(clearTimeout(a.timer),a.timer=setTimeout(B,1e3,a)),e.redraw()):a.initial!==i&&(Object.assign(a,{value:i,initial:i}),clearTimeout(H),H=setTimeout((()=>e.redraw()),50))},view:({attrs:t,state:a})=>e(".range.flexcol.control.relative"+(t.multiplier>1?".withmultiplier":""),{...t.class&&{class:t.class},title:t.hint||"Click, then use arrows to finetune value if needed"},[...t.title?[e("label",{class:"rangelabel",htmlFor:a.id},t.title)]:[],e($,{onchange:n=>{a.value=n;!X(a)&&a.curMultiplier>1&&(clearTimeout(a.timer),a.timer=setTimeout(B,1e3,a)),t.onchange?t.onchange(n):e.redraw()},ondrag:e=>e!==a.value&&(a.value=e,t.ondrag&&t.ondrag(e),!0),value:a.value||0,min:(t.min||0)*a.curMultiplier,max:a.curMax*a.curMultiplier||100,step:t.step||1,relative:t.relative,factor:t.factor},[e(".currentval",t.parser?t.parser(a.value,t.step<1):a.value?t.step<1?a.value.toFixed(2):""+Math.floor(a.value):"")])])},R={view:({attrs:t,state:a})=>e(_,{value:t.value||0,min:t.min||0,max:t.max||100,step:t.step||.1,class:(t.disabled?"disabled ":"")+(t.class||""),title:t.title,multiplier:t.multiplier,hint:t.hint,parser:t.parser,relative:t.relative,factor:t.factor,getLabel:e=>e?""+e:"default",ondrag:e=>(a.changed=!0,a.value=e,t.onchange&&t.onchange(e,!0),!0),onchange:e=>(t.auto0?e=0:t.autoValue&&(e=t.autoValue),a.changed=!0,a.value=e,t.onchange&&t.onchange(e,!1),!0)})};function J(e,t){m.route(document.getElementById(e),t.default||"/",t.routes)}function W(e,t,a=void 0,n="YES",i="NO"){I(null,e,[i,n],a).then((({idx:e})=>{e?t(e):a&&a()})).catch((()=>{a&&a()}))}function G(e,t=["NO","YES"],a="cancelled"){return new Promise(((n,i)=>{I(null,e,t,(()=>i(new Error(a)))).then((({idx:e})=>{e?n(e):i(new Error(a))}))}))}export{l as Button,o as ButtonNew,h as CardieWidget,r as Empty,i as Icon,w as InputWidget,y as NoticeWidget,L as OverflowMenu,z as OverflowUtils,R as RangeWidget,s as Selector,A as Separator,b as SwitchWidget,V as TitleBarWidget,E as clearModal,W as confirm,G as confirmPromise,x as defineWidget,M as popupMessage,J as startApp};
2
2
  //# sourceMappingURL=libui.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"libui.esm.js","sources":["../src/widgets/Basic.js","../src/widgets/CardieWidget.js","../src/widgets/InputWidget.js","../src/widgets/NoticeWidget.js","../src/util/widgets.utils.js","../src/widgets/SwitchWidget.js","../src/util/widgets.js","../src/util/widgets.core.js","../src/util/util.clone.js","../src/widgets/OverflowUtils.js","../src/widgets/Separator.js","../src/util/mithril-range.js","../src/widgets/RangeWidget.js","../src/app/app.js"],"sourcesContent":["import m from \"mithril\";\n\nexport function defineWidget(view, oninit, oncreate, onremove, onupdate) {\n return {\n ...view && {view},\n ...oninit && {oninit},\n ...oncreate && {oncreate},\n ...onupdate && {onupdate},\n ...onremove && {onremove}\n }\n}\n\n\n// ------------------------------------------------------------------------\n\nfunction getAttrs(attrs, parentAttrs, panelInitialParams) {\n const data = ((typeof attrs === \"function\") ? attrs(parentAttrs) : attrs) || {};\n if (panelInitialParams) data.initialParams = panelInitialParams;\n return data;\n}\n\nconst\n\n isCurrent = ({currentIndex}, index) => currentIndex === index,\n\n Icon = {\n view: ({attrs}) => m(\n `i.icon.${attrs.pack || \"fas\"}.fa-${attrs.icon || \"cog\"}${attrs.size ? \".fa-\" + attrs.size + \"x\" : \"\"}`,\n {\n title: attrs.icontitle || undefined,\n role: \"presentation\",\n onclick: attrs.onclick || null, ...attrs.iconClass && {class: attrs.iconClass}\n }\n )\n },\n\n Button = {\n view: ({attrs, state, children}) => m((attrs.download || attrs.link) ? \"a.button\" : \"button\", {\n ...attrs.link && {href: attrs.link},\n ...attrs.download && {download: attrs.download},\n ...attrs.target && {target: attrs.target},\n \"aria-label\": attrs[\"aria-label\"] || attrs.title || attrs.text,\n title: attrs.title || attrs[\"aria-label\"],\n class: (attrs.class || \"\") + (state.busy ? \" busy\" : \"\"),\n ...state.error && {\"data-error\": state.error.message},\n ...attrs.onclick && {\n onclick: (event) => {\n clearTimeout(state.debounce);\n state.debounce = setTimeout(() => {\n const result = attrs.onclick(event, attrs);\n if (result && result.then && result.catch) {\n state.busy = true;\n m.redraw();\n result\n .then(() => {\n state.busy = false;\n m.redraw();\n })\n .catch((error) => {\n state.busy = false;\n state.error = error;\n m.redraw();\n });\n }\n }, 25);\n }\n }\n }, [\n ...(attrs.icon && !attrs.right) ? [m(Icon, attrs)] : [],\n ...attrs.text ? [m(\"span.pad-1.pad-h\", {class: attrs.textClass || null}, attrs.text)] : [],\n ...(attrs.icon && attrs.right) ? [m(Icon, attrs)] : [],\n ...children\n ])\n },\n\n ButtonNew = {\n view: ({attrs, state, children}) => m((attrs.download || attrs.link) ? \"a.button\" : \"button\", {\n ...attrs.link && {href: attrs.link},\n ...attrs.download && {rel: \"nofollow\", download: attrs.download},\n ...attrs.target && {target: attrs.target},\n \"aria-label\": attrs[\"aria-label\"] || attrs.title || attrs.text,\n title: attrs.title || attrs[\"aria-label\"],\n class: (attrs.class || \"\") + (state.busy ? \" busy\" : \"\"),\n ...state.error && {\"data-error\": state.error.message},\n ...attrs.onClick && {\n onclick: (event) => {\n clearTimeout(state.debounce);\n state.debounce = setTimeout(() => {\n const result = attrs.onClick(event, attrs);\n if (result && result.then && result.catch) {\n state.busy = true;\n m.redraw();\n result\n .then(() => {\n state.busy = false;\n m.redraw();\n })\n .catch((error) => {\n state.busy = false;\n state.error = error;\n m.redraw();\n });\n }\n }, 25);\n }\n }\n }, [\n ...(attrs.icon && !attrs.right) ? [m(Icon, attrs)] : [],\n ...attrs.text ? [m(\"span.pad-1.pad-h\", {class: attrs.textClass || null}, attrs.text)] : [],\n ...(attrs.icon && attrs.right) ? [m(Icon, attrs)] : [],\n ...children\n ])\n },\n\n Empty = {\n\n view: ({attrs, children}) => m(\n \".flexcol.flexcenter.al-center.grows.emptywidget\",\n {\n ...attrs.class && {class: attrs.class},\n ...attrs.key && {key: attrs.key},\n role: \"presentation\"\n },\n [\n m(Icon, attrs),\n ...attrs.message\n ? [\n m(\".marg-2.marg-v\",\n {\n role: \"status\",\n class: attrs.size > 4 ? \"font-150\" : \"font-100\",\n \"aria-label\": attrs.message\n },\n attrs.message.split(\"\\n\")\n .map((str, idx, all) => all.length === 1 ? str : m(\"p.msg\" + idx, str))\n )\n ]\n : [],\n ...children\n ? [m(\".flexcol.additional\", children)]\n : []\n ]\n )\n },\n\n setItem = (attrs, state, index, params) => {\n\n\n const\n lastIndex = state.currentIndex,\n lastParams = state.currentParams;\n\n if (index === -1) {\n Object.assign(state, {\n current: null,\n currentIndex: -1,\n currentParams: []\n });\n } else {\n Object.assign(state, {\n current: attrs.items[index] || null,\n currentIndex: state.current ? index : -1,\n currentParams: params || []\n });\n }\n\n if (attrs.onSelected) attrs.onSelected(state.current, state.currentParams, state.currentIndex !== lastIndex, lastParams);\n\n m.redraw();\n },\n\n Selector = {\n\n oninit: ({attrs, state}) => {\n\n state = attrs.state || state;\n state.setItem = (index, ...params) => setItem(attrs, attrs.state || state, index, params);\n\n const\n hasState = !isNaN(state.currentIndex),\n selected = hasState ? state.currentIndex : attrs.selected,\n currentIndex = (attrs.items && attrs.items.length)\n ? (selected !== undefined && attrs.items[selected])\n ? selected\n : attrs.noinitial ? -1 : 0\n : -1,\n current = currentIndex !== -1 ? attrs.items[currentIndex] : null;\n\n Object.assign(state, {currentIndex, current});\n\n },\n\n onupdate: ({attrs, state}) => {\n (attrs.state || state).setItem = (index, ...params) => setItem(attrs, attrs.state || state, index, params);\n },\n\n view: ({attrs, state}) => {\n\n state = attrs.state || state;\n const {current} = state;\n\n return m(\n (attrs.element || \"widget\") + \".selector\" + (attrs.horizontal ? \".flexrow\" : \".flexcol\") + (attrs.className ? \".\" + attrs.className : \"\"),\n {\n ...attrs.key && {key: attrs.key},\n class: (state.current ? \"hascurrent\" : \"empty\") + (attrs.class ? \" \" + attrs.class : \"\")\n },\n [\n ...((!attrs.hideonly || (attrs.items.length > 1)) && (!attrs.hidesel))\n ? [\n /** navigation bar */\n m(\n \"nav.toolbar.fullwidth\" + (attrs.horizontal ? \".flexcol\" : \".flexrow\"),\n {\n \"aria-label\": attrs[\"aria-label\"] || attrs.title || \"selector\",\n class: attrs.toolbarClass\n },\n attrs.items.map((item, index) => m(Button, {\n class: (item.class ? item.class + \" \" : \"\") + (isCurrent(state, index) ? \"accent\" : \"nel\"),\n icon: item.icon || null,\n ...item.title && {title: item.title},\n ...item[\"aria-label\"] && {\"aria-label\": item[\"aria-label\"]},\n ...item.text && {text: item.text},\n onclick: () => {\n const t = Date.now();\n if (t - state.clickts < 200) return;\n state.clickts = Date.now();\n state.bodyHidden = false;\n state.setItem(index);\n }\n }))\n )]\n : [],\n ...current\n ? [\n ...(attrs.toggle && !state.bodyHidden)\n ? [\n m(ButtonNew, {\n class: \"selectornotch \" + (state.bodyHidden ? \"bodyhidden\" : \"bodyshown\"),\n icon: state.bodyHidden ? \"caret-up\" : \"caret-down\",\n title: state.bodyHidden ? \"expand panel\" : \"contract panel\",\n onClick: () => {\n state.bodyHidden = !state.bodyHidden;\n m.redraw();\n }\n })\n ] : [],\n ...(!attrs.toggle || !state.bodyHidden)\n ? [\n /** body */\n m(\".grows.flexcol.ohidden\", {class: attrs.bodyClass, role: \"presentation\"}, [\n m(\n current.widget,\n getAttrs(current.attrs, attrs, state.currentParams),\n current.children\n )\n ])\n ]\n : [],\n ...attrs.closeButton\n ? [\n m(Button, {\n class: \"closebutton absolute toright\",\n icon: \"times\",\n onclick: () => {\n state.setItem(-1);\n },\n \"aria-label\": \"close item\"\n })] : []\n ]\n : m(Empty, attrs)\n ]\n );\n }\n };\n\nconst ICONS = {\n info: \"info\",\n error: \"exclamation-triangle\",\n success: \"check\"\n};\n\nfunction Notifications(TOAST_SHORT = 5000, altContainer) {\n\n let\n mNotifications = [],\n mTimer;\n\n function render(container, n) {\n m.render(\n container, m(\n Button, {\n class: \"notification \" + n.type,\n text: n.text,\n icon: ICONS[n.type] || \"info\",\n size: 1,\n role: \"status\",\n // eslint-disable-next-line no-use-before-define\n onclick: next\n }\n )\n );\n }\n\n function next() {\n\n const\n container = altContainer || document.getElementById(\"notification-container\");\n\n if (mNotifications.length) {\n const n = mNotifications.splice(0, 1)[0];\n render(container, n);\n clearTimeout(mTimer);\n mTimer = setTimeout(next, n.timer || TOAST_SHORT);\n } else {\n m.render(container, \"\");\n mTimer = null;\n }\n }\n\n return {\n add: (text, type) => {\n mNotifications.push({\n text,\n type\n });\n if (!mTimer) next();\n },\n clear: () => {\n mNotifications = [];\n next();\n }\n\n };\n}\n\nconst Notification = new Notifications();\n\nexport {\n Empty,\n Icon,\n Selector,\n Button,\n ButtonNew,\n Notification\n}\n","import m from \"mithril\";\nimport {ButtonNew, defineWidget} from \"./Basic\";\n\nconst\n globalState = {},\n CARDIE_CLOSED = 0;\n\nfunction setCardStatus(cardid, expanded = CARDIE_CLOSED) {\n if (cardid) {\n const [uniq, subname] = cardid.split(\"-\");\n if (expanded && uniq && subname) {\n Object.keys(globalState)\n .forEach((key) => {\n if (key.startsWith(uniq + \"-\")) {\n globalState[key] = CARDIE_CLOSED;\n }\n });\n }\n globalState[cardid] = expanded;\n }\n}\n\nconst CardieWidget = defineWidget(\n ({attrs, state, children}) => {\n\n const\n\n {\n nofold,\n cardid,\n size,\n title,\n action,\n collapsedAction,\n collapsedClass,\n expandedClass,\n cols,\n element,\n busy,\n expandedView,\n collapsedView,\n titleWidget: titWidget,\n titleAttrs,\n titleClass,\n bodyClass,\n titleExpanded,\n titleCollapsed\n } = attrs,\n\n collapsed = nofold\n ? false\n : cardid\n ? !globalState[cardid]\n : !!state.collapsed,\n\n items = (!collapsed)\n ? (\n expandedView\n ? expandedView(attrs, state)\n : (children || [])\n )\n : collapsedView ? collapsedView(attrs, state) : [],\n\n titleWidget = titWidget\n ? m(titWidget, titleAttrs || {})\n : title ? m(\"span.ellipsis.ohidden.unfold\", title) : undefined,\n\n buttonClass = busy\n ? \"fa-sync\"\n : `fa-caret-down ${collapsed ? \"iscollapsed\" : \"isexpanded\"}`;\n\n return items.length || !attrs.skipEmpty\n ? m(\n (element || \"ul\"),\n {\n class: \"cardie ohidden noshrink \"\n + (cols ? \"flexcol \" : \"flexrow wrap \")\n + (attrs.class ? \" \" + attrs.class : \"\")\n + (nofold\n ? \" expanded\"\n : ` ${collapsed ? \"collapsed \" + (collapsedClass || \"\") : \"expanded \" + (expandedClass || \"\")}`)\n + (size ? \" marg-\" + size : \" marg-2\")\n + (titWidget ? \" withwidget\" : \"\")\n + (busy ? \" busycard\" : \"\")\n },\n [\n\n ...titleWidget\n ? [\n m(\n \".title.grows.fabf.flexrow.pointer.unfold\",\n nofold\n ? {\n class: titleClass || \"pad-2\"\n }\n : {\n class: `${titleClass || \"pad-2\"} ${buttonClass || \"\"}`,\n\n title: collapsed\n ? (titleCollapsed || \"Click to expand the options\")\n : (titleExpanded || titleCollapsed || \"Click to collapse the options\"),\n\n onclick: (e) => {\n\n if (e.target.classList.contains(\"unfold\")) {\n if (e.shiftKey && attrs.onShiftOpen) {\n attrs.onShiftOpen();\n } else if (attrs.cardid) {\n setCardStatus(cardid, collapsed); // !state\n } else {\n state.collapsed = !state.collapsed;\n }\n\n m.redraw();\n }\n }\n },\n action && (nofold || !collapsed)\n ? [\n m(ButtonNew, action),\n titleWidget\n ]\n : collapsedAction && collapsed\n ? [\n m(ButtonNew, collapsedAction),\n titleWidget\n ]\n : titleWidget\n )\n ]\n : [],\n\n ...items.length\n ? [\n m(\".flexbreak\"),\n m(\n \".cardiebody.fadein-filter.grows\",\n {\n class: (cols ? \"flexcol \" : \"flexrow wrap\") + \" \" + (bodyClass || \"\")\n },\n ...items\n )\n ] : [],\n\n ...(attrs.alwaysView\n ? [attrs.alwaysView({attrs, state})]\n : [])\n\n ]\n ) : [];\n },\n ({attrs, state}) => {\n if (!attrs.cardid) {\n state.collapsed = attrs.nofold\n ? false\n : attrs.cardid\n ? !globalState[attrs.cardid]\n : !!attrs.collapsed;\n }\n },\n undefined,\n undefined,\n undefined,\n {setCardStatus}\n);\n\nexport default CardieWidget;","import m from \"mithril\";\nimport {ButtonNew} from \"./Basic\";\n\n/* eslint-disable no-prototype-builtins,no-nested-ternary */\n/* global m, Hammer */\n\nconst\n\n getInput = (attrs, value, parse = false) => {\n if (parse || attrs.type === \"number\") {\n const val = attrs.float ? Number.parseFloat(value) : Number.parseInt(value, 10);\n return Number.isNaN(val) ? undefined : val;\n }\n return value;\n },\n getValue = (attrs, state, parse) => {\n const lastVal = state.hasOwnProperty(\"value\") ? state.value : attrs.value;\n return getInput(attrs, lastVal, parse);\n },\n /*\n hammer = new Hammer.Manager(dom, { touchAction: \"pan-y\" }),\n panner = new Hammer.Pan({ direction: Hammer.DIRECTION_VERTICAL }),\n singleTap = listenTap && new Hammer.Tap();\n\n hammer.add(listenTap ? [panner, singleTap] : [panner]);\n hammer.on(\"panstart\", (e) => {\n\n */\n\n StaticFieldWidget = {\n view: (vnode) => {\n const {attrs, state} = vnode;\n // este vnode NO es el mismo que el del hammer, pero su estado SI !\n state.attrs = attrs; // guardamos una copia de los ultimos attrs en el estado\n\n return m(\n \".input-static.w-100.ellipsis\",\n {\n class: (attrs.onDrag ? \"withdrag \" : \"\") + (attrs.staticClass || \"grows\"),\n ...attrs.staticTitle && {title: attrs.staticTitle},\n ...attrs.onDrag || {onclick: attrs.onClick},\n oncreate: ({dom, state}) => {\n\n if (attrs.onDrag && !attrs.readonly) {\n\n const\n hammer = state.hammer = new Hammer.Manager(dom, {touchAction: \"pan-y\"}),\n panner = new Hammer.Pan({direction: Hammer.DIRECTION_VERTICAL}),\n singleTap = new Hammer.Tap();\n\n hammer.add([panner, singleTap]);\n hammer.on(\"tap\", () => vnode.state.attrs.onClick());\n hammer.on(\"panup\", (e) => vnode.state.attrs.onDrag(-1, e.srcEvent));\n hammer.on(\"pandown\", (e) => vnode.state.attrs.onDrag(1, e.srcEvent));\n hammer.on(\"panend pancancel\", (e) => vnode.state.attrs.onDrag(0, e.srcEvent));\n }\n if (attrs.focus) {\n dom.focus();\n }\n },\n onremove: ({state}) => {\n state.hammer && state.hammer.destroy();\n }\n },\n attrs.value\n );\n }\n },\n InputWidget = {\n view: ({attrs, state}) => {\n const reset = (redraw) => {\n // if (state.value !== undefined && state.showInput) delete state.showInput;\n if (state.value && state.showInput) delete state.showInput;\n delete state.value;\n if (redraw) m.redraw();\n };\n return m(\n \".textfield.flexcol.relative\",\n {\n class: (attrs.label ? \"witharia\" : \"\") + (attrs.containerClass ? \" \" + attrs.containerClass : \"\"),\n ...attrs.label && {\"aria-label\": attrs.label}\n },\n [\n (attrs.staticField && (attrs.readonly || !state.showInput))\n ? m(StaticFieldWidget, {\n readonly: attrs.readonly,\n staticClass: (state.dragging ? \"accent \" : \"\") + (attrs.staticClass || \"\"),\n staticTitle: attrs.staticTitle || attrs.draginc && \"Click then drag up and down to modify value, or just click to enter a custom value\",\n value: attrs.displayTitle || getValue(attrs, state),\n focus: attrs.focus,\n ...attrs.draginc && !attrs.readonly && {\n onDrag: (direction, event) => {\n if (direction) {\n state.dragging = true;\n let value = getValue(attrs, state, true);\n if (Number.isNaN(value) || value === undefined) return;\n value += direction * attrs.draginc;\n if (attrs.max !== undefined && value > attrs.max) value = attrs.max;\n if (attrs.min !== undefined && value < attrs.min) value = attrs.min;\n state.value = attrs.type === \"number\" ? value : String(value);\n attrs.onchange(state.value, event);\n } else {\n delete state.dragging;\n delete state.value;\n m.redraw();\n }\n }\n },\n ...attrs.readonly || {\n onClick: () => {\n state.showInput = true;\n state.value = attrs.value;\n m.redraw();\n }\n }\n })\n\n : ((state.multi || attrs.alwaysmulti) && (!attrs.type || attrs.type === \"text\"))\n ? m(\"textarea.w-100\", {\n class: attrs.class,\n value: getValue(attrs, state),\n ...attrs.title && {title: attrs.title},\n placeholder: attrs.hint || \"\",\n oninput: (event) => {\n state.value = getInput(attrs, event.target.value);\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n if (attrs.onchange) {\n (attrs.oninput || attrs.onchange)(state.value, event, true);\n }\n },\n onchange: (event) => {\n if (attrs.onchange) {\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n const value = getInput(attrs, event.target.value);\n reset(false);\n attrs.onchange(value, event, true);\n }\n },\n onblur: () => {\n if (state.showInput) {\n reset(true);\n }\n },\n onkeyup: (event) => {\n if (event.key === \"Escape\" && state.showInput) {\n reset(false);\n }\n }\n })\n : m(\"input.w-100\", {\n ...attrs.id && {id: attrs.id},\n type: attrs.type || \"text\",\n ...attrs.max !== undefined && {max: attrs.max},\n ...attrs.min !== undefined && {min: attrs.min},\n ...attrs.step > 0 && {step: attrs.step},\n ...attrs.maxlength && {maxlength: attrs.maxlength},\n class: (attrs.class || \"\") + (attrs.validator ? state.isValid ? \" bg-ok\" : \" bg-error\" : \"\"),\n ...attrs.title && {title: attrs.title},\n value: getValue(attrs, state),\n placeholder: attrs.hint || \"\",\n oninput: (event) => {\n state.value = getInput(attrs, event.target.value);\n event.fromoninput = true;\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n if (attrs.onchange) {\n (attrs.oninput || attrs.onchange)(state.value, event);\n }\n },\n onchange: (event) => {\n if (attrs.onchange) {\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n event.enterPressed = state.enterPressed;\n delete state.enterPressed;\n attrs.onchange(getInput(attrs, event.target.value), event);\n if (attrs.staticField) {\n reset(true);\n } else {\n delete state.value;\n }\n }\n },\n onblur: () => {\n if (state.showInput) {\n reset(true);\n }\n },\n onkeyup: (event) => {\n if (state.showInput) {\n if (event.key === \"Escape\") {\n reset(true);\n } else if (event.key === \"Enter\") {\n if (state.value === attrs.value || !state.value) {\n attrs.onchange(attrs.value, event);\n reset(true);\n }\n }\n }\n },\n onkeypress: (event) => {\n if (!state.showInput && event.key === \"Enter\") {\n attrs.onenter && attrs.onenter(event.target.value, event);\n }\n }\n }),\n\n m(\".span.actions.absolute.right.bottom\", [\n ...(attrs.multi && !attrs.alwaysmulti && (!attrs.type || attrs.type === \"text\"))\n ? [\n m(ButtonNew, {\n icon: state.multi ? \"angle-double-up\" : \"angle-double-down\",\n class: \"pad-2 transp\",\n onClick: () => {\n state.multi = !state.multi;\n m.redraw();\n }\n })\n ]\n : [],\n ...attrs.actions ? attrs.actions.map((action) => m(ButtonNew, {\n ...action,\n class: \"transp pad-2\"\n })) : [],\n ...attrs.action\n ? [\n m(ButtonNew, {...attrs.action, class: \"transp pad-2\"})\n ] : []\n ])\n ]);\n },\n oninit: ({attrs, state}) => {\n if (attrs.staticField && attrs.draginc) {\n const value = getValue(attrs, state, true);\n state.showInput = (Number.isNaN(value) || value === undefined || value === null);\n }\n }\n };\n\nexport default InputWidget;\n","import m from \"mithril\";\nimport {Icon, defineWidget} from \"./Basic\";\n\nconst\n NoticeWidget = defineWidget(\n ({attrs, children}) => (\n children.length\n ? m(\n \".notice.cardie.flexcol.pad-3\",\n {class: attrs.class || \"marg-2 font-75\"},\n m(\n \".flexrow\",\n [\n ...attrs.icon ? [m(Icon, attrs)] : [],\n m(\".pad-2.pad-h\", attrs.text)\n ]\n ),\n ...children\n )\n : m(\n \".notice.cardie.flexrow.pad-3\",\n {class: attrs.class || \"marg-2 font-75\", onclick: attrs.onClick},\n [\n ...attrs.icon ? [m(Icon, attrs)] : [],\n m(\".pad-2.pad-h\", attrs.text)\n ]\n )\n )\n );\n\nexport default NoticeWidget;\n","export default function defineWidget (view, oninit, oncreate, onremove, onupdate) {\n return {\n ...view && {view},\n ...oninit && {oninit},\n ...oncreate && {oncreate},\n ...onupdate && {onupdate},\n ...onremove && {onremove}\n }\n}\n\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\nimport {Icon} from \"./Basic\";\n\nconst\n SwitchWidget = defineWidget(\n ({attrs, state}) => m((attrs.unit || \"\") + \".flexrow\" + (attrs.subline ? \" withsubline\" : \"\"),\n {\n class: attrs.class,\n text: attrs.text,\n title: attrs.title || null,\n onclick: () => {\n state.checked = !state.checked;\n if (attrs.onchange) {\n attrs.onchange(state.checked);\n }\n m.redraw();\n }\n },\n attrs.right\n ? [\n ...attrs.text ? [m(\"span.grows.caption\", attrs.subline ? {\"data-subline\": attrs.subline} : {}, attrs.text)] : [],\n m(Icon, {iconClass: \"pad-2 pad-h\", icon: state.checked ? \"toggle-on\" : \"toggle-off\"})\n ]\n : [\n m(Icon, {iconClass: \"pad-2 pad-h\", icon: state.checked ? \"toggle-on\" : \"toggle-off\"}),\n ...attrs.text ? [m(\"span.grows.caption\", attrs.subline ? {\"data-subline\": attrs.subline} : {}, attrs.text)] : []\n ]),\n ({attrs, state}) => {\n state.checked = state.original = attrs.checked;\n },\n null,\n null,\n ({attrs, state}) => {\n if (attrs.checked !== state.original) {\n state.checked = state.original = attrs.checked;\n m.redraw();\n }\n }\n );\n\nexport default SwitchWidget;","import m from \"mithril\";\n\nlet\n\tmCurrentCancelable;\n\nfunction runCancelable(container) {\n\tif (typeof mCurrentCancelable === \"function\") {\n\t\tmCurrentCancelable();\n\t\tmCurrentCancelable = undefined;\n\t}\n\tcontainer.style.display = \"none\";\n\tdelete popupMessage.redraw;\n}\n\n// There are ways of doing this inside m.route but it is probably\n// cleaner and faster when kept outside of the main auto\n// rendering system\n\nfunction popupMessage(message, cancelable = false, contentClass = \".modal-content\") {\n\n\tconst container = document.getElementById(\"modal-container\");\n\tcontainer.classList.toggle(\"iscustom\", contentClass !== \".modal-content\");\n\n\tif (cancelable) {\n\n\t\tmCurrentCancelable = cancelable;\n\n\t\tcontainer.onclick = (event) => {\n\t\t\tif (event.target.id === \"modal-container\") {\n\t\t\t\trunCancelable(container);\n\t\t\t}\n\t\t};\n\t}\n\n\tif (!message) {\n\t\tdelete popupMessage.redraw;\n\t\tif (message === null)\n\t\t\tcontainer.style.display = \"none\";\n\t\telse\n\t\t\trunCancelable(container);\n\n\t\treturn;\n\t}\n\n\tcontainer.style.display = \"flex\";\n\n\tpopupMessage.redraw = () => {\n\t\tm.render(\n\t\t\tcontainer,\n\t\t\tm(contentClass, {\n\t\t\t\trole: \"alertdialog\",\n\t\t\t\t\"aria-labelledby\": \"modaltitle\",\n\t\t\t\t\"aria-modal\": true\n\t\t\t}, [\n\t\t\t\ttypeof message === \"function\" ? message() : message\n\t\t\t])\n\t\t);\n\t};\n\n\tpopupMessage.redraw();\n}\n\nfunction clearModal() {\n\tconst container = document.getElementById(\"modal-container\");\n\tif (container.style.display !== \"none\") {\n\t\trunCancelable(container);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport { popupMessage, clearModal };\n","/* eslint-disable no-nested-ternary */\n/**\n * Basic Mithril Widget functions\n * Provides some utilities and basic UI functions like an Alert or a Confirmation dialog\n *\n * @author Rodolfo Lopez Pintor, 2020 <rlp@nebular.tv>\n * @module apps.widgets.basic\n *\n */\nimport m from \"mithril\";\nimport * as widget from \"./widgets\";\nimport * as Tokenizer from \"./util.tokenizer\";\nimport {Button, Empty} from \"../widgets/Basic\";\n\n/**\n *\n * Computes a Class String\n *\n * @param {string} initials INitial CSS Classes\n * @param {Object<string, boolean>} clases New classes dictionary\n * @return {string} The CSS Class expression like .class1.class2.class3\n * @public\n * @static\n */\n\nconst packClassString = (initials, clases) => {\n const finals = [];\n if (clases) for (const cla of Object.keys(clases)) if (clases[cla]) finals.push(\".\" + cla);\n return (initials || \"\") + finals.join(\"\");\n};\n\n\nconst packClass = (initials, clases) => {\n const finals = initials ? [initials] : [];\n if (clases) for (const cla of Object.keys(clases)) if (clases[cla]) finals.push(cla);\n return finals.join(\" \");\n};\n\n/**\n * Shows a modal confirm dialog\n * @param {string} title The dialog title\n * @param {string} message The dialog message\n * @param {Array} buttons Buttons to display\n * @param {Object=} options noCancel: dialog is uncanellable\n * @public\n * @static\n */\n\nfunction Confirm(title, message,\n buttons = [\"CANCEL\", \"OK\"], options = {}\n) {\n widget.popupMessage(\n m(\n {\n view: () => [\n ...title ? [m(\"h3\", title)] : [],\n ...message ? [m(\"h4\", message)] : [],\n m(\".container\",\n buttons.map(\n option => m(\n \"button\",\n {\n onclick: () => {\n document.getElementById(\"modal-container\").style.display = \"none\";\n if (option.onclick) option.onclick(option.caption);\n }\n },\n option.caption || \"OK\"\n )\n ))\n ]\n },\n {}\n ),\n options.onCancel || !options.noCancel\n );\n}\n\nfunction ConfirmPromise(title, message, actions, isModal = false) {\n\n let onCancel = undefined;\n\n if (typeof isModal === \"function\") {\n onCancel = isModal;\n isModal = false;\n }\n\n return new Promise((resolve) => {\n\n const opts = actions.map((name, idx) => ({\n caption: name,\n onclick: () => resolve({\n idx,\n name\n })\n }));\n\n Confirm(title, message, opts, {\n onCancel,\n noCancel: isModal\n });\n });\n}\n\n/**\n * Shows An Alert Modal Dialog\n * @param {string} title Dialog Title\n * @param {string} message Dialog Message\n * @param {string?} caption Button caption\n * @param {function?} onclick On press handler\n * @public\n * @static\n */\n\nfunction Alert(title, message, caption, onclick) {\n return Confirm(title, message, [{caption, onclick}]);\n}\n\n\nfunction OverflowMenu(domItem, item, actions, options) {\n\n return new Promise((resolve) => {\n\n options = options || {};\n\n function closeResolve(value) {\n widget.popupMessage(null);\n try {\n resolve(value);\n } catch (e) {\n //\n }\n }\n\n const\n classes = packClassString(\".popup.flexcol\", {\n \".favlist\": options.favlist,\n \".isfav\": domItem && domItem.classList.contains(\"isfav\"),\n \".isplay\": domItem && domItem.classList.contains(\"selected\")\n });\n\n widget.popupMessage(\n m({\n view: () => m(\n classes,\n {\n onclick: (event) => {\n\n if (event.target.nodeName === \"INPUT\") {\n return;\n }\n\n const\n action = event.target.getAttribute(\"data-action\");\n\n if (action) {\n closeResolve({\n domItem,\n item,\n action\n });\n } else {\n widget.popupMessage(null);\n }\n }\n },\n [\n ...item.title ? [m(\"h3\", {id: \"modaltitle\"}, item.title)] : [],\n ...actions.map(action => (action.type === \"text\"\n ? m(\n \"input.action\",\n {\n value: action.value || \"\",\n type: \"text\",\n placeholder: action.hint || \"\",\n oncreate: ({dom}) => dom.focus(),\n onkeyup: (ev) => {\n if (ev.keyCode === 27) {\n closeResolve({domItem, item, action});\n }\n },\n onchange: (ev) => {\n ev.target.blur();\n closeResolve({\n domItem,\n item,\n action,\n value: ev.target.value\n });\n }\n }\n )\n : m(\n Button,\n {\n ...action,\n onclick: () => closeResolve({\n domItem,\n item,\n action\n })\n },\n action.caption\n )))\n ]\n )\n }),\n true\n );\n });\n}\n\n/**\n * Creates an HTML UL/LI structure with the object properties\n * @param {Object} object An object to render\n * @param {RenderOptions?} options\n * @param {Object[]} children additional vnodes\n * @param {string} recurse parent key\n * @param isArrayChild\n * @return {m} The rendered view\n * @public\n * @static\n */\n\nfunction RenderObject(object, options, children, recurse, isArrayChild = false) {\n\n // noinspection JSValidateTypes\n options = options || {};\n const {arrayClass = \"isarray\", arrayChildClass = \"ischildren\", objectClass = \"isobject\"} = options;\n\n return m(\n \"ul\",\n {\n ...(options.attrs || {}),\n class: options.class\n },\n object\n ? [\n ...(options.keys || Object.keys(object))\n .map((key) => {\n\n const\n value = object[key] || null,\n isObject = value !== null && (typeof value === \"object\"),\n isArray = isObject && value.length,\n fullkey = (recurse ? recurse + \"_\" : \"\") + key;\n\n return m(\n \"li.field_\" + (options.start || \"\") + fullkey,\n {\n class: (isArray ? arrayClass : isObject ? (objectClass + \" \") : \"\") + (isArrayChild ? arrayChildClass : \"\"),\n \"data-title\": options.titles ? options.titles[key] || key : key,\n ...(options.itemAttrs || {})\n },\n // eslint-disable-next-line\n isObject\n ? [\n m(\".subvalues\",\n RenderObject(\n value,\n {\n ...options,\n keys: null\n },\n null,\n (recurse ? recurse + \"_\" : \"\") + key,\n isArray\n ))]\n : (\n (options.renderer && options.renderer[fullkey])\n ? options.renderer[fullkey](value)\n : m(\"span.value\", object[key])\n )\n );\n }),\n ...children || []\n ]\n : [\n m(\".empty\", {})\n ]\n );\n\n}\n\n\nconst\n JSONWidget = {\n view:\n ({attrs, children}) => {\n let object;\n try {\n object = attrs.pointer\n ? Tokenizer.getPointedData(attrs.object, attrs.pointer)\n : attrs.object;\n } catch (e) {\n return m(Empty, {message: e.message, ...attrs});\n }\n\n return object\n ? RenderObject(object, attrs, children)\n : m(Empty, attrs);\n }\n };\n\n// noinspection JSUnusedGlobalSymbols\nexport {\n Alert,\n Confirm,\n ConfirmPromise,\n RenderObject,\n OverflowMenu,\n JSONWidget,\n packClass\n}\n","const\n ENABLE_SCLONE = true, // atm SLOWER than JSON\n softClone = (o) => JSON.parse(JSON.stringify(o)),\n clone = window.structuredClone && ENABLE_SCLONE\n ? window.structuredClone\n : softClone;\n\nexport default clone;\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\nimport * as widget from \"../util/widgets\";\nimport {Icon, Notification, ButtonNew} from \"./Basic\"\nimport {OverflowMenu} from \"../util/widgets.core\";\nimport SwitchWidget from \"../widgets/SwitchWidget\";\nimport InputWidget from \"../widgets/InputWidget\";\nimport Notice from \"../widgets/NoticeWidget\";\nimport clone from \"../util/util.clone\"\n\nfunction choose(items, config = {\n icon: \"circle\", onSelect: () => {\n }\n}) {\n\n const\n {icon, title, field, onSelect, parser = (v) => v} = config,\n options = items.map((item, index) => ({\n icon: field && item.icon || icon,\n // WARNING !!!!!\n caption: parser(field ? item[field] : item, item),\n // caption: idField ? item[idField] : item,\n onClick: (e) => onSelect(item, e, index)\n }));\n\n if (Array.isArray(items) && !items.length) {\n Notification.add(\"No items available\");\n } else {\n OverflowMenu(\n document.body,\n {title},\n options\n )\n .then(({action}) => action.onClick());\n }\n}\n\nfunction promptOptions(items, onchange, options = {}) {\n\n const\n {title, field, icon, textNew, textHint, resolve} = options,\n dialogOptions = Array.isArray(items)\n ? items.map((item) => ({\n icon,\n // WARNING !!!!!\n caption: field ? item[field] : item,\n // caption: idField ? item[idField] : item,\n onClick: (e) => onchange(item, e)\n }))\n : Object.keys(items)\n .map((key) => ({\n icon: items[key].icon || icon,\n caption: items[key].caption || key,\n onClick: (e) => onchange(\n resolve && items[key].value !== undefined\n ? items[key].value\n : items[key],\n e)\n }));\n\n if (Array.isArray(items) && !items.length) {\n Notification.add(\"No items available\");\n } else {\n OverflowMenu(\n document.body,\n {title},\n [\n ...textNew && !field\n ? [\n {\n icon: \"plus\",\n caption: textNew,\n onClick: () => promptName(\n textNew,\n \"\",\n textHint,\n (value) => {\n if (value) {\n if (value && value.trim()) {\n onchange(value);\n m.redraw();\n }\n }\n }\n )\n }\n ]\n : [],\n ...dialogOptions\n ]\n )\n .then(({action}) => action.onClick())\n .finally(() => {\n });\n }\n}\n\nfunction promptName(title, value, hint, action, state = {}) {\n setTimeout(() => OverflowMenu(\n document.body,\n {title},\n [\n {\n type: \"text\",\n hint,\n value\n }\n ]\n )\n .then(({value: val}) => {\n state.refreshKey = String(Date.now());\n return action(val);\n }), 100);\n}\n\nconst\n WHAT_DO_UPDATE_LIGHTS = 0, // 0\n WHAT_DO_UPDATE_FACE = 1, // 1\n WHAT_DO_UPDATE_PARTICLES = 2, // 4\n WHAT_DO_UPDATE_SEGMENTATION = 3,\n WHAT_DO_UPDATE_VAL_VPLANE = 4,\n WHAT_DO_UPDATE_VAL_PANO = 5,\n WHAT_DO_UPDATE_VAL_FREE = 6,\n WHAT_DO_UPDATE_VAL_DRONE = 7,\n WHAT_DO_UPDATE_VAL_TRANSITION = 8,\n WHAT_DO_UPDATE_TVFX = 9,\n WHAT_DO_UPDATE_VAL_FOLLOW = 10,\n\n PROPERTIES = [\n [\"Lights and Fog\", null, [\"amblight\", \"l0\", \"l1\", \"l2\", \"l3\", \"fog\"], WHAT_DO_UPDATE_LIGHTS],\n [\"Face and Accessories\", null, [\"facekit\"], WHAT_DO_UPDATE_FACE],\n [\"Particle settings\", null, [\"particles\"], WHAT_DO_UPDATE_PARTICLES],\n [\"Video Segmentation\", \"common\", [\"segcam\", \"mask\", \"green\"], WHAT_DO_UPDATE_SEGMENTATION, true],\n [\"Video Effects\", null, [\"fxconfig\"], WHAT_DO_UPDATE_TVFX],\n [\"Video Plane\", \"val\", [\"xvideo\", \"yvideo\", \"zvideo\", \"rvideo\", \"svideo\", \"video\"], WHAT_DO_UPDATE_VAL_VPLANE],\n [\"Main Camera\", \"val\", [\"ypos\", \"xpos\", \"zoom\", \"yaw\", \"pitch\", \"roll\", \"ai\"], WHAT_DO_UPDATE_VAL_PANO],\n [\"Drone Camera\", \"val\", [\"free\"], WHAT_DO_UPDATE_VAL_FREE],\n [\"Followed Agent\", \"val\", [\"track\"], WHAT_DO_UPDATE_VAL_FOLLOW],\n [\"Game Camera\", \"val\", [\"orbit\", \"track\", \"ocam\"], WHAT_DO_UPDATE_VAL_DRONE, undefined, true],\n [\"Transition Speed\", \"val\", [\"spd\"], WHAT_DO_UPDATE_VAL_TRANSITION]\n ],\n\n TitleBarWidget = defineWidget(\n ({attrs}) => m(\"h2.marg-2.no-marg-bottom\", attrs.title)\n ),\n EntityTemplates = defineWidget(\n ({attrs}) => {\n\n const\n {type = \"changes\", meta, onInput, title, options} = attrs,\n valid = meta.title?.trim().length && meta.description?.trim().length,\n embedded = options && options.embedded;\n\n return m(\".flexcol.grows.ohidden.fadein\", [\n ...attrs.title ? [\n m(TitleBarWidget, {\n title\n })] : [],\n m(\".flexrow.wrap.grows.pad-3.propsgroup.scrolly\", [\n ...attrs.notice ? [\n m(Notice, {\n class: \"marg-1 marg-v withbottommargin font-75 col-12\",\n size: 1,\n icon: \"info-circle\",\n text: attrs.notice\n })\n ] : [],\n m(\n \".witharia.col-12.pad-1.pad-v\",\n {\"aria-label\": type + \" name\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh \" + (valid ? \"valid\" : \"invalid\"),\n value: meta.title,\n maxlength: 64,\n onchange: (newvalue) => {\n meta.title = newvalue;\n m.redraw();\n }\n })\n ),\n ...embedded ? []\n : [\n m(\n \".col-12.witharia.pad-1.pad-v\",\n {\"aria-label\": \"description\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh \" + (meta.description ? \"valid\" : \"invalid\"),\n value: meta.description,\n maxlength: 240,\n multi: true,\n alwaysmulti: true,\n onchange: (newvalue) => {\n meta.description = newvalue;\n m.redraw();\n }\n })\n ),\n m(\n \".col-8.witharia.pad-1.pad-v\",\n {\"aria-label\": \"tags\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.tags,\n maxlength: 128,\n onchange: (newvalue) => {\n meta.tags = newvalue.toLowerCase()\n .split(\" \")\n .join(\",\")\n .split(\",\")\n .filter((tag) => tag.length)\n .join(\",\");\n }\n })\n ),\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"youtube video\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.ytref || \"\",\n hint: \"YouTube ID\",\n maxlength: 16,\n onchange: (newvalue) => {\n newvalue = newvalue.trim();\n if (newvalue) {\n if (newvalue.indexOf(\" \") === -1) {\n meta.ytref = newvalue.trim();\n }\n } else {\n delete meta.ytref;\n }\n }\n })\n )\n ],\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"content attribution\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.author,\n hint: \"author name\",\n maxlength: 128,\n onchange: (newvalue) => {\n meta.author = newvalue;\n }\n })\n ),\n\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"license or author link\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n hint: \"https://...\",\n value: meta.link,\n maxlength: 128,\n onchange: (newvalue) => {\n meta.link = newvalue;\n }\n })\n ),\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"source domain\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.source,\n hint: \"example.com\",\n maxlength: 128,\n onchange: (newvalue) => {\n meta.source = newvalue;\n }\n })\n ),\n\n m(\n \".col-12.al-right.marg-2.marg-v\",\n m(ButtonNew, {\n class: \"noshrink accentbutton unitheightsmall col-4\",\n text: \"save \" + type,\n onClick: () => {\n\n const isValid = meta.title?.trim().length && (embedded || meta.description?.trim().length);\n\n if (isValid) {\n widget.popupMessage(null);\n onInput(meta);\n } else {\n Notification.add(\"Information is incomplete or invalid\");\n }\n }\n })\n )\n ])\n ]);\n }\n ),\n promptEntity = (meta, title, type, options = {}) => new Promise((resolve, reject) => {\n widget.popupMessage(\n m(EntityTemplates, {\n meta,\n type,\n title,\n options,\n onInput: (newMeta) => resolve(newMeta)\n }),\n () => {\n reject(new Error(\"cancelled\"));\n }\n );\n }),\n PresetTemplate = defineWidget(\n ({attrs}) => {\n\n const\n\n {parameters, preset, presetComponents, types, globalData, fetcher} = attrs,\n available = [],\n sourceAvailable = [],\n items = types\n ? PROPERTIES\n : PROPERTIES.filter((cosa) => {\n\n const\n [, primaryTarget, elements, index, globalSource] = cosa,\n target = primaryTarget ? preset[primaryTarget] : preset,\n rootSource = globalSource ? globalData : parameters,\n source = primaryTarget ? rootSource[primaryTarget] : rootSource;\n\n let found = false;\n\n if (elements.length) {\n\n for (const element of elements) {\n if (target && target[element] !== undefined) {\n found = available[index] = true;\n }\n if (source[element] !== undefined) {\n found = sourceAvailable[index] = true;\n }\n }\n return found;\n } else {\n found = true;\n sourceAvailable[index] = !!source;\n available[index] = !!target;\n }\n return found;\n\n });\n\n return m(\n \"ul.flexrow.wrap.userdialog\",\n items.length\n ? items.map((cosa) => {\n\n const\n [title, primaryTarget, elements, cosaIndex, globalSource, fetchLive] = cosa,\n target = types ? undefined : primaryTarget ? preset[primaryTarget] : preset,\n rootSource = globalSource ? globalData : parameters,\n source = types ? undefined : primaryTarget ? rootSource[primaryTarget] : rootSource,\n deleteCurrent = () => {\n if (elements.length) {\n for (const field of elements) {\n delete target[field];\n }\n } else if (elements.length === 0 && primaryTarget) {\n delete preset[primaryTarget];\n }\n attrs.redraw && attrs.redraw();\n },\n updateCurrent = () => {\n if (elements.length) {\n if (primaryTarget && !preset[primaryTarget]) preset[primaryTarget] = {};\n const updatedTarget = primaryTarget ? preset[primaryTarget] : preset;\n for (const field of elements) {\n if (source[field] !== undefined) {\n const finalSource = fetchLive && fetcher ? fetcher(updatedTarget[field], cosaIndex) : source[field];\n updatedTarget[field] = clone(finalSource);\n }\n }\n } else if (elements.length === 0 && primaryTarget) {\n if (source !== undefined) {\n const finalSource = fetchLive && fetcher ? fetcher(source, cosaIndex) : source;\n preset[primaryTarget] = clone(finalSource);\n }\n }\n attrs.redraw && attrs.redraw();\n Notification.add(`updated ${title} from current scene`);\n },\n isAvailable = types || available[cosaIndex],\n isSourceAvailable = sourceAvailable[cosaIndex];\n\n return [\n ...presetComponents ? [\n m(SwitchWidget, {\n title: `Include ${cosa[0]} in snapshots`,\n class: \"grows unitheightsmall\" + (presetComponents[cosaIndex] ? \" accent\" : \"\"),\n checked: !!presetComponents[cosaIndex],\n onchange: (status) => {\n presetComponents[cosaIndex] = !presetComponents[cosaIndex];\n m.redraw();\n attrs.redraw && attrs.redraw();\n }\n }),\n m(\".grows\", {class: isAvailable ? \"avail\" : \"unavail\"}, title)\n ] : [],\n ...!attrs.types ? [\n m(ButtonNew, {\n class: \"col-3\" + (isSourceAvailable ? \"avail\" : \"unavail\"),\n icon: \"sync\", title: `Copy ${title} from current state`,\n onClick: updateCurrent\n }),\n m(ButtonNew, {\n class: \"col-3 \" + (isAvailable ? \"\" : \"disabled text-lo\"),\n icon: \"trash\", title: `Delete ${title} in preset`,\n onClick: () => isAvailable && deleteCurrent()\n })\n ] : [],\n m(\".flexbreak\")\n ];\n\n })\n : m(\"h3\", \"Preset is Empty\")\n );\n }\n ),\n promptPreset = (preset, parameters, options = {}) => new Promise((resolve, reject) => {\n widget.popupMessage(\n () => m(PresetTemplate, {\n ...options,\n preset,\n parameters,\n redraw: () => widget.popupMessage.redraw()\n }),\n () => {\n reject(new Error(\"cancelled\"));\n }\n );\n });\n\nexport {\n promptName,\n promptEntity,\n promptPreset,\n promptOptions,\n choose\n};\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\n\n\nconst\n\n\tSeparator = defineWidget(\n\t\t({ attrs, children }) => m(\n\t\t\t\".separator\",\n\t\t\t{\n\t\t\t\tclass: attrs.class || \"mini\",\n\t\t\t\t...attrs.onClick && { onclick: attrs.onClick }\n\t\t\t},\n\t\t\t[\n\t\t\t\tm(\"span.grows\", attrs.text),\n\t\t\t\t...(children || [])\n\t\t\t]\n\t\t)\n\t);\n\nexport default Separator;\n","import m from \"mithril\";\n\n\n///////////////////////////////////////////////\n// Mithril Range\n// (c) 2017-2018 by Mike Linkovich\n// https://github.com/spacejack/mithril-range\n// License: MIT\n///////////////////////////////////////////////\nconst\n\n NONE = 0,\n MOUSE = 1,\n TOUCH = 2,\n\n // So we aren't triggered by echoed mouse events (some mobile browsers)\n DEVICE_DELAY = 350,\n\n isIOS = !!navigator.userAgent.match(/iPhone|iPad|iPod/i);\n\n// This is some unbelievable stone-age nonsense.\n// Workaround for webkit bug where event.preventDefault\n// within touchmove handler fails to prevent scrolling.\n\nlet\n iOSHackApplied = false;\n\n/** Clamp number to range */\nfunction clamp(n, min, max) {\n return Math.min(Math.max(n, min), max);\n}\n\nfunction applyIOSHack() {\n // Only apply this hack if iOS, haven't yet applied it,\n // and only if a component is actually created\n if (!isIOS || iOSHackApplied) {\n return;\n }\n window.addEventListener(\"touchmove\", function () {\n });\n iOSHackApplied = true;\n}\n\nexport function quantize(val, min, max, step) {\n if (max - min <= 0) {\n return min;\n }\n if (step <= 0) {\n return clamp(val, min, max);\n }\n const\n steps = Math.ceil((max - min) / step),\n v = min + Math.round(steps * (val - min) / (max - min)) * step;\n return clamp(v, min, max);\n}\n\n\n/** Range Component */\nfunction MithrilRange() {\n let\n elHit,\n elBar,\n elBar0,\n elBar1,\n elHandle,\n rcBar,\n device = NONE,\n pressed = false,\n\n useAbsolute = false,\n factorCoarse = 4,\n factorFine = 1,\n absolute,\n lastRead,\n\n // Attrs we need to cache\n min = 0,\n max = 10,\n value = 0,\n startValue = 0,\n step = 1,\n orientation = \"horizontal\",\n onchange,\n ondrag;\n\n // App handlers\n function onPressAbsolute(x, y) {\n startValue = value;\n pressed = absolute = true;\n rcBar = elBar.getBoundingClientRect();\n const val = moveHandleAbsolute(x, y);\n if (val !== value) {\n value = val;\n if (ondrag && ondrag(value) !== false) {\n m.redraw();\n }\n }\n }\n\n function onPressDelta(x, y, e, isTouch) {\n startValue = value;\n pressed = true;\n absolute = false;\n rcBar = elBar.getBoundingClientRect();\n lastRead = (orientation === \"vertical\") ? y : x;\n if (!isTouch) e.target.requestPointerLock();\n }\n\n function moveHandleAbsolute(x, y) {\n\n let\n barLength,\n delta;\n\n if (orientation === \"vertical\") {\n\n barLength = rcBar.bottom - rcBar.top;\n delta = rcBar.bottom - y;\n\n } else {\n barLength = rcBar.right - rcBar.left;\n delta = x - rcBar.left;\n }\n\n delta = clamp(delta, 0, barLength);\n const val = quantize((delta / barLength) * (max - min) + min, min, max, step);\n setStyles(val);\n return val;\n }\n\n function moveHandleDelta(x, y, event) {\n\n const\n factor = event.shiftKey\n ? factorCoarse\n : (event.metaKey || event.ctrlKey)\n ? 4 * factorCoarse\n : factorFine;\n\n let\n delta;\n\n if (orientation === \"vertical\") {\n delta = event.movementY || 0;\n } else {\n delta = event.movementX || 0;\n }\n\n let newVal;\n let s = step > 0 ? step : (max - min) / 100;\n\n if (delta < 0) {\n newVal = Math.max(value + s * factor * delta, min);\n } else if (delta > 0) { // right/up\n newVal = Math.min(value + s * factor * delta, max);\n } else {\n return value;\n }\n\n newVal = quantize(newVal, min, max, step);\n\n setStyles(newVal);\n return newVal;\n\n }\n\n function onPress(x, y, event) {\n return useAbsolute\n ? onPressAbsolute(x, y, event)\n : onPressDelta(x, y, event);\n }\n\n function moveHandle(x, y, event) {\n return absolute\n ? moveHandleAbsolute(x, y, event)\n : moveHandleDelta(x, y, event);\n }\n\n // Event handlers\n function onMouseDown(e) {\n if (device === TOUCH) {\n return;\n }\n device = MOUSE;\n if (e.button !== 0) {\n return;\n }\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"mouseup\", onMouseUp);\n onPress(e.clientX, e.clientY, e);\n }\n\n function onMouseMove(e) {\n e.preventDefault();\n onMove(e.clientX, e.clientY, e);\n }\n\n function onMouseUp(e) {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", onMouseUp);\n onRelease(e.clientX, e.clientY, e);\n }\n\n function onTouchStart(e) {\n if (device === MOUSE) {\n return;\n }\n elHit.addEventListener(\"touchmove\", onTouchMove);\n elHit.addEventListener(\"touchend\", onTouchEnd);\n const t = e.changedTouches[0];\n onPress(t.clientX, t.clientY, e, true);\n }\n\n function onTouchMove(e) {\n e.preventDefault();\n const t = e.changedTouches[0];\n onMove(t.clientX, t.clientY, e);\n }\n\n function onTouchEnd(e) {\n elHit.removeEventListener(\"touchmove\", onTouchMove);\n elHit.removeEventListener(\"touchend\", onTouchEnd);\n const t = e.changedTouches[0];\n onRelease(t.clientX, t.clientY, t);\n }\n\n function onKeyDown(e) {\n\n const k = e.keyCode;\n let newVal;\n\n if (k === 33) { // pgup\n e.preventDefault();\n let s = Math.max((max - min) / 10, step);\n if (s <= 0) {\n s = 1;\n }\n newVal = quantize(value + s, min, max, step);\n } else if (k === 34) { // pgdown\n e.preventDefault();\n let s = Math.max((max - min) / 10, step);\n if (s <= 0) {\n s = 1;\n }\n newVal = quantize(value - s, min, max, step);\n } else if (k === 35) { // end\n e.preventDefault();\n newVal = max;\n } else if (k === 36) { // home\n e.preventDefault();\n newVal = min;\n } else if (k === 37 || k === 40) { // left/down\n e.preventDefault();\n let s = (step > 0 ? step : (max - min) / 10) * (e.shiftKey ? 0.25 : (e.ctrlKey || e.metaKey) ? 4 : 1);\n newVal = Math.max(value - s, min);\n } else if (k === 38 || k === 39) { // right/up\n e.preventDefault();\n let s = (step > 0 ? step : (max - min) / 10) * (e.shiftKey ? 0.25 : (e.ctrlKey || e.metaKey) ? 4 : 1);\n newVal = Math.min(value + s, max);\n } else if (k === 48) { // 0\n newVal = (max + min) / 2;\n }\n if (typeof newVal !== \"number\" || newVal === value) {\n return; // no change to make\n }\n value = newVal;\n setStyles(value);\n if (onchange && onchange(value) !== false) {\n m.redraw();\n }\n }\n\n function onMove(x, y, event) {\n if (!pressed) {\n return;\n }\n\n const val = moveHandle(x, y, event);\n if (val !== value) {\n value = val;\n if (ondrag && ondrag(value) !== false) {\n m.redraw();\n }\n }\n }\n\n function onRelease(x, y, e) {\n\n if (!pressed) {\n return;\n }\n\n pressed = false;\n value = moveHandle(x, y, e);\n\n if (onchange && onchange(value) !== false) {\n m.redraw();\n }\n\n /*\n if (value !== startValue) {\n if (onchange && onchange(value) !== false) {\n m.redraw();\n }\n }\n */\n\n if (!absolute) document.exitPointerLock();\n\n setTimeout(function () {\n if (!pressed) {\n device = NONE;\n }\n }, DEVICE_DELAY);\n }\n\n /** Compute handle position style */\n function positionStyle(val) {\n let s = (val - min) / (max - min);\n if (orientation === \"vertical\") {\n s = 1.0 - s;\n }\n return String(100 * s) + \"%\";\n }\n\n /** Set styles for movable parts */\n function setStyles(value) {\n const\n ps = positionStyle(value),\n rps = positionStyle(max - value + min);\n\n if (orientation === \"vertical\") {\n elHandle.style.top = ps;\n elBar0.style.height = ps;\n elBar1.style.height = rps;\n } else {\n elHandle.style.left = ps;\n elBar0.style.width = rps;\n elBar1.style.width = ps;\n }\n }\n\n /** Some attrs need to be cached (and updated) so that they are current in event handlers */\n function updateAttrs(attrs) {\n min = attrs.min;\n max = attrs.max;\n step = (typeof attrs.step === \"number\" && !Number.isNaN(attrs.step))\n ? clamp(attrs.step, 0, max - min) : 1;\n orientation = attrs.orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n onchange = attrs.onchange;\n ondrag = attrs.ondrag;\n if (typeof attrs.value === \"number\") {\n value = clamp(attrs.value, min, max);\n }\n useAbsolute = !attrs.relative;\n factorCoarse = (attrs.factor && attrs.factor[0]) || 4;\n factorFine = (attrs.factor && attrs.factor[1]) || 1;\n\n }\n\n /** Return mithril component hooks object */\n return {\n oncreate: ({attrs, dom}) => {\n applyIOSHack();\n updateAttrs(attrs);\n elHit = dom;\n elBar = elHit.querySelector(\".mithril-range-bar\");\n elBar0 = elBar.querySelector(\".mithril-range-bar-0\");\n elBar1 = elBar.querySelector(\".mithril-range-bar-1\");\n elHandle = elBar.querySelector(\".mithril-range-handle\");\n elHit.addEventListener(\"mousedown\", onMouseDown);\n elHit.addEventListener(\"touchstart\", onTouchStart);\n elHit.addEventListener(\"keydown\", onKeyDown);\n },\n onremove: function () {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", onMouseUp);\n elHit.removeEventListener(\"mousedown\", onMouseDown);\n elHit.removeEventListener(\"touchstart\", onTouchStart);\n elHit.removeEventListener(\"touchmove\", onTouchMove);\n elHit.removeEventListener(\"touchend\", onTouchEnd);\n elHit.removeEventListener(\"keydown\", onKeyDown);\n },\n view: function ({attrs, children}) {\n\n updateAttrs(attrs);\n value = quantize(value, min, max, step);\n const a = {\n class: \"mithril-range nokey\" + (attrs.relative ? \" isrelative \" : \" \") + (value === 0 ? \"atzero\" : value < 0 ? \"belowzero\" : \"overzero\") + (attrs.class != null ? \" \" + attrs.class : \"\"),\n tabIndex: \"0\",\n role: \"slider\",\n \"aria-valuemin\": String(min),\n \"aria-valuemax\": String(max),\n \"aria-valuenow\": String(value),\n \"aria-orientation\": orientation\n };\n if (attrs.id) {\n a.id = attrs.id;\n }\n // noinspection JSUnresolvedVariable\n if (attrs.ariaLabelledby) {\n a[\"aria-labelledby\"] = attrs.ariaLabelledby;\n }\n if (attrs.disabled) {\n a.style = {pointerEvents: \"none\"};\n a[\"aria-disabled\"] = \"true\";\n }\n const\n ps = positionStyle(value),\n rps = positionStyle(max - value + min);\n let\n handleStyle,\n bar0Style,\n bar1Style;\n\n if (orientation === \"vertical\") {\n handleStyle = {top: ps};\n bar0Style = {height: ps};\n bar1Style = {height: rps};\n } else {\n handleStyle = {left: ps};\n bar0Style = {width: rps};\n bar1Style = {width: ps};\n }\n return m(\"div\", a, m(\"div\", {class: \"mithril-range-bar nokey\"}, m(\"div\", {\n class: \"mithril-range-bar-0 nokey\",\n style: bar0Style\n }), m(\"div\", {\n class: \"mithril-range-bar-1 nokey\",\n style: bar1Style\n }), m(\"div\", {\n class: \"mithril-range-handle nokey\",\n style: handleStyle\n }, children)), !!attrs.name && m(\"input\", {\n type: \"hidden\",\n name: attrs.name,\n value: String(value)\n }));\n }\n };\n}\n\nexport default MithrilRange;\n","import m from \"mithril\";\nimport MithrilRange from \"../util/mithril-range\";\n\nlet\n __timer;\n\nconst\n resetMultiplier = (state) => {\n /*\n if (state.curMultiplier > 1 && state.value < state.curMax * (state.curMultiplier - 1)) {\n state.curMultiplier = Math.ceil(state.value / state.curMax);\n m.redraw();\n }\n */\n\n const\n // req multiplier to show value within negative bounds\n maxMultiplier = state.value > state.curMax ? Math.ceil(state.value / state.curMax) : 1,\n // req multiplier to show value within positive bounds\n minMultiplier = (state.curMin < 0 && state.value < state.curMin) ? Math.abs(Math.ceil(state.value / state.curMin)) : 1,\n // chosen\n multiplier = Math.min(Math.max(minMultiplier, maxMultiplier), state.maxMultiplier);\n\n if (state.curMultiplier !== multiplier) {\n state.curMultiplier = multiplier;\n m.redraw();\n }\n },\n increaseMultiplier = (state) => {\n if (\n state.value >= (state.curMax * state.curMultiplier) * 0.9\n && state.maxMultiplier > 1\n && state.curMultiplier <= state.maxMultiplier - 1\n ) {\n state.curMultiplier++;\n return true;\n }\n if (state.curMin < 0) return increaseMinMultiplier(state);\n },\n increaseMinMultiplier = (state) => {\n if (state.value <= (state.curMin * state.curMultiplier) * 0.9\n && state.maxMultiplier > 1\n && state.curMultiplier <= state.maxMultiplier - 1\n ) {\n state.curMultiplier++;\n return true;\n }\n },\n RangeSlider = {\n\n oninit: ({attrs, state}) => {\n Object.assign(state, {\n value: attrs.value || 0,\n initial: attrs.value || 0,\n curMax: attrs.max,\n curMin: attrs.min,\n curMultiplier: 1,\n maxMultiplier: attrs.multiplier || 1,\n id: \"I\" + Date.now()\n });\n // adjust initial multiplier\n if (state.maxMultiplier > 1) {\n if (state.value > attrs.max) {\n state.curMultiplier = Math.ceil(state.value / attrs.max);\n } else if (attrs.min < 0 && state.value < attrs.min) {\n state.curMultiplier = Math.abs(Math.ceil(state.value / attrs.min));\n }\n }\n },\n onupdate: ({attrs, state}) => {\n const\n attrsMultiplier = attrs.multiplier || 1,\n attrsValue = attrs.value || 0;\n\n if (state.curMax !== attrs.max || state.maxMultiplier !== attrsMultiplier) {\n\n Object.assign(state, {\n curMax: attrs.max,\n curMin: attrs.min,\n maxMultiplier: attrsMultiplier,\n value: attrs.value,\n initial: attrsValue\n });\n if (!increaseMultiplier(state)) {\n clearTimeout(state.timer);\n state.timer = setTimeout(resetMultiplier, 1000, state);\n }\n\n m.redraw();\n\n } else if (state.initial !== attrsValue) {\n\n Object.assign(state, {\n value: attrsValue,\n initial: attrsValue\n });\n\n clearTimeout(__timer);\n __timer = setTimeout(() => m.redraw(), 50);\n\n /*\n if (!increaseMultiplier(state)) {\n state.timer = setTimeout(resetMultiplier, 1000, state);\n clearTimeout(state.timer);\n }\n */\n }\n },\n view: ({attrs, state}) => m(\n \".range.flexcol.control.relative\" + (attrs.multiplier > 1 ? \".withmultiplier\" : \"\"),\n {\n ...attrs.class && {class: attrs.class},\n title: attrs.hint || \"Click, then use arrows to finetune value if needed\"\n },\n [\n ...attrs.title ? [m(\"label\", {class: \"rangelabel\", htmlFor: state.id}, attrs.title)] : [],\n m(MithrilRange, {\n onchange: (value) => {\n\n state.value = value;\n\n const increased = increaseMultiplier(state);\n\n if (!increased && state.curMultiplier > 1) {\n clearTimeout(state.timer);\n state.timer = setTimeout(resetMultiplier, 1000, state);\n }\n\n if (attrs.onchange) {\n attrs.onchange(value);\n } else {\n m.redraw();\n }\n },\n ondrag: (value) => {\n if (value !== state.value) {\n state.value = value;\n if (attrs.ondrag) attrs.ondrag(value);\n return true;\n }\n return false;\n },\n value: state.value || 0,\n min: (attrs.min || 0) * state.curMultiplier,\n max: (state.curMax * state.curMultiplier) || 100,\n step: attrs.step || 1,\n relative: attrs.relative,\n factor: attrs.factor\n }, [\n m(\".currentval\", attrs.parser\n ? attrs.parser(state.value, attrs.step < 1)\n : state.value\n ? attrs.step < 1\n ? state.value.toFixed(2)\n : (\"\" + Math.floor(state.value)) : \"\")\n ])\n /*\n m(\".datalist.flexrow\", [\n m(\"div\", attrs.getLabel(0)),\n m(\".ismax\", attrs.getLabel(attrs.max || 100))\n ])\n */\n ]\n )\n },\n RangeWidget = {\n view: ({attrs, state}) => m(RangeSlider, {\n value: attrs.value || 0,\n min: attrs.min || 0,\n max: attrs.max || 100,\n step: attrs.step || 0.1,\n class: (attrs.disabled ? \"disabled \" : \"\") + (attrs.class || \"\"),\n title: attrs.title,\n multiplier: attrs.multiplier,\n hint: attrs.hint,\n parser: attrs.parser,\n relative: attrs.relative,\n factor: attrs.factor,\n\n // values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n getLabel: (value) => (value ? \"\" + value : \"default\"),\n ondrag: (value) => {\n state.changed = true;\n state.value = value;\n if (attrs.onchange) attrs.onchange(value, true);\n return true;\n },\n onchange: (value) => {\n if (attrs.auto0) {\n value = 0;\n } else if (attrs.autoValue) value = attrs.autoValue;\n state.changed = true;\n state.value = value;\n if (attrs.onchange) attrs.onchange(value, false);\n return true;\n }\n })\n };\n\nexport default RangeWidget;\n","function startApp(target, appMetadata) {\n m.route(\n document.getElementById(target),\n appMetadata.default || \"/\",\n appMetadata.routes\n );\n}\n\nexport default startApp;"],"names":["defineWidget","view","oninit","oncreate","onremove","onupdate","getAttrs","attrs","parentAttrs","panelInitialParams","data","initialParams","isCurrent","currentIndex","index","Icon","m","pack","icon","size","title","icontitle","undefined","role","onclick","iconClass","class","Button","state","children","download","link","href","target","text","busy","error","message","event","clearTimeout","debounce","setTimeout","result","then","catch","redraw","right","textClass","ButtonNew","rel","onClick","Empty","key","split","map","str","idx","all","length","setItem","params","lastIndex","lastParams","currentParams","Object","assign","current","items","onSelected","Selector","selected","isNaN","noinitial","element","horizontal","className","hideonly","hidesel","toolbarClass","item","Date","now","clickts","bodyHidden","toggle","bodyClass","widget","closeButton","ICONS","info","success","Notification","TOAST_SHORT","altContainer","mTimer","mNotifications","next","container","document","getElementById","n","splice","render","type","timer","add","push","clear","globalState","CardieWidget","nofold","cardid","action","collapsedAction","collapsedClass","expandedClass","cols","expandedView","collapsedView","titleWidget","titWidget","titleAttrs","titleClass","titleExpanded","titleCollapsed","collapsed","buttonClass","skipEmpty","e","classList","contains","shiftKey","onShiftOpen","expanded","uniq","subname","keys","forEach","startsWith","setCardStatus","alwaysView","getInput","value","parse","val","float","Number","parseFloat","parseInt","getValue","lastVal","hasOwnProperty","StaticFieldWidget","vnode","onDrag","staticClass","staticTitle","dom","readonly","hammer","Hammer","Manager","touchAction","panner","Pan","direction","DIRECTION_VERTICAL","singleTap","Tap","on","srcEvent","focus","destroy","InputWidget","reset","showInput","label","containerClass","staticField","multi","alwaysmulti","id","max","min","step","maxlength","validator","isValid","placeholder","hint","oninput","fromoninput","onchange","enterPressed","onblur","onkeyup","onkeypress","onenter","dragging","draginc","displayTitle","String","actions","NoticeWidget","SwitchWidget","unit","subline","checked","original","mCurrentCancelable","runCancelable","style","display","popupMessage","cancelable","contentClass","clearModal","OverflowMenu","domItem","options","Promise","resolve","closeResolve","widget.popupMessage","classes","initials","clases","finals","cla","join","packClassString","favlist","nodeName","getAttribute","ev","keyCode","blur","caption","clone","window","structuredClone","o","JSON","stringify","promptName","body","refreshKey","PROPERTIES","TitleBarWidget","EntityTemplates","meta","onInput","valid","trim","description","embedded","notice","Notice","newvalue","tags","toLowerCase","filter","tag","ytref","indexOf","author","source","PresetTemplate","parameters","preset","presetComponents","types","globalData","fetcher","available","sourceAvailable","cosa","primaryTarget","elements","globalSource","rootSource","found","cosaIndex","fetchLive","isAvailable","isSourceAvailable","status","updatedTarget","field","finalSource","deleteCurrent","config","onSelect","parser","v","Array","isArray","reject","newMeta","Error","textNew","textHint","dialogOptions","finally","Separator","isIOS","navigator","userAgent","match","__timer","iOSHackApplied","clamp","Math","quantize","steps","ceil","round","MithrilRange","elHit","elBar","elBar0","elBar1","elHandle","rcBar","absolute","ondrag","device","pressed","useAbsolute","factorCoarse","factorFine","orientation","moveHandleAbsolute","x","y","barLength","delta","bottom","top","left","setStyles","onPress","getBoundingClientRect","onPressAbsolute","isTouch","requestPointerLock","moveHandle","factor","metaKey","ctrlKey","newVal","movementY","movementX","s","moveHandleDelta","onMouseDown","button","addEventListener","onMouseMove","onMouseUp","clientX","clientY","preventDefault","onMove","removeEventListener","onRelease","onTouchStart","onTouchMove","onTouchEnd","t","changedTouches","onKeyDown","k","exitPointerLock","positionStyle","ps","rps","height","width","updateAttrs","relative","querySelector","a","tabIndex","ariaLabelledby","disabled","pointerEvents","handleStyle","bar0Style","bar1Style","name","resetMultiplier","maxMultiplier","curMax","minMultiplier","curMin","abs","multiplier","curMultiplier","increaseMultiplier","increaseMinMultiplier","RangeSlider","initial","attrsMultiplier","attrsValue","htmlFor","toFixed","floor","RangeWidget","getLabel","changed","auto0","autoValue","startApp","appMetadata","route","default","routes"],"mappings":"uBAEO,SAASA,EAAaC,EAAMC,EAAQC,EAAUC,EAAUC,GAC3D,MAAO,IACAJ,GAAQ,CAACA,WACTC,GAAU,CAACA,aACXC,GAAY,CAACA,eACbE,GAAY,CAACA,eACbD,GAAY,CAACA,YAExB,CAKA,SAASE,EAASC,EAAOC,EAAaC,GAClC,MAAMC,GAA0B,mBAAVH,EAAwBA,EAAMC,GAAeD,IAAU,GAE7E,OADIE,IAAoBC,EAAKC,cAAgBF,GACtCC,CACX,CAIG,MAACE,EAAY,EAAEC,gBAAeC,IAAUD,IAAiBC,EAExDC,EAAO,CACHd,KAAM,EAAEM,WAAWS,EACf,UAAUT,EAAMU,MAAQ,YAAYV,EAAMW,MAAQ,QAAQX,EAAMY,KAAO,OAASZ,EAAMY,KAAO,IAAM,KACnG,CACIC,MAAOb,EAAMc,gBAAaC,EAC1BC,KAAM,eACNC,QAASjB,EAAMiB,SAAW,QAASjB,EAAMkB,WAAa,CAACC,MAAOnB,EAAMkB,cAKhFE,EAAS,CACL1B,KAAM,EAAEM,QAAOqB,QAAOC,cAAcb,EAAGT,EAAMuB,UAAYvB,EAAMwB,KAAQ,WAAa,SAAU,IACvFxB,EAAMwB,MAAQ,CAACC,KAAMzB,EAAMwB,SAC3BxB,EAAMuB,UAAY,CAACA,SAAUvB,EAAMuB,aACnCvB,EAAM0B,QAAU,CAACA,OAAQ1B,EAAM0B,QAClC,aAAc1B,EAAM,eAAiBA,EAAMa,OAASb,EAAM2B,KAC1Dd,MAAOb,EAAMa,OAASb,EAAM,cAC5BmB,OAAQnB,EAAMmB,OAAS,KAAOE,EAAMO,KAAO,QAAU,OAClDP,EAAMQ,OAAS,CAAC,aAAcR,EAAMQ,MAAMC,YAC1C9B,EAAMiB,SAAW,CAChBA,QAAUc,IACNC,aAAaX,EAAMY,UACnBZ,EAAMY,SAAWC,YAAW,KACxB,MAAMC,EAASnC,EAAMiB,QAAQc,EAAO/B,GAChCmC,GAAUA,EAAOC,MAAQD,EAAOE,QAChChB,EAAMO,MAAO,EACbnB,EAAE6B,SACFH,EACKC,MAAK,KACFf,EAAMO,MAAO,EACbnB,EAAE6B,QAAQ,IAEbD,OAAOR,IACJR,EAAMO,MAAO,EACbP,EAAMQ,MAAQA,EACdpB,EAAE6B,QAAQ,IAErB,GACF,GAAG,IAGf,IACKtC,EAAMW,OAASX,EAAMuC,MAAS,CAAC9B,EAAED,EAAMR,IAAU,MAClDA,EAAM2B,KAAO,CAAClB,EAAE,mBAAoB,CAACU,MAAOnB,EAAMwC,WAAa,MAAOxC,EAAM2B,OAAS,MACpF3B,EAAMW,MAAQX,EAAMuC,MAAS,CAAC9B,EAAED,EAAMR,IAAU,MACjDsB,KAIXmB,EAAY,CACR/C,KAAM,EAAEM,QAAOqB,QAAOC,cAAcb,EAAGT,EAAMuB,UAAYvB,EAAMwB,KAAQ,WAAa,SAAU,IACvFxB,EAAMwB,MAAQ,CAACC,KAAMzB,EAAMwB,SAC3BxB,EAAMuB,UAAY,CAACmB,IAAK,WAAYnB,SAAUvB,EAAMuB,aACpDvB,EAAM0B,QAAU,CAACA,OAAQ1B,EAAM0B,QAClC,aAAc1B,EAAM,eAAiBA,EAAMa,OAASb,EAAM2B,KAC1Dd,MAAOb,EAAMa,OAASb,EAAM,cAC5BmB,OAAQnB,EAAMmB,OAAS,KAAOE,EAAMO,KAAO,QAAU,OAClDP,EAAMQ,OAAS,CAAC,aAAcR,EAAMQ,MAAMC,YAC1C9B,EAAM2C,SAAW,CAChB1B,QAAUc,IACNC,aAAaX,EAAMY,UACnBZ,EAAMY,SAAWC,YAAW,KACxB,MAAMC,EAASnC,EAAM2C,QAAQZ,EAAO/B,GAChCmC,GAAUA,EAAOC,MAAQD,EAAOE,QAChChB,EAAMO,MAAO,EACbnB,EAAE6B,SACFH,EACKC,MAAK,KACFf,EAAMO,MAAO,EACbnB,EAAE6B,QAAQ,IAEbD,OAAOR,IACJR,EAAMO,MAAO,EACbP,EAAMQ,MAAQA,EACdpB,EAAE6B,QAAQ,IAErB,GACF,GAAG,IAGf,IACKtC,EAAMW,OAASX,EAAMuC,MAAS,CAAC9B,EAAED,EAAMR,IAAU,MAClDA,EAAM2B,KAAO,CAAClB,EAAE,mBAAoB,CAACU,MAAOnB,EAAMwC,WAAa,MAAOxC,EAAM2B,OAAS,MACpF3B,EAAMW,MAAQX,EAAMuC,MAAS,CAAC9B,EAAED,EAAMR,IAAU,MACjDsB,KAIXsB,EAAQ,CAEJlD,KAAM,EAAEM,QAAOsB,cAAcb,EACzB,kDACA,IACOT,EAAMmB,OAAS,CAACA,MAAOnB,EAAMmB,UAC7BnB,EAAM6C,KAAO,CAACA,IAAK7C,EAAM6C,KAC5B7B,KAAM,gBAEV,CACIP,EAAED,EAAMR,MACLA,EAAM8B,QACH,CACErB,EAAE,iBACE,CACIO,KAAM,SACNG,MAAOnB,EAAMY,KAAO,EAAI,WAAa,WACrC,aAAcZ,EAAM8B,SAExB9B,EAAM8B,QAAQgB,MAAM,MACfC,KAAI,CAACC,EAAKC,EAAKC,IAAuB,IAAfA,EAAIC,OAAeH,EAAMvC,EAAE,QAAUwC,EAAKD,OAG5E,MACH1B,EACG,CAACb,EAAE,sBAAuBa,IAC1B,MAKlB8B,EAAU,CAACpD,EAAOqB,EAAOd,EAAO8C,KAG5B,MACIC,EAAYjC,EAAMf,aAClBiD,EAAalC,EAAMmC,eAER,IAAXjD,EACAkD,OAAOC,OAAOrC,EAAO,CACjBsC,QAAS,KACTrD,cAAe,EACfkD,cAAe,KAGnBC,OAAOC,OAAOrC,EAAO,CACjBsC,QAAS3D,EAAM4D,MAAMrD,IAAU,KAC/BD,aAAce,EAAMsC,QAAUpD,GAAS,EACvCiD,cAAeH,GAAU,KAI7BrD,EAAM6D,YAAY7D,EAAM6D,WAAWxC,EAAMsC,QAAStC,EAAMmC,cAAenC,EAAMf,eAAiBgD,EAAWC,GAE7G9C,EAAE6B,QAAQ,EAGdwB,EAAW,CAEPnE,OAAQ,EAAEK,QAAOqB,aAEbA,EAAQrB,EAAMqB,OAASA,GACjB+B,QAAU,CAAC7C,KAAU8C,IAAWD,EAAQpD,EAAOA,EAAMqB,OAASA,EAAOd,EAAO8C,GAElF,MAEIU,GADYC,MAAM3C,EAAMf,cACFe,EAAMf,aAAeN,EAAM+D,SACjDzD,EAAgBN,EAAM4D,OAAS5D,EAAM4D,MAAMT,YACvBpC,IAAbgD,GAA0B/D,EAAM4D,MAAMG,GACnCA,EACA/D,EAAMiE,WAAa,EAAI,GAC1B,EACPN,GAA4B,IAAlBrD,EAAsBN,EAAM4D,MAAMtD,GAAgB,KAEhEmD,OAAOC,OAAOrC,EAAO,CAACf,eAAcqD,WAAS,EAIjD7D,SAAU,EAAEE,QAAOqB,aACdrB,EAAMqB,OAASA,GAAO+B,QAAU,CAAC7C,KAAU8C,IAAWD,EAAQpD,EAAOA,EAAMqB,OAASA,EAAOd,EAAO8C,EAAO,EAG9G3D,KAAM,EAAEM,QAAOqB,YAEXA,EAAQrB,EAAMqB,OAASA,EACvB,MAAMsC,QAACA,GAAWtC,EAElB,OAAOZ,GACFT,EAAMkE,SAAW,UAAY,aAAelE,EAAMmE,WAAa,WAAa,aAAenE,EAAMoE,UAAY,IAAMpE,EAAMoE,UAAY,IACtI,IACOpE,EAAM6C,KAAO,CAACA,IAAK7C,EAAM6C,KAC5B1B,OAAQE,EAAMsC,QAAU,aAAe,UAAY3D,EAAMmB,MAAQ,IAAMnB,EAAMmB,MAAQ,KAEzF,IACUnB,EAAMqE,YAAarE,EAAM4D,MAAMT,OAAS,IAASnD,EAAMsE,QAwBvD,GAvBA,CAEE7D,EACI,yBAA2BT,EAAMmE,WAAa,WAAa,YAC3D,CACI,aAAcnE,EAAM,eAAiBA,EAAMa,OAAS,WACpDM,MAAOnB,EAAMuE,cAEjBvE,EAAM4D,MAAMb,KAAI,CAACyB,EAAMjE,IAAUE,EAAEW,EAAQ,CACvCD,OAAQqD,EAAKrD,MAAQqD,EAAKrD,MAAQ,IAAM,KAAOd,EAAUgB,EAAOd,GAAS,SAAW,OACpFI,KAAM6D,EAAK7D,MAAQ,QAChB6D,EAAK3D,OAAS,CAACA,MAAO2D,EAAK3D,UAC3B2D,EAAK,eAAiB,CAAC,aAAcA,EAAK,kBAC1CA,EAAK7C,MAAQ,CAACA,KAAM6C,EAAK7C,MAC5BV,QAAS,KACKwD,KAAKC,MACPrD,EAAMsD,QAAU,MACxBtD,EAAMsD,QAAUF,KAAKC,MACrBrD,EAAMuD,YAAa,EACnBvD,EAAM+B,QAAQ7C,GAAM,WAKrCoD,EACG,IACM3D,EAAM6E,SAAWxD,EAAMuD,WACrB,CACEnE,EAAEgC,EAAW,CACTtB,MAAO,kBAAoBE,EAAMuD,WAAa,aAAe,aAC7DjE,KAAMU,EAAMuD,WAAa,WAAa,aACtC/D,MAAOQ,EAAMuD,WAAa,eAAiB,iBAC3CjC,QAAS,KACLtB,EAAMuD,YAAcvD,EAAMuD,WAC1BnE,EAAE6B,QAAQ,KAGlB,MACHtC,EAAM6E,QAAWxD,EAAMuD,WAWtB,GAVA,CAEEnE,EAAE,yBAA0B,CAACU,MAAOnB,EAAM8E,UAAW9D,KAAM,gBAAiB,CACxEP,EACIkD,EAAQoB,OACRhF,EAAS4D,EAAQ3D,MAAOA,EAAOqB,EAAMmC,eACrCG,EAAQrC,gBAKrBtB,EAAMgF,YACH,CACEvE,EAAEW,EAAQ,CACND,MAAO,+BACPR,KAAM,QACNM,QAAS,KACLI,EAAM+B,SAAS,EAAE,EAErB,aAAc,gBACZ,IAEhB3C,EAAEmC,EAAO5C,IAEtB,GAIPiF,EAAQ,CACVC,KAAM,OACNrD,MAAO,uBACPsD,QAAS,SAyDb,MAAMC,EAAe,IAtDrB,SAAuBC,EAAc,IAAMC,GAEvC,IAEIC,EADAC,EAAiB,GAmBrB,SAASC,IAEL,MACIC,EAAYJ,GAAgBK,SAASC,eAAe,0BAExD,GAAIJ,EAAerC,OAAQ,CACvB,MAAM0C,EAAIL,EAAeM,OAAO,EAAG,GAAG,IAtB9C,SAAgBJ,EAAWG,GACvBpF,EAAEsF,OACEL,EAAWjF,EACPW,EAAQ,CACJD,MAAO,gBAAkB0E,EAAEG,KAC3BrE,KAAMkE,EAAElE,KACRhB,KAAMsE,EAAMY,EAAEG,OAAS,OACvBpF,KAAM,EACNI,KAAM,SAENC,QAASwE,IAIxB,CASOM,CAAOL,EAAWG,GAClB7D,aAAauD,GACbA,EAASrD,WAAWuD,EAAMI,EAAEI,OAASZ,EACjD,MACY5E,EAAEsF,OAAOL,EAAW,IACpBH,EAAS,IAEhB,CAED,MAAO,CACHW,IAAK,CAACvE,EAAMqE,KACRR,EAAeW,KAAK,CAChBxE,OACAqE,SAECT,GAAQE,GAAM,EAEvBW,MAAO,KACHZ,EAAiB,GACjBC,GAAM,EAIlB,EC1UIY,EAAc,CAAE,EAkBf,MAACC,EAAe7G,GACjB,EAAEO,QAAOqB,QAAOC,eAEZ,MAEIiF,OACIA,EAAMC,OACNA,EAAM5F,KACNA,EAAIC,MACJA,EAAK4F,OACLA,EAAMC,gBACNA,EAAeC,eACfA,EAAcC,cACdA,EAAaC,KACbA,EAAI3C,QACJA,EAAOtC,KACPA,EAAIkF,aACJA,EAAYC,cACZA,EACAC,YAAaC,EAASC,WACtBA,EAAUC,WACVA,EAAUrC,UACVA,EAASsC,cACTA,EAAaC,eACbA,GACArH,EAEJsH,GAAYf,IAENC,GACKH,EAAYG,KACXnF,EAAMiG,WAElB1D,EAAU0D,EAMJP,EAAgBA,EAAc/G,EAAOqB,GAAS,GAJ5CyF,EACMA,EAAa9G,EAAOqB,GACnBC,GAAY,GAI3B0F,EAAcC,EACRxG,EAAEwG,EAAWC,GAAc,IAC3BrG,EAAQJ,EAAE,+BAAgCI,QAASE,EAEzDwG,EAAc3F,EACR,UACA,kBAAiB0F,EAAY,cAAgB,cAEvD,OAAO1D,EAAMT,SAAWnD,EAAMwH,UACxB/G,EACGyD,GAAW,KACZ,CACI/C,MAAO,4BACA0F,EAAO,WAAa,kBACpB7G,EAAMmB,MAAQ,IAAMnB,EAAMmB,MAAQ,KAClCoF,EACG,YACA,KAAIe,EAAY,cAAgBX,GAAkB,IAAM,aAAeC,GAAiB,OAC3FhG,EAAO,SAAWA,EAAO,YACzBqG,EAAY,cAAgB,KAC5BrF,EAAO,YAAc,KAEhC,IAEOoF,EACG,CACEvG,EACI,2CACA8F,EACM,CACEpF,MAAOgG,GAAc,SAEvB,CACEhG,MAAO,GAAGgG,GAAc,WAAWI,GAAe,KAElD1G,MAAOyG,EACAD,GAAkB,8BAClBD,GAAiBC,GAAkB,gCAE1CpG,QAAUwG,IAEFA,EAAE/F,OAAOgG,UAAUC,SAAS,YACxBF,EAAEG,UAAY5H,EAAM6H,YACpB7H,EAAM6H,cACC7H,EAAMwG,OApGjE,SAAuBA,EAAQsB,EAFX,GAGhB,GAAItB,EAAQ,CACR,MAAOuB,EAAMC,GAAWxB,EAAO1D,MAAM,KACjCgF,GAAYC,GAAQC,GACpBvE,OAAOwE,KAAK5B,GACP6B,SAASrF,IACFA,EAAIsF,WAAWJ,EAAO,OACtB1B,EAAYxD,GAThB,EAUC,IAGbwD,EAAYG,GAAUsB,CACzB,CACL,CAwFoDM,CAAc5B,EAAQc,GAEtBjG,EAAMiG,WAAajG,EAAMiG,UAG7B7G,EAAE6B,SACL,IAGbmE,IAAWF,GAAWe,EAKhBZ,GAAmBY,EACf,CACE7G,EAAEgC,EAAWiE,GACbM,GAEFA,EATJ,CACEvG,EAAEgC,EAAWgE,GACbO,KAUd,MAEHpD,EAAMT,OACH,CACE1C,EAAE,cACFA,EACI,kCACA,CACIU,OAAQ0F,EAAO,WAAa,gBAAkB,KAAO/B,GAAa,QAEnElB,IAEP,MAEJ5D,EAAMqI,WACJ,CAACrI,EAAMqI,WAAW,CAACrI,QAAOqB,WAC1B,KAGV,EAAE,IAEd,EAAErB,QAAOqB,YACArB,EAAMwG,SACPnF,EAAMiG,WAAYtH,EAAMuG,SAElBvG,EAAMwG,QACDH,EAAYrG,EAAMwG,UACjBxG,EAAMsH,WACrB,QAELvG,OACAA,OACAA,GC1JAuH,EAAW,CAACtI,EAAOuI,EAAOC,GAAQ,KAC9B,GAAIA,GAAwB,WAAfxI,EAAMgG,KAAmB,CAClC,MAAMyC,EAAMzI,EAAM0I,MAAQC,OAAOC,WAAWL,GAASI,OAAOE,SAASN,EAAO,IAC5E,OAAOI,OAAO3E,MAAMyE,QAAO1H,EAAY0H,CAC1C,CACD,OAAOF,CAAK,EAEhBO,EAAW,CAAC9I,EAAOqB,EAAOmH,KACtB,MAAMO,EAAU1H,EAAM2H,eAAe,SAAW3H,EAAMkH,MAAQvI,EAAMuI,MACpE,OAAOD,EAAStI,EAAO+I,EAASP,EAAM,EAY1CS,EAAoB,CAChBvJ,KAAOwJ,IACH,MAAMlJ,MAACA,EAAKqB,MAAEA,GAAS6H,EAIvB,OAFA7H,EAAMrB,MAAQA,EAEPS,EACH,+BACA,CACIU,OAAQnB,EAAMmJ,OAAS,YAAc,KAAOnJ,EAAMoJ,aAAe,YAC9DpJ,EAAMqJ,aAAe,CAACxI,MAAOb,EAAMqJ,gBACnCrJ,EAAMmJ,QAAU,CAAClI,QAASjB,EAAM2C,SACnC/C,SAAU,EAAE0J,MAAKjI,YAEb,GAAIrB,EAAMmJ,SAAWnJ,EAAMuJ,SAAU,CAEjC,MACIC,EAASnI,EAAMmI,OAAS,IAAIC,OAAOC,QAAQJ,EAAK,CAACK,YAAa,UAC9DC,EAAS,IAAIH,OAAOI,IAAI,CAACC,UAAWL,OAAOM,qBAC3CC,EAAY,IAAIP,OAAOQ,IAE3BT,EAAOtD,IAAI,CAAC0D,EAAQI,IACpBR,EAAOU,GAAG,OAAO,IAAMhB,EAAM7H,MAAMrB,MAAM2C,YACzC6G,EAAOU,GAAG,SAAUzC,GAAMyB,EAAM7H,MAAMrB,MAAMmJ,QAAQ,EAAG1B,EAAE0C,YACzDX,EAAOU,GAAG,WAAYzC,GAAMyB,EAAM7H,MAAMrB,MAAMmJ,OAAO,EAAG1B,EAAE0C,YAC1DX,EAAOU,GAAG,oBAAqBzC,GAAMyB,EAAM7H,MAAMrB,MAAMmJ,OAAO,EAAG1B,EAAE0C,WACtE,CACGnK,EAAMoK,OACNd,EAAIc,OACP,EAELvK,SAAU,EAAEwB,YACRA,EAAMmI,QAAUnI,EAAMmI,OAAOa,SAAS,GAG9CrK,EAAMuI,MACT,GAGT+B,EAAc,CACV5K,KAAM,EAAEM,QAAOqB,YACX,MAAMkJ,EAASjI,IAEPjB,EAAMkH,OAASlH,EAAMmJ,kBAAkBnJ,EAAMmJ,iBAC1CnJ,EAAMkH,MACTjG,GAAQ7B,EAAE6B,QAAQ,EAE1B,OAAO7B,EACH,8BACA,CACIU,OAAQnB,EAAMyK,MAAQ,WAAa,KAAOzK,EAAM0K,eAAiB,IAAM1K,EAAM0K,eAAiB,OAC3F1K,EAAMyK,OAAS,CAAC,aAAczK,EAAMyK,QAE3C,EACKzK,EAAM2K,cAAgB3K,EAAMuJ,UAAalI,EAAMmJ,WAkCxCnJ,EAAMuJ,QAAS5K,EAAM6K,aAAkB7K,EAAMgG,MAAuB,SAAfhG,EAAMgG,KAgCzDvF,EAAE,cAAe,IACZT,EAAM8K,IAAM,CAACA,GAAI9K,EAAM8K,IAC1B9E,KAAMhG,EAAMgG,MAAQ,eACHjF,IAAdf,EAAM+K,KAAqB,CAACA,IAAK/K,EAAM+K,aACzBhK,IAAdf,EAAMgL,KAAqB,CAACA,IAAKhL,EAAMgL,QACvChL,EAAMiL,KAAO,GAAK,CAACA,KAAMjL,EAAMiL,SAC/BjL,EAAMkL,WAAa,CAACA,UAAWlL,EAAMkL,WACxC/J,OAAQnB,EAAMmB,OAAS,KAAOnB,EAAMmL,UAAY9J,EAAM+J,QAAU,SAAW,YAAc,OACtFpL,EAAMa,OAAS,CAACA,MAAOb,EAAMa,OAChC0H,MAAOO,EAAS9I,EAAOqB,GACvBgK,YAAarL,EAAMsL,MAAQ,GAC3BC,QAAUxJ,IACNV,EAAMkH,MAAQD,EAAStI,EAAO+B,EAAML,OAAO6G,OAC3CxG,EAAMyJ,aAAc,EAChBxL,EAAMmL,YAAW9J,EAAM+J,QAAUpL,EAAMmL,UAAU9J,EAAMkH,QACvDvI,EAAMyL,WACLzL,EAAMuL,SAAWvL,EAAMyL,UAAUpK,EAAMkH,MAAOxG,EAClD,EAEL0J,SAAW1J,IACH/B,EAAMyL,WACFzL,EAAMmL,YAAW9J,EAAM+J,QAAUpL,EAAMmL,UAAU9J,EAAMkH,QAC3DxG,EAAM2J,aAAerK,EAAMqK,oBACpBrK,EAAMqK,aACb1L,EAAMyL,SAASnD,EAAStI,EAAO+B,EAAML,OAAO6G,OAAQxG,GAChD/B,EAAM2K,YACNJ,GAAM,UAEClJ,EAAMkH,MAEpB,EAELoD,OAAQ,KACAtK,EAAMmJ,WACND,GAAM,EACT,EAELqB,QAAU7J,IACFV,EAAMmJ,YACY,WAAdzI,EAAMc,IACN0H,GAAM,GACe,UAAdxI,EAAMc,MACTxB,EAAMkH,QAAUvI,EAAMuI,OAAUlH,EAAMkH,QACtCvI,EAAMyL,SAASzL,EAAMuI,MAAOxG,GAC5BwI,GAAM,KAGjB,EAELsB,WAAa9J,IACJV,EAAMmJ,WAA2B,UAAdzI,EAAMc,KAC1B7C,EAAM8L,SAAW9L,EAAM8L,QAAQ/J,EAAML,OAAO6G,MAAOxG,EACtD,IAnFPtB,EAAE,iBAAkB,CAClBU,MAAOnB,EAAMmB,MACboH,MAAOO,EAAS9I,EAAOqB,MACpBrB,EAAMa,OAAS,CAACA,MAAOb,EAAMa,OAChCwK,YAAarL,EAAMsL,MAAQ,GAC3BC,QAAUxJ,IACNV,EAAMkH,MAAQD,EAAStI,EAAO+B,EAAML,OAAO6G,OACvCvI,EAAMmL,YAAW9J,EAAM+J,QAAUpL,EAAMmL,UAAU9J,EAAMkH,QACvDvI,EAAMyL,WACLzL,EAAMuL,SAAWvL,EAAMyL,UAAUpK,EAAMkH,MAAOxG,GAAO,EACzD,EAEL0J,SAAW1J,IACP,GAAI/B,EAAMyL,SAAU,CACZzL,EAAMmL,YAAW9J,EAAM+J,QAAUpL,EAAMmL,UAAU9J,EAAMkH,QAC3D,MAAMA,EAAQD,EAAStI,EAAO+B,EAAML,OAAO6G,OAC3CgC,GAAM,GACNvK,EAAMyL,SAASlD,EAAOxG,GAAO,EAChC,GAEL4J,OAAQ,KACAtK,EAAMmJ,WACND,GAAM,EACT,EAELqB,QAAU7J,IACY,WAAdA,EAAMc,KAAoBxB,EAAMmJ,WAChCD,GAAM,EACT,IA9DX9J,EAAEwI,EAAmB,CACnBM,SAAUvJ,EAAMuJ,SAChBH,aAAc/H,EAAM0K,SAAW,UAAY,KAAO/L,EAAMoJ,aAAe,IACvEC,YAAarJ,EAAMqJ,aAAerJ,EAAMgM,SAAW,qFACnDzD,MAAOvI,EAAMiM,cAAgBnD,EAAS9I,EAAOqB,GAC7C+I,MAAOpK,EAAMoK,SACVpK,EAAMgM,UAAYhM,EAAMuJ,UAAY,CACnCJ,OAAQ,CAACW,EAAW/H,KAChB,GAAI+H,EAAW,CACXzI,EAAM0K,UAAW,EACjB,IAAIxD,EAAQO,EAAS9I,EAAOqB,GAAO,GACnC,GAAIsH,OAAO3E,MAAMuE,SAAoBxH,IAAVwH,EAAqB,OAChDA,GAASuB,EAAY9J,EAAMgM,aACTjL,IAAdf,EAAM+K,KAAqBxC,EAAQvI,EAAM+K,MAAKxC,EAAQvI,EAAM+K,UAC9ChK,IAAdf,EAAMgL,KAAqBzC,EAAQvI,EAAMgL,MAAKzC,EAAQvI,EAAMgL,KAChE3J,EAAMkH,MAAuB,WAAfvI,EAAMgG,KAAoBuC,EAAQ2D,OAAO3D,GACvDvI,EAAMyL,SAASpK,EAAMkH,MAAOxG,EACpE,aAC+CV,EAAM0K,gBACN1K,EAAMkH,MACb9H,EAAE6B,QACL,MAGNtC,EAAMuJ,UAAY,CACjB5G,QAAS,KACLtB,EAAMmJ,WAAY,EAClBnJ,EAAMkH,MAAQvI,EAAMuI,MACpB9H,EAAE6B,QAAQ,KA6F1B7B,EAAE,sCAAuC,KACjCT,EAAM4K,OAAU5K,EAAM6K,aAAiB7K,EAAMgG,MAAuB,SAAfhG,EAAMgG,KAWzD,GAVA,CACEvF,EAAEgC,EAAW,CACT9B,KAAMU,EAAMuJ,MAAQ,kBAAoB,oBACxCzJ,MAAO,eACPwB,QAAS,KACLtB,EAAMuJ,OAASvJ,EAAMuJ,MACrBnK,EAAE6B,QAAQ,QAKvBtC,EAAMmM,QAAUnM,EAAMmM,QAAQpJ,KAAK0D,GAAWhG,EAAEgC,EAAW,IACvDgE,EACHtF,MAAO,mBACL,MACHnB,EAAMyG,OACH,CACEhG,EAAEgC,EAAW,IAAIzC,EAAMyG,OAAQtF,MAAO,kBACtC,MAEd,EAEVxB,OAAQ,EAAEK,QAAOqB,YACb,GAAIrB,EAAM2K,aAAe3K,EAAMgM,QAAS,CACpC,MAAMzD,EAAQO,EAAS9I,EAAOqB,GAAO,GACrCA,EAAMmJ,UAAa7B,OAAO3E,MAAMuE,UAAUA,CAC7C,ICrOT6D,EAAe3M,GACX,EAAEO,QAAOsB,cACLA,EAAS6B,OACH1C,EACE,+BACA,CAACU,MAAOnB,EAAMmB,OAAS,kBACvBV,EACI,WACA,IACOT,EAAMW,KAAO,CAACF,EAAED,EAAMR,IAAU,GACnCS,EAAE,eAAgBT,EAAM2B,WAG7BL,GAELb,EACE,+BACA,CAACU,MAAOnB,EAAMmB,OAAS,iBAAkBF,QAASjB,EAAM2C,SACxD,IACO3C,EAAMW,KAAO,CAACF,EAAED,EAAMR,IAAU,GACnCS,EAAE,eAAgBT,EAAM2B,UCxBjC,SAASlC,EAAcC,EAAMC,EAAQC,EAAUC,EAAUC,GACpE,MAAO,IACAJ,GAAQ,CAACA,WACTC,GAAU,CAACA,aACXC,GAAY,CAACA,eACbE,GAAY,CAACA,eACbD,GAAY,CAACA,YAExB,CCHG,MAACwM,EAAe5M,GACX,EAAEO,QAAOqB,WAAWZ,GAAGT,EAAMsM,MAAQ,IAAM,YAActM,EAAMuM,QAAU,eAAiB,IACtF,CACIpL,MAAOnB,EAAMmB,MACbQ,KAAM3B,EAAM2B,KACZd,MAAOb,EAAMa,OAAS,KACtBI,QAAS,KACLI,EAAMmL,SAAWnL,EAAMmL,QACnBxM,EAAMyL,UACNzL,EAAMyL,SAASpK,EAAMmL,SAEzB/L,EAAE6B,QAAQ,GAGlBtC,EAAMuC,MACA,IACKvC,EAAM2B,KAAO,CAAClB,EAAE,qBAAsBT,EAAMuM,QAAU,CAAC,eAAgBvM,EAAMuM,SAAW,CAAA,EAAIvM,EAAM2B,OAAS,GAC9GlB,EAAED,EAAM,CAACU,UAAW,cAAeP,KAAMU,EAAMmL,QAAU,YAAc,gBAEzE,CACE/L,EAAED,EAAM,CAACU,UAAW,cAAeP,KAAMU,EAAMmL,QAAU,YAAc,kBACpExM,EAAM2B,KAAO,CAAClB,EAAE,qBAAsBT,EAAMuM,QAAU,CAAC,eAAgBvM,EAAMuM,SAAW,CAAA,EAAIvM,EAAM2B,OAAS,OAE1H,EAAE3B,QAAOqB,YACLA,EAAMmL,QAAUnL,EAAMoL,SAAWzM,EAAMwM,OAAO,GAElD,KACA,MACA,EAAExM,QAAOqB,YACDrB,EAAMwM,UAAYnL,EAAMoL,WACxBpL,EAAMmL,QAAUnL,EAAMoL,SAAWzM,EAAMwM,QACvC/L,EAAE6B,SACL,ICnCb,IACCoK,EAED,SAASC,EAAcjH,GACY,mBAAvBgH,IACVA,IACAA,OAAqB3L,GAEtB2E,EAAUkH,MAAMC,QAAU,cACnBC,EAAaxK,MACrB,CAMA,SAASwK,EAAahL,EAASiL,GAAa,EAAOC,EAAe,kBAEjE,MAAMtH,EAAYC,SAASC,eAAe,mBAc1C,GAbAF,EAAUgC,UAAU7C,OAAO,WAA6B,mBAAjBmI,GAEnCD,IAEHL,EAAqBK,EAErBrH,EAAUzE,QAAWc,IACI,oBAApBA,EAAML,OAAOoJ,IAChB6B,EAAcjH,EACd,IAIE5D,EAOJ,cANOgL,EAAaxK,YACJ,OAAZR,EACH4D,EAAUkH,MAAMC,QAAU,OAE1BF,EAAcjH,IAKhBA,EAAUkH,MAAMC,QAAU,OAE1BC,EAAaxK,OAAS,KACrB7B,EAAEsF,OACDL,EACAjF,EAAEuM,EAAc,CACfhM,KAAM,cACN,kBAAmB,aACnB,cAAc,GACZ,CACiB,mBAAZc,EAAyBA,IAAYA,IAE7C,EAGFgL,EAAaxK,QACd,CAEA,SAAS2K,IACR,MAAMvH,EAAYC,SAASC,eAAe,mBAC1C,MAAgC,SAA5BF,EAAUkH,MAAMC,UACnBF,EAAcjH,IACP,EAGT,CCkDA,SAASwH,EAAaC,EAAS3I,EAAM2H,EAASiB,GAE1C,OAAO,IAAIC,SAASC,IAIhB,SAASC,EAAahF,GAClBiF,EAAoB,MACpB,IACIF,EAAQ/E,EACX,CAAC,MAAOd,GAER,CACJ,CAED,MACIgG,EA9GY,EAACC,EAAUC,KAC/B,MAAMC,EAAS,GACf,GAAID,EAAQ,IAAK,MAAME,KAAOpK,OAAOwE,KAAK0F,GAAaA,EAAOE,IAAMD,EAAOzH,KAAK,IAAM0H,GACtF,OAAQH,GAAY,IAAME,EAAOE,KAAK,GAAG,EA2GvBC,CAAgB,iBAAkB,CACxC,YAbRX,EAAUA,GAAW,IAaOY,QACpB,SAAUb,GAAWA,EAAQzF,UAAUC,SAAS,SAChD,UAAWwF,GAAWA,EAAQzF,UAAUC,SAAS,cAGzD6F,EACI/M,EAAE,CACEf,KAAM,IAAMe,EACRgN,EACA,CACIxM,QAAUc,IAEN,GAA8B,UAA1BA,EAAML,OAAOuM,SACb,OAGJ,MACIxH,EAAS1E,EAAML,OAAOwM,aAAa,eAEnCzH,EACA8G,EAAa,CACTJ,UACA3I,OACAiC,WAGJ+G,EAAoB,KACvB,GAGT,IACOhJ,EAAK3D,MAAQ,CAACJ,EAAE,KAAM,CAACqK,GAAI,cAAetG,EAAK3D,QAAU,MACzDsL,EAAQpJ,KAAI0D,GAA2B,SAAhBA,EAAOT,KAC3BvF,EACE,eACA,CACI8H,MAAO9B,EAAO8B,OAAS,GACvBvC,KAAM,OACNqF,YAAa5E,EAAO6E,MAAQ,GAC5B1L,SAAU,EAAE0J,SAASA,EAAIc,QACzBwB,QAAUuC,IACa,KAAfA,EAAGC,SACHb,EAAa,CAACJ,UAAS3I,OAAMiC,UAChC,EAELgF,SAAW0C,IACPA,EAAGzM,OAAO2M,OACVd,EAAa,CACTJ,UACA3I,OACAiC,SACA8B,MAAO4F,EAAGzM,OAAO6G,OACnB,IAIZ9H,EACEW,EACA,IACOqF,EACHxF,QAAS,IAAMsM,EAAa,CACxBJ,UACA3I,OACAiC,YAGRA,EAAO6H,gBAK3B,EACH,GAET,CClNA,MAGIC,EAAQC,OAAOC,gBACTD,OAAOC,gBAFAC,GAAMC,KAAKnG,MAAMmG,KAAKC,UAAUF,IC+FjD,SAASG,EAAWhO,EAAO0H,EAAO+C,EAAM7E,EAAQpF,EAAQ,IACpDa,YAAW,IAAMgL,EACbvH,SAASmJ,KACT,CAACjO,SACD,CACI,CACImF,KAAM,OACNsF,OACA/C,WAIPnG,MAAK,EAAEmG,MAAOE,MACXpH,EAAM0N,WAAa7C,OAAOzH,KAAKC,OACxB+B,EAAOgC,OACd,IACZ,CAEA,MAaIuG,EAAa,CACT,CAAC,iBAAkB,KAAM,CAAC,WAAY,KAAM,KAAM,KAAM,KAAM,OAb1C,GAcpB,CAAC,uBAAwB,KAAM,CAAC,WAbd,GAclB,CAAC,oBAAqB,KAAM,CAAC,aAbN,GAcvB,CAAC,qBAAsB,SAAU,CAAC,SAAU,OAAQ,SAb1B,GAaiE,GAC3F,CAAC,gBAAiB,KAAM,CAAC,YARP,GASlB,CAAC,cAAe,MAAO,CAAC,SAAU,SAAU,SAAU,SAAU,SAAU,SAdlD,GAexB,CAAC,cAAe,MAAO,CAAC,OAAQ,OAAQ,OAAQ,MAAO,QAAS,OAAQ,MAdlD,GAetB,CAAC,eAAgB,MAAO,CAAC,QAdH,GAetB,CAAC,iBAAkB,MAAO,CAAC,SAXH,IAYxB,CAAC,cAAe,MAAO,CAAC,QAAS,QAAS,QAfnB,OAesDjO,GAAW,GACxF,CAAC,mBAAoB,MAAO,CAAC,OAfD,IAkBhCkO,EAAiBxP,GACb,EAAEO,WAAWS,EAAE,2BAA4BT,EAAMa,SAErDqO,EAAkBzP,GACd,EAAEO,YAEE,MACIgG,KAACA,EAAO,UAASmJ,KAAEA,EAAIC,QAAEA,EAAOvO,MAAEA,EAAKuM,QAAEA,GAAWpN,EACpDqP,EAAQF,EAAKtO,OAAOyO,OAAOnM,QAAUgM,EAAKI,aAAaD,OAAOnM,OAC9DqM,EAAWpC,GAAWA,EAAQoC,SAElC,OAAO/O,EAAE,gCAAiC,IACnCT,EAAMa,MAAQ,CACbJ,EAAEwO,EAAgB,CACdpO,WACE,GACVJ,EAAE,+CAAgD,IAC3CT,EAAMyP,OAAS,CACdhP,EAAEiP,EAAQ,CACNvO,MAAO,gDACPP,KAAM,EACND,KAAM,cACNgB,KAAM3B,EAAMyP,UAEhB,GACJhP,EACI,+BACA,CAAC,aAAcuF,EAAO,SACtBvF,EAAE6J,EAAa,CACXnJ,MAAO,iBAAmBkO,EAAQ,QAAU,WAC5C9G,MAAO4G,EAAKtO,MACZqK,UAAW,GACXO,SAAWkE,IACPR,EAAKtO,MAAQ8O,EACblP,EAAE6B,QAAQ,QAInBkN,EAAW,GACR,CACE/O,EACI,+BACA,CAAC,aAAc,eACfA,EAAE6J,EAAa,CACXnJ,MAAO,iBAAmBgO,EAAKI,YAAc,QAAU,WACvDhH,MAAO4G,EAAKI,YACZrE,UAAW,IACXN,OAAO,EACPC,aAAa,EACbY,SAAWkE,IACPR,EAAKI,YAAcI,EACnBlP,EAAE6B,QAAQ,KAItB7B,EACI,8BACA,CAAC,aAAc,QACfA,EAAE6J,EAAa,CACXnJ,MAAO,eACPoH,MAAO4G,EAAKS,KACZ1E,UAAW,IACXO,SAAWkE,IACPR,EAAKS,KAAOD,EAASE,cAChB/M,MAAM,KACNgL,KAAK,KACLhL,MAAM,KACNgN,QAAQC,GAAQA,EAAI5M,SACpB2K,KAAK,IAAI,KAI1BrN,EACI,8BACA,CAAC,aAAc,iBACfA,EAAE6J,EAAa,CACXnJ,MAAO,eACPoH,MAAO4G,EAAKa,OAAS,GACrB1E,KAAM,aACNJ,UAAW,GACXO,SAAWkE,KACPA,EAAWA,EAASL,SAEe,IAA3BK,EAASM,QAAQ,OACjBd,EAAKa,MAAQL,EAASL,eAGnBH,EAAKa,KACf,MAKrBvP,EACI,8BACA,CAAC,aAAc,uBACfA,EAAE6J,EAAa,CACXnJ,MAAO,eACPoH,MAAO4G,EAAKe,OACZ5E,KAAM,cACNJ,UAAW,IACXO,SAAWkE,IACPR,EAAKe,OAASP,CAAQ,KAKlClP,EACI,8BACA,CAAC,aAAc,0BACfA,EAAE6J,EAAa,CACXnJ,MAAO,eACPmK,KAAM,cACN/C,MAAO4G,EAAK3N,KACZ0J,UAAW,IACXO,SAAWkE,IACPR,EAAK3N,KAAOmO,CAAQ,KAIhClP,EACI,8BACA,CAAC,aAAc,iBACfA,EAAE6J,EAAa,CACXnJ,MAAO,eACPoH,MAAO4G,EAAKgB,OACZ7E,KAAM,cACNJ,UAAW,IACXO,SAAWkE,IACPR,EAAKgB,OAASR,CAAQ,KAKlClP,EACI,iCACAA,EAAEgC,EAAW,CACTtB,MAAO,8CACPQ,KAAM,QAAUqE,EAChBrD,QAAS,KAEWwM,EAAKtO,OAAOyO,OAAOnM,SAAWqM,GAAYL,EAAKI,aAAaD,OAAOnM,SAG/EqK,EAAoB,MACpB4B,EAAQD,IAER/J,EAAac,IAAI,uCACpB,QAKnB,IAiBVkK,EAAiB3Q,GACb,EAAEO,YAEE,MAEIqQ,WAACA,EAAUC,OAAEA,EAAMC,iBAAEA,EAAgBC,MAAEA,EAAKC,WAAEA,EAAUC,QAAEA,GAAW1Q,EACrE2Q,EAAY,GACZC,EAAkB,GAClBhN,EAAQ4M,EACFxB,EACAA,EAAWc,QAAQe,IAEjB,MACI,CAAGC,EAAeC,EAAUxQ,EAAOyQ,GAAgBH,EACnDnP,EAASoP,EAAgBR,EAAOQ,GAAiBR,EACjDW,EAAaD,EAAeP,EAAaJ,EACzCF,EAASW,EAAgBG,EAAWH,GAAiBG,EAEzD,IAAIC,GAAQ,EAEZ,GAAIH,EAAS5N,OAAQ,CAEjB,IAAK,MAAMe,KAAW6M,EACdrP,QAA8BX,IAApBW,EAAOwC,KACjBgN,EAAQP,EAAUpQ,IAAS,QAEPQ,IAApBoP,EAAOjM,KACPgN,EAAQN,EAAgBrQ,IAAS,GAGzC,OAAO2Q,CACnC,CAKwB,OAJIA,GAAQ,EACRN,EAAgBrQ,KAAW4P,EAC3BQ,EAAUpQ,KAAWmB,EAElBwP,CAAK,IAIxB,OAAOzQ,EACH,6BACAmD,EAAMT,OACAS,EAAMb,KAAK8N,IAET,MACKhQ,EAAOiQ,EAAeC,EAAUI,EAAWH,EAAcI,GAAaP,EACvEnP,EAAS8O,OAAQzP,EAAY+P,EAAgBR,EAAOQ,GAAiBR,EACrEW,EAAaD,EAAeP,EAAaJ,EACzCF,EAASK,OAAQzP,EAAY+P,EAAgBG,EAAWH,GAAiBG,EA8BzEI,EAAcb,GAASG,EAAUQ,GACjCG,EAAoBV,EAAgBO,GAExC,MAAO,IACAZ,EAAmB,CAClB9P,EAAE4L,EAAc,CACZxL,MAAO,WAAWgQ,EAAK,kBACvB1P,MAAO,yBAA2BoP,EAAiBY,GAAa,UAAY,IAC5E3E,UAAW+D,EAAiBY,GAC5B1F,SAAW8F,IACPhB,EAAiBY,IAAcZ,EAAiBY,GAChD1Q,EAAE6B,SACFtC,EAAMsC,QAAUtC,EAAMsC,QAAQ,IAGtC7B,EAAE,SAAU,CAACU,MAAOkQ,EAAc,QAAU,WAAYxQ,IACxD,MACAb,EAAMwQ,MAWN,GAXc,CACd/P,EAAEgC,EAAW,CACTtB,MAAO,SAAWmQ,EAAoB,QAAU,WAChD3Q,KAAM,OAAQE,MAAO,QAAQA,uBAC7B8B,QAxCQ,KACZ,GAAIoO,EAAS5N,OAAQ,CACb2N,IAAkBR,EAAOQ,KAAgBR,EAAOQ,GAAiB,IACrE,MAAMU,EAAgBV,EAAgBR,EAAOQ,GAAiBR,EAC9D,IAAK,MAAMmB,KAASV,EAChB,QAAsBhQ,IAAlBoP,EAAOsB,GAAsB,CAC7B,MAAMC,EAAcN,GAAaV,EAAUA,EAAQc,EAAcC,GAAQN,GAAahB,EAAOsB,GAC7FD,EAAcC,GAASlD,EAAMmD,EAChC,CAER,MAAM,GAAwB,IAApBX,EAAS5N,QAAgB2N,QACjB/P,IAAXoP,EAAsB,CACtB,MAAMuB,EAAcN,GAAaV,EAAUA,EAAQP,EAAQgB,GAAahB,EACxEG,EAAOQ,GAAiBvC,EAAMmD,EACjC,CAEL1R,EAAMsC,QAAUtC,EAAMsC,SACtB8C,EAAac,IAAI,WAAWrF,uBAA2B,IAyBvDJ,EAAEgC,EAAW,CACTtB,MAAO,UAAYkQ,EAAc,GAAK,oBACtC1Q,KAAM,QAASE,MAAO,UAAUA,cAChC8B,QAAS,IAAM0O,GAvDP,MACZ,GAAIN,EAAS5N,OACT,IAAK,MAAMsO,KAASV,SACTrP,EAAO+P,QAES,IAApBV,EAAS5N,QAAgB2N,UACzBR,EAAOQ,GAElB9Q,EAAMsC,QAAUtC,EAAMsC,QAAQ,EA+CIqP,MAGtClR,EAAE,cACL,IAGHA,EAAE,KAAM,mBACjB,+CA/Zb,SAAgBmD,EAAOgO,EAAS,CAC5BjR,KAAM,SAAUkR,SAAU,SAI1B,MACIlR,KAACA,EAAIE,MAAEA,EAAK4Q,MAAEA,EAAKI,SAAEA,EAAQC,OAAEA,EAAUC,GAAMA,GAAKH,EACpDxE,EAAUxJ,EAAMb,KAAI,CAACyB,EAAMjE,KAAW,CAClCI,KAAM8Q,GAASjN,EAAK7D,MAAQA,EAE5B2N,QAASwD,EAAOL,EAAQjN,EAAKiN,GAASjN,EAAMA,GAE5C7B,QAAU8E,GAAMoK,EAASrN,EAAMiD,EAAGlH,OAGtCyR,MAAMC,QAAQrO,KAAWA,EAAMT,OAC/BiC,EAAac,IAAI,sBAEjBgH,EACIvH,SAASmJ,KACT,CAACjO,SACDuM,GAEChL,MAAK,EAAEqE,YAAYA,EAAO9D,WAEvC,eAuQmB,CAACwM,EAAMtO,EAAOmF,EAAMoH,EAAU,CAAE,IAAK,IAAIC,SAAQ,CAACC,EAAS4E,KACtE1E,EACI/M,EAAEyO,EAAiB,CACfC,OACAnJ,OACAnF,QACAuM,UACAgC,QAAU+C,GAAY7E,EAAQ6E,MAElC,KACID,EAAO,IAAIE,MAAM,aAAa,GAErC,+BAjRT,SAAuBxO,EAAO6H,EAAU2B,EAAU,CAAA,GAE9C,MACIvM,MAACA,EAAK4Q,MAAEA,EAAK9Q,KAAEA,EAAI0R,QAAEA,EAAOC,SAAEA,EAAQhF,QAAEA,GAAWF,EACnDmF,EAAgBP,MAAMC,QAAQrO,GACxBA,EAAMb,KAAKyB,IAAU,CACnB7D,OAEA2N,QAASmD,EAAQjN,EAAKiN,GAASjN,EAE/B7B,QAAU8E,GAAMgE,EAASjH,EAAMiD,OAEjChE,OAAOwE,KAAKrE,GACTb,KAAKF,IAAS,CACXlC,KAAMiD,EAAMf,GAAKlC,MAAQA,EACzB2N,QAAS1K,EAAMf,GAAKyL,SAAWzL,EAC/BF,QAAU8E,GAAMgE,EACZ6B,QAAgCvM,IAArB6C,EAAMf,GAAK0F,MAChB3E,EAAMf,GAAK0F,MACX3E,EAAMf,GACZ4E,OAGhBuK,MAAMC,QAAQrO,KAAWA,EAAMT,OAC/BiC,EAAac,IAAI,sBAEjBgH,EACIvH,SAASmJ,KACT,CAACjO,SACD,IACOwR,IAAYZ,EACT,CACE,CACI9Q,KAAM,OACN2N,QAAS+D,EACT1P,QAAS,IAAMkM,EACXwD,EACA,GACAC,GACC/J,IACOA,GACIA,GAASA,EAAM+G,SACf7D,EAASlD,GACT9H,EAAE6B,SAET,MAKf,MACHiQ,IAGNnQ,MAAK,EAAEqE,YAAYA,EAAO9D,YAC1B6P,SAAQ,QAGrB,eA6UmB,CAAClC,EAAQD,EAAYjD,EAAU,CAAE,IAAK,IAAIC,SAAQ,CAACC,EAAS4E,KACvE1E,GACI,IAAM/M,EAAE2P,EAAgB,IACjBhD,EACHkD,SACAD,aACA/N,OAAQ,IAAMkL,EAAoBlL,aAEtC,KACI4P,EAAO,IAAIE,MAAM,aAAa,GAErC,MCjbT,MAACK,EAAYhT,GACX,EAAGO,QAAOsB,cAAeb,EACxB,aACA,CACCU,MAAOnB,EAAMmB,OAAS,UACnBnB,EAAM2C,SAAW,CAAE1B,QAASjB,EAAM2C,UAEtC,CACClC,EAAE,aAAcT,EAAM2B,SAClBL,GAAY,OCGhBoR,IAAUC,UAAUC,UAAUC,MAAM,qBAMxC,ICpBIC,EDqBAC,GAAiB,EAGrB,SAASC,EAAMnN,EAAGmF,EAAKD,GACnB,OAAOkI,KAAKjI,IAAIiI,KAAKlI,IAAIlF,EAAGmF,GAAMD,EACtC,CAaO,SAASmI,EAASzK,EAAKuC,EAAKD,EAAKE,GACpC,GAAIF,EAAMC,GAAO,EACb,OAAOA,EAEX,GAAIC,GAAQ,EACR,OAAO+H,EAAMvK,EAAKuC,EAAKD,GAE3B,MACIoI,EAAQF,KAAKG,MAAMrI,EAAMC,GAAOC,GAEpC,OAAO+H,EADChI,EAAMiI,KAAKI,MAAMF,GAAS1K,EAAMuC,IAAQD,EAAMC,IAAQC,EAC9CD,EAAKD,EACzB,CAIA,SAASuI,IAEF,IAACC,EACAC,EACAC,EACAC,EACAC,EACAC,EAOAC,EAUApI,EACAqI,EAjBAC,EAvDG,EAwDHC,GAAU,EAEVC,GAAc,EACdC,EAAe,EACfC,EAAa,EAKbnJ,EAAM,EACND,EAAM,GACNxC,EAAQ,EAER0C,EAAO,EACPmJ,EAAc,aA2BlB,SAASC,EAAmBC,EAAGC,GAE3B,IACIC,EACAC,EAEgB,aAAhBL,GAEAI,EAAYZ,EAAMc,OAASd,EAAMe,IACjCF,EAAQb,EAAMc,OAASH,IAGvBC,EAAYZ,EAAMrR,MAAQqR,EAAMgB,KAChCH,EAAQH,EAAIV,EAAMgB,MAGtBH,EAAQzB,EAAMyB,EAAO,EAAGD,GACxB,MAAM/L,EAAMyK,EAAUuB,EAAQD,GAAczJ,EAAMC,GAAOA,EAAKA,EAAKD,EAAKE,GAExE,OADA4J,EAAUpM,GACHA,CACV,CAsCD,SAASqM,EAAQR,EAAGC,EAAGxS,GACnB,OAAOkS,EAjFX,SAAyBK,EAAGC,GAExBP,EAAUH,GAAW,EACrBD,EAAQJ,EAAMuB,wBACd,MAAMtM,EAAM4L,EAAmBC,EAAGC,GAC9B9L,IAAQF,IACRA,EAAQE,EACJqL,IAA4B,IAAlBA,EAAOvL,IACjB9H,EAAE6B,SAGb,CAuES0S,CAAgBV,EAAGC,IArED9M,EAsEC1F,EApEzBiS,GAAU,EACVH,GAAW,EACXD,EAAQJ,EAAMuB,6BAETE,GAASxN,EAAE/F,OAAOwT,uBAN3B,IAA4BzN,EAAGwN,CAuE9B,CAED,SAASE,EAAWb,EAAGC,EAAGxS,GACtB,OAAO8R,EACDQ,EAAmBC,EAAGC,GA5ChC,SAAyBD,EAAGC,EAAGxS,GAE3B,MACIqT,EAASrT,EAAM6F,SACTsM,EACCnS,EAAMsT,SAAWtT,EAAMuT,QACpB,EAAIpB,EACJC,EAEd,IACIM,EAQAc,EALAd,EADgB,aAAhBL,EACQrS,EAAMyT,WAAa,EAEnBzT,EAAM0T,WAAa,EAI/B,IAAIC,EAAIzK,EAAO,EAAIA,GAAQF,EAAMC,GAAO,IAExC,GAAIyJ,EAAQ,EACRc,EAAStC,KAAKlI,IAAIxC,EAAQmN,EAAIN,EAASX,EAAOzJ,OAC3C,MAAIyJ,EAAQ,GAGf,OAAOlM,EAFPgN,EAAStC,KAAKjI,IAAIzC,EAAQmN,EAAIN,EAASX,EAAO1J,EAGjD,CAKD,OAHAwK,EAASrC,EAASqC,EAAQvK,EAAKD,EAAKE,GAEpC4J,EAAUU,GACHA,CAEV,CAWSI,CAAgBrB,EAAGC,EAAGxS,EAC/B,CAGD,SAAS6T,EAAYnO,GAtKb,IAuKAsM,IAGJA,EA3KI,EA4Ka,IAAbtM,EAAEoO,SAGNrH,OAAOsH,iBAAiB,YAAaC,GACrCvH,OAAOsH,iBAAiB,UAAWE,GACnClB,EAAQrN,EAAEwO,QAASxO,EAAEyO,QAASzO,IACjC,CAED,SAASsO,EAAYtO,GACjBA,EAAE0O,iBACFC,EAAO3O,EAAEwO,QAASxO,EAAEyO,QAASzO,EAChC,CAED,SAASuO,EAAUvO,GACf+G,OAAO6H,oBAAoB,YAAaN,GACxCvH,OAAO6H,oBAAoB,UAAWL,GACtCM,EAAU7O,EAAEwO,QAASxO,EAAEyO,QAASzO,EACnC,CAED,SAAS8O,EAAa9O,GAClB,GAhMI,IAgMAsM,EACA,OAEJR,EAAMuC,iBAAiB,YAAaU,GACpCjD,EAAMuC,iBAAiB,WAAYW,GACnC,MAAMC,EAAIjP,EAAEkP,eAAe,GAC3B7B,EAAQ4B,EAAET,QAASS,EAAER,QAASzO,EACjC,CAED,SAAS+O,EAAY/O,GACjBA,EAAE0O,iBACF,MAAMO,EAAIjP,EAAEkP,eAAe,GAC3BP,EAAOM,EAAET,QAASS,EAAER,QAASzO,EAChC,CAED,SAASgP,EAAWhP,GAChB8L,EAAM8C,oBAAoB,YAAaG,GACvCjD,EAAM8C,oBAAoB,WAAYI,GACtC,MAAMC,EAAIjP,EAAEkP,eAAe,GAC3BL,EAAUI,EAAET,QAASS,EAAER,QAASQ,EACnC,CAED,SAASE,EAAUnP,GAEf,MAAMoP,EAAIpP,EAAE2G,QACZ,IAAImH,EAEJ,GAAU,KAANsB,EAAU,CACVpP,EAAE0O,iBACF,IAAIT,EAAIzC,KAAKlI,KAAKA,EAAMC,GAAO,GAAIC,GAC/ByK,GAAK,IACLA,EAAI,GAERH,EAASrC,EAAS3K,EAAQmN,EAAG1K,EAAKD,EAAKE,EACnD,MAAe,GAAU,KAAN4L,EAAU,CACjBpP,EAAE0O,iBACF,IAAIT,EAAIzC,KAAKlI,KAAKA,EAAMC,GAAO,GAAIC,GAC/ByK,GAAK,IACLA,EAAI,GAERH,EAASrC,EAAS3K,EAAQmN,EAAG1K,EAAKD,EAAKE,EACnD,MAAe,GAAU,KAAN4L,EACPpP,EAAE0O,iBACFZ,EAASxK,OACN,GAAU,KAAN8L,EACPpP,EAAE0O,iBACFZ,EAASvK,OACN,GAAU,KAAN6L,GAAkB,KAANA,EAAU,CAC7BpP,EAAE0O,iBACF,IAAIT,GAAKzK,EAAO,EAAIA,GAAQF,EAAMC,GAAO,KAAOvD,EAAEG,SAAW,IAAQH,EAAE6N,SAAW7N,EAAE4N,QAAW,EAAI,GACnGE,EAAStC,KAAKlI,IAAIxC,EAAQmN,EAAG1K,EAChC,MAAM,GAAU,KAAN6L,GAAkB,KAANA,EAAU,CAC7BpP,EAAE0O,iBACF,IAAIT,GAAKzK,EAAO,EAAIA,GAAQF,EAAMC,GAAO,KAAOvD,EAAEG,SAAW,IAAQH,EAAE6N,SAAW7N,EAAE4N,QAAW,EAAI,GACnGE,EAAStC,KAAKjI,IAAIzC,EAAQmN,EAAG3K,EACzC,MAAyB,KAAN8L,IACPtB,GAAUxK,EAAMC,GAAO,GAEL,iBAAXuK,GAAuBA,IAAWhN,IAG7CA,EAAQgN,EACRV,EAAUtM,GACNkD,IAAgC,IAApBA,EAASlD,IACrB9H,EAAE6B,SAET,CAED,SAAS8T,EAAO9B,EAAGC,EAAGxS,GAClB,IAAKiS,EACD,OAGJ,MAAMvL,EAAM0M,EAAWb,EAAGC,EAAGxS,GACzB0G,IAAQF,IACRA,EAAQE,EACJqL,IAA4B,IAAlBA,EAAOvL,IACjB9H,EAAE6B,SAGb,CAED,SAASgU,EAAUhC,EAAGC,EAAG9M,GAEhBuM,IAILA,GAAU,EACVzL,EAAQ4M,EAAWb,EAAGC,EAAG9M,GAErBgE,IAAgC,IAApBA,EAASlD,IACrB9H,EAAE6B,SAWDuR,GAAUlO,SAASmR,kBAExB5U,YAAW,WACF8R,IACDD,EA5SL,EA8SF,GAzSU,KA0Sd,CAGD,SAASgD,EAActO,GACnB,IAAIiN,GAAKjN,EAAMuC,IAAQD,EAAMC,GAI7B,MAHoB,aAAhBoJ,IACAsB,EAAI,EAAMA,GAEPxJ,OAAO,IAAMwJ,GAAK,GAC5B,CAGD,SAASb,EAAUtM,GACf,MACIyO,EAAKD,EAAcxO,GACnB0O,EAAMF,EAAchM,EAAMxC,EAAQyC,GAElB,aAAhBoJ,GACAT,EAAS/G,MAAM+H,IAAMqC,EACrBvD,EAAO7G,MAAMsK,OAASF,EACtBtD,EAAO9G,MAAMsK,OAASD,IAEtBtD,EAAS/G,MAAMgI,KAAOoC,EACtBvD,EAAO7G,MAAMuK,MAAQF,EACrBvD,EAAO9G,MAAMuK,MAAQH,EAE5B,CAGD,SAASI,EAAYpX,GACjBgL,EAAMhL,EAAMgL,IACZD,EAAM/K,EAAM+K,IACZE,EAA8B,iBAAfjL,EAAMiL,MAAsBtC,OAAO3E,MAAMhE,EAAMiL,MACtB,EAAlC+H,EAAMhT,EAAMiL,KAAM,EAAGF,EAAMC,GACjCoJ,EAAoC,aAAtBpU,EAAMoU,YAA6B,WAAa,aAC9D3I,EAAWzL,EAAMyL,SACjBqI,EAAS9T,EAAM8T,OACY,iBAAhB9T,EAAMuI,QACbA,EAAQyK,EAAMhT,EAAMuI,MAAOyC,EAAKD,IAEpCkJ,GAAejU,EAAMqX,SACrBnD,EAAgBlU,EAAMoV,QAAUpV,EAAMoV,OAAO,IAAO,EACpDjB,EAAcnU,EAAMoV,QAAUpV,EAAMoV,OAAO,IAAO,CAErD,CAGD,MAAO,CACHxV,SAAU,EAAEI,QAAOsJ,UAvUlBoJ,IAASK,IAGdvE,OAAOsH,iBAAiB,aAAa,WACzC,IACI/C,GAAiB,GAoUTqE,EAAYpX,GACZuT,EAAQjK,EACRkK,EAAQD,EAAM+D,cAAc,sBAC5B7D,EAASD,EAAM8D,cAAc,wBAC7B5D,EAASF,EAAM8D,cAAc,wBAC7B3D,EAAWH,EAAM8D,cAAc,yBAC/B/D,EAAMuC,iBAAiB,YAAaF,GACpCrC,EAAMuC,iBAAiB,aAAcS,GACrChD,EAAMuC,iBAAiB,UAAWc,EAAU,EAEhD/W,SAAU,WACN2O,OAAO6H,oBAAoB,YAAaN,GACxCvH,OAAO6H,oBAAoB,UAAWL,GACtCzC,EAAM8C,oBAAoB,YAAaT,GACvCrC,EAAM8C,oBAAoB,aAAcE,GACxChD,EAAM8C,oBAAoB,YAAaG,GACvCjD,EAAM8C,oBAAoB,WAAYI,GACtClD,EAAM8C,oBAAoB,UAAWO,EACxC,EACDlX,KAAM,UAAUM,MAACA,EAAKsB,SAAEA,IAEpB8V,EAAYpX,GACZuI,EAAQ2K,EAAS3K,EAAOyC,EAAKD,EAAKE,GAClC,MAAMsM,EAAI,CACNpW,MAAO,uBAAyBnB,EAAMqX,SAAW,eAAiB,MAAkB,IAAV9O,EAAc,SAAWA,EAAQ,EAAI,YAAc,aAA8B,MAAfvI,EAAMmB,MAAgB,IAAMnB,EAAMmB,MAAQ,IACtLqW,SAAU,IACVxW,KAAM,SACN,gBAAiBkL,OAAOlB,GACxB,gBAAiBkB,OAAOnB,GACxB,gBAAiBmB,OAAO3D,GACxB,mBAAoB6L,GAEpBpU,EAAM8K,KACNyM,EAAEzM,GAAK9K,EAAM8K,IAGb9K,EAAMyX,iBACNF,EAAE,mBAAqBvX,EAAMyX,gBAE7BzX,EAAM0X,WACNH,EAAE3K,MAAQ,CAAC+K,cAAe,QAC1BJ,EAAE,iBAAmB,QAEzB,MACIP,EAAKD,EAAcxO,GACnB0O,EAAMF,EAAchM,EAAMxC,EAAQyC,GACtC,IACI4M,EACAC,EACAC,EAWJ,MAToB,aAAhB1D,GACAwD,EAAc,CAACjD,IAAKqC,GACpBa,EAAY,CAACX,OAAQF,GACrBc,EAAY,CAACZ,OAAQD,KAErBW,EAAc,CAAChD,KAAMoC,GACrBa,EAAY,CAACV,MAAOF,GACpBa,EAAY,CAACX,MAAOH,IAEjBvW,EAAE,MAAO8W,EAAG9W,EAAE,MAAO,CAACU,MAAO,2BAA4BV,EAAE,MAAO,CACrEU,MAAO,4BACPyL,MAAOiL,IACPpX,EAAE,MAAO,CACTU,MAAO,4BACPyL,MAAOkL,IACPrX,EAAE,MAAO,CACTU,MAAO,6BACPyL,MAAOgL,GACRtW,MAActB,EAAM+X,MAAQtX,EAAE,QAAS,CACtCuF,KAAM,SACN+R,KAAM/X,EAAM+X,KACZxP,MAAO2D,OAAO3D,KAErB,EAET,CCjbG,MAACyP,EAAmB3W,IAQf,MAEI4W,EAAgB5W,EAAMkH,MAAQlH,EAAM6W,OAASjF,KAAKG,KAAK/R,EAAMkH,MAAQlH,EAAM6W,QAAU,EAErFC,EAAiB9W,EAAM+W,OAAS,GAAK/W,EAAMkH,MAAQlH,EAAM+W,OAAUnF,KAAKoF,IAAIpF,KAAKG,KAAK/R,EAAMkH,MAAQlH,EAAM+W,SAAW,EAErHE,EAAarF,KAAKjI,IAAIiI,KAAKlI,IAAIoN,EAAeF,GAAgB5W,EAAM4W,eAEpE5W,EAAMkX,gBAAkBD,IACxBjX,EAAMkX,cAAgBD,EACtB7X,EAAE6B,SACL,EAELkW,EAAsBnX,GAEdA,EAAMkH,OAAUlH,EAAM6W,OAAS7W,EAAMkX,cAAiB,IACnDlX,EAAM4W,cAAgB,GACtB5W,EAAMkX,eAAiBlX,EAAM4W,cAAgB,GAEhD5W,EAAMkX,iBACC,GAEPlX,EAAM+W,OAAS,EAAUK,EAAsBpX,QAAnD,EAEJoX,EAAyBpX,IACrB,GAAIA,EAAMkH,OAAUlH,EAAM+W,OAAS/W,EAAMkX,cAAiB,IACnDlX,EAAM4W,cAAgB,GACtB5W,EAAMkX,eAAiBlX,EAAM4W,cAAgB,EAGhD,OADA5W,EAAMkX,iBACC,CACV,EAELG,EAAc,CAEV/Y,OAAQ,EAAEK,QAAOqB,YACboC,OAAOC,OAAOrC,EAAO,CACjBkH,MAAOvI,EAAMuI,OAAS,EACtBoQ,QAAS3Y,EAAMuI,OAAS,EACxB2P,OAAQlY,EAAM+K,IACdqN,OAAQpY,EAAMgL,IACduN,cAAe,EACfN,cAAejY,EAAMsY,YAAc,EACnCxN,GAAI,IAAMrG,KAAKC,QAGfrD,EAAM4W,cAAgB,IAClB5W,EAAMkH,MAAQvI,EAAM+K,IACpB1J,EAAMkX,cAAgBtF,KAAKG,KAAK/R,EAAMkH,MAAQvI,EAAM+K,KAC7C/K,EAAMgL,IAAM,GAAK3J,EAAMkH,MAAQvI,EAAMgL,MAC5C3J,EAAMkX,cAAgBtF,KAAKoF,IAAIpF,KAAKG,KAAK/R,EAAMkH,MAAQvI,EAAMgL,OAEpE,EAELlL,SAAU,EAAEE,QAAOqB,YACf,MACIuX,EAAkB5Y,EAAMsY,YAAc,EACtCO,EAAa7Y,EAAMuI,OAAS,EAE5BlH,EAAM6W,SAAWlY,EAAM+K,KAAO1J,EAAM4W,gBAAkBW,GAEtDnV,OAAOC,OAAOrC,EAAO,CACjB6W,OAAQlY,EAAM+K,IACdqN,OAAQpY,EAAMgL,IACdiN,cAAeW,EACfrQ,MAAOvI,EAAMuI,MACboQ,QAASE,IAERL,EAAmBnX,KACpBW,aAAaX,EAAM4E,OACnB5E,EAAM4E,MAAQ/D,WAAW8V,EAAiB,IAAM3W,IAGpDZ,EAAE6B,UAEKjB,EAAMsX,UAAYE,IAEzBpV,OAAOC,OAAOrC,EAAO,CACjBkH,MAAOsQ,EACPF,QAASE,IAGb7W,aAAa8Q,GACbA,EAAU5Q,YAAW,IAAMzB,EAAE6B,UAAU,IAQ1C,EAEL5C,KAAM,EAAEM,QAAOqB,WAAWZ,EACtB,mCAAqCT,EAAMsY,WAAa,EAAI,kBAAoB,IAChF,IACOtY,EAAMmB,OAAS,CAACA,MAAOnB,EAAMmB,OAChCN,MAAOb,EAAMsL,MAAQ,sDAEzB,IACOtL,EAAMa,MAAQ,CAACJ,EAAE,QAAS,CAACU,MAAO,aAAc2X,QAASzX,EAAMyJ,IAAK9K,EAAMa,QAAU,GACvFJ,EAAE6S,EAAc,CACZ7H,SAAWlD,IAEPlH,EAAMkH,MAAQA,GAEIiQ,EAAmBnX,IAEnBA,EAAMkX,cAAgB,IACpCvW,aAAaX,EAAM4E,OACnB5E,EAAM4E,MAAQ/D,WAAW8V,EAAiB,IAAM3W,IAGhDrB,EAAMyL,SACNzL,EAAMyL,SAASlD,GAEf9H,EAAE6B,QACL,EAELwR,OAASvL,GACDA,IAAUlH,EAAMkH,QAChBlH,EAAMkH,MAAQA,EACVvI,EAAM8T,QAAQ9T,EAAM8T,OAAOvL,IACxB,GAIfA,MAAOlH,EAAMkH,OAAS,EACtByC,KAAMhL,EAAMgL,KAAO,GAAK3J,EAAMkX,cAC9BxN,IAAM1J,EAAM6W,OAAS7W,EAAMkX,eAAkB,IAC7CtN,KAAMjL,EAAMiL,MAAQ,EACpBoM,SAAUrX,EAAMqX,SAChBjC,OAAQpV,EAAMoV,QACf,CACC3U,EAAE,cAAeT,EAAM8R,OACjB9R,EAAM8R,OAAOzQ,EAAMkH,MAAOvI,EAAMiL,KAAO,GACvC5J,EAAMkH,MACFvI,EAAMiL,KAAO,EACT5J,EAAMkH,MAAMwQ,QAAQ,GACnB,GAAK9F,KAAK+F,MAAM3X,EAAMkH,OAAU,SAW/D0Q,EAAc,CACVvZ,KAAM,EAAEM,QAAOqB,WAAWZ,EAAEiY,EAAa,CACrCnQ,MAAOvI,EAAMuI,OAAS,EACtByC,IAAKhL,EAAMgL,KAAO,EAClBD,IAAK/K,EAAM+K,KAAO,IAClBE,KAAMjL,EAAMiL,MAAQ,GACpB9J,OAAQnB,EAAM0X,SAAW,YAAc,KAAO1X,EAAMmB,OAAS,IAC7DN,MAAOb,EAAMa,MACbyX,WAAYtY,EAAMsY,WAClBhN,KAAMtL,EAAMsL,KACZwG,OAAQ9R,EAAM8R,OACduF,SAAUrX,EAAMqX,SAChBjC,OAAQpV,EAAMoV,OAGd8D,SAAW3Q,GAAWA,EAAQ,GAAKA,EAAQ,UAC3CuL,OAASvL,IACLlH,EAAM8X,SAAU,EAChB9X,EAAMkH,MAAQA,EACVvI,EAAMyL,UAAUzL,EAAMyL,SAASlD,GAAO,IACnC,GAEXkD,SAAWlD,IACHvI,EAAMoZ,MACN7Q,EAAQ,EACDvI,EAAMqZ,YAAW9Q,EAAQvI,EAAMqZ,WAC1ChY,EAAM8X,SAAU,EAChB9X,EAAMkH,MAAQA,EACVvI,EAAMyL,UAAUzL,EAAMyL,SAASlD,GAAO,IACnC,MClMvB,SAAS+Q,EAAS5X,EAAQ6X,GACtB9Y,EAAE+Y,MACE7T,SAASC,eAAelE,GACxB6X,EAAYE,SAAW,IACvBF,EAAYG,OAEpB"}
1
+ {"version":3,"file":"libui.esm.js","sources":["../src/widgets/Basic.js","../src/widgets/CardieWidget.js","../src/widgets/InputWidget.js","../src/widgets/NoticeWidget.js","../src/util/widgets.utils.js","../src/widgets/SwitchWidget.js","../src/util/widgets.js","../src/util/widgets.core.js","../src/util/util.clone.js","../src/widgets/OverflowUtils.js","../src/widgets/Separator.js","../src/widgets/TitleBarWidget.js","../src/util/mithril-range.js","../src/widgets/RangeWidget.js","../src/app/app.js","../src/util/fuckingconfirm.js"],"sourcesContent":["import m from \"mithril\";\n\nexport function defineWidget(view, oninit, oncreate, onremove, onupdate) {\n return {\n ...view && {view},\n ...oninit && {oninit},\n ...oncreate && {oncreate},\n ...onupdate && {onupdate},\n ...onremove && {onremove}\n }\n}\n\n\n// ------------------------------------------------------------------------\n\nfunction getAttrs(attrs, parentAttrs, panelInitialParams) {\n const data = ((typeof attrs === \"function\") ? attrs(parentAttrs) : attrs) || {};\n if (panelInitialParams) data.initialParams = panelInitialParams;\n return data;\n}\n\nconst\n\n isCurrent = ({currentIndex}, index) => currentIndex === index,\n\n Icon = {\n view: ({attrs}) => m(\n `i.icon.${attrs.pack || \"fas\"}.fa-${attrs.icon || \"cog\"}${attrs.size ? \".fa-\" + attrs.size + \"x\" : \"\"}`,\n {\n title: attrs.icontitle || undefined,\n role: \"presentation\",\n onclick: attrs.onclick || null, ...attrs.iconClass && {class: attrs.iconClass}\n }\n )\n },\n\n Button = {\n view: ({attrs, state, children}) => m((attrs.download || attrs.link) ? \"a.button\" : \"button\", {\n ...attrs.link && {href: attrs.link},\n ...attrs.download && {download: attrs.download},\n ...attrs.target && {target: attrs.target},\n \"aria-label\": attrs[\"aria-label\"] || attrs.title || attrs.text,\n title: attrs.title || attrs[\"aria-label\"],\n class: (attrs.class || \"\") + (state.busy ? \" busy\" : \"\"),\n ...state.error && {\"data-error\": state.error.message},\n ...attrs.onclick && {\n onclick: (event) => {\n clearTimeout(state.debounce);\n state.debounce = setTimeout(() => {\n const result = attrs.onclick(event, attrs);\n if (result && result.then && result.catch) {\n state.busy = true;\n m.redraw();\n result\n .then(() => {\n state.busy = false;\n m.redraw();\n })\n .catch((error) => {\n state.busy = false;\n state.error = error;\n m.redraw();\n });\n }\n }, 25);\n }\n }\n }, [\n ...(attrs.icon && !attrs.right) ? [m(Icon, attrs)] : [],\n ...attrs.text ? [m(\"span.pad-1.pad-h\", {class: attrs.textClass || null}, attrs.text)] : [],\n ...(attrs.icon && attrs.right) ? [m(Icon, attrs)] : [],\n ...children\n ])\n },\n\n ButtonNew = {\n view: ({attrs, state, children}) => m((attrs.download || attrs.link) ? \"a.button\" : \"button\", {\n ...attrs.link && {href: attrs.link},\n ...attrs.download && {rel: \"nofollow\", download: attrs.download},\n ...attrs.target && {target: attrs.target},\n \"aria-label\": attrs[\"aria-label\"] || attrs.title || attrs.text,\n title: attrs.title || attrs[\"aria-label\"],\n class: (attrs.class || \"\") + (state.busy ? \" busy\" : \"\"),\n ...state.error && {\"data-error\": state.error.message},\n ...attrs.onClick && {\n onclick: (event) => {\n clearTimeout(state.debounce);\n state.debounce = setTimeout(() => {\n const result = attrs.onClick(event, attrs);\n if (result && result.then && result.catch) {\n state.busy = true;\n m.redraw();\n result\n .then(() => {\n state.busy = false;\n m.redraw();\n })\n .catch((error) => {\n state.busy = false;\n state.error = error;\n m.redraw();\n });\n }\n }, 25);\n }\n }\n }, [\n ...(attrs.icon && !attrs.right) ? [m(Icon, attrs)] : [],\n ...attrs.text ? [m(\"span.pad-1.pad-h\", {class: attrs.textClass || null}, attrs.text)] : [],\n ...(attrs.icon && attrs.right) ? [m(Icon, attrs)] : [],\n ...children\n ])\n },\n\n Empty = {\n\n view: ({attrs, children}) => m(\n \".flexcol.flexcenter.al-center.grows.emptywidget\",\n {\n ...attrs.class && {class: attrs.class},\n ...attrs.key && {key: attrs.key},\n role: \"presentation\"\n },\n [\n m(Icon, attrs),\n ...attrs.message\n ? [\n m(\".marg-2.marg-v\",\n {\n role: \"status\",\n class: attrs.size > 4 ? \"font-150\" : \"font-100\",\n \"aria-label\": attrs.message\n },\n attrs.message.split(\"\\n\")\n .map((str, idx, all) => all.length === 1 ? str : m(\"p.msg\" + idx, str))\n )\n ]\n : [],\n ...children\n ? [m(\".flexcol.additional\", children)]\n : []\n ]\n )\n },\n\n setItem = (attrs, state, index, params) => {\n\n\n const\n lastIndex = state.currentIndex,\n lastParams = state.currentParams;\n\n if (index === -1) {\n Object.assign(state, {\n current: null,\n currentIndex: -1,\n currentParams: []\n });\n } else {\n Object.assign(state, {\n current: attrs.items[index] || null,\n currentIndex: state.current ? index : -1,\n currentParams: params || []\n });\n }\n\n if (attrs.onSelected) attrs.onSelected(state.current, state.currentParams, state.currentIndex !== lastIndex, lastParams);\n\n m.redraw();\n },\n\n Selector = {\n\n oninit: ({attrs, state}) => {\n\n state = attrs.state || state;\n state.setItem = (index, ...params) => setItem(attrs, attrs.state || state, index, params);\n\n const\n hasState = !isNaN(state.currentIndex),\n selected = hasState ? state.currentIndex : attrs.selected,\n currentIndex = (attrs.items && attrs.items.length)\n ? (selected !== undefined && attrs.items[selected])\n ? selected\n : attrs.noinitial ? -1 : 0\n : -1,\n current = currentIndex !== -1 ? attrs.items[currentIndex] : null;\n\n Object.assign(state, {currentIndex, current});\n\n },\n\n onupdate: ({attrs, state}) => {\n (attrs.state || state).setItem = (index, ...params) => setItem(attrs, attrs.state || state, index, params);\n },\n\n view: ({attrs, state}) => {\n\n state = attrs.state || state;\n const {current} = state;\n\n return m(\n (attrs.element || \"widget\") + \".selector\" + (attrs.horizontal ? \".flexrow\" : \".flexcol\") + (attrs.className ? \".\" + attrs.className : \"\"),\n {\n ...attrs.key && {key: attrs.key},\n class: (state.current ? \"hascurrent\" : \"empty\") + (attrs.class ? \" \" + attrs.class : \"\")\n },\n [\n ...((!attrs.hideonly || (attrs.items.length > 1)) && (!attrs.hidesel))\n ? [\n /** navigation bar */\n m(\n \"nav.toolbar.fullwidth\" + (attrs.horizontal ? \".flexcol\" : \".flexrow\"),\n {\n \"aria-label\": attrs[\"aria-label\"] || attrs.title || \"selector\",\n class: attrs.toolbarClass\n },\n attrs.items.map((item, index) => m(Button, {\n class: (item.class ? item.class + \" \" : \"\") + (isCurrent(state, index) ? \"accent\" : \"nel\"),\n icon: item.icon || null,\n ...item.title && {title: item.title},\n ...item[\"aria-label\"] && {\"aria-label\": item[\"aria-label\"]},\n ...item.text && {text: item.text},\n onclick: () => {\n const t = Date.now();\n if (t - state.clickts < 200) return;\n state.clickts = Date.now();\n state.bodyHidden = false;\n state.setItem(index);\n }\n }))\n )]\n : [],\n ...current\n ? [\n ...(attrs.toggle && !state.bodyHidden)\n ? [\n m(ButtonNew, {\n class: \"selectornotch \" + (state.bodyHidden ? \"bodyhidden\" : \"bodyshown\"),\n icon: state.bodyHidden ? \"caret-up\" : \"caret-down\",\n title: state.bodyHidden ? \"expand panel\" : \"contract panel\",\n onClick: () => {\n state.bodyHidden = !state.bodyHidden;\n m.redraw();\n }\n })\n ] : [],\n ...(!attrs.toggle || !state.bodyHidden)\n ? [\n /** body */\n m(\".grows.flexcol.ohidden\", {class: attrs.bodyClass, role: \"presentation\"}, [\n m(\n current.widget,\n getAttrs(current.attrs, attrs, state.currentParams),\n current.children\n )\n ])\n ]\n : [],\n ...attrs.closeButton\n ? [\n m(Button, {\n class: \"closebutton absolute toright\",\n icon: \"times\",\n onclick: () => {\n state.setItem(-1);\n },\n \"aria-label\": \"close item\"\n })] : []\n ]\n : m(Empty, attrs)\n ]\n );\n }\n };\n\nconst ICONS = {\n info: \"info\",\n error: \"exclamation-triangle\",\n success: \"check\"\n};\n\nfunction Notifications(TOAST_SHORT = 5000, altContainer) {\n\n let\n mNotifications = [],\n mTimer;\n\n function render(container, n) {\n m.render(\n container, m(\n Button, {\n class: \"notification \" + n.type,\n text: n.text,\n icon: ICONS[n.type] || \"info\",\n size: 1,\n role: \"status\",\n // eslint-disable-next-line no-use-before-define\n onclick: next\n }\n )\n );\n }\n\n function next() {\n\n const\n container = altContainer || document.getElementById(\"notification-container\");\n\n if (mNotifications.length) {\n const n = mNotifications.splice(0, 1)[0];\n render(container, n);\n clearTimeout(mTimer);\n mTimer = setTimeout(next, n.timer || TOAST_SHORT);\n } else {\n m.render(container, \"\");\n mTimer = null;\n }\n }\n\n return {\n add: (text, type) => {\n mNotifications.push({\n text,\n type\n });\n if (!mTimer) next();\n },\n clear: () => {\n mNotifications = [];\n next();\n }\n\n };\n}\n\nconst Notification = new Notifications();\n\nexport {\n Empty,\n Icon,\n Selector,\n Button,\n ButtonNew,\n Notification\n}\n","import m from \"mithril\";\nimport {ButtonNew, defineWidget} from \"./Basic\";\n\nconst\n globalState = {},\n CARDIE_CLOSED = 0;\n\nfunction setCardStatus(cardid, expanded = CARDIE_CLOSED) {\n if (cardid) {\n const [uniq, subname] = cardid.split(\"-\");\n if (expanded && uniq && subname) {\n Object.keys(globalState)\n .forEach((key) => {\n if (key.startsWith(uniq + \"-\")) {\n globalState[key] = CARDIE_CLOSED;\n }\n });\n }\n globalState[cardid] = expanded;\n }\n}\n\nconst CardieWidget = defineWidget(\n ({attrs, state, children}) => {\n\n const\n\n {\n nofold,\n cardid,\n size,\n title,\n action,\n collapsedAction,\n collapsedClass,\n expandedClass,\n cols,\n element,\n busy,\n expandedView,\n collapsedView,\n titleWidget: titWidget,\n titleAttrs,\n titleClass,\n bodyClass,\n titleExpanded,\n titleCollapsed\n } = attrs,\n\n collapsed = nofold\n ? false\n : cardid\n ? !globalState[cardid]\n : !!state.collapsed,\n\n items = (!collapsed)\n ? (\n expandedView\n ? expandedView(attrs, state)\n : (children || [])\n )\n : collapsedView ? collapsedView(attrs, state) : [],\n\n titleWidget = titWidget\n ? m(titWidget, titleAttrs || {})\n : title ? m(\"span.ellipsis.ohidden.unfold\", title) : undefined,\n\n buttonClass = busy\n ? \"fa-sync\"\n : `fa-caret-down ${collapsed ? \"iscollapsed\" : \"isexpanded\"}`;\n\n return items.length || !attrs.skipEmpty\n ? m(\n (element || \"ul\"),\n {\n class: \"cardie ohidden noshrink \"\n + (cols ? \"flexcol \" : \"flexrow wrap \")\n + (attrs.class ? \" \" + attrs.class : \"\")\n + (nofold\n ? \" expanded\"\n : ` ${collapsed ? \"collapsed \" + (collapsedClass || \"\") : \"expanded \" + (expandedClass || \"\")}`)\n + (size ? \" marg-\" + size : \" marg-2\")\n + (titWidget ? \" withwidget\" : \"\")\n + (busy ? \" busycard\" : \"\")\n },\n [\n\n ...titleWidget\n ? [\n m(\n \".title.grows.fabf.flexrow.pointer.unfold\",\n nofold\n ? {\n class: titleClass || \"pad-2\"\n }\n : {\n class: `${titleClass || \"pad-2\"} ${buttonClass || \"\"}`,\n\n title: collapsed\n ? (titleCollapsed || \"Click to expand the options\")\n : (titleExpanded || titleCollapsed || \"Click to collapse the options\"),\n\n onclick: (e) => {\n\n if (e.target.classList.contains(\"unfold\")) {\n if (e.shiftKey && attrs.onShiftOpen) {\n attrs.onShiftOpen();\n } else if (attrs.cardid) {\n setCardStatus(cardid, collapsed); // !state\n } else {\n state.collapsed = !state.collapsed;\n }\n\n m.redraw();\n }\n }\n },\n action && (nofold || !collapsed)\n ? [\n m(ButtonNew, action),\n titleWidget\n ]\n : collapsedAction && collapsed\n ? [\n m(ButtonNew, collapsedAction),\n titleWidget\n ]\n : titleWidget\n )\n ]\n : [],\n\n ...items.length\n ? [\n m(\".flexbreak\"),\n m(\n \".cardiebody.fadein-filter.grows\",\n {\n class: (cols ? \"flexcol \" : \"flexrow wrap\") + \" \" + (bodyClass || \"\")\n },\n ...items\n )\n ] : [],\n\n ...(attrs.alwaysView\n ? [attrs.alwaysView({attrs, state})]\n : [])\n\n ]\n ) : [];\n },\n ({attrs, state}) => {\n if (!attrs.cardid) {\n state.collapsed = attrs.nofold\n ? false\n : attrs.cardid\n ? !globalState[attrs.cardid]\n : !!attrs.collapsed;\n }\n },\n undefined,\n undefined,\n undefined,\n {setCardStatus}\n);\n\nexport default CardieWidget;","import m from \"mithril\";\nimport {ButtonNew} from \"./Basic\";\n\n/* eslint-disable no-prototype-builtins,no-nested-ternary */\n/* global m, Hammer */\n\nconst\n\n getInput = (attrs, value, parse = false) => {\n if (parse || attrs.type === \"number\") {\n const val = attrs.float ? Number.parseFloat(value) : Number.parseInt(value, 10);\n return Number.isNaN(val) ? undefined : val;\n }\n return value;\n },\n getValue = (attrs, state, parse) => {\n const lastVal = state.hasOwnProperty(\"value\") ? state.value : attrs.value;\n return getInput(attrs, lastVal, parse);\n },\n /*\n hammer = new Hammer.Manager(dom, { touchAction: \"pan-y\" }),\n panner = new Hammer.Pan({ direction: Hammer.DIRECTION_VERTICAL }),\n singleTap = listenTap && new Hammer.Tap();\n\n hammer.add(listenTap ? [panner, singleTap] : [panner]);\n hammer.on(\"panstart\", (e) => {\n\n */\n\n StaticFieldWidget = {\n view: (vnode) => {\n const {attrs, state} = vnode;\n // este vnode NO es el mismo que el del hammer, pero su estado SI !\n state.attrs = attrs; // guardamos una copia de los ultimos attrs en el estado\n\n return m(\n \".input-static.w-100.ellipsis\",\n {\n class: (attrs.onDrag ? \"withdrag \" : \"\") + (attrs.staticClass || \"grows\"),\n ...attrs.staticTitle && {title: attrs.staticTitle},\n ...attrs.onDrag || {onclick: attrs.onClick},\n oncreate: ({dom, state}) => {\n\n if (attrs.onDrag && !attrs.readonly) {\n\n const\n hammer = state.hammer = new Hammer.Manager(dom, {touchAction: \"pan-y\"}),\n panner = new Hammer.Pan({direction: Hammer.DIRECTION_VERTICAL}),\n singleTap = new Hammer.Tap();\n\n hammer.add([panner, singleTap]);\n hammer.on(\"tap\", () => vnode.state.attrs.onClick());\n hammer.on(\"panup\", (e) => vnode.state.attrs.onDrag(-1, e.srcEvent));\n hammer.on(\"pandown\", (e) => vnode.state.attrs.onDrag(1, e.srcEvent));\n hammer.on(\"panend pancancel\", (e) => vnode.state.attrs.onDrag(0, e.srcEvent));\n }\n if (attrs.focus) {\n dom.focus();\n }\n },\n onremove: ({state}) => {\n state.hammer && state.hammer.destroy();\n }\n },\n attrs.value\n );\n }\n },\n InputWidget = {\n view: ({attrs, state}) => {\n const reset = (redraw) => {\n // if (state.value !== undefined && state.showInput) delete state.showInput;\n if (state.value && state.showInput) delete state.showInput;\n delete state.value;\n if (redraw) m.redraw();\n };\n return m(\n \".textfield.flexcol.relative\",\n {\n class: (attrs.label ? \"witharia\" : \"\") + (attrs.containerClass ? \" \" + attrs.containerClass : \"\"),\n ...attrs.label && {\"aria-label\": attrs.label}\n },\n [\n (attrs.staticField && (attrs.readonly || !state.showInput))\n ? m(StaticFieldWidget, {\n readonly: attrs.readonly,\n staticClass: (state.dragging ? \"accent \" : \"\") + (attrs.staticClass || \"\"),\n staticTitle: attrs.staticTitle || attrs.draginc && \"Click then drag up and down to modify value, or just click to enter a custom value\",\n value: attrs.displayTitle || getValue(attrs, state),\n focus: attrs.focus,\n ...attrs.draginc && !attrs.readonly && {\n onDrag: (direction, event) => {\n if (direction) {\n state.dragging = true;\n let value = getValue(attrs, state, true);\n if (Number.isNaN(value) || value === undefined) return;\n value += direction * attrs.draginc;\n if (attrs.max !== undefined && value > attrs.max) value = attrs.max;\n if (attrs.min !== undefined && value < attrs.min) value = attrs.min;\n state.value = attrs.type === \"number\" ? value : String(value);\n attrs.onchange(state.value, event);\n } else {\n delete state.dragging;\n delete state.value;\n m.redraw();\n }\n }\n },\n ...attrs.readonly || {\n onClick: () => {\n state.showInput = true;\n state.value = attrs.value;\n m.redraw();\n }\n }\n })\n\n : ((state.multi || attrs.alwaysmulti) && (!attrs.type || attrs.type === \"text\"))\n ? m(\"textarea.w-100\", {\n class: attrs.class,\n value: getValue(attrs, state),\n ...attrs.title && {title: attrs.title},\n placeholder: attrs.hint || \"\",\n oninput: (event) => {\n state.value = getInput(attrs, event.target.value);\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n if (attrs.onchange) {\n (attrs.oninput || attrs.onchange)(state.value, event, true);\n }\n },\n onchange: (event) => {\n if (attrs.onchange) {\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n const value = getInput(attrs, event.target.value);\n reset(false);\n attrs.onchange(value, event, true);\n }\n },\n onblur: () => {\n if (state.showInput) {\n reset(true);\n }\n },\n onkeyup: (event) => {\n if (event.key === \"Escape\" && state.showInput) {\n reset(false);\n }\n }\n })\n : m(\"input.w-100\", {\n ...attrs.id && {id: attrs.id},\n type: attrs.type || \"text\",\n ...attrs.max !== undefined && {max: attrs.max},\n ...attrs.min !== undefined && {min: attrs.min},\n ...attrs.step > 0 && {step: attrs.step},\n ...attrs.maxlength && {maxlength: attrs.maxlength},\n class: (attrs.class || \"\") + (attrs.validator ? state.isValid ? \" bg-ok\" : \" bg-error\" : \"\"),\n ...attrs.title && {title: attrs.title},\n value: getValue(attrs, state),\n placeholder: attrs.hint || \"\",\n oninput: (event) => {\n state.value = getInput(attrs, event.target.value);\n event.fromoninput = true;\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n if (attrs.onchange) {\n (attrs.oninput || attrs.onchange)(state.value, event);\n }\n },\n onchange: (event) => {\n if (attrs.onchange) {\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n event.enterPressed = state.enterPressed;\n delete state.enterPressed;\n attrs.onchange(getInput(attrs, event.target.value), event);\n if (attrs.staticField) {\n reset(true);\n } else {\n delete state.value;\n }\n }\n },\n onblur: () => {\n if (state.showInput) {\n reset(true);\n }\n },\n onkeyup: (event) => {\n if (state.showInput) {\n if (event.key === \"Escape\") {\n reset(true);\n } else if (event.key === \"Enter\") {\n if (state.value === attrs.value || !state.value) {\n attrs.onchange(attrs.value, event);\n reset(true);\n }\n }\n }\n },\n onkeypress: (event) => {\n if (!state.showInput && event.key === \"Enter\") {\n attrs.onenter && attrs.onenter(event.target.value, event);\n }\n }\n }),\n\n m(\".span.actions.absolute.right.bottom\", [\n ...(attrs.multi && !attrs.alwaysmulti && (!attrs.type || attrs.type === \"text\"))\n ? [\n m(ButtonNew, {\n icon: state.multi ? \"angle-double-up\" : \"angle-double-down\",\n class: \"pad-2 transp\",\n onClick: () => {\n state.multi = !state.multi;\n m.redraw();\n }\n })\n ]\n : [],\n ...attrs.actions ? attrs.actions.map((action) => m(ButtonNew, {\n ...action,\n class: \"transp pad-2\"\n })) : [],\n ...attrs.action\n ? [\n m(ButtonNew, {...attrs.action, class: \"transp pad-2\"})\n ] : []\n ])\n ]);\n },\n oninit: ({attrs, state}) => {\n if (attrs.staticField && attrs.draginc) {\n const value = getValue(attrs, state, true);\n state.showInput = (Number.isNaN(value) || value === undefined || value === null);\n }\n }\n };\n\nexport default InputWidget;\n","import m from \"mithril\";\nimport {Icon, defineWidget} from \"./Basic\";\n\nconst\n NoticeWidget = defineWidget(\n ({attrs, children}) => (\n children.length\n ? m(\n \".notice.cardie.flexcol.pad-3\",\n {class: attrs.class || \"marg-2 font-75\"},\n m(\n \".flexrow\",\n [\n ...attrs.icon ? [m(Icon, attrs)] : [],\n m(\".pad-2.pad-h\", attrs.text)\n ]\n ),\n ...children\n )\n : m(\n \".notice.cardie.flexrow.pad-3\",\n {class: attrs.class || \"marg-2 font-75\", onclick: attrs.onClick},\n [\n ...attrs.icon ? [m(Icon, attrs)] : [],\n m(\".pad-2.pad-h\", attrs.text)\n ]\n )\n )\n );\n\nexport default NoticeWidget;\n","export default function defineWidget (view, oninit, oncreate, onremove, onupdate) {\n return {\n ...view && {view},\n ...oninit && {oninit},\n ...oncreate && {oncreate},\n ...onupdate && {onupdate},\n ...onremove && {onremove}\n }\n}\n\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\nimport {Icon} from \"./Basic\";\n\nconst\n SwitchWidget = defineWidget(\n ({attrs, state}) => m((attrs.unit || \"\") + \".flexrow\" + (attrs.subline ? \" withsubline\" : \"\"),\n {\n class: attrs.class,\n text: attrs.text,\n title: attrs.title || null,\n onclick: () => {\n state.checked = !state.checked;\n if (attrs.onchange) {\n attrs.onchange(state.checked);\n }\n m.redraw();\n }\n },\n attrs.right\n ? [\n ...attrs.text ? [m(\"span.grows.caption\", attrs.subline ? {\"data-subline\": attrs.subline} : {}, attrs.text)] : [],\n m(Icon, {iconClass: \"pad-2 pad-h\", icon: state.checked ? \"toggle-on\" : \"toggle-off\"})\n ]\n : [\n m(Icon, {iconClass: \"pad-2 pad-h\", icon: state.checked ? \"toggle-on\" : \"toggle-off\"}),\n ...attrs.text ? [m(\"span.grows.caption\", attrs.subline ? {\"data-subline\": attrs.subline} : {}, attrs.text)] : []\n ]),\n ({attrs, state}) => {\n state.checked = state.original = attrs.checked;\n },\n null,\n null,\n ({attrs, state}) => {\n if (attrs.checked !== state.original) {\n state.checked = state.original = attrs.checked;\n m.redraw();\n }\n }\n );\n\nexport default SwitchWidget;","import m from \"mithril\";\n\nlet\n\tmCurrentCancelable;\n\nfunction runCancelable(container) {\n\tif (typeof mCurrentCancelable === \"function\") {\n\t\tmCurrentCancelable();\n\t\tmCurrentCancelable = undefined;\n\t}\n\tcontainer.style.display = \"none\";\n\tdelete popupMessage.redraw;\n}\n\n// There are ways of doing this inside m.route but it is probably\n// cleaner and faster when kept outside of the main auto\n// rendering system\n\nfunction popupMessage(message, cancelable = false, contentClass = \".modal-content\") {\n\n\tconst container = document.getElementById(\"modal-container\");\n\tcontainer.classList.toggle(\"iscustom\", contentClass !== \".modal-content\");\n\n\tif (cancelable) {\n\n\t\tmCurrentCancelable = cancelable;\n\n\t\tcontainer.onclick = (event) => {\n\t\t\tif (event.target.id === \"modal-container\") {\n\t\t\t\trunCancelable(container);\n\t\t\t}\n\t\t};\n\t}\n\n\tif (!message) {\n\t\tdelete popupMessage.redraw;\n\t\tif (message === null)\n\t\t\tcontainer.style.display = \"none\";\n\t\telse\n\t\t\trunCancelable(container);\n\n\t\treturn;\n\t}\n\n\tcontainer.style.display = \"flex\";\n\n\tpopupMessage.redraw = () => {\n\t\tm.render(\n\t\t\tcontainer,\n\t\t\tm(contentClass, {\n\t\t\t\trole: \"alertdialog\",\n\t\t\t\t\"aria-labelledby\": \"modaltitle\",\n\t\t\t\t\"aria-modal\": true\n\t\t\t}, [\n\t\t\t\ttypeof message === \"function\" ? message() : message\n\t\t\t])\n\t\t);\n\t};\n\n\tpopupMessage.redraw();\n}\n\nfunction clearModal() {\n\tconst container = document.getElementById(\"modal-container\");\n\tif (container.style.display !== \"none\") {\n\t\trunCancelable(container);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport { popupMessage, clearModal };\n","/* eslint-disable no-nested-ternary */\n/**\n * Basic Mithril Widget functions\n * Provides some utilities and basic UI functions like an Alert or a Confirmation dialog\n *\n * @author Rodolfo Lopez Pintor, 2020 <rlp@nebular.tv>\n * @module apps.widgets.basic\n *\n */\nimport m from \"mithril\";\nimport * as widget from \"./widgets\";\nimport * as Tokenizer from \"./util.tokenizer\";\nimport {Button, Empty} from \"../widgets/Basic\";\n\n/**\n *\n * Computes a Class String\n *\n * @param {string} initials INitial CSS Classes\n * @param {Object<string, boolean>} clases New classes dictionary\n * @return {string} The CSS Class expression like .class1.class2.class3\n * @public\n * @static\n */\n\nconst packClassString = (initials, clases) => {\n const finals = [];\n if (clases) for (const cla of Object.keys(clases)) if (clases[cla]) finals.push(\".\" + cla);\n return (initials || \"\") + finals.join(\"\");\n};\n\n\nconst packClass = (initials, clases) => {\n const finals = initials ? [initials] : [];\n if (clases) for (const cla of Object.keys(clases)) if (clases[cla]) finals.push(cla);\n return finals.join(\" \");\n};\n\n/**\n * Shows a modal confirm dialog\n * @param {string} title The dialog title\n * @param {string} message The dialog message\n * @param {Array} buttons Buttons to display\n * @param {Object=} options noCancel: dialog is uncanellable\n * @public\n * @static\n */\n\nfunction Confirm(title, message,\n buttons = [\"CANCEL\", \"OK\"], options = {}\n) {\n widget.popupMessage(\n m(\n {\n view: () => [\n ...title ? [m(\"h3\", title)] : [],\n ...message ? [m(\"h4\", message)] : [],\n m(\".container\",\n buttons.map(\n option => m(\n \"button\",\n {\n onclick: () => {\n document.getElementById(\"modal-container\").style.display = \"none\";\n if (option.onclick) option.onclick(option.caption);\n }\n },\n option.caption || \"OK\"\n )\n ))\n ]\n },\n {}\n ),\n options.onCancel || !options.noCancel\n );\n}\n\nfunction ConfirmPromise(title, message, actions, isModal = false) {\n\n let onCancel = undefined;\n\n if (typeof isModal === \"function\") {\n onCancel = isModal;\n isModal = false;\n }\n\n return new Promise((resolve) => {\n\n const opts = actions.map((name, idx) => ({\n caption: name,\n onclick: () => resolve({\n idx,\n name\n })\n }));\n\n Confirm(title, message, opts, {\n onCancel,\n noCancel: isModal\n });\n });\n}\n\n/**\n * Shows An Alert Modal Dialog\n * @param {string} title Dialog Title\n * @param {string} message Dialog Message\n * @param {string?} caption Button caption\n * @param {function?} onclick On press handler\n * @public\n * @static\n */\n\nfunction Alert(title, message, caption, onclick) {\n return Confirm(title, message, [{caption, onclick}]);\n}\n\n\nfunction OverflowMenu(domItem, item, actions, options) {\n\n return new Promise((resolve) => {\n\n options = options || {};\n\n function closeResolve(value) {\n widget.popupMessage(null);\n try {\n resolve(value);\n } catch (e) {\n //\n }\n }\n\n const\n classes = packClassString(\".popup.flexcol\", {\n \".favlist\": options.favlist,\n \".isfav\": domItem && domItem.classList.contains(\"isfav\"),\n \".isplay\": domItem && domItem.classList.contains(\"selected\")\n });\n\n widget.popupMessage(\n m({\n view: () => m(\n classes,\n {\n onclick: (event) => {\n\n if (event.target.nodeName === \"INPUT\") {\n return;\n }\n\n const\n action = event.target.getAttribute(\"data-action\");\n\n if (action) {\n closeResolve({\n domItem,\n item,\n action\n });\n } else {\n widget.popupMessage(null);\n }\n }\n },\n [\n ...item.title ? [m(\"h3\", {id: \"modaltitle\"}, item.title)] : [],\n ...actions.map(action => (action.type === \"text\"\n ? m(\n \"input.action\",\n {\n value: action.value || \"\",\n type: \"text\",\n placeholder: action.hint || \"\",\n oncreate: ({dom}) => dom.focus(),\n onkeyup: (ev) => {\n if (ev.keyCode === 27) {\n closeResolve({domItem, item, action});\n }\n },\n onchange: (ev) => {\n ev.target.blur();\n closeResolve({\n domItem,\n item,\n action,\n value: ev.target.value\n });\n }\n }\n )\n : m(\n Button,\n {\n ...action,\n onclick: () => closeResolve({\n domItem,\n item,\n action\n })\n },\n action.caption\n )))\n ]\n )\n }),\n true\n );\n });\n}\n\n/**\n * Creates an HTML UL/LI structure with the object properties\n * @param {Object} object An object to render\n * @param {RenderOptions?} options\n * @param {Object[]} children additional vnodes\n * @param {string} recurse parent key\n * @param isArrayChild\n * @return {m} The rendered view\n * @public\n * @static\n */\n\nfunction RenderObject(object, options, children, recurse, isArrayChild = false) {\n\n // noinspection JSValidateTypes\n options = options || {};\n const {arrayClass = \"isarray\", arrayChildClass = \"ischildren\", objectClass = \"isobject\"} = options;\n\n return m(\n \"ul\",\n {\n ...(options.attrs || {}),\n class: options.class\n },\n object\n ? [\n ...(options.keys || Object.keys(object))\n .map((key) => {\n\n const\n value = object[key] || null,\n isObject = value !== null && (typeof value === \"object\"),\n isArray = isObject && value.length,\n fullkey = (recurse ? recurse + \"_\" : \"\") + key;\n\n return m(\n \"li.field_\" + (options.start || \"\") + fullkey,\n {\n class: (isArray ? arrayClass : isObject ? (objectClass + \" \") : \"\") + (isArrayChild ? arrayChildClass : \"\"),\n \"data-title\": options.titles ? options.titles[key] || key : key,\n ...(options.itemAttrs || {})\n },\n // eslint-disable-next-line\n isObject\n ? [\n m(\".subvalues\",\n RenderObject(\n value,\n {\n ...options,\n keys: null\n },\n null,\n (recurse ? recurse + \"_\" : \"\") + key,\n isArray\n ))]\n : (\n (options.renderer && options.renderer[fullkey])\n ? options.renderer[fullkey](value)\n : m(\"span.value\", object[key])\n )\n );\n }),\n ...children || []\n ]\n : [\n m(\".empty\", {})\n ]\n );\n\n}\n\n\nconst\n JSONWidget = {\n view:\n ({attrs, children}) => {\n let object;\n try {\n object = attrs.pointer\n ? Tokenizer.getPointedData(attrs.object, attrs.pointer)\n : attrs.object;\n } catch (e) {\n return m(Empty, {message: e.message, ...attrs});\n }\n\n return object\n ? RenderObject(object, attrs, children)\n : m(Empty, attrs);\n }\n };\n\n// noinspection JSUnusedGlobalSymbols\nexport {\n Alert,\n Confirm,\n ConfirmPromise,\n RenderObject,\n OverflowMenu,\n JSONWidget,\n packClass\n}\n","const\n ENABLE_SCLONE = true, // atm SLOWER than JSON\n softClone = (o) => JSON.parse(JSON.stringify(o)),\n clone = window.structuredClone && ENABLE_SCLONE\n ? window.structuredClone\n : softClone;\n\nexport default clone;\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\nimport * as widget from \"../util/widgets\";\nimport {Icon, Notification, ButtonNew} from \"./Basic\"\nimport {OverflowMenu} from \"../util/widgets.core\";\nimport SwitchWidget from \"../widgets/SwitchWidget\";\nimport InputWidget from \"../widgets/InputWidget\";\nimport Notice from \"../widgets/NoticeWidget\";\nimport clone from \"../util/util.clone\"\n\nfunction choose(items, config = {\n icon: \"circle\", onSelect: () => {\n }\n}) {\n\n const\n {icon, title, field, onSelect, parser = (v) => v} = config,\n options = items.map((item, index) => ({\n icon: field && item.icon || icon,\n // WARNING !!!!!\n caption: parser(field ? item[field] : item, item),\n // caption: idField ? item[idField] : item,\n onClick: (e) => onSelect(item, e, index)\n }));\n\n if (Array.isArray(items) && !items.length) {\n Notification.add(\"No items available\");\n } else {\n OverflowMenu(\n document.body,\n {title},\n options\n )\n .then(({action}) => action.onClick());\n }\n}\n\nfunction promptOptions(items, onchange, options = {}) {\n\n const\n {title, field, icon, textNew, textHint, resolve} = options,\n dialogOptions = Array.isArray(items)\n ? items.map((item) => ({\n icon,\n // WARNING !!!!!\n caption: field ? item[field] : item,\n // caption: idField ? item[idField] : item,\n onClick: (e) => onchange(item, e)\n }))\n : Object.keys(items)\n .map((key) => ({\n icon: items[key].icon || icon,\n caption: items[key].caption || key,\n onClick: (e) => onchange(\n resolve && items[key].value !== undefined\n ? items[key].value\n : items[key],\n e)\n }));\n\n if (Array.isArray(items) && !items.length) {\n Notification.add(\"No items available\");\n } else {\n OverflowMenu(\n document.body,\n {title},\n [\n ...textNew && !field\n ? [\n {\n icon: \"plus\",\n caption: textNew,\n onClick: () => promptName(\n textNew,\n \"\",\n textHint,\n (value) => {\n if (value) {\n if (value && value.trim()) {\n onchange(value);\n m.redraw();\n }\n }\n }\n )\n }\n ]\n : [],\n ...dialogOptions\n ]\n )\n .then(({action}) => action.onClick())\n .finally(() => {\n });\n }\n}\n\nfunction promptName(title, value, hint, action, state = {}) {\n setTimeout(() => OverflowMenu(\n document.body,\n {title},\n [\n {\n type: \"text\",\n hint,\n value\n }\n ]\n )\n .then(({value: val}) => {\n state.refreshKey = String(Date.now());\n return action(val);\n }), 100);\n}\n\nconst\n WHAT_DO_UPDATE_LIGHTS = 0, // 0\n WHAT_DO_UPDATE_FACE = 1, // 1\n WHAT_DO_UPDATE_PARTICLES = 2, // 4\n WHAT_DO_UPDATE_SEGMENTATION = 3,\n WHAT_DO_UPDATE_VAL_VPLANE = 4,\n WHAT_DO_UPDATE_VAL_PANO = 5,\n WHAT_DO_UPDATE_VAL_FREE = 6,\n WHAT_DO_UPDATE_VAL_DRONE = 7,\n WHAT_DO_UPDATE_VAL_TRANSITION = 8,\n WHAT_DO_UPDATE_TVFX = 9,\n WHAT_DO_UPDATE_VAL_FOLLOW = 10,\n\n PROPERTIES = [\n [\"Lights and Fog\", null, [\"amblight\", \"l0\", \"l1\", \"l2\", \"l3\", \"fog\"], WHAT_DO_UPDATE_LIGHTS],\n [\"Face and Accessories\", null, [\"facekit\"], WHAT_DO_UPDATE_FACE],\n [\"Particle settings\", null, [\"particles\"], WHAT_DO_UPDATE_PARTICLES],\n [\"Video Segmentation\", \"common\", [\"segcam\", \"mask\", \"green\"], WHAT_DO_UPDATE_SEGMENTATION, true],\n [\"Video Effects\", null, [\"fxconfig\"], WHAT_DO_UPDATE_TVFX],\n [\"Video Plane\", \"val\", [\"xvideo\", \"yvideo\", \"zvideo\", \"rvideo\", \"svideo\", \"video\"], WHAT_DO_UPDATE_VAL_VPLANE],\n [\"Main Camera\", \"val\", [\"ypos\", \"xpos\", \"zoom\", \"yaw\", \"pitch\", \"roll\", \"ai\"], WHAT_DO_UPDATE_VAL_PANO],\n [\"Drone Camera\", \"val\", [\"free\"], WHAT_DO_UPDATE_VAL_FREE],\n [\"Followed Agent\", \"val\", [\"track\"], WHAT_DO_UPDATE_VAL_FOLLOW],\n [\"Game Camera\", \"val\", [\"orbit\", \"track\", \"ocam\"], WHAT_DO_UPDATE_VAL_DRONE, undefined, true],\n [\"Transition Speed\", \"val\", [\"spd\"], WHAT_DO_UPDATE_VAL_TRANSITION]\n ],\n\n TitleBarWidget = defineWidget(\n ({attrs}) => m(\"h2.marg-2.no-marg-bottom\", attrs.title)\n ),\n EntityTemplates = defineWidget(\n ({attrs}) => {\n\n const\n {type = \"changes\", meta, onInput, title, options} = attrs,\n valid = meta.title?.trim().length && meta.description?.trim().length,\n embedded = options && options.embedded;\n\n return m(\".flexcol.grows.ohidden.fadein\", [\n ...attrs.title ? [\n m(TitleBarWidget, {\n title\n })] : [],\n m(\".flexrow.wrap.grows.pad-3.propsgroup.scrolly\", [\n ...attrs.notice ? [\n m(Notice, {\n class: \"marg-1 marg-v withbottommargin font-75 col-12\",\n size: 1,\n icon: \"info-circle\",\n text: attrs.notice\n })\n ] : [],\n m(\n \".witharia.col-12.pad-1.pad-v\",\n {\"aria-label\": type + \" name\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh \" + (valid ? \"valid\" : \"invalid\"),\n value: meta.title,\n maxlength: 64,\n onchange: (newvalue) => {\n meta.title = newvalue;\n m.redraw();\n }\n })\n ),\n ...embedded ? []\n : [\n m(\n \".col-12.witharia.pad-1.pad-v\",\n {\"aria-label\": \"description\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh \" + (meta.description ? \"valid\" : \"invalid\"),\n value: meta.description,\n maxlength: 240,\n multi: true,\n alwaysmulti: true,\n onchange: (newvalue) => {\n meta.description = newvalue;\n m.redraw();\n }\n })\n ),\n m(\n \".col-8.witharia.pad-1.pad-v\",\n {\"aria-label\": \"tags\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.tags,\n maxlength: 128,\n onchange: (newvalue) => {\n meta.tags = newvalue.toLowerCase()\n .split(\" \")\n .join(\",\")\n .split(\",\")\n .filter((tag) => tag.length)\n .join(\",\");\n }\n })\n ),\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"youtube video\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.ytref || \"\",\n hint: \"YouTube ID\",\n maxlength: 16,\n onchange: (newvalue) => {\n newvalue = newvalue.trim();\n if (newvalue) {\n if (newvalue.indexOf(\" \") === -1) {\n meta.ytref = newvalue.trim();\n }\n } else {\n delete meta.ytref;\n }\n }\n })\n )\n ],\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"content attribution\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.author,\n hint: \"author name\",\n maxlength: 128,\n onchange: (newvalue) => {\n meta.author = newvalue;\n }\n })\n ),\n\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"license or author link\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n hint: \"https://...\",\n value: meta.link,\n maxlength: 128,\n onchange: (newvalue) => {\n meta.link = newvalue;\n }\n })\n ),\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"source domain\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.source,\n hint: \"example.com\",\n maxlength: 128,\n onchange: (newvalue) => {\n meta.source = newvalue;\n }\n })\n ),\n\n m(\n \".col-12.al-right.marg-2.marg-v\",\n m(ButtonNew, {\n class: \"noshrink accentbutton unitheightsmall col-4\",\n text: \"save \" + type,\n onClick: () => {\n\n const isValid = meta.title?.trim().length && (embedded || meta.description?.trim().length);\n\n if (isValid) {\n widget.popupMessage(null);\n onInput(meta);\n } else {\n Notification.add(\"Information is incomplete or invalid\");\n }\n }\n })\n )\n ])\n ]);\n }\n ),\n promptEntity = (meta, title, type, options = {}) => new Promise((resolve, reject) => {\n widget.popupMessage(\n m(EntityTemplates, {\n meta,\n type,\n title,\n options,\n onInput: (newMeta) => resolve(newMeta)\n }),\n () => {\n reject(new Error(\"cancelled\"));\n }\n );\n }),\n PresetTemplate = defineWidget(\n ({attrs}) => {\n\n const\n\n {parameters, preset, presetComponents, types, globalData, fetcher} = attrs,\n available = [],\n sourceAvailable = [],\n items = types\n ? PROPERTIES\n : PROPERTIES.filter((cosa) => {\n\n const\n [, primaryTarget, elements, index, globalSource] = cosa,\n target = primaryTarget ? preset[primaryTarget] : preset,\n rootSource = globalSource ? globalData : parameters,\n source = primaryTarget ? rootSource[primaryTarget] : rootSource;\n\n let found = false;\n\n if (elements.length) {\n\n for (const element of elements) {\n if (target && target[element] !== undefined) {\n found = available[index] = true;\n }\n if (source[element] !== undefined) {\n found = sourceAvailable[index] = true;\n }\n }\n return found;\n } else {\n found = true;\n sourceAvailable[index] = !!source;\n available[index] = !!target;\n }\n return found;\n\n });\n\n return m(\n \"ul.flexrow.wrap.userdialog\",\n items.length\n ? items.map((cosa) => {\n\n const\n [title, primaryTarget, elements, cosaIndex, globalSource, fetchLive] = cosa,\n target = types ? undefined : primaryTarget ? preset[primaryTarget] : preset,\n rootSource = globalSource ? globalData : parameters,\n source = types ? undefined : primaryTarget ? rootSource[primaryTarget] : rootSource,\n deleteCurrent = () => {\n if (elements.length) {\n for (const field of elements) {\n delete target[field];\n }\n } else if (elements.length === 0 && primaryTarget) {\n delete preset[primaryTarget];\n }\n attrs.redraw && attrs.redraw();\n },\n updateCurrent = () => {\n if (elements.length) {\n if (primaryTarget && !preset[primaryTarget]) preset[primaryTarget] = {};\n const updatedTarget = primaryTarget ? preset[primaryTarget] : preset;\n for (const field of elements) {\n if (source[field] !== undefined) {\n const finalSource = fetchLive && fetcher ? fetcher(updatedTarget[field], cosaIndex) : source[field];\n updatedTarget[field] = clone(finalSource);\n }\n }\n } else if (elements.length === 0 && primaryTarget) {\n if (source !== undefined) {\n const finalSource = fetchLive && fetcher ? fetcher(source, cosaIndex) : source;\n preset[primaryTarget] = clone(finalSource);\n }\n }\n attrs.redraw && attrs.redraw();\n Notification.add(`updated ${title} from current scene`);\n },\n isAvailable = types || available[cosaIndex],\n isSourceAvailable = sourceAvailable[cosaIndex];\n\n return [\n ...presetComponents ? [\n m(SwitchWidget, {\n title: `Include ${cosa[0]} in snapshots`,\n class: \"grows unitheightsmall\" + (presetComponents[cosaIndex] ? \" accent\" : \"\"),\n checked: !!presetComponents[cosaIndex],\n onchange: (status) => {\n presetComponents[cosaIndex] = !presetComponents[cosaIndex];\n m.redraw();\n attrs.redraw && attrs.redraw();\n }\n }),\n m(\".grows\", {class: isAvailable ? \"avail\" : \"unavail\"}, title)\n ] : [],\n ...!attrs.types ? [\n m(ButtonNew, {\n class: \"col-3\" + (isSourceAvailable ? \"avail\" : \"unavail\"),\n icon: \"sync\", title: `Copy ${title} from current state`,\n onClick: updateCurrent\n }),\n m(ButtonNew, {\n class: \"col-3 \" + (isAvailable ? \"\" : \"disabled text-lo\"),\n icon: \"trash\", title: `Delete ${title} in preset`,\n onClick: () => isAvailable && deleteCurrent()\n })\n ] : [],\n m(\".flexbreak\")\n ];\n\n })\n : m(\"h3\", \"Preset is Empty\")\n );\n }\n ),\n promptPreset = (preset, parameters, options = {}) => new Promise((resolve, reject) => {\n widget.popupMessage(\n () => m(PresetTemplate, {\n ...options,\n preset,\n parameters,\n redraw: () => widget.popupMessage.redraw()\n }),\n () => {\n reject(new Error(\"cancelled\"));\n }\n );\n });\n\nexport {\n promptName,\n promptEntity,\n promptPreset,\n promptOptions,\n choose\n};\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\n\n\nconst\n\n\tSeparator = defineWidget(\n\t\t({ attrs, children }) => m(\n\t\t\t\".separator\",\n\t\t\t{\n\t\t\t\tclass: attrs.class || \"mini\",\n\t\t\t\t...attrs.onClick && { onclick: attrs.onClick }\n\t\t\t},\n\t\t\t[\n\t\t\t\tm(\"span.grows\", attrs.text),\n\t\t\t\t...(children || [])\n\t\t\t]\n\t\t)\n\t);\n\nexport default Separator;\n","import m from \"mithril\"\nimport {ButtonNew, defineWidget} from \"./Basic\";\nimport InputWidget from \"./InputWidget.js\"\nimport {OverflowMenu} from \"../util/widgets.core.js\"\n\nconst TitleBarWidget = defineWidget(\n ({attrs, dom}) => m(\n \".titlebar.noshrink.flexrow\",\n {\n class: (attrs.class ? \" \" + attrs.class : \"unitheight bg-window-hi pad-2 pad-h shadow-2 font-125\"),\n ...attrs.onTitleClick && {onclick: attrs.onTitleClick}\n },\n [\n ...attrs.onClick ? [m(ButtonNew, {icon: \"arrow-left\", onClick: () => attrs.onClick()})] : [],\n\n ...attrs.logo\n ? [m(\"img.title-logo\", {src: attrs.logo})]\n : [],\n ...(attrs.editable && attrs.onchange)\n ? [\n m(InputWidget, {\n containerClass: \"grows\" + (attrs.onClick ? \"\" : \" pad-2 pad-h\"),\n hint: attrs.title, // attrs.hint,\n onchange: attrs.onchange,\n oninput: () => {\n },\n value: attrs.value\n })\n ]\n : [m(\"span.grows.ellipsis\", {class: attrs.onClick ? \"\" : \"pad-2 pad-h\"}, attrs.title)],\n\n ...attrs.auxaction ? [m(ButtonNew, {icon: attrs.auxaction.icon, onClick: attrs.auxaction.onClick})] : [],\n ...attrs.auxactions\n ? attrs.auxactions.map((action) => m(ButtonNew, {\n class: action.class,\n title: action.title,\n icon: action.icon,\n text: action.caption,\n onClick: action.onClick\n }))\n : [],\n ...attrs.action ? [m(ButtonNew, {icon: attrs.action.icon, onClick: attrs.action.onClick})] : [],\n ...attrs.overflow\n ? [\n m(ButtonNew, {\n icon: attrs.overflow.icon || \"ellipsis-v\",\n class: attrs.overflow.class || \"\",\n onClick: () => OverflowMenu(\n dom,\n {title: attrs.title},\n attrs.overflow.items\n )\n .then(({action}) => action.onClick())\n })\n ]\n : []\n ])\n);\n\nexport default TitleBarWidget;","import m from \"mithril\";\n\n\n///////////////////////////////////////////////\n// Mithril Range\n// (c) 2017-2018 by Mike Linkovich\n// https://github.com/spacejack/mithril-range\n// License: MIT\n///////////////////////////////////////////////\nconst\n\n NONE = 0,\n MOUSE = 1,\n TOUCH = 2,\n\n // So we aren't triggered by echoed mouse events (some mobile browsers)\n DEVICE_DELAY = 350,\n\n isIOS = !!navigator.userAgent.match(/iPhone|iPad|iPod/i);\n\n// This is some unbelievable stone-age nonsense.\n// Workaround for webkit bug where event.preventDefault\n// within touchmove handler fails to prevent scrolling.\n\nlet\n iOSHackApplied = false;\n\n/** Clamp number to range */\nfunction clamp(n, min, max) {\n return Math.min(Math.max(n, min), max);\n}\n\nfunction applyIOSHack() {\n // Only apply this hack if iOS, haven't yet applied it,\n // and only if a component is actually created\n if (!isIOS || iOSHackApplied) {\n return;\n }\n window.addEventListener(\"touchmove\", function () {\n });\n iOSHackApplied = true;\n}\n\nexport function quantize(val, min, max, step) {\n if (max - min <= 0) {\n return min;\n }\n if (step <= 0) {\n return clamp(val, min, max);\n }\n const\n steps = Math.ceil((max - min) / step),\n v = min + Math.round(steps * (val - min) / (max - min)) * step;\n return clamp(v, min, max);\n}\n\n\n/** Range Component */\nfunction MithrilRange() {\n let\n elHit,\n elBar,\n elBar0,\n elBar1,\n elHandle,\n rcBar,\n device = NONE,\n pressed = false,\n\n useAbsolute = false,\n factorCoarse = 4,\n factorFine = 1,\n absolute,\n lastRead,\n\n // Attrs we need to cache\n min = 0,\n max = 10,\n value = 0,\n startValue = 0,\n step = 1,\n orientation = \"horizontal\",\n onchange,\n ondrag;\n\n // App handlers\n function onPressAbsolute(x, y) {\n startValue = value;\n pressed = absolute = true;\n rcBar = elBar.getBoundingClientRect();\n const val = moveHandleAbsolute(x, y);\n if (val !== value) {\n value = val;\n if (ondrag && ondrag(value) !== false) {\n m.redraw();\n }\n }\n }\n\n function onPressDelta(x, y, e, isTouch) {\n startValue = value;\n pressed = true;\n absolute = false;\n rcBar = elBar.getBoundingClientRect();\n lastRead = (orientation === \"vertical\") ? y : x;\n if (!isTouch) e.target.requestPointerLock();\n }\n\n function moveHandleAbsolute(x, y) {\n\n let\n barLength,\n delta;\n\n if (orientation === \"vertical\") {\n\n barLength = rcBar.bottom - rcBar.top;\n delta = rcBar.bottom - y;\n\n } else {\n barLength = rcBar.right - rcBar.left;\n delta = x - rcBar.left;\n }\n\n delta = clamp(delta, 0, barLength);\n const val = quantize((delta / barLength) * (max - min) + min, min, max, step);\n setStyles(val);\n return val;\n }\n\n function moveHandleDelta(x, y, event) {\n\n const\n factor = event.shiftKey\n ? factorCoarse\n : (event.metaKey || event.ctrlKey)\n ? 4 * factorCoarse\n : factorFine;\n\n let\n delta;\n\n if (orientation === \"vertical\") {\n delta = event.movementY || 0;\n } else {\n delta = event.movementX || 0;\n }\n\n let newVal;\n let s = step > 0 ? step : (max - min) / 100;\n\n if (delta < 0) {\n newVal = Math.max(value + s * factor * delta, min);\n } else if (delta > 0) { // right/up\n newVal = Math.min(value + s * factor * delta, max);\n } else {\n return value;\n }\n\n newVal = quantize(newVal, min, max, step);\n\n setStyles(newVal);\n return newVal;\n\n }\n\n function onPress(x, y, event) {\n return useAbsolute\n ? onPressAbsolute(x, y, event)\n : onPressDelta(x, y, event);\n }\n\n function moveHandle(x, y, event) {\n return absolute\n ? moveHandleAbsolute(x, y, event)\n : moveHandleDelta(x, y, event);\n }\n\n // Event handlers\n function onMouseDown(e) {\n if (device === TOUCH) {\n return;\n }\n device = MOUSE;\n if (e.button !== 0) {\n return;\n }\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"mouseup\", onMouseUp);\n onPress(e.clientX, e.clientY, e);\n }\n\n function onMouseMove(e) {\n e.preventDefault();\n onMove(e.clientX, e.clientY, e);\n }\n\n function onMouseUp(e) {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", onMouseUp);\n onRelease(e.clientX, e.clientY, e);\n }\n\n function onTouchStart(e) {\n if (device === MOUSE) {\n return;\n }\n elHit.addEventListener(\"touchmove\", onTouchMove);\n elHit.addEventListener(\"touchend\", onTouchEnd);\n const t = e.changedTouches[0];\n onPress(t.clientX, t.clientY, e, true);\n }\n\n function onTouchMove(e) {\n e.preventDefault();\n const t = e.changedTouches[0];\n onMove(t.clientX, t.clientY, e);\n }\n\n function onTouchEnd(e) {\n elHit.removeEventListener(\"touchmove\", onTouchMove);\n elHit.removeEventListener(\"touchend\", onTouchEnd);\n const t = e.changedTouches[0];\n onRelease(t.clientX, t.clientY, t);\n }\n\n function onKeyDown(e) {\n\n const k = e.keyCode;\n let newVal;\n\n if (k === 33) { // pgup\n e.preventDefault();\n let s = Math.max((max - min) / 10, step);\n if (s <= 0) {\n s = 1;\n }\n newVal = quantize(value + s, min, max, step);\n } else if (k === 34) { // pgdown\n e.preventDefault();\n let s = Math.max((max - min) / 10, step);\n if (s <= 0) {\n s = 1;\n }\n newVal = quantize(value - s, min, max, step);\n } else if (k === 35) { // end\n e.preventDefault();\n newVal = max;\n } else if (k === 36) { // home\n e.preventDefault();\n newVal = min;\n } else if (k === 37 || k === 40) { // left/down\n e.preventDefault();\n let s = (step > 0 ? step : (max - min) / 10) * (e.shiftKey ? 0.25 : (e.ctrlKey || e.metaKey) ? 4 : 1);\n newVal = Math.max(value - s, min);\n } else if (k === 38 || k === 39) { // right/up\n e.preventDefault();\n let s = (step > 0 ? step : (max - min) / 10) * (e.shiftKey ? 0.25 : (e.ctrlKey || e.metaKey) ? 4 : 1);\n newVal = Math.min(value + s, max);\n } else if (k === 48) { // 0\n newVal = (max + min) / 2;\n }\n if (typeof newVal !== \"number\" || newVal === value) {\n return; // no change to make\n }\n value = newVal;\n setStyles(value);\n if (onchange && onchange(value) !== false) {\n m.redraw();\n }\n }\n\n function onMove(x, y, event) {\n if (!pressed) {\n return;\n }\n\n const val = moveHandle(x, y, event);\n if (val !== value) {\n value = val;\n if (ondrag && ondrag(value) !== false) {\n m.redraw();\n }\n }\n }\n\n function onRelease(x, y, e) {\n\n if (!pressed) {\n return;\n }\n\n pressed = false;\n value = moveHandle(x, y, e);\n\n if (onchange && onchange(value) !== false) {\n m.redraw();\n }\n\n /*\n if (value !== startValue) {\n if (onchange && onchange(value) !== false) {\n m.redraw();\n }\n }\n */\n\n if (!absolute) document.exitPointerLock();\n\n setTimeout(function () {\n if (!pressed) {\n device = NONE;\n }\n }, DEVICE_DELAY);\n }\n\n /** Compute handle position style */\n function positionStyle(val) {\n let s = (val - min) / (max - min);\n if (orientation === \"vertical\") {\n s = 1.0 - s;\n }\n return String(100 * s) + \"%\";\n }\n\n /** Set styles for movable parts */\n function setStyles(value) {\n const\n ps = positionStyle(value),\n rps = positionStyle(max - value + min);\n\n if (orientation === \"vertical\") {\n elHandle.style.top = ps;\n elBar0.style.height = ps;\n elBar1.style.height = rps;\n } else {\n elHandle.style.left = ps;\n elBar0.style.width = rps;\n elBar1.style.width = ps;\n }\n }\n\n /** Some attrs need to be cached (and updated) so that they are current in event handlers */\n function updateAttrs(attrs) {\n min = attrs.min;\n max = attrs.max;\n step = (typeof attrs.step === \"number\" && !Number.isNaN(attrs.step))\n ? clamp(attrs.step, 0, max - min) : 1;\n orientation = attrs.orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n onchange = attrs.onchange;\n ondrag = attrs.ondrag;\n if (typeof attrs.value === \"number\") {\n value = clamp(attrs.value, min, max);\n }\n useAbsolute = !attrs.relative;\n factorCoarse = (attrs.factor && attrs.factor[0]) || 4;\n factorFine = (attrs.factor && attrs.factor[1]) || 1;\n\n }\n\n /** Return mithril component hooks object */\n return {\n oncreate: ({attrs, dom}) => {\n applyIOSHack();\n updateAttrs(attrs);\n elHit = dom;\n elBar = elHit.querySelector(\".mithril-range-bar\");\n elBar0 = elBar.querySelector(\".mithril-range-bar-0\");\n elBar1 = elBar.querySelector(\".mithril-range-bar-1\");\n elHandle = elBar.querySelector(\".mithril-range-handle\");\n elHit.addEventListener(\"mousedown\", onMouseDown);\n elHit.addEventListener(\"touchstart\", onTouchStart);\n elHit.addEventListener(\"keydown\", onKeyDown);\n },\n onremove: function () {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", onMouseUp);\n elHit.removeEventListener(\"mousedown\", onMouseDown);\n elHit.removeEventListener(\"touchstart\", onTouchStart);\n elHit.removeEventListener(\"touchmove\", onTouchMove);\n elHit.removeEventListener(\"touchend\", onTouchEnd);\n elHit.removeEventListener(\"keydown\", onKeyDown);\n },\n view: function ({attrs, children}) {\n\n updateAttrs(attrs);\n value = quantize(value, min, max, step);\n const a = {\n class: \"mithril-range nokey\" + (attrs.relative ? \" isrelative \" : \" \") + (value === 0 ? \"atzero\" : value < 0 ? \"belowzero\" : \"overzero\") + (attrs.class != null ? \" \" + attrs.class : \"\"),\n tabIndex: \"0\",\n role: \"slider\",\n \"aria-valuemin\": String(min),\n \"aria-valuemax\": String(max),\n \"aria-valuenow\": String(value),\n \"aria-orientation\": orientation\n };\n if (attrs.id) {\n a.id = attrs.id;\n }\n // noinspection JSUnresolvedVariable\n if (attrs.ariaLabelledby) {\n a[\"aria-labelledby\"] = attrs.ariaLabelledby;\n }\n if (attrs.disabled) {\n a.style = {pointerEvents: \"none\"};\n a[\"aria-disabled\"] = \"true\";\n }\n const\n ps = positionStyle(value),\n rps = positionStyle(max - value + min);\n let\n handleStyle,\n bar0Style,\n bar1Style;\n\n if (orientation === \"vertical\") {\n handleStyle = {top: ps};\n bar0Style = {height: ps};\n bar1Style = {height: rps};\n } else {\n handleStyle = {left: ps};\n bar0Style = {width: rps};\n bar1Style = {width: ps};\n }\n return m(\"div\", a, m(\"div\", {class: \"mithril-range-bar nokey\"}, m(\"div\", {\n class: \"mithril-range-bar-0 nokey\",\n style: bar0Style\n }), m(\"div\", {\n class: \"mithril-range-bar-1 nokey\",\n style: bar1Style\n }), m(\"div\", {\n class: \"mithril-range-handle nokey\",\n style: handleStyle\n }, children)), !!attrs.name && m(\"input\", {\n type: \"hidden\",\n name: attrs.name,\n value: String(value)\n }));\n }\n };\n}\n\nexport default MithrilRange;\n","import m from \"mithril\";\nimport MithrilRange from \"../util/mithril-range\";\n\nlet\n __timer;\n\nconst\n resetMultiplier = (state) => {\n /*\n if (state.curMultiplier > 1 && state.value < state.curMax * (state.curMultiplier - 1)) {\n state.curMultiplier = Math.ceil(state.value / state.curMax);\n m.redraw();\n }\n */\n\n const\n // req multiplier to show value within negative bounds\n maxMultiplier = state.value > state.curMax ? Math.ceil(state.value / state.curMax) : 1,\n // req multiplier to show value within positive bounds\n minMultiplier = (state.curMin < 0 && state.value < state.curMin) ? Math.abs(Math.ceil(state.value / state.curMin)) : 1,\n // chosen\n multiplier = Math.min(Math.max(minMultiplier, maxMultiplier), state.maxMultiplier);\n\n if (state.curMultiplier !== multiplier) {\n state.curMultiplier = multiplier;\n m.redraw();\n }\n },\n increaseMultiplier = (state) => {\n if (\n state.value >= (state.curMax * state.curMultiplier) * 0.9\n && state.maxMultiplier > 1\n && state.curMultiplier <= state.maxMultiplier - 1\n ) {\n state.curMultiplier++;\n return true;\n }\n if (state.curMin < 0) return increaseMinMultiplier(state);\n },\n increaseMinMultiplier = (state) => {\n if (state.value <= (state.curMin * state.curMultiplier) * 0.9\n && state.maxMultiplier > 1\n && state.curMultiplier <= state.maxMultiplier - 1\n ) {\n state.curMultiplier++;\n return true;\n }\n },\n RangeSlider = {\n\n oninit: ({attrs, state}) => {\n Object.assign(state, {\n value: attrs.value || 0,\n initial: attrs.value || 0,\n curMax: attrs.max,\n curMin: attrs.min,\n curMultiplier: 1,\n maxMultiplier: attrs.multiplier || 1,\n id: \"I\" + Date.now()\n });\n // adjust initial multiplier\n if (state.maxMultiplier > 1) {\n if (state.value > attrs.max) {\n state.curMultiplier = Math.ceil(state.value / attrs.max);\n } else if (attrs.min < 0 && state.value < attrs.min) {\n state.curMultiplier = Math.abs(Math.ceil(state.value / attrs.min));\n }\n }\n },\n onupdate: ({attrs, state}) => {\n const\n attrsMultiplier = attrs.multiplier || 1,\n attrsValue = attrs.value || 0;\n\n if (state.curMax !== attrs.max || state.maxMultiplier !== attrsMultiplier) {\n\n Object.assign(state, {\n curMax: attrs.max,\n curMin: attrs.min,\n maxMultiplier: attrsMultiplier,\n value: attrs.value,\n initial: attrsValue\n });\n if (!increaseMultiplier(state)) {\n clearTimeout(state.timer);\n state.timer = setTimeout(resetMultiplier, 1000, state);\n }\n\n m.redraw();\n\n } else if (state.initial !== attrsValue) {\n\n Object.assign(state, {\n value: attrsValue,\n initial: attrsValue\n });\n\n clearTimeout(__timer);\n __timer = setTimeout(() => m.redraw(), 50);\n\n /*\n if (!increaseMultiplier(state)) {\n state.timer = setTimeout(resetMultiplier, 1000, state);\n clearTimeout(state.timer);\n }\n */\n }\n },\n view: ({attrs, state}) => m(\n \".range.flexcol.control.relative\" + (attrs.multiplier > 1 ? \".withmultiplier\" : \"\"),\n {\n ...attrs.class && {class: attrs.class},\n title: attrs.hint || \"Click, then use arrows to finetune value if needed\"\n },\n [\n ...attrs.title ? [m(\"label\", {class: \"rangelabel\", htmlFor: state.id}, attrs.title)] : [],\n m(MithrilRange, {\n onchange: (value) => {\n\n state.value = value;\n\n const increased = increaseMultiplier(state);\n\n if (!increased && state.curMultiplier > 1) {\n clearTimeout(state.timer);\n state.timer = setTimeout(resetMultiplier, 1000, state);\n }\n\n if (attrs.onchange) {\n attrs.onchange(value);\n } else {\n m.redraw();\n }\n },\n ondrag: (value) => {\n if (value !== state.value) {\n state.value = value;\n if (attrs.ondrag) attrs.ondrag(value);\n return true;\n }\n return false;\n },\n value: state.value || 0,\n min: (attrs.min || 0) * state.curMultiplier,\n max: (state.curMax * state.curMultiplier) || 100,\n step: attrs.step || 1,\n relative: attrs.relative,\n factor: attrs.factor\n }, [\n m(\".currentval\", attrs.parser\n ? attrs.parser(state.value, attrs.step < 1)\n : state.value\n ? attrs.step < 1\n ? state.value.toFixed(2)\n : (\"\" + Math.floor(state.value)) : \"\")\n ])\n /*\n m(\".datalist.flexrow\", [\n m(\"div\", attrs.getLabel(0)),\n m(\".ismax\", attrs.getLabel(attrs.max || 100))\n ])\n */\n ]\n )\n },\n RangeWidget = {\n view: ({attrs, state}) => m(RangeSlider, {\n value: attrs.value || 0,\n min: attrs.min || 0,\n max: attrs.max || 100,\n step: attrs.step || 0.1,\n class: (attrs.disabled ? \"disabled \" : \"\") + (attrs.class || \"\"),\n title: attrs.title,\n multiplier: attrs.multiplier,\n hint: attrs.hint,\n parser: attrs.parser,\n relative: attrs.relative,\n factor: attrs.factor,\n\n // values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n getLabel: (value) => (value ? \"\" + value : \"default\"),\n ondrag: (value) => {\n state.changed = true;\n state.value = value;\n if (attrs.onchange) attrs.onchange(value, true);\n return true;\n },\n onchange: (value) => {\n if (attrs.auto0) {\n value = 0;\n } else if (attrs.autoValue) value = attrs.autoValue;\n state.changed = true;\n state.value = value;\n if (attrs.onchange) attrs.onchange(value, false);\n return true;\n }\n })\n };\n\nexport default RangeWidget;\n","function startApp(target, appMetadata) {\n m.route(\n document.getElementById(target),\n appMetadata.default || \"/\",\n appMetadata.routes\n );\n}\n\nexport default startApp;","import {ConfirmPromise} from \"./widgets.core\";\n\nfunction confirm(text, onAction, onCancel = undefined, optionYes = \"YES\", optionNo = \"NO\") {\n ConfirmPromise(null, text, [optionNo, optionYes], onCancel)\n .then(({idx}) => {\n if (idx) onAction(idx); else if (onCancel) onCancel();\n })\n .catch(() => {\n if (onCancel) onCancel();\n });\n}\n\nfunction confirmPromise(text, options = [\"NO\", \"YES\"], cancelError = \"cancelled\") {\n\n return new Promise((resolve, reject) => {\n ConfirmPromise(null, text, options, () => reject(new Error(cancelError)))\n .then(({idx}) => {\n if (idx) {\n resolve(idx);\n } else {\n reject(new Error(cancelError));\n }\n });\n });\n\n}\n\nexport {confirm, confirmPromise};\n"],"names":["defineWidget","view","oninit","oncreate","onremove","onupdate","getAttrs","attrs","parentAttrs","panelInitialParams","data","initialParams","isCurrent","currentIndex","index","Icon","m","pack","icon","size","title","icontitle","undefined","role","onclick","iconClass","class","Button","state","children","download","link","href","target","text","busy","error","message","event","clearTimeout","debounce","setTimeout","result","then","catch","redraw","right","textClass","ButtonNew","rel","onClick","Empty","key","split","map","str","idx","all","length","setItem","params","lastIndex","lastParams","currentParams","Object","assign","current","items","onSelected","Selector","selected","isNaN","noinitial","element","horizontal","className","hideonly","hidesel","toolbarClass","item","Date","now","clickts","bodyHidden","toggle","bodyClass","widget","closeButton","ICONS","info","success","Notification","TOAST_SHORT","altContainer","mTimer","mNotifications","next","container","document","getElementById","n","splice","render","type","timer","add","push","clear","globalState","CardieWidget","nofold","cardid","action","collapsedAction","collapsedClass","expandedClass","cols","expandedView","collapsedView","titleWidget","titWidget","titleAttrs","titleClass","titleExpanded","titleCollapsed","collapsed","buttonClass","skipEmpty","e","classList","contains","shiftKey","onShiftOpen","expanded","uniq","subname","keys","forEach","startsWith","setCardStatus","alwaysView","getInput","value","parse","val","float","Number","parseFloat","parseInt","getValue","lastVal","hasOwnProperty","StaticFieldWidget","vnode","onDrag","staticClass","staticTitle","dom","readonly","hammer","Hammer","Manager","touchAction","panner","Pan","direction","DIRECTION_VERTICAL","singleTap","Tap","on","srcEvent","focus","destroy","InputWidget","reset","showInput","label","containerClass","staticField","multi","alwaysmulti","id","max","min","step","maxlength","validator","isValid","placeholder","hint","oninput","fromoninput","onchange","enterPressed","onblur","onkeyup","onkeypress","onenter","dragging","draginc","displayTitle","String","actions","NoticeWidget","SwitchWidget","unit","subline","checked","original","mCurrentCancelable","runCancelable","style","display","popupMessage","cancelable","contentClass","clearModal","ConfirmPromise","isModal","onCancel","Promise","resolve","opts","name","caption","buttons","options","widget.popupMessage","option","noCancel","Confirm","OverflowMenu","domItem","closeResolve","classes","initials","clases","finals","cla","join","packClassString","favlist","nodeName","getAttribute","ev","keyCode","blur","clone","window","structuredClone","o","JSON","stringify","promptName","body","refreshKey","PROPERTIES","TitleBarWidget","EntityTemplates","meta","onInput","valid","trim","description","embedded","notice","Notice","newvalue","tags","toLowerCase","filter","tag","ytref","indexOf","author","source","PresetTemplate","parameters","preset","presetComponents","types","globalData","fetcher","available","sourceAvailable","cosa","primaryTarget","elements","globalSource","rootSource","found","cosaIndex","fetchLive","isAvailable","isSourceAvailable","status","updatedTarget","field","finalSource","deleteCurrent","config","onSelect","parser","v","Array","isArray","reject","newMeta","Error","textNew","textHint","dialogOptions","finally","Separator","onTitleClick","logo","src","editable","auxaction","auxactions","overflow","isIOS","navigator","userAgent","match","__timer","iOSHackApplied","clamp","Math","quantize","steps","ceil","round","MithrilRange","elHit","elBar","elBar0","elBar1","elHandle","rcBar","absolute","ondrag","device","pressed","useAbsolute","factorCoarse","factorFine","orientation","moveHandleAbsolute","x","y","barLength","delta","bottom","top","left","setStyles","onPress","getBoundingClientRect","onPressAbsolute","isTouch","requestPointerLock","moveHandle","factor","metaKey","ctrlKey","newVal","movementY","movementX","s","moveHandleDelta","onMouseDown","button","addEventListener","onMouseMove","onMouseUp","clientX","clientY","preventDefault","onMove","removeEventListener","onRelease","onTouchStart","onTouchMove","onTouchEnd","t","changedTouches","onKeyDown","k","exitPointerLock","positionStyle","ps","rps","height","width","updateAttrs","relative","querySelector","a","tabIndex","ariaLabelledby","disabled","pointerEvents","handleStyle","bar0Style","bar1Style","resetMultiplier","maxMultiplier","curMax","minMultiplier","curMin","abs","multiplier","curMultiplier","increaseMultiplier","increaseMinMultiplier","RangeSlider","initial","attrsMultiplier","attrsValue","htmlFor","toFixed","floor","RangeWidget","getLabel","changed","auto0","autoValue","startApp","appMetadata","route","default","routes","confirm","onAction","optionYes","optionNo","confirmPromise","cancelError"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nebularstreams/libmui",
3
3
  "description": "Micro UI based on Mithril",
4
- "version": "2.0.4",
4
+ "version": "2.0.5",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
7
7
  "scripts": {
package/src/index.js CHANGED
@@ -8,10 +8,12 @@ import SwitchWidget from "./widgets/SwitchWidget";
8
8
  import * as OverflowUtils from "./widgets/OverflowUtils";
9
9
  import {clearModal, popupMessage} from "./util/widgets";
10
10
  import Separator from "./widgets/Separator";
11
+ import TitleBarWidget from "./widgets/TitleBarWidget";
11
12
  import RangeWidget from "./widgets/RangeWidget";
12
13
  import startApp from "./app/app"
13
14
  import defineWidget from "./util/widgets.utils";
14
-
15
+ import {OverflowMenu} from "./util/widgets.core";
16
+ import {confirm, confirmPromise} from "./util/fuckingconfirm.js"
15
17
  import "./style.js"
16
18
 
17
19
  export {
@@ -22,13 +24,17 @@ export {
22
24
  Icon,
23
25
  InputWidget,
24
26
  NoticeWidget,
27
+ OverflowMenu,
25
28
  OverflowUtils,
26
29
  RangeWidget,
27
30
  Selector,
28
31
  SwitchWidget,
29
32
  Separator,
33
+ TitleBarWidget,
30
34
  clearModal,
31
35
  popupMessage,
32
36
  startApp,
33
- defineWidget
37
+ defineWidget,
38
+ confirm,
39
+ confirmPromise
34
40
  }
@@ -0,0 +1,60 @@
1
+ import m from "mithril"
2
+ import {ButtonNew, defineWidget} from "./Basic";
3
+ import InputWidget from "./InputWidget.js"
4
+ import {OverflowMenu} from "../util/widgets.core.js"
5
+
6
+ const TitleBarWidget = defineWidget(
7
+ ({attrs, dom}) => m(
8
+ ".titlebar.noshrink.flexrow",
9
+ {
10
+ class: (attrs.class ? " " + attrs.class : "unitheight bg-window-hi pad-2 pad-h shadow-2 font-125"),
11
+ ...attrs.onTitleClick && {onclick: attrs.onTitleClick}
12
+ },
13
+ [
14
+ ...attrs.onClick ? [m(ButtonNew, {icon: "arrow-left", onClick: () => attrs.onClick()})] : [],
15
+
16
+ ...attrs.logo
17
+ ? [m("img.title-logo", {src: attrs.logo})]
18
+ : [],
19
+ ...(attrs.editable && attrs.onchange)
20
+ ? [
21
+ m(InputWidget, {
22
+ containerClass: "grows" + (attrs.onClick ? "" : " pad-2 pad-h"),
23
+ hint: attrs.title, // attrs.hint,
24
+ onchange: attrs.onchange,
25
+ oninput: () => {
26
+ },
27
+ value: attrs.value
28
+ })
29
+ ]
30
+ : [m("span.grows.ellipsis", {class: attrs.onClick ? "" : "pad-2 pad-h"}, attrs.title)],
31
+
32
+ ...attrs.auxaction ? [m(ButtonNew, {icon: attrs.auxaction.icon, onClick: attrs.auxaction.onClick})] : [],
33
+ ...attrs.auxactions
34
+ ? attrs.auxactions.map((action) => m(ButtonNew, {
35
+ class: action.class,
36
+ title: action.title,
37
+ icon: action.icon,
38
+ text: action.caption,
39
+ onClick: action.onClick
40
+ }))
41
+ : [],
42
+ ...attrs.action ? [m(ButtonNew, {icon: attrs.action.icon, onClick: attrs.action.onClick})] : [],
43
+ ...attrs.overflow
44
+ ? [
45
+ m(ButtonNew, {
46
+ icon: attrs.overflow.icon || "ellipsis-v",
47
+ class: attrs.overflow.class || "",
48
+ onClick: () => OverflowMenu(
49
+ dom,
50
+ {title: attrs.title},
51
+ attrs.overflow.items
52
+ )
53
+ .then(({action}) => action.onClick())
54
+ })
55
+ ]
56
+ : []
57
+ ])
58
+ );
59
+
60
+ export default TitleBarWidget;