apprun 3.28.9 → 3.28.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -1
- package/dist/apprun-dev-tools.js +1 -1
- package/dist/apprun-dev-tools.js.map +1 -1
- package/dist/apprun-html.esm.js +4 -4
- package/dist/apprun-html.esm.js.map +1 -1
- package/dist/apprun-html.js +1 -1
- package/dist/apprun-html.js.map +1 -1
- package/dist/apprun-play.js +1 -1
- package/dist/apprun-play.js.map +1 -1
- package/dist/apprun.esm.js +1 -1
- package/dist/apprun.esm.js.map +1 -1
- package/dist/apprun.js +1 -1
- package/dist/apprun.js.map +1 -1
- package/esm/apprun-html.js +1 -1
- package/esm/apprun-html.js.map +1 -1
- package/esm/apprun.js +2 -2
- package/esm/apprun.js.map +1 -1
- package/esm/component.js +2 -1
- package/esm/component.js.map +1 -1
- package/esm/directive.js +3 -3
- package/esm/directive.js.map +1 -1
- package/esm/vdom-lit-html.js +5 -1
- package/esm/vdom-lit-html.js.map +1 -1
- package/esm/vdom-my.js +14 -3
- package/esm/vdom-my.js.map +1 -1
- package/esm/vdom.js +2 -5
- package/esm/vdom.js.map +1 -1
- package/esm/web-component.js +18 -16
- package/esm/web-component.js.map +1 -1
- package/package.json +10 -9
- package/src/apprun-html.ts +1 -1
- package/src/apprun.ts +2 -3
- package/src/component.ts +1 -1
- package/src/directive.ts +3 -3
- package/src/vdom-lit-html.ts +5 -1
- package/src/vdom-my.ts +14 -3
- package/src/vdom.ts +2 -5
- package/src/web-component.ts +16 -14
- /package/{webpack.config.js → webpack.config.cjs} +0 -0
package/dist/apprun.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apprun.esm.js","sources":["../src/app.ts","../src/vdom-my.ts","../src/web-component.ts","../src/decorator.ts","../src/directive.ts","../src/component.ts","../src/router.ts","../src/apprun.ts","../src/vdom.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\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 { VDOM, VNode } from './types';\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 = render;\n\nexport function render(element: Element, nodes: VDOM, parent = {}) {\n // console.log('render', element, node);\n // tslint:disable-next-line\n if (nodes == null || nodes === false) return;\n\n nodes = createComponent(nodes, parent);\n\n const isSvg = element?.nodeName === \"SVG\";\n\n if (!element) return;\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;\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\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 }\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 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 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","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(key, e);\n } else if (typeof event === 'string') {\n props[key] = e => component.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(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;","\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\napp.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') ?\r\n document.getElementById(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 // Wait for previous promise to complete first\r\n Promise.all([state, this._state]).then(v => {\r\n if (v[0]) this.setState(v[0]);\r\n }).catch(err => {\r\n console.error(err);\r\n throw err;\r\n });\r\n this._state = state;\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 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 if (options.render) {\r\n this.setState(this.state, { render: true, history: true });\r\n } else {\r\n this.setState(this.state, { render: false, 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 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 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 from './app';\nimport { createElement, render, Fragment } 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 h(tag: string | Function, props, ...children): VNode | VNode[];\n createElement(tag: string | Function, props, ...children): VNode | VNode[];\n render(element: HTMLElement, node: VNode): void;\n Fragment(props, ...children): any[];\n route?: Route;\n webComponent(name: string, componentClass, options?: CustomElementOptions): void;\n}\n\napp.h = app.createElement = createElement;\napp.render = render;\napp.Fragment = Fragment;\napp.webComponent = webComponent;\n\napp.start = <T, E = any>(element?: Element, 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 if (!document.body.hasAttribute('apprun-no-init')) route(location.hash);\n }\n });\n}\n\nexport type StatelessComponent<T = {}> = (args: T) => string | VNode | void;\nexport { app, Component, View, Action, Update, on, update, EventOptions, ActionOptions, MountOptions, Fragment }\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'] = app;\n window['on'] = on;\n window['customElement'] = customElement;\n}\n\n\n","import { createElement, updateElement, Fragment } from './vdom-my';\nexport function render(element, html, parent?) {\n updateElement(element, html, parent);\n}\nexport { createElement, Fragment };\n\n\n"],"names":["App","[object Object]","this","_events","name","fn","options","push","subscribers","filter","sub","args","getSubscribers","console","assert","length","forEach","delay","Object","keys","apply","once","on","_t","clearTimeout","setTimeout","promises","map","Promise","all","events","evt","endsWith","startsWith","replace","sort","a","b","event","app","root","self","global","Fragment","props","children","collect","ch","c","Array","isArray","i","keyCache","WeakMap","updateElement","element","nodes","parent","createComponent","isSvg","nodeName","updateChildren","update","node","tag","el","key1","key2","toUpperCase","same","parentNode","replaceChild","create","updateProps","old_len","childNodes","new_len","len","Math","min","child","textContent","nodeType","nodeValue","createText","HTMLElement","SVGElement","insertBefore","key","old","temp","nextSibling","appendChild","n","removeChild","lastChild","d","document","createDocumentFragment","indexOf","div","createElement","insertAdjacentHTML","substring","createTextNode","JSON","stringify","createElementNS","cached","oldProps","newProps","p","mergeProps","value","cname","match","dataset","style","cssText","s","xname","toLowerCase","removeAttributeNS","setAttributeNS","setAttribute","removeAttribute","test","getAttribute","window","requestAnimationFrame","idx","vdom","getPrototypeOf","__isAppRunComponent","id","Date","now","asTag","__componentCache","component","start","mounted","new_state","state","setState","render_component","new_parent","_component","customElement","componentClass","super","observedAttributes","attr","isConnected","opts","_shadowRoot","shadow","attachShadow","mode","attrMap","reduce","lc","_attrMap","from","attributes","item","undefined","defineProperty","get","attributeChangedCallback","configurable","enumerable","parentElement","mount","_props","dispatchEvent","bind","run","render","unload","unmount","oldValue","mappedName","customElements","define","Reflect","meta","metadataKey","metadataValue","target","has","set","descriptor","toString","defineMetadata","constructor","webComponent","getStateValue","setStateValue","directive","e","handler","type","checked","Number","multiple","selected","apply_directive","componentCache","Map","o","components","REFRESH","Component","view","_history_idx","_history","history","html","_","getElementById","tracking_attr","tracking_id","valueOf","MutationObserver","observer","changes","body","contains","disconnect","observe","childList","subtree","attributeOldValue","attributeFilter","rendered","_state","then","v","catch","err","error","renderState","enable_history","callback","global_event","prev","_history_prev","next","_history_next","route","add_actions","_global_events","action","current_state","newState","actions","getMetadataKeys","getMetadata","act","split","trim","add_action","is_global_event","_app","_actions","off","ROUTER_EVENT","ROUTER_404_EVENT","url","rest","h","Error","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\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, nodes: VDOM, component = {}) => {\n // tslint:disable-next-line\n if (nodes == null || nodes === false) return;\n nodes = directive(nodes, component);\n render(element, nodes, component);\n}\n\nfunction render(element: Element, nodes: VDOM, parent = {}) {\n // tslint:disable-next-line\n if (nodes == null || nodes === false) return;\n\n nodes = createComponent(nodes, parent);\n\n const isSvg = element?.nodeName === \"SVG\";\n\n if (!element) return;\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;\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.childNodes);\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 }\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\napp.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') ?\r\n document.getElementById(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 // Wait for previous promise to complete first\r\n Promise.all([state, this._state]).then(v => {\r\n if (v[0]) this.setState(v[0]);\r\n }).catch(err => {\r\n console.error(err);\r\n throw err;\r\n });\r\n this._state = state;\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 if (options.render) {\r\n this.setState(this.state, { render: true, history: true });\r\n } else {\r\n this.setState(this.state, { render: false, 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 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 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 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 h(tag: string | Function, props, ...children): VNode | VNode[];\n createElement(tag: string | Function, props, ...children): VNode | VNode[];\n render(element: HTMLElement, node: VNode): void;\n Fragment(props, ...children): any[];\n route?: Route;\n webComponent(name: string, componentClass, options?: CustomElementOptions): void;\n}\n\napp.h = app.createElement = createElement;\napp.render = render;\napp.Fragment = Fragment;\napp.webComponent = webComponent;\n\napp.start = <T, E = any>(element?: Element, 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 if (!document.body.hasAttribute('apprun-no-init')) route(location.hash);\n }\n });\n}\nexport type StatelessComponent<T = {}> = (args: T) => string | VNode | void;\nexport { 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'] = app;\n window['on'] = on;\n window['customElement'] = customElement;\n}\n\n\n"],"names":["App","[object Object]","this","_events","name","fn","options","push","subscribers","filter","sub","args","getSubscribers","console","assert","length","forEach","delay","Object","keys","apply","once","on","assign","_t","clearTimeout","setTimeout","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","run","handler","p","type","target","checked","Number","multiple","selected","apply_directive","Fragment","collect","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","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","start","mounted","new_state","render_component","new_parent","_component","customElement","componentClass","super","observedAttributes","attr","isConnected","opts","_shadowRoot","shadow","attachShadow","mode","attrMap","reduce","lc","_attrMap","attributes","item","undefined","defineProperty","get","attributeChangedCallback","configurable","enumerable","parentElement","mount","_props","dispatchEvent","bind","render","_b","unload","_d","_c","unmount","oldValue","mappedName","webComponent","customElements","define","Reflect","meta","metadataKey","metadataValue","has","set","descriptor","toString","defineMetadata","constructor","componentCache","Map","o","components","REFRESH","Component","view","_app","_actions","_global_events","_history","_history_idx","_history_prev","history","_history_next","_","getElementById","tracking_attr","tracking_id","valueOf","MutationObserver","observer","changes","body","contains","disconnect","observe","childList","subtree","attributeOldValue","attributeFilter","rendered","_state","then","v","catch","err","error","renderState","enable_history","callback","global_event","prev","next","route","add_actions","action","current_state","newState","actions","getMetadataKeys","getMetadata","act","split","trim","add_action","is_global_event","off","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,(function(){return(()=>{"use strict";var t={559:(t,e,n)=>{function s(t,...e){return o(e)}function o(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 i(t,e,...n){const s=o(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}`)}n.d(e,{HY:()=>s,az:()=>i,yj:()=>a});const r=new WeakMap,a=function(t,e,n={}){if(null==e||!1===e)return;e=d(e,n);const s="SVG"===(null==t?void 0:t.nodeName);t&&(Array.isArray(e)?h(t,e,s):h(t,[e],s))};function c(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)&&h(t,e.children,n),!(1&e._op)&&p(t,e.props,n)):t.parentNode.replaceChild(u(e,n),t))}function h(t,e,n){var s;const o=(null===(s=t.childNodes)||void 0===s?void 0:s.length)||0,i=(null==e?void 0:e.length)||0,a=Math.min(o,i);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(l(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)c(t.childNodes[s],o,n);else{const a=r[e];if(a){const e=a.nextSibling;t.insertBefore(a,i),e?t.insertBefore(i,e):t.appendChild(i),c(t.childNodes[s],o,n)}else t.replaceChild(u(o,n),i)}else c(t.childNodes[s],o,n)}}let h=t.childNodes.length;for(;h>a;)t.removeChild(t.lastChild),h--;if(i>a){const s=document.createDocumentFragment();for(let t=a;t<e.length;t++)s.appendChild(u(e[t],n));t.appendChild(s)}}function l(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 u(t,e){if(t instanceof HTMLElement||t instanceof SVGElement)return t;if("string"==typeof t)return l(t);if(!t.tag||"function"==typeof t.tag)return l(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 p(n,t.props,e),t.children&&t.children.forEach((t=>n.appendChild(u(t,e)))),n}function p(t,e,n){const s=t._props||{};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._props=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&&(r[o]=t)}e&&"function"==typeof e.ref&&window.requestAnimationFrame((()=>e.ref(t)))}function d(t,e,n=0){var s;if("string"==typeof t)return t;if(Array.isArray(t))return t.map((t=>d(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)){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 p(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=>d(n,t,e++)))}else o.children=o.children.map((t=>d(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,{Component:()=>b,Fragment:()=>r.HY,ROUTER_404_EVENT:()=>w,ROUTER_EVENT:()=>v,app:()=>i,customElement:()=>p,default:()=>A,event:()=>l,on:()=>u,update:()=>l});class t{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 e;const o="object"==typeof self&&self.self===self&&self||"object"==typeof n.g&&n.g.global===n.g&&n.g;o.app&&o._AppRunVersions?e=o.app:(e=new t,o.app=e,o._AppRunVersions="AppRun-3");const i=e;var r=n(559);const a=(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})}));const r=this.children?Array.from(this.children):[];if(r.forEach((t=>t.parentElement.removeChild(t))),this._component=new t(Object.assign(Object.assign({},i),{children:r})).mount(this._shadowRoot,n),this._component._props=i,this._component.dispatchEvent=this.dispatchEvent.bind(this),this._component.mounted){const t=this._component.mounted(i,r,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(".")}))}}},c=(t,e,n)=>{"undefined"!=typeof customElements&&customElements.define(t,a(e,n))},h={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 l(t,e={}){return(n,s,o)=>{const i=t?t.toString():s;return h.defineMetadata(`apprun-update:${i}`,{name:i,key:s,options:e},n),o}}function u(t,e={}){return function(n,s){const o=t?t.toString():s;h.defineMetadata(`apprun-update:${o}`,{name:o,key:s,options:e},n)}}function p(t,e){return function(n){return c(t,n,e),n}}const d=(t,e)=>(e?t.state[e]:t.state)||"",f=(t,e,n)=>{if(e){const s=t.state||{};s[e]=n,t.setState(s)}else t.setState(n)},m=(t,e)=>{if(Array.isArray(t))return t.map((t=>m(t,e)));{let{tag:n,props:s,children:o}=t;return n?(s&&Object.keys(s).forEach((t=>{t.startsWith("$")&&(((t,e,n,s)=>{if(t.startsWith("$on")){const n=e[t];if(t=t.substring(1),"boolean"==typeof n)e[t]=e=>s.run(t,e);else if("string"==typeof n)e[t]=t=>s.run(n,t);else if("function"==typeof n)e[t]=t=>s.setState(n(s.state,t));else if(Array.isArray(n)){const[o,...i]=n;"string"==typeof o?e[t]=t=>s.run(o,...i,t):"function"==typeof o&&(e[t]=t=>s.setState(o(s.state,...i,t)))}}else if("$bind"===t){const o=e.type||"text",i="string"==typeof e[t]?e[t]:e.name;if("input"===n)switch(o){case"checkbox":e.checked=d(s,i),e.onclick=t=>f(s,i||t.target.name,t.target.checked);break;case"radio":e.checked=d(s,i)===e.value,e.onclick=t=>f(s,i||t.target.name,t.target.value);break;case"number":case"range":e.value=d(s,i),e.oninput=t=>f(s,i||t.target.name,Number(t.target.value));break;default:e.value=d(s,i),e.oninput=t=>f(s,i||t.target.name,t.target.value)}else"select"===n?(e.value=d(s,i),e.onchange=t=>{t.target.multiple||f(s,i||t.target.name,t.target.value)}):"option"===n?(e.selected=d(s,i),e.onclick=t=>f(s,i||t.target.name,t.target.selected)):"textarea"===n&&(e.innerHTML=d(s,i),e.oninput=t=>f(s,i||t.target.name,t.target.value))}else i.run("$",{key:t,tag:n,props:e,component:s})})(t,s,n,e),delete s[t])})),o&&(o=m(o,e)),{tag:n,props:s,children:o}):t}},g=m,y=new Map;i.on("get-components",(t=>t.components=y));const _=t=>t;class b{constructor(e,n,s,o){this.state=e,this.view=n,this.update=s,this.options=o,this._app=new t,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(t,e=null){if(!this.view)return;let n=e||this.view(t);if(i.debug&&i.run("debug",{component:this,_:n?".":"-",state:t,vdom:n,el:this.element}),"object"!=typeof document)return;const s="string"==typeof this.element?document.getElementById(this.element):this.element;if(s){const t="_c";this.unload?s._component===this&&s.getAttribute(t)===this.tracking_id||(this.tracking_id=(new Date).valueOf().toString(),s.setAttribute(t,this.tracking_id),"undefined"!=typeof MutationObserver&&(this.observer||(this.observer=new MutationObserver((t=>{t[0].oldValue!==this.tracking_id&&document.body.contains(s)||(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]}))):s.removeAttribute&&s.removeAttribute(t),s._component=this}!e&&n&&(n=g(n,this),i.render(s,n,this)),this.rendered&&this.rendered(this.state)}setState(t,e={render:!0,history:!1}){if(t instanceof Promise)Promise.all([t,this._state]).then((t=>{t[0]&&this.setState(t[0])})).catch((t=>{throw console.error(t),t})),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(t=null,e){var n,s;return console.assert(!this.element,"Component already mounted."),this.options=e=Object.assign(Object.assign({},this.options),e),this.element=t,this.global_event=e.global_event,this.enable_history=!!e.history,this.enable_history&&(this.on(e.history.prev||"history-prev",this._history_prev),this.on(e.history.next||"history-next",this._history_next)),e.route&&(this.update=this.update||{},this.update[e.route]=_),this.add_actions(),this.state=null!==(s=null!==(n=this.state)&&void 0!==n?n:this.model)&&void 0!==s?s:{},"function"==typeof this.state&&(this.state=this.state()),e.render?this.setState(this.state,{render:!0,history:!0}):this.setState(this.state,{render:!1,history:!0}),i.debug&&(y.get(t)?y.get(t).push(this):y.set(t,[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(t,e,n={}){e&&"function"==typeof e&&(n.global&&this._global_events.push(t),this.on(t,((...s)=>{i.debug&&i.run("debug",{component:this,_:">",event:t,p:s,current_state:this.state,options:n});const o=e(this.state,...s);i.debug&&i.run("debug",{component:this,_:"<",event:t,p:s,newState:o,state:this.state,options:n}),this.setState(o,n)}),n))}add_actions(){const t=this.update||{};h.getMetadataKeys(this).forEach((e=>{if(e.startsWith("apprun-update:")){const n=h.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["."]=_),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(t,...e){const n=t.toString();return this.is_global_event(n)?i.run(n,...e):this._app.run(n,...e)}on(t,e,n){const s=t.toString();return this._actions.push({name:s,fn:e}),this.is_global_event(s)?i.on(s,e,n):this._app.on(s,e,n)}unmount(){var t;null===(t=this.observer)||void 0===t||t.disconnect(),this._actions.forEach((t=>{const{name:e,fn:n}=t;this.is_global_event(e)?i.off(e,n):this._app.off(e,n)}))}}b.__isAppRunComponent=!0;const v="//",w="///",O=t=>{if(t||(t="#"),t.startsWith("#")){const[e,...n]=t.split("/");i.run(e,...n)||i.run(w,e,...n),i.run(v,e,...n)}else if(t.startsWith("/")){const[e,n,...s]=t.split("/");i.run("/"+n,...s)||i.run(w,"/"+n,...s),i.run(v,"/"+n,...s)}else i.run(t)||i.run(w,t),i.run(v,t)};i.h=i.createElement=r.az,i.render=function(t,e,n){(0,r.yj)(t,e,n)},i.Fragment=r.HY,i.webComponent=c,i.start=(t,e,n,s,o)=>{const i=Object.assign({render:!0,global_event:!0},o),r=new b(e,n,s);return o&&o.rendered&&(r.rendered=o.rendered),r.mount(t,i),r};const j=t=>{};i.on("$",j),i.on("debug",(t=>j)),i.on(v,j),i.on("#",j),i.route=O,i.on("route",(t=>i.route&&i.route(t))),"object"==typeof document&&document.addEventListener("DOMContentLoaded",(()=>{i.route===O&&(window.onpopstate=()=>O(location.hash),document.body.hasAttribute("apprun-no-init")||O(location.hash))}));const A=i;"object"==typeof window&&(window.Component=b,window.React=i,window.on=u,window.customElement=p)})(),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)}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:()=>r,eV:()=>u,yj:()=>c});var s=n(334);function o(t,...e){return i(e)}function i(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 r(t,e,...n){const s=i(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 a=new WeakMap,c=(t,e,n={})=>{null!=e&&!1!==e&&function(t,e,n={}){if(null==e||!1===e)return;e=m(e,n);const s="SVG"===(null==t?void 0:t.nodeName);t&&(Array.isArray(e)?l(t,e,s):l(t,[e],s))}(t,e=(0,s.Z)(e,n),n)};function h(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)&&f(t,e.props,n)):t.parentNode.replaceChild(d(e,n),t))}function l(t,e,n){var s;const o=(null===(s=t.childNodes)||void 0===s?void 0:s.length)||0,i=(null==e?void 0:e.length)||0,r=Math.min(o,i);for(let s=0;s<r;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)h(t.childNodes[s],o,n);else{const r=a[e];if(r){const e=r.nextSibling;t.insertBefore(r,i),e?t.insertBefore(i,e):t.appendChild(i),h(t.childNodes[s],o,n)}else t.replaceChild(d(o,n),i)}else h(t.childNodes[s],o,n)}}let c=t.childNodes.length;for(;c>r;)t.removeChild(t.lastChild),c--;if(i>r){const s=document.createDocumentFragment();for(let t=r;t<e.length;t++)s.appendChild(d(e[t],n));t.appendChild(s)}}const u=t=>{const e=document.createElement("section");return e.insertAdjacentHTML("afterbegin",t),Array.from(e.childNodes)};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 d(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 f(n,t.props,e),t.children&&t.children.forEach((t=>n.appendChild(d(t,e)))),n}function f(t,e,n){const s=t._props||{};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._props=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&&(a[o]=t)}e&&"function"==typeof e.ref&&window.requestAnimationFrame((()=>e.ref(t)))}function m(t,e,n=0){var s;if("string"==typeof t)return t;if(Array.isArray(t))return t.map((t=>m(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)){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 f(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=>m(n,t,e++)))}else o.children=o.children.map((t=>m(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,{Component:()=>d,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.on("get-components",(t=>t.components=u));const p=t=>t;class d{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?document.getElementById(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.all([t,this._state]).then((t=>{t[0]&&this.setState(t[0])})).catch((t=>{throw console.error(t),t})),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]=p)),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()),n.render?this.setState(this.state,{render:!0,history:!0}):this.setState(this.state,{render:!1,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["."]=p),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){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)}))}}d.__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.start=(t,e,n,s,o)=>{const i=Object.assign({render:!0,global_event:!0},o),r=new d(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")||g(location.hash))}));const _=t.Z;"object"==typeof window&&(window.Component=d,window.React=t.Z,window.on=c,window.customElement=h)})(),s})()));
|
|
2
2
|
//# sourceMappingURL=apprun.js.map
|