@nebularstreams/libmui 0.1.2 → 0.1.4

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.
@@ -1 +1 @@
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"],"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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"}
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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"}