riza-ui 1.0.0

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.
@@ -0,0 +1 @@
1
+ {"mappings":"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S;YAG5B,IAAI,IADQ,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAW,aAAa,WAAW,CAAC,GAChD,GAAG,CAAC;YAExB,EAAQ,SAAS,GAAI,CAAA;gBACpB;YACD,GAEA,EAAQ,OAAO,GAAG,CAAA;gBACjB,EAAO,EAAI,MAAM,CAAC,KAAK;YACxB;QACD;IACD;AACD,GnBhe0C,KoBiG3B,GpB7FF,KAAO,CAAA,GAAA,UAAA,AAAA,GACP,KAAQ,CAAA,GAAA,WAAA,AAAA,GACR,KAAQ,CAAA,GAAA,WAAA,AAAA,GACR,KAAkB,CAAA,GAAA,qBAAA,AAAA,GAClB,KAAQ,CAAA,GAAA,WAAA,AAAA,GACR,KAAY,CAAA,GAAA,eAAA,AAAA,GACZ,KAAS,CAAA,GAAA,YAAA,AAAA,GACT,KAAc,CAAA,GAAA,iBAAA,AAAA,GACd,KAAa,CAAA,GAAA,gBAAA,AAAA,GACb,KAAW,CAAA,GAAA,cAAA,AAAA;;;;;A2BdA,0C,2C,kC;;AAAA,2C;AAAA,2C;AAAA,qD;AAAA,2C;AAAA,+C;AAAA,4C;AAAA,iD;AAAA,gD;AAAA,8C;;A,S,e,C,E,C,E,C,E,C;I,O,c,C,G,G;Q,K;Q,K;Q,Y,C;Q,c,C;I;A;A,I,iB,e,O,a,a,e,O,O,O,e,O,S,S,e,O,S,S,C,G,kB,C,G,gB,C,G,gB,e,iB;A,Q,iB,C,A,C,gB,S,C;I,I,K,iB,O,e,C,E,C,O;I,I,K,e;Q,I,I,a,C,E;Q,O,a,C,E;Q,I,I;Y,I;Y,S,C;Q;Q,O,e,C,E,G,G,E,I,C,E,O,E,G,E,O,G,E,O;I;I,I,I,M,yB,I;I,M,E,I,G,oB;A,C,E,Q,G,S,C,E,C;I,a,C,E,G;A,G,e,iB,G,a,G,c,Q,C,S,S,M,E,O;I,e,O,O,E,W,I;I,I,S,c,U,S,c,UHjBxB;;;AAGA,GAEA,2CACA;QAMC,SAAS,SAAU,MAAK,EAAE,GAAG;YAAA,OAExB,YAAA,OAAO,SAWH,SANP,AAH0B,CAAA,OAAtB,OAAM,MAAA,CAAO,GAAG,KAAa,SAAQ,IAAI,GAAA,CAAI,OAAM,MAAA,CAAO,MAC/B,OAAtB,OAAM,MAAA,CAAO,GAAG,MAAY,CAAA,SAAQ,GAAG,CAAC,O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","sources":["node_modules/.pnpm/@parcel+runtime-browser-hmr@2.13.2_@parcel+core@2.13.2_@swc+helpers@0.5.15_/node_modules/@parcel/runtime-browser-hmr/lib/runtime-ac93a025f9e507b1.js","dev/main.jsx","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/riza.m.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/<anon>","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/main.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/router.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/element.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/api.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/data-source.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/data-list.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/easing.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/anim.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/elements.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/elems/r-tabs.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/elems/r-form.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/elems/r-panel.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/elems/r-list.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/elems/r-item.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/elems/r-paginator.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/elems/r-table.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/elems/r-select.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/elems/r-image-cropper.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/utils.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/db.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/geo.js","node_modules/.pnpm/riza@3.0.32/node_modules/riza/dist/src/runtime-jsx.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/rinn.m.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/<anon>","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/src/model-constraints.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/src/alpha.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/src/model-regex.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/src/main.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/src/class.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/src/event.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/src/event-dispatcher.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/src/model.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/src/model-list.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/src/schema.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/src/flattenable.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/src/collection.js","node_modules/.pnpm/rinn@2.0.48/node_modules/rinn/dist/src/template.js","node_modules/.pnpm/@parcel+transformer-js@2.13.2_@parcel+core@2.13.2_@swc+helpers@0.5.15_/node_modules/@parcel/transformer-js/src/esmodule-helpers.js","node_modules/.pnpm/base-64@1.0.0/node_modules/base-64/base64.js","node_modules/.pnpm/riza-signal@1.0.5/node_modules/riza-signal/main.js"],"sourcesContent":["var HMR_HOST = null;var HMR_PORT = null;var HMR_SECURE = false;var HMR_ENV_HASH = \"d6ea1d42532a7575\";var HMR_USE_SSE = false;module.bundle.HMR_BUNDLE_ID = \"7926f3057f0fe2ee\";\"use strict\";\n\n/* global HMR_HOST, HMR_PORT, HMR_ENV_HASH, HMR_SECURE, HMR_USE_SSE, chrome, browser, __parcel__import__, __parcel__importScripts__, ServiceWorkerGlobalScope */\n/*::\nimport type {\n HMRAsset,\n HMRMessage,\n} from '@parcel/reporter-dev-server/src/HMRServer.js';\ninterface ParcelRequire {\n (string): mixed;\n cache: {|[string]: ParcelModule|};\n hotData: {|[string]: mixed|};\n Module: any;\n parent: ?ParcelRequire;\n isParcelRequire: true;\n modules: {|[string]: [Function, {|[string]: string|}]|};\n HMR_BUNDLE_ID: string;\n root: ParcelRequire;\n}\ninterface ParcelModule {\n hot: {|\n data: mixed,\n accept(cb: (Function) => void): void,\n dispose(cb: (mixed) => void): void,\n // accept(deps: Array<string> | string, cb: (Function) => void): void,\n // decline(): void,\n _acceptCallbacks: Array<(Function) => void>,\n _disposeCallbacks: Array<(mixed) => void>,\n |};\n}\ninterface ExtensionContext {\n runtime: {|\n reload(): void,\n getURL(url: string): string;\n getManifest(): {manifest_version: number, ...};\n |};\n}\ndeclare var module: {bundle: ParcelRequire, ...};\ndeclare var HMR_HOST: string;\ndeclare var HMR_PORT: string;\ndeclare var HMR_ENV_HASH: string;\ndeclare var HMR_SECURE: boolean;\ndeclare var HMR_USE_SSE: boolean;\ndeclare var chrome: ExtensionContext;\ndeclare var browser: ExtensionContext;\ndeclare var __parcel__import__: (string) => Promise<void>;\ndeclare var __parcel__importScripts__: (string) => Promise<void>;\ndeclare var globalThis: typeof self;\ndeclare var ServiceWorkerGlobalScope: Object;\n*/\nvar OVERLAY_ID = '__parcel__error__overlay__';\nvar OldModule = module.bundle.Module;\nfunction Module(moduleName) {\n OldModule.call(this, moduleName);\n this.hot = {\n data: module.bundle.hotData[moduleName],\n _acceptCallbacks: [],\n _disposeCallbacks: [],\n accept: function (fn) {\n this._acceptCallbacks.push(fn || function () {});\n },\n dispose: function (fn) {\n this._disposeCallbacks.push(fn);\n }\n };\n module.bundle.hotData[moduleName] = undefined;\n}\nmodule.bundle.Module = Module;\nmodule.bundle.hotData = {};\nvar checkedAssets /*: {|[string]: boolean|} */, disposedAssets /*: {|[string]: boolean|} */, assetsToDispose /*: Array<[ParcelRequire, string]> */, assetsToAccept /*: Array<[ParcelRequire, string]> */;\nfunction getHostname() {\n return HMR_HOST || (location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost');\n}\nfunction getPort() {\n return HMR_PORT || location.port;\n}\n\n// eslint-disable-next-line no-redeclare\nvar parent = module.bundle.parent;\nif ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {\n var hostname = getHostname();\n var port = getPort();\n var protocol = HMR_SECURE || location.protocol == 'https:' && !['localhost', '127.0.0.1', '0.0.0.0'].includes(hostname) ? 'wss' : 'ws';\n var ws;\n if (HMR_USE_SSE) {\n ws = new EventSource('/__parcel_hmr');\n } else {\n try {\n ws = new WebSocket(protocol + '://' + hostname + (port ? ':' + port : '') + '/');\n } catch (err) {\n if (err.message) {\n console.error(err.message);\n }\n ws = {};\n }\n }\n\n // Web extension context\n var extCtx = typeof browser === 'undefined' ? typeof chrome === 'undefined' ? null : chrome : browser;\n\n // Safari doesn't support sourceURL in error stacks.\n // eval may also be disabled via CSP, so do a quick check.\n var supportsSourceURL = false;\n try {\n (0, eval)('throw new Error(\"test\"); //# sourceURL=test.js');\n } catch (err) {\n supportsSourceURL = err.stack.includes('test.js');\n }\n\n // $FlowFixMe\n ws.onmessage = async function (event /*: {data: string, ...} */) {\n checkedAssets = {} /*: {|[string]: boolean|} */;\n disposedAssets = {} /*: {|[string]: boolean|} */;\n assetsToAccept = [];\n assetsToDispose = [];\n var data /*: HMRMessage */ = JSON.parse(event.data);\n if (data.type === 'reload') {\n fullReload();\n } else if (data.type === 'update') {\n // Remove error overlay if there is one\n if (typeof document !== 'undefined') {\n removeErrorOverlay();\n }\n let assets = data.assets.filter(asset => asset.envHash === HMR_ENV_HASH);\n\n // Handle HMR Update\n let handled = assets.every(asset => {\n return asset.type === 'css' || asset.type === 'js' && hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle);\n });\n if (handled) {\n console.clear();\n\n // Dispatch custom event so other runtimes (e.g React Refresh) are aware.\n if (typeof window !== 'undefined' && typeof CustomEvent !== 'undefined') {\n window.dispatchEvent(new CustomEvent('parcelhmraccept'));\n }\n await hmrApplyUpdates(assets);\n hmrDisposeQueue();\n\n // Run accept callbacks. This will also re-execute other disposed assets in topological order.\n let processedAssets = {};\n for (let i = 0; i < assetsToAccept.length; i++) {\n let id = assetsToAccept[i][1];\n if (!processedAssets[id]) {\n hmrAccept(assetsToAccept[i][0], id);\n processedAssets[id] = true;\n }\n }\n } else fullReload();\n }\n if (data.type === 'error') {\n // Log parcel errors to console\n for (let ansiDiagnostic of data.diagnostics.ansi) {\n let stack = ansiDiagnostic.codeframe ? ansiDiagnostic.codeframe : ansiDiagnostic.stack;\n console.error('🚨 [parcel]: ' + ansiDiagnostic.message + '\\n' + stack + '\\n\\n' + ansiDiagnostic.hints.join('\\n'));\n }\n if (typeof document !== 'undefined') {\n // Render the fancy html overlay\n removeErrorOverlay();\n var overlay = createErrorOverlay(data.diagnostics.html);\n // $FlowFixMe\n document.body.appendChild(overlay);\n }\n }\n };\n if (ws instanceof WebSocket) {\n ws.onerror = function (e) {\n if (e.message) {\n console.error(e.message);\n }\n };\n ws.onclose = function () {\n console.warn('[parcel] 🚨 Connection to the HMR server was lost');\n };\n }\n}\nfunction removeErrorOverlay() {\n var overlay = document.getElementById(OVERLAY_ID);\n if (overlay) {\n overlay.remove();\n console.log('[parcel] ✨ Error resolved');\n }\n}\nfunction createErrorOverlay(diagnostics) {\n var overlay = document.createElement('div');\n overlay.id = OVERLAY_ID;\n let errorHTML = '<div style=\"background: black; opacity: 0.85; font-size: 16px; color: white; position: fixed; height: 100%; width: 100%; top: 0px; left: 0px; padding: 30px; font-family: Menlo, Consolas, monospace; z-index: 9999;\">';\n for (let diagnostic of diagnostics) {\n let stack = diagnostic.frames.length ? diagnostic.frames.reduce((p, frame) => {\n return `${p}\n<a href=\"/__parcel_launch_editor?file=${encodeURIComponent(frame.location)}\" style=\"text-decoration: underline; color: #888\" onclick=\"fetch(this.href); return false\">${frame.location}</a>\n${frame.code}`;\n }, '') : diagnostic.stack;\n errorHTML += `\n <div>\n <div style=\"font-size: 18px; font-weight: bold; margin-top: 20px;\">\n 🚨 ${diagnostic.message}\n </div>\n <pre>${stack}</pre>\n <div>\n ${diagnostic.hints.map(hint => '<div>💡 ' + hint + '</div>').join('')}\n </div>\n ${diagnostic.documentation ? `<div>📝 <a style=\"color: violet\" href=\"${diagnostic.documentation}\" target=\"_blank\">Learn more</a></div>` : ''}\n </div>\n `;\n }\n errorHTML += '</div>';\n overlay.innerHTML = errorHTML;\n return overlay;\n}\nfunction fullReload() {\n if ('reload' in location) {\n location.reload();\n } else if (extCtx && extCtx.runtime && extCtx.runtime.reload) {\n extCtx.runtime.reload();\n }\n}\nfunction getParents(bundle, id) /*: Array<[ParcelRequire, string]> */{\n var modules = bundle.modules;\n if (!modules) {\n return [];\n }\n var parents = [];\n var k, d, dep;\n for (k in modules) {\n for (d in modules[k][1]) {\n dep = modules[k][1][d];\n if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) {\n parents.push([bundle, k]);\n }\n }\n }\n if (bundle.parent) {\n parents = parents.concat(getParents(bundle.parent, id));\n }\n return parents;\n}\nfunction updateLink(link) {\n var href = link.getAttribute('href');\n if (!href) {\n return;\n }\n var newLink = link.cloneNode();\n newLink.onload = function () {\n if (link.parentNode !== null) {\n // $FlowFixMe\n link.parentNode.removeChild(link);\n }\n };\n newLink.setAttribute('href',\n // $FlowFixMe\n href.split('?')[0] + '?' + Date.now());\n // $FlowFixMe\n link.parentNode.insertBefore(newLink, link.nextSibling);\n}\nvar cssTimeout = null;\nfunction reloadCSS() {\n if (cssTimeout) {\n return;\n }\n cssTimeout = setTimeout(function () {\n var links = document.querySelectorAll('link[rel=\"stylesheet\"]');\n for (var i = 0; i < links.length; i++) {\n // $FlowFixMe[incompatible-type]\n var href /*: string */ = links[i].getAttribute('href');\n var hostname = getHostname();\n var servedFromHMRServer = hostname === 'localhost' ? new RegExp('^(https?:\\\\/\\\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort()).test(href) : href.indexOf(hostname + ':' + getPort());\n var absolute = /^https?:\\/\\//i.test(href) && href.indexOf(location.origin) !== 0 && !servedFromHMRServer;\n if (!absolute) {\n updateLink(links[i]);\n }\n }\n cssTimeout = null;\n }, 50);\n}\nfunction hmrDownload(asset) {\n if (asset.type === 'js') {\n if (typeof document !== 'undefined') {\n let script = document.createElement('script');\n script.src = asset.url + '?t=' + Date.now();\n if (asset.outputFormat === 'esmodule') {\n script.type = 'module';\n }\n return new Promise((resolve, reject) => {\n var _document$head;\n script.onload = () => resolve(script);\n script.onerror = reject;\n (_document$head = document.head) === null || _document$head === void 0 || _document$head.appendChild(script);\n });\n } else if (typeof importScripts === 'function') {\n // Worker scripts\n if (asset.outputFormat === 'esmodule') {\n return __parcel__import__(asset.url + '?t=' + Date.now());\n } else {\n return new Promise((resolve, reject) => {\n try {\n __parcel__importScripts__(asset.url + '?t=' + Date.now());\n resolve();\n } catch (err) {\n reject(err);\n }\n });\n }\n }\n }\n}\nasync function hmrApplyUpdates(assets) {\n global.parcelHotUpdate = Object.create(null);\n let scriptsToRemove;\n try {\n // If sourceURL comments aren't supported in eval, we need to load\n // the update from the dev server over HTTP so that stack traces\n // are correct in errors/logs. This is much slower than eval, so\n // we only do it if needed (currently just Safari).\n // https://bugs.webkit.org/show_bug.cgi?id=137297\n // This path is also taken if a CSP disallows eval.\n if (!supportsSourceURL) {\n let promises = assets.map(asset => {\n var _hmrDownload;\n return (_hmrDownload = hmrDownload(asset)) === null || _hmrDownload === void 0 ? void 0 : _hmrDownload.catch(err => {\n // Web extension fix\n if (extCtx && extCtx.runtime && extCtx.runtime.getManifest().manifest_version == 3 && typeof ServiceWorkerGlobalScope != 'undefined' && global instanceof ServiceWorkerGlobalScope) {\n extCtx.runtime.reload();\n return;\n }\n throw err;\n });\n });\n scriptsToRemove = await Promise.all(promises);\n }\n assets.forEach(function (asset) {\n hmrApply(module.bundle.root, asset);\n });\n } finally {\n delete global.parcelHotUpdate;\n if (scriptsToRemove) {\n scriptsToRemove.forEach(script => {\n if (script) {\n var _document$head2;\n (_document$head2 = document.head) === null || _document$head2 === void 0 || _document$head2.removeChild(script);\n }\n });\n }\n }\n}\nfunction hmrApply(bundle /*: ParcelRequire */, asset /*: HMRAsset */) {\n var modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (asset.type === 'css') {\n reloadCSS();\n } else if (asset.type === 'js') {\n let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID];\n if (deps) {\n if (modules[asset.id]) {\n // Remove dependencies that are removed and will become orphaned.\n // This is necessary so that if the asset is added back again, the cache is gone, and we prevent a full page reload.\n let oldDeps = modules[asset.id][1];\n for (let dep in oldDeps) {\n if (!deps[dep] || deps[dep] !== oldDeps[dep]) {\n let id = oldDeps[dep];\n let parents = getParents(module.bundle.root, id);\n if (parents.length === 1) {\n hmrDelete(module.bundle.root, id);\n }\n }\n }\n }\n if (supportsSourceURL) {\n // Global eval. We would use `new Function` here but browser\n // support for source maps is better with eval.\n (0, eval)(asset.output);\n }\n\n // $FlowFixMe\n let fn = global.parcelHotUpdate[asset.id];\n modules[asset.id] = [fn, deps];\n }\n\n // Always traverse to the parent bundle, even if we already replaced the asset in this bundle.\n // This is required in case modules are duplicated. We need to ensure all instances have the updated code.\n if (bundle.parent) {\n hmrApply(bundle.parent, asset);\n }\n }\n}\nfunction hmrDelete(bundle, id) {\n let modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (modules[id]) {\n // Collect dependencies that will become orphaned when this module is deleted.\n let deps = modules[id][1];\n let orphans = [];\n for (let dep in deps) {\n let parents = getParents(module.bundle.root, deps[dep]);\n if (parents.length === 1) {\n orphans.push(deps[dep]);\n }\n }\n\n // Delete the module. This must be done before deleting dependencies in case of circular dependencies.\n delete modules[id];\n delete bundle.cache[id];\n\n // Now delete the orphans.\n orphans.forEach(id => {\n hmrDelete(module.bundle.root, id);\n });\n } else if (bundle.parent) {\n hmrDelete(bundle.parent, id);\n }\n}\nfunction hmrAcceptCheck(bundle /*: ParcelRequire */, id /*: string */, depsByBundle /*: ?{ [string]: { [string]: string } }*/) {\n if (hmrAcceptCheckOne(bundle, id, depsByBundle)) {\n return true;\n }\n\n // Traverse parents breadth first. All possible ancestries must accept the HMR update, or we'll reload.\n let parents = getParents(module.bundle.root, id);\n let accepted = false;\n while (parents.length > 0) {\n let v = parents.shift();\n let a = hmrAcceptCheckOne(v[0], v[1], null);\n if (a) {\n // If this parent accepts, stop traversing upward, but still consider siblings.\n accepted = true;\n } else {\n // Otherwise, queue the parents in the next level upward.\n let p = getParents(module.bundle.root, v[1]);\n if (p.length === 0) {\n // If there are no parents, then we've reached an entry without accepting. Reload.\n accepted = false;\n break;\n }\n parents.push(...p);\n }\n }\n return accepted;\n}\nfunction hmrAcceptCheckOne(bundle /*: ParcelRequire */, id /*: string */, depsByBundle /*: ?{ [string]: { [string]: string } }*/) {\n var modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) {\n // If we reached the root bundle without finding where the asset should go,\n // there's nothing to do. Mark as \"accepted\" so we don't reload the page.\n if (!bundle.parent) {\n return true;\n }\n return hmrAcceptCheck(bundle.parent, id, depsByBundle);\n }\n if (checkedAssets[id]) {\n return true;\n }\n checkedAssets[id] = true;\n var cached = bundle.cache[id];\n assetsToDispose.push([bundle, id]);\n if (!cached || cached.hot && cached.hot._acceptCallbacks.length) {\n assetsToAccept.push([bundle, id]);\n return true;\n }\n}\nfunction hmrDisposeQueue() {\n // Dispose all old assets.\n for (let i = 0; i < assetsToDispose.length; i++) {\n let id = assetsToDispose[i][1];\n if (!disposedAssets[id]) {\n hmrDispose(assetsToDispose[i][0], id);\n disposedAssets[id] = true;\n }\n }\n assetsToDispose = [];\n}\nfunction hmrDispose(bundle /*: ParcelRequire */, id /*: string */) {\n var cached = bundle.cache[id];\n bundle.hotData[id] = {};\n if (cached && cached.hot) {\n cached.hot.data = bundle.hotData[id];\n }\n if (cached && cached.hot && cached.hot._disposeCallbacks.length) {\n cached.hot._disposeCallbacks.forEach(function (cb) {\n cb(bundle.hotData[id]);\n });\n }\n delete bundle.cache[id];\n}\nfunction hmrAccept(bundle /*: ParcelRequire */, id /*: string */) {\n // Execute the module.\n bundle(id);\n\n // Run the accept callbacks in the new version of the module.\n var cached = bundle.cache[id];\n if (cached && cached.hot && cached.hot._acceptCallbacks.length) {\n let assetsToAlsoAccept = [];\n cached.hot._acceptCallbacks.forEach(function (cb) {\n let additionalAssets = cb(function () {\n return getParents(module.bundle.root, id);\n });\n if (Array.isArray(additionalAssets) && additionalAssets.length) {\n assetsToAlsoAccept.push(...additionalAssets);\n }\n });\n if (assetsToAlsoAccept.length) {\n let handled = assetsToAlsoAccept.every(function (a) {\n return hmrAcceptCheck(a[0], a[1]);\n });\n if (!handled) {\n return fullReload();\n }\n hmrDisposeQueue();\n }\n }\n}","\nimport { Router } from 'riza';\nimport \"./main.css\";\n\nimport \"../css/xui.css\";\n\nimport \"../css/dialog.css\";\nimport \"../css/btn-strip.css\";\nimport \"../css/btn.css\";\nimport \"../css/form.css\";\n\nconst App = () =>\n<r-panel data-root=\"true\" class=\"p-4 s-fill\" onCreated={ () => queueMicrotask(() => Router.refresh()) }>\n\n <button class=\"btn\" onClick={ () => window.document.documentElement.classList.toggle('light-mode') }>Toggle Light/Dark</button>\n <button class=\"btn\" onClick={ (ev) => ev.currentTarget.querySelectorParent('[data-root]').dialog.toggleVisibility() }>Toggle Dialog</button>\n\n <hr/>\n <p><b>Buttons</b></p>\n <div class=\"mb-1\">\n <button class=\"btn\">Default</button>\n <button class=\"btn outline\">Default</button>\n <button class=\"btn small\">Default</button>\n <button class=\"btn small outline\">Default</button>\n </div>\n <div class=\"mb-1\">\n <button class=\"btn primary\">Default</button>\n <button class=\"btn primary outline\">Default</button>\n <button class=\"btn primary small\">Default</button>\n <button class=\"btn primary small outline\">Default</button>\n </div>\n <div class=\"mb-1\">\n <button class=\"btn secondary\">Default</button>\n <button class=\"btn secondary outline\">Default</button>\n <button class=\"btn secondary small\">Default</button>\n <button class=\"btn secondary small outline\">Default</button>\n </div>\n <div class=\"mb-1\">\n <button class=\"btn success\">Default</button>\n <button class=\"btn success outline\">Default</button>\n <button class=\"btn success small\">Default</button>\n <button class=\"btn success small outline\">Default</button>\n </div>\n <div class=\"mb-1\">\n <button class=\"btn warn\">Default</button>\n <button class=\"btn warn outline\">Default</button>\n <button class=\"btn warn small\">Default</button>\n <button class=\"btn warn small outline\">Default</button>\n </div>\n <div class=\"mb-1\">\n <button class=\"btn danger\">Default</button>\n <button class=\"btn danger outline\">Default</button>\n <button class=\"btn danger small\">Default</button>\n <button class=\"btn danger small outline\">Default</button>\n </div>\n <div class=\"mb-1\">\n <button class=\"btn info\">Default</button>\n <button class=\"btn info outline\">Default</button>\n <button class=\"btn info small\">Default</button>\n <button class=\"btn info small outline\">Default</button>\n </div>\n <div class=\"mb-1\">\n <button class=\"btn dark\">Default</button>\n <button class=\"btn dark outline\">Default</button>\n <button class=\"btn dark small\">Default</button>\n <button class=\"btn dark small outline\">Default</button>\n </div>\n\n <hr/>\n <p><b>Form Elements</b></p>\n\n <div class=\"f-row g-2\">\n <div class=\"s-3\">\n <div class=\"form-group\">\n <label>Full Name</label>\n <input type=\"text\" />\n </div>\n\n <div class=\"form-group\">\n <label>Description</label>\n <textarea></textarea>\n </div>\n\n <div class=\"form-group\">\n <label>Select Country</label>\n <select>\n <option>USA</option>\n <option>Honduras</option>\n <option>Japan</option>\n </select>\n </div>\n </div>\n\n <div class=\"s-3\">\n <div class=\"form-group\">\n <label>Full Name</label>\n <input type=\"text\" />\n </div>\n\n <div class=\"form-group\">\n <label>Description</label>\n <textarea></textarea>\n </div>\n\n <div class=\"form-group\">\n <label>Select Country</label>\n <select>\n <option>USA</option>\n <option>Honduras</option>\n <option>Japan</option>\n </select>\n </div>\n </div>\n </div>\n\n <r-panel class=\"dialog center\" data-ref=\"dialog\">\n <div class=\"title text-center py-3 fs-1 fw-600\">\n <b>Confirmation</b>\n </div>\n\n <div class=\"content px-4 pb-3 fs-2d text-center\">\n Seg egestas ipsum non pretium efficitur.\n <br/>\n Fusce et luctus velit, ut vehicula nisl.\n <br/>\n Nulla et maximus augue.\n <br/><br/>\n </div>\n\n <div class=\"btn-strip\">\n <span class=\"btn outline danger\" onClick={ (ev) => ev.currentTarget.querySelectorParent('[data-root]').dialog.hide() }>Yes</span>\n <span class=\"btn outline success\" onClick={ (ev) => ev.currentTarget.querySelectorParent('[data-root]').dialog.hide() }>No</span>\n </div>\n </r-panel>\n\n</r-panel>\n;\n\ndocument.body.appendChild(App());\n",null,"import {Rinn as $k7heJ$Rinn, Class as $k7heJ$Class, Event as $k7heJ$Event, EventDispatcher as $k7heJ$EventDispatcher, Model as $k7heJ$Model, ModelList as $k7heJ$ModelList, Schema as $k7heJ$Schema, Flattenable as $k7heJ$Flattenable, Collection as $k7heJ$Collection, Template as $k7heJ$Template} from \"rinn\";\nimport $k7heJ$base64 from \"base-64\";\nimport {Signal as $k7heJ$Signal, signal as $k7heJ$signal, expr as $k7heJ$expr, watch as $k7heJ$watch, validator as $k7heJ$validator} from \"riza-signal\";\n\n\n var $parcel$global = globalThis;\n \n/*\r\n**\tThe Router is a special module that detects local URL changes (when a hash-change occurs) and\r\n**\tforwards events to the appropriate handlers.\r\n*/ const $7718a52dfca15325$var$_Router = {\n Route: (0, $k7heJ$EventDispatcher).extend({\n /*\r\n **\tRegular expression for the route. This is generated from a simpler expression provided\r\n **\tin the constructor.\r\n */ routeRegex: null,\n /*\r\n **\tOriginal route string value.\r\n */ value: null,\n /*\r\n **\tMap with the indices and the names of each paremeter obtained from the route expression.\r\n */ params: null,\n /*\r\n **\tArguments obtained from the current route (uses `params` to determine name of arguments).\r\n */ args: null,\n /*\r\n **\tArguments string obtained from the last route dispatch. Used to check if the arguments changed.\r\n */ s_args: null,\n /*\r\n **\tIndicates if the route is active because of a past positive dispatch.\r\n */ active: false,\n /*\r\n **\tIndicates if the params have changed since last event. Transition from inactive to active route will always set this value to true.\r\n */ changed: false,\n /*\r\n **\tConstructor of the route, the specified argument is a route expression.\r\n **\r\n **\t>> void __ctor (string route);\r\n */ __ctor: function(route) {\n this._super.EventDispatcher.__ctor();\n this._compileRoute(this.value = route);\n },\n /*\r\n **\tTransforms the specified route expression into a regular expression and a set of parameter\r\n **\tnames and stores them in the 'param' array.\r\n **\r\n **\t>> void _compileRoute (string route);\r\n */ _compileRoute: function(route) {\n this.params = [];\n route = route.replace(/\\/\\*\\//g, \"/.+/\");\n while(true){\n let m = /:([!@A-Za-z0-9_-]+)/.exec(route);\n if (!m) break;\n route = route.replace(m[0], \"([^/]+)\");\n this.params.push(m[1]);\n }\n this.routeRegex = \"^\" + route.replace(/##/g, \"\");\n },\n /*\r\n **\tAdds a handler to the route dispatcher. The handler can be removed later using removeHandler and\r\n **\tspecifying the same parameters. If unrouted boolean is specified the event to listen to will be\r\n **\tthe unrouted event (when the route changes and the route is not activated).\r\n **\r\n **\tvoid addHandler (handler: function, unrouted: bool, context:object=null);\r\n */ addHandler: function(handler, unrouted = false, context = null) {\n this.addEventListener((unrouted === true ? \"un\" : \"\") + \"routed\", handler, context);\n },\n /*\r\n **\tRemoves a handler from the route dispatcher.\r\n **\r\n **\tvoid removeHandler (handler: function, unrouted: bool, context: object=null);\r\n */ removeHandler: function(handler, unrouted = false, context = null) {\n this.removeEventListener((unrouted === true ? \"un\" : \"\") + \"routed\", handler, context);\n },\n /*\r\n **\tVerifies if the specified route matches the internal route and if so dispatches a (depends on doUnroute parameter) \"routed\" or \"unrouted\" event with the\r\n **\tparameters obtained from the location to all attached handlers.\r\n **\r\n **\tvoid dispatch (route:string, doUnroute:bool);\r\n */ dispatch: function(route) {\n let matches = route.match(this.routeRegex);\n if (!matches) {\n this.s_args = null;\n if (this.active) this.dispatchEvent(\"unrouted\", {\n route: this\n });\n this.active = false;\n return;\n }\n let args = {\n route: this\n };\n let str = \"\";\n for(let i = 0; i < this.params.length; i++){\n args[this.params[i]] = matches[i + 1];\n str += \"_\" + matches[i + 1];\n }\n this.changed = str != this.s_args;\n this.s_args = str;\n this.dispatchEvent(\"routed\", this.args = args);\n this.active = true;\n }\n }),\n /*\r\n **\tMap with route objects. The key of the map is the route and the value a handler.\r\n */ routes: {},\n /*\r\n **\tSorted list of routes. Smaller routes are processed first than larger ones. This array stores\r\n **\tonly the keys to the Router.routes map.\r\n */ sortedRoutes: [],\n /*\r\n **\tIndicates the number of times the onLocationChanged handler should ignore the hash change event.\r\n */ ignoreHashChangeEvent: 0,\n /*\r\n **\tCurrent relative location (everything after the location hash symbol).\r\n */ location: \"\",\n /*\r\n **\tCurrent relative location as an array of elements (obtained by splitting the location by slash).\r\n */ args: [],\n /*\r\n **\tInitializes the router module. Ensure to call `refresh` once to force a hashchange when the page loads.\r\n */ init: function() {\n if (this.alreadyAttached) return;\n this.alreadyAttached = true;\n if (\"onhashchange\" in globalThis) {\n globalThis.onhashchange = this.onLocationChanged.bind(this);\n this.location = globalThis.location.hash.substring(1);\n this.args = this.location.split(\"/\");\n }\n },\n /*\r\n **\tRefreshes the current route by forcing a hashchange event.\r\n */ refresh: function() {\n this.onLocationChanged();\n },\n /*\r\n **\tChanges the current location and optionally prevents a trigger of the hashchange event.\r\n */ setRoute: function(route, silent) {\n let location = this.realLocation(route);\n if (location == this.location) return;\n if (silent) this.ignoreHashChangeEvent++;\n globalThis.location.hash = location;\n },\n /*\r\n **\tAdds the specified route to the routing map. When the specified route is detected, the `onRoute` handler will be called, and then\r\n **\twhen the route exits `onUnroute` will be called.\r\n */ addRoute: function(route, onRoute, onUnroute = null) {\n if (!this.routes[route]) {\n this.routes[route] = new this.Route(route);\n this.sortedRoutes.push(route);\n this.sortedRoutes.sort((a, b)=>{\n return this.routes[a].routeRegex.length - this.routes[b].routeRegex.length;\n });\n }\n if (onUnroute !== null) {\n this.routes[route].addHandler(onRoute, false);\n this.routes[route].addHandler(onUnroute, true);\n } else this.routes[route].addHandler(onRoute, false);\n return this.routes[route];\n },\n /*\r\n **\tReturns the Route object for the specified route.\r\n */ getRoute: function(route) {\n if (!this.routes[route]) {\n this.routes[route] = new this.Route(route);\n this.sortedRoutes.push(route);\n this.sortedRoutes.sort((a, b)=>{\n return this.routes[a].routeRegex.length - this.routes[b].routeRegex.length;\n });\n }\n return this.routes[route];\n },\n /*\r\n **\tAdds the specified routes to the routing map. The routes map should contain the route expression\r\n **\tin the key of the map and a handler function in the value.\r\n */ addRoutes: function(routes) {\n for(let i in routes){\n if (!this.routes[i]) {\n this.routes[i] = new this.Route(i);\n this.sortedRoutes.push(i);\n }\n this.routes[i].addHandler(routes[i], false);\n }\n this.sortedRoutes.sort((a, b)=>{\n return this.routes[a].routeRegex.length - this.routes[b].routeRegex.length;\n });\n },\n /*\r\n **\tRemoves the specified route from the routing map.\r\n */ removeRoute: function(route, onRoute, onUnroute) {\n if (!this.routes[route]) return;\n if (onUnroute !== undefined) {\n this.routes[route].removeHandler(onRoute, false);\n this.routes[route].removeHandler(onUnroute, true);\n } else this.routes[route].removeHandler(onRoute);\n },\n /*\r\n **\tRemoves the specified routes from the routing map. The routes map should contain the route\r\n **\texpression in the key of the map and a handler function in the value.\r\n */ removeRoutes: function(routes) {\n for(let i in routes){\n if (!this.routes[i]) continue;\n this.routes[i].removeHandler(routes[i]);\n }\n },\n /*\r\n **\tGiven a formatted location and a previous one it will return the correct real location.\r\n */ realLocation: function(cLocation, pLocation) {\n if (!pLocation) pLocation = this.location;\n if (!pLocation) pLocation = \" \";\n let state = 0, i = 0, j = 0, k;\n let rLocation = \"\";\n while(state != -1 && i < cLocation.length && j < pLocation.length)switch(state){\n case 0:\n if (cLocation.substr(i++, 1) == \"*\") {\n state = 1;\n break;\n }\n if (cLocation.substr(i - 1, 1) != pLocation.substr(j++, 1)) {\n rLocation += cLocation.substr(i - 1);\n state = -1;\n break;\n }\n rLocation += pLocation.substr(j - 1, 1);\n break;\n case 1:\n if (cLocation.substr(i, 1) == \"*\") {\n state = 3;\n i++;\n break;\n }\n state = 2;\n break;\n case 2:\n k = pLocation.indexOf(cLocation.substr(i, 1), j);\n if (k == -1) {\n rLocation += pLocation.substr(j) + cLocation.substr(i);\n state = -1;\n break;\n }\n rLocation += pLocation.substr(j, k - j);\n state = 0;\n j = k;\n break;\n case 3:\n k = pLocation.lastIndexOf(cLocation.substr(i, 1));\n if (k == -1) {\n rLocation += cLocation.substr(i);\n state = -1;\n break;\n }\n rLocation += pLocation.substr(j, k - j);\n state = 0;\n j = k;\n break;\n }\n if (state != -1) rLocation += cLocation.substr(i);\n return rLocation.trim();\n },\n /*\r\n **\tEvent handler called when the location hash changes.\r\n */ onLocationChanged: function() {\n if (this.prevLocation !== this.location) this.prevLocation = this.location;\n let cLocation = globalThis.location.hash.substring(1);\n let rLocation = this.realLocation(cLocation);\n if (cLocation !== rLocation) {\n globalThis.location.replace(\"#\" + rLocation);\n return;\n }\n this.location = cLocation;\n this.args = this.location.split(\"/\");\n if (this.ignoreHashChangeEvent > 0) {\n this.ignoreHashChangeEvent--;\n return;\n }\n for(let i = 0; i < this.sortedRoutes.length; i++)this.routes[this.sortedRoutes[i]].dispatch(this.location);\n },\n /*\r\n **\tNavigates to the given hash-based URL.\r\n */ navigate: function(location, replace = false) {\n location = this.realLocation(location);\n if (globalThis.location.hash == \"#\" + location) {\n this.refresh();\n return;\n }\n if (replace) globalThis.location.replace(\"#\" + location);\n else globalThis.location.hash = location;\n }\n};\n$7718a52dfca15325$var$_Router.init();\nvar $7718a52dfca15325$export$2e2bcd8739ae039 = $7718a52dfca15325$var$_Router;\n\n\n\n\n/**\n * Map containing the original prototypes for all registered elements.\n */ const $5808f050ebbd5b77$var$elementPrototypes = {};\n/**\n * Map containing the final classes for all registered elements.\n */ const $5808f050ebbd5b77$var$elementClasses = {};\n/**\n * Contains the state of the current long-press operation.\n */ let $5808f050ebbd5b77$var$longPressState = {\n elem: null,\n state: null\n};\n/**\n * Base class for custom elements. Provides support for model-triggered events, easy definition of handlers for events originated in\n * self or child-elements, and several utility methods.\n */ const $5808f050ebbd5b77$var$Element = {\n /**\n * Internal element ID. Added as namespace to model events. Ensures that certain model events are run locally only, not affecting other event handlers.\n */ eid: null,\n /**\n * Indicates if the element is a root element, that is, the target element to attach child elements having `data-ref` attribute.\n */ isRoot: false,\n /**\n * Root element to which this element is attached (when applicable).\n */ root: null,\n /**\n * Indicates ready-state of the element. Possible values are: 0: \"Not ready\", 1: \"Children Initialized\", and 2: \"Parent Ready\".\n */ isReady: 0,\n readyReenter: 0,\n readyLocked: 0,\n /**\n * Model type (class) for the element's model.\n */ modelt: (0, $k7heJ$Model),\n /**\n * Data model related to the element.\n */ model: null,\n /**\n * Contents of the element. When set, the innerHTML will be set to this value.\n */ contents: null,\n /**\n * \tEvents map.\n */ events: {\n \"mousedown [data-long-press]\": function(evt) {\n evt.continuePropagation = true;\n if ($5808f050ebbd5b77$var$longPressState.state) return;\n evt.continuePropagation = false;\n let elem = evt.source;\n $5808f050ebbd5b77$var$longPressState.elem = elem;\n $5808f050ebbd5b77$var$longPressState.state = setTimeout(()=>{\n let dx = elem._pos_fx - elem._pos_sx;\n let dy = elem._pos_fy - elem._pos_sy;\n $5808f050ebbd5b77$var$longPressState.state = null;\n let d = Math.sqrt(dx * dx + dy * dy);\n if (d < 5 && $5808f050ebbd5b77$var$longPressState.elem === elem) {\n $5808f050ebbd5b77$var$longPressState.state = false;\n this.dispatchOn(elem, \"long-press\");\n }\n }, 500);\n elem._pos_sx = evt.clientX;\n elem._pos_sy = evt.clientY;\n elem._pos_fx = evt.clientX;\n elem._pos_fy = evt.clientY;\n },\n \"mousemove [data-long-press]\": function(evt) {\n evt.continuePropagation = true;\n if (!$5808f050ebbd5b77$var$longPressState.state) return;\n evt.continuePropagation = false;\n evt.source._pos_fx = evt.clientX;\n evt.source._pos_fy = evt.clientY;\n },\n \"mouseup [data-long-press]\": function(evt) {\n if ($5808f050ebbd5b77$var$longPressState.state === false) return;\n if ($5808f050ebbd5b77$var$longPressState.state) {\n clearTimeout($5808f050ebbd5b77$var$longPressState.state);\n $5808f050ebbd5b77$var$longPressState.state = null;\n }\n if ($5808f050ebbd5b77$var$longPressState.elem === evt.source) this.dispatchOn(evt.source, \"short-press\", [], false);\n },\n \"touchstart [data-long-press]\": function(evt) {\n evt.continuePropagation = true;\n if ($5808f050ebbd5b77$var$longPressState.state) return;\n let elem = evt.source;\n $5808f050ebbd5b77$var$longPressState.elem = elem;\n $5808f050ebbd5b77$var$longPressState.state = setTimeout(()=>{\n let dx = elem._pos_fx - elem._pos_sx;\n let dy = elem._pos_fy - elem._pos_sy;\n $5808f050ebbd5b77$var$longPressState.state = null;\n let d = Math.sqrt(dx * dx + dy * dy);\n if (d < 5 && $5808f050ebbd5b77$var$longPressState.elem === elem) {\n $5808f050ebbd5b77$var$longPressState.state = false;\n this.dispatchOn(elem, \"long-press\");\n }\n }, 500);\n elem._pos_sx = evt.touches[0].clientX;\n elem._pos_sy = evt.touches[0].clientY;\n elem._pos_fx = evt.touches[0].clientX;\n elem._pos_fy = evt.touches[0].clientY;\n },\n \"touchmove [data-long-press]\": function(evt) {\n evt.continuePropagation = true;\n if (!$5808f050ebbd5b77$var$longPressState.state) return;\n evt.source._pos_fx = evt.touches[0].clientX;\n evt.source._pos_fy = evt.touches[0].clientY;\n },\n \"touchend [data-long-press]\": function(evt) {\n if ($5808f050ebbd5b77$var$longPressState.state === false) return;\n if ($5808f050ebbd5b77$var$longPressState.state) {\n clearTimeout($5808f050ebbd5b77$var$longPressState.state);\n $5808f050ebbd5b77$var$longPressState.state = null;\n }\n if ($5808f050ebbd5b77$var$longPressState.elem === evt.source) this.dispatchOn(evt.source, \"short-press\", null, false);\n },\n \"click [data-action]\": function(evt) {\n if ($5808f050ebbd5b77$var$longPressState.state === false) return;\n let opts = evt.source.dataset.action.split(\" \");\n if (opts[0] in this) this[opts[0]]({\n ...evt.params,\n ...evt.source.dataset,\n ...opts,\n length: opts.length\n }, evt);\n else evt.continuePropagation = true;\n },\n \"long-press [data-long-press]\": function(evt) {\n let opts = evt.source.dataset.longPress.split(\" \");\n if (opts[0] in this) this[opts[0]]({\n ...evt.params,\n ...evt.source.dataset,\n ...opts,\n length: opts.length\n }, evt);\n else evt.continuePropagation = true;\n },\n \"keyup(13) input[data-enter]\": function(evt) {\n let opts = evt.source.dataset.enter.split(\" \");\n if (opts[0] in this) this[opts[0]]({\n ...evt.params,\n ...evt.source.dataset,\n ...opts,\n length: opts.length\n }, evt);\n else evt.continuePropagation = true;\n }\n },\n /**\n * Internal routes map, set by `bindRoutes`.\n */ routes: null,\n /**\n * \tElement constructor.\n */ __ctor: function() {\n this._list_watch = [];\n this._list_visible = [];\n this._list_attr = [];\n this._list_property = [];\n if (\"root\" in this.dataset) this.isRoot = this.dataset.root === \"true\";\n this.style.display = \"block\";\n this.eid = Math.random().toString().substr(2);\n if (this.model != null) {\n let tmp = this.model;\n this.model = null;\n this.setModel(tmp, false);\n }\n Object.keys(this._super).reverse().forEach((i)=>{\n if (\"init\" in this._super[i]) this._super[i].init();\n });\n if ($5808f050ebbd5b77$var$Element.debug) console.log(\">> \" + this.tagName + \" INIT ON \" + this.parentElement.tagName);\n this.init();\n if (this.events) this.bindEvents(this.events);\n if (this.contents) this.setInnerHTML(this.contents);\n setTimeout(()=>{\n if (this.tagName.toLowerCase() !== \"r-dom-probe\") this.appendChild(document.createElement(\"r-dom-probe\"));\n else this.markReady();\n }, 0);\n },\n /**\n * \tInitializes the element. Called after construction of the instance.\n */ init: function() {},\n /**\n * \tExecuted when the children of the element are ready.\n */ ready: function() {},\n /**\n * \tExecuted after ready and after the root is also ready.\n */ rready: function() {},\n /**\n * \tMarks the element as ready.\n */ markReady: function(list = null) {\n this.readyLocked++;\n if (!this.isReady) {\n this.isReady = 1;\n // Set model is `model` property was set in the element.\n if (\"model\" in this.dataset) {\n let ref = this.getFieldByPath(this.dataset.model);\n if (ref) this.setModel(ref);\n }\n // Run ready methods in class hierarchy.\n Object.keys(this._super).reverse().forEach((i)=>{\n if (\"ready\" in this._super[i]) this._super[i].ready();\n });\n if ($5808f050ebbd5b77$var$Element.debug) console.log(\">> \" + this.tagName + \" READY\");\n this.ready();\n this.trigger(\"ready\").dispatch(\"_ready\", null, false);\n this.collectWatchers();\n } else this.collectWatchers();\n let root = this.findCustomParent(this);\n if ($5808f050ebbd5b77$var$Element.debug) console.log(this.tagName + \" ROOT IS \" + (root ? root.tagName : \"NULL\"));\n if (root && root.isReady === 0 && this.isReady != 0) root.checkReady();\n let rootReady = false;\n if (root && root.isReady === 2 && this.isReady !== 2) {\n this.getRoot();\n if (this.root && this.dataset.ref) {\n if ($5808f050ebbd5b77$var$Element.debug) console.log(this.tagName + \" REF AS `\" + this.dataset.ref + \"` ON \" + this.root.tagName);\n this.root[this.dataset.ref] = this;\n this.root.onRefAdded(this.dataset.ref, this);\n }\n rootReady = true;\n }\n if (!root && this.isReady !== 2) rootReady = true;\n if (rootReady) {\n this.isReady = 2;\n if (list !== null) for (let elem of list)elem.checkReady();\n if ($5808f050ebbd5b77$var$Element.debug) console.log(\">> \" + this.tagName + \" RREADY\");\n Object.keys(this._super).reverse().forEach((i)=>{\n if (\"rready\" in this._super[i]) this._super[i].rready();\n });\n this.rready();\n this.trigger(\"rootready\");\n }\n this.readyLocked--;\n if (this.readyReenter && !this.readyLocked) {\n this.readyReenter = false;\n this.checkReady();\n }\n if (this.tagName.toLowerCase() === \"r-dom-probe\") this.remove();\n },\n /**\n *\tChecks if all children are ready and fires the appropriate function (`ready` and/or `rready`).\n */ checkReady: function() {\n if (this.childNodes.length == 0) return;\n if (this.readyLocked) {\n this.readyReenter = true;\n return;\n }\n let isReady = true;\n let list = [];\n let result = document.evaluate(\".//*[contains(name(),'-')]\", this, null, XPathResult.ANY_TYPE, null);\n if ($5808f050ebbd5b77$var$Element.debug) console.log(\"# CHECKING \" + this.tagName);\n while(true){\n let elem = result.iterateNext();\n if (!elem) break;\n if (elem === this) continue;\n let root = this.findCustomParent(elem);\n if (root !== this) continue;\n if ($5808f050ebbd5b77$var$Element.debug) console.log(\" \" + elem.tagName + \" = \" + elem.isReady);\n if (!elem.isReady) isReady = false;\n list.push(elem);\n }\n if (!isReady) return;\n this.markReady(list);\n },\n /**\n * \tReturns the value of a field given its path. Starts from `global`, unless the first item in the path is `this`, in which case it will start from the element.\n */ getFieldByPath: function(path) {\n if (!path) return null;\n if (typeof path !== \"string\") return path;\n let tmp = path.split(\".\");\n let ref = $parcel$global;\n if (tmp.length && tmp[0] == \"this\") {\n ref = this;\n tmp.shift();\n }\n if (tmp.length && tmp[0] == \"root\") {\n ref = this.getRoot();\n tmp.shift();\n }\n while(ref != null && tmp.length != 0)ref = ref[tmp.shift()];\n return ref;\n },\n /**\n * \tReturns the root of the element (that is, the `root` property). If not set it will attempt to find the root first.\n */ getRoot: function() {\n return this.root ? this.root : this.root = this.findRoot();\n },\n /**\n * \tSets the model of the element and executes the `modelChanged` event handler (unless `update` is set to false).\n */ setModel: function(model, update = true) {\n if (!model) return this;\n model = (0, $k7heJ$Rinn).ensureTypeOf(this.modelt, model);\n if (this.model !== model) {\n if (this.model != null) {\n this.model.removeEventListener(this.eid + \":modelChanged\", this.onModelPreChanged, this);\n this.model.removeEventListener(this.eid + \":propertyChanging\", this.onModelPropertyChanging, this);\n this.model.removeEventListener(this.eid + \":propertyChanged\", this.onModelPropertyPreChanged, this);\n this.model.removeEventListener(this.eid + \":propertyRemoved\", this.onModelPropertyRemoved, this);\n }\n this.model = model;\n this.model.addEventListener(this.eid + \":modelChanged\", this.onModelPreChanged, this);\n this.model.addEventListener(this.eid + \":propertyChanging\", this.onModelPropertyChanging, this);\n this.model.addEventListener(this.eid + \":propertyChanged\", this.onModelPropertyPreChanged, this);\n this.model.addEventListener(this.eid + \":propertyRemoved\", this.onModelPropertyRemoved, this);\n }\n if (update !== false) this.model.setNamespace(this.eid).update(true).setNamespace(null);\n return this;\n },\n /**\n * \tReturns the model of the element. Added for symmetry only, exactly the same as accesing public property `model` of this class.\n */ getModel: function() {\n return this.model;\n },\n /**\n * \tAdds one or more CSS classes (separated by space) to the element.\n */ addClass: function(classString) {\n if (!classString) return this;\n classString.split(\" \").forEach((i)=>{\n i = i.trim();\n if (!i) return;\n if (i[0] == \"-\" || i[0] == \"+\") this.classList[i[0] == \"-\" ? \"remove\" : \"add\"](i.substr(1));\n else this.classList.add(i);\n });\n return this;\n },\n /**\n * \tRemoves one or more CSS classes (separated by space) from the element.\n */ removeClass: function(classString) {\n if (!classString) return this;\n classString.split(\" \").forEach((i)=>{\n i = i.trim();\n if (!i) return;\n if (i[0] == \"-\" || i[0] == \"+\") this.classList[i[0] == \"-\" ? \"remove\" : \"add\"](i.substr(1));\n else this.classList.remove(i);\n });\n return this;\n },\n /**\n * \tSets one or more style properties to the element (separated by semi-colon).\n */ setStyle: function(styleString) {\n if (!styleString) return this;\n styleString.split(\";\").forEach((i)=>{\n let j = (i = i.trim()).indexOf(\":\");\n if (j == -1) return;\n let name = i.substr(0, j).trim();\n for(let k = name.indexOf(\"-\"); k != -1; k = name.indexOf(\"-\"))name = name.substr(0, k) + name.substr(k + 1, 1).toUpperCase() + name.substr(k + 2);\n this.style[name] = i.substr(j + 1).trim();\n });\n return this;\n },\n /**\n * \tReturns the width of the specified element (or of itself it none provided), uses `getBoundingClientRect`.\n */ getWidth: function(elem = null) {\n return (elem || this).getBoundingClientRect().width;\n },\n /**\n * \tReturns the height of the specified element (or of itself it none provided), uses `getBoundingClientRect`.\n */ getHeight: function(elem = null) {\n return (elem || this).getBoundingClientRect().height;\n },\n /**\n **\tBinds all events in the specified map to the element, the events map can have one of the following forms:\n **\n **\t\t\"click .button\": \"doSomething\",\t\t(Delegated Event)\n **\t\t\"click .button\": function() { },\t(Delegated Event)\n **\t\t\"myevt &this\": \"...\",\t\t\t\t(Self Event)\n **\t\t\"myevt\": \"...\",\t\t\t\t\t\t(Element Event)\n **\t\t\"myevt @objName\": \"...\",\t\t\t(EventDispatcher Event)\n **\t\t\"#propname\": \"...\",\t\t\t\t\t(Property Changed Event)\n **\t\t\"keyup(10) .input\": \"...\"\t\t\t(Delegated Event with Parameters)\n **\n **\t>> Element bindEvents (object events);\n */ bindEvents: function(events) {\n for(let evtstr in events){\n let hdl = events[evtstr];\n if ((0, $k7heJ$Rinn).typeOf(hdl) == \"string\") hdl = this[hdl];\n hdl = hdl.bind(this);\n var i = evtstr.indexOf(\" \");\n var name = i == -1 ? evtstr : evtstr.substr(0, i);\n var selector = i == -1 ? \"\" : evtstr.substr(i + 1);\n let args = null;\n var j = name.indexOf(\"(\");\n if (j != -1) {\n args = name.substr(j + 1, name.length - j - 2).split(\",\");\n name = name.substr(0, j);\n }\n if (selector[0] == \"@\") {\n if (selector != \"@this\") {\n this[selector.substr(1)].addEventListener(name, hdl);\n continue;\n }\n selector = this;\n } else if (selector[0] == \"&\") {\n if (selector != \"&this\") selector = \"[data-ref='\" + selector.substr(1) + \"']\";\n else selector = this;\n }\n if (name.substr(0, 1) == \"#\") {\n this.listen(\"propertyChanged.\" + name.substr(1), this, hdl);\n continue;\n }\n if (args != null) switch(name){\n case \"keyup\":\n case \"keydown\":\n this.listen(name, selector, function(evt) {\n if ((0, $k7heJ$Rinn).indexOf(args, evt.keyCode.toString()) != -1) return hdl(evt, args);\n evt.continuePropagation = true;\n });\n continue;\n }\n this.listen(name, selector, hdl);\n }\n return this;\n },\n /**\n **\tBinds all routes in the specified map to the Router object.\n **\n **\t\t\"route-path\": \"doSomething\"\t\t\t\t\t\tOn-Route\n **\t\t\"route-path\": function (evt, args) { }\t\t\tOn-Route\n **\t\t\"!route-path\": \"doSomething\"\t\t\t\t\tOn-UnRoute\n **\t\t\"!route-path\": function (evt, args) { }\t\t\tOn-UnRoute\n **\n **\t>> Element bindRoutes ();\n */ bindRoutes: function() {\n if (!this.routes) return;\n for(let routeStr in this.routes){\n let route = routeStr[0] === \"!\" ? (0, $7718a52dfca15325$export$2e2bcd8739ae039).getRoute(routeStr.substr(1)) : (0, $7718a52dfca15325$export$2e2bcd8739ae039).getRoute(routeStr);\n let handler = this.routes[routeStr];\n if ((0, $k7heJ$Rinn).typeOf(handler) === \"string\") handler = this[handler];\n if (routeStr[0] === \"!\") route.addHandler(handler, true, this);\n else route.addHandler(handler, false, this);\n }\n },\n /**\n * Unbinds all routes added by bindRoutes.\n */ unbindRoutes: function() {\n if (!this.routes) return;\n for(let routeStr in this.routes){\n let route = routeStr[0] === \"!\" ? (0, $7718a52dfca15325$export$2e2bcd8739ae039).getRoute(routeStr.substr(1)) : (0, $7718a52dfca15325$export$2e2bcd8739ae039).getRoute(routeStr);\n let handler = this.routes[routeStr];\n if ((0, $k7heJ$Rinn).typeOf(handler) === \"string\") handler = this[handler];\n if (routeStr[0] === \"!\") route.removeHandler(handler, true, this);\n else route.removeHandler(handler, false, this);\n }\n },\n /**\n **\tExecutes the underlying event handler given an event and a selector. Called internally by listen().\n **\n **\t>> void _eventHandler (event evt, string selector, function handler);\n */ _eventHandler: function(evt, selector, handler) {\n if (evt.continuePropagation === false) return;\n evt.continuePropagation = true;\n evt.source = evt.target;\n if (selector && selector instanceof HTMLElement) {\n if (evt.source === selector) {\n evt.continuePropagation = false;\n if (handler.call(this, evt, evt.detail) === true) evt.continuePropagation = true;\n }\n } else if (selector && selector != \"*\") {\n let elems = this.querySelectorAll(selector);\n while(evt.source !== this){\n let i = (0, $k7heJ$Rinn).indexOf(elems, evt.source, true);\n if (i !== -1) {\n evt.continuePropagation = false;\n if (handler.call(this, evt, evt.detail) === true) evt.continuePropagation = true;\n break;\n } else evt.source = evt.source.parentElement;\n }\n } else {\n evt.continuePropagation = false;\n if (handler.call(this, evt, evt.detail) === true) evt.continuePropagation = true;\n }\n if (evt.continuePropagation === false) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n },\n /**\n **\tListens for an event on elements matching the specified selector, returns an object with a single method `remove` used\n **\tto remove the listener when it is no longer needed.\n **\n **\t>> object listen (string eventName, string selector, function handler);\n **\t>> object listen (string eventName, function handler);\n */ listen: function(eventName, selector, handler) {\n let eventCatcher = false;\n let eventImmediate = false;\n if ((0, $k7heJ$Rinn).typeOf(selector) == \"function\") {\n handler = selector;\n selector = null;\n }\n if (eventName[eventName.length - 1] == \"!\") {\n eventName = eventName.substr(0, eventName.length - 1);\n eventCatcher = true;\n }\n if (eventName[0] == \"!\") {\n eventName = eventName.substr(1);\n eventImmediate = true;\n }\n let callback0 = null;\n let callback1 = null;\n let self = this;\n this.addEventListener(eventName, callback0 = (evt)=>{\n if (evt.continuePropagation === false) return;\n if (!evt.firstCapture) {\n evt.firstCapture = this;\n evt.firstCaptureCount = 0;\n evt.queue = [];\n }\n if (evt.firstCapture === this) evt.firstCaptureCount++;\n if (eventCatcher == true) evt.queue.push([\n this,\n selector,\n handler\n ]);\n if (eventImmediate == true) this._eventHandler(evt, selector, handler);\n }, true);\n this.addEventListener(eventName, callback1 = (evt)=>{\n if (evt.continuePropagation === false) return;\n if (eventCatcher !== true && eventImmediate !== true) this._eventHandler(evt, selector, handler);\n if (evt.firstCapture === this && evt.continuePropagation !== false) {\n if (--evt.firstCaptureCount == 0) {\n while(evt.queue.length){\n let q = evt.queue.pop();\n q[0]._eventHandler(evt, q[1], q[2]);\n }\n evt.continuePropagation = false;\n }\n }\n }, false);\n return {\n removed: false,\n remove: function() {\n if (this.removed) return;\n this.removed = true;\n self.removeEventListener(eventName, callback0, true);\n self.removeEventListener(eventName, callback1, false);\n }\n };\n },\n /**\n **\tCreates an event object for later dispatch.\n */ createEventObject: function(eventName, args, bubbles) {\n let evt;\n if (eventName == \"click\") evt = new MouseEvent(eventName, {\n bubbles: bubbles,\n detail: args\n });\n else evt = new CustomEvent(eventName, {\n bubbles: bubbles,\n detail: args\n });\n return evt;\n },\n /**\n **\tDispatches a new event with the specified name and the given arguments.\n */ dispatch: function(eventName, args = null, bubbles = true) {\n let propName = \"on\" + eventName.toLowerCase();\n if (propName in this) {\n this[propName](args, this);\n return this;\n }\n this.dispatchEvent(this.createEventObject(eventName, args, bubbles));\n return this;\n },\n /**\n **\tDispatches a local event, does not bubble up and invokes only the local event handler if present.\n */ trigger: function(eventName, args = null) {\n let propName = \"on\" + eventName.replace(/-/g, \"\").toLowerCase();\n if (!(propName in this)) return this;\n this[propName](args, this);\n return this;\n },\n /**\n **\tDispatches a new event on the specified element with the given name and arguments (uses `CustomEvent`).\n */ dispatchOn: function(elem, eventName, args = null, bubbles = true) {\n let propName = \"on\" + eventName.replace(/-/g, \"\").toLowerCase();\n if (propName in elem) {\n elem[propName](args, elem);\n return this;\n }\n elem.dispatchEvent(this.createEventObject(eventName, args, bubbles));\n return this;\n },\n /**\n **\tSets the innerHTML property of the element and runs some post set-content tasks.\n */ setInnerHTML: function(value) {\n this.readyLocked++;\n this.innerHTML = value;\n this.readyLocked--;\n return this;\n },\n /**\n **\tCollects all watchers (data-watch, data-visible, data-attr, data-property), that depend on the model, should be invoked when the\n ** structure of the element changed (added/removed children). This is automatically called when the setInnerHTML method is called.\n **\n **\tNote that for 3rd party libs that add children to this element (which could probably have a watcher) will possibly result in\n **\tduplication of the added elements when compiling the innerHTML template. To prevent this add the 'pseudo' CSS class to any\n **\telement that should not be added to the HTML template.\n **\n **\t>> void collectWatchers ();\n */ collectWatchers: function() {\n let self = this;\n let modified = false;\n let list;\n if (!this.isRoot) return;\n let _list_watch_length = this._list_watch.length;\n let _list_visible_length = this._list_visible.length;\n let _list_attr_length = this._list_attr.length;\n let _list_property_length = this._list_property.length;\n /* *** */ list = this.querySelectorAll(\"[data-watch]\");\n for(let i = 0; i < list.length; i++){\n for (let j of list[i].querySelectorAll(\".pseudo\"))j.remove();\n list[i]._template = (0, $k7heJ$Template).compile(list[i].innerHTML);\n list[i]._watch = new RegExp(\"^(\" + list[i].dataset.watch + \")$\");\n list[i].innerHTML = \"\";\n list[i].removeAttribute(\"data-watch\");\n this._list_watch.push(list[i]);\n }\n if (\"selfWatch\" in this.dataset) {\n for (let j of this.querySelectorAll(\".pseudo\"))j.remove();\n this._template = (0, $k7heJ$Template).compile(this.innerHTML);\n this._watch = new RegExp(\"^(\" + this.dataset.selfWatch + \")$\");\n this.innerHTML = \"\";\n this.removeAttribute(\"data-self-watch\");\n this._list_watch.push(this);\n }\n /* *** */ list = this.querySelectorAll(\"[data-visible]\");\n for(let i = 0; i < list.length; i++){\n list[i]._visible = (0, $k7heJ$Template).compile(list[i].dataset.visible);\n list[i].removeAttribute(\"data-visible\");\n this._list_visible.push(list[i]);\n }\n if (\"selfVisible\" in this.dataset) {\n this._visible = (0, $k7heJ$Template).compile(this.dataset.selfVisible);\n this.removeAttribute(\"data-self-visible\");\n this._list_visible.push(this);\n }\n /* *** */ list = this.querySelectorAll(\"[data-attr]\");\n for(let i = 0; i < list.length; i++){\n list[i]._attr = [];\n for (let j of list[i].dataset.attr.split(\";\")){\n j = j.split(\":\");\n if (j.length != 2) continue;\n list[i]._attr.push({\n name: j[0].trim(),\n value: (0, $k7heJ$Template).compile(j[1].trim())\n });\n }\n list[i].removeAttribute(\"data-attr\");\n this._list_attr.push(list[i]);\n }\n if (\"selfAttr\" in this.dataset) {\n this._attr = [];\n for (let j of this.dataset.selfAttr.split(\";\")){\n j = j.split(\":\");\n if (j.length != 2) continue;\n this._attr.push({\n name: j[0].trim(),\n value: (0, $k7heJ$Template).compile(j[1].trim())\n });\n }\n this.removeAttribute(\"data-self-attr\");\n this._list_attr.push(this);\n }\n /* *** */ list = this.querySelectorAll(\"[data-property]\");\n for(let i = 0; i < list.length; i++){\n list[i].onchange = list[i].onblur = function() {\n switch(this.type){\n case \"radio\":\n if (this.checked) self.getModel().set(this.name, this.value);\n break;\n case \"checkbox\":\n self.getModel().set(this.name, this.checked ? \"1\" : \"0\");\n break;\n case \"field\":\n self.getModel().set(this.name, this.getValue());\n break;\n default:\n self.getModel().set(this.name, this.value);\n break;\n }\n };\n if (list[i].tagName == \"SELECT\") list[i].onmouseup = function() {\n self.getModel().set(this.name, this.value);\n };\n list[i].name = list[i].dataset.property;\n list[i].removeAttribute(\"data-property\");\n this._list_property.push(list[i]);\n }\n if (\"selfProperty\" in this.dataset) {\n this.onchange = this.onblur = function() {\n switch(this.type){\n case \"radio\":\n if (this.checked) self.getModel().set(this.name, this.value);\n break;\n case \"checkbox\":\n self.getModel().set(this.name, this.checked ? \"1\" : \"0\");\n break;\n case \"field\":\n self.getModel().set(this.name, this.getValue());\n break;\n default:\n self.getModel().set(this.name, this.value);\n break;\n }\n };\n if (this.tagName == \"SELECT\") this.onmouseup = function() {\n self.getModel().set(this.name, this.value);\n };\n this.name = this.dataset.selfProperty;\n this.removeAttribute(\"data-self-property\");\n this._list_property.push(this);\n }\n /* *** */ this._list_watch = this._list_watch.filter((i)=>i.parentElement != null);\n if (_list_watch_length != this._list_watch.length) modified = true;\n this._list_visible = this._list_visible.filter((i)=>i.parentElement != null);\n if (_list_visible_length != this._list_visible.length) modified = true;\n this._list_attr = this._list_attr.filter((i)=>i.parentElement != null);\n if (_list_attr_length != this._list_attr.length) modified = true;\n this._list_property = this._list_property.filter((i)=>i.parentElement != null);\n if (_list_property_length != this._list_property.length) modified = true;\n if (this.model != null && modified) this.model.setNamespace(this.eid).update(true).setNamespace(null);\n },\n /**\n **\tExecuted when the element is created and yet not attached to the DOM tree.\n */ onCreated: function() {},\n /**\n * Executes the callback (just once) when the element is ready.\n * @param {function} callback \n * @returns {Element}\n */ whenReady: function(callback) {\n if (this.isReady) {\n callback();\n return this;\n }\n let hdl = this.listen(\"_ready\", this, ()=>{\n hdl.remove();\n callback();\n });\n return this;\n },\n /**\n * Executed when the element is attached to the DOM tree.\n */ elementConnected: function() {\n this.bindRoutes();\n this.onConnected();\n this.trigger(\"connected\");\n },\n /**\n * Executed when the element is no longer a part of the DOM tree.\n */ elementDisconnected: function() {\n this.unbindRoutes();\n this.onDisconnected();\n this.trigger(\"disconnected\");\n },\n /**\n **\tExecuted when the element is attached to the DOM tree.\n */ onConnected: function() {},\n /**\n **\tExecuted when the element is no longer a part of the DOM tree.\n */ onDisconnected: function() {},\n /**\n **\tExecuted on the root element when a child element has `data-ref` attribute and it was added to it.\n */ onRefAdded: function(name, element) {},\n /**\n **\tExecuted on the root element when a child element has `data-ref` attribute and it was removed from it.\n */ onRefRemoved: function(name, element) {},\n /**\n **\tEvent handler invoked when the model has changed, executed before onModelChanged() to update internal dependencies,\n **\tshould not be overriden or elements watching the model will not be updated.\n **\n **\t>> void onModelPreChanged (evt, args);\n */ onModelPreChanged: function(evt, args) {\n let data = this.getModel().get();\n for(let i = 0; i < this._list_watch.length; i++)for (let j of args.fields){\n if (!this._list_watch[i]._watch.test(j)) continue;\n this._list_watch[i].innerHTML = this._list_watch[i]._template(data);\n break;\n }\n for(let i = 0; i < this._list_visible.length; i++)if (!!this._list_visible[i]._visible(data, \"arg\")) this._list_visible[i].style.removeProperty(\"display\");\n else this._list_visible[i].style.setProperty(\"display\", \"none\", \"important\");\n for(let i = 0; i < this._list_attr.length; i++)for (let j of this._list_attr[i]._attr)this._list_attr[i][j.name] = j.value(data, \"arg\");\n this.onModelChanged(evt, args);\n },\n /**\n **\tEvent handler invoked when the model has changed.\n */ onModelChanged: function(evt, args) {},\n /**\n **\tEvent handler invoked when a property of the model is changing. Fields `name` and `value` can be found in the `args` object.\n */ onModelPropertyChanging: function(evt, args) {},\n /**\n **\tEvent handler invoked when a property of the model has changed, executed before onModelPropertyChanged() to update internal\n **\tdependencies. Automatically triggers internal events named `propertyChanged.<propertyName>` and `propertyChanged`.\n **\tShould not be overriden or elements depending on the property will not be updated.\n */ onModelPropertyPreChanged: function(evt, args) {\n for(let i = 0; i < this._list_property.length; i++)if (this._list_property[i].name == args.name) {\n let trigger = true;\n switch(this._list_property[i].type){\n case \"radio\":\n if (this._list_property[i].value != args.value) {\n this._list_property[i].parentElement.classList.remove(\"active\");\n continue;\n }\n this._list_property[i].checked = true;\n this._list_property[i].parentElement.classList.add(\"active\");\n break;\n case \"checkbox\":\n if (~~args.value) {\n this._list_property[i].checked = true;\n this._list_property[i].parentElement.classList.add(\"active\");\n } else {\n this._list_property[i].checked = false;\n this._list_property[i].parentElement.classList.remove(\"active\");\n }\n break;\n case \"field\":\n this._list_property[i].val = this._list_property[i].dataset.value = args.value;\n this._list_property[i].setValue(args.value);\n trigger = false;\n break;\n default:\n this._list_property[i].value = args.value;\n this._list_property[i].val = this._list_property[i].dataset.value = args.value;\n if (this._list_property[i].value != args.value) trigger = false;\n break;\n }\n if (trigger && this._list_property[i].onchange) this._list_property[i].onchange();\n }\n this.dispatch(\"propertyChanged.\" + args.name, args, false);\n this.dispatch(\"propertyChanged\", args, false);\n this.onModelPropertyChanged(evt, args);\n },\n /**\n **\tEvent handler invoked when a property of the model has changed.\n */ onModelPropertyChanged: function(evt, args) {},\n /**\n **\tEvent handler invoked when a property of the model is removed. Field `name` can be found in the `args` object.\n */ onModelPropertyRemoved: function(evt, args) {},\n /*\n **\tRuns the following preparation procedures on the specified prototype:\n **\t\t- All functions named 'event <event-name> [event-selector]' will be moved to the 'events' map.\n **\t\t- All functions named 'route <route-path>' will be moved to the 'routes' map.\n **\n **\t>> void preparePrototype (object proto);\n */ preparePrototype: function(proto) {\n if (proto.__prototypePrepared === true) return;\n proto.__prototypePrepared = true;\n if (!proto.hasOwnProperty(\"events\") || !proto.events) proto.events = {};\n if (!proto.hasOwnProperty(\"routes\") || !proto.routes) proto.routes = {};\n for(let i in proto){\n if (i.startsWith(\"event \")) {\n proto.events[i.substr(6)] = proto[i];\n delete proto[i];\n } else if (i.startsWith(\"route \")) {\n proto.routes[i.substr(6)] = proto[i];\n delete proto[i];\n }\n }\n },\n /*\n **\tRegisters a new custom element with the specified name. Extra functionality can be added with one or more prototypes, by default\n **\tall elements also get the `Element` prototype. Note that the final prototypes of all registered elements are stored, and if you want\n **\tto inherit another element's prototype just provide its name (string) in the protos argument list.\n **\n **\t>> class register (string name, ...(object|string) protos);\n */ register: function(name, ...protos) {\n if (\"riza_element_prefix\" in globalThis) name = name.replace(\"r-\", globalThis[\"riza_element_prefix\"] + \"-\");\n const newElement = class extends HTMLElement {\n constructor(){\n super();\n this.invokeConstructor = true;\n if ($5808f050ebbd5b77$var$Element.debug) console.log(\"CREATED \" + this.tagName);\n this._super = {};\n for (let i of Object.entries(this.constructor.prototype._super)){\n this._super[i[0]] = {};\n for (let j of Object.entries(i[1]))this._super[i[0]][j[0]] = j[1].bind(this);\n }\n this.onCreated();\n }\n findRoot(srcElement = null) {\n let elem = srcElement ? srcElement : this.parentElement;\n while(elem != null){\n if (\"isRoot\" in elem && elem.isRoot === true) return elem;\n elem = elem.parentElement;\n }\n return null;\n }\n findCustomParent(srcElement = null) {\n let elem = srcElement ? srcElement.parentElement : this.parentElement;\n while(elem != null){\n if (elem.tagName.indexOf(\"-\") !== -1) return elem;\n elem = elem.parentElement;\n }\n return null;\n }\n connectReference(root = null, flags = 255) {\n if (!this.root && (flags & 1) == 1) {\n if (root == null) root = this.findRoot();\n if (root != null) {\n if (this.dataset.ref) root[this.dataset.ref] = this;\n this.root = root;\n }\n }\n }\n connectedCallback() {\n this.connectReference(null, 1);\n if (this.invokeConstructor) {\n this.invokeConstructor = false;\n this.__ctor();\n }\n this.connectReference(null, 2);\n this.elementConnected();\n if (this.dataset.xref) globalThis[this.dataset.xref] = this;\n }\n disconnectedCallback() {\n if (this.root) {\n if (this.dataset.ref) {\n this.root.onRefRemoved(this.dataset.ref, this);\n delete this.root[this.dataset.ref];\n }\n this.root = null;\n }\n this.elementDisconnected();\n if (this.dataset.xref) delete globalThis[this.dataset.xref];\n }\n };\n (0, $k7heJ$Rinn).override(newElement.prototype, $5808f050ebbd5b77$var$Element);\n const proto = {};\n const _super = {};\n const events = (0, $k7heJ$Rinn).clone($5808f050ebbd5b77$var$Element.events);\n let __init = true;\n let __ready = true;\n let __rready = true;\n let __check;\n for(let i = 0; i < protos.length; i++){\n if (!protos[i]) continue;\n if ((0, $k7heJ$Rinn).typeOf(protos[i]) == \"string\") {\n const name = protos[i];\n protos[i] = $5808f050ebbd5b77$var$elementPrototypes[name];\n if (!protos[i]) continue;\n _super[name] = {};\n for(let f in protos[i]){\n if ((0, $k7heJ$Rinn).typeOf(protos[i][f]) != \"function\") continue;\n _super[name][f] = protos[i][f];\n }\n __init = false;\n __ready = false;\n __rready = false;\n __check = false;\n } else {\n $5808f050ebbd5b77$var$Element.preparePrototype(protos[i]);\n __check = true;\n }\n if (\"_super\" in protos[i]) (0, $k7heJ$Rinn).override(_super, protos[i]._super);\n if (\"events\" in protos[i]) (0, $k7heJ$Rinn).override(events, protos[i].events);\n (0, $k7heJ$Rinn).override(newElement.prototype, protos[i]);\n (0, $k7heJ$Rinn).override(proto, protos[i]);\n if (__check) {\n if (!__init && \"init\" in protos[i]) __init = true;\n if (!__ready && \"ready\" in protos[i]) __ready = true;\n if (!__rready && \"rready\" in protos[i]) __rready = true;\n }\n }\n let dummy = function() {};\n if (!__init) {\n newElement.prototype.init = dummy;\n proto.init = dummy;\n }\n if (!__ready) {\n newElement.prototype.ready = dummy;\n proto.ready = dummy;\n }\n if (!__rready) {\n newElement.prototype.rready = dummy;\n proto.rready = dummy;\n }\n newElement.prototype._super = _super;\n newElement.prototype.events = events;\n proto._super = _super;\n proto.events = events;\n customElements.define(name, newElement);\n $5808f050ebbd5b77$var$elementPrototypes[name] = proto;\n $5808f050ebbd5b77$var$elementClasses[name] = newElement;\n return newElement;\n },\n /*\n **\tExpands an already created custom element with the specified prototype(s).\n **\n **\t>> void expand (string elementName, ...object protos);\n */ expand: function(name, ...protos) {\n if (!(name in $5808f050ebbd5b77$var$elementPrototypes)) return;\n const self = $5808f050ebbd5b77$var$elementPrototypes[name];\n const elem = $5808f050ebbd5b77$var$elementClasses[name];\n const _super = self._super;\n const events = self.events;\n for (let proto of protos){\n $5808f050ebbd5b77$var$Element.preparePrototype(proto);\n if (\"_super\" in proto) (0, $k7heJ$Rinn).override(_super, proto._super);\n if (\"events\" in proto) (0, $k7heJ$Rinn).override(events, proto.events);\n (0, $k7heJ$Rinn).override(elem.prototype, proto);\n (0, $k7heJ$Rinn).override(self, proto);\n }\n elem.prototype._super = _super;\n elem.prototype.events = events;\n self._super = _super;\n self.events = events;\n },\n /*\n **\tAppends a hook to a function of a custom element.\n */ hookAppend: function(name, functionName, newFunction) {\n if (!(name in $5808f050ebbd5b77$var$elementPrototypes)) return;\n let hook1 = (0, $k7heJ$Rinn).hookAppend($5808f050ebbd5b77$var$elementPrototypes[name], functionName, newFunction);\n let hook2 = (0, $k7heJ$Rinn).hookAppend($5808f050ebbd5b77$var$elementClasses[name].prototype, functionName, newFunction);\n return {\n unhook: function() {\n hook1.unhook();\n hook2.unhook();\n }\n };\n },\n /*\n **\tPrepends a hook to a function of a custom element.\n */ hookPrepend: function(name, functionName, newFunction) {\n if (!(name in $5808f050ebbd5b77$var$elementPrototypes)) return;\n let hook1 = (0, $k7heJ$Rinn).hookPrepend($5808f050ebbd5b77$var$elementPrototypes[name], functionName, newFunction);\n let hook2 = (0, $k7heJ$Rinn).hookPrepend($5808f050ebbd5b77$var$elementClasses[name].prototype, functionName, newFunction);\n return {\n unhook: function() {\n hook1.unhook();\n hook2.unhook();\n }\n };\n },\n /**\n **\tBuilt-in action handlers.\n */ /**\n **\t:toggleClass <className> [<selector>]\n **\n **\tToggles a CSS class on the element.\n */ \":toggleClass\": function(args, evt) {\n let elem = evt.source;\n if (\"2\" in args) elem = document.querySelector(args[2]);\n if (!elem) return;\n if (elem.classList.contains(args[1])) elem.classList.remove(args[1]);\n else elem.classList.add(args[1]);\n },\n /**\n **\t:setClass <className> [<selector>]\n **\n **\tSets a CSS class on the element.\n */ \":setClass\": function(args, evt) {\n let elem = evt.source;\n if (\"2\" in args) elem = document.querySelector(args[2]);\n if (!elem) return;\n elem.classList.add(args[1]);\n },\n /**\n **\t:volatileClass <className> [<selector>]\n **\n **\tAdds the CSS class to the element and any click outside will cause it to be removed.\n */ \":volatileClass\": function(args, evt) {\n let elem = evt.source;\n if (\"2\" in args) elem = document.querySelector(args[2]);\n if (!elem) return;\n elem.classList.add(args[1]);\n let fn = ()=>{\n window.removeEventListener(\"click\", fn, true);\n elem.classList.remove(args[1]);\n };\n window.addEventListener(\"click\", fn, true);\n },\n /**\n **\t:toggleClassUnique <className> <parentSelector> <childSelector>\n **\n **\tToggles a CSS class on the element and only one element in the selected parent can have the class.\n */ \":toggleClassUnique\": function(args, evt) {\n let elem = evt.source;\n if (!elem) return;\n if (elem.classList.contains(args[1])) elem.classList.remove(args[1]);\n else {\n elem.querySelectorParent(args[2]).querySelectorAll(args[3]).forEach((elem)=>elem.classList.remove(args[1]));\n elem.classList.add(args[1]);\n }\n },\n /**\n **\t:setClassUnique <className> <parentSelector> <childSelector>\n **\n **\tSets a CSS class on the element and only that element in the selected parent can have the class.\n */ \":setClassUnique\": function(args, evt) {\n let elem = evt.source;\n if (!elem) return;\n elem.querySelectorParent(args[2]).querySelectorAll(args[3]).forEach((elem)=>elem.classList.remove(args[1]));\n elem.classList.add(args[1]);\n }\n};\n$5808f050ebbd5b77$var$Element.debug = false;\n$5808f050ebbd5b77$var$Element.register(\"r-elem\", {});\n$5808f050ebbd5b77$var$Element.register(\"r-dom-probe\", {});\n/* ****************************************** */ /**\n * Finds the parent element given a selector.\n */ HTMLElement.prototype.querySelectorParent = function(selector) {\n let elem = this;\n while(elem != null){\n if (elem.matches(selector)) break;\n elem = elem.parentElement;\n }\n return elem;\n};\nvar $5808f050ebbd5b77$export$2e2bcd8739ae039 = $5808f050ebbd5b77$var$Element;\n\n\n\n/**\r\n * API interface utility functions.\r\n */ const $d584b999ce7bb535$var$Api = {\n /**\r\n * Flags constants.\r\n */ REQUEST_PACKAGE_SUPPORTED: 0x01,\n REQ64_SUPPORTED: 0x02,\n JSON_RESPONSE_SUPPORTED: 0x04,\n XML_RESPONSE_SUPPORTED: 0x08,\n INCLUDE_CREDENTIALS: 0x10,\n UNIQUE_STAMP: 0x20,\n DISABLE_CORS: 0x40,\n WIND_V3: 0x80,\n /**\r\n * Target URL for all the API requests. Set by calling `setEndPoint`.\r\n */ apiUrl: \"/api\",\n /**\r\n * Capabilities flag.\r\n */ flags: 63,\n /**\r\n * Indicates if all request data will be packed into a req64 parameter instead of individual fields.\r\n */ useReq64: false,\n /**\r\n * Number of retries to execute each API call before giving up and invoking error handlers.\r\n */ retries: 0,\n /**\r\n * Headers for the request.\r\n */ headers: {},\n /**\r\n * Level of the current request. Used to detect nested requests.\r\n */ _requestLevel: 0,\n /**\r\n * Indicates if all API calls should be bundled in a request package. Activated by calling the packageBegin() function and finished with packageEnd().\r\n */ _requestPackage: 0,\n /**\r\n * When in package-mode, this contains the package data to be sent upon a call to packageEnd().\r\n */ _packageData: [],\n /**\r\n * Sets the API end-point URL address.\r\n */ setEndPoint: function(apiUrl, flags = null) {\n this.apiUrl = apiUrl;\n this.flags = flags ?? this.flags;\n return this;\n },\n /**\r\n * Overridable filter that processes the response from the server and returns true if it was successful. The `res` parameter indicates the response data, and `req` the request data.\r\n */ responseFilter: function(res, req) {\n return true;\n },\n /**\r\n * Starts \"package-mode\" (using the `rpkg` field). Any API calls after this will be bundled together.\r\n */ packageBegin: function() {\n if (!(this.flags & $d584b999ce7bb535$var$Api.REQUEST_PACKAGE_SUPPORTED)) return;\n this._requestPackage++;\n },\n /**\r\n * Finishes \"package-mode\" and a single API request with the currently constructed package will be sent.\r\n */ packageEnd: function(callback) {\n if (!(this.flags & $d584b999ce7bb535$var$Api.REQUEST_PACKAGE_SUPPORTED)) return;\n if (!this._requestPackage) return;\n if (--this._requestPackage) return;\n this.packageSend(callback);\n },\n /**\r\n * Starts package-mode, executes the callback and finishes package-mode. Therefore any requests made by the callback will be packed together.\r\n */ batch: function(callback, responseCallback = null) {\n if (!(this.flags & $d584b999ce7bb535$var$Api.REQUEST_PACKAGE_SUPPORTED)) {\n callback();\n if (responseCallback) responseCallback();\n return;\n }\n this.packageBegin();\n callback();\n this.packageEnd(responseCallback);\n },\n /**\r\n * Sends a single API request with the currently constructed package and maintains package-mode.\r\n */ packageSend: function(callback) {\n if (!(this.flags & $d584b999ce7bb535$var$Api.REQUEST_PACKAGE_SUPPORTED)) return;\n if (!this._packageData.length) return;\n let _packageData = this._packageData;\n this._packageData = [];\n var rpkg = \"\";\n for(var i = 0; i < _packageData.length; i++)rpkg += \"r\" + i + \",\" + (0, $k7heJ$base64).encode(this.encodeParams(_packageData[i][2])) + \";\";\n this._showProgress();\n this.apiCall({\n rpkg: rpkg\n }, (res, req)=>{\n this._hideProgress();\n for(let i = 0; i < _packageData.length; i++)try {\n var response = res[\"r\" + i];\n if (!response) {\n if (_packageData[i][1] != null) _packageData[i][1](_packageData[i][2]);\n continue;\n }\n if (_packageData[i][0] != null) {\n if (this.responseFilter(response, _packageData[i][2])) _packageData[i][0](response, _packageData[i][2]);\n }\n } catch (e) {}\n if (callback) callback();\n }, (req)=>{\n this._hideProgress();\n for(let i = 0; i < _packageData.length; i++)if (_packageData[i][1] != null) _packageData[i][1](_packageData[i][2]);\n });\n },\n /**\r\n * Adds CSS class 'busy' to the HTML root element, works only if running inside a browser.\r\n */ _showProgress: function() {\n if (\"document\" in $parcel$global) {\n this._requestLevel++;\n if (this._requestLevel > 0) $parcel$global.document.documentElement.classList.add(\"busy\");\n }\n },\n /**\r\n * Removes the 'busy' CSS class from the HTML element.\r\n */ _hideProgress: function() {\n if (\"document\" in $parcel$global) {\n this._requestLevel--;\n if (this._requestLevel) return;\n setTimeout(()=>{\n if (this._requestLevel === 0) $parcel$global.document.documentElement.classList.remove(\"busy\");\n }, 250);\n }\n },\n /**\r\n * Sets an HTTP header.\r\n */ header: function(name, value) {\n if (value === null) delete this.headers[name];\n else this.headers[name] = value;\n return this;\n },\n /**\r\n * Returns a parameter string for a GET request given an object with fields.\r\n */ encodeParams: function(obj) {\n let s = [];\n if (obj instanceof FormData) for (let i of obj.entries())s.push(encodeURIComponent(i[0]) + \"=\" + encodeURIComponent(i[1]));\n else for(let i in obj)s.push(encodeURIComponent(i) + \"=\" + encodeURIComponent(obj[i]));\n return s.join(\"&\");\n },\n /**\r\n * Returns a URL given a relative or absolute URL.\r\n */ getUrl: function(url) {\n if (url.indexOf(\"//\") !== -1) return url;\n return this.apiUrl + url;\n },\n /**\r\n * Appends a parameter to the URL.\r\n */ appendParam: function(url, param) {\n return url + (url.indexOf(\"?\") == -1 ? \"?\" : \"&\") + param;\n },\n /**\r\n * Executes an API call to the URL stored in the `apiUrl` property. By default `httpMethod` is \"auto\", which will determine the best depending on the data to\r\n * be sent. Any connection error will be reported to the `failure` callback, and similarly any success to the `success` callback. The `params` object can be\r\n * a FormData object or just a regular object.\r\n */ apiCall: function(params, success, failure, httpMethod = null, retries = null, relativeUrl = \"\") {\n let url = this.getUrl(relativeUrl ?? \"\");\n if (this.flags & $d584b999ce7bb535$var$Api.UNIQUE_STAMP) url = this.appendParam(url, \"_=\" + Date.now());\n httpMethod = httpMethod ? httpMethod.toUpperCase() : null;\n if (httpMethod === null) httpMethod = \"auto\";\n if (retries === null) retries = this.retries;\n if (this._requestPackage && this.flags & $d584b999ce7bb535$var$Api.REQUEST_PACKAGE_SUPPORTED) {\n if (!(params instanceof FormData)) params = {\n ...params\n };\n this._packageData.push([\n success,\n failure,\n params\n ]);\n return;\n }\n this._showProgress();\n let data = params;\n let options = {\n mode: this.flags & $d584b999ce7bb535$var$Api.DISABLE_CORS ? \"no-cors\" : \"cors\",\n headers: {\n \"Accept\": \"text/html,application/xhtml+xml,application/xml,application/json;q=0.9\",\n ...this.headers\n },\n method: httpMethod,\n body: null,\n multipart: false\n };\n if (this.flags & $d584b999ce7bb535$var$Api.INCLUDE_CREDENTIALS) options.credentials = \"include\";\n if (typeof data !== \"string\" && !(data instanceof Blob)) {\n if (!(data instanceof FormData)) {\n data = new FormData();\n for(let i in params)if (params[i] instanceof File || params[i] instanceof Blob) data.append(i, params[i], params[i].name);\n else data.append(i, params[i]);\n }\n for (let i of data.entries())if (i[1] instanceof File || i[1] instanceof Blob) {\n if (options.method === \"auto\") options.method = \"POST\";\n options.multipart = true;\n break;\n }\n if (this.useReq64 && this.flags & $d584b999ce7bb535$var$Api.REQ64_SUPPORTED && !options.multipart) {\n let tmp = new FormData();\n tmp.append(\"req64\", (0, $k7heJ$base64).encode(this.encodeParams(data)));\n data = tmp;\n }\n if (options.method === \"auto\") {\n let l = 0;\n options.method = \"GET\";\n for (let i of data.entries()){\n l += i[0].length + i[1].length + 2;\n if (l > 960) {\n options.method = \"POST\";\n break;\n }\n }\n }\n if (options.method === \"GET\") url = this.appendParam(url, this.encodeParams(data));\n else if (!options.multipart) {\n options.headers[\"Content-Type\"] = \"application/x-www-form-urlencoded\";\n options.body = this.encodeParams(data);\n } else options.body = data;\n } else {\n if (typeof data === \"string\") {\n if (data[0] === \"<\") {\n if (data.endsWith(\"</soap:Envelope>\")) options.headers[\"Content-Type\"] = \"application/soap+xml\";\n else options.headers[\"Content-Type\"] = \"application/xml\";\n } else if (data[0] === \"{\" || data[0] === \"[\") options.headers[\"Content-Type\"] = \"application/json\";\n else options.headers[\"Content-Type\"] = \"application/octet-stream\";\n } else options.headers[\"Content-Type\"] = data.type;\n if (options.method === \"auto\") options.method = \"POST\";\n options.body = data;\n }\n $parcel$global.fetch(url, options).then((result)=>this.decodeResult(result)).then((result)=>{\n this._hideProgress();\n if (!success) return;\n if (this.responseFilter(result, params)) try {\n success(result, params);\n } catch (e) {}\n }).catch((err)=>{\n this._hideProgress();\n if (retries == 0) {\n if (failure) failure(err, params);\n } else this.apiCall(data, success, failure, httpMethod, retries - 1, relativeUrl);\n });\n },\n /**\r\n * Decodes a result obtained using fetch into a usable object.\r\n */ decodeResult: function(result) {\n let type = result.headers.get(\"content-type\").split(\";\")[0].toLowerCase();\n if (this.flags & $d584b999ce7bb535$var$Api.JSON_RESPONSE_SUPPORTED && type.indexOf(\"json\") !== -1) {\n if (this.flags & $d584b999ce7bb535$var$Api.WIND_V3) return async function() {\n let data = await result.json();\n data.response = result.status;\n return data;\n }();\n return result.json();\n }\n if (this.flags & $d584b999ce7bb535$var$Api.XML_RESPONSE_SUPPORTED && type.indexOf(\"xml\") !== -1) return new Promise((resolve, reject)=>{\n result.text().then((data)=>{\n data = (new DOMParser).parseFromString(data, \"text/xml\");\n resolve(data);\n }).catch(reject);\n });\n return result.blob();\n },\n /**\r\n * Makes a blob with the specified data and type.\r\n */ getBlob: function(data, type) {\n return new Blob([\n data\n ], {\n type: type\n });\n },\n /**\r\n * Provided access to the base64 module to encode/decode data.\r\n */ base64: {\n encode: function(value) {\n return (0, $k7heJ$base64).encode(value);\n },\n decode: function(value) {\n return (0, $k7heJ$base64).decode(value);\n }\n },\n /**\r\n * Executes an API request, returns a promise.\r\n */ request: function(method, url, params = null) {\n if (params === null) {\n if (typeof url !== \"string\") {\n params = url;\n url = \"\";\n }\n }\n return new Promise((resolve, reject)=>{\n this.apiCall(params, resolve, reject, null, method, url);\n });\n },\n post: function(url = null, params = null) {\n return this.fetch(\"POST\", url, params);\n },\n get: function(url = null, params = null) {\n return this.fetch(\"GET\", url, params);\n },\n put: function(url = null, params = null) {\n return this.fetch(\"PUT\", url, params);\n },\n patch: function(url = null, params = null) {\n return this.fetch(\"PATCH\", url, params);\n },\n delete: function(url = null, params = null) {\n return this.fetch(\"DELETE\", url, params);\n },\n /**\r\n * Executes an automatic API call, returns a promise.\r\n */ fetch: function(method, url = null, params = null) {\n // fetch (method, relativePath, params)\n // fetch (relativePath, params)\n let shift = true;\n if (typeof method === \"string\") {\n let tmp = method.toUpperCase();\n if (tmp === \"GET\" || tmp === \"POST\" || tmp === \"PUT\" || tmp === \"DELETE\" || tmp === \"PATCH\" || tmp === \"HEAD\" || tmp === \"OPTIONS\") shift = false;\n }\n if (shift) {\n params = url;\n url = method;\n method = null;\n }\n if (params === null) {\n if (typeof url !== \"string\") {\n params = url;\n url = \"\";\n }\n }\n return new Promise((resolve, reject)=>{\n this.apiCall(params, resolve, reject, method, null, url);\n });\n },\n /**\r\n * Builds a URL from the given data.\r\n */ makeUrl: function(url, params = null) {\n if (params === null) {\n if (typeof url !== \"string\") {\n params = url;\n url = \"\";\n }\n }\n return this.appendParam(this.getUrl(url), this.encodeParams(params));\n }\n};\nvar $d584b999ce7bb535$export$2e2bcd8739ae039 = $d584b999ce7bb535$var$Api;\n\n\n\n\n/*\r\n**\tProvides several methods to quickly interface with a remote data-source as defined by Wind.\r\n*/ const $fe13c50c6c3e66d8$var$DataSource = (0, $k7heJ$EventDispatcher).extend({\n className: \"DataSource\",\n debounceDelay: 250,\n request: null,\n includeCount: false,\n includeEnum: false,\n includeList: true,\n eid: null,\n count: 0,\n list: null,\n enum: null,\n /*\r\n **\tConstructs the data source with the specified optional `config` parameters, any of the properties of this object can be specified\r\n **\tin the config. Uses the given basePath as prefix for the `f` parameter for subsequent API operations, a basePath of `candies` will\r\n **\tresult in calls to `candies.list`, `candies.count`, etc.\r\n */ __ctor: function(basePath, config) {\n this._super.EventDispatcher.__ctor();\n this.basePath = basePath;\n if (config) Object.assign(this, config);\n this.request = new (0, $k7heJ$Model)(this.request);\n this.eid = Math.random().toString().substr(2);\n this.count = 0;\n this.list = new (0, $k7heJ$ModelList)();\n this.list.dataSource = this;\n this.enum = new (0, $k7heJ$ModelList)();\n this.enum.dataSource = this;\n this.request.addEventListener(this.eid + \":propertyChanged\", this.forwardRequestEvent, this);\n this.list.addEventListener(this.eid + \":itemsCleared\", this.forwardListEvent, this);\n this.list.addEventListener(this.eid + \":itemsChanged\", this.forwardListEvent, this);\n this.list.addEventListener(this.eid + \":itemRemoved\", this.forwardListEvent, this);\n this.list.addEventListener(this.eid + \":itemChanged\", this.forwardListEvent, this);\n this.list.addEventListener(this.eid + \":itemAdded\", this.forwardListEvent, this);\n this.enum.addEventListener(this.eid + \":itemsCleared\", this.forwardEnumEvent, this);\n this.enum.addEventListener(this.eid + \":itemsChanged\", this.forwardEnumEvent, this);\n this.enum.addEventListener(this.eid + \":itemRemoved\", this.forwardEnumEvent, this);\n this.enum.addEventListener(this.eid + \":itemChanged\", this.forwardEnumEvent, this);\n this.enum.addEventListener(this.eid + \":itemAdded\", this.forwardEnumEvent, this);\n },\n forwardRequestEvent: function(evt, args) {\n this.prepareEvent(\"request\" + evt.name[0].toUpperCase() + evt.name.substr(1), args).setSource(evt.source).resume();\n },\n forwardListEvent: function(evt, args) {\n this.prepareEvent(\"list\" + evt.name[0].toUpperCase() + evt.name.substr(1), args).setSource(evt.source).resume();\n },\n forwardEnumEvent: function(evt, args) {\n this.prepareEvent(\"enum\" + evt.name[0].toUpperCase() + evt.name.substr(1), args).setSource(evt.source).resume();\n },\n /*\r\n **\tExecutes one or more API functions (depending on `includeCount`, `includeEnum` and `includeList` properties) to retrieve the\r\n **\trequired data (uses debounce to prevent too-quick refreshes).\r\n **\r\n **\tRefresh mode can be: order, filter, range, enum or full. Setting `mode` to `true` will cause a full refresh without debouncing.\r\n */ refresh: function(mode = \"full\", callback = null) {\n if (typeof mode == \"function\") {\n callback = mode;\n mode = \"full\";\n }\n if (this._timeout) {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n const fn = ()=>{\n this._timeout = null;\n (0, $d584b999ce7bb535$export$2e2bcd8739ae039).packageBegin();\n if (this.includeCount && (mode === \"full\" || mode === \"filter\")) this.fetchCount();\n if (this.includeEnum && (mode === \"full\" || mode === \"enum\")) this.fetchEnum();\n if (this.includeList && mode !== \"enum\") this.fetchList();\n (0, $d584b999ce7bb535$export$2e2bcd8739ae039).packageEnd(callback);\n };\n if (mode === true) {\n mode = \"full\";\n fn();\n } else this._timeout = setTimeout(fn, this.debounceDelay);\n },\n /*\r\n **\tSearches for the item in `list` that matches the specified `fields` and sends it to the callback. If no item is found (or if `forced` is true),\r\n **\ta call to API function `.get` will be executed with the fields as request parameters. Returns a promise.\r\n */ fetch: function(fields, forced = false) {\n return new Promise((resolve, reject)=>{\n let item = forced == true ? null : this.list.find(fields, true);\n if (!item) this.fetchOne(fields, (r)=>{\n if (r && r.response == 200) {\n if (r.data.length > 0) resolve(r.data[0]);\n else reject(r);\n } else reject(r);\n });\n else resolve(item.get());\n });\n },\n /*\r\n **\tRemoves an item from the remote data source by executing the `.delete` API function, passes the given `fields` as request\r\n **\tparameters. Returns a promise.\r\n */ delete: function(params) {\n return new Promise((resolve, reject)=>{\n this.fetchDelete(params, (r)=>{\n if (r.response == 200) resolve(r);\n else reject(r.error);\n });\n });\n },\n fetchList: function() {\n let data = {\n ...this.request.get()\n };\n data.f = this.basePath + \".list\";\n this.dispatchEvent(\"listLoading\");\n (0, $d584b999ce7bb535$export$2e2bcd8739ae039).fetch(data).then((r)=>{\n this.list.setData(r.response == 200 ? r.data : null);\n this.dispatchEvent(\"listLoaded\");\n this.dispatchEvent(\"listChanged\");\n });\n },\n fetchEnum: function() {\n let data = {\n ...this.request.get()\n };\n data.f = this.basePath + \".enum\";\n this.dispatchEvent(\"enumLoading\");\n (0, $d584b999ce7bb535$export$2e2bcd8739ae039).fetch(data).then((r)=>{\n this.enum.setData(r.response == 200 ? r.data : null);\n this.dispatchEvent(\"enumLoaded\");\n this.dispatchEvent(\"enumChanged\");\n });\n },\n fetchCount: function() {\n let data = {\n ...this.request.get()\n };\n data.f = this.basePath + \".count\";\n this.dispatchEvent(\"countLoading\");\n (0, $d584b999ce7bb535$export$2e2bcd8739ae039).fetch(data).then((r)=>{\n this.count = r.response == 200 ? r.count : 0;\n this.dispatchEvent(\"countLoaded\");\n this.dispatchEvent(\"countChanged\");\n });\n },\n fetchOne: function(params, callback) {\n let data = {\n ...this.request.get(),\n ...params\n };\n data.f = this.basePath + \".get\";\n (0, $d584b999ce7bb535$export$2e2bcd8739ae039).fetch(data).then((r)=>{\n callback(r);\n });\n },\n fetchDelete: function(params, callback) {\n let data = {\n ...this.request.get(),\n ...params\n };\n data.f = this.basePath + \".delete\";\n (0, $d584b999ce7bb535$export$2e2bcd8739ae039).fetch(data).then((r)=>{\n callback(r);\n });\n },\n fetchData: function(params) {\n let data = {\n ...this.request.get(),\n ...params\n };\n if (data.f[0] == \".\") data.f = this.basePath + data.f;\n return (0, $d584b999ce7bb535$export$2e2bcd8739ae039).fetch(data);\n },\n makeUrl: function(params) {\n let data = {\n ...this.request.get(),\n ...params\n };\n if (data.f[0] == \".\") data.f = this.basePath + data.f;\n return (0, $d584b999ce7bb535$export$2e2bcd8739ae039).makeUrl(data);\n }\n});\n/**\r\n * Returns a data source by name or creates a new one if it doesn't exist (if `create` is `true`).\r\n * @param {string} name The name of the data source. A scope can be added as a prefix, separated by a colon.\r\n * @param {boolean} create Whether to create the data source if it doesn't exist.\r\n * @returns {DataSource} The data source.\r\n */ $fe13c50c6c3e66d8$var$DataSource.globals = {};\n$fe13c50c6c3e66d8$var$DataSource.get = function(name, create = false) {\n if (!(name in $fe13c50c6c3e66d8$var$DataSource.globals)) {\n if (!create) return null;\n $fe13c50c6c3e66d8$var$DataSource.globals[name] = new $fe13c50c6c3e66d8$var$DataSource(name.split(\":\").at(-1));\n }\n return $fe13c50c6c3e66d8$var$DataSource.globals[name];\n};\nvar $fe13c50c6c3e66d8$export$2e2bcd8739ae039 = $fe13c50c6c3e66d8$var$DataSource;\n\n\n\n\n/*\r\n**\tProvides an interface to connect with a listing API function.\r\n*/ const $52a9c945778cbfd0$var$DataList = (0, $k7heJ$ModelList).extend({\n className: \"DataList\",\n debounceDelay: 250,\n request: null,\n eid: null,\n /*\r\n\t**\tConstructs the data list with the specified optional `config` parameters, any of the properties of this object can be specified\r\n\t**\tin the config. The given `f` parameter is passed directly as a request parameter to the API.\r\n\t*/ __ctor: function(f, config = null) {\n this._super.ModelList.__ctor();\n if (config !== null) Object.assign(this, config);\n if (!this.request) this.request = {};\n this.request.f = f;\n this.request = new (0, $k7heJ$Model)(this.request);\n this.eid = Math.random().toString().substr(2);\n this.dataList = this;\n this.request.addEventListener(this.eid + \":propertyChanged\", this.forwardRequestEvent, this);\n },\n forwardRequestEvent: function(evt, args) {\n this.prepareEvent(\"request\" + evt.name[0].toUpperCase() + evt.name.substr(1), args).setSource(evt.source).resume();\n },\n /*\r\n\t**\tExecutes a request to retrieve the data for the list (uses debounce to prevent too-quick refreshes).\r\n\t*/ refresh: function(callback = null, _callback = null) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n if (callback === true) {\n this.dispatchEvent(\"listLoading\");\n (0, $d584b999ce7bb535$export$2e2bcd8739ae039).fetch(this.request.get()).then((r)=>{\n this.setData(r.response == 200 ? r.data : null);\n this.dispatchEvent(\"listLoaded\");\n this.dispatchEvent(\"listChanged\");\n if (_callback !== null) _callback();\n });\n return;\n }\n const fn = ()=>{\n this.refresh(true, callback);\n };\n this._timeout = setTimeout(fn, this.debounceDelay);\n }\n});\n/**\r\n * Returns a data list by name or creates a new one if it doesn't exist (if `create` is `true`).\r\n * @param {string} name The name of the data list. A scope can be added as a prefix, separated by a colon.\r\n * @param {boolean} create Whether to create the data list if it doesn't exist.\r\n * @returns {DataList} The data list.\r\n */ $52a9c945778cbfd0$var$DataList.globals = {};\n$52a9c945778cbfd0$var$DataList.get = function(name, create = false) {\n if (!(name in $52a9c945778cbfd0$var$DataList.globals)) {\n if (!create) return null;\n $52a9c945778cbfd0$var$DataList.globals[name] = new $52a9c945778cbfd0$var$DataList(name.split(\":\").at(-1));\n }\n return $52a9c945778cbfd0$var$DataList.globals[name];\n};\nvar $52a9c945778cbfd0$export$2e2bcd8739ae039 = $52a9c945778cbfd0$var$DataList;\n\n\n/**\n**\tCollection of useful easing functions (imported from Cherry source code).\n*/ const $0a74aeaee0e1468a$var$Easing = {\n /**\n\t**\tInterpolates numeric values between two objects (`src` and `dst`) using the specified `duration` (in seconds) and `easing` function. Note\n\t**\tthat all four parameters `src`, `dst`, `duration` and `easing` must be objects having the same number of values.\n\t*/ interpolate: function(src, dst, duration, easing, callback /* function(data, isFinished) */ ) {\n let time = {};\n let data = {};\n let count = 0;\n for(let x in src){\n time[x] = 0.0;\n data[x] = src[x];\n count++;\n }\n let lastTime = Date.now() / 1000;\n let dt = 0;\n let interpolator = function() {\n let curTime = Date.now() / 1000;\n dt = curTime - lastTime;\n lastTime = curTime;\n for(let x in time){\n if (time[x] == duration[x]) continue;\n time[x] += dt;\n if (time[x] >= duration[x]) {\n time[x] = duration[x];\n count--;\n }\n let t = easing[x](time[x] / duration[x]);\n data[x] = (1 - t) * src[x] + t * dst[x];\n }\n callback(data, count == 0);\n if (count != 0) requestAnimationFrame(interpolator);\n };\n interpolator();\n },\n /* ******************************************** */ Linear: {\n IN: function(t) {\n return t;\n },\n OUT: function(t) {\n return t;\n },\n IN_OUT: function(t) {\n return t;\n }\n },\n /* ******************************************** */ Back: {\n k: 1.70158,\n IN: function(t, k) {\n if (k === undefined) k = $0a74aeaee0e1468a$var$Easing.Back.k;\n return t * t * ((k + 1) * t - k);\n },\n OUT: function(t, k) {\n return 1 - $0a74aeaee0e1468a$var$Easing.Back.IN(1 - t, k);\n },\n IN_OUT: function(t, k) {\n if (t < 0.5) return $0a74aeaee0e1468a$var$Easing.Back.IN(t * 2, k) / 2;\n else return $0a74aeaee0e1468a$var$Easing.Back.OUT((t - 0.5) * 2, k) / 2 + 0.5;\n }\n },\n /* ******************************************** */ Bounce: {\n getConst: function(t) {\n if (t < 1.0 / 2.75) return 7.5625 * t * t;\n else if (t < 2.0 / 2.75) return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;\n else if (t < 2.5 / 2.75) return 7.5625 * (t -= 2.250 / 2.75) * t + 0.9375;\n return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n },\n IN: function(t) {\n return 1 - $0a74aeaee0e1468a$var$Easing.Bounce.getConst(1 - t);\n },\n OUT: function(t) {\n return $0a74aeaee0e1468a$var$Easing.Bounce.getConst(t);\n },\n IN_OUT: function(t) {\n if (t < 0.5) return (1 - $0a74aeaee0e1468a$var$Easing.Bounce.getConst(1 - 2 * t)) / 2;\n else return $0a74aeaee0e1468a$var$Easing.Bounce.getConst((t - 0.5) * 2) / 2 + 0.5;\n }\n },\n /* ******************************************** */ Circ: {\n IN: function(t) {\n return 1 - Math.sqrt(1 - t * t);\n },\n OUT: function(t) {\n return 1 - $0a74aeaee0e1468a$var$Easing.Circ.IN(1 - t);\n },\n IN_OUT: function(t) {\n if (t < 0.5) return $0a74aeaee0e1468a$var$Easing.Circ.IN(t * 2) / 2;\n else return $0a74aeaee0e1468a$var$Easing.Circ.OUT((t - 0.5) * 2) / 2 + 0.5;\n }\n },\n /* ******************************************** */ Cubic: {\n IN: function(t) {\n return t * t * t;\n },\n OUT: function(t) {\n return 1 - $0a74aeaee0e1468a$var$Easing.Cubic.IN(1 - t);\n },\n IN_OUT: function(t) {\n if (t < 0.5) return $0a74aeaee0e1468a$var$Easing.Cubic.IN(t * 2) / 2;\n else return $0a74aeaee0e1468a$var$Easing.Cubic.OUT((t - 0.5) * 2) / 2 + 0.5;\n }\n },\n /* ******************************************** */ Expo: {\n IN: function(t) {\n return Math.pow(2, 12 * (t - 1));\n },\n OUT: function(t) {\n return -Math.pow(2, -12 * t) + 1;\n },\n IN_OUT: function(t) {\n if ((t *= 2) < 1) return Math.pow(2, 12 * (t - 1)) / 2;\n else return (-Math.pow(2, -12 * (t - 1)) + 2) / 2;\n }\n },\n /* ******************************************** */ Power: {\n p: 12,\n IN: function(t) {\n return Math.pow(t, $0a74aeaee0e1468a$var$Easing.Power.p);\n },\n OUT: function(t) {\n return 1 - $0a74aeaee0e1468a$var$Easing.Power.IN(1 - t);\n },\n IN_OUT: function(t) {\n if (t < 0.5) return $0a74aeaee0e1468a$var$Easing.Power.IN(t * 2) / 2;\n else return $0a74aeaee0e1468a$var$Easing.Power.OUT((t - 0.5) * 2) / 2 + 0.5;\n }\n },\n /* ******************************************** */ Quad: {\n IN: function(t) {\n return t * t;\n },\n OUT: function(t) {\n return 1 - $0a74aeaee0e1468a$var$Easing.Quad.IN(1 - t);\n },\n IN_OUT: function(t) {\n if (t < 0.5) return $0a74aeaee0e1468a$var$Easing.Quad.IN(t * 2) / 2;\n else return $0a74aeaee0e1468a$var$Easing.Quad.OUT((t - 0.5) * 2) / 2 + 0.5;\n }\n },\n /* ******************************************** */ Quartic: {\n IN: function(t) {\n return t * t * t * t;\n },\n OUT: function(t) {\n return 1 - $0a74aeaee0e1468a$var$Easing.Quartic.IN(1 - t);\n },\n IN_OUT: function(t) {\n if (t < 0.5) return $0a74aeaee0e1468a$var$Easing.Quartic.IN(t * 2) / 2;\n else return $0a74aeaee0e1468a$var$Easing.Quartic.OUT((t - 0.5) * 2) / 2 + 0.5;\n }\n },\n /* ******************************************** */ Quintic: {\n IN: function(t) {\n return t * t * t * t * t;\n },\n OUT: function(t) {\n return 1 - $0a74aeaee0e1468a$var$Easing.Quintic.IN(1 - t);\n },\n IN_OUT: function(t) {\n if (t < 0.5) return $0a74aeaee0e1468a$var$Easing.Quintic.IN(t * 2) / 2;\n else return $0a74aeaee0e1468a$var$Easing.Quintic.OUT((t - 0.5) * 2) / 2 + 0.5;\n }\n },\n /* ******************************************** */ Sine: {\n IN: function(t) {\n return 1 - Math.sin(1.5708 * (1 - t));\n },\n OUT: function(t) {\n return Math.sin(1.5708 * t);\n },\n IN_OUT: function(t) {\n return (Math.cos(3.1416 * t) - 1) / -2;\n }\n },\n /* ******************************************** */ Step: {\n IN: function(t) {\n return t != 1.0 ? 0 : 1.0;\n },\n OUT: function(t) {\n return t != 1.0 ? 0 : 1.0;\n },\n IN_OUT: function(t) {\n return t != 1.0 ? 0 : 1.0;\n }\n }\n};\nvar $0a74aeaee0e1468a$export$2e2bcd8739ae039 = $0a74aeaee0e1468a$var$Easing;\n\n\n\n/**\n**\tClass to animate properties using rules (imported from Cherry source code).\n*/ const $54865aa6b345efd5$var$Anim = (0, $k7heJ$Class).extend({\n list: null,\n initialData: null,\n data: null,\n stack: null,\n block: null,\n timeScale: 1,\n time: 0,\n blockTime: 0,\n index: 0,\n paused: false,\n finished: false,\n onFinishedCallback: null,\n onUpdatedCallback: null,\n __ctor: function() {\n this.list = [];\n this.initialData = {};\n this.data = {};\n this.stack = [];\n this.block = this.list;\n this.reset();\n },\n __dtor: function() {},\n clone: function() {\n let a = new $54865aa6b345efd5$var$Anim();\n a.list = this.list;\n a.initialData = this.initialData;\n return a.reset();\n },\n onFinished: function(callback) {\n this.onFinishedCallback = callback;\n return this;\n },\n onUpdated: function(callback) {\n this.onUpdatedCallback = callback;\n return this;\n },\n // Resets the animation to its initial state.\n reset: function() {\n this.stack.length = 0;\n this.blockTime = 0;\n this.time = 0;\n this.index = 0;\n this.block = this.list;\n this.paused = true;\n this.finished = false;\n this.handle = null;\n for(let i in this.initialData)this.data[i] = this.initialData[i];\n return this;\n },\n // Sets the initial data.\n initial: function(data) {\n this.initialData = data;\n return this.reset();\n },\n // Sets the time scale (animation speed).\n speed: function(value) {\n this.timeScale = value > 0.0 ? value : 1.0;\n return this;\n },\n // Sets the output data object.\n setOutput: function(data) {\n this.data = data;\n return this;\n },\n // Pauses the animation.\n pause: function() {\n if (this.paused) return;\n clearInterval(this.handle);\n this.paused = true;\n },\n // Resumes the animation.\n resume: function() {\n if (!this.paused) return;\n let lastTime = Date.now() / 1000;\n this.handle = setInterval(()=>{\n let curTime = Date.now() / 1000;\n let dt = curTime - lastTime;\n lastTime = curTime;\n this.update(dt);\n if (this.onUpdatedCallback) this.onUpdatedCallback(this.data, this);\n }, 16);\n if (this.onUpdatedCallback) this.onUpdatedCallback(this.data, this);\n this.paused = false;\n },\n // Updates the animation by the specified delta time (seconds).\n update: function(dt) {\n if (this.paused) return false;\n if (this.index >= this.block.length) return true;\n let i = 0;\n let _block;\n let _index;\n let _blockTime;\n this.time += dt * this.timeScale;\n while(this.index < this.block.length){\n let cmd = this.block[this.index];\n let duration;\n switch(cmd.op){\n case \"parallel\":\n if (cmd.started == false) {\n cmd.blocks.length = 0;\n cmd.started = true;\n for(i = 0; i < cmd.block.length; i++){\n cmd.blocks.push([\n cmd.block[i]\n ]);\n cmd.indices[i] = 0;\n cmd.blockTimes[i] = this.blockTime;\n }\n }\n _block = this.block;\n _index = this.index;\n _blockTime = this.blockTime;\n let n = 0;\n let blockTime = _blockTime;\n for(i = 0; i < cmd.blocks.length; i++){\n this.block = cmd.blocks[i];\n this.index = cmd.indices[i];\n this.blockTime = cmd.blockTimes[i];\n if (this.update(0) === true) n++;\n if (this.blockTime > blockTime) blockTime = this.blockTime;\n cmd.blockTimes[i] = this.blockTime;\n cmd.blocks[i] = this.block;\n cmd.indices[i] = this.index;\n }\n this.block = _block;\n this.index = _index;\n this.blockTime = _blockTime;\n if (cmd.fn) cmd.fn.call(this);\n if (n != cmd.blocks.length) return false;\n cmd.started = false;\n this.blockTime = blockTime;\n this.index++;\n break;\n case \"serial\":\n if (cmd.started == false) {\n cmd._block = cmd.block;\n cmd._index = 0;\n cmd._blockTime = this.blockTime;\n cmd.started = true;\n }\n _block = this.block;\n _index = this.index;\n _blockTime = this.blockTime;\n this.block = cmd._block;\n this.index = cmd._index;\n this.blockTime = cmd._blockTime;\n i = this.update(0);\n cmd._block = this.block;\n cmd._index = this.index;\n cmd._blockTime = this.blockTime;\n this.block = _block;\n this.index = _index;\n this.blockTime = _blockTime;\n if (cmd.fn) cmd.fn.call(this);\n if (i !== true) return false;\n cmd.started = false;\n this.blockTime = cmd._blockTime;\n this.index++;\n break;\n case \"repeat\":\n if (cmd.started == false) {\n cmd._block = cmd.block;\n cmd._index = 0;\n cmd._blockTime = this.blockTime;\n cmd._count = cmd.count;\n cmd.started = true;\n }\n _block = this.block;\n _index = this.index;\n _blockTime = this.blockTime;\n this.block = cmd._block;\n this.index = cmd._index;\n this.blockTime = cmd._blockTime;\n i = this.update(0);\n cmd._block = this.block;\n cmd._index = this.index;\n cmd._blockTime = this.blockTime;\n this.block = _block;\n this.index = _index;\n this.blockTime = _blockTime;\n if (cmd.fn) cmd.fn.call(this);\n if (i !== true) return false;\n if (cmd._count <= 1) {\n cmd.started = false;\n this.blockTime = cmd._blockTime;\n this.index++;\n return false;\n } else {\n cmd._index = 0;\n cmd._count--;\n return false;\n }\n break;\n case \"set\":\n this.data[cmd.field] = cmd.value;\n this.index++;\n break;\n case \"restart\":\n this.index = 0;\n break;\n case \"wait\":\n duration = (0, $k7heJ$Rinn).typeOf(cmd.duration) == \"string\" ? this.data[cmd.duration] : cmd.duration;\n if (this.time < this.blockTime + duration) return false;\n this.blockTime += duration;\n this.index++;\n break;\n case \"range\":\n if (cmd.started == false) {\n if (cmd.startValue === null) cmd._startValue = this.data[cmd.field];\n else cmd._startValue = cmd.startValue;\n cmd._endValue = cmd.endValue;\n cmd.started = true;\n }\n duration = (0, $k7heJ$Rinn).typeOf(cmd.duration) == \"string\" ? this.data[cmd.duration] : cmd.duration;\n if (this.time < this.blockTime + duration) dt = (this.time - this.blockTime) / duration;\n else dt = 1;\n if (cmd.easing && dt != 1.0) this.data[cmd.field] = cmd.easing(dt) * (cmd._endValue - cmd._startValue) + cmd._startValue;\n else this.data[cmd.field] = dt * (cmd._endValue - cmd._startValue) + cmd._startValue;\n if (dt != 1) return false;\n cmd.started = false;\n this.blockTime += duration;\n this.index++;\n break;\n case \"rand\":\n if (cmd.started == false) {\n cmd.started = true;\n cmd.last = null;\n }\n duration = (0, $k7heJ$Rinn).typeOf(cmd.duration) == \"string\" ? this.data[cmd.duration] : cmd.duration;\n if (this.time < this.blockTime + duration) dt = (this.time - this.blockTime) / duration;\n else dt = 1;\n if (cmd.easing && dt != 1) cmd.cur = ~~(cmd.easing(dt) * cmd.count);\n else cmd.cur = ~~(dt * cmd.count);\n if (cmd.cur != cmd.last) {\n while(true){\n i = ~~(Math.random() * (cmd.endValue - cmd.startValue + 1)) + cmd.startValue;\n if (i != this.data[cmd.field]) break;\n }\n this.data[cmd.field] = i;\n cmd.last = cmd.cur;\n }\n if (dt != 1) return false;\n cmd.started = false;\n this.blockTime += duration;\n this.index++;\n break;\n case \"randt\":\n duration = (0, $k7heJ$Rinn).typeOf(cmd.duration) == \"string\" ? this.data[cmd.duration] : cmd.duration;\n if (this.time < this.blockTime + duration) dt = (this.time - this.blockTime) / duration;\n else dt = 1;\n if (cmd.easing && dt != 1) i = cmd.easing(dt) * (cmd.count - 1);\n else i = dt * (cmd.count - 1);\n this.data[cmd.field] = cmd.table[~~((i + cmd.count) % cmd.count)];\n if (dt != 1) return false;\n this.blockTime += duration;\n this.index++;\n break;\n case \"play\":\n cmd.snd.play();\n this.index++;\n break;\n case \"exec\":\n cmd.fn.call(this, this);\n this.index++;\n break;\n }\n }\n if (this.block == this.list) {\n if (!this.finished && this.onFinishedCallback != null) this.onFinishedCallback();\n this.pause();\n this.finished = true;\n }\n return true;\n },\n // Runs the subsequent commands in parallel. Should end the parallel block by calling end().\n parallel: function() {\n let block = [];\n this.block.push({\n op: \"parallel\",\n started: false,\n block: block,\n blocks: [],\n indices: [],\n blockTimes: []\n });\n this.stack.push(this.block);\n this.block = block;\n return this;\n },\n // Runs the subsequent commands in series. Should end the serial block by calling end().\n serial: function() {\n let block = [];\n this.block.push({\n op: \"serial\",\n started: false,\n block: block\n });\n this.stack.push(this.block);\n this.block = block;\n return this;\n },\n // Repeats a block the specified number of times.\n repeat: function(count) {\n let block = [];\n this.block.push({\n op: \"repeat\",\n started: false,\n block: block,\n count: count\n });\n this.stack.push(this.block);\n this.block = block;\n return this;\n },\n // Sets the callback of the current block.\n callback: function(fn) {\n let block = this.stack[this.stack.length - 1];\n block[block.length - 1].fn = fn;\n return this;\n },\n // Ends a parallel(), serial() or repeat() block.\n end: function() {\n this.block = this.stack.pop();\n return this;\n },\n // Sets the value of a variable.\n set: function(field, value) {\n this.block.push({\n op: \"set\",\n field: field,\n value: value\n });\n return this;\n },\n // Restarts the current block.\n restart: function(duration) {\n this.block.push({\n op: \"restart\"\n });\n return this;\n },\n // Waits for the specified duration.\n wait: function(duration) {\n this.block.push({\n op: \"wait\",\n duration: duration\n });\n return this;\n },\n // Sets the range of a variable.\n range: function(field, duration, startValue, endValue, easing) {\n this.block.push({\n op: \"range\",\n started: false,\n field: field,\n duration: duration,\n startValue: startValue,\n endValue: endValue,\n easing: easing ? easing : null\n });\n return this;\n },\n // Generates a certain amount of random numbers in the given range (inclusive).\n rand: function(field, duration, count, startValue, endValue, easing) {\n this.block.push({\n op: \"rand\",\n started: false,\n field: field,\n duration: duration,\n count: count,\n startValue: startValue,\n endValue: endValue,\n easing: easing ? easing : null\n });\n return this;\n },\n // Generates a certain amount of random numbers in the given range (inclusive). This uses a static random table to determine the next values.\n randt: function(field, duration, count, startValue, endValue, easing) {\n let table = [];\n for(let i = 0; i < count; i++)table.push(i % (endValue - startValue + 1) + startValue);\n for(let i = count >> 2; i > 0; i--){\n let a = ~~(Math.random() * count);\n let b = ~~(Math.random() * count);\n let c = table[b];\n table[b] = table[a];\n table[a] = c;\n }\n this.block.push({\n op: \"randt\",\n field: field,\n duration: duration,\n count: count,\n startValue: startValue,\n endValue: endValue,\n table: table,\n easing: easing ? easing : null\n });\n return this;\n },\n // Plays a sound.\n play: function(snd) {\n this.block.push({\n op: \"play\",\n snd: snd\n });\n return this;\n },\n // Executes a function.\n exec: function(fn) {\n this.block.push({\n op: \"exec\",\n fn: fn\n });\n return this;\n }\n});\nvar $54865aa6b345efd5$export$2e2bcd8739ae039 = $54865aa6b345efd5$var$Anim;\n\n\n/*\n <r-tabs data-container=\"div.tab-container\" data-base-route=\"@\" data-initial=\"tab1\">\n <a data-name=\"tab1\">Tab-1</a>\n <a data-name=\"tab2\">Tab-2</a>\n <a data-name=\"tab3\">Tab-3</a>\n </r-tabs>\n\n <div class=\"tab-container\">\n <div data-name=\"tab1\">\n This is tab-1.\n </div>\n\n <div data-name=\"tab2\">\n This is tab-2.\n </div>\n\n <div data-name=\"tab3\">\n This is tab-3.\n </div>\n </div>\n\n .is-hidden {\n display: none;\n }\n\n r-tabs [data-name].is-active {\n font-weight: bold;\n }\n*/ \n\nvar $4a9d88aa888e9f4d$export$2e2bcd8739ae039 = (0, $5808f050ebbd5b77$export$2e2bcd8739ae039).register(\"r-tabs\", {\n /**\n * Container element for tab content.\n */ container: null,\n /**\n * Active tab name.\n */ activeTab: null,\n /**\n **\tElement events.\n */ \"event click [data-name]\": function(evt) {\n evt.continuePropagation = true;\n if (this.dataset.baseRoute) {\n location = \"#\" + (0, $7718a52dfca15325$export$2e2bcd8739ae039).realLocation(this.dataset.baseRoute.replace(\"@\", evt.source.dataset.name));\n return;\n }\n this.selectTab(evt.source.dataset.name);\n },\n /**\n **\tInitializes the Tabs element.\n */ init: function() {\n this._routeHandler = (evt, args)=>{\n if ((0, $7718a52dfca15325$export$2e2bcd8739ae039).location != \"\") this.querySelectorAll(\"[href]\").forEach((link)=>{\n if (!link.href) return;\n if ((0, $7718a52dfca15325$export$2e2bcd8739ae039).location.startsWith(link.href.substr(link.href.indexOf(\"#\") + 1))) {\n link.classList.add(\"is-active\");\n link.classList.remove(\"is-inactive\");\n } else {\n link.classList.add(\"is-inactive\");\n link.classList.remove(\"is-active\");\n }\n link.classList.remove(\"anim-ended\");\n link.onanimationend = ()=>{\n link.onanimationend = null;\n link.classList.add(\"anim-ended\");\n };\n });\n if (!args.route.changed) return;\n this.showTab(args.tabName);\n };\n },\n /**\n **\tExecuted when the children of the element are ready.\n */ ready: function() {\n if (\"container\" in this.dataset) {\n if (this.dataset.container == \":previousElement\") this.container = this.previousElementSibling;\n else if (this.dataset.container == \":nextElement\") this.container = this.nextElementSibling;\n else if (this.dataset.container == \":none\") this.container = null;\n else this.container = document.querySelector(this.dataset.container);\n } else this.container = this.nextElementSibling;\n this._hideTabsExcept(this.dataset.initial);\n },\n /**\n **\tAdds a handler to Router if the data-base-route attribute was set.\n */ onConnected: function() {\n if (this.dataset.baseRoute) (0, $7718a52dfca15325$export$2e2bcd8739ae039).addRoute(this.dataset.baseRoute.replace(\"@\", \":tabName\"), this._routeHandler);\n },\n /**\n **\tRemoves a handler previously added to Router if the data-base-route attribute was set.\n */ onDisconnected: function() {\n if (this.dataset.baseRoute) (0, $7718a52dfca15325$export$2e2bcd8739ae039).removeRoute(this.dataset.baseRoute.replace(\"@\", \":tabName\"), this._routeHandler);\n },\n /**\n **\tHides all tabs except the one with the specified exceptName, if none specified then all tabs will be hidden (adds `.is-hidden` CSS class),\n **\tadditionally the respective link item in the tab definition will have class `.is-active`.\n */ _hideTabsExcept: function(exceptName) {\n if (!exceptName) exceptName = \"\";\n if (this.container != null) this.container.querySelectorAll(\":scope > [data-name]\").forEach((i)=>{\n if (i.dataset.name === exceptName) {\n i.classList.remove(\"is-hidden\");\n this.dispatch(\"tabShown\", {\n name: i.dataset.name,\n el: i\n });\n } else {\n i.classList.add(\"is-hidden\");\n this.dispatch(\"tabHidden\", {\n name: i.dataset.name,\n el: i\n });\n }\n });\n this.querySelectorAll(\"[data-name]\").forEach((link)=>{\n if (link.dataset.name === exceptName) {\n link.classList.add(\"is-active\");\n link.classList.remove(\"is-inactive\");\n } else {\n link.classList.add(\"is-inactive\");\n link.classList.remove(\"is-active\");\n }\n link.classList.remove(\"anim-ended\");\n link.onanimationend = ()=>{\n link.onanimationend = null;\n link.classList.add(\"anim-ended\");\n };\n });\n this.activeTab = exceptName;\n this.dispatch(\"tabChanged\", {\n name: exceptName,\n el: this\n });\n },\n /**\n **\tShows the tab with the specified name, ignores `data-base-route` and current route as well.\n */ showTab: function(name) {\n return this._hideTabsExcept(name);\n },\n /**\n **\tShows a tab given its name. The route will be changed automatically if `data-base-route` is enabled.\n */ selectTab: function(name) {\n if (this.dataset.baseRoute) {\n const hash = \"#\" + (0, $7718a52dfca15325$export$2e2bcd8739ae039).realLocation(this.dataset.baseRoute.replace(\"@\", name));\n if (location.hash != hash) {\n location = hash;\n return;\n }\n }\n this.showTab(name);\n }\n});\n\n\n/*\n<r-form data-form-action=\"api-function-name\" [data-strict=\"true|false\"] [data-errors-at=\"\"] [data-method=\"post\"]>\n <input type=\"text\" data-field=\"username\"/>\n</r-form>\n\nr-form .message.is-hidden {\n display: none;\n}\n\nr-form span.field-error {\n display: block;\n color: red;\n}\n*/ \n\n\nvar $ec74230761e3bde8$export$2e2bcd8739ae039 = (0, $5808f050ebbd5b77$export$2e2bcd8739ae039).register(\"r-form\", {\n isRoot: true,\n /**\n * Initial form model.\n */ model: {},\n /**\n * Element events.\n */ events: {\n \"change [data-field]\": \"_fieldChanged\",\n \"click input[type=reset]\": \"reset\",\n \"click .reset\": \"reset\",\n \"click input[type=submit]\": \"submit\",\n \"click button[type=submit]\": \"submit\",\n \"click .submit\": \"submit\",\n \"submit form\": \"submit\"\n },\n /**\n * Executed when the children of the element are ready.\n */ ready: function() {\n let formElement = document.createElement(\"form\");\n formElement.append(...this.childNodes);\n this.append(formElement);\n let def = {};\n let names = this.model.get();\n this.querySelectorAll(\"[data-field]\").forEach((i)=>{\n i.name = i.dataset.field;\n names[i.name] = i.type;\n let val = i.dataset.default;\n if (val == undefined) switch(i.type){\n case \"radio\":\n if (!i.checked) return;\n val = i.value;\n break;\n case \"checkbox\":\n val = i.checked ? \"1\" : \"0\";\n break;\n case \"field\":\n val = i.getValue();\n break;\n case \"file\":\n val = \"\";\n break;\n default:\n val = \"\";\n break;\n }\n def[i.dataset.field] = val;\n });\n for(let name in names)if (name in def) names[name] = def[name];\n else names[name] = \"\";\n def = names;\n this.model.defaults = def;\n this.model.reset();\n this.clearMarkers();\n },\n /**\n * Transforms an string returned by the server to a local representation.\n */ filterString: function(str, r) {\n if (!str || !(\"messages\" in $parcel$global)) return str;\n if (str.startsWith(\"@messages.\")) {\n if (str.substr(10) in $parcel$global.messages) str = (0, $k7heJ$Template).eval($parcel$global.messages[str.substr(10)], r);\n }\n return str;\n },\n _change: function(elem) {\n if (\"createEvent\" in document) {\n let evt = document.createEvent(\"HTMLEvents\");\n evt.initEvent(\"change\", false, true);\n elem.dispatchEvent(evt);\n } else elem.fireEvent(\"onchange\");\n },\n _setField: function(f, value, silent) {\n if (!f) return;\n for (f of this.querySelectorAll('[data-field=\"' + f + '\"]'))switch(f.type || f.tagName.toLowerCase()){\n case \"select\":\n f.val = f.dataset.value = f.multiple ? value ? value.split(\",\") : value : value;\n f.value = f.val = f.dataset.value;\n if (silent !== true) this._change(f);\n break;\n case \"checkbox\":\n f.checked = parseInt(value) ? true : false;\n break;\n case \"radio\":\n f.checked = value == f.value;\n break;\n case \"field\":\n f.val = f.dataset.value = value;\n f.setValue(value);\n break;\n case \"file\":\n if (value instanceof File || value instanceof Blob) {\n f.val = value;\n f.dataset.value = value;\n } else if (value instanceof FileList) {\n f.val = value;\n f.dataset.value = value;\n } else {\n f.val = f.dataset.value = \"\";\n f.value = \"\";\n }\n break;\n default:\n f.val = f.dataset.value = value;\n f.value = value;\n if (silent !== true) this._change(f);\n break;\n }\n },\n _getField: function(f, _value = null, fromFileFields = false) {\n if (!f) return null;\n if (typeof f != \"string\") {\n let value = f.value == null ? f.val : f.value;\n if (value === null) value = _value;\n switch(f.type || f.tagName.toLowerCase()){\n case \"select\":\n _value = f.multiple ? value ? value.join(\",\") : value : value;\n break;\n case \"checkbox\":\n _value = f.checked ? \"1\" : \"0\";\n break;\n case \"radio\":\n if (f.checked) _value = f.value;\n break;\n case \"field\":\n _value = f.getValue();\n break;\n case \"file\":\n _value = fromFileFields ? f.files && f.files.length ? f.multiple ? f.files : f.files[0] : null : f.val;\n break;\n default:\n _value = value;\n break;\n }\n return _value === null ? \"\" : _value;\n }\n _value = null;\n for (f of this.querySelectorAll('[data-field=\"' + f + '\"]'))_value = this._getField(f, _value);\n return _value === null ? \"\" : _value;\n },\n getField: function(name) {\n return this._getField(name);\n },\n clearMarkers: function() {\n this.classList.remove(\"busy\");\n this.querySelectorAll(\".message\").forEach((i)=>i.classList.add(\"is-hidden\"));\n this.querySelectorAll(\"span.field-error\").forEach((i)=>i.remove());\n this.querySelectorAll(\".field-error\").forEach((i)=>{\n i.classList.remove(\"field-error\");\n i.classList.remove(\"is-invalid\");\n });\n this.querySelectorAll(\".field-passed\").forEach((i)=>i.classList.remove(\"field-passed\"));\n },\n _fieldChanged: function(evt) {\n let f = evt.source;\n if (f.type == \"file\") this.model.set(f.dataset.field, this._getField(f, null, true), true);\n else this.model.set(f.dataset.field, this._getField(f));\n evt.continuePropagation = true;\n },\n onModelPropertyChanged: function(evt, args) {\n this._setField(args.name, args.value);\n },\n _onSuccess: function(r) {\n this.classList.remove(\"busy\");\n this.clearMarkers();\n let tmp;\n this.dispatch(\"formSuccess\", r);\n if (r.message && (tmp = this.querySelector(\".message.success\")) != null) {\n tmp.innerHTML = this.filterString(r.message, r).replace(/\\n/g, \"<br/>\");\n tmp.classList.remove(\"is-hidden\");\n tmp.onanimationend = ()=>tmp.classList.add(\"is-hidden\");\n }\n },\n _onFailure: function(r) {\n this.classList.remove(\"busy\");\n this.clearMarkers();\n let tmp;\n this.dispatch(\"formError\", r);\n if (r.fields) {\n for(let i in r.fields){\n let f = this.querySelector('[data-field-container=\"' + i + '\"]');\n if (!f) {\n f = this.querySelector('[data-field=\"' + i + '\"]');\n if (!f) continue;\n }\n f.classList.add(\"field-error\");\n f.classList.add(\"is-invalid\");\n let message = this.filterString(r.fields[i], r).replace(/\\n/g, \"<br/>\");\n if (!message) continue;\n let tmp = document.createElement(\"span\");\n tmp.classList.add(\"field-error\");\n tmp.innerHTML = message;\n if (this.dataset.errorsAt == \"bottom\") f.parentElement.append(tmp);\n else if (this.dataset.errorsAt == \"top\") f.parentElement.prepend(tmp);\n else f.parentElement.insertBefore(tmp, f.nextElementSibling);\n setTimeout(function(tmp) {\n return function() {\n tmp.classList.add(\"active\");\n };\n }(tmp), 25);\n }\n if (r.error && (tmp = this.querySelector(\".message.error\")) != null) {\n tmp.innerHTML = this.filterString(r.error, r).replace(/\\n/g, \"<br/>\");\n tmp.classList.remove(\"is-hidden\");\n tmp.onanimationend = ()=>tmp.classList.add(\"is-hidden\");\n }\n } else if ((tmp = this.querySelector(\".message.error\")) != null) {\n tmp.innerHTML = this.filterString(r.error, r).replace(/\\n/g, \"<br/>\") || \"Error: \" + r.response;\n tmp.classList.remove(\"is-hidden\");\n tmp.onanimationend = ()=>tmp.classList.add(\"is-hidden\");\n }\n },\n reset: function(nsilent) {\n this.model.reset(nsilent);\n this.clearMarkers();\n if (nsilent === false) for(var i in this.model.data)this._setField(i, this.model.data[i], true);\n return false;\n },\n submit: function() {\n if (this.classList.contains(\"busy\")) return;\n let data = {};\n if (this.dataset.strict == \"false\") Object.assign(data, this.model.get());\n let list = {};\n this.querySelectorAll(\"[data-field]\").forEach((e)=>list[e.dataset.field] = true);\n Object.keys(list).forEach((f)=>data[f] = this._getField(f));\n this.dispatch(\"beforeSubmit\", data);\n this.model.set(data);\n let f = this.dataset.formAction || this.formAction;\n if (!f) return;\n this.classList.add(\"busy\");\n if (typeof f != \"function\") {\n let modern = f.indexOf(\"/\") !== -1;\n if (!modern) data.f = f;\n (0, $d584b999ce7bb535$export$2e2bcd8739ae039).apiCall(modern ? JSON.stringify(data) : data, (r)=>this[r.response == 200 ? \"_onSuccess\" : \"_onFailure\"](r), (r)=>this._onFailure({\n error: \"Unable to execute request.\"\n }), this.dataset.method ?? \"POST\", null, modern ? f : null);\n } else f(data, (r)=>this[r.response == 200 ? \"_onSuccess\" : \"_onFailure\"](r));\n }\n});\n\n\n/*\n <r-panel data-route=\"name\">\n </r-panel>\n\n r-panel {\n display: block;\n }\n\n r-panel:not(.is-active) {\n display: none;\n }\n\n r-panel.is-inactive {\n }\n\n r-panel.is-active {\n }\n*/ \n\nvar $9c0636c07ff6144e$export$2e2bcd8739ae039 = (0, $5808f050ebbd5b77$export$2e2bcd8739ae039).register(\"r-panel\", {\n /**\n * Route object used by this element.\n */ route: null,\n /**\n * Initializes the element.\n */ init: function() {\n this.style.display = \"\";\n // Executed then the panel route is activated.\n this._onActivate = (evt, args)=>{\n if (!args.route.changed) return;\n this.show(true);\n };\n // Executed then the panel route is deactivated.\n this._onDeactivate = (evt, args)=>{\n this.hide();\n };\n this.hide();\n },\n /**\n * Adds a handler to Router if the data-route attribute was set.\n */ onConnected: function() {\n if (this.dataset.route) {\n this.route = (0, $7718a52dfca15325$export$2e2bcd8739ae039).addRoute(this.dataset.route, this._onActivate, this._onDeactivate);\n this.classList.remove(\"is-active\");\n this.classList.add(\"is-inactive\");\n } else {\n this.classList.add(\"is-active\");\n this.classList.remove(\"is-inactive\");\n }\n this.classList.add(\"anim-ended\");\n },\n /**\n * Removes a handler previously added to Router if the data-route attribute was set.\n */ onDisconnected: function() {\n if (this.dataset.route) (0, $7718a52dfca15325$export$2e2bcd8739ae039).removeRoute(this.dataset.route, this._onActivate, this._onDeactivate);\n },\n /**\n * Hides the panel by removing the `is-active` and adding `is-inactive` class to the element. Fires `panelHidden` event.\n */ hide: function() {\n this.dispatch(\"panelHidden\", this.route ? this.route.args : {});\n this.classList.remove(\"anim-ended\");\n this.classList.remove(\"is-active\");\n this.classList.add(\"is-inactive\");\n this.onanimationend = ()=>{\n this.classList.add(\"anim-ended\");\n this.onanimationend = null;\n };\n },\n /**\n * Shows the panel visible by adding `is-active` and removing `is-inactive` class from the element. If `silent` is true and `data-route` enabled,\n * the current route will not be updated. Fires `panelShown` event.\n * @param {boolean} silent \n */ show: function(silent = false) {\n if (this.dataset.route && !silent) {\n let hash = \"#\" + this.dataset.route;\n if (window.location.hash.substr(0, hash.length) != hash) {\n window.location = hash;\n return;\n }\n }\n this.dispatch(\"panelShown\", this.route ? this.route.args : {});\n this.classList.remove(\"anim-ended\");\n this.classList.remove(\"is-inactive\");\n this.classList.add(\"is-active\");\n this.onanimationend = ()=>{\n this.classList.add(\"anim-ended\");\n this.onanimationend = null;\n };\n },\n /**\n * Toggles the visibility of the panel. If `silent` is true and `data-route` enabled, the current route will not be updated.\n */ toggleVisibility: function(silent = false) {\n if (this.classList.contains(\"is-active\")) this.hide();\n else this.show(silent);\n }\n});\n\n\n/*\n <r-list data-list=\"window.dataList1\" data-container=\".x-data\" data-wrap=\"true|false\">\n\n <template data-mode=\"static|dynamic\">\n </template>\n\n <div class=\"x-empty\">\n Nothing to show.\n </div>\n\n <div class=\"x-data\">\n </div>\n\n </r-list>\n\n CSS:\n .is-hidden {\n display: none;\n }\n\n Modifiers:\n .x-empty-null\t\tVisible when the list is in undefined state (before first load).\n .x-empty\t\t\tVisible when there is no data in the list.\n .x-not-empty \t\tVisible when there is data in the list.\n .is-loading \t\tVisible when the list is loading.\n*/ \n\n\nvar /*\n**\tConnects to a ModelList and renders its contents using a template. When using \"dynamic\" template, the contents can be other custom elements, and\n**\tthe model of each item can be accessed by using data-model=\":list-item\", which will cause the item model to be added to the element.\n**\n**\tAdditionally root attribute data-wrap can be set to 'true' to wrap the template contents inside a div with a data-iid representing the ID of the\n**\titem, this will cause any changes to items to affect only the specific item in question.\n*/ $a4fb830b2d507403$export$2e2bcd8739ae039 = (0, $5808f050ebbd5b77$export$2e2bcd8739ae039).register(\"r-list\", {\n list: null,\n container: null,\n template: null,\n isEmpty: false,\n isDynamicTemplate: false,\n /**\n **\tExecuted when the children of the element are ready.\n */ ready: function() {\n this.container = this.querySelector(this.dataset.container || \".x-data\");\n if (!this.container) {\n this.container = document.createElement(\"div\");\n this.container.className = \"x-data\";\n this.appendChild(this.container);\n }\n let tmp = this.template_elem = this.querySelector(\"template\");\n if (tmp) {\n if (tmp.dataset.mode != \"dynamic\") this.template = (0, $k7heJ$Template).compile(tmp.innerHTML);\n else {\n this.template = ()=>tmp.innerHTML;\n this.isDynamicTemplate = true;\n }\n tmp.remove();\n } else this.template = ()=>\"\";\n this.container.textContent = \" \";\n this.setEmpty(null);\n this.setLoading(null);\n },\n /**\n **\tExecuted when the children of the element are ready.\n */ rready: function() {\n let list = this.dataList;\n if (list) {\n if (typeof list === \"string\") list = (0, $52a9c945778cbfd0$export$2e2bcd8739ae039).get(list, true);\n } else list = this.getFieldByPath(this.dataset.list);\n if (!list) {\n if (this.dataset.list) console.error(\"data-list not found: \" + this.dataset.list);\n return;\n }\n this.setList(list);\n },\n /*\n **\tIndicates if the list is empty. Elements having x-empty, x-not-empty and x-empty-null will be updated.\n */ setEmpty: function(value) {\n if (this.isEmpty === value) return;\n if (value === true) {\n this.querySelectorAll(\".x-empty\").forEach((i)=>i.classList.remove(\"is-hidden\"));\n this.querySelectorAll(\".x-not-empty\").forEach((i)=>i.classList.add(\"is-hidden\"));\n this.querySelectorAll(\".x-empty-null\").forEach((i)=>i.classList.add(\"is-hidden\"));\n } else if (value === false) {\n this.querySelectorAll(\".x-empty\").forEach((i)=>i.classList.add(\"is-hidden\"));\n this.querySelectorAll(\".x-not-empty\").forEach((i)=>i.classList.remove(\"is-hidden\"));\n this.querySelectorAll(\".x-empty-null\").forEach((i)=>i.classList.add(\"is-hidden\"));\n } else {\n this.querySelectorAll(\".x-empty\").forEach((i)=>i.classList.add(\"is-hidden\"));\n this.querySelectorAll(\".x-not-empty\").forEach((i)=>i.classList.add(\"is-hidden\"));\n this.querySelectorAll(\".x-empty-null\").forEach((i)=>i.classList.remove(\"is-hidden\"));\n }\n this.isEmpty = value;\n },\n /*\n **\tIndicates if the list is loading. Elements having is-loading will be updated.\n */ setLoading: function(value) {\n if (value === true) this.querySelectorAll(\".is-loading\").forEach((i)=>i.classList.remove(\"is-hidden\"));\n else this.querySelectorAll(\".is-loading\").forEach((i)=>i.classList.add(\"is-hidden\"));\n },\n /**\n **\tSets the list model-list of the element.\n */ setList: function(list) {\n if (!list || !(0, $k7heJ$Rinn).isInstanceOf(list, (0, $k7heJ$ModelList)) || this.list === list) return;\n if (this.list != null) {\n if (this.list.dataSource) this.list.dataSource.removeEventListener(this.eid + \":*\");\n if (this.list.dataList) this.list.dataList.removeEventListener(this.eid + \":*\");\n this.list.removeEventListener(this.eid + \":*\");\n }\n this.list = list;\n if (this.list.dataSource) {\n this.list.dataSource.addEventListener(this.eid + \":listLoading\", this.onLoading, this);\n this.list.dataSource.addEventListener(this.eid + \":listLoaded\", this.onLoaded, this);\n }\n if (this.list.dataList) {\n this.list.dataList.addEventListener(this.eid + \":listLoading\", this.onLoading, this);\n this.list.dataList.addEventListener(this.eid + \":listLoaded\", this.onLoaded, this);\n }\n this.list.addEventListener(this.eid + \":itemsCleared\", this.onItemsCleared, this);\n this.list.addEventListener(this.eid + \":itemsChanged\", this.onItemsChanged, this);\n this.list.addEventListener(this.eid + \":itemRemoved\", this.onItemRemoved, this);\n this.list.addEventListener(this.eid + \":itemChanged\", this.onItemChanged, this);\n this.list.addEventListener(this.eid + \":itemAdded\", this.onItemAdded, this);\n },\n /*\n **\tBuilds an item (inside a div) to be added to the container.\n */ buildItem: function(iid, data, asHtml = false) {\n if (this.content) {\n let elem = this.content(data.get(), data);\n elem.dataset.iid = iid;\n return elem;\n }\n if (this.container.content) {\n let elem = this.container.content(data.get(), data);\n elem.dataset.iid = iid;\n return elem;\n }\n let html = this.template(data.get());\n if (asHtml) return html;\n let elem = document.createElement(\"div\");\n elem.dataset.iid = iid;\n elem.innerHTML = html;\n elem.querySelectorAll('[data-model=\":list-item\"]').forEach((i)=>{\n i.model = data;\n i.dataset.model = \"this.model\";\n });\n for (let attr of this.template_elem.attributes){\n if (attr.nodeName.startsWith(\"data-_\") || attr.nodeName == \"data-mode\") continue;\n elem.setAttribute(attr.nodeName, attr.nodeValue);\n }\n return elem;\n },\n /*\n **\tExecuted when the list is loading.\n */ onLoading: function() {\n this.setLoading(true);\n },\n /*\n **\tExecuted when the list finished loading.\n */ onLoaded: function() {\n this.setLoading(false);\n },\n /*\n **\tExecuted when the list is cleared.\n */ onItemsCleared: function() {\n this.container._timeout = setTimeout(()=>{\n this.setEmpty(true);\n this.container._timeout = null;\n this.container.textContent = \"\";\n }, 300);\n },\n /*\n **\tExecuted when the items of the list changed.\n */ onItemsChanged: function() {\n if (this.list.length() == 0) return;\n if (this.container._timeout) clearTimeout(this.container._timeout);\n this.container._timeout = null;\n this.container.textContent = \"\";\n let i = 0;\n for (let data of this.list.getData())if (this.dataset.wrap != \"false\") this.container.append(this.buildItem(this.list.itemId[i++], data));\n else this.container.innerHTML += this.buildItem(this.list.itemId[i++], data, true);\n this.setEmpty(i == 0);\n },\n /*\n **\tExecuted when an item is removed from the list.\n */ onItemRemoved: function(evt, args) {\n if (this.dataset.wrap == \"false\") {\n this.onItemsChanged();\n return;\n }\n let elem = this.container.querySelector('[data-iid=\"' + args.id + '\"]');\n if (!elem) return;\n elem.remove();\n this.setEmpty(this.list.length() == 0);\n },\n /*\n **\tExecuted when an item changes.\n */ onItemChanged: function(evt, args) {\n if (this.isDynamicTemplate) return;\n if (this.dataset.wrap == \"false\") {\n this.onItemsChanged();\n return;\n }\n let elem = this.container.querySelector('[data-iid=\"' + args.id + '\"]');\n if (!elem) return;\n elem.innerHTML = this.template(args.item);\n },\n /*\n **\tExecuted when an item is added to the list.\n */ onItemAdded: function(evt, args) {\n if (args.position == \"head\") {\n if (this.dataset.wrap != \"false\") this.container.prepend(this.buildItem(args.id, args.item));\n else this.container.innerHTML = this.buildItem(args.id, args.item, true) + this.container.innerHTML;\n } else if (this.dataset.wrap != \"false\") this.container.append(this.buildItem(args.id, args.item));\n else this.container.innerHTML += this.buildItem(args.id, args.item, true);\n this.setEmpty(false);\n },\n /**\n * \tForces re-rendering of the element.\n */ refresh: function() {\n this.onItemsChanged();\n }\n});\n\n\n/*\n <r-item data-model=\"window.model1\">\n </r-item>\n*/ \nvar $7061e6454a23ef4a$export$2e2bcd8739ae039 = (0, $5808f050ebbd5b77$export$2e2bcd8739ae039).register(\"r-item\", {\n isRoot: true,\n /**\n * Initializes the element.\n */ init: function() {},\n /**\n * Executed when the children and root are ready.\n */ rready: function() {\n let model = this.dataModel ?? this.getFieldByPath(this.dataset.model);\n if (!model) model = {};\n this.setModel(model);\n }\n});\n\n\n/*\n <r-paginator data-source=\"window.dataSource1\" data-page-size=\"25\">\n <span data-watch=\"count\">Showing [offsetStart] to [offsetEnd] out of [count]</span>\n\n <button data-action=\"firstPage\">First</button>\n <button data-action=\"prevPage\">&laquo;</button>\n <button data-action=\"nextPage\">&raquo;</button>\n <button data-action=\"lastPage\">Last</button>\n <button data-action=\"refresh\">Refresh</button>\n\n <input type=\"text\" data-property=\"pageSize\" />\n </r-paginator>\n*/ \n\n\nvar /*\n**\tConnects to a data source to provide pagination features.\n*/ $8586bcf20c2e54e9$export$2e2bcd8739ae039 = (0, $5808f050ebbd5b77$export$2e2bcd8739ae039).register(\"r-paginator\", {\n isRoot: true,\n source: null,\n template: null,\n /**\n **\tInitializes the element.\n */ init: function() {\n this.setModel({\n offsetStart: 0,\n offsetEnd: 0,\n count: 0,\n offset: 0,\n currentPageSize: this.dataset.pageSize || 25,\n pageSize: this.dataset.pageSize || 25\n });\n this.listen(\"propertyChanged.pageSize\", (evt, args)=>{\n if (this.model.get(\"currentPageSize\") == args.value) return;\n this.model.set(\"currentPageSize\", args.value);\n this.updateOffset(\"range\");\n });\n },\n rready: function() {\n let source = this.dataSource;\n if (source) {\n if (typeof source === \"string\") source = (0, $fe13c50c6c3e66d8$export$2e2bcd8739ae039).get(source, true);\n } else source = this.getFieldByPath(this.dataset.source);\n if (!source) {\n if (this.dataset.source) console.error(\"data-source not found: \" + this.dataset.source);\n return;\n }\n this.setSource(source);\n },\n /**\n **\tSets the source model-list of the paginator.\n */ setSource: function(source) {\n if (!source || !(0, $k7heJ$Rinn).isInstanceOf(source, (0, $fe13c50c6c3e66d8$export$2e2bcd8739ae039)) || this.source === source) return;\n if (this.source != null) {\n this.source.removeEventListener(this.eid + \":*\");\n this.source.includeCount = false;\n }\n this.source = source;\n this.source.includeCount = true;\n this.updateOffset();\n this.source.addEventListener(this.eid + \":requestPropertyChanged\", this.onRequestPropertyChanged, this);\n this.source.addEventListener(this.eid + \":countChanged\", this.onCountChanged, this);\n this.source.addEventListener(this.eid + \":listItemRemoved\", this.onItemRemoved, this);\n this.source.addEventListener(this.eid + \":listItemAdded\", this.onItemAdded, this);\n this.source.setNamespace(this.eid);\n this.source.request.update(true);\n this.source.setNamespace(null);\n },\n /*\n **\tUpdates several offset related fields in the paginator model. Optionally refreshes the data source with the specified mode.\n */ updateOffset: function(mode = null) {\n this.model.set(\"offsetStart\", this.model.get(\"count\") != 0 ? this.model.get(\"offset\") + 1 : 0);\n this.model.set(\"offsetEnd\", Math.min(this.model.get(\"count\"), this.model.get(\"offsetStart\") + this.model.getInt(\"pageSize\") - 1));\n this.model.update(\"count\");\n let _count = this.source.request.get(\"count\");\n let _offset = this.source.request.get(\"offset\");\n this.source.request.set(\"count\", this.model.getInt(\"pageSize\"));\n this.source.request.set(\"offset\", this.model.get(\"offset\"));\n if (mode && (_count != this.source.request.get(\"count\") || _offset != this.source.request.get(\"offset\"))) this.source.refresh(mode);\n },\n /*\n **\tEvent handler invoked when a property of the source request changes. The property is copied to the local model.\n */ onRequestPropertyChanged: function(evt, args) {\n if (args.name == \"count\" || args.name == \"offset\") return;\n this.model.set(args.name, args.value);\n },\n /*\n **\tEvent handler invoked when a property of the model has changed. The property is copied to the data source request model.\n */ onModelPropertyChanged: function(evt, args) {\n let ignored = [\n \"offsetStart\",\n \"offsetEnd\",\n \"count\",\n \"offset\",\n \"currentPageSize\",\n \"pageSize\"\n ];\n if (ignored.indexOf(args.name) != -1) return;\n if (this.source.request.get(args.name) == args.value) return;\n this.source.request.set(args.name, args.value);\n this.source.refresh(\"filter\");\n },\n /*\n **\tExecuted when the remote count changes.\n */ onCountChanged: function(evt, args) {\n this.model.set(\"count\", evt.source.count, false);\n this.updateOffset();\n },\n /*\n **\tExecuted when an item is removed from the list.\n */ onItemRemoved: function(evt, args) {\n this.model.set(\"count\", this.model.getInt(\"count\") - 1, false);\n this.updateOffset();\n },\n /*\n **\tExecuted when an item is added to the list.\n */ onItemAdded: function(evt, args) {\n this.model.set(\"count\", this.model.getInt(\"count\") + 1, false);\n this.updateOffset();\n },\n /*\n **\tMoves to the previous page.\n */ prevPage: function() {\n if (this.model.get(\"offset\") <= 0) return;\n let offs = this.model.get(\"offset\") - this.model.getInt(\"pageSize\");\n if (offs < 0) offs = 0;\n this.model.set(\"offset\", offs);\n this.updateOffset(\"range\");\n },\n /*\n **\tMoves to the next page.\n */ nextPage: function() {\n let offs = this.model.get(\"offset\") + this.model.getInt(\"pageSize\");\n if (offs >= this.model.get(\"count\")) return;\n this.model.set(\"offset\", offs);\n this.updateOffset(\"range\");\n },\n /*\n **\tMoves to the first page.\n */ firstPage: function() {\n this.model.set(\"offset\", 0);\n this.updateOffset(\"range\");\n },\n /*\n **\tMoves to the last page.\n */ lastPage: function() {\n let offs = this.model.get(\"count\") - this.model.getInt(\"pageSize\");\n if (offs < 0) offs = 0;\n this.model.set(\"offset\", offs);\n this.updateOffset(\"range\");\n },\n /*\n **\tRefreshes the data source.\n */ refresh: function() {\n this.source.refresh(\"full\");\n },\n /*\n **\tClears (set to empty) the specified fields from the data source's request parameters.\n */ clear: function(args) {\n for(let i = 0; i < args.length; i++)this.model.set(args[i], \"\");\n }\n});\n\n\n/*\n <r-table data-source=\"window.dataSource1\">\n <table>\n <thead>\n <tr>\n <th>A</th>\n <th>B</th>\n </tr>\n </thead>\n\n <tbody class=\"x-data\">\n <tr>\n <td>[a]</td>\n <td>[b]</td>\n </tr>\n </tbody>\n </table>\n </r-table>\n\n CSS:\n .is-hidden {\n display: none;\n }\n\n th[data-sort] {\n cursor: pointer; text-decoration: underline;\n }\n\n th[data-sort][data-order=\"asc\"]:before {\n content: \"\\25B2\";\n }\n\n th[data-sort][data-order=\"desc\"]:before {\n content: \"\\25BC\";\n }\n\n Modifiers:\n .x-empty\t\t\tAdd to elements that should be shown only when there is no data in the data source.\n .x-not-empty \t\tAdd to elements that should be shown only when there is data in the data source.\n [data-sort]\t\t\tAdded to th/td elements in thead, marks the column as sortable.\n*/ \n\n\nvar /**\n * Connects to a DataSource and renders its contents as a table.\n */ $a1b0099052e4f8e1$export$2e2bcd8739ae039 = (0, $5808f050ebbd5b77$export$2e2bcd8739ae039).register(\"r-table\", {\n isRoot: true,\n source: null,\n template: null,\n container: null,\n isEmpty: null,\n /**\n * Initializes the element.\n */ init: function() {\n this.setModel({});\n },\n /**\n * Executed when the children of the element are ready.\n */ ready: function() {\n this.container = this.querySelector(this.dataset.container || \"tbody.x-data\");\n if (!this.container) throw new Error(\"r-table requires a container\");\n if (this.container.dataset.mode != \"dynamic\") this.template = (0, $k7heJ$Template).compile(this.container.innerHTML);\n else this.template = ()=>this.container.innerHTML;\n this.temporalBody = document.createElement(\"tbody\");\n this.container.textContent = \" \";\n this.setEmpty(true);\n },\n /**\n * Executed when the children and root elements are ready.\n */ rready: function() {\n let source = this.dataSource;\n if (source) {\n if (typeof source === \"string\") source = (0, $fe13c50c6c3e66d8$export$2e2bcd8739ae039).get(source, true);\n } else source = this.getFieldByPath(this.dataset.source);\n if (!source) {\n if (this.dataset.source) console.error(\"data-source not found: \" + this.dataset.source);\n return;\n }\n this.setSource(source);\n },\n /*\n **\tIndicates if the table is empty. Elements having .x-not-empty will be hidden.\n */ setEmpty: function(value) {\n if (this.isEmpty === value) return;\n if (value) {\n this.querySelectorAll(\".x-empty\").forEach((i1)=>i1.classList.remove(\"is-hidden\"));\n this.querySelectorAll(\".x-not-empty\").forEach((i1)=>i1.classList.add(\"is-hidden\"));\n } else {\n this.querySelectorAll(\".x-empty\").forEach((i1)=>i1.classList.add(\"is-hidden\"));\n this.querySelectorAll(\".x-not-empty\").forEach((i1)=>i1.classList.remove(\"is-hidden\"));\n }\n this.isEmpty = value;\n },\n /**\n **\tSets the data source of the element.\n */ setSource: function(source) {\n if (!source || !(0, $k7heJ$Rinn).isInstanceOf(source, (0, $fe13c50c6c3e66d8$export$2e2bcd8739ae039)) || this.source === source) return;\n if (this.source != null) this.source.removeEventListener(this.eid + \":*\");\n this.source = source;\n this.source.addEventListener(this.eid + \":requestPropertyChanged\", this.onRequestPropertyChanged, this);\n this.source.addEventListener(this.eid + \":listItemsCleared\", this.onItemsCleared, this);\n this.source.addEventListener(this.eid + \":listItemsChanged\", this.onItemsChanged, this);\n this.source.addEventListener(this.eid + \":listItemRemoved\", this.onItemRemoved, this);\n this.source.addEventListener(this.eid + \":listItemChanged\", this.onItemChanged, this);\n this.source.addEventListener(this.eid + \":listItemAdded\", this.onItemAdded, this);\n this.source.setNamespace(this.eid);\n this.source.request.update(true);\n this.source.setNamespace(null);\n },\n /*\n **\tEvent handler invoked when a property of the source request changes. The property is copied to the local model.\n */ onRequestPropertyChanged: function(evt, args) {\n this.model.set(args.name, args.value);\n if (args.name == \"sort\") this.querySelectorAll(\"thead [data-sort]\").forEach((i1)=>i1.dataset.order = \"\");\n else if (args.name == \"order\") {\n let elem = this.querySelector('thead [data-sort=\"' + evt.source.get(\"sort\") + '\"]');\n if (elem) elem.dataset.order = args.value;\n }\n },\n /*\n **\tEvent handler invoked when a property of the model has changed. The property is copied to the data source request model.\n */ onModelPropertyChanged: function(evt, args) {\n if (this.source.request.get(args.name) == args.value) return;\n this.source.request.set(args.name, args.value);\n let ignored = [\n \"count\",\n \"offset\"\n ];\n if (ignored.indexOf(args.name) != -1) return;\n this.source.refresh(\"filter\");\n },\n /*\n **\tEvent handler invoked when a property of the model is removed.\n */ onModelPropertyRemoved: function(evt, args) {\n if (typeof args.fields == \"string\") this.source.request.remove(i);\n else args.fields.forEach((i1)=>this.source.request.remove(i1));\n this.source.refresh(\"filter\");\n },\n /*\n **\tBuilds an item to be added to the container.\n */ buildItem: function(iid, data) {\n if (this.container.content) {\n let elem = this.container.content(data.get(), data);\n elem.dataset.iid = iid;\n return elem;\n }\n let elem = this.temporalBody;\n elem.innerHTML = this.template(data.get());\n elem.querySelectorAll('[data-model=\":list-item\"]').forEach((i1)=>{\n i1.model = data;\n i1.dataset.model = \"this.model\";\n });\n elem = elem.firstElementChild;\n elem.dataset.iid = iid;\n return elem;\n },\n /*\n **\tExecuted when the list is cleared.\n */ onItemsCleared: function(evt, args) {\n this.container._timeout = setTimeout(()=>{\n this.setEmpty(true);\n this.container._timeout = null;\n this.container.textContent = \"\";\n }, 300);\n },\n /*\n **\tExecuted when the items of the list changed.\n */ onItemsChanged: function(evt, args) {\n if (this.source.list.length() == 0) return;\n if (this.container._timeout) clearTimeout(this.container._timeout);\n this.container._timeout = null;\n this.container.textContent = \"\";\n let i1 = 0;\n for (let data of this.source.list.getData())this.container.append(this.buildItem(this.source.list.itemId[i1++], data));\n this.setEmpty(i1 == 0);\n },\n /*\n **\tExecuted when an item is removed from the list.\n */ onItemRemoved: function(evt, args) {\n let elem = this.container.querySelector('[data-iid=\"' + args.id + '\"]');\n if (!elem) return;\n elem.remove();\n this.setEmpty(this.source.list.length() == 0);\n },\n /*\n **\tExecuted when an item changes.\n */ onItemChanged: function(evt, args) {\n let elem = this.container.querySelector('[data-iid=\"' + args.id + '\"]');\n if (!elem) return;\n let _elem = this.buildItem(args.id, args.item);\n this.container.replaceChild(_elem, elem);\n },\n /*\n **\tExecuted when an item is added to the list.\n */ onItemAdded: function(evt, args) {\n if (args.position == \"head\") this.container.prepend(this.buildItem(args.id, args.item));\n else this.container.append(this.buildItem(args.id, args.item));\n this.setEmpty(false);\n },\n /*\n **\tHandles clicks to data-sort elements.\n */ \"event click thead [data-sort]\": function(evt, args) {\n if (this.source.request.get(\"sort\") == evt.source.dataset.sort) {\n this.source.request.set(\"order\", this.source.request.get(\"order\") == \"asc\" ? \"desc\" : \"asc\");\n this.source.refresh(\"order\");\n } else {\n this.source.request.set(\"sort\", evt.source.dataset.sort);\n this.source.request.set(\"order\", \"asc\", true);\n this.source.refresh(\"order\");\n }\n },\n /*\n **\tRefreshes the data source.\n */ refresh: function() {\n this.source.refresh(\"full\");\n },\n /*\n **\tClears (set to empty) the specified fields from the data source's request parameters.\n */ clear: function(args) {\n for(let i1 = 0; i1 < args.length; i1++)this.model.set(args[i1], \"\");\n }\n});\n\n\n/*\n <r-select data-list=\"window.dataList1\" data-blank=\"\"></r-select>\n*/ \n\nvar /*\n**\tConnects to a ModelList and renders its contents as a <select> element.\n*/ $e668322859586774$export$2e2bcd8739ae039 = (0, $5808f050ebbd5b77$export$2e2bcd8739ae039).register(\"r-select\", {\n list: null,\n container: null,\n value: \"\",\n /**\n **\tInitializes the element.\n */ init: function() {\n this.container = document.createElement(\"select\");\n this.parentElement.insertBefore(this.container, this);\n let list = [];\n for (let attr of this.attributes){\n if (attr.nodeName.startsWith(\"data-_\") || attr.nodeName == \"data-list\" || attr.nodeName == \"data-blank\") continue;\n this.container.setAttribute(attr.nodeName, attr.nodeValue);\n list.push(attr.nodeName);\n }\n if (this.disabled) this.container.disabled = this.disabled;\n list.forEach((i)=>this.removeAttribute(i));\n this.textContent = \" \";\n this.style.display = \"none\";\n },\n /**\n **\tExecuted when the children and parent of the element are ready.\n */ rready: function() {\n let list = this.dataList;\n if (list) {\n if (typeof list === \"string\") list = DataList.get(list, true);\n } else list = this.getFieldByPath(this.dataset.list);\n if (!list) {\n if (this.dataset.list) console.error(\"data-list not found: \" + this.dataset.list);\n return;\n }\n this.setList(list);\n if (this.parentElement.lastElementChild !== this) this.parentElement.append(this);\n },\n /**\n **\tSets the list model-list of the element.\n */ setList: function(list) {\n if (!list || !(0, $k7heJ$Rinn).isInstanceOf(list, (0, $k7heJ$ModelList)) || this.list === list) return;\n if (this.list != null) this.list.removeEventListener(this.eid + \":*\");\n this.list = list;\n if (this.list.dataSource) this.list.dataSource.includeEnum = true;\n this.list.addEventListener(this.eid + \":itemsCleared\", this.onItemsCleared, this);\n this.list.addEventListener(this.eid + \":itemsChanged\", this.onItemsChanged, this);\n this.list.addEventListener(this.eid + \":itemRemoved\", this.onItemsChanged, this);\n this.list.addEventListener(this.eid + \":itemChanged\", this.onItemsChanged, this);\n this.list.addEventListener(this.eid + \":itemAdded\", this.onItemsChanged, this);\n this.onItemsChanged();\n },\n /*\n **\tExecuted when the list is cleared.\n */ onItemsCleared: function(evt, args) {\n this.container.textContent = \"\";\n },\n /*\n **\tExecuted when the items of the list changed.\n */ onItemsChanged: function(evt, args) {\n if (this.list.length() == 0) return;\n let list = this.list.getData();\n let value, label, s = \"\";\n if (list[0].has(\"value\")) value = \"value\";\n else if (list[0].has(\"id\")) value = \"id\";\n if (list[0].has(\"label\")) label = \"label\";\n else if (list[0].has(\"name\")) label = \"name\";\n if (\"blank\" in this.dataset) s += '<option value=\"\">' + this.dataset.blank + \"</option>\";\n if (list[0].has(\"group\")) {\n let groups = {};\n list.forEach((i)=>groups[i.get(\"group\")] = null);\n for(let i in groups)groups[i] = {\n name: i,\n list: []\n };\n list.forEach((i)=>groups[i.get(\"group\")].list.push(i));\n groups = Object.values(groups);\n groups.forEach((g)=>{\n s += '<optgroup label=\"' + g.name + '\">';\n g.list.forEach((i)=>s += '<option value=\"' + i.get(value) + '\">' + i.get(label) + \"</option>\");\n s += \"</optgroup>\";\n });\n } else list.forEach((i)=>s += '<option value=\"' + i.get(value) + '\">' + i.get(label) + \"</option>\");\n this.container.innerHTML = s;\n this.container.value = this.container.dataset.value;\n },\n /**\n * \tForces re-rendering of the element.\n */ refresh: function() {\n this.onItemsChanged();\n }\n});\n\n\n/*\n <r-image-cropper>\n </r-image-cropper>\n*/ \nconst $a86ae7da7dd6c514$var$Utils = {\n /**\n * Forces the browser to show a download dialog.\n * @param {string} filename\n * @param {string} url\n */ showDownload: function(filename, url) {\n let link = document.createElement(\"a\");\n link.href = url;\n link.style.display = \"none\";\n link.download = filename;\n link.target = \"_blank\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n /**\n * Forces the browser to show a file selection dialog.\n * @param {boolean} allowMultiple\n * @param {string} accept \n * @param {function(File[])} callback \n */ showFilePicker: function(allowMultiple, accept, callback) {\n let input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = accept;\n input.style.display = \"none\";\n input.multiple = allowMultiple;\n document.body.appendChild(input);\n input.onchange = function() {\n callback(input.files);\n };\n document.body.onfocus = function() {\n document.body.onfocus = null;\n document.body.removeChild(input);\n };\n input.click();\n },\n /**\n * Loads a file or blob and returns the content as a dataURL.\n * @param {File|Blob} file\n * @param {function(string)} callback\n */ loadAsDataUrl: function(file, callback) {\n let reader = new FileReader();\n reader.onload = function(e) {\n callback(e.target.result, null);\n };\n reader.onerror = function(e) {\n callback(null, e);\n };\n reader.readAsDataURL(file);\n },\n /**\n * Loads a file or blob and returns the content as text.\n * @param {File|Blob} file\n * @param {function(string)} callback\n */ loadAsText: function(file, callback) {\n let reader = new FileReader();\n reader.onload = function(e) {\n callback(e.target.result);\n };\n reader.readAsText(file);\n },\n /**\n * Loads a file or blob and returns the content as array buffer.\n * @param {File|Blob} file\n * @param {function(ArrayBuffer)} callback\n */ loadAsArrayBuffer: function(file, callback) {\n let reader = new FileReader();\n reader.onload = function(e) {\n callback(e.target.result);\n };\n reader.readAsArrayBuffer(file);\n },\n /**\n * Loads a list of files or blobs and returns the content as dataURLs.\n * @param {Array<File|Blob>} fileList\n * @param {function([{ name:string, size:number, url:string }])} callback\n */ loadAllAsDataUrl: function(fileList, callback) {\n let result = [];\n if (!fileList || !fileList.length) {\n callback(result);\n return;\n }\n let loadNext = function(i) {\n if (i == fileList.length) {\n callback(result);\n return;\n }\n $a86ae7da7dd6c514$var$Utils.loadAsDataUrl(fileList[i], function(url, err) {\n if (!err) result.push({\n name: fileList[i].name,\n size: fileList[i].size,\n url: url\n });\n loadNext(i + 1);\n });\n };\n loadNext(0);\n },\n /**\n * Loads an image from a url and returns it as an Image object.\n * @param {string} url\n * @param {function(Image)} callback\n */ loadImageFromUrl: function(url, callback) {\n let image = new Image();\n image.onload = ()=>callback(image);\n image.onerror = ()=>callback(null);\n image.src = url;\n }\n};\nvar $a86ae7da7dd6c514$export$2e2bcd8739ae039 = $a86ae7da7dd6c514$var$Utils;\n\n\nvar $183fe4f5f56cd7be$export$2e2bcd8739ae039 = (0, $5808f050ebbd5b77$export$2e2bcd8739ae039).register(\"r-image-cropper\", {\n /*\n **\tDefault aspect ratio.\n */ aspectRatio: 1,\n /*\n **\tCurrent image scale.\n */ imageScale0: 0,\n imageScale: 1,\n /*\n **\tImage translation offsets.\n */ imageOffsX: 0,\n imageOffsY: 0,\n /*\n **\tPointer contexts.\n */ pointerA: null,\n pointerB: null,\n /*\n **\tClient bounding box.\n */ bounds: null,\n /*\n **\tInitializes the element.\n */ init: function() {\n this.canvas = document.createElement(\"canvas\");\n this.appendChild(this.canvas);\n this.g = this.canvas.getContext(\"2d\");\n this.pointerA = {\n id: null,\n active: false,\n sx: 0,\n sy: 0,\n cx: 0,\n cy: 0,\n ix: 0,\n iy: 0\n };\n this.pointerB = {\n id: null,\n active: false,\n sx: 0,\n sy: 0,\n cx: 0,\n cy: 0,\n ix: 0,\n iy: 0\n };\n this.log = document.createElement(\"div\");\n this.appendChild(this.log);\n },\n /*\n **\tSets the image for the cropper from an image URL.\n */ setImageUrl: function(url) {\n (0, $a86ae7da7dd6c514$export$2e2bcd8739ae039).loadImageFromUrl(url, (image)=>{\n this.setImage(image);\n });\n },\n /*\n **\tSets the image for the cropper from an HTML File object.\n */ setImageFile: function(file) {\n (0, $a86ae7da7dd6c514$export$2e2bcd8739ae039).loadAsDataUrl(file, (url)=>{\n (0, $a86ae7da7dd6c514$export$2e2bcd8739ae039).loadImageFromUrl(url, (image)=>{\n this.setImage(image);\n });\n });\n },\n /*\n **\tSets the cropper image from an HTML Image element.\n */ setImage: function(image) {\n this.image = image;\n this.reset();\n this.imageScale = Math.max(this.canvas.width / this.image.width, this.canvas.height / this.image.height);\n this.imageOffsX = (this.canvas.width - this.imageScale * this.image.width) * 0.5;\n this.imageOffsY = (this.canvas.height - this.imageScale * this.image.height) * 0.5;\n this.render();\n },\n /*\n **\tReturns the blob and URL representing the current canvas state.\n */ getBlobAndUrl: function(callback, type = \"image/png\", quality = 0.9) {\n this.canvas.toBlob((blob)=>{\n callback(blob, URL.createObjectURL(blob));\n }, type, quality);\n },\n /*\n **\tAuto-resizes the canvas to ensure the aspect ratio is maintained.\n */ reset: function() {\n this.bounds = this.getBoundingClientRect();\n this.canvas.width = this.bounds.width;\n this.canvas.height = this.bounds.width / this.aspectRatio;\n },\n /*\n **\tAuto-resizes the canvas to ensure the aspect ratio is maintained and renders the image.\n */ render: function() {\n this.canvas.width = this.canvas.width;\n this.g.fillStyle = \"#000\";\n this.g.beginPath();\n this.g.rect(0, 0, this.canvas.width, this.canvas.height);\n this.g.fill();\n this.g.translate(this.imageOffsX, this.imageOffsY);\n this.g.scale(this.imageScale, this.imageScale);\n this.g.drawImage(this.image, 0, 0);\n },\n /*\n **\tTranslates the image by the given offsets.\n */ translateImage: function(offsX, offsY) {\n this.imageOffsX += offsX;\n this.imageOffsY += offsY;\n this.render(true);\n },\n /*\n **\tHandle mouse events on the canvas.\n */ \"event mousemove canvas\": function(evt) {\n if (this.pointerA.active) {\n this.pointerA.cx = evt.clientX;\n this.pointerA.cy = evt.clientY;\n this.translateImage(this.pointerA.cx - this.pointerA.sx, this.pointerA.cy - this.pointerA.sy);\n this.pointerA.sx = this.pointerA.cx;\n this.pointerA.sy = this.pointerA.cy;\n }\n this.pointerA.ix = (evt.clientX - this.bounds.left - this.imageOffsX) / this.imageScale;\n this.pointerA.iy = (evt.clientY - this.bounds.top - this.imageOffsY) / this.imageScale;\n },\n \"event mousedown canvas\": function(evt) {\n this.pointerA.active = true;\n this.pointerA.sx = evt.clientX;\n this.pointerA.sy = evt.clientY;\n },\n \"event mouseup canvas\": function(evt) {\n this.pointerA.active = false;\n },\n \"event wheel canvas\": function(evt) {\n if (evt.deltaY > 0) this.imageScale -= 0.045;\n else this.imageScale += 0.045;\n if (this.imageScale < 0.1) this.imageScale = 0.1;\n this.imageOffsX += -this.pointerA.ix * this.imageScale + (evt.clientX - this.bounds.left) - this.imageOffsX;\n this.imageOffsY += -this.pointerA.iy * this.imageScale + (evt.clientY - this.bounds.top) - this.imageOffsY;\n this.render();\n },\n /*\n **\tHandle touch events on the canvas.\n */ \"event touchmove canvas\": function(evt) {\n for (let i of evt.changedTouches){\n if (this.pointerA.id == i.identifier) {\n this.pointerA.cx = i.clientX;\n this.pointerA.cy = i.clientY;\n } else if (this.pointerB.id == i.identifier) {\n this.pointerB.cx = i.clientX;\n this.pointerB.cy = i.clientY;\n }\n }\n if (this.pointerA.active && this.pointerB.active) {\n let d0 = Math.sqrt(Math.pow(this.pointerA.sx - this.pointerB.sx, 2) + Math.pow(this.pointerA.sy - this.pointerB.sy, 2));\n let d1 = Math.sqrt(Math.pow(this.pointerA.cx - this.pointerB.cx, 2) + Math.pow(this.pointerA.cy - this.pointerB.cy, 2));\n let d = d1 - d0;\n this.imageScale += d / 10 * 0.025;\n if (this.imageScale < 0.1) this.imageScale = 0.1;\n this.imageOffsX += -this.pointerA.ix * this.imageScale + (this.pointerA.cx - this.bounds.left) - this.imageOffsX;\n this.imageOffsY += -this.pointerA.iy * this.imageScale + (this.pointerA.cy - this.bounds.top) - this.imageOffsY;\n this.pointerA.sx = this.pointerA.cx;\n this.pointerA.sy = this.pointerA.cy;\n this.pointerB.sx = this.pointerB.cx;\n this.pointerB.sy = this.pointerB.cy;\n this.render();\n } else {\n let p = this.pointerA.active ? this.pointerA : this.pointerB.active ? this.pointerB : null;\n if (!p) return;\n this.translateImage(p.cx - p.sx, p.cy - p.sy);\n p.sx = p.cx;\n p.sy = p.cy;\n }\n },\n \"event touchstart canvas\": function(evt) {\n this.imageScale0 = this.imageScale;\n for (let i of evt.changedTouches){\n if (this.pointerA.id === null) {\n this.pointerA.id = i.identifier;\n this.pointerA.active = true;\n this.pointerA.sx = i.clientX;\n this.pointerA.sy = i.clientY;\n this.pointerA.ix = (i.clientX - this.bounds.left - this.imageOffsX) / this.imageScale;\n this.pointerA.iy = (i.clientY - this.bounds.top - this.imageOffsY) / this.imageScale;\n } else if (this.pointerB.id === null) {\n this.pointerB.id = i.identifier;\n this.pointerB.active = true;\n this.pointerB.sx = i.clientX;\n this.pointerB.sy = i.clientY;\n this.pointerB.ix = (i.clientX - this.bounds.left - this.imageOffsX) / this.imageScale;\n this.pointerB.iy = (i.clientY - this.bounds.top - this.imageOffsY) / this.imageScale;\n }\n }\n },\n \"event touchend canvas\": function(evt) {\n for (let i of evt.changedTouches){\n if (this.pointerA.id == i.identifier) {\n this.pointerA.id = null;\n this.pointerA.active = false;\n } else if (this.pointerB.id == i.identifier) {\n this.pointerB.id = null;\n this.pointerB.active = false;\n }\n }\n },\n \"event touchcancel canvas\": function(evt) {\n for (let i of evt.changedTouches){\n if (this.pointerA.id == i.identifier) {\n this.pointerA.id = null;\n this.pointerA.active = false;\n } else if (this.pointerB.id == i.identifier) {\n this.pointerB.id = null;\n this.pointerB.active = false;\n }\n }\n }\n});\n\n\nvar $5c1b3a60e2432554$export$2e2bcd8739ae039 = {\n Tabs: (0, $4a9d88aa888e9f4d$export$2e2bcd8739ae039),\n Form: (0, $ec74230761e3bde8$export$2e2bcd8739ae039),\n Panel: (0, $9c0636c07ff6144e$export$2e2bcd8739ae039),\n List: (0, $a4fb830b2d507403$export$2e2bcd8739ae039),\n Item: (0, $7061e6454a23ef4a$export$2e2bcd8739ae039),\n Paginator: (0, $8586bcf20c2e54e9$export$2e2bcd8739ae039),\n Table: (0, $a1b0099052e4f8e1$export$2e2bcd8739ae039),\n Select: (0, $e668322859586774$export$2e2bcd8739ae039),\n ImageCropper: (0, $183fe4f5f56cd7be$export$2e2bcd8739ae039)\n};\n\n\n\n\nvar //!class db\n$5c284bd1d2bc0d7d$export$2e2bcd8739ae039 //!/class\n = {\n /**\n\t * Database connection.\n\t */ db: null,\n /**\n\t * Initializes the database connection.\n\t * @param {string} dbName\n\t * @param {number} version\n\t * @param {(db: IDBDatabase, txn: IDBTransaction, oldVersion: number) => void} upgradeCallback\n\t * @returns {Promise<void>}\n\t * !static init (dbName: string, version: number, upgradeCallback: (db: IDBDatabase, txn: IDBTransaction, oldVersion: number) => void) : Promise<void>;\n\t */ init: function(dbName, version, upgradeCallback) {\n return new Promise((resolve, reject)=>{\n if (!$parcel$global.indexedDB) {\n reject(\"IndexedDB is not available in your system.\");\n return;\n }\n let req = indexedDB.open(dbName, version);\n req.onerror = (evt)=>{\n let err = evt.target.error + \"\";\n if (err.indexOf(\"AbortError\") !== -1) err = \"\\n\" + req.message;\n reject(\"Unable to open database: \" + err);\n return;\n };\n req.onupgradeneeded = async (evt)=>{\n try {\n const db = evt.target.result;\n const txn = evt.target.transaction;\n if (evt.oldVersion < 1) db.createObjectStore(\"system\", {\n keyPath: [\n \"name\"\n ]\n });\n await upgradeCallback(db, txn, evt.oldVersion);\n } catch (e) {\n req.message = e.message;\n req.transaction.abort();\n }\n };\n req.onsuccess = async (evt)=>{\n this.db = evt.target.result;\n resolve();\n };\n });\n },\n /**\n\t * Ensures the database is ready to be used, or throws an exception.\n\t */ ensureConnected: function() {\n if (!this.db) alert(\"Error: Database not initialized.\");\n },\n /**\n\t * Returns an index object for later use with methods that accept an IDBIndex in the `storeName` parameter.\n\t * @param {string} storeName\n\t * @param {string} indexName\n\t * @returns {IDBIndex}\n\t * !static index (storeName: string, indexName: string) : IDBIndex;\n\t */ index: function(storeName, indexName) {\n this.ensureConnected();\n let store = this.db.transaction(storeName, \"readwrite\").objectStore(storeName);\n let index = store.index(indexName);\n if (!index) throw new Error(\"Unable to find index `\" + indexName + \"` in store \" + storeName);\n return index;\n },\n /**\n\t * Runs a callback for each record in a data store.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {string} id\n\t * @param { (value:object, cursor:IDBCursor) => Promise<boolean> } callback\n\t * @returns {Promise<void>}\n\t * !static forEach (storeName: string|IDBIndex|IDBObjectStore, id: string, callback: (value:object, cursor:IDBCursor) => Promise<boolean>) : Promise<void>;\n\t */ forEach: function(storeName, id, callback) {\n this.ensureConnected();\n if (typeof id === \"function\") {\n callback = id;\n id = null;\n }\n return new Promise(async (resolve, reject)=>{\n let request, store;\n if (typeof storeName === \"string\") store = this.db.transaction(storeName, \"readwrite\").objectStore(storeName);\n else store = storeName;\n if (id === null) request = store.openCursor();\n else request = store.openCursor(id);\n request.onsuccess = async (event)=>{\n let cursor = event.target.result;\n if (!cursor) {\n resolve();\n return;\n }\n let result = await callback(cursor.value, cursor);\n if (result === false) {\n resolve();\n return;\n }\n cursor.continue();\n };\n request.onerror = (evt)=>{\n reject(evt.target.error);\n };\n });\n },\n /**\n\t * Returns the count of all records from the specified data store.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @returns {Promise<number>}\n\t * !static count (storeName: string|IDBIndex|IDBObjectStore) : Promise<number>;\n\t */ count: function(storeName) {\n this.ensureConnected();\n return new Promise((resolve, reject)=>{\n let store;\n if (typeof storeName === \"string\") store = this.db.transaction(storeName, \"readonly\").objectStore(storeName);\n else store = storeName;\n let request = store.count();\n request.onsuccess = (evt)=>{\n resolve(evt.target.result);\n };\n request.onerror = (evt)=>{\n reject(evt.target.error);\n };\n });\n },\n /**\n\t * Returns all records from the specified data store.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {string|number|Array<string|number>} filter\n\t * @returns {Promise<Array<object>>}\n\t * !static getAll (storeName: string|IDBIndex|IDBObjectStore, filter?: string|number|Array<string|number>) : Promise<Array<object>>;\n\t */ getAll: function(storeName, filter = null) {\n this.ensureConnected();\n return new Promise((resolve, reject)=>{\n let store;\n if (typeof storeName === \"string\") store = this.db.transaction(storeName, \"readonly\").objectStore(storeName);\n else store = storeName;\n let request = store.getAll(filter);\n request.onsuccess = (evt)=>{\n resolve(evt.target.result);\n };\n request.onerror = (evt)=>{\n reject(evt.target.error);\n };\n });\n },\n /**\n\t * Returns all keys from the specified data store.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {string|number|Array<string|number>} filter\n\t * @returns {Promise<Array<string|number|Array<string|number>>>}\n\t * !static getAllKeys (storeName: string|IDBIndex|IDBObjectStore, filter?: string|number|Array<string|number>) : Promise<Array<object>>;\n\t */ getAllKeys: function(storeName, filter = null) {\n this.ensureConnected();\n return new Promise((resolve, reject)=>{\n let store;\n if (typeof storeName === \"string\") store = this.db.transaction(storeName, \"readonly\").objectStore(storeName);\n else store = storeName;\n let request = store.getAllKeys(filter);\n request.onsuccess = (evt)=>{\n resolve(evt.target.result);\n };\n request.onerror = (evt)=>{\n reject(evt.target.error);\n };\n });\n },\n /**\n\t * Loads a list of records having unique values from the specified data store and returns the entire object or just the specified field.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {string} [field]\n\t * @returns {Promise<Array<number|string|object>>}\n\t * !static getAllUnique (storeName: string|IDBIndex|IDBObjectStore) : Promise<Array<number|string|object>>;\n\t */ getAllUnique: function(storeName, fieldName = null) {\n this.ensureConnected();\n return new Promise((resolve, reject)=>{\n let store;\n if (typeof storeName === \"string\") store = this.db.transaction(storeName, \"readonly\").objectStore(storeName);\n else store = storeName;\n let request = store.openCursor(null, \"nextunique\");\n let list = [];\n request.onsuccess = (event)=>{\n let cursor = event.target.result;\n if (!cursor) {\n resolve(list);\n return;\n }\n list.push(fieldName ? cursor.value[fieldName] : cursor.value);\n cursor.continue();\n };\n request.onerror = (evt)=>{\n reject(evt.target.error);\n };\n });\n },\n /**\n\t * Returns a single record from the specified data store.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {string|number|Array<string|number>} id\n\t * @returns {Promise<object>}\n\t * !static get (storeName: string|IDBIndex|IDBObjectStore, id: string|number|Array<string|number>) : Promise<object>;\n\t */ get: function(storeName, id) {\n this.ensureConnected();\n return new Promise((resolve, reject)=>{\n let store;\n if (typeof storeName === \"string\") store = this.db.transaction(storeName, \"readonly\").objectStore(storeName);\n else store = storeName;\n let request = store.get(id);\n request.onsuccess = (evt)=>{\n resolve(evt.target.result || null);\n };\n request.onerror = (evt)=>{\n reject(evt.target.error);\n };\n });\n },\n /**\n\t * Adds or overwrites a record in the specified data store (data must include the primary key).\n\t * @param {string} storeName\n\t * @param {object} data\n\t * @returns {Promise<void>}\n\t * !static put (storeName: string, data: object) : Promise<void>;\n\t */ put: function(storeName, data) {\n this.ensureConnected();\n return new Promise((resolve, reject)=>{\n let store = this.db.transaction(storeName, \"readwrite\").objectStore(storeName);\n let request = store.put(data);\n request.onsuccess = (evt)=>{\n resolve();\n };\n request.onerror = (evt)=>{\n reject(evt.target.error);\n };\n });\n },\n /**\n\t * Returns a variable from the system table.\n\t * @param {string} name - Name of the property to read.\n\t * @param {boolean} full - When `true` the entire object will be returned.\n\t * @returns {any}\n\t * !static sysGet (name: string, full?: boolean) : any;\n\t */ sysGet: async function(name, full = false) {\n let data = await this.get(\"system\", [\n name\n ]);\n return data ? full ? data : data.value : null;\n },\n /**\n\t * Writes a variable to the system table.\n\t * @param {string} name - Name of the property to write.\n\t * @param {any} value - Value to write.\n\t * @param {boolean} full - When `true` the entire value will be written as-is.\n\t * @returns {void}\n\t * !static sysPut (name: string, value: any, full?: boolean) : void;\n\t */ sysPut: async function(name, value, full = false) {\n if (full) {\n value.name = name;\n await this.put(\"system\", value);\n } else await this.put(\"system\", {\n name: name,\n value: value\n });\n },\n /**\n\t * Returns a single record from the specified data store that matches the `partial` object and does NOT match the `notPartial` object.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {object} [partial]\n\t * @param {object} [notPartial]\n\t * @returns {Promise<object>}\n\t * !static findOne (storeName: string|IDBIndex|IDBObjectStore, partial?: object, notPartial?: object) : Promise<object>;\n\t */ findOne: function(storeName, partial = null, notPartial = null) {\n this.ensureConnected();\n return new Promise((resolve, reject)=>{\n let store;\n if (typeof storeName === \"string\") store = this.db.transaction(storeName, \"readonly\").objectStore(storeName);\n else store = storeName;\n let request = store.openCursor();\n request.onsuccess = (event)=>{\n let cursor = event.target.result;\n if (!cursor) {\n resolve(null);\n return;\n }\n if (partial === null || (0, $k7heJ$Rinn).partialCompare(cursor.value, partial)) {\n if (notPartial !== null) {\n if ((0, $k7heJ$Rinn).partialCompare(cursor.value, notPartial)) {\n cursor.continue();\n return;\n }\n }\n resolve(cursor.value);\n return;\n }\n cursor.continue();\n };\n request.onerror = (evt)=>{\n reject(evt.target.error);\n };\n });\n },\n /**\n\t * Deletes a record from the specified data store.\n\t * @param {string} storeName\n\t * @param {string|number|Array<string|number>} id\n\t * @returns {Promise<void>}\n\t * !static delete (storeName: string, id: string|number|Array<string|number>) : Promise<void>;\n\t */ delete: function(storeName, id) {\n this.ensureConnected();\n return new Promise((resolve, reject)=>{\n let store = this.db.transaction(storeName, \"readwrite\").objectStore(storeName);\n let request = store.delete(id);\n request.onsuccess = (evt)=>{\n resolve();\n };\n request.onerror = (evt)=>{\n reject(evt.target.error);\n };\n });\n },\n /**\n\t * Deletes all items in the specified store.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {string|number|Array<string|number>} id\n\t * @returns {Promise<void>}\n\t * !static deleteAll (storeName: string|IDBIndex|IDBObjectStore, id: string|number|Array<string|number>) : Promise<void>;\n\t */ deleteAll: function(storeName, id = null) {\n return this.forEach(storeName, id, async (value, cursor)=>{\n await cursor.delete();\n });\n },\n /**\n\t * Inserts a new record in the specified data store.\n\t * @param {string} storeName\n\t * @param {object} data\n\t * @returns {Promise<void>}\n\t * !static insert (storeName: string, data: object) : Promise<void>;\n\t */ insert: function(storeName, data) {\n this.ensureConnected();\n return new Promise((resolve, reject)=>{\n let store = this.db.transaction(storeName, \"readwrite\").objectStore(storeName);\n let request = store.add(data);\n request.onsuccess = (evt)=>{\n resolve();\n };\n request.onerror = (evt)=>{\n reject(evt.target.error);\n };\n });\n }\n};\n\n\n//!class geo\nconst $873d1f4710ba462f$var$geo = {\n E_NONE: 0x0000,\n E_PERMISSION_DENIED: 0x8001,\n E_POSITION_UNAVAILABLE: 0x8002,\n E_TIMEOUT: 0x8003,\n E_UNSUPPORTED: 0x8004,\n E_UNKNOWN: 0x8009,\n supported: null,\n status: null,\n indicatorOn: function() {\n $parcel$global.document.documentElement.classList.add(\"busy-geo\");\n },\n indicatorOff: function() {\n $parcel$global.document.documentElement.classList.remove(\"busy-geo\");\n },\n /**\n * Initializes the geolocation interface. Returns boolean indicating whether geolocation\n * is supported on the device.\n * @returns {boolean}\n * !static init() : boolean;\n */ init: function() {\n this.supported = navigator.geolocation ? true : false;\n return this.supported;\n },\n /**\n * Single-shot positioning operation. While the geolocation operation is in progress, the `.busy-geo` CSS class\n * will be set in the `html` element. You can use this to display a spinner or other indicator.\n * @returns {Promise<GeolocationPosition>}\n * !static getCurrentPosition() : Promise<GeolocationPosition>;\n */ getCurrentPosition: function() {\n if (this.supported === null) this.init();\n let status = this.status = {\n cancelled: false\n };\n return new Promise(async (resolve, reject)=>{\n this.indicatorOn();\n if (!this.supported) {\n if (this.status === status) this.status = null;\n if (!status.cancelled) this.indicatorOff();\n reject({\n status: status,\n code: $873d1f4710ba462f$var$geo.E_UNSUPPORTED,\n message: \"Geolocation is not supported on this device.\"\n });\n return;\n }\n navigator.geolocation.getCurrentPosition((data)=>{\n if (this.status === status) this.status = null;\n if (!status.cancelled) this.indicatorOff();\n data.status = status;\n resolve(data);\n }, (err)=>{\n if (this.status === status) this.status = null;\n if (!status.cancelled) this.indicatorOff();\n let code;\n switch(err.code){\n case 0x01:\n code = $873d1f4710ba462f$var$geo.E_PERMISSION_DENIED;\n break;\n case 0x02:\n code = $873d1f4710ba462f$var$geo.E_POSITION_UNAVAILABLE;\n break;\n case 0x03:\n code = $873d1f4710ba462f$var$geo.E_TIMEOUT;\n break;\n default:\n code = $873d1f4710ba462f$var$geo.E_UNKNOWN;\n err.message = \"Unable to get the current location.\";\n break;\n }\n reject({\n status: status,\n code: code,\n message: err.message\n });\n }, {\n enableHighAccuracy: true\n });\n });\n },\n /**\n * Cancels the active positioning operation (if any).\n * !static cancel() : void;\n */ cancel: function() {\n if (this.status === null) return;\n if (!this.status.cancelled) this.indicatorOff();\n this.status.cancelled = true;\n this.status = null;\n }\n};\nvar //!/class\n$873d1f4710ba462f$export$2e2bcd8739ae039 = $873d1f4710ba462f$var$geo;\n\n\n\n\nconst $09e89c15f3c11137$export$8210dfe1863c478 = $k7heJ$Signal;\nconst $09e89c15f3c11137$export$e2ef10f86a8d60e8 = $k7heJ$signal;\nconst $09e89c15f3c11137$export$dce8637ca0d755f = $k7heJ$expr;\nconst $09e89c15f3c11137$export$3db5d71bdb2d5499 = $k7heJ$watch;\nconst $09e89c15f3c11137$export$956325f45c5d174a = $k7heJ$validator;\nconst $09e89c15f3c11137$export$cbfd4c4104bf5a27 = {\n /**\n * Special object to tag dynamic attributes.\n */ DYNAMIC: {},\n /**\n * Sets the value of a property inside an object.\n * @param {Element|Text} root\n * @param {string[]} path\n * @param {number} lastIndex\n * @param {object} value\n */ setValue: function(root, path, lastIndex, value) {\n // Rename properties `class`, `classList` to `className`.\n if (path[0] === \"class\" || path[0] === \"classList\") path[0] = \"className\";\n if (path.length > 1 && path[0] === \"trait\") {\n switch(path[1]){\n case \"value\":\n root.onchange = (e)=>value.set(e.currentTarget.value);\n $09e89c15f3c11137$export$3db5d71bdb2d5499([\n value\n ], (value)=>root.value = value);\n break;\n case \"input\":\n root.oninput = (e)=>value.set(e.currentTarget.value);\n $09e89c15f3c11137$export$3db5d71bdb2d5499([\n value\n ], (value)=>root.value = value);\n break;\n case \"checked\":\n root.onchange = (e)=>value.set(e.currentTarget.checked);\n $09e89c15f3c11137$export$3db5d71bdb2d5499([\n value\n ], (value)=>root.checked = value);\n break;\n case \"selected\":\n root.onchange = (e)=>value.set(e.currentTarget.selected);\n $09e89c15f3c11137$export$3db5d71bdb2d5499([\n value\n ], (value)=>root.selected = value);\n break;\n default:\n console.error(\"Unknown trait: \" + path[1]);\n break;\n }\n return;\n }\n // Object used to set `style` or `class` attribute.\n if (path.length === 1 && typeof value === \"object\") switch(path[0]){\n case \"style\":\n for(let i in value)$09e89c15f3c11137$export$3db5d71bdb2d5499([\n i,\n value[i]\n ], (i, value)=>root.style[i] = value);\n return;\n case \"className\":\n if (value instanceof Array) $09e89c15f3c11137$export$3db5d71bdb2d5499([\n value\n ], (value)=>{\n root.className = \"\";\n for(let i in value)root.classList.add(value[i]);\n });\n else for(let i in value)$09e89c15f3c11137$export$3db5d71bdb2d5499([\n i,\n value[i]\n ], (i, value)=>root.classList[value == true ? \"add\" : \"remove\"](i));\n return;\n }\n // Specific CSS class such as `class:hidden`.\n if (path.length === 2 && path[0] === \"className\") {\n $09e89c15f3c11137$export$3db5d71bdb2d5499([\n path[1],\n value\n ], (i, value)=>root.classList[value == true ? \"add\" : \"remove\"](i));\n return;\n }\n // Any other attribute/property.\n for(let i = 0; i < lastIndex && root; i++)root = root[path[i]];\n if (!root) return;\n let name = path[lastIndex];\n if (name.startsWith(\"on\")) name = name.toLowerCase();\n $09e89c15f3c11137$export$3db5d71bdb2d5499([\n name,\n value\n ], (name, value)=>root[name] = value);\n },\n /**\n * Creates a setter for a specified path inside an object.\n * @param {string[]} path \n * @returns {(root: Element|Text, value: object) => void}\n */ createSetter: function(path) {\n const n = path.length - 1;\n return function(root, value) {\n $09e89c15f3c11137$export$cbfd4c4104bf5a27.setValue(root, path, n, value);\n };\n },\n /**\n * Copies the event listeners and custom properties from `node` to `newNode`.\n * @param {Element} node\n * @param {Element} newNode\n * @returns {Element}\n */ copyProps: function(node, newNode) {\n // Copy property event listeners.\n for(let propName in node){\n if (!propName.startsWith(\"on\") || propName.startsWith(\"onmoz\") || !node[propName]) continue;\n newNode[propName] = node[propName];\n }\n // Copy custom properties.\n for (let propName of Object.getOwnPropertyNames(node)){\n if (~~propName == propName) continue;\n newNode[propName] = node[propName];\n }\n return newNode;\n },\n /**\n * Clones an element node and ensures certain properties are copied over.\n * @param {Element} node\n * @param {boolean} [deep=false]\n */ cloneNode: function(node, deep = false) {\n if (!deep && node.isCustom === true) throw new Error(\"cloneNode only available as deep clone for custom elements.\");\n if (deep && node.isCustom === true) return node.cloneNodeCustom();\n let newNode = node.cloneNode();\n if (deep) for (let childNode of node.childNodes)newNode.appendChild($09e89c15f3c11137$export$cbfd4c4104bf5a27.cloneNode(childNode, true));\n // Copy handlers and properties.\n $09e89c15f3c11137$export$cbfd4c4104bf5a27.copyProps(node, newNode);\n // Execute `oncreated` handler.\n if (\"oncreated\" in newNode) newNode.oncreated(newNode);\n return newNode;\n },\n /**\n * Ensures the provided value is a node or a node-compatible (such as an array of nodes).\n * @param {Node|Array<Node|string>|string} value\n * @param {boolean} [cloneNode=false]\n * @returns {Node|Array<Node>}\n */ ensureNode: function(value, cloneNode = false) {\n if (value instanceof Array) {\n for(let i = 0; i < value.length; i++)value[i] = $09e89c15f3c11137$export$cbfd4c4104bf5a27.ensureNode(value[i], cloneNode);\n return value;\n }\n if (!(value instanceof Node)) return document.createTextNode(value);\n return cloneNode ? $09e89c15f3c11137$export$cbfd4c4104bf5a27.cloneNode(value, true) : value;\n },\n /**\n * Replaces the specified refNode by a newNode and returns the new reference node.\n * @param {Node} parent\n * @param {Node|Array<Node>} refNode\n * @param {Node|Array<Node>} newNode\n * @returns {Node|Array<Node>}\n */ replaceNode: function(parent, refNode, newNode, appendChild = false) {\n // When refNode is an array, remove all those nodes but leave just one for reference.\n if (refNode instanceof Array) {\n while(refNode.length > 1){\n let tmp = refNode.shift();\n if (tmp.parentElement === parent) tmp.remove();\n }\n refNode = refNode.shift();\n }\n let newRefNode = newNode;\n let firstNode = newNode;\n // When newNode is an array, create a document fragment for faster append of all children.\n if (newNode instanceof Array) {\n let frag = document.createDocumentFragment();\n newRefNode = [];\n if (newNode.length == 0) newNode = [\n document.createTextNode(\"\")\n ];\n for(let i = 0; i < newNode.length; i++){\n newRefNode.push(newNode[i]);\n frag.appendChild(newNode[i]);\n }\n firstNode = newNode[0];\n newNode = frag;\n }\n if (appendChild === false) {\n refNode.replaceWith(newNode);\n let tmpNode = document.createComment(\"\");\n firstNode.parentElement.insertBefore(tmpNode, firstNode);\n if (!(newRefNode instanceof Array)) newRefNode = [\n newRefNode\n ];\n newRefNode.push(tmpNode);\n } else refNode.appendChild(newNode);\n return newRefNode;\n },\n /**\n * Creates a DOM node replacer.\n * @param {Element|Text|Array<Element|Text>} refNode\n * @returns {(root: Element|Text, newNode: any) => void}\n */ createReplacer: function(refNode) {\n return function(root, newNode) {\n refNode = $09e89c15f3c11137$export$cbfd4c4104bf5a27.replaceNode(root, refNode, $09e89c15f3c11137$export$cbfd4c4104bf5a27.ensureNode(newNode));\n };\n },\n /**\n * Creates a function that builds an element.\n * @param {string} tagName - Tag of the element to create.\n * @param {array} attributes - Array of name-value pairs. When dynamic attributes are present use the helpers.DYNAMIC as value placeholder.\n * @param {Array<Element|Text|string|null>} children - When dynamic children are present use the placeholder `null`.\n * @returns { (runtimeAttributeValues: Array<string>, runtimeChildren: Array<Element|Text|Array<Element|Text>>) => HTMLElement }\n */ create: function(tagName, attributes, children) {\n // Attach static attributes.\n let baseElement = document.createElement(tagName);\n let dynamicAttributes = [];\n for(let i = 0; i < attributes.length; i += 2){\n let path = null;\n if (attributes[i].indexOf(\":\") !== -1) path = attributes[i].split(\":\");\n else path = [\n attributes[i]\n ];\n if (attributes[i + 1] !== $09e89c15f3c11137$export$cbfd4c4104bf5a27.DYNAMIC) {\n $09e89c15f3c11137$export$cbfd4c4104bf5a27.setValue(baseElement, path, path.length - 1, attributes[i + 1]);\n continue;\n }\n dynamicAttributes.push($09e89c15f3c11137$export$cbfd4c4104bf5a27.createSetter(path));\n }\n // Attach static children.\n let dynamicChildrenIndices = [];\n let dynamicBuild = false;\n let firstBuild = true;\n // Get indices of dynamic children and detect if any child is a custom element.\n for(let i in children){\n if (children[i].isCustom === true) dynamicBuild = true;\n if (children[i] === $09e89c15f3c11137$export$cbfd4c4104bf5a27.DYNAMIC) dynamicChildrenIndices.push(i);\n }\n // Create and return the element builder fuction.\n const N = dynamicAttributes.length;\n const M = dynamicChildrenIndices.length;\n return function(runtimeDynamicAttributes, runtimeChildren, spreadAttributes = null) {\n const getElement = (runtimeChildren, originalElement = null)=>{\n let elem = null;\n if (firstBuild || dynamicBuild) {\n let target = dynamicBuild ? $09e89c15f3c11137$export$cbfd4c4104bf5a27.cloneNode(baseElement) : baseElement;\n for(let i in children){\n if (children[i] instanceof Array) throw new Error(\"Document fragments not fully supported!\");\n $09e89c15f3c11137$export$cbfd4c4104bf5a27.replaceNode(target, target, $09e89c15f3c11137$export$cbfd4c4104bf5a27.ensureNode(children[i], true), true);\n }\n if (dynamicBuild) elem = target;\n firstBuild = false;\n }\n if (elem === null) elem = $09e89c15f3c11137$export$cbfd4c4104bf5a27.cloneNode(baseElement, true);\n const hadOnCreated = \"oncreated\" in elem;\n const dynamicChildren = dynamicChildrenIndices.map((idx)=>$09e89c15f3c11137$export$cbfd4c4104bf5a27.createReplacer(elem.childNodes[idx]));\n for(let i = 0; i < N; i++)dynamicAttributes[i](elem, runtimeDynamicAttributes[i]);\n for(let i = 0; i < M; i++)$09e89c15f3c11137$export$3db5d71bdb2d5499([\n runtimeChildren[i],\n i\n ], (val, i)=>dynamicChildren[i](elem, val));\n if (spreadAttributes !== null) {\n for (let attributes of spreadAttributes)for(let i in attributes){\n let path = null;\n if (i.indexOf(\":\") !== -1) path = i.split(\":\");\n else path = [\n i\n ];\n $09e89c15f3c11137$export$cbfd4c4104bf5a27.setValue(elem, path, path.length - 1, attributes[i]);\n }\n }\n if (originalElement !== null) $09e89c15f3c11137$export$cbfd4c4104bf5a27.copyProps(originalElement, elem);\n if (!hadOnCreated && \"oncreated\" in elem) elem.oncreated(elem);\n if (\"onlongpress\" in elem) elem.dataset.longPress = \"true\";\n elem.isCustom = true;\n elem.cloneNode = ()=>{\n throw new Error(\"Use of cloneNode is forbidden in custom elements, use cloneNodeCustom instead.\");\n };\n elem.cloneNodeCustom = ()=>{\n return getElement(runtimeChildren.map((e)=>e instanceof Node && e.isCustom === true ? e.cloneNodeCustom() : e), elem);\n };\n return elem;\n };\n return getElement(runtimeChildren);\n };\n }\n};\n\n\nconst $9ffb7151b8b2d038$export$55185c17a0fcbe46 = (0, $7718a52dfca15325$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$db77ccec0bb4ccac = (0, $5808f050ebbd5b77$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$9864de54bd63ed8a = (0, $5808f050ebbd5b77$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$bf71da7aebe9ddc1 = (0, $d584b999ce7bb535$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$accd73d198d77d2f = (0, $fe13c50c6c3e66d8$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$d3568da47c78d35c = (0, $52a9c945778cbfd0$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$cea96571ebbff9dd = (0, $0a74aeaee0e1468a$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$deefd61317ad2797 = (0, $54865aa6b345efd5$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$3abb4be70fa2c84e = (0, $5c1b3a60e2432554$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$d2ca453b913dcdea = (0, $a86ae7da7dd6c514$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$f932f06c7eb6abeb = (0, $5c284bd1d2bc0d7d$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$9388fcd1771be726 = (0, $873d1f4710ba462f$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$eefcfe56efaaa57d = $k7heJ$Rinn;\nconst $9ffb7151b8b2d038$export$4c85e640eb41c31b = $k7heJ$Class;\nconst $9ffb7151b8b2d038$export$d61e24a684f9e51 = $k7heJ$Event;\nconst $9ffb7151b8b2d038$export$ec8b666c5fe2c75a = $k7heJ$EventDispatcher;\nconst $9ffb7151b8b2d038$export$a1edc412be3e1841 = $k7heJ$Model;\nconst $9ffb7151b8b2d038$export$59eced47f477f85a = $k7heJ$ModelList;\nconst $9ffb7151b8b2d038$export$19342e026b58ebb7 = $k7heJ$Schema;\nconst $9ffb7151b8b2d038$export$3a9581c9ade29768 = $k7heJ$Flattenable;\nconst $9ffb7151b8b2d038$export$fb8073518f34e6ec = $k7heJ$Collection;\nconst $9ffb7151b8b2d038$export$14416b8d99d47caa = $k7heJ$Template;\n\n\nexport {$9ffb7151b8b2d038$export$55185c17a0fcbe46 as Router, $9ffb7151b8b2d038$export$db77ccec0bb4ccac as Element, $9ffb7151b8b2d038$export$9864de54bd63ed8a as CElement, $9ffb7151b8b2d038$export$bf71da7aebe9ddc1 as Api, $9ffb7151b8b2d038$export$accd73d198d77d2f as DataSource, $9ffb7151b8b2d038$export$d3568da47c78d35c as DataList, $9ffb7151b8b2d038$export$cea96571ebbff9dd as Easing, $9ffb7151b8b2d038$export$deefd61317ad2797 as Anim, $9ffb7151b8b2d038$export$3abb4be70fa2c84e as Elements, $9ffb7151b8b2d038$export$d2ca453b913dcdea as Utils, $9ffb7151b8b2d038$export$f932f06c7eb6abeb as db, $9ffb7151b8b2d038$export$9388fcd1771be726 as geo, $9ffb7151b8b2d038$export$eefcfe56efaaa57d as Rinn, $9ffb7151b8b2d038$export$4c85e640eb41c31b as Class, $9ffb7151b8b2d038$export$d61e24a684f9e51 as Event, $9ffb7151b8b2d038$export$ec8b666c5fe2c75a as EventDispatcher, $9ffb7151b8b2d038$export$a1edc412be3e1841 as Model, $9ffb7151b8b2d038$export$59eced47f477f85a as ModelList, $9ffb7151b8b2d038$export$19342e026b58ebb7 as Schema, $9ffb7151b8b2d038$export$3a9581c9ade29768 as Flattenable, $9ffb7151b8b2d038$export$fb8073518f34e6ec as Collection, $9ffb7151b8b2d038$export$14416b8d99d47caa as Template, $09e89c15f3c11137$export$e2ef10f86a8d60e8 as signal, $09e89c15f3c11137$export$dce8637ca0d755f as expr, $09e89c15f3c11137$export$3db5d71bdb2d5499 as watch, $09e89c15f3c11137$export$956325f45c5d174a as validator, $09e89c15f3c11137$export$cbfd4c4104bf5a27 as helpers};\n//# sourceMappingURL=riza.m.js.map\n","\nimport _Router from './router.js'; export const Router = _Router;\n//![import \"./router\"]\nimport _Element from './element.js'; export const Element = _Element; export const CElement = _Element;\n//![import \"./element\"]\nimport _Api from './api.js'; export const Api = _Api;\n//![import \"./api\"]\nimport _DataSource from './data-source.js'; export const DataSource = _DataSource;\n//![import \"./data-source\"]\nimport _DataList from './data-list.js'; export const DataList = _DataList;\n//![import \"./data-list\"]\nimport _Easing from './easing.js'; export const Easing = _Easing;\n//![import \"./easing\"]\nimport _Anim from './anim.js'; export const Anim = _Anim;\n//![import \"./anim\"]\nimport _Elements from './elements.js'; export const Elements = _Elements;\n//![import \"./elements\"]\nimport _Utils from './utils.js'; export const Utils = _Utils;\n//![import \"./utils\"]\n\nimport _db from './db.js'; export const db = _db;\n//![import \"./db\"]\nimport _geo from './geo.js'; export const geo = _geo;\n//![import \"./geo\"]\n\nimport * as _Rinn from 'rinn';\nexport const Rinn = _Rinn.Rinn;\nexport const Class = _Rinn.Class;\nexport const Event = _Rinn.Event;\nexport const EventDispatcher = _Rinn.EventDispatcher;\nexport const Model = _Rinn.Model;\nexport const ModelList = _Rinn.ModelList;\nexport const Schema = _Rinn.Schema;\nexport const Flattenable = _Rinn.Flattenable;\nexport const Collection = _Rinn.Collection;\nexport const Template = _Rinn.Template;\n\nexport { signal, expr, watch, validator, helpers } from './runtime-jsx';\n","\r\nimport { EventDispatcher } from 'rinn';\r\n\r\n/*\r\n**\tThe Router is a special module that detects local URL changes (when a hash-change occurs) and\r\n**\tforwards events to the appropriate handlers.\r\n*/\r\n\r\nconst _Router =\r\n{\r\n Route: EventDispatcher.extend\r\n ({\r\n /*\r\n **\tRegular expression for the route. This is generated from a simpler expression provided\r\n **\tin the constructor.\r\n */\r\n routeRegex: null,\r\n\r\n /*\r\n **\tOriginal route string value.\r\n */\r\n value: null,\r\n\r\n /*\r\n **\tMap with the indices and the names of each paremeter obtained from the route expression.\r\n */\r\n params: null,\r\n\r\n /*\r\n **\tArguments obtained from the current route (uses `params` to determine name of arguments).\r\n */\r\n args: null,\r\n\r\n /*\r\n **\tArguments string obtained from the last route dispatch. Used to check if the arguments changed.\r\n */\r\n s_args: null,\r\n\r\n /*\r\n **\tIndicates if the route is active because of a past positive dispatch.\r\n */\r\n active: false,\r\n\r\n /*\r\n **\tIndicates if the params have changed since last event. Transition from inactive to active route will always set this value to true.\r\n */\r\n changed: false,\r\n\r\n /*\r\n **\tConstructor of the route, the specified argument is a route expression.\r\n **\r\n **\t>> void __ctor (string route);\r\n */\r\n __ctor: function (route)\r\n {\r\n this._super.EventDispatcher.__ctor();\r\n this._compileRoute (this.value = route);\r\n },\r\n\r\n /*\r\n **\tTransforms the specified route expression into a regular expression and a set of parameter\r\n **\tnames and stores them in the 'param' array.\r\n **\r\n **\t>> void _compileRoute (string route);\r\n */\r\n _compileRoute: function (route)\r\n {\r\n this.params = [];\r\n\r\n route = route.replace(/\\/\\*\\//g, '/.+/');\r\n\r\n while (true)\r\n {\r\n let m = /:([!@A-Za-z0-9_-]+)/.exec(route);\r\n if (!m) break;\r\n \r\n route = route.replace(m[0], '([^/]+)');\r\n this.params.push (m[1]);\r\n }\r\n\r\n this.routeRegex = '^' + route.replace(/##/g, '');\r\n },\r\n\r\n /*\r\n **\tAdds a handler to the route dispatcher. The handler can be removed later using removeHandler and\r\n **\tspecifying the same parameters. If unrouted boolean is specified the event to listen to will be\r\n **\tthe unrouted event (when the route changes and the route is not activated).\r\n **\r\n **\tvoid addHandler (handler: function, unrouted: bool, context:object=null);\r\n */\r\n addHandler: function (handler, unrouted=false, context=null)\r\n {\r\n this.addEventListener ((unrouted === true ? 'un' : '') + 'routed', handler, context);\r\n },\r\n\r\n /*\r\n **\tRemoves a handler from the route dispatcher.\r\n **\r\n **\tvoid removeHandler (handler: function, unrouted: bool, context: object=null);\r\n */\r\n removeHandler: function (handler, unrouted=false, context=null)\r\n {\r\n this.removeEventListener ((unrouted === true ? 'un' : '') + 'routed', handler, context);\r\n },\r\n\r\n /*\r\n **\tVerifies if the specified route matches the internal route and if so dispatches a (depends on doUnroute parameter) \"routed\" or \"unrouted\" event with the\r\n **\tparameters obtained from the location to all attached handlers.\r\n **\r\n **\tvoid dispatch (route:string, doUnroute:bool);\r\n */\r\n dispatch: function (route)\r\n {\r\n let matches = route.match(this.routeRegex);\r\n if (!matches)\r\n {\r\n this.s_args = null;\r\n\r\n if (this.active)\r\n this.dispatchEvent ('unrouted', { route: this });\r\n\r\n this.active = false;\r\n return;\r\n }\r\n\r\n let args = { route: this };\r\n let str = '';\r\n\r\n for (let i = 0; i < this.params.length; i++)\r\n {\r\n args[this.params[i]] = matches[i+1];\r\n str += '_' + matches[i+1];\r\n }\r\n\r\n this.changed = str != this.s_args;\r\n this.s_args = str;\r\n\r\n this.dispatchEvent ('routed', this.args = args);\r\n this.active = true;\r\n }\r\n }),\r\n\r\n /*\r\n **\tMap with route objects. The key of the map is the route and the value a handler.\r\n */\r\n routes: { },\r\n\r\n /*\r\n **\tSorted list of routes. Smaller routes are processed first than larger ones. This array stores\r\n **\tonly the keys to the Router.routes map.\r\n */\r\n sortedRoutes: [ ],\r\n\r\n /*\r\n **\tIndicates the number of times the onLocationChanged handler should ignore the hash change event.\r\n */\r\n ignoreHashChangeEvent: 0,\r\n\r\n /*\r\n **\tCurrent relative location (everything after the location hash symbol).\r\n */\r\n location: '',\r\n\r\n /*\r\n **\tCurrent relative location as an array of elements (obtained by splitting the location by slash).\r\n */\r\n args: [],\r\n\r\n /*\r\n **\tInitializes the router module. Ensure to call `refresh` once to force a hashchange when the page loads.\r\n */\r\n init: function ()\r\n {\r\n if (this.alreadyAttached)\r\n return;\r\n\r\n this.alreadyAttached = true;\r\n\r\n if ('onhashchange' in globalThis) {\r\n globalThis.onhashchange = this.onLocationChanged.bind(this);\r\n\r\n this.location = globalThis.location.hash.substring(1);\r\n this.args = this.location.split ('/');\r\n }\r\n },\r\n\r\n /*\r\n **\tRefreshes the current route by forcing a hashchange event.\r\n */\r\n refresh: function () {\r\n this.onLocationChanged();\r\n },\r\n\r\n /*\r\n **\tChanges the current location and optionally prevents a trigger of the hashchange event.\r\n */\r\n setRoute: function (route, silent)\r\n {\r\n let location = this.realLocation (route);\r\n if (location == this.location) return;\r\n\r\n if (silent) this.ignoreHashChangeEvent++;\r\n globalThis.location.hash = location;\r\n },\r\n\r\n /*\r\n **\tAdds the specified route to the routing map. When the specified route is detected, the `onRoute` handler will be called, and then\r\n **\twhen the route exits `onUnroute` will be called.\r\n */\r\n addRoute: function (route, onRoute, onUnroute=null)\r\n {\r\n if (!this.routes[route]) {\r\n this.routes[route] = new this.Route (route);\r\n this.sortedRoutes.push (route);\r\n\r\n this.sortedRoutes.sort ((a, b) => {\r\n return this.routes[a].routeRegex.length - this.routes[b].routeRegex.length;\r\n });\r\n }\r\n\r\n if (onUnroute !== null) {\r\n this.routes[route].addHandler (onRoute, false);\r\n this.routes[route].addHandler (onUnroute, true);\r\n }\r\n else\r\n this.routes[route].addHandler (onRoute, false);\r\n\r\n return this.routes[route];\r\n },\r\n\r\n /*\r\n **\tReturns the Route object for the specified route.\r\n */\r\n getRoute: function (route)\r\n {\r\n if (!this.routes[route])\r\n {\r\n this.routes[route] = new this.Route (route);\r\n this.sortedRoutes.push (route);\r\n\r\n this.sortedRoutes.sort ((a, b) => {\r\n return this.routes[a].routeRegex.length - this.routes[b].routeRegex.length;\r\n });\r\n }\r\n\r\n return this.routes[route];\r\n },\r\n\r\n /*\r\n **\tAdds the specified routes to the routing map. The routes map should contain the route expression\r\n **\tin the key of the map and a handler function in the value.\r\n */\r\n addRoutes: function (routes)\r\n {\r\n for (let i in routes)\r\n {\r\n if (!this.routes[i]) {\r\n this.routes[i] = new this.Route (i);\r\n this.sortedRoutes.push (i);\r\n }\r\n\r\n this.routes[i].addHandler (routes[i], false);\r\n }\r\n\r\n this.sortedRoutes.sort ((a, b) => {\r\n return this.routes[a].routeRegex.length - this.routes[b].routeRegex.length;\r\n });\r\n },\r\n\r\n /*\r\n **\tRemoves the specified route from the routing map.\r\n */\r\n removeRoute: function (route, onRoute, onUnroute)\r\n {\r\n if (!this.routes[route]) return;\r\n\r\n if (onUnroute !== undefined) {\r\n this.routes[route].removeHandler (onRoute, false);\r\n this.routes[route].removeHandler (onUnroute, true);\r\n }\r\n else\r\n this.routes[route].removeHandler (onRoute);\r\n },\r\n\r\n /*\r\n **\tRemoves the specified routes from the routing map. The routes map should contain the route\r\n **\texpression in the key of the map and a handler function in the value.\r\n */\r\n removeRoutes: function (routes)\r\n {\r\n for (let i in routes)\r\n {\r\n if (!this.routes[i]) continue;\r\n this.routes[i].removeHandler (routes[i]);\r\n }\r\n },\r\n\r\n /*\r\n **\tGiven a formatted location and a previous one it will return the correct real location.\r\n */\r\n realLocation: function (cLocation, pLocation)\r\n {\r\n if (!pLocation) pLocation = this.location;\r\n if (!pLocation) pLocation = ' ';\r\n\r\n let state = 0, i = 0, j = 0, k;\r\n let rLocation = '';\r\n\r\n while (state != -1 && i < cLocation.length && j < pLocation.length)\r\n {\r\n switch (state)\r\n {\r\n case 0:\r\n if (cLocation.substr(i++, 1) == '*') {\r\n state = 1;\r\n break;\r\n }\r\n\r\n if (cLocation.substr(i-1, 1) != pLocation.substr(j++, 1)) {\r\n rLocation += cLocation.substr(i-1);\r\n state = -1;\r\n break;\r\n }\r\n\r\n rLocation += pLocation.substr(j-1, 1);\r\n break;\r\n\r\n case 1:\r\n if (cLocation.substr(i, 1) == '*') {\r\n state = 3;\r\n i++;\r\n break;\r\n }\r\n\r\n state = 2;\r\n break;\r\n\r\n case 2:\r\n k = pLocation.indexOf(cLocation.substr(i, 1), j);\r\n if (k == -1) {\r\n rLocation += pLocation.substr(j) + cLocation.substr(i);\r\n state = -1;\r\n break;\r\n }\r\n\r\n rLocation += pLocation.substr(j, k-j);\r\n\r\n state = 0;\r\n j = k;\r\n break;\r\n\r\n case 3:\r\n k = pLocation.lastIndexOf(cLocation.substr(i, 1));\r\n if (k == -1) {\r\n rLocation += cLocation.substr(i);\r\n state = -1;\r\n break;\r\n }\r\n\r\n rLocation += pLocation.substr(j, k-j);\r\n\r\n state = 0;\r\n j = k;\r\n break;\r\n }\r\n }\r\n\r\n if (state != -1)\r\n rLocation += cLocation.substr(i);\r\n\r\n return rLocation.trim();\r\n },\r\n\r\n /*\r\n **\tEvent handler called when the location hash changes.\r\n */\r\n onLocationChanged: function ()\r\n {\r\n if (this.prevLocation !== this.location)\r\n this.prevLocation = this.location;\r\n\r\n let cLocation = globalThis.location.hash.substring(1);\r\n let rLocation = this.realLocation(cLocation);\r\n\r\n if (cLocation !== rLocation) {\r\n globalThis.location.replace('#' + rLocation);\r\n return;\r\n }\r\n\r\n this.location = cLocation;\r\n this.args = this.location.split ('/');\r\n\r\n if (this.ignoreHashChangeEvent > 0) {\r\n this.ignoreHashChangeEvent--;\r\n return;\r\n }\r\n\r\n for (let i = 0; i < this.sortedRoutes.length; i++)\r\n this.routes[this.sortedRoutes[i]].dispatch (this.location);\r\n },\r\n\r\n /*\r\n **\tNavigates to the given hash-based URL.\r\n */\r\n navigate: function (location, replace=false)\r\n {\r\n location = this.realLocation(location);\r\n\r\n if (globalThis.location.hash == '#'+location) {\r\n this.refresh();\r\n return;\r\n }\r\n\r\n if (replace)\r\n globalThis.location.replace('#'+location);\r\n else\r\n globalThis.location.hash = location;\r\n }\r\n};\r\n\r\n_Router.init();\r\nexport default _Router;\r\n","\nimport { Rinn, Model, Template } from 'rinn';\nimport Router from './router.js';\n\n/**\n * Map containing the original prototypes for all registered elements.\n */\nconst elementPrototypes = { };\n\n/**\n * Map containing the final classes for all registered elements.\n */\nconst elementClasses = { };\n\n/**\n * Contains the state of the current long-press operation.\n */\nlet longPressState = { elem: null, state: null };\n\n/**\n * Base class for custom elements. Provides support for model-triggered events, easy definition of handlers for events originated in\n * self or child-elements, and several utility methods.\n */\n\nconst Element = \n{\n /**\n * Internal element ID. Added as namespace to model events. Ensures that certain model events are run locally only, not affecting other event handlers.\n */\n eid: null,\n\n /**\n * Indicates if the element is a root element, that is, the target element to attach child elements having `data-ref` attribute.\n */\n isRoot: false,\n\n /**\n * Root element to which this element is attached (when applicable).\n */\n root: null,\n\n /**\n * Indicates ready-state of the element. Possible values are: 0: \"Not ready\", 1: \"Children Initialized\", and 2: \"Parent Ready\".\n */\n isReady: 0,\n readyReenter: 0,\n readyLocked: 0,\n\n /**\n * Model type (class) for the element's model.\n */\n modelt: Model,\n\n /**\n * Data model related to the element.\n */\n model: null,\n\n /**\n * Contents of the element. When set, the innerHTML will be set to this value.\n */\n contents: null,\n\n /**\n * \tEvents map.\n */\n events:\n {\n 'mousedown [data-long-press]': function (evt)\n {\n evt.continuePropagation = true;\n if (longPressState.state) return;\n evt.continuePropagation = false;\n\n let elem = evt.source;\n longPressState.elem = elem;\n longPressState.state = setTimeout(() =>\n {\n let dx = elem._pos_fx - elem._pos_sx;\n let dy = elem._pos_fy - elem._pos_sy;\n longPressState.state = null;\n\n let d = Math.sqrt(dx*dx + dy*dy);\n if (d < 5 && longPressState.elem === elem) {\n longPressState.state = false;\n this.dispatchOn(elem, 'long-press');\n }\n },\n 500);\n\n elem._pos_sx = evt.clientX;\n elem._pos_sy = evt.clientY;\n elem._pos_fx = evt.clientX;\n elem._pos_fy = evt.clientY;\n },\n\n 'mousemove [data-long-press]': function (evt)\n {\n evt.continuePropagation = true;\n if (!longPressState.state) return;\n evt.continuePropagation = false;\n\n evt.source._pos_fx = evt.clientX;\n evt.source._pos_fy = evt.clientY;\n },\n\n 'mouseup [data-long-press]': function (evt)\n {\n if (longPressState.state === false)\n return;\n\n if (longPressState.state) {\n clearTimeout(longPressState.state);\n longPressState.state = null;\n }\n\n if (longPressState.elem === evt.source)\n this.dispatchOn(evt.source, 'short-press', [], false);\n },\n\n 'touchstart [data-long-press]': function (evt)\n {\n evt.continuePropagation = true;\n if (longPressState.state) return;\n\n let elem = evt.source;\n longPressState.elem = elem;\n longPressState.state = setTimeout(() => {\n let dx = elem._pos_fx - elem._pos_sx;\n let dy = elem._pos_fy - elem._pos_sy;\n longPressState.state = null;\n\n let d = Math.sqrt(dx*dx + dy*dy);\n if (d < 5 && longPressState.elem === elem) {\n longPressState.state = false;\n this.dispatchOn(elem, 'long-press');\n }\n }, 500);\n\n elem._pos_sx = evt.touches[0].clientX;\n elem._pos_sy = evt.touches[0].clientY;\n elem._pos_fx = evt.touches[0].clientX;\n elem._pos_fy = evt.touches[0].clientY;\n },\n\n 'touchmove [data-long-press]': function (evt)\n {\n evt.continuePropagation = true;\n if (!longPressState.state) return;\n\n evt.source._pos_fx = evt.touches[0].clientX;\n evt.source._pos_fy = evt.touches[0].clientY;\n },\n\n 'touchend [data-long-press]': function (evt)\n {\n if (longPressState.state === false)\n return;\n \n if (longPressState.state) {\n clearTimeout(longPressState.state);\n longPressState.state = null;\n }\n\n if (longPressState.elem === evt.source)\n this.dispatchOn(evt.source, 'short-press', null, false);\n },\n\n 'click [data-action]': function(evt)\n {\n if (longPressState.state === false)\n return;\n\n let opts = evt.source.dataset.action.split(' ');\n\n if (opts[0] in this)\n this[opts[0]] ({ ...evt.params, ...evt.source.dataset, ...opts, length: opts.length }, evt);\n else\n evt.continuePropagation = true;\n },\n\n 'long-press [data-long-press]': function(evt)\n {\n let opts = evt.source.dataset.longPress.split(' ');\n\n if (opts[0] in this)\n this[opts[0]] ({ ...evt.params, ...evt.source.dataset, ...opts, length: opts.length }, evt);\n else\n evt.continuePropagation = true;\n },\n\n 'keyup(13) input[data-enter]': function(evt)\n {\n let opts = evt.source.dataset.enter.split(' ');\n\n if (opts[0] in this)\n this[opts[0]] ({ ...evt.params, ...evt.source.dataset, ...opts, length: opts.length }, evt);\n else\n evt.continuePropagation = true;\n }\n },\n\n /**\n * Internal routes map, set by `bindRoutes`.\n */\n routes: null,\n\n /**\n * \tElement constructor.\n */\n __ctor: function()\n {\n this._list_watch = [];\n this._list_visible = [];\n this._list_attr = [];\n this._list_property = [];\n\n if ('root' in this.dataset)\n this.isRoot = this.dataset.root === 'true';\n\n this.style.display = 'block';\n\n this.eid = Math.random().toString().substr(2);\n\n if (this.model != null)\n {\n let tmp = this.model;\n this.model = null;\n this.setModel (tmp, false);\n }\n\n Object.keys(this._super).reverse().forEach(i =>\n {\n if ('init' in this._super[i])\n this._super[i].init();\n });\n\n if (Element.debug)\n console.log('>> ' + this.tagName + ' INIT ON ' + this.parentElement.tagName);\n\n this.init();\n\n if (this.events)\n this.bindEvents (this.events);\n\n if (this.contents)\n this.setInnerHTML(this.contents);\n\n setTimeout(() => {\n if (this.tagName.toLowerCase() !== 'r-dom-probe')\n this.appendChild(document.createElement('r-dom-probe'));\n else\n this.markReady();\n }, 0);\n },\n\n /**\n * \tInitializes the element. Called after construction of the instance.\n */\n init: function()\n {\n },\n\n /**\n * \tExecuted when the children of the element are ready.\n */\n ready: function()\n {\n },\n\n /**\n * \tExecuted after ready and after the root is also ready.\n */\n rready: function()\n {\n },\n\n /**\n * \tMarks the element as ready.\n */\n markReady: function (list=null)\n {\n this.readyLocked++;\n\n if (!this.isReady)\n {\n this.isReady = 1;\n\n // Set model is `model` property was set in the element.\n if ('model' in this.dataset) {\n let ref = this.getFieldByPath(this.dataset.model);\n if (ref) this.setModel(ref);\n }\n\n // Run ready methods in class hierarchy.\n Object.keys(this._super).reverse().forEach(i =>\n {\n if ('ready' in this._super[i])\n this._super[i].ready();\n });\n\n if (Element.debug)\n console.log('>> ' + this.tagName + ' READY');\n\n this.ready();\n this.trigger('ready').dispatch('_ready', null, false);\n\n this.collectWatchers();\n }\n else\n this.collectWatchers();\n\n let root = this.findCustomParent(this);\n\n if (Element.debug)\n console.log(this.tagName + ' ROOT IS ' + (root ? root.tagName : 'NULL'));\n\n if (root && root.isReady === 0 && this.isReady != 0)\n root.checkReady();\n\n let rootReady = false;\n\n if (root && root.isReady === 2 && this.isReady !== 2)\n {\n this.getRoot();\n if (this.root && this.dataset.ref)\n {\n if (Element.debug)\n console.log(this.tagName + ' REF AS `' + this.dataset.ref + '` ON ' + this.root.tagName);\n\n this.root[this.dataset.ref] = this;\n this.root.onRefAdded (this.dataset.ref, this);\n }\n\n rootReady = true;\n }\n\n if (!root && this.isReady !== 2) {\n rootReady = true;\n }\n\n if (rootReady)\n {\n this.isReady = 2;\n\n if (list !== null) {\n for (let elem of list)\n elem.checkReady();\n }\n\n if (Element.debug)\n console.log('>> ' + this.tagName + ' RREADY');\n\n Object.keys(this._super).reverse().forEach(i => {\n if ('rready' in this._super[i])\n this._super[i].rready();\n });\n\n this.rready();\n this.trigger('rootready');\n }\n\n this.readyLocked--;\n\n if (this.readyReenter && !this.readyLocked) {\n this.readyReenter = false;\n this.checkReady();\n }\n\n if (this.tagName.toLowerCase() === 'r-dom-probe')\n this.remove();\n },\n\n /**\n *\tChecks if all children are ready and fires the appropriate function (`ready` and/or `rready`).\n */\n checkReady: function()\n {\n if (this.childNodes.length == 0)\n return;\n\n if (this.readyLocked)\n {\n this.readyReenter = true;\n return;\n }\n\n let isReady = true;\n let list = [];\n\n let result = document.evaluate(\".//*[contains(name(),'-')]\", this, null, XPathResult.ANY_TYPE, null);\n\n if (Element.debug)\n console.log('# CHECKING ' + this.tagName);\n\n while (true)\n {\n let elem = result.iterateNext();\n if (!elem) break;\n\n if (elem === this)\n continue;\n\n let root = this.findCustomParent(elem);\n if (root !== this) continue;\n\n if (Element.debug)\n console.log(' ' + elem.tagName + ' = ' + elem.isReady);\n\n if (!elem.isReady)\n isReady = false;\n\n list.push(elem);\n }\n\n if (!isReady) return;\n\n this.markReady(list);\n },\n\n /**\n * \tReturns the value of a field given its path. Starts from `global`, unless the first item in the path is `this`, in which case it will start from the element.\n */\n getFieldByPath: function(path)\n {\n if (!path) return null;\n\n if (typeof(path) !== 'string')\n return path;\n\n let tmp = path.split('.');\n let ref = global;\n\n if (tmp.length && tmp[0] == 'this')\n {\n ref = this;\n tmp.shift();\n }\n\n if (tmp.length && tmp[0] == 'root')\n {\n ref = this.getRoot();\n tmp.shift();\n }\n\n while (ref != null && tmp.length != 0)\n ref = ref[tmp.shift()];\n\n return ref;\n },\n\n /**\n * \tReturns the root of the element (that is, the `root` property). If not set it will attempt to find the root first.\n */\n getRoot: function() {\n return this.root ? this.root : (this.root = this.findRoot());\n },\n\n /**\n * \tSets the model of the element and executes the `modelChanged` event handler (unless `update` is set to false).\n */\n setModel: function (model, update=true)\n {\n if (!model) return this;\n\n model = Rinn.ensureTypeOf(this.modelt, model);\n\n if (this.model !== model)\n {\n if (this.model != null)\n {\n this.model.removeEventListener (this.eid+':modelChanged', this.onModelPreChanged, this);\n this.model.removeEventListener (this.eid+':propertyChanging', this.onModelPropertyChanging, this);\n this.model.removeEventListener (this.eid+':propertyChanged', this.onModelPropertyPreChanged, this);\n this.model.removeEventListener (this.eid+':propertyRemoved', this.onModelPropertyRemoved, this);\n }\n\n this.model = model;\n\n this.model.addEventListener (this.eid+':modelChanged', this.onModelPreChanged, this);\n this.model.addEventListener (this.eid+':propertyChanging', this.onModelPropertyChanging, this);\n this.model.addEventListener (this.eid+':propertyChanged', this.onModelPropertyPreChanged, this);\n this.model.addEventListener (this.eid+':propertyRemoved', this.onModelPropertyRemoved, this);\n }\n\n if (update !== false)\n this.model.setNamespace(this.eid).update(true).setNamespace(null);\n\n return this;\n },\n\n /**\n * \tReturns the model of the element. Added for symmetry only, exactly the same as accesing public property `model` of this class.\n */\n getModel: function ()\n {\n return this.model;\n },\n\n /**\n * \tAdds one or more CSS classes (separated by space) to the element.\n */\n addClass: function (classString)\n {\n if (!classString) return this;\n\n classString.split(' ').forEach(i =>\n {\n i = i.trim();\n if (!i) return;\n\n if (i[0] == '-' || i[0] == '+')\n this.classList[i[0] == '-' ? 'remove' : 'add'](i.substr(1));\n else\n this.classList.add(i);\n });\n\n return this;\n },\n\n /**\n * \tRemoves one or more CSS classes (separated by space) from the element.\n */\n removeClass: function (classString)\n {\n if (!classString) return this;\n\n classString.split(' ').forEach(i =>\n {\n i = i.trim();\n if (!i) return;\n\n if (i[0] == '-' || i[0] == '+')\n this.classList[i[0] == '-' ? 'remove' : 'add'](i.substr(1));\n else\n this.classList.remove(i);\n });\n\n return this;\n },\n\n /**\n * \tSets one or more style properties to the element (separated by semi-colon).\n */\n setStyle: function (styleString)\n {\n if (!styleString) return this;\n\n styleString.split(';').forEach(i => {\n let j = (i = i.trim()).indexOf(':');\n if (j == -1) return;\n\n let name = i.substr(0, j).trim();\n for (let k = name.indexOf('-'); k != -1; k = name.indexOf('-')) {\n name = name.substr(0, k) + name.substr(k+1, 1).toUpperCase() + name.substr(k+2);\n }\n\n this.style[name] = i.substr(j+1).trim();\n });\n\n return this;\n },\n\n /**\n * \tReturns the width of the specified element (or of itself it none provided), uses `getBoundingClientRect`.\n */\n getWidth: function (elem=null)\n {\n return (elem || this).getBoundingClientRect().width;\n },\n\n /**\n * \tReturns the height of the specified element (or of itself it none provided), uses `getBoundingClientRect`.\n */\n getHeight: function (elem=null)\n {\n return (elem || this).getBoundingClientRect().height;\n },\n\n /**\n **\tBinds all events in the specified map to the element, the events map can have one of the following forms:\n **\n **\t\t\"click .button\": \"doSomething\",\t\t(Delegated Event)\n **\t\t\"click .button\": function() { },\t(Delegated Event)\n **\t\t\"myevt &this\": \"...\",\t\t\t\t(Self Event)\n **\t\t\"myevt\": \"...\",\t\t\t\t\t\t(Element Event)\n **\t\t\"myevt @objName\": \"...\",\t\t\t(EventDispatcher Event)\n **\t\t\"#propname\": \"...\",\t\t\t\t\t(Property Changed Event)\n **\t\t\"keyup(10) .input\": \"...\"\t\t\t(Delegated Event with Parameters)\n **\n **\t>> Element bindEvents (object events);\n */\n bindEvents: function (events)\n {\n for (let evtstr in events)\n {\n let hdl = events[evtstr];\n\n if (Rinn.typeOf(hdl) == 'string')\n hdl = this[hdl];\n\n hdl = hdl.bind(this);\n\n var i = evtstr.indexOf(' ');\n\n var name = i == -1 ? evtstr : evtstr.substr(0, i);\n var selector = i == -1 ? '' : evtstr.substr(i + 1);\n\n let args = null;\n\n var j = name.indexOf('(');\n if (j != -1)\n {\n args = name.substr(j+1, name.length-j-2).split(',');\n name = name.substr(0, j);\n }\n\n if (selector[0] == '@')\n {\n if (selector != '@this')\n {\n this[selector.substr(1)].addEventListener(name, hdl);\n continue;\n }\n\n selector = this;\n }\n else if (selector[0] == '&')\n {\n if (selector != '&this')\n selector = \"[data-ref='\"+selector.substr(1)+\"']\";\n else\n selector = this;\n }\n\n if (name.substr(0, 1) == '#')\n {\n this.listen('propertyChanged.'+name.substr(1), this, hdl);\n continue;\n }\n\n if (args != null)\n {\n switch (name)\n {\n case 'keyup': case 'keydown':\n this.listen(name, selector, function (evt)\n {\n if (Rinn.indexOf(args, evt.keyCode.toString()) != -1)\n return hdl (evt, args);\n\n evt.continuePropagation = true;\n });\n\n continue;\n }\n }\n\n this.listen(name, selector, hdl);\n }\n\n return this;\n },\n\n /**\n **\tBinds all routes in the specified map to the Router object.\n **\n **\t\t\"route-path\": \"doSomething\"\t\t\t\t\t\tOn-Route\n **\t\t\"route-path\": function (evt, args) { }\t\t\tOn-Route\n **\t\t\"!route-path\": \"doSomething\"\t\t\t\t\tOn-UnRoute\n **\t\t\"!route-path\": function (evt, args) { }\t\t\tOn-UnRoute\n **\n **\t>> Element bindRoutes ();\n */\n bindRoutes: function ()\n {\n if (!this.routes)\n return;\n\n for (let routeStr in this.routes)\n {\n let route = routeStr[0] === '!' ? Router.getRoute(routeStr.substr(1)) : Router.getRoute(routeStr);\n let handler = this.routes[routeStr];\n\n if (Rinn.typeOf(handler) === 'string')\n handler = this[handler];\n\n if (routeStr[0] === '!')\n route.addHandler(handler, true, this);\n else\n route.addHandler(handler, false, this);\n }\n },\n\n /**\n * Unbinds all routes added by bindRoutes.\n */\n unbindRoutes: function ()\n {\n if (!this.routes)\n return;\n\n for (let routeStr in this.routes)\n {\n let route = routeStr[0] === '!' ? Router.getRoute(routeStr.substr(1)) : Router.getRoute(routeStr);\n let handler = this.routes[routeStr];\n\n if (Rinn.typeOf(handler) === 'string')\n handler = this[handler];\n\n if (routeStr[0] === '!')\n route.removeHandler(handler, true, this);\n else\n route.removeHandler(handler, false, this);\n }\n },\n\n /**\n **\tExecutes the underlying event handler given an event and a selector. Called internally by listen().\n **\n **\t>> void _eventHandler (event evt, string selector, function handler);\n */\n _eventHandler: function (evt, selector, handler)\n {\n if (evt.continuePropagation === false)\n return;\n\n evt.continuePropagation = true;\n evt.source = evt.target;\n\n if (selector && selector instanceof HTMLElement)\n {\n if (evt.source === selector)\n {\n evt.continuePropagation = false;\n\n if (handler.call (this, evt, evt.detail) === true)\n evt.continuePropagation = true;\n }\n }\n else if (selector && selector != '*')\n {\n let elems = this.querySelectorAll(selector);\n\n while (evt.source !== this)\n {\n let i = Rinn.indexOf (elems, evt.source, true);\n if (i !== -1)\n {\n evt.continuePropagation = false;\n\n if (handler.call (this, evt, evt.detail) === true)\n evt.continuePropagation = true;\n\n break;\n }\n else\n {\n evt.source = evt.source.parentElement;\n }\n }\n }\n else\n {\n evt.continuePropagation = false;\n\n if (handler.call (this, evt, evt.detail) === true)\n evt.continuePropagation = true;\n }\n\n if (evt.continuePropagation === false)\n {\n evt.preventDefault();\n evt.stopPropagation();\n }\n },\n\n /**\n **\tListens for an event on elements matching the specified selector, returns an object with a single method `remove` used\n **\tto remove the listener when it is no longer needed.\n **\n **\t>> object listen (string eventName, string selector, function handler);\n **\t>> object listen (string eventName, function handler);\n */\n listen: function (eventName, selector, handler)\n {\n let eventCatcher = false;\n let eventImmediate = false;\n\n if (Rinn.typeOf(selector) == 'function') {\n handler = selector;\n selector = null;\n }\n\n if (eventName[eventName.length-1] == '!') {\n eventName = eventName.substr(0, eventName.length-1);\n eventCatcher = true;\n }\n\n if (eventName[0] == '!') {\n eventName = eventName.substr(1);\n eventImmediate = true;\n }\n\n let callback0 = null;\n let callback1 = null;\n let self = this;\n\n this.addEventListener(eventName, callback0 = (evt) =>\n {\n if (evt.continuePropagation === false)\n return;\n\n if (!evt.firstCapture) {\n evt.firstCapture = this;\n evt.firstCaptureCount = 0;\n evt.queue = [];\n }\n\n if (evt.firstCapture === this)\n evt.firstCaptureCount++;\n\n if (eventCatcher == true)\n evt.queue.push([this, selector, handler]);\n\n if (eventImmediate == true)\n this._eventHandler(evt, selector, handler);\n },\n true);\n\n this.addEventListener (eventName, callback1 = (evt) =>\n {\n if (evt.continuePropagation === false)\n return;\n\n if (eventCatcher !== true && eventImmediate !== true)\n this._eventHandler(evt, selector, handler);\n\n if (evt.firstCapture === this && evt.continuePropagation !== false)\n {\n if (--evt.firstCaptureCount == 0)\n {\n while (evt.queue.length) {\n let q = evt.queue.pop();\n q[0]._eventHandler(evt, q[1], q[2]);\n }\n\n evt.continuePropagation = false;\n }\n }\n },\n false);\n\n return {\n removed: false,\n remove: function() {\n if (this.removed) return;\n this.removed = true;\n self.removeEventListener(eventName, callback0, true);\n self.removeEventListener(eventName, callback1, false);\n }\n };\n },\n\n /**\n **\tCreates an event object for later dispatch.\n */\n createEventObject: function(eventName, args, bubbles)\n {\n let evt;\n\n if (eventName == 'click')\n evt = new MouseEvent(eventName, { bubbles: bubbles, detail: args });\n else\n evt = new CustomEvent (eventName, { bubbles: bubbles, detail: args });\n\n return evt;\n },\n\n /**\n **\tDispatches a new event with the specified name and the given arguments.\n */\n dispatch: function (eventName, args=null, bubbles=true)\n {\n let propName = 'on' + eventName.toLowerCase();\n if (propName in this) {\n this[propName] (args, this);\n return this;\n }\n\n this.dispatchEvent(this.createEventObject(eventName, args, bubbles));\n return this;\n },\n\n /**\n **\tDispatches a local event, does not bubble up and invokes only the local event handler if present.\n */\n trigger: function (eventName, args=null)\n {\n let propName = 'on' + eventName.replace(/-/g, '').toLowerCase();\n if (!(propName in this)) return this;\n\n this[propName] (args, this);\n return this;\n },\n\n /**\n **\tDispatches a new event on the specified element with the given name and arguments (uses `CustomEvent`).\n */\n dispatchOn: function (elem, eventName, args=null, bubbles=true)\n {\n let propName = 'on' + eventName.replace(/-/g, '').toLowerCase();\n if (propName in elem) {\n elem[propName] (args, elem);\n return this;\n }\n\n elem.dispatchEvent(this.createEventObject(eventName, args, bubbles));\n return this;\n },\n\n /**\n **\tSets the innerHTML property of the element and runs some post set-content tasks.\n */\n setInnerHTML: function (value) {\n this.readyLocked++;\n this.innerHTML = value;\n this.readyLocked--;\n return this;\n },\n\n /**\n **\tCollects all watchers (data-watch, data-visible, data-attr, data-property), that depend on the model, should be invoked when the\n ** structure of the element changed (added/removed children). This is automatically called when the setInnerHTML method is called.\n **\n **\tNote that for 3rd party libs that add children to this element (which could probably have a watcher) will possibly result in\n **\tduplication of the added elements when compiling the innerHTML template. To prevent this add the 'pseudo' CSS class to any\n **\telement that should not be added to the HTML template.\n **\n **\t>> void collectWatchers ();\n */\n collectWatchers: function ()\n {\n let self = this;\n let modified = false;\n let list;\n\n if (!this.isRoot) return;\n\n let _list_watch_length = this._list_watch.length;\n let _list_visible_length = this._list_visible.length;\n let _list_attr_length = this._list_attr.length;\n let _list_property_length = this._list_property.length;\n\n /* *** */\n list = this.querySelectorAll('[data-watch]');\n for (let i = 0; i < list.length; i++)\n {\n for (let j of list[i].querySelectorAll('.pseudo'))\n j.remove();\n\n list[i]._template = Template.compile(list[i].innerHTML);\n list[i]._watch = new RegExp('^(' + list[i].dataset.watch + ')$');\n list[i].innerHTML = '';\n\n list[i].removeAttribute('data-watch');\n this._list_watch.push(list[i]);\n }\n\n if ('selfWatch' in this.dataset)\n {\n for (let j of this.querySelectorAll('.pseudo'))\n j.remove();\n\n this._template = Template.compile(this.innerHTML);\n this._watch = new RegExp('^(' + this.dataset.selfWatch + ')$');\n this.innerHTML = '';\n\n this.removeAttribute('data-self-watch');\n this._list_watch.push(this);\n }\n\n /* *** */\n list = this.querySelectorAll('[data-visible]');\n for (let i = 0; i < list.length; i++)\n {\n list[i]._visible = Template.compile(list[i].dataset.visible);\n\n list[i].removeAttribute('data-visible');\n this._list_visible.push(list[i]);\n }\n\n if ('selfVisible' in this.dataset)\n {\n this._visible = Template.compile(this.dataset.selfVisible);\n\n this.removeAttribute('data-self-visible');\n this._list_visible.push(this);\n }\n\n /* *** */\n list = this.querySelectorAll('[data-attr]');\n for (let i = 0; i < list.length; i++)\n {\n list[i]._attr = [];\n\n for (let j of list[i].dataset.attr.split(';'))\n {\n j = j.split(':');\n if (j.length != 2) continue;\n\n list[i]._attr.push({\n name: j[0].trim(),\n value: Template.compile(j[1].trim())\n });\n }\n\n list[i].removeAttribute('data-attr');\n this._list_attr.push(list[i]);\n }\n\n if ('selfAttr' in this.dataset)\n {\n this._attr = [];\n\n for (let j of this.dataset.selfAttr.split(';'))\n {\n j = j.split(':');\n if (j.length != 2) continue;\n\n this._attr.push({\n name: j[0].trim(),\n value: Template.compile(j[1].trim())\n });\n }\n\n this.removeAttribute('data-self-attr');\n this._list_attr.push(this);\n }\n\n /* *** */\n list = this.querySelectorAll('[data-property]');\n for (let i = 0; i < list.length; i++)\n {\n list[i].onchange = list[i].onblur = function()\n {\n switch (this.type)\n {\n case 'radio':\n if (this.checked) self.getModel().set(this.name, this.value);\n break;\n\n case 'checkbox':\n self.getModel().set(this.name, this.checked ? '1' : '0');\n break;\n\n case 'field':\n self.getModel().set(this.name, this.getValue());\n break;\n\n default:\n self.getModel().set(this.name, this.value);\n break;\n }\n };\n\n if (list[i].tagName == 'SELECT')\n {\n list[i].onmouseup = function()\n {\n self.getModel().set(this.name, this.value);\n };\n }\n\n list[i].name = list[i].dataset.property;\n\n list[i].removeAttribute('data-property');\n this._list_property.push(list[i]);\n }\n\n if ('selfProperty' in this.dataset)\n {\n this.onchange = this.onblur = function()\n {\n switch (this.type)\n {\n case 'radio':\n if (this.checked) self.getModel().set(this.name, this.value);\n break;\n\n case 'checkbox':\n self.getModel().set(this.name, this.checked ? '1' : '0');\n break;\n\n case 'field':\n self.getModel().set(this.name, this.getValue());\n break;\n\n default:\n self.getModel().set(this.name, this.value);\n break;\n }\n };\n\n if (this.tagName == 'SELECT') {\n this.onmouseup = function() {\n self.getModel().set(this.name, this.value);\n };\n }\n\n this.name = this.dataset.selfProperty;\n\n this.removeAttribute('data-self-property');\n this._list_property.push(this);\n }\n\n /* *** */\n this._list_watch = this._list_watch.filter(i => i.parentElement != null);\n if (_list_watch_length != this._list_watch.length) modified = true;\n\n this._list_visible = this._list_visible.filter(i => i.parentElement != null);\n if (_list_visible_length != this._list_visible.length) modified = true;\n\n this._list_attr = this._list_attr.filter(i => i.parentElement != null);\n if (_list_attr_length != this._list_attr.length) modified = true;\n\n this._list_property = this._list_property.filter(i => i.parentElement != null);\n if (_list_property_length != this._list_property.length) modified = true;\n\n if (this.model != null && modified)\n this.model.setNamespace(this.eid).update(true).setNamespace(null);\n },\n\n /**\n **\tExecuted when the element is created and yet not attached to the DOM tree.\n */\n onCreated: function()\n {\n },\n\n /**\n * Executes the callback (just once) when the element is ready.\n * @param {function} callback \n * @returns {Element}\n */\n whenReady: function(callback)\n {\n if (this.isReady) {\n callback();\n return this;\n }\n\n let hdl = this.listen('_ready', this, () => {\n hdl.remove();\n callback();\n });\n\n return this;\n },\n\n /**\n * Executed when the element is attached to the DOM tree.\n */\n elementConnected: function()\n {\n this.bindRoutes();\n this.onConnected();\n this.trigger('connected');\n },\n\n /**\n * Executed when the element is no longer a part of the DOM tree.\n */\n elementDisconnected: function()\n {\n this.unbindRoutes();\n this.onDisconnected();\n this.trigger('disconnected');\n },\n\n /**\n **\tExecuted when the element is attached to the DOM tree.\n */\n onConnected: function()\n {\n },\n\n /**\n **\tExecuted when the element is no longer a part of the DOM tree.\n */\n onDisconnected: function()\n {\n },\n\n /**\n **\tExecuted on the root element when a child element has `data-ref` attribute and it was added to it.\n */\n onRefAdded: function (name, element)\n {\n },\n\n /**\n **\tExecuted on the root element when a child element has `data-ref` attribute and it was removed from it.\n */\n onRefRemoved: function (name, element)\n {\n },\n\n /**\n **\tEvent handler invoked when the model has changed, executed before onModelChanged() to update internal dependencies,\n **\tshould not be overriden or elements watching the model will not be updated.\n **\n **\t>> void onModelPreChanged (evt, args);\n */\n onModelPreChanged: function (evt, args)\n {\n let data = this.getModel().get();\n\n for (let i = 0; i < this._list_watch.length; i++)\n {\n for (let j of args.fields)\n {\n if (!this._list_watch[i]._watch.test(j))\n continue;\n\n this._list_watch[i].innerHTML = this._list_watch[i]._template(data);\n break;\n }\n }\n\n for (let i = 0; i < this._list_visible.length; i++)\n {\n if (!!this._list_visible[i]._visible(data, 'arg'))\n this._list_visible[i].style.removeProperty('display');\n else\n this._list_visible[i].style.setProperty('display', 'none', 'important');\n }\n\n for (let i = 0; i < this._list_attr.length; i++)\n {\n for (let j of this._list_attr[i]._attr)\n this._list_attr[i][j.name] = j.value(data, 'arg');\n }\n\n this.onModelChanged(evt, args);\n },\n\n /**\n **\tEvent handler invoked when the model has changed.\n */\n onModelChanged: function (evt, args) // @override\n {\n },\n\n /**\n **\tEvent handler invoked when a property of the model is changing. Fields `name` and `value` can be found in the `args` object.\n */\n onModelPropertyChanging: function (evt, args) // @override\n {\n },\n\n /**\n **\tEvent handler invoked when a property of the model has changed, executed before onModelPropertyChanged() to update internal\n **\tdependencies. Automatically triggers internal events named `propertyChanged.<propertyName>` and `propertyChanged`.\n **\tShould not be overriden or elements depending on the property will not be updated.\n */\n onModelPropertyPreChanged: function (evt, args)\n {\n for (let i = 0; i < this._list_property.length; i++)\n {\n if (this._list_property[i].name == args.name)\n {\n let trigger = true;\n\n switch (this._list_property[i].type)\n {\n case 'radio':\n if (this._list_property[i].value != args.value)\n {\n this._list_property[i].parentElement.classList.remove('active');\n continue;\n }\n\n this._list_property[i].checked = true;\n this._list_property[i].parentElement.classList.add('active');\n break;\n\n case 'checkbox':\n if (~~args.value)\n {\n this._list_property[i].checked = true;\n this._list_property[i].parentElement.classList.add('active');\n }\n else\n {\n this._list_property[i].checked = false;\n this._list_property[i].parentElement.classList.remove('active');\n }\n\n break;\n\n case 'field':\n this._list_property[i].val = this._list_property[i].dataset.value = args.value;\t\n this._list_property[i].setValue (args.value);\n trigger = false;\n break;\n\n default:\n this._list_property[i].value = args.value;\n this._list_property[i].val = this._list_property[i].dataset.value = args.value;\t\n\n if (this._list_property[i].value != args.value)\n trigger = false;\n\n break;\n }\n\n if (trigger && this._list_property[i].onchange)\n this._list_property[i].onchange();\n }\n }\n\n this.dispatch('propertyChanged.' + args.name, args, false);\n this.dispatch('propertyChanged', args, false);\n this.onModelPropertyChanged(evt, args);\n },\n\n /**\n **\tEvent handler invoked when a property of the model has changed.\n */\n onModelPropertyChanged: function (evt, args) // @override\n {\n },\n\n /**\n **\tEvent handler invoked when a property of the model is removed. Field `name` can be found in the `args` object.\n */\n onModelPropertyRemoved: function (evt, args) // @override\n {\n },\n\n /*\n **\tRuns the following preparation procedures on the specified prototype:\n **\t\t- All functions named 'event <event-name> [event-selector]' will be moved to the 'events' map.\n **\t\t- All functions named 'route <route-path>' will be moved to the 'routes' map.\n **\n **\t>> void preparePrototype (object proto);\n */\n preparePrototype: function (proto)\n {\n if (proto.__prototypePrepared === true)\n return;\n\n proto.__prototypePrepared = true;\n\n if (!proto.hasOwnProperty('events') || !proto.events)\n proto.events = { };\n\n if (!proto.hasOwnProperty('routes') || !proto.routes)\n proto.routes = { };\n\n for (let i in proto)\n {\n if (i.startsWith('event '))\n {\n proto.events[i.substr(6)] = proto[i];\n delete proto[i];\n }\n else if (i.startsWith('route '))\n {\n proto.routes[i.substr(6)] = proto[i];\n delete proto[i];\n }\n }\n },\n\n /*\n **\tRegisters a new custom element with the specified name. Extra functionality can be added with one or more prototypes, by default\n **\tall elements also get the `Element` prototype. Note that the final prototypes of all registered elements are stored, and if you want\n **\tto inherit another element's prototype just provide its name (string) in the protos argument list.\n **\n **\t>> class register (string name, ...(object|string) protos);\n */\n register: function (name, ...protos)\n {\n if ('riza_element_prefix' in globalThis)\n name = name.replace('r-', globalThis['riza_element_prefix'] + '-');\n\n const newElement = class extends HTMLElement\n {\n constructor()\n {\n super();\n this.invokeConstructor = true;\n\n if (Element.debug)\n console.log('CREATED ' + this.tagName);\n\n this._super = { };\n\n for (let i of Object.entries(this.constructor.prototype._super))\n {\n this._super[i[0]] = { };\n\n for (let j of Object.entries(i[1])) {\n this._super[i[0]][j[0]] = j[1].bind(this);\n }\n }\n\n this.onCreated();\n }\n\n findRoot (srcElement=null)\n {\n let elem = srcElement ? srcElement : this.parentElement;\n\n while (elem != null)\n {\n if ('isRoot' in elem && elem.isRoot === true)\n return elem;\n\n elem = elem.parentElement;\n }\n\n return null;\n }\n\n findCustomParent (srcElement=null)\n {\n let elem = srcElement ? srcElement.parentElement : this.parentElement;\n\n while (elem != null)\n {\n if (elem.tagName.indexOf('-') !== -1)\n return elem;\n\n elem = elem.parentElement;\n }\n\n return null;\n }\n\n connectReference (root=null, flags=255)\n {\n if (!this.root && (flags & 1) == 1)\n {\n if (root == null) root = this.findRoot();\n if (root != null)\n {\n if (this.dataset.ref)\n root[this.dataset.ref] = this;\n\n this.root = root;\n }\n }\n }\n\n connectedCallback ()\n {\n this.connectReference(null, 1);\n\n if (this.invokeConstructor)\n {\n this.invokeConstructor = false;\n this.__ctor();\n }\n\n this.connectReference(null, 2);\n this.elementConnected();\n\n if (this.dataset.xref)\n globalThis[this.dataset.xref] = this;\n }\n\n disconnectedCallback()\n {\n if (this.root)\n {\n if (this.dataset.ref)\n {\n this.root.onRefRemoved (this.dataset.ref, this);\n\n delete this.root[this.dataset.ref];\n }\n\n this.root = null;\n }\n\n this.elementDisconnected();\n\n if (this.dataset.xref)\n delete globalThis[this.dataset.xref];\n }\n };\n\n Rinn.override (newElement.prototype, Element);\n\n const proto = { };\n const _super = { };\n const events = Rinn.clone(Element.events);\n\n let __init = true;\n let __ready = true;\n let __rready = true;\n let __check;\n\n for (let i = 0; i < protos.length; i++)\n {\n if (!protos[i]) continue;\n\n if (Rinn.typeOf(protos[i]) == 'string')\n {\n const name = protos[i];\n\n protos[i] = elementPrototypes[name];\n if (!protos[i]) continue;\n\n _super[name] = { };\n\n for (let f in protos[i])\n {\n if (Rinn.typeOf(protos[i][f]) != 'function')\n continue;\n\n _super[name][f] = protos[i][f];\n }\n\n __init = false;\n __ready = false;\n __rready = false;\n __check = false;\n }\n else\n {\n Element.preparePrototype(protos[i]);\n __check = true;\n }\n\n if ('_super' in protos[i])\n Rinn.override (_super, protos[i]._super);\n\n if ('events' in protos[i])\n Rinn.override (events, protos[i].events);\n\n Rinn.override (newElement.prototype, protos[i]);\n Rinn.override (proto, protos[i]);\n\n if (__check)\n {\n if (!__init && 'init' in protos[i]) __init = true;\n if (!__ready && 'ready' in protos[i]) __ready = true;\n if (!__rready && 'rready' in protos[i]) __rready = true;\n }\n }\n\n let dummy = function(){};\n\n if (!__init)\n {\n newElement.prototype.init = dummy;\n proto.init = dummy;\n }\n\n if (!__ready)\n {\n newElement.prototype.ready = dummy;\n proto.ready = dummy;\n }\n\n if (!__rready)\n {\n newElement.prototype.rready = dummy;\n proto.rready = dummy;\n }\n\n newElement.prototype._super = _super;\n newElement.prototype.events = events;\n\n proto._super = _super;\n proto.events = events;\n\n customElements.define (name, newElement);\n\n elementPrototypes[name] = proto;\n elementClasses[name] = newElement;\n\n return newElement;\n },\n\n /*\n **\tExpands an already created custom element with the specified prototype(s).\n **\n **\t>> void expand (string elementName, ...object protos);\n */\n expand: function (name, ...protos)\n {\n if (!(name in elementPrototypes))\n return;\n\n const self = elementPrototypes[name];\n const elem = elementClasses[name];\n\n const _super = self._super;\n const events = self.events;\n\n for (let proto of protos)\n {\n Element.preparePrototype(proto);\n\n if ('_super' in proto)\n Rinn.override (_super, proto._super);\n\n if ('events' in proto)\n Rinn.override (events, proto.events);\n\n Rinn.override (elem.prototype, proto);\n Rinn.override (self, proto);\n }\n\n elem.prototype._super = _super;\n elem.prototype.events = events;\n\n self._super = _super;\n self.events = events;\n },\n\n /*\n **\tAppends a hook to a function of a custom element.\n */\n hookAppend: function (name, functionName, newFunction)\n {\n if (!(name in elementPrototypes))\n return;\n\n let hook1 = Rinn.hookAppend(elementPrototypes[name], functionName, newFunction);\n let hook2 = Rinn.hookAppend(elementClasses[name].prototype, functionName, newFunction);\n\n return { \n unhook: function() {\n hook1.unhook();\n hook2.unhook();\n }\n };\n },\n\n /*\n **\tPrepends a hook to a function of a custom element.\n */\n hookPrepend: function (name, functionName, newFunction)\n {\n if (!(name in elementPrototypes))\n return;\n\n let hook1 = Rinn.hookPrepend(elementPrototypes[name], functionName, newFunction);\n let hook2 = Rinn.hookPrepend(elementClasses[name].prototype, functionName, newFunction);\n\n return { \n unhook: function() {\n hook1.unhook();\n hook2.unhook();\n }\n };\n },\n\n /**\n **\tBuilt-in action handlers.\n */\n\n /**\n **\t:toggleClass <className> [<selector>]\n **\n **\tToggles a CSS class on the element.\n */\n ':toggleClass': function (args, evt)\n {\n let elem = evt.source;\n\n if ('2' in args)\n elem = document.querySelector(args[2]);\n\n if (!elem) return;\n\n if (elem.classList.contains(args[1]))\n elem.classList.remove(args[1]);\n else\n elem.classList.add(args[1]);\n },\n\n /**\n **\t:setClass <className> [<selector>]\n **\n **\tSets a CSS class on the element.\n */\n ':setClass': function (args, evt)\n {\n let elem = evt.source;\n\n if ('2' in args)\n elem = document.querySelector(args[2]);\n\n if (!elem) return;\n\n elem.classList.add(args[1]);\n },\n\n /**\n **\t:volatileClass <className> [<selector>]\n **\n **\tAdds the CSS class to the element and any click outside will cause it to be removed.\n */\n ':volatileClass': function (args, evt)\n {\n let elem = evt.source;\n\n if ('2' in args)\n elem = document.querySelector(args[2]);\n\n if (!elem) return;\n\n elem.classList.add(args[1]);\n\n let fn = () => {\n window.removeEventListener('click', fn, true);\n elem.classList.remove(args[1]);\n };\n\n window.addEventListener('click', fn, true);\n },\n\n /**\n **\t:toggleClassUnique <className> <parentSelector> <childSelector>\n **\n **\tToggles a CSS class on the element and only one element in the selected parent can have the class.\n */\n ':toggleClassUnique': function (args, evt)\n {\n let elem = evt.source;\n if (!elem) return;\n\n if (elem.classList.contains(args[1]))\n {\n elem.classList.remove(args[1]);\n }\n else\n {\n elem.querySelectorParent(args[2]).querySelectorAll(args[3]).forEach(elem => elem.classList.remove(args[1]));\n elem.classList.add(args[1]);\n }\n },\n\n /**\n **\t:setClassUnique <className> <parentSelector> <childSelector>\n **\n **\tSets a CSS class on the element and only that element in the selected parent can have the class.\n */\n ':setClassUnique': function (args, evt)\n {\n let elem = evt.source;\n if (!elem) return;\n\n elem.querySelectorParent(args[2]).querySelectorAll(args[3]).forEach(elem => elem.classList.remove(args[1]));\n elem.classList.add(args[1]);\n }\n};\n\nElement.debug = false;\n\nElement.register('r-elem', {\n});\n\nElement.register ('r-dom-probe', {\n});\n\n/* ****************************************** */\n\n/**\n * Finds the parent element given a selector.\n */\nHTMLElement.prototype.querySelectorParent = function (selector)\n{\n let elem = this;\n\n while (elem != null)\n {\n if (elem.matches(selector))\n break;\n\n elem = elem.parentElement;\n }\n\n return elem;\n};\n\nexport default Element;\n","\r\nimport base64 from 'base-64';\r\n\r\n/**\r\n * API interface utility functions.\r\n */\r\n\r\nconst Api =\r\n{\r\n /**\r\n * Flags constants.\r\n */\r\n REQUEST_PACKAGE_SUPPORTED:\t0x01,\r\n REQ64_SUPPORTED: \t\t\t0x02,\r\n JSON_RESPONSE_SUPPORTED: \t0x04,\r\n XML_RESPONSE_SUPPORTED: \t0x08,\r\n INCLUDE_CREDENTIALS:\t\t0x10,\r\n UNIQUE_STAMP:\t\t\t\t0x20,\r\n DISABLE_CORS:\t\t\t\t0x40,\r\n WIND_V3: 0x80,\r\n\r\n /**\r\n * Target URL for all the API requests. Set by calling `setEndPoint`.\r\n */\r\n apiUrl: \"/api\",\r\n\r\n /**\r\n * Capabilities flag.\r\n */\r\n flags: 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20,\r\n\r\n /**\r\n * Indicates if all request data will be packed into a req64 parameter instead of individual fields.\r\n */\r\n useReq64: false,\r\n\r\n /**\r\n * Number of retries to execute each API call before giving up and invoking error handlers.\r\n */\r\n retries: 0,\r\n\r\n /**\r\n * Headers for the request.\r\n */\r\n headers: { },\r\n\r\n /**\r\n * Level of the current request. Used to detect nested requests.\r\n */\r\n _requestLevel: 0,\r\n\r\n /**\r\n * Indicates if all API calls should be bundled in a request package. Activated by calling the packageBegin() function and finished with packageEnd().\r\n */\r\n _requestPackage: 0,\r\n\r\n /**\r\n * When in package-mode, this contains the package data to be sent upon a call to packageEnd().\r\n */\r\n _packageData: [],\r\n\r\n /**\r\n * Sets the API end-point URL address.\r\n */\r\n setEndPoint: function (apiUrl, flags=null)\r\n {\r\n this.apiUrl = apiUrl;\r\n this.flags = flags ?? this.flags;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Overridable filter that processes the response from the server and returns true if it was successful. The `res` parameter indicates the response data, and `req` the request data.\r\n */\r\n responseFilter: function (res, req)\r\n {\r\n return true;\r\n },\r\n\r\n /**\r\n * Starts \"package-mode\" (using the `rpkg` field). Any API calls after this will be bundled together.\r\n */\r\n packageBegin: function ()\r\n {\r\n if (!(this.flags & Api.REQUEST_PACKAGE_SUPPORTED))\r\n return;\r\n\r\n this._requestPackage++;\r\n },\r\n\r\n /**\r\n * Finishes \"package-mode\" and a single API request with the currently constructed package will be sent.\r\n */\r\n packageEnd: function (callback)\r\n {\r\n if (!(this.flags & Api.REQUEST_PACKAGE_SUPPORTED))\r\n return;\r\n\r\n if (!this._requestPackage)\r\n return;\r\n\r\n if (--this._requestPackage)\r\n return;\r\n\r\n this.packageSend(callback);\r\n },\r\n\r\n /**\r\n * Starts package-mode, executes the callback and finishes package-mode. Therefore any requests made by the callback will be packed together.\r\n */\r\n batch: function (callback, responseCallback=null)\r\n {\r\n if (!(this.flags & Api.REQUEST_PACKAGE_SUPPORTED))\r\n {\r\n callback();\r\n if (responseCallback) responseCallback();\r\n return;\r\n }\r\n\r\n this.packageBegin();\r\n callback();\r\n this.packageEnd(responseCallback);\r\n },\r\n\r\n /**\r\n * Sends a single API request with the currently constructed package and maintains package-mode.\r\n */\r\n packageSend: function (callback)\r\n {\r\n if (!(this.flags & Api.REQUEST_PACKAGE_SUPPORTED))\r\n return;\r\n\r\n if (!this._packageData.length)\r\n return;\r\n\r\n let _packageData = this._packageData;\r\n this._packageData = [];\r\n\r\n var rpkg = \"\";\r\n\r\n for (var i = 0; i < _packageData.length; i++)\r\n rpkg += \"r\"+i+\",\"+base64.encode(this.encodeParams(_packageData[i][2]))+\";\";\r\n\r\n this._showProgress();\r\n\r\n this.apiCall (\r\n { rpkg: rpkg },\r\n\r\n (res, req) =>\r\n {\r\n this._hideProgress();\r\n\r\n for (let i = 0; i < _packageData.length; i++)\r\n {\r\n try\r\n {\r\n var response = res[\"r\"+i];\r\n if (!response)\r\n {\r\n if (_packageData[i][1] != null) _packageData[i][1] (_packageData[i][2]);\r\n continue;\r\n }\r\n\r\n if (_packageData[i][0] != null)\r\n {\r\n if (this.responseFilter (response, _packageData[i][2]))\r\n {\r\n _packageData[i][0] (response, _packageData[i][2]);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n }\r\n }\r\n\r\n if (callback) callback();\r\n },\r\n\r\n (req) =>\r\n {\r\n this._hideProgress();\r\n\r\n for (let i = 0; i < _packageData.length; i++)\r\n {\r\n if (_packageData[i][1] != null) _packageData[i][1] (_packageData[i][2]);\r\n }\r\n }\r\n );\r\n },\r\n\r\n /**\r\n * Adds CSS class 'busy' to the HTML root element, works only if running inside a browser.\r\n */\r\n _showProgress: function ()\r\n {\r\n if ('document' in global) {\r\n this._requestLevel++;\r\n if (this._requestLevel > 0) global.document.documentElement.classList.add('busy');\r\n }\r\n },\r\n\r\n /**\r\n * Removes the 'busy' CSS class from the HTML element.\r\n */\r\n _hideProgress: function ()\r\n {\r\n if ('document' in global)\r\n {\r\n this._requestLevel--;\r\n if (this._requestLevel) return;\r\n\r\n setTimeout(() => {\r\n if (this._requestLevel === 0)\r\n global.document.documentElement.classList.remove('busy');\r\n }, 250);\r\n }\r\n },\r\n\r\n /**\r\n * Sets an HTTP header.\r\n */\r\n header: function (name, value)\r\n {\r\n if (value === null)\r\n delete this.headers[name];\r\n else\r\n this.headers[name] = value;\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * Returns a parameter string for a GET request given an object with fields.\r\n */\r\n encodeParams: function (obj)\r\n {\r\n let s = [];\r\n\r\n if (obj instanceof FormData)\r\n {\r\n for (let i of obj.entries())\r\n s.push(encodeURIComponent(i[0]) + '=' + encodeURIComponent(i[1]));\r\n }\r\n else\r\n {\r\n for (let i in obj)\r\n s.push(encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]));\r\n }\r\n\r\n return s.join('&');\r\n },\r\n\r\n /**\r\n * Returns a URL given a relative or absolute URL.\r\n */\r\n getUrl: function (url)\r\n {\r\n if (url.indexOf('//') !== -1)\r\n return url;\r\n\r\n return this.apiUrl + url;\r\n },\r\n\r\n /**\r\n * Appends a parameter to the URL.\r\n */\r\n appendParam: function (url, param)\r\n {\r\n return url + (url.indexOf('?') == -1 ? '?' : '&') + param;\r\n },\r\n\r\n /**\r\n * Executes an API call to the URL stored in the `apiUrl` property. By default `httpMethod` is \"auto\", which will determine the best depending on the data to\r\n * be sent. Any connection error will be reported to the `failure` callback, and similarly any success to the `success` callback. The `params` object can be\r\n * a FormData object or just a regular object.\r\n */\r\n apiCall: function (params, success, failure, httpMethod=null, retries=null, relativeUrl='')\r\n {\r\n let url = this.getUrl(relativeUrl ?? '');\r\n\r\n if (this.flags & Api.UNIQUE_STAMP)\r\n url = this.appendParam(url, '_='+Date.now());\r\n\r\n httpMethod = httpMethod ? httpMethod.toUpperCase() : null;\r\n if (httpMethod === null) httpMethod = 'auto';\r\n\r\n if (retries === null)\r\n retries = this.retries;\r\n\r\n if (this._requestPackage && (this.flags & Api.REQUEST_PACKAGE_SUPPORTED))\r\n {\r\n if (!(params instanceof FormData))\r\n params = {...params};\r\n\r\n this._packageData.push([success, failure, params]);\r\n return;\r\n }\r\n\r\n this._showProgress();\r\n\r\n let data = params;\r\n\r\n let options =\r\n {\r\n mode: this.flags & Api.DISABLE_CORS ? 'no-cors' : 'cors',\r\n headers: {\r\n 'Accept': 'text/html,application/xhtml+xml,application/xml,application/json;q=0.9',\r\n ...this.headers\r\n },\r\n method: httpMethod,\r\n body: null,\r\n multipart: false\r\n };\r\n\r\n if (this.flags & Api.INCLUDE_CREDENTIALS)\r\n options.credentials = 'include';\r\n\r\n if (typeof(data) !== 'string' && !(data instanceof Blob))\r\n {\r\n if (!(data instanceof FormData)) {\r\n data = new FormData();\r\n for (let i in params) {\r\n if ((params[i] instanceof File) || (params[i] instanceof Blob))\r\n data.append(i, params[i], params[i].name);\r\n else\r\n data.append(i, params[i]);\r\n }\r\n }\r\n\r\n for (let i of data.entries())\r\n {\r\n if ((i[1] instanceof File) || (i[1] instanceof Blob))\r\n {\r\n if (options.method === 'auto') options.method = 'POST';\r\n options.multipart = true;\r\n break;\r\n }\r\n }\r\n\r\n if (this.useReq64 && (this.flags & Api.REQ64_SUPPORTED) && !options.multipart) {\r\n let tmp = new FormData();\r\n tmp.append('req64', base64.encode(this.encodeParams(data)));\r\n data = tmp;\r\n }\r\n\r\n if (options.method === 'auto')\r\n {\r\n let l = 0;\r\n options.method = 'GET';\r\n for (let i of data.entries()) {\r\n l += i[0].length + i[1].length + 2;\r\n if (l > 960) {\r\n options.method = 'POST';\r\n break;\r\n }\r\n }\t\r\n }\r\n\r\n if (options.method === 'GET') {\r\n url = this.appendParam(url, this.encodeParams(data));\r\n }\r\n else\r\n {\r\n if (!options.multipart) {\r\n options.headers['Content-Type'] = 'application/x-www-form-urlencoded';\r\n options.body = this.encodeParams(data);\r\n }\r\n else\r\n options.body = data;\r\n }\r\n }\r\n else\r\n {\r\n if (typeof(data) === 'string')\r\n {\r\n if (data[0] === '<')\r\n {\r\n if (data.endsWith('</soap:Envelope>'))\r\n options.headers['Content-Type'] = 'application/soap+xml';\r\n else\r\n options.headers['Content-Type'] = 'application/xml';\r\n }\r\n else\r\n {\r\n if (data[0] === '{' || data[0] === '[')\r\n options.headers['Content-Type'] = 'application/json';\r\n else\r\n options.headers['Content-Type'] = 'application/octet-stream';\r\n }\r\n }\r\n else\r\n options.headers['Content-Type'] = data.type;\r\n\r\n if (options.method === 'auto') options.method = 'POST';\r\n options.body = data;\r\n }\r\n\r\n global.fetch(url, options)\r\n .then(result => this.decodeResult(result))\r\n .then(result =>\r\n {\r\n this._hideProgress();\r\n if (!success) return\r\n\r\n if (this.responseFilter(result, params)) {\r\n try { success(result, params); } catch(e) { }\r\n }\r\n })\r\n .catch(err =>\r\n {\r\n this._hideProgress();\r\n\r\n if (retries == 0) {\r\n if (failure) failure(err, params);\r\n } else {\r\n this.apiCall (data, success, failure, httpMethod, retries-1, relativeUrl);\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Decodes a result obtained using fetch into a usable object.\r\n */\r\n decodeResult: function (result)\r\n {\r\n let type = result.headers.get('content-type').split(';')[0].toLowerCase();\r\n\r\n if ((this.flags & Api.JSON_RESPONSE_SUPPORTED) && type.indexOf('json') !== -1)\r\n {\r\n if (this.flags & Api.WIND_V3) {\r\n return async function() {\r\n let data = await result.json();\r\n data.response = result.status;\r\n return data;\r\n }();\r\n }\r\n\r\n return result.json();\r\n }\r\n\r\n if ((this.flags & Api.XML_RESPONSE_SUPPORTED) && type.indexOf('xml') !== -1)\r\n {\r\n return new Promise((resolve, reject) =>\r\n {\r\n result.text().then(data => {\r\n data = (new DOMParser).parseFromString(data, 'text/xml');\r\n resolve(data);\r\n })\r\n .catch(reject);\r\n });\r\n }\r\n\r\n return result.blob();\r\n },\r\n\r\n /**\r\n * Makes a blob with the specified data and type.\r\n */\r\n getBlob: function (data, type)\r\n {\r\n return new Blob ([data], { type: type });\r\n },\r\n\r\n /**\r\n * Provided access to the base64 module to encode/decode data.\r\n */\r\n base64:\r\n {\r\n encode: function (value)\r\n {\r\n return base64.encode(value);\r\n },\r\n\r\n decode: function (value)\r\n {\r\n return base64.decode(value);\r\n }\r\n },\r\n\r\n /**\r\n * Executes an API request, returns a promise.\r\n */\r\n request: function (method, url, params=null)\r\n {\r\n if (params === null)\r\n {\r\n if (typeof(url) !== 'string')\r\n {\r\n params = url;\r\n url = '';\r\n }\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.apiCall(params, resolve, reject, null, method, url);\r\n });\r\n },\r\n\r\n post: function (url=null, params=null)\r\n {\r\n return this.fetch('POST', url, params);\r\n },\r\n\r\n get: function (url=null, params=null)\r\n {\r\n return this.fetch('GET', url, params);\r\n },\r\n\r\n put: function (url=null, params=null)\r\n {\r\n return this.fetch('PUT', url, params);\r\n },\r\n\r\n patch: function (url=null, params=null)\r\n {\r\n return this.fetch('PATCH', url, params);\r\n },\r\n\r\n delete: function (url=null, params=null)\r\n {\r\n return this.fetch('DELETE', url, params);\r\n },\r\n\r\n /**\r\n * Executes an automatic API call, returns a promise.\r\n */\r\n fetch: function (method, url=null, params=null)\r\n {\r\n // fetch (method, relativePath, params)\r\n // fetch (relativePath, params)\r\n let shift = true;\r\n if (typeof(method) === 'string') {\r\n let tmp = method.toUpperCase();\r\n if (tmp === 'GET' || tmp === 'POST' || tmp === 'PUT' || tmp === 'DELETE' || tmp === 'PATCH' || tmp === 'HEAD' || tmp === 'OPTIONS')\r\n shift = false;\r\n }\r\n\r\n if (shift) {\r\n params = url;\r\n url = method;\r\n method = null;\r\n }\r\n\r\n if (params === null) {\r\n if (typeof(url) !== 'string') {\r\n params = url;\r\n url = '';\r\n }\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.apiCall(params, resolve, reject, method, null, url);\r\n });\r\n },\r\n\r\n /**\r\n * Builds a URL from the given data.\r\n */\r\n makeUrl: function (url, params=null)\r\n {\r\n if (params === null)\r\n {\r\n if (typeof(url) !== 'string')\r\n {\r\n params = url;\r\n url = '';\r\n }\r\n }\r\n\r\n return this.appendParam(this.getUrl(url), this.encodeParams(params));\r\n }\r\n};\r\n\r\nexport default Api;\r\n","\r\nimport { Model, ModelList, EventDispatcher } from 'rinn';\r\nimport Api from './api.js';\r\n\r\n/*\r\n**\tProvides several methods to quickly interface with a remote data-source as defined by Wind.\r\n*/\r\n\r\nconst DataSource = EventDispatcher.extend\r\n({\r\n className: 'DataSource',\r\n debounceDelay: 250,\r\n\r\n request: null,\r\n\r\n includeCount: false,\r\n includeEnum: false,\r\n includeList: true,\r\n\r\n eid: null,\r\n count: 0,\r\n list: null,\r\n enum: null,\r\n\r\n /*\r\n **\tConstructs the data source with the specified optional `config` parameters, any of the properties of this object can be specified\r\n **\tin the config. Uses the given basePath as prefix for the `f` parameter for subsequent API operations, a basePath of `candies` will\r\n **\tresult in calls to `candies.list`, `candies.count`, etc.\r\n */\r\n __ctor: function (basePath, config)\r\n {\r\n this._super.EventDispatcher.__ctor();\r\n\r\n this.basePath = basePath;\r\n\r\n if (config) Object.assign(this, config);\r\n\r\n this.request = new Model(this.request);\r\n\r\n this.eid = Math.random().toString().substr(2);\r\n this.count = 0;\r\n\r\n this.list = new ModelList();\r\n this.list.dataSource = this;\r\n\r\n this.enum = new ModelList();\r\n this.enum.dataSource = this;\r\n\r\n this.request.addEventListener (this.eid+':propertyChanged', this.forwardRequestEvent, this);\r\n\r\n this.list.addEventListener (this.eid+':itemsCleared', this.forwardListEvent, this);\r\n this.list.addEventListener (this.eid+':itemsChanged', this.forwardListEvent, this);\r\n this.list.addEventListener (this.eid+':itemRemoved', this.forwardListEvent, this);\r\n this.list.addEventListener (this.eid+':itemChanged', this.forwardListEvent, this);\r\n this.list.addEventListener (this.eid+':itemAdded', this.forwardListEvent, this);\r\n\r\n this.enum.addEventListener (this.eid+':itemsCleared', this.forwardEnumEvent, this);\r\n this.enum.addEventListener (this.eid+':itemsChanged', this.forwardEnumEvent, this);\r\n this.enum.addEventListener (this.eid+':itemRemoved', this.forwardEnumEvent, this);\r\n this.enum.addEventListener (this.eid+':itemChanged', this.forwardEnumEvent, this);\r\n this.enum.addEventListener (this.eid+':itemAdded', this.forwardEnumEvent, this);\r\n },\r\n\r\n forwardRequestEvent: function (evt, args) {\r\n this.prepareEvent('request' + evt.name[0].toUpperCase() + evt.name.substr(1), args).setSource(evt.source).resume();\r\n },\r\n\r\n forwardListEvent: function (evt, args) {\r\n this.prepareEvent('list' + evt.name[0].toUpperCase() + evt.name.substr(1), args).setSource(evt.source).resume();\r\n },\r\n\r\n forwardEnumEvent: function (evt, args) {\r\n this.prepareEvent('enum' + evt.name[0].toUpperCase() + evt.name.substr(1), args).setSource(evt.source).resume();\r\n },\r\n\r\n /*\r\n **\tExecutes one or more API functions (depending on `includeCount`, `includeEnum` and `includeList` properties) to retrieve the\r\n **\trequired data (uses debounce to prevent too-quick refreshes).\r\n **\r\n **\tRefresh mode can be: order, filter, range, enum or full. Setting `mode` to `true` will cause a full refresh without debouncing.\r\n */\r\n refresh: function (mode='full', callback=null)\r\n {\r\n if (typeof(mode) == 'function') {\r\n callback = mode;\r\n mode = 'full';\r\n }\r\n\r\n if (this._timeout) {\r\n clearTimeout(this._timeout);\r\n this._timeout = null;\r\n }\r\n\r\n const fn = () =>\r\n {\r\n this._timeout = null;\r\n\r\n Api.packageBegin();\r\n\r\n if (this.includeCount && (mode === 'full' || mode === 'filter')) this.fetchCount();\r\n if (this.includeEnum && (mode === 'full' || mode === 'enum')) this.fetchEnum();\r\n if (this.includeList && mode !== 'enum') this.fetchList();\r\n\r\n Api.packageEnd(callback);\r\n };\r\n\r\n if (mode === true) {\r\n mode = 'full';\r\n fn();\r\n }\r\n else\r\n this._timeout = setTimeout(fn, this.debounceDelay);\r\n },\r\n\r\n /*\r\n **\tSearches for the item in `list` that matches the specified `fields` and sends it to the callback. If no item is found (or if `forced` is true),\r\n **\ta call to API function `.get` will be executed with the fields as request parameters. Returns a promise.\r\n */\r\n fetch: function (fields, forced=false)\r\n {\r\n return new Promise((resolve, reject) =>\r\n {\r\n let item = forced == true ? null : this.list.find(fields, true);\r\n if (!item)\r\n {\r\n this.fetchOne(fields, (r) =>\r\n {\r\n if (r && r.response == 200)\r\n {\r\n if (r.data.length > 0)\r\n resolve(r.data[0]);\r\n else\r\n reject(r);\r\n }\r\n else\r\n reject(r);\r\n });\r\n }\r\n else\r\n resolve(item.get());\r\n });\r\n },\r\n\r\n /*\r\n **\tRemoves an item from the remote data source by executing the `.delete` API function, passes the given `fields` as request\r\n **\tparameters. Returns a promise.\r\n */\r\n delete: function (params)\r\n {\r\n return new Promise((resolve, reject) =>\r\n {\r\n this.fetchDelete(params, (r) =>\r\n {\r\n if (r.response == 200)\r\n resolve(r);\r\n else\r\n reject(r.error);\r\n });\r\n });\r\n },\r\n\r\n fetchList: function ()\r\n {\r\n let data = {...this.request.get()};\r\n data.f = this.basePath + '.list';\r\n\r\n this.dispatchEvent('listLoading');\r\n Api.fetch(data).then(r => {\r\n this.list.setData(r.response == 200 ? r.data : null);\r\n this.dispatchEvent('listLoaded');\r\n this.dispatchEvent('listChanged');\r\n });\r\n },\r\n\r\n fetchEnum: function ()\r\n {\r\n let data = {...this.request.get()};\r\n data.f = this.basePath + '.enum';\r\n\r\n this.dispatchEvent('enumLoading');\r\n Api.fetch(data).then(r => {\r\n this.enum.setData(r.response == 200 ? r.data : null);\r\n this.dispatchEvent('enumLoaded');\r\n this.dispatchEvent('enumChanged');\r\n });\r\n },\r\n\r\n fetchCount: function ()\r\n {\r\n let data = {...this.request.get()};\r\n data.f = this.basePath + '.count';\r\n\r\n this.dispatchEvent('countLoading');\r\n Api.fetch(data).then(r => {\r\n this.count = r.response == 200 ? r.count : 0;\r\n this.dispatchEvent('countLoaded');\r\n this.dispatchEvent('countChanged');\r\n });\r\n },\r\n\r\n fetchOne: function (params, callback)\r\n {\r\n let data = {...this.request.get(), ...params};\r\n data.f = this.basePath + '.get';\r\n\r\n Api.fetch(data).then(r => {\r\n callback(r);\r\n });\r\n },\r\n\r\n fetchDelete: function (params, callback)\r\n {\r\n let data = {...this.request.get(), ...params};\r\n data.f = this.basePath + '.delete';\r\n\r\n Api.fetch(data).then(r => {\r\n callback(r);\r\n });\r\n },\r\n\r\n fetchData: function (params)\r\n {\r\n let data = {...this.request.get(), ...params};\r\n if (data.f[0] == '.')\r\n data.f = this.basePath + data.f;\r\n\r\n return Api.fetch(data);\r\n },\r\n\r\n makeUrl: function (params)\r\n {\r\n let data = {...this.request.get(), ...params};\r\n if (data.f[0] == '.')\r\n data.f = this.basePath + data.f;\r\n\r\n return Api.makeUrl(data);\r\n }\r\n});\r\n\r\n/**\r\n * Returns a data source by name or creates a new one if it doesn't exist (if `create` is `true`).\r\n * @param {string} name The name of the data source. A scope can be added as a prefix, separated by a colon.\r\n * @param {boolean} create Whether to create the data source if it doesn't exist.\r\n * @returns {DataSource} The data source.\r\n */\r\nDataSource.globals = { };\r\nDataSource.get = function (name, create=false) {\r\n if (!(name in DataSource.globals)) {\r\n if (!create)\r\n return null;\r\n DataSource.globals[name] = new DataSource(name.split(':').at(-1));\r\n }\r\n return DataSource.globals[name];\r\n}\r\n\r\nexport default DataSource;\r\n","\r\nimport { Model, ModelList } from 'rinn';\r\nimport Api from './api.js';\r\n\r\n/*\r\n**\tProvides an interface to connect with a listing API function.\r\n*/\r\n\r\nconst DataList = ModelList.extend\r\n({\r\n\tclassName: 'DataList',\r\n\tdebounceDelay: 250,\r\n\r\n\trequest: null,\r\n\teid: null,\r\n\r\n\t/*\r\n\t**\tConstructs the data list with the specified optional `config` parameters, any of the properties of this object can be specified\r\n\t**\tin the config. The given `f` parameter is passed directly as a request parameter to the API.\r\n\t*/\r\n\t__ctor: function (f, config=null)\r\n\t{\r\n\t\tthis._super.ModelList.__ctor();\r\n\r\n\t\tif (config !== null)\r\n\t\t\tObject.assign(this, config);\r\n\r\n\t\tif (!this.request)\r\n\t\t\tthis.request = { };\r\n\r\n\t\tthis.request.f = f;\r\n\t\tthis.request = new Model(this.request);\r\n\r\n\t\tthis.eid = Math.random().toString().substr(2);\r\n\t\tthis.dataList = this;\r\n\r\n\t\tthis.request.addEventListener (this.eid+':propertyChanged', this.forwardRequestEvent, this);\r\n\t},\r\n\r\n\tforwardRequestEvent: function (evt, args)\r\n\t{\r\n\t\tthis.prepareEvent('request' + evt.name[0].toUpperCase() + evt.name.substr(1), args).setSource(evt.source).resume();\r\n\t},\r\n\r\n\t/*\r\n\t**\tExecutes a request to retrieve the data for the list (uses debounce to prevent too-quick refreshes).\r\n\t*/\r\n\trefresh: function (callback=null, _callback=null)\r\n\t{\r\n\t\tif (this._timeout)\r\n\t\t{\r\n\t\t\tclearTimeout(this._timeout);\r\n\t\t\tthis._timeout = null;\r\n\t\t}\r\n\r\n\t\tif (callback === true)\r\n\t\t{\r\n\t\t\tthis.dispatchEvent('listLoading');\r\n\r\n\t\t\tApi.fetch(this.request.get()).then(r =>\r\n\t\t\t{\r\n\t\t\t\tthis.setData(r.response == 200 ? r.data : null);\r\n\t\t\t\tthis.dispatchEvent('listLoaded');\r\n\t\t\t\tthis.dispatchEvent('listChanged');\r\n\r\n\t\t\t\tif (_callback !== null)\r\n\t\t\t\t\t_callback();\r\n\t\t\t});\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst fn = () => {\r\n\t\t\tthis.refresh(true, callback);\r\n\t\t};\r\n\r\n\t\tthis._timeout = setTimeout(fn, this.debounceDelay);\r\n\t}\r\n});\r\n\r\n/**\r\n * Returns a data list by name or creates a new one if it doesn't exist (if `create` is `true`).\r\n * @param {string} name The name of the data list. A scope can be added as a prefix, separated by a colon.\r\n * @param {boolean} create Whether to create the data list if it doesn't exist.\r\n * @returns {DataList} The data list.\r\n */\r\nDataList.globals = { };\r\nDataList.get = function (name, create=false) {\r\n if (!(name in DataList.globals)) {\r\n if (!create)\r\n return null;\r\n DataList.globals[name] = new DataList(name.split(':').at(-1));\r\n }\r\n return DataList.globals[name];\r\n}\r\n\r\nexport default DataList;\r\n","\n/**\n**\tCollection of useful easing functions (imported from Cherry source code).\n*/\n\nconst Easing =\n{\n\t/**\n\t**\tInterpolates numeric values between two objects (`src` and `dst`) using the specified `duration` (in seconds) and `easing` function. Note\n\t**\tthat all four parameters `src`, `dst`, `duration` and `easing` must be objects having the same number of values.\n\t*/\n\tinterpolate: function (src, dst, duration, easing, callback/* function(data, isFinished) */)\n\t{\n\t\tlet time = { };\n\t\tlet data = { };\n\t\tlet count = 0;\n\n\t\tfor (let x in src)\n\t\t{\n\t\t\ttime[x] = 0.0;\n\t\t\tdata[x] = src[x]\n\t\t\tcount++;\n\t\t}\n\n\t\tlet lastTime = Date.now()/1000;\n\t\tlet dt = 0;\n\n\t\tlet interpolator = function()\n\t\t{\n\t\t\tlet curTime = Date.now()/1000;\n\t\t\tdt = curTime - lastTime;\n\t\t\tlastTime = curTime;\n\n\t\t\tfor (let x in time)\n\t\t\t{\n\t\t\t\tif (time[x] == duration[x])\n\t\t\t\t\tcontinue;\n\n\t\t\t\ttime[x] += dt;\n\t\t\t\tif (time[x] >= duration[x])\n\t\t\t\t{\n\t\t\t\t\ttime[x] = duration[x];\n\t\t\t\t\tcount--;\n\t\t\t\t}\n\n\t\t\t\tlet t = easing[x] (time[x] / duration[x]);\n\t\t\t\tdata[x] = (1-t)*src[x] + t*dst[x];\n\t\t\t}\n\n\t\t\tcallback (data, count == 0);\n\n\t\t\tif (count != 0)\n\t\t\t\trequestAnimationFrame(interpolator);\n\t\t};\n\n\t\tinterpolator();\n\t},\n\n\t/* ******************************************** */\n\tLinear:\n\t{\n\t\tIN: function (t)\n\t\t{\n\t\t\treturn t;\n\t\t},\n\n\t\tOUT: function (t)\n\t\t{\n\t\t\treturn t;\n\t\t},\n\n\t\tIN_OUT: function (t)\n\t\t{\n\t\t\treturn t;\n\t\t}\n\t},\n\n\t/* ******************************************** */\n\tBack:\n\t{\n\t\tk: 1.70158,\n\n\t\tIN: function (t, k)\n\t\t{\n\t\t\tif (k === undefined) k = Easing.Back.k;\n\t\t\treturn t*t*((k+1)*t - k);\n\t\t},\n\n\t\tOUT: function (t, k)\n\t\t{\n\t\t\treturn 1 - Easing.Back.IN(1 - t, k);\n\t\t},\n\n\t\tIN_OUT: function (t, k)\n\t\t{\n\t\t\tif (t < 0.5)\n\t\t\t\treturn Easing.Back.IN(t*2, k)/2;\n\t\t\telse\n\t\t\t\treturn Easing.Back.OUT((t-0.5)*2, k)/2 + 0.5;\n\t\t}\n\t},\n\n\t/* ******************************************** */\n\tBounce:\n\t{\n\t\tgetConst: function (t)\n\t\t{\n\t\t\tif (t < 1.0/2.75)\n\t\t\t\treturn 7.5625 * t * t;\n\t\t\telse if (t < 2.0/2.75)\n\t\t\t\treturn 7.5625 * (t -= 1.5/2.75)*t + 0.75;\n\t\t\telse if (t < 2.5/2.75)\n\t\t\t\treturn 7.5625 * (t -= 2.250/2.75) * t + 0.9375;\n\n\t\t\treturn 7.5625 * (t -= 2.625/2.75) * t + 0.984375;\n\t\t},\n\n\t\tIN: function (t)\n\t\t{\n\t\t\treturn 1 - Easing.Bounce.getConst(1-t);\n\t\t},\n\n\t\tOUT: function (t)\n\t\t{\n\t\t\treturn Easing.Bounce.getConst(t);\n\t\t},\n\n\t\tIN_OUT: function (t)\n\t\t{\n\t\t\tif (t < 0.5)\n\t\t\t\treturn (1 - Easing.Bounce.getConst(1-2*t))/2;\n\t\t\telse\n\t\t\t\treturn (Easing.Bounce.getConst((t-0.5)*2)/2)+0.5;\n\t\t}\n\t},\n\n\t/* ******************************************** */\n\tCirc:\n\t{\n\t\tIN: function (t)\n\t\t{\n\t\t\treturn 1 - Math.sqrt(1 - t*t);\n\t\t},\n\n\t\tOUT: function (t)\n\t\t{\n\t\t\treturn 1 - Easing.Circ.IN(1 - t);\n\t\t},\n\n\t\tIN_OUT: function (t)\n\t\t{\n\t\t\tif (t < 0.5)\n\t\t\t\t\treturn Easing.Circ.IN(t*2)/2;\n\t\t\t\telse\n\t\t\t\t\treturn Easing.Circ.OUT((t-0.5)*2)/2 + 0.5;\n\t\t}\n\t},\n\n\t/* ******************************************** */\n\tCubic:\n\t{\n\t\tIN: function (t)\n\t\t{\n\t\t\treturn t*t*t;\n\t\t},\n\n\t\tOUT: function (t)\n\t\t{\n\t\t\treturn 1 - Easing.Cubic.IN(1 - t);\n\t\t},\n\n\t\tIN_OUT: function (t)\n\t\t{\n\t\t\tif (t < 0.5)\n\t\t\t\treturn Easing.Cubic.IN(t*2)/2;\n\t\t\telse\n\t\t\t\treturn Easing.Cubic.OUT((t-0.5)*2)/2 + 0.5;\n\t\t}\n\t},\n\n\t/* ******************************************** */\n\tExpo:\n\t{\n\t\tIN: function (t)\n\t\t{\n\t\t\treturn Math.pow(2, 12*(t-1));\n\t\t},\n\n\t\tOUT: function (t)\n\t\t{\n\t\t\treturn -Math.pow(2, -12*t) + 1;\n\t\t},\n\n\t\tIN_OUT: function (t)\n\t\t{\n\t\t\tif ((t *= 2) < 1)\n\t\t\t\treturn Math.pow (2, 12 * (t - 1)) / 2;\n\t\t\telse\n\t\t\t\treturn (-Math.pow (2, -12 * (t - 1)) + 2) / 2;\n\t\t}\n\t},\n\n\t/* ******************************************** */\n\tPower:\n\t{\n\t\tp: 12,\n\n\t\tIN: function (t)\n\t\t{\n\t\t\treturn Math.pow(t, Easing.Power.p);\n\t\t},\n\n\t\tOUT: function (t)\n\t\t{\n\t\t\treturn 1 - Easing.Power.IN(1 - t);\n\t\t},\n\n\t\tIN_OUT: function (t)\n\t\t{\n\t\t\tif (t < 0.5)\n\t\t\t\treturn Easing.Power.IN(t*2)/2;\n\t\t\telse\n\t\t\t\treturn Easing.Power.OUT((t-0.5)*2)/2 + 0.5;\n\t\t}\n\t},\n\n\t/* ******************************************** */\n\tQuad:\n\t{\n\t\tIN: function (t)\n\t\t{\n\t\t\treturn t*t;\n\t\t},\n\n\t\tOUT: function (t)\n\t\t{\n\t\t\treturn 1 - Easing.Quad.IN(1 - t);\n\t\t},\n\n\t\tIN_OUT: function (t)\n\t\t{\n\t\t\tif (t < 0.5)\n\t\t\t\treturn Easing.Quad.IN(t*2)/2;\n\t\t\telse\n\t\t\t\treturn Easing.Quad.OUT((t-0.5)*2)/2 + 0.5;\n\t\t}\n\t},\n\n\t/* ******************************************** */\n\tQuartic:\n\t{\n\t\tIN: function (t)\n\t\t{\n\t\t\treturn t*t*t*t;\n\t\t},\n\n\t\tOUT: function (t)\n\t\t{\n\t\t\treturn 1 - Easing.Quartic.IN(1 - t);\n\t\t},\n\n\t\tIN_OUT: function (t)\n\t\t{\n\t\t\tif (t < 0.5)\n\t\t\t\treturn Easing.Quartic.IN(t*2)/2;\n\t\t\telse\n\t\t\t\treturn Easing.Quartic.OUT((t-0.5)*2)/2 + 0.5;\n\t\t}\n\t},\n\n\t/* ******************************************** */\n\tQuintic:\n\t{\n\t\tIN: function (t)\n\t\t{\n\t\t\treturn t*t*t*t*t;\n\t\t},\n\n\t\tOUT: function (t)\n\t\t{\n\t\t\treturn 1 - Easing.Quintic.IN(1 - t);\n\t\t},\n\n\t\tIN_OUT: function (t)\n\t\t{\n\t\t\tif (t < 0.5)\n\t\t\t\t\treturn Easing.Quintic.IN(t*2)/2;\n\t\t\t\telse\n\t\t\t\t\treturn Easing.Quintic.OUT((t-0.5)*2)/2 + 0.5;\n\t\t}\n\t},\n\n\t/* ******************************************** */\n\tSine:\n\t{\n\t\tIN: function (t)\n\t\t{\n\t\t\treturn 1 - Math.sin (1.5708 * (1 - t));\n\t\t},\n\n\t\tOUT: function (t)\n\t\t{\n\t\t\treturn Math.sin (1.5708 * t);\n\t\t},\n\n\t\tIN_OUT: function (t)\n\t\t{\n\t\t\treturn (Math.cos (3.1416*t) - 1) / -2;\n\t\t}\n\t},\n\n\t/* ******************************************** */\n\tStep:\n\t{\n\t\tIN: function (t)\n\t\t{\n\t\t\treturn t != 1.0 ? 0 : 1.0;\n\t\t},\n\n\t\tOUT: function (t)\n\t\t{\n\t\t\treturn t != 1.0 ? 0 : 1.0;\n\t\t},\n\n\t\tIN_OUT: function (t)\n\t\t{\n\t\t\treturn t != 1.0 ? 0 : 1.0;\n\t\t}\n\t}\n};\n\nexport default Easing;\n","\nimport { Rinn, Class } from 'rinn';\n\n/**\n**\tClass to animate properties using rules (imported from Cherry source code).\n*/\n\nconst Anim = Class.extend\n({\n\tlist: null,\n\n\tinitialData: null,\n\tdata: null,\n\n\tstack: null,\n\tblock: null,\n\n\ttimeScale: 1, time: 0, blockTime: 0,\n\tindex: 0,\n\n\tpaused: false,\n\tfinished: false,\n\n\tonFinishedCallback: null,\n\tonUpdatedCallback: null,\n\n\t__ctor: function ()\n\t{\n\t\tthis.list = [ ];\n\n\t\tthis.initialData = { };\n\t\tthis.data = { };\n\n\t\tthis.stack = [ ];\n\t\tthis.block = this.list;\n\n\t\tthis.reset();\n\t},\n\n\t__dtor: function ()\n\t{\n\t},\n\n\tclone: function ()\n\t{\n\t\tlet a = new Anim();\n\n\t\ta.list = this.list;\n\t\ta.initialData = this.initialData;\n\n\t\treturn a.reset();\n\t},\n\n\tonFinished: function (callback)\n\t{\n\t\tthis.onFinishedCallback = callback;\n\t\treturn this;\n\t},\n\n\tonUpdated: function (callback)\n\t{\n\t\tthis.onUpdatedCallback = callback;\n\t\treturn this;\n\t},\n\n\t// Resets the animation to its initial state.\n\treset: function ()\n\t{\n\t\tthis.stack.length = 0;\n\t\tthis.blockTime = 0;\n\n\t\tthis.time = 0;\n\t\tthis.index = 0;\n\n\t\tthis.block = this.list;\n\n\t\tthis.paused = true;\n\t\tthis.finished = false;\n\t\tthis.handle = null;\n\n\t\tfor (let i in this.initialData)\n\t\t\tthis.data[i] = this.initialData[i];\n\n\t\treturn this;\n\t},\n\n\t// Sets the initial data.\n\tinitial: function (data)\n\t{\n\t\tthis.initialData = data;\n\t\treturn this.reset();\n\t},\n\n\t// Sets the time scale (animation speed).\n\tspeed: function (value)\n\t{\n\t\tthis.timeScale = value > 0.0 ? value : 1.0;\n\t\treturn this;\n\t},\n\n\t// Sets the output data object.\n\tsetOutput: function (data)\n\t{\n\t\tthis.data = data;\n\t\treturn this;\n\t},\n\n\t// Pauses the animation.\n\tpause: function ()\n\t{\n\t\tif (this.paused) return;\n\n\t\tclearInterval(this.handle);\n\t\tthis.paused = true;\n\t},\n\n\t// Resumes the animation.\n\tresume: function ()\n\t{\n\t\tif (!this.paused) return;\n\n\t\tlet lastTime = Date.now()/1000;\n\n\t\tthis.handle = setInterval(() =>\n\t\t{\n\t\t\tlet curTime = Date.now()/1000;\n\t\t\tlet dt = curTime - lastTime;\n\t\t\tlastTime = curTime;\n\n\t\t\tthis.update(dt);\n\n\t\t\tif (this.onUpdatedCallback)\n\t\t\t\tthis.onUpdatedCallback (this.data, this);\n\t\t},\n\t\t16);\n\n\t\tif (this.onUpdatedCallback)\n\t\t\tthis.onUpdatedCallback (this.data, this);\n\n\t\tthis.paused = false;\n\t},\n\n\t// Updates the animation by the specified delta time (seconds).\n\tupdate: function (dt)\n\t{\n\t\tif (this.paused) return false;\n\n\t\tif (this.index >= this.block.length)\n\t\t\treturn true;\n\n\t\tlet i = 0;\n\n\t\tlet _block;\n\t\tlet _index;\n\t\tlet _blockTime;\n\n\t\tthis.time += dt*this.timeScale;\n\n\t\twhile (this.index < this.block.length)\n\t\t{\n\t\t\tlet cmd = this.block[this.index];\n\t\t\tlet duration;\n\n\t\t\tswitch (cmd.op)\n\t\t\t{\n\t\t\t\tcase \"parallel\":\n\t\t\t\t\tif (cmd.started == false)\n\t\t\t\t\t{\n\t\t\t\t\t\tcmd.blocks.length = 0;\n\t\t\t\t\t\tcmd.started = true;\n\n\t\t\t\t\t\tfor (i = 0; i < cmd.block.length; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcmd.blocks.push([cmd.block[i]]);\n\t\t\t\t\t\t\tcmd.indices[i] = 0;\n\t\t\t\t\t\t\tcmd.blockTimes[i] = this.blockTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t_block = this.block;\n\t\t\t\t\t_index = this.index;\n\t\t\t\t\t_blockTime = this.blockTime;\n\n\t\t\t\t\tlet n = 0;\n\t\t\t\t\tlet blockTime = _blockTime;\n\n\t\t\t\t\tfor (i = 0; i < cmd.blocks.length; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.block = cmd.blocks[i];\n\t\t\t\t\t\tthis.index = cmd.indices[i];\n\t\t\t\t\t\tthis.blockTime = cmd.blockTimes[i];\n\n\t\t\t\t\t\tif (this.update(0) === true)\n\t\t\t\t\t\t\tn++;\n\n\t\t\t\t\t\tif (this.blockTime > blockTime)\n\t\t\t\t\t\t\tblockTime = this.blockTime;\n\n\t\t\t\t\t\tcmd.blockTimes[i] = this.blockTime;\n\t\t\t\t\t\tcmd.blocks[i] = this.block;\n\t\t\t\t\t\tcmd.indices[i] = this.index;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.block = _block;\n\t\t\t\t\tthis.index = _index;\n\t\t\t\t\tthis.blockTime = _blockTime;\n\n\t\t\t\t\tif (cmd.fn) cmd.fn.call(this);\n\n\t\t\t\t\tif (n != cmd.blocks.length)\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\tcmd.started = false;\n\n\t\t\t\t\tthis.blockTime = blockTime;\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"serial\":\n\t\t\t\t\tif (cmd.started == false)\n\t\t\t\t\t{\n\t\t\t\t\t\tcmd._block = cmd.block;\n\t\t\t\t\t\tcmd._index = 0;\n\t\t\t\t\t\tcmd._blockTime = this.blockTime;\n\n\t\t\t\t\t\tcmd.started = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t_block = this.block;\n\t\t\t\t\t_index = this.index;\n\t\t\t\t\t_blockTime = this.blockTime;\n\n\t\t\t\t\tthis.block = cmd._block;\n\t\t\t\t\tthis.index = cmd._index;\n\t\t\t\t\tthis.blockTime = cmd._blockTime;\n\n\t\t\t\t\ti = this.update(0);\n\n\t\t\t\t\tcmd._block = this.block;\n\t\t\t\t\tcmd._index = this.index;\n\t\t\t\t\tcmd._blockTime = this.blockTime;\n\n\t\t\t\t\tthis.block = _block;\n\t\t\t\t\tthis.index = _index;\n\t\t\t\t\tthis.blockTime = _blockTime;\n\n\t\t\t\t\tif (cmd.fn) cmd.fn.call(this);\n\n\t\t\t\t\tif (i !== true) return false;\n\n\t\t\t\t\tcmd.started = false;\n\n\t\t\t\t\tthis.blockTime = cmd._blockTime;\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"repeat\":\n\t\t\t\t\tif (cmd.started == false)\n\t\t\t\t\t{\n\t\t\t\t\t\tcmd._block = cmd.block;\n\t\t\t\t\t\tcmd._index = 0;\n\t\t\t\t\t\tcmd._blockTime = this.blockTime;\n\t\t\t\t\t\tcmd._count = cmd.count;\n\n\t\t\t\t\t\tcmd.started = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t_block = this.block;\n\t\t\t\t\t_index = this.index;\n\t\t\t\t\t_blockTime = this.blockTime;\n\n\t\t\t\t\tthis.block = cmd._block;\n\t\t\t\t\tthis.index = cmd._index;\n\t\t\t\t\tthis.blockTime = cmd._blockTime;\n\n\t\t\t\t\ti = this.update(0);\n\n\t\t\t\t\tcmd._block = this.block;\n\t\t\t\t\tcmd._index = this.index;\n\t\t\t\t\tcmd._blockTime = this.blockTime;\n\n\t\t\t\t\tthis.block = _block;\n\t\t\t\t\tthis.index = _index;\n\t\t\t\t\tthis.blockTime = _blockTime;\n\n\t\t\t\t\tif (cmd.fn) cmd.fn.call(this);\n\n\t\t\t\t\tif (i !== true) return false;\n\n\t\t\t\t\tif (cmd._count <= 1)\n\t\t\t\t\t{\n\t\t\t\t\t\tcmd.started = false;\n\n\t\t\t\t\t\tthis.blockTime = cmd._blockTime;\n\t\t\t\t\t\tthis.index++;\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tcmd._index = 0;\n\t\t\t\t\t\tcmd._count--;\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"set\":\n\t\t\t\t\tthis.data[cmd.field] = cmd.value;\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"restart\":\n\t\t\t\t\tthis.index = 0;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"wait\":\n\t\t\t\t\tduration = Rinn.typeOf(cmd.duration) == \"string\" ? this.data[cmd.duration] : cmd.duration;\n\n\t\t\t\t\tif (this.time < this.blockTime + duration)\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\tthis.blockTime += duration;\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"range\":\n\t\t\t\t\tif (cmd.started == false)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (cmd.startValue === null)\n\t\t\t\t\t\t\tcmd._startValue = this.data[cmd.field];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tcmd._startValue = cmd.startValue;\n\n\t\t\t\t\t\tcmd._endValue = cmd.endValue;\n\n\t\t\t\t\t\tcmd.started = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tduration = Rinn.typeOf(cmd.duration) == \"string\" ? this.data[cmd.duration] : cmd.duration;\n\n\t\t\t\t\tif (this.time < this.blockTime + duration)\n\t\t\t\t\t\tdt = (this.time - this.blockTime) / duration;\n\t\t\t\t\telse\n\t\t\t\t\t\tdt = 1;\n\n\t\t\t\t\tif (cmd.easing && dt != 1.0)\n\t\t\t\t\t\tthis.data[cmd.field] = cmd.easing(dt)*(cmd._endValue - cmd._startValue) + cmd._startValue;\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.data[cmd.field] = dt*(cmd._endValue - cmd._startValue) + cmd._startValue;\n\n\t\t\t\t\tif (dt != 1) return false;\n\n\t\t\t\t\tcmd.started = false;\n\n\t\t\t\t\tthis.blockTime += duration;\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"rand\":\n\t\t\t\t\tif (cmd.started == false)\n\t\t\t\t\t{\n\t\t\t\t\t\tcmd.started = true;\n\t\t\t\t\t\tcmd.last = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tduration = Rinn.typeOf(cmd.duration) == \"string\" ? this.data[cmd.duration] : cmd.duration;\n\n\t\t\t\t\tif (this.time < this.blockTime + duration)\n\t\t\t\t\t\tdt = (this.time - this.blockTime) / duration;\n\t\t\t\t\telse\n\t\t\t\t\t\tdt = 1;\n\n\t\t\t\t\tif (cmd.easing && dt != 1)\n\t\t\t\t\t\tcmd.cur = ~~(cmd.easing(dt)*cmd.count);\n\t\t\t\t\telse\n\t\t\t\t\t\tcmd.cur = ~~(dt*cmd.count);\n\n\t\t\t\t\tif (cmd.cur != cmd.last)\n\t\t\t\t\t{\n\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\ti = ~~(Math.random()*(cmd.endValue - cmd.startValue + 1)) + cmd.startValue;\n\t\t\t\t\t\t\tif (i != this.data[cmd.field]) break;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.data[cmd.field] = i;\n\t\t\t\t\t\tcmd.last = cmd.cur;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (dt != 1) return false;\n\n\t\t\t\t\tcmd.started = false;\n\n\t\t\t\t\tthis.blockTime += duration;\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"randt\":\n\t\t\t\t\tduration = Rinn.typeOf(cmd.duration) == \"string\" ? this.data[cmd.duration] : cmd.duration;\n\n\t\t\t\t\tif (this.time < this.blockTime + duration)\n\t\t\t\t\t\tdt = (this.time - this.blockTime) / duration;\n\t\t\t\t\telse\n\t\t\t\t\t\tdt = 1;\n\n\t\t\t\t\tif (cmd.easing && dt != 1)\n\t\t\t\t\t\ti = cmd.easing(dt)*(cmd.count-1);\n\t\t\t\t\telse\n\t\t\t\t\t\ti = dt*(cmd.count-1);\n\n\t\t\t\t\tthis.data[cmd.field] = cmd.table[~~((i + cmd.count) % cmd.count)];\n\n\t\t\t\t\tif (dt != 1) return false;\n\n\t\t\t\t\tthis.blockTime += duration;\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"play\":\n\t\t\t\t\tcmd.snd.play();\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"exec\":\n\t\t\t\t\tcmd.fn.call(this, this);\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (this.block == this.list)\n\t\t{\n\t\t\tif (!this.finished && this.onFinishedCallback != null)\n\t\t\t\tthis.onFinishedCallback();\n\n\t\t\tthis.pause();\n\t\t\tthis.finished = true;\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t// Runs the subsequent commands in parallel. Should end the parallel block by calling end().\n\tparallel: function ()\n\t{\n\t\tlet block = [ ];\n\n\t\tthis.block.push({ op: \"parallel\", started: false, block: block, blocks: [ ], indices: [ ], blockTimes: [ ] });\n\n\t\tthis.stack.push (this.block);\n\t\tthis.block = block;\n\n\t\treturn this;\n\t},\n\n\t// Runs the subsequent commands in series. Should end the serial block by calling end().\n\tserial: function ()\n\t{\n\t\tlet block = [ ];\n\n\t\tthis.block.push({ op: \"serial\", started: false, block: block });\n\n\t\tthis.stack.push (this.block);\n\t\tthis.block = block;\n\n\t\treturn this;\n\t},\n\n\t// Repeats a block the specified number of times.\n\trepeat: function (count)\n\t{\n\t\tlet block = [ ];\n\n\t\tthis.block.push({ op: \"repeat\", started: false, block: block, count: count });\n\n\t\tthis.stack.push (this.block);\n\t\tthis.block = block;\n\n\t\treturn this;\n\t},\n\n\t// Sets the callback of the current block.\n\tcallback: function (fn)\n\t{\n\t\tlet block = this.stack[this.stack.length-1];\n\t\tblock[block.length-1].fn = fn;\n\n\t\treturn this;\n\t},\n\n\t// Ends a parallel(), serial() or repeat() block.\n\tend: function ()\n\t{\n\t\tthis.block = this.stack.pop();\n\t\treturn this;\n\t},\n\n\t// Sets the value of a variable.\n\tset: function (field, value)\n\t{\n\t\tthis.block.push({ op: \"set\", field: field, value: value });\n\t\treturn this;\n\t},\n\n\t// Restarts the current block.\n\trestart: function (duration)\n\t{\n\t\tthis.block.push({ op: \"restart\" });\n\t\treturn this;\n\t},\n\n\t// Waits for the specified duration.\n\twait: function (duration)\n\t{\n\t\tthis.block.push({ op: \"wait\", duration: duration });\n\t\treturn this;\n\t},\n\n\t// Sets the range of a variable.\n\trange: function (field, duration, startValue, endValue, easing)\n\t{\n\t\tthis.block.push({ op: \"range\", started: false, field: field, duration: duration, startValue: startValue, endValue: endValue, easing: easing ? easing : null });\n\t\treturn this;\n\t},\n\n\t// Generates a certain amount of random numbers in the given range (inclusive).\n\trand: function (field, duration, count, startValue, endValue, easing)\n\t{\n\t\tthis.block.push({ op: \"rand\", started: false, field: field, duration: duration, count: count, startValue: startValue, endValue: endValue, easing: easing ? easing : null });\n\t\treturn this;\n\t},\n\n\t// Generates a certain amount of random numbers in the given range (inclusive). This uses a static random table to determine the next values.\n\trandt: function (field, duration, count, startValue, endValue, easing)\n\t{\n\t\tlet table = [ ];\n\n\t\tfor (let i = 0; i < count; i++)\n\t\t\ttable.push ((i % (endValue - startValue + 1)) + startValue);\n\n\t\tfor (let i = count >> 2; i > 0; i--)\n\t\t{\n\t\t\tlet a = ~~(Math.random() * count);\n\t\t\tlet b = ~~(Math.random() * count);\n\n\t\t\tlet c = table[b];\n\t\t\ttable[b] = table[a];\n\t\t\ttable[a] = c;\n\t\t}\n\n\t\tthis.block.push({ op: \"randt\", field: field, duration: duration, count: count, startValue: startValue, endValue: endValue, table: table, easing: easing ? easing : null });\n\t\treturn this;\n\t},\n\n\t// Plays a sound.\n\tplay: function (snd)\n\t{\n\t\tthis.block.push({ op: \"play\", snd: snd });\n\t\treturn this;\n\t},\n\n\t// Executes a function.\n\texec: function (fn)\n\t{\n\t\tthis.block.push({ op: \"exec\", fn: fn });\n\t\treturn this;\n\t}\n});\n\nexport default Anim;\n","\nimport _Tabs from './elems/r-tabs.js';\nimport _Form from './elems/r-form.js';\nimport _Panel from './elems/r-panel.js';\nimport _List from './elems/r-list.js';\nimport _Item from './elems/r-item.js';\nimport _Paginator from './elems/r-paginator.js';\nimport _Table from './elems/r-table.js';\nimport _Select from './elems/r-select.js';\nimport _ImageCropper from './elems/r-image-cropper.js';\n\nexport default {\n\tTabs: _Tabs,\n\tForm: _Form,\n\tPanel: _Panel,\n\tList: _List,\n\tItem: _Item,\n\tPaginator: _Paginator,\n\tTable: _Table,\n\tSelect: _Select,\n\tImageCropper: _ImageCropper\n};\n","/*\n <r-tabs data-container=\"div.tab-container\" data-base-route=\"@\" data-initial=\"tab1\">\n <a data-name=\"tab1\">Tab-1</a>\n <a data-name=\"tab2\">Tab-2</a>\n <a data-name=\"tab3\">Tab-3</a>\n </r-tabs>\n\n <div class=\"tab-container\">\n <div data-name=\"tab1\">\n This is tab-1.\n </div>\n\n <div data-name=\"tab2\">\n This is tab-2.\n </div>\n\n <div data-name=\"tab3\">\n This is tab-3.\n </div>\n </div>\n\n .is-hidden {\n display: none;\n }\n\n r-tabs [data-name].is-active {\n font-weight: bold;\n }\n*/\n\nimport Element from '../element.js';\nimport Router from '../router.js';\n\nexport default Element.register ('r-tabs',\n{\n /**\n * Container element for tab content.\n */\n container: null,\n\n /**\n * Active tab name.\n */\n activeTab: null,\n\n /**\n **\tElement events.\n */\n 'event click [data-name]': function (evt)\n {\n evt.continuePropagation = true;\n\n if (this.dataset.baseRoute) {\n location = \"#\" + Router.realLocation(this.dataset.baseRoute.replace('@', evt.source.dataset.name));\n return;\n }\n\n this.selectTab (evt.source.dataset.name);\n },\n\n /**\n **\tInitializes the Tabs element.\n */\n init: function()\n {\n this._routeHandler = (evt, args) =>\n {\n if (Router.location != '')\n {\n this.querySelectorAll(\"[href]\").forEach(link =>\n {\n if (!link.href) return;\n\n if (Router.location.startsWith(link.href.substr(link.href.indexOf('#')+1))) {\n link.classList.add('is-active');\n link.classList.remove('is-inactive');\n } else {\n link.classList.add('is-inactive');\n link.classList.remove('is-active');\n }\n\n link.classList.remove('anim-ended');\n link.onanimationend = () => {\n link.onanimationend = null;\n link.classList.add('anim-ended');\n };\n });\n }\n\n if (!args.route.changed)\n return;\n\n this.showTab (args.tabName);\n };\n },\n\n /**\n **\tExecuted when the children of the element are ready.\n */\n ready: function()\n {\n if (\"container\" in this.dataset)\n {\n if (this.dataset.container == ':previousElement')\n this.container = this.previousElementSibling;\n else if (this.dataset.container == ':nextElement')\n this.container = this.nextElementSibling;\n else if (this.dataset.container == ':none')\n this.container = null;\n else\n this.container = document.querySelector(this.dataset.container);\n }\n else\n this.container = this.nextElementSibling;\n\n this._hideTabsExcept(this.dataset.initial);\n },\n\n /**\n **\tAdds a handler to Router if the data-base-route attribute was set.\n */\n onConnected: function()\n {\n if (this.dataset.baseRoute)\n Router.addRoute (this.dataset.baseRoute.replace('@', ':tabName'), this._routeHandler);\n },\n\n /**\n **\tRemoves a handler previously added to Router if the data-base-route attribute was set.\n */\n onDisconnected: function()\n {\n if (this.dataset.baseRoute)\n Router.removeRoute(this.dataset.baseRoute.replace('@', ':tabName'), this._routeHandler);\n },\n\n /**\n **\tHides all tabs except the one with the specified exceptName, if none specified then all tabs will be hidden (adds `.is-hidden` CSS class),\n **\tadditionally the respective link item in the tab definition will have class `.is-active`.\n */\n _hideTabsExcept: function (exceptName)\n {\n if (!exceptName) exceptName = '';\n\n if (this.container != null)\n {\n this.container.querySelectorAll(':scope > [data-name]').forEach(i =>\n {\n if (i.dataset.name === exceptName) {\n i.classList.remove('is-hidden');\n this.dispatch('tabShown', { name: i.dataset.name, el: i });\n }\n else {\n i.classList.add('is-hidden');\n this.dispatch('tabHidden', { name: i.dataset.name, el: i });\n }\n });\n }\n\n this.querySelectorAll(\"[data-name]\").forEach(link =>\n {\n if (link.dataset.name === exceptName) {\n link.classList.add('is-active');\n link.classList.remove('is-inactive');\n } else {\n link.classList.add('is-inactive');\n link.classList.remove('is-active');\n }\n\n link.classList.remove('anim-ended');\n link.onanimationend = () => {\n link.onanimationend = null;\n link.classList.add('anim-ended');\n };\n });\n\n this.activeTab = exceptName;\n this.dispatch('tabChanged', { name: exceptName, el: this });\n },\n\n /**\n **\tShows the tab with the specified name, ignores `data-base-route` and current route as well.\n */\n showTab: function (name)\n {\n return this._hideTabsExcept (name);\n },\n\n /**\n **\tShows a tab given its name. The route will be changed automatically if `data-base-route` is enabled.\n */\n selectTab: function (name)\n {\n if (this.dataset.baseRoute)\n {\n const hash = \"#\" + Router.realLocation(this.dataset.baseRoute.replace('@', name));\n\n if (location.hash != hash) {\n location = hash;\n return;\n }\n }\n\n this.showTab (name);\n }\n});\n","/*\n<r-form data-form-action=\"api-function-name\" [data-strict=\"true|false\"] [data-errors-at=\"\"] [data-method=\"post\"]>\n <input type=\"text\" data-field=\"username\"/>\n</r-form>\n\nr-form .message.is-hidden {\n display: none;\n}\n\nr-form span.field-error {\n display: block;\n color: red;\n}\n*/\n\nimport { Template } from 'rinn';\nimport Element from '../element.js';\nimport Api from '../api.js';\n\nexport default Element.register ('r-form',\n{\n isRoot: true,\n\n /**\n * Initial form model.\n */\n model: { },\n\n /**\n * Element events.\n */\n events:\n {\n 'change [data-field]': '_fieldChanged',\n\n 'click input[type=reset]': 'reset',\n 'click .reset': 'reset',\n\n 'click input[type=submit]': 'submit',\n 'click button[type=submit]': 'submit',\n 'click .submit': 'submit',\n 'submit form': 'submit'\n },\n\n /**\n * Executed when the children of the element are ready.\n */\n ready: function()\n {\n let formElement = document.createElement('form');\n formElement.append(...this.childNodes);\n this.append(formElement);\n\n let def = { };\n let names = this.model.get();\n\n this.querySelectorAll('[data-field]').forEach((i) =>\n {\n i.name = i.dataset.field;\n names[i.name] = i.type;\n\n let val = i.dataset.default;\n if (val == undefined)\n {\n switch (i.type)\n {\n case 'radio':\n if (!i.checked) return;\n val = i.value;\n break;\n\n case 'checkbox':\n val = i.checked ? '1' : '0';\n break;\n\n case 'field':\n val = i.getValue();\n break;\n\n case 'file':\n val = '';\n break;\n\n default:\n val = '';\n break;\n }\n }\n\n def[i.dataset.field] = val;\n });\n\n for (let name in names)\n {\n if (name in def)\n names[name] = def[name];\n else\n names[name] = '';\n }\n\n def = names;\n\n this.model.defaults = def;\n this.model.reset();\n\n this.clearMarkers();\n },\n\n /**\n * Transforms an string returned by the server to a local representation.\n */\n filterString: function (str, r)\n {\n if (!str || !('messages' in global))\n return str;\n\n if (str.startsWith('@messages.'))\n {\n if (str.substr(10) in global.messages)\n str = Template.eval(global.messages[str.substr(10)], r);\n }\n\n return str;\n },\n\n _change: function(elem)\n {\n if ('createEvent' in document)\n {\n let evt = document.createEvent('HTMLEvents');\n evt.initEvent('change', false, true);\n elem.dispatchEvent(evt);\n }\n else\n elem.fireEvent('onchange');\n },\n\n _setField: function (f, value, silent)\n {\n if (!f) return;\n\n for (f of this.querySelectorAll('[data-field=\"'+f+'\"]'))\n {\n switch (f.type || f.tagName.toLowerCase())\n {\n case 'select':\n f.val = f.dataset.value = f.multiple ? (value ? value.split(',') : value) : value;\n f.value = f.val = f.dataset.value;\n\n if (silent !== true) this._change(f);\n break;\n\n case 'checkbox':\n f.checked = parseInt(value) ? true : false;\n break;\n\n case 'radio':\n f.checked = value == f.value;\n break;\n\n case 'field':\n f.val = f.dataset.value = value;\n f.setValue(value);\n break;\n\n case 'file':\n if ((value instanceof File) || (value instanceof Blob))\n {\n f.val = value;\n f.dataset.value = value;\n }\n else if (value instanceof FileList)\n {\n f.val = value;\n f.dataset.value = value;\n }\n else\n {\n f.val = f.dataset.value = '';\n f.value = '';\n }\n\n break;\n\n default:\n f.val = f.dataset.value = value;\n f.value = value;\n\n if (silent !== true) this._change(f);\n break;\n }\n }\n },\n\n _getField: function (f, _value=null, fromFileFields=false)\n {\n if (!f) return null;\n\n if (typeof(f) != 'string')\n {\n let value = f.value == null ? f.val : f.value;\n if (value === null) value = _value;\n\n switch (f.type || f.tagName.toLowerCase())\n {\n case 'select':\n _value = f.multiple ? (value ? value.join(',') : value) : value;\n break;\n\n case 'checkbox':\n _value = f.checked ? '1' : '0';\n break;\n\n case 'radio':\n if (f.checked) _value = f.value;\n break;\n\n case 'field':\n _value = f.getValue();\n break;\n\n case 'file':\n _value = fromFileFields ? (f.files && f.files.length ? (f.multiple ? f.files : f.files[0]) : null) : f.val;\n break;\n\n default:\n _value = value;\n break;\n }\n\n return _value === null ? '' : _value;\n }\n\n _value = null;\n\n for (f of this.querySelectorAll('[data-field=\"'+f+'\"]'))\n _value = this._getField(f, _value);\n\n return _value === null ? '' : _value;\n },\n\n getField: function (name)\n {\n return this._getField(name);\n },\n\n clearMarkers: function ()\n {\n this.classList.remove('busy');\n\n this.querySelectorAll('.message').forEach(i => i.classList.add('is-hidden') );\n this.querySelectorAll('span.field-error').forEach(i => i.remove());\n\n this.querySelectorAll('.field-error').forEach(i => { i.classList.remove('field-error'); i.classList.remove('is-invalid'); });\n this.querySelectorAll('.field-passed').forEach(i => i.classList.remove('field-passed'));\n },\n\n _fieldChanged: function (evt)\n {\n let f = evt.source;\n\n if (f.type == 'file')\n this.model.set (f.dataset.field, this._getField(f, null, true), true);\n else\n this.model.set (f.dataset.field, this._getField(f));\n\n evt.continuePropagation = true;\n },\n\n onModelPropertyChanged: function (evt, args)\n {\n this._setField (args.name, args.value);\n },\n\n _onSuccess: function(r)\n {\n this.classList.remove('busy');\n this.clearMarkers();\n let tmp;\n\n this.dispatch('formSuccess', r);\n\n if (r.message && (tmp = this.querySelector('.message.success')) != null)\n {\n tmp.innerHTML = this.filterString(r.message, r).replace(/\\n/g, '<br/>');\n tmp.classList.remove('is-hidden');\n tmp.onanimationend = () => tmp.classList.add('is-hidden');\n }\n },\n\n _onFailure: function(r)\n {\n this.classList.remove('busy');\n this.clearMarkers();\n let tmp;\n\n this.dispatch('formError', r);\n\n if (r.fields)\n {\n for (let i in r.fields)\n {\n let f = this.querySelector('[data-field-container=\"'+i+'\"]');\n if (!f) {\n f = this.querySelector('[data-field=\"'+i+'\"]');\n if (!f) continue;\n }\n\n f.classList.add('field-error');\n f.classList.add('is-invalid');\n\n let message = this.filterString(r.fields[i], r).replace(/\\n/g, '<br/>');\n if (!message) continue;\n\n let tmp = document.createElement('span');\n tmp.classList.add('field-error');\n tmp.innerHTML = message;\n\n if (this.dataset.errorsAt == 'bottom')\n f.parentElement.append(tmp);\n else if (this.dataset.errorsAt == 'top')\n f.parentElement.prepend(tmp);\n else\n f.parentElement.insertBefore(tmp, f.nextElementSibling);\n\n setTimeout((function (tmp) { return function() { tmp.classList.add('active'); } })(tmp), 25);\n }\n\n if (r.error && (tmp = this.querySelector('.message.error')) != null)\n {\n tmp.innerHTML = this.filterString(r.error, r).replace(/\\n/g, '<br/>');\n tmp.classList.remove('is-hidden');\n tmp.onanimationend = () => tmp.classList.add('is-hidden');\n }\n }\n else\n {\n if ((tmp = this.querySelector('.message.error')) != null)\n {\n tmp.innerHTML = this.filterString(r.error, r).replace(/\\n/g, '<br/>') || ('Error: ' + r.response);\n tmp.classList.remove('is-hidden');\n tmp.onanimationend = () => tmp.classList.add('is-hidden');\n }\n }\n },\n\n reset: function (nsilent)\n {\n this.model.reset (nsilent);\n this.clearMarkers();\n\n if (nsilent === false)\n {\n for (var i in this.model.data)\n this._setField (i, this.model.data[i], true);\n }\n\n return false;\n },\n\n submit: function ()\n {\n if (this.classList.contains('busy'))\n return;\n\n let data = { };\n\n if (this.dataset.strict == 'false')\n Object.assign(data, this.model.get());\n\n let list = { };\n this.querySelectorAll('[data-field]').forEach(e => list[e.dataset.field] = true);\n Object.keys(list).forEach(f => data[f] = this._getField(f));\n\n this.dispatch('beforeSubmit', data);\n\n this.model.set(data);\n\n let f = this.dataset.formAction || this.formAction;\n if (!f) return;\n\n this.classList.add('busy');\n\n if (typeof(f) != 'function')\n {\n let modern = f.indexOf('/') !== -1;\n if (!modern)\n data.f = f;\n\n Api.apiCall(\n modern ? JSON.stringify(data) : data,\n (r) => this[r.response == 200 ? '_onSuccess' : '_onFailure'](r), \n (r) => this._onFailure({ error: 'Unable to execute request.' }), \n this.dataset.method ?? 'POST',\n null,\n modern ? f : null\n );\n }\n else\n f(data, (r) => this[r.response == 200 ? '_onSuccess' : '_onFailure'](r));\n }\n});\n","/*\n <r-panel data-route=\"name\">\n </r-panel>\n\n r-panel {\n display: block;\n }\n\n r-panel:not(.is-active) {\n display: none;\n }\n\n r-panel.is-inactive {\n }\n\n r-panel.is-active {\n }\n*/\n\nimport Element from '../element.js';\nimport Router from '../router.js';\n\nexport default Element.register ('r-panel',\n{\n /**\n * Route object used by this element.\n */\n route: null,\n\n /**\n * Initializes the element.\n */\n init: function()\n {\n this.style.display = '';\n\n // Executed then the panel route is activated.\n this._onActivate = (evt, args) => {\n if (!args.route.changed) return;\n this.show(true);\n };\n\n // Executed then the panel route is deactivated.\n this._onDeactivate = (evt, args) => {\n this.hide();\n };\n\n this.hide();\n },\n\n /**\n * Adds a handler to Router if the data-route attribute was set.\n */\n onConnected: function()\n {\n if (this.dataset.route) {\n this.route = Router.addRoute (this.dataset.route, this._onActivate, this._onDeactivate);\n this.classList.remove('is-active');\n this.classList.add('is-inactive');\n }\n else {\n this.classList.add('is-active');\n this.classList.remove('is-inactive');\n }\n\n this.classList.add('anim-ended');\n },\n\n /**\n * Removes a handler previously added to Router if the data-route attribute was set.\n */\n onDisconnected: function()\n {\n if (this.dataset.route)\n Router.removeRoute(this.dataset.route, this._onActivate, this._onDeactivate);\n },\n\n /**\n * Hides the panel by removing the `is-active` and adding `is-inactive` class to the element. Fires `panelHidden` event.\n */\n hide: function ()\n {\n this.dispatch('panelHidden', this.route ? this.route.args : { });\n this.classList.remove('anim-ended');\n this.classList.remove('is-active');\n this.classList.add('is-inactive');\n this.onanimationend = () => {\n this.classList.add('anim-ended');\n this.onanimationend = null;\n };\n },\n\n /**\n * Shows the panel visible by adding `is-active` and removing `is-inactive` class from the element. If `silent` is true and `data-route` enabled,\n * the current route will not be updated. Fires `panelShown` event.\n * @param {boolean} silent \n */\n show: function (silent=false)\n {\n if (this.dataset.route && !silent)\n {\n let hash = \"#\" + this.dataset.route;\n if (window.location.hash.substr(0, hash.length) != hash) {\n window.location = hash;\n return;\n }\n }\n\n this.dispatch('panelShown', this.route ? this.route.args : { });\n this.classList.remove('anim-ended');\n this.classList.remove('is-inactive');\n this.classList.add('is-active');\n this.onanimationend = () => {\n this.classList.add('anim-ended');\n this.onanimationend = null;\n }\n },\n\n /**\n * Toggles the visibility of the panel. If `silent` is true and `data-route` enabled, the current route will not be updated.\n */\n toggleVisibility: function (silent=false)\n {\n if (this.classList.contains('is-active'))\n this.hide();\n else\n this.show(silent);\n }\n});\n","/*\n <r-list data-list=\"window.dataList1\" data-container=\".x-data\" data-wrap=\"true|false\">\n\n <template data-mode=\"static|dynamic\">\n </template>\n\n <div class=\"x-empty\">\n Nothing to show.\n </div>\n\n <div class=\"x-data\">\n </div>\n\n </r-list>\n\n CSS:\n .is-hidden {\n display: none;\n }\n\n Modifiers:\n .x-empty-null\t\tVisible when the list is in undefined state (before first load).\n .x-empty\t\t\tVisible when there is no data in the list.\n .x-not-empty \t\tVisible when there is data in the list.\n .is-loading \t\tVisible when the list is loading.\n*/\n\nimport { Rinn, ModelList, Template } from 'rinn';\nimport Element from '../element.js';\nimport DataList from '../data-list.js';\n\n/*\n**\tConnects to a ModelList and renders its contents using a template. When using \"dynamic\" template, the contents can be other custom elements, and\n**\tthe model of each item can be accessed by using data-model=\":list-item\", which will cause the item model to be added to the element.\n**\n**\tAdditionally root attribute data-wrap can be set to 'true' to wrap the template contents inside a div with a data-iid representing the ID of the\n**\titem, this will cause any changes to items to affect only the specific item in question.\n*/\n\nexport default Element.register ('r-list',\n{\n list: null,\n\n container: null,\n template: null,\n isEmpty: false,\n isDynamicTemplate: false,\n\n /**\n **\tExecuted when the children of the element are ready.\n */\n ready: function()\n {\n this.container = this.querySelector(this.dataset.container || '.x-data');\n if (!this.container) {\n this.container = document.createElement('div');\n this.container.className = 'x-data';\n this.appendChild(this.container);\n }\n\n let tmp = this.template_elem = this.querySelector('template');\n if (tmp) {\n if (tmp.dataset.mode != 'dynamic') {\n this.template = Template.compile(tmp.innerHTML);\n }\n else {\n this.template = () => tmp.innerHTML;\n this.isDynamicTemplate = true;\n }\n\n tmp.remove();\n }\n else\n this.template = () => '';\n\n this.container.textContent = ' ';\n\n this.setEmpty(null);\n this.setLoading(null);\n },\n\n /**\n **\tExecuted when the children of the element are ready.\n */\n rready: function()\n {\n let list = this.dataList\n if (list) {\n if (typeof(list) === 'string')\n list = DataList.get(list, true);\n }\n else\n list = this.getFieldByPath(this.dataset.list);\n\n if (!list) {\n if (this.dataset.list) console.error('data-list not found: ' + this.dataset.list);\n return;\n }\n\n this.setList(list);\n },\n\n /*\n **\tIndicates if the list is empty. Elements having x-empty, x-not-empty and x-empty-null will be updated.\n */\n setEmpty: function (value)\n {\n if (this.isEmpty === value)\n return;\n\n if (value === true)\n {\n this.querySelectorAll('.x-empty').forEach(i => i.classList.remove('is-hidden'));\n this.querySelectorAll('.x-not-empty').forEach(i => i.classList.add('is-hidden'));\n this.querySelectorAll('.x-empty-null').forEach(i => i.classList.add('is-hidden'));\n }\n else if (value === false)\n {\n this.querySelectorAll('.x-empty').forEach(i => i.classList.add('is-hidden'));\n this.querySelectorAll('.x-not-empty').forEach(i => i.classList.remove('is-hidden'));\n this.querySelectorAll('.x-empty-null').forEach(i => i.classList.add('is-hidden'));\n }\n else\n {\n this.querySelectorAll('.x-empty').forEach(i => i.classList.add('is-hidden'));\n this.querySelectorAll('.x-not-empty').forEach(i => i.classList.add('is-hidden'));\n this.querySelectorAll('.x-empty-null').forEach(i => i.classList.remove('is-hidden'));\n }\n\n this.isEmpty = value;\n },\n\n /*\n **\tIndicates if the list is loading. Elements having is-loading will be updated.\n */\n setLoading: function (value)\n {\n if (value === true)\n this.querySelectorAll('.is-loading').forEach(i => i.classList.remove('is-hidden'));\n else\n this.querySelectorAll('.is-loading').forEach(i => i.classList.add('is-hidden'));\n },\n\n /**\n **\tSets the list model-list of the element.\n */\n setList: function (list)\n {\n if (!list || !Rinn.isInstanceOf(list, ModelList) || this.list === list)\n return;\n\n if (this.list != null)\n {\n if (this.list.dataSource)\n this.list.dataSource.removeEventListener (this.eid+':*');\n\n if (this.list.dataList)\n this.list.dataList.removeEventListener (this.eid+':*');\n\n this.list.removeEventListener (this.eid+':*');\n }\n\n this.list = list;\n\n if (this.list.dataSource) {\n this.list.dataSource.addEventListener (this.eid+':listLoading', this.onLoading, this);\n this.list.dataSource.addEventListener (this.eid+':listLoaded', this.onLoaded, this);\n }\n\n if (this.list.dataList) {\n this.list.dataList.addEventListener (this.eid+':listLoading', this.onLoading, this);\n this.list.dataList.addEventListener (this.eid+':listLoaded', this.onLoaded, this);\n }\n\n this.list.addEventListener (this.eid+':itemsCleared', this.onItemsCleared, this);\n this.list.addEventListener (this.eid+':itemsChanged', this.onItemsChanged, this);\n this.list.addEventListener (this.eid+':itemRemoved', this.onItemRemoved, this);\n this.list.addEventListener (this.eid+':itemChanged', this.onItemChanged, this);\n this.list.addEventListener (this.eid+':itemAdded', this.onItemAdded, this);\n },\n\n /*\n **\tBuilds an item (inside a div) to be added to the container.\n */\n buildItem: function (iid, data, asHtml=false)\n {\n if (this.content) {\n let elem = this.content(data.get(), data);\n elem.dataset.iid = iid;\n return elem;\n }\n\n if (this.container.content) {\n let elem = this.container.content(data.get(), data);\n elem.dataset.iid = iid;\n return elem;\n }\n\n let html = this.template(data.get());\n if (asHtml) return html;\n\n let elem = document.createElement('div');\n \n elem.dataset.iid = iid;\n elem.innerHTML = html;\n\n elem.querySelectorAll('[data-model=\":list-item\"]').forEach(i => {\n i.model = data;\n i.dataset.model = \"this.model\";\n });\n\n for (let attr of this.template_elem.attributes)\n {\n if (attr.nodeName.startsWith('data-_') || attr.nodeName == 'data-mode')\n continue;\n\n elem.setAttribute(attr.nodeName, attr.nodeValue);\n }\n\n return elem;\n },\n\n /*\n **\tExecuted when the list is loading.\n */\n onLoading: function()\n {\n this.setLoading(true);\n },\n\n /*\n **\tExecuted when the list finished loading.\n */\n onLoaded: function()\n {\n this.setLoading(false);\n },\n\n /*\n **\tExecuted when the list is cleared.\n */\n onItemsCleared: function()\n {\n this.container._timeout = setTimeout(() => {\n this.setEmpty(true);\n this.container._timeout = null;\n this.container.textContent = '';\n }, 300);\n },\n\n /*\n **\tExecuted when the items of the list changed.\n */\n onItemsChanged: function()\n {\n if (this.list.length() == 0)\n return;\n\n if (this.container._timeout)\n clearTimeout(this.container._timeout);\n\n this.container._timeout = null;\n this.container.textContent = '';\n\n let i = 0;\n\n for (let data of this.list.getData())\n {\n if (this.dataset.wrap != 'false')\n this.container.append(this.buildItem(this.list.itemId[i++], data));\n else\n this.container.innerHTML += this.buildItem(this.list.itemId[i++], data, true);\n }\n\n this.setEmpty(i == 0);\n },\n\n /*\n **\tExecuted when an item is removed from the list.\n */\n onItemRemoved: function(evt, args)\n {\n if (this.dataset.wrap == 'false')\n {\n this.onItemsChanged();\n return;\n }\n\n let elem = this.container.querySelector('[data-iid=\"'+args.id+'\"]');\n if (!elem) return;\n\n elem.remove();\n this.setEmpty(this.list.length() == 0);\n },\n\n /*\n **\tExecuted when an item changes.\n */\n onItemChanged: function(evt, args)\n {\n if (this.isDynamicTemplate) return;\n\n if (this.dataset.wrap == 'false')\n {\n this.onItemsChanged();\n return;\n }\n\n let elem = this.container.querySelector('[data-iid=\"'+args.id+'\"]');\n if (!elem) return;\n\n elem.innerHTML = this.template(args.item);\n },\n\n /*\n **\tExecuted when an item is added to the list.\n */\n onItemAdded: function(evt, args)\n {\n if (args.position == 'head')\n {\n if (this.dataset.wrap != 'false')\n this.container.prepend(this.buildItem(args.id, args.item));\n else\n this.container.innerHTML = this.buildItem(args.id, args.item, true) + this.container.innerHTML;\n }\n else\n {\n if (this.dataset.wrap != 'false')\n this.container.append(this.buildItem(args.id, args.item));\n else\n this.container.innerHTML += this.buildItem(args.id, args.item, true);\n }\n\n this.setEmpty(false);\n },\n\n /**\n * \tForces re-rendering of the element.\n */\n refresh: function()\n {\n this.onItemsChanged();\n }\n});\n","/*\n <r-item data-model=\"window.model1\">\n </r-item>\n*/\n\nimport Element from '../element.js';\n\nexport default Element.register ('r-item',\n{\n isRoot: true,\n\n /**\n * Initializes the element.\n */\n init: function() {\n },\n\n /**\n * Executed when the children and root are ready.\n */\n rready: function()\n {\n let model = this.dataModel ?? this.getFieldByPath(this.dataset.model);\n if (!model) model = { };\n\n this.setModel (model);\n }\n});\n","/*\n <r-paginator data-source=\"window.dataSource1\" data-page-size=\"25\">\n <span data-watch=\"count\">Showing [offsetStart] to [offsetEnd] out of [count]</span>\n\n <button data-action=\"firstPage\">First</button>\n <button data-action=\"prevPage\">&laquo;</button>\n <button data-action=\"nextPage\">&raquo;</button>\n <button data-action=\"lastPage\">Last</button>\n <button data-action=\"refresh\">Refresh</button>\n\n <input type=\"text\" data-property=\"pageSize\" />\n </r-paginator>\n*/\n\nimport { Rinn } from 'rinn';\nimport Element from '../element.js';\nimport DataSource from '../data-source.js';\n\n/*\n**\tConnects to a data source to provide pagination features.\n*/\n\nexport default Element.register ('r-paginator',\n{\n isRoot: true,\n\n source: null,\n template: null,\n\n /**\n **\tInitializes the element.\n */\n init: function()\n {\n this.setModel({\n offsetStart: 0,\n offsetEnd: 0,\n count: 0, offset: 0,\n currentPageSize: this.dataset.pageSize || 25,\n pageSize: this.dataset.pageSize || 25\n });\n\n this.listen('propertyChanged.pageSize', (evt, args) =>\n {\n if (this.model.get('currentPageSize') == args.value)\n return;\n\n this.model.set('currentPageSize', args.value);\n this.updateOffset('range');\n });\n },\n\n rready: function()\n {\n let source = this.dataSource;\n if (source) {\n if (typeof(source) === 'string')\n source = DataSource.get(source, true);\n }\n else\n source = this.getFieldByPath(this.dataset.source);\n\n if (!source) {\n if (this.dataset.source) console.error('data-source not found: ' + this.dataset.source);\n return;\n }\n\n this.setSource(source);\n },\n\n /**\n **\tSets the source model-list of the paginator.\n */\n setSource: function (source)\n {\n if (!source || !Rinn.isInstanceOf(source, DataSource) || this.source === source)\n return;\n\n if (this.source != null)\n {\n this.source.removeEventListener (this.eid+':*');\n this.source.includeCount = false;\n }\n\n this.source = source;\n\n this.source.includeCount = true;\n this.updateOffset();\n\n this.source.addEventListener (this.eid+':requestPropertyChanged', this.onRequestPropertyChanged, this);\n this.source.addEventListener (this.eid+':countChanged', this.onCountChanged, this);\n this.source.addEventListener (this.eid+':listItemRemoved', this.onItemRemoved, this);\n this.source.addEventListener (this.eid+':listItemAdded', this.onItemAdded, this);\n\n this.source.setNamespace(this.eid);\n this.source.request.update(true);\n this.source.setNamespace(null);\n },\n\n /*\n **\tUpdates several offset related fields in the paginator model. Optionally refreshes the data source with the specified mode.\n */\n updateOffset: function(mode=null)\n {\n this.model.set('offsetStart', this.model.get('count') != 0 ? this.model.get('offset') + 1 : 0);\n this.model.set('offsetEnd', Math.min(this.model.get('count'), this.model.get('offsetStart') + this.model.getInt('pageSize') - 1));\n this.model.update('count');\n\n let _count = this.source.request.get('count');\n let _offset = this.source.request.get('offset');\n\n this.source.request.set('count', this.model.getInt('pageSize'));\n this.source.request.set('offset', this.model.get('offset'));\n\n if (mode && (_count != this.source.request.get('count') || _offset != this.source.request.get('offset')))\n this.source.refresh(mode);\n },\n\n /*\n **\tEvent handler invoked when a property of the source request changes. The property is copied to the local model.\n */\n onRequestPropertyChanged: function(evt, args)\n {\n if (args.name == 'count' || args.name == 'offset')\n return;\n\n this.model.set(args.name, args.value);\n },\n\n /*\n **\tEvent handler invoked when a property of the model has changed. The property is copied to the data source request model.\n */\n onModelPropertyChanged: function (evt, args)\n {\n let ignored = [\n 'offsetStart',\n 'offsetEnd',\n 'count',\n 'offset',\n 'currentPageSize',\n 'pageSize'\n ];\n\n if (ignored.indexOf(args.name) != -1)\n return;\n\n if (this.source.request.get(args.name) == args.value)\n return;\n\n this.source.request.set(args.name, args.value);\n this.source.refresh('filter');\n },\n\n /*\n **\tExecuted when the remote count changes.\n */\n onCountChanged: function(evt, args)\n {\n this.model.set('count', evt.source.count, false);\n this.updateOffset();\n },\n\n /*\n **\tExecuted when an item is removed from the list.\n */\n onItemRemoved: function(evt, args)\n {\n this.model.set('count', this.model.getInt('count') - 1, false);\n this.updateOffset();\n },\n\n /*\n **\tExecuted when an item is added to the list.\n */\n onItemAdded: function(evt, args)\n {\n this.model.set('count', this.model.getInt('count') + 1, false);\n this.updateOffset();\n },\n\n /*\n **\tMoves to the previous page.\n */\n prevPage: function()\n {\n if (this.model.get('offset') <= 0)\n return;\n\n let offs = this.model.get('offset') - this.model.getInt('pageSize');\n if (offs < 0) offs = 0;\n\n this.model.set('offset', offs);\n this.updateOffset('range');\n },\n\n /*\n **\tMoves to the next page.\n */\n nextPage: function()\n {\n let offs = this.model.get('offset') + this.model.getInt('pageSize');\n if (offs >= this.model.get('count')) return;\n\n this.model.set('offset', offs);\n this.updateOffset('range');\n },\n\n /*\n **\tMoves to the first page.\n */\n firstPage: function()\n {\n this.model.set('offset', 0);\n this.updateOffset('range');\n },\n\n /*\n **\tMoves to the last page.\n */\n lastPage: function()\n {\n let offs = this.model.get('count') - this.model.getInt('pageSize');\n if (offs < 0) offs = 0;\n\n this.model.set('offset', offs);\n this.updateOffset('range');\n },\n\n /*\n **\tRefreshes the data source.\n */\n refresh: function()\n {\n this.source.refresh('full');\n },\n\n /*\n **\tClears (set to empty) the specified fields from the data source's request parameters.\n */\n clear: function(args)\n {\n for (let i = 0; i < args.length; i++)\n this.model.set(args[i], '');\n }\n});\n","/*\n <r-table data-source=\"window.dataSource1\">\n <table>\n <thead>\n <tr>\n <th>A</th>\n <th>B</th>\n </tr>\n </thead>\n\n <tbody class=\"x-data\">\n <tr>\n <td>[a]</td>\n <td>[b]</td>\n </tr>\n </tbody>\n </table>\n </r-table>\n\n CSS:\n .is-hidden {\n display: none;\n }\n\n th[data-sort] {\n cursor: pointer; text-decoration: underline;\n }\n\n th[data-sort][data-order=\"asc\"]:before {\n content: \"\\25B2\";\n }\n\n th[data-sort][data-order=\"desc\"]:before {\n content: \"\\25BC\";\n }\n\n Modifiers:\n .x-empty\t\t\tAdd to elements that should be shown only when there is no data in the data source.\n .x-not-empty \t\tAdd to elements that should be shown only when there is data in the data source.\n [data-sort]\t\t\tAdded to th/td elements in thead, marks the column as sortable.\n*/\n\nimport { Rinn, Template } from 'rinn';\nimport Element from '../element.js';\nimport DataSource from '../data-source.js';\n\n/**\n * Connects to a DataSource and renders its contents as a table.\n */\n\nexport default Element.register ('r-table',\n{\n isRoot: true,\n\n source: null,\n template: null,\n container: null,\n isEmpty: null,\n\n /**\n * Initializes the element.\n */\n init: function()\n {\n this.setModel({ });\n },\n\n /**\n * Executed when the children of the element are ready.\n */\n ready: function()\n {\n this.container = this.querySelector(this.dataset.container || 'tbody.x-data');\n if (!this.container) throw new Error ('r-table requires a container');\n\n if (this.container.dataset.mode != 'dynamic')\n this.template = Template.compile(this.container.innerHTML);\n else\n this.template = () => this.container.innerHTML;\n\n this.temporalBody = document.createElement('tbody');\n this.container.textContent = ' ';\n\n this.setEmpty(true);\n },\n\n /**\n * Executed when the children and root elements are ready.\n */\n rready: function()\n {\n let source = this.dataSource;\n if (source) {\n if (typeof(source) === 'string')\n source = DataSource.get(source, true);\n }\n else\n source = this.getFieldByPath(this.dataset.source);\n\n if (!source) {\n if (this.dataset.source) console.error('data-source not found: ' + this.dataset.source);\n return;\n }\n\n this.setSource(source);\n },\n\n /*\n **\tIndicates if the table is empty. Elements having .x-not-empty will be hidden.\n */\n setEmpty: function (value)\n {\n if (this.isEmpty === value)\n return;\n\n if (value)\n {\n this.querySelectorAll('.x-empty').forEach(i => i.classList.remove('is-hidden'));\n this.querySelectorAll('.x-not-empty').forEach(i => i.classList.add('is-hidden'));\n }\n else\n {\n this.querySelectorAll('.x-empty').forEach(i => i.classList.add('is-hidden'));\n this.querySelectorAll('.x-not-empty').forEach(i => i.classList.remove('is-hidden'));\n }\n\n this.isEmpty = value;\n },\n\n /**\n **\tSets the data source of the element.\n */\n setSource: function (source)\n {\n if (!source || !Rinn.isInstanceOf(source, DataSource) || this.source === source)\n return;\n\n if (this.source != null)\n this.source.removeEventListener (this.eid+':*');\n\n this.source = source;\n\n this.source.addEventListener (this.eid+':requestPropertyChanged', this.onRequestPropertyChanged, this);\n this.source.addEventListener (this.eid+':listItemsCleared', this.onItemsCleared, this);\n this.source.addEventListener (this.eid+':listItemsChanged', this.onItemsChanged, this);\n this.source.addEventListener (this.eid+':listItemRemoved', this.onItemRemoved, this);\n this.source.addEventListener (this.eid+':listItemChanged', this.onItemChanged, this);\n this.source.addEventListener (this.eid+':listItemAdded', this.onItemAdded, this);\n\n this.source.setNamespace(this.eid);\n this.source.request.update(true);\n this.source.setNamespace(null);\n },\n\n /*\n **\tEvent handler invoked when a property of the source request changes. The property is copied to the local model.\n */\n onRequestPropertyChanged: function(evt, args)\n {\n this.model.set(args.name, args.value);\n\n if (args.name == 'sort')\n {\n this.querySelectorAll('thead [data-sort]').forEach(i => i.dataset.order = '');\n }\n else if (args.name == 'order')\n {\n let elem = this.querySelector('thead [data-sort=\"'+evt.source.get('sort')+'\"]');\n if (elem) elem.dataset.order = args.value;\n }\n },\n\n /*\n **\tEvent handler invoked when a property of the model has changed. The property is copied to the data source request model.\n */\n onModelPropertyChanged: function (evt, args)\n {\n if (this.source.request.get(args.name) == args.value)\n return;\n\n this.source.request.set(args.name, args.value);\n\n let ignored = [\n 'count',\n 'offset'\n ];\n\n if (ignored.indexOf(args.name) != -1)\n return;\n\n this.source.refresh('filter');\n },\n\n /*\n **\tEvent handler invoked when a property of the model is removed.\n */\n onModelPropertyRemoved: function (evt, args)\n {\n if (typeof(args.fields) == 'string')\n this.source.request.remove(i);\n else\n args.fields.forEach(i => this.source.request.remove(i));\n\n this.source.refresh('filter');\n },\n\n /*\n **\tBuilds an item to be added to the container.\n */\n buildItem: function (iid, data)\n {\n if (this.container.content) {\n let elem = this.container.content(data.get(), data);\n elem.dataset.iid = iid;\n return elem;\n }\n\n let elem = this.temporalBody;\n\n elem.innerHTML = this.template(data.get());\n\n elem.querySelectorAll('[data-model=\":list-item\"]').forEach(i => {\n i.model = data;\n i.dataset.model = \"this.model\";\n });\n\n elem = elem.firstElementChild;\n elem.dataset.iid = iid;\n\n return elem;\n },\n\n /*\n **\tExecuted when the list is cleared.\n */\n onItemsCleared: function(evt, args)\n {\n this.container._timeout = setTimeout(() => {\n this.setEmpty(true);\n this.container._timeout = null;\n this.container.textContent = '';\n }, 300);\n },\n\n /*\n **\tExecuted when the items of the list changed.\n */\n onItemsChanged: function(evt, args)\n {\n if (this.source.list.length() == 0)\n return;\n\n if (this.container._timeout)\n clearTimeout(this.container._timeout);\n\n this.container._timeout = null;\n this.container.textContent = '';\n\n let i = 0;\n\n for (let data of this.source.list.getData())\n this.container.append(this.buildItem(this.source.list.itemId[i++], data));\n\n this.setEmpty(i == 0);\n },\n\n /*\n **\tExecuted when an item is removed from the list.\n */\n onItemRemoved: function(evt, args)\n {\n let elem = this.container.querySelector('[data-iid=\"'+args.id+'\"]');\n if (!elem) return;\n\n elem.remove();\n this.setEmpty(this.source.list.length() == 0);\n },\n\n /*\n **\tExecuted when an item changes.\n */\n onItemChanged: function(evt, args)\n {\n let elem = this.container.querySelector('[data-iid=\"'+args.id+'\"]');\n if (!elem) return;\n\n let _elem = this.buildItem(args.id, args.item);\n this.container.replaceChild(_elem, elem);\n },\n\n /*\n **\tExecuted when an item is added to the list.\n */\n onItemAdded: function(evt, args)\n {\n if (args.position == 'head')\n this.container.prepend(this.buildItem(args.id, args.item));\n else\n this.container.append(this.buildItem(args.id, args.item));\n\n this.setEmpty(false);\n },\n\n /*\n **\tHandles clicks to data-sort elements.\n */\n \"event click thead [data-sort]\": function(evt, args)\n {\n if (this.source.request.get('sort') == evt.source.dataset.sort)\n {\n this.source.request.set('order', this.source.request.get('order') == 'asc' ? 'desc' : 'asc');\n this.source.refresh('order');\n }\n else\n {\n this.source.request.set('sort', evt.source.dataset.sort);\n this.source.request.set('order', 'asc', true);\n this.source.refresh('order');\n }\n },\n\n /*\n **\tRefreshes the data source.\n */\n refresh: function()\n {\n this.source.refresh('full');\n },\n\n /*\n **\tClears (set to empty) the specified fields from the data source's request parameters.\n */\n clear: function(args)\n {\n for (let i = 0; i < args.length; i++)\n this.model.set(args[i], '');\n }\n});\n","/*\n <r-select data-list=\"window.dataList1\" data-blank=\"\"></r-select>\n*/\n\nimport { Rinn, ModelList } from 'rinn';\nimport Element from '../element.js';\n\n/*\n**\tConnects to a ModelList and renders its contents as a <select> element.\n*/\n\nexport default Element.register ('r-select',\n{\n list: null,\n container: null,\n\n value: '',\n\n /**\n **\tInitializes the element.\n */\n init: function()\n {\n this.container = document.createElement('select');\n this.parentElement.insertBefore(this.container, this);\n\n let list = [];\n\n for (let attr of this.attributes)\n {\n if (attr.nodeName.startsWith('data-_') || attr.nodeName == 'data-list' || attr.nodeName == 'data-blank')\n continue;\n\n this.container.setAttribute(attr.nodeName, attr.nodeValue);\n list.push(attr.nodeName);\n }\n\n if (this.disabled)\n this.container.disabled = this.disabled;\n\n list.forEach(i => this.removeAttribute(i));\n\n this.textContent = ' ';\n this.style.display = 'none';\n },\n\n /**\n **\tExecuted when the children and parent of the element are ready.\n */\n rready: function()\n {\n let list = this.dataList\n if (list) {\n if (typeof(list) === 'string')\n list = DataList.get(list, true);\n }\n else\n list = this.getFieldByPath(this.dataset.list);\n\n if (!list) {\n if (this.dataset.list) console.error('data-list not found: ' + this.dataset.list);\n return;\n }\n\n this.setList(list);\n\n if (this.parentElement.lastElementChild !== this)\n this.parentElement.append(this);\n },\n\n /**\n **\tSets the list model-list of the element.\n */\n setList: function (list)\n {\n if (!list || !Rinn.isInstanceOf(list, ModelList) || this.list === list)\n return;\n\n if (this.list != null)\n this.list.removeEventListener (this.eid+':*');\n\n this.list = list;\n\n if (this.list.dataSource)\n this.list.dataSource.includeEnum = true;\n\n this.list.addEventListener (this.eid+':itemsCleared', this.onItemsCleared, this);\n this.list.addEventListener (this.eid+':itemsChanged', this.onItemsChanged, this);\n this.list.addEventListener (this.eid+':itemRemoved', this.onItemsChanged, this);\n this.list.addEventListener (this.eid+':itemChanged', this.onItemsChanged, this);\n this.list.addEventListener (this.eid+':itemAdded', this.onItemsChanged, this);\n\n this.onItemsChanged();\n },\n\n /*\n **\tExecuted when the list is cleared.\n */\n onItemsCleared: function(evt, args)\n {\n this.container.textContent = '';\n },\n\n /*\n **\tExecuted when the items of the list changed.\n */\n onItemsChanged: function(evt, args)\n {\n if (this.list.length() == 0)\n return;\n\n let list = this.list.getData();\n let value, label, s = '';\n\n if (list[0].has('value')) value = 'value';\n else if (list[0].has('id')) value = 'id';\n\n if (list[0].has('label')) label = 'label';\n else if (list[0].has('name')) label = 'name';\n\n if ('blank' in this.dataset)\n s += '<option value=\"\">'+this.dataset.blank+'</option>';\n\n if (list[0].has('group'))\n {\n let groups = { };\n list.forEach(i => groups[i.get('group')] = null);\n\n for (let i in groups)\n groups[i] = { name: i, list: [] };\n\n list.forEach(i => groups[i.get('group')].list.push(i));\n\n groups = Object.values(groups);\n groups.forEach(g => {\n s += '<optgroup label=\"'+g.name+'\">';\n g.list.forEach(i => s += '<option value=\"'+i.get(value)+'\">'+i.get(label)+'</option>');\n s += '</optgroup>';\n });\n }\n else\n list.forEach(i => s += '<option value=\"'+i.get(value)+'\">'+i.get(label)+'</option>');\n\n this.container.innerHTML = s;\n this.container.value = this.container.dataset.value;\n },\n\n /**\n * \tForces re-rendering of the element.\n */\n refresh: function()\n {\n this.onItemsChanged();\n }\n});\n","/*\n <r-image-cropper>\n </r-image-cropper>\n*/\n\nimport Element from '../element.js';\nimport Utils from '../utils.js';\n\nexport default Element.register ('r-image-cropper',\n{\n /*\n **\tDefault aspect ratio.\n */\n aspectRatio: 1,\n\n /*\n **\tCurrent image scale.\n */\n imageScale0: 0, imageScale: 1,\n\n /*\n **\tImage translation offsets.\n */\n imageOffsX: 0, imageOffsY: 0,\n\n /*\n **\tPointer contexts.\n */\n pointerA: null, pointerB: null,\n\n /*\n **\tClient bounding box.\n */\n bounds: null,\n\n /*\n **\tInitializes the element.\n */\n init: function()\n {\n this.canvas = document.createElement('canvas');\n this.appendChild(this.canvas);\n\n this.g = this.canvas.getContext('2d');\n\n this.pointerA = { id: null, active: false, sx: 0, sy: 0, cx: 0, cy: 0, ix: 0, iy: 0 };\n this.pointerB = { id: null, active: false, sx: 0, sy: 0, cx: 0, cy: 0, ix: 0, iy: 0 };\n\n this.log = document.createElement('div');\n this.appendChild(this.log);\n },\n\n /*\n **\tSets the image for the cropper from an image URL.\n */\n setImageUrl: function(url)\n {\n Utils.loadImageFromUrl(url, (image) => {\n this.setImage(image);\n });\n },\n\n /*\n **\tSets the image for the cropper from an HTML File object.\n */\n setImageFile: function(file)\n {\n Utils.loadAsDataUrl(file, (url) => {\n Utils.loadImageFromUrl(url, (image) => {\n this.setImage(image);\n });\n });\n },\n\n /*\n **\tSets the cropper image from an HTML Image element.\n */\n setImage: function(image)\n {\n this.image = image;\n\n this.reset();\n\n this.imageScale = Math.max(this.canvas.width / this.image.width, this.canvas.height / this.image.height);\n\n this.imageOffsX = (this.canvas.width - this.imageScale*this.image.width)*0.5;\n this.imageOffsY = (this.canvas.height - this.imageScale*this.image.height)*0.5;\n\n this.render();\n },\n\n /*\n **\tReturns the blob and URL representing the current canvas state.\n */\n getBlobAndUrl: function(callback, type='image/png', quality=0.9)\n {\n this.canvas.toBlob((blob) => {\n callback(blob, URL.createObjectURL(blob));\n },\n type, quality);\n },\n\n /*\n **\tAuto-resizes the canvas to ensure the aspect ratio is maintained.\n */\n reset: function()\n {\n this.bounds = this.getBoundingClientRect();\n\n this.canvas.width = this.bounds.width;\n this.canvas.height = this.bounds.width/this.aspectRatio;\n },\n\n /*\n **\tAuto-resizes the canvas to ensure the aspect ratio is maintained and renders the image.\n */\n render: function()\n {\n this.canvas.width = this.canvas.width;\n\n this.g.fillStyle = '#000';\n this.g.beginPath();\n this.g.rect(0, 0, this.canvas.width, this.canvas.height);\n this.g.fill();\n\n this.g.translate(this.imageOffsX, this.imageOffsY);\n this.g.scale(this.imageScale, this.imageScale);\n this.g.drawImage(this.image, 0, 0);\n },\n\n /*\n **\tTranslates the image by the given offsets.\n */\n translateImage: function(offsX, offsY)\n {\n this.imageOffsX += offsX;\n this.imageOffsY += offsY;\n\n this.render(true);\n },\n\n /*\n **\tHandle mouse events on the canvas.\n */\n \"event mousemove canvas\": function(evt)\n {\n if (this.pointerA.active)\n {\n this.pointerA.cx = evt.clientX;\n this.pointerA.cy = evt.clientY;\n\n this.translateImage(this.pointerA.cx - this.pointerA.sx, this.pointerA.cy - this.pointerA.sy);\n\n this.pointerA.sx = this.pointerA.cx;\n this.pointerA.sy = this.pointerA.cy;\n }\n\n this.pointerA.ix = ((evt.clientX-this.bounds.left) - this.imageOffsX) / this.imageScale;\n this.pointerA.iy = ((evt.clientY-this.bounds.top) - this.imageOffsY) / this.imageScale;\n },\n\n \"event mousedown canvas\": function(evt)\n {\n this.pointerA.active = true;\n this.pointerA.sx = evt.clientX;\n this.pointerA.sy = evt.clientY;\n },\n\n \"event mouseup canvas\": function(evt)\n {\n this.pointerA.active = false;\n },\n\n \"event wheel canvas\": function(evt)\n {\n if (evt.deltaY > 0)\n this.imageScale -= 0.045;\n else\n this.imageScale += 0.045;\n\n if (this.imageScale < 0.1) this.imageScale = 0.1;\n\n this.imageOffsX += -this.pointerA.ix*this.imageScale + (evt.clientX-this.bounds.left) - this.imageOffsX;\n this.imageOffsY += -this.pointerA.iy*this.imageScale + (evt.clientY-this.bounds.top) - this.imageOffsY;\n\n this.render();\n },\n\n /*\n **\tHandle touch events on the canvas.\n */\n \"event touchmove canvas\": function(evt)\n {\n for (let i of evt.changedTouches)\n {\n if (this.pointerA.id == i.identifier)\n {\n this.pointerA.cx = i.clientX;\n this.pointerA.cy = i.clientY;\n }\n else if (this.pointerB.id == i.identifier)\n {\n this.pointerB.cx = i.clientX;\n this.pointerB.cy = i.clientY;\n }\n }\n\n if (this.pointerA.active && this.pointerB.active)\n {\n let d0 = Math.sqrt(Math.pow(this.pointerA.sx-this.pointerB.sx, 2) + Math.pow(this.pointerA.sy-this.pointerB.sy, 2));\n let d1 = Math.sqrt(Math.pow(this.pointerA.cx-this.pointerB.cx, 2) + Math.pow(this.pointerA.cy-this.pointerB.cy, 2));\n\n let d = d1 - d0;\n this.imageScale += (d/10)*0.025;\n if (this.imageScale < 0.1) this.imageScale = 0.1;\n\n this.imageOffsX += -this.pointerA.ix*this.imageScale + (this.pointerA.cx-this.bounds.left) - this.imageOffsX;\n this.imageOffsY += -this.pointerA.iy*this.imageScale + (this.pointerA.cy-this.bounds.top) - this.imageOffsY;\n\n this.pointerA.sx = this.pointerA.cx;\n this.pointerA.sy = this.pointerA.cy;\n\n this.pointerB.sx = this.pointerB.cx;\n this.pointerB.sy = this.pointerB.cy;\n\n this.render();\n }\n else\n {\n let p = this.pointerA.active ? this.pointerA : (this.pointerB.active ? this.pointerB : null);\n if (!p) return;\n\n this.translateImage(p.cx - p.sx, p.cy - p.sy);\n\n p.sx = p.cx;\n p.sy = p.cy;\n }\n },\n\n \"event touchstart canvas\": function(evt)\n {\n this.imageScale0 = this.imageScale;\n\n for (let i of evt.changedTouches)\n {\n if (this.pointerA.id === null)\n {\n this.pointerA.id = i.identifier;\n this.pointerA.active = true;\n this.pointerA.sx = i.clientX;\n this.pointerA.sy = i.clientY;\n this.pointerA.ix = ((i.clientX-this.bounds.left) - this.imageOffsX) / this.imageScale;\n this.pointerA.iy = ((i.clientY-this.bounds.top) - this.imageOffsY) / this.imageScale;\n }\n else if (this.pointerB.id === null)\n {\n this.pointerB.id = i.identifier;\n this.pointerB.active = true;\n this.pointerB.sx = i.clientX;\n this.pointerB.sy = i.clientY;\n this.pointerB.ix = ((i.clientX-this.bounds.left) - this.imageOffsX) / this.imageScale;\n this.pointerB.iy = ((i.clientY-this.bounds.top) - this.imageOffsY) / this.imageScale;\n }\n }\n },\n\n \"event touchend canvas\": function(evt)\n {\n for (let i of evt.changedTouches)\n {\n if (this.pointerA.id == i.identifier)\n {\n this.pointerA.id = null;\n this.pointerA.active = false;\n }\n else if (this.pointerB.id == i.identifier)\n {\n this.pointerB.id = null;\n this.pointerB.active = false;\n }\n }\n },\n\n \"event touchcancel canvas\": function(evt)\n {\n for (let i of evt.changedTouches)\n {\n if (this.pointerA.id == i.identifier)\n {\n this.pointerA.id = null;\n this.pointerA.active = false;\n }\n else if (this.pointerB.id == i.identifier)\n {\n this.pointerB.id = null;\n this.pointerB.active = false;\n }\n }\n }\n});\n","\nconst Utils =\n{\n /**\n * Forces the browser to show a download dialog.\n * @param {string} filename\n * @param {string} url\n */\n showDownload: function (filename, url)\n {\n let link = document.createElement(\"a\");\n link.href = url;\n\n link.style.display = 'none';\n link.download = filename;\n link.target = \"_blank\";\n\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n\n /**\n * Forces the browser to show a file selection dialog.\n * @param {boolean} allowMultiple\n * @param {string} accept \n * @param {function(File[])} callback \n */\n showFilePicker: function (allowMultiple, accept, callback)\n {\n let input = document.createElement(\"input\");\n\n input.type = \"file\";\n input.accept = accept;\n input.style.display = 'none';\n input.multiple = allowMultiple;\n\n document.body.appendChild(input);\n\n input.onchange = function() {\n callback(input.files);\n };\n\n document.body.onfocus = function() {\n document.body.onfocus = null;\n document.body.removeChild(input);\n };\n\n input.click();\n },\n\n /**\n * Loads a file or blob and returns the content as a dataURL.\n * @param {File|Blob} file\n * @param {function(string)} callback\n */\n loadAsDataUrl: function (file, callback)\n {\n let reader = new FileReader();\n\n reader.onload = function(e) {\n callback (e.target.result, null);\n };\n\n reader.onerror = function(e) {\n callback (null, e);\n };\n\n reader.readAsDataURL(file);\n },\n\n /**\n * Loads a file or blob and returns the content as text.\n * @param {File|Blob} file\n * @param {function(string)} callback\n */\n loadAsText: function (file, callback)\n {\n let reader = new FileReader();\n\n reader.onload = function(e) {\n callback (e.target.result);\n };\n\n reader.readAsText(file);\n },\n\n /**\n * Loads a file or blob and returns the content as array buffer.\n * @param {File|Blob} file\n * @param {function(ArrayBuffer)} callback\n */\n loadAsArrayBuffer: function (file, callback)\n {\n let reader = new FileReader();\n\n reader.onload = function(e) {\n callback (e.target.result);\n };\n\n reader.readAsArrayBuffer(file);\n },\n\n /**\n * Loads a list of files or blobs and returns the content as dataURLs.\n * @param {Array<File|Blob>} fileList\n * @param {function([{ name:string, size:number, url:string }])} callback\n */\n loadAllAsDataUrl: function (fileList, callback)\n {\n let result = [];\n\n if (!fileList || !fileList.length) {\n callback(result);\n return;\n }\n\n let loadNext = function (i)\n {\n if (i == fileList.length) {\n callback(result);\n return;\n }\n\n Utils.loadAsDataUrl (fileList[i], function(url, err) {\n if (!err) {\n result.push({ name: fileList[i].name, size: fileList[i].size, url: url });\n }\n loadNext(i+1);\n });\n };\n\n loadNext(0);\n },\n\n /**\n * Loads an image from a url and returns it as an Image object.\n * @param {string} url\n * @param {function(Image)} callback\n */\n loadImageFromUrl: function (url, callback)\n {\n let image = new Image();\n image.onload = () => callback(image);\n image.onerror = () => callback(null);\n image.src = url;\n }\n};\n\nexport default Utils;\n","\nimport { Rinn } from 'rinn';\n\n//!class db\n\nexport default\n{\n\t/**\n\t * Database connection.\n\t */\n\tdb: null,\n\n\t/**\n\t * Initializes the database connection.\n\t * @param {string} dbName\n\t * @param {number} version\n\t * @param {(db: IDBDatabase, txn: IDBTransaction, oldVersion: number) => void} upgradeCallback\n\t * @returns {Promise<void>}\n\t * !static init (dbName: string, version: number, upgradeCallback: (db: IDBDatabase, txn: IDBTransaction, oldVersion: number) => void) : Promise<void>;\n\t */\n\tinit: function (dbName, version, upgradeCallback)\n\t{\n\t\treturn new Promise((resolve, reject) =>\n\t\t{\n\t\t\tif (!global.indexedDB)\n\t\t\t{\n\t\t\t\treject ('IndexedDB is not available in your system.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet req = indexedDB.open(dbName, version);\n\t\t\treq.onerror = (evt) =>\n\t\t\t{\n\t\t\t\tlet err = evt.target.error + '';\n\n\t\t\t\tif (err.indexOf('AbortError') !== -1)\n\t\t\t\t\terr = \"\\n\" + req.message;\n\n\t\t\t\treject('Unable to open database: ' + err);\n\t\t\t\treturn;\n\t\t\t};\n\n\t\t\treq.onupgradeneeded = async (evt) =>\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tconst db = evt.target.result;\n\t\t\t\t\tconst txn = evt.target.transaction;\n\n\t\t\t\t\tif (evt.oldVersion < 1)\n\t\t\t\t\t\tdb.createObjectStore('system', { keyPath: ['name'] });\n\n\t\t\t\t\tawait upgradeCallback(db, txn, evt.oldVersion);\n\t\t\t\t}\n\t\t\t\tcatch (e) {\n\t\t\t\t\treq.message = e.message;\n\t\t\t\t\treq.transaction.abort();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treq.onsuccess = async (evt) =>\n\t\t\t{\n\t\t\t\tthis.db = evt.target.result;\n\t\t\t\tresolve();\n\t\t\t};\n\t\t});\n\t},\n\n\t/**\n\t * Ensures the database is ready to be used, or throws an exception.\n\t */\n\tensureConnected: function()\n\t{\n\t\tif (!this.db)\n\t\t\talert('Error: Database not initialized.');\n\t},\n \n\t/**\n\t * Returns an index object for later use with methods that accept an IDBIndex in the `storeName` parameter.\n\t * @param {string} storeName\n\t * @param {string} indexName\n\t * @returns {IDBIndex}\n\t * !static index (storeName: string, indexName: string) : IDBIndex;\n\t */\n\tindex: function (storeName, indexName)\n\t{\n\t\tthis.ensureConnected();\n\n\t\tlet store = this.db.transaction(storeName, 'readwrite').objectStore(storeName);\n\n\t\tlet index = store.index(indexName);\n\t\tif (!index) throw new Error ('Unable to find index `' + indexName + '` in store ' + storeName);\n\n\t\treturn index;\n\t},\n\n\t/**\n\t * Runs a callback for each record in a data store.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {string} id\n\t * @param { (value:object, cursor:IDBCursor) => Promise<boolean> } callback\n\t * @returns {Promise<void>}\n\t * !static forEach (storeName: string|IDBIndex|IDBObjectStore, id: string, callback: (value:object, cursor:IDBCursor) => Promise<boolean>) : Promise<void>;\n\t */\n\tforEach: function (storeName, id, callback)\n\t{\n\t\tthis.ensureConnected();\n\n\t\tif (typeof(id) === 'function')\n\t\t{\n\t\t\tcallback = id;\n\t\t\tid = null;\n\t\t}\n\n\t\treturn new Promise(async (resolve, reject) =>\n\t\t{\n\t\t\tlet request, store;\n\n\t\t\tif (typeof(storeName) === 'string')\n\t\t\t\tstore = this.db.transaction(storeName, 'readwrite').objectStore(storeName);\n\t\t\telse\n\t\t\t\tstore = storeName;\n\n\t\t\tif (id === null)\n\t\t\t\trequest = store.openCursor();\n\t\t\telse\n\t\t\t\trequest = store.openCursor(id);\n\n\t\t\trequest.onsuccess = async (event) =>\n\t\t\t{\n\t\t\t\tlet cursor = event.target.result;\n\t\t\t\tif (!cursor)\n\t\t\t\t{\n\t\t\t\t\tresolve();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet result = await callback (cursor.value, cursor);\n\t\t\t\tif (result === false)\n\t\t\t\t{\n\t\t\t\t\tresolve();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcursor.continue();\n\t\t\t};\n\n\t\t\trequest.onerror = (evt) => {\n\t\t\t\treject(evt.target.error);\n\t\t\t};\n\t\t});\n\t},\n\n\t/**\n\t * Returns the count of all records from the specified data store.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @returns {Promise<number>}\n\t * !static count (storeName: string|IDBIndex|IDBObjectStore) : Promise<number>;\n\t */\n\tcount: function (storeName)\n\t{\n\t\tthis.ensureConnected();\n\n\t\treturn new Promise((resolve, reject) =>\n\t\t{\n\t\t\tlet store;\n\n\t\t\tif (typeof(storeName) === 'string')\n\t\t\t\tstore = this.db.transaction(storeName, 'readonly').objectStore(storeName);\n\t\t\telse\n\t\t\t\tstore = storeName;\n\n\t\t\tlet request = store.count();\n\n\t\t\trequest.onsuccess = (evt) => {\n\t\t\t\tresolve(evt.target.result);\n\t\t\t};\n\n\t\t\trequest.onerror = (evt) => {\n\t\t\t\treject(evt.target.error);\n\t\t\t};\n\t\t});\n\t},\n\n\t/**\n\t * Returns all records from the specified data store.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {string|number|Array<string|number>} filter\n\t * @returns {Promise<Array<object>>}\n\t * !static getAll (storeName: string|IDBIndex|IDBObjectStore, filter?: string|number|Array<string|number>) : Promise<Array<object>>;\n\t */\n\tgetAll: function (storeName, filter=null)\n\t{\n\t\tthis.ensureConnected();\n\n\t\treturn new Promise((resolve, reject) =>\n\t\t{\n\t\t\tlet store;\n\n\t\t\tif (typeof(storeName) === 'string')\n\t\t\t\tstore = this.db.transaction(storeName, 'readonly').objectStore(storeName);\n\t\t\telse\n\t\t\t\tstore = storeName;\n\n\t\t\tlet request = store.getAll(filter);\n\n\t\t\trequest.onsuccess = (evt) => {\n\t\t\t\tresolve(evt.target.result);\n\t\t\t};\n\n\t\t\trequest.onerror = (evt) => {\n\t\t\t\treject(evt.target.error);\n\t\t\t};\n\t\t});\n\t},\n\n\t/**\n\t * Returns all keys from the specified data store.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {string|number|Array<string|number>} filter\n\t * @returns {Promise<Array<string|number|Array<string|number>>>}\n\t * !static getAllKeys (storeName: string|IDBIndex|IDBObjectStore, filter?: string|number|Array<string|number>) : Promise<Array<object>>;\n\t */\n\tgetAllKeys: function (storeName, filter=null)\n\t{\n\t\tthis.ensureConnected();\n\n\t\treturn new Promise((resolve, reject) =>\n\t\t{\n\t\t\tlet store;\n\n\t\t\tif (typeof(storeName) === 'string')\n\t\t\t\tstore = this.db.transaction(storeName, 'readonly').objectStore(storeName);\n\t\t\telse\n\t\t\t\tstore = storeName;\n\n\t\t\tlet request = store.getAllKeys(filter);\n\n\t\t\trequest.onsuccess = (evt) => {\n\t\t\t\tresolve(evt.target.result);\n\t\t\t};\n\n\t\t\trequest.onerror = (evt) => {\n\t\t\t\treject(evt.target.error);\n\t\t\t};\n\t\t});\n\t},\n\n\t/**\n\t * Loads a list of records having unique values from the specified data store and returns the entire object or just the specified field.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {string} [field]\n\t * @returns {Promise<Array<number|string|object>>}\n\t * !static getAllUnique (storeName: string|IDBIndex|IDBObjectStore) : Promise<Array<number|string|object>>;\n\t */\n\tgetAllUnique: function (storeName, fieldName=null)\n\t{\n\t\tthis.ensureConnected();\n\n\t\treturn new Promise((resolve, reject) =>\n\t\t{\n\t\t\tlet store;\n\n\t\t\tif (typeof(storeName) === 'string')\n\t\t\t\tstore = this.db.transaction(storeName, 'readonly').objectStore(storeName);\n\t\t\telse\n\t\t\t\tstore = storeName;\n\n\t\t\tlet request = store.openCursor(null, 'nextunique');\n\t\t\tlet list = [];\n\n\t\t\trequest.onsuccess = (event) =>\n\t\t\t{\n\t\t\t\tlet cursor = event.target.result;\n\t\t\t\tif (!cursor)\n\t\t\t\t{\n\t\t\t\t\tresolve(list);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlist.push(fieldName ? cursor.value[fieldName] : cursor.value);\n\t\t\t\tcursor.continue();\n\t\t\t};\n\n\t\t\trequest.onerror = (evt) => {\n\t\t\t\treject(evt.target.error);\n\t\t\t};\n\t\t});\n\t},\n\n\t/**\n\t * Returns a single record from the specified data store.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {string|number|Array<string|number>} id\n\t * @returns {Promise<object>}\n\t * !static get (storeName: string|IDBIndex|IDBObjectStore, id: string|number|Array<string|number>) : Promise<object>;\n\t */\n\tget: function (storeName, id)\n\t{\n\t\tthis.ensureConnected();\n\n\t\treturn new Promise((resolve, reject) =>\n\t\t{\n\t\t\tlet store;\n\n\t\t\tif (typeof(storeName) === 'string')\n\t\t\t\tstore = this.db.transaction(storeName, 'readonly').objectStore(storeName);\n\t\t\telse\n\t\t\t\tstore = storeName;\n\n\t\t\tlet request = store.get(id);\n\n\t\t\trequest.onsuccess = (evt) => {\n\t\t\t\tresolve(evt.target.result || null);\n\t\t\t};\n\n\t\t\trequest.onerror = (evt) => {\n\t\t\t\treject(evt.target.error);\n\t\t\t};\n\t\t});\n\t},\n\n\n\t/**\n\t * Adds or overwrites a record in the specified data store (data must include the primary key).\n\t * @param {string} storeName\n\t * @param {object} data\n\t * @returns {Promise<void>}\n\t * !static put (storeName: string, data: object) : Promise<void>;\n\t */\n\tput: function (storeName, data)\n\t{\n\t\tthis.ensureConnected();\n\n\t\treturn new Promise((resolve, reject) =>\n\t\t{\n\t\t\tlet store = this.db.transaction(storeName, 'readwrite').objectStore(storeName);\n\t\t\tlet request = store.put(data);\n\n\t\t\trequest.onsuccess = (evt) => {\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\trequest.onerror = (evt) => {\n\t\t\t\treject(evt.target.error);\n\t\t\t};\n\t\t});\n\t},\n\n\t/**\n\t * Returns a variable from the system table.\n\t * @param {string} name - Name of the property to read.\n\t * @param {boolean} full - When `true` the entire object will be returned.\n\t * @returns {any}\n\t * !static sysGet (name: string, full?: boolean) : any;\n\t */\n\tsysGet: async function (name, full=false)\n\t{\n\t\tlet data = await this.get('system', [name]);\n\t\treturn data ? (full ? data : data.value) : null;\n\t},\n\n\t/**\n\t * Writes a variable to the system table.\n\t * @param {string} name - Name of the property to write.\n\t * @param {any} value - Value to write.\n\t * @param {boolean} full - When `true` the entire value will be written as-is.\n\t * @returns {void}\n\t * !static sysPut (name: string, value: any, full?: boolean) : void;\n\t */\n\tsysPut: async function (name, value, full=false)\n\t{\n\t\tif (full)\n\t\t{\n\t\t\tvalue.name = name;\n\t\t\tawait this.put('system', value);\n\t\t}\n\t\telse\n\t\t\tawait this.put('system', { name: name, value: value });\n\t},\n\n\t/**\n\t * Returns a single record from the specified data store that matches the `partial` object and does NOT match the `notPartial` object.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {object} [partial]\n\t * @param {object} [notPartial]\n\t * @returns {Promise<object>}\n\t * !static findOne (storeName: string|IDBIndex|IDBObjectStore, partial?: object, notPartial?: object) : Promise<object>;\n\t */\n\tfindOne: function (storeName, partial=null, notPartial=null)\n\t{\n\t\tthis.ensureConnected();\n\n\t\treturn new Promise((resolve, reject) =>\n\t\t{\n\t\t\tlet store;\n\n\t\t\tif (typeof(storeName) === 'string')\n\t\t\t\tstore = this.db.transaction(storeName, 'readonly').objectStore(storeName);\n\t\t\telse\n\t\t\t\tstore = storeName;\n\n\t\t\tlet request = store.openCursor();\n\n\t\t\trequest.onsuccess = (event) =>\n\t\t\t{\n\t\t\t\tlet cursor = event.target.result;\n\t\t\t\tif (!cursor)\n\t\t\t\t{\n\t\t\t\t\tresolve(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (partial === null || Rinn.partialCompare(cursor.value, partial))\n\t\t\t\t{\n\t\t\t\t\tif (notPartial !== null)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (Rinn.partialCompare(cursor.value, notPartial))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcursor.continue();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(cursor.value);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcursor.continue();\n\t\t\t};\n\n\t\t\trequest.onerror = (evt) => {\n\t\t\t\treject(evt.target.error);\n\t\t\t};\n\t\t});\n\t},\n\n\t/**\n\t * Deletes a record from the specified data store.\n\t * @param {string} storeName\n\t * @param {string|number|Array<string|number>} id\n\t * @returns {Promise<void>}\n\t * !static delete (storeName: string, id: string|number|Array<string|number>) : Promise<void>;\n\t */\n\tdelete: function (storeName, id)\n\t{\n\t\tthis.ensureConnected();\n\n\t\treturn new Promise((resolve, reject) =>\n\t\t{\n\t\t\tlet store = this.db.transaction(storeName, 'readwrite').objectStore(storeName);\n\n\t\t\tlet request = store.delete(id);\n\t\t\trequest.onsuccess = (evt) => {\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\trequest.onerror = (evt) => {\n\t\t\t\treject(evt.target.error);\n\t\t\t};\n\t\t});\n\t},\n\n\t/**\n\t * Deletes all items in the specified store.\n\t * @param {string|IDBIndex|IDBObjectStore} storeName\n\t * @param {string|number|Array<string|number>} id\n\t * @returns {Promise<void>}\n\t * !static deleteAll (storeName: string|IDBIndex|IDBObjectStore, id: string|number|Array<string|number>) : Promise<void>;\n\t */\n\tdeleteAll: function (storeName, id=null)\n\t{\n\t\treturn this.forEach(storeName, id, async (value, cursor) => {\n\t\t\tawait cursor.delete();\n\t\t});\n\t},\n\n\t/**\n\t * Inserts a new record in the specified data store.\n\t * @param {string} storeName\n\t * @param {object} data\n\t * @returns {Promise<void>}\n\t * !static insert (storeName: string, data: object) : Promise<void>;\n\t */\n\tinsert: function (storeName, data)\n\t{\n\t\tthis.ensureConnected();\n\n\t\treturn new Promise((resolve, reject) =>\n\t\t{\n\t\t\tlet store = this.db.transaction(storeName, 'readwrite').objectStore(storeName);\n\t\t\tlet request = store.add(data);\n\n\t\t\trequest.onsuccess = (evt) => {\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\trequest.onerror = (evt) => {\n\t\t\t\treject(evt.target.error);\n\t\t\t};\n\t\t});\n\t}\n};\n\n//!/class\n","\n//!class geo\n\nconst geo =\n{\t\n E_NONE:\t\t\t\t\t0x0000,\n E_PERMISSION_DENIED:\t0x8001,\n E_POSITION_UNAVAILABLE:\t0x8002,\n E_TIMEOUT:\t\t\t\t0x8003,\n E_UNSUPPORTED:\t\t\t0x8004,\n E_UNKNOWN:\t\t\t\t0x8009,\n\n supported: null,\n status: null,\n\n indicatorOn: function() {\n global.document.documentElement.classList.add('busy-geo');\n },\n\n indicatorOff: function() {\n global.document.documentElement.classList.remove('busy-geo');\n },\n\n /**\n * Initializes the geolocation interface. Returns boolean indicating whether geolocation\n * is supported on the device.\n * @returns {boolean}\n * !static init() : boolean;\n */\n init: function() {\n this.supported = navigator.geolocation ? true : false;\n return this.supported;\n },\n\n /**\n * Single-shot positioning operation. While the geolocation operation is in progress, the `.busy-geo` CSS class\n * will be set in the `html` element. You can use this to display a spinner or other indicator.\n * @returns {Promise<GeolocationPosition>}\n * !static getCurrentPosition() : Promise<GeolocationPosition>;\n */\n getCurrentPosition: function()\n {\n if (this.supported === null)\n this.init();\n\n let status = this.status = { cancelled: false };\n\n return new Promise (async (resolve, reject) =>\n {\n this.indicatorOn();\n\n if (!this.supported)\n {\n if (this.status === status)\n this.status = null;\n\n if (!status.cancelled) this.indicatorOff();\n\n reject ({ status, code: geo.E_UNSUPPORTED, message: 'Geolocation is not supported on this device.' });\n return;\n }\n\n navigator.geolocation.getCurrentPosition (\n (data) => {\n if (this.status === status)\n this.status = null;\n\n if (!status.cancelled) this.indicatorOff();\n\n data.status = status;\n resolve(data);\n },\n\n (err) => {\n if (this.status === status)\n this.status = null;\n\n if (!status.cancelled) this.indicatorOff();\n\n let code;\n switch (err.code)\n {\n case 0x01:\tcode = geo.E_PERMISSION_DENIED;\n break;\n case 0x02:\tcode = geo.E_POSITION_UNAVAILABLE;\n break;\n case 0x03:\tcode = geo.E_TIMEOUT;\n break;\n default:\tcode = geo.E_UNKNOWN;\n err.message = 'Unable to get the current location.';\n break;\n }\n\n reject({ status, code, message: err.message });\n },\n\n { enableHighAccuracy: true }\n );\n });\n },\n\n /**\n * Cancels the active positioning operation (if any).\n * !static cancel() : void;\n */\n cancel: function()\n {\n if (this.status === null)\n return;\n\n if (!this.status.cancelled) this.indicatorOff();\n\n this.status.cancelled = true;\n this.status = null;\n }\n};\n\n//!/class\n\nexport default geo;\n","\nimport * as rizaSignal from 'riza-signal';\n\nexport const Signal = rizaSignal.Signal;\nexport const signal = rizaSignal.signal;\nexport const expr = rizaSignal.expr;\nexport const watch = rizaSignal.watch;\nexport const validator = rizaSignal.validator;\n\n/**\n * Helper functions used by the JSX transformer.\n */\nexport const helpers =\n{\n /**\n * Special object to tag dynamic attributes.\n */\n DYNAMIC: { },\n\n /**\n * Sets the value of a property inside an object.\n * @param {Element|Text} root\n * @param {string[]} path\n * @param {number} lastIndex\n * @param {object} value\n */\n setValue: function (root, path, lastIndex, value)\n {\n // Rename properties `class`, `classList` to `className`.\n if (path[0] === 'class' || path[0] === 'classList')\n path[0] = 'className';\n\n if (path.length > 1 && path[0] === 'trait')\n {\n switch (path[1])\n {\n case 'value':\n root.onchange = (e) => value.set(e.currentTarget.value);\n watch([value], (value) => root.value = value);\n break;\n\n case 'input':\n root.oninput = (e) => value.set(e.currentTarget.value);\n watch([value], (value) => root.value = value);\n break;\n\n case 'checked':\n root.onchange = (e) => value.set(e.currentTarget.checked);\n watch([value], (value) => root.checked = value);\n break;\n\n case 'selected':\n root.onchange = (e) => value.set(e.currentTarget.selected);\n watch([value], (value) => root.selected = value);\n break;\n\n default:\n console.error('Unknown trait: ' + path[1]);\n break;\n }\n\n return;\n }\n\n // Object used to set `style` or `class` attribute.\n if (path.length === 1 && typeof(value) === 'object')\n {\n switch (path[0])\n {\n case 'style':\n for (let i in value)\n watch([i, value[i]], (i, value) => root.style[i] = value);\n return;\n\n case 'className':\n if (value instanceof Array) {\n watch([value], (value) => {\n root.className = '';\n for (let i in value)\n root.classList.add(value[i]);\n });\n }\n else {\n for (let i in value)\n watch([i, value[i]], (i, value) => root.classList[value == true ? 'add' : 'remove'](i));\n }\n return;\n }\n }\n\n // Specific CSS class such as `class:hidden`.\n if (path.length === 2 && path[0] === 'className')\n {\n watch([path[1], value], (i, value) => root.classList[value == true ? 'add' : 'remove'](i));\n return;\n }\n\n // Any other attribute/property.\n for (let i = 0; i < lastIndex && root; i++)\n root = root[path[i]];\n\n if (!root) return;\n\n let name = path[lastIndex];\n if (name.startsWith('on')) name = name.toLowerCase();\n\n watch([name, value], (name, value) => root[name] = value);\n },\n\n /**\n * Creates a setter for a specified path inside an object.\n * @param {string[]} path \n * @returns {(root: Element|Text, value: object) => void}\n */\n createSetter: function (path)\n {\n const n = path.length-1;\n\n return function (root, value) {\n helpers.setValue(root, path, n, value);\n };\n },\n\n /**\n * Copies the event listeners and custom properties from `node` to `newNode`.\n * @param {Element} node\n * @param {Element} newNode\n * @returns {Element}\n */\n copyProps: function (node, newNode)\n {\n // Copy property event listeners.\n for (let propName in node)\n {\n if (!propName.startsWith('on') || propName.startsWith('onmoz') || !node[propName])\n continue;\n\n newNode[propName] = node[propName];\n }\n\n // Copy custom properties.\n for (let propName of Object.getOwnPropertyNames(node))\n {\n if (~~propName == propName) // Skip numeric properties.\n continue;\n\n newNode[propName] = node[propName];\n }\n\n return newNode;\n },\n\n /**\n * Clones an element node and ensures certain properties are copied over.\n * @param {Element} node\n * @param {boolean} [deep=false]\n */\n cloneNode: function (node, deep=false)\n {\n if (!deep && node.isCustom === true)\n throw new Error ('cloneNode only available as deep clone for custom elements.');\n\n if (deep && node.isCustom === true)\n return node.cloneNodeCustom();\n\n let newNode = node.cloneNode();\n\n if (deep) {\n for (let childNode of node.childNodes)\n newNode.appendChild(helpers.cloneNode(childNode, true));\n }\n\n // Copy handlers and properties.\n helpers.copyProps(node, newNode);\n\n // Execute `oncreated` handler.\n if ('oncreated' in newNode)\n newNode.oncreated(newNode);\n\n return newNode;\n },\n\n /**\n * Ensures the provided value is a node or a node-compatible (such as an array of nodes).\n * @param {Node|Array<Node|string>|string} value\n * @param {boolean} [cloneNode=false]\n * @returns {Node|Array<Node>}\n */\n ensureNode: function (value, cloneNode=false)\n {\n if (value instanceof Array) {\n for (let i = 0; i < value.length; i++)\n value[i] = helpers.ensureNode(value[i], cloneNode);\n return value;\n }\n\n if (!(value instanceof Node))\n return document.createTextNode(value);\n\n return cloneNode ? helpers.cloneNode(value, true) : value;\n },\n\n /**\n * Replaces the specified refNode by a newNode and returns the new reference node.\n * @param {Node} parent\n * @param {Node|Array<Node>} refNode\n * @param {Node|Array<Node>} newNode\n * @returns {Node|Array<Node>}\n */\n replaceNode: function (parent, refNode, newNode, appendChild=false)\n {\n // When refNode is an array, remove all those nodes but leave just one for reference.\n if (refNode instanceof Array)\n {\n while (refNode.length > 1) {\n let tmp = refNode.shift();\n if (tmp.parentElement === parent)\n tmp.remove();\n }\n refNode = refNode.shift();\n }\n\n let newRefNode = newNode;\n let firstNode = newNode;\n\n // When newNode is an array, create a document fragment for faster append of all children.\n if (newNode instanceof Array)\n {\n let frag = document.createDocumentFragment();\n newRefNode = [];\n\n if (newNode.length == 0)\n newNode = [document.createTextNode('')];\n\n for (let i = 0; i < newNode.length; i++) {\n newRefNode.push(newNode[i]);\n frag.appendChild(newNode[i]);\n }\n\n firstNode = newNode[0];\n newNode = frag;\n }\n\n if (appendChild === false)\n {\n refNode.replaceWith(newNode);\n\n let tmpNode = document.createComment('');\n firstNode.parentElement.insertBefore(tmpNode, firstNode);\n\n if (!(newRefNode instanceof Array))\n newRefNode = [ newRefNode ];\n\n newRefNode.push(tmpNode);\n }\n else\n refNode.appendChild(newNode);\n\n return newRefNode;\n },\n\n /**\n * Creates a DOM node replacer.\n * @param {Element|Text|Array<Element|Text>} refNode\n * @returns {(root: Element|Text, newNode: any) => void}\n */\n createReplacer: function (refNode)\n {\n return function (root, newNode) {\n refNode = helpers.replaceNode(root, refNode, helpers.ensureNode(newNode));\n };\n },\n\n /**\n * Creates a function that builds an element.\n * @param {string} tagName - Tag of the element to create.\n * @param {array} attributes - Array of name-value pairs. When dynamic attributes are present use the helpers.DYNAMIC as value placeholder.\n * @param {Array<Element|Text|string|null>} children - When dynamic children are present use the placeholder `null`.\n * @returns { (runtimeAttributeValues: Array<string>, runtimeChildren: Array<Element|Text|Array<Element|Text>>) => HTMLElement }\n */\n create: function (tagName, attributes, children)\n {\n // Attach static attributes.\n let baseElement = document.createElement(tagName);\n let dynamicAttributes = [];\n\n for (let i = 0; i < attributes.length; i += 2)\n {\n let path = null;\n\n if (attributes[i].indexOf(':') !== -1)\n path = attributes[i].split(':');\n else\n path = [attributes[i]];\n\n if (attributes[i+1] !== helpers.DYNAMIC) {\n helpers.setValue(baseElement, path, path.length-1, attributes[i+1]);\n continue;\n }\n\n dynamicAttributes.push(helpers.createSetter(path));\n }\n\n // Attach static children.\n let dynamicChildrenIndices = [];\n let dynamicBuild = false;\n let firstBuild = true;\n\n // Get indices of dynamic children and detect if any child is a custom element.\n for (let i in children)\n {\n if (children[i].isCustom === true)\n dynamicBuild = true;\n\n if (children[i] === helpers.DYNAMIC)\n dynamicChildrenIndices.push(i);\n }\n\n // Create and return the element builder fuction.\n const N = dynamicAttributes.length;\n const M = dynamicChildrenIndices.length;\n\n return function (runtimeDynamicAttributes, runtimeChildren, spreadAttributes=null)\n {\n const getElement = (runtimeChildren, originalElement=null) =>\n {\n let elem = null;\n\n if (firstBuild || dynamicBuild)\n {\n let target = dynamicBuild ? helpers.cloneNode(baseElement) : baseElement;\n\n for (let i in children)\n {\n if (children[i] instanceof Array)\n throw new Error('Document fragments not fully supported!');\n\n helpers.replaceNode(target, target, helpers.ensureNode(children[i], true), true);\n }\n\n if (dynamicBuild) elem = target;\n firstBuild = false;\n }\n\n if (elem === null)\n elem = helpers.cloneNode(baseElement, true);\n\n const hadOnCreated = 'oncreated' in elem;\n const dynamicChildren = dynamicChildrenIndices.map(idx => helpers.createReplacer(elem.childNodes[idx]));\n\n for (let i = 0; i < N; i++)\n dynamicAttributes[i](elem, runtimeDynamicAttributes[i]);\n\n for (let i = 0; i < M; i++)\n watch([runtimeChildren[i], i], (val, i) => dynamicChildren[i](elem, val));\n\n if (spreadAttributes !== null)\n {\n for (let attributes of spreadAttributes)\n {\n for (let i in attributes)\n {\n let path = null;\n if (i.indexOf(':') !== -1)\n path = i.split(':');\n else\n path = [ i ];\n\n helpers.setValue(elem, path, path.length-1, attributes[i]);\n }\n }\n }\n\n if (originalElement !== null) {\n helpers.copyProps(originalElement, elem);\n }\n\n if (!hadOnCreated && 'oncreated' in elem)\n elem.oncreated(elem);\n\n if ('onlongpress' in elem)\n elem.dataset.longPress = 'true';\n\n elem.isCustom = true;\n\n elem.cloneNode = () => {\n throw new Error ('Use of cloneNode is forbidden in custom elements, use cloneNodeCustom instead.');\n };\n\n elem.cloneNodeCustom = () => {\n return getElement(runtimeChildren.map(e => e instanceof Node && e.isCustom === true ? e.cloneNodeCustom() : e), elem);\n };\n\n return elem;\n };\n\n return getElement(runtimeChildren);\n };\n }\n};\n",null,"function $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $parcel$global =\ntypeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequire25d2\"];\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequire25d2\"] = parcelRequire;\n}\nparcelRequire.register(\"4VREF\", function(module, exports) {\n\n$parcel$export(module.exports, \"default\", () => $39761b0dd175036e$export$2e2bcd8739ae039);\n\nvar $fMUO1 = parcelRequire(\"fMUO1\");\n\nvar $cAEYe = parcelRequire(\"cAEYe\");\nvar /**\n**\tMap of model constraint handlers. Each function should accept parameters (in order): the model object (model), the constraint value (ctval),\n**\tthe property name (name), the property value (value) and return the corrected value once verified or throw an exception if errors occur.\n*/ $39761b0dd175036e$export$2e2bcd8739ae039 = {\n /**\n\t**\tUtility function (not a handler) to get the real value given a reference string. If the value is not a string, the value itself will\n\t**\tbe returned, if it is a string starting with '#' the model property will be returned, if starts with '@' the object property will be\n\t**\treturned, otherwise the contents of the string will eval'd and returned.\n\t*/ _getref: function(value, obj) {\n if (typeof value == \"string\") {\n if (value.substr(0, 1) == \"#\") value = obj.get(value.substr(1));\n else if (value.substr(0, 1) == \"@\") value = obj[value.substr(1)];\n if (typeof value == \"string\") return eval(value);\n return value;\n } else return value;\n },\n /**\n\t**\tVerifies that the new value is of the valid type before storing it on the property. When possible if the\n\t**\tinput is of compatible type it will be converted to the target type.\n\t*/ type: function(model11, ctval11, name11, value11) {\n switch(ctval11){\n case \"int\":\n value11 = parseInt(value11);\n if (isNaN(value11)) throw new Error(ctval11);\n break;\n case \"float\":\n value11 = parseFloat(value11);\n if (isNaN(value11)) throw new Error(ctval11);\n break;\n case \"string\":\n value11 = value11 === null || value11 === undefined ? \"\" : value11.toString();\n break;\n case \"bit\":\n if (value11 === true || value11 === false) {\n value11 = value11 ? 1 : 0;\n break;\n }\n value11 = parseInt(value11);\n if (isNaN(value11)) throw new Error(ctval11);\n value11 = value11 ? 1 : 0;\n break;\n case \"array\":\n if ((0, $fMUO1.default).typeOf(value11) == \"array\") break;\n if (value11 === null || value11 === undefined) {\n value11 = [];\n break;\n }\n throw new Error(ctval11);\n case \"bool\":\n if (value11 === \"true\" || value11 === true) {\n value11 = true;\n break;\n }\n if (value11 === \"false\" || value11 === false) {\n value11 = false;\n break;\n }\n throw new Error(ctval11);\n }\n return value11;\n },\n /**\n\t**\tVerifies that the field is of the specified model type.\n\t*/ model: function(model11, ctval11, name11, value11) {\n var mclass11 = this._getref(ctval11, model11);\n if (!mclass11) throw new Error(ctval11);\n if (!value11) return new mclass11();\n return mclass11.ensure(value11);\n },\n /**\n\t**\tVerifies that the field is of the specified class.\n\t*/ cls: function(model11, ctval11, name11, value11) {\n var mclass11 = this._getref(ctval11, model11);\n if (!value11) return new mclass11();\n return (0, $fMUO1.default).ensureTypeOf(mclass11, value11);\n },\n /**\n\t**\tVerifies that the array contents are of the specified class. Returns error if the class does not exist\n\t**\tor if the field is not an array. Therefore a type:array constraint should be used before this one.\n\t*/ arrayof: function(model11, ctval11, name11, value11) {\n var mclass11 = this._getref(ctval11, model11);\n if (!value11) value11 = [];\n if (!mclass11 || (0, $fMUO1.default).typeOf(value11) != \"array\") throw new Error(ctval11);\n for(var i11 = 0; i11 < value11.length; i11++)value11[i11] = (0, $fMUO1.default).ensureTypeOf(mclass11, value11[i11]);\n return value11;\n },\n /**\n\t**\tVerifies that the array contents are not null. Returns error if the field is not an array, therefore a\n\t**\ttype:array constraint should be used before this one.\n\t*/ arraynull: function(model11, ctval11, name11, value11) {\n var remove11 = false;\n if ((0, $fMUO1.default).typeOf(ctval11) == \"object\") {\n if (ctval11.remove) remove11 = ctval11.remove;\n ctval11 = ctval11.value;\n }\n if (ctval11) return value11;\n if ((0, $fMUO1.default).typeOf(value11) != \"array\") throw new Error(ctval11);\n for(var i11 = 0; i11 < value11.length; i11++)if (value11[i11] == null) {\n if (remove11) value11.splice(i11--, 1);\n else throw new Error(ctval11);\n }\n return value11;\n },\n /**\n\t**\tVerifies that the array contents are all compliant. Returns error if the field is not an array, therefore\n\t**\ta type:array constraint should be used before this one.\n\t*/ arraycompliant: function(model11, ctval11, name11, value11) {\n var remove11 = false;\n if ((0, $fMUO1.default).typeOf(ctval11) == \"object\") {\n if (ctval11.remove) remove11 = ctval11.remove;\n ctval11 = ctval11.value;\n }\n if (!ctval11) return value11;\n if ((0, $fMUO1.default).typeOf(value11) != \"array\") throw new Error(ctval11);\n for(var i11 = 0; i11 < value11.length; i11++){\n if (value11[i11] == null) continue;\n if (!value11[i11].isCompliant()) {\n if (remove11) value11.splice(i11--, 1);\n else throw new Error(ctval11);\n }\n }\n return value11;\n },\n /**\n\t**\tVerifies the presense of the field.\n\t*/ required: function(model11, ctval11, name11, value11) {\n if (value11 === null || value11 === undefined) throw new Error(ctval11 ? \"\" : \"null\");\n switch((0, $fMUO1.default).typeOf(value11)){\n case \"array\":\n if (value11.length == 0) throw new Error(ctval11 ? \"\" : \"null\");\n break;\n default:\n if (value11.toString().length == 0) throw new Error(ctval11 ? \"\" : \"null\");\n break;\n }\n return value11;\n },\n /**\n\t**\tVerifies the minimum length of the field.\n\t*/ minlen: function(model11, ctval11, name11, value11) {\n if (value11.toString().length < ctval11) throw new Error(ctval11);\n return value11;\n },\n /**\n\t**\tVerifies the maximum length of the field.\n\t*/ maxlen: function(model11, ctval11, name11, value11) {\n if (value11.toString().length > ctval11) throw new Error(ctval11);\n return value11;\n },\n /**\n\t**\tVerifies the minimum value of the field.\n\t*/ minval: function(model11, ctval11, name11, value11) {\n if (parseFloat(value11) < ctval11) throw new Error(ctval11);\n return value11;\n },\n /**\n\t**\tVerifies the maximum value of the field.\n\t*/ maxval: function(model11, ctval11, name11, value11) {\n if (parseFloat(value11) > ctval11) throw new Error(ctval11);\n return value11;\n },\n /**\n\t**\tVerifies the minimum number of items in the array.\n\t*/ mincount: function(model11, ctval11, name11, value11) {\n if ((0, $fMUO1.default).typeOf(value11) != \"array\" || value11.length < ctval11) throw new Error(ctval11);\n return value11;\n },\n /**\n\t**\tVerifies the maximum number of items in the array.\n\t*/ maxcount: function(model11, ctval11, name11, value11) {\n if ((0, $fMUO1.default).typeOf(value11) != \"array\" || value11.length > ctval11) throw new Error(ctval11);\n return value11;\n },\n /**\n\t**\tVerifies the format of the field using a regular expression. The constraint value should be the name of\n\t**\tone of the Model.Regex regular expressions.\n\t*/ pattern: function(model11, ctval11, name11, value11) {\n if (!(0, $cAEYe.default)[ctval11].test(value11.toString())) throw new Error(ctval11);\n return value11;\n },\n /**\n\t**\tVerifies that the field is inside the specified set of options. The set can be an array or a string with\n\t**\tthe options separated by vertical bar (|). The comparison is case-sensitive.\n\t*/ inset: function(model11, ctval11, name11, value11) {\n if ((0, $fMUO1.default).typeOf(ctval11) != \"array\") {\n if (!new RegExp(\"^(\" + ctval11.toString() + \")$\").test(value11.toString())) throw new Error(ctval11);\n return value11;\n }\n if (ctval11.indexOf(value11.toString()) == -1) throw new Error(ctval11.join(\"|\"));\n return value11;\n },\n /**\n\t**\tSets the field to upper case.\n\t*/ upper: function(model11, ctval11, name11, value11) {\n return ctval11 ? value11.toString().toUpperCase() : value11;\n },\n /**\n\t**\tSets the field to lower case.\n\t*/ lower: function(model11, ctval11, name11, value11) {\n return ctval11 ? value11.toString().toLowerCase() : value11;\n }\n};\n\n});\nparcelRequire.register(\"fMUO1\", function(module, exports) {\n\n$parcel$export(module.exports, \"default\", () => $b7e7672d417be9d7$export$2e2bcd8739ae039);\nconst $b7e7672d417be9d7$var$Rinn = {};\nvar $b7e7672d417be9d7$export$2e2bcd8739ae039 = $b7e7672d417be9d7$var$Rinn;\n/*\r\n**\tInvokes the specified function 'fn' 10ms later.\r\n**\r\n**\t>> void invokeLater (function fn);\r\n*/ $b7e7672d417be9d7$var$Rinn.invokeLater = function(fn) {\n if (fn) setTimeout(function() {\n fn();\n }, 10);\n};\n/*\r\n**\tWaits for the specified amount of milliseconds. Returns a Promise.\r\n**\r\n**\t>> Promise wait (int millis);\r\n*/ $b7e7672d417be9d7$var$Rinn.wait = function(millis) {\n return new Promise(function(resolve, reject) {\n setTimeout(resolve, millis);\n });\n};\n/*\r\n**\tReturns the type of an element 'o', properly detects arrays and null types. The return string is always in lowercase.\r\n**\r\n**\t>> string typeOf (any o);\r\n*/ $b7e7672d417be9d7$var$Rinn.typeOf = function(o) {\n if (o instanceof Array) return \"array\";\n if (o === null) return \"null\";\n return (typeof o).toString().toLowerCase();\n};\n/*\r\n**\tReturns boolean indicating if the type of the element is an array or an object.\r\n**\r\n**\t>> bool isArrayOrObject (any o);\r\n*/ $b7e7672d417be9d7$var$Rinn.isArrayOrObject = function(o) {\n switch($b7e7672d417be9d7$var$Rinn.typeOf(o)){\n case \"array\":\n case \"object\":\n return true;\n }\n return false;\n};\n/*\r\n**\tCreates a clone (deep copy) of the specified element. The element can be an array, an object or a primitive type.\r\n**\r\n**\t>> T clone (T elem);\r\n*/ $b7e7672d417be9d7$var$Rinn.clone = function(elem) {\n let o = $b7e7672d417be9d7$var$Rinn.typeOf(elem);\n if (o === \"array\") {\n o = [];\n for(let i = 0; i < elem.length; i++)o.push($b7e7672d417be9d7$var$Rinn.clone(elem[i]));\n } else if (o === \"object\") {\n if (\"clone\" in elem && typeof elem.clone === \"function\") return elem.clone();\n o = {};\n for(let i in elem)o[i] = $b7e7672d417be9d7$var$Rinn.clone(elem[i]);\n } else o = elem;\n return o;\n};\n/*\r\n**\tMerges all given elements into the first one, object fields are cloned.\r\n**\r\n**\t>> T merge (T... elems)\r\n*/ $b7e7672d417be9d7$var$Rinn.merge = function(output, ...objs) {\n if ($b7e7672d417be9d7$var$Rinn.typeOf(output) == \"array\") for(let i = 0; i < objs.length; i++){\n let arr = objs[i];\n if ($b7e7672d417be9d7$var$Rinn.typeOf(arr) != \"array\") output.push(arr);\n else for(let j = 0; j < arr.length; j++)output.push($b7e7672d417be9d7$var$Rinn.clone(arr[j]));\n }\n else if ($b7e7672d417be9d7$var$Rinn.typeOf(output) == \"object\") for(let i = 0; i < objs.length; i++){\n let obj = objs[i];\n if ($b7e7672d417be9d7$var$Rinn.typeOf(obj) != \"object\") continue;\n for(let field in obj)if ($b7e7672d417be9d7$var$Rinn.isArrayOrObject(obj[field])) {\n if (field in output) $b7e7672d417be9d7$var$Rinn.merge(output[field], obj[field]);\n else output[field] = $b7e7672d417be9d7$var$Rinn.clone(obj[field]);\n } else output[field] = obj[field];\n }\n return output;\n};\n/*\r\n**\tAssigns all fields from the specified objects into the first one.\r\n**\r\n**\t>> object override (object output, object... objs)\r\n*/ $b7e7672d417be9d7$var$Rinn.override = function(output, ...objs) {\n for(let i = 0; i < objs.length; i++)for(let j in objs[i])output[j] = objs[i][j];\n return output;\n};\n/*\r\n**\tCompares two objects and returns `true` if all properties in \"partial\" find a match in \"full\".\r\n*/ $b7e7672d417be9d7$var$Rinn.partialCompare = function(full, partial) {\n if (full == null || partial == null) return false;\n if (full === partial) return true;\n for(var i in partial){\n if (full[i] != partial[i]) return false;\n }\n return true;\n};\n/*\r\n**\tPerforms a partial search for an object (o) in the specified array and returns its index or `false` if the\r\n**\tobject was not found. When `getObject` is set to `true` the object will be returned instead of an index, or\r\n**\t`null` if not found.\r\n*/ $b7e7672d417be9d7$var$Rinn.arrayFind = function(arr, o, getObject) {\n for(var i = 0; arr && i < arr.length; i++){\n if (this.partialCompare(arr[i], o)) return getObject ? arr[i] : i;\n }\n return getObject ? null : false;\n};\n/*\r\n**\tVerifies if the specified object is of class `m`, returns boolean.\r\n**\r\n**\t>> bool isTypeOf (object obj, class _class);\r\n*/ $b7e7672d417be9d7$var$Rinn.isInstanceOf = function(obj, _class) {\n if (!obj || !_class || typeof obj !== \"object\") return false;\n if (obj instanceof _class) return true;\n if (\"isInstanceOf\" in obj) return obj.isInstanceOf(_class);\n return false;\n};\n/*\r\n**\tTraverses the given object attempting to find the index/key that does an identical match with the specified value,\r\n**\tif not found returns -1, otherwise the index/key where the value was found.\r\n**\r\n**\t>> int indexOf (array container, T value)\r\n**\t>> string indexOf (object container, T value)\r\n*/ $b7e7672d417be9d7$var$Rinn.indexOf = function(container, value, forceArray = false) {\n if (forceArray) {\n for(let i = 0; i < container.length; i++){\n if (container[i] === value) return i;\n }\n return -1;\n }\n for(let i in container){\n if (container[i] === value) return i;\n }\n return -1;\n};\n/*\r\n**\tEscapes a string using HTML entities.\r\n**\r\n**\t>> string escape (string str);\r\n*/ $b7e7672d417be9d7$var$Rinn.escape = function(str) {\n return (str + \"\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n};\n/*\r\n**\tVerifies if the specified object is of class `m`, if not it will create a new instance of `m` passing `o` as parameter.\r\n**\r\n**\t>> object ensureTypeOf (class m, object o);\r\n*/ $b7e7672d417be9d7$var$Rinn.ensureTypeOf = function(m, o) {\n if (!o || !m || o instanceof m) return o;\n if (o.isInstanceOf && m.prototype.className) {\n if (o.isInstanceOf(m.prototype.className)) return o;\n }\n return new m(o);\n};\n/*\r\n**\tSerializes an object and returns its JSON string representation.\r\n**\r\n**\t>> string serialize (object o);\r\n*/ $b7e7672d417be9d7$var$Rinn.serialize = function(o) {\n return JSON.stringify(o);\n};\n/*\r\n**\tDeserializes a string in JSON format and returns the result.\r\n**\r\n**\t>> any deserialize (string s);\r\n*/ $b7e7672d417be9d7$var$Rinn.deserialize = function(s) {\n return JSON.parse(s);\n};\n/*\r\n**\tChains a new function to an existing one on some object, such that invoking the function on the object will cause\r\n**\tboth functions to run (order would be oldFunction then newFunction).\r\n**\r\n**\tIf the `conditional` flag is set to `true`, the second function will be run only if the first one returns non-false.\r\n**\tReturns an object with a single method 'unhook' which will revert the changes to leave only the original function.\r\n**\r\n**\t>> object{function unhook} hook (Object object, String functionName, function newFunction, bool conditional=false);\r\n*/ $b7e7672d417be9d7$var$Rinn.hookAppend = function(object, functionName, newFunction, conditional = true) {\n const oldFunction = object[functionName];\n if (conditional) object[functionName] = function(...args) {\n if (oldFunction.apply(this, args) !== false) return newFunction.apply(this, args);\n };\n else object[functionName] = function(...args) {\n oldFunction.apply(this, args);\n return newFunction.apply(this, args);\n };\n return {\n unhook: function() {\n object[functionName] = oldFunction;\n }\n };\n};\n/*\r\n**\tChains a new function to an existing one on some object, such that invoking the function on the object will cause\r\n**\tboth functions to run (order would be oldFunction then newFunction).\r\n**\r\n**\tIf the `conditional` flag is set to `true`, the second function will be run only if the first one returns non-false.\r\n**\tReturns an object with a single method 'unhook' which will revert the changes to leave only the original function.\r\n**\r\n**\t>> object{function unhook} hook (Object object, String functionName, function newFunction, bool conditional=false);\r\n*/ $b7e7672d417be9d7$var$Rinn.hookPrepend = function(object, functionName, newFunction, conditional = true) {\n const oldFunction = object[functionName];\n if (conditional) object[functionName] = function(...args) {\n if (newFunction.apply(this, args) !== false) return oldFunction.apply(this, args);\n };\n else object[functionName] = function(...args) {\n newFunction.apply(this, args);\n return oldFunction.apply(this, args);\n };\n return {\n unhook: function() {\n object[functionName] = oldFunction;\n }\n };\n};\n\n});\n\nparcelRequire.register(\"cAEYe\", function(module, exports) {\n\n$parcel$export(module.exports, \"default\", () => $92a8a0aff23e2e33$export$2e2bcd8739ae039);\n/**\n**\tCommon regular expressions for pattern validation.\n*/ var $92a8a0aff23e2e33$export$2e2bcd8739ae039 = {\n email: /^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)+$/i,\n url: /^[\\w-]+:\\/\\/[\\w-]+(\\.\\w+)+.*$/,\n urlNoProt: /^[\\w-]+(\\.\\w+)+.*$/,\n name: /^[-A-Za-z0-9_.]+$/,\n uname: /^['\\pL\\pN ]+$/,\n text: /^[^&<>{}]*$/,\n utext: /^([\\r\\n\\pL\\pN\\pS &!@#$%*\\[\\]()_+=;',.\\/?:\"~-]+)$/\n};\n\n});\n\n\n\nvar $fMUO1 = parcelRequire(\"fMUO1\");\n\nvar $fMUO1 = parcelRequire(\"fMUO1\");\n/**\r\n * Base class used to create other classes with complex prototype based multiple inheritance while at the\r\n * same time avoiding the prototype chain for faster access. Supports calling parent class methods.\r\n */ //!class Class\nconst $2394d727dfd6a212$var$Class = function() {};\n/**\r\n * Reference to the class itself.\r\n */ $2394d727dfd6a212$var$Class._class = $2394d727dfd6a212$var$Class;\n/**\r\n * Contains the methods of each of the super classes.\r\n */ $2394d727dfd6a212$var$Class._super = {};\n/**\r\n * Name of the class, if none specified the class will be considered \"final\" and will not be inheritable.\r\n * !readonly string className;\r\n */ $2394d727dfd6a212$var$Class.prototype.className = \"Class\";\n/**\r\n * Class constructor, should initialize the instance. Invoked when the `new` keyword is used with the class.\r\n * !constructor();\r\n */ $2394d727dfd6a212$var$Class.prototype.__ctor = function() {};\n/**\r\n * Class destructor, should clear the instance and release any used resources, invoked when the global `dispose` function is called with an instance as parameter.\r\n * !__dtor() : void;\r\n */ $2394d727dfd6a212$var$Class.prototype.__dtor = function() {};\n/**\r\n * Returns true if the object is an instance of the specified class, the parameter can be a class name (string), a constructor (function) or\r\n * a class instance (object), in any cases the appropriate checks will be done.\r\n * !isInstanceOf (className: string|function|object) : boolean;\r\n */ $2394d727dfd6a212$var$Class.prototype.isInstanceOf = function(className) {\n if (className === null) return false;\n if (typeof className === \"function\") className = className.prototype.className;\n else if (typeof className !== \"string\") className = className.__proto__.className;\n return this.className === className ? true : this._super.hasOwnProperty(className);\n};\n/**\r\n * Returns true if the given object is an instance of the specified class, the parameter can be a class name (string), a constructor (function)\r\n * or a class instance (object), in any cases the appropriate checks will be done.\r\n * !instanceOf (object: object, className: string|function|object) : boolean;\r\n */ $2394d727dfd6a212$var$Class.instanceOf = function(object, className) {\n if (object === null || className === null) return false;\n return object.isInstanceOf(className);\n};\n/**\r\n * Internal method to ensure the _super field of an instance has all functions properly bound to the instance.\r\n */ $2394d727dfd6a212$var$Class.prototype._initSuperRefs = function() {\n let _super = this.constructor._super;\n let _newSuper = {};\n const self = this;\n for(let i in _super){\n let o = {};\n let _prot = _super[i].prototype;\n for(let j in _prot){\n if ((0, $fMUO1.default).typeOf(_prot[j]) !== \"function\") continue;\n o[j] = function(fn) {\n return function(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\n return fn.call(self, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n };\n }(_prot[j]);\n }\n _newSuper[i] = o;\n }\n this._super = _newSuper;\n};\n/*\r\n**\tExtends the class with the specified prototype. The prototype can be a function (class constructor) or an object. Note that the\r\n**\tclass will be modified (and returned) instead of creating a new class. Must be called at the class-level (**not** instance level).\r\n**\tWhen a class is provided all fields starting with uppercase at the class-level will not be inherited, this is used to create constants\r\n**\ton classes without having them to be copied to derived classes.\r\n**\r\n**\t>> class inherit (constructor classConstructor);\r\n**\t>> class inherit (object obj);\r\n*/ $2394d727dfd6a212$var$Class.inherit = function(proto) {\n let self = this._class;\n let _super = self._super;\n let _class = self._class;\n if ((0, $fMUO1.default).typeOf(proto) === \"function\") {\n // Move constants (uppercased properties) to the class-level instead of prototype-level.\n for(let i in proto._class)if (!/^[A-Z]/.test(i)) self[i] = proto._class[i];\n // Combine methods and properties.\n (0, $fMUO1.default).override(self.prototype, proto._class.prototype);\n // Combine super references.\n (0, $fMUO1.default).override(_super, proto._class._super);\n // Add new super reference if className specified in inherited prototypes.\n if (proto._class.prototype.className) _super[proto._class.prototype.className] = proto._class;\n } else (0, $fMUO1.default).override(self.prototype, proto);\n self._super = _super;\n self._class = _class;\n return self;\n};\n/**\r\n * Internal method used to extend a class with one or more prototypes.\r\n */ $2394d727dfd6a212$var$Class.prototype._extend = function(base, protos) {\n if (protos.length === 0) return base;\n //VIOLET OPTIMIZE\n const _class = function(...args) {\n this._initSuperRefs();\n this.__ctor.apply(this, args);\n };\n _class._class = _class;\n _class._super = {};\n $2394d727dfd6a212$var$Class.inherit.call(_class, base);\n delete _class.prototype.className;\n for(let i = 0; i < protos.length; i++)_class.inherit(protos[i]);\n delete _class._super.Class;\n if (\"classInit\" in _class.prototype) _class.prototype.classInit();\n _class.isInstance = function(value) {\n return (0, $fMUO1.default).isInstanceOf(value, _class);\n };\n return _class;\n};\n/**\r\n * Creates a new class with the specified prototypes each of which can be a class constructor (function) or an object.\r\n */ $2394d727dfd6a212$var$Class.extend = function(...protos) {\n return this._class.prototype._extend(this, protos);\n};\n/**\r\n * Creates a new instance of a class resulting from extending the self class with the specified prototype.\r\n */ $2394d727dfd6a212$var$Class.create = function(proto) {\n return new (this.extend(proto))();\n};\n/**\r\n * Mutates the host object to be an instance of the specified class.\r\n * !static mutate (classConstructor: object, host: object, override?: object) : object;\r\n */ $2394d727dfd6a212$var$Class.mutate = function(classConstructor, host, override = null) {\n let zombie = new classConstructor();\n // Copy all members from the class prototype.\n for(let i in classConstructor.prototype){\n if (host.hasOwnProperty(i)) continue;\n host[i] = classConstructor.prototype[i];\n }\n // Copy all members from the zombie class instance.\n for(let i in zombie){\n if (host.hasOwnProperty(i)) continue;\n host[i] = zombie[i];\n }\n // Rebind the super references.\n if (host._super) {\n for(let i in host._super)for(let j in host._super[i])host._super[i][j] = classConstructor.prototype.constructor._super[i].prototype[j].bind(host);\n }\n // Copy override members.\n if (override !== null) for(let i in override)host[i] = override[i];\n return host;\n};\nvar $2394d727dfd6a212$export$2e2bcd8739ae039 = $2394d727dfd6a212$var$Class;\n\n\n\nvar $fMUO1 = parcelRequire(\"fMUO1\");\n\nvar /**\r\n**\tHolds the information about a triggered event. It also provides a mechanism to allow asynchronous\r\n**\tevent propagation to ensure the event chain order.\r\n*/ $13eda5a5dec8010f$export$2e2bcd8739ae039 = (0, $2394d727dfd6a212$export$2e2bcd8739ae039).extend({\n /**\r\n\t**\tName of the class.\r\n\t*/ className: \"Event\",\n /**\r\n\t**\tSource of the event.\r\n\t*/ source: null,\n /**\r\n\t**\tName of the event.\r\n\t*/ name: null,\n /**\r\n\t**\tArguments of the event.\r\n\t*/ args: null,\n /**\r\n\t**\tIndicates if the last event handler wants to use async mode.\r\n\t*/ _async: false,\n /**\r\n\t**\tQueue of all handlers to invoke.\r\n\t*/ list: null,\n /**\r\n\t**\tNext event to be executed in the event chain.\r\n\t*/ next: null,\n /**\r\n\t**\tReturn values from event handlers.\r\n\t*/ ret: null,\n /**\r\n\t**\tOriginal root event.\r\n\t*/ original: null,\n /**\r\n\t**\tIndex of the current event handler.\r\n\t*/ i: -1,\n /**\r\n\t**\tContructs an event object with the specified parameters. Source is the event-dispatcher object, list is\r\n\t**\tan array with all the listeners to invoke. The eventName and eventArgs are the event information to be\r\n\t**\tpassed to each handler and if a callback is specified (cbHandler+cbContext) it will be executed once all\r\n\t**\tthe event handlers have been processed.\r\n\t**\r\n\t**\tEvent __ctor (source: EventDispatcher, list: Array, eventName: string, eventArgs: map, cbHandler: function, cbContext: object);\r\n\t*/ __ctor: function(source, list, eventName, eventArgs, cbHandler, cbContext) {\n this.source = source;\n this.name = eventName;\n this.args = eventArgs;\n this.cbHandler = cbHandler;\n this.cbContext = cbContext;\n this.list = list;\n this.reset();\n },\n /**\r\n\t**\tResets the event to its initial state. An event object can be reused by resetting it and then\r\n\t**\tinvoking the resume event.\r\n\t**\r\n\t**\tEvent reset ();\r\n\t*/ reset: function() {\n this.next = null;\n this.ret = [];\n this._async = false;\n this.i = -1;\n return this;\n },\n /**\r\n\t**\tChanges the source of the event.\r\n\t**\r\n\t**\tEvent setSource (object value);\r\n\t*/ setSource: function(value) {\n this.source = value;\n return this;\n },\n /**\r\n\t**\tSets the internal asynchronous flag. Should be called before a handler returns. If a handler\r\n\t**\tcalls this method it should also call resume() when async operations are finished.\r\n\t**\r\n\t**\tEvent wait ();\r\n\t*/ wait: function() {\n this._async = true;\n return this;\n },\n /**\r\n\t**\tResumes event propagation. Should be called manually by event handlers that also call wait().\r\n\t**\r\n\t**\tEvent resume ();\r\n\t*/ resume: function() {\n this._async = false;\n while(!this._async){\n if (++this.i >= this.list.length) break;\n if (this.list[this.i].silent) continue;\n if ((0, $fMUO1.default).typeOf(this.list[this.i].handler) == \"string\") {\n if (this.list[this.i].context) {\n if (!this.list[this.i].context[this.list[this.i].handler]) continue;\n if (this.list[this.i].context[this.list[this.i].handler](this, this.args, this.list[this.i].data) === false) break;\n } else {\n if ($parcel$global[this.list[this.i].handler].call(null, this, this.args, this.list[this.i].data) === false) break;\n }\n } else {\n if (this.list[this.i].handler.call(this.list[this.i].context, this, this.args, this.list[this.i].data) === false) break;\n }\n }\n if (this._async) return this;\n if (this.i >= this.list.length && this.next) this.next.resume();\n if (this.cbHandler) this.cbHandler.call(this.cbContext);\n return this;\n },\n /**\r\n\t**\tSets the \"original\" property of the event to indicate where the original event comes from.\r\n\t**\r\n\t**\tEvent from (event: Event);\r\n\t*/ from: function(event) {\n this.original = event;\n return this;\n },\n /**\r\n\t**\tEnqueues the specified event to be executed upon the current event process is finished. The \"original\"\r\n\t**\tproperty of the chained event will be set to the current event.\r\n\t**\r\n\t**\tEvent enqueueEvent (event: Event);\r\n\t*/ enqueue: function(event) {\n if (!event) return this;\n var evt;\n for(evt = this; evt.next != null; evt = evt.next);\n evt.next = event;\n event.from(this);\n return this;\n }\n});\n\n\n\n\nvar /**\r\n**\tEvent dispatcher allows several event listeners to be attached, these will be invoked whenever the\r\n**\tevent that is being listened to is triggered.\r\n*/ $c43adaf9cb6d6dd3$export$2e2bcd8739ae039 = (0, $2394d727dfd6a212$export$2e2bcd8739ae039).extend({\n /**\r\n\t**\tName of the class.\r\n\t*/ className: \"EventDispatcher\",\n /**\r\n\t**\tListeners attached to this event dispatcher. Grouped by event name.\r\n\t*/ listeners: null,\n /**\r\n\t**\tNamespace for event dispatching. Defaults to null. Can be modified using setNamespace().\r\n\t*/ namespace: null,\n /**\r\n\t**\tInitializes the event dispatcher.\r\n\t**\r\n\t**\tEventDispatcher __ctor ();\r\n\t*/ __ctor: function() {\n this.listeners = {};\n },\n /**\r\n\t**\tSets the event dispatching namespace. Used to force all events dispatched to have the specified namespace.\r\n\t**\r\n\t**\tEventDispatcher setNamespace (value: string);\r\n\t*/ setNamespace: function(value) {\n this.namespace = value;\n return this;\n },\n /**\r\n\t**\tAdds an event listener for a specified event to the event dispatcher. The event name can have an optional\r\n\t**\tnamespace indicator which is added to the beginning of the event name and separated using a colon (:). This\r\n\t**\tindicator can be used to later trigger or remove all handlers of an specific namespace.\r\n\t**\r\n\t**\tEventDispatcher addEventListener (eventName: string, handler: function, context: object, data: object);\r\n\t*/ addEventListener: function(eventName, handler, context, data) {\n eventName = eventName.split(\":\");\n var name = eventName[eventName.length - 1];\n var ns = eventName.length > 1 ? eventName[0] : null;\n if (!this.listeners[name]) this.listeners[name] = [];\n this.listeners[name].push({\n ns: ns,\n handler: handler,\n context: context,\n data: data,\n silent: 0\n });\n return this;\n },\n /**\r\n\t**\tRemoves an event listener from the event dispatcher. If only the name is provided all handlers with the\r\n\t**\tspecified name will be removed. If a context is provided without a handler then any handler matching the\r\n\t**\tcontext will be removed. Special event name \"*\" can be used to match all event names.\r\n\t**\r\n\t**\tEventDispatcher removeEventListener (eventName: string, handler: function, context: object);\r\n\t*/ removeEventListener: function(eventName, handler, context) {\n eventName = eventName.split(\":\");\n var name = eventName[eventName.length - 1];\n var ns = eventName.length > 1 ? eventName[0] : null;\n if (name == \"*\") for(var j in this.listeners){\n var list = this.listeners[j];\n for(var i = 0; i < list.length; i++){\n var k = true;\n if (handler) k = k && list[i].handler === handler;\n if (context) k = k && list[i].context === context;\n if (ns) k = k && list[i].ns == ns;\n if (k) list.splice(i--, 1);\n }\n }\n else {\n if (!this.listeners[name]) return this;\n var list = this.listeners[name];\n for(var i = 0; i < list.length; i++){\n var k = true;\n if (handler) k = k && list[i].handler === handler;\n if (context) k = k && list[i].context === context;\n if (ns) k = k && list[i].ns == ns;\n if (k) list.splice(i--, 1);\n }\n }\n return this;\n },\n /**\r\n\t**\tPrepares an event with the specified parameters for its later usage. The event is started when\r\n\t**\tthe resume() method is called. If a callback is specified it will be executed once all event\r\n\t**\thandlers have been processed.\r\n\t**\r\n\t**\tEvent prepareEvent (eventName: string, eventArgs: map, cbHandler: function, cbContext: object);\r\n\t**\tEvent prepareEvent (eventName: string, eventArgs: map);\r\n\t*/ prepareEvent: function(eventName, eventArgs, cbHandler, cbContext) {\n var list = [];\n eventName = eventName.split(\":\");\n var name = eventName[eventName.length - 1];\n var ns = eventName.length > 1 ? eventName[0] : null;\n if (this.listeners[name]) list = list.concat(this.listeners[name]);\n if (this.listeners[\"*\"]) list = list.concat(this.listeners[\"*\"]);\n for(var i = 0; i < list.length; i++)if (list[i].silent) list.splice(i--, 1);\n if (ns) {\n for(var i = 0; i < list.length; i++)if (list[i].ns != ns) list.splice(i--, 1);\n }\n return new (0, $13eda5a5dec8010f$export$2e2bcd8739ae039)(this, list, name, eventArgs, cbHandler, cbContext);\n },\n /**\r\n\t**\tSilences or unsilences all handlers attached to an event such that if the event fires the handler(s) will\r\n\t**\tnot be invoked. It is recommended to use a namespace to ensure other handlers will continue to be run.\r\n\t**\r\n\t**\tEventDispatcher silence (eventName: string);\r\n\t*/ silence: function(eventName, value) {\n eventName = eventName.split(\":\");\n var name = eventName[eventName.length - 1];\n var ns = eventName.length > 1 ? eventName[0] : null;\n value = value === false ? -1 : 1;\n if (name == \"*\") for(var j in this.listeners){\n var list = this.listeners[j];\n for(var i = 0; i < list.length; i++){\n if (ns && list[i].ns != ns) continue;\n list[i].silent += value;\n }\n }\n else {\n if (!this.listeners[name]) return this;\n var list = this.listeners[name];\n for(var i = 0; i < list.length; i++){\n if (ns && list[i].ns != ns) continue;\n list[i].silent += value;\n }\n }\n return this;\n },\n /**\r\n\t**\tDispatches an event to the respective listeners. If a callback is specified it will be executed once\r\n\t**\tall event handlers have been processed.\r\n\t**\r\n\t**\tEvent dispatchEvent (eventName: string, eventArgs: map, cbHandler: function, cbContext: object);\r\n\t**\tEvent dispatchEvent (eventName: string, eventArgs: map);\r\n\t*/ dispatchEvent: function(eventName, eventArgs, cbHandler, cbContext) {\n return this.prepareEvent(this.namespace ? this.namespace + \":\" + eventName : eventName, eventArgs, cbHandler, cbContext).resume();\n }\n});\n\n\n\nvar $fMUO1 = parcelRequire(\"fMUO1\");\n\n\nvar $4VREF = parcelRequire(\"4VREF\");\n/**\n**\tA model is a high-integrity data object used to store properties and more importantly to provide event support to notify of any\n**\tkind of change that occurs to the model's properties. Integrity of the model is maintained by optionally using property constraints.\n*/ let $4dfa0622e14576ea$var$_Model = (0, $c43adaf9cb6d6dd3$export$2e2bcd8739ae039).extend({\n /**\n\t**\tName of the class.\n\t*/ className: \"Model\",\n /**\n\t**\tDefault properties for the model. Can be a map with the property name and its default value or a function\n\t**\treturning a map with dynamic default values. This is used to reset the model to its initial state.\n\t*/ defaults: null,\n /**\n\t**\tModel property contraints. A map with the property name and an object specifying the constraints of the\n\t**\tproperty. This is used to determine the type, format and behavior of each property in the model.\n\t*/ constraints: null,\n /**\n\t**\tProperties of the model.\n\t*/ data: null,\n /**\n\t**\tArray with the name of the properties that have changed. Populated prior modelChanged event.\n\t*/ changedList: null,\n /**\n\t**\tSilent mode indicator. While in silent mode events will not be dispatched.\n\t*/ _silent: 0,\n /**\n\t**\tCurrent nesting level of the set() method. This is used to determine when all the property\n\t**\tchanges are done.\n\t*/ _level: 0,\n /**\n\t**\tInitializes the model and sets the properties to the specified data object.\n\t**\n\t**\t>> Model __ctor (object data);\n\t**\t>> Model __ctor (object data, object defaults);\n\t*/ __ctor: function(data, defaults) {\n this._super.EventDispatcher.__ctor();\n this.data = {};\n if (defaults != null) this.reset(defaults, false);\n else {\n let o = null;\n if (!this.defaults && this.constraints) {\n o = {};\n for(let i in this.constraints){\n let j = this.constraints[i];\n if (j.def === null || j.def === undefined) {\n o[i] = null;\n continue;\n }\n if (typeof j.def === \"function\") o[i] = j.def();\n else o[i] = j.def;\n }\n }\n this.reset(o);\n }\n this.init();\n if (data != null) this.set(data, true);\n if (this.constraints) this.update();\n this.ready();\n },\n /**\n\t**\tResets the model to its default state and triggers update events. If a map is provided the defaults of\n\t**\tthe model will be set to the specified map.\n\t**\n\t**\t>> Model reset (object defaults, [bool nsilent=true]);\n\t**\t>> Model reset ([bool nsilent=true]);\n\t*/ reset: function(defaults, nsilent) {\n if (!this.defaults) {\n if (!defaults || (0, $fMUO1.default).typeOf(defaults) !== \"object\" && (0, $fMUO1.default).typeOf(defaults) !== \"function\") return this;\n this.defaults = defaults;\n }\n if ((0, $fMUO1.default).typeOf(this.defaults) === \"function\") this.data = this.defaults();\n else this.data = (0, $fMUO1.default).clone(this.defaults);\n return nsilent === false || defaults === false ? this : this.update(null, true);\n },\n /**\n\t**\tInitializes the model. Called before the model properties are set.\n\t**\n\t**\t>> void init ();\n\t*/ init: function() {},\n /**\n\t**\tInitialization epilogue. Called after initialization and after model properties are set.\n\t**\n\t**\t>> void ready ();\n\t*/ ready: function() {},\n /**\n\t**\tEnables or disables silent mode. When the model is in silent mode events will not be dispatched.\n\t**\n\t**\t>> Model silent (value: bool);\n\t*/ silent: function(value) {\n this._silent += value ? 1 : -1;\n return this;\n },\n /**\n\t**\tValidates a property name and value against the constraints defined in the model (if any). Returns the\n\t**\tfinal value if successful or throws an empty exception if errors occur.\n\t**\n\t**\t>> T _validate (string name, T value);\n\t*/ _validate: function(name, value) {\n if (!this.constraints || !this.constraints[name]) return value;\n var constraints = this.constraints[name];\n var nvalue = value;\n for(var ctname in constraints){\n if (!$4dfa0622e14576ea$var$_Model.Constraints[ctname]) continue;\n try {\n nvalue = $4dfa0622e14576ea$var$_Model.Constraints[ctname](this, constraints[ctname], name, nvalue);\n } catch (e) {\n if (e.message == \"null\") break;\n throw new Error(`Constraint [${ctname}:${constraints[ctname]}] failed on property '${name}'.`);\n }\n }\n return nvalue;\n },\n /**\n\t**\tSets the value of a property and returns the value set. This method is internally used to set properties\n\t**\tone at a time. If constraints are present in the model for the specified property all constraints will be\n\t**\tverified. When constraint errors occur the constraintError event will be raised and the property value\n\t**\twill not be changed.\n\t**\n\t**\t>> T _set (string name, T value);\n\t*/ _set: function(name, value) {\n if (!this.constraints || !this.constraints[name]) {\n this.data[name] = value;\n return value;\n }\n var constraints = this.constraints[name];\n var cvalue = this.data[name];\n var nvalue = value;\n for(var ctname in constraints){\n if (!$4dfa0622e14576ea$var$_Model.Constraints[ctname]) continue;\n try {\n nvalue = $4dfa0622e14576ea$var$_Model.Constraints[ctname](this, constraints[ctname], name, nvalue);\n } catch (e) {\n if (e.message == \"null\") break;\n if (!this._silent) this.dispatchEvent(\"constraintError\", {\n constraint: ctname,\n message: e.message,\n name: name,\n value: value\n });\n break;\n }\n }\n return this.data[name] = nvalue;\n },\n /**\n\t**\tTriggers property events to indicate a property is changing. First triggers \"propertyChanging\" and then\n\t**\t\"propertyChanged\". If the first event returns false the second event will not be triggered.\n\t**\n\t**\t>> void _propertyEvent (string name, T prev, T value, bool direct=false);\n\t*/ _propertyEvent: function(name, prev, value, direct) {\n var temp = {\n name: name,\n old: prev,\n value: value,\n level: this._level\n };\n var evt = this.dispatchEvent(\"propertyChanging\", temp);\n if (!direct) temp.value = this._set(name, temp.value);\n else this.data[name] = temp.value;\n if (evt != null && evt.ret.length && evt.ret[0] === false) return;\n this.dispatchEvent(\"propertyChanged.\" + name, temp);\n this.dispatchEvent(\"propertyChanged\", temp);\n this.changedList.push(name);\n },\n /**\n\t**\tSets one or more properties of the model. Possible arguments can be two strings or a map.\n\t**\n\t**\t>> Model set (string name, T value, bool force=true);\n\t**\t>> Model set (string name, T value, bool silent=false);\n\t**\t>> Model set (string name, T value);\n\t**\t>> Model set (object data);\n\t*/ set: function() {\n var n = arguments.length;\n var force = false, silent = false;\n if ((n > 2 || n == 2 && (0, $fMUO1.default).typeOf(arguments[0]) == \"object\") && (0, $fMUO1.default).typeOf(arguments[n - 1]) == \"boolean\") {\n force = arguments[--n];\n if (force === false) silent = true;\n }\n if (this._level == 0) this.changedList = [];\n this._level++;\n if (n == 2) {\n if (this.data[arguments[0]] !== arguments[1] || force) {\n if (!this._silent && !silent) this._propertyEvent(arguments[0], this.data[arguments[0]], this._validate(arguments[0], arguments[1]));\n else this._set(arguments[0], arguments[1]);\n }\n } else {\n for(var i in arguments[0])if (this.data[i] !== arguments[0][i] || force) {\n if (!this._silent && !silent) this._propertyEvent(i, this.data[i], this._validate(i, arguments[0][i]));\n else this._set(i, arguments[0][i]);\n }\n }\n if (!--this._level && this.changedList.length && !silent && !this._silent) this.dispatchEvent(\"modelChanged\", {\n fields: this.changedList\n });\n return this;\n },\n /**\n\t**\tReturns true if the given key exists in the model.\n\t**\n\t**\t>> boolean has (string name);\n\t*/ has: function(name) {\n return name in this.data;\n },\n /**\n\t**\tReturns the value of a property. If no name is specified the whole map of properties will be returned.\n\t**\tIf a boolean value of \"true\" is provided the properties map will be returned but first will be compacted\n\t**\tusing the default data to ensure only valid properties are present.\n\t**\n\t**\t>> T get (string name);\n\t**\t>> object get ();\n\t**\t>> object get (true);\n\t**\t>> object get (false);\n\t**\t\n\t*/ get: function(name, def) {\n if (arguments.length == 0 || name === false) return this.data;\n if (arguments.length == 1 && name === true) return this.flatten();\n if (arguments.length == 2) return this.data[name] === undefined ? def : this.data[name];\n return this.data[name];\n },\n /**\n\t**\tReturns the value of a property as an integer number.\n\t**\n\t**\t>> int getInt (string name, [int def]);\n\t*/ getInt: function(name, def) {\n if (arguments.length == 2) return this.data[name] === undefined ? def : parseInt(this.data[name]);\n return parseInt(this.data[name]);\n },\n /**\n\t**\tReturns the value of a property as a floating point number.\n\t**\n\t**\t>> float getFloat (string name, [float def]);\n\t*/ getFloat: function(name, def) {\n if (arguments.length == 2) return this.data[name] === undefined ? def : parseFloat(this.data[name]);\n return parseFloat(this.data[name]);\n },\n /**\n\t**\tReturns the value of a property as a boolean value (true or false).\n\t**\n\t**\t>> bool getBool (string name, [bool def]);\n\t**\t\n\t*/ getBool: function(name, def) {\n if (arguments.length == 2) name = this.data[name] === undefined ? def : this.data[name];\n else name = this.data[name];\n if (name === \"true\" || name === true) return true;\n if (name === \"false\" || name === false) return false;\n return parseInt(name) ? true : false;\n },\n /**\n\t**\tReturns a reference object for a model property. The resulting object contains two methods\n\t**\tnamed \"get\" and \"set\" to modify the value of the property.\n\t**\n\t**\t>> object getReference (string name);\n\t*/ getReference: function(name) {\n var m = this;\n return {\n get: function() {\n return m.get(name);\n },\n set: function(value) {\n m.set(name, value);\n }\n };\n },\n /**\n\t**\tSets or returns a constraint given the property name. \n\t**\n\t**\t>> Model constraint (string field, string constraint, T value);\n\t**\t>> Model constraint (string field, object constraint);\n\t**\t>> Model constraint (object constraints);\n\t**\t>> object constraint (string field);\n\t*/ constraint: function(field, constraint, value) {\n if (arguments.length == 3 || arguments.length == 2 || arguments.length == 1 && (0, $fMUO1.default).typeOf(field) == \"object\") {\n if (this.constraints === this.constructor.prototype.constraints) this.constraints = (0, $fMUO1.default).clone(this.constraints);\n switch(arguments.length){\n case 1:\n (0, $fMUO1.default).override(this.constraints, field);\n break;\n case 2:\n (0, $fMUO1.default).override(this.constraints[field], constraint);\n break;\n case 3:\n this.constraints[field][constraint] = value;\n break;\n }\n return this;\n }\n return !field ? this : this.constraints[field];\n },\n /**\n\t**\tReturns a compact version of the model properties. That is, a map only with validated properties that are\n\t**\talso present in the default data map. Returns null if the object is not compliant. If the \"safe\" parameter\n\t**\tis set one last property named \"class\" will be attached, this specifies the original classPath of the object.\n\t**\n\t**\t>> object flatten ([bool safe=false]);\n\t*/ flatten: function(safe, rsafe) {\n if (safe) {\n var data = this.flatten(false, true);\n if (data == null) return null;\n data[\"class\"] = this.classPath;\n return data;\n }\n if (!this.constraints && !this.defaults) return this.data;\n if (!this.isCompliant()) return {};\n var constraints = this.constraints;\n var keys = this.defaults ? (0, $fMUO1.default).typeOf(this.defaults) == \"function\" ? this.defaults() : this.defaults : this.constraints;\n var data = {};\n for(var i in this.data){\n if (!(i in keys)) continue;\n if (constraints && constraints[i]) {\n var ct = constraints[i];\n if (ct.model) {\n data[i] = this.data[i] ? this.data[i].flatten(rsafe) : null;\n continue;\n }\n if (ct.arrayof) {\n data[i] = [];\n for(var j = 0; j < this.data[i].length; j++)data[i][j] = this.data[i][j] ? this.data[i][j].flatten(rsafe) : null;\n continue;\n }\n if (ct.cls) {\n data[i] = this.data[i] ? this.data[i].flatten() : null;\n continue;\n }\n }\n data[i] = this.data[i];\n }\n return data;\n },\n /**\n\t**\tRemoves a property or a list of properties.\n\t**\n\t**\t>> void remove (string name, [bool nsilent=true]);\n\t**\t>> void remove (array name, [bool nsilent=true]);\n\t*/ remove: function(name, nsilent) {\n if ((0, $fMUO1.default).typeOf(name) == \"array\") {\n for(var i = 0; i < name.length; i++)delete this.data[name[i]];\n if (nsilent !== false && !this._silent) this.dispatchEvent(\"propertyRemoved\", {\n fields: name\n });\n } else {\n delete this.data[name];\n if (nsilent !== false && !this._silent) this.dispatchEvent(\"propertyRemoved\", {\n fields: [\n name\n ]\n });\n }\n },\n /**\n\t**\tTriggers data change events for one or more properties. Ensure that silent mode is not enabled or else\n\t**\tthis method will have no effect. If no parameters are provided a full update will be triggered on all of\n\t**\tthe model properties.\n\t**\n\t**\t>> Model update (array fields);\n\t**\t>> Model update (string name);\n\t**\t>> Model update (bool forceModelChanged);\n\t**\t>> Model update ();\n\t*/ update: function(fields, direct) {\n if (this._silent) return this;\n if (this._level == 0) this.changedList = [];\n this._level++;\n if (fields && (0, $fMUO1.default).typeOf(fields) == \"string\") this._propertyEvent(fields, this.data[fields], this.data[fields], direct);\n else if (fields && (0, $fMUO1.default).typeOf(fields) == \"array\") for (var i of fields)this._propertyEvent(i, this.data[i], this.data[i], direct);\n else for(var i in this.data)this._propertyEvent(i, this.data[i], this.data[i], direct);\n if (!--this._level && !this._silent && (this.changedList.length != 0 || fields === true)) this.dispatchEvent(\"modelChanged\", {\n fields: this.changedList\n });\n return this;\n },\n /**\n\t**\tValidates one or mode model properties using the defined constraints. If no parameters are provided all of\n\t**\tthe properties in the model will be validated.\n\t**\n\t**\t>> Model validate (array fields);\n\t**\t>> Model validate (string name);\n\t**\t>> Model validate ();\n\t*/ validate: function(fields) {\n if (!this.constraints) return this;\n if (fields && (0, $fMUO1.default).typeOf(fields) == \"string\") this._set(fields, this.data[fields]);\n else for(var i in this.data){\n if (fields && (0, $fMUO1.default).indexOf(fields, i) == -1) continue;\n this._set(i, this.data[i]);\n }\n return this;\n },\n /**\n\t**\tValidates all the properties in the model and returns a boolean indicating if all of them comply with the\n\t**\tconstraints defined in the model.\n\t**\n\t**\t>> bool isCompliant ();\n\t*/ isCompliant: function() {\n if (!this.constraints) return true;\n try {\n for(var i in this.data)this._validate(i, this.data[i]);\n return true;\n } catch (e) {}\n return false;\n },\n /**\n\t**\tRegisters an event handler for changes in a specific property of the model.\n\t**\n\t**\t>> void observe (string property, function handler, object context);\n\t*/ observe: function(property, handler, context) {\n this.addEventListener(\"propertyChanged.\" + property, handler, context);\n },\n /**\n\t**\tUnregisters an event handler from changes in a specific property of the model.\n\t**\n\t**\t>> void unobserve (string property, function handler, object context);\n\t*/ unobserve: function(property, handler, context) {\n this.removeEventListener(\"propertyChanged.\" + property, handler, context);\n },\n /**\n\t**\tAdds a propertyChanged event handler for the given property. The property name can have an event namespace prepended and separated by colon.\n\t**\n\t**\t>> void watch (string property, function handler);\n\t*/ watch: function(property, handler) {\n property = property.split(\":\");\n if (property.length == 1) {\n property[1] = property[0];\n property[0] = \"watch\";\n }\n this.addEventListener(property[0] + \":propertyChanged.\" + property[1], function(evt, args) {\n handler(args.value, args, evt);\n });\n },\n /**\n\t**\tRemoves propertyChanged handlers related to the specified property. The property name can have an event namespace prepended and separated by colon.\n\t**\n\t**\t>> void unwatch (string property);\n\t*/ unwatch: function(property) {\n property = property.split(\":\");\n if (property.length == 1) {\n property[1] = property[0];\n property[0] = \"watch\";\n }\n this.removeEventListener(property[0] + \":propertyChanged.\" + property[1]);\n },\n /**\n\t * Triggers a field change event. Even if the value of the field is the same as the model's, the event will still be triggered.\n\t */ trigger: function(name, value = null) {\n return this.set(name, value, true);\n },\n /**\n\t**\tSerializes the model into a string.\n\t**\n\t**\tstring toString ();\n\t*/ toString: function() {\n return (0, $fMUO1.default).serialize(this.get(true));\n }\n});\n$4dfa0622e14576ea$var$_Model.Constraints = (0, $4VREF.default);\nvar $4dfa0622e14576ea$export$2e2bcd8739ae039 = $4dfa0622e14576ea$var$_Model;\n\n\n\nvar $fMUO1 = parcelRequire(\"fMUO1\");\n\nvar /**\n**\tGeneric list for models.\n*/ $0890bed8a163f087$export$2e2bcd8739ae039 = (0, $4dfa0622e14576ea$export$2e2bcd8739ae039).extend({\n /**\n\t**\tName of the class.\n\t*/ className: \"ModelList\",\n /**\n\t**\tClass of the items in the list, can be overriden by child classes to impose a more strict constraint.\n\t*/ itemt: (0, $4dfa0622e14576ea$export$2e2bcd8739ae039),\n /**\n\t**\tMirror of data.contents\n\t*/ contents: null,\n /**\n\t**\tIDs of every item in the contents.\n\t*/ itemId: null,\n /**\n\t**\tAutoincremental ID for the next item to be added.\n\t*/ nextId: null,\n /**\n\t**\tDefault properties of the model.\n\t*/ defaults: {\n contents: null\n },\n /**\n\t**\tConstraints of the model to ensure integrity.\n\t*/ constraints: {\n contents: {\n type: \"array\",\n arrayof: \"@itemt\"\n }\n },\n /**\n\t**\tConstructor.\n\t*/ __ctor: function(...args) {\n this.itemId = [];\n this.nextId = 0;\n this._super.Model.__ctor(...args);\n },\n /**\n\t**\tInitialization epilogue. Called after initialization and after model properties are set.\n\t*/ ready: function() {\n this._eventGroup = \"ModelList_\" + Date.now() + \":modelChanged\";\n this.contents = this.data.contents;\n },\n /**\n\t**\tConnects the event handlers to the item.\n\t**\n\t**\t>> Model _bind (int iid, Model item);\n\t*/ _bind: function(iid, item) {\n if (item && item.addEventListener) item.addEventListener(this._eventGroup, this._onItemEvent, this, iid);\n return item;\n },\n /**\n\t**\tDisconnects the event handlers from the item.\n\t**\n\t**\t>> Model _unbind (Model item);\n\t*/ _unbind: function(item) {\n if (item && item.removeEventListener) item.removeEventListener(this._eventGroup);\n return item;\n },\n /**\n\t**\tHandler for item events.\n\t**\n\t**\t>> Model _onItemEvent (Event evt, object args, int iid);\n\t*/ _onItemEvent: function(evt, args, iid) {\n this.prepareEvent(\"itemChanged\", {\n id: iid,\n item: evt.source\n }).from(evt).enqueue(this.prepareEvent(\"modelChanged\", {\n fields: [\n \"contents\"\n ]\n })).resume();\n },\n /**\n\t**\tReturns the number of items in the list.\n\t**\n\t**\t>> int length ();\n\t*/ length: function() {\n return this.data.contents.length;\n },\n /**\n\t**\tClears the contents of the list.\n\t**\n\t**\t>> void clear ();\n\t*/ clear: function() {\n for(var i = 0; i < this.data.contents; i++)this._unbind(this.data.contents[i]);\n this.itemId = [];\n this.nextId = 0;\n this.contents = this.data.contents = [];\n this.prepareEvent(\"itemsCleared\").enqueue(this.prepareEvent(\"modelChanged\", {\n fields: [\n \"contents\"\n ]\n })).resume();\n return this;\n },\n /**\n\t**\tSets the contents of the list with the specified array. All items will be ensured to be of the same model\n\t**\ttype as the one specified in the list.\n\t**\n\t**\t>> ModelList setData (array data);\n\t*/ setData: function(data) {\n this.clear();\n if (!data) return this;\n for(var i = 0; i < data.length; i++){\n var item = (0, $fMUO1.default).ensureTypeOf(this.itemt, data[i]);\n this.itemId.push(this.nextId++);\n this.data.contents.push(item);\n this._bind(this.nextId - 1, item);\n }\n this.prepareEvent(\"itemsChanged\").enqueue(this.prepareEvent(\"modelChanged\", {\n fields: [\n \"contents\"\n ]\n })).resume();\n return this;\n },\n /**\n\t**\tReturns the raw array contents of the list.\n\t**\n\t**\t>> array getData ();\n\t*/ getData: function() {\n return this.data.contents;\n },\n /**\n\t**\tReturns the item at the specified index or null if the index is out of bounds.\n\t**\n\t**\t>> Model getAt (int index);\n\t*/ getAt: function(index) {\n if (index < 0 || index >= this.data.contents.length) return null;\n return this.data.contents[index];\n },\n /**\n\t**\tRemoves and returns the item at the specified index. Returns null if the index is out of bounds.\n\t**\n\t**\t>> Model removeAt (int index);\n\t*/ removeAt: function(index) {\n if (index < 0 || index >= this.data.contents.length) return null;\n let item = this.data.contents.splice(index, 1)[0];\n let id = this.itemId.splice(index, 1)[0];\n this._unbind(item);\n this.prepareEvent(\"itemRemoved\", {\n id: id,\n item: item\n }).enqueue(this.prepareEvent(\"modelChanged\", {\n fields: [\n \"contents\"\n ]\n })).resume();\n return item;\n },\n /**\n\t**\tSets the item at the specified index. Returns false if the index is out of bounds, true otherwise. The\n\t**\titem will be ensured to be of the model defined in the list.\n\t**\n\t**\t>> bool setAt (int index, Model item);\n\t*/ setAt: function(index, item) {\n if (index < 0 || index >= this.data.contents.length) return false;\n item = (0, $fMUO1.default).ensureTypeOf(this.itemt, item);\n this._unbind(this.data.contents[index]);\n this.data.contents[index] = item;\n this._bind(this.itemId[index], item);\n this.prepareEvent(\"itemChanged\", {\n id: this.itemId[index],\n item: item\n }).enqueue(this.prepareEvent(\"modelChanged\", {\n fields: [\n \"contents\"\n ]\n })).resume();\n return true;\n },\n /**\n\t**\tNotifies a change in the item at the specified index. Returns false if the index is out of bounds.\n\t**\n\t**\t>> bool updateAt (int index);\n\t*/ updateAt: function(index) {\n if (index < 0 || index >= this.data.contents.length) return false;\n this.prepareEvent(\"itemChanged\", {\n id: this.itemId[index],\n item: this.data.contents[index]\n }).enqueue(this.prepareEvent(\"modelChanged\", {\n fields: [\n \"contents\"\n ]\n })).resume();\n return true;\n },\n /**\n\t**\tAdds an item to the bottom of the list. Returns null if the item is not an object or a model. The item\n\t**\twill be ensured to be of the model specified in the list.\n\t**\n\t**\t>> Model push (Model item);\n\t*/ push: function(item) {\n if (item && (0, $fMUO1.default).typeOf(item) != \"object\") return null;\n item = (0, $fMUO1.default).ensureTypeOf(this.itemt, item);\n this.itemId.push(this.nextId++);\n this.data.contents.push(item);\n this._bind(this.nextId - 1, item);\n this.prepareEvent(\"itemAdded\", {\n id: this.itemId[this.itemId.length - 1],\n item: item,\n position: \"tail\"\n }).enqueue(this.prepareEvent(\"modelChanged\", {\n fields: [\n \"contents\"\n ]\n })).resume();\n return item;\n },\n /**\n\t**\tRemoves and returns an item from the bottom of the list.\n\t**\n\t**\t>> Model pop ();\n\t*/ pop: function() {\n return this._unbind(this.data.contents.pop());\n },\n /**\n\t**\tAdds an item to the top of the list. Returns null if the item is not an object or a model. The item\n\t**\twill be ensured to be of the model specified in the list.\n\t**\n\t**\t>> Model unshift (Model item);\n\t*/ unshift: function(item) {\n if (item && (0, $fMUO1.default).typeOf(item) != \"object\") return null;\n item = (0, $fMUO1.default).ensureTypeOf(this.itemt, item);\n this.itemId.unshift(this.nextId++);\n this.data.contents.unshift(item);\n this._bind(this.nextId - 1, item);\n this.prepareEvent(\"itemAdded\", {\n id: this.itemId[0],\n item: item,\n position: \"head\"\n }).enqueue(this.prepareEvent(\"modelChanged\", {\n fields: [\n \"contents\"\n ]\n })).resume();\n return item;\n },\n /**\n\t**\tRemoves and returns an item from the top of the list.\n\t**\n\t**\t>> Model shift ();\n\t*/ shift: function() {\n return this._unbind(this.data.contents.shift());\n },\n /**\n\t**\tSearches for an item matching the specified partial definition and returns its index. Returns -1 if the\n\t**\titem was not found. If retObject is set to true the object will be returned instead of its index and null\n\t**\twill be returned when the item is not found.\n\t**\n\t**\tint|object find (object data, bool retObject=false);\n\t*/ find: function(data, retObject = false) {\n var contents = this.data.contents;\n for(var i = 0; i < contents.length; i++){\n if ((0, $fMUO1.default).partialCompare(contents[i].data, data)) return retObject ? contents[i] : i;\n }\n return retObject ? null : -1;\n }\n});\n\n\n\nvar $fMUO1 = parcelRequire(\"fMUO1\");\n/**\r\n * The utility functions in this module allow to create a very strict serialization/deserialization schema\r\n * to ensure that all values are of the specific type when stored in string format.\r\n */ let $2710795e2347ba2a$var$Schema = {\n Type: function(proto) {\n let tmp = {\n flatten: function(value, context) {\n return value;\n },\n unflatten: function(value, context) {\n return value;\n }\n };\n return proto ? (0, $fMUO1.default).override(tmp, proto) : tmp;\n },\n String: function() {\n return $2710795e2347ba2a$var$Schema.Type({\n flatten: function(value, context) {\n return value != null ? value.toString() : null;\n },\n unflatten: function(value, context) {\n return value != null ? value.toString() : null;\n }\n });\n },\n Integer: function() {\n return $2710795e2347ba2a$var$Schema.Type({\n flatten: function(value, context) {\n return ~~value;\n },\n unflatten: function(value, context) {\n return ~~value;\n }\n });\n },\n Number: function(precision) {\n return $2710795e2347ba2a$var$Schema.Type({\n _precision: precision,\n _round: false,\n precision: function(value) {\n this._precision = ~~value;\n return this;\n },\n flatten: function(value, context) {\n value = parseFloat(value);\n if (this._precision > 0) value = ~~(value * Math.pow(10, this._precision)) / Math.pow(10, this._precision);\n return value;\n },\n unflatten: function(value, context) {\n return parseFloat(value);\n }\n });\n },\n Bool: function(compact) {\n return $2710795e2347ba2a$var$Schema.Type({\n _compact: compact,\n compact: function(value) {\n this._compact = value;\n return this;\n },\n flatten: function(value, context) {\n value = ~~value;\n return this._compact ? value > 0 ? 1 : 0 : value > 0 ? true : false;\n },\n unflatten: function(value, context) {\n return ~~value ? true : false;\n }\n });\n },\n SharedString: function() {\n return $2710795e2347ba2a$var$Schema.Type({\n flatten: function(value, context) {\n if (value == null) return 0;\n value = value.toString();\n if (!(\"strings\" in context)) {\n context.index = {};\n context.strings = [];\n }\n if (!(value in context.index)) {\n context.strings.push(value);\n context.index[value] = context.strings.length;\n }\n return context.index[value];\n },\n unflatten: function(value, context) {\n return value == null || value == 0 ? null : context.strings[~~value - 1];\n }\n });\n },\n Array: function(type) {\n return $2710795e2347ba2a$var$Schema.Type({\n itemType: type,\n _debug: false,\n _filter: null,\n debug: function(v) {\n this._debug = v;\n return this;\n },\n of: function(type) {\n this.itemType = type;\n return this;\n },\n filter: function(callback) {\n this._filter = callback;\n return this;\n },\n flatten: function(value, context) {\n if (value == null) return null;\n let o = [];\n for(let i = 0; i < value.length; i++){\n if (this._filter && !this._filter(value[i], i)) continue;\n o.push(this.itemType.flatten(value[i], context));\n }\n return o;\n },\n unflatten: async function(value, context) {\n if (value == null) return null;\n let o = [];\n for(let i = 0; i < value.length; i++)o.push(await this.itemType.unflatten(value[i], context));\n return o;\n }\n });\n },\n Object: function() {\n return $2710795e2347ba2a$var$Schema.Type({\n properties: [],\n property: function(name, type, defvalue = null) {\n this.properties.push({\n name: name,\n source: name,\n type: type,\n defvalue: defvalue\n });\n return this;\n },\n propertyAlias: function(name, source, type, defvalue = null) {\n this.properties.push({\n name: name,\n source: source,\n type: type,\n defvalue: defvalue\n });\n return this;\n },\n flatten: function(value, context) {\n if (value == null) return null;\n let o;\n if (context.symbolic === true) {\n o = {};\n for(let i = 0; i < this.properties.length; i++)if (this.properties[i].source in value) o[this.properties[i].name] = this.properties[i].type.flatten(value[this.properties[i].source], context);\n else o[this.properties[i].name] = this.properties[i].type.flatten(this.properties[i].defvalue, context);\n } else {\n o = [];\n for(let i = 0; i < this.properties.length; i++)if (this.properties[i].source in value) o.push(this.properties[i].type.flatten(value[this.properties[i].source], context));\n else o.push(this.properties[i].type.flatten(this.properties[i].defvalue, context));\n }\n return o;\n },\n unflatten: async function(value, context) {\n if (value == null) return null;\n let o = {};\n if (context.symbolic === true) for(let i = 0; i < this.properties.length; i++)o[this.properties[i].name] = await this.properties[i].type.unflatten(this.properties[i].name in value ? value[this.properties[i].name] : this.properties[i].defvalue, context);\n else for(let i = 0; i < this.properties.length; i++)o[this.properties[i].name] = await this.properties[i].type.unflatten(i in value ? value[i] : this.properties[i].defvalue, context);\n return o;\n }\n });\n },\n Class: function(classConstructor) {\n return $2710795e2347ba2a$var$Schema.Type({\n _constructor: classConstructor,\n constructor: function(classConstructor) {\n this._constructor = classConstructor;\n return this;\n },\n flatten: function(value, context) {\n return value == null ? null : value.flatten(context);\n },\n unflatten: async function(value, context) {\n return value == null ? null : await new this._constructor().unflatten(value, context);\n }\n });\n },\n /*\r\n\t**\tUsed when you want to specify just a single property.\r\n\t*/ Property: function(name, type) {\n return $2710795e2347ba2a$var$Schema.Type({\n property: name,\n type: type,\n name: function(name) {\n this.property = name;\n return this;\n },\n is: function(type) {\n this.type = type;\n return this;\n },\n flatten: function(value, context) {\n if (value == null) return null;\n let o;\n if (context.symbolic === true) {\n o = {};\n o[this.property] = this.type.flatten(value[this.property], context);\n } else o = this.type.flatten(value[this.property], context);\n return o;\n },\n unflatten: async function(value, context) {\n if (value == null) return null;\n let o = {};\n if (context.symbolic === true) o[this.property] = await this.type.unflatten(value[this.property], context);\n else o[this.property] = await this.type.unflatten(value, context);\n return o;\n }\n });\n },\n Map: function() {\n return $2710795e2347ba2a$var$Schema.Type({\n flatten: function(value, context) {\n if (value == null) return null;\n if (context.symbolic === true) return value;\n let o = [];\n for(let i in value){\n o.push(i);\n o.push(value[i]);\n }\n return o;\n },\n unflatten: function(value, context) {\n if (value == null) return null;\n if (context.symbolic === true) return value;\n let o = {};\n for(let i = 0; i < value.length; i += 2)o[value[i]] = value[i + 1];\n return o;\n }\n });\n },\n Selector: function() {\n return $2710795e2347ba2a$var$Schema.Type({\n conditions: [],\n value: null,\n when: function(value, type) {\n this.conditions.push([\n (val)=>val === value,\n type\n ]);\n return this;\n },\n with: function(value) {\n this.value = value;\n return this;\n },\n flatten: function(value, context) {\n if (value == null) return null;\n for (let i of this.conditions){\n if (i[0](this.value) === true) return i[1].flatten(value, context);\n }\n return null;\n },\n unflatten: async function(value, context) {\n if (value == null) return null;\n for (let i of this.conditions){\n if (i[0](this.value) === true) return await i[1].unflatten(value, context);\n }\n return null;\n }\n });\n }\n};\nvar $2710795e2347ba2a$export$2e2bcd8739ae039 = $2710795e2347ba2a$var$Schema;\n\n\n\nvar /**\r\n**\tClass used to add flattening and unflattening capabilities to any object. A \"flat\" object is an object composed\r\n**\tonly of native types, that is: `null,` `boolean`, `integer`, `number`, `array` or `object`.\r\n*/ $32651d5f38a8a64c$export$2e2bcd8739ae039 = (0, $2394d727dfd6a212$export$2e2bcd8739ae039).extend({\n /**\r\n\t**\tName of the class.\r\n\t*/ className: \"Flattenable\",\n /**\r\n\t**\tType schema used to flatten/unflatten the contents of this class. See Schema class for more information.\r\n\t*/ typeSchema: null,\n /**\r\n\t**\tReturns the flattened contents of the object.\r\n\t*/ flatten: function(context) {\n return this.typeSchema.flatten(this, context);\n },\n /**\r\n\t**\tUnflattens the given object and overrides the local contents.\r\n\t*/ unflatten: async function(value, context) {\n Object.assign(this, await this.typeSchema.unflatten(value, context));\n await this.onUnflattened();\n return this;\n },\n /*\r\n\t**\tExecuted when the unflatten() method is called on the object.\r\n\t*/ onUnflattened: async function() {}\n});\n\n\n\n\n\nvar $fMUO1 = parcelRequire(\"fMUO1\");\nvar /**\r\n**\tFlattenable collection class, used to store items and manipulate them. The items should also be flattenable.\r\n*/ $2bcce06113365814$export$2e2bcd8739ae039 = (0, $32651d5f38a8a64c$export$2e2bcd8739ae039).extend({\n /**\r\n\t**\tName of the class.\r\n\t*/ className: \"Collection\",\n /**\r\n\t**\tDescribes the type schema of the underlying items.\r\n\t*/ itemTypeSchema: null,\n /**\r\n\t**\tArray of items.\r\n\t*/ items: null,\n /* Array */ /**\r\n\t**\tConstructs the collection.\r\n\t*/ __ctor: function(itemTypeSchema) {\n if (!itemTypeSchema) itemTypeSchema = this.itemTypeSchema;\n if (itemTypeSchema) this.typeSchema = (0, $2710795e2347ba2a$export$2e2bcd8739ae039).Property(\"items\").is((0, $2710795e2347ba2a$export$2e2bcd8739ae039).Array().of(itemTypeSchema));\n this.reset();\n },\n /*\r\n\t**\tExecuted after the collection has been unflattened, re-adds the items to ensure onItemAdded() is called.\r\n\t*/ onUnflattened: function() {\n let items = this.items;\n this.reset();\n for (let i of items)this.add(i);\n },\n /**\r\n\t * \tExecuted when the value in `items` is changed.\r\n\t */ itemsReferenceChanged: function() {},\n /*\r\n\t**\tResets the collection to empty. Note that onItemRemoved will not be called.\r\n\t*/ reset: function() {\n this.items = [];\n this.itemsReferenceChanged();\n return this;\n },\n /*\r\n\t**\tClears the contents of the collection (removes each item manually, onItemRemoved will be called).\r\n\t*/ clear: function() {\n var items = this.items;\n this.reset();\n for(var i = 0; i < items.length; i++)this.onItemRemoved(items[i], 0);\n return this;\n },\n /*\r\n\t**\tSorts the collection. A comparison function should be provided, or the name of a property to sort by.\r\n\t**\r\n\t**\tObject sort (fn: Function)\r\n\t**\tObject sort (prop: string, [desc:bool=false])\r\n\t*/ sort: function(fn, desc) {\n if (typeof fn != \"function\") this.items.sort(function(a, b) {\n return (a[fn] <= b[fn] ? -1 : 1) * (desc === true ? -1 : 1);\n });\n else this.items.sort(fn);\n return this;\n },\n /*\r\n\t**\tSearches for an item with the specified fields and returns it. The \"inc\" object is the \"inclusive\" map, meaning all fields must match\r\n\t**\tand the optional \"exc\" is the exclusive map, meaning not even one field should match.\r\n\t**\r\n\t**\tObject findItem (inc: Object, exc: Object);\r\n\t*/ findItem: function(inc, exc) {\n if (!this.items) return null;\n for(var i = 0; i < this.items.length; i++){\n if (exc && (0, $fMUO1.default).partialCompare(this.items[i], exc)) continue;\n if ((0, $fMUO1.default).partialCompare(this.items[i], inc)) return this.items[i];\n }\n return null;\n },\n /*\r\n\t**\tReturns the container array.\r\n\t*/ getItems: function() {\n return this.items;\n },\n /*\r\n\t**\tReturns the number of items in the collection.\r\n\t*/ length: function() {\n return this.items.length;\n },\n /*\r\n\t**\tReturns true if the collection is empty.\r\n\t*/ isEmpty: function() {\n return !this.items.length;\n },\n /*\r\n\t**\tReturns the index of the specified item, or -1 if not found.\r\n\t*/ indexOf: function(item) {\n return this.items.indexOf(item);\n },\n /*\r\n\t**\tReturns the item at the specified index, or null if not found. When `relative` is true, negative offsets are allowed such that -1 refers to the last item.\r\n\t*/ getAt: function(index, relative = false) {\n if (index < 0 && relative == true) index += this.items.length;\n return index >= 0 && index < this.items.length ? this.items[index] : null;\n },\n /*\r\n\t**\tReturns the first item in the collection.\r\n\t*/ first: function() {\n return this.getAt(0);\n },\n /*\r\n\t**\tReturns the last item in the collection.\r\n\t*/ last: function() {\n return this.getAt(-1, true);\n },\n /*\r\n\t**\tAdds an item at the specified index, effectively moving the remaining items to the right.\r\n\t*/ addAt: function(index, item) {\n if (!item || !this.onBeforeItemAdded(item)) return this;\n if (index < 0) index = 0;\n if (index > this.items.length) index = this.items.length;\n if (index == 0) this.items.unshift(item);\n else if (index == this.items.length) this.items.push(item);\n else {\n var tmp = this.items.splice(0, index);\n tmp.push(item);\n this.items = tmp.concat(this.items);\n this.itemsReferenceChanged();\n }\n this.onItemAdded(item);\n return this;\n },\n /*\r\n\t**\tAdds an item to the start of the collection, onBeforeItemAdded and onItemAdded will be triggered.\r\n\t*/ unshift: function(item) {\n return this.addAt(0, item);\n },\n /*\r\n\t**\tAdds an item to the end of the collection, onBeforeItemAdded and onItemAdded will be triggered.\r\n\t*/ push: function(item) {\n return this.addAt(this.items.length, item);\n },\n /*\r\n\t**\tAdds an item to the end of the collection, onBeforeItemAdded and onItemAdded will be triggered.\r\n\t*/ add: function(item) {\n return this.push(item);\n },\n /*\r\n\t**\tRemoves the item at the specified index. When `relative` is true, negative offsets are allowed such that -1 refers to the last item.\r\n\t*/ removeAt: function(index, relative = false) {\n if (index < 0 && relative == true) index += this.items.length;\n if (index < 0 || index >= this.items.length) return null;\n var item = this.items[index];\n this.items.splice(index, 1);\n this.onItemRemoved(item, index);\n return item;\n },\n /*\r\n\t**\tRemoves an item from the end of the collection.\r\n\t*/ pop: function(item) {\n return this.removeAt(-1, true);\n },\n /*\r\n\t**\tRemoves an item from the start of the collection.\r\n\t*/ shift: function(item) {\n return this.removeAt(0);\n },\n /*\r\n\t**\tRemoves the specified item from the collection.\r\n\t*/ remove: function(item) {\n return this.removeAt(this.indexOf(item));\n },\n /*\r\n\t**\tRuns the specified callback for each of the items in the collection, if false is returned by the callback this function\r\n\t**\twill exit immediately. Parameters to the callback are: (item, index, collection).\r\n\t*/ forEach: function(callback) {\n if (this.isEmpty()) return this;\n for(var i = 0; i < this.items.length; i++)if (callback(this.items[i], i, this) === false) break;\n return this;\n },\n /*\r\n\t**\tExecutes a method call with the specified parameters on each of the items in the collection, if false is returned by the\r\n\t**\titem's method this function will exit immediately.\r\n\t*/ forEachCall: function(method, ...args) {\n if (this.isEmpty()) return this;\n for(var i = 0; i < this.items.length; i++)if (this.items[i][method](...args) === false) break;\n return this;\n },\n /*\r\n\t**\tExactly the same as forEach but in reverse order.\r\n\t*/ forEachRev: function(callback) {\n if (this.isEmpty()) return this;\n for(var i = this.items.length - 1; i >= 0; i--)if (callback(this.items[i], i, this) === false) break;\n return this;\n },\n /*\r\n\t**\tExactly the same as forEachCall but in reverse order.\r\n\t*/ forEachRevCall: function(method, ...args) {\n if (this.isEmpty()) return this;\n for(var i = this.items.length - 1; i >= 0; i--)if (this.items[i][method](...args) === false) break;\n return this;\n },\n /*\r\n\t**\tHandler for the beforeItemAdded event. If returns false the item will not be added.\r\n\t*/ onBeforeItemAdded: function(item) {\n return true;\n },\n /*\r\n\t**\tHandler for the itemAdded event.\r\n\t*/ onItemAdded: function(item) {},\n /*\r\n\t**\tHandler for the itemRemoved event.\r\n\t*/ onItemRemoved: function(item) {}\n});\n\n\n\nvar $fMUO1 = parcelRequire(\"fMUO1\");\n/**\n**\tTemplating module. The template formats available are shown below, note that the sym-open and sym-close symbols are by\n**\tdefault the square brackets, however those can be modified since are just parameters.\n**\n**\tHTML Escaped Output:\t\t\t[data.value]\t\t\t\t\tEscapes HTML characters from the output.\n**\tRaw Output:\t\t\t\t\t\t[!data.value]\t\t\t\t\tDoes not escape HTML characters from the output (used to output direct HTML).\n**\tDouble-Quoted Escaped Output:\t[data.value]\t\t\t\t\tEscapes HTML characters and surrounds with double quotes.\n**\tImmediate Reparse:\t\t\t\t[<....] [@....] \"...\" '...'\t\tReparses the contents as if parseTemplate() was called again.\n**\tImmediate Output:\t\t\t\t[:...]\t\t\t\t\t\t\tTakes the contents and outputs exactly as-is without format and optionally surrounded by the\n**\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsym-open and sym-close symbols when the first character is not '<', sym_open or space.\n**\tFiltered Output:\t\t\t\t[functionName ... <expr> ...]\tRuns a function call, 'expr' can be any of the allowed formats shown here (nested if desired),\n**\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfunctionName should map to one of the available expression functions registered in the\n**\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRinn.Template.functions map, each of which have their own parameters.\n*/ let $d261ccdafdfe12a9$var$Template = {\n /*\n\t**\tStrict mode flag. When set, any undefined expression function will trigger an exception.\n\t*/ strict: false,\n /**\n\t**\tParses a template and returns the compiled 'parts' structure to be used by the 'expand' method.\n\t**\n\t**\t>> array parseTemplate (string template, char sym_open, char sym_close, bool is_tpl=false);\n\t*/ parseTemplate: function(template, sym_open, sym_close, is_tpl = false, root = 1) {\n let nflush = \"string\", flush = null, state = 0, count = 0;\n let str = \"\", parts = [], mparts = parts, nparts = false;\n if (is_tpl === true) {\n template = template.trim();\n nflush = \"identifier\";\n state = 10;\n mparts.push(parts = []);\n }\n template += \"\\x00\";\n function unescape(value1) {\n if (typeof value1 == \"object\") {\n if (value1 instanceof Array) for(let i = 0; i < value1.length; i++)unescape(value1[i]);\n else value1.data = unescape(value1.data);\n return value1;\n }\n for(let i = 0; i < value1.length; i++)if (value1[i] == \"\\\\\") {\n let r = value1[i + 1];\n switch(r){\n case \"n\":\n r = \"\\n\";\n break;\n case \"r\":\n r = \"\\r\";\n break;\n case \"f\":\n r = \"\\f\";\n break;\n case \"v\":\n r = \"\\v\";\n break;\n case \"t\":\n r = \"\t\";\n break;\n case \"s\":\n r = \"s\";\n break;\n case '\"':\n r = '\"';\n break;\n case \"'\":\n r = \"'\";\n break;\n }\n value1 = value1.substr(0, i) + r + value1.substr(i + 2);\n }\n return value1;\n }\n function emit(type, data) {\n if (type == \"template\") data = $d261ccdafdfe12a9$var$Template.parseTemplate(data, sym_open, sym_close, true, 0);\n else if (type == \"parse\") {\n data = $d261ccdafdfe12a9$var$Template.parseTemplate(data, sym_open, sym_close, false, 0);\n type = \"base-string\";\n if ((0, $fMUO1.default).typeOf(data) == \"array\") {\n type = data[0].type;\n data = data[0].data;\n }\n } else if (type == \"parse-trim-merge\") data = $d261ccdafdfe12a9$var$Template.parseTemplate(data.trim().split(\"\\n\").map((i)=>i.trim()).join(\"\\n\"), sym_open, sym_close, false, 0);\n else if (type == \"parse-merge\") data = $d261ccdafdfe12a9$var$Template.parseTemplate(data, sym_open, sym_close, false, 0);\n else if (type == \"parse-merge-alt\") data = $d261ccdafdfe12a9$var$Template.parseTemplate(data, \"{\", \"}\", false, 0);\n if (type == \"parse-merge\" || type == \"parse-merge-alt\" || type == \"parse-trim-merge\") for(let i = 0; i < data.length; i++)parts.push(data[i]);\n else parts.push({\n type: type,\n data: data\n });\n if (nparts) {\n mparts.push(parts = []);\n nparts = false;\n }\n }\n for(let i = 0; i < template.length; i++){\n if (template[i] == \"\\\\\") {\n str += \"\\\\\";\n str += template[++i];\n continue;\n }\n switch(state){\n case 0:\n if (template[i] == \"\\x00\") flush = \"string\";\n else if (template[i] == sym_open && template[i + 1] == \"<\") {\n state = 1;\n count = 1;\n flush = \"string\";\n nflush = \"parse-merge\";\n } else if (template[i] == sym_open && template[i + 1] == \"@\") {\n state = 1;\n count = 1;\n flush = \"string\";\n nflush = \"parse-trim-merge\";\n i++;\n } else if (template[i] == sym_open && template[i + 1] == \":\") {\n state = 12;\n count = 1;\n flush = \"string\";\n nflush = \"string\";\n i++;\n } else if (template[i] == sym_open) {\n state = 1;\n count = 1;\n flush = \"string\";\n nflush = \"template\";\n } else str += template[i];\n break;\n case 1:\n if (template[i] == \"\\x00\") throw new Error(\"Parse error: Unexpected end of template\");\n if (template[i] == sym_close) {\n count--;\n if (count < 0) throw new Error(\"Parse error: Unmatched \" + sym_close);\n if (count == 0) {\n state = 0;\n flush = nflush;\n break;\n }\n } else if (template[i] == sym_open) count++;\n str += template[i];\n break;\n case 10:\n if (template[i] == \"\\x00\") {\n flush = nflush;\n break;\n } else if (template[i] == \".\") {\n emit(nflush, str);\n emit(\"access\", \".\");\n nflush = \"identifier\";\n str = \"\";\n break;\n } else if (template[i].match(/[\\t\\n\\r\\f\\v ]/) != null) {\n flush = nflush;\n nflush = \"identifier\";\n nparts = true;\n while(template[i].match(/[\\t\\n\\r\\f\\v ]/) != null)i++;\n i--;\n break;\n } else if (template[i] == sym_open && template[i + 1] == \"<\") {\n if (str) flush = nflush;\n state = 11;\n count = 1;\n nflush = \"parse-merge\";\n break;\n } else if (template[i] == sym_open && template[i + 1] == \"@\") {\n if (str) flush = nflush;\n state = 11;\n count = 1;\n nflush = \"parse-trim-merge\";\n i++;\n break;\n } else if (template[i] == '\"') {\n if (str) flush = nflush;\n state = 14;\n count = 1;\n nflush = \"parse-merge\";\n break;\n } else if (template[i] == \"'\") {\n if (str) flush = nflush;\n state = 15;\n count = 1;\n nflush = \"parse-merge\";\n break;\n } else if (template[i] == \"`\") {\n if (str) flush = nflush;\n state = 16;\n count = 1;\n nflush = \"parse-merge-alt\";\n break;\n } else if (template[i] == sym_open && template[i + 1] == \":\") {\n if (str) flush = nflush;\n state = 13;\n count = 1;\n nflush = \"string\";\n i++;\n break;\n } else if (template[i] == sym_open) {\n if (str) emit(nflush, str);\n state = 11;\n count = 1;\n str = \"\";\n nflush = \"parse\";\n str += template[i];\n break;\n }\n if (nflush != \"identifier\") {\n emit(nflush, str);\n str = \"\";\n nflush = \"identifier\";\n }\n str += template[i];\n break;\n case 11:\n if (template[i] == \"\\x00\") throw new Error(\"Parse error: Unexpected end of template\");\n if (template[i] == sym_close) {\n count--;\n if (count < 0) throw new Error(\"Parse error: Unmatched \" + sym_close);\n if (count == 0) {\n state = 10;\n if (nflush == \"parse-merge\" || nflush == \"parse-merge-alt\" || nflush == \"parse-trim-merge\") break;\n }\n } else if (template[i] == sym_open) count++;\n str += template[i];\n break;\n case 12:\n if (template[i] == \"\\x00\") throw new Error(\"Parse error: Unexpected end of template\");\n if (template[i] == sym_close) {\n count--;\n if (count < 0) throw new Error(\"Parse error: Unmatched \" + sym_close);\n if (count == 0) {\n if (str.length != 0) {\n if (!(str[0] == \"<\" || str[0] == \"[\" || str[0] == \" \")) str = sym_open + str + sym_close;\n }\n state = 0;\n flush = nflush;\n break;\n }\n } else if (template[i] == sym_open) count++;\n str += template[i];\n break;\n case 13:\n if (template[i] == \"\\x00\") throw new Error(\"Parse error: Unexpected end of template\");\n if (template[i] == sym_close) {\n count--;\n if (count < 0) throw new Error(\"Parse error: Unmatched \" + sym_close);\n if (count == 0) {\n if (!(str[0] == \"<\" || str[0] == \"[\" || str[0] == \" \")) str = sym_open + str + sym_close;\n state = 10;\n break;\n }\n } else if (template[i] == sym_open) count++;\n str += template[i];\n break;\n case 14:\n if (template[i] == \"\\x00\") throw new Error(\"Parse error: Unexpected end of template\");\n if (template[i] == '\"') {\n count--;\n if (count < 0) throw new Error('Parse error: Unmatched \"');\n if (count == 0) {\n state = 10;\n if (nflush == \"parse-merge\" || nflush == \"parse-merge-alt\" || nflush == \"parse-trim-merge\") break;\n }\n }\n str += template[i];\n break;\n case 15:\n if (template[i] == \"\\x00\") throw new Error(\"Parse error: Unexpected end of template\");\n if (template[i] == \"'\") {\n count--;\n if (count < 0) throw new Error(\"Parse error: Unmatched '\");\n if (count == 0) {\n state = 10;\n if (nflush == \"parse-merge\" || nflush == \"parse-merge-alt\" || nflush == \"parse-trim-merge\") break;\n }\n }\n str += template[i];\n break;\n case 16:\n if (template[i] == \"\\x00\") throw new Error(\"Parse error: Unexpected end of template\");\n if (template[i] == \"`\") {\n count--;\n if (count < 0) throw new Error(\"Parse error: Unmatched `\");\n if (count == 0) {\n state = 10;\n if (nflush == \"parse-merge\" || nflush == \"parse-merge-alt\" || nflush == \"parse-trim-merge\") break;\n }\n }\n str += template[i];\n break;\n }\n if (flush) {\n emit(flush, str);\n flush = str = \"\";\n }\n }\n if (!is_tpl) {\n let i = 0;\n while(i < mparts.length){\n if (mparts[i].type == \"string\" && mparts[i].data == \"\") mparts.splice(i, 1);\n else break;\n }\n i = mparts.length - 1;\n while(i > 0){\n if (mparts[i].type == \"string\" && mparts[i].data == \"\") mparts.splice(i--, 1);\n else break;\n }\n if (mparts.length == 0) mparts.push({\n type: \"string\",\n data: \"\"\n });\n }\n if (root) unescape(mparts);\n return mparts;\n },\n /**\n\t**\tParses a template and returns the compiled 'parts' structure to be used by the 'expand' method. This\n\t**\tversion assumes the sym_open and sym_close chars are [ and ] respectively.\n\t**\n\t**\t>> array parse (string template);\n\t*/ parse: function(template) {\n return this.parseTemplate(template.trim(), \"[\", \"]\", false);\n },\n /**\n\t**\tRemoves all static parts from a parsed template.\n\t**\n\t**\t>> array clean (array parts);\n\t*/ clean: function(parts) {\n for(let i = 0; i < parts.length; i++)if (parts[i].type != \"template\") {\n parts.splice(i, 1);\n i--;\n }\n return parts;\n },\n /**\n\t**\tExpands a template using the given data object, ret can be set to 'text' or 'obj' allowing to expand the template as\n\t**\ta string (text) or an array of objects (obj) respectively. If none provided it will be expanded as text.\n\t**\n\t**\t>> string/array expand (array parts, object data, string ret='text', string mode='base-string');\n\t*/ expand: function(parts, data, ret = \"text\", mode = \"base-string\") {\n let s = [];\n // Expand variable parts.\n if (mode == \"var\") {\n let escape = true;\n let quote = false;\n let root = data;\n let last = null;\n let first = true;\n let str = \"\";\n for(let i = 0; i < parts.length && data != null; i++)switch(parts[i].type){\n case \"identifier\":\n case \"string\":\n str += parts[i].data;\n last = null;\n break;\n case \"template\":\n last = this.expand(parts[i].data, root, \"arg\", \"template\");\n str += typeof last != \"object\" ? last : \"\";\n break;\n case \"base-string\":\n str += this.expand(parts[i].data, root, \"arg\", \"base-string\");\n last = null;\n break;\n case \"access\":\n if (!last || typeof last != \"object\") {\n if (str == \"\") str = \"this\";\n while(true){\n if (str[0] == \"!\") {\n str = str.substr(1);\n escape = false;\n } else if (str[0] == \"$\") {\n str = str.substr(1);\n quote = true;\n } else break;\n }\n if (str != \"this\" && data != null) {\n let tmp = data;\n data = str in data ? data[str] : null;\n if (data === null && first) {\n if (str in $d261ccdafdfe12a9$var$Template.functions) data = $d261ccdafdfe12a9$var$Template.functions[str](null, null, tmp);\n }\n first = false;\n }\n } else data = last;\n str = \"\";\n break;\n }\n while(str != \"\"){\n if (str[0] == \"!\") {\n str = str.substr(1);\n escape = false;\n } else if (str[0] == \"$\") {\n str = str.substr(1);\n quote = true;\n } else break;\n }\n if (str != \"this\") {\n let failed = false;\n if (data != null) {\n if (!(str in data)) {\n failed = true;\n data = null;\n } else data = data[str];\n } else failed = true;\n if (failed && parts.length == 1) {\n if ($d261ccdafdfe12a9$var$Template.strict == true) throw new Error(\"Expression function `\" + str + \"` not found.\");\n }\n }\n if (typeof data == \"string\") {\n if (escape) data = data.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n if (quote) data = '\"' + data + '\"';\n }\n s.push(data);\n }\n // Expand variable parts and returns a reference to it.\n if (ret == \"varref\") {\n let root = data;\n let last = null;\n let first = true;\n let str = \"\";\n for(let i = 0; i < parts.length && data != null; i++)switch(parts[i].type){\n case \"identifier\":\n case \"string\":\n str += parts[i].data;\n last = null;\n break;\n case \"template\":\n last = this.expand(parts[i].data, root, \"arg\", \"template\");\n str += typeof last != \"object\" ? last : \"\";\n break;\n case \"base-string\":\n str += this.expand(parts[i].data, root, \"arg\", \"base-string\");\n last = null;\n break;\n case \"access\":\n if (!last || typeof last != \"object\") {\n if (str == \"\") str = \"this\";\n while(true){\n if (str[0] == \"!\") str = str.substr(1);\n else if (str[0] == \"$\") str = str.substr(1);\n else break;\n }\n if (str != \"this\" && data != null) {\n let tmp = data;\n data = str in data ? data[str] : null;\n if (data === null && first) {\n if (str in $d261ccdafdfe12a9$var$Template.functions) data = $d261ccdafdfe12a9$var$Template.functions[str](null, null, tmp);\n }\n first = false;\n }\n } else data = last;\n str = \"\";\n break;\n }\n while(str != \"\"){\n if (str[0] == \"!\") str = str.substr(1);\n else if (str[0] == \"$\") str = str.substr(1);\n else break;\n }\n return str != \"this\" ? [\n data,\n str\n ] : null;\n }\n // Expand function parts.\n if (mode == \"fn\") {\n var args = [];\n args.push($d261ccdafdfe12a9$var$Template.expand(parts[0], data, \"text\", \"base-string\"));\n if (\"_\" + args[0] in $d261ccdafdfe12a9$var$Template.functions) args[0] = \"_\" + args[0];\n if (!(args[0] in $d261ccdafdfe12a9$var$Template.functions)) {\n if ($d261ccdafdfe12a9$var$Template.strict == true) throw new Error(\"Expression function `\" + args[0] + \"` not found.\");\n return `(Unknown: ${args[0]})`;\n }\n if (args[0][0] == \"_\") return $d261ccdafdfe12a9$var$Template.functions[args[0]](parts, data);\n for(let i = 1; i < parts.length; i++)args.push($d261ccdafdfe12a9$var$Template.expand(parts[i], data, \"arg\", \"base-string\"));\n s.push($d261ccdafdfe12a9$var$Template.functions[args[0]](args, parts, data));\n }\n // Template mode.\n if (mode == \"template\") {\n if (parts.length == 1) {\n if (parts[0].length == 1 && parts[0][0].type == \"string\") return parts[0][0].data;\n if (parts[0].length == 1 && parts[0][0].type == \"identifier\") {\n let name = parts[0][0].data;\n if (name in $d261ccdafdfe12a9$var$Template.functions || \"_\" + name in $d261ccdafdfe12a9$var$Template.functions) return $d261ccdafdfe12a9$var$Template.expand(parts, data, ret, \"fn\");\n }\n return $d261ccdafdfe12a9$var$Template.expand(parts[0], data, ret, \"var\");\n }\n return $d261ccdafdfe12a9$var$Template.expand(parts, data, ret, \"fn\");\n }\n // Expand parts.\n if (mode == \"base-string\") {\n let index = -1;\n for (let i of parts){\n let tmp = null;\n index++;\n switch(i.type){\n case \"template\":\n tmp = $d261ccdafdfe12a9$var$Template.expand(i.data, data, ret, \"template\");\n break;\n case \"string\":\n case \"identifier\":\n tmp = i.data;\n break;\n case \"base-string\":\n tmp = $d261ccdafdfe12a9$var$Template.expand(i.data, data, ret, \"base-string\");\n break;\n }\n if (ret == \"void\") continue;\n if (ret == \"last\" && index != parts.length - 1) continue;\n s.push(tmp);\n }\n }\n // Return types for direct objects.\n if (ret == \"obj\") return s;\n if (ret == \"last\") {\n if (typeOf(s) == \"Rose\\\\Arry\") s = s[0];\n return s;\n }\n // When the output is not really needed.\n if (ret == \"void\") return null;\n // Return as argument ('object' if only one, or string if more than one), that is, the first item in the result.\n if (ret == \"arg\") {\n if ((0, $fMUO1.default).typeOf(s) == \"array\") {\n if (s.length != 1) return s.join(\"\");\n return s[0];\n }\n return s;\n }\n if (ret == \"text\" && (0, $fMUO1.default).typeOf(s) == \"array\") {\n let f = (e)=>e != null && typeof e == \"object\" ? \"map\" in e ? e.map(f).join(\"\") : \"join\" in e ? e.join(\"\") : e.toString() : e;\n s = s.map(f).join(\"\");\n }\n return s;\n },\n /**\n\t**\tParses the given template and returns a function that when called with an object will expand the template.\n\t**\n\t**\t>> object compile (string template);\n\t*/ compile: function(template) {\n template = $d261ccdafdfe12a9$var$Template.parse(template);\n return function(data = null, mode = \"text\") {\n return $d261ccdafdfe12a9$var$Template.expand(template, data ? data : {}, mode);\n };\n },\n /**\n\t**\tParses and expands the given template immediately.\n\t**\n\t**\t>> object eval (string template, object data, string mode='text');\n\t*/ eval: function(template, data = null, mode = \"text\") {\n template = $d261ccdafdfe12a9$var$Template.parse(template);\n return $d261ccdafdfe12a9$var$Template.expand(template, data ? data : {}, mode);\n },\n /**\n\t**\tExpands the template as 'arg' and returns the result.\n\t**\n\t**\t>> object value (string parts, object data);\n\t*/ value: function(parts, data = null) {\n return (0, $fMUO1.default).typeOf(parts) != \"array\" ? parts : $d261ccdafdfe12a9$var$Template.expand(parts, data ? data : {}, \"arg\");\n },\n /**\n\t**\tRegisters an expression function.\n\t**\n\t**\t>> object register (string name, function fn);\n\t*/ register: function(name, fn) {\n $d261ccdafdfe12a9$var$Template.functions[name] = fn;\n },\n /**\n\t**\tCalls an expression function.\n\t**\n\t**\t>> object call (string name, object args, object data);\n\t*/ \"call\": function(name, args, data = null) {\n if (name in $d261ccdafdfe12a9$var$Template.functions) return $d261ccdafdfe12a9$var$Template.functions[name](args, null, data);\n return null;\n },\n /**\n\t**\tReturns a map given a 'parts' array having values of the form \"name: value\" or \":name value\".\n\t**\n\t**\t>> Map getNamedValues (array parts, object data, int i=1, bool expanded=true);\n\t*/ getNamedValues: function(parts, data, i = 1, expanded = true) {\n let s = {};\n let mode = 0;\n for(; i < parts.length; i += 2){\n let key = $d261ccdafdfe12a9$var$Template.expand(parts[i], data, \"arg\");\n if (!mode) {\n if (key.startsWith(\":\")) mode = 1;\n else mode = key.endsWith(\":\") ? 2 : 3;\n }\n if (mode == 1) key = key.substr(1);\n else if (mode == 2) key = key.substr(0, key.length - 1);\n if (expanded) s[key] = $d261ccdafdfe12a9$var$Template.expand(parts[i + 1], data, \"arg\");\n else s[key] = parts[i + 1];\n }\n return s;\n }\n};\n/**\n**\tTemplate functions, functions that are used to format data. Each function takes three parameters (args, parts and data). By default the function arguments\n**\tare expanded and passed via 'args' for convenience, however if the function name starts with '_' the 'args' parameter will be skipped and only (parts, data)\n**\twill be available, each 'part' must be expanded manually by calling Template.expand.\n*/ $d261ccdafdfe12a9$var$Template.functions = {\n /**\n\t**\tExpression functions.\n\t*/ \"global\": function(args) {\n return globalThis;\n },\n \"null\": function(args) {\n return null;\n },\n \"true\": function(args) {\n return true;\n },\n \"false\": function(args) {\n return false;\n },\n \"len\": function(args) {\n return args[1].toString().length;\n },\n \"int\": function(args) {\n return ~~args[1];\n },\n \"str\": function(args) {\n return args[1].toString();\n },\n \"float\": function(args) {\n return parseFloat(args[1]);\n },\n \"chr\": function(args) {\n return String.fromCharCode(args[1]);\n },\n \"ord\": function(args) {\n return args[1].toString().charCodeAt(0);\n },\n \"not\": function(args) {\n return !args[1];\n },\n \"neg\": function(args) {\n return -args[1];\n },\n \"abs\": function(args) {\n return Math.abs(args[1]);\n },\n \"and\": function(args) {\n for(let i = 1; i < args.length; i++)if (!args[i]) return false;\n return true;\n },\n \"or\": function(args) {\n for(let i = 1; i < args.length; i++)if (~~args[i]) return true;\n return false;\n },\n \"eq\": function(args) {\n return args[1] == args[2];\n },\n \"ne\": function(args) {\n return args[1] != args[2];\n },\n \"lt\": function(args) {\n return args[1] < args[2];\n },\n \"le\": function(args) {\n return args[1] <= args[2];\n },\n \"gt\": function(args) {\n return args[1] > args[2];\n },\n \"ge\": function(args) {\n return args[1] >= args[2];\n },\n \"isnotnull\": function(args) {\n return !!args[1];\n },\n \"isnull\": function(args) {\n return !args[1];\n },\n \"iszero\": function(args) {\n return parseInt(args[1]) == 0;\n },\n \"eq?\": function(args) {\n return args[1] == args[2];\n },\n \"ne?\": function(args) {\n return args[1] != args[2];\n },\n \"lt?\": function(args) {\n return args[1] < args[2];\n },\n \"le?\": function(args) {\n return args[1] <= args[2];\n },\n \"gt?\": function(args) {\n return args[1] > args[2];\n },\n \"ge?\": function(args) {\n return args[1] >= args[2];\n },\n \"notnull?\": function(args) {\n return !!args[1];\n },\n \"null?\": function(args) {\n return !args[1];\n },\n \"zero?\": function(args) {\n return parseInt(args[1]) == 0;\n },\n \"typeof\": function(args) {\n return (0, $fMUO1.default).typeOf(args[1]);\n },\n \"*\": function(args) {\n let x = args[1];\n for(let i = 2; i < args.length; i++)x *= args[i];\n return x;\n },\n \"/\": function(args) {\n let x = args[1];\n for(let i = 2; i < args.length; i++)x /= args[i];\n return x;\n },\n \"+\": function(args) {\n let x = args[1];\n for(let i = 2; i < args.length; i++)x -= -args[i];\n return x;\n },\n \"-\": function(args) {\n let x = args[1];\n for(let i = 2; i < args.length; i++)x -= args[i];\n return x;\n },\n \"mul\": function(args) {\n let x = args[1];\n for(let i = 2; i < args.length; i++)x *= args[i];\n return x;\n },\n \"div\": function(args) {\n let x = args[1];\n for(let i = 2; i < args.length; i++)x /= args[i];\n return x;\n },\n \"sum\": function(args) {\n let x = args[1];\n for(let i = 2; i < args.length; i++)x -= -args[i];\n return x;\n },\n \"sub\": function(args) {\n let x = args[1];\n for(let i = 2; i < args.length; i++)x -= args[i];\n return x;\n },\n \"mod\": function(args) {\n let x = args[1];\n for(let i = 2; i < args.length; i++)x %= args[i];\n return x;\n },\n \"pow\": function(args) {\n let x = args[1];\n for(let i = 2; i < args.length; i++)x = Math.pow(x, args[i]);\n return x;\n },\n /**\n\t**\tReturns the JSON representation of the expression.\n\t**\n\t**\tdump <expr>\n\t*/ \"dump\": function(args) {\n return JSON.stringify(args[1]);\n },\n /**\n\t**\tSets one or more variables in the data context.\n\t**\n\t**\tset <var-name> <expr> [<var-name> <expr>]*\n\t*/ \"_set\": function(parts, data) {\n for(let i = 1; i + 1 < parts.length; i += 2){\n let value1 = $d261ccdafdfe12a9$var$Template.value(parts[i + 1], data);\n if (parts[i].length > 1) {\n let ref = $d261ccdafdfe12a9$var$Template.expand(parts[i], data, \"varref\");\n if (ref != null) ref[0][ref[1]] = value1;\n } else data[$d261ccdafdfe12a9$var$Template.value(parts[i], data)] = value1;\n }\n return \"\";\n },\n /**\n\t**\tRemoves one or more variables from the data context.\n\t**\n\t**\tunset <var-name> [<var-name>]*\n\t*/ \"_unset\": function(parts, data) {\n for(let i = 1; i < parts.length; i++)if (parts[i].length > 1) {\n let ref = $d261ccdafdfe12a9$var$Template.expand(parts[i], data, \"varref\");\n if (ref != null) delete ref[0][ref[1]];\n } else delete data[$d261ccdafdfe12a9$var$Template.value(parts[i], data)];\n return null;\n },\n /**\n\t**\tReturns the expression without white-space on the left or right. The expression can be a string or an array.\n\t**\n\t**\ttrim <expr>\n\t*/ \"trim\": function(args) {\n return args[1] ? typeof args[1] == \"object\" ? args[1].map((e)=>e.trim()) : args[1].trim() : \"\";\n },\n /**\n\t**\tReturns the expression in uppercase. The expression can be a string or an array.\n\t**\n\t**\tupper <expr>\n\t*/ \"upper\": function(args) {\n return args[1] ? typeof args[1] == \"object\" ? args[1].map((e)=>e.toUpperCase()) : args[1].toUpperCase() : \"\";\n },\n /**\n\t**\tReturns the expression in lower. The expression can be a string or an array.\n\t**\n\t**\tlower <expr>\n\t*/ \"lower\": function(args) {\n return args[1] ? typeof args[1] == \"object\" ? args[1].map((e)=>e.toLowerCase()) : args[1].toLowerCase() : \"\";\n },\n /**\n\t**\tReturns a sub-string of the given string.\n\t**\n\t**\tsubstr <start> <count> <string>\n\t**\tsubstr <start> <string>\n\t*/ \"substr\": function(args) {\n let s = args[args.length - 1].toString();\n let start = 0;\n let count = null;\n if (args.length == 4) {\n start = ~~args[1];\n count = ~~args[2];\n } else {\n start = ~~args[1];\n count = null;\n }\n if (start < 0) start += s.length;\n if (count < 0) count += s.length;\n if (count === null) count = s.length - start;\n return s.substr(start, count);\n },\n /**\n\t**\tReplaces a matching string with the given replacement string in a given text.\n\t**\n\t**\treplace <search> <replacement> <text>\n\t*/ \"replace\": function(args) {\n return args[3].split(args[1]).join(args[2]);\n },\n /**\n\t**\tConverts all new-line chars in the expression to <br/>, the expression can be a string or an array.\n\t**\n\t**\tnl2br <expr>\n\t*/ \"nl2br\": function(args) {\n return args[1] ? typeof args[1] == \"object\" ? args[1].map((e)=>e.replace(/\\n/g, \"<br/>\")) : args[1].replace(/\\n/g, \"<br/>\") : \"\";\n },\n /**\n\t**\tReturns the expression inside an XML tag named 'tag-name', the expression can be a string or an array.\n\t**\n\t**\t% <tag-name> <expr>\n\t*/ \"%\": function(args) {\n args.shift();\n var name = args.shift();\n let s = \"\";\n for(let i = 0; i < args.length; i++)if ((0, $fMUO1.default).typeOf(args[i]) == \"array\") {\n s += `<${name}>`;\n for(let j = 0; j < args[i].length; j++)s += args[i][j];\n s += `</${name}>`;\n } else s += `<${name}>${args[i]}</${name}>`;\n return s;\n },\n /**\n\t**\tReturns the expression inside an XML tag named 'tag-name', attributes are supported.\n\t**\n\t**\t%% <tag-name> [<attr> <value>]* [<content>]\n\t*/ \"%%\": function(args) {\n args.shift();\n var name = args.shift();\n let attr = \"\";\n let text = \"\";\n for(let i = 0; i < args.length; i += 2)if (i + 1 < args.length) attr += ` ${args[i]}=\"${args[i + 1]}\"`;\n else text = args[i];\n return text ? `<${name}${attr}>${text}</${name}>` : `<${name}${attr}/>`;\n },\n /**\n\t**\tJoins the given array expression into a string. The provided string-expr will be used as separator.\n\t**\n\t**\tjoin <string-expr> <array-expr>\n\t*/ \"join\": function(args) {\n if (args[2] && (0, $fMUO1.default).typeOf(args[2]) == \"array\") return args[2].join(args[1]);\n return \"\";\n },\n /**\n\t**\tSplits the given expression by the specified string. Returns an array.\n\t**\n\t**\tsplit <string-expr> <expr>\n\t*/ \"split\": function(args) {\n if (args[2] && typeof args[2] == \"string\") return args[2].split(args[1]);\n return [];\n },\n /**\n\t**\tReturns an array with the keys of the given object-expr.\n\t**\n\t**\tkeys <object-expr>\n\t*/ \"keys\": function(args) {\n if (args[1] && typeof args[1] == \"object\") return Object.keys(args[1]);\n return [];\n },\n /**\n\t**\tReturns an array with the values of the given object-expr.\n\t**\n\t**\tvalues <object-expr>\n\t*/ \"values\": function(args) {\n if (args[1] && typeof args[1] == \"object\") return Object.values(args[1]);\n return [];\n },\n /**\n\t**\tConstructs a string obtained by concatenating the expanded template for each of the items in the list-expr, the mandatory varname\n\t**\tparameter (namely 'i') indicates the name of the variable that will contain the data of each item as the list-expr is\n\t**\ttraversed. Extra variables i# and i## (suffix '#' and '##') are introduced to denote the index/key and numeric index\n\t**\tof the current item respectively, note that the later will always have a numeric value.\n\t**\n\t**\teach <varname> <list-expr> <template>\n\t*/ \"_each\": function(parts, data) {\n let var_name = $d261ccdafdfe12a9$var$Template.expand(parts[1], data, \"arg\");\n let list = $d261ccdafdfe12a9$var$Template.expand(parts[2], data, \"arg\");\n let s = \"\";\n let j = 0;\n if (!list) return s;\n for(let i in list){\n data[var_name] = list[i];\n data[var_name + \"##\"] = j++;\n data[var_name + \"#\"] = i;\n s += $d261ccdafdfe12a9$var$Template.expand(parts[3], data, \"text\");\n }\n delete data[var_name];\n delete data[var_name + \"##\"];\n delete data[var_name + \"#\"];\n return s;\n },\n /**\n\t**\tExpands the given template for each of the items in the list-expr, the mandatory varname parameter (namely 'i') indicates the name of the variable\n\t**\tthat will contain the data of each item as the list-expr is traversed. Extra variables i# and i## (suffix '#' and '##') are introduced to denote\n\t**\tthe index/key and numeric index of the current item respectively, note that the later will always have a numeric value.\n\t**\n\t**\tDoes not produce any output (returns null).\n\t**\n\t**\tforeach <varname> <list-expr> <template>\n\t*/ \"_foreach\": function(parts, data) {\n let var_name = $d261ccdafdfe12a9$var$Template.expand(parts[1], data, \"arg\");\n let list = $d261ccdafdfe12a9$var$Template.expand(parts[2], data, \"arg\");\n let j = 0;\n if (!list) return null;\n for(let i in list){\n data[var_name] = list[i];\n data[var_name + \"##\"] = j++;\n data[var_name + \"#\"] = i;\n $d261ccdafdfe12a9$var$Template.expand(parts[3], data, \"text\");\n }\n delete data[var_name];\n delete data[var_name + \"##\"];\n delete data[var_name + \"#\"];\n return null;\n },\n /**\n\t**\tReturns the valueA if the expression is true otherwise valueB, this is a short version of the 'if' function with the\n\t**\tdifference that the result is 'obj' instead of text.\n\t**\n\t**\t? <expr> <valueA> [<valueB>]\n\t*/ \"_?\": function(parts, data) {\n if ($d261ccdafdfe12a9$var$Template.expand(parts[1], data, \"arg\")) return $d261ccdafdfe12a9$var$Template.expand(parts[2], data, \"arg\");\n if (parts.length > 3) return $d261ccdafdfe12a9$var$Template.expand(parts[3], data, \"arg\");\n return \"\";\n },\n /**\n\t**\tReturns the valueA if it is not null (or empty or zero), otherwise returns valueB.\n\t**\n\t**\t?? <valueA> <valueB>\n\t*/ \"_??\": function(parts, data) {\n let value1 = $d261ccdafdfe12a9$var$Template.expand(parts[1], data, \"arg\");\n if (value1) return value1;\n return $d261ccdafdfe12a9$var$Template.expand(parts[2], data, \"arg\");\n },\n /**\n\t**\tReturns the value if the expression is true, supports 'elif' and 'else' as well. The result of this function is always text.\n\t**\n\t**\tif <expr> <value> [elif <expr> <value>] [else <value>]\n\t*/ \"_if\": function(parts, data) {\n for(let i = 0; i < parts.length; i += 3){\n if ($d261ccdafdfe12a9$var$Template.expand(parts[i], data, \"arg\") == \"else\") return $d261ccdafdfe12a9$var$Template.expand(parts[i + 1], data, \"text\");\n if ($d261ccdafdfe12a9$var$Template.expand(parts[i + 1], data, \"arg\")) return $d261ccdafdfe12a9$var$Template.expand(parts[i + 2], data, \"text\");\n }\n return \"\";\n },\n /**\n\t**\tLoads the expression value and attempts to match one case.\n\t**\n\t**\tswitch <expr> <case1> <value1> ... <caseN> <valueN> default <defvalue> \n\t*/ \"_switch\": function(parts, data) {\n let value1 = $d261ccdafdfe12a9$var$Template.expand(parts[1], data, \"arg\");\n for(let i = 2; i < parts.length; i += 2){\n let case_value = $d261ccdafdfe12a9$var$Template.expand(parts[i], data, \"arg\");\n if (case_value == value1 || case_value == \"default\") return $d261ccdafdfe12a9$var$Template.expand(parts[i + 1], data, \"text\");\n }\n return \"\";\n },\n /**\n\t**\tExits the current inner most loop.\n\t**\n\t**\tbreak\n\t*/ \"_break\": function(parts, data) {\n throw new Error(\"EXC_BREAK\");\n },\n /**\n\t**\tSkips execution and continues the next cycle of the current inner most loop.\n\t**\n\t**\tcontinue\n\t*/ \"_continue\": function(parts, data) {\n throw new Error(\"EXC_CONTINUE\");\n },\n /**\n\t**\tConstructs an array with the results of repeating the specified template for a number of times.\n\t**\n\t**\trepeat <varname:i> [from <number>] [to <number>] [count <number>] [step <number>] <template>\n\t*/ \"_repeat\": function(parts, data) {\n if (parts.length < 3 || (parts.length & 1) != 1) return \"(`repeat`: Wrong number of parameters)\";\n let var_name = $d261ccdafdfe12a9$var$Template.value(parts[1], data);\n let count = null;\n let from = 0, to1 = null;\n let step = null;\n for(let i = 2; i < parts.length - 1; i += 2){\n let value1 = $d261ccdafdfe12a9$var$Template.value(parts[i], data);\n switch(value1.toLowerCase()){\n case \"from\":\n from = parseFloat($d261ccdafdfe12a9$var$Template.value(parts[i + 1], data));\n break;\n case \"to\":\n to1 = parseFloat($d261ccdafdfe12a9$var$Template.value(parts[i + 1], data));\n break;\n case \"count\":\n count = parseFloat($d261ccdafdfe12a9$var$Template.value(parts[i + 1], data));\n break;\n case \"step\":\n step = parseFloat($d261ccdafdfe12a9$var$Template.value(parts[i + 1], data));\n break;\n }\n }\n let tpl = parts[parts.length - 1];\n let arr = [];\n if (to1 !== null) {\n if (step === null) step = from > to1 ? -1 : 1;\n if (step < 0) {\n for(let i = from; i >= to1; i += step)try {\n data[var_name] = i;\n arr.push($d261ccdafdfe12a9$var$Template.value(tpl, data));\n } catch (e) {\n let name = e.message;\n if (name == \"EXC_BREAK\") break;\n if (name == \"EXC_CONTINUE\") continue;\n throw e;\n }\n } else {\n for(let i = from; i <= to1; i += step)try {\n data[var_name] = i;\n arr.push($d261ccdafdfe12a9$var$Template.value(tpl, data));\n } catch (e) {\n let name = e.message;\n if (name == \"EXC_BREAK\") break;\n if (name == \"EXC_CONTINUE\") continue;\n throw e;\n }\n }\n } else if (count !== null) {\n if (step === null) step = 1;\n for(let i = from; count > 0; count--, i += step)try {\n data[var_name] = i;\n arr.push($d261ccdafdfe12a9$var$Template.value(tpl, data));\n } catch (e) {\n let name = e.message;\n if (name == \"EXC_BREAK\") break;\n if (name == \"EXC_CONTINUE\") continue;\n throw e;\n }\n } else {\n if (step === null) step = 1;\n for(let i = from;; i += step)try {\n data[var_name] = i;\n arr.push($d261ccdafdfe12a9$var$Template.value(tpl, data));\n } catch (e) {\n let name = e.message;\n if (name == \"EXC_BREAK\") break;\n if (name == \"EXC_CONTINUE\") continue;\n throw e;\n }\n }\n delete data[var_name];\n return arr;\n },\n /**\n\t**\tRepeats the specified template for a number of times.\n\t**\n\t**\tfor <varname:i> [from <number>] [to <number>] [count <number>] [step <number>] <template>\n\t*/ \"_for\": function(parts, data) {\n if (parts.length < 3 || (parts.length & 1) != 1) return \"(`for`: Wrong number of parameters)\";\n let var_name = $d261ccdafdfe12a9$var$Template.value(parts[1], data);\n let count = null;\n let from = 0;\n to = null;\n let step = null;\n for(let i = 2; i < parts.length - 1; i += 2){\n value = $d261ccdafdfe12a9$var$Template.value(parts[i], data);\n switch(value.toLowerCase()){\n case \"from\":\n from = parseFloat($d261ccdafdfe12a9$var$Template.value(parts[i + 1], data));\n break;\n case \"to\":\n to = parseFloat($d261ccdafdfe12a9$var$Template.value(parts[i + 1], data));\n break;\n case \"count\":\n count = parseFloat($d261ccdafdfe12a9$var$Template.value(parts[i + 1], data));\n break;\n case \"step\":\n step = parseFloat($d261ccdafdfe12a9$var$Template.value(parts[i + 1], data));\n break;\n }\n }\n let tpl = parts[parts.length - 1];\n if (to !== null) {\n if (step === null) step = from > to ? -1 : 1;\n if (step < 0) {\n for(let i = from; i >= to; i += step)try {\n data[var_name] = i;\n $d261ccdafdfe12a9$var$Template.value(tpl, data);\n } catch (e) {\n let name = e.message;\n if (name == \"EXC_BREAK\") break;\n if (name == \"EXC_CONTINUE\") continue;\n throw e;\n }\n } else {\n for(let i = from; i <= to; i += step)try {\n data[var_name] = i;\n $d261ccdafdfe12a9$var$Template.value(tpl, data);\n } catch (e) {\n let name = e.message;\n if (name == \"EXC_BREAK\") break;\n if (name == \"EXC_CONTINUE\") continue;\n throw e;\n }\n }\n } else if (count !== null) {\n if (step === null) step = 1;\n for(let i = from; count > 0; count--, i += step)try {\n data[var_name] = i;\n $d261ccdafdfe12a9$var$Template.value(tpl, data);\n } catch (e) {\n let name = e.message;\n if (name == \"EXC_BREAK\") break;\n if (name == \"EXC_CONTINUE\") continue;\n throw e;\n }\n } else {\n if (step === null) step = 1;\n for(let i = from;; i += step)try {\n data[var_name] = i;\n $d261ccdafdfe12a9$var$Template.value(tpl, data);\n } catch (e) {\n let name = e.message;\n if (name == \"EXC_BREAK\") break;\n if (name == \"EXC_CONTINUE\") continue;\n throw e;\n }\n }\n delete data[var_name];\n return null;\n },\n /**\n\t**\tRepeats the specified template infinitely until a \"break\" is found.\n\t**\n\t**\tloop <template>\n\t*/ \"_loop\": function(parts, data) {\n if (parts.length < 2) return \"(`loop`: Wrong number of parameters)\";\n let tpl = parts[1];\n while(true)try {\n $d261ccdafdfe12a9$var$Template.value(tpl, data);\n } catch (e) {\n let name = e.message;\n if (name == \"EXC_BREAK\") break;\n if (name == \"EXC_CONTINUE\") continue;\n throw e;\n }\n return null;\n },\n /**\n\t**\tWrites the specified arguments to the console.\n\t**\n\t**\techo <expr> [<expr>...]\n\t*/ \"_echo\": function(parts, data) {\n let s = \"\";\n for(let i = 1; i < parts.length; i++)s += $d261ccdafdfe12a9$var$Template.expand(parts[i], data, \"arg\");\n console.log(s);\n return \"\";\n },\n /**\n\t**\tConstructs a list from the given arguments and returns it.\n\t**\n\t**\t# <expr> [<expr>...]\n\t*/ \"_#\": function(parts, data) {\n let s = [];\n for(let i = 1; i < parts.length; i++)s.push($d261ccdafdfe12a9$var$Template.expand(parts[i], data, \"arg\"));\n return s;\n },\n /**\n\t**\tConstructs a non-expanded list from the given arguments and returns it.\n\t**\n\t**\t## <expr> [<expr>...]\n\t*/ \"_##\": function(parts, data) {\n let s = [];\n for(let i = 1; i < parts.length; i++)s.push(parts[i]);\n return s;\n },\n /**\n\t**\tConstructs an associative array (dictionary) and returns it.\n\t**\n\t**\t& <name>: <expr> [<name>: <expr>...]\n\t**\t& :<name> <expr> [:<name> <expr>...]\n\t*/ \"_&\": function(parts, data) {\n return $d261ccdafdfe12a9$var$Template.getNamedValues(parts, data, 1, true);\n },\n /**\n\t**\tConstructs a non-expanded associative array (dictionary) and returns it.\n\t**\n\t**\t&& <name>: <expr> [<name>: <expr>...]\n\t**\t&& :<name> <expr> [:<name> <expr>...]\n\t*/ \"_&&\": function(parts, data) {\n return $d261ccdafdfe12a9$var$Template.getNamedValues(parts, data, 1, false);\n },\n /**\n\t**\tReturns true if the specified map contains all the specified keys. If it fails the global variable `err` will contain an error message.\n\t**\n\t**\tcontains <expr> <name> [<name>...]\n\t*/ \"contains\": function(args, parts, data) {\n let value1 = args[1];\n if (typeof value1 != \"object\") {\n data.err = \"Argument is not a Map\";\n return false;\n }\n let s = \"\";\n for(let i = 2; i < args.length; i++)if (!(args[i] in value1)) s += \", \" + args[i];\n if (s != \"\") {\n data.err = s.substr(1);\n return false;\n }\n return true;\n },\n /**\n\t**\tReturns true if the specified map has the specified key. Returns boolean.\n\t**\n\t**\thas <name> <expr>\n\t*/ \"has\": function(args, parts, data) {\n let value1 = args[2];\n if ((0, $fMUO1.default).typeOf(value1) != \"object\") return false;\n return args[1] in value1;\n },\n /**\n\t**\tReturns a new array/map contaning the transformed values of the array/map (evaluating the template). And just as in 'each', the i# and i## variables be available.\n\t**\n\t**\tmap <varname> <list-expr> <template>\n\t*/ \"_map\": function(parts, data) {\n let var_name = $d261ccdafdfe12a9$var$Template.expand(parts[1], data, \"arg\");\n let list = $d261ccdafdfe12a9$var$Template.expand(parts[2], data, \"arg\");\n if (!list) return list;\n let arrayMode = (0, $fMUO1.default).typeOf(list) == \"array\" ? true : false;\n let output = arrayMode ? [] : {};\n let j = 0;\n for(let i in list){\n data[var_name] = list[i];\n data[var_name + \"##\"] = j++;\n data[var_name + \"#\"] = i;\n if (arrayMode) output.push($d261ccdafdfe12a9$var$Template.expand(parts[3], data, \"arg\"));\n else output[i] = $d261ccdafdfe12a9$var$Template.expand(parts[3], data, \"arg\");\n }\n delete data[var_name];\n delete data[var_name + \"##\"];\n delete data[var_name + \"#\"];\n return output;\n },\n /**\n\t**\tReturns a new array/map contaning the elements where the template evaluates to non-zero. Just as in 'each', the i# and i## variables be available.\n\t**\n\t**\tfilter <varname> <list-expr> <template>\n\t*/ \"_filter\": function(parts, data) {\n let var_name = $d261ccdafdfe12a9$var$Template.expand(parts[1], data, \"arg\");\n let list = $d261ccdafdfe12a9$var$Template.expand(parts[2], data, \"arg\");\n if (!list) return list;\n let arrayMode = (0, $fMUO1.default).typeOf(list) == \"array\" ? true : false;\n let output = arrayMode ? [] : {};\n let j = 0;\n for(let i in list){\n data[var_name] = list[i];\n data[var_name + \"##\"] = j++;\n data[var_name + \"#\"] = i;\n if (~~$d261ccdafdfe12a9$var$Template.expand(parts[3], data, \"arg\")) {\n if (arrayMode) output.push(list[i]);\n else output[i] = list[i];\n }\n }\n delete data[var_name];\n delete data[var_name + \"##\"];\n delete data[var_name + \"#\"];\n return output;\n },\n /**\n\t**\tExpands the specified template string with the given data. The sym_open and sym_close will be '{' and '}' respectively.\n\t**\tIf no data is provided, current data parameter will be used.\n\t**\n\t**\texpand <template> <data>\n\t*/ \"expand\": function(args, parts, data) {\n return $d261ccdafdfe12a9$var$Template.expand($d261ccdafdfe12a9$var$Template.parseTemplate(args[1], \"{\", \"}\"), args.length == 3 ? args[2] : data);\n },\n /**\n\t**\tCalls a function described by the given parameter.\n\t**\n\t**\tcall <function> <args...>\n\t*/ \"_call\": function(parts, data) {\n let ref = $d261ccdafdfe12a9$var$Template.expand(parts[1], data, \"varref\");\n if (!ref || typeof ref[0][ref[1]] != \"function\") throw new Error(\"Expression is not a function: \" + $d261ccdafdfe12a9$var$Template.expand(parts[1], data, \"obj\").map((i)=>i == null ? \".\" : i).join(\"\"));\n let args = [];\n for(let i = 2; i < parts.length; i++)args.push($d261ccdafdfe12a9$var$Template.value(parts[i], data));\n return ref[0][ref[1]](...args);\n }\n};\nvar $d261ccdafdfe12a9$export$2e2bcd8739ae039 = $d261ccdafdfe12a9$var$Template;\n\n\nconst $9ffb7151b8b2d038$export$eefcfe56efaaa57d = (0, $fMUO1.default);\nconst $9ffb7151b8b2d038$export$4c85e640eb41c31b = (0, $2394d727dfd6a212$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$d61e24a684f9e51 = (0, $13eda5a5dec8010f$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$ec8b666c5fe2c75a = (0, $c43adaf9cb6d6dd3$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$a1edc412be3e1841 = (0, $4dfa0622e14576ea$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$59eced47f477f85a = (0, $0890bed8a163f087$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$19342e026b58ebb7 = (0, $2710795e2347ba2a$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$3a9581c9ade29768 = (0, $32651d5f38a8a64c$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$fb8073518f34e6ec = (0, $2bcce06113365814$export$2e2bcd8739ae039);\nconst $9ffb7151b8b2d038$export$14416b8d99d47caa = (0, $d261ccdafdfe12a9$export$2e2bcd8739ae039);\n\n\nexport {$9ffb7151b8b2d038$export$eefcfe56efaaa57d as Rinn, $9ffb7151b8b2d038$export$4c85e640eb41c31b as Class, $9ffb7151b8b2d038$export$d61e24a684f9e51 as Event, $9ffb7151b8b2d038$export$ec8b666c5fe2c75a as EventDispatcher, $9ffb7151b8b2d038$export$a1edc412be3e1841 as Model, $9ffb7151b8b2d038$export$59eced47f477f85a as ModelList, $9ffb7151b8b2d038$export$19342e026b58ebb7 as Schema, $9ffb7151b8b2d038$export$3a9581c9ade29768 as Flattenable, $9ffb7151b8b2d038$export$fb8073518f34e6ec as Collection, $9ffb7151b8b2d038$export$14416b8d99d47caa as Template};\n//# sourceMappingURL=rinn.m.js.map\n","\nimport Rinn from './alpha.js';\nimport Regex from './model-regex.js';\n\n/**\n**\tMap of model constraint handlers. Each function should accept parameters (in order): the model object (model), the constraint value (ctval),\n**\tthe property name (name), the property value (value) and return the corrected value once verified or throw an exception if errors occur.\n*/\n\nexport default\n{\n\t/**\n\t**\tUtility function (not a handler) to get the real value given a reference string. If the value is not a string, the value itself will\n\t**\tbe returned, if it is a string starting with '#' the model property will be returned, if starts with '@' the object property will be\n\t**\treturned, otherwise the contents of the string will eval'd and returned.\n\t*/\n\t_getref: function (value, obj)\n\t{\n\t\tif (typeof(value) == \"string\")\n\t\t{\n\t\t\tif (value.substr(0, 1) == \"#\")\t\t\tvalue = obj.get(value.substr(1));\n\t\t\telse if (value.substr(0, 1) == \"@\")\t\tvalue = obj[value.substr(1)];\n\n\t\t\tif (typeof(value) == \"string\")\n\t\t\t\treturn eval(value);\n\n\t\t\treturn value;\n\t\t}\n\t\telse\n\t\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tVerifies that the new value is of the valid type before storing it on the property. When possible if the\n\t**\tinput is of compatible type it will be converted to the target type.\n\t*/\n\ttype: function (model, ctval, name, value)\n\t{\n\t\tswitch (ctval)\n\t\t{\n\t\t\tcase \"int\":\n\t\t\t\tvalue = parseInt(value);\n\t\t\t\tif (isNaN(value)) throw new Error (ctval);\n\t\t\t\tbreak;\n\n\t\t\tcase \"float\":\n\t\t\t\tvalue = parseFloat(value);\n\t\t\t\tif (isNaN(value)) throw new Error (ctval);\n\t\t\t\tbreak;\n\n\t\t\tcase \"string\":\n\t\t\t\tvalue = (value === null || value === undefined) ? \"\" : value.toString();\n\t\t\t\tbreak;\n\n\t\t\tcase \"bit\":\n\t\t\t\tif (value === true || value === false) {\n\t\t\t\t\tvalue = value ? 1 : 0;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tvalue = parseInt(value);\n\t\t\t\tif (isNaN(value)) throw new Error (ctval);\n\n\t\t\t\tvalue = value ? 1 : 0;\n\t\t\t\tbreak;\n\n\t\t\tcase \"array\":\n\t\t\t\tif (Rinn.typeOf(value) == \"array\")\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (value === null || value === undefined)\n\t\t\t\t{\n\t\t\t\t\tvalue = [];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthrow new Error (ctval);\n\t\t\t\tbreak;\n\n\t\t\tcase \"bool\":\n\t\t\t\tif (value === \"true\" || value === true) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (value === \"false\" || value === false) {\n\t\t\t\t\tvalue = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthrow new Error (ctval);\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tVerifies that the field is of the specified model type.\n\t*/\n\tmodel: function (model, ctval, name, value)\n\t{\n\t\tvar mclass = this._getref(ctval, model);\n\t\tif (!mclass) throw new Error (ctval);\n\n\t\tif (!value)\n\t\t\treturn new mclass();\n\n\t\treturn mclass.ensure (value);\n\t},\n\n\n\t/**\n\t**\tVerifies that the field is of the specified class.\n\t*/\n\tcls: function (model, ctval, name, value)\n\t{\n\t\tvar mclass = this._getref(ctval, model);\n\t\tif (!value) return new mclass();\n\n\t\treturn Rinn.ensureTypeOf(mclass, value);\n\t},\n\n\n\t/**\n\t**\tVerifies that the array contents are of the specified class. Returns error if the class does not exist\n\t**\tor if the field is not an array. Therefore a type:array constraint should be used before this one.\n\t*/\n\tarrayof: function (model, ctval, name, value)\n\t{\n\t\tvar mclass = this._getref(ctval, model);\n\t\tif (!value) value = [];\n\n\t\tif (!mclass || Rinn.typeOf(value) != \"array\")\n\t\t\tthrow new Error (ctval);\n\n\t\tfor (var i = 0; i < value.length; i++)\n\t\t\tvalue[i] = Rinn.ensureTypeOf(mclass, value[i]);\n\t\t\n\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tVerifies that the array contents are not null. Returns error if the field is not an array, therefore a\n\t**\ttype:array constraint should be used before this one.\n\t*/\n\tarraynull: function (model, ctval, name, value)\n\t{\n\t\tvar remove = false;\n\n\t\tif (Rinn.typeOf(ctval) == \"object\")\n\t\t{\n\t\t\tif (ctval.remove) remove = ctval.remove;\n\t\t\tctval = ctval.value;\n\t\t}\n\n\t\tif (ctval) return value;\n\n\t\tif (Rinn.typeOf(value) != \"array\")\n\t\t\tthrow new Error (ctval);\n\n\t\tfor (var i = 0; i < value.length; i++)\n\t\t{\n\t\t\tif (value[i] == null)\n\t\t\t{\n\t\t\t\tif (remove)\n\t\t\t\t\tvalue.splice (i--, 1);\n\t\t\t\telse\n\t\t\t\t\tthrow new Error (ctval);\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tVerifies that the array contents are all compliant. Returns error if the field is not an array, therefore\n\t**\ta type:array constraint should be used before this one.\n\t*/\n\tarraycompliant: function (model, ctval, name, value)\n\t{\n\t\tvar remove = false;\n\n\t\tif (Rinn.typeOf(ctval) == \"object\")\n\t\t{\n\t\t\tif (ctval.remove) remove = ctval.remove;\n\t\t\tctval = ctval.value;\n\t\t}\n\n\t\tif (!ctval) return value;\n\n\t\tif (Rinn.typeOf(value) != \"array\")\n\t\t\tthrow new Error (ctval);\n\n\t\tfor (var i = 0; i < value.length; i++)\n\t\t{\n\t\t\tif (value[i] == null)\n\t\t\t\tcontinue;\n\n\t\t\tif (!value[i].isCompliant())\n\t\t\t{\n\t\t\t\tif (remove)\n\t\t\t\t\tvalue.splice (i--, 1);\n\t\t\t\telse\n\t\t\t\t\tthrow new Error (ctval);\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tVerifies the presense of the field.\n\t*/\n\trequired: function (model, ctval, name, value)\n\t{\n\t\tif (value === null || value === undefined)\n\t\t\tthrow new Error (ctval ? \"\" : \"null\");\n\n\t\tswitch (Rinn.typeOf(value))\n\t\t{\n\t\t\tcase \"array\":\n\t\t\t\tif (value.length == 0) throw new Error (ctval ? \"\" : \"null\");\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tif (value.toString().length == 0) throw new Error (ctval ? \"\" : \"null\");\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tVerifies the minimum length of the field.\n\t*/\n\tminlen: function (model, ctval, name, value)\n\t{\n\t\tif (value.toString().length < ctval)\n\t\t\tthrow new Error (ctval);\n\n\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tVerifies the maximum length of the field.\n\t*/\n\tmaxlen: function (model, ctval, name, value)\n\t{\n\t\tif (value.toString().length > ctval)\n\t\t\tthrow new Error (ctval);\n\n\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tVerifies the minimum value of the field.\n\t*/\n\tminval: function (model, ctval, name, value)\n\t{\n\t\tif (parseFloat(value) < ctval)\n\t\t\tthrow new Error (ctval);\n\n\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tVerifies the maximum value of the field.\n\t*/\n\tmaxval: function (model, ctval, name, value)\n\t{\n\t\tif (parseFloat(value) > ctval)\n\t\t\tthrow new Error (ctval);\n\n\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tVerifies the minimum number of items in the array.\n\t*/\n\tmincount: function (model, ctval, name, value)\n\t{\n\t\tif (Rinn.typeOf(value) != \"array\" || value.length < ctval)\n\t\t\tthrow new Error (ctval);\n\n\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tVerifies the maximum number of items in the array.\n\t*/\n\tmaxcount: function (model, ctval, name, value)\n\t{\n\t\tif (Rinn.typeOf(value) != \"array\" || value.length > ctval)\n\t\t\tthrow new Error (ctval);\n\n\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tVerifies the format of the field using a regular expression. The constraint value should be the name of\n\t**\tone of the Model.Regex regular expressions.\n\t*/\n\tpattern: function (model, ctval, name, value)\n\t{\n\t\tif (!Regex[ctval].test (value.toString()))\n\t\t\tthrow new Error (ctval);\n\n\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tVerifies that the field is inside the specified set of options. The set can be an array or a string with\n\t**\tthe options separated by vertical bar (|). The comparison is case-sensitive.\n\t*/\n\tinset: function (model, ctval, name, value)\n\t{\n\t\tif (Rinn.typeOf(ctval) != \"array\")\n\t\t{\n\t\t\tif (!new RegExp(\"^(\"+ctval.toString()+\")$\").test (value.toString()))\n\t\t\t\tthrow new Error (ctval);\n\n\t\t\treturn value;\n\t\t}\n\n\t\tif (ctval.indexOf(value.toString()) == -1)\n\t\t\tthrow new Error (ctval.join(\"|\"));\n\n\t\treturn value;\n\t},\n\n\n\t/**\n\t**\tSets the field to upper case.\n\t*/\n\tupper: function (model, ctval, name, value)\n\t{\n\t\treturn ctval ? value.toString().toUpperCase() : value;\n\t},\n\n\n\t/**\n\t**\tSets the field to lower case.\n\t*/\n\tlower: function (model, ctval, name, value)\n\t{\n\t\treturn ctval ? value.toString().toLowerCase() : value;\n\t}\n};\n","\r\nconst Rinn = { };\r\nexport default Rinn;\r\n\r\n/*\r\n**\tInvokes the specified function 'fn' 10ms later.\r\n**\r\n**\t>> void invokeLater (function fn);\r\n*/\r\nRinn.invokeLater = function (fn)\r\n{\r\n\tif (fn) setTimeout (function() { fn(); }, 10);\r\n};\r\n\r\n\r\n/*\r\n**\tWaits for the specified amount of milliseconds. Returns a Promise.\r\n**\r\n**\t>> Promise wait (int millis);\r\n*/\r\nRinn.wait = function (millis)\r\n{\r\n\treturn new Promise(function (resolve, reject) {\r\n\t\tsetTimeout (resolve, millis);\r\n\t});\r\n};\r\n\r\n\r\n/*\r\n**\tReturns the type of an element 'o', properly detects arrays and null types. The return string is always in lowercase.\r\n**\r\n**\t>> string typeOf (any o);\r\n*/\r\nRinn.typeOf = function (o)\r\n{\r\n\tif (o instanceof Array)\r\n\t\treturn \"array\";\r\n\r\n\tif (o === null)\r\n\t\treturn \"null\";\r\n\r\n\treturn (typeof(o)).toString().toLowerCase();\r\n};\r\n\r\n\r\n/*\r\n**\tReturns boolean indicating if the type of the element is an array or an object.\r\n**\r\n**\t>> bool isArrayOrObject (any o);\r\n*/\r\nRinn.isArrayOrObject = function (o)\r\n{\r\n\tswitch (Rinn.typeOf(o))\r\n\t{\r\n\t\tcase \"array\": case \"object\":\r\n\t\t\treturn true;\r\n\t}\r\n\r\n\treturn false;\r\n};\r\n\r\n\r\n/*\r\n**\tCreates a clone (deep copy) of the specified element. The element can be an array, an object or a primitive type.\r\n**\r\n**\t>> T clone (T elem);\r\n*/\r\nRinn.clone = function (elem)\r\n{\r\n\tlet o = Rinn.typeOf(elem);\r\n\r\n\tif (o === 'array')\r\n\t{\r\n\t\to = [ ];\r\n\r\n\t\tfor (let i = 0; i < elem.length; i++)\r\n\t\t\to.push (Rinn.clone(elem[i]));\r\n\t}\r\n\telse if (o === 'object')\r\n\t{\r\n\t\tif (('clone' in elem) && typeof(elem.clone) === 'function')\r\n\t\t\treturn elem.clone();\r\n\r\n\t\to = { };\r\n\r\n\t\tfor (let i in elem)\r\n\t\t\to[i] = Rinn.clone(elem[i]);\r\n\t}\r\n\telse\r\n\t{\r\n\t\to = elem;\r\n\t}\r\n\r\n\treturn o;\r\n};\r\n\r\n\r\n/*\r\n**\tMerges all given elements into the first one, object fields are cloned.\r\n**\r\n**\t>> T merge (T... elems)\r\n*/\r\nRinn.merge = function (output, ...objs)\r\n{\r\n\tif (Rinn.typeOf(output) == \"array\")\r\n\t{\r\n\t\tfor (let i = 0; i < objs.length; i++)\r\n\t\t{\r\n\t\t\tlet arr = objs[i];\r\n\r\n\t\t\tif (Rinn.typeOf(arr) != \"array\")\r\n\t\t\t{\r\n\t\t\t\toutput.push(arr);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfor (let j = 0; j < arr.length; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\toutput.push(Rinn.clone(arr[j]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\telse if (Rinn.typeOf(output) == \"object\")\r\n\t{\r\n\t\tfor (let i = 0; i < objs.length; i++)\r\n\t\t{\r\n\t\t\tlet obj = objs[i];\r\n\t\t\tif (Rinn.typeOf(obj) != \"object\") continue;\r\n\r\n\t\t\tfor (let field in obj)\r\n\t\t\t{\r\n\t\t\t\tif (Rinn.isArrayOrObject(obj[field]))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (field in output)\r\n\t\t\t\t\t\tRinn.merge(output[field], obj[field]);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\toutput[field] = Rinn.clone(obj[field]);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\toutput[field] = obj[field];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn output;\r\n};\r\n\r\n\r\n/*\r\n**\tAssigns all fields from the specified objects into the first one.\r\n**\r\n**\t>> object override (object output, object... objs)\r\n*/\r\nRinn.override = function (output, ...objs)\r\n{\r\n\tfor (let i = 0; i < objs.length; i++)\r\n\t{\r\n\t\tfor (let j in objs[i])\r\n\t\t{\r\n\t\t\toutput[j] = objs[i][j];\r\n\t\t}\r\n\t}\r\n\r\n\treturn output;\r\n};\r\n\r\n\r\n/*\r\n**\tCompares two objects and returns `true` if all properties in \"partial\" find a match in \"full\".\r\n*/\r\nRinn.partialCompare = function (full, partial)\r\n{\r\n\tif (full == null || partial == null) return false;\r\n\r\n\tif (full === partial)\r\n\t\treturn true;\r\n\r\n\tfor (var i in partial)\r\n\t{\r\n\t\tif (full[i] != partial[i])\r\n\t\t\treturn false;\r\n\t}\r\n\r\n\treturn true;\r\n};\r\n\r\n\r\n/*\r\n**\tPerforms a partial search for an object (o) in the specified array and returns its index or `false` if the\r\n**\tobject was not found. When `getObject` is set to `true` the object will be returned instead of an index, or\r\n**\t`null` if not found.\r\n*/\r\nRinn.arrayFind = function (arr, o, getObject)\r\n{\r\n\tfor (var i = 0; arr && i < arr.length; i++)\r\n\t{\r\n\t\tif (this.partialCompare (arr[i], o))\r\n\t\t\treturn getObject ? arr[i] : i;\r\n\t}\r\n\r\n\treturn getObject ? null : false;\r\n};\r\n\r\n\r\n/*\r\n**\tVerifies if the specified object is of class `m`, returns boolean.\r\n**\r\n**\t>> bool isTypeOf (object obj, class _class);\r\n*/\r\nRinn.isInstanceOf = function (obj, _class)\r\n{\r\n\tif (!obj || !_class || typeof(obj) !== 'object')\r\n\t\treturn false;\r\n\r\n\tif (obj instanceof _class)\r\n\t\treturn true;\r\n\r\n\tif ('isInstanceOf' in obj)\r\n\t\treturn obj.isInstanceOf(_class);\r\n\r\n\treturn false;\r\n};\r\n\r\n\r\n/*\r\n**\tTraverses the given object attempting to find the index/key that does an identical match with the specified value,\r\n**\tif not found returns -1, otherwise the index/key where the value was found.\r\n**\r\n**\t>> int indexOf (array container, T value)\r\n**\t>> string indexOf (object container, T value)\r\n*/\r\nRinn.indexOf = function (container, value, forceArray=false)\r\n{\r\n\tif (forceArray)\r\n\t{\r\n\t\tfor (let i = 0; i < container.length; i++)\r\n\t\t{\r\n\t\t\tif (container[i] === value)\r\n\t\t\t\treturn i;\r\n\t\t}\r\n\t\r\n\t\treturn -1;\r\n\t}\r\n\r\n\tfor (let i in container)\r\n\t{\r\n\t\tif (container[i] === value)\r\n\t\t\treturn i;\r\n\t}\r\n\r\n\treturn -1;\r\n};\r\n\r\n\r\n/*\r\n**\tEscapes a string using HTML entities.\r\n**\r\n**\t>> string escape (string str);\r\n*/\r\nRinn.escape = function (str)\r\n{\r\n\treturn (str+\"\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\r\n};\r\n\r\n\r\n/*\r\n**\tVerifies if the specified object is of class `m`, if not it will create a new instance of `m` passing `o` as parameter.\r\n**\r\n**\t>> object ensureTypeOf (class m, object o);\r\n*/\r\nRinn.ensureTypeOf = function (m, o)\r\n{\r\n\tif (!o || !m || o instanceof m)\r\n\t\treturn o;\r\n\r\n\tif (o.isInstanceOf && m.prototype.className)\r\n\t{\r\n\t\tif (o.isInstanceOf (m.prototype.className))\r\n\t\t\treturn o;\r\n\t}\r\n\r\n\treturn new m (o);\r\n};\r\n\r\n\r\n/*\r\n**\tSerializes an object and returns its JSON string representation.\r\n**\r\n**\t>> string serialize (object o);\r\n*/\r\nRinn.serialize = function (o)\r\n{\r\n\treturn JSON.stringify(o);\r\n};\r\n\r\n\r\n/*\r\n**\tDeserializes a string in JSON format and returns the result.\r\n**\r\n**\t>> any deserialize (string s);\r\n*/\r\nRinn.deserialize = function (s)\r\n{\r\n\treturn JSON.parse(s);\r\n};\r\n\r\n\r\n/*\r\n**\tChains a new function to an existing one on some object, such that invoking the function on the object will cause\r\n**\tboth functions to run (order would be oldFunction then newFunction).\r\n**\r\n**\tIf the `conditional` flag is set to `true`, the second function will be run only if the first one returns non-false.\r\n**\tReturns an object with a single method 'unhook' which will revert the changes to leave only the original function.\r\n**\r\n**\t>> object{function unhook} hook (Object object, String functionName, function newFunction, bool conditional=false);\r\n*/\r\nRinn.hookAppend = function (object, functionName, newFunction, conditional=true)\r\n{\r\n\tconst oldFunction = object[functionName];\r\n\r\n\tif (conditional)\r\n\t{\r\n\t\tobject[functionName] = function (...args) {\r\n\t\t\tif (oldFunction.apply (this, args) !== false)\r\n\t\t\t\treturn newFunction.apply (this, args);\r\n\t\t};\r\n\t}\r\n\telse\r\n\t{\r\n\t\tobject[functionName] = function (...args) {\r\n\t\t\toldFunction.apply (this, args);\r\n\t\t\treturn newFunction.apply (this, args);\r\n\t\t};\r\n\t}\r\n\r\n\treturn { \r\n\t\tunhook: function() {\r\n\t\t\tobject[functionName] = oldFunction;\r\n\t\t}\r\n\t};\r\n};\r\n\r\n\r\n/*\r\n**\tChains a new function to an existing one on some object, such that invoking the function on the object will cause\r\n**\tboth functions to run (order would be oldFunction then newFunction).\r\n**\r\n**\tIf the `conditional` flag is set to `true`, the second function will be run only if the first one returns non-false.\r\n**\tReturns an object with a single method 'unhook' which will revert the changes to leave only the original function.\r\n**\r\n**\t>> object{function unhook} hook (Object object, String functionName, function newFunction, bool conditional=false);\r\n*/\r\nRinn.hookPrepend = function (object, functionName, newFunction, conditional=true)\r\n{\r\n\tconst oldFunction = object[functionName];\r\n\r\n\tif (conditional)\r\n\t{\r\n\t\tobject[functionName] = function (...args) {\r\n\t\t\tif (newFunction.apply (this, args) !== false)\r\n\t\t\t\treturn oldFunction.apply (this, args);\r\n\t\t};\r\n\t}\r\n\telse\r\n\t{\r\n\t\tobject[functionName] = function (...args) {\r\n\t\t\tnewFunction.apply (this, args);\r\n\t\t\treturn oldFunction.apply (this, args);\r\n\t\t};\r\n\t}\r\n\r\n\treturn { \r\n\t\tunhook: function() {\r\n\t\t\tobject[functionName] = oldFunction;\r\n\t\t}\r\n\t};\r\n};\r\n","\n/**\n**\tCommon regular expressions for pattern validation.\n*/\n\nexport default\n{\n\temail: /^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)+$/i,\n\turl: /^[\\w-]+:\\/\\/[\\w-]+(\\.\\w+)+.*$/,\n\turlNoProt: /^[\\w-]+(\\.\\w+)+.*$/,\n\tname: /^[-A-Za-z0-9_.]+$/,\n\tuname: /^['\\pL\\pN ]+$/,\n\ttext: /^[^&<>{}]*$/,\n\tutext: /^([\\r\\n\\pL\\pN\\pS &!@#$%*\\[\\]()_+=;',.\\/?:\"~-]+)$/\n};\n","\r\nimport _Rinn from './alpha.js';\r\nimport _Class from './class.js';\r\nimport _Event from './event.js';\r\nimport _EventDispatcher from './event-dispatcher.js';\r\nimport _Model from './model.js';\r\nimport _ModelList from './model-list.js';\r\nimport _Schema from './schema.js';\r\nimport _Flattenable from './flattenable.js';\r\nimport _Collection from './collection.js';\r\nimport _Template from './template.js';\r\n\r\nexport const Rinn = _Rinn;\r\nexport const Class = _Class;\r\nexport const Event = _Event;\r\nexport const EventDispatcher = _EventDispatcher;\r\nexport const Model = _Model;\r\nexport const ModelList = _ModelList;\r\nexport const Schema = _Schema;\r\nexport const Flattenable = _Flattenable;\r\nexport const Collection = _Collection;\r\nexport const Template = _Template;\r\n","\r\nimport Rinn from './alpha.js';\r\n\r\n/**\r\n * Base class used to create other classes with complex prototype based multiple inheritance while at the\r\n * same time avoiding the prototype chain for faster access. Supports calling parent class methods.\r\n */\r\n\r\n//!class Class\r\nconst Class = function ()\r\n{\r\n};\r\n\r\n/**\r\n * Reference to the class itself.\r\n */\r\nClass._class = Class;\r\n\r\n/**\r\n * Contains the methods of each of the super classes.\r\n */\r\nClass._super = { };\r\n\r\n/**\r\n * Name of the class, if none specified the class will be considered \"final\" and will not be inheritable.\r\n * !readonly string className;\r\n */\r\nClass.prototype.className = 'Class';\r\n\r\n/**\r\n * Class constructor, should initialize the instance. Invoked when the `new` keyword is used with the class.\r\n * !constructor();\r\n */\r\nClass.prototype.__ctor = function ()\r\n{\r\n};\r\n\r\n/**\r\n * Class destructor, should clear the instance and release any used resources, invoked when the global `dispose` function is called with an instance as parameter.\r\n * !__dtor() : void;\r\n */\r\nClass.prototype.__dtor = function ()\r\n{\r\n};\r\n\r\n/**\r\n * Returns true if the object is an instance of the specified class, the parameter can be a class name (string), a constructor (function) or\r\n * a class instance (object), in any cases the appropriate checks will be done.\r\n * !isInstanceOf (className: string|function|object) : boolean;\r\n */\r\nClass.prototype.isInstanceOf = function (className)\r\n{\r\n\tif (className === null)\r\n\t\treturn false;\r\n\r\n\tif (typeof(className) === 'function')\r\n\t{\r\n\t\tclassName = className.prototype.className;\r\n\t}\r\n\telse if (typeof(className) !== 'string')\r\n\t{\r\n\t\tclassName = className.__proto__.className;\r\n\t}\r\n\r\n\treturn this.className === className ? true : this._super.hasOwnProperty(className);\r\n};\r\n\r\n/**\r\n * Returns true if the given object is an instance of the specified class, the parameter can be a class name (string), a constructor (function)\r\n * or a class instance (object), in any cases the appropriate checks will be done.\r\n * !instanceOf (object: object, className: string|function|object) : boolean;\r\n */\r\nClass.instanceOf = function (object, className)\r\n{\r\n\tif (object === null || className === null)\r\n\t\treturn false;\r\n\r\n\treturn object.isInstanceOf(className);\r\n};\r\n\r\n/**\r\n * Internal method to ensure the _super field of an instance has all functions properly bound to the instance.\r\n */\r\nClass.prototype._initSuperRefs = function ()\r\n{\r\n\tlet _super = this.constructor._super;\r\n\tlet _newSuper = { };\r\n\r\n\tconst self = this;\r\n\r\n\tfor (let i in _super)\r\n\t{\r\n\t\tlet o = { };\r\n\r\n\t\tlet _prot = _super[i].prototype;\r\n\t\tfor (let j in _prot)\r\n\t\t{\r\n\t\t\tif (Rinn.typeOf(_prot[j]) !== 'function')\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\to[j] = (function(fn)\r\n\t\t\t{\r\n\t\t\t\treturn function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\r\n\t\t\t\t\treturn fn.call(self, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\r\n\t\t\t\t};\r\n\t\t\t})\r\n\t\t\t(_prot[j]);\r\n\t\t}\r\n\r\n\t\t_newSuper[i] = o;\r\n\t}\r\n\r\n\tthis._super = _newSuper;\r\n};\r\n\r\n\r\n/*\r\n**\tExtends the class with the specified prototype. The prototype can be a function (class constructor) or an object. Note that the\r\n**\tclass will be modified (and returned) instead of creating a new class. Must be called at the class-level (**not** instance level).\r\n**\tWhen a class is provided all fields starting with uppercase at the class-level will not be inherited, this is used to create constants\r\n**\ton classes without having them to be copied to derived classes.\r\n**\r\n**\t>> class inherit (constructor classConstructor);\r\n**\t>> class inherit (object obj);\r\n*/\r\nClass.inherit = function (proto)\r\n{\r\n\tlet self = this._class;\r\n\r\n\tlet _super = self._super;\r\n\tlet _class = self._class;\r\n\r\n\tif (Rinn.typeOf(proto) === 'function')\r\n\t{\r\n\t\t// Move constants (uppercased properties) to the class-level instead of prototype-level.\r\n\t\tfor (let i in proto._class)\r\n\t\t\tif (!/^[A-Z]/.test(i)) self[i] = proto._class[i];\r\n\r\n\t\t// Combine methods and properties.\r\n\t\tRinn.override (self.prototype, proto._class.prototype);\r\n\r\n\t\t// Combine super references.\r\n\t\tRinn.override (_super, proto._class._super);\r\n\r\n\t\t// Add new super reference if className specified in inherited prototypes.\r\n\t\tif (proto._class.prototype.className)\r\n\t\t\t_super[proto._class.prototype.className] = proto._class;\r\n\t}\r\n\telse\r\n\t{\r\n\t\tRinn.override (self.prototype, proto);\r\n\t}\r\n\r\n\tself._super = _super;\r\n\tself._class = _class;\r\n\r\n\treturn self;\r\n};\r\n\r\n\r\n/**\r\n * Internal method used to extend a class with one or more prototypes.\r\n */\r\nClass.prototype._extend = function (base, protos)\r\n{\r\n\tif (protos.length === 0)\r\n\t\treturn base;\r\n\r\n\t//VIOLET OPTIMIZE\r\n\tconst _class = function (...args)\r\n\t{\r\n\t\tthis._initSuperRefs();\r\n\t\tthis.__ctor.apply(this, args);\r\n\t};\r\n\r\n\t_class._class = _class;\r\n\t_class._super = { };\r\n\r\n\tClass.inherit.call (_class, base);\r\n\tdelete _class.prototype.className;\r\n\r\n\tfor (let i = 0; i < protos.length; i++)\r\n\t\t_class.inherit (protos[i]);\r\n\r\n\tdelete _class._super.Class;\r\n\r\n\tif ('classInit' in _class.prototype)\r\n\t\t_class.prototype.classInit();\r\n\r\n\t_class.isInstance = function(value) {\r\n\t\treturn Rinn.isInstanceOf(value, _class);\r\n\t};\r\n\r\n\treturn _class;\r\n};\r\n\r\n\r\n/**\r\n * Creates a new class with the specified prototypes each of which can be a class constructor (function) or an object.\r\n */\r\nClass.extend = function (...protos)\r\n{\r\n\treturn this._class.prototype._extend (this, protos);\r\n};\r\n\r\n\r\n/**\r\n * Creates a new instance of a class resulting from extending the self class with the specified prototype.\r\n */\r\nClass.create = function (proto)\r\n{\r\n\treturn new (this.extend(proto)) ();\r\n};\r\n\r\n/**\r\n * Mutates the host object to be an instance of the specified class.\r\n * !static mutate (classConstructor: object, host: object, override?: object) : object;\r\n */\r\nClass.mutate = function (classConstructor, host, override=null)\r\n{\r\n\tlet zombie = new classConstructor ();\r\n\r\n\t// Copy all members from the class prototype.\r\n\tfor (let i in classConstructor.prototype)\r\n\t{\r\n\t\tif (host.hasOwnProperty(i))\r\n\t\t\tcontinue;\r\n\t\r\n\t\thost[i] = classConstructor.prototype[i];\r\n\t}\r\n\t\r\n\t// Copy all members from the zombie class instance.\r\n\tfor (let i in zombie)\r\n\t{\r\n\t\tif (host.hasOwnProperty(i))\r\n\t\t\tcontinue;\r\n\t\r\n\t\thost[i] = zombie[i];\r\n\t}\r\n\r\n\t// Rebind the super references.\r\n\tif (host._super)\r\n\t{\r\n\t\tfor (let i in host._super)\r\n\t\t{\r\n\t\t\tfor (let j in host._super[i]) {\r\n\t\t\t\thost._super[i][j] = classConstructor.prototype.constructor._super[i].prototype[j].bind(host);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Copy override members.\r\n\tif (override !== null) {\r\n\t\tfor (let i in override)\r\n\t\t\thost[i] = override[i];\r\n\t}\r\n\r\n\treturn host;\r\n};\r\n\r\nexport default Class;\r\n","\r\nimport Rinn from './alpha.js';\r\nimport Class from './class.js';\r\n\r\n/**\r\n**\tHolds the information about a triggered event. It also provides a mechanism to allow asynchronous\r\n**\tevent propagation to ensure the event chain order.\r\n*/\r\n\r\nexport default Class.extend\r\n({\r\n\t/**\r\n\t**\tName of the class.\r\n\t*/\r\n\tclassName: \"Event\",\r\n\r\n\t/**\r\n\t**\tSource of the event.\r\n\t*/\r\n\tsource: null,\r\n\r\n\t/**\r\n\t**\tName of the event.\r\n\t*/\r\n\tname: null,\r\n\r\n\t/**\r\n\t**\tArguments of the event.\r\n\t*/\r\n\targs: null,\r\n\r\n\t/**\r\n\t**\tIndicates if the last event handler wants to use async mode.\r\n\t*/\r\n\t_async: false,\r\n\r\n\t/**\r\n\t**\tQueue of all handlers to invoke.\r\n\t*/\r\n\tlist: null,\r\n\r\n\t/**\r\n\t**\tNext event to be executed in the event chain.\r\n\t*/\r\n\tnext: null,\r\n\r\n\t/**\r\n\t**\tReturn values from event handlers.\r\n\t*/\r\n\tret: null,\r\n\r\n\t/**\r\n\t**\tOriginal root event.\r\n\t*/\r\n\toriginal: null,\r\n\r\n\t/**\r\n\t**\tIndex of the current event handler.\r\n\t*/\r\n\ti: -1,\r\n\r\n\t/**\r\n\t**\tContructs an event object with the specified parameters. Source is the event-dispatcher object, list is\r\n\t**\tan array with all the listeners to invoke. The eventName and eventArgs are the event information to be\r\n\t**\tpassed to each handler and if a callback is specified (cbHandler+cbContext) it will be executed once all\r\n\t**\tthe event handlers have been processed.\r\n\t**\r\n\t**\tEvent __ctor (source: EventDispatcher, list: Array, eventName: string, eventArgs: map, cbHandler: function, cbContext: object);\r\n\t*/\r\n\t__ctor: function (source, list, eventName, eventArgs, cbHandler, cbContext)\r\n\t{\r\n\t\tthis.source = source;\r\n\r\n\t\tthis.name = eventName;\r\n\t\tthis.args = eventArgs;\r\n\r\n\t\tthis.cbHandler = cbHandler;\r\n\t\tthis.cbContext = cbContext;\r\n\r\n\t\tthis.list = list;\r\n\t\tthis.reset();\r\n\t},\r\n\r\n\t/**\r\n\t**\tResets the event to its initial state. An event object can be reused by resetting it and then\r\n\t**\tinvoking the resume event.\r\n\t**\r\n\t**\tEvent reset ();\r\n\t*/\r\n\treset: function ()\r\n\t{\r\n\t\tthis.next = null;\r\n\t\tthis.ret = [];\r\n\r\n\t\tthis._async = false;\r\n\t\tthis.i = -1;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/**\r\n\t**\tChanges the source of the event.\r\n\t**\r\n\t**\tEvent setSource (object value);\r\n\t*/\r\n\tsetSource: function (value)\r\n\t{\r\n\t\tthis.source = value;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/**\r\n\t**\tSets the internal asynchronous flag. Should be called before a handler returns. If a handler\r\n\t**\tcalls this method it should also call resume() when async operations are finished.\r\n\t**\r\n\t**\tEvent wait ();\r\n\t*/\r\n\twait: function ()\r\n\t{\r\n\t\tthis._async = true;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/**\r\n\t**\tResumes event propagation. Should be called manually by event handlers that also call wait().\r\n\t**\r\n\t**\tEvent resume ();\r\n\t*/\r\n\tresume: function ()\r\n\t{\r\n\t\tthis._async = false;\r\n\r\n\t\twhile (!this._async)\r\n\t\t{\r\n\t\t\tif (++this.i >= this.list.length)\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tif (this.list[this.i].silent)\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\tif (Rinn.typeOf(this.list[this.i].handler) == \"string\")\r\n\t\t\t{\r\n\t\t\t\tif (this.list[this.i].context)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!this.list[this.i].context[this.list[this.i].handler])\r\n\t\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t\tif (this.list[this.i].context[this.list[this.i].handler] (this, this.args, this.list[this.i].data) === false)\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (global[this.list[this.i].handler].call (null, this, this.args, this.list[this.i].data) === false)\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (this.list[this.i].handler.call (this.list[this.i].context, this, this.args, this.list[this.i].data) === false)\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._async)\r\n\t\t\treturn this;\r\n\r\n\t\tif (this.i >= this.list.length && this.next) this.next.resume();\r\n\r\n\t\tif (this.cbHandler)\r\n\t\t\tthis.cbHandler.call (this.cbContext);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/**\r\n\t**\tSets the \"original\" property of the event to indicate where the original event comes from.\r\n\t**\r\n\t**\tEvent from (event: Event);\r\n\t*/\r\n\tfrom: function (event)\r\n\t{\r\n\t\tthis.original = event;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/**\r\n\t**\tEnqueues the specified event to be executed upon the current event process is finished. The \"original\"\r\n\t**\tproperty of the chained event will be set to the current event.\r\n\t**\r\n\t**\tEvent enqueueEvent (event: Event);\r\n\t*/\r\n\tenqueue: function (event)\r\n\t{\r\n\t\tif (!event) return this;\r\n\r\n\t\tvar evt;\r\n\t\tfor (evt = this; evt.next != null; evt = evt.next);\r\n\r\n\t\tevt.next = event;\r\n\t\tevent.from (this);\r\n\r\n\t\treturn this;\r\n\t}\r\n});\r\n","\r\nimport Class from './class.js';\r\nimport Event from './event.js';\r\n\r\n/**\r\n**\tEvent dispatcher allows several event listeners to be attached, these will be invoked whenever the\r\n**\tevent that is being listened to is triggered.\r\n*/\r\n\r\nexport default Class.extend\r\n({\r\n\t/**\r\n\t**\tName of the class.\r\n\t*/\r\n\tclassName: \"EventDispatcher\",\r\n\r\n\t/**\r\n\t**\tListeners attached to this event dispatcher. Grouped by event name.\r\n\t*/\r\n\tlisteners: null,\r\n\r\n\t/**\r\n\t**\tNamespace for event dispatching. Defaults to null. Can be modified using setNamespace().\r\n\t*/\r\n\tnamespace: null,\r\n\r\n\t/**\r\n\t**\tInitializes the event dispatcher.\r\n\t**\r\n\t**\tEventDispatcher __ctor ();\r\n\t*/\r\n\t__ctor: function ()\r\n\t{\r\n\t\tthis.listeners = { };\r\n\t},\r\n\r\n\t/**\r\n\t**\tSets the event dispatching namespace. Used to force all events dispatched to have the specified namespace.\r\n\t**\r\n\t**\tEventDispatcher setNamespace (value: string);\r\n\t*/\r\n\tsetNamespace: function (value)\r\n\t{\r\n\t\tthis.namespace = value;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/**\r\n\t**\tAdds an event listener for a specified event to the event dispatcher. The event name can have an optional\r\n\t**\tnamespace indicator which is added to the beginning of the event name and separated using a colon (:). This\r\n\t**\tindicator can be used to later trigger or remove all handlers of an specific namespace.\r\n\t**\r\n\t**\tEventDispatcher addEventListener (eventName: string, handler: function, context: object, data: object);\r\n\t*/\r\n\taddEventListener: function (eventName, handler, context, data)\r\n\t{\r\n\t\teventName = eventName.split(\":\");\r\n\t\tvar name = eventName[eventName.length-1];\r\n\t\tvar ns = eventName.length > 1 ? eventName[0] : null;\r\n\r\n\t\tif (!this.listeners[name])\r\n\t\t\tthis.listeners[name] = [];\r\n\r\n\t\tthis.listeners[name].push ({ ns: ns, handler: handler, context: context, data: data, silent: 0 });\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/**\r\n\t**\tRemoves an event listener from the event dispatcher. If only the name is provided all handlers with the\r\n\t**\tspecified name will be removed. If a context is provided without a handler then any handler matching the\r\n\t**\tcontext will be removed. Special event name \"*\" can be used to match all event names.\r\n\t**\r\n\t**\tEventDispatcher removeEventListener (eventName: string, handler: function, context: object);\r\n\t*/\r\n\tremoveEventListener: function (eventName, handler, context)\r\n\t{\r\n\t\teventName = eventName.split(\":\");\r\n\t\tvar name = eventName[eventName.length-1];\r\n\t\tvar ns = eventName.length > 1 ? eventName[0] : null;\r\n\r\n\t\tif (name == \"*\")\r\n\t\t{\r\n\t\t\tfor (var j in this.listeners)\r\n\t\t\t{\r\n\t\t\t\tvar list = this.listeners[j];\r\n\r\n\t\t\t\tfor (var i = 0; i < list.length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar k = true;\r\n\r\n\t\t\t\t\tif (handler)\r\n\t\t\t\t\t\tk = k && list[i].handler === handler;\r\n\r\n\t\t\t\t\tif (context)\r\n\t\t\t\t\t\tk = k && list[i].context === context;\r\n\r\n\t\t\t\t\tif (ns)\r\n\t\t\t\t\t\tk = k && list[i].ns == ns;\r\n\r\n\t\t\t\t\tif (k) list.splice(i--, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif (!this.listeners[name])\r\n\t\t\t\treturn this;\r\n\r\n\t\t\tvar list = this.listeners[name];\r\n\r\n\t\t\tfor (var i = 0; i < list.length; i++)\r\n\t\t\t{\r\n\t\t\t\tvar k = true;\r\n\r\n\t\t\t\tif (handler)\r\n\t\t\t\t\tk = k && list[i].handler === handler;\r\n\r\n\t\t\t\tif (context)\r\n\t\t\t\t\tk = k && list[i].context === context;\r\n\r\n\t\t\t\tif (ns)\r\n\t\t\t\t\tk = k && list[i].ns == ns;\r\n\r\n\t\t\t\tif (k) list.splice(i--, 1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/**\r\n\t**\tPrepares an event with the specified parameters for its later usage. The event is started when\r\n\t**\tthe resume() method is called. If a callback is specified it will be executed once all event\r\n\t**\thandlers have been processed.\r\n\t**\r\n\t**\tEvent prepareEvent (eventName: string, eventArgs: map, cbHandler: function, cbContext: object);\r\n\t**\tEvent prepareEvent (eventName: string, eventArgs: map);\r\n\t*/\r\n\tprepareEvent: function (eventName, eventArgs, cbHandler, cbContext)\r\n\t{\r\n\t\tvar list = [];\r\n\r\n\t\teventName = eventName.split(\":\");\r\n\t\tvar name = eventName[eventName.length-1];\r\n\t\tvar ns = eventName.length > 1 ? eventName[0] : null;\r\n\r\n\t\tif (this.listeners[name])\r\n\t\t\tlist = list.concat (this.listeners[name]);\r\n\r\n\t\tif (this.listeners[\"*\"])\r\n\t\t\tlist = list.concat (this.listeners[\"*\"]);\r\n\r\n\t\tfor (var i = 0; i < list.length; i++)\r\n\t\t\tif (list[i].silent) list.splice (i--, 1);\r\n\r\n\t\tif (ns)\r\n\t\t{\r\n\t\t\tfor (var i = 0; i < list.length; i++)\r\n\t\t\t\tif (list[i].ns != ns) list.splice (i--, 1);\r\n\t\t}\r\n\r\n\t\treturn new Event (this, list, name, eventArgs, cbHandler, cbContext);\r\n\t},\r\n\r\n\t/**\r\n\t**\tSilences or unsilences all handlers attached to an event such that if the event fires the handler(s) will\r\n\t**\tnot be invoked. It is recommended to use a namespace to ensure other handlers will continue to be run.\r\n\t**\r\n\t**\tEventDispatcher silence (eventName: string);\r\n\t*/\r\n\tsilence: function (eventName, value)\r\n\t{\r\n\t\teventName = eventName.split(\":\");\r\n\r\n\t\tvar name = eventName[eventName.length-1];\r\n\t\tvar ns = eventName.length > 1 ? eventName[0] : null;\r\n\r\n\t\tvalue = value === false ? -1 : 1;\r\n\r\n\t\tif (name == \"*\")\r\n\t\t{\r\n\t\t\tfor (var j in this.listeners)\r\n\t\t\t{\r\n\t\t\t\tvar list = this.listeners[j];\r\n\r\n\t\t\t\tfor (var i = 0; i < list.length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (ns && list[i].ns != ns)\r\n\t\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t\tlist[i].silent += value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif (!this.listeners[name])\r\n\t\t\t\treturn this;\r\n\r\n\t\t\tvar list = this.listeners[name];\r\n\r\n\t\t\tfor (var i = 0; i < list.length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (ns && list[i].ns != ns)\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\tlist[i].silent += value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/**\r\n\t**\tDispatches an event to the respective listeners. If a callback is specified it will be executed once\r\n\t**\tall event handlers have been processed.\r\n\t**\r\n\t**\tEvent dispatchEvent (eventName: string, eventArgs: map, cbHandler: function, cbContext: object);\r\n\t**\tEvent dispatchEvent (eventName: string, eventArgs: map);\r\n\t*/\r\n\tdispatchEvent: function (eventName, eventArgs, cbHandler, cbContext)\r\n\t{\r\n\t\treturn this.prepareEvent(this.namespace ? this.namespace+':'+eventName : eventName, eventArgs, cbHandler, cbContext).resume();\r\n\t}\r\n});\r\n","\nimport Rinn from './alpha.js';\nimport EventDispatcher from './event-dispatcher.js';\n\n/**\n**\tA model is a high-integrity data object used to store properties and more importantly to provide event support to notify of any\n**\tkind of change that occurs to the model's properties. Integrity of the model is maintained by optionally using property constraints.\n*/\n\nlet _Model = EventDispatcher.extend\n({\n\t/**\n\t**\tName of the class.\n\t*/\n\tclassName: \"Model\",\n\n\t/**\n\t**\tDefault properties for the model. Can be a map with the property name and its default value or a function\n\t**\treturning a map with dynamic default values. This is used to reset the model to its initial state.\n\t*/\n\tdefaults: null,\n\n\t/**\n\t**\tModel property contraints. A map with the property name and an object specifying the constraints of the\n\t**\tproperty. This is used to determine the type, format and behavior of each property in the model.\n\t*/\n\tconstraints: null,\n\n\t/**\n\t**\tProperties of the model.\n\t*/\n\tdata: null,\n\n\t/**\n\t**\tArray with the name of the properties that have changed. Populated prior modelChanged event.\n\t*/\n\tchangedList: null,\n\n\t/**\n\t**\tSilent mode indicator. While in silent mode events will not be dispatched.\n\t*/\n\t_silent: 0,\n\n\t/**\n\t**\tCurrent nesting level of the set() method. This is used to determine when all the property\n\t**\tchanges are done.\n\t*/\n\t_level: 0,\n\n\t/**\n\t**\tInitializes the model and sets the properties to the specified data object.\n\t**\n\t**\t>> Model __ctor (object data);\n\t**\t>> Model __ctor (object data, object defaults);\n\t*/\n\t__ctor: function (data, defaults)\n\t{\n\t\tthis._super.EventDispatcher.__ctor();\n\n\t\tthis.data = { };\n\n\t\tif (defaults != null)\n\t\t{\n\t\t\tthis.reset (defaults, false);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlet o = null;\n\n\t\t\tif (!this.defaults && this.constraints)\n\t\t\t{\n\t\t\t\to = { };\n\n\t\t\t\tfor (let i in this.constraints)\n\t\t\t\t{\n\t\t\t\t\tlet j = this.constraints[i];\n\t\t\t\t\tif (j.def === null || j.def === undefined)\n\t\t\t\t\t{\n\t\t\t\t\t\to[i] = null;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof(j.def) === 'function')\n\t\t\t\t\t\to[i] = j.def();\n\t\t\t\t\telse\n\t\t\t\t\t\to[i] = j.def;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.reset(o);\n\t\t}\n\n\t\tthis.init();\n\n\t\tif (data != null)\n\t\t\tthis.set (data, true);\n\n\t\tif (this.constraints) this.update();\n\n\t\tthis.ready();\n\t},\n\n\t/**\n\t**\tResets the model to its default state and triggers update events. If a map is provided the defaults of\n\t**\tthe model will be set to the specified map.\n\t**\n\t**\t>> Model reset (object defaults, [bool nsilent=true]);\n\t**\t>> Model reset ([bool nsilent=true]);\n\t*/\n\treset: function (defaults, nsilent)\n\t{\n\t\tif (!this.defaults)\n\t\t{\n\t\t\tif (!defaults || (Rinn.typeOf(defaults) !== 'object' && Rinn.typeOf(defaults) !== 'function'))\n\t\t\t\treturn this;\n\n\t\t\tthis.defaults = defaults;\n\t\t}\n\n\t\tif (Rinn.typeOf(this.defaults) === 'function')\n\t\t\tthis.data = this.defaults();\n\t\telse\n\t\t\tthis.data = Rinn.clone(this.defaults);\n\n\t\treturn (nsilent === false || defaults === false) ? this : this.update(null, true);\n\t},\n\n\t/**\n\t**\tInitializes the model. Called before the model properties are set.\n\t**\n\t**\t>> void init ();\n\t*/\n\tinit: function ()\n\t{\n\t},\n\n\t/**\n\t**\tInitialization epilogue. Called after initialization and after model properties are set.\n\t**\n\t**\t>> void ready ();\n\t*/\n\tready: function ()\n\t{\n\t},\n\n\t/**\n\t**\tEnables or disables silent mode. When the model is in silent mode events will not be dispatched.\n\t**\n\t**\t>> Model silent (value: bool);\n\t*/\n\tsilent: function (value)\n\t{\n\t\tthis._silent += value ? 1 : -1;\n\t\treturn this;\n\t},\n\n\t/**\n\t**\tValidates a property name and value against the constraints defined in the model (if any). Returns the\n\t**\tfinal value if successful or throws an empty exception if errors occur.\n\t**\n\t**\t>> T _validate (string name, T value);\n\t*/\n\t_validate: function (name, value)\n\t{\n\t\tif (!this.constraints || !this.constraints[name])\n\t\t\treturn value;\n\n\t\tvar constraints = this.constraints[name];\n\n\t\tvar nvalue = value;\n\n\t\tfor (var ctname in constraints)\n\t\t{\n\t\t\tif (!_Model.Constraints[ctname])\n\t\t\t\tcontinue;\n\n\t\t\ttry {\n\t\t\t\tnvalue = _Model.Constraints[ctname] (this, constraints[ctname], name, nvalue);\n\t\t\t}\n\t\t\tcatch (e)\n\t\t\t{\n\t\t\t\tif (e.message == \"null\")\n\t\t\t\t\tbreak;\n\n\t\t\t\tthrow new Error (`Constraint [${ctname}:${constraints[ctname]}] failed on property '${name}'.`);\n\t\t\t}\n\t\t}\n\n\t\treturn nvalue;\n\t},\n\n\t/**\n\t**\tSets the value of a property and returns the value set. This method is internally used to set properties\n\t**\tone at a time. If constraints are present in the model for the specified property all constraints will be\n\t**\tverified. When constraint errors occur the constraintError event will be raised and the property value\n\t**\twill not be changed.\n\t**\n\t**\t>> T _set (string name, T value);\n\t*/\n\t_set: function (name, value)\n\t{\n\t\tif (!this.constraints || !this.constraints[name])\n\t\t{\n\t\t\tthis.data[name] = value;\n\t\t\treturn value;\n\t\t}\n\n\t\tvar constraints = this.constraints[name];\n\n\t\tvar cvalue = this.data[name];\n\t\tvar nvalue = value;\n\n\t\tfor (var ctname in constraints)\n\t\t{\n\t\t\tif (!_Model.Constraints[ctname])\n\t\t\t\tcontinue;\n\n\t\t\ttry {\n\t\t\t\tnvalue = _Model.Constraints[ctname] (this, constraints[ctname], name, nvalue);\n\t\t\t}\n\t\t\tcatch (e)\n\t\t\t{\n\t\t\t\tif (e.message == \"null\")\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (!this._silent)\n\t\t\t\t\tthis.dispatchEvent (\"constraintError\", { constraint: ctname, message: e.message, name: name, value: value });\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn (this.data[name] = nvalue);\n\t},\n\n\t/**\n\t**\tTriggers property events to indicate a property is changing. First triggers \"propertyChanging\" and then\n\t**\t\"propertyChanged\". If the first event returns false the second event will not be triggered.\n\t**\n\t**\t>> void _propertyEvent (string name, T prev, T value, bool direct=false);\n\t*/\n\t_propertyEvent: function (name, prev, value, direct)\n\t{\n\t\tvar temp = { name: name, old: prev, value: value, level: this._level };\n\n\t\tvar evt = this.dispatchEvent (\"propertyChanging\", temp);\n\n\t\tif (!direct)\n\t\t\ttemp.value = this._set (name, temp.value);\n\t\telse\n\t\t\tthis.data[name] = temp.value;\n\n\t\tif (evt != null && evt.ret.length && evt.ret[0] === false)\n\t\t\treturn;\n\n\t\tthis.dispatchEvent (\"propertyChanged.\" + name, temp);\n\t\tthis.dispatchEvent (\"propertyChanged\", temp);\n\n\t\tthis.changedList.push (name);\n\t},\n\n\t/**\n\t**\tSets one or more properties of the model. Possible arguments can be two strings or a map.\n\t**\n\t**\t>> Model set (string name, T value, bool force=true);\n\t**\t>> Model set (string name, T value, bool silent=false);\n\t**\t>> Model set (string name, T value);\n\t**\t>> Model set (object data);\n\t*/\n\tset: function ()\n\t{\n\t\tvar n = arguments.length;\n\t\tvar force = false, silent = false;\n\n\t\tif ((n > 2 || (n == 2 && Rinn.typeOf(arguments[0]) == \"object\")) && Rinn.typeOf(arguments[n-1]) == \"boolean\")\n\t\t{\n\t\t\tforce = arguments[--n];\n\t\t\tif (force === false) silent = true;\n\t\t}\n\n\t\tif (this._level == 0)\n\t\t{\n\t\t\tthis.changedList = [];\n\t\t}\n\n\t\tthis._level++;\n\n\t\tif (n == 2)\n\t\t{\n\t\t\tif (this.data[arguments[0]] !== arguments[1] || force)\n\t\t\t{\n\t\t\t\tif (!this._silent && !silent)\n\t\t\t\t\tthis._propertyEvent (arguments[0], this.data[arguments[0]], this._validate (arguments[0], arguments[1]));\n\t\t\t\telse\n\t\t\t\t\tthis._set (arguments[0], arguments[1]);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (var i in arguments[0])\n\t\t\t{\n\t\t\t\tif (this.data[i] !== arguments[0][i] || force)\n\t\t\t\t{\n\t\t\t\t\tif (!this._silent && !silent)\n\t\t\t\t\t\tthis._propertyEvent (i, this.data[i], this._validate (i, arguments[0][i]));\n\t\t\t\t\telse\n\t\t\t\t\t\tthis._set (i, arguments[0][i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!--this._level && this.changedList.length && !silent && !this._silent)\n\t\t\tthis.dispatchEvent (\"modelChanged\", { fields: this.changedList });\n\n\t\treturn this;\n\t},\n\n\t/**\n\t**\tReturns true if the given key exists in the model.\n\t**\n\t**\t>> boolean has (string name);\n\t*/\n\thas: function (name)\n\t{\n\t\treturn name in this.data;\n\t},\n\n\t/**\n\t**\tReturns the value of a property. If no name is specified the whole map of properties will be returned.\n\t**\tIf a boolean value of \"true\" is provided the properties map will be returned but first will be compacted\n\t**\tusing the default data to ensure only valid properties are present.\n\t**\n\t**\t>> T get (string name);\n\t**\t>> object get ();\n\t**\t>> object get (true);\n\t**\t>> object get (false);\n\t**\t\n\t*/\n\tget: function (name, def)\n\t{\n\t\tif (arguments.length == 0 || name === false)\n\t\t\treturn this.data;\n\n\t\tif (arguments.length == 1 && name === true)\n\t\t\treturn this.flatten ();\n\n\t\tif (arguments.length == 2)\n\t\t\treturn this.data[name] === undefined ? def : this.data[name];\n\n\t\treturn this.data[name];\n\t},\n\n\t/**\n\t**\tReturns the value of a property as an integer number.\n\t**\n\t**\t>> int getInt (string name, [int def]);\n\t*/\n\tgetInt: function (name, def)\n\t{\n\t\tif (arguments.length == 2)\n\t\t\treturn this.data[name] === undefined ? def : parseInt (this.data[name]);\n\n\t\treturn parseInt (this.data[name]);\n\t},\n\n\t/**\n\t**\tReturns the value of a property as a floating point number.\n\t**\n\t**\t>> float getFloat (string name, [float def]);\n\t*/\n\tgetFloat: function (name, def)\n\t{\n\t\tif (arguments.length == 2)\n\t\t\treturn this.data[name] === undefined ? def : parseFloat (this.data[name]);\n\n\t\treturn parseFloat (this.data[name]);\n\t},\n\n\t/**\n\t**\tReturns the value of a property as a boolean value (true or false).\n\t**\n\t**\t>> bool getBool (string name, [bool def]);\n\t**\t\n\t*/\n\tgetBool: function (name, def)\n\t{\n\t\tif (arguments.length == 2)\n\t\t\tname = this.data[name] === undefined ? def : this.data[name];\n\t\telse\n\t\t\tname = this.data[name];\n\n\t\tif (name === \"true\" || name === true)\n\t\t\treturn true;\n\n\t\tif (name === \"false\" || name === false)\n\t\t\treturn false;\n\n\t\treturn parseInt (name) ? true : false;\n\t},\n\n\t/**\n\t**\tReturns a reference object for a model property. The resulting object contains two methods\n\t**\tnamed \"get\" and \"set\" to modify the value of the property.\n\t**\n\t**\t>> object getReference (string name);\n\t*/\n\tgetReference: function (name)\n\t{\t\n\t\tvar m = this;\n\n\t\treturn {\n\t\t\tget: function() {\n\t\t\t\treturn m.get(name);\n\t\t\t},\n\n\t\t\tset: function(value) {\n\t\t\t\tm.set(name, value);\n\t\t\t}\n\t\t};\n\t},\n\n\t/**\n\t**\tSets or returns a constraint given the property name. \n\t**\n\t**\t>> Model constraint (string field, string constraint, T value);\n\t**\t>> Model constraint (string field, object constraint);\n\t**\t>> Model constraint (object constraints);\n\t**\t>> object constraint (string field);\n\t*/\n\tconstraint: function (field, constraint, value)\n\t{\n\t\tif (arguments.length == 3 || arguments.length == 2 || (arguments.length == 1 && Rinn.typeOf(field) == \"object\"))\n\t\t{\n\t\t\tif (this.constraints === this.constructor.prototype.constraints)\n\t\t\t\tthis.constraints = Rinn.clone (this.constraints);\n\n\t\t\tswitch (arguments.length)\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tRinn.override (this.constraints, field);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\tRinn.override (this.constraints[field], constraint);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.constraints[field][constraint] = value;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\treturn !field ? this : this.constraints[field];\n\t},\n\n\t/**\n\t**\tReturns a compact version of the model properties. That is, a map only with validated properties that are\n\t**\talso present in the default data map. Returns null if the object is not compliant. If the \"safe\" parameter\n\t**\tis set one last property named \"class\" will be attached, this specifies the original classPath of the object.\n\t**\n\t**\t>> object flatten ([bool safe=false]);\n\t*/\n\tflatten: function (safe, rsafe)\n\t{\n\t\tif (safe)\n\t\t{\n\t\t\tvar data = this.flatten(false, true);\n\t\t\tif (data == null) return null;\n\n\t\t\tdata[\"class\"] = this.classPath;\n\t\t\treturn data;\n\t\t}\n\n\t\tif (!this.constraints && !this.defaults)\n\t\t\treturn this.data;\n\n\t\tif (!this.isCompliant())\n\t\t\treturn { };\n\n\t\tvar constraints = this.constraints;\n\t\tvar keys = this.defaults ? (Rinn.typeOf(this.defaults) == \"function\" ? this.defaults() : this.defaults) : this.constraints;\n\n\t\tvar data = { };\n\n\t\tfor (var i in this.data)\n\t\t{\n\t\t\tif (!(i in keys)) continue;\n\n\t\t\tif (constraints && constraints[i])\n\t\t\t{\n\t\t\t\tvar ct = constraints[i];\n\n\t\t\t\tif (ct.model)\n\t\t\t\t{\n\t\t\t\t\tdata[i] = this.data[i] ? this.data[i].flatten(rsafe) : null;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (ct.arrayof)\n\t\t\t\t{\n\t\t\t\t\tdata[i] = [];\n\n\t\t\t\t\tfor (var j = 0; j < this.data[i].length; j++)\n\t\t\t\t\t\tdata[i][j] = this.data[i][j] ? this.data[i][j].flatten(rsafe) : null;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (ct.cls)\n\t\t\t\t{\n\t\t\t\t\tdata[i] = this.data[i] ? this.data[i].flatten() : null;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdata[i] = this.data[i];\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t/**\n\t**\tRemoves a property or a list of properties.\n\t**\n\t**\t>> void remove (string name, [bool nsilent=true]);\n\t**\t>> void remove (array name, [bool nsilent=true]);\n\t*/\n\tremove: function (name, nsilent)\n\t{\n\t\tif (Rinn.typeOf(name) == \"array\")\n\t\t{\n\t\t\tfor (var i = 0; i < name.length; i++)\n\t\t\t\tdelete this.data[name[i]];\n\n\t\t\tif (nsilent !== false && !this._silent)\n\t\t\t\tthis.dispatchEvent (\"propertyRemoved\", { fields: name });\n\t\t}\n\t\telse\n\t\t{\n\t\t\tdelete this.data[name];\n\n\t\t\tif (nsilent !== false && !this._silent)\n\t\t\t\tthis.dispatchEvent (\"propertyRemoved\", { fields: [name] });\n\t\t}\n\t},\n\n\t/**\n\t**\tTriggers data change events for one or more properties. Ensure that silent mode is not enabled or else\n\t**\tthis method will have no effect. If no parameters are provided a full update will be triggered on all of\n\t**\tthe model properties.\n\t**\n\t**\t>> Model update (array fields);\n\t**\t>> Model update (string name);\n\t**\t>> Model update (bool forceModelChanged);\n\t**\t>> Model update ();\n\t*/\n\tupdate: function (fields, direct)\n\t{\n\t\tif (this._silent) return this;\n\n\t\tif (this._level == 0)\n\t\t{\n\t\t\tthis.changedList = [];\n\t\t}\n\n\t\tthis._level++;\n\n\t\tif (fields && Rinn.typeOf(fields) == 'string')\n\t\t{\n\t\t\tthis._propertyEvent (fields, this.data[fields], this.data[fields], direct);\n\t\t}\n\t\telse if (fields && Rinn.typeOf(fields) == 'array')\n\t\t{\n\t\t\tfor (var i of fields)\n\t\t\t\tthis._propertyEvent (i, this.data[i], this.data[i], direct);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (var i in this.data)\n\t\t\t\tthis._propertyEvent (i, this.data[i], this.data[i], direct);\n\t\t}\n\n\t\tif (!--this._level && !this._silent && (this.changedList.length != 0 || fields === true))\n\t\t\tthis.dispatchEvent (\"modelChanged\", { fields: this.changedList });\n\n\t\treturn this;\n\t},\n\n\t/**\n\t**\tValidates one or mode model properties using the defined constraints. If no parameters are provided all of\n\t**\tthe properties in the model will be validated.\n\t**\n\t**\t>> Model validate (array fields);\n\t**\t>> Model validate (string name);\n\t**\t>> Model validate ();\n\t*/\n\tvalidate: function (fields)\n\t{\n\t\tif (!this.constraints) return this;\n\n\t\tif (fields && Rinn.typeOf(fields) == \"string\")\n\t\t{\n\t\t\tthis._set (fields, this.data[fields])\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (var i in this.data)\n\t\t\t{\n\t\t\t\tif (fields && Rinn.indexOf(fields, i) == -1)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tthis._set (i, this.data[i])\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t/**\n\t**\tValidates all the properties in the model and returns a boolean indicating if all of them comply with the\n\t**\tconstraints defined in the model.\n\t**\n\t**\t>> bool isCompliant ();\n\t*/\n\tisCompliant: function ()\n\t{\n\t\tif (!this.constraints) return true;\n\n\t\ttry\n\t\t{\n\t\t\tfor (var i in this.data)\n\t\t\t\tthis._validate (i, this.data[i]);\n\n\t\t\treturn true;\n\t\t}\n\t\tcatch (e) {\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t**\tRegisters an event handler for changes in a specific property of the model.\n\t**\n\t**\t>> void observe (string property, function handler, object context);\n\t*/\n\tobserve: function (property, handler, context)\n\t{\n\t\tthis.addEventListener (\"propertyChanged.\" + property, handler, context);\n\t},\n\n\t/**\n\t**\tUnregisters an event handler from changes in a specific property of the model.\n\t**\n\t**\t>> void unobserve (string property, function handler, object context);\n\t*/\n\tunobserve: function (property, handler, context)\n\t{\n\t\tthis.removeEventListener (\"propertyChanged.\" + property, handler, context);\n\t},\n\n\t/**\n\t**\tAdds a propertyChanged event handler for the given property. The property name can have an event namespace prepended and separated by colon.\n\t**\n\t**\t>> void watch (string property, function handler);\n\t*/\n\twatch: function (property, handler)\n\t{\n\t\tproperty = property.split(':');\n\n\t\tif (property.length == 1)\n\t\t{\n\t\t\tproperty[1] = property[0];\n\t\t\tproperty[0] = 'watch';\n\t\t}\n\n\t\tthis.addEventListener (property[0]+\":propertyChanged.\"+property[1], function (evt, args) {\n\t\t\thandler (args.value, args, evt);\n\t\t});\n\t},\n\n\t/**\n\t**\tRemoves propertyChanged handlers related to the specified property. The property name can have an event namespace prepended and separated by colon.\n\t**\n\t**\t>> void unwatch (string property);\n\t*/\n\tunwatch: function (property)\n\t{\n\t\tproperty = property.split(':');\n\t\tif (property.length == 1)\n\t\t{\n\t\t\tproperty[1] = property[0];\n\t\t\tproperty[0] = 'watch';\n\t\t}\n\n\t\tthis.removeEventListener (property[0]+\":propertyChanged.\"+property[1]);\n\t},\n\n\t/**\n\t * Triggers a field change event. Even if the value of the field is the same as the model's, the event will still be triggered.\n\t */\n\ttrigger: function (name, value=null)\n\t{\n\t\treturn this.set(name, value, true);\n\t},\n\n\t/**\n\t**\tSerializes the model into a string.\n\t**\n\t**\tstring toString ();\n\t*/\n\ttoString: function ()\n\t{\n\t\treturn Rinn.serialize(this.get (true));\n\t}\n});\n\n\n/**\n**\tImport model constraints.\n*/\n\nimport Constraints from './model-constraints.js';\n_Model.Constraints = Constraints;\n\nexport default _Model;\n","\nimport Rinn from './alpha.js';\nimport Model from './model.js';\n\n/**\n**\tGeneric list for models.\n*/\n\nexport default Model.extend\n({\n\t/**\n\t**\tName of the class.\n\t*/\n\tclassName: \"ModelList\",\n\n\t/**\n\t**\tClass of the items in the list, can be overriden by child classes to impose a more strict constraint.\n\t*/\n\titemt: Model,\n\n\t/**\n\t**\tMirror of data.contents\n\t*/\n\tcontents: null,\n\n\t/**\n\t**\tIDs of every item in the contents.\n\t*/\n\titemId: null,\n\n\t/**\n\t**\tAutoincremental ID for the next item to be added.\n\t*/\n\tnextId: null,\n\n\t/**\n\t**\tDefault properties of the model.\n\t*/\n\tdefaults:\n\t{\n\t\tcontents: null\n\t},\n\n\t/**\n\t**\tConstraints of the model to ensure integrity.\n\t*/\n\tconstraints:\n\t{\n\t\tcontents: {\n\t\t\ttype: \"array\",\n\t\t\tarrayof: \"@itemt\"\n\t\t}\n\t},\n\n\t/**\n\t**\tConstructor.\n\t*/\n\t__ctor: function (...args)\n\t{\n\t\tthis.itemId = [];\n\t\tthis.nextId = 0;\n\n\t\tthis._super.Model.__ctor(...args);\n\t},\n\n\t/**\n\t**\tInitialization epilogue. Called after initialization and after model properties are set.\n\t*/\n\tready: function ()\n\t{\n\t\tthis._eventGroup = \"ModelList_\" + Date.now() + \":modelChanged\";\n\n\t\tthis.contents = this.data.contents;\n\t},\n\n\t/**\n\t**\tConnects the event handlers to the item.\n\t**\n\t**\t>> Model _bind (int iid, Model item);\n\t*/\n\t_bind: function (iid, item)\n\t{\n\t\tif (item && item.addEventListener) item.addEventListener (this._eventGroup, this._onItemEvent, this, iid);\n\t\treturn item;\n\t},\n\n\t/**\n\t**\tDisconnects the event handlers from the item.\n\t**\n\t**\t>> Model _unbind (Model item);\n\t*/\n\t_unbind: function (item)\n\t{\n\t\tif (item && item.removeEventListener) item.removeEventListener (this._eventGroup);\n\t\treturn item;\n\t},\n\n\t/**\n\t**\tHandler for item events.\n\t**\n\t**\t>> Model _onItemEvent (Event evt, object args, int iid);\n\t*/\n\t_onItemEvent: function (evt, args, iid)\n\t{\n\t\tthis.prepareEvent (\"itemChanged\", { id: iid, item: evt.source }).from (evt)\n\t\t.enqueue (this.prepareEvent (\"modelChanged\", { fields: [\"contents\"] })).resume ();\n\t},\n\n\t/**\n\t**\tReturns the number of items in the list.\n\t**\n\t**\t>> int length ();\n\t*/\n\tlength: function ()\n\t{\n\t\treturn this.data.contents.length;\n\t},\n\n\t/**\n\t**\tClears the contents of the list.\n\t**\n\t**\t>> void clear ();\n\t*/\n\tclear: function ()\n\t{\n\t\tfor (var i = 0; i < this.data.contents; i++)\n\t\t\tthis._unbind (this.data.contents[i]);\n\n\t\tthis.itemId = [];\n\t\tthis.nextId = 0;\n\n\t\tthis.contents = this.data.contents = [];\n\n\t\tthis.prepareEvent (\"itemsCleared\")\n\t\t.enqueue (this.prepareEvent (\"modelChanged\", { fields: [\"contents\"] })).resume ();\n\n\t\treturn this;\n\t},\n\n\t/**\n\t**\tSets the contents of the list with the specified array. All items will be ensured to be of the same model\n\t**\ttype as the one specified in the list.\n\t**\n\t**\t>> ModelList setData (array data);\n\t*/\n\tsetData: function (data)\n\t{\n\t\tthis.clear();\n\t\tif (!data) return this;\n\n\t\tfor (var i = 0; i < data.length; i++)\n\t\t{\n\t\t\tvar item = Rinn.ensureTypeOf(this.itemt, data[i]);\n\n\t\t\tthis.itemId.push(this.nextId++);\n\t\t\tthis.data.contents.push(item);\n\n\t\t\tthis._bind(this.nextId-1, item);\n\t\t}\n\n\t\tthis.prepareEvent (\"itemsChanged\")\n\t\t.enqueue (this.prepareEvent (\"modelChanged\", { fields: [\"contents\"] })).resume ();\n\n\t\treturn this;\n\t},\n\n\t/**\n\t**\tReturns the raw array contents of the list.\n\t**\n\t**\t>> array getData ();\n\t*/\n\tgetData: function ()\n\t{\n\t\treturn this.data.contents;\n\t},\n\n\t/**\n\t**\tReturns the item at the specified index or null if the index is out of bounds.\n\t**\n\t**\t>> Model getAt (int index);\n\t*/\n\tgetAt: function (index)\n\t{\n\t\tif (index < 0 || index >= this.data.contents.length)\n\t\t\treturn null;\n\n\t\treturn this.data.contents[index];\n\t},\n\n\t/**\n\t**\tRemoves and returns the item at the specified index. Returns null if the index is out of bounds.\n\t**\n\t**\t>> Model removeAt (int index);\n\t*/\n\tremoveAt: function (index)\n\t{\n\t\tif (index < 0 || index >= this.data.contents.length)\n\t\t\treturn null;\n\n\t\tlet item = this.data.contents.splice(index, 1)[0];\n\t\tlet id = this.itemId.splice(index, 1)[0];\n\n\t\tthis._unbind (item);\n\n\t\tthis.prepareEvent (\"itemRemoved\", { id: id, item: item })\n\t\t.enqueue (this.prepareEvent (\"modelChanged\", { fields: [\"contents\"] })).resume();\n\n\t\treturn item;\n\t},\n\n\t/**\n\t**\tSets the item at the specified index. Returns false if the index is out of bounds, true otherwise. The\n\t**\titem will be ensured to be of the model defined in the list.\n\t**\n\t**\t>> bool setAt (int index, Model item);\n\t*/\n\tsetAt: function (index, item)\n\t{\n\t\tif (index < 0 || index >= this.data.contents.length)\n\t\t\treturn false;\n\n\t\titem = Rinn.ensureTypeOf(this.itemt, item);\n\n\t\tthis._unbind(this.data.contents[index]);\n\t\tthis.data.contents[index] = item;\n\t\tthis._bind(this.itemId[index], item);\n\n\t\tthis.prepareEvent (\"itemChanged\", { id: this.itemId[index], item: item })\n\t\t.enqueue (this.prepareEvent (\"modelChanged\", { fields: [\"contents\"] })).resume ();\n\n\t\treturn true;\n\t},\n\n\t/**\n\t**\tNotifies a change in the item at the specified index. Returns false if the index is out of bounds.\n\t**\n\t**\t>> bool updateAt (int index);\n\t*/\n\tupdateAt: function (index)\n\t{\n\t\tif (index < 0 || index >= this.data.contents.length)\n\t\t\treturn false;\n\n\t\tthis.prepareEvent (\"itemChanged\", { id: this.itemId[index], item: this.data.contents[index] })\n\t\t.enqueue (this.prepareEvent (\"modelChanged\", { fields: [\"contents\"] })).resume ();\n\n\t\treturn true;\n\t},\n\n\t/**\n\t**\tAdds an item to the bottom of the list. Returns null if the item is not an object or a model. The item\n\t**\twill be ensured to be of the model specified in the list.\n\t**\n\t**\t>> Model push (Model item);\n\t*/\n\tpush: function (item)\n\t{\n\t\tif (item && Rinn.typeOf(item) != \"object\")\n\t\t\treturn null;\n\n\t\titem = Rinn.ensureTypeOf(this.itemt, item);\n\n\t\tthis.itemId.push(this.nextId++);\n\t\tthis.data.contents.push (item);\n\t\tthis._bind(this.nextId-1, item);\n\n\t\tthis.prepareEvent (\"itemAdded\", { id: this.itemId[this.itemId.length-1], item: item, position: 'tail' })\n\t\t.enqueue (this.prepareEvent (\"modelChanged\", { fields: [\"contents\"] })).resume ();\n\n\t\treturn item;\n\t},\n\n\t/**\n\t**\tRemoves and returns an item from the bottom of the list.\n\t**\n\t**\t>> Model pop ();\n\t*/\n\tpop: function ()\n\t{\n\t\treturn this._unbind(this.data.contents.pop());\n\t},\n\n\t/**\n\t**\tAdds an item to the top of the list. Returns null if the item is not an object or a model. The item\n\t**\twill be ensured to be of the model specified in the list.\n\t**\n\t**\t>> Model unshift (Model item);\n\t*/\n\tunshift: function (item)\n\t{\n\t\tif (item && Rinn.typeOf(item) != \"object\")\n\t\t\treturn null;\n\n\t\titem = Rinn.ensureTypeOf(this.itemt, item);\n\n\t\tthis.itemId.unshift(this.nextId++);\n\t\tthis.data.contents.unshift (item);\n\t\tthis._bind(this.nextId-1, item);\n\n\t\tthis.prepareEvent (\"itemAdded\", { id: this.itemId[0], item: item, position: 'head' })\n\t\t.enqueue (this.prepareEvent (\"modelChanged\", { fields: [\"contents\"] })).resume ();\n\n\t\treturn item;\n\t},\n\n\t/**\n\t**\tRemoves and returns an item from the top of the list.\n\t**\n\t**\t>> Model shift ();\n\t*/\n\tshift: function ()\n\t{\n\t\treturn this._unbind(this.data.contents.shift());\n\t},\n\n\t/**\n\t**\tSearches for an item matching the specified partial definition and returns its index. Returns -1 if the\n\t**\titem was not found. If retObject is set to true the object will be returned instead of its index and null\n\t**\twill be returned when the item is not found.\n\t**\n\t**\tint|object find (object data, bool retObject=false);\n\t*/\n\tfind: function (data, retObject=false)\n\t{\n\t\tvar contents = this.data.contents;\n\n\t\tfor (var i = 0; i < contents.length; i++)\n\t\t{\n\t\t\tif (Rinn.partialCompare (contents[i].data, data))\n\t\t\t\treturn retObject ? contents[i] : i;\n\t\t}\n\n\t\treturn retObject ? null : -1;\n\t}\n});\n","\r\nimport Rinn from './alpha.js';\r\n\r\n/**\r\n * The utility functions in this module allow to create a very strict serialization/deserialization schema\r\n * to ensure that all values are of the specific type when stored in string format.\r\n */\r\n\r\nlet Schema =\r\n{\r\n\tType: function (proto)\r\n {\r\n\t\tlet tmp =\r\n\t\t{\r\n flatten: function (value, context) {\r\n return value;\r\n },\r\n\r\n unflatten: function (value, context) {\r\n return value;\r\n }\r\n };\r\n\r\n return proto ? Rinn.override(tmp, proto) : tmp;\r\n },\r\n\r\n\tString: function()\r\n\t{\r\n\t\treturn Schema.Type\r\n\t\t({\r\n\t\t\tflatten: function (value, context) {\r\n\t\t\t\treturn value != null ? value.toString() : null;\r\n\t\t\t},\r\n\r\n\t\t\tunflatten: function (value, context) {\r\n\t\t\t\treturn value != null ? value.toString() : null;\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tInteger: function()\r\n\t{\r\n\t\treturn Schema.Type\r\n\t\t({\r\n\t\t\tflatten: function (value, context) {\r\n\t\t\t\treturn ~~value;\r\n\t\t\t},\r\n\r\n\t\t\tunflatten: function (value, context) {\r\n\t\t\t\treturn ~~value;\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tNumber: function (precision)\r\n\t{\r\n\t\treturn Schema.Type\r\n\t\t({\r\n\t\t\t_precision: precision,\r\n\t\t\t_round: false,\r\n\r\n\t\t\tprecision: function (value)\r\n\t\t\t{\r\n\t\t\t\tthis._precision = ~~value;\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\tflatten: function (value, context)\r\n\t\t\t{\r\n\t\t\t\tvalue = parseFloat(value);\r\n\r\n\t\t\t\tif (this._precision > 0)\r\n\t\t\t\t\tvalue = (~~(value*Math.pow(10, this._precision))) / Math.pow(10, this._precision);\r\n\r\n\t\t\t\treturn value;\r\n\t\t\t},\r\n\r\n\t\t\tunflatten: function (value, context) {\r\n\t\t\t\treturn parseFloat(value);\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tBool: function (compact)\r\n\t{\r\n\t\treturn Schema.Type\r\n\t\t({\r\n\t\t\t_compact: compact,\r\n\r\n\t\t\tcompact: function(value)\r\n\t\t\t{\r\n\t\t\t\tthis._compact = value;\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\tflatten: function (value, context) {\r\n\t\t\t\tvalue = ~~value;\r\n\t\t\t\treturn this._compact ? (value > 0 ? 1 : 0) : (value > 0 ? true : false);\r\n\t\t\t},\r\n\r\n\t\t\tunflatten: function (value, context) {\r\n\t\t\t\treturn (~~value) ? true : false;\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tSharedString: function()\r\n\t{\r\n\t\treturn Schema.Type\r\n\t\t({\r\n\t\t\tflatten: function (value, context)\r\n\t\t\t{\r\n\t\t\t\tif (value == null) return 0;\r\n\r\n\t\t\t\tvalue = value.toString();\r\n\r\n if (!(\"strings\" in context))\r\n {\r\n context.index = { };\r\n context.strings = [ ];\r\n }\r\n\r\n if (!(value in context.index))\r\n {\r\n context.strings.push(value);\r\n context.index[value] = context.strings.length;\r\n }\r\n\r\n return context.index[value];\r\n },\r\n\r\n\t\t\tunflatten: function (value, context)\r\n\t\t\t{\r\n return value == null || value == 0 ? null : context.strings[~~value - 1];\r\n }\r\n });\r\n },\r\n\r\n\tArray: function (type)\r\n {\r\n return Schema.Type({\r\n\r\n\t\t\titemType: type,\r\n\t\t\t_debug: false,\r\n\t\t\t_filter: null,\r\n\r\n\t\t\tdebug: function(v) {\r\n\t\t\t\tthis._debug = v;\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n of: function (type) {\r\n this.itemType = type;\r\n return this;\r\n },\r\n\r\n\t\t\tfilter: function (callback) {\r\n\t\t\t\tthis._filter = callback;\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\tflatten: function (value, context)\r\n\t\t\t{\r\n\t\t\t\tif (value == null) return null;\r\n\r\n let o = [ ];\r\n\r\n for (let i = 0; i < value.length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this._filter && !this._filter(value[i], i))\r\n\t\t\t\t\t\tcontinue;\r\n\r\n o.push(this.itemType.flatten(value[i], context));\r\n\t\t\t\t}\r\n\r\n return o;\r\n },\r\n\r\n\t\t\tunflatten: async function (value, context)\r\n\t\t\t{\r\n\t\t\t\tif (value == null) return null;\r\n\r\n let o = [ ];\r\n\r\n\t\t\t\tfor (let i = 0; i < value.length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\to.push(await this.itemType.unflatten(value[i], context));\r\n\t\t\t\t}\r\n\r\n return o;\r\n }\r\n });\r\n },\r\n\r\n Object: function()\r\n {\r\n return Schema.Type({\r\n\r\n properties: [ ],\r\n\r\n property: function (name, type, defvalue=null)\r\n {\r\n this.properties.push({ name: name, source: name, type: type, defvalue: defvalue });\r\n return this;\r\n },\r\n\r\n propertyAlias: function (name, source, type, defvalue=null)\r\n {\r\n this.properties.push({ name: name, source: source, type: type, defvalue: defvalue });\r\n return this;\r\n },\r\n\r\n flatten: function (value, context)\r\n {\r\n\t\t\t\tif (value == null) return null;\r\n\r\n\t\t\t\tlet o;\r\n\r\n\t\t\t\tif (context.symbolic === true)\r\n\t\t\t\t{\r\n\t\t\t\t\to = { };\r\n\r\n\t\t\t\t\tfor (let i = 0; i < this.properties.length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (this.properties[i].source in value)\r\n\t\t\t\t\t\t\to[this.properties[i].name] = this.properties[i].type.flatten(value[this.properties[i].source], context);\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\to[this.properties[i].name] = this.properties[i].type.flatten(this.properties[i].defvalue, context);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\to = [ ];\r\n\r\n\t\t\t\t\tfor (let i = 0; i < this.properties.length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (this.properties[i].source in value)\r\n\t\t\t\t\t\t\to.push(this.properties[i].type.flatten(value[this.properties[i].source], context));\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\to.push(this.properties[i].type.flatten(this.properties[i].defvalue, context));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n return o;\r\n },\r\n\r\n unflatten: async function (value, context)\r\n {\r\n\t\t\t\tif (value == null) return null;\r\n\r\n\t\t\t\tlet o = { };\r\n\r\n\t\t\t\tif (context.symbolic === true)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (let i = 0; i < this.properties.length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\to[this.properties[i].name] = await this.properties[i].type.unflatten(this.properties[i].name in value ? value[this.properties[i].name] : this.properties[i].defvalue, context);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\r\n\t\t\t\t\tfor (let i = 0; i < this.properties.length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\to[this.properties[i].name] = await this.properties[i].type.unflatten(i in value ? value[i] : this.properties[i].defvalue, context);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n return o;\r\n }\r\n });\r\n\t},\r\n\r\n Class: function (classConstructor)\r\n {\r\n\t\treturn Schema.Type\r\n\t\t({\r\n _constructor: classConstructor,\r\n\r\n constructor: function (classConstructor)\r\n {\r\n this._constructor = classConstructor;\r\n return this;\r\n },\r\n\r\n flatten: function (value, context)\r\n {\r\n return value == null ? null : value.flatten(context);\r\n },\r\n\r\n unflatten: async function (value, context)\r\n {\r\n\t\t\t\treturn value == null ? null : await (new this._constructor()).unflatten(value, context);\r\n }\r\n });\r\n\t},\r\n\r\n\t/*\r\n\t**\tUsed when you want to specify just a single property.\r\n\t*/\r\n Property: function(name, type)\r\n {\r\n return Schema.Type({\r\n\r\n\t\t\tproperty: name,\r\n\t\t\ttype: type,\r\n\r\n\t\t\tname: function (name)\r\n\t\t\t{\r\n\t\t\t\tthis.property = name;\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\tis: function (type)\r\n\t\t\t{\r\n\t\t\t\tthis.type = type;\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n flatten: function (value, context)\r\n {\r\n\t\t\t\tif (value == null) return null;\r\n\r\n\t\t\t\tlet o;\r\n\r\n\t\t\t\tif (context.symbolic === true)\r\n\t\t\t\t{\r\n\t\t\t\t\to = { };\r\n\t\t\t\t\to[this.property] = this.type.flatten(value[this.property], context);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\to = this.type.flatten(value[this.property], context);\r\n\t\t\t\t}\r\n\r\n return o;\r\n },\r\n\r\n unflatten: async function (value, context)\r\n {\r\n\t\t\t\tif (value == null) return null;\r\n\r\n\t\t\t\tlet o = { };\r\n\r\n\t\t\t\tif (context.symbolic === true)\r\n\t\t\t\t\to[this.property] = await this.type.unflatten(value[this.property], context);\r\n\t\t\t\telse\r\n\t\t\t\t\to[this.property] = await this.type.unflatten(value, context);\r\n\r\n return o;\r\n }\r\n });\r\n\t},\r\n\r\n Map: function()\r\n {\r\n return Schema.Type({\r\n\r\n flatten: function (value, context)\r\n {\r\n\t\t\t\tif (value == null) return null;\r\n\r\n\t\t\t\tif (context.symbolic === true)\r\n\t\t\t\t\treturn value;\r\n\r\n\t\t\t\tlet o = [ ];\r\n\r\n\t\t\t\tfor (let i in value)\r\n\t\t\t\t{\r\n\t\t\t\t\to.push(i);\r\n\t\t\t\t\to.push(value[i]);\r\n\t\t\t\t}\r\n\r\n return o;\r\n },\r\n\r\n unflatten: function (value, context)\r\n {\r\n\t\t\t\tif (value == null) return null;\r\n\r\n\t\t\t\tif (context.symbolic === true)\r\n\t\t\t\t\treturn value;\r\n\r\n\t\t\t\tlet o = { };\r\n\r\n\t\t\t\tfor (let i = 0; i < value.length; i += 2)\r\n\t\t\t\t\to[value[i]] = value[i+1];\r\n\r\n return o;\r\n }\r\n });\r\n\t},\r\n\r\n Selector: function ()\r\n {\r\n return Schema.Type({\r\n\r\n\t\t\tconditions: [],\r\n\t\t\tvalue: null,\r\n\r\n\t\t\twhen: function (value, type)\r\n\t\t\t{\r\n\t\t\t\tthis.conditions.push([ (val) => val === value, type ]);\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\twith: function (value)\r\n\t\t\t{\r\n\t\t\t\tthis.value = value;\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n flatten: function (value, context)\r\n {\r\n\t\t\t\tif (value == null) return null;\r\n\r\n\t\t\t\tfor (let i of this.conditions)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (i[0](this.value) === true)\r\n\t\t\t\t\t\treturn i[1].flatten(value, context);\r\n\t\t\t\t}\r\n\r\n return null;\r\n },\r\n\r\n unflatten: async function (value, context)\r\n {\r\n\t\t\t\tif (value == null) return null;\r\n\r\n\t\t\t\tfor (let i of this.conditions)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (i[0](this.value) === true)\r\n\t\t\t\t\t\treturn await i[1].unflatten(value, context);\r\n\t\t\t\t}\r\n\r\n return null;\r\n }\r\n\r\n });\r\n\t}\r\n};\r\n\r\nexport default Schema;\r\n","\r\nimport Class from './class.js';\r\n\r\n/**\r\n**\tClass used to add flattening and unflattening capabilities to any object. A \"flat\" object is an object composed\r\n**\tonly of native types, that is: `null,` `boolean`, `integer`, `number`, `array` or `object`.\r\n*/\r\n\r\nexport default Class.extend\r\n({\r\n\t/**\r\n\t**\tName of the class.\r\n\t*/\r\n\tclassName: \"Flattenable\",\r\n\r\n\t/**\r\n\t**\tType schema used to flatten/unflatten the contents of this class. See Schema class for more information.\r\n\t*/\r\n\ttypeSchema: null,\r\n\r\n\t/**\r\n\t**\tReturns the flattened contents of the object.\r\n\t*/\r\n\tflatten: function (context)\r\n\t{\r\n\t\treturn this.typeSchema.flatten(this, context);\r\n\t},\r\n\r\n\t/**\r\n\t**\tUnflattens the given object and overrides the local contents.\r\n\t*/\r\n\tunflatten: async function (value, context)\r\n\t{\r\n\t\tObject.assign(this, await this.typeSchema.unflatten(value, context));\r\n\t\tawait this.onUnflattened();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/*\r\n\t**\tExecuted when the unflatten() method is called on the object.\r\n\t*/\r\n\tonUnflattened: async function ()\r\n\t{\r\n\t}\r\n});\r\n","\r\nimport Flattenable from './flattenable.js';\r\nimport Schema from './schema.js';\r\nimport Rinn from './alpha.js';\r\n\r\n/**\r\n**\tFlattenable collection class, used to store items and manipulate them. The items should also be flattenable.\r\n*/\r\n\r\nexport default Flattenable.extend\r\n({\r\n\t/**\r\n\t**\tName of the class.\r\n\t*/\r\n\tclassName: \"Collection\",\r\n\r\n\t/**\r\n\t**\tDescribes the type schema of the underlying items.\r\n\t*/\r\n\titemTypeSchema: null,\r\n\r\n\t/**\r\n\t**\tArray of items.\r\n\t*/\r\n\titems: null, /* Array */\r\n\r\n\t/**\r\n\t**\tConstructs the collection.\r\n\t*/\r\n\t__ctor: function (itemTypeSchema)\r\n\t{\r\n\t\tif (!itemTypeSchema) itemTypeSchema = this.itemTypeSchema;\r\n\r\n\t\tif (itemTypeSchema)\r\n\t\t\tthis.typeSchema = Schema.Property('items').is(Schema.Array().of(itemTypeSchema));\r\n\r\n\t\tthis.reset();\r\n\t},\r\n\r\n\t/*\r\n\t**\tExecuted after the collection has been unflattened, re-adds the items to ensure onItemAdded() is called.\r\n\t*/\r\n\tonUnflattened: function()\r\n\t{\r\n\t\tlet items = this.items;\r\n\t\tthis.reset();\r\n\r\n\t\tfor (let i of items)\r\n\t\t\tthis.add(i);\r\n\t},\r\n\r\n\t/**\r\n\t * \tExecuted when the value in `items` is changed.\r\n\t */\r\n\titemsReferenceChanged: function()\r\n\t{\r\n\t},\r\n\r\n\t/*\r\n\t**\tResets the collection to empty. Note that onItemRemoved will not be called.\r\n\t*/\r\n\treset: function ()\r\n\t{\r\n\t\tthis.items = [];\r\n\t\tthis.itemsReferenceChanged();\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/*\r\n\t**\tClears the contents of the collection (removes each item manually, onItemRemoved will be called).\r\n\t*/\r\n\tclear: function ()\r\n\t{\r\n\t\tvar items = this.items;\r\n\t\tthis.reset();\r\n\r\n\t\tfor (var i = 0; i < items.length; i++)\r\n\t\t\tthis.onItemRemoved (items[i], 0);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/*\r\n\t**\tSorts the collection. A comparison function should be provided, or the name of a property to sort by.\r\n\t**\r\n\t**\tObject sort (fn: Function)\r\n\t**\tObject sort (prop: string, [desc:bool=false])\r\n\t*/\r\n\tsort: function (fn, desc)\r\n\t{\r\n\t\tif (typeof(fn) != \"function\")\r\n\t\t{\r\n\t\t\tthis.items.sort(function(a, b)\r\n\t\t\t{\r\n\t\t\t\treturn (a[fn] <= b[fn] ? -1 : 1) * (desc === true ? -1 : 1);\r\n\t\t\t});\r\n\t\t}\r\n\t\telse\r\n\t\t\tthis.items.sort(fn);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/*\r\n\t**\tSearches for an item with the specified fields and returns it. The \"inc\" object is the \"inclusive\" map, meaning all fields must match\r\n\t**\tand the optional \"exc\" is the exclusive map, meaning not even one field should match.\r\n\t**\r\n\t**\tObject findItem (inc: Object, exc: Object);\r\n\t*/\t\r\n\tfindItem: function (inc, exc)\r\n\t{\r\n\t\tif (!this.items) return null;\r\n\r\n\t\tfor (var i = 0; i < this.items.length; i++)\r\n\t\t{\r\n\t\t\tif (exc && Rinn.partialCompare(this.items[i], exc))\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\tif (Rinn.partialCompare(this.items[i], inc))\r\n\t\t\t\treturn this.items[i];\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t},\r\n\r\n\t/*\r\n\t**\tReturns the container array.\r\n\t*/\r\n\tgetItems: function ()\r\n\t{\r\n\t\treturn this.items;\r\n\t},\r\n\r\n\t/*\r\n\t**\tReturns the number of items in the collection.\r\n\t*/\r\n\tlength: function ()\r\n\t{\r\n\t\treturn this.items.length;\r\n\t},\r\n\r\n\t/*\r\n\t**\tReturns true if the collection is empty.\r\n\t*/\r\n\tisEmpty: function ()\r\n\t{\r\n\t\treturn !this.items.length;\r\n\t},\r\n\r\n\t/*\r\n\t**\tReturns the index of the specified item, or -1 if not found.\r\n\t*/\r\n\tindexOf: function (item)\r\n\t{\r\n\t\treturn this.items.indexOf(item);\r\n\t},\r\n\r\n\t/*\r\n\t**\tReturns the item at the specified index, or null if not found. When `relative` is true, negative offsets are allowed such that -1 refers to the last item.\r\n\t*/\r\n\tgetAt: function (index, relative=false)\r\n\t{\r\n\t\tif (index < 0 && relative == true)\r\n\t\t\tindex += this.items.length;\r\n\r\n\t\treturn index >= 0 && index < this.items.length ? this.items[index] : null;\r\n\t},\r\n\r\n\t/*\r\n\t**\tReturns the first item in the collection.\r\n\t*/\r\n\tfirst: function ()\r\n\t{\r\n\t\treturn this.getAt(0);\r\n\t},\r\n\r\n\t/*\r\n\t**\tReturns the last item in the collection.\r\n\t*/\r\n\tlast: function ()\r\n\t{\r\n\t\treturn this.getAt(-1, true);\r\n\t},\r\n\r\n\t/*\r\n\t**\tAdds an item at the specified index, effectively moving the remaining items to the right.\r\n\t*/\r\n\taddAt: function (index, item)\r\n\t{\r\n\t\tif (!item || !this.onBeforeItemAdded (item))\r\n\t\t\treturn this;\r\n\r\n\t\tif (index < 0) index = 0;\r\n\t\tif (index > this.items.length) index = this.items.length;\r\n\r\n\t\tif (index == 0)\r\n\t\t{\r\n\t\t\tthis.items.unshift(item);\r\n\t\t}\r\n\t\telse if (index == this.items.length)\r\n\t\t{\r\n\t\t\tthis.items.push(item);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar tmp = this.items.splice(0, index);\r\n\t\t\ttmp.push(item);\r\n\r\n\t\t\tthis.items = tmp.concat(this.items);\r\n\t\t\tthis.itemsReferenceChanged();\r\n\t\t}\r\n\r\n\t\tthis.onItemAdded (item);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/*\r\n\t**\tAdds an item to the start of the collection, onBeforeItemAdded and onItemAdded will be triggered.\r\n\t*/\r\n\tunshift: function (item)\r\n\t{\r\n\t\treturn this.addAt(0, item);\r\n\t},\r\n\r\n\t/*\r\n\t**\tAdds an item to the end of the collection, onBeforeItemAdded and onItemAdded will be triggered.\r\n\t*/\r\n\tpush: function (item)\r\n\t{\r\n\t\treturn this.addAt(this.items.length, item);\r\n\t},\r\n\r\n\t/*\r\n\t**\tAdds an item to the end of the collection, onBeforeItemAdded and onItemAdded will be triggered.\r\n\t*/\r\n\tadd: function (item)\r\n\t{\r\n\t\treturn this.push(item);\r\n\t},\r\n\r\n\t/*\r\n\t**\tRemoves the item at the specified index. When `relative` is true, negative offsets are allowed such that -1 refers to the last item.\r\n\t*/\r\n\tremoveAt: function (index, relative=false)\r\n\t{\r\n\t\tif (index < 0 && relative == true)\r\n\t\t\tindex += this.items.length;\r\n\r\n\t\tif (index < 0 || index >= this.items.length)\r\n\t\t\treturn null;\r\n\r\n\t\tvar item = this.items[index];\r\n\t\tthis.items.splice (index, 1);\r\n\t\tthis.onItemRemoved (item, index);\r\n\r\n\t\treturn item;\r\n\t},\r\n\r\n\t/*\r\n\t**\tRemoves an item from the end of the collection.\r\n\t*/\r\n\tpop: function (item)\r\n\t{\r\n\t\treturn this.removeAt(-1, true);\r\n\t},\r\n\r\n\t/*\r\n\t**\tRemoves an item from the start of the collection.\r\n\t*/\r\n\tshift: function (item)\r\n\t{\r\n\t\treturn this.removeAt(0);\r\n\t},\r\n\r\n\t/*\r\n\t**\tRemoves the specified item from the collection.\r\n\t*/\r\n\tremove: function (item)\r\n\t{\r\n\t\treturn this.removeAt (this.indexOf(item));\r\n\t},\r\n\r\n\t/*\r\n\t**\tRuns the specified callback for each of the items in the collection, if false is returned by the callback this function\r\n\t**\twill exit immediately. Parameters to the callback are: (item, index, collection).\r\n\t*/\r\n\tforEach: function (callback)\r\n\t{\r\n\t\tif (this.isEmpty())\r\n\t\t\treturn this;\r\n\r\n\t\tfor (var i = 0; i < this.items.length; i++)\r\n\t\t\tif (callback (this.items[i], i, this) === false) break;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/*\r\n\t**\tExecutes a method call with the specified parameters on each of the items in the collection, if false is returned by the\r\n\t**\titem's method this function will exit immediately.\r\n\t*/\r\n\tforEachCall: function (method, ...args)\r\n\t{\r\n\t\tif (this.isEmpty())\r\n\t\t\treturn this;\r\n\r\n\t\tfor (var i = 0; i < this.items.length; i++)\r\n\t\t\tif (this.items[i][method] (...args) === false) break;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/*\r\n\t**\tExactly the same as forEach but in reverse order.\r\n\t*/\r\n\tforEachRev: function (callback)\r\n\t{\r\n\t\tif (this.isEmpty())\r\n\t\t\treturn this;\r\n\r\n\t\tfor (var i = this.items.length-1; i >= 0; i--)\r\n\t\t\tif (callback (this.items[i], i, this) === false) break;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/*\r\n\t**\tExactly the same as forEachCall but in reverse order.\r\n\t*/\r\n\tforEachRevCall: function (method, ...args)\r\n\t{\r\n\t\tif (this.isEmpty())\r\n\t\t\treturn this;\r\n\r\n\t\tfor (var i = this.items.length-1; i >= 0; i--)\r\n\t\t\tif (this.items[i][method] (...args) === false) break;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/*\r\n\t**\tHandler for the beforeItemAdded event. If returns false the item will not be added.\r\n\t*/\r\n\tonBeforeItemAdded: function (item)\r\n\t{\r\n\t\treturn true;\r\n\t},\r\n\r\n\t/*\r\n\t**\tHandler for the itemAdded event.\r\n\t*/\r\n\tonItemAdded: function (item)\r\n\t{\r\n\t},\r\n\r\n\t/*\r\n\t**\tHandler for the itemRemoved event.\r\n\t*/\r\n\tonItemRemoved: function (item)\r\n\t{\r\n\t}\r\n});\r\n","\nimport Rinn from './alpha.js';\n\n/**\n**\tTemplating module. The template formats available are shown below, note that the sym-open and sym-close symbols are by\n**\tdefault the square brackets, however those can be modified since are just parameters.\n**\n**\tHTML Escaped Output:\t\t\t[data.value]\t\t\t\t\tEscapes HTML characters from the output.\n**\tRaw Output:\t\t\t\t\t\t[!data.value]\t\t\t\t\tDoes not escape HTML characters from the output (used to output direct HTML).\n**\tDouble-Quoted Escaped Output:\t[data.value]\t\t\t\t\tEscapes HTML characters and surrounds with double quotes.\n**\tImmediate Reparse:\t\t\t\t[<....] [@....] \"...\" '...'\t\tReparses the contents as if parseTemplate() was called again.\n**\tImmediate Output:\t\t\t\t[:...]\t\t\t\t\t\t\tTakes the contents and outputs exactly as-is without format and optionally surrounded by the\n**\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsym-open and sym-close symbols when the first character is not '<', sym_open or space.\n**\tFiltered Output:\t\t\t\t[functionName ... <expr> ...]\tRuns a function call, 'expr' can be any of the allowed formats shown here (nested if desired),\n**\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfunctionName should map to one of the available expression functions registered in the\n**\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRinn.Template.functions map, each of which have their own parameters.\n*/\n\nlet Template =\n{\n\t/*\n\t**\tStrict mode flag. When set, any undefined expression function will trigger an exception.\n\t*/\n\tstrict: false,\n\n\t/**\n\t**\tParses a template and returns the compiled 'parts' structure to be used by the 'expand' method.\n\t**\n\t**\t>> array parseTemplate (string template, char sym_open, char sym_close, bool is_tpl=false);\n\t*/\n\tparseTemplate: function (template, sym_open, sym_close, is_tpl=false, root=1)\n\t{\n\t\tlet nflush = 'string', flush = null, state = 0, count = 0;\n\t\tlet str = '', parts = [], mparts = parts, nparts = false;\n\n\t\tif (is_tpl === true)\n\t\t{\n\t\t\ttemplate = template.trim();\n\t\t\tnflush = 'identifier';\n\t\t\tstate = 10;\n\n\t\t\tmparts.push(parts = []);\n\t\t}\n\n\t\ttemplate += \"\\0\";\n\n\t\tfunction unescape (value)\n\t\t{\n\t\t\tif (typeof(value) == 'object')\n\t\t\t{\n\t\t\t\tif (value instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tfor (let i = 0; i < value.length; i++)\n\t\t\t\t\t\tunescape(value[i]);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tvalue.data = unescape(value.data);\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < value.length; i++)\n\t\t\t{\n\t\t\t\tif (value[i] == '\\\\')\n\t\t\t\t{\n\t\t\t\t\tlet r = value[i+1];\n\n\t\t\t\t\tswitch (r)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase 'n': r = \"\\n\"; break;\n\t\t\t\t\t\tcase 'r': r = \"\\r\"; break;\n\t\t\t\t\t\tcase 'f': r = \"\\f\"; break;\n\t\t\t\t\t\tcase 'v': r = \"\\v\"; break;\n\t\t\t\t\t\tcase 't': r = \"\\t\"; break;\n\t\t\t\t\t\tcase 's': r = \"\\s\"; break;\n\t\t\t\t\t\tcase '\"': r = \"\\\"\"; break;\n\t\t\t\t\t\tcase \"'\": r = \"\\'\"; break;\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = value.substr(0, i) + r + value.substr(i+2);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t}\n\n\t\tfunction emit (type, data)\n\t\t{\n\t\t\tif (type == 'template')\n\t\t\t{\n\t\t\t\tdata = Template.parseTemplate (data, sym_open, sym_close, true, 0);\n\t\t\t}\n\t\t\telse if (type == 'parse')\n\t\t\t{\n\t\t\t\tdata = Template.parseTemplate (data, sym_open, sym_close, false, 0);\n\t\t\t\ttype = 'base-string';\n\n\t\t\t\tif (Rinn.typeOf(data) == 'array')\n\t\t\t\t{\n\t\t\t\t\ttype = data[0].type;\n\t\t\t\t\tdata = data[0].data;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (type == 'parse-trim-merge')\n\t\t\t{\n\t\t\t\tdata = Template.parseTemplate (data.trim().split('\\n').map(i => i.trim()).join(\"\\n\"), sym_open, sym_close, false, 0);\n\t\t\t}\n\t\t\telse if (type == 'parse-merge')\n\t\t\t{\n\t\t\t\tdata = Template.parseTemplate (data, sym_open, sym_close, false, 0);\n\t\t\t}\n\t\t\telse if (type == 'parse-merge-alt')\n\t\t\t{\n\t\t\t\tdata = Template.parseTemplate (data, '{', '}', false, 0);\n\t\t\t}\n\n\t\t\tif (type == 'parse-merge' || type == 'parse-merge-alt' || type == 'parse-trim-merge')\n\t\t\t{\n\t\t\t\tfor (let i = 0; i < data.length; i++)\n\t\t\t\t{\n\t\t\t\t\tparts.push(data[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tparts.push({ type: type, data: data });\n\n\t\t\tif (nparts)\n\t\t\t{\n\t\t\t\tmparts.push(parts = []);\n\t\t\t\tnparts = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < template.length; i++)\n\t\t{\n\t\t\tif (template[i] == '\\\\')\n\t\t\t{\n\t\t\t\tstr += '\\\\';\n\t\t\t\tstr += template[++i];\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tswitch (state)\n\t\t\t{\n\t\t\t\tcase 0:\n\t\t\t\t\tif (template[i] == '\\0')\n\t\t\t\t\t{\n\t\t\t\t\t\tflush = 'string';\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == sym_open && template[i+1] == '<')\n\t\t\t\t\t{\n\t\t\t\t\t\tstate = 1; count = 1;\n\t\t\t\t\t\tflush = 'string';\n\t\t\t\t\t\tnflush = 'parse-merge';\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == sym_open && template[i+1] == '@')\n\t\t\t\t\t{\n\t\t\t\t\t\tstate = 1; count = 1;\n\t\t\t\t\t\tflush = 'string';\n\t\t\t\t\t\tnflush = 'parse-trim-merge';\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == sym_open && template[i+1] == ':')\n\t\t\t\t\t{\n\t\t\t\t\t\tstate = 12; count = 1;\n\t\t\t\t\t\tflush = 'string';\n\t\t\t\t\t\tnflush = 'string';\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == sym_open)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate = 1; count = 1;\n\t\t\t\t\t\tflush = 'string';\n\t\t\t\t\t\tnflush = 'template';\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tstr += template[i];\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\n\t\t\t\tcase 1:\n\t\t\t\t\tif (template[i] == '\\0')\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow new Error (\"Parse error: Unexpected end of template\");\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (template[i] == sym_close)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount--;\n\t\n\t\t\t\t\t\tif (count < 0)\n\t\t\t\t\t\t\tthrow new Error (\"Parse error: Unmatched \" + sym_close);\n\n\t\t\t\t\t\tif (count == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate = 0;\n\t\t\t\t\t\t\tflush = nflush;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == sym_open)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tstr += template[i];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 10:\n\t\t\t\t\tif (template[i] == '\\0')\n\t\t\t\t\t{\n\t\t\t\t\t\tflush = nflush;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == '.')\n\t\t\t\t\t{\n\t\t\t\t\t\temit (nflush, str);\n\t\t\t\t\t\temit ('access', '.');\n\n\t\t\t\t\t\tnflush = 'identifier';\n\t\t\t\t\t\tstr = '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i].match(/[\\t\\n\\r\\f\\v ]/) != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tflush = nflush;\n\t\t\t\t\t\tnflush = 'identifier';\n\t\t\t\t\t\tnparts = true;\n\n\t\t\t\t\t\twhile (template[i].match(/[\\t\\n\\r\\f\\v ]/) != null) i++;\n\t\t\t\t\t\ti--;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == sym_open && template[i+1] == '<')\n\t\t\t\t\t{\n\t\t\t\t\t\tif (str) flush = nflush;\n\t\t\t\t\t\tstate = 11; count = 1; nflush = 'parse-merge';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == sym_open && template[i+1] == '@')\n\t\t\t\t\t{\n\t\t\t\t\t\tif (str) flush = nflush;\n\t\t\t\t\t\tstate = 11; count = 1; nflush = 'parse-trim-merge';\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == '\"')\n\t\t\t\t\t{\n\t\t\t\t\t\tif (str) flush = nflush;\n\t\t\t\t\t\tstate = 14; count = 1; nflush = 'parse-merge';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == '\\'')\n\t\t\t\t\t{\n\t\t\t\t\t\tif (str) flush = nflush;\n\t\t\t\t\t\tstate = 15; count = 1; nflush = 'parse-merge';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == '`')\n\t\t\t\t\t{\n\t\t\t\t\t\tif (str) flush = nflush;\n\t\t\t\t\t\tstate = 16; count = 1; nflush = 'parse-merge-alt';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == sym_open && template[i+1] == ':')\n\t\t\t\t\t{\n\t\t\t\t\t\tif (str) flush = nflush;\n\t\t\t\t\t\tstate = 13; count = 1; nflush = 'string';\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == sym_open)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (str) emit (nflush, str);\n\t\t\t\t\t\tstate = 11; count = 1; str = ''; nflush = 'parse';\n\t\t\t\t\t\tstr += template[i];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (nflush != 'identifier')\n\t\t\t\t\t{\n\t\t\t\t\t\temit (nflush, str);\n\t\t\t\t\t\tstr = '';\n\t\t\t\t\t\tnflush = 'identifier';\n\t\t\t\t\t}\n\n\t\t\t\t\tstr += template[i];\n\t\t\t\t\tbreak;\n\t\n\t\t\t\tcase 11:\n\t\t\t\t\tif (template[i] == '\\0')\n\t\t\t\t\t\tthrow new Error (\"Parse error: Unexpected end of template\");\n\t\n\t\t\t\t\tif (template[i] == sym_close)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount--;\n\t\n\t\t\t\t\t\tif (count < 0)\n\t\t\t\t\t\t\tthrow new Error (\"Parse error: Unmatched \" + sym_close);\n\n\t\t\t\t\t\tif (count == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate = 10;\n\t\n\t\t\t\t\t\t\tif (nflush == 'parse-merge' || nflush == 'parse-merge-alt' || nflush == 'parse-trim-merge')\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == sym_open)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tstr += template[i];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 12:\n\t\t\t\t\tif (template[i] == '\\0')\n\t\t\t\t\t\tthrow new Error (\"Parse error: Unexpected end of template\");\n\t\n\t\t\t\t\tif (template[i] == sym_close)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount--;\n\t\n\t\t\t\t\t\tif (count < 0)\n\t\t\t\t\t\t\tthrow new Error (\"Parse error: Unmatched \" + sym_close);\n\n\t\t\t\t\t\tif (count == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (str.length != 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (!(str[0] == '<' || str[0] == '[' || str[0] == ' '))\n\t\t\t\t\t\t\t\t\tstr = sym_open + str + sym_close;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tstate = 0;\n\t\t\t\t\t\t\tflush = nflush;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == sym_open)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tstr += template[i];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 13:\n\t\t\t\t\tif (template[i] == '\\0')\n\t\t\t\t\t\tthrow new Error (\"Parse error: Unexpected end of template\");\n\n\t\t\t\t\tif (template[i] == sym_close)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount--;\n\t\n\t\t\t\t\t\tif (count < 0)\n\t\t\t\t\t\t\tthrow new Error (\"Parse error: Unmatched \" + sym_close);\n\n\t\t\t\t\t\tif (count == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!(str[0] == '<' || str[0] == '[' || str[0] == ' '))\n\t\t\t\t\t\t\t\tstr = sym_open + str + sym_close;\n\n\t\t\t\t\t\t\tstate = 10;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (template[i] == sym_open)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tstr += template[i];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 14:\n\t\t\t\t\tif (template[i] == '\\0')\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow new Error (\"Parse error: Unexpected end of template\");\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (template[i] == '\"')\n\t\t\t\t\t{\n\t\t\t\t\t\tcount--;\n\t\n\t\t\t\t\t\tif (count < 0)\n\t\t\t\t\t\t\tthrow new Error (\"Parse error: Unmatched \" + '\"');\n\n\t\t\t\t\t\tif (count == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate = 10;\n\t\n\t\t\t\t\t\t\tif (nflush == 'parse-merge' || nflush == 'parse-merge-alt' || nflush == 'parse-trim-merge')\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tstr += template[i];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 15:\n\t\t\t\t\tif (template[i] == '\\0')\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow new Error (\"Parse error: Unexpected end of template\");\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (template[i] == '\\'')\n\t\t\t\t\t{\n\t\t\t\t\t\tcount--;\n\t\n\t\t\t\t\t\tif (count < 0)\n\t\t\t\t\t\t\tthrow new Error (\"Parse error: Unmatched \" + '\\'');\n\n\t\t\t\t\t\tif (count == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate = 10;\n\t\n\t\t\t\t\t\t\tif (nflush == 'parse-merge' || nflush == 'parse-merge-alt' || nflush == 'parse-trim-merge')\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tstr += template[i];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 16:\n\t\t\t\t\tif (template[i] == '\\0')\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow new Error (\"Parse error: Unexpected end of template\");\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (template[i] == '`')\n\t\t\t\t\t{\n\t\t\t\t\t\tcount--;\n\t\n\t\t\t\t\t\tif (count < 0)\n\t\t\t\t\t\t\tthrow new Error (\"Parse error: Unmatched \" + '`');\n\n\t\t\t\t\t\tif (count == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate = 10;\n\t\n\t\t\t\t\t\t\tif (nflush == 'parse-merge' || nflush == 'parse-merge-alt' || nflush == 'parse-trim-merge')\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tstr += template[i];\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (flush)\n\t\t\t{\n\t\t\t\temit (flush, str);\n\t\t\t\tflush = str = '';\n\t\t\t}\n\t\t}\n\n\t\tif (!is_tpl)\n\t\t{\n\t\t\tlet i = 0;\n\t\t\twhile (i < mparts.length)\n\t\t\t{\n\t\t\t\tif (mparts[i].type == 'string' && mparts[i].data == '')\n\t\t\t\t\tmparts.splice(i, 1);\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\ti = mparts.length-1;\n\t\t\twhile (i > 0)\n\t\t\t{\n\t\t\t\tif (mparts[i].type == 'string' && mparts[i].data == '')\n\t\t\t\t\tmparts.splice(i--, 1);\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (mparts.length == 0)\n\t\t\t\tmparts.push({ type: 'string', data: '' });\n\t\t}\n\n\t\tif (root)\n\t\t\tunescape(mparts);\n\n\t\treturn mparts;\n\t},\n\n\t/**\n\t**\tParses a template and returns the compiled 'parts' structure to be used by the 'expand' method. This\n\t**\tversion assumes the sym_open and sym_close chars are [ and ] respectively.\n\t**\n\t**\t>> array parse (string template);\n\t*/\n\tparse: function (template)\n\t{\n\t\treturn this.parseTemplate(template.trim(), '[', ']', false);\n\t},\n\n\t/**\n\t**\tRemoves all static parts from a parsed template.\n\t**\n\t**\t>> array clean (array parts);\n\t*/\n\tclean: function (parts)\n\t{\n\t\tfor (let i = 0; i < parts.length; i++)\n\t\t{\n\t\t\tif (parts[i].type != 'template')\n\t\t\t{\n\t\t\t\tparts.splice(i, 1);\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\n\t\treturn parts;\n\t},\n\n\t/**\n\t**\tExpands a template using the given data object, ret can be set to 'text' or 'obj' allowing to expand the template as\n\t**\ta string (text) or an array of objects (obj) respectively. If none provided it will be expanded as text.\n\t**\n\t**\t>> string/array expand (array parts, object data, string ret='text', string mode='base-string');\n\t*/\n\texpand: function (parts, data, ret='text', mode='base-string')\n\t{\n\t\tlet s = [];\n\n\t\t// Expand variable parts.\n\t\tif (mode == 'var')\n\t\t{\n\t\t\tlet escape = true;\n\t\t\tlet quote = false;\n\n\t\t\tlet root = data;\n\t\t\tlet last = null;\n\t\t\tlet first = true;\n\t\t\tlet str = '';\n\n\t\t\tfor (let i = 0; i < parts.length && data != null; i++)\n\t\t\t{\n\t\t\t\tswitch (parts[i].type)\n\t\t\t\t{\n\t\t\t\t\tcase 'identifier':\n\t\t\t\t\tcase 'string':\n\t\t\t\t\t\tstr += parts[i].data;\n\t\t\t\t\t\tlast = null;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'template':\n\t\t\t\t\t\tlast = this.expand(parts[i].data, root, 'arg', 'template');\n\t\t\t\t\t\tstr += typeof(last) != 'object' ? last : '';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'base-string':\n\t\t\t\t\t\tstr += this.expand(parts[i].data, root, 'arg', 'base-string');\n\t\t\t\t\t\tlast = null;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'access':\n\t\t\t\t\t\tif (!last || typeof(last) != 'object')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (str == '') str = 'this';\n\n\t\t\t\t\t\t\twhile (true)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (str[0] == '!')\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tstr = str.substr(1);\n\t\t\t\t\t\t\t\t\tescape = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (str[0] == '$')\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tstr = str.substr(1);\n\t\t\t\t\t\t\t\t\tquote = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (str != 'this' && data != null)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet tmp = data;\n\t\t\t\t\t\t\t\tdata = (str in data) ? data[str] : null;\n\n\t\t\t\t\t\t\t\tif (data === null && first)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tif (str in Template.functions)\n\t\t\t\t\t\t\t\t\t\tdata = Template.functions[str] (null, null, tmp);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tfirst = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdata = last;\n\n\t\t\t\t\t\tstr = '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (str != '')\n\t\t\t{\n\t\t\t\tif (str[0] == '!')\n\t\t\t\t{\n\t\t\t\t\tstr = str.substr(1);\n\t\t\t\t\tescape = false;\n\t\t\t\t}\n\t\t\t\telse if (str[0] == '$')\n\t\t\t\t{\n\t\t\t\t\tstr = str.substr(1);\n\t\t\t\t\tquote = true;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (str != 'this')\n\t\t\t{\n\t\t\t\tlet failed = false;\n\n\t\t\t\tif (data != null)\n\t\t\t\t{\n\t\t\t\t\tif (!(str in data))\n\t\t\t\t\t{\n\t\t\t\t\t\tfailed = true;\n\t\t\t\t\t\tdata = null;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tdata = data[str];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tfailed = true;\n\n\t\t\t\tif (failed && parts.length == 1)\n\t\t\t\t{\n\t\t\t\t\tif (Template.strict == true)\n\t\t\t\t\t\tthrow new Error ('Expression function `'+str+'` not found.');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof(data) == 'string')\n\t\t\t{\n\t\t\t\tif (escape)\n\t\t\t\t\tdata = data.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\n\t\t\t\tif (quote)\n\t\t\t\t\tdata = '\"' + data + '\"';\n\t\t\t}\n\n\t\t\ts.push(data);\n\t\t}\n\n\t\t// Expand variable parts and returns a reference to it.\n\t\tif (ret == 'varref')\n\t\t{\n\t\t\tlet root = data;\n\t\t\tlet last = null;\n\t\t\tlet first = true;\n\t\t\tlet str = '';\n\n\t\t\tfor (let i = 0; i < parts.length && data != null; i++)\n\t\t\t{\n\t\t\t\tswitch (parts[i].type)\n\t\t\t\t{\n\t\t\t\t\tcase 'identifier':\n\t\t\t\t\tcase 'string':\n\t\t\t\t\t\tstr += parts[i].data;\n\t\t\t\t\t\tlast = null;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'template':\n\t\t\t\t\t\tlast = this.expand(parts[i].data, root, 'arg', 'template');\n\t\t\t\t\t\tstr += typeof(last) != 'object' ? last : '';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'base-string':\n\t\t\t\t\t\tstr += this.expand(parts[i].data, root, 'arg', 'base-string');\n\t\t\t\t\t\tlast = null;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'access':\n\t\t\t\t\t\tif (!last || typeof(last) != 'object')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (str == '') str = 'this';\n\n\t\t\t\t\t\t\twhile (true)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (str[0] == '!')\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tstr = str.substr(1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (str[0] == '$')\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tstr = str.substr(1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (str != 'this' && data != null)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet tmp = data;\n\t\t\t\t\t\t\t\tdata = (str in data) ? data[str] : null;\n\n\t\t\t\t\t\t\t\tif (data === null && first)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tif (str in Template.functions)\n\t\t\t\t\t\t\t\t\t\tdata = Template.functions[str] (null, null, tmp);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tfirst = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdata = last;\n\n\t\t\t\t\t\tstr = '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (str != '')\n\t\t\t{\n\t\t\t\tif (str[0] == '!')\n\t\t\t\t{\n\t\t\t\t\tstr = str.substr(1);\n\t\t\t\t}\n\t\t\t\telse if (str[0] == '$')\n\t\t\t\t{\n\t\t\t\t\tstr = str.substr(1);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn str != 'this' ? [data, str] : null;\n\t\t}\n\n\t\t// Expand function parts.\n\t\tif (mode == 'fn')\n\t\t{\n\t\t\tvar args = [];\n\n\t\t\targs.push(Template.expand(parts[0], data, 'text', 'base-string'));\n\n\t\t\tif ('_'+args[0] in Template.functions)\n\t\t\t\targs[0] = '_'+args[0];\n\n\t\t\tif (!(args[0] in Template.functions))\n\t\t\t{\n\t\t\t\tif (Template.strict == true)\n\t\t\t\t\tthrow new Error ('Expression function `'+args[0]+'` not found.');\n\n\t\t\t\treturn `(Unknown: ${args[0]})`;\n\t\t\t}\n\n\t\t\tif (args[0][0] == '_')\n\t\t\t\treturn Template.functions[args[0]] (parts, data);\n\n\t\t\tfor (let i = 1; i < parts.length; i++)\n\t\t\t\targs.push(Template.expand(parts[i], data, 'arg', 'base-string'));\n\n\t\t\ts.push(Template.functions[args[0]] (args, parts, data));\n\t\t}\n\n\t\t// Template mode.\n\t\tif (mode == 'template')\n\t\t{\n\t\t\tif (parts.length == 1)\n\t\t\t{\n\t\t\t\tif (parts[0].length == 1 && parts[0][0].type == 'string')\n\t\t\t\t\treturn parts[0][0].data;\n\n\t\t\t\tif (parts[0].length == 1 && parts[0][0].type == 'identifier')\n\t\t\t\t{\n\t\t\t\t\tlet name = parts[0][0].data;\n\n\t\t\t\t\tif (name in Template.functions || '_'+name in Template.functions)\n\t\t\t\t\t\treturn Template.expand(parts, data, ret, 'fn');\n\t\t\t\t}\n\t\n\t\t\t\treturn Template.expand(parts[0], data, ret, 'var');\n\t\t\t}\n\n\t\t\treturn Template.expand(parts, data, ret, 'fn');\n\t\t}\n\n\t\t// Expand parts.\n\t\tif (mode == 'base-string')\n\t\t{\n\t\t\tlet index = -1;\n\n\t\t\tfor (let i of parts)\n\t\t\t{\n\t\t\t\tlet tmp = null;\n\t\t\t\tindex++;\n\n\t\t\t\tswitch (i.type)\n\t\t\t\t{\n\t\t\t\t\tcase 'template':\n\t\t\t\t\t\ttmp = Template.expand(i.data, data, ret, 'template');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'string': case 'identifier':\n\t\t\t\t\t\ttmp = i.data;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'base-string':\n\t\t\t\t\t\ttmp = Template.expand(i.data, data, ret, 'base-string');\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (ret == 'void')\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (ret == 'last' && index != parts.length-1)\n\t\t\t\t\tcontinue;\n\n\t\t\t\ts.push(tmp);\n\t\t\t}\n\t\t}\n\n\t\t// Return types for direct objects.\n\t\tif (ret == 'obj') return s;\n\n\t\tif (ret == 'last')\n\t\t{\n\t\t\tif (typeOf(s) == 'Rose\\\\Arry')\n\t\t\t\ts = s[0];\n\n\t\t\treturn s;\n\t\t}\n\n\t\t// When the output is not really needed.\n\t\tif (ret == 'void') return null;\n\n\t\t// Return as argument ('object' if only one, or string if more than one), that is, the first item in the result.\n\t\tif (ret == 'arg')\n\t\t{\n\t\t\tif (Rinn.typeOf(s) == 'array')\n\t\t\t{\n\t\t\t\tif (s.length != 1)\n\t\t\t\t\treturn s.join('');\n\n\t\t\t\treturn s[0];\n\t\t\t}\n\n\t\t\treturn s;\n\t\t}\n\n\t\tif (ret == 'text' && Rinn.typeOf(s) == 'array')\n\t\t{\n\t\t\tlet f = (e => e != null && typeof(e) == 'object' ? ('map' in e ? e.map(f).join('') : ('join' in e ? e.join('') : e.toString())) : e);\n\t\t\ts = s.map(f).join('');\n\t\t}\n\n\t\treturn s;\n\t},\n\n\t/**\n\t**\tParses the given template and returns a function that when called with an object will expand the template.\n\t**\n\t**\t>> object compile (string template);\n\t*/\n\tcompile: function (template)\n\t{\n\t\ttemplate = Template.parse(template);\n\n\t\treturn function (data=null, mode='text') {\n\t\t\treturn Template.expand(template, data ? data : { }, mode);\n\t\t};\n\t},\n\n\t/**\n\t**\tParses and expands the given template immediately.\n\t**\n\t**\t>> object eval (string template, object data, string mode='text');\n\t*/\n\teval: function (template, data=null, mode='text')\n\t{\n\t\ttemplate = Template.parse(template);\n\t\treturn Template.expand(template, data ? data : { }, mode);\n\t},\n\n\t/**\n\t**\tExpands the template as 'arg' and returns the result.\n\t**\n\t**\t>> object value (string parts, object data);\n\t*/\n\tvalue: function (parts, data=null)\n\t{\n\t\treturn Rinn.typeOf(parts) != 'array' ? parts : Template.expand(parts, data ? data : { }, 'arg');\n\t},\n\n\t/**\n\t**\tRegisters an expression function.\n\t**\n\t**\t>> object register (string name, function fn);\n\t*/\n\tregister: function (name, fn)\n\t{\n\t\tTemplate.functions[name] = fn;\n\t},\n\n\t/**\n\t**\tCalls an expression function.\n\t**\n\t**\t>> object call (string name, object args, object data);\n\t*/\n\t'call': function (name, args, data=null)\n\t{\n\t\tif (name in Template.functions)\n\t\t\treturn Template.functions[name] (args, null, data);\n\n\t\treturn null;\n\t},\n\n\t/**\n\t**\tReturns a map given a 'parts' array having values of the form \"name: value\" or \":name value\".\n\t**\n\t**\t>> Map getNamedValues (array parts, object data, int i=1, bool expanded=true);\n\t*/\n\tgetNamedValues: function (parts, data, i=1, expanded=true)\n\t{\n\t\tlet s = { };\n\t\tlet mode = 0;\n\t\n\t\tfor (; i < parts.length; i += 2)\n\t\t{\n\t\t\tlet key = Template.expand(parts[i], data, 'arg');\n\n\t\t\tif (!mode) {\n\t\t\t\tif (key.startsWith(':')) mode = 1; else mode = key.endsWith(':') ? 2 : 3;\n\t\t\t}\n\n\t\t\tif (mode == 1)\n\t\t\t\tkey = key.substr(1);\n\t\t\telse if (mode == 2)\n\t\t\t\tkey = key.substr(0, key.length-1);\n\n\t\t\tif (expanded)\n\t\t\t\ts[key] = Template.expand(parts[i+1], data, 'arg');\n\t\t\telse\n\t\t\t\ts[key] = parts[i+1];\n\t\t}\n\n\t\treturn s;\n\t}\n};\n\n\n/**\n**\tTemplate functions, functions that are used to format data. Each function takes three parameters (args, parts and data). By default the function arguments\n**\tare expanded and passed via 'args' for convenience, however if the function name starts with '_' the 'args' parameter will be skipped and only (parts, data)\n**\twill be available, each 'part' must be expanded manually by calling Template.expand.\n*/\n\nTemplate.functions =\n{\n\t/**\n\t**\tExpression functions.\n\t*/\n\t'global': function(args) { return globalThis; },\n\t'null': function(args) { return null; },\n\t'true': function(args) { return true; },\n\t'false': function(args) { return false; },\n\n\t'len': function(args) { return args[1].toString().length; },\n\t'int': function(args) { return ~~args[1]; },\n\t'str': function(args) { return args[1].toString(); },\n\t'float': function(args) { return parseFloat(args[1]); },\n\t'chr': function(args) { return String.fromCharCode(args[1]); },\n\t'ord': function(args) { return args[1].toString().charCodeAt(0); },\n\n\t'not': function(args) { return !args[1]; },\n\t'neg': function(args) { return -args[1]; },\n\t'abs': function(args) { return Math.abs(args[1]); },\n\n\t'and': function(args) { for (let i = 1; i < args.length; i++) if (!args[i]) return false; return true; },\n\t'or': function(args) { for (let i = 1; i < args.length; i++) if (~~args[i]) return true; return false; },\n\n\t'eq': function(args) { return args[1] == args[2]; },\n\t'ne': function(args) { return args[1] != args[2]; },\n\t'lt': function(args) { return args[1] < args[2]; },\n\t'le': function(args) { return args[1] <= args[2]; },\n\t'gt': function(args) { return args[1] > args[2]; },\n\t'ge': function(args) { return args[1] >= args[2]; },\n\t'isnotnull': function(args) { return !!args[1]; },\n\t'isnull': function(args) { return !args[1]; },\n\t'iszero': function(args) { return parseInt(args[1]) == 0; },\n\n\t'eq?': function(args) { return args[1] == args[2]; },\n\t'ne?': function(args) { return args[1] != args[2]; },\n\t'lt?': function(args) { return args[1] < args[2]; },\n\t'le?': function(args) { return args[1] <= args[2]; },\n\t'gt?': function(args) { return args[1] > args[2]; },\n\t'ge?': function(args) { return args[1] >= args[2]; },\n\t'notnull?': function(args) { return !!args[1]; },\n\t'null?': function(args) { return !args[1]; },\n\t'zero?': function(args) { return parseInt(args[1]) == 0; },\n\n\t'typeof': function(args) { return Rinn.typeOf(args[1]); },\n\n\t'*': function(args) { let x = args[1]; for (let i = 2; i < args.length; i++) x *= args[i]; return x; },\n\t'/': function(args) { let x = args[1]; for (let i = 2; i < args.length; i++) x /= args[i]; return x; },\n\t'+': function(args) { let x = args[1]; for (let i = 2; i < args.length; i++) x -= -args[i]; return x; },\n\t'-': function(args) { let x = args[1]; for (let i = 2; i < args.length; i++) x -= args[i]; return x; },\n\t'mul': function(args) { let x = args[1]; for (let i = 2; i < args.length; i++) x *= args[i]; return x; },\n\t'div': function(args) { let x = args[1]; for (let i = 2; i < args.length; i++) x /= args[i]; return x; },\n\t'sum': function(args) { let x = args[1]; for (let i = 2; i < args.length; i++) x -= -args[i]; return x; },\n\t'sub': function(args) { let x = args[1]; for (let i = 2; i < args.length; i++) x -= args[i]; return x; },\n\t'mod': function(args) { let x = args[1]; for (let i = 2; i < args.length; i++) x %= args[i]; return x; },\n\t'pow': function(args) { let x = args[1]; for (let i = 2; i < args.length; i++) x = Math.pow(x, args[i]); return x; },\n\n\t/**\n\t**\tReturns the JSON representation of the expression.\n\t**\n\t**\tdump <expr>\n\t*/\n\t'dump': function (args)\n\t{\n\t\treturn JSON.stringify(args[1]);\n\t},\n\n\t/**\n\t**\tSets one or more variables in the data context.\n\t**\n\t**\tset <var-name> <expr> [<var-name> <expr>]*\n\t*/\n\t'_set': function (parts, data)\n\t{\n\t\tfor (let i = 1; i+1 < parts.length; i += 2)\n\t\t{\n\t\t\tlet value = Template.value(parts[i+1], data);\n\n\t\t\tif (parts[i].length > 1)\n\t\t\t{\n\t\t\t\tlet ref = Template.expand(parts[i], data, 'varref');\n\t\t\t\tif (ref != null) ref[0][ref[1]] = value;\n\t\t\t}\n\t\t\telse\n\t\t\t\tdata[Template.value(parts[i], data)] = value;\n\t\t}\n\n\t\treturn '';\n\t},\n\n\t/**\n\t**\tRemoves one or more variables from the data context.\n\t**\n\t**\tunset <var-name> [<var-name>]*\n\t*/\n\t'_unset': function (parts, data)\n\t{\n\t\tfor (let i = 1; i < parts.length; i++)\n\t\t{\n\t\t\tif (parts[i].length > 1)\n\t\t\t{\n\t\t\t\tlet ref = Template.expand(parts[i], data, 'varref');\n\t\t\t\tif (ref != null) delete ref[0][ref[1]];\n\t\t\t}\n\t\t\telse\n\t\t\t\tdelete data[Template.value(parts[i], data)];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\n\t/**\n\t**\tReturns the expression without white-space on the left or right. The expression can be a string or an array.\n\t**\n\t**\ttrim <expr>\n\t*/\n\t'trim': function (args)\n\t{\n\t\treturn args[1] ? (typeof(args[1]) == \"object\" ? args[1].map(e => e.trim()) : args[1].trim()) : '';\n\t},\n\n\t/**\n\t**\tReturns the expression in uppercase. The expression can be a string or an array.\n\t**\n\t**\tupper <expr>\n\t*/\n\t'upper': function (args)\n\t{\n\t\treturn args[1] ? (typeof(args[1]) == \"object\" ? args[1].map(e => e.toUpperCase()) : args[1].toUpperCase()) : '';\n\t},\n\n\t/**\n\t**\tReturns the expression in lower. The expression can be a string or an array.\n\t**\n\t**\tlower <expr>\n\t*/\n\t'lower': function (args)\n\t{\n\t\treturn args[1] ? (typeof(args[1]) == \"object\" ? args[1].map(e => e.toLowerCase()) : args[1].toLowerCase()) : '';\n\t},\n\n\t/**\n\t**\tReturns a sub-string of the given string.\n\t**\n\t**\tsubstr <start> <count> <string>\n\t**\tsubstr <start> <string>\n\t*/\n\t'substr': function (args)\n\t{\n\t\tlet s = args[args.length-1].toString();\n\n\t\tlet start = 0;\n\t\tlet count = null;\n\n\t\tif (args.length == 4)\n\t\t{\n\t\t\tstart = ~~(args[1]);\n\t\t\tcount = ~~(args[2]);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tstart = ~~(args[1]);\n\t\t\tcount = null;\n\t\t}\n\n\t\tif (start < 0) start += s.length;\n\t\tif (count < 0) count += s.length;\n\n\t\tif (count === null)\n\t\t\tcount = s.length - start;\n\n\t\treturn s.substr(start, count);\n\t},\n\n\t/**\n\t**\tReplaces a matching string with the given replacement string in a given text.\n\t**\n\t**\treplace <search> <replacement> <text>\n\t*/\n\t'replace': function (args)\n\t{\n\t\treturn args[3].split(args[1]).join(args[2]);\n\t},\n\n\t/**\n\t**\tConverts all new-line chars in the expression to <br/>, the expression can be a string or an array.\n\t**\n\t**\tnl2br <expr>\n\t*/\n\t'nl2br': function (args)\n\t{\n\t\treturn args[1] ? (typeof(args[1]) == \"object\" ? args[1].map(e => e.replace(/\\n/g, \"<br/>\")) : args[1].replace(/\\n/g, \"<br/>\")) : '';\n\t},\n\n\t/**\n\t**\tReturns the expression inside an XML tag named 'tag-name', the expression can be a string or an array.\n\t**\n\t**\t% <tag-name> <expr>\n\t*/\n\t'%': function (args)\n\t{\n\t\targs.shift();\n\t\tvar name = args.shift();\n\n\t\tlet s = '';\n\n\t\tfor (let i = 0; i < args.length; i++)\n\t\t{\n\t\t\tif (Rinn.typeOf(args[i]) == 'array')\n\t\t\t{\n\t\t\t\ts += `<${name}>`;\n\t\t\t\t\n\t\t\t\tfor (let j = 0; j < args[i].length; j++)\n\t\t\t\t\ts += args[i][j];\n\n\t\t\t\ts += `</${name}>`;\n\t\t\t}\n\t\t\telse\n\t\t\t\ts += `<${name}>${args[i]}</${name}>`;\n\t\t}\n\n\t\treturn s;\n\t},\n\n\t/**\n\t**\tReturns the expression inside an XML tag named 'tag-name', attributes are supported.\n\t**\n\t**\t%% <tag-name> [<attr> <value>]* [<content>]\n\t*/\n\t'%%': function (args)\n\t{\n\t\targs.shift();\n\t\tvar name = args.shift();\n\n\t\tlet attr = '';\n\t\tlet text = '';\n\n\t\tfor (let i = 0; i < args.length; i += 2)\n\t\t{\n\t\t\tif (i+1 < args.length)\n\t\t\t\tattr += ` ${args[i]}=\"${args[i+1]}\"`;\n\t\t\telse\n\t\t\t\ttext = args[i];\n\t\t}\n\n\t\treturn text ? `<${name}${attr}>${text}</${name}>` : `<${name}${attr}/>`;\n\t},\n\n\t/**\n\t**\tJoins the given array expression into a string. The provided string-expr will be used as separator.\n\t**\n\t**\tjoin <string-expr> <array-expr>\n\t*/\n\t'join': function (args)\n\t{\n\t\tif (args[2] && Rinn.typeOf(args[2]) == 'array')\n\t\t\treturn args[2].join(args[1]);\n\n\t\treturn '';\n\t},\n\n\t/**\n\t**\tSplits the given expression by the specified string. Returns an array.\n\t**\n\t**\tsplit <string-expr> <expr>\n\t*/\n\t'split': function (args)\n\t{\n\t\tif (args[2] && typeof(args[2]) == \"string\")\n\t\t\treturn args[2].split(args[1]);\n\n\t\treturn [];\n\t},\n\n\t/**\n\t**\tReturns an array with the keys of the given object-expr.\n\t**\n\t**\tkeys <object-expr>\n\t*/\n\t'keys': function (args)\n\t{\n\t\tif (args[1] && typeof(args[1]) == \"object\")\n\t\t\treturn Object.keys(args[1]);\n\n\t\treturn [];\n\t},\n\n\t/**\n\t**\tReturns an array with the values of the given object-expr.\n\t**\n\t**\tvalues <object-expr>\n\t*/\n\t'values': function (args)\n\t{\n\t\tif (args[1] && typeof(args[1]) == \"object\")\n\t\t\treturn Object.values(args[1]);\n\n\t\treturn [];\n\t},\n\n\t/**\n\t**\tConstructs a string obtained by concatenating the expanded template for each of the items in the list-expr, the mandatory varname\n\t**\tparameter (namely 'i') indicates the name of the variable that will contain the data of each item as the list-expr is\n\t**\ttraversed. Extra variables i# and i## (suffix '#' and '##') are introduced to denote the index/key and numeric index\n\t**\tof the current item respectively, note that the later will always have a numeric value.\n\t**\n\t**\teach <varname> <list-expr> <template>\n\t*/\n\t'_each': function (parts, data)\n\t{\n\t\tlet var_name = Template.expand(parts[1], data, 'arg');\n\t\tlet list = Template.expand(parts[2], data, 'arg');\n\n\t\tlet s = '';\n\t\tlet j = 0;\n\n\t\tif (!list) return s;\n\n\t\tfor (let i in list)\n\t\t{\n\t\t\tdata[var_name] = list[i];\n\t\t\tdata[var_name + '##'] = j++;\n\t\t\tdata[var_name + '#'] = i;\n\n\t\t\ts += Template.expand(parts[3], data, 'text');\n\t\t}\n\n\t\tdelete data[var_name];\n\t\tdelete data[var_name + '##'];\n\t\tdelete data[var_name + '#'];\n\n\t\treturn s;\n\t},\n\n\t/**\n\t**\tExpands the given template for each of the items in the list-expr, the mandatory varname parameter (namely 'i') indicates the name of the variable\n\t**\tthat will contain the data of each item as the list-expr is traversed. Extra variables i# and i## (suffix '#' and '##') are introduced to denote\n\t**\tthe index/key and numeric index of the current item respectively, note that the later will always have a numeric value.\n\t**\n\t**\tDoes not produce any output (returns null).\n\t**\n\t**\tforeach <varname> <list-expr> <template>\n\t*/\n\t'_foreach': function (parts, data)\n\t{\n\t\tlet var_name = Template.expand(parts[1], data, 'arg');\n\t\tlet list = Template.expand(parts[2], data, 'arg');\n\n\t\tlet j = 0;\n\n\t\tif (!list) return null;\n\n\t\tfor (let i in list)\n\t\t{\n\t\t\tdata[var_name] = list[i];\n\t\t\tdata[var_name + '##'] = j++;\n\t\t\tdata[var_name + '#'] = i;\n\n\t\t\tTemplate.expand(parts[3], data, 'text');\n\t\t}\n\n\t\tdelete data[var_name];\n\t\tdelete data[var_name + '##'];\n\t\tdelete data[var_name + '#'];\n\n\t\treturn null;\n\t},\n\n\t/**\n\t**\tReturns the valueA if the expression is true otherwise valueB, this is a short version of the 'if' function with the\n\t**\tdifference that the result is 'obj' instead of text.\n\t**\n\t**\t? <expr> <valueA> [<valueB>]\n\t*/\n\t'_?': function (parts, data)\n\t{\n\t\tif (Template.expand(parts[1], data, 'arg'))\n\t\t\treturn Template.expand(parts[2], data, 'arg');\n\n\t\tif (parts.length > 3)\n\t\t\treturn Template.expand(parts[3], data, 'arg');\n\n\t\treturn '';\n\t},\n\n\t/**\n\t**\tReturns the valueA if it is not null (or empty or zero), otherwise returns valueB.\n\t**\n\t**\t?? <valueA> <valueB>\n\t*/\n\t'_??': function (parts, data)\n\t{\n\t\tlet value = Template.expand(parts[1], data, 'arg');\n\t\tif (value) return value;\n\t\n\t\treturn Template.expand(parts[2], data, 'arg');\n\t},\n\n\t/**\n\t**\tReturns the value if the expression is true, supports 'elif' and 'else' as well. The result of this function is always text.\n\t**\n\t**\tif <expr> <value> [elif <expr> <value>] [else <value>]\n\t*/\n\t'_if': function (parts, data)\n\t{\n\t\tfor (let i = 0; i < parts.length; i += 3)\n\t\t{\n\t\t\tif (Template.expand(parts[i], data, 'arg') == 'else')\n\t\t\t\treturn Template.expand(parts[i+1], data, 'text');\n\n\t\t\tif (Template.expand(parts[i+1], data, 'arg'))\n\t\t\t\treturn Template.expand(parts[i+2], data, 'text');\n\t\t}\n\n\t\treturn '';\n\t},\n\n\t/**\n\t**\tLoads the expression value and attempts to match one case.\n\t**\n\t**\tswitch <expr> <case1> <value1> ... <caseN> <valueN> default <defvalue> \n\t*/\n\t'_switch': function (parts, data)\n\t{\n\t\tlet value = Template.expand(parts[1], data, 'arg');\n\n\t\tfor (let i = 2; i < parts.length; i += 2)\n\t\t{\n\t\t\tlet case_value = Template.expand(parts[i], data, 'arg');\n\t\t\tif (case_value == value || case_value == 'default')\n\t\t\t\treturn Template.expand(parts[i+1], data, 'text');\n\t\t}\n\n\t\treturn '';\n\t},\n\n\t/**\n\t**\tExits the current inner most loop.\n\t**\n\t**\tbreak\n\t*/\n\t'_break': function (parts, data)\n\t{\n\t\tthrow new Error('EXC_BREAK');\n\t},\n\n\t/**\n\t**\tSkips execution and continues the next cycle of the current inner most loop.\n\t**\n\t**\tcontinue\n\t*/\n\t'_continue': function (parts, data)\n\t{\n\t\tthrow new Error('EXC_CONTINUE');\n\t},\n\n\t/**\n\t**\tConstructs an array with the results of repeating the specified template for a number of times.\n\t**\n\t**\trepeat <varname:i> [from <number>] [to <number>] [count <number>] [step <number>] <template>\n\t*/\n\t'_repeat': function (parts, data)\n\t{\n\t\tif (parts.length < 3 || (parts.length & 1) != 1)\n\t\t\treturn '(`repeat`: Wrong number of parameters)';\n\n\t\tlet var_name = Template.value(parts[1], data);\n\t\tlet count = null;\n\t\tlet from = 0, to = null;\n\t\tlet step = null;\n\n\t\tfor (let i = 2; i < parts.length-1; i+=2)\n\t\t{\n\t\t\tlet value = Template.value(parts[i], data);\n\n\t\t\tswitch (value.toLowerCase())\n\t\t\t{\n\t\t\t\tcase 'from':\n\t\t\t\t\tfrom = parseFloat(Template.value(parts[i+1], data));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'to':\n\t\t\t\t\tto = parseFloat(Template.value(parts[i+1], data));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'count':\n\t\t\t\t\tcount = parseFloat(Template.value(parts[i+1], data));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'step':\n\t\t\t\t\tstep = parseFloat(Template.value(parts[i+1], data));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlet tpl = parts[parts.length-1];\n\t\tlet arr = [];\n\n\t\tif (to !== null)\n\t\t{\n\t\t\tif (step === null)\n\t\t\t\tstep = from > to ? -1 : 1;\n\n\t\t\tif (step < 0)\n\t\t\t{\n\t\t\t\tfor (let i = from; i >= to; i += step)\n\t\t\t\t{\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdata[var_name] = i;\n\t\t\t\t\t\tarr.push(Template.value(tpl, data));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tlet name = e.message;\n\t\t\t\t\t\tif (name == 'EXC_BREAK') break;\n\t\t\t\t\t\tif (name == 'EXC_CONTINUE') continue;\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor (let i = from; i <= to; i += step)\n\t\t\t\t{\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdata[var_name] = i;\n\t\t\t\t\t\tarr.push(Template.value(tpl, data));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tlet name = e.message;\n\t\t\t\t\t\tif (name == 'EXC_BREAK') break;\n\t\t\t\t\t\tif (name == 'EXC_CONTINUE') continue;\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (count !== null)\n\t\t{\n\t\t\tif (step === null)\n\t\t\t\tstep = 1;\n\n\t\t\tfor (let i = from; count > 0; count--, i += step)\n\t\t\t{\n\t\t\t\ttry {\n\t\t\t\t\tdata[var_name] = i;\n\t\t\t\t\tarr.push(Template.value(tpl, data));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tlet name = e.message;\n\t\t\t\t\tif (name == 'EXC_BREAK') break;\n\t\t\t\t\tif (name == 'EXC_CONTINUE') continue;\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (step === null)\n\t\t\t\tstep = 1;\n\t\n\t\t\tfor (let i = from; ; i += step)\n\t\t\t{\n\t\t\t\ttry {\n\t\t\t\t\tdata[var_name] = i;\n\t\t\t\t\tarr.push(Template.value(tpl, data));\n\t\t\t\t}\n\t\t\t\tcatch (e) {\n\t\t\t\t\tlet name = e.message;\n\t\t\t\t\tif (name == 'EXC_BREAK') break;\n\t\t\t\t\tif (name == 'EXC_CONTINUE') continue;\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdelete data[var_name];\n\t\treturn arr;\n\t},\n\n\t/**\n\t**\tRepeats the specified template for a number of times.\n\t**\n\t**\tfor <varname:i> [from <number>] [to <number>] [count <number>] [step <number>] <template>\n\t*/\n\t'_for': function (parts, data)\n\t{\n\t\tif (parts.length < 3 || (parts.length & 1) != 1)\n\t\t\treturn '(`for`: Wrong number of parameters)';\n\n\t\tlet var_name = Template.value(parts[1], data);\n\t\tlet count = null;\n\t\tlet from = 0; to = null;\n\t\tlet step = null;\n\n\t\tfor (let i = 2; i < parts.length-1; i+=2)\n\t\t{\n\t\t\tvalue = Template.value(parts[i], data);\n\n\t\t\tswitch (value.toLowerCase())\n\t\t\t{\n\t\t\t\tcase 'from':\n\t\t\t\t\tfrom = parseFloat(Template.value(parts[i+1], data));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'to':\n\t\t\t\t\tto = parseFloat(Template.value(parts[i+1], data));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'count':\n\t\t\t\t\tcount = parseFloat(Template.value(parts[i+1], data));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'step':\n\t\t\t\t\tstep = parseFloat(Template.value(parts[i+1], data));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlet tpl = parts[parts.length-1];\n\n\t\tif (to !== null)\n\t\t{\n\t\t\tif (step === null)\n\t\t\t\tstep = from > to ? -1 : 1;\n\n\t\t\tif (step < 0)\n\t\t\t{\n\t\t\t\tfor (let i = from; i >= to; i += step)\n\t\t\t\t{\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdata[var_name] = i;\n\t\t\t\t\t\tTemplate.value(tpl, data);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tlet name = e.message;\n\t\t\t\t\t\tif (name == 'EXC_BREAK') break;\n\t\t\t\t\t\tif (name == 'EXC_CONTINUE') continue;\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor (let i = from; i <= to; i += step)\n\t\t\t\t{\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdata[var_name] = i;\n\t\t\t\t\t\tTemplate.value(tpl, data);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tlet name = e.message;\n\t\t\t\t\t\tif (name == 'EXC_BREAK') break;\n\t\t\t\t\t\tif (name == 'EXC_CONTINUE') continue;\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (count !== null)\n\t\t{\n\t\t\tif (step === null)\n\t\t\t\tstep = 1;\n\n\t\t\tfor (let i = from; count > 0; count--, i += step)\n\t\t\t{\n\t\t\t\ttry {\n\t\t\t\t\tdata[var_name] = i;\n\t\t\t\t\tTemplate.value(tpl, data);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tlet name = e.message;\n\t\t\t\t\tif (name == 'EXC_BREAK') break;\n\t\t\t\t\tif (name == 'EXC_CONTINUE') continue;\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (step === null)\n\t\t\t\tstep = 1;\n\t\n\t\t\tfor (let i = from; ; i += step)\n\t\t\t{\n\t\t\t\ttry {\n\t\t\t\t\tdata[var_name] = i;\n\t\t\t\t\tTemplate.value(tpl, data);\n\t\t\t\t}\n\t\t\t\tcatch (e) {\n\t\t\t\t\tlet name = e.message;\n\t\t\t\t\tif (name == 'EXC_BREAK') break;\n\t\t\t\t\tif (name == 'EXC_CONTINUE') continue;\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdelete data[var_name];\n\t\treturn null;\n\t},\n\n\t/**\n\t**\tRepeats the specified template infinitely until a \"break\" is found.\n\t**\n\t**\tloop <template>\n\t*/\n\t'_loop': function (parts, data)\n\t{\n\t\tif (parts.length < 2)\n\t\t\treturn '(`loop`: Wrong number of parameters)';\n\n\t\tlet tpl = parts[1];\n\n\t\twhile (true)\n\t\t{\n\t\t\ttry {\n\t\t\t\tTemplate.value(tpl, data);\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\tlet name = e.message;\n\t\t\t\tif (name == 'EXC_BREAK') break;\n\t\t\t\tif (name == 'EXC_CONTINUE') continue;\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t**\tWrites the specified arguments to the console.\n\t**\n\t**\techo <expr> [<expr>...]\n\t*/\n\t'_echo': function (parts, data)\n\t{\n\t\tlet s = '';\n\n\t\tfor (let i = 1; i < parts.length; i++)\n\t\t\ts += Template.expand(parts[i], data, 'arg');\n\n\t\tconsole.log(s);\n\t\treturn '';\n\t},\n\n\t/**\n\t**\tConstructs a list from the given arguments and returns it.\n\t**\n\t**\t# <expr> [<expr>...]\n\t*/\n\t'_#': function (parts, data)\n\t{\n\t\tlet s = [];\n\n\t\tfor (let i = 1; i < parts.length; i++)\n\t\t\ts.push(Template.expand(parts[i], data, 'arg'));\n\n\t\treturn s;\n\t},\n\n\t/**\n\t**\tConstructs a non-expanded list from the given arguments and returns it.\n\t**\n\t**\t## <expr> [<expr>...]\n\t*/\n\t'_##': function (parts, data)\n\t{\n\t\tlet s = [];\n\n\t\tfor (let i = 1; i < parts.length; i++)\n\t\t\ts.push(parts[i]);\n\n\t\treturn s;\n\t},\n\n\t/**\n\t**\tConstructs an associative array (dictionary) and returns it.\n\t**\n\t**\t& <name>: <expr> [<name>: <expr>...]\n\t**\t& :<name> <expr> [:<name> <expr>...]\n\t*/\n\t'_&': function (parts, data)\n\t{\n\t\treturn Template.getNamedValues (parts, data, 1, true);\n\t},\n\n\t/**\n\t**\tConstructs a non-expanded associative array (dictionary) and returns it.\n\t**\n\t**\t&& <name>: <expr> [<name>: <expr>...]\n\t**\t&& :<name> <expr> [:<name> <expr>...]\n\t*/\n\t'_&&': function (parts, data)\n\t{\n\t\treturn Template.getNamedValues (parts, data, 1, false);\n\t},\n\n\t/**\n\t**\tReturns true if the specified map contains all the specified keys. If it fails the global variable `err` will contain an error message.\n\t**\n\t**\tcontains <expr> <name> [<name>...]\n\t*/\n\t'contains': function (args, parts, data)\n\t{\n\t\tlet value = args[1];\n\n\t\tif (typeof(value) != 'object')\n\t\t{\n\t\t\tdata.err = 'Argument is not a Map';\n\t\t\treturn false;\n\t\t}\n\n\t\tlet s = '';\n\n\t\tfor (let i = 2; i < args.length; i++)\n\t\t{\n\t\t\tif (!(args[i] in value))\n\t\t\t\ts += ', '+args[i];\n\t\t}\n\n\t\tif (s != '')\n\t\t{\n\t\t\tdata.err = s.substr(1);\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t/**\n\t**\tReturns true if the specified map has the specified key. Returns boolean.\n\t**\n\t**\thas <name> <expr>\n\t*/\n\t'has': function (args, parts, data)\n\t{\n\t\tlet value = args[2];\n\n\t\tif (Rinn.typeOf(value) != 'object')\n\t\t\treturn false;\n\n\t\treturn args[1] in value;\n\t},\n\n\t/**\n\t**\tReturns a new array/map contaning the transformed values of the array/map (evaluating the template). And just as in 'each', the i# and i## variables be available.\n\t**\n\t**\tmap <varname> <list-expr> <template>\n\t*/\n\t'_map': function (parts, data)\n\t{\n\t\tlet var_name = Template.expand(parts[1], data, 'arg');\n\n\t\tlet list = Template.expand(parts[2], data, 'arg');\n\t\tif (!list) return list;\n\n\t\tlet arrayMode = Rinn.typeOf(list) == 'array' ? true : false;\n\t\tlet output = arrayMode ? [] : {};\n\t\tlet j = 0;\n\n\t\tfor (let i in list)\n\t\t{\n\t\t\tdata[var_name] = list[i];\n\t\t\tdata[var_name + '##'] = j++;\n\t\t\tdata[var_name + '#'] = i;\n\n\t\t\tif (arrayMode)\n\t\t\t\toutput.push(Template.expand(parts[3], data, 'arg'));\n\t\t\telse\n\t\t\t\toutput[i] = Template.expand(parts[3], data, 'arg');\n\t\t}\n\n\t\tdelete data[var_name];\n\t\tdelete data[var_name + '##'];\n\t\tdelete data[var_name + '#'];\n\n\t\treturn output;\n\t},\n\n\t/**\n\t**\tReturns a new array/map contaning the elements where the template evaluates to non-zero. Just as in 'each', the i# and i## variables be available.\n\t**\n\t**\tfilter <varname> <list-expr> <template>\n\t*/\n\t'_filter': function (parts, data)\n\t{\n\t\tlet var_name = Template.expand(parts[1], data, 'arg');\n\n\t\tlet list = Template.expand(parts[2], data, 'arg');\n\t\tif (!list) return list;\n\n\t\tlet arrayMode = Rinn.typeOf(list) == 'array' ? true : false;\n\t\tlet output = arrayMode ? [] : {};\n\t\tlet j = 0;\n\n\t\tfor (let i in list)\n\t\t{\n\t\t\tdata[var_name] = list[i];\n\t\t\tdata[var_name + '##'] = j++;\n\t\t\tdata[var_name + '#'] = i;\n\n\t\t\tif (~~Template.expand(parts[3], data, 'arg'))\n\t\t\t{\n\t\t\t\tif (arrayMode)\n\t\t\t\t\toutput.push(list[i]);\n\t\t\t\telse\n\t\t\t\t\toutput[i] = list[i];\n\t\t\t}\n\t\t}\n\n\t\tdelete data[var_name];\n\t\tdelete data[var_name + '##'];\n\t\tdelete data[var_name + '#'];\n\n\t\treturn output;\n\t},\n\n\t/**\n\t**\tExpands the specified template string with the given data. The sym_open and sym_close will be '{' and '}' respectively.\n\t**\tIf no data is provided, current data parameter will be used.\n\t**\n\t**\texpand <template> <data>\n\t*/\n\t'expand': function (args, parts, data)\n\t{\n\t\treturn Template.expand (Template.parseTemplate (args[1], '{', '}'), args.length == 3 ? args[2] : data);\n\t},\n\n\t/**\n\t**\tCalls a function described by the given parameter.\n\t**\n\t**\tcall <function> <args...>\n\t*/\n\t'_call': function (parts, data)\n\t{\n\t\tlet ref = Template.expand(parts[1], data, 'varref');\n\n\t\tif (!ref || typeof(ref[0][ref[1]]) != 'function')\n\t\t\tthrow new Error ('Expression is not a function: ' + Template.expand(parts[1], data, 'obj').map(i => i == null ? '.' : i).join(''));\n\n\t\tlet args = [];\n\n\t\tfor (let i = 2; i < parts.length; i++)\n\t\t\targs.push(Template.value(parts[i], data));\n\n\t\treturn ref[0][ref[1]] (...args);\n\t},\n};\n\nexport default Template;\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","/*! https://mths.be/base64 v1.0.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '1.0.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","\n/**\n * Signal class.\n */\nexport class Signal\n{\n #value;\n #defvalue;\n #listeners;\n #type;\n\n getter;\n setter;\n\n /**\n * Creates a new signal object.\n * @param {*} value\n * @param {*} defvalue\n */\n constructor (value=null, defvalue=null)\n {\n this.#value = value;\n this.#type = null;\n this.#defvalue = defvalue;\n this.#listeners = [];\n\n this.getter = this.get.bind(this);\n this.setter = this.set.bind(this);\n }\n\n /**\n * Sets the type of the signal.\n * @param {'string'|'bool'|'int'|'number'|'*'} type \n * @returns {Signal}\n */\n is (type) {\n this.#type = type === '*' ? null : type;\n return this;\n }\n\n /**\n * Transforms the given value to the type of the signal.\n * @param {*} val \n * @returns {*}\n */\n transform (val)\n {\n if (this.#type === null)\n return val;\n\n if (this.#type === 'string')\n return typeof val === 'string' ? val : val.toString();\n\n if (this.#type === 'int')\n return ~~val;\n\n if (this.#type === 'number')\n return typeof val === 'number' ? val : parseFloat(val);\n\n if (this.#type === 'bool')\n {\n if (typeof val === 'boolean')\n return val;\n\n if (typeof val === 'string')\n return val === 'true' || val === '1';\n\n return !!val;\n }\n\n return null;\n }\n\n /**\n * Returns the type of the signal.\n * @returns {'string'|'bool'|'int'|'number'|'*'}\n */\n get type() {\n return this.#type === null ? '*' : this.#type;\n }\n\n /**\n * Returns the value of the signal.\n * @returns {*}\n */\n get value() {\n return this.#value;\n }\n\n /**\n * Sets the value of the signal.\n * @param {*} val\n */\n set value(val) {\n val = this.transform(val);\n if (this.#value === val) return;\n this.#value = val;\n this.notify();\n }\n\n /**\n * Returns the value of the signal.\n * @returns {*}\n */\n get() {\n return this.value;\n }\n\n /**\n * Sets the value of the signal, when `forced` is true the signal will be updated even if its value is the same.\n * @param {*} value\n * @param {boolean} [forced]\n * @returns {Signal}\n */\n set(value, forced=false) {\n value = this.transform(value);\n if (this.#value === value && forced !== true) return;\n this.#value = value;\n this.notify();\n return this;\n }\n\n /**\n * Resets the value of the signal to its default value.\n * @returns {Signal}\n */\n reset() {\n this.value = this.#defvalue;\n return this;\n }\n\n /**\n * Connects a callback to the signal.\n * @param {function} callback\n * @returns {Signal}\n */\n connect (callback) {\n this.#listeners.push(callback);\n return this;\n }\n\n /**\n * Disconnects a callback from the signal.\n * @param {function} callback\n * @returns {Signal}\n */\n disconnect (callback) {\n const index = this.#listeners.indexOf(callback);\n if (index !== -1)\n this.#listeners.splice(index, 1);\n return this;\n }\n\n /**\n * Notifies all the listeners of the signal that it has changed its value.\n */\n notify() {\n for (let callback of this.#listeners)\n callback();\n }\n};\n\n/**\n * Creates a new signal object.\n * @param {*} value?\n * @param {*} defaultValue?\n * @returns {Signal}\n */\nexport function signal (value=null, defaultValue=null)\n{\n return new Signal (value, defaultValue);\n}\n\n/**\n * Creates a new signal as an expression of the specified signals evaluated by the given function.\n * @param {Array<Signal|*>} signals \n * @param {Function} evaluator \n * @returns {Signal}\n */\nexport function expr (signals, evaluator)\n{\n let active = [];\n let notified = false;\n\n for (let i = 0; i < signals.length; i++)\n {\n if (signals[i] instanceof Signal)\n active.push([i, signals[i]]);\n }\n\n if (!active.length)\n return evaluator(...signals);\n\n const sgn = signal();\n\n const update = function() {\n for (let i of active)\n signals[i[0]] = i[1].value;\n sgn.value = evaluator(...signals);\n notified = false;\n };\n\n const debouncer = function() {\n if (notified) return;\n notified = true;\n queueMicrotask(update);\n };\n\n for (let i of active)\n i[1].connect(debouncer);\n\n update();\n return sgn;\n}\n\n/**\n * Creates a new watcher, such that if any signal changes the evaluator will be run.\n * @param {Array<Signal|*>} signals \n * @param {Function} evaluator \n * @param {boolean} initialRun? Set to `false` to disable the initial run of the evaluator.\n */\nexport function watch (signals, evaluator, initialRun=true)\n{\n let active = [];\n let notified = false;\n\n for (let i = 0; i < signals.length; i++)\n {\n if (signals[i] instanceof Signal)\n active.push([i, signals[i]]);\n }\n\n if (!active.length) {\n if (initialRun) evaluator(...signals);\n return;\n }\n\n const update = function() {\n for (let i of active)\n signals[i[0]] = i[1].value;\n evaluator(...signals);\n notified = false;\n };\n\n const debouncer = function() {\n if (notified) return;\n notified = true;\n queueMicrotask(update);\n };\n\n for (let i of active)\n i[1].connect(debouncer);\n\n if (initialRun) update();\n}\n\n/**\n * A validator is a function that is called when a signal changes. It is passed the signal and the config parameter\n * of the validator. If the validator returns `false` the validation cycle will be stopped.\n */\nconst validators = { };\n\n/**\n * Create a new validation watcher for the signal.\n * @param {Signal} signal\n * @param {object} rules\n * @returns {Signal}\n */\n/**\n * Register a new validation rule.\n * @param {string} ruleName\n * @param {(Signal, *) => boolean} handler\n */\nexport function validator (signal, rules)\n{\n // Register a new validation rule.\n if (typeof signal === 'string') {\n if (typeof rules !== 'function')\n throw new Error('Validator handler must be a function');\n validators[signal] = rules;\n return;\n }\n\n // Ensure all validators are defined.\n for (let rule in rules) {\n if (!(rule in validators))\n throw new Error('Validator `' + rule + '` not defined');\n }\n\n // Create a new validation watcher for the signal.\n watch([signal], () => {\n for (let rule in rules) {\n if (validators[rule](signal, rules[rule]) === false)\n break;\n }\n });\n\n return signal;\n}\n\nvalidator('min', (signal, val) => {\n if (signal.get() < val) signal.set(val);\n});\n\nvalidator('max', (signal, val) => {\n if (signal.get() > val) signal.set(val);\n});\n"],"names":["Router","_$0","_helpers","create","DYNAMIC","_$1","_$2","_$3","_$4","_$5","_$6","_$7","_$8","_$9","_$10","_$11","_$12","_$13","_$14","_$15","_$16","_$17","_$18","_$19","_$20","_$21","_$22","_$23","_$24","_$25","_$26","_$27","_$28","_$29","_$30","_$31","_$32","_$33","_$34","_$35","_$36","_$37","_$38","_$39","_$40","_$41","_$42","_$43","_$44","_$45","_$46","_$47","_$48","_$49","_$50","_$51","_$52","_$53","_$54","_$55","_$56","_$57","_$58","_$59","App","queueMicrotask","refresh","window","document","documentElement","classList","toggle","ev","currentTarget","querySelectorParent","dialog","toggleVisibility","hide","body","appendChild","Rinn","$k7heJ$Rinn","Class","$k7heJ$Class","Event","$k7heJ$Event","EventDispatcher","$k7heJ$EventDispatcher","Model","$k7heJ$Model","ModelList","$k7heJ$ModelList","Schema","$k7heJ$Schema","Flattenable","$k7heJ$Flattenable","Collection","$k7heJ$Collection","Template","$k7heJ$Template","$k7heJ$base64","signal","$k7heJ$signal","expr","$k7heJ$expr","watch","$k7heJ$watch","validator","$k7heJ$validator","$parcel$global","globalThis","$7718a52dfca15325$var$_Router","Route","extend","routeRegex","value","params","args","s_args","active","changed","__ctor","route","_super","_compileRoute","replace","m","exec","push","addHandler","handler","unrouted","context","addEventListener","removeHandler","removeEventListener","dispatch","matches","match","dispatchEvent","str","i","length","routes","sortedRoutes","ignoreHashChangeEvent","location","init","alreadyAttached","onhashchange","onLocationChanged","bind","hash","substring","split","setRoute","silent","realLocation","addRoute","onRoute","onUnroute","sort","a","b","getRoute","addRoutes","removeRoute","undefined","removeRoutes","cLocation","pLocation","state","j","k","rLocation","substr","indexOf","lastIndexOf","trim","prevLocation","navigate","$5808f050ebbd5b77$var$elementPrototypes","$5808f050ebbd5b77$var$elementClasses","$5808f050ebbd5b77$var$longPressState","elem","$5808f050ebbd5b77$var$Element","eid","isRoot","root","isReady","readyReenter","readyLocked","modelt","model","contents","events","evt","continuePropagation","source","setTimeout","dx","_pos_fx","_pos_sx","dy","_pos_fy","_pos_sy","Math","sqrt","dispatchOn","clientX","clientY","clearTimeout","touches","opts","dataset","action","longPress","enter","_list_watch","_list_visible","_list_attr","_list_property","style","display","random","toString","tmp","setModel","Object","keys","reverse","forEach","debug","console","log","tagName","parentElement","bindEvents","setInnerHTML","toLowerCase","createElement","markReady","ready","rready","list","collectWatchers","ref","getFieldByPath","trigger","findCustomParent","checkReady","rootReady","getRoot","onRefAdded","remove","childNodes","result","evaluate","XPathResult","ANY_TYPE","iterateNext","path","shift","findRoot","update","ensureTypeOf","onModelPreChanged","onModelPropertyChanging","onModelPropertyPreChanged","onModelPropertyRemoved","setNamespace","getModel","addClass","classString","add","removeClass","setStyle","styleString","name","toUpperCase","getWidth","getBoundingClientRect","width","getHeight","height","evtstr","hdl","typeOf","selector","listen","keyCode","bindRoutes","routeStr","unbindRoutes","_eventHandler","target","HTMLElement","call","detail","elems","querySelectorAll","preventDefault","stopPropagation","eventName","eventCatcher","eventImmediate","callback0","callback1","self","firstCapture","firstCaptureCount","queue","q","pop","removed","createEventObject","bubbles","MouseEvent","CustomEvent","propName","innerHTML","modified","_list_watch_length","_list_visible_length","_list_attr_length","_list_property_length","_template","compile","_watch","RegExp","removeAttribute","selfWatch","_visible","visible","selfVisible","_attr","attr","selfAttr","onchange","onblur","type","checked","set","getValue","onmouseup","property","selfProperty","filter","onCreated","whenReady","callback","elementConnected","onConnected","elementDisconnected","onDisconnected","element","onRefRemoved","data","get","fields","test","removeProperty","setProperty","onModelChanged","val","setValue","onModelPropertyChanged","preparePrototype","proto","__prototypePrepared","hasOwnProperty","startsWith","register","protos","__check","newElement","constructor","invokeConstructor","entries","prototype","srcElement","connectReference","flags","connectedCallback","xref","disconnectedCallback","override","clone","__init","__ready","__rready","f","dummy","customElements","define","expand","hookAppend","functionName","newFunction","hook1","hook2","unhook","hookPrepend","querySelector","contains","fn","$d584b999ce7bb535$var$Api","REQUEST_PACKAGE_SUPPORTED","REQ64_SUPPORTED","JSON_RESPONSE_SUPPORTED","XML_RESPONSE_SUPPORTED","INCLUDE_CREDENTIALS","UNIQUE_STAMP","DISABLE_CORS","WIND_V3","apiUrl","useReq64","retries","headers","_requestLevel","_requestPackage","_packageData","setEndPoint","responseFilter","res","req","packageBegin","packageEnd","packageSend","batch","responseCallback","rpkg","encode","encodeParams","_showProgress","apiCall","_hideProgress","response","e","header","obj","s","FormData","encodeURIComponent","join","getUrl","url","appendParam","param","success","failure","httpMethod","relativeUrl","Date","now","options","mode","method","multipart","credentials","Blob","endsWith","File","append","l","fetch","then","decodeResult","catch","err","json","status","Promise","resolve","reject","text","DOMParser","parseFromString","blob","getBlob","base64","decode","request","post","put","patch","delete","makeUrl","$fe13c50c6c3e66d8$var$DataSource","className","debounceDelay","includeCount","includeEnum","includeList","count","enum","basePath","config","assign","dataSource","forwardRequestEvent","forwardListEvent","forwardEnumEvent","prepareEvent","setSource","resume","_timeout","fetchCount","fetchEnum","fetchList","forced","item","find","fetchOne","r","fetchDelete","error","setData","fetchData","globals","at","$52a9c945778cbfd0$var$DataList","dataList","_callback","$0a74aeaee0e1468a$var$Easing","interpolate","src","dst","duration","easing","time","x","lastTime","dt","interpolator","curTime","t","requestAnimationFrame","Linear","IN","OUT","IN_OUT","Back","Bounce","getConst","Circ","Cubic","Expo","pow","Power","p","Quad","Quartic","Quintic","Sine","sin","cos","Step","$54865aa6b345efd5$var$Anim","initialData","stack","block","timeScale","blockTime","index","paused","finished","onFinishedCallback","onUpdatedCallback","reset","__dtor","onFinished","onUpdated","handle","initial","speed","setOutput","pause","clearInterval","setInterval","_block","_index","_blockTime","cmd","op","started","blocks","indices","blockTimes","n","_count","field","startValue","_startValue","_endValue","endValue","last","cur","table","snd","play","parallel","serial","repeat","end","restart","wait","range","rand","randt","c","$4a9d88aa888e9f4d$export$2e2bcd8739ae039","container","activeTab","baseRoute","selectTab","_routeHandler","link","href","onanimationend","showTab","tabName","previousElementSibling","nextElementSibling","_hideTabsExcept","exceptName","el","$ec74230761e3bde8$export$2e2bcd8739ae039","formElement","def","names","default","defaults","clearMarkers","filterString","messages","eval","_change","createEvent","initEvent","fireEvent","_setField","multiple","parseInt","FileList","_getField","_value","fromFileFields","files","getField","_fieldChanged","_onSuccess","message","_onFailure","errorsAt","prepend","insertBefore","nsilent","submit","strict","formAction","modern","JSON","stringify","$9c0636c07ff6144e$export$2e2bcd8739ae039","_onActivate","show","_onDeactivate","$a4fb830b2d507403$export$2e2bcd8739ae039","template","isEmpty","isDynamicTemplate","template_elem","textContent","setEmpty","setLoading","setList","isInstanceOf","onLoading","onLoaded","onItemsCleared","onItemsChanged","onItemRemoved","onItemChanged","onItemAdded","buildItem","iid","asHtml","content","html","attributes","nodeName","setAttribute","nodeValue","getData","wrap","itemId","id","position","$7061e6454a23ef4a$export$2e2bcd8739ae039","dataModel","$8586bcf20c2e54e9$export$2e2bcd8739ae039","offsetStart","offsetEnd","offset","currentPageSize","pageSize","updateOffset","onRequestPropertyChanged","onCountChanged","min","getInt","_offset","ignored","prevPage","offs","nextPage","firstPage","lastPage","clear","$a1b0099052e4f8e1$export$2e2bcd8739ae039","Error","temporalBody","i1","order","firstElementChild","_elem","replaceChild","$e668322859586774$export$2e2bcd8739ae039","disabled","DataList","lastElementChild","label","has","blank","groups","values","g","$a86ae7da7dd6c514$var$Utils","showDownload","filename","download","click","removeChild","showFilePicker","allowMultiple","accept","input","onfocus","loadAsDataUrl","file","reader","FileReader","onload","onerror","readAsDataURL","loadAsText","readAsText","loadAsArrayBuffer","readAsArrayBuffer","loadAllAsDataUrl","fileList","loadNext","size","loadImageFromUrl","image","Image","$183fe4f5f56cd7be$export$2e2bcd8739ae039","aspectRatio","imageScale0","imageScale","imageOffsX","imageOffsY","pointerA","pointerB","bounds","canvas","getContext","sx","sy","cx","cy","ix","iy","setImageUrl","setImage","setImageFile","max","render","getBlobAndUrl","quality","toBlob","URL","createObjectURL","fillStyle","beginPath","rect","fill","translate","scale","drawImage","translateImage","offsX","offsY","left","top","deltaY","changedTouches","identifier","d0","d1","d","$873d1f4710ba462f$var$geo","E_NONE","E_PERMISSION_DENIED","E_POSITION_UNAVAILABLE","E_TIMEOUT","E_UNSUPPORTED","E_UNKNOWN","supported","indicatorOn","indicatorOff","navigator","geolocation","getCurrentPosition","cancelled","code","enableHighAccuracy","cancel","$09e89c15f3c11137$export$e2ef10f86a8d60e8","$09e89c15f3c11137$export$dce8637ca0d755f","$09e89c15f3c11137$export$3db5d71bdb2d5499","$09e89c15f3c11137$export$956325f45c5d174a","$09e89c15f3c11137$export$cbfd4c4104bf5a27","lastIndex","oninput","selected","Array","createSetter","copyProps","node","newNode","getOwnPropertyNames","cloneNode","deep","isCustom","cloneNodeCustom","childNode","oncreated","ensureNode","Node","createTextNode","replaceNode","parent","refNode","newRefNode","firstNode","frag","createDocumentFragment","replaceWith","tmpNode","createComment","createReplacer","children","baseElement","dynamicAttributes","dynamicChildrenIndices","dynamicBuild","firstBuild","N","M","runtimeDynamicAttributes","runtimeChildren","spreadAttributes","getElement","originalElement","hadOnCreated","dynamicChildren","map","idx","$9ffb7151b8b2d038$export$55185c17a0fcbe46","$9ffb7151b8b2d038$export$db77ccec0bb4ccac","$9ffb7151b8b2d038$export$9864de54bd63ed8a","$9ffb7151b8b2d038$export$bf71da7aebe9ddc1","$9ffb7151b8b2d038$export$accd73d198d77d2f","$9ffb7151b8b2d038$export$d3568da47c78d35c","$9ffb7151b8b2d038$export$cea96571ebbff9dd","$9ffb7151b8b2d038$export$deefd61317ad2797","$9ffb7151b8b2d038$export$3abb4be70fa2c84e","Tabs","Form","Panel","List","Item","Paginator","Table","Select","ImageCropper","$9ffb7151b8b2d038$export$d2ca453b913dcdea","$9ffb7151b8b2d038$export$f932f06c7eb6abeb","db","dbName","version","upgradeCallback","indexedDB","open","onupgradeneeded","txn","transaction","oldVersion","createObjectStore","keyPath","abort","onsuccess","ensureConnected","alert","storeName","indexName","store","objectStore","openCursor","event","cursor","continue","getAll","getAllKeys","getAllUnique","fieldName","sysGet","full","sysPut","findOne","partial","notPartial","partialCompare","deleteAll","insert","$9ffb7151b8b2d038$export$9388fcd1771be726","$9ffb7151b8b2d038$export$eefcfe56efaaa57d","$9ffb7151b8b2d038$export$4c85e640eb41c31b","$9ffb7151b8b2d038$export$d61e24a684f9e51","$9ffb7151b8b2d038$export$ec8b666c5fe2c75a","$9ffb7151b8b2d038$export$a1edc412be3e1841","$9ffb7151b8b2d038$export$59eced47f477f85a","$9ffb7151b8b2d038$export$19342e026b58ebb7","$9ffb7151b8b2d038$export$3a9581c9ade29768","$9ffb7151b8b2d038$export$fb8073518f34e6ec","$9ffb7151b8b2d038$export$14416b8d99d47caa","Element","CElement","Api","DataSource","Easing","Anim","Elements","Utils","geo","helpers","$parcel$export","v","defineProperty","enumerable","configurable","global","$parcel$modules","$parcel$inits","parcelRequire","exports","module","$39761b0dd175036e$export$2e2bcd8739ae039","$fMUO1","$cAEYe","_getref","model11","ctval11","name11","value11","isNaN","parseFloat","mclass11","ensure","cls","arrayof","i11","arraynull","remove11","splice","arraycompliant","isCompliant","required","minlen","maxlen","minval","maxval","mincount","maxcount","pattern","inset","upper","lower","$b7e7672d417be9d7$export$2e2bcd8739ae039","$b7e7672d417be9d7$var$Rinn","invokeLater","millis","o","isArrayOrObject","merge","output","objs","arr","arrayFind","getObject","_class","forceArray","escape","serialize","deserialize","parse","object","conditional","oldFunction","apply","$92a8a0aff23e2e33$export$2e2bcd8739ae039","email","urlNoProt","uname","utext","$2394d727dfd6a212$var$Class","__proto__","instanceOf","_initSuperRefs","_newSuper","_prot","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","inherit","_extend","base","classInit","isInstance","mutate","classConstructor","host","zombie","$2394d727dfd6a212$export$2e2bcd8739ae039","$13eda5a5dec8010f$export$2e2bcd8739ae039","_async","next","ret","original","eventArgs","cbHandler","cbContext","from","enqueue","$c43adaf9cb6d6dd3$export$2e2bcd8739ae039","listeners","namespace","ns","concat","silence","$4VREF","$4dfa0622e14576ea$var$_Model","constraints","changedList","_silent","_level","_validate","nvalue","ctname","Constraints","_set","constraint","_propertyEvent","prev","direct","temp","old","level","arguments","force","flatten","getFloat","getBool","getReference","safe","rsafe","classPath","ct","validate","observe","unobserve","unwatch","$4dfa0622e14576ea$export$2e2bcd8739ae039","$0890bed8a163f087$export$2e2bcd8739ae039","itemt","nextId","_eventGroup","_bind","_onItemEvent","_unbind","getAt","removeAt","setAt","updateAt","unshift","retObject","$2710795e2347ba2a$var$Schema","Type","unflatten","String","Integer","Number","precision","_precision","_round","Bool","compact","_compact","SharedString","strings","itemType","_debug","_filter","of","properties","defvalue","propertyAlias","symbolic","_constructor","Property","is","Map","Selector","conditions","when","with","$2710795e2347ba2a$export$2e2bcd8739ae039","$32651d5f38a8a64c$export$2e2bcd8739ae039","typeSchema","onUnflattened","$2bcce06113365814$export$2e2bcd8739ae039","itemTypeSchema","items","itemsReferenceChanged","desc","findItem","inc","exc","getItems","relative","first","addAt","onBeforeItemAdded","forEachCall","forEachRev","forEachRevCall","$d261ccdafdfe12a9$var$Template","parseTemplate","sym_open","sym_close","is_tpl","nflush","flush","parts","mparts","nparts","unescape","value1","emit","clean","quote","functions","failed","getNamedValues","expanded","key","fromCharCode","charCodeAt","abs","start","var_name","case_value","to1","step","tpl","to","arrayMode","$d261ccdafdfe12a9$export$2e2bcd8739ae039"],"version":3,"file":"index.7f0fe2ee.js.map","sourceRoot":"/__parcel_source_root/"}