apprun 3.30.2 → 3.32.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.
@@ -1 +1 @@
1
- {"version":3,"file":"apprun.esm.js","sources":["../src/app.ts","../src/directive.ts","../src/vdom-my.ts","../src/web-component.ts","../src/decorator.ts","../src/component.ts","../src/router.ts","../src/apprun.ts"],"sourcesContent":["import { EventOptions} from './types'\nexport class App {\n\n private _events: Object;\n\n public start;\n public h;\n public createElement;\n public render;\n public Fragment;\n public webComponent;\n public safeHTML;\n\n constructor() {\n this._events = {};\n }\n\n on(name: string, fn: (...args) => void, options: EventOptions = {}): void {\n this._events[name] = this._events[name] || [];\n this._events[name].push({ fn, options });\n }\n\n off(name: string, fn: (...args) => void): void {\n const subscribers = this._events[name] || [];\n\n this._events[name] = subscribers.filter((sub) => sub.fn !== fn);\n }\n\n find(name: string): any {\n return this._events[name];\n }\n\n run(name: string, ...args): number {\n const subscribers = this.getSubscribers(name, this._events);\n console.assert(subscribers && subscribers.length > 0, 'No subscriber for event: ' + name);\n subscribers.forEach((sub) => {\n const { fn, options } = sub;\n if (options.delay) {\n this.delay(name, fn, args, options);\n } else {\n Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);\n }\n return !sub.options.once;\n });\n\n return subscribers.length;\n }\n\n once(name: string, fn, options: EventOptions = {}): void {\n this.on(name, fn, { ...options, once: true });\n }\n\n private delay(name, fn, args, options): void {\n if (options._t) clearTimeout(options._t);\n options._t = setTimeout(() => {\n clearTimeout(options._t);\n Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);\n }, options.delay);\n }\n\n query(name: string, ...args): Promise<any[]> {\n const subscribers = this.getSubscribers(name, this._events);\n console.assert(subscribers && subscribers.length > 0, 'No subscriber for event: ' + name);\n const promises = subscribers.map(sub => {\n const { fn, options } = sub;\n return Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);\n });\n return Promise.all(promises);\n }\n\n private getSubscribers(name: string, events) {\n const subscribers = events[name] || [];\n\n // Update the list of subscribers by pulling out those which will run once.\n // We must do this update prior to running any of the events in case they\n // cause additional events to be turned off or on.\n events[name] = subscribers.filter((sub) => {\n return !sub.options.once;\n });\n Object.keys(events).filter(evt => evt.endsWith('*') && name.startsWith(evt.replace('*', '')))\n .sort((a, b) => b.length - a.length)\n .forEach(evt => subscribers.push(...events[evt].map(sub => ({\n ...sub,\n options: { ...sub.options, event: name }\n }))));\n return subscribers;\n }\n}\n\nconst AppRunVersions = 'AppRun-3';\nlet app: App;\nconst root = (typeof self === 'object' && self.self === self && self) ||\n (typeof global === 'object' && global.global === global && global)\nif (root['app'] && root['_AppRunVersions']) {\n app = root['app'];\n} else {\n app = new App();\n root['app'] = app;\n root['_AppRunVersions'] = AppRunVersions;\n}\nexport default app;\n","import app from './app';\n\nconst getStateValue = (component, name) => {\n return (name ? component['state'][name] : component['state']) || '';\n}\n\nconst setStateValue = (component, name, value) => {\n if (name) {\n const state = component['state'] || {};\n state[name] = value;\n component.setState(state);\n } else {\n component.setState(value);\n }\n}\n\nconst apply_directive = (key: string, props: {}, tag, component) => {\n if (key.startsWith('$on')) {\n const event = props[key];\n key = key.substring(1)\n if (typeof event === 'boolean') {\n props[key] = e => component.run ? component.run(key, e) : app.run(key, e);\n } else if (typeof event === 'string') {\n props[key] = e => component.run ? component.run(event, e) : app.run(event, e);\n } else if (typeof event === 'function') {\n props[key] = e => component.setState(event(component.state, e));\n } else if (Array.isArray(event)) {\n const [handler, ...p] = event;\n if (typeof handler === 'string') {\n props[key] = e => component.run ? component.run(handler, ...p, e) : app.run(handler, ...p, e);\n } else if (typeof handler === 'function') {\n props[key] = e => component.setState(handler(component.state, ...p, e));\n }\n }\n\n } else if (key === '$bind') {\n const type = props['type'] || 'text';\n const name = typeof props[key] === 'string' ? props[key] : props['name'];\n if (tag === 'input') {\n switch (type) {\n case 'checkbox':\n props['checked'] = getStateValue(component, name);\n props['onclick'] = e => setStateValue(component, name || e.target.name, e.target.checked);\n break;\n case 'radio':\n props['checked'] = getStateValue(component, name) === props['value'];\n props['onclick'] = e => setStateValue(component, name || e.target.name, e.target.value);\n break;\n case 'number':\n case 'range':\n props['value'] = getStateValue(component, name);\n props['oninput'] = e => setStateValue(component, name || e.target.name, Number(e.target.value));\n break;\n default:\n props['value'] = getStateValue(component, name);\n props['oninput'] = e => setStateValue(component, name || e.target.name, e.target.value);\n }\n } else if (tag === 'select') {\n props['value'] = getStateValue(component, name);\n props['onchange'] = e => {\n if (!e.target.multiple) { // multiple selection use $bind on option\n setStateValue(component, name || e.target.name, e.target.value);\n }\n }\n } else if (tag === 'option') {\n props['selected'] = getStateValue(component, name);\n props['onclick'] = e => setStateValue(component, name || e.target.name, e.target.selected);\n } else if (tag === 'textarea') {\n props['innerHTML'] = getStateValue(component, name);\n props['oninput'] = e => setStateValue(component, name || e.target.name, e.target.value);\n }\n } else {\n app.run('$', { key, tag, props, component });\n }\n}\n\nconst directive = (vdom, component) => {\n if (Array.isArray(vdom)) {\n return vdom.map(element => directive(element, component));\n } else {\n let { tag, props, children } = vdom;\n if (tag) {\n if (props) Object.keys(props).forEach(key => {\n if (key.startsWith('$')) {\n apply_directive(key, props, tag, component);\n delete props[key];\n }\n });\n if (children) children = directive(children, component);\n return { tag, props, children };\n } else {\n return vdom;\n }\n }\n}\n\nexport default directive;","import { VDOM, VNode } from './types';\nimport directive from './directive';\nexport type Element = any; //HTMLElement | SVGSVGElement | SVGElement;\n\nexport function Fragment(props, ...children): any[] {\n return collect(children);\n}\n\nconst ATTR_PROPS = '_props';\n\nfunction collect(children) {\n const ch = [];\n const push = (c) => {\n if (c !== null && c !== undefined && c !== '' && c !== false) {\n ch.push((typeof c === 'function' || typeof c === 'object') ? c : `${c}`);\n }\n }\n children && children.forEach(c => {\n if (Array.isArray(c)) {\n c.forEach(i => push(i));\n } else {\n push(c);\n }\n });\n return ch;\n}\n\nexport function createElement(tag: string | Function | [], props?: {}, ...children) {\n const ch = collect(children);\n if (typeof tag === 'string') return { tag, props, children: ch };\n else if (Array.isArray(tag)) return tag; // JSX fragments - babel\n else if (tag === undefined && children) return ch; // JSX fragments - typescript\n else if (Object.getPrototypeOf(tag).__isAppRunComponent) return { tag, props, children: ch } // createComponent(tag, { ...props, children });\n else if (typeof tag === 'function') return tag(props, ch);\n else throw new Error(`Unknown tag in vdom ${tag}`);\n};\n\nconst keyCache = new WeakMap();\n\nexport const updateElement = (element: Element | string, nodes: VDOM, component = {}) => {\n // tslint:disable-next-line\n if (nodes == null || nodes === false) return;\n const el = (typeof element === 'string' && element) ?\n document.getElementById(element) || document.querySelector(element) : element;\n nodes = directive(nodes, component);\n render(el, nodes, component);\n}\n\nfunction render(element: Element, nodes: VDOM, parent = {}) {\n // tslint:disable-next-line\n if (nodes == null || nodes === false) return;\n nodes = createComponent(nodes, parent);\n if (!element) return;\n const isSvg = element.nodeName === \"SVG\";\n if (Array.isArray(nodes)) {\n updateChildren(element, nodes, isSvg);\n } else {\n updateChildren(element, [nodes], isSvg);\n }\n}\n\nfunction same(el: Element, node: VNode) {\n // if (!el || !node) return false;\n const key1 = el.nodeName;\n const key2 = `${node.tag || ''}`;\n return key1.toUpperCase() === key2.toUpperCase();\n}\n\nfunction update(element: Element, node: VNode, isSvg: boolean) {\n if (node['_op'] === 3) return;\n // console.assert(!!element);\n isSvg = isSvg || node.tag === \"svg\";\n if (!same(element, node)) {\n element.parentNode.replaceChild(create(node, isSvg), element);\n return;\n }\n !(node['_op'] & 2) && updateChildren(element, node.children, isSvg);\n !(node['_op'] & 1) && updateProps(element, node.props, isSvg);\n}\n\nfunction updateChildren(element, children, isSvg: boolean) {\n const old_len = element.childNodes?.length || 0;\n const new_len = children?.length || 0;\n const len = Math.min(old_len, new_len);\n for (let i = 0; i < len; i++) {\n const child = children[i];\n if (child['_op'] === 3) continue;\n const el = element.childNodes[i];\n if (typeof child === 'string') {\n if (el.textContent !== child) {\n if (el.nodeType === 3) {\n el.nodeValue = child\n } else {\n element.replaceChild(createText(child), el);\n }\n }\n } else if (child instanceof HTMLElement || child instanceof SVGElement) {\n element.insertBefore(child, el);\n } else {\n const key = child.props && child.props['key'];\n if (key) {\n if (el.key === key) {\n update(element.childNodes[i], child, isSvg);\n } else {\n // console.log(el.key, key);\n const old = keyCache[key];\n if (old) {\n const temp = old.nextSibling;\n element.insertBefore(old, el);\n temp ? element.insertBefore(el, temp) : element.appendChild(el);\n update(element.childNodes[i], child, isSvg);\n } else {\n element.replaceChild(create(child, isSvg), el);\n }\n }\n } else {\n update(element.childNodes[i], child, isSvg);\n }\n }\n }\n\n let n = element.childNodes?.length || 0;\n while (n > len) {\n element.removeChild(element.lastChild);\n n--;\n }\n\n if (new_len > len) {\n const d = document.createDocumentFragment();\n for (let i = len; i < children.length; i++) {\n d.appendChild(create(children[i], isSvg));\n }\n element.appendChild(d);\n }\n}\n\nexport const safeHTML = (html: string) => {\n const div = document.createElement('section');\n div.insertAdjacentHTML('afterbegin', html)\n return Array.from(div.children);\n}\n\nfunction createText(node) {\n if (node?.indexOf('_html:') === 0) { // ?\n const div = document.createElement('div');\n div.insertAdjacentHTML('afterbegin', node.substring(6))\n return div;\n } else {\n return document.createTextNode(node??'');\n }\n}\n\nfunction create(node: VNode | string | HTMLElement | SVGElement, isSvg: boolean): Element {\n // console.assert(node !== null && node !== undefined);\n if ((node instanceof HTMLElement) || (node instanceof SVGElement)) return node;\n if (typeof node === \"string\") return createText(node);\n if (!node.tag || (typeof node.tag === 'function')) return createText(JSON.stringify(node));\n isSvg = isSvg || node.tag === \"svg\";\n const element = isSvg\n ? document.createElementNS(\"http://www.w3.org/2000/svg\", node.tag)\n : document.createElement(node.tag);\n\n updateProps(element, node.props, isSvg);\n if (node.children) node.children.forEach(child => element.appendChild(create(child, isSvg)));\n return element\n}\n\nfunction mergeProps(oldProps: {}, newProps: {}): {} {\n newProps['class'] = newProps['class'] || newProps['className'];\n delete newProps['className'];\n const props = {};\n if (oldProps) Object.keys(oldProps).forEach(p => props[p] = null);\n if (newProps) Object.keys(newProps).forEach(p => props[p] = newProps[p]);\n return props;\n}\n\nexport function updateProps(element: Element, props: {}, isSvg) {\n // console.assert(!!element);\n const cached = element[ATTR_PROPS] || {};\n props = mergeProps(cached, props || {});\n element[ATTR_PROPS] = props;\n\n for (const name in props) {\n const value = props[name];\n // if (cached[name] === value) continue;\n // console.log('updateProps', name, value);\n if (name.startsWith('data-')) {\n const dname = name.substring(5);\n const cname = dname.replace(/-(\\w)/g, (match) => match[1].toUpperCase());\n if (element.dataset[cname] !== value) {\n if (value || value === \"\") element.dataset[cname] = value;\n else delete element.dataset[cname];\n }\n } else if (name === 'style') {\n if (element.style.cssText) element.style.cssText = '';\n if (typeof value === 'string') element.style.cssText = value;\n else {\n for (const s in value) {\n if (element.style[s] !== value[s]) element.style[s] = value[s];\n }\n }\n } else if (name.startsWith('xlink')) {\n const xname = name.replace('xlink', '').toLowerCase();\n if (value == null || value === false) {\n element.removeAttributeNS('http://www.w3.org/1999/xlink', xname);\n } else {\n element.setAttributeNS('http://www.w3.org/1999/xlink', xname, value);\n }\n } else if (name.startsWith('on')) {\n if (!value || typeof value === 'function') {\n element[name] = value;\n } else if (typeof value === 'string') {\n if (value) element.setAttribute(name, value);\n else element.removeAttribute(name);\n }\n } else if (/^id$|^class$|^list$|^readonly$|^contenteditable$|^role|-/g.test(name) || isSvg) {\n if (element.getAttribute(name) !== value) {\n if (value) element.setAttribute(name, value);\n else element.removeAttribute(name);\n }\n } else if (element[name] !== value) {\n element[name] = value;\n }\n if (name === 'key' && value) keyCache[value] = element;\n }\n if (props && typeof props['ref'] === 'function') {\n window.requestAnimationFrame(() => props['ref'](element));\n }\n}\n\nfunction render_component(node, parent, idx) {\n const { tag, props, children } = node;\n let key = `_${idx}`;\n let id = props && props['id'];\n if (!id) id = `_${idx}${Date.now()}`;\n else key = id;\n let asTag = 'section';\n if (props && props['as']) {\n asTag = props['as'];\n delete props['as'];\n }\n if (!parent.__componentCache) parent.__componentCache = {};\n let component = parent.__componentCache[key];\n if (!component || !(component instanceof tag) || !component.element) {\n const element = document.createElement(asTag);\n component = parent.__componentCache[key] = new tag({ ...props, children }).start(element);\n } else {\n component.renderState(component.state);\n }\n if (component.mounted) {\n const new_state = component.mounted(props, children, component.state);\n (typeof new_state !== 'undefined') && component.setState(new_state);\n }\n updateProps(component.element, props, false);\n return component.element;\n}\n\nfunction createComponent(node, parent, idx = 0) {\n if (typeof node === 'string') return node;\n if (Array.isArray(node)) return node.map(child => createComponent(child, parent, idx++));\n let vdom = node;\n if (node && typeof node.tag === 'function' && Object.getPrototypeOf(node.tag).__isAppRunComponent) {\n vdom = render_component(node, parent, idx);\n }\n if (vdom && Array.isArray(vdom.children)) {\n const new_parent = vdom.props?._component;\n if (new_parent) {\n let i = 0;\n vdom.children = vdom.children.map(child => createComponent(child, new_parent, i++));\n } else {\n vdom.children = vdom.children.map(child => createComponent(child, parent, idx++));\n }\n }\n return vdom;\n}\n","declare var customElements;\n\nexport type CustomElementOptions = {\n render?: boolean;\n shadow?: boolean;\n history?: boolean;\n global_event?: boolean;\n observedAttributes?: string[];\n};\n\nexport const customElement = (componentClass, options: CustomElementOptions = {}) => class CustomElement extends HTMLElement {\n private _shadowRoot;\n private _component;\n private _attrMap: (arg0: string) => string;\n public on;\n public run;\n constructor() {\n super();\n }\n get component() { return this._component; }\n get state() { return this._component.state; }\n\n static get observedAttributes() {\n // attributes need to be set to lowercase in order to get observed\n return (options.observedAttributes || []).map(attr => attr.toLowerCase());\n }\n\n connectedCallback() {\n if (this.isConnected && !this._component) {\n const opts = options || {};\n this._shadowRoot = opts.shadow ? this.attachShadow({ mode: 'open' }) : this;\n const observedAttributes = (opts.observedAttributes || [])\n\n const attrMap = observedAttributes.reduce((map, name) => {\n const lc = name.toLowerCase()\n if (lc !== name) {\n map[lc] = name\n }\n return map\n }, {})\n this._attrMap = (name: string) : string => attrMap[name] || name\n\n const props = {};\n Array.from(this.attributes).forEach(item => props[this._attrMap(item.name)] = item.value);\n\n // add getters/ setters to allow observation on observedAttributes\n observedAttributes.forEach(name => {\n if (this[name] !== undefined) props[name] = this[name];\n Object.defineProperty(this, name, {\n get(): any {\n return props[name];\n },\n set(this: CustomElement, value: unknown) {\n // trigger change event\n this.attributeChangedCallback(name, props[name], value)\n },\n configurable: true,\n enumerable: true\n });\n })\n\n requestAnimationFrame(() => {\n const children = this.children ? Array.from(this.children) : [];\n children.forEach(el => el.parentElement.removeChild(el));\n this._component = new componentClass({ ...props, children }).mount(this._shadowRoot, opts);\n // attach props to component\n this._component._props = props;\n // expose dispatchEvent\n this._component.dispatchEvent = this.dispatchEvent.bind(this)\n if (this._component.mounted) {\n const new_state = this._component.mounted(props, children, this._component.state);\n if (typeof new_state !== 'undefined') this._component.state = new_state;\n }\n this.on = this._component.on.bind(this._component);\n this.run = this._component.run.bind(this._component);\n if (!(opts.render === false)) this._component.run('.');\n });\n }\n }\n\n disconnectedCallback() {\n this._component?.unload?.();\n this._component?.unmount?.();\n this._component = null;\n }\n\n attributeChangedCallback(name: string, oldValue: unknown, value: unknown) {\n if (this._component) {\n // camelCase attributes arrive only in lowercase\n const mappedName = this._attrMap(name);\n // store the new property/ attribute\n this._component._props[mappedName] = value;\n this._component.run('attributeChanged', mappedName, oldValue, value);\n\n if (value !== oldValue && !(options.render === false)) {\n window.requestAnimationFrame(() => {\n // re-render state with new combined props on next animation frame\n this._component.run('.')\n })\n }\n }\n }\n}\n\nexport default (name: string, componentClass, options?: CustomElementOptions) => {\n (typeof customElements !== 'undefined') && customElements.define(name, customElement(componentClass, options))\n}\n","import webComponent, { CustomElementOptions } from './web-component';\n\n// tslint:disable:no-invalid-this\nexport const Reflect = {\n\n meta: new WeakMap(),\n\n defineMetadata(metadataKey, metadataValue, target) {\n if (!this.meta.has(target)) this.meta.set(target, {});\n this.meta.get(target)[metadataKey] = metadataValue;\n },\n\n getMetadataKeys(target) {\n target = Object.getPrototypeOf(target);\n return this.meta.get(target) ? Object.keys(this.meta.get(target)) : [];\n },\n\n getMetadata(metadataKey, target) {\n target = Object.getPrototypeOf(target);\n return this.meta.get(target) ? this.meta.get(target)[metadataKey] : null;\n }\n}\n\nexport function update<E=string>(events?: E, options: any = {}) {\n return (target: any, key: string, descriptor: any) => {\n const name = events ? events.toString() : key;\n Reflect.defineMetadata(`apprun-update:${name}`,\n { name, key, options }, target);\n return descriptor;\n }\n}\n\nexport function on<E = string>(events?: E, options: any = {}) {\n return function (target: any, key: string) {\n const name = events ? events.toString() : key;\n Reflect.defineMetadata(`apprun-update:${name}`,\n { name, key, options }, target)\n }\n}\n\nexport function customElement(name: string, options?: CustomElementOptions) {\n return function _customElement<T extends { new(...args: any[]): {} }>(constructor: T) {\n webComponent(name, constructor, options);\n return constructor;\n }\n}\n\n","\r\nimport app, { App } from './app';\r\nimport { Reflect } from './decorator'\r\nimport { View, Update, ActionDef, ActionOptions, MountOptions } from './types';\r\nimport directive from './directive';\r\n\r\nconst componentCache = new Map();\r\nif (!app.find('get-components')) app.on('get-components', o => o.components = componentCache);\r\n\r\nconst REFRESH = state => state;\r\n\r\nexport class Component<T = any, E = any> {\r\n static __isAppRunComponent = true;\r\n private _app = new App();\r\n private _actions = [];\r\n private _global_events = [];\r\n private _state;\r\n private _history = [];\r\n private _history_idx = -1;\r\n private enable_history;\r\n private global_event;\r\n public element;\r\n public rendered;\r\n public mounted;\r\n public unload;\r\n private tracking_id;\r\n private observer;\r\n\r\n\r\n private renderState(state: T, vdom = null) {\r\n if (!this.view) return;\r\n let html = vdom || this.view(state);\r\n app['debug'] && app.run('debug', {\r\n component: this,\r\n _: html ? '.' : '-',\r\n state,\r\n vdom: html,\r\n el: this.element\r\n });\r\n\r\n if (typeof document !== 'object') return;\r\n\r\n const el = (typeof this.element === 'string' && this.element) ?\r\n document.getElementById(this.element) || document.querySelector(this.element) : this.element;\r\n\r\n if (el) {\r\n const tracking_attr = '_c';\r\n if (!this.unload) {\r\n el.removeAttribute && el.removeAttribute(tracking_attr);\r\n } else if (el['_component'] !== this || el.getAttribute(tracking_attr) !== this.tracking_id) {\r\n this.tracking_id = new Date().valueOf().toString();\r\n el.setAttribute(tracking_attr, this.tracking_id);\r\n if (typeof MutationObserver !== 'undefined') {\r\n if (!this.observer) this.observer = new MutationObserver(changes => {\r\n if (changes[0].oldValue === this.tracking_id || !document.body.contains(el)) {\r\n this.unload(this.state);\r\n this.observer.disconnect();\r\n this.observer = null;\r\n }\r\n });\r\n this.observer.observe(document.body, {\r\n childList: true, subtree: true,\r\n attributes: true, attributeOldValue: true, attributeFilter: [tracking_attr]\r\n });\r\n }\r\n }\r\n el['_component'] = this;\r\n }\r\n if (!vdom && html) {\r\n html = directive(html, this);\r\n app.render(el, html, this);\r\n }\r\n this.rendered && this.rendered(this.state);\r\n }\r\n\r\n public setState(state: T, options: ActionOptions\r\n = { render: true, history: false }) {\r\n if (state instanceof Promise) {\r\n // Promise will not be saved or rendered\r\n // state will be saved and rendered when promise is resolved\r\n Promise.resolve(state).then(v => {\r\n this.setState(v, options);\r\n this._state = state;\r\n });\r\n } else {\r\n this._state = state;\r\n if (state == null) return;\r\n this.state = state;\r\n if (options.render !== false) this.renderState(state);\r\n if (options.history !== false && this.enable_history) {\r\n this._history = [...this._history, state];\r\n this._history_idx = this._history.length - 1;\r\n }\r\n if (typeof options.callback === 'function') options.callback(this.state);\r\n }\r\n }\r\n\r\n private _history_prev = () => {\r\n this._history_idx--;\r\n if (this._history_idx >= 0) {\r\n this.setState(this._history[this._history_idx], { render: true, history: false });\r\n }\r\n else {\r\n this._history_idx = 0;\r\n }\r\n };\r\n\r\n private _history_next = () => {\r\n this._history_idx++;\r\n if (this._history_idx < this._history.length) {\r\n this.setState(this._history[this._history_idx], { render: true, history: false });\r\n }\r\n else {\r\n this._history_idx = this._history.length - 1;\r\n }\r\n };\r\n\r\n constructor(\r\n protected state?: T,\r\n protected view?: View<T>,\r\n protected update?: Update<T, E>,\r\n protected options?) {\r\n }\r\n\r\n start = (element = null, options?: MountOptions): Component<T, E> => {\r\n return this.mount(element, { render: true, ...options });\r\n }\r\n\r\n public mount(element = null, options?: MountOptions): Component<T, E> {\r\n console.assert(!this.element, 'Component already mounted.')\r\n this.options = options = { ...this.options, ...options };\r\n this.element = element;\r\n this.global_event = options.global_event;\r\n this.enable_history = !!options.history;\r\n\r\n if (this.enable_history) {\r\n this.on(options.history.prev || 'history-prev', this._history_prev);\r\n this.on(options.history.next || 'history-next', this._history_next);\r\n }\r\n\r\n if (options.route) {\r\n this.update = this.update || {};\r\n if (!this.update[options.route]) this.update[options.route] = REFRESH;\r\n }\r\n\r\n this.add_actions();\r\n this.state = this.state ?? this['model'] ?? {};\r\n if (typeof this.state === 'function') this.state = this.state();\r\n\r\n this.setState(this.state, { render: !!options.render, history: true });\r\n\r\n if (app['debug']) {\r\n if (componentCache.get(element)) { componentCache.get(element).push(this) }\r\n else { componentCache.set(element, [this]) }\r\n }\r\n return this;\r\n }\r\n\r\n is_global_event(name: string): boolean {\r\n return name && (\r\n this.global_event ||\r\n this._global_events.indexOf(name) >= 0 ||\r\n name.startsWith('#') || name.startsWith('/') || name.startsWith('@'));\r\n }\r\n\r\n add_action(name: string, action, options: ActionOptions = {}) {\r\n if (!action || typeof action !== 'function') return;\r\n if (options.global) this._global_events.push(name);\r\n this.on(name as any, (...p) => {\r\n\r\n app['debug'] && app.run('debug', {\r\n component: this,\r\n _: '>',\r\n event: name, p,\r\n current_state: this.state,\r\n options\r\n });\r\n\r\n const newState = action(this.state, ...p);\r\n\r\n app['debug'] && app.run('debug', {\r\n component: this,\r\n _: '<',\r\n event: name, p,\r\n newState,\r\n state: this.state,\r\n options\r\n });\r\n\r\n this.setState(newState, options)\r\n }, options);\r\n }\r\n\r\n add_actions() {\r\n const actions = this.update || {};\r\n Reflect.getMetadataKeys(this).forEach(key => {\r\n if (key.startsWith('apprun-update:')) {\r\n const meta = Reflect.getMetadata(key, this)\r\n actions[meta.name] = [this[meta.key].bind(this), meta.options];\r\n }\r\n })\r\n\r\n const all = {};\r\n if (Array.isArray(actions)) {\r\n actions.forEach(act => {\r\n const [name, action, opts] = act as ActionDef<T, E>;\r\n const names = name.toString();\r\n names.split(',').forEach(n => all[n.trim()] = [action, opts])\r\n })\r\n } else {\r\n Object.keys(actions).forEach(name => {\r\n const action = actions[name];\r\n if (typeof action === 'function' || Array.isArray(action)) {\r\n name.split(',').forEach(n => all[n.trim()] = action)\r\n }\r\n })\r\n }\r\n\r\n if (!all['.']) all['.'] = REFRESH;\r\n Object.keys(all).forEach(name => {\r\n const action = all[name];\r\n if (typeof action === 'function') {\r\n this.add_action(name, action);\r\n } else if (Array.isArray(action)) {\r\n this.add_action(name, action[0], action[1]);\r\n }\r\n });\r\n }\r\n\r\n public run(event: E, ...args) {\r\n if (this.state instanceof Promise) {\r\n return Promise.resolve(this.state).then(state => {\r\n this.state = state;\r\n this.run(event, ...args)\r\n });\r\n } else {\r\n const name = event.toString();\r\n return this.is_global_event(name) ?\r\n app.run(name, ...args) :\r\n this._app.run(name, ...args);\r\n }\r\n }\r\n\r\n public on(event: E, fn: (...args) => void, options?: any) {\r\n const name = event.toString();\r\n this._actions.push({ name, fn });\r\n return this.is_global_event(name) ?\r\n app.on(name, fn, options) :\r\n this._app.on(name, fn, options);\r\n }\r\n\r\n public unmount() {\r\n this.observer?.disconnect();\r\n this._actions.forEach(action => {\r\n const { name, fn } = action;\r\n this.is_global_event(name) ?\r\n app.off(name, fn) :\r\n this._app.off(name, fn);\r\n });\r\n }\r\n}\r\n","import app from './app';\n\nexport type Route = (url: string, ...args: any[]) => any;\n\nexport const ROUTER_EVENT: string = '//';\nexport const ROUTER_404_EVENT: string = '///';\n\nexport const route: Route = (url: string) => {\n if (!url) url = '#';\n if (url.startsWith('#')) {\n const [name, ...rest] = url.split('/');\n app.run(name, ...rest) || app.run(ROUTER_404_EVENT, name, ...rest);\n app.run(ROUTER_EVENT, name, ...rest);\n } else if (url.startsWith('/')) {\n const [_, name, ...rest] = url.split('/');\n app.run('/' + name, ...rest) || app.run(ROUTER_404_EVENT, '/' + name, ...rest);\n app.run(ROUTER_EVENT, '/' + name, ...rest);\n } else {\n app.run(url) || app.run(ROUTER_404_EVENT, url);\n app.run(ROUTER_EVENT, url);\n }\n}\nexport default route;","import app, { App } from './app';\nimport { createElement, render, Fragment, safeHTML } from './vdom';\nimport { Component } from './component';\nimport { VNode, View, Action, Update, EventOptions, ActionOptions, MountOptions, AppStartOptions } from './types';\nimport { on, update, customElement } from './decorator';\nimport webComponent, { CustomElementOptions } from './web-component';\nimport { Route, route, ROUTER_EVENT, ROUTER_404_EVENT } from './router';\n\nexport interface IApp {\n start<T, E = any>(element?: Element | string, model?: T, view?: View<T>, update?: Update<T, E>,\n options?: AppStartOptions<T>): Component<T, E>;\n on(name: string, fn: (...args: any[]) => void, options?: any): void;\n off(name: string, fn: (...args: any[]) => void): void;\n run(name: string, ...args: any[]): number;\n find(name: string): any | any[];\n h(tag: string | Function, props, ...children): VNode | VNode[];\n createElement(tag: string | Function, props, ...children): VNode | VNode[];\n render(element: Element | string, node: VNode): void;\n Fragment(props, ...children): any[];\n route?: Route;\n webComponent(name: string, componentClass, options?: CustomElementOptions): void;\n safeHTML(html: string): any[];\n}\n\napp.h = app.createElement = createElement;\napp.render = render;\napp.Fragment = Fragment;\napp.webComponent = webComponent;\napp.safeHTML = safeHTML;\n\napp.start = <T, E = any>(element?: Element | string, model?: T, view?: View<T>, update?: Update<T, E>,\n options?: AppStartOptions<T>): Component<T, E> => {\n const opts = { render: true, global_event: true, ...options };\n const component = new Component<T, E>(model, view, update);\n if (options && options.rendered) component.rendered = options.rendered;\n component.mount(element, opts);\n return component;\n};\n\nconst NOOP = _ => {/* Intentionally empty */ }\napp.on('$', NOOP);\napp.on('debug', _ => NOOP);\napp.on(ROUTER_EVENT, NOOP);\napp.on('#', NOOP);\napp['route'] = route;\napp.on('route', url => app['route'] && app['route'](url));\n\nif (typeof document === 'object') {\n document.addEventListener(\"DOMContentLoaded\", () => {\n if (app['route'] === route) {\n window.onpopstate = () => route(location.hash);\n document.body.hasAttribute('apprun-no-init') || app['no-init-route'] || route(location.hash);\n }\n });\n}\nexport type StatelessComponent<T = {}> = (args: T) => string | VNode | void;\nexport { App, app, Component, View, Action, Update, on, update, EventOptions, ActionOptions, MountOptions, Fragment, safeHTML }\nexport { update as event };\nexport { ROUTER_EVENT, ROUTER_404_EVENT };\nexport { customElement, CustomElementOptions, AppStartOptions };\nexport default app as IApp;\n\nif (typeof window === 'object') {\n window['Component'] = Component;\n window['_React'] = window['React'];\n window['React'] = app;\n window['on'] = on;\n window['customElement'] = customElement;\n window['safeHTML'] = safeHTML;\n}\n\n\n"],"names":["App","constructor","this","_events","on","name","fn","options","push","off","subscribers","filter","sub","find","run","args","getSubscribers","console","assert","length","forEach","delay","Object","keys","apply","once","assign","_t","clearTimeout","setTimeout","query","promises","map","Promise","all","events","evt","endsWith","startsWith","replace","sort","a","b","event","app","root","self","global","app$1","getStateValue","component","setStateValue","value","state","setState","directive","vdom","Array","isArray","element","tag","props","children","key","substring","e","handler","p","type","target","checked","Number","multiple","selected","apply_directive","Fragment","collect","ATTR_PROPS","ch","c","i","keyCache","WeakMap","update","node","isSvg","el","key1","nodeName","key2","toUpperCase","same","parentNode","replaceChild","create","updateChildren","updateProps","old_len","_a","childNodes","new_len","len","Math","min","child","textContent","nodeType","nodeValue","createText","HTMLElement","SVGElement","insertBefore","old","temp","nextSibling","appendChild","n","_b","removeChild","lastChild","d","document","createDocumentFragment","safeHTML","html","div","createElement","insertAdjacentHTML","from","indexOf","createTextNode","JSON","stringify","createElementNS","cached","oldProps","newProps","mergeProps","cname","match","dataset","style","cssText","s","xname","toLowerCase","removeAttributeNS","setAttributeNS","setAttribute","removeAttribute","test","getAttribute","window","requestAnimationFrame","createComponent","parent","idx","getPrototypeOf","__isAppRunComponent","id","Date","now","asTag","__componentCache","renderState","start","mounted","new_state","render_component","new_parent","_component","customElement","componentClass","super","observedAttributes","attr","connectedCallback","isConnected","opts","_shadowRoot","shadow","attachShadow","mode","attrMap","reduce","lc","_attrMap","attributes","item","undefined","defineProperty","get","set","attributeChangedCallback","configurable","enumerable","parentElement","mount","_props","dispatchEvent","bind","render","disconnectedCallback","unload","_d","_c","unmount","oldValue","mappedName","webComponent","customElements","define","Reflect","meta","defineMetadata","metadataKey","metadataValue","has","getMetadataKeys","getMetadata","descriptor","toString","componentCache","Map","o","components","REFRESH","Component","view","_app","_actions","_global_events","_history","_history_idx","_history_prev","history","_history_next","_","getElementById","querySelector","tracking_attr","tracking_id","valueOf","MutationObserver","observer","changes","body","contains","disconnect","observe","childList","subtree","attributeOldValue","attributeFilter","rendered","resolve","then","v","_state","enable_history","callback","global_event","prev","next","route","add_actions","is_global_event","add_action","action","current_state","newState","actions","act","split","trim","ROUTER_EVENT","ROUTER_404_EVENT","url","rest","h","Error","nodes","model","NOOP","addEventListener","onpopstate","location","hash","hasAttribute"],"mappings":"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"}
1
+ {"version":3,"file":"apprun.esm.js","sources":["../src/app.ts","../src/directive.ts","../src/vdom-my.ts","../src/web-component.ts","../src/decorator.ts","../src/component.ts","../src/router.ts","../src/apprun.ts"],"sourcesContent":["import { EventOptions} from './types'\nexport class App {\n\n private _events: Object;\n\n public start;\n public h;\n public createElement;\n public render;\n public Fragment;\n public webComponent;\n public safeHTML;\n\n constructor() {\n this._events = {};\n }\n\n on(name: string, fn: (...args) => void, options: EventOptions = {}): void {\n this._events[name] = this._events[name] || [];\n this._events[name].push({ fn, options });\n }\n\n off(name: string, fn: (...args) => void): void {\n const subscribers = this._events[name] || [];\n\n this._events[name] = subscribers.filter((sub) => sub.fn !== fn);\n }\n\n find(name: string): any {\n return this._events[name];\n }\n\n run(name: string, ...args): number {\n const subscribers = this.getSubscribers(name, this._events);\n console.assert(subscribers && subscribers.length > 0, 'No subscriber for event: ' + name);\n subscribers.forEach((sub) => {\n const { fn, options } = sub;\n if (options.delay) {\n this.delay(name, fn, args, options);\n } else {\n Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);\n }\n return !sub.options.once;\n });\n\n return subscribers.length;\n }\n\n once(name: string, fn, options: EventOptions = {}): void {\n this.on(name, fn, { ...options, once: true });\n }\n\n private delay(name, fn, args, options): void {\n if (options._t) clearTimeout(options._t);\n options._t = setTimeout(() => {\n clearTimeout(options._t);\n Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);\n }, options.delay);\n }\n\n runAsync(name: string, ...args): Promise<any[]> {\n const subscribers = this.getSubscribers(name, this._events);\n console.assert(subscribers && subscribers.length > 0, 'No subscriber for event: ' + name);\n const promises = subscribers.map(sub => {\n const { fn, options } = sub;\n return Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);\n });\n return Promise.all(promises);\n }\n\n query(name: string, ...args): Promise<any[]> {\n return this.query(name, ...args);\n }\n\n private getSubscribers(name: string, events) {\n const subscribers = events[name] || [];\n\n // Update the list of subscribers by pulling out those which will run once.\n // We must do this update prior to running any of the events in case they\n // cause additional events to be turned off or on.\n events[name] = subscribers.filter((sub) => {\n return !sub.options.once;\n });\n Object.keys(events).filter(evt => evt.endsWith('*') && name.startsWith(evt.replace('*', '')))\n .sort((a, b) => b.length - a.length)\n .forEach(evt => subscribers.push(...events[evt].map(sub => ({\n ...sub,\n options: { ...sub.options, event: name }\n }))));\n return subscribers;\n }\n}\n\nconst AppRunVersions = 'AppRun-3';\nlet app: App;\nconst root = (typeof self === 'object' && self.self === self && self) ||\n (typeof global === 'object' && global.global === global && global)\nif (root['app'] && root['_AppRunVersions']) {\n app = root['app'];\n} else {\n app = new App();\n root['app'] = app;\n root['_AppRunVersions'] = AppRunVersions;\n}\nexport default app;\n","import app from './app';\n\nconst getStateValue = (component, name) => {\n return (name ? component['state'][name] : component['state']) || '';\n}\n\nconst setStateValue = (component, name, value) => {\n if (name) {\n const state = component['state'] || {};\n state[name] = value;\n component.setState(state);\n } else {\n component.setState(value);\n }\n}\n\nconst apply_directive = (key: string, props: {}, tag, component) => {\n if (key.startsWith('$on')) {\n const event = props[key];\n key = key.substring(1)\n if (typeof event === 'boolean') {\n props[key] = e => component.run ? component.run(key, e) : app.run(key, e);\n } else if (typeof event === 'string') {\n props[key] = e => component.run ? component.run(event, e) : app.run(event, e);\n } else if (typeof event === 'function') {\n props[key] = e => component.setState(event(component.state, e));\n } else if (Array.isArray(event)) {\n const [handler, ...p] = event;\n if (typeof handler === 'string') {\n props[key] = e => component.run ? component.run(handler, ...p, e) : app.run(handler, ...p, e);\n } else if (typeof handler === 'function') {\n props[key] = e => component.setState(handler(component.state, ...p, e));\n }\n }\n\n } else if (key === '$bind') {\n const type = props['type'] || 'text';\n const name = typeof props[key] === 'string' ? props[key] : props['name'];\n if (tag === 'input') {\n switch (type) {\n case 'checkbox':\n props['checked'] = getStateValue(component, name);\n props['onclick'] = e => setStateValue(component, name || e.target.name, e.target.checked);\n break;\n case 'radio':\n props['checked'] = getStateValue(component, name) === props['value'];\n props['onclick'] = e => setStateValue(component, name || e.target.name, e.target.value);\n break;\n case 'number':\n case 'range':\n props['value'] = getStateValue(component, name);\n props['oninput'] = e => setStateValue(component, name || e.target.name, Number(e.target.value));\n break;\n default:\n props['value'] = getStateValue(component, name);\n props['oninput'] = e => setStateValue(component, name || e.target.name, e.target.value);\n }\n } else if (tag === 'select') {\n props['value'] = getStateValue(component, name);\n props['onchange'] = e => {\n if (!e.target.multiple) { // multiple selection use $bind on option\n setStateValue(component, name || e.target.name, e.target.value);\n }\n }\n } else if (tag === 'option') {\n props['selected'] = getStateValue(component, name);\n props['onclick'] = e => setStateValue(component, name || e.target.name, e.target.selected);\n } else if (tag === 'textarea') {\n props['innerHTML'] = getStateValue(component, name);\n props['oninput'] = e => setStateValue(component, name || e.target.name, e.target.value);\n }\n } else {\n app.run('$', { key, tag, props, component });\n }\n}\n\nconst directive = (vdom, component) => {\n if (Array.isArray(vdom)) {\n return vdom.map(element => directive(element, component));\n } else {\n let { tag, props, children } = vdom;\n if (tag) {\n if (props) Object.keys(props).forEach(key => {\n if (key.startsWith('$')) {\n apply_directive(key, props, tag, component);\n delete props[key];\n }\n });\n if (children) children = directive(children, component);\n return { tag, props, children };\n } else {\n return vdom;\n }\n }\n}\n\nexport default directive;","import { VDOM, VNode } from './types';\nimport directive from './directive';\nexport type Element = any; //HTMLElement | SVGSVGElement | SVGElement;\n\nexport function Fragment(props, ...children): any[] {\n return collect(children);\n}\n\nconst ATTR_PROPS = '_props';\n\nfunction collect(children) {\n const ch = [];\n const push = (c) => {\n if (c !== null && c !== undefined && c !== '' && c !== false) {\n ch.push((typeof c === 'function' || typeof c === 'object') ? c : `${c}`);\n }\n }\n children && children.forEach(c => {\n if (Array.isArray(c)) {\n c.forEach(i => push(i));\n } else {\n push(c);\n }\n });\n return ch;\n}\n\nexport function createElement(tag: string | Function | [], props?: {}, ...children) {\n const ch = collect(children);\n if (typeof tag === 'string') return { tag, props, children: ch };\n else if (Array.isArray(tag)) return tag; // JSX fragments - babel\n else if (tag === undefined && children) return ch; // JSX fragments - typescript\n else if (Object.getPrototypeOf(tag).__isAppRunComponent) return { tag, props, children: ch } // createComponent(tag, { ...props, children });\n else if (typeof tag === 'function') return tag(props, ch);\n else throw new Error(`Unknown tag in vdom ${tag}`);\n};\n\nconst keyCache = new WeakMap();\n\nexport const updateElement = (element: Element | string, nodes: VDOM, component = {}) => {\n // tslint:disable-next-line\n if (nodes == null || nodes === false) return;\n const el = (typeof element === 'string' && element) ?\n document.getElementById(element) || document.querySelector(element) : element;\n nodes = directive(nodes, component);\n render(el, nodes, component);\n}\n\nfunction render(element: Element, nodes: VDOM, parent = {}) {\n // tslint:disable-next-line\n if (nodes == null || nodes === false) return;\n nodes = createComponent(nodes, parent);\n if (!element) return;\n const isSvg = element.nodeName === \"SVG\";\n if (Array.isArray(nodes)) {\n updateChildren(element, nodes, isSvg);\n } else {\n updateChildren(element, [nodes], isSvg);\n }\n}\n\nfunction same(el: Element, node: VNode) {\n // if (!el || !node) return false;\n const key1 = el.nodeName;\n const key2 = `${node.tag || ''}`;\n return key1.toUpperCase() === key2.toUpperCase();\n}\n\nfunction update(element: Element, node: VNode, isSvg: boolean) {\n if (node['_op'] === 3) return;\n // console.assert(!!element);\n isSvg = isSvg || node.tag === \"svg\";\n if (!same(element, node)) {\n element.parentNode.replaceChild(create(node, isSvg), element);\n return;\n }\n !(node['_op'] & 2) && updateChildren(element, node.children, isSvg);\n !(node['_op'] & 1) && updateProps(element, node.props, isSvg);\n}\n\nfunction updateChildren(element, children, isSvg: boolean) {\n const old_len = element.childNodes?.length || 0;\n const new_len = children?.length || 0;\n const len = Math.min(old_len, new_len);\n for (let i = 0; i < len; i++) {\n const child = children[i];\n if (child['_op'] === 3) continue;\n const el = element.childNodes[i];\n if (typeof child === 'string') {\n if (el.textContent !== child) {\n if (el.nodeType === 3) {\n el.nodeValue = child\n } else {\n element.replaceChild(createText(child), el);\n }\n }\n } else if (child instanceof HTMLElement || child instanceof SVGElement) {\n element.insertBefore(child, el);\n } else {\n const key = child.props && child.props['key'];\n if (key) {\n if (el.key === key) {\n update(element.childNodes[i], child, isSvg);\n } else {\n // console.log(el.key, key);\n const old = keyCache[key];\n if (old) {\n const temp = old.nextSibling;\n element.insertBefore(old, el);\n temp ? element.insertBefore(el, temp) : element.appendChild(el);\n update(element.childNodes[i], child, isSvg);\n } else {\n element.replaceChild(create(child, isSvg), el);\n }\n }\n } else {\n update(element.childNodes[i], child, isSvg);\n }\n }\n }\n\n let n = element.childNodes?.length || 0;\n while (n > len) {\n element.removeChild(element.lastChild);\n n--;\n }\n\n if (new_len > len) {\n const d = document.createDocumentFragment();\n for (let i = len; i < children.length; i++) {\n d.appendChild(create(children[i], isSvg));\n }\n element.appendChild(d);\n }\n}\n\nexport const safeHTML = (html: string) => {\n const div = document.createElement('section');\n div.insertAdjacentHTML('afterbegin', html)\n return Array.from(div.children);\n}\n\nfunction createText(node) {\n if (node?.indexOf('_html:') === 0) { // ?\n const div = document.createElement('div');\n div.insertAdjacentHTML('afterbegin', node.substring(6))\n return div;\n } else {\n return document.createTextNode(node??'');\n }\n}\n\nfunction create(node: VNode | string | HTMLElement | SVGElement, isSvg: boolean): Element {\n // console.assert(node !== null && node !== undefined);\n if ((node instanceof HTMLElement) || (node instanceof SVGElement)) return node;\n if (typeof node === \"string\") return createText(node);\n if (!node.tag || (typeof node.tag === 'function')) return createText(JSON.stringify(node));\n isSvg = isSvg || node.tag === \"svg\";\n const element = isSvg\n ? document.createElementNS(\"http://www.w3.org/2000/svg\", node.tag)\n : document.createElement(node.tag);\n\n updateProps(element, node.props, isSvg);\n if (node.children) node.children.forEach(child => element.appendChild(create(child, isSvg)));\n return element\n}\n\nfunction mergeProps(oldProps: {}, newProps: {}): {} {\n newProps['class'] = newProps['class'] || newProps['className'];\n delete newProps['className'];\n const props = {};\n if (oldProps) Object.keys(oldProps).forEach(p => props[p] = null);\n if (newProps) Object.keys(newProps).forEach(p => props[p] = newProps[p]);\n return props;\n}\n\nexport function updateProps(element: Element, props: {}, isSvg) {\n // console.assert(!!element);\n const cached = element[ATTR_PROPS] || {};\n props = mergeProps(cached, props || {});\n element[ATTR_PROPS] = props;\n\n for (const name in props) {\n const value = props[name];\n // if (cached[name] === value) continue;\n // console.log('updateProps', name, value);\n if (name.startsWith('data-')) {\n const dname = name.substring(5);\n const cname = dname.replace(/-(\\w)/g, (match) => match[1].toUpperCase());\n if (element.dataset[cname] !== value) {\n if (value || value === \"\") element.dataset[cname] = value;\n else delete element.dataset[cname];\n }\n } else if (name === 'style') {\n if (element.style.cssText) element.style.cssText = '';\n if (typeof value === 'string') element.style.cssText = value;\n else {\n for (const s in value) {\n if (element.style[s] !== value[s]) element.style[s] = value[s];\n }\n }\n } else if (name.startsWith('xlink')) {\n const xname = name.replace('xlink', '').toLowerCase();\n if (value == null || value === false) {\n element.removeAttributeNS('http://www.w3.org/1999/xlink', xname);\n } else {\n element.setAttributeNS('http://www.w3.org/1999/xlink', xname, value);\n }\n } else if (name.startsWith('on')) {\n if (!value || typeof value === 'function') {\n element[name] = value;\n } else if (typeof value === 'string') {\n if (value) element.setAttribute(name, value);\n else element.removeAttribute(name);\n }\n } else if (/^id$|^class$|^list$|^readonly$|^contenteditable$|^role|-|^for$/g.test(name) || isSvg) {\n if (element.getAttribute(name) !== value) {\n if (value) element.setAttribute(name, value);\n else element.removeAttribute(name);\n }\n } else if (element[name] !== value) {\n element[name] = value;\n }\n if (name === 'key' && value) keyCache[value] = element;\n }\n if (props && typeof props['ref'] === 'function') {\n window.requestAnimationFrame(() => props['ref'](element));\n }\n}\n\nfunction render_component(node, parent, idx) {\n const { tag, props, children } = node;\n let key = `_${idx}`;\n let id = props && props['id'];\n if (!id) id = `_${idx}${Date.now()}`;\n else key = id;\n let asTag = 'section';\n if (props && props['as']) {\n asTag = props['as'];\n delete props['as'];\n }\n if (!parent.__componentCache) parent.__componentCache = {};\n let component = parent.__componentCache[key];\n if (!component || !(component instanceof tag) || !component.element) {\n const element = document.createElement(asTag);\n component = parent.__componentCache[key] = new tag({ ...props, children }).mount(element, { render: true });\n } else {\n component.renderState(component.state);\n }\n if (component.mounted) {\n const new_state = component.mounted(props, children, component.state);\n (typeof new_state !== 'undefined') && component.setState(new_state);\n }\n updateProps(component.element, props, false);\n return component.element;\n}\n\nfunction createComponent(node, parent, idx = 0) {\n if (typeof node === 'string') return node;\n if (Array.isArray(node)) return node.map(child => createComponent(child, parent, idx++));\n let vdom = node;\n if (node && typeof node.tag === 'function' && Object.getPrototypeOf(node.tag).__isAppRunComponent) {\n vdom = render_component(node, parent, idx);\n }\n if (vdom && Array.isArray(vdom.children)) {\n const new_parent = vdom.props?._component;\n if (new_parent) {\n let i = 0;\n vdom.children = vdom.children.map(child => createComponent(child, new_parent, i++));\n } else {\n vdom.children = vdom.children.map(child => createComponent(child, parent, idx++));\n }\n }\n return vdom;\n}\n","declare var customElements;\n\nexport type CustomElementOptions = {\n render?: boolean;\n shadow?: boolean;\n history?: boolean;\n global_event?: boolean;\n observedAttributes?: string[];\n};\n\nexport const customElement = (componentClass, options: CustomElementOptions = {}) => class CustomElement extends HTMLElement {\n private _shadowRoot;\n private _component;\n private _attrMap: (arg0: string) => string;\n public on;\n public run;\n constructor() {\n super();\n }\n get component() { return this._component; }\n get state() { return this._component.state; }\n\n static get observedAttributes() {\n // attributes need to be set to lowercase in order to get observed\n return (options.observedAttributes || []).map(attr => attr.toLowerCase());\n }\n\n connectedCallback() {\n if (this.isConnected && !this._component) {\n const opts = options || {};\n this._shadowRoot = opts.shadow ? this.attachShadow({ mode: 'open' }) : this;\n const observedAttributes = (opts.observedAttributes || [])\n\n const attrMap = observedAttributes.reduce((map, name) => {\n const lc = name.toLowerCase()\n if (lc !== name) {\n map[lc] = name\n }\n return map\n }, {})\n this._attrMap = (name: string) : string => attrMap[name] || name\n\n const props = {};\n Array.from(this.attributes).forEach(item => props[this._attrMap(item.name)] = item.value);\n\n // add getters/ setters to allow observation on observedAttributes\n observedAttributes.forEach(name => {\n if (this[name] !== undefined) props[name] = this[name];\n Object.defineProperty(this, name, {\n get(): any {\n return props[name];\n },\n set(this: CustomElement, value: unknown) {\n // trigger change event\n this.attributeChangedCallback(name, props[name], value)\n },\n configurable: true,\n enumerable: true\n });\n })\n\n requestAnimationFrame(() => {\n const children = this.children ? Array.from(this.children) : [];\n children.forEach(el => el.parentElement.removeChild(el));\n this._component = new componentClass({ ...props, children }).mount(this._shadowRoot, opts);\n // attach props to component\n this._component._props = props;\n // expose dispatchEvent\n this._component.dispatchEvent = this.dispatchEvent.bind(this)\n if (this._component.mounted) {\n const new_state = this._component.mounted(props, children, this._component.state);\n if (typeof new_state !== 'undefined') this._component.state = new_state;\n }\n this.on = this._component.on.bind(this._component);\n this.run = this._component.run.bind(this._component);\n if (!(opts.render === false)) this._component.run('.');\n });\n }\n }\n\n disconnectedCallback() {\n this._component?.unload?.();\n this._component?.unmount?.();\n this._component = null;\n }\n\n attributeChangedCallback(name: string, oldValue: unknown, value: unknown) {\n if (this._component) {\n // camelCase attributes arrive only in lowercase\n const mappedName = this._attrMap(name);\n // store the new property/ attribute\n this._component._props[mappedName] = value;\n this._component.run('attributeChanged', mappedName, oldValue, value);\n\n if (value !== oldValue && !(options.render === false)) {\n window.requestAnimationFrame(() => {\n // re-render state with new combined props on next animation frame\n this._component.run('.')\n })\n }\n }\n }\n}\n\nexport default (name: string, componentClass, options?: CustomElementOptions) => {\n (typeof customElements !== 'undefined') && customElements.define(name, customElement(componentClass, options))\n}\n","import webComponent, { CustomElementOptions } from './web-component';\n\n// tslint:disable:no-invalid-this\nexport const Reflect = {\n\n meta: new WeakMap(),\n\n defineMetadata(metadataKey, metadataValue, target) {\n if (!this.meta.has(target)) this.meta.set(target, {});\n this.meta.get(target)[metadataKey] = metadataValue;\n },\n\n getMetadataKeys(target) {\n target = Object.getPrototypeOf(target);\n return this.meta.get(target) ? Object.keys(this.meta.get(target)) : [];\n },\n\n getMetadata(metadataKey, target) {\n target = Object.getPrototypeOf(target);\n return this.meta.get(target) ? this.meta.get(target)[metadataKey] : null;\n }\n}\n\nexport function update<E=string>(events?: E, options: any = {}) {\n return (target: any, key: string, descriptor: any) => {\n const name = events ? events.toString() : key;\n Reflect.defineMetadata(`apprun-update:${name}`,\n { name, key, options }, target);\n return descriptor;\n }\n}\n\nexport function on<E = string>(events?: E, options: any = {}) {\n return function (target: any, key: string) {\n const name = events ? events.toString() : key;\n Reflect.defineMetadata(`apprun-update:${name}`,\n { name, key, options }, target)\n }\n}\n\nexport function customElement(name: string, options?: CustomElementOptions) {\n return function _customElement<T extends { new(...args: any[]): {} }>(constructor: T) {\n webComponent(name, constructor, options);\n return constructor;\n }\n}\n\n","\r\nimport app, { App } from './app';\r\nimport { Reflect } from './decorator'\r\nimport { View, Update, ActionDef, ActionOptions, MountOptions, EventOptions } from './types';\r\nimport directive from './directive';\r\n\r\nconst componentCache = new Map();\r\nif (!app.find('get-components')) app.on('get-components', o => o.components = componentCache);\r\n\r\nconst REFRESH = state => state;\r\n\r\nexport class Component<T = any, E = any> {\r\n static __isAppRunComponent = true;\r\n private _app = new App();\r\n private _actions = [];\r\n private _global_events = [];\r\n private _state;\r\n private _history = [];\r\n private _history_idx = -1;\r\n private enable_history;\r\n private global_event;\r\n public element;\r\n public rendered;\r\n public mounted;\r\n public unload;\r\n private tracking_id;\r\n private observer;\r\n\r\n\r\n private renderState(state: T, vdom = null) {\r\n if (!this.view) return;\r\n let html = vdom || this.view(state);\r\n app['debug'] && app.run('debug', {\r\n component: this,\r\n _: html ? '.' : '-',\r\n state,\r\n vdom: html,\r\n el: this.element\r\n });\r\n\r\n if (typeof document !== 'object') return;\r\n\r\n const el = (typeof this.element === 'string' && this.element) ?\r\n document.getElementById(this.element) || document.querySelector(this.element) : this.element;\r\n\r\n if (el) {\r\n const tracking_attr = '_c';\r\n if (!this.unload) {\r\n el.removeAttribute && el.removeAttribute(tracking_attr);\r\n } else if (el['_component'] !== this || el.getAttribute(tracking_attr) !== this.tracking_id) {\r\n this.tracking_id = new Date().valueOf().toString();\r\n el.setAttribute(tracking_attr, this.tracking_id);\r\n if (typeof MutationObserver !== 'undefined') {\r\n if (!this.observer) this.observer = new MutationObserver(changes => {\r\n if (changes[0].oldValue === this.tracking_id || !document.body.contains(el)) {\r\n this.unload(this.state);\r\n this.observer.disconnect();\r\n this.observer = null;\r\n }\r\n });\r\n this.observer.observe(document.body, {\r\n childList: true, subtree: true,\r\n attributes: true, attributeOldValue: true, attributeFilter: [tracking_attr]\r\n });\r\n }\r\n }\r\n el['_component'] = this;\r\n }\r\n if (!vdom && html) {\r\n html = directive(html, this);\r\n if (this.options.transition && document && document['startViewTransition']) {\r\n document['startViewTransition'](() => app.render(el, html, this));\r\n } else {\r\n app.render(el, html, this);\r\n }\r\n }\r\n this.rendered && this.rendered(this.state);\r\n }\r\n\r\n public setState(state: T, options: ActionOptions & EventOptions\r\n = { render: true, history: false }) {\r\n if (state instanceof Promise) {\r\n // Promise will not be saved or rendered\r\n // state will be saved and rendered when promise is resolved\r\n Promise.resolve(state).then(v => {\r\n this.setState(v, options);\r\n this._state = state;\r\n });\r\n } else {\r\n this._state = state;\r\n if (state == null) return;\r\n this.state = state;\r\n if (options.render !== false) {\r\n // before render state\r\n if (options.transition && document && document['startViewTransition']) {\r\n document['startViewTransition'](() => this.renderState(state));\r\n } else {\r\n this.renderState(state);\r\n }\r\n }\r\n if (options.history !== false && this.enable_history) {\r\n this._history = [...this._history, state];\r\n this._history_idx = this._history.length - 1;\r\n }\r\n if (typeof options.callback === 'function') options.callback(this.state);\r\n }\r\n }\r\n\r\n private _history_prev = () => {\r\n this._history_idx--;\r\n if (this._history_idx >= 0) {\r\n this.setState(this._history[this._history_idx], { render: true, history: false });\r\n }\r\n else {\r\n this._history_idx = 0;\r\n }\r\n };\r\n\r\n private _history_next = () => {\r\n this._history_idx++;\r\n if (this._history_idx < this._history.length) {\r\n this.setState(this._history[this._history_idx], { render: true, history: false });\r\n }\r\n else {\r\n this._history_idx = this._history.length - 1;\r\n }\r\n };\r\n\r\n constructor(\r\n protected state?: T,\r\n protected view?: View<T>,\r\n protected update?: Update<T, E>,\r\n protected options?) {\r\n }\r\n\r\n start = (element = null, options?: MountOptions): Component<T, E> => {\r\n this.mount(element, { render: true, ...options });\r\n if (this.mounted && typeof this.mounted === 'function') {\r\n const new_state = this.mounted({}, [], this.state);\r\n (typeof new_state !== 'undefined') && this.setState(new_state);\r\n }\r\n return this;\r\n }\r\n\r\n public mount(element = null, options?: MountOptions): Component<T, E> {\r\n console.assert(!this.element, 'Component already mounted.')\r\n this.options = options = { ...this.options, ...options };\r\n this.element = element;\r\n this.global_event = options.global_event;\r\n this.enable_history = !!options.history;\r\n\r\n if (this.enable_history) {\r\n this.on(options.history.prev || 'history-prev', this._history_prev);\r\n this.on(options.history.next || 'history-next', this._history_next);\r\n }\r\n\r\n if (options.route) {\r\n this.update = this.update || {};\r\n if (!this.update[options.route]) this.update[options.route] = REFRESH;\r\n }\r\n\r\n this.add_actions();\r\n this.state = this.state ?? this['model'] ?? {};\r\n if (typeof this.state === 'function') this.state = this.state();\r\n\r\n this.setState(this.state, { render: !!options.render, history: true });\r\n\r\n if (app['debug']) {\r\n if (componentCache.get(element)) { componentCache.get(element).push(this) }\r\n else { componentCache.set(element, [this]) }\r\n }\r\n return this;\r\n }\r\n\r\n is_global_event(name: string): boolean {\r\n return name && (\r\n this.global_event ||\r\n this._global_events.indexOf(name) >= 0 ||\r\n name.startsWith('#') || name.startsWith('/') || name.startsWith('@'));\r\n }\r\n\r\n add_action(name: string, action, options: ActionOptions = {}) {\r\n if (!action || typeof action !== 'function') return;\r\n if (options.global) this._global_events.push(name);\r\n this.on(name as any, (...p) => {\r\n\r\n app['debug'] && app.run('debug', {\r\n component: this,\r\n _: '>',\r\n event: name, p,\r\n current_state: this.state,\r\n options\r\n });\r\n\r\n const newState = action(this.state, ...p);\r\n\r\n app['debug'] && app.run('debug', {\r\n component: this,\r\n _: '<',\r\n event: name, p,\r\n newState,\r\n state: this.state,\r\n options\r\n });\r\n\r\n this.setState(newState, options)\r\n }, options);\r\n }\r\n\r\n add_actions() {\r\n const actions = this.update || {};\r\n Reflect.getMetadataKeys(this).forEach(key => {\r\n if (key.startsWith('apprun-update:')) {\r\n const meta = Reflect.getMetadata(key, this)\r\n actions[meta.name] = [this[meta.key].bind(this), meta.options];\r\n }\r\n })\r\n\r\n const all = {};\r\n if (Array.isArray(actions)) {\r\n actions.forEach(act => {\r\n const [name, action, opts] = act as ActionDef<T, E>;\r\n const names = name.toString();\r\n names.split(',').forEach(n => all[n.trim()] = [action, opts])\r\n })\r\n } else {\r\n Object.keys(actions).forEach(name => {\r\n const action = actions[name];\r\n if (typeof action === 'function' || Array.isArray(action)) {\r\n name.split(',').forEach(n => all[n.trim()] = action)\r\n }\r\n })\r\n }\r\n\r\n if (!all['.']) all['.'] = REFRESH;\r\n Object.keys(all).forEach(name => {\r\n const action = all[name];\r\n if (typeof action === 'function') {\r\n this.add_action(name, action);\r\n } else if (Array.isArray(action)) {\r\n this.add_action(name, action[0], action[1]);\r\n }\r\n });\r\n }\r\n\r\n public run(event: E, ...args) {\r\n if (this.state instanceof Promise) {\r\n return Promise.resolve(this.state).then(state => {\r\n this.state = state;\r\n this.run(event, ...args)\r\n });\r\n } else {\r\n const name = event.toString();\r\n return this.is_global_event(name) ?\r\n app.run(name, ...args) :\r\n this._app.run(name, ...args);\r\n }\r\n }\r\n\r\n public on(event: E, fn: (...args) => void, options?: any) {\r\n const name = event.toString();\r\n this._actions.push({ name, fn });\r\n return this.is_global_event(name) ?\r\n app.on(name, fn, options) :\r\n this._app.on(name, fn, options);\r\n }\r\n\r\n public runAsync(event: E, ...args) {\r\n const name = event.toString();\r\n return this.is_global_event(name) ?\r\n app.runAsync(name, ...args) :\r\n this._app.runAsync(name, ...args);\r\n }\r\n\r\n // obsolete\r\n public query(event: E, ...args) {\r\n return this.runAsync(event, ...args);\r\n }\r\n\r\n public unmount() {\r\n this.observer?.disconnect();\r\n this._actions.forEach(action => {\r\n const { name, fn } = action;\r\n this.is_global_event(name) ?\r\n app.off(name, fn) :\r\n this._app.off(name, fn);\r\n });\r\n }\r\n}\r\n","import app from './app';\n\nexport type Route = (url: string, ...args: any[]) => any;\n\nexport const ROUTER_EVENT: string = '//';\nexport const ROUTER_404_EVENT: string = '///';\n\nexport const route: Route = (url: string) => {\n if (!url) url = '#';\n if (url.startsWith('#')) {\n const [name, ...rest] = url.split('/');\n app.run(name, ...rest) || app.run(ROUTER_404_EVENT, name, ...rest);\n app.run(ROUTER_EVENT, name, ...rest);\n } else if (url.startsWith('/')) {\n const [_, name, ...rest] = url.split('/');\n app.run('/' + name, ...rest) || app.run(ROUTER_404_EVENT, '/' + name, ...rest);\n app.run(ROUTER_EVENT, '/' + name, ...rest);\n } else {\n app.run(url) || app.run(ROUTER_404_EVENT, url);\n app.run(ROUTER_EVENT, url);\n }\n}\nexport default route;","import app, { App } from './app';\nimport { createElement, render, Fragment, safeHTML } from './vdom';\nimport { Component } from './component';\nimport { VNode, View, Action, Update, EventOptions, ActionOptions, MountOptions, AppStartOptions } from './types';\nimport { on, update, customElement } from './decorator';\nimport webComponent, { CustomElementOptions } from './web-component';\nimport { Route, route, ROUTER_EVENT, ROUTER_404_EVENT } from './router';\n\nexport interface IApp {\n start<T, E = any>(element?: Element | string, model?: T, view?: View<T>, update?: Update<T, E>,\n options?: AppStartOptions<T>): Component<T, E>;\n on(name: string, fn: (...args: any[]) => void, options?: any): void;\n off(name: string, fn: (...args: any[]) => void): void;\n run(name: string, ...args: any[]): number;\n find(name: string): any | any[];\n h(tag: string | Function, props, ...children): VNode | VNode[];\n createElement(tag: string | Function, props, ...children): VNode | VNode[];\n render(element: Element | string, node: VNode): void;\n Fragment(props, ...children): any[];\n route?: Route;\n webComponent(name: string, componentClass, options?: CustomElementOptions): void;\n safeHTML(html: string): any[];\n}\n\napp.h = app.createElement = createElement;\napp.render = render;\napp.Fragment = Fragment;\napp.webComponent = webComponent;\napp.safeHTML = safeHTML;\n\napp.start = <T, E = any>(element?: Element | string, model?: T, view?: View<T>, update?: Update<T, E>,\n options?: AppStartOptions<T>): Component<T, E> => {\n const opts = { render: true, global_event: true, ...options };\n const component = new Component<T, E>(model, view, update);\n if (options && options.rendered) component.rendered = options.rendered;\n if (options && options.mounted) component.mounted = options.mounted;\n component.start(element, opts);\n return component;\n};\n\nconst NOOP = _ => {/* Intentionally empty */ }\napp.on('$', NOOP);\napp.on('debug', _ => NOOP);\napp.on(ROUTER_EVENT, NOOP);\napp.on('#', NOOP);\napp['route'] = route;\napp.on('route', url => app['route'] && app['route'](url));\n\nif (typeof document === 'object') {\n document.addEventListener(\"DOMContentLoaded\", () => {\n if (app['route'] === route) {\n window.onpopstate = () => route(location.hash);\n document.body.hasAttribute('apprun-no-init') || app['no-init-route'] || route(location.hash);\n }\n });\n}\nexport type StatelessComponent<T = {}> = (args: T) => string | VNode | void;\nexport { App, app, Component, View, Action, Update, on, update, EventOptions, ActionOptions, MountOptions, Fragment, safeHTML }\nexport { update as event };\nexport { ROUTER_EVENT, ROUTER_404_EVENT };\nexport { customElement, CustomElementOptions, AppStartOptions };\nexport default app as IApp;\n\nif (typeof window === 'object') {\n window['Component'] = Component;\n window['_React'] = window['React'];\n window['React'] = app;\n window['on'] = on;\n window['customElement'] = customElement;\n window['safeHTML'] = safeHTML;\n}\n\n\n"],"names":["App","constructor","this","_events","on","name","fn","options","push","off","subscribers","filter","sub","find","run","args","getSubscribers","console","assert","length","forEach","delay","Object","keys","apply","once","assign","_t","clearTimeout","setTimeout","runAsync","promises","map","Promise","all","query","events","evt","endsWith","startsWith","replace","sort","a","b","event","app","root","self","global","app$1","getStateValue","component","setStateValue","value","state","setState","directive","vdom","Array","isArray","element","tag","props","children","key","substring","e","handler","p","type","target","checked","Number","multiple","selected","apply_directive","Fragment","collect","ATTR_PROPS","ch","c","i","keyCache","WeakMap","update","node","isSvg","el","key1","nodeName","key2","toUpperCase","same","parentNode","replaceChild","create","updateChildren","updateProps","old_len","_a","childNodes","new_len","len","Math","min","child","textContent","nodeType","nodeValue","createText","HTMLElement","SVGElement","insertBefore","old","temp","nextSibling","appendChild","n","_b","removeChild","lastChild","d","document","createDocumentFragment","safeHTML","html","div","createElement","insertAdjacentHTML","from","indexOf","createTextNode","JSON","stringify","createElementNS","cached","oldProps","newProps","mergeProps","cname","match","dataset","style","cssText","s","xname","toLowerCase","removeAttributeNS","setAttributeNS","setAttribute","removeAttribute","test","getAttribute","window","requestAnimationFrame","createComponent","parent","idx","getPrototypeOf","__isAppRunComponent","id","Date","now","asTag","__componentCache","renderState","mount","render","mounted","new_state","render_component","new_parent","_component","customElement","componentClass","super","observedAttributes","attr","connectedCallback","isConnected","opts","_shadowRoot","shadow","attachShadow","mode","attrMap","reduce","lc","_attrMap","attributes","item","undefined","defineProperty","get","set","attributeChangedCallback","configurable","enumerable","parentElement","_props","dispatchEvent","bind","disconnectedCallback","unload","_d","_c","unmount","oldValue","mappedName","webComponent","customElements","define","Reflect","meta","defineMetadata","metadataKey","metadataValue","has","getMetadataKeys","getMetadata","descriptor","toString","componentCache","Map","o","components","REFRESH","Component","view","_","getElementById","querySelector","tracking_attr","tracking_id","valueOf","MutationObserver","observer","changes","body","contains","disconnect","observe","childList","subtree","attributeOldValue","attributeFilter","transition","rendered","history","resolve","then","v","_state","enable_history","_history","_history_idx","callback","_app","_actions","_global_events","_history_prev","_history_next","start","global_event","prev","next","route","add_actions","is_global_event","add_action","action","current_state","newState","actions","act","split","trim","ROUTER_EVENT","ROUTER_404_EVENT","url","rest","h","Error","nodes","model","NOOP","addEventListener","onpopstate","location","hash","hasAttribute"],"mappings":"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"}
package/dist/apprun.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.apprun=e():t.apprun=e()}(this,(()=>(()=>{"use strict";var t={752:(t,e,n)=>{n.d(e,{Z:()=>r,g:()=>s});class s{constructor(){this._events={}}on(t,e,n={}){this._events[t]=this._events[t]||[],this._events[t].push({fn:e,options:n})}off(t,e){const n=this._events[t]||[];this._events[t]=n.filter((t=>t.fn!==e))}find(t){return this._events[t]}run(t,...e){const n=this.getSubscribers(t,this._events);return console.assert(n&&n.length>0,"No subscriber for event: "+t),n.forEach((n=>{const{fn:s,options:o}=n;return o.delay?this.delay(t,s,e,o):Object.keys(o).length>0?s.apply(this,[...e,o]):s.apply(this,e),!n.options.once})),n.length}once(t,e,n={}){this.on(t,e,Object.assign(Object.assign({},n),{once:!0}))}delay(t,e,n,s){s._t&&clearTimeout(s._t),s._t=setTimeout((()=>{clearTimeout(s._t),Object.keys(s).length>0?e.apply(this,[...n,s]):e.apply(this,n)}),s.delay)}query(t,...e){const n=this.getSubscribers(t,this._events);console.assert(n&&n.length>0,"No subscriber for event: "+t);const s=n.map((t=>{const{fn:n,options:s}=t;return Object.keys(s).length>0?n.apply(this,[...e,s]):n.apply(this,e)}));return Promise.all(s)}getSubscribers(t,e){const n=e[t]||[];return e[t]=n.filter((t=>!t.options.once)),Object.keys(e).filter((e=>e.endsWith("*")&&t.startsWith(e.replace("*","")))).sort(((t,e)=>e.length-t.length)).forEach((s=>n.push(...e[s].map((e=>Object.assign(Object.assign({},e),{options:Object.assign(Object.assign({},e.options),{event:t})})))))),n}}let o;const i="object"==typeof self&&self.self===self&&self||"object"==typeof n.g&&n.g.global===n.g&&n.g;i.app&&i._AppRunVersions?o=i.app:(o=new s,i.app=o,i._AppRunVersions="AppRun-3");const r=o},334:(t,e,n)=>{n.d(e,{Z:()=>a});var s=n(752);const o=(t,e)=>(e?t.state[e]:t.state)||"",i=(t,e,n)=>{if(e){const s=t.state||{};s[e]=n,t.setState(s)}else t.setState(n)},r=(t,e)=>{if(Array.isArray(t))return t.map((t=>r(t,e)));{let{tag:n,props:a,children:c}=t;return n?(a&&Object.keys(a).forEach((t=>{t.startsWith("$")&&(((t,e,n,r)=>{if(t.startsWith("$on")){const n=e[t];if(t=t.substring(1),"boolean"==typeof n)e[t]=e=>r.run?r.run(t,e):s.Z.run(t,e);else if("string"==typeof n)e[t]=t=>r.run?r.run(n,t):s.Z.run(n,t);else if("function"==typeof n)e[t]=t=>r.setState(n(r.state,t));else if(Array.isArray(n)){const[o,...i]=n;"string"==typeof o?e[t]=t=>r.run?r.run(o,...i,t):s.Z.run(o,...i,t):"function"==typeof o&&(e[t]=t=>r.setState(o(r.state,...i,t)))}}else if("$bind"===t){const s=e.type||"text",a="string"==typeof e[t]?e[t]:e.name;if("input"===n)switch(s){case"checkbox":e.checked=o(r,a),e.onclick=t=>i(r,a||t.target.name,t.target.checked);break;case"radio":e.checked=o(r,a)===e.value,e.onclick=t=>i(r,a||t.target.name,t.target.value);break;case"number":case"range":e.value=o(r,a),e.oninput=t=>i(r,a||t.target.name,Number(t.target.value));break;default:e.value=o(r,a),e.oninput=t=>i(r,a||t.target.name,t.target.value)}else"select"===n?(e.value=o(r,a),e.onchange=t=>{t.target.multiple||i(r,a||t.target.name,t.target.value)}):"option"===n?(e.selected=o(r,a),e.onclick=t=>i(r,a||t.target.name,t.target.selected)):"textarea"===n&&(e.innerHTML=o(r,a),e.oninput=t=>i(r,a||t.target.name,t.target.value))}else s.Z.run("$",{key:t,tag:n,props:e,component:r})})(t,a,n,e),delete a[t])})),c&&(c=r(c,e)),{tag:n,props:a,children:c}):t}},a=r},559:(t,e,n)=>{n.d(e,{HY:()=>o,az:()=>a,eV:()=>d,yj:()=>h});var s=n(334);function o(t,...e){return r(e)}const i="_props";function r(t){const e=[],n=t=>{null!=t&&""!==t&&!1!==t&&e.push("function"==typeof t||"object"==typeof t?t:`${t}`)};return t&&t.forEach((t=>{Array.isArray(t)?t.forEach((t=>n(t))):n(t)})),e}function a(t,e,...n){const s=r(n);if("string"==typeof t)return{tag:t,props:e,children:s};if(Array.isArray(t))return t;if(void 0===t&&n)return s;if(Object.getPrototypeOf(t).__isAppRunComponent)return{tag:t,props:e,children:s};if("function"==typeof t)return t(e,s);throw new Error(`Unknown tag in vdom ${t}`)}const c=new WeakMap,h=(t,e,n={})=>{null!=e&&!1!==e&&function(t,e,n={}){if(null==e||!1===e)return;if(e=g(e,n),!t)return;const s="SVG"===t.nodeName;Array.isArray(e)?u(t,e,s):u(t,[e],s)}("string"==typeof t&&t?document.getElementById(t)||document.querySelector(t):t,e=(0,s.Z)(e,n),n)};function l(t,e,n){3!==e._op&&(n=n||"svg"===e.tag,function(t,e){const n=t.nodeName,s=`${e.tag||""}`;return n.toUpperCase()===s.toUpperCase()}(t,e)?(!(2&e._op)&&u(t,e.children,n),!(1&e._op)&&m(t,e.props,n)):t.parentNode.replaceChild(f(e,n),t))}function u(t,e,n){var s,o;const i=(null===(s=t.childNodes)||void 0===s?void 0:s.length)||0,r=(null==e?void 0:e.length)||0,a=Math.min(i,r);for(let s=0;s<a;s++){const o=e[s];if(3===o._op)continue;const i=t.childNodes[s];if("string"==typeof o)i.textContent!==o&&(3===i.nodeType?i.nodeValue=o:t.replaceChild(p(o),i));else if(o instanceof HTMLElement||o instanceof SVGElement)t.insertBefore(o,i);else{const e=o.props&&o.props.key;if(e)if(i.key===e)l(t.childNodes[s],o,n);else{const r=c[e];if(r){const e=r.nextSibling;t.insertBefore(r,i),e?t.insertBefore(i,e):t.appendChild(i),l(t.childNodes[s],o,n)}else t.replaceChild(f(o,n),i)}else l(t.childNodes[s],o,n)}}let h=(null===(o=t.childNodes)||void 0===o?void 0:o.length)||0;for(;h>a;)t.removeChild(t.lastChild),h--;if(r>a){const s=document.createDocumentFragment();for(let t=a;t<e.length;t++)s.appendChild(f(e[t],n));t.appendChild(s)}}const d=t=>{const e=document.createElement("section");return e.insertAdjacentHTML("afterbegin",t),Array.from(e.children)};function p(t){if(0===(null==t?void 0:t.indexOf("_html:"))){const e=document.createElement("div");return e.insertAdjacentHTML("afterbegin",t.substring(6)),e}return document.createTextNode(null!=t?t:"")}function f(t,e){if(t instanceof HTMLElement||t instanceof SVGElement)return t;if("string"==typeof t)return p(t);if(!t.tag||"function"==typeof t.tag)return p(JSON.stringify(t));const n=(e=e||"svg"===t.tag)?document.createElementNS("http://www.w3.org/2000/svg",t.tag):document.createElement(t.tag);return m(n,t.props,e),t.children&&t.children.forEach((t=>n.appendChild(f(t,e)))),n}function m(t,e,n){const s=t[i]||{};e=function(t,e){e.class=e.class||e.className,delete e.className;const n={};return t&&Object.keys(t).forEach((t=>n[t]=null)),e&&Object.keys(e).forEach((t=>n[t]=e[t])),n}(s,e||{}),t[i]=e;for(const s in e){const o=e[s];if(s.startsWith("data-")){const e=s.substring(5).replace(/-(\w)/g,(t=>t[1].toUpperCase()));t.dataset[e]!==o&&(o||""===o?t.dataset[e]=o:delete t.dataset[e])}else if("style"===s)if(t.style.cssText&&(t.style.cssText=""),"string"==typeof o)t.style.cssText=o;else for(const e in o)t.style[e]!==o[e]&&(t.style[e]=o[e]);else if(s.startsWith("xlink")){const e=s.replace("xlink","").toLowerCase();null==o||!1===o?t.removeAttributeNS("http://www.w3.org/1999/xlink",e):t.setAttributeNS("http://www.w3.org/1999/xlink",e,o)}else s.startsWith("on")?o&&"function"!=typeof o?"string"==typeof o&&(o?t.setAttribute(s,o):t.removeAttribute(s)):t[s]=o:/^id$|^class$|^list$|^readonly$|^contenteditable$|^role|-/g.test(s)||n?t.getAttribute(s)!==o&&(o?t.setAttribute(s,o):t.removeAttribute(s)):t[s]!==o&&(t[s]=o);"key"===s&&o&&(c[o]=t)}e&&"function"==typeof e.ref&&window.requestAnimationFrame((()=>e.ref(t)))}function g(t,e,n=0){var s;if("string"==typeof t)return t;if(Array.isArray(t))return t.map((t=>g(t,e,n++)));let o=t;if(t&&"function"==typeof t.tag&&Object.getPrototypeOf(t.tag).__isAppRunComponent&&(o=function(t,e,n){const{tag:s,props:o,children:i}=t;let r=`_${n}`,a=o&&o.id;a?r=a:a=`_${n}${Date.now()}`;let c="section";o&&o.as&&(c=o.as,delete o.as),e.__componentCache||(e.__componentCache={});let h=e.__componentCache[r];if(h&&h instanceof s&&h.element)h.renderState(h.state);else{const t=document.createElement(c);h=e.__componentCache[r]=new s(Object.assign(Object.assign({},o),{children:i})).start(t)}if(h.mounted){const t=h.mounted(o,i,h.state);void 0!==t&&h.setState(t)}return m(h.element,o,!1),h.element}(t,e,n)),o&&Array.isArray(o.children)){const t=null===(s=o.props)||void 0===s?void 0:s._component;if(t){let e=0;o.children=o.children.map((n=>g(n,t,e++)))}else o.children=o.children.map((t=>g(t,e,n++)))}return o}}},e={};function n(s){var o=e[s];if(void 0!==o)return o.exports;var i=e[s]={exports:{}};return t[s](i,i.exports,n),i.exports}n.d=(t,e)=>{for(var s in e)n.o(e,s)&&!n.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var s={};return(()=>{n.r(s),n.d(s,{App:()=>t.g,Component:()=>p,Fragment:()=>e.HY,ROUTER_404_EVENT:()=>m,ROUTER_EVENT:()=>f,app:()=>t.Z,customElement:()=>h,default:()=>_,event:()=>a,on:()=>c,safeHTML:()=>e.eV,update:()=>a});var t=n(752),e=n(559);const o=(t,e={})=>class extends HTMLElement{constructor(){super()}get component(){return this._component}get state(){return this._component.state}static get observedAttributes(){return(e.observedAttributes||[]).map((t=>t.toLowerCase()))}connectedCallback(){if(this.isConnected&&!this._component){const n=e||{};this._shadowRoot=n.shadow?this.attachShadow({mode:"open"}):this;const s=n.observedAttributes||[],o=s.reduce(((t,e)=>{const n=e.toLowerCase();return n!==e&&(t[n]=e),t}),{});this._attrMap=t=>o[t]||t;const i={};Array.from(this.attributes).forEach((t=>i[this._attrMap(t.name)]=t.value)),s.forEach((t=>{void 0!==this[t]&&(i[t]=this[t]),Object.defineProperty(this,t,{get:()=>i[t],set(e){this.attributeChangedCallback(t,i[t],e)},configurable:!0,enumerable:!0})})),requestAnimationFrame((()=>{const e=this.children?Array.from(this.children):[];if(e.forEach((t=>t.parentElement.removeChild(t))),this._component=new t(Object.assign(Object.assign({},i),{children:e})).mount(this._shadowRoot,n),this._component._props=i,this._component.dispatchEvent=this.dispatchEvent.bind(this),this._component.mounted){const t=this._component.mounted(i,e,this._component.state);void 0!==t&&(this._component.state=t)}this.on=this._component.on.bind(this._component),this.run=this._component.run.bind(this._component),!1!==n.render&&this._component.run(".")}))}}disconnectedCallback(){var t,e,n,s;null===(e=null===(t=this._component)||void 0===t?void 0:t.unload)||void 0===e||e.call(t),null===(s=null===(n=this._component)||void 0===n?void 0:n.unmount)||void 0===s||s.call(n),this._component=null}attributeChangedCallback(t,n,s){if(this._component){const o=this._attrMap(t);this._component._props[o]=s,this._component.run("attributeChanged",o,n,s),s!==n&&!1!==e.render&&window.requestAnimationFrame((()=>{this._component.run(".")}))}}},i=(t,e,n)=>{"undefined"!=typeof customElements&&customElements.define(t,o(e,n))},r={meta:new WeakMap,defineMetadata(t,e,n){this.meta.has(n)||this.meta.set(n,{}),this.meta.get(n)[t]=e},getMetadataKeys(t){return t=Object.getPrototypeOf(t),this.meta.get(t)?Object.keys(this.meta.get(t)):[]},getMetadata(t,e){return e=Object.getPrototypeOf(e),this.meta.get(e)?this.meta.get(e)[t]:null}};function a(t,e={}){return(n,s,o)=>{const i=t?t.toString():s;return r.defineMetadata(`apprun-update:${i}`,{name:i,key:s,options:e},n),o}}function c(t,e={}){return function(n,s){const o=t?t.toString():s;r.defineMetadata(`apprun-update:${o}`,{name:o,key:s,options:e},n)}}function h(t,e){return function(n){return i(t,n,e),n}}var l=n(334);const u=new Map;t.Z.find("get-components")||t.Z.on("get-components",(t=>t.components=u));const d=t=>t;class p{constructor(e,n,s,o){this.state=e,this.view=n,this.update=s,this.options=o,this._app=new t.g,this._actions=[],this._global_events=[],this._history=[],this._history_idx=-1,this._history_prev=()=>{this._history_idx--,this._history_idx>=0?this.setState(this._history[this._history_idx],{render:!0,history:!1}):this._history_idx=0},this._history_next=()=>{this._history_idx++,this._history_idx<this._history.length?this.setState(this._history[this._history_idx],{render:!0,history:!1}):this._history_idx=this._history.length-1},this.start=(t=null,e)=>this.mount(t,Object.assign({render:!0},e))}renderState(e,n=null){if(!this.view)return;let s=n||this.view(e);if(t.Z.debug&&t.Z.run("debug",{component:this,_:s?".":"-",state:e,vdom:s,el:this.element}),"object"!=typeof document)return;const o="string"==typeof this.element&&this.element?document.getElementById(this.element)||document.querySelector(this.element):this.element;if(o){const t="_c";this.unload?o._component===this&&o.getAttribute(t)===this.tracking_id||(this.tracking_id=(new Date).valueOf().toString(),o.setAttribute(t,this.tracking_id),"undefined"!=typeof MutationObserver&&(this.observer||(this.observer=new MutationObserver((t=>{t[0].oldValue!==this.tracking_id&&document.body.contains(o)||(this.unload(this.state),this.observer.disconnect(),this.observer=null)}))),this.observer.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeOldValue:!0,attributeFilter:[t]}))):o.removeAttribute&&o.removeAttribute(t),o._component=this}!n&&s&&(s=(0,l.Z)(s,this),t.Z.render(o,s,this)),this.rendered&&this.rendered(this.state)}setState(t,e={render:!0,history:!1}){if(t instanceof Promise)Promise.resolve(t).then((n=>{this.setState(n,e),this._state=t}));else{if(this._state=t,null==t)return;this.state=t,!1!==e.render&&this.renderState(t),!1!==e.history&&this.enable_history&&(this._history=[...this._history,t],this._history_idx=this._history.length-1),"function"==typeof e.callback&&e.callback(this.state)}}mount(e=null,n){var s,o;return console.assert(!this.element,"Component already mounted."),this.options=n=Object.assign(Object.assign({},this.options),n),this.element=e,this.global_event=n.global_event,this.enable_history=!!n.history,this.enable_history&&(this.on(n.history.prev||"history-prev",this._history_prev),this.on(n.history.next||"history-next",this._history_next)),n.route&&(this.update=this.update||{},this.update[n.route]||(this.update[n.route]=d)),this.add_actions(),this.state=null!==(o=null!==(s=this.state)&&void 0!==s?s:this.model)&&void 0!==o?o:{},"function"==typeof this.state&&(this.state=this.state()),this.setState(this.state,{render:!!n.render,history:!0}),t.Z.debug&&(u.get(e)?u.get(e).push(this):u.set(e,[this])),this}is_global_event(t){return t&&(this.global_event||this._global_events.indexOf(t)>=0||t.startsWith("#")||t.startsWith("/")||t.startsWith("@"))}add_action(e,n,s={}){n&&"function"==typeof n&&(s.global&&this._global_events.push(e),this.on(e,((...o)=>{t.Z.debug&&t.Z.run("debug",{component:this,_:">",event:e,p:o,current_state:this.state,options:s});const i=n(this.state,...o);t.Z.debug&&t.Z.run("debug",{component:this,_:"<",event:e,p:o,newState:i,state:this.state,options:s}),this.setState(i,s)}),s))}add_actions(){const t=this.update||{};r.getMetadataKeys(this).forEach((e=>{if(e.startsWith("apprun-update:")){const n=r.getMetadata(e,this);t[n.name]=[this[n.key].bind(this),n.options]}}));const e={};Array.isArray(t)?t.forEach((t=>{const[n,s,o]=t;n.toString().split(",").forEach((t=>e[t.trim()]=[s,o]))})):Object.keys(t).forEach((n=>{const s=t[n];("function"==typeof s||Array.isArray(s))&&n.split(",").forEach((t=>e[t.trim()]=s))})),e["."]||(e["."]=d),Object.keys(e).forEach((t=>{const n=e[t];"function"==typeof n?this.add_action(t,n):Array.isArray(n)&&this.add_action(t,n[0],n[1])}))}run(e,...n){if(this.state instanceof Promise)return Promise.resolve(this.state).then((t=>{this.state=t,this.run(e,...n)}));{const s=e.toString();return this.is_global_event(s)?t.Z.run(s,...n):this._app.run(s,...n)}}on(e,n,s){const o=e.toString();return this._actions.push({name:o,fn:n}),this.is_global_event(o)?t.Z.on(o,n,s):this._app.on(o,n,s)}unmount(){var e;null===(e=this.observer)||void 0===e||e.disconnect(),this._actions.forEach((e=>{const{name:n,fn:s}=e;this.is_global_event(n)?t.Z.off(n,s):this._app.off(n,s)}))}}p.__isAppRunComponent=!0;const f="//",m="///",g=e=>{if(e||(e="#"),e.startsWith("#")){const[n,...s]=e.split("/");t.Z.run(n,...s)||t.Z.run(m,n,...s),t.Z.run(f,n,...s)}else if(e.startsWith("/")){const[n,s,...o]=e.split("/");t.Z.run("/"+s,...o)||t.Z.run(m,"/"+s,...o),t.Z.run(f,"/"+s,...o)}else t.Z.run(e)||t.Z.run(m,e),t.Z.run(f,e)};t.Z.h=t.Z.createElement=e.az,t.Z.render=e.yj,t.Z.Fragment=e.HY,t.Z.webComponent=i,t.Z.safeHTML=e.eV,t.Z.start=(t,e,n,s,o)=>{const i=Object.assign({render:!0,global_event:!0},o),r=new p(e,n,s);return o&&o.rendered&&(r.rendered=o.rendered),r.mount(t,i),r};const y=t=>{};t.Z.on("$",y),t.Z.on("debug",(t=>y)),t.Z.on(f,y),t.Z.on("#",y),t.Z.route=g,t.Z.on("route",(e=>t.Z.route&&t.Z.route(e))),"object"==typeof document&&document.addEventListener("DOMContentLoaded",(()=>{t.Z.route===g&&(window.onpopstate=()=>g(location.hash),document.body.hasAttribute("apprun-no-init")||t.Z["no-init-route"]||g(location.hash))}));const _=t.Z;"object"==typeof window&&(window.Component=p,window._React=window.React,window.React=t.Z,window.on=c,window.customElement=h,window.safeHTML=e.eV)})(),s})()));
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.apprun=e():t.apprun=e()}(this,(()=>(()=>{"use strict";var t={752:(t,e,n)=>{n.d(e,{Z:()=>r,g:()=>s});class s{constructor(){this._events={}}on(t,e,n={}){this._events[t]=this._events[t]||[],this._events[t].push({fn:e,options:n})}off(t,e){const n=this._events[t]||[];this._events[t]=n.filter((t=>t.fn!==e))}find(t){return this._events[t]}run(t,...e){const n=this.getSubscribers(t,this._events);return console.assert(n&&n.length>0,"No subscriber for event: "+t),n.forEach((n=>{const{fn:s,options:o}=n;return o.delay?this.delay(t,s,e,o):Object.keys(o).length>0?s.apply(this,[...e,o]):s.apply(this,e),!n.options.once})),n.length}once(t,e,n={}){this.on(t,e,Object.assign(Object.assign({},n),{once:!0}))}delay(t,e,n,s){s._t&&clearTimeout(s._t),s._t=setTimeout((()=>{clearTimeout(s._t),Object.keys(s).length>0?e.apply(this,[...n,s]):e.apply(this,n)}),s.delay)}runAsync(t,...e){const n=this.getSubscribers(t,this._events);console.assert(n&&n.length>0,"No subscriber for event: "+t);const s=n.map((t=>{const{fn:n,options:s}=t;return Object.keys(s).length>0?n.apply(this,[...e,s]):n.apply(this,e)}));return Promise.all(s)}query(t,...e){return this.query(t,...e)}getSubscribers(t,e){const n=e[t]||[];return e[t]=n.filter((t=>!t.options.once)),Object.keys(e).filter((e=>e.endsWith("*")&&t.startsWith(e.replace("*","")))).sort(((t,e)=>e.length-t.length)).forEach((s=>n.push(...e[s].map((e=>Object.assign(Object.assign({},e),{options:Object.assign(Object.assign({},e.options),{event:t})})))))),n}}let o;const i="object"==typeof self&&self.self===self&&self||"object"==typeof n.g&&n.g.global===n.g&&n.g;i.app&&i._AppRunVersions?o=i.app:(o=new s,i.app=o,i._AppRunVersions="AppRun-3");const r=o},334:(t,e,n)=>{n.d(e,{Z:()=>a});var s=n(752);const o=(t,e)=>(e?t.state[e]:t.state)||"",i=(t,e,n)=>{if(e){const s=t.state||{};s[e]=n,t.setState(s)}else t.setState(n)},r=(t,e)=>{if(Array.isArray(t))return t.map((t=>r(t,e)));{let{tag:n,props:a,children:c}=t;return n?(a&&Object.keys(a).forEach((t=>{t.startsWith("$")&&(((t,e,n,r)=>{if(t.startsWith("$on")){const n=e[t];if(t=t.substring(1),"boolean"==typeof n)e[t]=e=>r.run?r.run(t,e):s.Z.run(t,e);else if("string"==typeof n)e[t]=t=>r.run?r.run(n,t):s.Z.run(n,t);else if("function"==typeof n)e[t]=t=>r.setState(n(r.state,t));else if(Array.isArray(n)){const[o,...i]=n;"string"==typeof o?e[t]=t=>r.run?r.run(o,...i,t):s.Z.run(o,...i,t):"function"==typeof o&&(e[t]=t=>r.setState(o(r.state,...i,t)))}}else if("$bind"===t){const s=e.type||"text",a="string"==typeof e[t]?e[t]:e.name;if("input"===n)switch(s){case"checkbox":e.checked=o(r,a),e.onclick=t=>i(r,a||t.target.name,t.target.checked);break;case"radio":e.checked=o(r,a)===e.value,e.onclick=t=>i(r,a||t.target.name,t.target.value);break;case"number":case"range":e.value=o(r,a),e.oninput=t=>i(r,a||t.target.name,Number(t.target.value));break;default:e.value=o(r,a),e.oninput=t=>i(r,a||t.target.name,t.target.value)}else"select"===n?(e.value=o(r,a),e.onchange=t=>{t.target.multiple||i(r,a||t.target.name,t.target.value)}):"option"===n?(e.selected=o(r,a),e.onclick=t=>i(r,a||t.target.name,t.target.selected)):"textarea"===n&&(e.innerHTML=o(r,a),e.oninput=t=>i(r,a||t.target.name,t.target.value))}else s.Z.run("$",{key:t,tag:n,props:e,component:r})})(t,a,n,e),delete a[t])})),c&&(c=r(c,e)),{tag:n,props:a,children:c}):t}},a=r},559:(t,e,n)=>{n.d(e,{HY:()=>o,az:()=>a,eV:()=>d,yj:()=>h});var s=n(334);function o(t,...e){return r(e)}const i="_props";function r(t){const e=[],n=t=>{null!=t&&""!==t&&!1!==t&&e.push("function"==typeof t||"object"==typeof t?t:`${t}`)};return t&&t.forEach((t=>{Array.isArray(t)?t.forEach((t=>n(t))):n(t)})),e}function a(t,e,...n){const s=r(n);if("string"==typeof t)return{tag:t,props:e,children:s};if(Array.isArray(t))return t;if(void 0===t&&n)return s;if(Object.getPrototypeOf(t).__isAppRunComponent)return{tag:t,props:e,children:s};if("function"==typeof t)return t(e,s);throw new Error(`Unknown tag in vdom ${t}`)}const c=new WeakMap,h=(t,e,n={})=>{null!=e&&!1!==e&&function(t,e,n={}){if(null==e||!1===e)return;if(e=g(e,n),!t)return;const s="SVG"===t.nodeName;Array.isArray(e)?l(t,e,s):l(t,[e],s)}("string"==typeof t&&t?document.getElementById(t)||document.querySelector(t):t,e=(0,s.Z)(e,n),n)};function u(t,e,n){3!==e._op&&(n=n||"svg"===e.tag,function(t,e){const n=t.nodeName,s=`${e.tag||""}`;return n.toUpperCase()===s.toUpperCase()}(t,e)?(!(2&e._op)&&l(t,e.children,n),!(1&e._op)&&m(t,e.props,n)):t.parentNode.replaceChild(f(e,n),t))}function l(t,e,n){var s,o;const i=(null===(s=t.childNodes)||void 0===s?void 0:s.length)||0,r=(null==e?void 0:e.length)||0,a=Math.min(i,r);for(let s=0;s<a;s++){const o=e[s];if(3===o._op)continue;const i=t.childNodes[s];if("string"==typeof o)i.textContent!==o&&(3===i.nodeType?i.nodeValue=o:t.replaceChild(p(o),i));else if(o instanceof HTMLElement||o instanceof SVGElement)t.insertBefore(o,i);else{const e=o.props&&o.props.key;if(e)if(i.key===e)u(t.childNodes[s],o,n);else{const r=c[e];if(r){const e=r.nextSibling;t.insertBefore(r,i),e?t.insertBefore(i,e):t.appendChild(i),u(t.childNodes[s],o,n)}else t.replaceChild(f(o,n),i)}else u(t.childNodes[s],o,n)}}let h=(null===(o=t.childNodes)||void 0===o?void 0:o.length)||0;for(;h>a;)t.removeChild(t.lastChild),h--;if(r>a){const s=document.createDocumentFragment();for(let t=a;t<e.length;t++)s.appendChild(f(e[t],n));t.appendChild(s)}}const d=t=>{const e=document.createElement("section");return e.insertAdjacentHTML("afterbegin",t),Array.from(e.children)};function p(t){if(0===(null==t?void 0:t.indexOf("_html:"))){const e=document.createElement("div");return e.insertAdjacentHTML("afterbegin",t.substring(6)),e}return document.createTextNode(null!=t?t:"")}function f(t,e){if(t instanceof HTMLElement||t instanceof SVGElement)return t;if("string"==typeof t)return p(t);if(!t.tag||"function"==typeof t.tag)return p(JSON.stringify(t));const n=(e=e||"svg"===t.tag)?document.createElementNS("http://www.w3.org/2000/svg",t.tag):document.createElement(t.tag);return m(n,t.props,e),t.children&&t.children.forEach((t=>n.appendChild(f(t,e)))),n}function m(t,e,n){const s=t[i]||{};e=function(t,e){e.class=e.class||e.className,delete e.className;const n={};return t&&Object.keys(t).forEach((t=>n[t]=null)),e&&Object.keys(e).forEach((t=>n[t]=e[t])),n}(s,e||{}),t[i]=e;for(const s in e){const o=e[s];if(s.startsWith("data-")){const e=s.substring(5).replace(/-(\w)/g,(t=>t[1].toUpperCase()));t.dataset[e]!==o&&(o||""===o?t.dataset[e]=o:delete t.dataset[e])}else if("style"===s)if(t.style.cssText&&(t.style.cssText=""),"string"==typeof o)t.style.cssText=o;else for(const e in o)t.style[e]!==o[e]&&(t.style[e]=o[e]);else if(s.startsWith("xlink")){const e=s.replace("xlink","").toLowerCase();null==o||!1===o?t.removeAttributeNS("http://www.w3.org/1999/xlink",e):t.setAttributeNS("http://www.w3.org/1999/xlink",e,o)}else s.startsWith("on")?o&&"function"!=typeof o?"string"==typeof o&&(o?t.setAttribute(s,o):t.removeAttribute(s)):t[s]=o:/^id$|^class$|^list$|^readonly$|^contenteditable$|^role|-|^for$/g.test(s)||n?t.getAttribute(s)!==o&&(o?t.setAttribute(s,o):t.removeAttribute(s)):t[s]!==o&&(t[s]=o);"key"===s&&o&&(c[o]=t)}e&&"function"==typeof e.ref&&window.requestAnimationFrame((()=>e.ref(t)))}function g(t,e,n=0){var s;if("string"==typeof t)return t;if(Array.isArray(t))return t.map((t=>g(t,e,n++)));let o=t;if(t&&"function"==typeof t.tag&&Object.getPrototypeOf(t.tag).__isAppRunComponent&&(o=function(t,e,n){const{tag:s,props:o,children:i}=t;let r=`_${n}`,a=o&&o.id;a?r=a:a=`_${n}${Date.now()}`;let c="section";o&&o.as&&(c=o.as,delete o.as),e.__componentCache||(e.__componentCache={});let h=e.__componentCache[r];if(h&&h instanceof s&&h.element)h.renderState(h.state);else{const t=document.createElement(c);h=e.__componentCache[r]=new s(Object.assign(Object.assign({},o),{children:i})).mount(t,{render:!0})}if(h.mounted){const t=h.mounted(o,i,h.state);void 0!==t&&h.setState(t)}return m(h.element,o,!1),h.element}(t,e,n)),o&&Array.isArray(o.children)){const t=null===(s=o.props)||void 0===s?void 0:s._component;if(t){let e=0;o.children=o.children.map((n=>g(n,t,e++)))}else o.children=o.children.map((t=>g(t,e,n++)))}return o}}},e={};function n(s){var o=e[s];if(void 0!==o)return o.exports;var i=e[s]={exports:{}};return t[s](i,i.exports,n),i.exports}n.d=(t,e)=>{for(var s in e)n.o(e,s)&&!n.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var s={};return(()=>{n.r(s),n.d(s,{App:()=>t.g,Component:()=>p,Fragment:()=>e.HY,ROUTER_404_EVENT:()=>m,ROUTER_EVENT:()=>f,app:()=>t.Z,customElement:()=>h,default:()=>_,event:()=>a,on:()=>c,safeHTML:()=>e.eV,update:()=>a});var t=n(752),e=n(559);const o=(t,e={})=>class extends HTMLElement{constructor(){super()}get component(){return this._component}get state(){return this._component.state}static get observedAttributes(){return(e.observedAttributes||[]).map((t=>t.toLowerCase()))}connectedCallback(){if(this.isConnected&&!this._component){const n=e||{};this._shadowRoot=n.shadow?this.attachShadow({mode:"open"}):this;const s=n.observedAttributes||[],o=s.reduce(((t,e)=>{const n=e.toLowerCase();return n!==e&&(t[n]=e),t}),{});this._attrMap=t=>o[t]||t;const i={};Array.from(this.attributes).forEach((t=>i[this._attrMap(t.name)]=t.value)),s.forEach((t=>{void 0!==this[t]&&(i[t]=this[t]),Object.defineProperty(this,t,{get:()=>i[t],set(e){this.attributeChangedCallback(t,i[t],e)},configurable:!0,enumerable:!0})})),requestAnimationFrame((()=>{const e=this.children?Array.from(this.children):[];if(e.forEach((t=>t.parentElement.removeChild(t))),this._component=new t(Object.assign(Object.assign({},i),{children:e})).mount(this._shadowRoot,n),this._component._props=i,this._component.dispatchEvent=this.dispatchEvent.bind(this),this._component.mounted){const t=this._component.mounted(i,e,this._component.state);void 0!==t&&(this._component.state=t)}this.on=this._component.on.bind(this._component),this.run=this._component.run.bind(this._component),!1!==n.render&&this._component.run(".")}))}}disconnectedCallback(){var t,e,n,s;null===(e=null===(t=this._component)||void 0===t?void 0:t.unload)||void 0===e||e.call(t),null===(s=null===(n=this._component)||void 0===n?void 0:n.unmount)||void 0===s||s.call(n),this._component=null}attributeChangedCallback(t,n,s){if(this._component){const o=this._attrMap(t);this._component._props[o]=s,this._component.run("attributeChanged",o,n,s),s!==n&&!1!==e.render&&window.requestAnimationFrame((()=>{this._component.run(".")}))}}},i=(t,e,n)=>{"undefined"!=typeof customElements&&customElements.define(t,o(e,n))},r={meta:new WeakMap,defineMetadata(t,e,n){this.meta.has(n)||this.meta.set(n,{}),this.meta.get(n)[t]=e},getMetadataKeys(t){return t=Object.getPrototypeOf(t),this.meta.get(t)?Object.keys(this.meta.get(t)):[]},getMetadata(t,e){return e=Object.getPrototypeOf(e),this.meta.get(e)?this.meta.get(e)[t]:null}};function a(t,e={}){return(n,s,o)=>{const i=t?t.toString():s;return r.defineMetadata(`apprun-update:${i}`,{name:i,key:s,options:e},n),o}}function c(t,e={}){return function(n,s){const o=t?t.toString():s;r.defineMetadata(`apprun-update:${o}`,{name:o,key:s,options:e},n)}}function h(t,e){return function(n){return i(t,n,e),n}}var u=n(334);const l=new Map;t.Z.find("get-components")||t.Z.on("get-components",(t=>t.components=l));const d=t=>t;class p{renderState(e,n=null){if(!this.view)return;let s=n||this.view(e);if(t.Z.debug&&t.Z.run("debug",{component:this,_:s?".":"-",state:e,vdom:s,el:this.element}),"object"!=typeof document)return;const o="string"==typeof this.element&&this.element?document.getElementById(this.element)||document.querySelector(this.element):this.element;if(o){const t="_c";this.unload?o._component===this&&o.getAttribute(t)===this.tracking_id||(this.tracking_id=(new Date).valueOf().toString(),o.setAttribute(t,this.tracking_id),"undefined"!=typeof MutationObserver&&(this.observer||(this.observer=new MutationObserver((t=>{t[0].oldValue!==this.tracking_id&&document.body.contains(o)||(this.unload(this.state),this.observer.disconnect(),this.observer=null)}))),this.observer.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeOldValue:!0,attributeFilter:[t]}))):o.removeAttribute&&o.removeAttribute(t),o._component=this}!n&&s&&(s=(0,u.Z)(s,this),this.options.transition&&document&&document.startViewTransition?document.startViewTransition((()=>t.Z.render(o,s,this))):t.Z.render(o,s,this)),this.rendered&&this.rendered(this.state)}setState(t,e={render:!0,history:!1}){if(t instanceof Promise)Promise.resolve(t).then((n=>{this.setState(n,e),this._state=t}));else{if(this._state=t,null==t)return;this.state=t,!1!==e.render&&(e.transition&&document&&document.startViewTransition?document.startViewTransition((()=>this.renderState(t))):this.renderState(t)),!1!==e.history&&this.enable_history&&(this._history=[...this._history,t],this._history_idx=this._history.length-1),"function"==typeof e.callback&&e.callback(this.state)}}constructor(e,n,s,o){this.state=e,this.view=n,this.update=s,this.options=o,this._app=new t.g,this._actions=[],this._global_events=[],this._history=[],this._history_idx=-1,this._history_prev=()=>{this._history_idx--,this._history_idx>=0?this.setState(this._history[this._history_idx],{render:!0,history:!1}):this._history_idx=0},this._history_next=()=>{this._history_idx++,this._history_idx<this._history.length?this.setState(this._history[this._history_idx],{render:!0,history:!1}):this._history_idx=this._history.length-1},this.start=(t=null,e)=>{if(this.mount(t,Object.assign({render:!0},e)),this.mounted&&"function"==typeof this.mounted){const t=this.mounted({},[],this.state);void 0!==t&&this.setState(t)}return this}}mount(e=null,n){var s,o;return console.assert(!this.element,"Component already mounted."),this.options=n=Object.assign(Object.assign({},this.options),n),this.element=e,this.global_event=n.global_event,this.enable_history=!!n.history,this.enable_history&&(this.on(n.history.prev||"history-prev",this._history_prev),this.on(n.history.next||"history-next",this._history_next)),n.route&&(this.update=this.update||{},this.update[n.route]||(this.update[n.route]=d)),this.add_actions(),this.state=null!==(o=null!==(s=this.state)&&void 0!==s?s:this.model)&&void 0!==o?o:{},"function"==typeof this.state&&(this.state=this.state()),this.setState(this.state,{render:!!n.render,history:!0}),t.Z.debug&&(l.get(e)?l.get(e).push(this):l.set(e,[this])),this}is_global_event(t){return t&&(this.global_event||this._global_events.indexOf(t)>=0||t.startsWith("#")||t.startsWith("/")||t.startsWith("@"))}add_action(e,n,s={}){n&&"function"==typeof n&&(s.global&&this._global_events.push(e),this.on(e,((...o)=>{t.Z.debug&&t.Z.run("debug",{component:this,_:">",event:e,p:o,current_state:this.state,options:s});const i=n(this.state,...o);t.Z.debug&&t.Z.run("debug",{component:this,_:"<",event:e,p:o,newState:i,state:this.state,options:s}),this.setState(i,s)}),s))}add_actions(){const t=this.update||{};r.getMetadataKeys(this).forEach((e=>{if(e.startsWith("apprun-update:")){const n=r.getMetadata(e,this);t[n.name]=[this[n.key].bind(this),n.options]}}));const e={};Array.isArray(t)?t.forEach((t=>{const[n,s,o]=t;n.toString().split(",").forEach((t=>e[t.trim()]=[s,o]))})):Object.keys(t).forEach((n=>{const s=t[n];("function"==typeof s||Array.isArray(s))&&n.split(",").forEach((t=>e[t.trim()]=s))})),e["."]||(e["."]=d),Object.keys(e).forEach((t=>{const n=e[t];"function"==typeof n?this.add_action(t,n):Array.isArray(n)&&this.add_action(t,n[0],n[1])}))}run(e,...n){if(this.state instanceof Promise)return Promise.resolve(this.state).then((t=>{this.state=t,this.run(e,...n)}));{const s=e.toString();return this.is_global_event(s)?t.Z.run(s,...n):this._app.run(s,...n)}}on(e,n,s){const o=e.toString();return this._actions.push({name:o,fn:n}),this.is_global_event(o)?t.Z.on(o,n,s):this._app.on(o,n,s)}runAsync(e,...n){const s=e.toString();return this.is_global_event(s)?t.Z.runAsync(s,...n):this._app.runAsync(s,...n)}query(t,...e){return this.runAsync(t,...e)}unmount(){var e;null===(e=this.observer)||void 0===e||e.disconnect(),this._actions.forEach((e=>{const{name:n,fn:s}=e;this.is_global_event(n)?t.Z.off(n,s):this._app.off(n,s)}))}}p.__isAppRunComponent=!0;const f="//",m="///",g=e=>{if(e||(e="#"),e.startsWith("#")){const[n,...s]=e.split("/");t.Z.run(n,...s)||t.Z.run(m,n,...s),t.Z.run(f,n,...s)}else if(e.startsWith("/")){const[n,s,...o]=e.split("/");t.Z.run("/"+s,...o)||t.Z.run(m,"/"+s,...o),t.Z.run(f,"/"+s,...o)}else t.Z.run(e)||t.Z.run(m,e),t.Z.run(f,e)};t.Z.h=t.Z.createElement=e.az,t.Z.render=e.yj,t.Z.Fragment=e.HY,t.Z.webComponent=i,t.Z.safeHTML=e.eV,t.Z.start=(t,e,n,s,o)=>{const i=Object.assign({render:!0,global_event:!0},o),r=new p(e,n,s);return o&&o.rendered&&(r.rendered=o.rendered),o&&o.mounted&&(r.mounted=o.mounted),r.start(t,i),r};const y=t=>{};t.Z.on("$",y),t.Z.on("debug",(t=>y)),t.Z.on(f,y),t.Z.on("#",y),t.Z.route=g,t.Z.on("route",(e=>t.Z.route&&t.Z.route(e))),"object"==typeof document&&document.addEventListener("DOMContentLoaded",(()=>{t.Z.route===g&&(window.onpopstate=()=>g(location.hash),document.body.hasAttribute("apprun-no-init")||t.Z["no-init-route"]||g(location.hash))}));const _=t.Z;"object"==typeof window&&(window.Component=p,window._React=window.React,window.React=t.Z,window.on=c,window.customElement=h,window.safeHTML=e.eV)})(),s})()));
2
2
  //# sourceMappingURL=apprun.js.map