@nebularstreams/libmui 0.1.14 → 0.1.15
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/package.json +1 -1
- package/dist/libui.cjs.js +0 -2
- package/dist/libui.cjs.js.map +0 -1
- package/dist/libui.umd.js +0 -2
- package/dist/libui.umd.js.map +0 -1
package/package.json
CHANGED
package/dist/libui.cjs.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("mithril");function t(e,t,a){const n=("function"==typeof e?e(t):e)||{};return a&&(n.initialParams=a),n}const a=({currentIndex:e},t)=>e===t,n={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}})},i={view:({attrs:t,state:a,children:i})=>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(n,t)]:[],...t.text?[e("span.pad-1.pad-h",{class:t.textClass||null},t.text)]:[],...t.icon&&t.right?[e(n,t)]:[],...i])},l={view:({attrs:t,state:a,children:i})=>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(n,t)]:[],...t.text?[e("span.pad-1.pad-h",{class:t.textClass||null},t.text)]:[],...t.icon&&t.right?[e(n,t)]:[],...i])},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(n,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)]:[]])},o=(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()},s={oninit:({attrs:e,state:t})=>{(t=e.state||t).setItem=(a,...n)=>o(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)=>o(e,e.state||t,a,n)},view:({attrs:n,state:o})=>{o=n.state||o;const{current:s}=o;return e((n.element||"widget")+".selector"+(n.horizontal?".flexrow":".flexcol")+(n.className?"."+n.className:""),{...n.key&&{key:n.key},class:(o.current?"hascurrent":"empty")+(n.class?" "+n.class:"")},[...n.hideonly&&!(n.items.length>1)||n.hidesel?[]:[e("nav.toolbar.fullwidth"+(n.horizontal?".flexcol":".flexrow"),{"aria-label":n["aria-label"]||n.title||"selector",class:n.toolbarClass},n.items.map(((t,n)=>e(i,{class:(t.class?t.class+" ":"")+(a(o,n)?"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()-o.clickts<200||(o.clickts=Date.now(),o.bodyHidden=!1,o.setItem(n))}}))))],...s?[...n.toggle&&!o.bodyHidden?[e(l,{class:"selectornotch "+(o.bodyHidden?"bodyhidden":"bodyshown"),icon:o.bodyHidden?"caret-up":"caret-down",title:o.bodyHidden?"expand panel":"contract panel",onClick:()=>{o.bodyHidden=!o.bodyHidden,e.redraw()}})]:[],...n.toggle&&o.bodyHidden?[]:[e(".grows.flexcol.ohidden",{class:n.bodyClass,role:"presentation"},[e(s.widget,t(s.attrs,n,o.currentParams),s.children)])],...n.closeButton?[e(i,{class:"closebutton absolute toright",icon:"times",onclick:()=>{o.setItem(-1)},"aria-label":"close item"})]:[]]:e(r,n)])}},c={info:"info",error:"exclamation-triangle",success:"check"};const d=new function(t=5e3,a){let n,l=[];function r(){const o=a||document.getElementById("notification-container");if(l.length){const a=l.splice(0,1)[0];!function(t,a){e.render(t,e(i,{class:"notification "+a.type,text:a.text,icon:c[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)=>{l.push({text:e,type:t}),n||r()},clear:()=>{l=[],r()}}};function u(e,t,a,n,i){return{...e&&{view:e},...t&&{oninit:t},...a&&{oncreate:a},...i&&{onupdate:i},...n&&{onremove:n}}}const p={};const h=u((({attrs:t,state:a,children:n})=>{const{nofold:i,cardid:r,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:x,titleClass:b,bodyClass:k,titleExpanded:M,titleCollapsed:C}=t,I=!i&&(r?!p[r]:!!a.collapsed),E=I?w?w(t,a):[]:f?f(t,a):n||[],L=y?e(y,x||{}):s?e("span.ellipsis.ohidden.unfold",s):void 0,N=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:b||"pad-2"}:{class:`${b||"pad-2"} ${N||""}`,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}}(r,I):a.collapsed=!a.collapsed,e.redraw())}},!c||!i&&I?d&&I?[e(l,d),L]:L:[e(l,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(l,{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(l,{...t,class:"transp pad-2"}))):[],...t.action?[e(l,{...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=u((({attrs:t,children:a})=>a.length?e(".notice.cardie.flexcol.pad-3",{class:t.class||"marg-2 font-75"},e(".flexrow",[...t.icon?[e(n,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(n,t)]:[],e(".pad-2.pad-h",t.text)]))),x=u((({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(n,{iconClass:"pad-2 pad-h",icon:a.checked?"toggle-on":"toggle-off"})]:[e(n,{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 b;function k(e){"function"==typeof b&&(b(),b=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&&(b=a,i.onclick=e=>{"modal-container"===e.target.id&&k(i)}),!t)return delete M.redraw,void(null===t?i.style.display="none":k(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 C(t,a,n,l){return new Promise((r=>{function o(e){M(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":(l=l||{}).favlist,".isfav":t&&t.classList.contains("isfav"),".isplay":t&&t.classList.contains("selected")});M(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}):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&&o({domItem:t,item:a,action:n})},onchange:e=>{e.target.blur(),o({domItem:t,item:a,action:n,value:e.target.value})}}):e(i,{...n,onclick:()=>o({domItem:t,item:a,action:n})},n.caption)))])}),!0)}))}const I=window.structuredClone?window.structuredClone:e=>JSON.parse(JSON.stringify(e));function E(e,t,a,n,i={}){setTimeout((()=>C(document.body,{title:e},[{type:"text",hint:a,value:t}]).then((({value:e})=>(i.refreshKey=String(Date.now()),n(e))))),100)}const L=[["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]],N=u((({attrs:t})=>e("h2.marg-2.no-marg-bottom",t.title))),T=u((({attrs:t})=>{const{type:a="changes",meta:n,onInput:i,title:r,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(N,{title:r})]:[],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(l,{class:"noshrink accentbutton unitheightsmall col-4",text:"save "+a,onClick:()=>{n.title?.trim().length&&(c||n.description?.trim().length)?(M(null),i(n)):d.add("Information is incomplete or invalid")}}))])])})),D=u((({attrs:t})=>{const{parameters:a,preset:n,presetComponents:i,types:r,globalData:o,fetcher:s}=t,c=[],u=[],p=r?L:L.filter((e=>{const[,t,i,l,r]=e,s=t?n[t]:n,d=r?o:a,p=t?d[t]:d;let m=!1;if(i.length){for(const e of i)s&&void 0!==s[e]&&(m=c[l]=!0),void 0!==p[e]&&(m=u[l]=!0);return m}return m=!0,u[l]=!!p,c[l]=!!s,m}));return e("ul.flexrow.wrap.userdialog",p.length?p.map((p=>{const[m,h,v,g,f,w]=p,y=r?void 0:h?n[h]:n,b=f?o:a,k=r?void 0:h?b[h]:b,M=r||c[g],C=u[g];return[...i?[e(x,{title:`Include ${p[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"},m)]:[],...t.types?[]:[e(l,{class:"col-3"+(C?"avail":"unavail"),icon:"sync",title:`Copy ${m} 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]=I(a)}}else if(0===v.length&&h&&void 0!==k){const e=w&&s?s(k,g):k;n[h]=I(e)}t.redraw&&t.redraw(),d.add(`updated ${m} from current scene`)}}),e(l,{class:"col-3 "+(M?"":"disabled text-lo"),icon:"trash",title:`Delete ${m} 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 P=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?d.add("No items available"):C(document.body,{title:n},o).then((({action:e})=>e.onClick()))},promptEntity:(t,a,n,i={})=>new Promise(((l,r)=>{M(e(T,{meta:t,type:n,title:a,options:i,onInput:e=>l(e)}),(()=>{r(new Error("cancelled"))}))})),promptName:E,promptOptions:function(t,a,n={}){const{title:i,field:l,icon:r,textNew:o,textHint:s,resolve:c}=n,u=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?d.add("No items available"):C(document.body,{title:i},[...o&&!l?[{icon:"plus",caption:o,onClick:()=>E(o,"",s,(t=>{t&&t&&t.trim()&&(a(t),e.redraw())}))}]:[],...u]).then((({action:e})=>e.onClick())).finally((()=>{}))},promptPreset:(t,a,n={})=>new Promise(((i,l)=>{M((()=>e(D,{...n,preset:t,parameters:a,redraw:()=>M.redraw()})),(()=>{l(new Error("cancelled"))}))}))});const S=u((({attrs:t,children:a})=>e(".separator",{class:t.class||"mini",...t.onClick&&{onclick:t.onClick}},[e("span.grows",t.text),...a||[]]))),O=!!navigator.userAgent.match(/iPhone|iPad|iPod/i);let z,A=!1;function V(e,t,a){return Math.min(Math.max(e,t),a)}function j(e,t,a,n){if(a-t<=0)return t;if(n<=0)return V(e,t,a);const i=Math.ceil((a-t)/n);return V(t+Math.round(i*(e-t)/(a-t))*n,t,a)}function H(){let t,a,n,i,l,r,o,s,c,d=0,u=!1,p=!1,m=4,h=1,v=0,g=10,f=0,w=1,y="horizontal";function x(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=V(n,0,a);const i=j(n/a*(g-v)+v,v,g,w);return z(i),i}function b(t,n,i){return p?function(t,n){u=o=!0,r=a.getBoundingClientRect();const i=x(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?x(e,t):function(e,t,a){const n=a.shiftKey?m:a.metaKey||a.ctrlKey?4*m: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=j(l,v,g,w),z(l),l}(0,0,a)}function M(e){2!==d&&(d=1,0===e.button&&(window.addEventListener("mousemove",C),window.addEventListener("mouseup",I),b(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",N);const a=e.changedTouches[0];b(a.clientX,a.clientY,e)}function L(e){e.preventDefault();const t=e.changedTouches[0];D(t.clientX,t.clientY,e)}function N(e){t.removeEventListener("touchmove",L),t.removeEventListener("touchend",N);const a=e.changedTouches[0];P(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=j(f+e,v,g,w)}else if(34===a){t.preventDefault();let e=Math.max((g-v)/10,w);e<=0&&(e=1),n=j(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,z(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 z(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 H(e){v=e.min,g=e.max,w="number"!=typeof e.step||Number.isNaN(e.step)?1:V(e.step,0,g-v),y="vertical"===e.orientation?"vertical":"horizontal",s=e.onchange,c=e.ondrag,"number"==typeof e.value&&(f=V(e.value,v,g)),p=!e.relative,m=e.factor&&e.factor[0]||4,h=e.factor&&e.factor[1]||1}return{oncreate:({attrs:e,dom:r})=>{O&&!A&&(window.addEventListener("touchmove",(function(){})),A=!0),H(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",T)},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",N),t.removeEventListener("keydown",T)},view:function({attrs:t,children:a}){H(t),f=j(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)}))}}}exports.quantize=j;const K=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())},B=e=>e.value>=e.curMax*e.curMultiplier*.9&&e.maxMultiplier>1&&e.curMultiplier<=e.maxMultiplier-1?(e.curMultiplier++,!0):e.curMin<0?F(e):void 0,F=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}),B(a)||(clearTimeout(a.timer),a.timer=setTimeout(K,1e3,a)),e.redraw()):a.initial!==i&&(Object.assign(a,{value:i,initial:i}),clearTimeout(z),z=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(H,{onchange:n=>{a.value=n;!B(a)&&a.curMultiplier>1&&(clearTimeout(a.timer),a.timer=setTimeout(K,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):"")])])},W={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)})};exports.m=e,exports.Button=i,exports.ButtonNew=l,exports.CardieWidget=h,exports.Empty=r,exports.Icon=n,exports.InputWidget=w,exports.NoticeWidget=y,exports.OverflowUtils=P,exports.RangeWidget=W,exports.Selector=s,exports.Separator=S,exports.SwitchWidget=x,exports.clearModal=function(){const e=document.getElementById("modal-container");return"none"!==e.style.display&&(k(e),!0)},exports.defineWidget=u,exports.popupMessage=M,exports.startApp=function(e,t){m.route(document.getElementById(e),t.default||"/",t.routes)};
|
|
2
|
-
//# sourceMappingURL=libui.cjs.js.map
|
package/dist/libui.cjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"libui.cjs.js","sources":["../src/widgets/Basic.js","../src/util/widgets.utils.js","../src/widgets/CardieWidget.js","../src/widgets/InputWidget.js","../src/widgets/NoticeWidget.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\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","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 {ButtonNew} 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 defineWidget from \"../util/widgets.utils\";\nimport {Icon} 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","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","/* global EXPORTS */\n\nconst\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\nfunction 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\nexports.quantize = quantize;\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":["getAttrs","attrs","parentAttrs","panelInitialParams","data","initialParams","isCurrent","currentIndex","index","Icon","view","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","oninit","selected","isNaN","noinitial","onupdate","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","defineWidget","oncreate","onremove","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","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","exports","resetMultiplier","maxMultiplier","curMax","minMultiplier","curMin","abs","multiplier","curMultiplier","increaseMultiplier","increaseMinMultiplier","RangeSlider","initial","attrsMultiplier","attrsValue","htmlFor","toFixed","floor","RangeWidget","getLabel","changed","auto0","autoValue","appMetadata","route","default","routes"],"mappings":"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"}
|
package/dist/libui.umd.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("mithril")):"function"==typeof define&&define.amd?define(["exports","mithril"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).LibUI={},e.m)}(this,(function(e,t){"use strict";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:e})=>t(`i.icon.${e.pack||"fas"}.fa-${e.icon||"cog"}${e.size?".fa-"+e.size+"x":""}`,{title:e.icontitle||void 0,role:"presentation",onclick:e.onclick||null,...e.iconClass&&{class:e.iconClass}})},l={view:({attrs:e,state:a,children:n})=>t(e.download||e.link?"a.button":"button",{...e.link&&{href:e.link},...e.download&&{download:e.download},...e.target&&{target:e.target},"aria-label":e["aria-label"]||e.title||e.text,title:e.title||e["aria-label"],class:(e.class||"")+(a.busy?" busy":""),...a.error&&{"data-error":a.error.message},...e.onclick&&{onclick:n=>{clearTimeout(a.debounce),a.debounce=setTimeout((()=>{const i=e.onclick(n,e);i&&i.then&&i.catch&&(a.busy=!0,t.redraw(),i.then((()=>{a.busy=!1,t.redraw()})).catch((e=>{a.busy=!1,a.error=e,t.redraw()})))}),25)}}},[...e.icon&&!e.right?[t(i,e)]:[],...e.text?[t("span.pad-1.pad-h",{class:e.textClass||null},e.text)]:[],...e.icon&&e.right?[t(i,e)]:[],...n])},r={view:({attrs:e,state:a,children:n})=>t(e.download||e.link?"a.button":"button",{...e.link&&{href:e.link},...e.download&&{rel:"nofollow",download:e.download},...e.target&&{target:e.target},"aria-label":e["aria-label"]||e.title||e.text,title:e.title||e["aria-label"],class:(e.class||"")+(a.busy?" busy":""),...a.error&&{"data-error":a.error.message},...e.onClick&&{onclick:n=>{clearTimeout(a.debounce),a.debounce=setTimeout((()=>{const i=e.onClick(n,e);i&&i.then&&i.catch&&(a.busy=!0,t.redraw(),i.then((()=>{a.busy=!1,t.redraw()})).catch((e=>{a.busy=!1,a.error=e,t.redraw()})))}),25)}}},[...e.icon&&!e.right?[t(i,e)]:[],...e.text?[t("span.pad-1.pad-h",{class:e.textClass||null},e.text)]:[],...e.icon&&e.right?[t(i,e)]:[],...n])},o={view:({attrs:e,children:a})=>t(".flexcol.flexcenter.al-center.grows.emptywidget",{...e.class&&{class:e.class},...e.key&&{key:e.key},role:"presentation"},[t(i,e),...e.message?[t(".marg-2.marg-v",{role:"status",class:e.size>4?"font-150":"font-100","aria-label":e.message},e.message.split("\n").map(((e,a,n)=>1===n.length?e:t("p.msg"+a,e))))]:[],...a?[t(".flexcol.additional",a)]:[]])},s=(e,a,n,i)=>{const l=a.currentIndex,r=a.currentParams;-1===n?Object.assign(a,{current:null,currentIndex:-1,currentParams:[]}):Object.assign(a,{current:e.items[n]||null,currentIndex:a.current?n:-1,currentParams:i||[]}),e.onSelected&&e.onSelected(a.current,a.currentParams,a.currentIndex!==l,r),t.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:e,state:i})=>{i=e.state||i;const{current:s}=i;return t((e.element||"widget")+".selector"+(e.horizontal?".flexrow":".flexcol")+(e.className?"."+e.className:""),{...e.key&&{key:e.key},class:(i.current?"hascurrent":"empty")+(e.class?" "+e.class:"")},[...e.hideonly&&!(e.items.length>1)||e.hidesel?[]:[t("nav.toolbar.fullwidth"+(e.horizontal?".flexcol":".flexrow"),{"aria-label":e["aria-label"]||e.title||"selector",class:e.toolbarClass},e.items.map(((e,a)=>t(l,{class:(e.class?e.class+" ":"")+(n(i,a)?"accent":"nel"),icon:e.icon||null,...e.title&&{title:e.title},...e["aria-label"]&&{"aria-label":e["aria-label"]},...e.text&&{text:e.text},onclick:()=>{Date.now()-i.clickts<200||(i.clickts=Date.now(),i.bodyHidden=!1,i.setItem(a))}}))))],...s?[...e.toggle&&!i.bodyHidden?[t(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,t.redraw()}})]:[],...e.toggle&&i.bodyHidden?[]:[t(".grows.flexcol.ohidden",{class:e.bodyClass,role:"presentation"},[t(s.widget,a(s.attrs,e,i.currentParams),s.children)])],...e.closeButton?[t(l,{class:"closebutton absolute toright",icon:"times",onclick:()=>{i.setItem(-1)},"aria-label":"close item"})]:[]]:t(o,e)])}},d={info:"info",error:"exclamation-triangle",success:"check"};const u=new function(e=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(e,a){t.render(e,t(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||e)}else t.render(o,""),n=null}return{add:(e,t)=>{i.push({text:e,type:t}),n||r()},clear:()=>{i=[],r()}}};function m(e,t,a,n,i){return{...e&&{view:e},...t&&{oninit:t},...a&&{oncreate:a},...i&&{onupdate:i},...n&&{onremove:n}}}const p={};const h=m((({attrs:e,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}=e,I=!i&&(l?!p[l]:!!a.collapsed),E=I?w?w(e,a):[]:f?f(e,a):n||[],L=y?t(y,b||{}):s?t("span.ellipsis.ohidden.unfold",s):void 0,T=g?"fa-sync":"fa-caret-down "+(I?"iscollapsed":"isexpanded");return E.length||!e.skipEmpty?t(v||"ul",{class:"cardie ohidden noshrink "+(h?"flexcol ":"flexrow wrap ")+(e.class?" "+e.class:"")+(i?" expanded":" "+(I?"collapsed "+(u||""):"expanded "+(m||"")))+(o?" marg-"+o:" marg-2")+(y?" withwidget":"")+(g?" busycard":"")},[...L?[t(".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&&e.onShiftOpen?e.onShiftOpen():e.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,t.redraw())}},!c||!i&&I?d&&I?[t(r,d),L]:L:[t(r,c),L])]:[],...E.length?[t(".flexbreak"),t(".cardiebody.fadein-filter.grows",{class:(h?"flexcol ":"flexrow wrap")+" "+(k||"")},...E)]:[],...e.alwaysView?[e.alwaysView({attrs:e,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:e=>{const{attrs:a,state:n}=e;return n.attrs=a,t(".input-static.w-100.ellipsis",{class:(a.onDrag?"withdrag ":"")+(a.staticClass||"grows"),...a.staticTitle&&{title:a.staticTitle},...a.onDrag||{onclick:a.onClick},oncreate:({dom:t,state:n})=>{if(a.onDrag&&!a.readonly){const a=n.hammer=new Hammer.Manager(t,{touchAction:"pan-y"}),i=new Hammer.Pan({direction:Hammer.DIRECTION_VERTICAL}),l=new Hammer.Tap;a.add([i,l]),a.on("tap",(()=>e.state.attrs.onClick())),a.on("panup",(t=>e.state.attrs.onDrag(-1,t.srcEvent))),a.on("pandown",(t=>e.state.attrs.onDrag(1,t.srcEvent))),a.on("panend pancancel",(t=>e.state.attrs.onDrag(0,t.srcEvent)))}a.focus&&t.focus()},onremove:({state:e})=>{e.hammer&&e.hammer.destroy()}},a.value)}},w={view:({attrs:e,state:a})=>{const n=e=>{a.value&&a.showInput&&delete a.showInput,delete a.value,e&&t.redraw()};return t(".textfield.flexcol.relative",{class:(e.label?"witharia":"")+(e.containerClass?" "+e.containerClass:""),...e.label&&{"aria-label":e.label}},[!e.staticField||!e.readonly&&a.showInput?!a.multi&&!e.alwaysmulti||e.type&&"text"!==e.type?t("input.w-100",{...e.id&&{id:e.id},type:e.type||"text",...void 0!==e.max&&{max:e.max},...void 0!==e.min&&{min:e.min},...e.step>0&&{step:e.step},...e.maxlength&&{maxlength:e.maxlength},class:(e.class||"")+(e.validator?a.isValid?" bg-ok":" bg-error":""),...e.title&&{title:e.title},value:g(e,a),placeholder:e.hint||"",oninput:t=>{a.value=v(e,t.target.value),t.fromoninput=!0,e.validator&&(a.isValid=e.validator(a.value)),e.onchange&&(e.oninput||e.onchange)(a.value,t)},onchange:t=>{e.onchange&&(e.validator&&(a.isValid=e.validator(a.value)),t.enterPressed=a.enterPressed,delete a.enterPressed,e.onchange(v(e,t.target.value),t),e.staticField?n(!0):delete a.value)},onblur:()=>{a.showInput&&n(!0)},onkeyup:t=>{a.showInput&&("Escape"===t.key?n(!0):"Enter"===t.key&&(a.value!==e.value&&a.value||(e.onchange(e.value,t),n(!0))))},onkeypress:t=>{a.showInput||"Enter"!==t.key||e.onenter&&e.onenter(t.target.value,t)}}):t("textarea.w-100",{class:e.class,value:g(e,a),...e.title&&{title:e.title},placeholder:e.hint||"",oninput:t=>{a.value=v(e,t.target.value),e.validator&&(a.isValid=e.validator(a.value)),e.onchange&&(e.oninput||e.onchange)(a.value,t,!0)},onchange:t=>{if(e.onchange){e.validator&&(a.isValid=e.validator(a.value));const i=v(e,t.target.value);n(!1),e.onchange(i,t,!0)}},onblur:()=>{a.showInput&&n(!0)},onkeyup:e=>{"Escape"===e.key&&a.showInput&&n(!1)}}):t(f,{readonly:e.readonly,staticClass:(a.dragging?"accent ":"")+(e.staticClass||""),staticTitle:e.staticTitle||e.draginc&&"Click then drag up and down to modify value, or just click to enter a custom value",value:e.displayTitle||g(e,a),focus:e.focus,...e.draginc&&!e.readonly&&{onDrag:(n,i)=>{if(n){a.dragging=!0;let t=g(e,a,!0);if(Number.isNaN(t)||void 0===t)return;t+=n*e.draginc,void 0!==e.max&&t>e.max&&(t=e.max),void 0!==e.min&&t<e.min&&(t=e.min),a.value="number"===e.type?t:String(t),e.onchange(a.value,i)}else delete a.dragging,delete a.value,t.redraw()}},...e.readonly||{onClick:()=>{a.showInput=!0,a.value=e.value,t.redraw()}}}),t(".span.actions.absolute.right.bottom",[...!e.multi||e.alwaysmulti||e.type&&"text"!==e.type?[]:[t(r,{icon:a.multi?"angle-double-up":"angle-double-down",class:"pad-2 transp",onClick:()=>{a.multi=!a.multi,t.redraw()}})],...e.actions?e.actions.map((e=>t(r,{...e,class:"transp pad-2"}))):[],...e.action?[t(r,{...e.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=m((({attrs:e,children:a})=>a.length?t(".notice.cardie.flexcol.pad-3",{class:e.class||"marg-2 font-75"},t(".flexrow",[...e.icon?[t(i,e)]:[],t(".pad-2.pad-h",e.text)]),...a):t(".notice.cardie.flexrow.pad-3",{class:e.class||"marg-2 font-75",onclick:e.onClick},[...e.icon?[t(i,e)]:[],t(".pad-2.pad-h",e.text)]))),b=m((({attrs:e,state:a})=>t((e.unit||"")+".flexrow"+(e.subline?" withsubline":""),{class:e.class,text:e.text,title:e.title||null,onclick:()=>{a.checked=!a.checked,e.onchange&&e.onchange(a.checked),t.redraw()}},e.right?[...e.text?[t("span.grows.caption",e.subline?{"data-subline":e.subline}:{},e.text)]:[],t(i,{iconClass:"pad-2 pad-h",icon:a.checked?"toggle-on":"toggle-off"})]:[t(i,{iconClass:"pad-2 pad-h",icon:a.checked?"toggle-on":"toggle-off"}),...e.text?[t("span.grows.caption",e.subline?{"data-subline":e.subline}:{},e.text)]:[]])),(({attrs:e,state:t})=>{t.checked=t.original=e.checked}),null,null,(({attrs:e,state:a})=>{e.checked!==a.original&&(a.checked=a.original=e.checked,t.redraw())}));let x;function k(e){"function"==typeof x&&(x(),x=void 0),e.style.display="none",delete M.redraw}function M(e,a=!1,n=".modal-content"){const i=document.getElementById("modal-container");if(i.classList.toggle("iscustom",".modal-content"!==n),a&&(x=a,i.onclick=e=>{"modal-container"===e.target.id&&k(i)}),!e)return delete M.redraw,void(null===e?i.style.display="none":k(i));i.style.display="flex",M.redraw=()=>{t.render(i,t(n,{role:"alertdialog","aria-labelledby":"modaltitle","aria-modal":!0},["function"==typeof e?e():e]))},M.redraw()}function C(e,a,n,i){return new Promise((r=>{function o(e){M(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":e&&e.classList.contains("isfav"),".isplay":e&&e.classList.contains("selected")});M(t({view:()=>t(s,{onclick:t=>{if("INPUT"===t.target.nodeName)return;const n=t.target.getAttribute("data-action");n?o({domItem:e,item:a,action:n}):M(null)}},[...a.title?[t("h3",{id:"modaltitle"},a.title)]:[],...n.map((n=>"text"===n.type?t("input.action",{value:n.value||"",type:"text",placeholder:n.hint||"",oncreate:({dom:e})=>e.focus(),onkeyup:t=>{27===t.keyCode&&o({domItem:e,item:a,action:n})},onchange:t=>{t.target.blur(),o({domItem:e,item:a,action:n,value:t.target.value})}}):t(l,{...n,onclick:()=>o({domItem:e,item:a,action:n})},n.caption)))])}),!0)}))}const I=window.structuredClone?window.structuredClone:e=>JSON.parse(JSON.stringify(e));function E(e,t,a,n,i={}){setTimeout((()=>C(document.body,{title:e},[{type:"text",hint:a,value:t}]).then((({value:e})=>(i.refreshKey=String(Date.now()),n(e))))),100)}const L=[["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]],T=m((({attrs:e})=>t("h2.marg-2.no-marg-bottom",e.title))),N=m((({attrs:e})=>{const{type:a="changes",meta:n,onInput:i,title:l,options:o}=e,s=n.title?.trim().length&&n.description?.trim().length,c=o&&o.embedded;return t(".flexcol.grows.ohidden.fadein",[...e.title?[t(T,{title:l})]:[],t(".flexrow.wrap.grows.pad-3.propsgroup.scrolly",[...e.notice?[t(y,{class:"marg-1 marg-v withbottommargin font-75 col-12",size:1,icon:"info-circle",text:e.notice})]:[],t(".witharia.col-12.pad-1.pad-v",{"aria-label":a+" name"},t(w,{class:"pad-2 pad-xh "+(s?"valid":"invalid"),value:n.title,maxlength:64,onchange:e=>{n.title=e,t.redraw()}})),...c?[]:[t(".col-12.witharia.pad-1.pad-v",{"aria-label":"description"},t(w,{class:"pad-2 pad-xh "+(n.description?"valid":"invalid"),value:n.description,maxlength:240,multi:!0,alwaysmulti:!0,onchange:e=>{n.description=e,t.redraw()}})),t(".col-8.witharia.pad-1.pad-v",{"aria-label":"tags"},t(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(",")}})),t(".col-4.witharia.pad-1.pad-v",{"aria-label":"youtube video"},t(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}}))],t(".col-4.witharia.pad-1.pad-v",{"aria-label":"content attribution"},t(w,{class:"pad-2 pad-xh",value:n.author,hint:"author name",maxlength:128,onchange:e=>{n.author=e}})),t(".col-4.witharia.pad-1.pad-v",{"aria-label":"license or author link"},t(w,{class:"pad-2 pad-xh",hint:"https://...",value:n.link,maxlength:128,onchange:e=>{n.link=e}})),t(".col-4.witharia.pad-1.pad-v",{"aria-label":"source domain"},t(w,{class:"pad-2 pad-xh",value:n.source,hint:"example.com",maxlength:128,onchange:e=>{n.source=e}})),t(".col-12.al-right.marg-2.marg-v",t(r,{class:"noshrink accentbutton unitheightsmall col-4",text:"save "+a,onClick:()=>{n.title?.trim().length&&(c||n.description?.trim().length)?(M(null),i(n)):u.add("Information is incomplete or invalid")}}))])])})),D=m((({attrs:e})=>{const{parameters:a,preset:n,presetComponents:i,types:l,globalData:o,fetcher:s}=e,c=[],d=[],m=l?L:L.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 t("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?o:a,k=l?void 0:h?x[h]:x,M=l||c[g],C=d[g];return[...i?[t(b,{title:`Include ${m[0]} in snapshots`,class:"grows unitheightsmall"+(i[g]?" accent":""),checked:!!i[g],onchange:a=>{i[g]=!i[g],t.redraw(),e.redraw&&e.redraw()}}),t(".grows",{class:M?"avail":"unavail"},p)]:[],...e.types?[]:[t(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]=I(a)}}else if(0===v.length&&h&&void 0!==k){const e=w&&s?s(k,g):k;n[h]=I(e)}e.redraw&&e.redraw(),u.add(`updated ${p} from current scene`)}}),t(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];e.redraw&&e.redraw()})()})],t(".flexbreak")]})):t("h3","Preset is Empty"))}));var P=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"):C(document.body,{title:n},o).then((({action:e})=>e.onClick()))},promptEntity:(e,a,n,i={})=>new Promise(((l,r)=>{M(t(N,{meta:e,type:n,title:a,options:i,onInput:e=>l(e)}),(()=>{r(new Error("cancelled"))}))})),promptName:E,promptOptions:function(e,a,n={}){const{title:i,field:l,icon:r,textNew:o,textHint:s,resolve:c}=n,d=Array.isArray(e)?e.map((e=>({icon:r,caption:l?e[l]:e,onClick:t=>a(e,t)}))):Object.keys(e).map((t=>({icon:e[t].icon||r,caption:e[t].caption||t,onClick:n=>a(c&&void 0!==e[t].value?e[t].value:e[t],n)})));Array.isArray(e)&&!e.length?u.add("No items available"):C(document.body,{title:i},[...o&&!l?[{icon:"plus",caption:o,onClick:()=>E(o,"",s,(e=>{e&&e&&e.trim()&&(a(e),t.redraw())}))}]:[],...d]).then((({action:e})=>e.onClick())).finally((()=>{}))},promptPreset:(e,a,n={})=>new Promise(((i,l)=>{M((()=>t(D,{...n,preset:e,parameters:a,redraw:()=>M.redraw()})),(()=>{l(new Error("cancelled"))}))}))});const S=m((({attrs:e,children:a})=>t(".separator",{class:e.class||"mini",...e.onClick&&{onclick:e.onClick}},[t("span.grows",e.text),...a||[]]))),O=!!navigator.userAgent.match(/iPhone|iPad|iPod/i);let z,j=!1;function V(e,t,a){return Math.min(Math.max(e,t),a)}function A(e,t,a,n){if(a-t<=0)return t;if(n<=0)return V(e,t,a);const i=Math.ceil((a-t)/n);return V(t+Math.round(i*(e-t)/(a-t))*n,t,a)}function H(){let e,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=V(n,0,a);const i=A(n/a*(g-v)+v,v,g,w);return z(i),i}function x(e,n,i){return m?function(e,n){u=o=!0,r=a.getBoundingClientRect();const i=b(e,n);i!==f&&(f=i,c&&!1!==c(f)&&t.redraw())}(e,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=A(l,v,g,w),z(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(t){if(1===d)return;e.addEventListener("touchmove",L),e.addEventListener("touchend",T);const a=t.changedTouches[0];x(a.clientX,a.clientY,t)}function L(e){e.preventDefault();const t=e.changedTouches[0];D(t.clientX,t.clientY,e)}function T(t){e.removeEventListener("touchmove",L),e.removeEventListener("touchend",T);const a=t.changedTouches[0];P(a.clientX,a.clientY,a)}function N(e){const a=e.keyCode;let n;if(33===a){e.preventDefault();let t=Math.max((g-v)/10,w);t<=0&&(t=1),n=A(f+t,v,g,w)}else if(34===a){e.preventDefault();let t=Math.max((g-v)/10,w);t<=0&&(t=1),n=A(f-t,v,g,w)}else if(35===a)e.preventDefault(),n=g;else if(36===a)e.preventDefault(),n=v;else if(37===a||40===a){e.preventDefault();let t=(w>0?w:(g-v)/10)*(e.shiftKey?.25:e.ctrlKey||e.metaKey?4:1);n=Math.max(f-t,v)}else if(38===a||39===a){e.preventDefault();let t=(w>0?w:(g-v)/10)*(e.shiftKey?.25:e.ctrlKey||e.metaKey?4:1);n=Math.min(f+t,g)}else 48===a&&(n=(g+v)/2);"number"==typeof n&&n!==f&&(f=n,z(f),s&&!1!==s(f)&&t.redraw())}function D(e,a,n){if(!u)return;const i=k(e,a,n);i!==f&&(f=i,c&&!1!==c(f)&&t.redraw())}function P(e,a,n){u&&(u=!1,f=k(e,a,n),s&&!1!==s(f)&&t.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 z(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 H(e){v=e.min,g=e.max,w="number"!=typeof e.step||Number.isNaN(e.step)?1:V(e.step,0,g-v),y="vertical"===e.orientation?"vertical":"horizontal",s=e.onchange,c=e.ondrag,"number"==typeof e.value&&(f=V(e.value,v,g)),m=!e.relative,p=e.factor&&e.factor[0]||4,h=e.factor&&e.factor[1]||1}return{oncreate:({attrs:t,dom:r})=>{O&&!j&&(window.addEventListener("touchmove",(function(){})),j=!0),H(t),e=r,a=e.querySelector(".mithril-range-bar"),n=a.querySelector(".mithril-range-bar-0"),i=a.querySelector(".mithril-range-bar-1"),l=a.querySelector(".mithril-range-handle"),e.addEventListener("mousedown",M),e.addEventListener("touchstart",E),e.addEventListener("keydown",N)},onremove:function(){window.removeEventListener("mousemove",C),window.removeEventListener("mouseup",I),e.removeEventListener("mousedown",M),e.removeEventListener("touchstart",E),e.removeEventListener("touchmove",L),e.removeEventListener("touchend",T),e.removeEventListener("keydown",N)},view:function({attrs:e,children:a}){H(e),f=A(f,v,g,w);const n={class:"mithril-range nokey"+(e.relative?" isrelative ":" ")+(0===f?"atzero":f<0?"belowzero":"overzero")+(null!=e.class?" "+e.class:""),tabIndex:"0",role:"slider","aria-valuemin":String(v),"aria-valuemax":String(g),"aria-valuenow":String(f),"aria-orientation":y};e.id&&(n.id=e.id),e.ariaLabelledby&&(n["aria-labelledby"]=e.ariaLabelledby),e.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}),t("div",n,t("div",{class:"mithril-range-bar nokey"},t("div",{class:"mithril-range-bar-0 nokey",style:o}),t("div",{class:"mithril-range-bar-1 nokey",style:s}),t("div",{class:"mithril-range-handle nokey",style:r},a)),!!e.name&&t("input",{type:"hidden",name:e.name,value:String(f)}))}}}e.quantize=A;const K=e=>{const a=e.value>e.curMax?Math.ceil(e.value/e.curMax):1,n=e.curMin<0&&e.value<e.curMin?Math.abs(Math.ceil(e.value/e.curMin)):1,i=Math.min(Math.max(n,a),e.maxMultiplier);e.curMultiplier!==i&&(e.curMultiplier=i,t.redraw())},F=e=>e.value>=e.curMax*e.curMultiplier*.9&&e.maxMultiplier>1&&e.curMultiplier<=e.maxMultiplier-1?(e.curMultiplier++,!0):e.curMin<0?$(e):void 0,$=e=>{if(e.value<=e.curMin*e.curMultiplier*.9&&e.maxMultiplier>1&&e.curMultiplier<=e.maxMultiplier-1)return e.curMultiplier++,!0},B={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:e,state:a})=>{const n=e.multiplier||1,i=e.value||0;a.curMax!==e.max||a.maxMultiplier!==n?(Object.assign(a,{curMax:e.max,curMin:e.min,maxMultiplier:n,value:e.value,initial:i}),F(a)||(clearTimeout(a.timer),a.timer=setTimeout(K,1e3,a)),t.redraw()):a.initial!==i&&(Object.assign(a,{value:i,initial:i}),clearTimeout(z),z=setTimeout((()=>t.redraw()),50))},view:({attrs:e,state:a})=>t(".range.flexcol.control.relative"+(e.multiplier>1?".withmultiplier":""),{...e.class&&{class:e.class},title:e.hint||"Click, then use arrows to finetune value if needed"},[...e.title?[t("label",{class:"rangelabel",htmlFor:a.id},e.title)]:[],t(H,{onchange:n=>{a.value=n;!F(a)&&a.curMultiplier>1&&(clearTimeout(a.timer),a.timer=setTimeout(K,1e3,a)),e.onchange?e.onchange(n):t.redraw()},ondrag:t=>t!==a.value&&(a.value=t,e.ondrag&&e.ondrag(t),!0),value:a.value||0,min:(e.min||0)*a.curMultiplier,max:a.curMax*a.curMultiplier||100,step:e.step||1,relative:e.relative,factor:e.factor},[t(".currentval",e.parser?e.parser(a.value,e.step<1):a.value?e.step<1?a.value.toFixed(2):""+Math.floor(a.value):"")])])},Y={view:({attrs:e,state:a})=>t(B,{value:e.value||0,min:e.min||0,max:e.max||100,step:e.step||.1,class:(e.disabled?"disabled ":"")+(e.class||""),title:e.title,multiplier:e.multiplier,hint:e.hint,parser:e.parser,relative:e.relative,factor:e.factor,getLabel:e=>e?""+e:"default",ondrag:t=>(a.changed=!0,a.value=t,e.onchange&&e.onchange(t,!0),!0),onchange:t=>(e.auto0?t=0:e.autoValue&&(t=e.autoValue),a.changed=!0,a.value=t,e.onchange&&e.onchange(t,!1),!0)})};e.m=t,e.Button=l,e.ButtonNew=r,e.CardieWidget=h,e.Empty=o,e.Icon=i,e.InputWidget=w,e.NoticeWidget=y,e.OverflowUtils=P,e.RangeWidget=Y,e.Selector=c,e.Separator=S,e.SwitchWidget=b,e.clearModal=function(){const e=document.getElementById("modal-container");return"none"!==e.style.display&&(k(e),!0)},e.popupMessage=M}));
|
|
2
|
-
//# sourceMappingURL=libui.umd.js.map
|
package/dist/libui.umd.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"libui.umd.js","sources":["../src/widgets/Basic.js","../src/util/widgets.utils.js","../src/widgets/CardieWidget.js","../src/widgets/InputWidget.js","../src/widgets/NoticeWidget.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"],"sourcesContent":["import m from \"mithril\";\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","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 {ButtonNew} 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 defineWidget from \"../util/widgets.utils\";\nimport {Icon} 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","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","/* global EXPORTS */\n\nconst\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\nfunction 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\nexports.quantize = quantize;\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"],"names":["getAttrs","attrs","parentAttrs","panelInitialParams","data","initialParams","isCurrent","currentIndex","index","Icon","view","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","oninit","selected","isNaN","noinitial","onupdate","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","defineWidget","oncreate","onremove","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","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","exports","resetMultiplier","maxMultiplier","curMax","minMultiplier","curMin","abs","multiplier","curMultiplier","increaseMultiplier","increaseMinMultiplier","RangeSlider","initial","attrsMultiplier","attrsValue","htmlFor","toFixed","floor","RangeWidget","getLabel","changed","auto0","autoValue"],"mappings":"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"}
|