@substrate-system/tonic 16.1.3 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +239 -37
- package/dist/index.cjs +8 -3
- package/dist/index.cjs.map +2 -2
- package/dist/index.d.ts +3 -0
- package/dist/index.js +9 -4
- package/dist/index.js.map +2 -2
- package/dist/index.min.js +2 -2
- package/dist/index.min.js.map +3 -3
- package/dist/index.min.mjs +3 -0
- package/dist/index.min.mjs.map +7 -0
- package/dist/index.mjs +536 -0
- package/dist/index.mjs.map +7 -0
- package/dist/meta.json +6 -6
- package/package.json +6 -3
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["import morphdom from '@substrate-system/morphdom'\n\nexport class TonicTemplate {\n rawText:string\n unsafe:boolean\n templateStrings?:string[]|TemplateStringsArray|null\n isTonicTemplate:true\n\n constructor (\n rawText,\n templateStrings?:string[]|TemplateStringsArray|null,\n unsafe?:boolean\n ) {\n this.isTonicTemplate = true\n this.unsafe = !!unsafe\n this.rawText = rawText\n this.templateStrings = templateStrings\n }\n\n valueOf () { return this.rawText }\n toString () { return this.rawText }\n}\n\n/**\n * Class Tonic\n *\n * @template {T extends object = Record<string, any>} T Type of the props\n */\nexport abstract class Tonic<\n T extends { [key:string]:any}=Record<string, any>\n> extends window.HTMLElement {\n private static _tags = ''\n private static _refIds:string[] = []\n private static _data = {}\n private static _states = {}\n private static _children = {}\n private static _reg = {}\n private static _stylesheetRegistry:(()=>string)[] = []\n private static _index = 0\n // @ts-expect-error VERSION is injected during build\n static get version () { return VERSION ?? null }\n static get SPREAD () { return /\\.\\.\\.\\s?(__\\w+__\\w+__)/g }\n static get ESC () { return /[\"&'<>`/]/g }\n static get AsyncFunctionGenerator ():AsyncGeneratorFunctionConstructor {\n return (async function * () {\n }.constructor) as AsyncGeneratorFunctionConstructor\n }\n // eslint-disable-next-line\n static get AsyncFunction ():Function {\n return (async function () {}.constructor)\n }\n\n static get MAP () {\n /* eslint-disable object-property-newline, object-property-newline,\n object-curly-newline */\n return { '\"': '"', '&': '&', '\\'': ''', '<': '<',\n '>': '>', '`': '`', '/': '/' }\n }\n\n static ssr\n static nonce\n\n private _state:any\n stylesheet?:()=>string\n styles:()=>string\n props:T\n preventRenderOnReconnect:boolean\n private _id:string\n pendingReRender?:Promise<this>|null\n updated?:((props:Record<string, any>)=>any)\n willRender?:(()=>any)\n root?:ShadowRoot|this\n willConnect?:()=>any\n private _source?:string\n connected?:()=>void\n disconnected?:()=>void\n\n private elements:Element[] & { __children__? }\n private nodes:ChildNode[] & { __children__? }\n private _props = Tonic.getPropertyNames(this)\n\n constructor () {\n super()\n const state = Tonic._states[super.id]\n delete Tonic._states[super.id]\n this._state = state || {}\n this.preventRenderOnReconnect = false\n this.props = {} as T\n this.elements = [...this.children]\n this.elements.__children__ = true\n this.nodes = [...this.childNodes]\n this.nodes.__children__ = true\n this._events()\n }\n\n abstract render ():TonicTemplate|Promise<TonicTemplate>\n\n defaults ():Record<string, any>|undefined {\n return {}\n }\n\n get isTonicComponent ():true {\n return true\n }\n\n /**\n * Get a namespaced event name, given a non-namespaced string.\n *\n * @example\n * MyElement.event('example') // => my-element:example\n *\n * @param {string} type The name of the event\n * @returns {string} The namespaced event name\n */\n static event (type:string):string {\n return `${this.tag}:${type}`\n }\n\n /**\n * Get the tag name of this component.\n */\n static get tag ():string {\n return Tonic.getTagName(this.name)\n }\n\n private static _createId () {\n return `tonic${Tonic._index++}`\n }\n\n private static _normalizeAttrs (o, x = {}) {\n [...o].forEach(o => (x[o.name] = o.value))\n return x\n }\n\n private _checkId () {\n const _id = super.id\n if (!_id) {\n const html = this.outerHTML.replace(this.innerHTML, '...')\n throw new Error(`Component: ${html} has no id`)\n }\n return _id\n }\n\n /**\n * Get the component state property.\n */\n get state () {\n return (this._checkId(), this._state)\n }\n\n set state (newState) {\n this._state = (this._checkId(), newState)\n }\n\n private _events () {\n const hp = Object.getOwnPropertyNames(window.HTMLElement.prototype)\n for (const p of this._props) {\n if (hp.indexOf('on' + p) === -1) continue\n this.addEventListener(p, this)\n }\n }\n\n private _prop (o) {\n const id = this._id\n const p = `__${id}__${Tonic._createId()}__`\n Tonic._data[id] = Tonic._data[id] || {}\n Tonic._data[id][p] = o\n return p\n }\n\n private _placehold (r) {\n const id = this._id\n const ref = `placehold:${id}:${Tonic._createId()}__`\n Tonic._children[id] = Tonic._children[id] || {}\n Tonic._children[id][ref] = r\n return ref\n }\n\n static match (el:HTMLElement, s:string) {\n if (!el.matches) el = el.parentElement!\n return el.matches(s) ? el : el.closest(s)\n }\n\n static getTagName (camelName:string) {\n return camelName.match(/[A-Z][a-z0-9]*/g)!.join('-').toLowerCase()\n }\n\n static getPropertyNames (proto) {\n const props:string[] = []\n while (proto && proto !== Tonic.prototype) {\n props.push(...Object.getOwnPropertyNames(proto))\n proto = Object.getPrototypeOf(proto)\n }\n return props\n }\n\n /**\n * Add a component. Calls `window.customElements.define` with the\n * component's name.\n *\n * @param {Tonic} c Component to add\n * @param {string} [htmlName] Name of the element, default to the class name\n * @returns {Tonic}\n */\n static add (c, htmlName?:string) {\n const hasValidName = htmlName || (c.name && c.name.length > 1)\n if (!hasValidName) {\n throw Error('Mangling. https://bit.ly/2TkJ6zP')\n }\n\n if (!htmlName) htmlName = Tonic.getTagName(c.name)\n if (!Tonic.ssr && window.customElements.get(htmlName)) {\n throw new Error(`Cannot Tonic.add(${c.name}, '${htmlName}') twice`)\n }\n\n if (!c.prototype || !c.prototype.isTonicComponent) {\n const tmp = { [c.name]: class extends Tonic { render } }[c.name]\n tmp.prototype.render = c\n c = tmp\n }\n\n c.prototype._props = Tonic.getPropertyNames(c.prototype)\n\n Tonic._reg[htmlName] = c\n Tonic._tags = Object.keys(Tonic._reg).join()\n window.customElements.define(htmlName, c as unknown as CustomElementConstructor)\n\n if (typeof c.stylesheet === 'function') {\n Tonic.registerStyles(c.stylesheet)\n }\n\n return c\n }\n\n static registerStyles (stylesheetFn:()=>string) {\n if (Tonic._stylesheetRegistry.includes(stylesheetFn)) return\n Tonic._stylesheetRegistry.push(stylesheetFn)\n\n const styleNode = document.createElement('style')\n if (Tonic.nonce) styleNode.setAttribute('nonce', Tonic.nonce)\n styleNode.appendChild(document.createTextNode(stylesheetFn()))\n if (document.head) document.head.appendChild(styleNode)\n }\n\n static escape (s:string):string {\n return s.replace(Tonic.ESC, c => Tonic.MAP[c])\n }\n\n static unsafeRawString (\n s:string,\n templateStrings:string[]\n ):InstanceType<typeof TonicTemplate> {\n return new TonicTemplate(s, templateStrings, true)\n }\n\n /**\n * Emit a regular, non-namespaced event.\n *\n * @param {string} eventName Event name as a string.\n * @param {any} detail Any data to go with the event.\n */\n dispatch (eventName:string, detail:any = null):void {\n const opts = { bubbles: true, detail }\n this.dispatchEvent(new window.CustomEvent(eventName, opts))\n }\n\n /**\n * Emit a namespaced event, using a convention for event names.\n *\n * @example\n * myComponent.emit('test') // => `my-compnent:test`\n *\n * @param {string} type The event type, comes after `:` in event name.\n * @param {string|object|any[]} detail detail for Event constructor\n * @param {{ bubbles?:boolean, cancelable?:boolean }} opts `Cancelable` and\n * `bubbles`\n * @returns {boolean}\n */\n emit (type:string, detail:string|object|any[] = {}, opts:Partial<{\n bubbles:boolean;\n cancelable:boolean\n }> = {}):boolean {\n const namespace = Tonic.getTagName(this.constructor.name)\n const event = new CustomEvent(`${namespace}:${type}`, {\n bubbles: (opts.bubbles === undefined) ? true : opts.bubbles,\n cancelable: (opts.cancelable === undefined) ? true : opts.cancelable,\n detail\n })\n\n return this.dispatchEvent(event)\n }\n\n html (\n strings:string[]|TemplateStringsArray,\n ...values\n ):InstanceType<typeof TonicTemplate> {\n const refs = o => {\n if (o && o.__children__) return this._placehold(o)\n if (o && o.isTonicTemplate) return o.rawText\n switch (Object.prototype.toString.call(o)) {\n case '[object HTMLCollection]':\n case '[object NodeList]': return this._placehold([...o])\n case '[object Array]': {\n if (o.every(x => x.isTonicTemplate && !x.unsafe)) {\n return new TonicTemplate(o.join('\\n'), null, false)\n }\n return this._prop(o)\n }\n case '[object Object]':\n case '[object Function]':\n case '[object AsyncFunction]':\n case '[object Set]':\n case '[object Map]':\n case '[object WeakMap]':\n case '[object File]':\n return this._prop(o)\n case '[object NamedNodeMap]':\n return this._prop(Tonic._normalizeAttrs(o))\n case '[object Number]': return `${o}__float`\n case '[object String]': return Tonic.escape(o)\n case '[object Boolean]': return `${o}__boolean`\n case '[object Null]': return `${o}__null`\n case '[object HTMLElement]':\n return this._placehold([o])\n }\n if (\n typeof o === 'object' && o && o.nodeType === 1 &&\n typeof o.cloneNode === 'function'\n ) {\n return this._placehold([o])\n }\n return o\n }\n\n const out:string[] = []\n for (let i = 0; i < strings.length - 1; i++) {\n out.push(strings[i], refs(values[i]))\n }\n out.push(strings[strings.length - 1])\n\n const htmlStr = out.join('').replace(Tonic.SPREAD, (_, p) => {\n const o = Tonic._data[p.split('__')[1]][p]\n return Object.entries(o).map(([key, value]) => {\n const k = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()\n if (value === true) return k\n else if (value) return `${k}=\"${Tonic.escape(String(value))}\"`\n else return ''\n }).filter(Boolean).join(' ')\n })\n // Process type markers in template content\n .replace(/(\\d+(?:\\.\\d+)?)__float/g, '$1')\n .replace(/(true|false)__boolean/g, '$1')\n .replace(/null__null/g, 'null')\n\n return new TonicTemplate(htmlStr, strings, false)\n }\n\n scheduleReRender (oldProps:any):Promise<this> {\n if (this.pendingReRender) return this.pendingReRender\n\n this.pendingReRender = new Promise(resolve => setTimeout(() => {\n if (!this.isInDocument(this.shadowRoot || this)) return\n const p = this._set(this.shadowRoot || this, this.render)\n this.pendingReRender = null\n\n if (p && p.then) {\n return p.then(() => {\n this.updated && this.updated(oldProps)\n resolve(this)\n })\n }\n\n this.updated && this.updated(oldProps)\n resolve(this)\n }, 0))\n\n return this.pendingReRender\n }\n\n /**\n * Update the view\n */\n reRender (o:T|((props:T)=>T) = this.props):Promise<this> {\n const oldProps = { ...this.props }\n this.props = typeof o === 'function' ? (o as (props:T)=>T)(oldProps) : o\n return this.scheduleReRender(oldProps)\n }\n\n /**\n * If there is a method with the same name as the event type,\n * then call the method.\n * @see {@link https://gomakethings.com/the-handleevent-method-is-the-absolute-best-way-to-handle-events-in-web-components/#what-is-the-handleevent-method What is the handleEvent() method?}\n */\n handleEvent (ev:Event):void {\n this[ev.type] && this[ev.type](ev)\n }\n\n private _drainIterator (target, iterator) {\n return iterator.next().then((result) => {\n this._set(target, null, result.value)\n if (result.done) return\n return this._drainIterator(target, iterator)\n })\n }\n\n /**\n * _set\n * @param {Element|InstanceType<typeof Tonic>|ShadowRoot} target\n * @param {()=>any} render\n * @param {string} content\n * @returns {Promise<void>|void}\n * @private\n */\n private _set (target, render, content = ''):Promise<void>|void {\n this.willRender && this.willRender()\n for (const node of target.querySelectorAll(Tonic._tags)) {\n if (!node.isTonicComponent) continue\n\n const id = node.getAttribute('id')\n if (!id || !Tonic._refIds.includes(id)) continue\n Tonic._states[id] = node.state\n }\n\n if (render instanceof Tonic.AsyncFunction) {\n return ((render as ()=>any)\n .call(this, this.html, this.props)\n .then(content => this._apply(target, content))\n )\n } else if (render instanceof Tonic.AsyncFunctionGenerator) {\n return this._drainIterator(target, (render as AsyncGeneratorFunction).call(this))\n } else if (render === null) {\n this._apply(target, content)\n } else if (render instanceof Function) {\n this._apply(target, render.call(this, this.html, this.props) || '')\n }\n }\n\n private _apply (target, content) {\n if (content && content.isTonicTemplate) {\n content = content.rawText\n } else if (typeof content === 'string') {\n content = Tonic.escape(content)\n }\n\n if (typeof content === 'string') {\n if (this.stylesheet) {\n content = `<style nonce=${Tonic.nonce || ''}>${this.stylesheet()}</style>${content}`\n }\n\n // Check if we should use morphdom for DOM state preservation\n const hasFormElements = target.querySelector && (\n target.querySelector('input') ||\n target.querySelector('textarea') ||\n target.querySelector('select')\n )\n\n const shouldUseMorphdom = (\n hasFormElements &&\n document.activeElement &&\n (\n target.contains(document.activeElement) ||\n target === document.activeElement\n )\n )\n\n if (shouldUseMorphdom) {\n // Use morphdom to preserve DOM state during updates\n const tempContainer = document.createElement('div')\n tempContainer.innerHTML = content\n\n morphdom(target, tempContainer, {\n childrenOnly: true,\n onBeforeElUpdated: (fromEl, toEl) => {\n // Skip updating if the elements are the same and preserve form state\n if (fromEl.isEqualNode && fromEl.isEqualNode(toEl)) {\n return false\n }\n\n // For inputs, preserve value and selection\n if (fromEl.tagName === 'INPUT' && toEl.tagName === 'INPUT') {\n const fromInput = fromEl as HTMLInputElement\n const toInput = toEl as HTMLInputElement\n\n // Preserve form values\n if (fromInput.value !== '') {\n toInput.value = fromInput.value\n }\n\n // Preserve selection/cursor position\n if (document.activeElement === fromInput) {\n toInput.setAttribute('data-preserve-focus', 'true')\n toInput.setAttribute('data-selection-start', String(fromInput.selectionStart || 0))\n toInput.setAttribute('data-selection-end', String(fromInput.selectionEnd || 0))\n }\n }\n\n // For textareas, preserve value and selection\n if (fromEl.tagName === 'TEXTAREA' && toEl.tagName === 'TEXTAREA') {\n const fromTextarea = fromEl as HTMLTextAreaElement\n const toTextarea = toEl as HTMLTextAreaElement\n\n // Preserve form values\n if (fromTextarea.value !== '') {\n toTextarea.value = fromTextarea.value\n }\n\n // Preserve selection/cursor position\n if (document.activeElement === fromTextarea) {\n toTextarea.setAttribute('data-preserve-focus', 'true')\n toTextarea.setAttribute('data-selection-start', String(fromTextarea.selectionStart || 0))\n toTextarea.setAttribute('data-selection-end', String(fromTextarea.selectionEnd || 0))\n }\n }\n\n return true\n },\n\n onElUpdated: (el) => {\n // Restore focus and selection after update\n if (el.hasAttribute('data-preserve-focus')) {\n const startPos = parseInt(el.getAttribute('data-selection-start') || '0', 10)\n const endPos = parseInt(el.getAttribute('data-selection-end') || '0', 10)\n\n // Clean up attributes\n el.removeAttribute('data-preserve-focus')\n el.removeAttribute('data-selection-start')\n el.removeAttribute('data-selection-end')\n\n // Focus and restore selection\n el.focus()\n if ('setSelectionRange' in el) {\n (el as HTMLInputElement|HTMLTextAreaElement).setSelectionRange(startPos, endPos)\n }\n }\n }\n })\n } else {\n // Use original innerHTML approach\n target.innerHTML = content\n }\n\n if (this.styles) {\n const styles = this.styles()\n for (const node of target.querySelectorAll('[styles]')) {\n for (const s of node.getAttribute('styles').split(/\\s+/)) {\n Object.assign(node.style, styles[s.trim()])\n }\n }\n }\n\n const children = Tonic._children[this._id] || {}\n\n const walk = (node, fn) => {\n if (node.nodeType === 3) {\n const id = node.textContent.trim()\n if (children[id]) fn(node, children[id], id)\n }\n\n const childNodes = node.childNodes\n if (!childNodes) return\n\n for (let i = 0; i < childNodes.length; i++) {\n walk(childNodes[i], fn)\n }\n }\n\n walk(target, (node, children, id) => {\n for (const child of children) {\n node.parentNode.insertBefore(child, node)\n }\n delete Tonic._children[this._id][id]\n node.parentNode.removeChild(node)\n })\n } else {\n target.innerHTML = ''\n target.appendChild(content.cloneNode(true))\n }\n }\n\n connectedCallback () {\n this.root = this.shadowRoot || this // here for back compat\n\n if (super.id && !Tonic._refIds.includes(super.id)) {\n Tonic._refIds.push(super.id)\n }\n const cc = s => s.replace(/-(.)/g, (_, m) => m.toUpperCase())\n\n for (const { name: _name, value } of this.attributes) {\n const name = cc(_name)\n const p = (this.props as { [key:string]:any })[name] = value\n\n if (/__\\w+__\\w+__/.test(p)) {\n const { 1: root } = p.split('__');\n (this.props as { [key:string]:any })[name] = Tonic._data[root][p]\n } else if (/\\d+__float/.test(p)) {\n (this.props as { [key:string]:any })[name] = parseFloat(p)\n } else if (p === 'null__null') {\n (this.props as { [key:string]:any })[name] = null\n } else if (/\\w+__boolean/.test(p)) {\n (this.props as { [key:string]:any })[name] = p.includes('true')\n } else if (/placehold:\\w+:\\w+__/.test(p)) {\n const { 1: root } = p.split(':');\n (this.props as { [key:string]:any })[name] =\n Tonic._children[root][p][0]\n }\n }\n\n this.props = Object.assign(\n this.defaults(),\n this.props\n )\n\n this._id = this._id || Tonic._createId()\n\n this.willConnect && this.willConnect()\n\n if (!this.isInDocument(this.root)) return\n if (!this.preventRenderOnReconnect) {\n if (!this._source) {\n this._source = this.innerHTML\n } else {\n this.innerHTML = this._source\n }\n const p = this._set(this.root, this.render)\n if (p && p.then) {\n return p.then(() => this.connected && this.connected())\n }\n }\n\n this.connected && this.connected()\n }\n\n isInDocument (target:HTMLElement|ShadowRoot):boolean {\n const root = target.getRootNode()\n return root === document || root.toString() === '[object ShadowRoot]'\n }\n\n disconnectedCallback ():void {\n this.disconnected && this.disconnected()\n delete Tonic._data[this._id]\n delete Tonic._children[this._id]\n }\n}\n\nexport default Tonic\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import morphdom from '@substrate-system/morphdom'\n\nexport class TonicTemplate {\n rawText:string\n unsafe:boolean\n templateStrings?:string[]|TemplateStringsArray|null\n isTonicTemplate:true\n\n constructor (\n rawText,\n templateStrings?:string[]|TemplateStringsArray|null,\n unsafe?:boolean\n ) {\n this.isTonicTemplate = true\n this.unsafe = !!unsafe\n this.rawText = rawText\n this.templateStrings = templateStrings\n }\n\n valueOf () { return this.rawText }\n toString () { return this.rawText }\n}\n\n/**\n * Class Tonic\n *\n * @template {T extends object = Record<string, any>} T Type of the props\n */\nexport abstract class Tonic<\n T extends { [key:string]:any}=Record<string, any>\n> extends window.HTMLElement {\n private static _tags = ''\n private static _refIds:string[] = []\n private static _data = {}\n private static _states = {}\n private static _children = {}\n private static _reg = {}\n private static _stylesheetRegistry:(()=>string)[] = []\n private static _index = 0\n // @ts-expect-error VERSION is injected during build\n static get version () { return VERSION ?? null }\n static get SPREAD () { return /\\.\\.\\.\\s?(__\\w+__\\w+__)/g }\n static get ESC () { return /[\"&'<>`/]/g }\n static get AsyncFunctionGenerator ():AsyncGeneratorFunctionConstructor {\n return (async function * () {\n }.constructor) as AsyncGeneratorFunctionConstructor\n }\n // eslint-disable-next-line\n static get AsyncFunction ():Function {\n return (async function () {}.constructor)\n }\n\n static get MAP () {\n /* eslint-disable object-property-newline, object-property-newline,\n object-curly-newline */\n return { '\"': '"', '&': '&', '\\'': ''', '<': '<',\n '>': '>', '`': '`', '/': '/' }\n }\n\n static ssr\n static nonce\n\n private _state:any\n stylesheet?:()=>string\n styles:()=>string\n props:T\n preventRenderOnReconnect:boolean\n private _id:string\n pendingReRender?:Promise<this>|null\n updated?:((props:Record<string, any>)=>any)\n willRender?:(()=>any)\n root?:ShadowRoot|this\n willConnect?:()=>any\n private _source?:string\n connected?:()=>void\n disconnected?:()=>void\n\n private elements:Element[] & { __children__? }\n private nodes:ChildNode[] & { __children__? }\n private _props = Tonic.getPropertyNames(this)\n\n constructor () {\n super()\n const state = Tonic._states[super.id]\n delete Tonic._states[super.id]\n this._state = state || {}\n this.preventRenderOnReconnect = false\n this.props = {} as T\n this.elements = [...this.children]\n this.elements.__children__ = true\n this.nodes = [...this.childNodes]\n this.nodes.__children__ = true\n this._events()\n }\n\n abstract render ():TonicTemplate|Promise<TonicTemplate>\n\n defaults ():Record<string, any>|undefined {\n return {}\n }\n\n get isTonicComponent ():true {\n return true\n }\n\n /**\n * Get a namespaced event name, given a non-namespaced string.\n *\n * @example\n * MyElement.event('example') // => my-element:example\n *\n * @param {string} type The name of the event\n * @returns {string} The namespaced event name\n */\n static event (type:string):string {\n return `${this.tag}:${type}`\n }\n\n /**\n * Get the tag name of this component.\n */\n static get tag ():string {\n return Tonic.getTagName(this.name)\n }\n\n private static _createId () {\n return `tonic${Tonic._index++}`\n }\n\n private static _normalizeAttrs (o, x = {}) {\n [...o].forEach(o => (x[o.name] = o.value))\n return x\n }\n\n private _checkId () {\n const _id = super.id\n if (!_id) {\n const html = this.outerHTML.replace(this.innerHTML, '...')\n throw new Error(`Component: ${html} has no id`)\n }\n return _id\n }\n\n /**\n * Get the component state property.\n */\n get state () {\n return (this._checkId(), this._state)\n }\n\n set state (newState) {\n this._state = (this._checkId(), newState)\n }\n\n private _events () {\n const hp = Object.getOwnPropertyNames(window.HTMLElement.prototype)\n // this is where we map methods like `handle_click` to event handlers.\n // look at the HTMLElement prototype, and if it is has a method like\n // `onclick`, then add an event listener for 'click'\n for (const p of this._props) {\n if (!p.includes('handle_')) continue\n const evName = p.split('_')[1]\n\n if (hp.indexOf('on' + evName) === -1) continue\n this.addEventListener(evName, this)\n }\n }\n\n private _prop (o) {\n const id = this._id\n const p = `__${id}__${Tonic._createId()}__`\n Tonic._data[id] = Tonic._data[id] || {}\n Tonic._data[id][p] = o\n return p\n }\n\n private _placehold (r) {\n const id = this._id\n const ref = `placehold:${id}:${Tonic._createId()}__`\n Tonic._children[id] = Tonic._children[id] || {}\n Tonic._children[id][ref] = r\n return ref\n }\n\n static match (el:HTMLElement, s:string) {\n if (!el.matches) el = el.parentElement!\n return el.matches(s) ? el : el.closest(s)\n }\n\n static getTagName (camelName:string) {\n return camelName.match(/[A-Z][a-z0-9]*/g)!.join('-').toLowerCase()\n }\n\n /**\n * Add all methods to this._props\n */\n static getPropertyNames (proto) {\n const props:string[] = []\n while (proto && proto !== Tonic.prototype) {\n props.push(...Object.getOwnPropertyNames(proto))\n proto = Object.getPrototypeOf(proto)\n }\n return props\n }\n\n /**\n * Add a component. Calls `window.customElements.define` with the\n * component's name.\n *\n * @param {Tonic} c Component to add\n * @param {string} [htmlName] Name of the element, default to the class name\n * @returns {Tonic}\n */\n static add (c, htmlName?:string) {\n const hasValidName = htmlName || (c.name && c.name.length > 1)\n if (!hasValidName) {\n throw Error('Mangling. https://bit.ly/2TkJ6zP')\n }\n\n if (!htmlName) htmlName = Tonic.getTagName(c.name)\n if (!Tonic.ssr && window.customElements.get(htmlName)) {\n throw new Error(`Cannot Tonic.add(${c.name}, '${htmlName}') twice`)\n }\n\n if (!c.prototype || !c.prototype.isTonicComponent) {\n const tmp = { [c.name]: class extends Tonic { render } }[c.name]\n tmp.prototype.render = c\n c = tmp\n }\n\n c.prototype._props = Tonic.getPropertyNames(c.prototype)\n\n Tonic._reg[htmlName] = c\n Tonic._tags = Object.keys(Tonic._reg).join()\n window.customElements.define(htmlName, c as unknown as CustomElementConstructor)\n\n if (typeof c.stylesheet === 'function') {\n Tonic.registerStyles(c.stylesheet)\n }\n\n return c\n }\n\n static registerStyles (stylesheetFn:()=>string) {\n if (Tonic._stylesheetRegistry.includes(stylesheetFn)) return\n Tonic._stylesheetRegistry.push(stylesheetFn)\n\n const styleNode = document.createElement('style')\n if (Tonic.nonce) styleNode.setAttribute('nonce', Tonic.nonce)\n styleNode.appendChild(document.createTextNode(stylesheetFn()))\n if (document.head) document.head.appendChild(styleNode)\n }\n\n static escape (s:string):string {\n return s.replace(Tonic.ESC, c => Tonic.MAP[c])\n }\n\n static unsafeRawString (\n s:string,\n templateStrings:string[]\n ):InstanceType<typeof TonicTemplate> {\n return new TonicTemplate(s, templateStrings, true)\n }\n\n /**\n * Emit a regular, non-namespaced event.\n *\n * @param {string} eventName Event name as a string.\n * @param {any} detail Any data to go with the event.\n */\n dispatch (eventName:string, detail:any = null):void {\n const opts = { bubbles: true, detail }\n this.dispatchEvent(new window.CustomEvent(eventName, opts))\n }\n\n /**\n * Emit a namespaced event, using a convention for event names.\n *\n * @example\n * myComponent.emit('test') // => `my-compnent:test`\n *\n * @param {string} type The event type, comes after `:` in event name.\n * @param {string|object|any[]} detail detail for Event constructor\n * @param {{ bubbles?:boolean, cancelable?:boolean }} opts `Cancelable` and\n * `bubbles`\n * @returns {boolean}\n */\n emit (type:string, detail:string|object|any[] = {}, opts:Partial<{\n bubbles:boolean;\n cancelable:boolean\n }> = {}):boolean {\n const namespace = Tonic.getTagName(this.constructor.name)\n const event = new CustomEvent(`${namespace}:${type}`, {\n bubbles: (opts.bubbles === undefined) ? true : opts.bubbles,\n cancelable: (opts.cancelable === undefined) ? true : opts.cancelable,\n detail\n })\n\n return this.dispatchEvent(event)\n }\n\n html (\n strings:string[]|TemplateStringsArray,\n ...values\n ):InstanceType<typeof TonicTemplate> {\n const refs = o => {\n if (o && o.__children__) return this._placehold(o)\n if (o && o.isTonicTemplate) return o.rawText\n switch (Object.prototype.toString.call(o)) {\n case '[object HTMLCollection]':\n case '[object NodeList]': return this._placehold([...o])\n case '[object Array]': {\n if (o.every(x => x.isTonicTemplate && !x.unsafe)) {\n return new TonicTemplate(o.join('\\n'), null, false)\n }\n return this._prop(o)\n }\n case '[object Object]':\n case '[object Function]':\n case '[object AsyncFunction]':\n case '[object Set]':\n case '[object Map]':\n case '[object WeakMap]':\n case '[object File]':\n return this._prop(o)\n case '[object NamedNodeMap]':\n return this._prop(Tonic._normalizeAttrs(o))\n case '[object Number]': return `${o}__float`\n case '[object String]': return Tonic.escape(o)\n case '[object Boolean]': return `${o}__boolean`\n case '[object Null]': return `${o}__null`\n case '[object HTMLElement]':\n return this._placehold([o])\n }\n if (\n typeof o === 'object' && o && o.nodeType === 1 &&\n typeof o.cloneNode === 'function'\n ) {\n return this._placehold([o])\n }\n return o\n }\n\n const out:string[] = []\n for (let i = 0; i < strings.length - 1; i++) {\n out.push(strings[i], refs(values[i]))\n }\n out.push(strings[strings.length - 1])\n\n const htmlStr = out.join('').replace(Tonic.SPREAD, (_, p) => {\n const o = Tonic._data[p.split('__')[1]][p]\n return Object.entries(o).map(([key, value]) => {\n const k = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()\n if (value === true) return k\n else if (value) return `${k}=\"${Tonic.escape(String(value))}\"`\n else return ''\n }).filter(Boolean).join(' ')\n })\n // Process type markers in template content\n .replace(/(\\d+(?:\\.\\d+)?)__float/g, '$1')\n .replace(/(true|false)__boolean/g, '$1')\n .replace(/null__null/g, 'null')\n\n return new TonicTemplate(htmlStr, strings, false)\n }\n\n scheduleReRender (oldProps:any):Promise<this> {\n if (this.pendingReRender) return this.pendingReRender\n\n this.pendingReRender = new Promise(resolve => setTimeout(() => {\n if (!this.isInDocument(this.shadowRoot || this)) return\n const p = this._set(this.shadowRoot || this, this.render)\n this.pendingReRender = null\n\n if (p && p.then) {\n return p.then(() => {\n this.updated && this.updated(oldProps)\n resolve(this)\n })\n }\n\n this.updated && this.updated(oldProps)\n resolve(this)\n }, 0))\n\n return this.pendingReRender\n }\n\n /**\n * Update the view\n */\n reRender (o:T|((props:T)=>T) = this.props):Promise<this> {\n const oldProps = { ...this.props }\n this.props = typeof o === 'function' ? (o as (props:T)=>T)(oldProps) : o\n return this.scheduleReRender(oldProps)\n }\n\n /**\n * If there is a method with the same name as the event type,\n * then call the method.\n * @see {@link https://gomakethings.com/the-handleevent-method-is-the-absolute-best-way-to-handle-events-in-web-components/#what-is-the-handleevent-method What is the handleEvent() method?}\n */\n handleEvent (ev:Event):void {\n this['handle_' + ev.type] && this['handle_' + ev.type](ev)\n }\n\n private _drainIterator (target, iterator) {\n return iterator.next().then((result) => {\n this._set(target, null, result.value)\n if (result.done) return\n return this._drainIterator(target, iterator)\n })\n }\n\n /**\n * _set\n * @param {Element|InstanceType<typeof Tonic>|ShadowRoot} target\n * @param {()=>any} render\n * @param {string} content\n * @returns {Promise<void>|void}\n * @private\n */\n private _set (target, render, content = ''):Promise<void>|void {\n this.willRender && this.willRender()\n for (const node of target.querySelectorAll(Tonic._tags)) {\n if (!node.isTonicComponent) continue\n\n const id = node.getAttribute('id')\n if (!id || !Tonic._refIds.includes(id)) continue\n Tonic._states[id] = node.state\n }\n\n if (render instanceof Tonic.AsyncFunction) {\n return ((render as ()=>any)\n .call(this, this.html, this.props)\n .then(content => this._apply(target, content))\n )\n } else if (render instanceof Tonic.AsyncFunctionGenerator) {\n return this._drainIterator(target, (render as AsyncGeneratorFunction).call(this))\n } else if (render === null) {\n this._apply(target, content)\n } else if (render instanceof Function) {\n this._apply(target, render.call(this, this.html, this.props) || '')\n }\n }\n\n private _apply (target, content) {\n if (content && content.isTonicTemplate) {\n content = content.rawText\n } else if (typeof content === 'string') {\n content = Tonic.escape(content)\n }\n\n if (typeof content === 'string') {\n if (this.stylesheet) {\n content = `<style nonce=${Tonic.nonce || ''}>${this.stylesheet()}</style>${content}`\n }\n\n // Check if we should use morphdom for DOM state preservation\n const hasFormElements = target.querySelector && (\n target.querySelector('input') ||\n target.querySelector('textarea') ||\n target.querySelector('select')\n )\n\n const shouldUseMorphdom = (\n hasFormElements &&\n document.activeElement &&\n (\n target.contains(document.activeElement) ||\n target === document.activeElement\n )\n )\n\n if (shouldUseMorphdom) {\n // Use morphdom to preserve DOM state during updates\n const tempContainer = document.createElement('div')\n tempContainer.innerHTML = content\n\n morphdom(target, tempContainer, {\n childrenOnly: true,\n onBeforeElUpdated: (fromEl, toEl) => {\n // Skip updating if the elements are the same and preserve form state\n if (fromEl.isEqualNode && fromEl.isEqualNode(toEl)) {\n return false\n }\n\n // For inputs, preserve value and selection\n if (fromEl.tagName === 'INPUT' && toEl.tagName === 'INPUT') {\n const fromInput = fromEl as HTMLInputElement\n const toInput = toEl as HTMLInputElement\n\n // Preserve form values\n if (fromInput.value !== '') {\n toInput.value = fromInput.value\n }\n\n // Preserve selection/cursor position\n if (document.activeElement === fromInput) {\n toInput.setAttribute('data-preserve-focus', 'true')\n toInput.setAttribute('data-selection-start', String(fromInput.selectionStart || 0))\n toInput.setAttribute('data-selection-end', String(fromInput.selectionEnd || 0))\n }\n }\n\n // For textareas, preserve value and selection\n if (fromEl.tagName === 'TEXTAREA' && toEl.tagName === 'TEXTAREA') {\n const fromTextarea = fromEl as HTMLTextAreaElement\n const toTextarea = toEl as HTMLTextAreaElement\n\n // Preserve form values\n if (fromTextarea.value !== '') {\n toTextarea.value = fromTextarea.value\n }\n\n // Preserve selection/cursor position\n if (document.activeElement === fromTextarea) {\n toTextarea.setAttribute('data-preserve-focus', 'true')\n toTextarea.setAttribute('data-selection-start', String(fromTextarea.selectionStart || 0))\n toTextarea.setAttribute('data-selection-end', String(fromTextarea.selectionEnd || 0))\n }\n }\n\n return true\n },\n\n onElUpdated: (el) => {\n // Restore focus and selection after update\n if (el.hasAttribute('data-preserve-focus')) {\n const startPos = parseInt(el.getAttribute('data-selection-start') || '0', 10)\n const endPos = parseInt(el.getAttribute('data-selection-end') || '0', 10)\n\n // Clean up attributes\n el.removeAttribute('data-preserve-focus')\n el.removeAttribute('data-selection-start')\n el.removeAttribute('data-selection-end')\n\n // Focus and restore selection\n el.focus()\n if ('setSelectionRange' in el) {\n (el as HTMLInputElement|HTMLTextAreaElement).setSelectionRange(startPos, endPos)\n }\n }\n }\n })\n } else {\n // Use original innerHTML approach\n target.innerHTML = content\n }\n\n if (this.styles) {\n const styles = this.styles()\n for (const node of target.querySelectorAll('[styles]')) {\n for (const s of node.getAttribute('styles').split(/\\s+/)) {\n Object.assign(node.style, styles[s.trim()])\n }\n }\n }\n\n const children = Tonic._children[this._id] || {}\n\n const walk = (node, fn) => {\n if (node.nodeType === 3) {\n const id = node.textContent.trim()\n if (children[id]) fn(node, children[id], id)\n }\n\n const childNodes = node.childNodes\n if (!childNodes) return\n\n for (let i = 0; i < childNodes.length; i++) {\n walk(childNodes[i], fn)\n }\n }\n\n walk(target, (node, children, id) => {\n for (const child of children) {\n node.parentNode.insertBefore(child, node)\n }\n delete Tonic._children[this._id][id]\n node.parentNode.removeChild(node)\n })\n } else {\n target.innerHTML = ''\n target.appendChild(content.cloneNode(true))\n }\n }\n\n connectedCallback () {\n this.root = this.shadowRoot || this // here for back compat\n\n if (super.id && !Tonic._refIds.includes(super.id)) {\n Tonic._refIds.push(super.id)\n }\n const cc = s => s.replace(/-(.)/g, (_, m) => m.toUpperCase())\n\n for (const { name: _name, value } of this.attributes) {\n const name = cc(_name)\n const p = (this.props as { [key:string]:any })[name] = value\n\n if (/__\\w+__\\w+__/.test(p)) {\n const { 1: root } = p.split('__');\n (this.props as { [key:string]:any })[name] = Tonic._data[root][p]\n } else if (/\\d+__float/.test(p)) {\n (this.props as { [key:string]:any })[name] = parseFloat(p)\n } else if (p === 'null__null') {\n (this.props as { [key:string]:any })[name] = null\n } else if (/\\w+__boolean/.test(p)) {\n (this.props as { [key:string]:any })[name] = p.includes('true')\n } else if (/placehold:\\w+:\\w+__/.test(p)) {\n const { 1: root } = p.split(':');\n (this.props as { [key:string]:any })[name] =\n Tonic._children[root][p][0]\n }\n }\n\n this.props = Object.assign(\n this.defaults(),\n this.props\n )\n\n this._id = this._id || Tonic._createId()\n\n this.willConnect && this.willConnect()\n\n if (!this.isInDocument(this.root)) return\n if (!this.preventRenderOnReconnect) {\n if (!this._source) {\n this._source = this.innerHTML\n } else {\n this.innerHTML = this._source\n }\n const p = this._set(this.root, this.render)\n if (p && p.then) {\n return p.then(() => this.connected && this.connected())\n }\n }\n\n this.connected && this.connected()\n }\n\n isInDocument (target:HTMLElement|ShadowRoot):boolean {\n const root = target.getRootNode()\n return root === document || root.toString() === '[object ShadowRoot]'\n }\n\n disconnectedCallback ():void {\n this.disconnected && this.disconnected()\n delete Tonic._data[this._id]\n delete Tonic._children[this._id]\n }\n}\n\nexport default Tonic\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["o", "content", "children"]
|
|
7
7
|
}
|
package/dist/index.min.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var f=Object.defineProperty;var u=(h,p)=>f(h,"name",{value:p,configurable:!0});import m from"@substrate-system/morphdom";export class TonicTemplate{static{u(this,"TonicTemplate")}constructor(p,e,t){this.isTonicTemplate=!0,this.unsafe=!!t,this.rawText=p,this.templateStrings=e}valueOf(){return this.rawText}toString(){return this.rawText}}export class Tonic extends window.HTMLElement{constructor(){super();this._props=Tonic.getPropertyNames(this);const e=Tonic._states[super.id];delete Tonic._states[super.id],this._state=e||{},this.preventRenderOnReconnect=!1,this.props={},this.elements=[...this.children],this.elements.__children__=!0,this.nodes=[...this.childNodes],this.nodes.__children__=!0,this._events()}static{u(this,"Tonic")}static{this._tags=""}static{this._refIds=[]}static{this._data={}}static{this._states={}}static{this._children={}}static{this._reg={}}static{this._stylesheetRegistry=[]}static{this._index=0}static get version(){return"
|
|
2
|
-
`),null,!1):this._prop(s);case"[object Object]":case"[object Function]":case"[object AsyncFunction]":case"[object Set]":case"[object Map]":case"[object WeakMap]":case"[object File]":return this._prop(s);case"[object NamedNodeMap]":return this._prop(Tonic._normalizeAttrs(s));case"[object Number]":return`${s}__float`;case"[object String]":return Tonic.escape(s);case"[object Boolean]":return`${s}__boolean`;case"[object Null]":return`${s}__null`;case"[object HTMLElement]":return this._placehold([s])}return typeof s=="object"&&s&&s.nodeType===1&&typeof s.cloneNode=="function"?this._placehold([s]):s},"refs"),a=[];for(let s=0;s<e.length-1;s++)a.push(e[s],n(t[s]));a.push(e[e.length-1]);const o=a.join("").replace(Tonic.SPREAD,(s,c)=>{const i=Tonic._data[c.split("__")[1]][c];return Object.entries(i).map(([l,r])=>{const d=l.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();return r===!0?d:r?`${d}="${Tonic.escape(String(r))}"`:""}).filter(Boolean).join(" ")}).replace(/(\d+(?:\.\d+)?)__float/g,"$1").replace(/(true|false)__boolean/g,"$1").replace(/null__null/g,"null");return new TonicTemplate(o,e,!1)}scheduleReRender(e){return this.pendingReRender?this.pendingReRender:(this.pendingReRender=new Promise(t=>setTimeout(()=>{if(!this.isInDocument(this.shadowRoot||this))return;const n=this._set(this.shadowRoot||this,this.render);if(this.pendingReRender=null,n&&n.then)return n.then(()=>{this.updated&&this.updated(e),t(this)});this.updated&&this.updated(e),t(this)},0)),this.pendingReRender)}reRender(e=this.props){const t={...this.props};return this.props=typeof e=="function"?e(t):e,this.scheduleReRender(t)}handleEvent(e){this[e.type]&&this[e.type](e)}_drainIterator(e,t){return t.next().then(n=>{if(this._set(e,null,n.value),!n.done)return this._drainIterator(e,t)})}_set(e,t,n=""){this.willRender&&this.willRender();for(const a of e.querySelectorAll(Tonic._tags)){if(!a.isTonicComponent)continue;const o=a.getAttribute("id");!o||!Tonic._refIds.includes(o)||(Tonic._states[o]=a.state)}if(t instanceof Tonic.AsyncFunction)return t.call(this,this.html,this.props).then(a=>this._apply(e,a));if(t instanceof Tonic.AsyncFunctionGenerator)return this._drainIterator(e,t.call(this));t===null?this._apply(e,n):t instanceof Function&&this._apply(e,t.call(this,this.html,this.props)||"")}_apply(e,t){if(t&&t.isTonicTemplate?t=t.rawText:typeof t=="string"&&(t=Tonic.escape(t)),typeof t=="string"){if(this.stylesheet&&(t=`<style nonce=${Tonic.nonce||""}>${this.stylesheet()}</style>${t}`),e.querySelector&&(e.querySelector("input")||e.querySelector("textarea")||e.querySelector("select"))&&document.activeElement&&(e.contains(document.activeElement)||e===document.activeElement)){const c=document.createElement("div");c.innerHTML=t,m(e,c,{childrenOnly:!0,onBeforeElUpdated:u((i,l)=>{if(i.isEqualNode&&i.isEqualNode(l))return!1;if(i.tagName==="INPUT"&&l.tagName==="INPUT"){const r=i,d=l;r.value!==""&&(d.value=r.value),document.activeElement===r&&(d.setAttribute("data-preserve-focus","true"),d.setAttribute("data-selection-start",String(r.selectionStart||0)),d.setAttribute("data-selection-end",String(r.selectionEnd||0)))}if(i.tagName==="TEXTAREA"&&l.tagName==="TEXTAREA"){const r=i,d=l;r.value!==""&&(d.value=r.value),document.activeElement===r&&(d.setAttribute("data-preserve-focus","true"),d.setAttribute("data-selection-start",String(r.selectionStart||0)),d.setAttribute("data-selection-end",String(r.selectionEnd||0)))}return!0},"onBeforeElUpdated"),onElUpdated:u(i=>{if(i.hasAttribute("data-preserve-focus")){const l=parseInt(i.getAttribute("data-selection-start")||"0",10),r=parseInt(i.getAttribute("data-selection-end")||"0",10);i.removeAttribute("data-preserve-focus"),i.removeAttribute("data-selection-start"),i.removeAttribute("data-selection-end"),i.focus(),"setSelectionRange"in i&&i.setSelectionRange(l,r)}},"onElUpdated")})}else e.innerHTML=t;if(this.styles){const c=this.styles();for(const i of e.querySelectorAll("[styles]"))for(const l of i.getAttribute("styles").split(/\s+/))Object.assign(i.style,c[l.trim()])}const o=Tonic._children[this._id]||{},s=u((c,i)=>{if(c.nodeType===3){const r=c.textContent.trim();o[r]&&i(c,o[r],r)}const l=c.childNodes;if(l)for(let r=0;r<l.length;r++)s(l[r],i)},"walk");s(e,(c,i,l)=>{for(const r of i)c.parentNode.insertBefore(r,c);delete Tonic._children[this._id][l],c.parentNode.removeChild(c)})}else e.innerHTML="",e.appendChild(t.cloneNode(!0))}connectedCallback(){this.root=this.shadowRoot||this,super.id&&!Tonic._refIds.includes(super.id)&&Tonic._refIds.push(super.id);const e=u(t=>t.replace(/-(.)/g,(n,a)=>a.toUpperCase()),"cc");for(const{name:t,value:n}of this.attributes){const a=e(t),o=this.props[a]=n;if(/__\w+__\w+__/.test(o)){const{1:s}=o.split("__");this.props[a]=Tonic._data[s][o]}else if(/\d+__float/.test(o))this.props[a]=parseFloat(o);else if(o==="null__null")this.props[a]=null;else if(/\w+__boolean/.test(o))this.props[a]=o.includes("true");else if(/placehold:\w+:\w+__/.test(o)){const{1:s}=o.split(":");this.props[a]=Tonic._children[s][o][0]}}if(this.props=Object.assign(this.defaults(),this.props),this._id=this._id||Tonic._createId(),this.willConnect&&this.willConnect(),!!this.isInDocument(this.root)){if(!this.preventRenderOnReconnect){this._source?this.innerHTML=this._source:this._source=this.innerHTML;const t=this._set(this.root,this.render);if(t&&t.then)return t.then(()=>this.connected&&this.connected())}this.connected&&this.connected()}}isInDocument(e){const t=e.getRootNode();return t===document||t.toString()==="[object ShadowRoot]"}disconnectedCallback(){this.disconnected&&this.disconnected(),delete Tonic._data[this._id],delete Tonic._children[this._id]}}export default Tonic;
|
|
1
|
+
var f=Object.defineProperty;var u=(h,p)=>f(h,"name",{value:p,configurable:!0});import m from"@substrate-system/morphdom";export class TonicTemplate{static{u(this,"TonicTemplate")}constructor(p,e,t){this.isTonicTemplate=!0,this.unsafe=!!t,this.rawText=p,this.templateStrings=e}valueOf(){return this.rawText}toString(){return this.rawText}}export class Tonic extends window.HTMLElement{constructor(){super();this._props=Tonic.getPropertyNames(this);const e=Tonic._states[super.id];delete Tonic._states[super.id],this._state=e||{},this.preventRenderOnReconnect=!1,this.props={},this.elements=[...this.children],this.elements.__children__=!0,this.nodes=[...this.childNodes],this.nodes.__children__=!0,this._events()}static{u(this,"Tonic")}static{this._tags=""}static{this._refIds=[]}static{this._data={}}static{this._states={}}static{this._children={}}static{this._reg={}}static{this._stylesheetRegistry=[]}static{this._index=0}static get version(){return"17.0.0"}static get SPREAD(){return/\.\.\.\s?(__\w+__\w+__)/g}static get ESC(){return/["&'<>`/]/g}static get AsyncFunctionGenerator(){return async function*(){}.constructor}static get AsyncFunction(){return async function(){}.constructor}static get MAP(){return{'"':""","&":"&","'":"'","<":"<",">":">","`":"`","/":"/"}}defaults(){return{}}get isTonicComponent(){return!0}static event(e){return`${this.tag}:${e}`}static get tag(){return Tonic.getTagName(this.name)}static _createId(){return`tonic${Tonic._index++}`}static _normalizeAttrs(e,t={}){return[...e].forEach(n=>t[n.name]=n.value),t}_checkId(){const e=super.id;if(!e){const t=this.outerHTML.replace(this.innerHTML,"...");throw new Error(`Component: ${t} has no id`)}return e}get state(){return this._checkId(),this._state}set state(e){this._state=(this._checkId(),e)}_events(){const e=Object.getOwnPropertyNames(window.HTMLElement.prototype);for(const t of this._props){if(!t.includes("handle_"))continue;const n=t.split("_")[1];e.indexOf("on"+n)!==-1&&this.addEventListener(n,this)}}_prop(e){const t=this._id,n=`__${t}__${Tonic._createId()}__`;return Tonic._data[t]=Tonic._data[t]||{},Tonic._data[t][n]=e,n}_placehold(e){const t=this._id,n=`placehold:${t}:${Tonic._createId()}__`;return Tonic._children[t]=Tonic._children[t]||{},Tonic._children[t][n]=e,n}static match(e,t){return e.matches||(e=e.parentElement),e.matches(t)?e:e.closest(t)}static getTagName(e){return e.match(/[A-Z][a-z0-9]*/g).join("-").toLowerCase()}static getPropertyNames(e){const t=[];for(;e&&e!==Tonic.prototype;)t.push(...Object.getOwnPropertyNames(e)),e=Object.getPrototypeOf(e);return t}static add(e,t){if(!(t||e.name&&e.name.length>1))throw Error("Mangling. https://bit.ly/2TkJ6zP");if(t||(t=Tonic.getTagName(e.name)),!Tonic.ssr&&window.customElements.get(t))throw new Error(`Cannot Tonic.add(${e.name}, '${t}') twice`);if(!e.prototype||!e.prototype.isTonicComponent){const a={[e.name]:class extends Tonic{}}[e.name];a.prototype.render=e,e=a}return e.prototype._props=Tonic.getPropertyNames(e.prototype),Tonic._reg[t]=e,Tonic._tags=Object.keys(Tonic._reg).join(),window.customElements.define(t,e),typeof e.stylesheet=="function"&&Tonic.registerStyles(e.stylesheet),e}static registerStyles(e){if(Tonic._stylesheetRegistry.includes(e))return;Tonic._stylesheetRegistry.push(e);const t=document.createElement("style");Tonic.nonce&&t.setAttribute("nonce",Tonic.nonce),t.appendChild(document.createTextNode(e())),document.head&&document.head.appendChild(t)}static escape(e){return e.replace(Tonic.ESC,t=>Tonic.MAP[t])}static unsafeRawString(e,t){return new TonicTemplate(e,t,!0)}dispatch(e,t=null){const n={bubbles:!0,detail:t};this.dispatchEvent(new window.CustomEvent(e,n))}emit(e,t={},n={}){const a=Tonic.getTagName(this.constructor.name),o=new CustomEvent(`${a}:${e}`,{bubbles:n.bubbles===void 0?!0:n.bubbles,cancelable:n.cancelable===void 0?!0:n.cancelable,detail:t});return this.dispatchEvent(o)}html(e,...t){const n=u(s=>{if(s&&s.__children__)return this._placehold(s);if(s&&s.isTonicTemplate)return s.rawText;switch(Object.prototype.toString.call(s)){case"[object HTMLCollection]":case"[object NodeList]":return this._placehold([...s]);case"[object Array]":return s.every(c=>c.isTonicTemplate&&!c.unsafe)?new TonicTemplate(s.join(`
|
|
2
|
+
`),null,!1):this._prop(s);case"[object Object]":case"[object Function]":case"[object AsyncFunction]":case"[object Set]":case"[object Map]":case"[object WeakMap]":case"[object File]":return this._prop(s);case"[object NamedNodeMap]":return this._prop(Tonic._normalizeAttrs(s));case"[object Number]":return`${s}__float`;case"[object String]":return Tonic.escape(s);case"[object Boolean]":return`${s}__boolean`;case"[object Null]":return`${s}__null`;case"[object HTMLElement]":return this._placehold([s])}return typeof s=="object"&&s&&s.nodeType===1&&typeof s.cloneNode=="function"?this._placehold([s]):s},"refs"),a=[];for(let s=0;s<e.length-1;s++)a.push(e[s],n(t[s]));a.push(e[e.length-1]);const o=a.join("").replace(Tonic.SPREAD,(s,c)=>{const i=Tonic._data[c.split("__")[1]][c];return Object.entries(i).map(([l,r])=>{const d=l.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();return r===!0?d:r?`${d}="${Tonic.escape(String(r))}"`:""}).filter(Boolean).join(" ")}).replace(/(\d+(?:\.\d+)?)__float/g,"$1").replace(/(true|false)__boolean/g,"$1").replace(/null__null/g,"null");return new TonicTemplate(o,e,!1)}scheduleReRender(e){return this.pendingReRender?this.pendingReRender:(this.pendingReRender=new Promise(t=>setTimeout(()=>{if(!this.isInDocument(this.shadowRoot||this))return;const n=this._set(this.shadowRoot||this,this.render);if(this.pendingReRender=null,n&&n.then)return n.then(()=>{this.updated&&this.updated(e),t(this)});this.updated&&this.updated(e),t(this)},0)),this.pendingReRender)}reRender(e=this.props){const t={...this.props};return this.props=typeof e=="function"?e(t):e,this.scheduleReRender(t)}handleEvent(e){this["handle_"+e.type]&&this["handle_"+e.type](e)}_drainIterator(e,t){return t.next().then(n=>{if(this._set(e,null,n.value),!n.done)return this._drainIterator(e,t)})}_set(e,t,n=""){this.willRender&&this.willRender();for(const a of e.querySelectorAll(Tonic._tags)){if(!a.isTonicComponent)continue;const o=a.getAttribute("id");!o||!Tonic._refIds.includes(o)||(Tonic._states[o]=a.state)}if(t instanceof Tonic.AsyncFunction)return t.call(this,this.html,this.props).then(a=>this._apply(e,a));if(t instanceof Tonic.AsyncFunctionGenerator)return this._drainIterator(e,t.call(this));t===null?this._apply(e,n):t instanceof Function&&this._apply(e,t.call(this,this.html,this.props)||"")}_apply(e,t){if(t&&t.isTonicTemplate?t=t.rawText:typeof t=="string"&&(t=Tonic.escape(t)),typeof t=="string"){if(this.stylesheet&&(t=`<style nonce=${Tonic.nonce||""}>${this.stylesheet()}</style>${t}`),e.querySelector&&(e.querySelector("input")||e.querySelector("textarea")||e.querySelector("select"))&&document.activeElement&&(e.contains(document.activeElement)||e===document.activeElement)){const c=document.createElement("div");c.innerHTML=t,m(e,c,{childrenOnly:!0,onBeforeElUpdated:u((i,l)=>{if(i.isEqualNode&&i.isEqualNode(l))return!1;if(i.tagName==="INPUT"&&l.tagName==="INPUT"){const r=i,d=l;r.value!==""&&(d.value=r.value),document.activeElement===r&&(d.setAttribute("data-preserve-focus","true"),d.setAttribute("data-selection-start",String(r.selectionStart||0)),d.setAttribute("data-selection-end",String(r.selectionEnd||0)))}if(i.tagName==="TEXTAREA"&&l.tagName==="TEXTAREA"){const r=i,d=l;r.value!==""&&(d.value=r.value),document.activeElement===r&&(d.setAttribute("data-preserve-focus","true"),d.setAttribute("data-selection-start",String(r.selectionStart||0)),d.setAttribute("data-selection-end",String(r.selectionEnd||0)))}return!0},"onBeforeElUpdated"),onElUpdated:u(i=>{if(i.hasAttribute("data-preserve-focus")){const l=parseInt(i.getAttribute("data-selection-start")||"0",10),r=parseInt(i.getAttribute("data-selection-end")||"0",10);i.removeAttribute("data-preserve-focus"),i.removeAttribute("data-selection-start"),i.removeAttribute("data-selection-end"),i.focus(),"setSelectionRange"in i&&i.setSelectionRange(l,r)}},"onElUpdated")})}else e.innerHTML=t;if(this.styles){const c=this.styles();for(const i of e.querySelectorAll("[styles]"))for(const l of i.getAttribute("styles").split(/\s+/))Object.assign(i.style,c[l.trim()])}const o=Tonic._children[this._id]||{},s=u((c,i)=>{if(c.nodeType===3){const r=c.textContent.trim();o[r]&&i(c,o[r],r)}const l=c.childNodes;if(l)for(let r=0;r<l.length;r++)s(l[r],i)},"walk");s(e,(c,i,l)=>{for(const r of i)c.parentNode.insertBefore(r,c);delete Tonic._children[this._id][l],c.parentNode.removeChild(c)})}else e.innerHTML="",e.appendChild(t.cloneNode(!0))}connectedCallback(){this.root=this.shadowRoot||this,super.id&&!Tonic._refIds.includes(super.id)&&Tonic._refIds.push(super.id);const e=u(t=>t.replace(/-(.)/g,(n,a)=>a.toUpperCase()),"cc");for(const{name:t,value:n}of this.attributes){const a=e(t),o=this.props[a]=n;if(/__\w+__\w+__/.test(o)){const{1:s}=o.split("__");this.props[a]=Tonic._data[s][o]}else if(/\d+__float/.test(o))this.props[a]=parseFloat(o);else if(o==="null__null")this.props[a]=null;else if(/\w+__boolean/.test(o))this.props[a]=o.includes("true");else if(/placehold:\w+:\w+__/.test(o)){const{1:s}=o.split(":");this.props[a]=Tonic._children[s][o][0]}}if(this.props=Object.assign(this.defaults(),this.props),this._id=this._id||Tonic._createId(),this.willConnect&&this.willConnect(),!!this.isInDocument(this.root)){if(!this.preventRenderOnReconnect){this._source?this.innerHTML=this._source:this._source=this.innerHTML;const t=this._set(this.root,this.render);if(t&&t.then)return t.then(()=>this.connected&&this.connected())}this.connected&&this.connected()}}isInDocument(e){const t=e.getRootNode();return t===document||t.toString()==="[object ShadowRoot]"}disconnectedCallback(){this.disconnected&&this.disconnected(),delete Tonic._data[this._id],delete Tonic._children[this._id]}}export default Tonic;
|
|
3
3
|
//# sourceMappingURL=index.min.js.map
|
package/dist/index.min.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["import morphdom from '@substrate-system/morphdom'\n\nexport class TonicTemplate {\n rawText:string\n unsafe:boolean\n templateStrings?:string[]|TemplateStringsArray|null\n isTonicTemplate:true\n\n constructor (\n rawText,\n templateStrings?:string[]|TemplateStringsArray|null,\n unsafe?:boolean\n ) {\n this.isTonicTemplate = true\n this.unsafe = !!unsafe\n this.rawText = rawText\n this.templateStrings = templateStrings\n }\n\n valueOf () { return this.rawText }\n toString () { return this.rawText }\n}\n\n/**\n * Class Tonic\n *\n * @template {T extends object = Record<string, any>} T Type of the props\n */\nexport abstract class Tonic<\n T extends { [key:string]:any}=Record<string, any>\n> extends window.HTMLElement {\n private static _tags = ''\n private static _refIds:string[] = []\n private static _data = {}\n private static _states = {}\n private static _children = {}\n private static _reg = {}\n private static _stylesheetRegistry:(()=>string)[] = []\n private static _index = 0\n // @ts-expect-error VERSION is injected during build\n static get version () { return VERSION ?? null }\n static get SPREAD () { return /\\.\\.\\.\\s?(__\\w+__\\w+__)/g }\n static get ESC () { return /[\"&'<>`/]/g }\n static get AsyncFunctionGenerator ():AsyncGeneratorFunctionConstructor {\n return (async function * () {\n }.constructor) as AsyncGeneratorFunctionConstructor\n }\n // eslint-disable-next-line\n static get AsyncFunction ():Function {\n return (async function () {}.constructor)\n }\n\n static get MAP () {\n /* eslint-disable object-property-newline, object-property-newline,\n object-curly-newline */\n return { '\"': '"', '&': '&', '\\'': ''', '<': '<',\n '>': '>', '`': '`', '/': '/' }\n }\n\n static ssr\n static nonce\n\n private _state:any\n stylesheet?:()=>string\n styles:()=>string\n props:T\n preventRenderOnReconnect:boolean\n private _id:string\n pendingReRender?:Promise<this>|null\n updated?:((props:Record<string, any>)=>any)\n willRender?:(()=>any)\n root?:ShadowRoot|this\n willConnect?:()=>any\n private _source?:string\n connected?:()=>void\n disconnected?:()=>void\n\n private elements:Element[] & { __children__? }\n private nodes:ChildNode[] & { __children__? }\n private _props = Tonic.getPropertyNames(this)\n\n constructor () {\n super()\n const state = Tonic._states[super.id]\n delete Tonic._states[super.id]\n this._state = state || {}\n this.preventRenderOnReconnect = false\n this.props = {} as T\n this.elements = [...this.children]\n this.elements.__children__ = true\n this.nodes = [...this.childNodes]\n this.nodes.__children__ = true\n this._events()\n }\n\n abstract render ():TonicTemplate|Promise<TonicTemplate>\n\n defaults ():Record<string, any>|undefined {\n return {}\n }\n\n get isTonicComponent ():true {\n return true\n }\n\n /**\n * Get a namespaced event name, given a non-namespaced string.\n *\n * @example\n * MyElement.event('example') // => my-element:example\n *\n * @param {string} type The name of the event\n * @returns {string} The namespaced event name\n */\n static event (type:string):string {\n return `${this.tag}:${type}`\n }\n\n /**\n * Get the tag name of this component.\n */\n static get tag ():string {\n return Tonic.getTagName(this.name)\n }\n\n private static _createId () {\n return `tonic${Tonic._index++}`\n }\n\n private static _normalizeAttrs (o, x = {}) {\n [...o].forEach(o => (x[o.name] = o.value))\n return x\n }\n\n private _checkId () {\n const _id = super.id\n if (!_id) {\n const html = this.outerHTML.replace(this.innerHTML, '...')\n throw new Error(`Component: ${html} has no id`)\n }\n return _id\n }\n\n /**\n * Get the component state property.\n */\n get state () {\n return (this._checkId(), this._state)\n }\n\n set state (newState) {\n this._state = (this._checkId(), newState)\n }\n\n private _events () {\n const hp = Object.getOwnPropertyNames(window.HTMLElement.prototype)\n for (const p of this._props) {\n if (hp.indexOf('on' + p) === -1) continue\n this.addEventListener(p, this)\n }\n }\n\n private _prop (o) {\n const id = this._id\n const p = `__${id}__${Tonic._createId()}__`\n Tonic._data[id] = Tonic._data[id] || {}\n Tonic._data[id][p] = o\n return p\n }\n\n private _placehold (r) {\n const id = this._id\n const ref = `placehold:${id}:${Tonic._createId()}__`\n Tonic._children[id] = Tonic._children[id] || {}\n Tonic._children[id][ref] = r\n return ref\n }\n\n static match (el:HTMLElement, s:string) {\n if (!el.matches) el = el.parentElement!\n return el.matches(s) ? el : el.closest(s)\n }\n\n static getTagName (camelName:string) {\n return camelName.match(/[A-Z][a-z0-9]*/g)!.join('-').toLowerCase()\n }\n\n static getPropertyNames (proto) {\n const props:string[] = []\n while (proto && proto !== Tonic.prototype) {\n props.push(...Object.getOwnPropertyNames(proto))\n proto = Object.getPrototypeOf(proto)\n }\n return props\n }\n\n /**\n * Add a component. Calls `window.customElements.define` with the\n * component's name.\n *\n * @param {Tonic} c Component to add\n * @param {string} [htmlName] Name of the element, default to the class name\n * @returns {Tonic}\n */\n static add (c, htmlName?:string) {\n const hasValidName = htmlName || (c.name && c.name.length > 1)\n if (!hasValidName) {\n throw Error('Mangling. https://bit.ly/2TkJ6zP')\n }\n\n if (!htmlName) htmlName = Tonic.getTagName(c.name)\n if (!Tonic.ssr && window.customElements.get(htmlName)) {\n throw new Error(`Cannot Tonic.add(${c.name}, '${htmlName}') twice`)\n }\n\n if (!c.prototype || !c.prototype.isTonicComponent) {\n const tmp = { [c.name]: class extends Tonic { render } }[c.name]\n tmp.prototype.render = c\n c = tmp\n }\n\n c.prototype._props = Tonic.getPropertyNames(c.prototype)\n\n Tonic._reg[htmlName] = c\n Tonic._tags = Object.keys(Tonic._reg).join()\n window.customElements.define(htmlName, c as unknown as CustomElementConstructor)\n\n if (typeof c.stylesheet === 'function') {\n Tonic.registerStyles(c.stylesheet)\n }\n\n return c\n }\n\n static registerStyles (stylesheetFn:()=>string) {\n if (Tonic._stylesheetRegistry.includes(stylesheetFn)) return\n Tonic._stylesheetRegistry.push(stylesheetFn)\n\n const styleNode = document.createElement('style')\n if (Tonic.nonce) styleNode.setAttribute('nonce', Tonic.nonce)\n styleNode.appendChild(document.createTextNode(stylesheetFn()))\n if (document.head) document.head.appendChild(styleNode)\n }\n\n static escape (s:string):string {\n return s.replace(Tonic.ESC, c => Tonic.MAP[c])\n }\n\n static unsafeRawString (\n s:string,\n templateStrings:string[]\n ):InstanceType<typeof TonicTemplate> {\n return new TonicTemplate(s, templateStrings, true)\n }\n\n /**\n * Emit a regular, non-namespaced event.\n *\n * @param {string} eventName Event name as a string.\n * @param {any} detail Any data to go with the event.\n */\n dispatch (eventName:string, detail:any = null):void {\n const opts = { bubbles: true, detail }\n this.dispatchEvent(new window.CustomEvent(eventName, opts))\n }\n\n /**\n * Emit a namespaced event, using a convention for event names.\n *\n * @example\n * myComponent.emit('test') // => `my-compnent:test`\n *\n * @param {string} type The event type, comes after `:` in event name.\n * @param {string|object|any[]} detail detail for Event constructor\n * @param {{ bubbles?:boolean, cancelable?:boolean }} opts `Cancelable` and\n * `bubbles`\n * @returns {boolean}\n */\n emit (type:string, detail:string|object|any[] = {}, opts:Partial<{\n bubbles:boolean;\n cancelable:boolean\n }> = {}):boolean {\n const namespace = Tonic.getTagName(this.constructor.name)\n const event = new CustomEvent(`${namespace}:${type}`, {\n bubbles: (opts.bubbles === undefined) ? true : opts.bubbles,\n cancelable: (opts.cancelable === undefined) ? true : opts.cancelable,\n detail\n })\n\n return this.dispatchEvent(event)\n }\n\n html (\n strings:string[]|TemplateStringsArray,\n ...values\n ):InstanceType<typeof TonicTemplate> {\n const refs = o => {\n if (o && o.__children__) return this._placehold(o)\n if (o && o.isTonicTemplate) return o.rawText\n switch (Object.prototype.toString.call(o)) {\n case '[object HTMLCollection]':\n case '[object NodeList]': return this._placehold([...o])\n case '[object Array]': {\n if (o.every(x => x.isTonicTemplate && !x.unsafe)) {\n return new TonicTemplate(o.join('\\n'), null, false)\n }\n return this._prop(o)\n }\n case '[object Object]':\n case '[object Function]':\n case '[object AsyncFunction]':\n case '[object Set]':\n case '[object Map]':\n case '[object WeakMap]':\n case '[object File]':\n return this._prop(o)\n case '[object NamedNodeMap]':\n return this._prop(Tonic._normalizeAttrs(o))\n case '[object Number]': return `${o}__float`\n case '[object String]': return Tonic.escape(o)\n case '[object Boolean]': return `${o}__boolean`\n case '[object Null]': return `${o}__null`\n case '[object HTMLElement]':\n return this._placehold([o])\n }\n if (\n typeof o === 'object' && o && o.nodeType === 1 &&\n typeof o.cloneNode === 'function'\n ) {\n return this._placehold([o])\n }\n return o\n }\n\n const out:string[] = []\n for (let i = 0; i < strings.length - 1; i++) {\n out.push(strings[i], refs(values[i]))\n }\n out.push(strings[strings.length - 1])\n\n const htmlStr = out.join('').replace(Tonic.SPREAD, (_, p) => {\n const o = Tonic._data[p.split('__')[1]][p]\n return Object.entries(o).map(([key, value]) => {\n const k = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()\n if (value === true) return k\n else if (value) return `${k}=\"${Tonic.escape(String(value))}\"`\n else return ''\n }).filter(Boolean).join(' ')\n })\n // Process type markers in template content\n .replace(/(\\d+(?:\\.\\d+)?)__float/g, '$1')\n .replace(/(true|false)__boolean/g, '$1')\n .replace(/null__null/g, 'null')\n\n return new TonicTemplate(htmlStr, strings, false)\n }\n\n scheduleReRender (oldProps:any):Promise<this> {\n if (this.pendingReRender) return this.pendingReRender\n\n this.pendingReRender = new Promise(resolve => setTimeout(() => {\n if (!this.isInDocument(this.shadowRoot || this)) return\n const p = this._set(this.shadowRoot || this, this.render)\n this.pendingReRender = null\n\n if (p && p.then) {\n return p.then(() => {\n this.updated && this.updated(oldProps)\n resolve(this)\n })\n }\n\n this.updated && this.updated(oldProps)\n resolve(this)\n }, 0))\n\n return this.pendingReRender\n }\n\n /**\n * Update the view\n */\n reRender (o:T|((props:T)=>T) = this.props):Promise<this> {\n const oldProps = { ...this.props }\n this.props = typeof o === 'function' ? (o as (props:T)=>T)(oldProps) : o\n return this.scheduleReRender(oldProps)\n }\n\n /**\n * If there is a method with the same name as the event type,\n * then call the method.\n * @see {@link https://gomakethings.com/the-handleevent-method-is-the-absolute-best-way-to-handle-events-in-web-components/#what-is-the-handleevent-method What is the handleEvent() method?}\n */\n handleEvent (ev:Event):void {\n this[ev.type] && this[ev.type](ev)\n }\n\n private _drainIterator (target, iterator) {\n return iterator.next().then((result) => {\n this._set(target, null, result.value)\n if (result.done) return\n return this._drainIterator(target, iterator)\n })\n }\n\n /**\n * _set\n * @param {Element|InstanceType<typeof Tonic>|ShadowRoot} target\n * @param {()=>any} render\n * @param {string} content\n * @returns {Promise<void>|void}\n * @private\n */\n private _set (target, render, content = ''):Promise<void>|void {\n this.willRender && this.willRender()\n for (const node of target.querySelectorAll(Tonic._tags)) {\n if (!node.isTonicComponent) continue\n\n const id = node.getAttribute('id')\n if (!id || !Tonic._refIds.includes(id)) continue\n Tonic._states[id] = node.state\n }\n\n if (render instanceof Tonic.AsyncFunction) {\n return ((render as ()=>any)\n .call(this, this.html, this.props)\n .then(content => this._apply(target, content))\n )\n } else if (render instanceof Tonic.AsyncFunctionGenerator) {\n return this._drainIterator(target, (render as AsyncGeneratorFunction).call(this))\n } else if (render === null) {\n this._apply(target, content)\n } else if (render instanceof Function) {\n this._apply(target, render.call(this, this.html, this.props) || '')\n }\n }\n\n private _apply (target, content) {\n if (content && content.isTonicTemplate) {\n content = content.rawText\n } else if (typeof content === 'string') {\n content = Tonic.escape(content)\n }\n\n if (typeof content === 'string') {\n if (this.stylesheet) {\n content = `<style nonce=${Tonic.nonce || ''}>${this.stylesheet()}</style>${content}`\n }\n\n // Check if we should use morphdom for DOM state preservation\n const hasFormElements = target.querySelector && (\n target.querySelector('input') ||\n target.querySelector('textarea') ||\n target.querySelector('select')\n )\n\n const shouldUseMorphdom = (\n hasFormElements &&\n document.activeElement &&\n (\n target.contains(document.activeElement) ||\n target === document.activeElement\n )\n )\n\n if (shouldUseMorphdom) {\n // Use morphdom to preserve DOM state during updates\n const tempContainer = document.createElement('div')\n tempContainer.innerHTML = content\n\n morphdom(target, tempContainer, {\n childrenOnly: true,\n onBeforeElUpdated: (fromEl, toEl) => {\n // Skip updating if the elements are the same and preserve form state\n if (fromEl.isEqualNode && fromEl.isEqualNode(toEl)) {\n return false\n }\n\n // For inputs, preserve value and selection\n if (fromEl.tagName === 'INPUT' && toEl.tagName === 'INPUT') {\n const fromInput = fromEl as HTMLInputElement\n const toInput = toEl as HTMLInputElement\n\n // Preserve form values\n if (fromInput.value !== '') {\n toInput.value = fromInput.value\n }\n\n // Preserve selection/cursor position\n if (document.activeElement === fromInput) {\n toInput.setAttribute('data-preserve-focus', 'true')\n toInput.setAttribute('data-selection-start', String(fromInput.selectionStart || 0))\n toInput.setAttribute('data-selection-end', String(fromInput.selectionEnd || 0))\n }\n }\n\n // For textareas, preserve value and selection\n if (fromEl.tagName === 'TEXTAREA' && toEl.tagName === 'TEXTAREA') {\n const fromTextarea = fromEl as HTMLTextAreaElement\n const toTextarea = toEl as HTMLTextAreaElement\n\n // Preserve form values\n if (fromTextarea.value !== '') {\n toTextarea.value = fromTextarea.value\n }\n\n // Preserve selection/cursor position\n if (document.activeElement === fromTextarea) {\n toTextarea.setAttribute('data-preserve-focus', 'true')\n toTextarea.setAttribute('data-selection-start', String(fromTextarea.selectionStart || 0))\n toTextarea.setAttribute('data-selection-end', String(fromTextarea.selectionEnd || 0))\n }\n }\n\n return true\n },\n\n onElUpdated: (el) => {\n // Restore focus and selection after update\n if (el.hasAttribute('data-preserve-focus')) {\n const startPos = parseInt(el.getAttribute('data-selection-start') || '0', 10)\n const endPos = parseInt(el.getAttribute('data-selection-end') || '0', 10)\n\n // Clean up attributes\n el.removeAttribute('data-preserve-focus')\n el.removeAttribute('data-selection-start')\n el.removeAttribute('data-selection-end')\n\n // Focus and restore selection\n el.focus()\n if ('setSelectionRange' in el) {\n (el as HTMLInputElement|HTMLTextAreaElement).setSelectionRange(startPos, endPos)\n }\n }\n }\n })\n } else {\n // Use original innerHTML approach\n target.innerHTML = content\n }\n\n if (this.styles) {\n const styles = this.styles()\n for (const node of target.querySelectorAll('[styles]')) {\n for (const s of node.getAttribute('styles').split(/\\s+/)) {\n Object.assign(node.style, styles[s.trim()])\n }\n }\n }\n\n const children = Tonic._children[this._id] || {}\n\n const walk = (node, fn) => {\n if (node.nodeType === 3) {\n const id = node.textContent.trim()\n if (children[id]) fn(node, children[id], id)\n }\n\n const childNodes = node.childNodes\n if (!childNodes) return\n\n for (let i = 0; i < childNodes.length; i++) {\n walk(childNodes[i], fn)\n }\n }\n\n walk(target, (node, children, id) => {\n for (const child of children) {\n node.parentNode.insertBefore(child, node)\n }\n delete Tonic._children[this._id][id]\n node.parentNode.removeChild(node)\n })\n } else {\n target.innerHTML = ''\n target.appendChild(content.cloneNode(true))\n }\n }\n\n connectedCallback () {\n this.root = this.shadowRoot || this // here for back compat\n\n if (super.id && !Tonic._refIds.includes(super.id)) {\n Tonic._refIds.push(super.id)\n }\n const cc = s => s.replace(/-(.)/g, (_, m) => m.toUpperCase())\n\n for (const { name: _name, value } of this.attributes) {\n const name = cc(_name)\n const p = (this.props as { [key:string]:any })[name] = value\n\n if (/__\\w+__\\w+__/.test(p)) {\n const { 1: root } = p.split('__');\n (this.props as { [key:string]:any })[name] = Tonic._data[root][p]\n } else if (/\\d+__float/.test(p)) {\n (this.props as { [key:string]:any })[name] = parseFloat(p)\n } else if (p === 'null__null') {\n (this.props as { [key:string]:any })[name] = null\n } else if (/\\w+__boolean/.test(p)) {\n (this.props as { [key:string]:any })[name] = p.includes('true')\n } else if (/placehold:\\w+:\\w+__/.test(p)) {\n const { 1: root } = p.split(':');\n (this.props as { [key:string]:any })[name] =\n Tonic._children[root][p][0]\n }\n }\n\n this.props = Object.assign(\n this.defaults(),\n this.props\n )\n\n this._id = this._id || Tonic._createId()\n\n this.willConnect && this.willConnect()\n\n if (!this.isInDocument(this.root)) return\n if (!this.preventRenderOnReconnect) {\n if (!this._source) {\n this._source = this.innerHTML\n } else {\n this.innerHTML = this._source\n }\n const p = this._set(this.root, this.render)\n if (p && p.then) {\n return p.then(() => this.connected && this.connected())\n }\n }\n\n this.connected && this.connected()\n }\n\n isInDocument (target:HTMLElement|ShadowRoot):boolean {\n const root = target.getRootNode()\n return root === document || root.toString() === '[object ShadowRoot]'\n }\n\n disconnectedCallback ():void {\n this.disconnected && this.disconnected()\n delete Tonic._data[this._id]\n delete Tonic._children[this._id]\n }\n}\n\nexport default Tonic\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["morphdom", "__name", "rawText", "templateStrings", "unsafe", "state", "type", "o", "x", "_id", "html", "newState", "hp", "p", "id", "r", "ref", "el", "s", "camelName", "proto", "props", "c", "htmlName", "tmp", "stylesheetFn", "styleNode", "eventName", "detail", "opts", "namespace", "event", "strings", "values", "refs", "out", "i", "htmlStr", "_", "key", "value", "k", "oldProps", "resolve", "ev", "target", "iterator", "result", "render", "content", "node", "tempContainer", "fromEl", "toEl", "fromInput", "toInput", "fromTextarea", "toTextarea", "startPos", "endPos", "styles", "children", "walk", "fn", "childNodes", "child", "cc", "m", "_name", "name", "root"]
|
|
4
|
+
"sourcesContent": ["import morphdom from '@substrate-system/morphdom'\n\nexport class TonicTemplate {\n rawText:string\n unsafe:boolean\n templateStrings?:string[]|TemplateStringsArray|null\n isTonicTemplate:true\n\n constructor (\n rawText,\n templateStrings?:string[]|TemplateStringsArray|null,\n unsafe?:boolean\n ) {\n this.isTonicTemplate = true\n this.unsafe = !!unsafe\n this.rawText = rawText\n this.templateStrings = templateStrings\n }\n\n valueOf () { return this.rawText }\n toString () { return this.rawText }\n}\n\n/**\n * Class Tonic\n *\n * @template {T extends object = Record<string, any>} T Type of the props\n */\nexport abstract class Tonic<\n T extends { [key:string]:any}=Record<string, any>\n> extends window.HTMLElement {\n private static _tags = ''\n private static _refIds:string[] = []\n private static _data = {}\n private static _states = {}\n private static _children = {}\n private static _reg = {}\n private static _stylesheetRegistry:(()=>string)[] = []\n private static _index = 0\n // @ts-expect-error VERSION is injected during build\n static get version () { return VERSION ?? null }\n static get SPREAD () { return /\\.\\.\\.\\s?(__\\w+__\\w+__)/g }\n static get ESC () { return /[\"&'<>`/]/g }\n static get AsyncFunctionGenerator ():AsyncGeneratorFunctionConstructor {\n return (async function * () {\n }.constructor) as AsyncGeneratorFunctionConstructor\n }\n // eslint-disable-next-line\n static get AsyncFunction ():Function {\n return (async function () {}.constructor)\n }\n\n static get MAP () {\n /* eslint-disable object-property-newline, object-property-newline,\n object-curly-newline */\n return { '\"': '"', '&': '&', '\\'': ''', '<': '<',\n '>': '>', '`': '`', '/': '/' }\n }\n\n static ssr\n static nonce\n\n private _state:any\n stylesheet?:()=>string\n styles:()=>string\n props:T\n preventRenderOnReconnect:boolean\n private _id:string\n pendingReRender?:Promise<this>|null\n updated?:((props:Record<string, any>)=>any)\n willRender?:(()=>any)\n root?:ShadowRoot|this\n willConnect?:()=>any\n private _source?:string\n connected?:()=>void\n disconnected?:()=>void\n\n private elements:Element[] & { __children__? }\n private nodes:ChildNode[] & { __children__? }\n private _props = Tonic.getPropertyNames(this)\n\n constructor () {\n super()\n const state = Tonic._states[super.id]\n delete Tonic._states[super.id]\n this._state = state || {}\n this.preventRenderOnReconnect = false\n this.props = {} as T\n this.elements = [...this.children]\n this.elements.__children__ = true\n this.nodes = [...this.childNodes]\n this.nodes.__children__ = true\n this._events()\n }\n\n abstract render ():TonicTemplate|Promise<TonicTemplate>\n\n defaults ():Record<string, any>|undefined {\n return {}\n }\n\n get isTonicComponent ():true {\n return true\n }\n\n /**\n * Get a namespaced event name, given a non-namespaced string.\n *\n * @example\n * MyElement.event('example') // => my-element:example\n *\n * @param {string} type The name of the event\n * @returns {string} The namespaced event name\n */\n static event (type:string):string {\n return `${this.tag}:${type}`\n }\n\n /**\n * Get the tag name of this component.\n */\n static get tag ():string {\n return Tonic.getTagName(this.name)\n }\n\n private static _createId () {\n return `tonic${Tonic._index++}`\n }\n\n private static _normalizeAttrs (o, x = {}) {\n [...o].forEach(o => (x[o.name] = o.value))\n return x\n }\n\n private _checkId () {\n const _id = super.id\n if (!_id) {\n const html = this.outerHTML.replace(this.innerHTML, '...')\n throw new Error(`Component: ${html} has no id`)\n }\n return _id\n }\n\n /**\n * Get the component state property.\n */\n get state () {\n return (this._checkId(), this._state)\n }\n\n set state (newState) {\n this._state = (this._checkId(), newState)\n }\n\n private _events () {\n const hp = Object.getOwnPropertyNames(window.HTMLElement.prototype)\n // this is where we map methods like `handle_click` to event handlers.\n // look at the HTMLElement prototype, and if it is has a method like\n // `onclick`, then add an event listener for 'click'\n for (const p of this._props) {\n if (!p.includes('handle_')) continue\n const evName = p.split('_')[1]\n\n if (hp.indexOf('on' + evName) === -1) continue\n this.addEventListener(evName, this)\n }\n }\n\n private _prop (o) {\n const id = this._id\n const p = `__${id}__${Tonic._createId()}__`\n Tonic._data[id] = Tonic._data[id] || {}\n Tonic._data[id][p] = o\n return p\n }\n\n private _placehold (r) {\n const id = this._id\n const ref = `placehold:${id}:${Tonic._createId()}__`\n Tonic._children[id] = Tonic._children[id] || {}\n Tonic._children[id][ref] = r\n return ref\n }\n\n static match (el:HTMLElement, s:string) {\n if (!el.matches) el = el.parentElement!\n return el.matches(s) ? el : el.closest(s)\n }\n\n static getTagName (camelName:string) {\n return camelName.match(/[A-Z][a-z0-9]*/g)!.join('-').toLowerCase()\n }\n\n /**\n * Add all methods to this._props\n */\n static getPropertyNames (proto) {\n const props:string[] = []\n while (proto && proto !== Tonic.prototype) {\n props.push(...Object.getOwnPropertyNames(proto))\n proto = Object.getPrototypeOf(proto)\n }\n return props\n }\n\n /**\n * Add a component. Calls `window.customElements.define` with the\n * component's name.\n *\n * @param {Tonic} c Component to add\n * @param {string} [htmlName] Name of the element, default to the class name\n * @returns {Tonic}\n */\n static add (c, htmlName?:string) {\n const hasValidName = htmlName || (c.name && c.name.length > 1)\n if (!hasValidName) {\n throw Error('Mangling. https://bit.ly/2TkJ6zP')\n }\n\n if (!htmlName) htmlName = Tonic.getTagName(c.name)\n if (!Tonic.ssr && window.customElements.get(htmlName)) {\n throw new Error(`Cannot Tonic.add(${c.name}, '${htmlName}') twice`)\n }\n\n if (!c.prototype || !c.prototype.isTonicComponent) {\n const tmp = { [c.name]: class extends Tonic { render } }[c.name]\n tmp.prototype.render = c\n c = tmp\n }\n\n c.prototype._props = Tonic.getPropertyNames(c.prototype)\n\n Tonic._reg[htmlName] = c\n Tonic._tags = Object.keys(Tonic._reg).join()\n window.customElements.define(htmlName, c as unknown as CustomElementConstructor)\n\n if (typeof c.stylesheet === 'function') {\n Tonic.registerStyles(c.stylesheet)\n }\n\n return c\n }\n\n static registerStyles (stylesheetFn:()=>string) {\n if (Tonic._stylesheetRegistry.includes(stylesheetFn)) return\n Tonic._stylesheetRegistry.push(stylesheetFn)\n\n const styleNode = document.createElement('style')\n if (Tonic.nonce) styleNode.setAttribute('nonce', Tonic.nonce)\n styleNode.appendChild(document.createTextNode(stylesheetFn()))\n if (document.head) document.head.appendChild(styleNode)\n }\n\n static escape (s:string):string {\n return s.replace(Tonic.ESC, c => Tonic.MAP[c])\n }\n\n static unsafeRawString (\n s:string,\n templateStrings:string[]\n ):InstanceType<typeof TonicTemplate> {\n return new TonicTemplate(s, templateStrings, true)\n }\n\n /**\n * Emit a regular, non-namespaced event.\n *\n * @param {string} eventName Event name as a string.\n * @param {any} detail Any data to go with the event.\n */\n dispatch (eventName:string, detail:any = null):void {\n const opts = { bubbles: true, detail }\n this.dispatchEvent(new window.CustomEvent(eventName, opts))\n }\n\n /**\n * Emit a namespaced event, using a convention for event names.\n *\n * @example\n * myComponent.emit('test') // => `my-compnent:test`\n *\n * @param {string} type The event type, comes after `:` in event name.\n * @param {string|object|any[]} detail detail for Event constructor\n * @param {{ bubbles?:boolean, cancelable?:boolean }} opts `Cancelable` and\n * `bubbles`\n * @returns {boolean}\n */\n emit (type:string, detail:string|object|any[] = {}, opts:Partial<{\n bubbles:boolean;\n cancelable:boolean\n }> = {}):boolean {\n const namespace = Tonic.getTagName(this.constructor.name)\n const event = new CustomEvent(`${namespace}:${type}`, {\n bubbles: (opts.bubbles === undefined) ? true : opts.bubbles,\n cancelable: (opts.cancelable === undefined) ? true : opts.cancelable,\n detail\n })\n\n return this.dispatchEvent(event)\n }\n\n html (\n strings:string[]|TemplateStringsArray,\n ...values\n ):InstanceType<typeof TonicTemplate> {\n const refs = o => {\n if (o && o.__children__) return this._placehold(o)\n if (o && o.isTonicTemplate) return o.rawText\n switch (Object.prototype.toString.call(o)) {\n case '[object HTMLCollection]':\n case '[object NodeList]': return this._placehold([...o])\n case '[object Array]': {\n if (o.every(x => x.isTonicTemplate && !x.unsafe)) {\n return new TonicTemplate(o.join('\\n'), null, false)\n }\n return this._prop(o)\n }\n case '[object Object]':\n case '[object Function]':\n case '[object AsyncFunction]':\n case '[object Set]':\n case '[object Map]':\n case '[object WeakMap]':\n case '[object File]':\n return this._prop(o)\n case '[object NamedNodeMap]':\n return this._prop(Tonic._normalizeAttrs(o))\n case '[object Number]': return `${o}__float`\n case '[object String]': return Tonic.escape(o)\n case '[object Boolean]': return `${o}__boolean`\n case '[object Null]': return `${o}__null`\n case '[object HTMLElement]':\n return this._placehold([o])\n }\n if (\n typeof o === 'object' && o && o.nodeType === 1 &&\n typeof o.cloneNode === 'function'\n ) {\n return this._placehold([o])\n }\n return o\n }\n\n const out:string[] = []\n for (let i = 0; i < strings.length - 1; i++) {\n out.push(strings[i], refs(values[i]))\n }\n out.push(strings[strings.length - 1])\n\n const htmlStr = out.join('').replace(Tonic.SPREAD, (_, p) => {\n const o = Tonic._data[p.split('__')[1]][p]\n return Object.entries(o).map(([key, value]) => {\n const k = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()\n if (value === true) return k\n else if (value) return `${k}=\"${Tonic.escape(String(value))}\"`\n else return ''\n }).filter(Boolean).join(' ')\n })\n // Process type markers in template content\n .replace(/(\\d+(?:\\.\\d+)?)__float/g, '$1')\n .replace(/(true|false)__boolean/g, '$1')\n .replace(/null__null/g, 'null')\n\n return new TonicTemplate(htmlStr, strings, false)\n }\n\n scheduleReRender (oldProps:any):Promise<this> {\n if (this.pendingReRender) return this.pendingReRender\n\n this.pendingReRender = new Promise(resolve => setTimeout(() => {\n if (!this.isInDocument(this.shadowRoot || this)) return\n const p = this._set(this.shadowRoot || this, this.render)\n this.pendingReRender = null\n\n if (p && p.then) {\n return p.then(() => {\n this.updated && this.updated(oldProps)\n resolve(this)\n })\n }\n\n this.updated && this.updated(oldProps)\n resolve(this)\n }, 0))\n\n return this.pendingReRender\n }\n\n /**\n * Update the view\n */\n reRender (o:T|((props:T)=>T) = this.props):Promise<this> {\n const oldProps = { ...this.props }\n this.props = typeof o === 'function' ? (o as (props:T)=>T)(oldProps) : o\n return this.scheduleReRender(oldProps)\n }\n\n /**\n * If there is a method with the same name as the event type,\n * then call the method.\n * @see {@link https://gomakethings.com/the-handleevent-method-is-the-absolute-best-way-to-handle-events-in-web-components/#what-is-the-handleevent-method What is the handleEvent() method?}\n */\n handleEvent (ev:Event):void {\n this['handle_' + ev.type] && this['handle_' + ev.type](ev)\n }\n\n private _drainIterator (target, iterator) {\n return iterator.next().then((result) => {\n this._set(target, null, result.value)\n if (result.done) return\n return this._drainIterator(target, iterator)\n })\n }\n\n /**\n * _set\n * @param {Element|InstanceType<typeof Tonic>|ShadowRoot} target\n * @param {()=>any} render\n * @param {string} content\n * @returns {Promise<void>|void}\n * @private\n */\n private _set (target, render, content = ''):Promise<void>|void {\n this.willRender && this.willRender()\n for (const node of target.querySelectorAll(Tonic._tags)) {\n if (!node.isTonicComponent) continue\n\n const id = node.getAttribute('id')\n if (!id || !Tonic._refIds.includes(id)) continue\n Tonic._states[id] = node.state\n }\n\n if (render instanceof Tonic.AsyncFunction) {\n return ((render as ()=>any)\n .call(this, this.html, this.props)\n .then(content => this._apply(target, content))\n )\n } else if (render instanceof Tonic.AsyncFunctionGenerator) {\n return this._drainIterator(target, (render as AsyncGeneratorFunction).call(this))\n } else if (render === null) {\n this._apply(target, content)\n } else if (render instanceof Function) {\n this._apply(target, render.call(this, this.html, this.props) || '')\n }\n }\n\n private _apply (target, content) {\n if (content && content.isTonicTemplate) {\n content = content.rawText\n } else if (typeof content === 'string') {\n content = Tonic.escape(content)\n }\n\n if (typeof content === 'string') {\n if (this.stylesheet) {\n content = `<style nonce=${Tonic.nonce || ''}>${this.stylesheet()}</style>${content}`\n }\n\n // Check if we should use morphdom for DOM state preservation\n const hasFormElements = target.querySelector && (\n target.querySelector('input') ||\n target.querySelector('textarea') ||\n target.querySelector('select')\n )\n\n const shouldUseMorphdom = (\n hasFormElements &&\n document.activeElement &&\n (\n target.contains(document.activeElement) ||\n target === document.activeElement\n )\n )\n\n if (shouldUseMorphdom) {\n // Use morphdom to preserve DOM state during updates\n const tempContainer = document.createElement('div')\n tempContainer.innerHTML = content\n\n morphdom(target, tempContainer, {\n childrenOnly: true,\n onBeforeElUpdated: (fromEl, toEl) => {\n // Skip updating if the elements are the same and preserve form state\n if (fromEl.isEqualNode && fromEl.isEqualNode(toEl)) {\n return false\n }\n\n // For inputs, preserve value and selection\n if (fromEl.tagName === 'INPUT' && toEl.tagName === 'INPUT') {\n const fromInput = fromEl as HTMLInputElement\n const toInput = toEl as HTMLInputElement\n\n // Preserve form values\n if (fromInput.value !== '') {\n toInput.value = fromInput.value\n }\n\n // Preserve selection/cursor position\n if (document.activeElement === fromInput) {\n toInput.setAttribute('data-preserve-focus', 'true')\n toInput.setAttribute('data-selection-start', String(fromInput.selectionStart || 0))\n toInput.setAttribute('data-selection-end', String(fromInput.selectionEnd || 0))\n }\n }\n\n // For textareas, preserve value and selection\n if (fromEl.tagName === 'TEXTAREA' && toEl.tagName === 'TEXTAREA') {\n const fromTextarea = fromEl as HTMLTextAreaElement\n const toTextarea = toEl as HTMLTextAreaElement\n\n // Preserve form values\n if (fromTextarea.value !== '') {\n toTextarea.value = fromTextarea.value\n }\n\n // Preserve selection/cursor position\n if (document.activeElement === fromTextarea) {\n toTextarea.setAttribute('data-preserve-focus', 'true')\n toTextarea.setAttribute('data-selection-start', String(fromTextarea.selectionStart || 0))\n toTextarea.setAttribute('data-selection-end', String(fromTextarea.selectionEnd || 0))\n }\n }\n\n return true\n },\n\n onElUpdated: (el) => {\n // Restore focus and selection after update\n if (el.hasAttribute('data-preserve-focus')) {\n const startPos = parseInt(el.getAttribute('data-selection-start') || '0', 10)\n const endPos = parseInt(el.getAttribute('data-selection-end') || '0', 10)\n\n // Clean up attributes\n el.removeAttribute('data-preserve-focus')\n el.removeAttribute('data-selection-start')\n el.removeAttribute('data-selection-end')\n\n // Focus and restore selection\n el.focus()\n if ('setSelectionRange' in el) {\n (el as HTMLInputElement|HTMLTextAreaElement).setSelectionRange(startPos, endPos)\n }\n }\n }\n })\n } else {\n // Use original innerHTML approach\n target.innerHTML = content\n }\n\n if (this.styles) {\n const styles = this.styles()\n for (const node of target.querySelectorAll('[styles]')) {\n for (const s of node.getAttribute('styles').split(/\\s+/)) {\n Object.assign(node.style, styles[s.trim()])\n }\n }\n }\n\n const children = Tonic._children[this._id] || {}\n\n const walk = (node, fn) => {\n if (node.nodeType === 3) {\n const id = node.textContent.trim()\n if (children[id]) fn(node, children[id], id)\n }\n\n const childNodes = node.childNodes\n if (!childNodes) return\n\n for (let i = 0; i < childNodes.length; i++) {\n walk(childNodes[i], fn)\n }\n }\n\n walk(target, (node, children, id) => {\n for (const child of children) {\n node.parentNode.insertBefore(child, node)\n }\n delete Tonic._children[this._id][id]\n node.parentNode.removeChild(node)\n })\n } else {\n target.innerHTML = ''\n target.appendChild(content.cloneNode(true))\n }\n }\n\n connectedCallback () {\n this.root = this.shadowRoot || this // here for back compat\n\n if (super.id && !Tonic._refIds.includes(super.id)) {\n Tonic._refIds.push(super.id)\n }\n const cc = s => s.replace(/-(.)/g, (_, m) => m.toUpperCase())\n\n for (const { name: _name, value } of this.attributes) {\n const name = cc(_name)\n const p = (this.props as { [key:string]:any })[name] = value\n\n if (/__\\w+__\\w+__/.test(p)) {\n const { 1: root } = p.split('__');\n (this.props as { [key:string]:any })[name] = Tonic._data[root][p]\n } else if (/\\d+__float/.test(p)) {\n (this.props as { [key:string]:any })[name] = parseFloat(p)\n } else if (p === 'null__null') {\n (this.props as { [key:string]:any })[name] = null\n } else if (/\\w+__boolean/.test(p)) {\n (this.props as { [key:string]:any })[name] = p.includes('true')\n } else if (/placehold:\\w+:\\w+__/.test(p)) {\n const { 1: root } = p.split(':');\n (this.props as { [key:string]:any })[name] =\n Tonic._children[root][p][0]\n }\n }\n\n this.props = Object.assign(\n this.defaults(),\n this.props\n )\n\n this._id = this._id || Tonic._createId()\n\n this.willConnect && this.willConnect()\n\n if (!this.isInDocument(this.root)) return\n if (!this.preventRenderOnReconnect) {\n if (!this._source) {\n this._source = this.innerHTML\n } else {\n this.innerHTML = this._source\n }\n const p = this._set(this.root, this.render)\n if (p && p.then) {\n return p.then(() => this.connected && this.connected())\n }\n }\n\n this.connected && this.connected()\n }\n\n isInDocument (target:HTMLElement|ShadowRoot):boolean {\n const root = target.getRootNode()\n return root === document || root.toString() === '[object ShadowRoot]'\n }\n\n disconnectedCallback ():void {\n this.disconnected && this.disconnected()\n delete Tonic._data[this._id]\n delete Tonic._children[this._id]\n }\n}\n\nexport default Tonic\n"],
|
|
5
|
+
"mappings": "+EAAA,OAAOA,MAAc,6BAEd,aAAM,aAAc,CAF3B,MAE2B,CAAAC,EAAA,sBAMvB,YACIC,EACAC,EACAC,EACF,CACE,KAAK,gBAAkB,GACvB,KAAK,OAAS,CAAC,CAACA,EAChB,KAAK,QAAUF,EACf,KAAK,gBAAkBC,CAC3B,CAEA,SAAW,CAAE,OAAO,KAAK,OAAQ,CACjC,UAAY,CAAE,OAAO,KAAK,OAAQ,CACtC,CAOO,aAAe,cAEZ,OAAO,WAAY,CAmDzB,aAAe,CACX,MAAM,EAHV,KAAQ,OAAS,MAAM,iBAAiB,IAAI,EAIxC,MAAME,EAAQ,MAAM,QAAQ,MAAM,EAAE,EACpC,OAAO,MAAM,QAAQ,MAAM,EAAE,EAC7B,KAAK,OAASA,GAAS,CAAC,EACxB,KAAK,yBAA2B,GAChC,KAAK,MAAQ,CAAC,EACd,KAAK,SAAW,CAAC,GAAG,KAAK,QAAQ,EACjC,KAAK,SAAS,aAAe,GAC7B,KAAK,MAAQ,CAAC,GAAG,KAAK,UAAU,EAChC,KAAK,MAAM,aAAe,GAC1B,KAAK,QAAQ,CACjB,CA7FJ,MA8B6B,CAAAJ,EAAA,cACzB,YAAe,MAAQ,GACvB,YAAe,QAAmB,CAAC,EACnC,YAAe,MAAQ,CAAC,EACxB,YAAe,QAAU,CAAC,EAC1B,YAAe,UAAY,CAAC,EAC5B,YAAe,KAAO,CAAC,EACvB,YAAe,oBAAqC,CAAC,EACrD,YAAe,OAAS,EAExB,WAAW,SAAW,CAAE,MAAO,QAAgB,CAC/C,WAAW,QAAU,CAAE,MAAO,0BAA2B,CACzD,WAAW,KAAO,CAAE,MAAO,YAAa,CACxC,WAAW,wBAA4D,CACnE,OAAQ,iBAAoB,CAC5B,EAAE,WACN,CAEA,WAAW,eAA0B,CACjC,OAAQ,gBAAkB,CAAC,EAAE,WACjC,CAEA,WAAW,KAAO,CAGd,MAAO,CAAE,IAAK,SAAU,IAAK,QAAS,IAAM,SAAU,IAAK,OACvD,IAAK,OAAQ,IAAK,SAAU,IAAK,QAAS,CAClD,CAwCA,UAA0C,CACtC,MAAO,CAAC,CACZ,CAEA,IAAI,kBAAyB,CACzB,MAAO,EACX,CAWA,OAAO,MAAOK,EAAoB,CAC9B,MAAO,GAAG,KAAK,GAAG,IAAIA,CAAI,EAC9B,CAKA,WAAW,KAAc,CACrB,OAAO,MAAM,WAAW,KAAK,IAAI,CACrC,CAEA,OAAe,WAAa,CACxB,MAAO,QAAQ,MAAM,QAAQ,EACjC,CAEA,OAAe,gBAAiBC,EAAGC,EAAI,CAAC,EAAG,CACvC,OAAC,GAAGD,CAAC,EAAE,QAAQA,GAAMC,EAAED,EAAE,IAAI,EAAIA,EAAE,KAAM,EAClCC,CACX,CAEQ,UAAY,CAChB,MAAMC,EAAM,MAAM,GAClB,GAAI,CAACA,EAAK,CACN,MAAMC,EAAO,KAAK,UAAU,QAAQ,KAAK,UAAW,KAAK,EACzD,MAAM,IAAI,MAAM,cAAcA,CAAI,YAAY,CAClD,CACA,OAAOD,CACX,CAKA,IAAI,OAAS,CACT,OAAQ,KAAK,SAAS,EAAG,KAAK,MAClC,CAEA,IAAI,MAAOE,EAAU,CACjB,KAAK,QAAU,KAAK,SAAS,EAAGA,EACpC,CAEQ,SAAW,CACf,MAAMC,EAAK,OAAO,oBAAoB,OAAO,YAAY,SAAS,EAIlE,UAAWC,KAAK,KAAK,OAAQ,CACzB,GAAI,CAACA,EAAE,SAAS,SAAS,EAAG,SAC5B,MAAMC,EAASD,EAAE,MAAM,GAAG,EAAE,CAAC,EAEzBD,EAAG,QAAQ,KAAOE,CAAM,IAAM,IAClC,KAAK,iBAAiBA,EAAQ,IAAI,CACtC,CACJ,CAEQ,MAAOP,EAAG,CACd,MAAMQ,EAAK,KAAK,IACVF,EAAI,KAAKE,CAAE,KAAK,MAAM,UAAU,CAAC,KACvC,aAAM,MAAMA,CAAE,EAAI,MAAM,MAAMA,CAAE,GAAK,CAAC,EACtC,MAAM,MAAMA,CAAE,EAAEF,CAAC,EAAIN,EACdM,CACX,CAEQ,WAAYG,EAAG,CACnB,MAAMD,EAAK,KAAK,IACVE,EAAM,aAAaF,CAAE,IAAI,MAAM,UAAU,CAAC,KAChD,aAAM,UAAUA,CAAE,EAAI,MAAM,UAAUA,CAAE,GAAK,CAAC,EAC9C,MAAM,UAAUA,CAAE,EAAEE,CAAG,EAAID,EACpBC,CACX,CAEA,OAAO,MAAOC,EAAgBC,EAAU,CACpC,OAAKD,EAAG,UAASA,EAAKA,EAAG,eAClBA,EAAG,QAAQC,CAAC,EAAID,EAAKA,EAAG,QAAQC,CAAC,CAC5C,CAEA,OAAO,WAAYC,EAAkB,CACjC,OAAOA,EAAU,MAAM,iBAAiB,EAAG,KAAK,GAAG,EAAE,YAAY,CACrE,CAKA,OAAO,iBAAkBC,EAAO,CAC5B,MAAMC,EAAiB,CAAC,EACxB,KAAOD,GAASA,IAAU,MAAM,WAC5BC,EAAM,KAAK,GAAG,OAAO,oBAAoBD,CAAK,CAAC,EAC/CA,EAAQ,OAAO,eAAeA,CAAK,EAEvC,OAAOC,CACX,CAUA,OAAO,IAAKC,EAAGC,EAAkB,CAE7B,GAAI,EADiBA,GAAaD,EAAE,MAAQA,EAAE,KAAK,OAAS,GAExD,MAAM,MAAM,kCAAkC,EAIlD,GADKC,IAAUA,EAAW,MAAM,WAAWD,EAAE,IAAI,GAC7C,CAAC,MAAM,KAAO,OAAO,eAAe,IAAIC,CAAQ,EAChD,MAAM,IAAI,MAAM,oBAAoBD,EAAE,IAAI,MAAMC,CAAQ,UAAU,EAGtE,GAAI,CAACD,EAAE,WAAa,CAACA,EAAE,UAAU,iBAAkB,CAC/C,MAAME,EAAM,CAAE,CAACF,EAAE,IAAI,EAAG,cAAc,KAAM,CAAS,CAAE,EAAEA,EAAE,IAAI,EAC/DE,EAAI,UAAU,OAASF,EACvBA,EAAIE,CACR,CAEA,OAAAF,EAAE,UAAU,OAAS,MAAM,iBAAiBA,EAAE,SAAS,EAEvD,MAAM,KAAKC,CAAQ,EAAID,EACvB,MAAM,MAAQ,OAAO,KAAK,MAAM,IAAI,EAAE,KAAK,EAC3C,OAAO,eAAe,OAAOC,EAAUD,CAAwC,EAE3E,OAAOA,EAAE,YAAe,YACxB,MAAM,eAAeA,EAAE,UAAU,EAG9BA,CACX,CAEA,OAAO,eAAgBG,EAAyB,CAC5C,GAAI,MAAM,oBAAoB,SAASA,CAAY,EAAG,OACtD,MAAM,oBAAoB,KAAKA,CAAY,EAE3C,MAAMC,EAAY,SAAS,cAAc,OAAO,EAC5C,MAAM,OAAOA,EAAU,aAAa,QAAS,MAAM,KAAK,EAC5DA,EAAU,YAAY,SAAS,eAAeD,EAAa,CAAC,CAAC,EACzD,SAAS,MAAM,SAAS,KAAK,YAAYC,CAAS,CAC1D,CAEA,OAAO,OAAQR,EAAiB,CAC5B,OAAOA,EAAE,QAAQ,MAAM,IAAKI,GAAK,MAAM,IAAIA,CAAC,CAAC,CACjD,CAEA,OAAO,gBACHJ,EACAhB,EACiC,CACjC,OAAO,IAAI,cAAcgB,EAAGhB,EAAiB,EAAI,CACrD,CAQA,SAAUyB,EAAkBC,EAAa,KAAW,CAChD,MAAMC,EAAO,CAAE,QAAS,GAAM,OAAAD,CAAO,EACrC,KAAK,cAAc,IAAI,OAAO,YAAYD,EAAWE,CAAI,CAAC,CAC9D,CAcA,KAAMxB,EAAauB,EAA6B,CAAC,EAAGC,EAG/C,CAAC,EAAW,CACb,MAAMC,EAAY,MAAM,WAAW,KAAK,YAAY,IAAI,EAClDC,EAAQ,IAAI,YAAY,GAAGD,CAAS,IAAIzB,CAAI,GAAI,CAClD,QAAUwB,EAAK,UAAY,OAAa,GAAOA,EAAK,QACpD,WAAaA,EAAK,aAAe,OAAa,GAAOA,EAAK,WAC1D,OAAAD,CACJ,CAAC,EAED,OAAO,KAAK,cAAcG,CAAK,CACnC,CAEA,KACIC,KACGC,EAC8B,CACjC,MAAMC,EAAOlC,EAAAM,GAAK,CACd,GAAIA,GAAKA,EAAE,aAAc,OAAO,KAAK,WAAWA,CAAC,EACjD,GAAIA,GAAKA,EAAE,gBAAiB,OAAOA,EAAE,QACrC,OAAQ,OAAO,UAAU,SAAS,KAAKA,CAAC,EAAG,CACvC,IAAK,0BACL,IAAK,oBAAqB,OAAO,KAAK,WAAW,CAAC,GAAGA,CAAC,CAAC,EACvD,IAAK,iBACD,OAAIA,EAAE,MAAMC,GAAKA,EAAE,iBAAmB,CAACA,EAAE,MAAM,EACpC,IAAI,cAAcD,EAAE,KAAK;AAAA,CAAI,EAAG,KAAM,EAAK,EAE/C,KAAK,MAAMA,CAAC,EAEvB,IAAK,kBACL,IAAK,oBACL,IAAK,yBACL,IAAK,eACL,IAAK,eACL,IAAK,mBACL,IAAK,gBACD,OAAO,KAAK,MAAMA,CAAC,EACvB,IAAK,wBACD,OAAO,KAAK,MAAM,MAAM,gBAAgBA,CAAC,CAAC,EAC9C,IAAK,kBAAmB,MAAO,GAAGA,CAAC,UACnC,IAAK,kBAAmB,OAAO,MAAM,OAAOA,CAAC,EAC7C,IAAK,mBAAoB,MAAO,GAAGA,CAAC,YACpC,IAAK,gBAAiB,MAAO,GAAGA,CAAC,SACjC,IAAK,uBACD,OAAO,KAAK,WAAW,CAACA,CAAC,CAAC,CAClC,CACA,OACI,OAAOA,GAAM,UAAYA,GAAKA,EAAE,WAAa,GAC7C,OAAOA,EAAE,WAAc,WAEhB,KAAK,WAAW,CAACA,CAAC,CAAC,EAEvBA,CACX,EApCa,QAsCP6B,EAAe,CAAC,EACtB,QAASC,EAAI,EAAGA,EAAIJ,EAAQ,OAAS,EAAGI,IACpCD,EAAI,KAAKH,EAAQI,CAAC,EAAGF,EAAKD,EAAOG,CAAC,CAAC,CAAC,EAExCD,EAAI,KAAKH,EAAQA,EAAQ,OAAS,CAAC,CAAC,EAEpC,MAAMK,EAAUF,EAAI,KAAK,EAAE,EAAE,QAAQ,MAAM,OAAQ,CAACG,EAAG1B,IAAM,CACzD,MAAMN,EAAI,MAAM,MAAMM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,EAAEA,CAAC,EACzC,OAAO,OAAO,QAAQN,CAAC,EAAE,IAAI,CAAC,CAACiC,EAAKC,CAAK,IAAM,CAC3C,MAAMC,EAAIF,EAAI,QAAQ,kBAAmB,OAAO,EAAE,YAAY,EAC9D,OAAIC,IAAU,GAAaC,EAClBD,EAAc,GAAGC,CAAC,KAAK,MAAM,OAAO,OAAOD,CAAK,CAAC,CAAC,IAC/C,EAChB,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAC/B,CAAC,EAEI,QAAQ,0BAA2B,IAAI,EACvC,QAAQ,yBAA0B,IAAI,EACtC,QAAQ,cAAe,MAAM,EAElC,OAAO,IAAI,cAAcH,EAASL,EAAS,EAAK,CACpD,CAEA,iBAAkBU,EAA4B,CAC1C,OAAI,KAAK,gBAAwB,KAAK,iBAEtC,KAAK,gBAAkB,IAAI,QAAQC,GAAW,WAAW,IAAM,CAC3D,GAAI,CAAC,KAAK,aAAa,KAAK,YAAc,IAAI,EAAG,OACjD,MAAM/B,EAAI,KAAK,KAAK,KAAK,YAAc,KAAM,KAAK,MAAM,EAGxD,GAFA,KAAK,gBAAkB,KAEnBA,GAAKA,EAAE,KACP,OAAOA,EAAE,KAAK,IAAM,CAChB,KAAK,SAAW,KAAK,QAAQ8B,CAAQ,EACrCC,EAAQ,IAAI,CAChB,CAAC,EAGL,KAAK,SAAW,KAAK,QAAQD,CAAQ,EACrCC,EAAQ,IAAI,CAChB,EAAG,CAAC,CAAC,EAEE,KAAK,gBAChB,CAKA,SAAUrC,EAAqB,KAAK,MAAqB,CACrD,MAAMoC,EAAW,CAAE,GAAG,KAAK,KAAM,EACjC,YAAK,MAAQ,OAAOpC,GAAM,WAAcA,EAAmBoC,CAAQ,EAAIpC,EAChE,KAAK,iBAAiBoC,CAAQ,CACzC,CAOA,YAAaE,EAAe,CACxB,KAAK,UAAYA,EAAG,IAAI,GAAK,KAAK,UAAYA,EAAG,IAAI,EAAEA,CAAE,CAC7D,CAEQ,eAAgBC,EAAQC,EAAU,CACtC,OAAOA,EAAS,KAAK,EAAE,KAAMC,GAAW,CAEpC,GADA,KAAK,KAAKF,EAAQ,KAAME,EAAO,KAAK,EAChC,CAAAA,EAAO,KACX,OAAO,KAAK,eAAeF,EAAQC,CAAQ,CAC/C,CAAC,CACL,CAUQ,KAAMD,EAAQG,EAAQC,EAAU,GAAuB,CAC3D,KAAK,YAAc,KAAK,WAAW,EACnC,UAAWC,KAAQL,EAAO,iBAAiB,MAAM,KAAK,EAAG,CACrD,GAAI,CAACK,EAAK,iBAAkB,SAE5B,MAAMpC,EAAKoC,EAAK,aAAa,IAAI,EAC7B,CAACpC,GAAM,CAAC,MAAM,QAAQ,SAASA,CAAE,IACrC,MAAM,QAAQA,CAAE,EAAIoC,EAAK,MAC7B,CAEA,GAAIF,aAAkB,MAAM,cACxB,OAASA,EACJ,KAAK,KAAM,KAAK,KAAM,KAAK,KAAK,EAChC,KAAKC,GAAW,KAAK,OAAOJ,EAAQI,CAAO,CAAC,EAE9C,GAAID,aAAkB,MAAM,uBAC/B,OAAO,KAAK,eAAeH,EAASG,EAAkC,KAAK,IAAI,CAAC,EACzEA,IAAW,KAClB,KAAK,OAAOH,EAAQI,CAAO,EACpBD,aAAkB,UACzB,KAAK,OAAOH,EAAQG,EAAO,KAAK,KAAM,KAAK,KAAM,KAAK,KAAK,GAAK,EAAE,CAE1E,CAEQ,OAAQH,EAAQI,EAAS,CAO7B,GANIA,GAAWA,EAAQ,gBACnBA,EAAUA,EAAQ,QACX,OAAOA,GAAY,WAC1BA,EAAU,MAAM,OAAOA,CAAO,GAG9B,OAAOA,GAAY,SAAU,CAqB7B,GApBI,KAAK,aACLA,EAAU,gBAAgB,MAAM,OAAS,EAAE,IAAI,KAAK,WAAW,CAAC,WAAWA,CAAO,IAI9DJ,EAAO,gBAC3BA,EAAO,cAAc,OAAO,GAC5BA,EAAO,cAAc,UAAU,GAC/BA,EAAO,cAAc,QAAQ,IAK7B,SAAS,gBAELA,EAAO,SAAS,SAAS,aAAa,GACtCA,IAAW,SAAS,eAIL,CAEnB,MAAMM,EAAgB,SAAS,cAAc,KAAK,EAClDA,EAAc,UAAYF,EAE1BlD,EAAS8C,EAAQM,EAAe,CAC5B,aAAc,GACd,kBAAmBnD,EAAA,CAACoD,EAAQC,IAAS,CAEjC,GAAID,EAAO,aAAeA,EAAO,YAAYC,CAAI,EAC7C,MAAO,GAIX,GAAID,EAAO,UAAY,SAAWC,EAAK,UAAY,QAAS,CACxD,MAAMC,EAAYF,EACZG,EAAUF,EAGZC,EAAU,QAAU,KACpBC,EAAQ,MAAQD,EAAU,OAI1B,SAAS,gBAAkBA,IAC3BC,EAAQ,aAAa,sBAAuB,MAAM,EAClDA,EAAQ,aAAa,uBAAwB,OAAOD,EAAU,gBAAkB,CAAC,CAAC,EAClFC,EAAQ,aAAa,qBAAsB,OAAOD,EAAU,cAAgB,CAAC,CAAC,EAEtF,CAGA,GAAIF,EAAO,UAAY,YAAcC,EAAK,UAAY,WAAY,CAC9D,MAAMG,EAAeJ,EACfK,EAAaJ,EAGfG,EAAa,QAAU,KACvBC,EAAW,MAAQD,EAAa,OAIhC,SAAS,gBAAkBA,IAC3BC,EAAW,aAAa,sBAAuB,MAAM,EACrDA,EAAW,aAAa,uBAAwB,OAAOD,EAAa,gBAAkB,CAAC,CAAC,EACxFC,EAAW,aAAa,qBAAsB,OAAOD,EAAa,cAAgB,CAAC,CAAC,EAE5F,CAEA,MAAO,EACX,EA3CmB,qBA6CnB,YAAaxD,EAACiB,GAAO,CAEjB,GAAIA,EAAG,aAAa,qBAAqB,EAAG,CACxC,MAAMyC,EAAW,SAASzC,EAAG,aAAa,sBAAsB,GAAK,IAAK,EAAE,EACtE0C,EAAS,SAAS1C,EAAG,aAAa,oBAAoB,GAAK,IAAK,EAAE,EAGxEA,EAAG,gBAAgB,qBAAqB,EACxCA,EAAG,gBAAgB,sBAAsB,EACzCA,EAAG,gBAAgB,oBAAoB,EAGvCA,EAAG,MAAM,EACL,sBAAuBA,GACtBA,EAA4C,kBAAkByC,EAAUC,CAAM,CAEvF,CACJ,EAjBa,cAkBjB,CAAC,CACL,MAEId,EAAO,UAAYI,EAGvB,GAAI,KAAK,OAAQ,CACb,MAAMW,EAAS,KAAK,OAAO,EAC3B,UAAWV,KAAQL,EAAO,iBAAiB,UAAU,EACjD,UAAW3B,KAAKgC,EAAK,aAAa,QAAQ,EAAE,MAAM,KAAK,EACnD,OAAO,OAAOA,EAAK,MAAOU,EAAO1C,EAAE,KAAK,CAAC,CAAC,CAGtD,CAEA,MAAM2C,EAAW,MAAM,UAAU,KAAK,GAAG,GAAK,CAAC,EAEzCC,EAAO9D,EAAA,CAACkD,EAAMa,IAAO,CACvB,GAAIb,EAAK,WAAa,EAAG,CACrB,MAAMpC,EAAKoC,EAAK,YAAY,KAAK,EAC7BW,EAAS/C,CAAE,GAAGiD,EAAGb,EAAMW,EAAS/C,CAAE,EAAGA,CAAE,CAC/C,CAEA,MAAMkD,EAAad,EAAK,WACxB,GAAKc,EAEL,QAAS5B,EAAI,EAAGA,EAAI4B,EAAW,OAAQ5B,IACnC0B,EAAKE,EAAW5B,CAAC,EAAG2B,CAAE,CAE9B,EAZa,QAcbD,EAAKjB,EAAQ,CAACK,EAAMW,EAAU/C,IAAO,CACjC,UAAWmD,KAASJ,EAChBX,EAAK,WAAW,aAAae,EAAOf,CAAI,EAE5C,OAAO,MAAM,UAAU,KAAK,GAAG,EAAEpC,CAAE,EACnCoC,EAAK,WAAW,YAAYA,CAAI,CACpC,CAAC,CACL,MACIL,EAAO,UAAY,GACnBA,EAAO,YAAYI,EAAQ,UAAU,EAAI,CAAC,CAElD,CAEA,mBAAqB,CACjB,KAAK,KAAO,KAAK,YAAc,KAE3B,MAAM,IAAM,CAAC,MAAM,QAAQ,SAAS,MAAM,EAAE,GAC5C,MAAM,QAAQ,KAAK,MAAM,EAAE,EAE/B,MAAMiB,EAAKlE,EAAAkB,GAAKA,EAAE,QAAQ,QAAS,CAACoB,EAAG6B,IAAMA,EAAE,YAAY,CAAC,EAAjD,MAEX,SAAW,CAAE,KAAMC,EAAO,MAAA5B,CAAM,IAAK,KAAK,WAAY,CAClD,MAAM6B,EAAOH,EAAGE,CAAK,EACfxD,EAAK,KAAK,MAA+ByD,CAAI,EAAI7B,EAEvD,GAAI,eAAe,KAAK5B,CAAC,EAAG,CACxB,KAAM,CAAE,EAAG0D,CAAK,EAAI1D,EAAE,MAAM,IAAI,EAC/B,KAAK,MAA+ByD,CAAI,EAAI,MAAM,MAAMC,CAAI,EAAE1D,CAAC,CACpE,SAAW,aAAa,KAAKA,CAAC,EACzB,KAAK,MAA+ByD,CAAI,EAAI,WAAWzD,CAAC,UAClDA,IAAM,aACZ,KAAK,MAA+ByD,CAAI,EAAI,aACtC,eAAe,KAAKzD,CAAC,EAC3B,KAAK,MAA+ByD,CAAI,EAAIzD,EAAE,SAAS,MAAM,UACvD,sBAAsB,KAAKA,CAAC,EAAG,CACtC,KAAM,CAAE,EAAG0D,CAAK,EAAI1D,EAAE,MAAM,GAAG,EAC9B,KAAK,MAA+ByD,CAAI,EACrC,MAAM,UAAUC,CAAI,EAAE1D,CAAC,EAAE,CAAC,CAClC,CACJ,CAWA,GATA,KAAK,MAAQ,OAAO,OAChB,KAAK,SAAS,EACd,KAAK,KACT,EAEA,KAAK,IAAM,KAAK,KAAO,MAAM,UAAU,EAEvC,KAAK,aAAe,KAAK,YAAY,EAEjC,EAAC,KAAK,aAAa,KAAK,IAAI,EAChC,IAAI,CAAC,KAAK,yBAA0B,CAC3B,KAAK,QAGN,KAAK,UAAY,KAAK,QAFtB,KAAK,QAAU,KAAK,UAIxB,MAAMA,EAAI,KAAK,KAAK,KAAK,KAAM,KAAK,MAAM,EAC1C,GAAIA,GAAKA,EAAE,KACP,OAAOA,EAAE,KAAK,IAAM,KAAK,WAAa,KAAK,UAAU,CAAC,CAE9D,CAEA,KAAK,WAAa,KAAK,UAAU,EACrC,CAEA,aAAciC,EAAuC,CACjD,MAAMyB,EAAOzB,EAAO,YAAY,EAChC,OAAOyB,IAAS,UAAYA,EAAK,SAAS,IAAM,qBACpD,CAEA,sBAA6B,CACzB,KAAK,cAAgB,KAAK,aAAa,EACvC,OAAO,MAAM,MAAM,KAAK,GAAG,EAC3B,OAAO,MAAM,UAAU,KAAK,GAAG,CACnC,CACJ,CAEA,eAAe",
|
|
6
|
+
"names": ["morphdom", "__name", "rawText", "templateStrings", "unsafe", "state", "type", "o", "x", "_id", "html", "newState", "hp", "p", "evName", "id", "r", "ref", "el", "s", "camelName", "proto", "props", "c", "htmlName", "tmp", "stylesheetFn", "styleNode", "eventName", "detail", "opts", "namespace", "event", "strings", "values", "refs", "out", "i", "htmlStr", "_", "key", "value", "k", "oldProps", "resolve", "ev", "target", "iterator", "result", "render", "content", "node", "tempContainer", "fromEl", "toEl", "fromInput", "toInput", "fromTextarea", "toTextarea", "startPos", "endPos", "styles", "children", "walk", "fn", "childNodes", "child", "cc", "m", "_name", "name", "root"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
var oe=Object.defineProperty;var d=(n,a)=>oe(n,"name",{value:a,configurable:!0});var J=11;function le(n,a){var e=a.attributes,t,i,r,l,s;if(!(a.nodeType===J||n.nodeType===J)){for(var v=e.length-1;v>=0;v--)t=e[v],i=t.name,r=t.namespaceURI,l=t.value,r?(i=t.localName||i,s=n.getAttributeNS(r,i),s!==l&&(t.prefix==="xmlns"&&(i=t.name),n.setAttributeNS(r,i,l))):(s=n.getAttribute(i),s!==l&&n.setAttribute(i,l));for(var p=n.attributes,g=p.length-1;g>=0;g--)t=p[g],i=t.name,r=t.namespaceURI,r?(i=t.localName||i,a.hasAttributeNS(r,i)||n.removeAttributeNS(r,i)):a.hasAttribute(i)||n.removeAttribute(i)}}d(le,"morphAttrs");var U,de="http://www.w3.org/1999/xhtml",_=typeof document>"u"?void 0:document,ue=!!_&&"content"in _.createElement("template"),pe=!!_&&_.createRange&&"createContextualFragment"in _.createRange();function he(n){var a=_.createElement("template");return a.innerHTML=n,a.content.childNodes[0]}d(he,"createFragmentFromTemplate");function fe(n){U||(U=_.createRange(),U.selectNode(_.body));var a=U.createContextualFragment(n);return a.childNodes[0]}d(fe,"createFragmentFromRange");function ve(n){var a=_.createElement("body");return a.innerHTML=n,a.childNodes[0]}d(ve,"createFragmentFromWrap");function ge(n){return n=n.trim(),ue?he(n):pe?fe(n):ve(n)}d(ge,"toElement");function $(n,a){var e=n.nodeName,t=a.nodeName,i,r;return e===t?!0:(i=e.charCodeAt(0),r=t.charCodeAt(0),i<=90&&r>=97?e===t.toUpperCase():r<=90&&i>=97?t===e.toUpperCase():!1)}d($,"compareNodeNames");function me(n,a){return!a||a===de?_.createElement(n):_.createElementNS(a,n)}d(me,"createElementNS");function ye(n,a){for(var e=n.firstChild;e;){var t=e.nextSibling;a.appendChild(e),e=t}return a}d(ye,"moveChildren");function q(n,a,e){n[e]!==a[e]&&(n[e]=a[e],n[e]?n.setAttribute(e,""):n.removeAttribute(e))}d(q,"syncBooleanAttrProp");var Y={OPTION:d(function(n,a){var e=n.parentNode;if(e){var t=e.nodeName.toUpperCase();t==="OPTGROUP"&&(e=e.parentNode,t=e&&e.nodeName.toUpperCase()),t==="SELECT"&&!e.hasAttribute("multiple")&&(n.hasAttribute("selected")&&!a.selected&&(n.setAttribute("selected","selected"),n.removeAttribute("selected")),e.selectedIndex=-1)}q(n,a,"selected")},"OPTION"),INPUT:d(function(n,a){q(n,a,"checked"),q(n,a,"disabled"),n.value!==a.value&&(n.value=a.value),a.hasAttribute("value")||n.removeAttribute("value")},"INPUT"),TEXTAREA:d(function(n,a){var e=a.value;n.value!==e&&(n.value=e);var t=n.firstChild;if(t){var i=t.nodeValue;if(i==e||!e&&i==n.placeholder)return;t.nodeValue=e}},"TEXTAREA"),SELECT:d(function(n,a){if(!a.hasAttribute("multiple")){for(var e=-1,t=0,i=n.firstChild,r,l;i;)if(l=i.nodeName&&i.nodeName.toUpperCase(),l==="OPTGROUP")r=i,i=r.firstChild,i||(i=r.nextSibling,r=null);else{if(l==="OPTION"){if(i.hasAttribute("selected")){e=t;break}t++}i=i.nextSibling,!i&&r&&(i=r.nextSibling,r=null)}n.selectedIndex=e}},"SELECT")},C=1,Q=11,ee=3,te=8;function S(){}d(S,"noop");function Te(n){if(n)return n.getAttribute&&n.getAttribute("id")||n.id}d(Te,"defaultGetNodeKey");function _e(n){return d(function(e,t,i){if(i||(i={}),typeof t=="string")if(e.nodeName==="#document"||e.nodeName==="HTML"||e.nodeName==="BODY"){var r=t;t=_.createElement("html"),t.innerHTML=r}else t=ge(t);else t.nodeType===Q&&(t=t.firstElementChild);var l=i.getNodeKey||Te,s=i.onBeforeNodeAdded||S,v=i.onNodeAdded||S,p=i.onBeforeElUpdated||S,g=i.onElUpdated||S,h=i.onBeforeNodeDiscarded||S,y=i.onNodeDiscarded||S,ie=i.onBeforeElChildrenUpdated||S,re=i.skipFromChildren||S,X=i.addChild||function(c,o){return c.appendChild(o)},k=i.childrenOnly===!0,R=Object.create(null),O=[];function E(c){O.push(c)}d(E,"addKeyedRemoval");function K(c,o){if(c.nodeType===C)for(var m=c.firstChild;m;){var u=void 0;o&&(u=l(m))?E(u):(y(m),m.firstChild&&K(m,o)),m=m.nextSibling}}d(K,"walkDiscardedChildNodes");function I(c,o,m){h(c)!==!1&&(o&&o.removeChild(c),y(c),K(c,m))}d(I,"removeNode");function F(c){if(c.nodeType===C||c.nodeType===Q)for(var o=c.firstChild;o;){var m=l(o);m&&(R[m]=o),F(o),o=o.nextSibling}}d(F,"indexTree"),F(e);function D(c){v(c);for(var o=c.firstChild;o;){var m=o.nextSibling,u=l(o);if(u){var f=R[u];f&&$(o,f)?(o.parentNode.replaceChild(f,o),L(f,o)):D(o)}else D(o);o=m}}d(D,"handleNodeAdded");function se(c,o,m){for(;o;){var u=o.nextSibling;(m=l(o))?E(m):I(o,c,!0),o=u}}d(se,"cleanupFromEl");function L(c,o,m){var u=l(o);if(u&&delete R[u],!m){var f=p(c,o);if(f===!1||(f instanceof HTMLElement&&(c=f,F(c)),n(c,o),g(c),ie(c,o)===!1))return}c.nodeName!=="TEXTAREA"?ae(c,o):Y.TEXTAREA(c,o)}d(L,"morphEl");function ae(c,o){var m=re(c,o),u=o.firstChild,f=c.firstChild,N,b,x,j,A;e:for(;u;){for(j=u.nextSibling,N=l(u);!m&&f;){if(x=f.nextSibling,u.isSameNode&&u.isSameNode(f)){u=j,f=x;continue e}b=l(f);var H=f.nodeType,w=void 0;if(H===u.nodeType&&(H===C?(N?N!==b&&((A=R[N])?x===A?w=!1:(c.insertBefore(A,f),b?E(b):I(f,c,!0),f=A,b=l(f)):w=!1):b&&(w=!1),w=w!==!1&&$(f,u),w&&L(f,u)):(H===ee||H==te)&&(w=!0,f.nodeValue!==u.nodeValue&&(f.nodeValue=u.nodeValue))),w){u=j,f=x;continue e}b?E(b):I(f,c,!0),f=x}if(N&&(A=R[N])&&$(A,u))m||X(c,A),L(A,u);else{var G=s(u);G!==!1&&(G&&(u=G),u.actualize&&(u=u.actualize(c.ownerDocument||_)),X(c,u),D(u))}u=j,f=x}se(c,f,b);var Z=Y[c.nodeName];Z&&Z(c,o)}d(ae,"morphChildren");var T=e,P=T.nodeType,W=t.nodeType;if(!k){if(P===C)W===C?$(e,t)||(y(e),T=ye(e,me(t.nodeName,t.namespaceURI))):T=t;else if(P===ee||P===te){if(W===P)return T.nodeValue!==t.nodeValue&&(T.nodeValue=t.nodeValue),T;T=t}}if(T===t)y(e);else{if(t.isSameNode&&t.isSameNode(T))return;if(L(T,t,k),O)for(var V=0,ce=O.length;V<ce;V++){var B=R[O[V]];B&&I(B,B.parentNode,!1)}}return!k&&T!==e&&e.parentNode&&(T.actualize&&(T=T.actualize(e.ownerDocument||_)),e.parentNode.replaceChild(T,e)),T},"morphdom")}d(_e,"morphdomFactory");var be=_e(le),ne=be;var M=class{static{d(this,"TonicTemplate")}constructor(a,e,t){this.isTonicTemplate=!0,this.unsafe=!!t,this.rawText=a,this.templateStrings=e}valueOf(){return this.rawText}toString(){return this.rawText}},z=class n extends window.HTMLElement{constructor(){super();this._props=n.getPropertyNames(this);let e=n._states[super.id];delete n._states[super.id],this._state=e||{},this.preventRenderOnReconnect=!1,this.props={},this.elements=[...this.children],this.elements.__children__=!0,this.nodes=[...this.childNodes],this.nodes.__children__=!0,this._events()}static{d(this,"Tonic")}static{this._tags=""}static{this._refIds=[]}static{this._data={}}static{this._states={}}static{this._children={}}static{this._reg={}}static{this._stylesheetRegistry=[]}static{this._index=0}static get version(){return VERSION??null}static get SPREAD(){return/\.\.\.\s?(__\w+__\w+__)/g}static get ESC(){return/["&'<>`/]/g}static get AsyncFunctionGenerator(){return async function*(){}.constructor}static get AsyncFunction(){return async function(){}.constructor}static get MAP(){return{'"':""","&":"&","'":"'","<":"<",">":">","`":"`","/":"/"}}defaults(){return{}}get isTonicComponent(){return!0}static event(e){return`${this.tag}:${e}`}static get tag(){return n.getTagName(this.name)}static _createId(){return`tonic${n._index++}`}static _normalizeAttrs(e,t={}){return[...e].forEach(i=>t[i.name]=i.value),t}_checkId(){let e=super.id;if(!e){let t=this.outerHTML.replace(this.innerHTML,"...");throw new Error(`Component: ${t} has no id`)}return e}get state(){return this._checkId(),this._state}set state(e){this._state=(this._checkId(),e)}_events(){let e=Object.getOwnPropertyNames(window.HTMLElement.prototype);for(let t of this._props){if(!t.includes("handle_"))continue;let i=t.split("_")[1];e.indexOf("on"+i)!==-1&&this.addEventListener(i,this)}}_prop(e){let t=this._id,i=`__${t}__${n._createId()}__`;return n._data[t]=n._data[t]||{},n._data[t][i]=e,i}_placehold(e){let t=this._id,i=`placehold:${t}:${n._createId()}__`;return n._children[t]=n._children[t]||{},n._children[t][i]=e,i}static match(e,t){return e.matches||(e=e.parentElement),e.matches(t)?e:e.closest(t)}static getTagName(e){return e.match(/[A-Z][a-z0-9]*/g).join("-").toLowerCase()}static getPropertyNames(e){let t=[];for(;e&&e!==n.prototype;)t.push(...Object.getOwnPropertyNames(e)),e=Object.getPrototypeOf(e);return t}static add(e,t){if(!(t||e.name&&e.name.length>1))throw Error("Mangling. https://bit.ly/2TkJ6zP");if(t||(t=n.getTagName(e.name)),!n.ssr&&window.customElements.get(t))throw new Error(`Cannot Tonic.add(${e.name}, '${t}') twice`);if(!e.prototype||!e.prototype.isTonicComponent){let r={[e.name]:class extends n{}}[e.name];r.prototype.render=e,e=r}return e.prototype._props=n.getPropertyNames(e.prototype),n._reg[t]=e,n._tags=Object.keys(n._reg).join(),window.customElements.define(t,e),typeof e.stylesheet=="function"&&n.registerStyles(e.stylesheet),e}static registerStyles(e){if(n._stylesheetRegistry.includes(e))return;n._stylesheetRegistry.push(e);let t=document.createElement("style");n.nonce&&t.setAttribute("nonce",n.nonce),t.appendChild(document.createTextNode(e())),document.head&&document.head.appendChild(t)}static escape(e){return e.replace(n.ESC,t=>n.MAP[t])}static unsafeRawString(e,t){return new M(e,t,!0)}dispatch(e,t=null){let i={bubbles:!0,detail:t};this.dispatchEvent(new window.CustomEvent(e,i))}emit(e,t={},i={}){let r=n.getTagName(this.constructor.name),l=new CustomEvent(`${r}:${e}`,{bubbles:i.bubbles===void 0?!0:i.bubbles,cancelable:i.cancelable===void 0?!0:i.cancelable,detail:t});return this.dispatchEvent(l)}html(e,...t){let i=d(s=>{if(s&&s.__children__)return this._placehold(s);if(s&&s.isTonicTemplate)return s.rawText;switch(Object.prototype.toString.call(s)){case"[object HTMLCollection]":case"[object NodeList]":return this._placehold([...s]);case"[object Array]":return s.every(v=>v.isTonicTemplate&&!v.unsafe)?new M(s.join(`
|
|
2
|
+
`),null,!1):this._prop(s);case"[object Object]":case"[object Function]":case"[object AsyncFunction]":case"[object Set]":case"[object Map]":case"[object WeakMap]":case"[object File]":return this._prop(s);case"[object NamedNodeMap]":return this._prop(n._normalizeAttrs(s));case"[object Number]":return`${s}__float`;case"[object String]":return n.escape(s);case"[object Boolean]":return`${s}__boolean`;case"[object Null]":return`${s}__null`;case"[object HTMLElement]":return this._placehold([s])}return typeof s=="object"&&s&&s.nodeType===1&&typeof s.cloneNode=="function"?this._placehold([s]):s},"refs"),r=[];for(let s=0;s<e.length-1;s++)r.push(e[s],i(t[s]));r.push(e[e.length-1]);let l=r.join("").replace(n.SPREAD,(s,v)=>{let p=n._data[v.split("__")[1]][v];return Object.entries(p).map(([g,h])=>{let y=g.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();return h===!0?y:h?`${y}="${n.escape(String(h))}"`:""}).filter(Boolean).join(" ")}).replace(/(\d+(?:\.\d+)?)__float/g,"$1").replace(/(true|false)__boolean/g,"$1").replace(/null__null/g,"null");return new M(l,e,!1)}scheduleReRender(e){return this.pendingReRender?this.pendingReRender:(this.pendingReRender=new Promise(t=>setTimeout(()=>{if(!this.isInDocument(this.shadowRoot||this))return;let i=this._set(this.shadowRoot||this,this.render);if(this.pendingReRender=null,i&&i.then)return i.then(()=>{this.updated&&this.updated(e),t(this)});this.updated&&this.updated(e),t(this)},0)),this.pendingReRender)}reRender(e=this.props){let t={...this.props};return this.props=typeof e=="function"?e(t):e,this.scheduleReRender(t)}handleEvent(e){this["handle_"+e.type]&&this["handle_"+e.type](e)}_drainIterator(e,t){return t.next().then(i=>{if(this._set(e,null,i.value),!i.done)return this._drainIterator(e,t)})}_set(e,t,i=""){this.willRender&&this.willRender();for(let r of e.querySelectorAll(n._tags)){if(!r.isTonicComponent)continue;let l=r.getAttribute("id");!l||!n._refIds.includes(l)||(n._states[l]=r.state)}if(t instanceof n.AsyncFunction)return t.call(this,this.html,this.props).then(r=>this._apply(e,r));if(t instanceof n.AsyncFunctionGenerator)return this._drainIterator(e,t.call(this));t===null?this._apply(e,i):t instanceof Function&&this._apply(e,t.call(this,this.html,this.props)||"")}_apply(e,t){if(t&&t.isTonicTemplate?t=t.rawText:typeof t=="string"&&(t=n.escape(t)),typeof t=="string"){if(this.stylesheet&&(t=`<style nonce=${n.nonce||""}>${this.stylesheet()}</style>${t}`),e.querySelector&&(e.querySelector("input")||e.querySelector("textarea")||e.querySelector("select"))&&document.activeElement&&(e.contains(document.activeElement)||e===document.activeElement)){let v=document.createElement("div");v.innerHTML=t,ne(e,v,{childrenOnly:!0,onBeforeElUpdated:d((p,g)=>{if(p.isEqualNode&&p.isEqualNode(g))return!1;if(p.tagName==="INPUT"&&g.tagName==="INPUT"){let h=p,y=g;h.value!==""&&(y.value=h.value),document.activeElement===h&&(y.setAttribute("data-preserve-focus","true"),y.setAttribute("data-selection-start",String(h.selectionStart||0)),y.setAttribute("data-selection-end",String(h.selectionEnd||0)))}if(p.tagName==="TEXTAREA"&&g.tagName==="TEXTAREA"){let h=p,y=g;h.value!==""&&(y.value=h.value),document.activeElement===h&&(y.setAttribute("data-preserve-focus","true"),y.setAttribute("data-selection-start",String(h.selectionStart||0)),y.setAttribute("data-selection-end",String(h.selectionEnd||0)))}return!0},"onBeforeElUpdated"),onElUpdated:d(p=>{if(p.hasAttribute("data-preserve-focus")){let g=parseInt(p.getAttribute("data-selection-start")||"0",10),h=parseInt(p.getAttribute("data-selection-end")||"0",10);p.removeAttribute("data-preserve-focus"),p.removeAttribute("data-selection-start"),p.removeAttribute("data-selection-end"),p.focus(),"setSelectionRange"in p&&p.setSelectionRange(g,h)}},"onElUpdated")})}else e.innerHTML=t;if(this.styles){let v=this.styles();for(let p of e.querySelectorAll("[styles]"))for(let g of p.getAttribute("styles").split(/\s+/))Object.assign(p.style,v[g.trim()])}let l=n._children[this._id]||{},s=d((v,p)=>{if(v.nodeType===3){let h=v.textContent.trim();l[h]&&p(v,l[h],h)}let g=v.childNodes;if(g)for(let h=0;h<g.length;h++)s(g[h],p)},"walk");s(e,(v,p,g)=>{for(let h of p)v.parentNode.insertBefore(h,v);delete n._children[this._id][g],v.parentNode.removeChild(v)})}else e.innerHTML="",e.appendChild(t.cloneNode(!0))}connectedCallback(){this.root=this.shadowRoot||this,super.id&&!n._refIds.includes(super.id)&&n._refIds.push(super.id);let e=d(t=>t.replace(/-(.)/g,(i,r)=>r.toUpperCase()),"cc");for(let{name:t,value:i}of this.attributes){let r=e(t),l=this.props[r]=i;if(/__\w+__\w+__/.test(l)){let{1:s}=l.split("__");this.props[r]=n._data[s][l]}else if(/\d+__float/.test(l))this.props[r]=parseFloat(l);else if(l==="null__null")this.props[r]=null;else if(/\w+__boolean/.test(l))this.props[r]=l.includes("true");else if(/placehold:\w+:\w+__/.test(l)){let{1:s}=l.split(":");this.props[r]=n._children[s][l][0]}}if(this.props=Object.assign(this.defaults(),this.props),this._id=this._id||n._createId(),this.willConnect&&this.willConnect(),!!this.isInDocument(this.root)){if(!this.preventRenderOnReconnect){this._source?this.innerHTML=this._source:this._source=this.innerHTML;let t=this._set(this.root,this.render);if(t&&t.then)return t.then(()=>this.connected&&this.connected())}this.connected&&this.connected()}}isInDocument(e){let t=e.getRootNode();return t===document||t.toString()==="[object ShadowRoot]"}disconnectedCallback(){this.disconnected&&this.disconnected(),delete n._data[this._id],delete n._children[this._id]}},Ne=z;export{z as Tonic,M as TonicTemplate,Ne as default};
|
|
3
|
+
//# sourceMappingURL=index.min.mjs.map
|